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/04/15 17:09:37 UTC
[openoffice] branch scons-build updated: Redo the Install target to
output files per directory.
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 08e2346 Redo the Install target to output files per directory.
08e2346 is described below
commit 08e2346aa6bd735495b133ef95378274fb7f8082
Author: Damjan Jovanovic <da...@apache.org>
AuthorDate: Tue Feb 11 08:03:35 2020 +0200
Redo the Install target to output files per directory.
Patch by: me
---
.../openoffice/gotoSCons/SConsConverter.java | 82 +++++++++++++++++-----
1 file changed, 66 insertions(+), 16 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 c1c8c29..99f5a7e 100644
--- a/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/SConsConverter.java
+++ b/gotoSCons/src/main/java/org/apache/openoffice/gotoSCons/SConsConverter.java
@@ -24,6 +24,8 @@ package org.apache.openoffice.gotoSCons;
import java.io.File;
import java.io.PrintStream;
import java.util.Map;
+import java.util.TreeMap;
+import java.util.TreeSet;
import org.apache.opeonoffice.gotoSCons.targets.BaseBinary;
import org.apache.opeonoffice.gotoSCons.targets.Executable;
import org.apache.opeonoffice.gotoSCons.targets.Library;
@@ -55,22 +57,7 @@ public class SConsConverter {
}
for (Pkg pkg : module.getPackages().values()) {
- for (Map.Entry<String, String> entry : pkg.getFilesToFrom().entrySet()) {
- String toPath = entry.getKey();
- String fromPath = pkg.getBaseDir() + '/' + entry.getValue();
-
- File moduleDir = module.getFilename().getParentFile().getCanonicalFile();
- String expandedFromPath = fromPath.replace("$(SRCDIR)", moduleDir.getParentFile().getCanonicalPath());
- String moduleRelativeFromPath;
- if (expandedFromPath.startsWith(moduleDir.getCanonicalPath())) {
- moduleRelativeFromPath = expandedFromPath.substring(moduleDir.getCanonicalPath().length() + 1);
- } else {
- throw new Exception("Cannot find module relative path to " + fromPath);
- }
-
- out.println(String.format("Install('${OUTDIR}/%s', '%s')", toPath, moduleRelativeFromPath));
- }
- out.println();
+ convertPackage(module, pkg);
}
}
@@ -279,4 +266,67 @@ public class SConsConverter {
return objectsVariable;
}
+
+ private void convertPackage(Module module, Pkg pkg) throws Exception {
+ Map<String, TreeSet<String>> filesByInstallDir = new TreeMap<>();
+
+ for (Map.Entry<String, String> entry : pkg.getFilesToFrom().entrySet()) {
+ String toPath = entry.getKey();
+ String fromPath = pkg.getBaseDir() + '/' + entry.getValue();
+
+ if (!filenameFromPath(toPath).equals(filenameFromPath(fromPath))) {
+ throw new Exception("Src/dst file changes name: " + toPath + " vs " + fromPath);
+ }
+
+ File moduleDir = module.getFilename().getParentFile().getCanonicalFile();
+ String expandedFromPath = fromPath.replace("$(SRCDIR)", moduleDir.getParentFile().getCanonicalPath());
+ String moduleRelativeFromPath;
+ if (expandedFromPath.startsWith(moduleDir.getCanonicalPath())) {
+ moduleRelativeFromPath = expandedFromPath.substring(moduleDir.getCanonicalPath().length() + 1);
+ } else {
+ throw new Exception("Cannot find module relative path to " + fromPath);
+ }
+
+ String installDir = parentDir(toPath);
+ TreeSet<String> installFiles = filesByInstallDir.get(installDir);
+ if (installFiles == null) {
+ installFiles = new TreeSet<>();
+ filesByInstallDir.put(installDir, installFiles);
+ }
+ installFiles.add(moduleRelativeFromPath);
+ }
+
+ for (Map.Entry<String,TreeSet<String>> entry : filesByInstallDir.entrySet()) {
+ out.println(String.format("Install('${OUTDIR}/%s', [", entry.getKey()));
+ boolean first = true;
+ for (String fromPath : entry.getValue()) {
+ if (!first) {
+ out.println(",");
+ }
+ out.print(" '" + fromPath + "'");
+ first = false;
+ }
+ out.println();
+ out.println("])");
+ }
+ out.println();
+ }
+
+ private static String parentDir(String path) throws Exception {
+ int lastSlash = path.lastIndexOf('/');
+ if (lastSlash >= 0) {
+ return path.substring(0, lastSlash);
+ } else {
+ throw new Exception("Doesn't contain directory path: " + path);
+ }
+ }
+
+ private static String filenameFromPath(String path) {
+ int lastSlash = path.lastIndexOf('/');
+ if (lastSlash >= 0) {
+ return path.substring(lastSlash + 1);
+ } else {
+ return path;
+ }
+ }
}