summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiels De Graef <nielsdegraef@gmail.com>2017-09-11 17:53:05 +0200
committerNiels De Graef <nielsdegraef@gmail.com>2017-09-13 14:54:08 +0200
commit6856b0464e6ebc5e64e817ce8fd304ed111ff3b5 (patch)
treee079c9d80393509e702b1ce9cb9acbb488ba5915
parentfda6f14a02172bcc982bf1ecb6fea05aa20752e1 (diff)
downloadgnome-contacts-6856b0464e6ebc5e64e817ce8fd304ed111ff3b5.tar.gz
Add configure script for meson
-rwxr-xr-xconfigure165
1 files changed, 165 insertions, 0 deletions
diff --git a/configure b/configure
new file mode 100755
index 0000000..f8eb731
--- /dev/null
+++ b/configure
@@ -0,0 +1,165 @@
+#!/bin/bash
+# configure script adapter for Meson
+# Based on build-api: https://github.com/cgwalters/build-api
+# Copyright 2010, 2011, 2013 Colin Walters <walters@verbum.org>
+# Copyright 2016 Emmanuele Bassi
+# Copyright 2017 Niels De Graef
+# Licensed under the new-BSD license (http://www.opensource.org/licenses/bsd-license.php)
+
+# Build API variables:
+# buildapi-variable-require-builddir
+
+shopt -s extglob
+
+# Configurable Options (for more info, run 'meson configure')
+# ====================
+DIRECTORY_OPTIONS='--@(prefix|bindir|sbindir|libexecdir|datadir|sysconfdir|libdir|mandir|includedir)'
+# Keep this in sync with meson_options.txt
+PROJECT_OPTIONS='--@(with-cheese|with-manpage)'
+
+# The configurable option values
+declare -A option_values
+
+# Little helper function for reading args from the commandline.
+# it automatically handles -a b and -a=b variants, and returns 1 if
+# we need to shift $3.
+read_arg() {
+ # $1 = arg name
+ # $2 = arg value
+ # $3 = arg parameter
+ local rematch='^[^=]*=(.*)$'
+ if [[ $2 =~ $rematch ]]; then
+ option_values["$1"]="${BASH_REMATCH[1]}"
+ else
+ option_values["$1"]="$3"
+ # There is no way to shift our callers args, so
+ # return 1 to indicate they should do it instead.
+ return 1
+ fi
+}
+
+options2list() {
+ local pattern="$1"
+ local pattern="${pattern#--@(}"
+ local pattern="${pattern%)}"
+ IFS=\| read -a "$2" <<<"${pattern#--@(}"
+}
+
+sanitycheck() {
+ # $1 = arg name
+ # $1 = arg command
+ # $2 = arg alternates
+ local cmd=$( which $2 2>/dev/null )
+
+ if [ -x "$cmd" ]; then
+ read "$1" <<< "$cmd"
+ return 0
+ fi
+
+ test -z $3 || {
+ for alt in $3; do
+ cmd=$( which $alt 2>/dev/null )
+
+ if [ -x "$cmd" ]; then
+ read "$1" <<< "$cmd"
+ return 0
+ fi
+ done
+ }
+
+ echo -e "\e[1;31mERROR\e[0m: Command '$2' not found"
+ exit 1
+}
+
+# First check if our build system is installed
+sanitycheck MESON 'meson'
+sanitycheck NINJA 'ninja' 'ninja-build'
+
+# convert the patterns into actual lists
+options2list "${DIRECTORY_OPTIONS}" 'dir_list'
+options2list "${PROJECT_OPTIONS}" 'project_option_list'
+
+# Parse the options
+while (($# > 0)); do
+ option="${1%%=*}"
+ option_name=${option#--}
+
+ case "${option}" in
+ --prefix) read_arg "${option_name}" "$@" || shift;;
+ ${DIRECTORY_OPTIONS}) read_arg "${option_name}" "$@" || shift;;
+ ${PROJECT_OPTIONS}) read_arg "${option_name}" "$@" || shift;;
+ # Special case for datarootdir: not understood by meson
+ --datarootdir) read_arg "datadir" "$@" || shift;;
+ *) echo -e "\e[1;33mINFO\e[0m: Ignoring unknown option '$1'";;
+ esac
+ shift
+done
+
+# Deduce directories
+prefix="${option_values['prefix']:-/usr/local}"
+option_values['prefix']="${prefix}"
+option_values['bindir']="${option_values['bindir']:-${prefix}/bin}"
+option_values['sbindir']="${option_values['sbindir']:-${prefix}/sbin}"
+option_values['libexecdir']="${option_values['libexecdir']:-${prefix}/bin}"
+option_values['datarootdir']="${option_values['datarootdir']:-${prefix}/share}"
+option_values['datadir']="${option_values['datarootdir']}"
+option_values['sysconfdir']="${option_values['sysconfdir']:-${prefix}/etc}"
+option_values['libdir']="${option_values['libdir']:-${prefix}/lib}"
+option_values['mandir']="${option_values['mindir']:-${prefix}/share/man}"
+option_values['includedir']="${option_values['includedir']:-${prefix}/include}"
+
+# The source directory is the location of this file
+srcdir="$(dirname $0)"
+
+# The bild directory is the current directory
+builddir="$(pwd)"
+
+# Wrapper Makefile for Ninja
+cat > Makefile <<END
+# Generated by configure; do not edit
+
+all:
+ CC="\$(CC)" CXX="\$(CXX)" ${NINJA}
+
+install:
+ DESTDIR="\$(DESTDIR)" ${NINJA} install
+END
+
+
+# Summary
+column_width=16
+
+echo "Summary:"
+echo " meson:........... ${MESON}"
+echo " ninja:........... ${NINJA}"
+echo "Directories:"
+for dir in "${dir_list[@]}";do
+ padding_len=$(( ${column_width} - ${#dir} ))
+ padding="$(printf '.%.0s' $(seq 1 ${padding_len}))"
+ value=${option_values[${dir}]}
+ echo " ${dir}:${padding} ${value}"
+done
+echo "Project options:"
+for opt in "${project_option_list[@]}";do
+ padding_len=$(( $column_width - ${#opt} ))
+ padding="$(printf '.%.0s' $(seq 1 $padding_len))"
+ value=${option_values[$opt]:-<use_default>}
+ echo " ${opt}:${padding} ${value}"
+done
+
+# Add arguments to meson
+meson_args=()
+# Directories
+for dir in "${dir_list[@]}";do
+ value="${option_values[$dir]}"
+ meson_args+=(--${dir}="${value}")
+done
+# Project options (only add if set)
+for opt in "${project_option_list[@]}";do
+ value="${option_values[$opt]}"
+ [[ -n "${value}" ]] && meson_args+=(-D${opt}="${value}")
+done
+
+
+set -x
+${MESON} "${meson_args[@]}" "${srcdir}" "${builddir}"