280 |
280 |
281 OperatingSystem isMSDOSlike ifTrue:[ |
281 OperatingSystem isMSDOSlike ifTrue:[ |
282 "/ default setup for msc |
282 "/ default setup for msc |
283 OperatingSystem getCCDefine ='__BORLANDC__' ifTrue:[ |
283 OperatingSystem getCCDefine ='__BORLANDC__' ifTrue:[ |
284 LinkCommand isNil ifTrue:[ |
284 LinkCommand isNil ifTrue:[ |
285 LinkCommand := 'tlink32' |
285 LinkCommand := 'tlink32'. |
|
286 LinkCommand := 'ilink32'. |
286 ]. |
287 ]. |
287 LinkArgs isNil ifTrue:[ |
288 LinkArgs isNil ifTrue:[ |
288 LinkArgs := '-L..\libbc -L\Programme\Borland\CBuilder3\lib -c -ap -Tpd -s -Gi -v -w-dup ..\libbc\librun.lib'. |
289 LinkArgs := '-L..\libbc -L\Programme\Borland\CBuilder3\lib -c -ap -Tpd -s -Gi -v -w-dup ..\libbc\librun.lib'. |
289 LinkArgs := '-L..\libbc -L\Programme\Borland\CBuilder3\lib -r -c -ap -Tpd -Gi -w-dup ..\libbc\librun.lib'. |
290 LinkArgs := '-L..\libbc -L\Programme\Borland\CBuilder3\lib -r -c -ap -Tpd -Gi -w-dup'. |
290 ]. |
291 ]. |
291 ] ifFalse:[ |
292 ] ifFalse:[ |
292 LinkCommand isNil ifTrue:[ |
293 LinkCommand isNil ifTrue:[ |
293 LinkCommand := 'link' |
294 LinkCommand := 'link' |
294 ]. |
295 ]. |
488 linkArgs:anArgString |
489 linkArgs:anArgString |
489 LinkArgs := anArgString |
490 LinkArgs := anArgString |
490 |
491 |
491 " |
492 " |
492 MSC: |
493 MSC: |
493 LinkCommand := 'link32'. |
494 LinkCommand := 'link32'. |
494 LinkArgs := ' /NOPACK /NOLOGO /DEBUG /MACHINE:I386 /DLL /OUT:%1.dll /DEF:%1.def' |
495 LinkArgs := ' /NOPACK /NOLOGO /DEBUG /MACHINE:I386 /DLL /OUT:%1.dll /DEF:%1.def' |
495 |
496 |
496 Borland: |
497 Borland: |
497 LinkCommand := 'ilink32'. |
498 LinkCommand := 'ilink32'. |
498 LinkArgs := ' -ap -Tpd -s -Gn -Gi -v -w-dup' |
499 LinkArgs := '-ap -E0 -Tpd -s -c -L\Programme\Borland\CBuilder3\lib -L..\libbc librun.lib import32.lib' |
499 ' |
500 ' |
500 '/NOPACK /NOLOGO /DEBUG /MACHINE:I386 /DLL /OUT:%1.dll /DEF:%1.def' |
501 '/NOPACK /NOLOGO /DEBUG /MACHINE:I386 /DLL /OUT:%1.dll /DEF:%1.def' |
501 |
502 |
502 Unix: |
503 Unix: |
503 LinkCommand := 'ld' |
504 LinkCommand := 'ld' |
504 LinkArgs := '-shared' |
505 LinkArgs := '-shared' |
505 " |
506 " |
506 |
507 |
507 "Created: / 12.8.1998 / 21:43:16 / cg" |
508 "Created: / 12.8.1998 / 21:43:16 / cg" |
508 "Modified: / 12.8.1998 / 22:15:00 / cg" |
509 "Modified: / 4.9.1998 / 00:33:46 / cg" |
509 ! |
510 ! |
510 |
511 |
511 linkCommand |
512 linkCommand |
512 ^ LinkCommand ? 'ld' "/ that default is ok for Unix |
513 ^ LinkCommand ? 'ld' "/ that default is ok for Unix |
513 |
514 |
2298 -shared option into a .so file; |
2299 -shared option into a .so file; |
2299 DLD based loaders (linux a.out) can directly load a .o file; |
2300 DLD based loaders (linux a.out) can directly load a .o file; |
2300 Other systems may require more ..." |
2301 Other systems may require more ..." |
2301 |
2302 |
2302 |osType oFileName soFileName expFileName librunExpFileName |
2303 |osType oFileName soFileName expFileName librunExpFileName |
2303 needSharedObject ld ldArg expFile| |
2304 needSharedObject ld ldArg expFile ok| |
2304 |
2305 |
2305 osType := OperatingSystem getOSType. |
2306 osType := OperatingSystem getOSType. |
2306 |
2307 |
2307 osType = 'win32' ifTrue:[ |
2308 osType = 'win32' ifTrue:[ |
2308 self activityNotification:'create def file'. |
2309 self activityNotification:'create def file'. |
2350 "/ ]. |
2351 "/ ]. |
2351 "/ ]. |
2352 "/ ]. |
2352 "/ ]. |
2353 "/ ]. |
2353 "/ ]. |
2354 "/ ]. |
2354 |
2355 |
2355 ld := LinkCommand , ' ' , baseFileName , '.obj'. |
|
2356 LinkArgs isNil ifTrue:[ |
2356 LinkArgs isNil ifTrue:[ |
|
2357 ld := LinkCommand , ' ' , baseFileName , '.obj'. |
2357 ld := ld |
2358 ld := ld |
2358 , ' /NOPACK /NOLOGO /DEBUG /MACHINE:I386 /DLL' |
2359 , ' /NOPACK /NOLOGO /DEBUG /MACHINE:I386 /DLL' |
2359 , ' /OUT:' , baseFileName , '.dll ' |
2360 , ' /OUT:' , baseFileName , '.dll ' |
2360 , ' /DEF:' , baseFileName , '.def'. |
2361 , ' /DEF:' , baseFileName , '.def'. |
2361 ] ifFalse:[ |
2362 ] ifFalse:[ |
2362 ld := ld , ' ' , (LinkArgs bindWith:baseFileName) |
2363 OperatingSystem getCCDefine ='__BORLANDC__' ifTrue:[ |
|
2364 ld := LinkCommand , ' ' , (LinkArgs bindWith:baseFileName). |
|
2365 ld := ld , ' c0d32.obj ' , baseFileName , '.obj '. |
|
2366 ld := ld , ',' , baseFileName , '.dll,,..\libbc\librun.lib import32.lib stxc32i.lib,,'. |
|
2367 ] ifFalse:[ |
|
2368 self halt. |
|
2369 ] |
2363 ]. |
2370 ]. |
2364 |
2371 ok := OperatingSystem executeCommand:ld. |
2365 (OperatingSystem executeCommand:ld) ifFalse:[ |
2372 (baseFileName , '.tds') asFilename delete. |
|
2373 (baseFileName , '.ilc') asFilename delete. |
|
2374 (baseFileName , '.ild') asFilename delete. |
|
2375 (baseFileName , '.ilf') asFilename delete. |
|
2376 (baseFileName , '.ils') asFilename delete. |
|
2377 (baseFileName , '.lib') asFilename delete. |
|
2378 (baseFileName , '.map') asFilename delete. |
|
2379 (baseFileName , '.def') asFilename delete. |
|
2380 (baseFileName , '.obj') asFilename delete. |
|
2381 |
|
2382 ok ifFalse:[ |
2366 "/ self halt. |
2383 "/ self halt. |
2367 ^nil |
2384 ^nil |
2368 ]. |
2385 ]. |
2369 oFileName := (Filename currentDirectory construct:(baseFileName , self sharedLibraryExtension)) name. |
2386 oFileName := (Filename currentDirectory construct:(baseFileName , self sharedLibraryExtension)) name. |
2370 ^ oFileName |
2387 ^ oFileName |
3007 |
3024 |
3008 #ifdef WIN_DL |
3025 #ifdef WIN_DL |
3009 int val; |
3026 int val; |
3010 HINSTANCE handle; |
3027 HINSTANCE handle; |
3011 int err; |
3028 int err; |
|
3029 jmp_buf exitJmpBuf; |
3012 |
3030 |
3013 if (__bothSmallInteger(sysHandle1, sysHandle2)) { |
3031 if (__bothSmallInteger(sysHandle1, sysHandle2)) { |
3014 val = (_intVal(sysHandle2) << 16) + _intVal(sysHandle1); |
3032 val = (_intVal(sysHandle2) << 16) + _intVal(sysHandle1); |
3015 handle = (HINSTANCE)(val); |
3033 handle = (HINSTANCE)(val); |
3016 |
3034 |
3017 if (FreeLibrary(handle) != TRUE) { |
3035 if (setjmp(exitJmpBuf)) { |
3018 err = GetLastError(); |
3036 __setAtExitLongJmp(exitJmpBuf); |
3019 if (@global(Verbose) == true) { |
3037 if (FreeLibrary(handle) != TRUE) { |
3020 printf ("unlink file %s failed; error: %x\n", |
3038 __setAtExitLongJmp(0); |
3021 __stringVal(sysHandle1), err); |
3039 err = GetLastError(); |
|
3040 if (@global(Verbose) == true) { |
|
3041 printf ("unlink file %s failed; error: %x\n", |
|
3042 __stringVal(sysHandle1), err); |
|
3043 } |
|
3044 RETURN (false); |
3022 } |
3045 } |
3023 RETURN (false); |
3046 } else { |
3024 } |
3047 __setAtExitLongJmp(0); |
|
3048 fprintf(stderr, "ObjFLoader [warning]: FreeLibrary called exit() - ignored\n"); |
|
3049 } |
3025 RETURN (true); |
3050 RETURN (true); |
3026 } |
3051 } |
3027 RETURN (false); |
3052 RETURN (false); |
3028 #endif |
3053 #endif |
3029 |
3054 |