|  | #!/usr/bin/env bash | 
|  |  | 
|  | # 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)" | 
|  |  | 
|  | if [ "${CMAKE_CMD}" = "" ]; then | 
|  | CMAKE_CMD="cmake" | 
|  | fi | 
|  |  | 
|  | BUILD_TYPE="Debug" | 
|  | PREFIX=/usr/local | 
|  | LIBDIR= | 
|  | CMAKE_ARGS= | 
|  |  | 
|  | if [ -e "${TOP_SRCDIR}/scripts/.configure-custom.sh" ]; then | 
|  | . "${TOP_SRCDIR}/scripts/.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_CMD}" "${TOP_SRCDIR}" -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DCMAKE_INSTALL_LIBDIR="${LIBDIR}" ${CMAKE_ARGS} |