Fixes for new-fangled clang-as in xcode7.
authorMark Sibly <blitzmunter@gmail.com>
Sun, 20 Sep 2015 03:52:08 +0000 (15:52 +1200)
committerMark Sibly <blitzmunter@gmail.com>
Sun, 20 Sep 2015 03:52:08 +0000 (15:52 +1200)
mod/brl.mod/blitz.mod/blitz_ex.macos.x86.s
mod/brl.mod/blitz.mod/blitz_ftoi.macos.x86.s
src/bmk/bmk_util.bmx
src/fasm2as/fasm2as.bmx

index 4ad572cdf253262286bb57d62fede970f5a3f5ff..362525ccab3c729d2f112b39341379c3ce70967a 100644 (file)
@@ -6,35 +6,35 @@
        .text
 
 _bbArgp:
-#   ;0[esp]=our ret
-#   ;4[esp]=offset arg
-#      ;0[ebp]=caller oldebp
-#      ;4[ebp]=caller ret
-#      ;8[ebp]=caller first arg!
+#   0[esp]=our ret
+#   4[esp]=offset arg
+#      0[ebp]=caller oldebp
+#      4[ebp]=caller ret
+#      8[ebp]=caller first arg!
        lea             8(%ebp),%eax
     add     4(%esp),%eax
        ret
 
-#      ;0[esp]=ret
-#      ;4[esp]=state block
+#      0[esp]=ret
+#      4[esp]=state block
 __bbExEnter:
        mov             4(%esp),%edx
-#      ;
+#
        mov             %ebx,(%edx)
        mov             %esi,4(%edx)
        mov             %edi,8(%edx)
        mov             %ebp,12(%edx)
-#      ;
+#
        mov             (%esp),%ecx
        mov             %esp,16(%edx)
        mov             %ecx,20(%edx)
-#      ;
+#
        xor             %eax,%eax
        ret
 
-#      ;0[esp]=ret
-#      ;4[esp]=state block
-#      ;8[esp]=throw value
+#      0[esp]=ret
+#      4[esp]=state block
+#      8[esp]=throw value
 __bbExThrow:
        mov             4(%esp),%edx
        mov             8(%esp),%eax
@@ -47,4 +47,4 @@ __bbExThrow:
        mov             20(%edx),%ecx
        mov             16(%edx),%esp
        add             $4,%esp
-       jmp             %ecx
+       jmp             *%ecx
index a9e4f5f9314b228165cd745a40411e9ea05b22a3..29e3b4a752160a8bb7f23a4580530995025dc1fd 100644 (file)
@@ -2,8 +2,8 @@
 
        .text
 
-#      ;0[esp]=ret
-#      ;4[esp]=double
+#      0[esp]=ret
+#      4[esp]=double
 _bbFloatToInt:
        fldl    4(%esp)
        sub     $12,%esp
index ad65beea4e464e84b5a9eb8e167bcd6f1a31c5da..0714f39f3cb261c331c37f3db262d2c84fd57906 100644 (file)
-\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
index 1184d0b4c087cfb0e92f60bbdd4037fae85832cc..5d7d6f2e8bc600f0a00438f95f02df8e62cc994d 100644 (file)
@@ -79,7 +79,12 @@ While Not in.Eof()
                                Local i=args.Find( "," )
                                If i=-1
                                        sz=FixArg( args,op )
-                                       If sz And op="call" args="*"+args
+                                       If op="call"
+                                               If sz Or args.StartsWith( "%" )
+                                                       args="*"+args
+                                               Endif
+                                       Endif
+'                                      If sz And op="call" args="*"+args
                                Else
                                        Local arg2$=args[..i]
                                        Local arg1$=args[i+1..]