#!/usr/bin/env bash set -eu usage() { echo "Usage: ./configure [OPTION]" echo echo "Configuration:" echo " -h, --help display this help and exit" echo echo "Installation directories:" echo " --destination=[local|global] install Python package locally or globally" } # -allow a command to fail with !’s side effect on errexit # -use return value from ${PIPESTATUS[0]}, because ! hosed $? ! getopt --test > /dev/null if [[ ${PIPESTATUS[0]} -ne 4 ]]; then echo 'getopt not available' exit 1 fi LONGOPTS=destination:,help OPTIONS=h ! PARSED=$(getopt --options=$OPTIONS --longoptions=$LONGOPTS --name "$0" -- "$@") if [[ ${PIPESTATUS[0]} -ne 0 ]]; then # e.g. return value is 1 # then getopt has complained about wrong arguments to stdout exit 2 fi # read getopt’s output this way to handle the quoting right: eval set -- "$PARSED" destination="local" while true; do case "$1" in --destination) destination="$2" shift 2 ;; -h|--help) usage exit 1 ;; --) shift break ;; *) echo "Programming error" exit 3 ;; esac done case "$destination" in local) install_global=false ;; global) install_global=true ;; *) echo "Destination (--destination) must be 'local' or 'global', paths are not allowed." exit 3 ;; esac cat << EOF > config.mk # this file is autogenerated by ./configure install_global=$install_global EOF if ! python3 --version &>/dev/null; then echo 'Error: python3 missing' exit 1 fi if ! pip3 --version &>/dev/null; then echo 'Error: pip3 missing' exit 1 fi