summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDon Lewis <truckman@FreeBSD.org>2015-02-25 06:01:58 +0000
committerDon Lewis <truckman@FreeBSD.org>2015-02-25 06:01:58 +0000
commit5e342df15e34d353724ca53f8695613580ca3c6c (patch)
treefcaf359642ba271005a58b0364266a76fdce35cf
parentUndo an unintended Makefile change that slipped in. (diff)
Fix build breakage when libreoffice is installed.
The problem is that libreoffice installs its own copy of unopkg in ${PREFIX}/bin and that the openoffice build attempts to use this copy of unopkg instead of the openoffice version which is in subdirectory of ${WRKSRC}. The reason is that the openoffice build expects to find its own copy of unopkg by depending on having "." in its $PATH, but its $PATH has ${PREFIX}/bin before ".". Openoffice attempts to do the right thing by first constructing $PATH by prepending "." and a small number of other directories where it stashes executables used during the build to the value of $PATH that it inherits from the environment. Things go wrong when it tries to add the paths for ${CC}, perl, and java to $PATH. If $PATH has /usr/bin before ${PREFIX}/bin, the openoffice build finds the perl symlink in /usr/bin before it finds perl in ${PREFIX}/bin, so it prepends ${PREFIX}/bin to $PATH to try to ensure that the correct version of perl will be found first. This moves ${PREFIX}/bin earlier in $PATH than ".". The operation to put the path to ${CC} in $PATH has a different problem. It uses the variable COMPATH for this, which is the dirname of the patch to $CC, with the trailing /bin stripped off. That results in /usr/local being added to $PATH, which is nonsensical, though mostly harmless. There are three fixes here: * Always keep the parts of $PATH for the directories under ${WRKSRC}, including "." at the beginning of the path. * Ignore symlinks to executables when deciding to prepend a directory to the path. * Append "/bin" when using COMPATH so that the result points to the directory where ${CC} actually resides. There is actually another variable CC_PATH, but it has an extra trailing "/", so it doesn't match ${PREFIX}/bin. PR: 195967 Differential Revision: https://reviews.freebsd.org/D1957 Approved by: mat (mentor)
-rw-r--r--editors/openoffice-4/files/patch-set_soenv.in79
1 files changed, 79 insertions, 0 deletions
diff --git a/editors/openoffice-4/files/patch-set_soenv.in b/editors/openoffice-4/files/patch-set_soenv.in
new file mode 100644
index 000000000000..e03a7829946d
--- /dev/null
+++ b/editors/openoffice-4/files/patch-set_soenv.in
@@ -0,0 +1,79 @@
+--- set_soenv.in.orig 2015-01-17 23:35:07.000000000 -0800
++++ set_soenv.in 2015-02-23 16:02:44.000000000 -0800
+@@ -359,7 +359,7 @@
+ elsif ( $platform =~ m/freebsd/ )
+ { $BIG_SVX = "TRUE";
+ $COM = "GCC";
+- $COMPATH = '@COMPATH@';
++ $COMPATH = '@COMPATH@' . '/bin';
+ $CVER = "C300";
+ $GUI = "UNX";
+ $GUIBASE = "unx";
+@@ -2617,26 +2617,37 @@
+ my @originalPairs = @_;
+ my @pairs = @originalPairs;
+ my @Path = split /$ps/, $oldPath;
++ my @buildPath;
++ my @sysPath;
++ my $elem;
++
++ for $elem (@Path) {
++ if ($elem eq '.' || $elem =~ m'^$SOLARENV/' ||
++ $elem =~ m'/solenv/') {
++ push @buildPath, $elem;
++ } else {
++ push @sysPath, $elem;
++ }
++ }
+
+ while (@pairs) {
+ my $path = shift @pairs;
+ my $cmd = shift @pairs;
+ my $to_append = 1;
+- my $elem;
+
+ if (! -x "$path/$cmd") {
+ AddWarning ("Missing executable $path/$cmd\n");
+ }
+
+- for $elem (@Path) {
++ for $elem (@sysPath) {
+ if ($elem eq $path) {
+ # print "Hit duplicate path in path; break\n";
+ $to_append = 0;
+ last;
+ }
+- if (-f "$elem/$cmd") {
++ if (-f "$elem/$cmd" && ! -l "$elem/$cmd") {
+ # print "Element already in path ...\n";
+- unshift @Path, $path;
++ unshift @sysPath, $path;
+ $to_append = 0;
+ last;
+ } else {
+@@ -2644,7 +2655,7 @@
+ }
+ }
+ if ($to_append) {
+- push @Path, $path;
++ push @sysPath, $path;
+ }
+ }
+
+@@ -2654,14 +2665,14 @@
+ my $cmd = shift @pairs;
+ my $realpath;
+
+- $realpath = PathLookup ($cmd, @Path);
++ $realpath = PathLookup ($cmd, @sysPath);
+ if (!($realpath eq $path)) {
+ AddWarning ("Path conflict for executables " .
+ "$path/$cmd against $realpath");
+ }
+ }
+
+- return join $ps, CleanupPath (@Path);
++ return join $ps, @buildPath, CleanupPath (@sysPath);
+ }
+
+ #------------------------------------------------------------