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

index 81dcea4c97ed0650f1ed4cf38c59f4c981e43ef3..1c1fe3201313da574233558fd53bb76088b5dba7 100755 (executable)
@@ -1,38 +1,88 @@
 #!/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
+
+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 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
-        echo "$srcpath" > "$archive"
-    else
-        echo "$srcpath not found." >&2
-        exit 1
+        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
-fi
 
-gmake -f mk/main.mk SRCPATH="$srcpath" PLATFORM="$platform" SHELL="$SHELL"
+    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)" \
+        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
+}
 
-echo "If you are done, run \"$0 clean\" to cleanup the working directory."
+main $@