You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by da...@apache.org on 2020/07/05 07:49:28 UTC

[openoffice] branch scons-build updated: Add Flex and Bison support.

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 ba6835d  Add Flex and Bison support.
ba6835d is described below

commit ba6835da108fba814d7faf02e53fda11b5e440f5
Author: Damjan Jovanovic <da...@apache.org>
AuthorDate: Sun Jul 5 09:47:12 2020 +0200

    Add Flex and Bison support.
    
    Patch by: me
---
 .../openoffice/gotoSCons/SConsConverter.java       | 40 ++++++++++++++++++-
 .../openoffice/gotoSCons/targets/BaseBinary.java   | 46 ++++++++++++++++++----
 .../openoffice/gotoSCons/targets/Executable.java   | 19 +++++++++
 .../openoffice/gotoSCons/targets/GoogleTest.java   | 12 ++++++
 .../openoffice/gotoSCons/targets/Library.java      | 12 ++++++
 .../gotoSCons/targets/StaticLibrary.java           | 12 ++++++
 main/site_scons/executable.py                      |  3 +-
 main/site_scons/platform/freebsd.py                |  2 +-
 main/site_scons/sharedObjects.py                   | 12 ++++++
 main/site_scons/site_init.py                       |  1 +
 main/site_scons/staticLibrary.py                   |  2 +-
 11 files changed, 148 insertions(+), 13 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 5683526..f68f87d 100644
--- a/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/SConsConverter.java
+++ b/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/SConsConverter.java
@@ -146,7 +146,7 @@ public class SConsConverter {
         out.println(String.format("%s = AOOStaticLibrary(", library.getName()));
         out.println(String.format("    '%s',", library.getName()));
         out.println(String.format("    '%s',", layer));
-        out.println(String.format("    %s.objects", objectsVariable));
+        out.println(String.format("    %s", objectsVariable));
         out.println(String.format(")"));
 
         out.println(String.format("%s.InstallTo('${OUTDIR}/lib')", library.getName()));
@@ -160,7 +160,7 @@ public class SConsConverter {
         out.println(String.format("%s = AOOExecutable(", exe.getName()));
         out.println(String.format("    '%s',", exe.getName()));
         out.println(String.format("    '%s',", layer));
-        out.println(String.format("    %s.objects", objectsVariable));
+        out.println(String.format("    %s", objectsVariable));
         out.println(String.format(")"));
         
         if (exe.isTargetTypeSet()) {
@@ -358,6 +358,42 @@ public class SConsConverter {
             out.println();
             out.println("])");
         }
+        
+        if (!binary.getFlexFiles().isEmpty()) {
+            out.println(String.format("%s.AddFlexFiles([", objectsVariable));
+            boolean first = true;
+            for (String flexFile : binary.getFlexFiles()) {
+                if (!first) {
+                    out.println(",");
+                }
+                int firstSlash = flexFile.indexOf('/');
+                if (firstSlash < 0) {
+                    throw new Exception("Invalid filename " + flexFile);
+                }
+                out.print("    '" + flexFile.substring(firstSlash + 1) + ".ll'");
+                first = false;
+            }
+            out.println();
+            out.println("])");
+        }
+        
+        if (!binary.getBisonFiles().isEmpty()) {
+            out.println(String.format("%s.AddBisonFiles([", objectsVariable));
+            boolean first = true;
+            for (String bisonFile : binary.getBisonFiles()) {
+                if (!first) {
+                    out.println(",");
+                }
+                int firstSlash = bisonFile.indexOf('/');
+                if (firstSlash < 0) {
+                    throw new Exception("Invalid filename " + bisonFile);
+                }
+                out.print("    '" + bisonFile.substring(firstSlash + 1) + ".yy'");
+                first = false;
+            }
+            out.println();
+            out.println("])");
+        }
 
         if (!binary.getExceptionObjects().isEmpty()) {
             out.println(objectsVariable + ".AddCxxExceptionSources([");
diff --git a/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/targets/BaseBinary.java b/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/targets/BaseBinary.java
index 5c8e7e7..19f928f 100644
--- a/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/targets/BaseBinary.java
+++ b/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/targets/BaseBinary.java
@@ -43,16 +43,11 @@ public abstract class BaseBinary extends BaseTarget {
     private Set<String> exceptionObjects = new TreeSet<>();
     private Set<String> noexceptionObjects = new TreeSet<>();
     private Set<String> linkedLibs = new TreeSet<>();
+    private Set<String> bisonFiles = new TreeSet<>();
+    private Set<String> flexFiles = new TreeSet<>();
 
     public BaseBinary(File filename) throws Exception {
         this.filename = filename;
-        try (
-                BufferedReader reader = new BufferedReader(new InputStreamReader(
-                        new FileInputStream(filename)))
-                ) {
-            ListNode rootNode = new GBuildParser().parse(reader);
-            parse(rootNode);
-        }
     }
 
     protected void parseAddApi(String[] args) throws Exception {
@@ -171,7 +166,37 @@ public abstract class BaseBinary extends BaseTarget {
             }
         }
     }
+    
+    protected void parseAddBisonFiles(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("Target name isn't " + name);
+        }
+        
+        for (String arg : Utils.spaceSeparatedTokens(args[1])) {
+            if (!bisonFiles.add(arg)) {
+                throw new Exception("Duplicate bison file " + arg);
+            }
+        }
+    }
 
+    protected void parseAddFlexFiles(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("Target name isn't " + name);
+        }
+        
+        for (String arg : Utils.spaceSeparatedTokens(args[1])) {
+            if (!flexFiles.add(arg)) {
+                throw new Exception("Duplicate flex file " + arg);
+            }
+        }
+    }
+    
     public String getName() {
         return name;
     }
@@ -208,4 +233,11 @@ public abstract class BaseBinary extends BaseTarget {
         return precompiledHeader;
     }
 
+    public Set<String> getBisonFiles() {
+        return bisonFiles;
+    }
+
+    public Set<String> getFlexFiles() {
+        return flexFiles;
+    }
 }
diff --git a/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/targets/Executable.java b/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/targets/Executable.java
index cc1ea1d..3897442 100644
--- a/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/targets/Executable.java
+++ b/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/targets/Executable.java
@@ -21,8 +21,16 @@
 
 package org.apache.openoffice.gotoSCons.targets;
 
+import java.io.BufferedReader;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
 import java.util.Arrays;
+import java.util.Set;
+import java.util.TreeSet;
+import org.apache.openoffice.gotoSCons.GBuildParser;
+import org.apache.openoffice.gotoSCons.Utils;
+import org.apache.openoffice.gotoSCons.raw.ListNode;
 import org.apache.openoffice.gotoSCons.raw.Node;
 import org.apache.openoffice.gotoSCons.raw.ValueNode;
 
@@ -32,6 +40,13 @@ public class Executable extends BaseBinary {
 
     public Executable(File filename) throws Exception {
         super(filename);
+        try (
+                BufferedReader reader = new BufferedReader(new InputStreamReader(
+                        new FileInputStream(filename)))
+                ) {
+            ListNode rootNode = new GBuildParser().parse(reader);
+            parse(rootNode);
+        }
     }
 
     @Override
@@ -47,10 +62,14 @@ public class Executable extends BaseBinary {
                 parseExecutableExecutable(args);
             } else if (function.equals("gb_Executable_add_api")) {
                 parseAddApi(args);
+            } else if (function.equals("gb_Executable_add_bison_files")) {
+                parseAddBisonFiles(args);
             } else if (function.equals("gb_Executable_add_defs")) {
                 parseAddDefs(args);
             } else if (function.equals("gb_Executable_add_exception_objects")) {
                 parseAddExceptionObjects(args);
+            } else if (function.equals("gb_Executable_add_flex_files")) {
+                parseAddFlexFiles(args);
             } else if (function.equals("gb_Executable_add_noexception_objects")) {
                 parseAddNoExceptionObjects(args);
             } else if (function.equals("gb_Executable_add_linked_libs")) {
diff --git a/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/targets/GoogleTest.java b/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/targets/GoogleTest.java
index f018d89..07cce28 100644
--- a/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/targets/GoogleTest.java
+++ b/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/targets/GoogleTest.java
@@ -21,8 +21,13 @@
 
 package org.apache.openoffice.gotoSCons.targets;
 
+import java.io.BufferedReader;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
 import java.util.Arrays;
+import org.apache.openoffice.gotoSCons.GBuildParser;
+import org.apache.openoffice.gotoSCons.raw.ListNode;
 import org.apache.openoffice.gotoSCons.raw.Node;
 import org.apache.openoffice.gotoSCons.raw.ValueNode;
 
@@ -30,6 +35,13 @@ public class GoogleTest extends BaseBinary {
 
     public GoogleTest(File filename) throws Exception {
         super(filename);
+        try (
+                BufferedReader reader = new BufferedReader(new InputStreamReader(
+                        new FileInputStream(filename)))
+                ) {
+            ListNode rootNode = new GBuildParser().parse(reader);
+            parse(rootNode);
+        }
     }
 
     @Override
diff --git a/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/targets/Library.java b/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/targets/Library.java
index 694f2b5..bd20fe8 100644
--- a/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/targets/Library.java
+++ b/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/targets/Library.java
@@ -21,8 +21,13 @@
 
 package org.apache.openoffice.gotoSCons.targets;
 
+import java.io.BufferedReader;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
 import java.util.Arrays;
+import org.apache.openoffice.gotoSCons.GBuildParser;
+import org.apache.openoffice.gotoSCons.raw.ListNode;
 import org.apache.openoffice.gotoSCons.raw.Node;
 import org.apache.openoffice.gotoSCons.raw.ValueNode;
 
@@ -33,6 +38,13 @@ public class Library extends BaseBinary {
     
     public Library(File filename) throws Exception {
         super(filename);
+        try (
+                BufferedReader reader = new BufferedReader(new InputStreamReader(
+                        new FileInputStream(filename)))
+                ) {
+            ListNode rootNode = new GBuildParser().parse(reader);
+            parse(rootNode);
+        }
     }
     
     @Override
diff --git a/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/targets/StaticLibrary.java b/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/targets/StaticLibrary.java
index 0175481..0f77cb0 100644
--- a/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/targets/StaticLibrary.java
+++ b/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/targets/StaticLibrary.java
@@ -20,8 +20,13 @@
  *************************************************************/
 package org.apache.openoffice.gotoSCons.targets;
 
+import java.io.BufferedReader;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
 import java.util.Arrays;
+import org.apache.openoffice.gotoSCons.GBuildParser;
+import org.apache.openoffice.gotoSCons.raw.ListNode;
 import org.apache.openoffice.gotoSCons.raw.Node;
 import org.apache.openoffice.gotoSCons.raw.ValueNode;
 
@@ -30,6 +35,13 @@ public class StaticLibrary extends BaseBinary {
 
     public StaticLibrary(File filename) throws Exception {
         super(filename);
+        try (
+                BufferedReader reader = new BufferedReader(new InputStreamReader(
+                        new FileInputStream(filename)))
+                ) {
+            ListNode rootNode = new GBuildParser().parse(reader);
+            parse(rootNode);
+        }
     }
     
     @Override
diff --git a/main/site_scons/executable.py b/main/site_scons/executable.py
index fb602ae..6009dc2 100644
--- a/main/site_scons/executable.py
+++ b/main/site_scons/executable.py
@@ -28,13 +28,12 @@ class AOOExecutable:
         self.env = DefaultEnvironment().Clone()
         self.exe = self.env.Program(
             target,
-            source = objects
+            source = objects.objects
         )
         self.env['AOO_THIS'] = self.exe[0]
         self.env.Append(LINKFLAGS=platform.getExecutableLDFlags(soenv, group, OUTDIRLOCATION, DEBUGGING, DEBUGLEVEL))
         self.env.Append(LIBPATH=platform.getLDPATH(soenv))
         self.env['AOO_GROUP'] = group
-        self.env['AOO_LAYER'] = platform.getLibraryGroupLayer(group)
 
     def AddLinkedLibs(self, libs):
         self.env.Append(LIBS=libs)
diff --git a/main/site_scons/platform/freebsd.py b/main/site_scons/platform/freebsd.py
index eda47ff..e5e3668 100644
--- a/main/site_scons/platform/freebsd.py
+++ b/main/site_scons/platform/freebsd.py
@@ -217,7 +217,7 @@ class FreeBSD(aooplatform.Platform):
     def getExecutableLDFlags(self, soenv, group, outDirLocation, debugging, debugLevel):
         flags = self.getLDFlags(soenv, debugging, debugLevel)
         flags += [
-            '-Wl,-rpath,' + self.getRPATH(self.executableGroupLayers(group)),
+            '-Wl,-rpath,' + self.getRPATH(self.executableGroupLayers[group]),
             '-Wl,-rpath-link,' + outDirLocation
         ]
         return flags
diff --git a/main/site_scons/sharedObjects.py b/main/site_scons/sharedObjects.py
index 6756cbd..45d435c 100644
--- a/main/site_scons/sharedObjects.py
+++ b/main/site_scons/sharedObjects.py
@@ -27,6 +27,9 @@ class AOOSharedObjects:
     def __init__(self):
         self.env = DefaultEnvironment().Clone()
         self.env.Append(CPPDEFINES=platform.getLibraryDefs(soenv))
+        self.env.Replace(CXXFILESUFFIX='.cxx')
+        self.env.Replace(YACCHXXFILESUFFIX='.hxx')
+        self.env.Append(YACCFLAGS='-d')
         if DEBUGGING:
             self.env.Append(CFLAGS=platform.getDebugCFlags(soenv['COM'], soenv.get('ENABLE_SYMBOLS')))
             self.env.Append(CXXFLAGS=platform.getDebugCFlags(soenv['COM'], soenv.get('ENABLE_SYMBOLS')))
@@ -61,3 +64,12 @@ class AOOSharedObjects:
                )
            )
 
+    def AddBisonFiles(self, bisonFiles):
+        # We #include this file in other files instead of compiling it
+        for bisonFile in bisonFiles:
+            self.env.CXXFile(File(bisonFile))
+
+    def AddFlexFiles(self, flexFiles):
+        # We #include this file in other files instead of compiling it
+        for flexFile in flexFiles:
+            self.env.CXXFile(File(flexFile))
diff --git a/main/site_scons/site_init.py b/main/site_scons/site_init.py
index ce31f8f..765ec64 100644
--- a/main/site_scons/site_init.py
+++ b/main/site_scons/site_init.py
@@ -65,6 +65,7 @@ from sharedLibrary import AOOSharedLibrary
 from sharedObjects import AOOSharedObjects
 from Ant import *
 from AllLangRes import *
+from executable import *
 from JunitTest import *
 from GoogleTest import *
 from Zip import *
diff --git a/main/site_scons/staticLibrary.py b/main/site_scons/staticLibrary.py
index 4d3bed8..40cc4bb 100644
--- a/main/site_scons/staticLibrary.py
+++ b/main/site_scons/staticLibrary.py
@@ -28,7 +28,7 @@ class AOOStaticLibrary:
         self.env = DefaultEnvironment().Clone()
         self.staticLib = self.env.StaticLibrary(
             target,
-            source = sharedObjects
+            source = sharedObjects.objects
         )
         self.env['AOO_THIS'] = self.sharedLib[0]
         self.env.Append(LINKFLAGS=platform.getStaticLibraryLDFlags(soenv, DEBUGGING, DEBUGLEVEL))