Blame configure

Packit 4c4d6b
#!/bin/bash
Packit 4c4d6b
# configure script adapter for Meson
Packit 4c4d6b
# Based on build-api: https://github.com/cgwalters/build-api
Packit 4c4d6b
# Copyright 2010, 2011, 2013 Colin Walters <walters@verbum.org>
Packit 4c4d6b
# Copyright 2016, 2017 Emmanuele Bassi
Packit 4c4d6b
# Licensed under the new-BSD license (http://www.opensource.org/licenses/bsd-license.php)
Packit 4c4d6b
Packit 4c4d6b
# Build API variables:
Packit 4c4d6b
Packit 4c4d6b
# Little helper function for reading args from the commandline.
Packit 4c4d6b
# it automatically handles -a b and -a=b variants, and returns 1 if
Packit 4c4d6b
# we need to shift $3.
Packit 4c4d6b
read_arg() {
Packit 4c4d6b
    # $1 = arg name
Packit 4c4d6b
    # $2 = arg value
Packit 4c4d6b
    # $3 = arg parameter
Packit 4c4d6b
    local rematch='^[^=]*=(.*)$'
Packit 4c4d6b
    if [[ $2 =~ $rematch ]]; then
Packit 4c4d6b
	read "$1" <<< "${BASH_REMATCH[1]}"
Packit 4c4d6b
    else
Packit 4c4d6b
	read "$1" <<< "$3"
Packit 4c4d6b
	# There is no way to shift our callers args, so
Packit 4c4d6b
	# return 1 to indicate they should do it instead.
Packit 4c4d6b
	return 1
Packit 4c4d6b
    fi
Packit 4c4d6b
}
Packit 4c4d6b
Packit 4c4d6b
sanitycheck() {
Packit 4c4d6b
    # $1 = arg name
Packit 4c4d6b
    # $1 = arg command
Packit 4c4d6b
    # $2 = arg alternates
Packit 4c4d6b
    local cmd=$( which $2 2>/dev/null )
Packit 4c4d6b
Packit 4c4d6b
    if [ -x "$cmd" ]; then
Packit 4c4d6b
        read "$1" <<< "$cmd"
Packit 4c4d6b
        return 0
Packit 4c4d6b
    fi
Packit 4c4d6b
Packit 4c4d6b
    test -z $3 || {
Packit 4c4d6b
        for alt in $3; do
Packit 4c4d6b
            cmd=$( which $alt 2>/dev/null )
Packit 4c4d6b
Packit 4c4d6b
            if [ -x "$cmd" ]; then
Packit 4c4d6b
                read "$1" <<< "$cmd"
Packit 4c4d6b
                return 0
Packit 4c4d6b
            fi
Packit 4c4d6b
        done
Packit 4c4d6b
    }
Packit 4c4d6b
Packit 4c4d6b
    echo -e "\e[1;31mERROR\e[0m: Command '$2' not found"
Packit 4c4d6b
    exit 1
Packit 4c4d6b
}
Packit 4c4d6b
Packit 4c4d6b
sanitycheck MESON 'meson'
Packit 4c4d6b
sanitycheck MESONTEST 'mesontest'
Packit 4c4d6b
sanitycheck NINJA 'ninja' 'ninja-build'
Packit 4c4d6b
Packit 4c4d6b
enable_docs='-Ddocs=false'
Packit 4c4d6b
enable_introspection='-Dintrospection=true'
Packit 4c4d6b
Packit 4c4d6b
while (($# > 0)); do
Packit 4c4d6b
    case "${1%%=*}" in
Packit 4c4d6b
	--prefix) read_arg prefix "$@" || shift;;
Packit 4c4d6b
	--bindir) read_arg bindir "$@" || shift;;
Packit 4c4d6b
	--sbindir) read_arg sbindir "$@" || shift;;
Packit 4c4d6b
	--libexecdir) read_arg libexecdir "$@" || shift;;
Packit 4c4d6b
	--datarootdir) read_arg datarootdir "$@" || shift;;
Packit 4c4d6b
	--datadir) read_arg datadir "$@" || shift;;
Packit 4c4d6b
	--sysconfdir) read_arg sysconfdir "$@" || shift;;
Packit 4c4d6b
	--libdir) read_arg libdir "$@" || shift;;
Packit 4c4d6b
	--mandir) read_arg mandir "$@" || shift;;
Packit 4c4d6b
	--includedir) read_arg includedir "$@" || shift;;
Packit 4c4d6b
	--enable-gtk-doc) enable_docs='-Ddocs=true';;
Packit 4c4d6b
	--disable-gtk-doc) enable_docs='-Ddocs=false';;
Packit 4c4d6b
	--enable-introspection) enable_introspection='-Dintrospection=true';;
Packit 4c4d6b
	--disable-introspection) enable_introspection='-Dintrospection=false';;
Packit 4c4d6b
	*) echo -e "\e[1;33mINFO\e[0m: Ignoring unknown option '$1'";;
Packit 4c4d6b
    esac
Packit 4c4d6b
    shift
Packit 4c4d6b
done
Packit 4c4d6b
Packit 4c4d6b
# Defaults
Packit 4c4d6b
test -z ${prefix} && prefix="/usr/local"
Packit 4c4d6b
test -z ${bindir} && bindir=${prefix}/bin
Packit 4c4d6b
test -z ${sbindir} && sbindir=${prefix}/sbin
Packit 4c4d6b
test -z ${libexecdir} && libexecdir=${prefix}/bin
Packit 4c4d6b
test -z ${datarootdir} && datarootdir=${prefix}/share
Packit 4c4d6b
test -z ${datadir} && datadir=${datarootdir}
Packit 4c4d6b
test -z ${sysconfdir} && sysconfdir=${prefix}/etc
Packit 4c4d6b
test -z ${libdir} && libdir=${prefix}/lib
Packit 4c4d6b
test -z ${mandir} && mandir=${prefix}/share/man
Packit 4c4d6b
test -z ${includedir} && includedir=${prefix}/include
Packit 4c4d6b
Packit 4c4d6b
# The source directory is the location of this file
Packit 4c4d6b
srcdir=$(dirname $0)
Packit 4c4d6b
Packit 4c4d6b
# The build directory is the current location
Packit 4c4d6b
builddir=`pwd`
Packit 4c4d6b
Packit 4c4d6b
# If we're calling this file from the source directory then
Packit 4c4d6b
# we automatically create a build directory and ensure that
Packit 4c4d6b
# both Meson and Ninja invocations are relative to that
Packit 4c4d6b
# location
Packit 4c4d6b
if [[ -f "${builddir}/meson.build" ]]; then
Packit 4c4d6b
  mkdir -p _build
Packit 4c4d6b
  builddir="${builddir}/_build"
Packit 4c4d6b
  NINJA_OPT="-C ${builddir}"
Packit 4c4d6b
fi
Packit 4c4d6b
Packit 4c4d6b
# Wrapper Makefile for Ninja
Packit 4c4d6b
cat > Makefile <
Packit 4c4d6b
# Generated by configure; do not edit
Packit 4c4d6b
Packit 4c4d6b
all:
Packit 4c4d6b
	CC="\$(CC)" CXX="\$(CXX)" ${NINJA} ${NINJA_OPT}
Packit 4c4d6b
Packit 4c4d6b
install:
Packit 4c4d6b
	DESTDIR="\$(DESTDIR)" ${NINJA} ${NINJA_OPT} install
Packit 4c4d6b
Packit 4c4d6b
check:
Packit 4c4d6b
	${MESONTEST} ${NINJA_OPT}
Packit 4c4d6b
END
Packit 4c4d6b
Packit 4c4d6b
echo "Summary:"
Packit 4c4d6b
echo "  meson:....... ${MESON}"
Packit 4c4d6b
echo "  ninja:....... ${NINJA}"
Packit 4c4d6b
echo "  prefix:...... ${prefix}"
Packit 4c4d6b
echo "  bindir:...... ${bindir}"
Packit 4c4d6b
echo "  sbindir:..... ${sbindir}"
Packit 4c4d6b
echo "  libexecdir:.. ${libexecdir}"
Packit 4c4d6b
echo "  datarootdir:. ${datarootdir}"
Packit 4c4d6b
echo "  datadir:..... ${datadir}"
Packit 4c4d6b
echo "  sysconfdir:.. ${sysconfdir}"
Packit 4c4d6b
echo "  libdir:...... ${libdir}"
Packit 4c4d6b
echo "  mandir:...... ${mandir}"
Packit 4c4d6b
echo "  includedir:.. ${includedir}"
Packit 4c4d6b
echo "  additional:.."
Packit 4c4d6b
echo "    - docs: ${enable_docs}"
Packit 4c4d6b
echo "    - introspection: ${enable_introspection}"
Packit 4c4d6b
Packit 4c4d6b
exec ${MESON} \
Packit 4c4d6b
	--prefix=${prefix} \
Packit 4c4d6b
	--libdir=${libdir} \
Packit 4c4d6b
	--libexecdir=${libexecdir} \
Packit 4c4d6b
	--datadir=${datadir} \
Packit 4c4d6b
	--sysconfdir=${sysconfdir} \
Packit 4c4d6b
	--bindir=${bindir} \
Packit 4c4d6b
	--includedir=${includedir} \
Packit 4c4d6b
	--mandir=${mandir} \
Packit 4c4d6b
	--default-library shared \
Packit 4c4d6b
	${enable_docs} \
Packit 4c4d6b
	${enable_introspection} \
Packit 4c4d6b
	${builddir} \
Packit 4c4d6b
	${srcdir}
Packit 4c4d6b
Packit 4c4d6b
# vim: ai ts=8 noet sts=2 ft=sh