[MLton-commit] r6906
Wesley Terpstra
wesley at mlton.org
Fri Oct 3 16:33:41 PDT 2008
* Upgrade the MLton package scripts to work with WiX version 3.0.
* Change the schema of output xml
* There is no longer a need to hack short filenames, WiX does it right
* The mondo install GUI is now in an extension, not a wixlib
* Fix files2wix's handling of tar files containing ./prefixed files
* Quell WiX warnings about long identifiers (take the 60 character tail)
* Include updated MinGW packages
* Include gdb
* Simplify the makefile by making all packages share the same rule
----------------------------------------------------------------------
U mlton/trunk/package/mingw/Makefile
U mlton/trunk/package/mingw/dirs2wix-filesys.sml
U mlton/trunk/package/mingw/files2wix-component.sml
U mlton/trunk/package/mingw/mlton.wxs
----------------------------------------------------------------------
Modified: mlton/trunk/package/mingw/Makefile
===================================================================
--- mlton/trunk/package/mingw/Makefile 2008-10-03 23:26:39 UTC (rev 6905)
+++ mlton/trunk/package/mingw/Makefile 2008-10-03 23:33:40 UTC (rev 6906)
@@ -1,73 +1,47 @@
-WIX="/c/Program Files/WiX"
-TARDIR=/c/DOCUME~1/terpstra/Desktop/downloads/mingw
-MLTON=mlton
+WIX="/c/Programme/Windows Installer XML v3/bin"
+TARDIR=/c/DOKUME~1/terpstra/Desktop/MinGW
+MLTON=../../build/bin/mlton
-MINGW_RUNTIME=$(TARDIR)/mingw-runtime-3.14.tar.gz
-MINGW_W32API=$(TARDIR)/w32api-3.11.tar.gz
-MINGW_BINUTILS=$(TARDIR)/binutils-2.17.50-20060824-1.tar.gz
-MINGW_GCC=$(TARDIR)/gcc-core-3.4.5-20060117-1.tar.gz
-MINGW_MSYS=$(TARDIR)/msysCORE-1.0.11-2007.01.19-1.tar.bz2
-MINGW_GMP=$(TARDIR)/mingw-gmp-4.2.3-1.tar.gz
-
-MINGW_WXS=mingw-runtime.wxs w32api.wxs binutils.wxs gcc.wxs gmp.wxs msys.wxs
+MINGW_WXS=runtime.wxs w32api.wxs binutils.wxs gcc.wxs gmp.wxs msys.wxs gdb.wxs
MINGW_WIXOBJ=$(patsubst %.wxs,%.wixobj,$(MINGW_WXS))
-mlton.msi: mlton.wixobj self.wixobj dbg.wixobj filesys.wixobj $(MINGW_WIXOBJ)
- $(WIX)/light -out $@ $^ $(WIX)/wixui.wixlib -loc $(WIX)/WixUI_en-us.wxl
+MLton.msi: mlton.wixobj self.wixobj dbg.wixobj filesys.wixobj $(MINGW_WIXOBJ)
+ $(WIX)/light -cultures:en-us -ext WixUIExtension -out $@ $^
clean:
- rm -rf staging mlton.msi *.wixobj *.exe $(MINGW_WXS) self.wxs dbg.wxs filesys.wxs
+ rm -rf staging MLton.msi *.wixobj *.exe $(MINGW_WXS) self.wxs dbg.wxs filesys.wxs
%.wixobj: %.wxs
- $(WIX)/candle $<
+ $(WIX)/candle -ext WixUIExtension $<
%.exe: %.sml
$(MLTON) $<
-# This has to happen after everything else is unpacked
-filesys.wxs: dirs2wix-filesys.exe $(MINGW_WIXOBJ) self.wixobj
- cd staging; find * -type d | ../dirs2wix-filesys > ../$@.tmp
- mv $@.tmp $@
-
-mingw-runtime.wxs: $(MINGW_RUNTIME) self.wxs
- tar tzf $< | ./files2wix-component Runtime > $@.tmp
- cd staging; tar xzf $(MINGW_RUNTIME)
- mv $@.tmp $@
-
-w32api.wxs: $(MINGW_W32API) self.wxs
- tar tzf $< | ./files2wix-component W32API > $@.tmp
- cd staging; tar xzf $(MINGW_W32API)
- mv $@.tmp $@
-
-binutils.wxs: $(MINGW_BINUTILS) self.wxs
- tar tzf $< | grep -v info/dir | ./files2wix-component Binutils > $@.tmp
- cd staging; tar xzf $(MINGW_BINUTILS)
- mv $@.tmp $@
-
-gcc.wxs: $(MINGW_GCC) self.wxs
- tar tzf $< | ./files2wix-component GCC > $@.tmp
- cd staging; tar xzf $(MINGW_GCC)
- mv $@.tmp $@
-
-msys.wxs: $(MINGW_MSYS) self.wxs
- (tar --exclude postinstall -tjf $<; echo bin/bash.exe) | ./files2wix-component MSYS > $@.tmp
- cd staging; tar xjf $(MINGW_MSYS)
- cp staging/bin/sh.exe staging/bin/bash.exe
- mv $@.tmp $@
-
-gmp.wxs: $(MINGW_GMP) self.wxs
- tar tzf $< | ./files2wix-component GMP > $@.tmp
- cd staging; tar xzf $(MINGW_GMP)
- mv $@.tmp $@
-
self.wxs: files2wix-component.exe
rm -rf staging
make -C ../.. PREFIX= install
mv ../../install staging
- cp sml.ico mlb.ico staging/lib/mlton
cd staging; find * -type f ! -name *-gdb.a | ../files2wix-component MLton > ../$@.tmp
mv $@.tmp $@
dbg.wxs: self.wxs
cd staging; find * -type f -name *-gdb.a | ../files2wix-component Debug > ../$@.tmp
mv $@.tmp $@
+
+# This has to happen after everything else is unpacked
+filesys.wxs: dirs2wix-filesys.exe $(MINGW_WIXOBJ) self.wixobj
+ cd staging; find * -type d | ../dirs2wix-filesys > ../$@.tmp
+ mv $@.tmp $@
+
+runtime.wxs: $(TARDIR)/mingwrt-3.15-mingw32-dev.tar.gz self.wxs
+w32api.wxs: $(TARDIR)/w32api-3.12-mingw32-dev.tar.gz self.wxs
+binutils.wxs: $(TARDIR)/binutils-2.18.50-20080109-2-coffgen.tar.gz self.wxs
+gcc.wxs: $(TARDIR)/gcc-core-3.4.5-20060117-3.tar.gz self.wxs
+msys.wxs: $(TARDIR)/msysCORE-1.0.11-20080826.tar.gz self.wxs
+gdb.wxs: $(TARDIR)/gdb-6.8-mingw-3.tar.gz self.wxs
+gmp.wxs: $(TARDIR)/mingw-gmp-4.2.3-1.tar.gz self.wxs
+
+%.wxs:
+ tar --exclude postinstall -tzf $< | ./files2wix-component $(*F) > $@.tmp
+ cd staging; tar -xzf $<
+ mv $@.tmp $@
Modified: mlton/trunk/package/mingw/dirs2wix-filesys.sml
===================================================================
--- mlton/trunk/package/mingw/dirs2wix-filesys.sml 2008-10-03 23:26:39 UTC (rev 6905)
+++ mlton/trunk/package/mingw/dirs2wix-filesys.sml 2008-10-03 23:33:40 UTC (rev 6906)
@@ -1,6 +1,6 @@
val prefix = "\
\<?xml version='1.0' encoding='windows-1252'?>\n\
- \<Wix xmlns='http://schemas.microsoft.com/wix/2003/01/wi'>\n\
+ \<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>\n\
\ <Fragment Id='FragmentFileSys'>\n\
\ <DirectoryRef Id='INSTALLDIR'>\n"
val suffix = "\
@@ -8,8 +8,11 @@
\ </Fragment>\n\
\</Wix>\n"
+fun tail s =
+ if String.size s < 60 then s else
+ String.extract (s, String.size s - 60, NONE)
fun escape c = if Char.isAlphaNum c orelse c = #"." then c else #"_"
-val escape = CharVector.map escape
+val escape = tail o CharVector.map escape
val depth = ref 3
fun pad () = CharVector.tabulate (!depth * 2, fn _ => #" ")
@@ -17,26 +20,13 @@
let
val path = head @ [t]
val paths = String.concatWith "/" path
- val file83 = file83 t
- val long = if file83 = t then "" else " LongName='" ^ t ^ "'"
val () =
print (pad () ^ "<Directory Id='dir." ^ escape paths ^ "' \
- \Name='" ^ file83 ^ "'" ^ long ^ ">\n")
+ \Name='" ^ t ^ "'>\n")
val () = depth := !depth + 1
in
head
end
-and file83 file =
- let
- val {base, ext} = OS.Path.splitBaseExt file
- fun trunc x s = String.substring (s, 0, Int.min (x, String.size s))
- val (base, ext) = (trunc 8 base, Option.map (trunc 3) ext)
- fun crush c = if Char.contains "\\?|><:/*+,;=[] " c then #"_" else c
- val crush = CharVector.map crush
- val (base, ext) = (crush base, Option.map crush ext)
- in
- case ext of NONE => base | SOME ext => base ^ "." ^ ext
- end
fun unindent _ =
(depth := !depth - 1
Modified: mlton/trunk/package/mingw/files2wix-component.sml
===================================================================
--- mlton/trunk/package/mingw/files2wix-component.sml 2008-10-03 23:26:39 UTC (rev 6905)
+++ mlton/trunk/package/mingw/files2wix-component.sml 2008-10-03 23:33:40 UTC (rev 6906)
@@ -6,14 +6,17 @@
val prefix = "\
\<?xml version='1.0' encoding='windows-1252'?>\n\
- \<Wix xmlns='http://schemas.microsoft.com/wix/2003/01/wi'>\n\
+ \<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>\n\
\ <Fragment Id='Fragment" ^ myId ^ "'>\n"
val suffix = "\
\ </Fragment>\n\
\</Wix>\n"
+fun tail s =
+ if String.size s < 60 then s else
+ String.extract (s, String.size s - 60, NONE)
fun escape c = if Char.isAlphaNum c orelse c = #"." then c else #"_"
-val escape = CharVector.map escape
+val escape = tail o CharVector.map escape
fun feature paths =
let
@@ -37,15 +40,13 @@
val dirId = "dir." ^ escape dir
val uglypath = escape path
val guid = guid path
- val file83 = file83 file
in
if file = "" orelse dir = "" then "" else
" <DirectoryRef Id='" ^ dirId ^ "'>\n\
\ <Component Id='component." ^ uglypath ^ "' \
\Guid='" ^ guid ^ "'>\n\
\ <File Id='file." ^ uglypath ^ "' \
- \LongName='" ^ file ^ "' \
- \Name='" ^ file83 ^ "' DiskId='1' Vital='yes' \
+ \Name='" ^ file ^ "' DiskId='1' Vital='yes' \
\Source='staging/" ^ path ^ "' />\n\
\ </Component>\n\
\ </DirectoryRef>\n"
@@ -61,19 +62,12 @@
in
w32 () ^"-"^ w16 () ^"-"^ w16 () ^"-"^ w16 () ^"-"^ w16 () ^ w32 ()
end
-and file83 file =
- let
- val {base, ext} = OS.Path.splitBaseExt file
- fun trunc x s = String.substring (s, 0, Int.min (x, String.size s))
- val (base, ext) = (trunc 8 base, Option.map (trunc 3) ext)
- fun crush c = if Char.contains "\\?|><:/*+,;=[] " c then #"_" else c
- val crush = CharVector.map crush
- val (base, ext) = (crush base, Option.map crush ext)
- in
- case ext of NONE => base | SOME ext => base ^ "." ^ ext
- end
-fun trim path = String.substring (path, 0, String.size path - 1)
+fun tail path = String.substring (path, 0, String.size path - 1)
+fun head path = if String.isPrefix "./" path
+ then String.extract (path, 2, NONE)
+ else path
+val trim = head o tail
fun loop files =
case TextIO.inputLine TextIO.stdIn of NONE => files | SOME path =>
(print (dirEntry (trim path)); loop ((trim path) :: files))
Modified: mlton/trunk/package/mingw/mlton.wxs
===================================================================
--- mlton/trunk/package/mingw/mlton.wxs 2008-10-03 23:26:39 UTC (rev 6905)
+++ mlton/trunk/package/mingw/mlton.wxs 2008-10-03 23:33:40 UTC (rev 6906)
@@ -1,10 +1,10 @@
<?xml version='1.0' encoding='windows-1252'?>
-<Wix xmlns='http://schemas.microsoft.com/wix/2003/01/wi'>
+<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
<Product Name='MLton' Id='E78E6DFD-5738-B137-DD2A-EA81A1A841EC'
UpgradeCode='C353A6D5-4A30-D7CF-62E2-04D98AF8A864'
Language='1033' Codepage='1252' Version='1.0' Manufacturer='MLton.org'>
- <Package Id='????????-????-????-????-????????????' Keywords='Installer'
+ <Package Id='*' Keywords='Installer'
Description="MLton Installer"
Comments='MLton is an open-source, whole-program, optimizing Standard ML compiler.' Manufacturer='MLton.org'
InstallerVersion='100' Languages='1033' Compressed='yes' SummaryCodepage='1252' />
@@ -17,12 +17,15 @@
<Directory Id='INSTALLDIR' Name='MLton' />
</Directory>
- <Directory Id="ProgramMenuFolder" Name="PMenu" LongName="Programs">
+ <Directory Id="ProgramMenuFolder" Name="Programs">
<Directory Id="ProgramMenuDir" Name='MLton'>
<Component Id='component.download.url' Guid='A9C0D185-9520-45FF-1B52-02894D3EAA54'>
+ <RemoveFolder Id='ProgramMenuDir' On='uninstall'/>
+ <RegistryValue Root='HKCU' Key='SOFTWARE\MLton.org\MLton\download' Type='string' Value='' KeyPath='yes' />
<File Id='file.menu_download.url' Name='Download.URL' Source='Download.URL' DiskId='1' Vital='yes' />
</Component>
<Component Id='component.readme.txt' Guid='1FC6B351-547C-A5AB-7F0E-FB153F721170'>
+ <RegistryValue Root='HKCU' Key='SOFTWARE\MLton.org\MLton\readme' Type='string' Value='' KeyPath='yes' />
<File Id='file.menu_readme.txt' Name='Readme.rtf' Source='Readme.rtf' DiskId='1' Vital='yes' />
</Component>
</Directory>
@@ -33,79 +36,87 @@
<DirectoryRef Id='dir.doc_mlton'>
<Component Id='component.documentation' Guid='1E019F99-0424-8133-D4F6-C7DDA0882798'>
- <Shortcut Id='start_docs' Directory='ProgramMenuDir' Name='Docs' LongName='Documentation' Description='The MLton documentation folder'/>
+ <RegistryValue Root='HKCU' Key='SOFTWARE\MLton.org\MLton\docs' Type='string' Value='' KeyPath='yes' />
+ <Shortcut Id='start_docs' Directory='ProgramMenuDir' Name='Documentation' Description='The MLton documentation folder'/>
</Component>
</DirectoryRef>
<DirectoryRef Id='dir.bin'>
<Component Id='component.path' Guid='5B06C123-B426-3D4D-BE48-4D07BAD8A6BA'>
+ <RegistryValue Root='HKCU' Key='SOFTWARE\MLton.org\MLton\path' Type='string' Value='' KeyPath='yes' />
<Environment Id='env.path' Name='PATH' Action='set' Part='last' System='yes' Value='[dir.bin]' />
</Component>
<Component Id='component.bin_mlton.bat' Guid='A2E613BD-41F8-1CF7-D5EA-0C41674D78AC'>
<File Id='file.bin_mlton.bat' Name='mlton.bat' Source='mlton.bat' DiskId='1' Vital='yes' />
- <ProgId Id='MLton.mlbfile' Description='Standard ML basis file'>
+ <File Id='file.bin_sml.ico' Name='sml.ico' Source='sml.ico' DiskId='1' Vital='yes' />
+ <File Id='file.bin_mlb.ico' Name='mlb.ico' Source='mlb.ico' DiskId='1' Vital='yes' />
+ <ProgId Id='MLton.mlbFile' Description='Standard ML basis file' Icon='file.bin_mlb.ico'>
<Extension Id='mlb' ContentType='application/mlb'>
- <Verb Id='buildMLB' Sequence='10' Command='Compile' Target='[!file.bin_mlton.bat]' Argument='-cc-opt -O1 -verbose 1 "%1"' />
+ <Verb Id='buildMLB' Command='Compile' TargetFile='file.bin_mlton.bat' Argument='-cc-opt -O1 -verbose 1 "%1"' />
</Extension>
</ProgId>
- <ProgId Id='MLton.smlfile' Description='Standard ML source file'>
+ <ProgId Id='MLton.smlFile' Description='Standard ML source file' Icon='file.bin_sml.ico'>
<Extension Id='sml' ContentType='application/sml'>
- <Verb Id='buildSML' Sequence='10' Command='Compile' Target='[!file.bin_mlton.bat]' Argument='-cc-opt -O1 -verbose 1 "%1"' />
+ <Verb Id='buildSML' Command='Compile' TargetFile='file.bin_mlton.bat' Argument='-cc-opt -O1 -verbose 1 "%1"' />
</Extension>
</ProgId>
- <Registry Id='SMLIcon1' Root='HKCR' Key='.sml' Action='write' Type='string' Value='MLton.smlfile' />
- <Registry Id='SMLIcon2' Root='HKCR' Key='MLton.smlfile' Action='write' Type='string' Value='Standard ML source file' />
- <Registry Id='SMLIcon3' Root='HKCR' Key='MLton.smlfile\DefaultIcon' Action='write' Type='string' Value='[INSTALLDIR]\lib\mlton\sml.ico' />
- <Registry Id='MLBIcon1' Root='HKCR' Key='.mlb' Action='write' Type='string' Value='MLton.mlbfile' />
- <Registry Id='MLBIcon2' Root='HKCR' Key='MLton.mlbfile' Action='write' Type='string' Value='Standard ML basis file' />
- <Registry Id='MLBIcon3' Root='HKCR' Key='MLton.mlbfile\DefaultIcon' Action='write' Type='string' Value='[INSTALLDIR]\lib\mlton\mlb.ico' />
</Component>
<Component Id='component.bin_msys.bat' Guid='9C492AB5-3C90-66AF-E442-D6B96A9890C4'>
- <File Id='file.bin_msys.bat' Name='msys.bat' Source='msys.bat' DiskId='1' Vital='yes'>
- <Shortcut Id='start_msys' Directory='ProgramMenuDir' Name='MSYS' Description='Unix-like system shell' Icon='msys.ico'>
- <Icon Id='msys.ico' SourceFile='staging/msys.ico'/>
- </Shortcut>
- </File>
+ <File Id='file.bin_msys.bat' Name='msys.bat' Source='msys.bat' DiskId='1' Vital='yes' />
</Component>
+ <Component Id='component.start_msys' Guid='9C4163A5-3C90-6BAF-E442-D6B9619890C2'>
+ <RegistryValue Root='HKCU' Key='SOFTWARE\MLton.org\MLton\msys' Type='string' Value='' KeyPath='yes' />
+ <Shortcut Id='start_msys' Directory='ProgramMenuDir' Name='MSYS' Description='Unix-like system shell' Icon='msys.ico' Target='[#file.bin_msys.bat]'>
+ <Icon Id='msys.ico' SourceFile='staging/msys.ico'/>
+ </Shortcut>
+ </Component>
</DirectoryRef>
- <Feature Id='MLton' Title='MLton' Description='A whole-program optimizing Standard ML compiler.' Display='expand' Level='1' ConfigurableDirectory='INSTALLDIR'>
+ <Feature Id='MLton' Title='MLton' Description='A whole-program optimizing Standard ML compiler.' Display='expand' Level='1' ConfigurableDirectory='INSTALLDIR' AllowAdvertise='no'>
<ComponentGroupRef Id='component.MLton' />
<ComponentRef Id='component.bin_mlton.bat' />
<ComponentRef Id='component.path' />
<ComponentRef Id='component.download.url' />
<ComponentRef Id='component.readme.txt' />
<ComponentRef Id='component.documentation' />
- <Feature Id='Debug' Title='Debug' Description='The MLton runtime libraries with included debug information.' Level='10'>
+ <Feature Id='Debug' Title='Debug' Description='The MLton runtime libraries with included debug information.' Level='10' AllowAdvertise='no'>
<ComponentGroupRef Id='component.Debug' />
</Feature>
</Feature>
- <Feature Id='GMP' Title='GMP' Description='An arbitrary precision integer artihmetic library.' Level='1' ConfigurableDirectory='INSTALLDIR'>
- <ComponentGroupRef Id='component.GMP' />
+ <Feature Id='GMP' Title='GMP' Description='An arbitrary precision integer artihmetic library.' Level='1' ConfigurableDirectory='INSTALLDIR' AllowAdvertise='no'>
+ <ComponentGroupRef Id='component.gmp' />
</Feature>
- <Feature Id='MinGW' Title='MinGW' Description='The minimalist GNU for Windows C compiler toolchain.' Level='1' ConfigurableDirectory='INSTALLDIR'>
- <Feature Id='Runtime' Title='Runtime' Description='An assortment of thin wrappers that provide POSIX-like functionality on a windows platform.' Level='1'>
- <ComponentGroupRef Id='component.Runtime' />
+ <Feature Id='MinGW' Title='MinGW' Description='The minimalist GNU for Windows C compiler toolchain.' Level='1' ConfigurableDirectory='INSTALLDIR' AllowAdvertise='no'>
+ <Feature Id='Runtime' Title='Runtime' Description='An assortment of thin wrappers that provide POSIX-like functionality on a windows platform.' Level='1' AllowAdvertise='no'>
+ <ComponentGroupRef Id='component.runtime' />
</Feature>
- <Feature Id='W32API' Title='Win32 API' Description='Headers and link stub libraries needed to access windows system DLLs.' Level='1'>
- <ComponentGroupRef Id='component.W32API' />
+ <Feature Id='W32API' Title='Win32 API' Description='Headers and link stub libraries needed to access windows system DLLs.' Level='1' AllowAdvertise='no'>
+ <ComponentGroupRef Id='component.w32api' />
</Feature>
- <Feature Id='Binutils' Title='Binutils' Description='Utilities for manipulating object files, such as the linker and assembler.' Level='1'>
+ <Feature Id='Binutils' Title='Binutils' Description='Utilities for manipulating object files, such as the linker and assembler.' Level='1' AllowAdvertise='no'>
<ComponentRef Id='component.path' />
- <ComponentGroupRef Id='component.Binutils' />
+ <ComponentGroupRef Id='component.binutils' />
</Feature>
- <Feature Id='GCC' Title='GCC' Description='The GNU C Compiler. Compiles C files to assembly.' Level='1'>
+ <Feature Id='GCC' Title='GCC' Description='The GNU C Compiler. Compiles C files to assembly.' Level='1' AllowAdvertise='no'>
<ComponentRef Id='component.path' />
- <ComponentGroupRef Id='component.GCC' />
+ <ComponentGroupRef Id='component.gcc' />
</Feature>
- <Feature Id='MSYS' Title='MSYS' Description='A system shell along with UNIX-style command-line utilities.' Level='1'>
+ <Feature Id='MSYS' Title='MSYS' Description='A system shell along with UNIX-style command-line utilities.' Level='1' AllowAdvertise='no'>
+ <ComponentRef Id='component.start_msys' />
<ComponentRef Id='component.bin_msys.bat' />
<ComponentRef Id='component.path' />
- <ComponentGroupRef Id='component.MSYS' />
+ <ComponentGroupRef Id='component.msys' />
</Feature>
+ <Feature Id='GDB' Title='GDB' Description='A command-line operated program debugger.' Level='10' AllowAdvertise='no'>
+ <ComponentRef Id='component.path' />
+ <ComponentGroupRef Id='component.gdb' />
+ </Feature>
</Feature>
<UIRef Id="WixUI_Mondo" />
- <UIRef Id="WixUI_ErrorProgressText" />
+ <WixVariable Id="WixUIBannerBmp" Value="Bitmaps/bannrbmp.bmp" />
+ <WixVariable Id="WixUIDialogBmp" Value="Bitmaps/dlgbmp.bmp" />
+ <WixVariable Id="WixUILicenseRtf" Value="License.rtf" />
+ <Property Id='WIXUI_INSTALLDIR' Value='INSTALLDIR' />
</Product>
</Wix>
More information about the MLton-commit
mailing list