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))