|
@@ -617,28 +617,29 @@ begin
|
|
|
HPath:=TCmdStrListItem(HPath.Next);
|
|
|
end;
|
|
|
end;
|
|
|
- { force local symbol resolution (i.e., inside the shared }
|
|
|
- { library itself) for all non-exorted symbols, otherwise }
|
|
|
- { several RTL symbols of FPC-compiled shared libraries }
|
|
|
- { will be bound to those of a single shared library or }
|
|
|
- { to the main program }
|
|
|
- if (isdll) and (target_info.system in systems_bsd) then
|
|
|
+
|
|
|
+ { force local symbol resolution (i.e., inside the shared }
|
|
|
+ { library itself) for all non-exorted symbols, otherwise }
|
|
|
+ { several RTL symbols of FPC-compiled shared libraries }
|
|
|
+ { will be bound to those of a single shared library or }
|
|
|
+ { to the main program }
|
|
|
+ if (isdll) and (target_info.system in systems_bsd) then
|
|
|
+ begin
|
|
|
+ LinkRes.add('VERSION');
|
|
|
+ LinkRes.add('{');
|
|
|
+ LinkRes.add(' {');
|
|
|
+ if not texportlibunix(exportlib).exportedsymnames.empty then
|
|
|
begin
|
|
|
- LinkRes.add('VERSION');
|
|
|
- LinkRes.add('{');
|
|
|
- LinkRes.add(' {');
|
|
|
- if not texportlibunix(exportlib).exportedsymnames.empty then
|
|
|
- begin
|
|
|
- LinkRes.add(' global:');
|
|
|
- repeat
|
|
|
- LinkRes.add(' '+texportlibunix(exportlib).exportedsymnames.getfirst+';');
|
|
|
- until texportlibunix(exportlib).exportedsymnames.empty;
|
|
|
- end;
|
|
|
- LinkRes.add(' local:');
|
|
|
- LinkRes.add(' *;');
|
|
|
- LinkRes.add(' };');
|
|
|
- LinkRes.add('}');
|
|
|
+ LinkRes.add(' global:');
|
|
|
+ repeat
|
|
|
+ LinkRes.add(' '+texportlibunix(exportlib).exportedsymnames.getfirst+';');
|
|
|
+ until texportlibunix(exportlib).exportedsymnames.empty;
|
|
|
end;
|
|
|
+ LinkRes.add(' local:');
|
|
|
+ LinkRes.add(' *;');
|
|
|
+ LinkRes.add(' };');
|
|
|
+ LinkRes.add('}');
|
|
|
+ end;
|
|
|
|
|
|
if not LdSupportsNoResponseFile then
|
|
|
LinkRes.Add('INPUT(');
|
|
@@ -669,10 +670,7 @@ begin
|
|
|
|
|
|
{ main objectfiles }
|
|
|
|
|
|
- { Generate linkfiles.res file if needed }
|
|
|
- { Only needed on Windows, due to the limitation of 8196 characters for command line }
|
|
|
- if (LdSupportsNoResponseFile) and
|
|
|
- (source_info.system in systems_all_windows) then
|
|
|
+ if (target_info.system in systems_darwin) then
|
|
|
begin
|
|
|
FilesList:=TLinkRes.Create(outputexedir+'linkfiles.res',false);
|
|
|
while not ObjectFiles.Empty do
|
|
@@ -680,11 +678,7 @@ begin
|
|
|
s:=ObjectFiles.GetFirst;
|
|
|
if s<>'' then
|
|
|
begin
|
|
|
- repeat
|
|
|
- i:=Pos(source_info.dirsep,s);
|
|
|
- if i>0 then
|
|
|
- s[i]:=target_info.dirsep;
|
|
|
- until i=0;
|
|
|
+ s:=TargetFixFileName(s);
|
|
|
FilesList.Add(s);
|
|
|
end;
|
|
|
end;
|
|
@@ -932,7 +926,7 @@ begin
|
|
|
else
|
|
|
Replace(cmdstr,'$ORDERSYMS','');
|
|
|
|
|
|
- if (LdSupportsNoResponseFile) and (source_info.system in systems_all_windows) then
|
|
|
+ if (target_info.system in systems_darwin) then
|
|
|
Replace(cmdstr,'$FILELIST','-filelist '+maybequoted(outputexedir+'linkfiles.res'))
|
|
|
else
|
|
|
Replace(cmdstr,'$FILELIST','');
|
|
@@ -991,12 +985,10 @@ begin
|
|
|
DeleteFile(linkscript.fn);
|
|
|
linkscript.free
|
|
|
end;
|
|
|
+ if target_info.system in systems_darwin then
|
|
|
+ DeleteFile(outputexedir+'linkfiles.res');
|
|
|
end;
|
|
|
|
|
|
- { Remove linkfiles.res }
|
|
|
- if (success) and (LdSupportsNoResponseFile) and (source_info.system in systems_all_windows) then
|
|
|
- DeleteFile(outputexedir+'linkfiles.res');
|
|
|
-
|
|
|
MakeExecutable:=success; { otherwise a recursive call to link method }
|
|
|
end;
|
|
|
|
|
@@ -1084,7 +1076,7 @@ begin
|
|
|
Replace(cmdstr,'$TARGET',targetstr);
|
|
|
Replace(cmdstr,'$EMUL',EmulStr);
|
|
|
Replace(cmdstr,'$CATRES',CatFileContent(outputexedir+Info.ResName));
|
|
|
- if (LdSupportsNoResponseFile) and (source_info.system in systems_all_windows) then
|
|
|
+ if (target_info.system in systems_darwin) then
|
|
|
Replace(cmdstr,'$FILELIST','-filelist '+maybequoted(outputexedir+'linkfiles.res'))
|
|
|
else
|
|
|
Replace(cmdstr,'$FILELIST','');
|
|
@@ -1178,13 +1170,12 @@ begin
|
|
|
linkscript.free
|
|
|
end;
|
|
|
if (target_info.system in systems_darwin) then
|
|
|
- DeleteFile(outputexedir+'linksyms.fpc');
|
|
|
+ begin
|
|
|
+ DeleteFile(outputexedir+'linksyms.fpc');
|
|
|
+ DeleteFile(outputexedir+'linkfiles.res');
|
|
|
+ end;
|
|
|
end;
|
|
|
|
|
|
- { Remove linkfiles.res }
|
|
|
- if (success) and (LdSupportsNoResponseFile) and (source_info.system in systems_all_windows) then
|
|
|
- DeleteFile(outputexedir+'linkfiles.res');
|
|
|
-
|
|
|
MakeSharedLibrary:=success; { otherwise a recursive call to link method }
|
|
|
end;
|
|
|
|