summary refs log tree commit diff
path: root/pkgs/build-support/setup-hooks
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2012-05-19 02:52:36 +0000
committerEelco Dolstra <eelco.dolstra@logicblox.com>2012-05-19 02:52:36 +0000
commit41840af6894bf718a1038ba1045adef26a687919 (patch)
tree0975bb732d3c3bd20ea3b31558c7fa8aba060702 /pkgs/build-support/setup-hooks
parent76c0be09f8aa397231f81c998c9b4d850e4a50df (diff)
downloadnixpkgs-41840af6894bf718a1038ba1045adef26a687919.tar
nixpkgs-41840af6894bf718a1038ba1045adef26a687919.tar.gz
nixpkgs-41840af6894bf718a1038ba1045adef26a687919.tar.bz2
nixpkgs-41840af6894bf718a1038ba1045adef26a687919.tar.lz
nixpkgs-41840af6894bf718a1038ba1045adef26a687919.tar.xz
nixpkgs-41840af6894bf718a1038ba1045adef26a687919.tar.zst
nixpkgs-41840af6894bf718a1038ba1045adef26a687919.zip
* Add a setup hook ‘autoreconfHook’ to simplify packages that need to
  run autoreconf:

    buildInputs = [ autoreconfHook ];

  is essentially equivalent to

    buildInputs = [ autoconf automake libtool ];
    preConfigure = "autoreconf -i";

svn path=/nixpkgs/branches/x-updates/; revision=34181
Diffstat (limited to 'pkgs/build-support/setup-hooks')
-rw-r--r--pkgs/build-support/setup-hooks/autoreconf.sh11
-rw-r--r--pkgs/build-support/setup-hooks/make-wrapper.sh102
2 files changed, 113 insertions, 0 deletions
diff --git a/pkgs/build-support/setup-hooks/autoreconf.sh b/pkgs/build-support/setup-hooks/autoreconf.sh
new file mode 100644
index 00000000000..027c8322163
--- /dev/null
+++ b/pkgs/build-support/setup-hooks/autoreconf.sh
@@ -0,0 +1,11 @@
+preConfigurePhases+=" autoreconfPhase"
+
+for i in @autoconf@ @automake@ @libtool@; do
+    findInputs $i nativePkgs propagated-build-native-inputs
+done
+
+autoreconfPhase() {
+    runHook preAutoreconf
+    autoreconf ${autoreconfFlags:---install --force}
+    runHook postAutoreconf
+}
diff --git a/pkgs/build-support/setup-hooks/make-wrapper.sh b/pkgs/build-support/setup-hooks/make-wrapper.sh
new file mode 100644
index 00000000000..41f2a59246d
--- /dev/null
+++ b/pkgs/build-support/setup-hooks/make-wrapper.sh
@@ -0,0 +1,102 @@
+makeWrapper() {
+    local original=$1
+    local wrapper=$2
+    local params varName value command separator n fileNames
+    local flagsBefore flags
+
+    mkdir -p "$(dirname $wrapper)"
+
+    echo "#! $SHELL -e" > $wrapper
+
+    params=("$@")
+    for ((n = 2; n < ${#params[*]}; n += 1)); do
+        p=${params[$n]}
+
+        if test "$p" = "--set"; then
+            varName=${params[$((n + 1))]}
+            value=${params[$((n + 2))]}
+            n=$((n + 2))
+            echo "export $varName=$value" >> $wrapper
+        fi
+
+        if test "$p" = "--run"; then
+            command=${params[$((n + 1))]}
+            n=$((n + 1))
+            echo "$command" >> $wrapper
+        fi
+
+        if test "$p" = "--suffix" -o "$p" = "--prefix"; then
+            varName=${params[$((n + 1))]}
+            separator=${params[$((n + 2))]}
+            value=${params[$((n + 3))]}
+            n=$((n + 3))
+            if test -n "$value"; then
+                if test "$p" = "--suffix"; then
+                    echo "export $varName=\$$varName\${$varName:+$separator}$value" >> $wrapper
+                else
+                    echo "export $varName=$value\${$varName:+$separator}\$$varName" >> $wrapper
+                fi
+            fi
+        fi
+
+        if test "$p" = "--suffix-each"; then
+            varName=${params[$((n + 1))]}
+            separator=${params[$((n + 2))]}
+            values=${params[$((n + 3))]}
+            n=$((n + 3))
+            for value in $values; do
+                echo "export $varName=\$$varName\${$varName:+$separator}$value" >> $wrapper
+            done
+        fi
+
+        if test "$p" = "--suffix-contents" -o "$p" = "--prefix-contents"; then
+            varName=${params[$((n + 1))]}
+            separator=${params[$((n + 2))]}
+            fileNames=${params[$((n + 3))]}
+            n=$((n + 3))
+            for fileName in $fileNames; do
+                if test "$p" = "--suffix-contents"; then
+                    echo "export $varName=\$$varName\${$varName:+$separator}$(cat $fileName)" >> $wrapper
+                else
+                    echo "export $varName=$(cat $fileName)\${$varName:+$separator}\$$varName" >> $wrapper
+                fi
+            done
+        fi
+
+        if test "$p" = "--add-flags"; then
+            flags=${params[$((n + 1))]}
+            n=$((n + 1))
+            flagsBefore="$flagsBefore $flags"
+        fi
+    done
+
+    # Note: extraFlagsArray is an array containing additional flags
+    # that may be set by --run actions.
+    echo exec "$original" $flagsBefore '"${extraFlagsArray[@]}"' '"$@"' >> $wrapper
+    
+    chmod +x $wrapper
+}
+
+addSuffix() {
+    suffix=$1
+    shift
+    for name in "$@"; do
+        echo "$name$suffix"
+    done
+}
+
+filterExisting() {
+    for fn in "$@"; do
+        if test -e "$fn"; then
+            echo "$fn"
+        fi
+    done
+}
+
+# Syntax: wrapProgram <PROGRAM> <MAKE-WRAPPER FLAGS...>
+wrapProgram() {
+    local prog="$1"
+    local hidden="$(dirname "$prog")/.$(basename "$prog")"-wrapped
+    mv $prog $hidden
+    makeWrapper $hidden $prog "$@"
+}