Blame configure-cmake

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