From f24bf3d47e3dbc2f0b316b95a1f032a37832244d Mon Sep 17 00:00:00 2001 From: Mark Sibly Date: Wed, 29 Jan 2014 13:11:47 +1300 Subject: [PATCH] Updated some stuff. --- .gitignore | 1 + _src/linux_x86/bin/bmk | Bin 204416 -> 204456 bytes src/bmk/bmk_util.bmx | 720 +++++++++++++++++++++-------------------- 3 files changed, 362 insertions(+), 359 deletions(-) diff --git a/.gitignore b/.gitignore index e359f8a..b357e11 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ /cfg/* /tmp/* /doc/* +/src/createrelease/BlitzMax/* !/doc/bmxstyle.css /docs/html *.x86.s diff --git a/_src/linux_x86/bin/bmk b/_src/linux_x86/bin/bmk index 7cc20f968710b6b5694f1d314b15be8b5e3baa29..1ca2d5ee41b811ae378297f1b633a504800f8bd8 100644 GIT binary patch delta 34063 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

+HCUyk2~7ya@ES<1y>E@JsQC_aNSR5(3@A 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 delta 34111 zcmcJ23tUvy+WxG~FpN411}G{5Dk=&pUQkd_P*gO{Q4qYKqG?TP<^_rh9TX@g(6CV# zmU&4_EG-QU%1f9gbdGhjV@YX+Wwi|}ODj$x^MBs8*XH6m-}yS<_x?Ndk>Txw`3o;6a}$!8@t_Wx;kGmT%Eu1sm`Wj`wWJfu#GR@)2h6mVkkdgGM76U z<34#Mo?phjmKt@sUylOI=KbqWg&%mibU#Zs4Xi2gFdGd9LwiFPLvJ^Op`saof*B0) zD@;=FWtgNG45v${ng^TiA~W|zUp(UkT+TCo``YL!s#;9FtiPP!V%})jE^2sx} zOlF8Y%u&@V)idr_OPpu@HnN1$xt;#u-u0!GsAU≈Do5$E4up>)$}a;0n$&l%@v` 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 S&;8sCKZ&|%U$g+y=l=nj652%o diff --git a/src/bmk/bmk_util.bmx b/src/bmk/bmk_util.bmx index 5c122d8..0e1274b 100644 --- a/src/bmk/bmk_util.bmx +++ b/src/bmk/bmk_util.bmx @@ -1,359 +1,361 @@ - -Strict - -Import "bmk_config.bmx" - -'OS X Nasm doesn't work? Used to produce incorrect reloc offsets - haven't checked for a while -Const USE_NASM=False - -Const CC_WARNINGS=False'True - -Type TModOpt ' BaH - Field cc_opts:String = "" - Field ld_opts:TList = New TList - - Method addOption(qval:String) - If qval.startswith("CC_OPTS") Then - cc_opts:+ " " + qval[qval.find(":") + 1..].Trim() - ElseIf qval.startswith("LD_OPTS") Then - Local opt:String = qval[qval.find(":") + 1..].Trim() - - If opt.startsWith("-L") Then - opt = "-L" + CQuote(opt[2..]) - End If - - ld_opts.addLast opt - End If - End Method - - Method hasCCopt:Int(value:String) - Return cc_opts.find(value) >= 0 - End Method - - Method hasLDopt:Int(value:String) - For Local opt:String = EachIn ld_opts - If opt.find(value) >= 0 Then - Return True - End If - Next - Return False - End Method - - Function setPath:String(value:String, path:String) - Return value.Replace("%PWD%", path) - End Function - -End Type - -Global mod_opts:TModOpt ' BaH - -Function Match( ext$,pat$ ) - Return (";"+pat+";").Find( ";"+ext+";" )<>-1 -End Function - -Function HTTPEsc$( t$ ) - t=t.Replace( " ","%20" ) - Return t -End Function - -Function Sys( cmd$ ) - If opt_verbose - Print cmd - Else If opt_dumpbuild - Local p$=cmd - p=p.Replace( BlitzMaxPath()+"/","./" ) - WriteStdout p+"~n" - Local t$="mkdir " - If cmd.StartsWith( t ) And FileType( cmd[t.length..] ) Return - EndIf - Return system_( cmd ) -End Function - -Function CQuote$( t$ ) - If t And t[0]=Asc("-") Return t - For Local i=0 Until t.length - If t[i]=Asc(".") Continue - If t[i]=Asc("/") Continue -?Win32 - If t[i]=Asc("\") Continue -? - If t[i]=Asc("_") Or t[i]=Asc("-") Continue - If t[i]>=Asc("0") And t[i]<=Asc("9") Continue - If t[i]>=Asc("A") And t[i]<=Asc("Z") Continue - If t[i]>=Asc("a") And t[i]<=Asc("z") Continue - Return "~q"+t+"~q" - Next - Return t -End Function - -Function Ranlib( dir$ ) - ' -?MacOS - If macos_version>=$1040 Return -? - ' - For Local f$=EachIn LoadDir( dir ) - Local p$=dir+"/"+f - Select FileType( p ) - Case FILETYPE_DIR - Ranlib p - Case FILETYPE_FILE - If ExtractExt(f).ToLower()="a" Sys "ranlib "+p - End Select - Next -End Function - -Function Assemble( src$,obj$ ) - DeleteFile obj - Local cmd$ -?MacOS - If opt_arch="ppc" - cmd="as -arch ppc" - Else - If USE_NASM - cmd="nasm -f macho" - Else - cmd="as -arch i386" - EndIf - EndIf - cmd:+" -W -o "+CQuote(obj)+" "+CQuote(src); -?Win32 - cmd$=CQuote(BlitzMaxPath()+"/bin/fasm")+" "+CQuote(src)+" "+CQuote(obj) -?Linux - cmd$=CQuote(BlitzMaxPath()+"/bin/fasm")+" -m32768 "+CQuote(src)+" "+CQuote(obj) -? - If Sys( cmd ) - Throw "Build Error: Failed to assemble "+src - EndIf -End Function - -Function CompileC( src$,obj$,opts$ ) - DeleteFile obj - - Local t$=getenv_( "BMK_CC_OPTS" ) - If t opts:+" "+t - - Local cmd$="gcc" - If ExtractExt(src)="cpp" Or ExtractExt(src)="cc" Or ExtractExt(src)="cxx" Or ExtractExt(src)="mm" - cmd="g++" - Else - If CC_WARNINGS opts:+" -Wimplicit-function-declaration" - EndIf - - If Not CC_WARNINGS opts:+" -w" - -?MacOS - If opt_arch="ppc" - opts:+" -arch ppc" - Else - opts:+" -arch i386" - EndIf - If macos_version>=$1070 'Lion? - opts:+" -mmacosx-version-min=10.4" '...can build for Tiger++ - Else If macos_version>=$1040 'Tiger? - opts:+" -mmacosx-version-min=10.3" '...can build for Panther++ - EndIf -?Win32 - If Not mod_opts Or Not mod_opts.hasCCopt("-march") - opts:+" -march=pentium" - EndIf - opts:+" -ffast-math" -?Linux - opts:+" -m32 -mfancy-math-387 -fno-strict-aliasing" -? - If mod_opts - If Not mod_opts.hasCCopt("-fexceptions") - opts:+" -fno-exceptions" - EndIf - opts:+ " " + mod_opts.cc_opts ' BaH - Else - opts:+" -fno-exceptions" - EndIf - - cmd:+opts+" -c -o "+CQuote(obj)+" "+CQuote(src) - - If Sys( cmd ) - Throw "Build Error: failed to compile "+src - EndIf -End Function - -Function CompileBMX( src$,obj$,opts$ ) - DeleteFile obj - - Local azm$=StripExt(obj)+".s" -?MacOs - Local cmd$=CQuote(BlitzMaxPath()+"/bin/bcc")+opts+" -o "+CQuote(azm)+" "+CQuote(src) -?Win32 - Local cmd$=CQuote(BlitzMaxPath()+"/bin/bcc")+opts+" -o "+CQuote(azm)+" "+CQuote(src) -?Linux - Local cmd$=CQuote(BlitzMaxPath()+"/bin/bcc")+opts+" -o "+CQuote(azm)+" "+CQuote(src) -? - If Sys( cmd ) - Throw "Build Error: failed to compile "+src - EndIf -?MacOs - If opt_arch="x86" - If Not USE_NASM - Local cmd$=CQuote(BlitzMaxPath()+"/bin/fasm2as")+" "+CQuote(azm) - If Sys( cmd ) Throw "Fasm2as failed - please contact BRL!" - EndIf - EndIf -? - Assemble azm,obj - -End Function - -Function CreateArc( path$ , oobjs:TList ) - DeleteFile path - Local cmd$,t$ -?Win32 - For t$=EachIn oobjs - If Len(cmd)+Len(t)>1000 - If Sys( cmd ) - DeleteFile path - Throw "Build Error: Failed to create archive "+path - EndIf - cmd="" - EndIf - If Not cmd cmd="ar -r "+CQuote(path) - cmd:+" "+CQuote(t) - Next -?MacOS - cmd="libtool -o "+CQuote(path) - For Local t$=EachIn oobjs - cmd:+" "+CQuote(t) - Next -?Linux - For Local t$=EachIn oobjs - If Len(cmd)+Len(t)>1000 - If Sys( cmd ) - DeleteFile path - Throw "Build Error: Failed to create archive "+path - EndIf - cmd="" - EndIf - If Not cmd cmd="ar -r "+CQuote(path) - cmd:+" "+CQuote(t) - Next -? - If cmd And Sys( cmd ) - DeleteFile path - Throw "Build Error: Failed to create archive "+path - EndIf -End Function - -Function LinkApp( path$,lnk_files:TList,makelib ) - DeleteFile path - - Local cmd$ - Local files$ - Local tmpfile$=BlitzMaxPath()+"/tmp/ld.tmp" -?MacOS - cmd="g++" - - If opt_arch="ppc" - cmd:+" -arch ppc" - Else - cmd:+" -arch i386 -read_only_relocs suppress" - EndIf - - If macos_version>=$1070 'Lion? - cmd:+" -mmacosx-version-min=10.4" '...can build for Tiger++ - Else If macos_version>=$1040 'Tiger? - cmd:+" -mmacosx-version-min=10.3" '...can build for Panther++ - EndIf - - cmd:+" -o "+CQuote( path ) - cmd:+" "+CQuote( "-L"+CQuote( BlitzMaxPath()+"/lib" ) ) - - If Not opt_dumpbuild cmd:+" -filelist "+CQuote( tmpfile ) - - For Local t$=EachIn lnk_files - If opt_dumpbuild Or (t[..1]="-") - cmd:+" "+t - Else - files:+t+Chr(10) - EndIf - Next - cmd:+" -lSystem -framework CoreServices -framework CoreFoundation" -?Win32 - cmd=CQuote(BlitzMaxPath()+"/bin/ld.exe")+" -s -stack 4194304" 'symbol stripping enabled - If opt_apptype="gui" cmd:+" -subsystem windows" - If makelib cmd:+" -shared" - - cmd:+" -o "+CQuote( path ) - cmd:+" "+CQuote( "-L"+CQuote( BlitzMaxPath()+"/lib" ) ) - - If makelib - Local imp$=StripExt(path)+".a" - Local def$=StripExt(path)+".def" - If FileType( def )<>FILETYPE_FILE Throw "Cannot locate .def file" - cmd:+" "+def - cmd:+" --out-implib "+imp - files:+"~n"+CQuote( BlitzMaxPath()+"/lib/dllcrt2.o" ) - Else - files:+"~n"+CQuote( BlitzMaxPath()+"/lib/crtbegin.o" ) - files:+"~n"+CQuote( BlitzMaxPath()+"/lib/crt2.o" ) - EndIf - - 'Unholy!!!!! - Local xpmanifest$ - For Local f$=EachIn lnk_files - Local t$=CQuote( f ) - If opt_dumpbuild Or (t[..1]="-" And t[..2]<>"-l") - cmd:+" "+t - Else - If f.EndsWith( "/win32maxguiex.mod/xpmanifest.o" ) - xpmanifest=t - Else - files:+"~n"+t - EndIf - EndIf - Next - - If xpmanifest files:+"~n"+xpmanifest - - cmd:+" "+CQuote( tmpfile ) - - files:+"~n-lgdi32 -lwsock32 -lwinmm -ladvapi32" - files:+" -lstdc++ -lgcc -lmingwex -lmingw32 -lmoldname -lmsvcrt -luser32 -lkernel32" - - If Not makelib - files:+" "+CQuote( BlitzMaxPath()+"/lib/crtend.o" ) - EndIf - - files="INPUT("+files+")" -?Linux - - cmd="g++" - cmd:+" -m32 -s -Os -pthread" - cmd:+" -o "+CQuote( path ) - cmd:+" "+CQuote( tmpfile ) - cmd:+" -L/usr/lib32" - cmd:+" -L/usr/X11R6/lib" - cmd:+" -L/usr/lib" - cmd:+" -L"+CQuote( BlitzMaxPath()+"/lib" ) - - For Local t$=EachIn lnk_files - t=CQuote(t) - If opt_dumpbuild Or (t[..1]="-" And t[..2]<>"-l") - cmd:+" "+t - Else - files:+" "+t - EndIf - Next - - files="INPUT("+files+")" -? - Local t$=getenv_( "BMK_LD_OPTS" ) - If t - cmd:+" "+t - EndIf - - Local stream:TStream=WriteStream( tmpfile ) - stream.WriteBytes files.ToCString(),files.length - stream.Close - - If Sys( cmd ) Throw "Build Error: Failed to link "+path - -End Function + +Strict + +Import "bmk_config.bmx" + +'OS X Nasm doesn't work? Used to produce incorrect reloc offsets - haven't checked for a while +Const USE_NASM=False + +Const CC_WARNINGS=False'True + +Type TModOpt ' BaH + Field cc_opts:String = "" + Field ld_opts:TList = New TList + + Method addOption(qval:String) + If qval.startswith("CC_OPTS") Then + cc_opts:+ " " + qval[qval.find(":") + 1..].Trim() + ElseIf qval.startswith("LD_OPTS") Then + Local opt:String = qval[qval.find(":") + 1..].Trim() + + If opt.startsWith("-L") Then + opt = "-L" + CQuote(opt[2..]) + End If + + ld_opts.addLast opt + End If + End Method + + Method hasCCopt:Int(value:String) + Return cc_opts.find(value) >= 0 + End Method + + Method hasLDopt:Int(value:String) + For Local opt:String = EachIn ld_opts + If opt.find(value) >= 0 Then + Return True + End If + Next + Return False + End Method + + Function setPath:String(value:String, path:String) + Return value.Replace("%PWD%", path) + End Function + +End Type + +Global mod_opts:TModOpt ' BaH + +Function Match( ext$,pat$ ) + Return (";"+pat+";").Find( ";"+ext+";" )<>-1 +End Function + +Function HTTPEsc$( t$ ) + t=t.Replace( " ","%20" ) + Return t +End Function + +Function Sys( cmd$ ) + If opt_verbose + Print cmd + Else If opt_dumpbuild + Local p$=cmd + p=p.Replace( BlitzMaxPath()+"/","./" ) + WriteStdout p+"~n" + Local t$="mkdir " + If cmd.StartsWith( t ) And FileType( cmd[t.length..] ) Return + EndIf + Return system_( cmd ) +End Function + +Function CQuote$( t$ ) + If t And t[0]=Asc("-") Return t + For Local i=0 Until t.length + If t[i]=Asc(".") Continue + If t[i]=Asc("/") Continue +?Win32 + If t[i]=Asc("\") Continue +? + If t[i]=Asc("_") Or t[i]=Asc("-") Continue + If t[i]>=Asc("0") And t[i]<=Asc("9") Continue + If t[i]>=Asc("A") And t[i]<=Asc("Z") Continue + If t[i]>=Asc("a") And t[i]<=Asc("z") Continue + Return "~q"+t+"~q" + Next + Return t +End Function + +Function Ranlib( dir$ ) + ' +?MacOS + If macos_version>=$1040 Return +? + ' + For Local f$=EachIn LoadDir( dir ) + Local p$=dir+"/"+f + Select FileType( p ) + Case FILETYPE_DIR + Ranlib p + Case FILETYPE_FILE + If ExtractExt(f).ToLower()="a" Sys "ranlib "+p + End Select + Next +End Function + +Function Assemble( src$,obj$ ) + DeleteFile obj + Local cmd$ +?MacOS + If opt_arch="ppc" + cmd="as -arch ppc" + Else + If USE_NASM + cmd="nasm -f macho" + Else + cmd="as -arch i386" + EndIf + EndIf + cmd:+" -W -o "+CQuote(obj)+" "+CQuote(src); +?Win32 + cmd$=CQuote(BlitzMaxPath()+"/bin/fasm")+" "+CQuote(src)+" "+CQuote(obj) +?Linux + Local opts$=getenv_( "BMK_FASM_OPTS" ) + If opts="" opts="-m1048560" + cmd$=CQuote(BlitzMaxPath()+"/bin/fasm")+" "+opts+" "+CQuote(src)+" "+CQuote(obj) +? + If Sys( cmd ) + Throw "Build Error: Failed to assemble "+src + EndIf +End Function + +Function CompileC( src$,obj$,opts$ ) + DeleteFile obj + + Local t$=getenv_( "BMK_CC_OPTS" ) + If t opts:+" "+t + + Local cmd$="gcc" + If ExtractExt(src)="cpp" Or ExtractExt(src)="cc" Or ExtractExt(src)="cxx" Or ExtractExt(src)="mm" + cmd="g++" + Else + If CC_WARNINGS opts:+" -Wimplicit-function-declaration" + EndIf + + If Not CC_WARNINGS opts:+" -w" + +?MacOS + If opt_arch="ppc" + opts:+" -arch ppc" + Else + opts:+" -arch i386" + EndIf + If macos_version>=$1070 'Lion? + opts:+" -mmacosx-version-min=10.4" '...can build for Tiger++ + Else If macos_version>=$1040 'Tiger? + opts:+" -mmacosx-version-min=10.3" '...can build for Panther++ + EndIf +?Win32 + If Not mod_opts Or Not mod_opts.hasCCopt("-march") + opts:+" -march=pentium" + EndIf + opts:+" -ffast-math" +?Linux + opts:+" -m32 -mfancy-math-387 -fno-strict-aliasing" +? + If mod_opts + If Not mod_opts.hasCCopt("-fexceptions") + opts:+" -fno-exceptions" + EndIf + opts:+ " " + mod_opts.cc_opts ' BaH + Else + opts:+" -fno-exceptions" + EndIf + + cmd:+opts+" -c -o "+CQuote(obj)+" "+CQuote(src) + + If Sys( cmd ) + Throw "Build Error: failed to compile "+src + EndIf +End Function + +Function CompileBMX( src$,obj$,opts$ ) + DeleteFile obj + + Local azm$=StripExt(obj)+".s" +?MacOs + Local cmd$=CQuote(BlitzMaxPath()+"/bin/bcc")+opts+" -o "+CQuote(azm)+" "+CQuote(src) +?Win32 + Local cmd$=CQuote(BlitzMaxPath()+"/bin/bcc")+opts+" -o "+CQuote(azm)+" "+CQuote(src) +?Linux + Local cmd$=CQuote(BlitzMaxPath()+"/bin/bcc")+opts+" -o "+CQuote(azm)+" "+CQuote(src) +? + If Sys( cmd ) + Throw "Build Error: failed to compile "+src + EndIf +?MacOs + If opt_arch="x86" + If Not USE_NASM + Local cmd$=CQuote(BlitzMaxPath()+"/bin/fasm2as")+" "+CQuote(azm) + If Sys( cmd ) Throw "Fasm2as failed - please contact BRL!" + EndIf + EndIf +? + Assemble azm,obj + +End Function + +Function CreateArc( path$ , oobjs:TList ) + DeleteFile path + Local cmd$,t$ +?Win32 + For t$=EachIn oobjs + If Len(cmd)+Len(t)>1000 + If Sys( cmd ) + DeleteFile path + Throw "Build Error: Failed to create archive "+path + EndIf + cmd="" + EndIf + If Not cmd cmd="ar -r "+CQuote(path) + cmd:+" "+CQuote(t) + Next +?MacOS + cmd="libtool -o "+CQuote(path) + For Local t$=EachIn oobjs + cmd:+" "+CQuote(t) + Next +?Linux + For Local t$=EachIn oobjs + If Len(cmd)+Len(t)>1000 + If Sys( cmd ) + DeleteFile path + Throw "Build Error: Failed to create archive "+path + EndIf + cmd="" + EndIf + If Not cmd cmd="ar -r "+CQuote(path) + cmd:+" "+CQuote(t) + Next +? + If cmd And Sys( cmd ) + DeleteFile path + Throw "Build Error: Failed to create archive "+path + EndIf +End Function + +Function LinkApp( path$,lnk_files:TList,makelib ) + DeleteFile path + + Local cmd$ + Local files$ + Local tmpfile$=BlitzMaxPath()+"/tmp/ld.tmp" +?MacOS + cmd="g++" + + If opt_arch="ppc" + cmd:+" -arch ppc" + Else + cmd:+" -arch i386 -read_only_relocs suppress" + EndIf + + If macos_version>=$1070 'Lion? + cmd:+" -mmacosx-version-min=10.4" '...can build for Tiger++ + Else If macos_version>=$1040 'Tiger? + cmd:+" -mmacosx-version-min=10.3" '...can build for Panther++ + EndIf + + cmd:+" -o "+CQuote( path ) + cmd:+" "+CQuote( "-L"+CQuote( BlitzMaxPath()+"/lib" ) ) + + If Not opt_dumpbuild cmd:+" -filelist "+CQuote( tmpfile ) + + For Local t$=EachIn lnk_files + If opt_dumpbuild Or (t[..1]="-") + cmd:+" "+t + Else + files:+t+Chr(10) + EndIf + Next + cmd:+" -lSystem -framework CoreServices -framework CoreFoundation" +?Win32 + cmd=CQuote(BlitzMaxPath()+"/bin/ld.exe")+" -s -stack 4194304" 'symbol stripping enabled + If opt_apptype="gui" cmd:+" -subsystem windows" + If makelib cmd:+" -shared" + + cmd:+" -o "+CQuote( path ) + cmd:+" "+CQuote( "-L"+CQuote( BlitzMaxPath()+"/lib" ) ) + + If makelib + Local imp$=StripExt(path)+".a" + Local def$=StripExt(path)+".def" + If FileType( def )<>FILETYPE_FILE Throw "Cannot locate .def file" + cmd:+" "+def + cmd:+" --out-implib "+imp + files:+"~n"+CQuote( BlitzMaxPath()+"/lib/dllcrt2.o" ) + Else + files:+"~n"+CQuote( BlitzMaxPath()+"/lib/crtbegin.o" ) + files:+"~n"+CQuote( BlitzMaxPath()+"/lib/crt2.o" ) + EndIf + + 'Unholy!!!!! + Local xpmanifest$ + For Local f$=EachIn lnk_files + Local t$=CQuote( f ) + If opt_dumpbuild Or (t[..1]="-" And t[..2]<>"-l") + cmd:+" "+t + Else + If f.EndsWith( "/win32maxguiex.mod/xpmanifest.o" ) + xpmanifest=t + Else + files:+"~n"+t + EndIf + EndIf + Next + + If xpmanifest files:+"~n"+xpmanifest + + cmd:+" "+CQuote( tmpfile ) + + files:+"~n-lgdi32 -lwsock32 -lwinmm -ladvapi32" + files:+" -lstdc++ -lgcc -lmingwex -lmingw32 -lmoldname -lmsvcrt -luser32 -lkernel32" + + If Not makelib + files:+" "+CQuote( BlitzMaxPath()+"/lib/crtend.o" ) + EndIf + + files="INPUT("+files+")" +?Linux + + cmd="g++" + cmd:+" -m32 -s -Os -pthread" + cmd:+" -o "+CQuote( path ) + cmd:+" "+CQuote( tmpfile ) + cmd:+" -L/usr/lib32" + cmd:+" -L/usr/X11R6/lib" + cmd:+" -L/usr/lib" + cmd:+" -L"+CQuote( BlitzMaxPath()+"/lib" ) + + For Local t$=EachIn lnk_files + t=CQuote(t) + If opt_dumpbuild Or (t[..1]="-" And t[..2]<>"-l") + cmd:+" "+t + Else + files:+" "+t + EndIf + Next + + files="INPUT("+files+")" +? + Local t$=getenv_( "BMK_LD_OPTS" ) + If t + cmd:+" "+t + EndIf + + Local stream:TStream=WriteStream( tmpfile ) + stream.WriteBytes files.ToCString(),files.length + stream.Close + + If Sys( cmd ) Throw "Build Error: Failed to link "+path + +End Function -- 2.30.2