This is an automated email from the ASF dual-hosted git repository.
damjan pushed a commit to branch scons-build
in repository https://gitbox.apache.org/repos/asf/openoffice.git
The following commit(s) were added to refs/heads/scons-build by this push:
new ab2b352 Add linker version script support.
ab2b352 is described below
commit ab2b352d4a70a00f10d505de7e237e3cb5ebaed1
Author: Damjan Jovanovic <[email protected]>
AuthorDate: Sat Feb 8 11:09:33 2020 +0200
Add linker version script support.
Patch by: me
---
.../openoffice/gotoSCons/SConsConverter.java | 11 +++++++++++
.../opeonoffice/gotoSCons/targets/Library.java | 22 ++++++++++++++++++++++
.../opeonoffice/gotoSCons/targets/Module.java | 4 ++--
main/site_scons/platform/aooplatform.py | 4 ++++
main/site_scons/platform/freebsd.py | 2 ++
main/site_scons/platform/windows.py | 3 +++
main/site_scons/sharedLibrary.py | 4 ++++
7 files changed, 48 insertions(+), 2 deletions(-)
diff --git
a/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/SConsConverter.java
b/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/SConsConverter.java
index 05b0f48..914cb55 100644
---
a/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/SConsConverter.java
+++
b/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/SConsConverter.java
@@ -108,6 +108,17 @@ public class SConsConverter {
out.println(String.format("%s.SetComponentFile('%s')",
library.getName(), componentFile.substring(firstSlash +
1)));
}
+
+ String versionScript = library.getVersionScript();
+ if (versionScript != null) {
+ int firstSlash = versionScript.indexOf('/');
+ if (firstSlash < 0) {
+ throw new Exception("Invalid filename " + versionScript);
+ }
+
+ out.println(String.format("%s.SetVersionScript('%s')",
+ library.getName(), versionScript.substring(firstSlash +
1)));
+ }
out.println(String.format("%s.InstallTo('${OUTDIR}/lib')",
library.getName()));
out.println();
diff --git
a/gotoSCons/src/main/java/org/apache/opeonoffice/gotoSCons/targets/Library.java
b/gotoSCons/src/main/java/org/apache/opeonoffice/gotoSCons/targets/Library.java
index 9e8f828..68512e8 100644
---
a/gotoSCons/src/main/java/org/apache/opeonoffice/gotoSCons/targets/Library.java
+++
b/gotoSCons/src/main/java/org/apache/opeonoffice/gotoSCons/targets/Library.java
@@ -29,6 +29,7 @@ import org.apache.openoffice.gotoSCons.raw.ValueNode;
public class Library extends BaseBinary {
private File filename;
private String componentFile;
+ private String versionScript;
public Library(File filename) throws Exception {
super(filename);
@@ -63,6 +64,8 @@ public class Library extends BaseBinary {
parseSetComponentFile(args);
} else if (function.equals("gb_Library_set_include")) {
parseSetInclude(args);
+ } else if (function.equals("gb_Library_set_versionmap")) {
+ parseSetVersionScript(args);
} else {
throw new Exception("UNHANDLED FUNCTION " + function);
}
@@ -93,7 +96,26 @@ public class Library extends BaseBinary {
}
}
+ private void parseSetVersionScript(String[] args) throws Exception {
+ if (args.length != 2) {
+ throw new Exception("Expected 2 args, got " +
Arrays.toString(args));
+ }
+ if (!args[0].equals(name)) {
+ throw new Exception("Library isn't " + name);
+ }
+
+ if (versionScript != null) {
+ throw new Exception("Version script file already set");
+ } else {
+ versionScript = args[1];
+ }
+ }
+
public String getComponentFile() {
return componentFile;
}
+
+ public String getVersionScript() {
+ return versionScript;
+ }
}
diff --git
a/gotoSCons/src/main/java/org/apache/opeonoffice/gotoSCons/targets/Module.java
b/gotoSCons/src/main/java/org/apache/opeonoffice/gotoSCons/targets/Module.java
index a183bb4..1189d8d 100644
---
a/gotoSCons/src/main/java/org/apache/opeonoffice/gotoSCons/targets/Module.java
+++
b/gotoSCons/src/main/java/org/apache/opeonoffice/gotoSCons/targets/Module.java
@@ -85,8 +85,8 @@ public class Module extends BaseTarget {
}
private void parseModuleAddTargets(String[] args) throws Exception {
- if (args.length != 2) {
- throw new Exception("Expected 2 args, got " +
Arrays.toString(args));
+ if (args.length < 1 || args.length > 2) {
+ throw new Exception("Expected 1-2 args, got " +
Arrays.toString(args));
}
if (!args[0].equals(name)) {
throw new Exception("Module isn't " + name);
diff --git a/main/site_scons/platform/aooplatform.py
b/main/site_scons/platform/aooplatform.py
index 4fc6122..84cfc93 100644
--- a/main/site_scons/platform/aooplatform.py
+++ b/main/site_scons/platform/aooplatform.py
@@ -106,3 +106,7 @@ class Platform(ABC):
def getTargetTypeGUIFlags(self, isGUI):
pass
+ @abstractmethod
+ def getVersionScriptFlags(self, versionScript):
+ pass
+
diff --git a/main/site_scons/platform/freebsd.py
b/main/site_scons/platform/freebsd.py
index 4fbd332..c4558ed 100644
--- a/main/site_scons/platform/freebsd.py
+++ b/main/site_scons/platform/freebsd.py
@@ -252,3 +252,5 @@ class FreeBSD(aooplatform.Platform):
def getTargetTypeGUIFlags(self, isGUI):
return []
+ def getVersionScriptFlags(self, versionScript):
+ return ['-Wl,--version-script,' + versionScript.srcnode().path ]
diff --git a/main/site_scons/platform/windows.py
b/main/site_scons/platform/windows.py
index 751c47c..b596e14 100644
--- a/main/site_scons/platform/windows.py
+++ b/main/site_scons/platform/windows.py
@@ -296,3 +296,6 @@ class Windows(aooplatform.Platform):
return '-SUBSYSTEM:WINDOWS'
else:
return '-SUBSYSTEM:CONSOLE'
+
+ def getVersionScriptFlags(self, versionScript):
+ return []
diff --git a/main/site_scons/sharedLibrary.py b/main/site_scons/sharedLibrary.py
index afe7644..df8a83e 100644
--- a/main/site_scons/sharedLibrary.py
+++ b/main/site_scons/sharedLibrary.py
@@ -66,5 +66,9 @@ class AOOSharedLibrary:
self.env.Install(outdirComponentDir, finalComponent)
self.env.Install(outdirComponentDir, inbuildComponent)
+ def SetVersionScript(self, path):
+ versionScript = File(path)
+
self.env.Append(LINKFLAGS=platform.getVersionScriptFlags(versionScript))
+
def InstallTo(self, path):
self.env.Install(path, self.sharedLib)