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)

Reply via email to