about summary refs log tree commit diff
path: root/nixpkgs/pkgs/build-support/setup-hooks
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2020-04-01 15:50:50 +0000
committerAlyssa Ross <hi@alyssa.is>2020-04-01 15:50:50 +0000
commit75eafe97f7df0d653bec67f3962214d7c357831f (patch)
tree09f2cc901e0e637876cbb78d192dfe2fcfef8156 /nixpkgs/pkgs/build-support/setup-hooks
parenta53b121bf4331497da63df3b1b7f1a7897dad146 (diff)
parenta2e06fc3423c4be53181b15c28dfbe0bcf67dd73 (diff)
downloadnixlib-75eafe97f7df0d653bec67f3962214d7c357831f.tar
nixlib-75eafe97f7df0d653bec67f3962214d7c357831f.tar.gz
nixlib-75eafe97f7df0d653bec67f3962214d7c357831f.tar.bz2
nixlib-75eafe97f7df0d653bec67f3962214d7c357831f.tar.lz
nixlib-75eafe97f7df0d653bec67f3962214d7c357831f.tar.xz
nixlib-75eafe97f7df0d653bec67f3962214d7c357831f.tar.zst
nixlib-75eafe97f7df0d653bec67f3962214d7c357831f.zip
Merge commit 'a2e06fc3423c4be53181b15c28dfbe0bcf67dd73'
Diffstat (limited to 'nixpkgs/pkgs/build-support/setup-hooks')
-rw-r--r--nixpkgs/pkgs/build-support/setup-hooks/enable-coverage-instrumentation.sh13
-rw-r--r--nixpkgs/pkgs/build-support/setup-hooks/make-symlinks-relative.sh28
-rw-r--r--nixpkgs/pkgs/build-support/setup-hooks/wrap-gapps-hook.sh127
3 files changed, 95 insertions, 73 deletions
diff --git a/nixpkgs/pkgs/build-support/setup-hooks/enable-coverage-instrumentation.sh b/nixpkgs/pkgs/build-support/setup-hooks/enable-coverage-instrumentation.sh
index 7175b408b02f..2b48fea4ff0b 100644
--- a/nixpkgs/pkgs/build-support/setup-hooks/enable-coverage-instrumentation.sh
+++ b/nixpkgs/pkgs/build-support/setup-hooks/enable-coverage-instrumentation.sh
@@ -2,18 +2,7 @@ postPhases+=" cleanupBuildDir"
 
 # Force GCC to build with coverage instrumentation.  Also disable
 # optimisation, since it may confuse things.
-export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -O0 --coverage"
-
-# FIXME: Handle the case where postUnpack is already set.
-postUnpack() {
-    # This is an uberhack to prevent libtool from remoaving gcno
-    # files.  This has been fixed in libtool, but there are packages
-    # out there with old ltmain.sh scripts.  See
-    # http://www.mail-archive.com/libtool@gnu.org/msg10725.html
-    for i in $(find -name ltmain.sh); do
-        substituteInPlace $i --replace '*.$objext)' '*.$objext | *.gcno)'
-    done
-}
+export NIX_CFLAGS_COMPILE="${NIX_CFLAGS_COMPILE:-} -O0 --coverage"
 
 # Get rid of everything that isn't a gcno file or a C source file.
 # Also strip the `.tmp_' prefix from gcno files.  (The Linux kernel
diff --git a/nixpkgs/pkgs/build-support/setup-hooks/make-symlinks-relative.sh b/nixpkgs/pkgs/build-support/setup-hooks/make-symlinks-relative.sh
new file mode 100644
index 000000000000..0608d3ca81c4
--- /dev/null
+++ b/nixpkgs/pkgs/build-support/setup-hooks/make-symlinks-relative.sh
@@ -0,0 +1,28 @@
+fixupOutputHooks+=(_makeSymlinksRelative)
+
+# For every symlink in $output that refers to another file in $output
+# ensure that the symlink is relative. This removes references to the output
+# has from the resulting store paths and thus the NAR files.
+_makeSymlinksRelative() {
+    local symlinkTarget
+
+    if [ -n "${dontRewriteSymlinks-}" ]; then
+        return 0
+    fi
+
+    while IFS= read -r -d $'\0' f; do
+        symlinkTarget=$(readlink "$f")
+        if [[ "$symlinkTarget"/ != "$prefix"/* ]]; then
+            # skip this symlink as it doesn't point to $prefix
+            continue
+        fi
+
+        if [ ! -e "$symlinkTarget" ]; then
+            echo "the symlink $f is broken, it points to $symlinkTarget (which is missing)"
+        fi
+
+        echo "rewriting symlink $f to be relative to $prefix"
+        ln -snrf "$symlinkTarget" "$f"
+
+    done < <(find $prefix -type l -print0)
+}
diff --git a/nixpkgs/pkgs/build-support/setup-hooks/wrap-gapps-hook.sh b/nixpkgs/pkgs/build-support/setup-hooks/wrap-gapps-hook.sh
index ff0cda7eaf0d..1a46e075dbe7 100644
--- a/nixpkgs/pkgs/build-support/setup-hooks/wrap-gapps-hook.sh
+++ b/nixpkgs/pkgs/build-support/setup-hooks/wrap-gapps-hook.sh
@@ -9,6 +9,37 @@ find_gio_modules() {
 
 addEnvHooks "${targetOffset:?}" find_gio_modules
 
+gappsWrapperArgsHook() {
+    if [ -n "$GDK_PIXBUF_MODULE_FILE" ]; then
+        gappsWrapperArgs+=(--set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE")
+    fi
+
+    if [ -n "$XDG_ICON_DIRS" ]; then
+        gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS")
+    fi
+
+    if [ -n "$GSETTINGS_SCHEMAS_PATH" ]; then
+        gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH")
+    fi
+
+    # Check for prefix as well
+    if [ -d "${prefix:?}/share" ]; then
+        gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "$prefix/share")
+    fi
+
+    if [ -d "$prefix/lib/gio/modules" ] && [ -n "$(ls -A "$prefix/lib/gio/modules")" ]; then
+        gappsWrapperArgs+=(--prefix GIO_EXTRA_MODULES : "$prefix/lib/gio/modules")
+    fi
+
+    for v in ${wrapPrefixVariables:-} GST_PLUGIN_SYSTEM_PATH_1_0 GI_TYPELIB_PATH GRL_PLUGIN_PATH; do
+        if [ -n "${!v}" ]; then
+            gappsWrapperArgs+=(--prefix "$v" : "${!v}")
+        fi
+    done
+}
+
+preFixupPhases+=" gappsWrapperArgsHook"
+
 wrapGApp() {
     local program="$1"
     shift 1
@@ -17,72 +48,46 @@ wrapGApp() {
 
 # Note: $gappsWrapperArgs still gets defined even if ${dontWrapGApps-} is set.
 wrapGAppsHook() {
-  # guard against running multiple times (e.g. due to propagation)
-  [ -z "$wrapGAppsHookHasRun" ] || return 0
-  wrapGAppsHookHasRun=1
-
-  if [ -n "$GDK_PIXBUF_MODULE_FILE" ]; then
-    gappsWrapperArgs+=(--set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE")
-  fi
-
-  if [ -n "$XDG_ICON_DIRS" ]; then
-    gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS")
-  fi
-
-  if [ -n "$GSETTINGS_SCHEMAS_PATH" ]; then
-    gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH")
-  fi
-
-  if [ -d "${prefix:?}/share" ]; then
-    gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "$prefix/share")
-  fi
+    # guard against running multiple times (e.g. due to propagation)
+    [ -z "$wrapGAppsHookHasRun" ] || return 0
+    wrapGAppsHookHasRun=1
 
-  if [ -d "$prefix/lib/gio/modules" ] && [ -n "$(ls -A "$prefix/lib/gio/modules")" ] ; then
-    gappsWrapperArgs+=(--prefix GIO_EXTRA_MODULES : "$prefix/lib/gio/modules")
-  fi
+    if [[ -z "${dontWrapGApps:-}" ]]; then
+        targetDirsThatExist=()
+        targetDirsRealPath=()
 
-  for v in ${wrapPrefixVariables:-} GST_PLUGIN_SYSTEM_PATH_1_0 GI_TYPELIB_PATH GRL_PLUGIN_PATH; do
-    if [ -n "${!v}" ]; then
-      gappsWrapperArgs+=(--prefix "$v" : "${!v}")
-    fi
-  done
-
-  if [[ -z "${dontWrapGApps:-}" ]]; then
-    targetDirsThatExist=()
-    targetDirsRealPath=()
-
-    # wrap binaries
-    targetDirs=( "${prefix}/bin" "${prefix}/libexec" )
-    for targetDir in "${targetDirs[@]}"; do
-      if [[ -d "${targetDir}" ]]; then
-        targetDirsThatExist+=("${targetDir}")
-        targetDirsRealPath+=("$(realpath "${targetDir}")/")
-        find "${targetDir}" -type f -executable -print0 \
-          | while IFS= read -r -d '' file; do
-          echo "Wrapping program '${file}'"
-          wrapGApp "${file}"
+        # wrap binaries
+        targetDirs=("${prefix}/bin" "${prefix}/libexec")
+        for targetDir in "${targetDirs[@]}"; do
+            if [[ -d "${targetDir}" ]]; then
+                targetDirsThatExist+=("${targetDir}")
+                targetDirsRealPath+=("$(realpath "${targetDir}")/")
+                find "${targetDir}" -type f -executable -print0 |
+                    while IFS= read -r -d '' file; do
+                        echo "Wrapping program '${file}'"
+                        wrapGApp "${file}"
+                    done
+            fi
         done
-      fi
-    done
 
-    # wrap links to binaries that point outside targetDirs
-    # Note: links to binaries within targetDirs do not need
-    #       to be wrapped as the binaries have already been wrapped
-    if [[ ${#targetDirsThatExist[@]} -ne 0 ]]; then
-      find "${targetDirsThatExist[@]}" -type l -xtype f -executable -print0 \
-        | while IFS= read -r -d '' linkPath; do
-        linkPathReal=$(realpath "${linkPath}")
-        for targetPath in "${targetDirsRealPath[@]}"; do
-          if [[ "$linkPathReal" == "$targetPath"* ]]; then
-            echo "Not wrapping link: '$linkPath' (already wrapped)"
-            continue 2
-          fi
-        done
-        echo "Wrapping link: '$linkPath'"
-        wrapGApp "${linkPath}"
-      done
+        # wrap links to binaries that point outside targetDirs
+        # Note: links to binaries within targetDirs do not need
+        #       to be wrapped as the binaries have already been wrapped
+        if [[ ${#targetDirsThatExist[@]} -ne 0 ]]; then
+            find "${targetDirsThatExist[@]}" -type l -xtype f -executable -print0 |
+                while IFS= read -r -d '' linkPath; do
+                    linkPathReal=$(realpath "${linkPath}")
+                    for targetPath in "${targetDirsRealPath[@]}"; do
+                        if [[ "$linkPathReal" == "$targetPath"* ]]; then
+                            echo "Not wrapping link: '$linkPath' (already wrapped)"
+                            continue 2
+                        fi
+                    done
+                    echo "Wrapping link: '$linkPath'"
+                    wrapGApp "${linkPath}"
+                done
+        fi
     fi
-  fi
 }
 
 fixupOutputHooks+=(wrapGAppsHook)