diff options
author | truckman <truckman@FreeBSD.org> | 2015-02-25 14:01:58 +0800 |
---|---|---|
committer | truckman <truckman@FreeBSD.org> | 2015-02-25 14:01:58 +0800 |
commit | 79fea57670fccfe4c7abc27b498f9c5b8ca1cec0 (patch) | |
tree | fcaf359642ba271005a58b0364266a76fdce35cf | |
parent | b74649b0848d73322941b67f75ffb0a4be1be002 (diff) | |
download | freebsd-ports-gnome-79fea57670fccfe4c7abc27b498f9c5b8ca1cec0.tar.gz freebsd-ports-gnome-79fea57670fccfe4c7abc27b498f9c5b8ca1cec0.tar.zst freebsd-ports-gnome-79fea57670fccfe4c7abc27b498f9c5b8ca1cec0.zip |
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.in | 79 |
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); + } + + #------------------------------------------------------------ |