]> gitweb @ CieloNegro.org - build-hc-pkg.git/commitdiff
Fix conflicts
authorPHO <pho@cielonegro.org>
Thu, 23 Feb 2012 09:57:31 +0000 (18:57 +0900)
committerPHO <pho@cielonegro.org>
Thu, 23 Feb 2012 09:57:31 +0000 (18:57 +0900)
build-hc-pkg

index 5743b3cf1554a574db00c73649001000750cb3dd..51b56f19d3e7d9f11c5999cf1461a31a284ce132 100755 (executable)
 #!/usr/bin/env bash
 set -e
-declare canon_name="canon-name/src/canon-name"
-declare archive="work/archive"
-
-if [[ ! -x "$canon_name" ]]; then
-    gmake -f mk/canon-name.mk
-fi
-readonly platform=$("$canon_name")
-
-echo "This is build-hc-pkg, running on \"$platform\"."
-
-if [[ "$1" = "clean" ]]; then
-    echo "Cleaning..."
-    rm -rf work
-    exit
-fi
-
-declare srcpath=""
-if [[ -e "$archive" ]]; then
-    srcpath=$(cat "$archive")
-fi
-
-if [[ -z "$srcpath" || ! -e "$srcpath" ]]; then
-    mkdir -p work
-    read -e -p "Enter the file path to ghc-x.y.z-src.tar.bz2: " srcpath
-    if [[ -e "$srcpath" ]]; then
-        mkdir -p work
-        echo "$srcpath" > "$archive"
+
+function detect_platform_type () {
+    local -r canon_name="canon-name/src/canon-name"
+
+    if [[ ! -x "$canon_name" ]]; then
+        gmake -f mk/canon-name.mk
+    fi
+
+    "$canon_name"
+}
+
+function detect_number_of_cpus () {
+    case "$(detect_platform_type)" in
+        *-*-darwin)
+            ioreg -r -c IOCPU | fgrep -c IOCPUNumber
+            ;;
+        *)
+            echo "WARNING: I don't know how to detect the number of processors on this platform." >&2
+            echo "WARNING: GHC will be built using only 1 processor. Expect some slowdown." >&2
+            echo 1
+            ;;
+    esac
+}
+
+function detect_gnu_tar () {
+    if which gnutar >/dev/null 2>&1; then
+        echo "gnutar"
+    elif which gtar >/dev/null 2>&1; then
+        echo "gtar"
     else
-        echo "$srcpath not found." >&2
+        echo "We need GNU tar to be installed." >&2
         exit 1
     fi
-fi
-
-# What's the name of our GNU tar?
-declare gnutar=""
-if which gnutar >/dev/null 2>&1; then
-    gnutar="gnutar"
-elif which gtar >/dev/null 2>&1; then
-    gnutar="gtar"
-else
-    echo "We need GNU tar to be installed." >&2
-    exit 1
-fi
-
-gmake -f mk/main.mk \
-    SRCPATH="$srcpath" \
-    PLATFORM="$platform" \
-    GNUTAR="$gnutar" \
-    SHELL="$SHELL"
-
-echo "If you are done, run \"$0 clean\" to cleanup the working directory."
+}
+
+function say_hello () {
+    local -r platform=$(detect_platform_type)
+    local -r n_cpus=$(detect_number_of_cpus)
+    echo "This is build-hc-pkg, running on $platform with $n_cpus processors."
+}
+
+function srcpath () {
+    local -r archive="work/archive"
+    local srcpath=""
+
+    if [[ -e "$archive" ]]; then
+        srcpath=$(cat "$archive")
+    fi
+
+    if [[ -z "$srcpath" || ! -e "$srcpath" ]]; then
+        mkdir -p work
+        read -e -p "Enter the file path to ghc-x.y.z-src.tar.bz2: " srcpath
+        if [[ -e "$srcpath" ]]; then
+            mkdir -p work
+            echo "$srcpath" > "$archive"
+        else
+            echo "$srcpath not found." >&2
+            exit 1
+        fi
+    fi
+
+    echo "$srcpath"
+}
+
+function build_hc_pkg () {
+    local -r srcpath="$(srcpath)"
+
+    gmake \
+        -j $(($(detect_number_of_cpus) + 1)) \
+        -f mk/main.mk \
+        SRCPATH="$srcpath" \
+        PLATFORM="$(detect_platform_type)" \
+        GNUTAR="$(detect_gnu_tar)" \
+        SHELL="$SHELL"
+
+    echo "If you are done, run \"$0 clean\" to cleanup the working directory."
+}
+
+function main () {
+    case "$1" in
+        "")
+            say_hello
+            build_hc_pkg
+            exit
+            ;;
+        "clean")
+            echo "Cleaning..."
+            rm -rf work
+            exit
+            ;;
+        *)
+            echo "Usage: $0 [clean]" >&2
+            exit 1
+            ;;
+    esac
+}
+
+main $@