fixes
authorAlan Knowles <alan@roojs.com>
Fri, 15 Feb 2019 07:00:54 +0000 (15:00 +0800)
committerAlan Knowles <alan@roojs.com>
Fri, 15 Feb 2019 07:00:54 +0000 (15:00 +0800)
configure [new file with mode: 0755]

diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..12c63e7
--- /dev/null
+++ b/configure
@@ -0,0 +1,314 @@
+#!/bin/sh
+
+# Autotools-style (./configure) wrapper for CMake
+# <https://github.com/nemequ/configure-cmake>
+#
+#   *** IMPORTANT ***
+#
+#   You must include the GNUInstallDirs module (which comes with
+#   CMake) in your project.  Just put "include (GNUInstallDirs)" in
+#   you CMakeLists.txt and you should be good.
+#
+# This script was originally written for Squash
+# <https://quixdb.github.io/squash/> by Evan Nemerson
+# <evan@nemerson.com>, but has been spun off into a separate
+# repository.  Please feel free to copy it into your own repository,
+# though I would appreciate it if you would post improvements, bugs,
+# feature requests, etc. to the issue tracker at
+# <https://github.com/nemequ/configure-cmake/issues>.
+#
+# To the extent possible under law, the author(s) hereby waive all
+# copyright and related or neighboring rights to this work.  For
+# details, see <https://creativecommons.org/publicdomain/zero/1.0/>
+
+TOP_SRCDIR="$(dirname $0)"
+CMAKE_CMD="cmake ${TOP_SRCDIR}"
+
+BUILD_TYPE="Debug"
+PREFIX=/usr/local
+LIBDIR=
+CMAKE_ARGS=
+
+if [ -e "${TOP_SRCDIR}/.configure-custom.sh" ]; then
+    . "${TOP_SRCDIR}/.configure-custom.sh"
+fi
+
+quote() {
+    echo "$1" | sed -e "s|'|'\\\\''|g; 1s/^/'/; \$s/\$/'/"
+}
+
+extract_var_string() {
+    VAR_NAME=$1
+    VAR_NAME=$(echo $1 | sed -e 's/[ \t]*$//')
+    if [ "x$2" != "x" ]; then
+        VAR_VALUE=$2
+    else
+        VAR_VALUE=yes
+    fi
+
+    if [ "x$3" != "x" ]; then
+        VAR_UC_NAME=$3
+    else
+        VAR_UC_NAME=$(echo "$1" | tr '[:lower:]' '[:upper:]' | tr -c '[:alnum:]' '_' | sed 's/_$//g')
+    fi
+}
+
+set_config_var() {
+    is_with=n
+    case "$1" in
+        "--enable-"*)
+            name="${1#--enable-}"
+            cfg="${ENABLE_VARS}"
+            ;;
+        "--disable-"*)
+            name="${1#--disable-}";
+            cfg="${DISABLE_VARS}";
+            ;;
+        "--with-"*)
+            # IFS="=" read -ra WITHARGS <<< "${1}"
+            name="${1#--with-}"
+            cfg="${WITH_VARS}"
+            is_with=y
+            ;;
+    esac
+
+    found=n
+    for varstring in $cfg; do
+        extract_var_string $(echo "${varstring}" | tr '|' ' ')
+        if [ "x$VAR_NAME" = "x$name" ]; then
+            found=y
+            break;
+        fi
+    done
+
+    if [ "$found" = "y" ]; then
+        if [ "x$is_with" = "xy" ]; then
+            CMAKE_ARGS="$CMAKE_ARGS -D${VAR_UC_NAME}=$(quote "$2")"
+        else
+            CMAKE_ARGS="$CMAKE_ARGS -D${VAR_UC_NAME}=$(quote "${VAR_VALUE}")"
+        fi
+    else
+        echo "Unknown parameter: ${1}"
+        exit 1
+    fi
+}
+
+prefix_to_offset() {
+    expr $(echo "${1}" | awk '{ print length }') + 1
+}
+
+print_help() {
+    cat <<EOF >&2
+  -h, --help              display this help and exit
+  --disable-debug         disable debugging mode
+  --pass-thru             pass remaining arguments through to CMake
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$PREFIX]
+  --bindir=DIR            user executables [PREFIX/bin]
+  --sbindir=DIR           system admin executables [PREFIX/sbin]
+  --libexecdir=DIR        program executables [PREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [PREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/PROJECT_NAME]
+EOF
+
+    first=y
+    for varstring in ${ENABLE_VARS}; do
+        if [ $first = 'y' ]; then
+            echo ""
+            first=n
+        fi
+        extract_var_string $(echo "${varstring}" | tr '|' ' ')
+        var_doc_name="ENABLE_${VAR_UC_NAME}_DOC"
+        eval "docstring=\$$var_doc_name"
+        if [ "x${docstring}" = "x" ]; then
+            printf "  --enable-%-14s enable %s support\n" "${VAR_NAME}" "$(echo -n "${VAR_NAME}" | tr '-' ' ')"
+        else
+            printf "  --enable-%-14s %s\n" "${VAR_NAME}" "$docstring"
+        fi
+    done
+
+    first=y
+    for varstring in ${DISABLE_VARS}; do
+        if [ $first = 'y' ]; then
+            echo ""
+            first=n
+        fi
+        extract_var_string $(echo "${varstring}" | tr '|' ' ')
+        var_doc_name="DISABLE_${VAR_UC_NAME}_DOC"
+        eval "docstring=\$$var_doc_name"
+        if [ "x${docstring}" = "x" ]; then
+            printf "  --disable-%-13s disable %s support\n" "${VAR_NAME}" "$(echo -n "${VAR_NAME}" | tr '-' ' ')"
+        else
+            printf "  --disable-%-13s %s\n" "${VAR_NAME}" "$docstring"
+        fi
+    done
+
+    first=y
+    for varstring in ${WITH_VARS}; do
+        if [ $first = 'y' ]; then
+            echo ""
+            first=n
+        fi
+        extract_var_string $(echo "${varstring}" | tr '|' ' ')
+        var_doc_name="WITH_${VAR_UC_NAME}_DOC"
+        eval "docstring=\$$var_doc_name"
+        paraminfo="${VAR_NAME}=${VAR_VALUE}"
+        if [ "x${docstring}" = "x" ]; then
+            printf "  --with-%-16s enable %s support\n" "$paraminfo" "$(echo -n "${VAR_NAME}" | tr '-' ' ')"
+        else
+            printf "  --with-%-16s %s\n" "$paraminfo" "$docstring"
+        fi
+    done
+
+    exit 0
+}
+
+while [ $# != 0 ]; do
+    case "$1" in
+        "--prefix="*)
+            PREFIX="${1#*=}";;
+        "--prefix")
+            PREFIX="${2}"; shift;;
+        "--bindir="*)
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_BINDIR=$(quote "${1#*=}")";;
+        "--bindir")
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_BINDIR=$(quote "$2")"; shift;;
+        "--sbindir="*)
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_SBINDIR=$(quote "${1#*=}")";;
+        "--sbindir")
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_SBINDIR=$(quote "$2")"; shift;;
+        "--libexecdir="*)
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_LIBEXECDIR=$(quote "${1#*=}")";;
+        "--libexecdir")
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_LIBEXECDIR=$(quote "$2")"; shift;;
+        "--sysconfdir="*)
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_SYSCONFDIR=$(quote "${1#*=}")";;
+        "--sysconfdir")
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_SYSCONFDIR=$(quote "$2")"; shift;;
+        "--sharedstatedir="*)
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_SHAREDSTATEDIR=$(quote "${1#*=}")";;
+        "--sharedstatedir")
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_SHAREDSTATEDIR=$(quote "$2")"; shift;;
+        "--localstatedir="*)
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_LOCALSTATEDIR=$(quote "${1#*=}")";;
+        "--localstatedir")
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_LOCALSTATEDIR=$(quote "$2")"; shift;;
+        "--libdir="*)
+            LIBDIR="${1#*=}";;
+        "--libdir")
+            LIBDIR="${2}"; shift;;
+        "--includedir="*)
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_INCLUDEDIR=$(quote "${1#*=}")";;
+        "--includedir")
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_INCLUDEDIR=$(quote "$2")"; shift;;
+        "--oldincludedir="*)
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_OLDINCLUDEDIR=$(quote "${1#*=}")";;
+        "--oldincludedir")
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_OLDINCLUDEDIR=$(quote "$2")"; shift;;
+        "--datarootdir="*)
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_DATAROOTDIR=$(quote "${1#*=}")";;
+        "--datarootdir")
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_DATAROOTDIR=$(quote "$2")"; shift;;
+        "--datadir="*)
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_DATADIR=$(quote "${1#*=}")";;
+        "--datadir")
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_DATADIR=$(quote "$2")"; shift;;
+        "--infodir="*)
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_INFODIR=$(quote "${1#*=}")";;
+        "--infodir")
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_INFODIR=$(quote "$2")"; shift;;
+        "--localedir="*)
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_LOCALEDIR=$(quote "${1#*=}")";;
+        "--localedir")
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_LOCALEDIR=$(quote "$2")"; shift;;
+        "--mandir="*)
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_MANDIR=$(quote "${1#*=}")";;
+        "--mandir")
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_MANDIR=$(quote "$2")"; shift;;
+        "--docdir="*)
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_DOCDIR=$(quote "${1#*=}")";;
+        "--docdir")
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_DOCDIR=$(quote "$2")"; shift;;
+
+        "CC="*)
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_C_COMPILER=$(quote "${1#*=}")";;
+        "CXX="*)
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_CXX_COMPILER=$(quote "${1#*=}")";;
+        "CFLAGS="*)
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_C_FLAGS=$(quote "${1#*=}")";;
+        "CXXFLAGS="*)
+            CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_CXX_FLAGS=$(quote "${1#*=}")";;
+        "LDFLAGS="*)
+            LDFLAGS="$LDFLAGS ${1#*=}";;
+
+        "--help")
+            print_help;;
+        "-h")
+            print_help;;
+
+        # This flag is the only one which may be a bit surprising to
+        # people.  Autotools always builds with debugging symbols enabled
+        # (AFAIK), but for cmake you have to do -DCMAKE_BUILD_TYPE=Debug.
+        # Unfortunately this can change other things as well, so although
+        # I realize there is no --disable-debug flag I thought it would be
+        # prudent to support one here.
+        "--disable-debug")
+            BUILD_TYPE="Release";;
+
+        "--pass-thru")
+            shift;
+            while [ $# != 0 ]; do
+                CMAKE_ARGS="$CMAKE_ARGS $(quote "${1}")";
+                shift;
+            done;;
+
+        "--enable-"*)
+            set_config_var "$1"
+            ;;
+
+        "--disable-"*)
+            set_config_var "$1"
+            ;;
+
+        "--with-"*)
+            name=$(echo "${1#--with-}" | awk '{split($1,v,"="); print v[1]}')
+            case "${1}" in
+                "--with-${name}="*)
+                    set_config_var "--with-${name}" "${1#--with-${name}=}";;
+                "--with-${name}")
+                    set_config_var "$1" "$2";
+                    shift;;
+            esac
+            ;;
+
+        *)
+            echo "$0: error: unrecognized option: \`$1'" >&2
+            echo "Try \`$0 --help' for more information" >&2
+            exit -1
+    esac;
+    shift
+done
+
+if [ "x${LIBDIR}" = "x" ]; then
+    LIBDIR="${PREFIX}/lib"
+fi
+
+# Unlike CFLAGS/CXXFLAGS/CC/CXX, LDFLAGS isn't handled by CMake, so we
+# need to parse it here.
+if [ "x${LDFLAGS}" != "x" ]; then
+    for varname in EXE MODULE SHARED STATIC; do
+        CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_${varname}_LINKER_FLAGS=$(quote "$LDFLAGS")"
+    done
+fi
+
+eval "cmake ${TOP_SRCDIR} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_INSTALL_LIBDIR=${LIBDIR} ${CMAKE_ARGS}"