-\r
-Strict\r
-\r
-Import "bmk_config.bmx"\r
-\r
-'OS X Nasm doesn't work? Used to produce incorrect reloc offsets - haven't checked for a while \r
-Const USE_NASM=False\r
-\r
-Const CC_WARNINGS=False'True\r
-\r
-Type TModOpt ' BaH\r
-       Field cc_opts:String = ""\r
-       Field ld_opts:TList = New TList\r
-       \r
-       Method addOption(qval:String)\r
-               If qval.startswith("CC_OPTS") Then\r
-                       cc_opts:+ " " + qval[qval.find(":") + 1..].Trim()\r
-               ElseIf qval.startswith("LD_OPTS") Then\r
-                       Local opt:String = qval[qval.find(":") + 1..].Trim()\r
-                       \r
-                       If opt.startsWith("-L") Then\r
-                               opt = "-L" + CQuote(opt[2..])\r
-                       End If\r
-                       \r
-                       ld_opts.addLast opt\r
-               End If\r
-       End Method\r
-       \r
-       Method hasCCopt:Int(value:String)\r
-               Return cc_opts.find(value) >= 0\r
-       End Method\r
-\r
-       Method hasLDopt:Int(value:String)\r
-               For Local opt:String = EachIn ld_opts\r
-                       If opt.find(value) >= 0 Then\r
-                               Return True\r
-                       End If\r
-               Next\r
-               Return False\r
-       End Method\r
-\r
-       Function setPath:String(value:String, path:String)\r
-               Return value.Replace("%PWD%", path)\r
-       End Function\r
-       \r
-End Type\r
-\r
-Global mod_opts:TModOpt ' BaH\r
-\r
-Function Match( ext$,pat$ )\r
-       Return (";"+pat+";").Find( ";"+ext+";" )<>-1\r
-End Function\r
-\r
-Function HTTPEsc$( t$ )\r
-       t=t.Replace( " ","%20" )\r
-       Return t\r
-End Function\r
-\r
-Function Sys( cmd$ )\r
-       If opt_verbose\r
-               Print cmd\r
-       Else If opt_dumpbuild\r
-               Local p$=cmd\r
-               p=p.Replace( BlitzMaxPath()+"/","./" )\r
-               WriteStdout p+"~n"\r
-               Local t$="mkdir "\r
-               If cmd.StartsWith( t ) And FileType( cmd[t.length..] ) Return\r
-       EndIf\r
-       Return system_( cmd )\r
-End Function\r
-\r
-Function CQuote$( t$ )\r
-       If t And t[0]=Asc("-") Return t\r
-       For Local i=0 Until t.length\r
-               If t[i]=Asc(".") Continue\r
-               If t[i]=Asc("/") Continue\r
-?Win32\r
-               If t[i]=Asc("\") Continue\r
-?\r
-               If t[i]=Asc("_") Or t[i]=Asc("-") Continue\r
-               If t[i]>=Asc("0") And t[i]<=Asc("9") Continue\r
-               If t[i]>=Asc("A") And t[i]<=Asc("Z") Continue\r
-               If t[i]>=Asc("a") And t[i]<=Asc("z") Continue\r
-               Return "~q"+t+"~q"\r
-       Next\r
-       Return t\r
-End Function\r
-\r
-Function Ranlib( dir$ )\r
-       '\r
-?MacOS\r
-       If macos_version>=$1040 Return\r
-?\r
-       '\r
-       For Local f$=EachIn LoadDir( dir )\r
-               Local p$=dir+"/"+f\r
-               Select FileType( p )\r
-               Case FILETYPE_DIR\r
-                       Ranlib p\r
-               Case FILETYPE_FILE\r
-                       If ExtractExt(f).ToLower()="a" Sys "ranlib "+p\r
-               End Select\r
-       Next\r
-End Function\r
-\r
-Function Assemble( src$,obj$ )\r
-       DeleteFile obj\r
-       Local cmd$\r
-?MacOS\r
-       If opt_arch="ppc" \r
-               cmd="as -arch ppc"\r
-       Else\r
-               If USE_NASM\r
-                       cmd="nasm -f macho"\r
-               Else\r
-                       cmd="as -arch i386"\r
-               EndIf\r
-       EndIf\r
-       cmd:+" -W -o "+CQuote(obj)+" "+CQuote(src);\r
-?Win32\r
-       cmd$=CQuote(BlitzMaxPath()+"/bin/fasm")+" "+CQuote(src)+" "+CQuote(obj)\r
-?Linux\r
-       Local opts$=getenv_( "BMK_FASM_OPTS" )\r
-       If opts="" opts="-m1048560"\r
-       cmd$=CQuote(BlitzMaxPath()+"/bin/fasm")+" "+opts+" "+CQuote(src)+" "+CQuote(obj)\r
-?\r
-       If Sys( cmd )\r
-               Throw "Build Error: Failed to assemble "+src\r
-       EndIf\r
-End Function\r
-\r
-Function CompileC( src$,obj$,opts$ )\r
-       DeleteFile obj\r
-\r
-       Local t$=getenv_( "BMK_CC_OPTS" )\r
-       If t opts:+" "+t\r
-\r
-       Local cmd$="gcc"\r
-       If ExtractExt(src)="cpp" Or ExtractExt(src)="cc" Or ExtractExt(src)="cxx" Or ExtractExt(src)="mm"\r
-               cmd="g++"\r
-       Else\r
-               If CC_WARNINGS opts:+" -Wimplicit-function-declaration"\r
-       EndIf\r
-\r
-       If Not CC_WARNINGS opts:+" -w"\r
-\r
-?MacOS\r
-       If opt_arch="ppc" \r
-               opts:+" -arch ppc"\r
-       Else\r
-               opts:+" -arch i386"\r
-       EndIf\r
-       If macos_version>=$1070                                 'Lion?\r
-               opts:+" -mmacosx-version-min=10.4"      '...can build for Tiger++\r
-       Else If macos_version>=$1040                    'Tiger?\r
-               opts:+" -mmacosx-version-min=10.3"      '...can build for Panther++\r
-       EndIf\r
-?Win32\r
-       If Not mod_opts Or Not mod_opts.hasCCopt("-march")\r
-               opts:+" -march=pentium"\r
-       EndIf\r
-       opts:+" -ffast-math"\r
-?Linux\r
-       opts:+" -m32 -mfancy-math-387 -fno-strict-aliasing"\r
-?\r
-       If mod_opts\r
-               If Not mod_opts.hasCCopt("-fexceptions")\r
-                       opts:+" -fno-exceptions"\r
-               EndIf\r
-               opts:+ " " + mod_opts.cc_opts ' BaH\r
-       Else\r
-               opts:+" -fno-exceptions"\r
-       EndIf\r
-\r
-       cmd:+opts+" -c -o "+CQuote(obj)+" "+CQuote(src)\r
-\r
-       If Sys( cmd )\r
-               Throw "Build Error: failed to compile "+src\r
-       EndIf\r
-End Function\r
-\r
-Function CompileBMX( src$,obj$,opts$ )\r
-       DeleteFile obj\r
-\r
-       Local azm$=StripExt(obj)+".s"\r
-?MacOs\r
-       Local cmd$=CQuote(BlitzMaxPath()+"/bin/bcc")+opts+" -o "+CQuote(azm)+" "+CQuote(src)\r
-?Win32\r
-       Local cmd$=CQuote(BlitzMaxPath()+"/bin/bcc")+opts+" -o "+CQuote(azm)+" "+CQuote(src)\r
-?Linux \r
-       Local cmd$=CQuote(BlitzMaxPath()+"/bin/bcc")+opts+" -o "+CQuote(azm)+" "+CQuote(src)\r
-?\r
-       If Sys( cmd )\r
-               Throw "Build Error: failed to compile "+src\r
-       EndIf\r
-?MacOs\r
-       If opt_arch="x86"\r
-               If Not USE_NASM\r
-                       Local cmd$=CQuote(BlitzMaxPath()+"/bin/fasm2as")+" "+CQuote(azm)\r
-                       If Sys( cmd ) Throw "Fasm2as failed - please contact BRL!"\r
-               EndIf\r
-       EndIf\r
-?\r
-       Assemble azm,obj\r
-\r
-End Function\r
-\r
-Function CreateArc( path$ , oobjs:TList )\r
-       DeleteFile path\r
-       Local cmd$,t$\r
-?Win32\r
-       For t$=EachIn oobjs\r
-               If Len(cmd)+Len(t)>1000\r
-                       If Sys( cmd )\r
-                               DeleteFile path\r
-                               Throw "Build Error: Failed to create archive "+path\r
-                       EndIf\r
-                       cmd=""\r
-               EndIf\r
-               If Not cmd cmd="ar -r "+CQuote(path)\r
-               cmd:+" "+CQuote(t)\r
-       Next\r
-?MacOS\r
-       cmd="libtool -o "+CQuote(path)\r
-       For Local t$=EachIn oobjs\r
-               cmd:+" "+CQuote(t)\r
-       Next\r
-?Linux\r
-       For Local t$=EachIn oobjs\r
-               If Len(cmd)+Len(t)>1000\r
-                       If Sys( cmd )\r
-                               DeleteFile path\r
-                               Throw "Build Error: Failed to create archive "+path\r
-                       EndIf\r
-                       cmd=""\r
-               EndIf\r
-               If Not cmd cmd="ar -r "+CQuote(path)\r
-               cmd:+" "+CQuote(t)\r
-       Next\r
-?\r
-       If cmd And Sys( cmd )\r
-               DeleteFile path\r
-               Throw "Build Error: Failed to create archive "+path\r
-       EndIf\r
-End Function\r
-\r
-Function LinkApp( path$,lnk_files:TList,makelib )\r
-       DeleteFile path\r
-\r
-       Local cmd$\r
-       Local files$\r
-       Local tmpfile$=BlitzMaxPath()+"/tmp/ld.tmp"\r
-?MacOS\r
-       cmd="g++"\r
-       \r
-       If opt_arch="ppc" \r
-               cmd:+" -arch ppc" \r
-       Else\r
-               cmd:+" -arch i386 -read_only_relocs suppress"\r
-       EndIf\r
-\r
-       If macos_version>=$1070                                 'Lion?\r
-               cmd:+" -mmacosx-version-min=10.4"       '...can build for Tiger++\r
-       Else If macos_version>=$1040                    'Tiger?\r
-               cmd:+" -mmacosx-version-min=10.3"       '...can build for Panther++\r
-       EndIf\r
-\r
-       cmd:+" -o "+CQuote( path )\r
-       cmd:+" "+CQuote( "-L"+CQuote( BlitzMaxPath()+"/lib" ) )\r
-\r
-       If Not opt_dumpbuild cmd:+" -filelist "+CQuote( tmpfile )\r
-       \r
-       For Local t$=EachIn lnk_files\r
-               If opt_dumpbuild Or (t[..1]="-")\r
-                       cmd:+" "+t \r
-               Else\r
-                       files:+t+Chr(10)\r
-               EndIf\r
-       Next\r
-       cmd:+" -lSystem -framework CoreServices -framework CoreFoundation"\r
-?Win32\r
-       cmd=CQuote(BlitzMaxPath()+"/bin/ld.exe")+" -s -stack 4194304"   'symbol stripping enabled\r
-       If opt_apptype="gui" cmd:+" -subsystem windows"\r
-       If makelib cmd:+" -shared"\r
-       \r
-       cmd:+" -o "+CQuote( path )\r
-       cmd:+" "+CQuote( "-L"+CQuote( BlitzMaxPath()+"/lib" ) )\r
-\r
-       If makelib\r
-               Local imp$=StripExt(path)+".a"\r
-               Local def$=StripExt(path)+".def"\r
-               If FileType( def )<>FILETYPE_FILE Throw "Cannot locate .def file"\r
-               cmd:+" "+def\r
-               cmd:+" --out-implib "+imp\r
-               files:+"~n"+CQuote( BlitzMaxPath()+"/lib/dllcrt2.o" )\r
-       Else\r
-               files:+"~n"+CQuote( BlitzMaxPath()+"/lib/crtbegin.o" )\r
-               files:+"~n"+CQuote( BlitzMaxPath()+"/lib/crt2.o" )\r
-       EndIf\r
-\r
-       'Unholy!!!!!\r
-       Local xpmanifest$\r
-       For Local f$=EachIn lnk_files\r
-               Local t$=CQuote( f )\r
-               If opt_dumpbuild Or (t[..1]="-" And t[..2]<>"-l")\r
-                       cmd:+" "+t\r
-               Else\r
-                       If f.EndsWith( "/win32maxguiex.mod/xpmanifest.o" )\r
-                               xpmanifest=t\r
-                       Else\r
-                               files:+"~n"+t\r
-                       EndIf\r
-               EndIf\r
-       Next\r
-\r
-       If xpmanifest files:+"~n"+xpmanifest\r
-       \r
-       cmd:+" "+CQuote( tmpfile )\r
-\r
-       files:+"~n-lgdi32 -lwsock32 -lwinmm -ladvapi32"\r
-       files:+" -lstdc++ -lgcc -lmingwex -lmingw32 -lmoldname -lmsvcrt -luser32 -lkernel32"\r
-       \r
-       If Not makelib\r
-               files:+" "+CQuote( BlitzMaxPath()+"/lib/crtend.o" )\r
-       EndIf\r
-       \r
-       files="INPUT("+files+")"\r
-?Linux\r
-\r
-       cmd="g++"\r
-       cmd:+" -m32 -s -Os -pthread"\r
-       cmd:+" -o "+CQuote( path )\r
-       cmd:+" "+CQuote( tmpfile )\r
-       cmd:+" -Wl,-rpath='$ORIGIN'"\r
-       cmd:+" -L/usr/lib32"\r
-       cmd:+" -L/usr/X11R6/lib"\r
-       cmd:+" -L/usr/lib"\r
-       cmd:+" -L"+CQuote( BlitzMaxPath()+"/lib" )\r
-\r
-       For Local t$=EachIn lnk_files\r
-               t=CQuote(t)\r
-               If opt_dumpbuild Or (t[..1]="-" And t[..2]<>"-l")\r
-                       cmd:+" "+t\r
-               Else\r
-                       files:+" "+t\r
-               EndIf\r
-       Next\r
-\r
-       files="INPUT("+files+")"\r
-?\r
-       Local t$=getenv_( "BMK_LD_OPTS" )\r
-       If t \r
-               cmd:+" "+t\r
-       EndIf\r
-\r
-       Local stream:TStream=WriteStream( tmpfile )\r
-       stream.WriteBytes files.ToCString(),files.length\r
-       stream.Close\r
-       \r
-       If Sys( cmd ) Throw "Build Error: Failed to link "+path\r
-\r
-End Function\r
+
+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"
+                       cmd:+" -mmacosx-version-min=10.6"
+               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
+
+       opts:+" -mmacosx-version-min=10.6"              'build for Snow Leopard++
+
+'      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
+       
+       cmd:+" -mmacosx-version-min=10.6"               'build for Snow Leopard++
+       
+'      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:+" -Wl,-rpath='$ORIGIN'"
+       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