From e2b3313ef0dceb8c31abb2b058fd69eff0641f48 Mon Sep 17 00:00:00 2001 From: PHO Date: Thu, 23 Feb 2012 18:54:10 +0900 Subject: [PATCH] build-hc-pkg: Code reorganization --- build-hc-pkg | 114 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 82 insertions(+), 32 deletions(-) diff --git a/build-hc-pkg b/build-hc-pkg index 81dcea4..1c1fe32 100755 --- a/build-hc-pkg +++ b/build-hc-pkg @@ -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 $@ -- 2.40.0