375 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			375 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/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=cmake
 | 
						|
 | 
						|
BUILD_TYPE="Debug"
 | 
						|
PREFIX=/usr/local
 | 
						|
LIBDIR=
 | 
						|
CMAKE_ARGS=
 | 
						|
GENERATOR=""
 | 
						|
 | 
						|
if [ -e "${TOP_SRCDIR}/.configure-custom.sh" ]; then
 | 
						|
    . "${TOP_SRCDIR}/.configure-custom.sh"
 | 
						|
fi
 | 
						|
 | 
						|
quote() {
 | 
						|
    echo "$*" | sed -e "s|'|'\\\\''|g; 1s/^/'/; \$s/\$/'/"
 | 
						|
}
 | 
						|
 | 
						|
extract_var_string() {
 | 
						|
    VAR_NAME=$1
 | 
						|
    VAR_NAME=$(echo $1 | sed -e 's/[\\b]*$//')
 | 
						|
 | 
						|
    if [ "x$VAR_VALUE" = "x" ]; then
 | 
						|
        if [ "x$2" != "x" ]; then
 | 
						|
            VAR_VALUE=$2
 | 
						|
        else
 | 
						|
            VAR_VALUE=yes
 | 
						|
        fi
 | 
						|
    fi
 | 
						|
 | 
						|
    if [ "x$3" != "x" ]; then
 | 
						|
        VAR_UC_NAME=$3
 | 
						|
        VAR_UC=$(echo "$1" | tr '[:lower:]' '[:upper:]' | tr -c '[:alnum:]' '_' | sed 's/_$//g')
 | 
						|
    else
 | 
						|
        VAR_UC_NAME=$(echo "$1" | tr '[:lower:]' '[:upper:]' | tr -c '[:alnum:]' '_' | sed 's/_$//g')
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
set_config_var() {
 | 
						|
    is_with=n
 | 
						|
    found=y
 | 
						|
    arg=$(echo "${2}" | tr '[:upper:]' '[:lower:]' )
 | 
						|
    case "$1" in
 | 
						|
        "--enable-"*)
 | 
						|
            name="${1#--enable-}"
 | 
						|
            cfg="${ENABLE_VARS}"
 | 
						|
            case "x$arg" in
 | 
						|
                "xy"|"xyes"|"xtrue")
 | 
						|
                VAR_VALUE=YES
 | 
						|
                ;;
 | 
						|
                "xn"|"xno"|"xfalse")
 | 
						|
                found=y
 | 
						|
                VAR_VALUE=NO
 | 
						|
                 ;;
 | 
						|
                **)
 | 
						|
                VAR_VALUE=""
 | 
						|
                ;;
 | 
						|
            esac
 | 
						|
            ;;
 | 
						|
        "--disable-"*)
 | 
						|
            name="${1#--disable-}";
 | 
						|
            cfg="${ENABLE_VARS}"
 | 
						|
            case "x$arg" in
 | 
						|
                "xy"|"xyes"|"xtrue")
 | 
						|
                VAR_VALUE=NO
 | 
						|
                ;;
 | 
						|
                "xn"|"xno"|"xfalse")
 | 
						|
                VAR_VALUE=YES
 | 
						|
                 ;;
 | 
						|
                **)
 | 
						|
                VAR_VALUE=""
 | 
						|
                ;;
 | 
						|
            esac
 | 
						|
            ;;
 | 
						|
        "--with-"*)
 | 
						|
            # IFS="=" read -ra WITHARGS <<< "${1}"
 | 
						|
            name="${1#--with-}"
 | 
						|
            cfg="${WITH_VARS}"
 | 
						|
            case "x$arg" in
 | 
						|
                "x"|"xy"|"xyes"|"xtrue"|"xon")
 | 
						|
                is_with=n
 | 
						|
                VAR_VALUE=YES
 | 
						|
                ``;;
 | 
						|
                "xn"|"xno"|"xfalse"|"xoff")
 | 
						|
                is_with=n
 | 
						|
                VAR_VALUE=NO
 | 
						|
                ;;
 | 
						|
                **)
 | 
						|
                is_with=y
 | 
						|
                VAR_VALUE=""
 | 
						|
            ;;
 | 
						|
            esac
 | 
						|
 | 
						|
            ;;
 | 
						|
    esac
 | 
						|
 | 
						|
        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 "$VAR_VALUE") -D${VAR_UC}_ROOT_DIR=$(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
 | 
						|
  --cmake=CMAKE           use a specific cmake, not the default
 | 
						|
  --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]
 | 
						|
 | 
						|
  --generator=Generator	  Specify the tool used to send callss
 | 
						|
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
 | 
						|
 | 
						|
    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
 | 
						|
        "--cmake="*)
 | 
						|
            CMAKE="${1#*=}";;
 | 
						|
        "--cmake")
 | 
						|
            CMAKE="${2}"; shift;;
 | 
						|
        "--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;;
 | 
						|
 | 
						|
        "-G="|"--generator="*)
 | 
						|
            CMAKE_ARGS+="-G"${1#*=};;
 | 
						|
        "-G"|"--generator")
 | 
						|
            CMAKE_ARGS+="-G$"$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-"*)
 | 
						|
            name=$(echo "${1#--enable-}" | awk '{split($1,v,"="); print v[1]}')
 | 
						|
            set_config_var "--with-${name}" "${1#--enable-${name}=}"
 | 
						|
            ;;
 | 
						|
 | 
						|
        "--disable-"*)
 | 
						|
            name=$(echo "${1#--disable-}" | awk '{split($1,v,"="); print v[1]}')
 | 
						|
            set_config_var "--with-${name}" "${1#--disable-${name}=}"
 | 
						|
            ;;
 | 
						|
 | 
						|
        "--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
 | 
						|
 | 
						|
CMAKE_CMD="${CMAKE} ${TOP_SRCDIR}"
 | 
						|
 | 
						|
${CMAKE_CMD} "${GENERATOR}" ${TOP_SRCDIR} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_INSTALL_LIBDIR=${LIBDIR} ${CMAKE_ARGS}
 |