about summary refs log tree commit diff
path: root/pkgs/development/libraries/qt-5
diff options
context:
space:
mode:
authorGraham Bennett <graham@grahambennett.org>2020-09-02 23:25:10 +0100
committerGraham Bennett <graham@grahambennett.org>2020-09-06 20:24:14 +0100
commit8e4e38cdcdc5f2be6875e6506d0789e9e5411ea6 (patch)
tree3f25b3222cdea76eb6939374dc2bc59649be4389 /pkgs/development/libraries/qt-5
parente560459c5b06ce1351ae5eb8988f8ce87602058a (diff)
octave: Fix libtool framework link failure on Darwin
This fix moves linker flags of the form `-framework foo` from dependency_libs to
inherited_linker_flags, since libtool doesn't understand them.  See #96977 for
details.

Fixes #96977
Diffstat (limited to 'pkgs/development/libraries/qt-5')
-rw-r--r--pkgs/development/libraries/qt-5/hooks/fix-qmake-libtool.sh13
1 files changed, 12 insertions, 1 deletions
diff --git a/pkgs/development/libraries/qt-5/hooks/fix-qmake-libtool.sh b/pkgs/development/libraries/qt-5/hooks/fix-qmake-libtool.sh
index 5acaeb8244666..6aaeda052d706 100644
--- a/pkgs/development/libraries/qt-5/hooks/fix-qmake-libtool.sh
+++ b/pkgs/development/libraries/qt-5/hooks/fix-qmake-libtool.sh
@@ -5,8 +5,19 @@
 fixQmakeLibtool() {
     if [ -d "$1" ]; then
         find "$1" -name '*.la' | while read la; do
+            set +e
+            framework_libs=$(grep '^dependency_libs' "$la" | grep -Eo -- '-framework +\w+' | tr '\n' ' ')
+            set -e
             sed -i "$la" \
-                -e '/^dependency_libs/ s,\(/[^ ]\+\)/lib\([^/ ]\+\)\.so,-L\1 -l\2,g'
+                -e '/^dependency_libs/ s,\(/[^ ]\+\)/lib\([^/ ]\+\)\.so,-L\1 -l\2,g' \
+                -e '/^dependency_libs/ s,-framework \+\w\+,,g'
+            if [ ! -z "$framework_libs" ]; then
+                if grep '^inherited_linker_flags=' $la >/dev/null; then
+                    sed -i "$la" -e "s/^\(inherited_linker_flags='[^']*\)/\1 $framework_libs/"
+                else
+                    echo "inherited_linker_flags='$framework_libs'" >> "$la"
+                fi
+            fi
         done
     fi
 }