aboutsummaryrefslogtreecommitdiff
path: root/install.sh
diff options
context:
space:
mode:
Diffstat (limited to 'install.sh')
-rwxr-xr-xinstall.sh118
1 files changed, 108 insertions, 10 deletions
diff --git a/install.sh b/install.sh
index 578b156..de2aaa8 100755
--- a/install.sh
+++ b/install.sh
@@ -1,33 +1,131 @@
#!/bin/sh
-set -u # error on use of undefined variable
set -e # exit on error
-install_path="$HOME/.local/bin"
+usage()
+{
+ echo "Fortran Package Manager Bootstrap Script"
+ echo ""
+ echo "USAGE:"
+ echo "./install.sh [--help | [--prefix=PREFIX] [--update[=REF]]"
+ echo " [--no-openmp] [--static] [--haskell] ]"
+ echo ""
+ echo " --help Display this help text"
+ echo " --prefix=PREFIX Install binary in 'PREFIX/bin'"
+ echo " Default prefix='\$HOME/.local/bin'"
+ echo " --update[=REF] Update repository from latest release tag"
+ echo " or from git reference REF if specified"
+ echo " --no-openmp Don't build fpm with openmp support"
+ echo " --static Statically link fpm executable"
+ echo " (implies --no-openmp)"
+ echo " --haskell Only install Haskell fpm"
+ echo ""
+ echo " '--no-openmp' and '--static' do not affect the Haskell fpm"
+ echo " build."
+ echo ""
+}
+
+PREFIX="$HOME/.local"
+UPDATE=false
+OMP=true
+STATIC=false
+HASKELL_ONLY=false
+
+STACK_BIN_PATH="$HOME/.local/bin"
+REF=$(git describe --tag --abbrev=0)
+RELEASE_FLAGS="--flag -g --flag -fbacktrace --flag -O3"
+
+while [ "$1" != "" ]; do
+ PARAM=$(echo "$1" | awk -F= '{print $1}')
+ VALUE=$(echo "$1" | awk -F= '{print $2}')
+ case $PARAM in
+ -h | --help)
+ usage
+ exit
+ ;;
+ --prefix)
+ PREFIX=$VALUE
+ ;;
+ --update)
+ UPDATE=true
+ if [ "$VALUE" != "" ]; then
+ REF=$VALUE
+ fi
+ ;;
+ --no-openmp)
+ OMP=false
+ ;;
+ --static)
+ STATIC=true
+ OMP=false
+ ;;
+ --haskell)
+ HASKELL_ONLY=true
+ ;;
+ *)
+ echo "ERROR: unknown parameter \"$PARAM\""
+ usage
+ exit 1
+ ;;
+ esac
+ shift
+done
+
+set -u # error on use of undefined variable
+
+INSTALL_PATH="$PREFIX/bin"
if command -v stack 1> /dev/null 2>&1 ; then
- echo "found stack"
+ echo "Found stack"
else
echo "Haskell stack not found."
- echo "Installing Haskell stack to."
+ echo "Installing Haskell stack"
curl -sSL https://get.haskellstack.org/ | sh
if command -v stack 1> /dev/null 2>&1 ; then
echo "Haskell stack installation successful."
else
- echo "Haskell stack installation unsuccessful."
+ echo "ERROR: Haskell stack installation unsuccessful."
exit 1
fi
fi
-if [ -x "$install_path/fpm" ]; then
- echo "Overwriting existing fpm installation in $install_path"
+if [ -x "$INSTALL_PATH/fpm" ]; then
+ echo "Overwriting existing fpm installation in $INSTALL_PATH"
+fi
+
+if [ "$UPDATE" = true ]; then
+ git checkout "$REF"
+ if [ $? != 0 ]; then
+ echo "ERROR: Unable to checkout $REF."
+ exit 1
+ fi
fi
cd bootstrap
stack install
-if [ -x "$install_path/fpm" ]; then
- echo "fpm installed successfully to $install_path"
+if [ "$STACK_BIN_PATH" != "$INSTALL_PATH" ]; then
+ mv "$STACK_BIN_PATH/fpm" "$INSTALL_PATH/"
+fi
+
+if [ "$HASKELL_ONLY" = true ]; then
+ exit
+fi
+
+if [ "$STATIC" = true ]; then
+ RELEASE_FLAGS="$RELEASE_FLAGS --flag -static"
+fi
+
+if [ "$OMP" = true ]; then
+ RELEASE_FLAGS="$RELEASE_FLAGS --flag -fopenmp"
+fi
+
+cd ../fpm
+"$INSTALL_PATH/fpm" run $RELEASE_FLAGS --runner mv -- "$INSTALL_PATH/"
+
+if [ -x "$INSTALL_PATH/fpm" ]; then
+ echo "fpm installed successfully to $INSTALL_PATH"
else
- echo "fpm installation unsuccessful: fpm not found in $install_path"
+ echo "ERROR: fpm installation unsuccessful: fpm not found in $INSTALL_PATH"
+ exit 1
fi