#!/bin/sh
#
#  Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
#    Jonathan Schleifer <js@heap.zone>
#
#  All rights reserved.
#
#  This file is part of ObjFW. It may be distributed under the terms of the
#  Q Public License 1.0, which can be found in the file LICENSE.QPL included in
#  the packaging of this file.
#
#  Alternatively, it may be distributed under the terms of the GNU General
#  Public License, either version 2 or 3, which can be found in the file
#  LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
#  file.
#

prefix="@prefix@"
exec_prefix="@exec_prefix@"
datarootdir="@datarootdir@"
datadir="@datadir@"
libdir="@libdir@"
CFLAGS=""
CPPFLAGS="@OBJFW_CPPFLAGS@ -I@includedir@"
CXXFLAGS=""
OBJC="@OBJC@"
OBJCFLAGS="@OBJFW_OBJCFLAGS@"
LIB_CFLAGS="@LIB_CFLAGS@"
LIB_LDFLAGS="@LIB_LDFLAGS@"
LIB_PREFIX="@LIB_PREFIX@"
LIB_SUFFIX="@LIB_SUFFIX@"
LDFLAGS="@LDFLAGS@"
LDFLAGS_REEXPORT="@LDFLAGS_REEXPORT@"
LDFLAGS_RPATH="@LDFLAGS_RPATH@"
LIBS="-L${libdir} -lobjfw @RUNTIME_LIBS@ @LIBS@"
FRAMEWORK_LIBS="-F${prefix}/Library/Frameworks -framework ObjFW"
FRAMEWORK_LIBS="$FRAMEWORK_LIBS @RUNTIME_FRAMEWORK_LIBS@ @LIBS@"
PLUGIN_CFLAGS="@PLUGIN_CFLAGS@"
PLUGIN_LDFLAGS="@PLUGIN_LDFLAGS@"
PLUGIN_SUFFIX="@PLUGIN_SUFFIX@"
PROG_SUFFIX="@EXEEXT@"
STATIC_LIBS="${libdir}/libobjfw.a @LIBS@"
VERSION="@PACKAGE_VERSION@"

show_help() {
	cat >&2 <<__EOF__
objfw-config: Available arguments are:

    --all             Outputs all flags + libs
    --arc             Outputs the required OBJCFLAGS to use ARC
    --cflags          Outputs the required CFLAGS
    --cppflags        Outputs the required CPPFLAGS
    --cxxflags        Outputs the required CXXFLAGS
    --framework-libs  Outputs the required LIBS, preferring frameworks
    --help            Print this help
    --ldflags         Outputs the required LDFLAGS
    --libs            Outputs the required LIBS
    --lib-cflags      Outputs CFLAGS for building a library
    --lib-ldflags     Outputs LDFLAGS for building a library
    --lib-prefix      Outputs the prefix for libraries
    --lib-suffix      Outputs the suffix for libraries
    --objc            Outputs the OBJC used to compile ObjFW
    --objcflags       Outputs the required OBJCFLAGS
    --package         Additionally outputs the flags for the specified package
    --packages-dir    Outputs the directory where flags for packages are stored
    --plugin-cflags   Outputs CFLAGS for building a plugin
    --plugin-ldflags  Outputs LDFLAGS for building a plugin
    --plugin-suffix   Outputs the suffix for plugins
    --prog-suffix     Outputs the suffix for binaries
    --reexport        Outputs LDFLAGS to reexport ObjFW
    --rpath           Outputs LDFLAGS for using rpath
    --static-libs     Outputs the required LIBS to link ObjFW statically
    --version         Outputs the installed version
__EOF__
	exit $1
}

test -z "$1" && show_help 1

package_version() {
	if test "$1" != "1"; then
		echo "Unsupported package version: $1"
		exit 1
	fi
}

include_package() {
	if ! test -f "$datadir/objfw/packages/$1"; then
		echo "No such package: $1"
		exit 1
	fi

	source "$datadir/objfw/packages/$1"
}

add_package_flags() {
	while test -n "$1"; do
		case "$1" in
			--package)
				shift
				include_package "$1"
				;;
		esac
		shift
	done
}

add_package_flags "$@"

while test -n "$1"; do
	case "$1" in
		--all)
			printf "%s %s %s " "$CFLAGS" "$CPPFLAGS" "$CXXFLAGS"
			printf "%s %s " "$OBJCFLAGS" "$LDFLAGS"
			printf "%s %s " "$LDFLAGS_REEXPORT" "$LDFLAGS_RPATH"
			printf "%s" "$LIBS"
			;;
		--arc)
			printf "%s" "-fobjc-arc -fobjc-arc-exceptions"
			;;
		--cflags)
			printf "%s" "$CFLAGS"
			;;
		--cppflags)
			printf "%s" "$CPPFLAGS"
			;;
		--cxxflags)
			printf "%s" "$CXXFLAGS"
			;;
		--framework-libs)
			printf "%s" "$FRAMEWORK_LIBS"
			;;
		--help)
			show_help 0
			;;
		--objc)
			printf "%s" "$OBJC"
			;;
		--objcflags)
			printf "%s" "$OBJCFLAGS"
			;;
		--libs)
			printf "%s" "$LIBS"
			;;
		--lib-cflags)
			if test x"$LIB_MAJOR" = x"" -o x"$LIB_MINOR" = x""; then
				echo "LIB_MAJOR and LIB_MINOR need to be set!" \
					1>&2
				exit 1
			fi

			printf "%s" "$LIB_CFLAGS"
			;;
		--lib-ldflags)
			if test x"$SHARED_LIB" = x"" -o x"$LIB_MAJOR" = x"" \
			-o x"$LIB_MINOR" = x""; then
				printf "SHARED_LIB, LIB_MAJOR and " 2>&1
				echo "and LIB_MINOR to be set!" 1>&2
				exit 1
			fi

			printf "%s" "$LIB_LDFLAGS"
			;;
		--lib-prefix)
			if test x"$LIB_MAJOR" = x"" -o x"$LIB_MINOR" = x""; then
				echo "LIB_MAJOR and LIB_MINOR need to be set!" \
					1>&2
				exit 1
			fi

			printf "%s" "$LIB_PREFIX"
			;;
		--lib-suffix)
			if test x"$LIB_MAJOR" = x"" -o x"$LIB_MINOR" = x""; then
				echo "LIB_MAJOR and LIB_MINOR need to be set!" \
					1>&2
				exit 1
			fi

			printf "%s" "$LIB_SUFFIX"
			;;
		--ldflags)
			printf "%s" "$LDFLAGS"
			;;
		--reexport)
			printf "%s" "$LDFLAGS_REEXPORT"
			;;
		--rpath)
			printf "%s" "$LDFLAGS_RPATH"
			;;
		--package)
			# Already included into the flags.
			shift
			;;
		--packages-dir)
			printf "%s" "$datadir/objfw/packages"
			;;
		--plugin-cflags)
			printf "%s" "$PLUGIN_CFLAGS"
			;;
		--plugin-ldflags)
			printf "%s" "$PLUGIN_LDFLAGS"
			;;
		--plugin-suffix)
			printf "%s" "$PLUGIN_SUFFIX"
			;;
		--prog-suffix)
			printf "%s" "$PROG_SUFFIX"
			;;
		--static-libs)
			printf "%s" "$STATIC_LIBS"
			;;
		--version)
			printf "%s" "$VERSION"
			;;
		*)
			echo "Invalid option: $1" 1>&2
			exit 1
			;;
	esac
	shift

	test -n "$1" && printf " "
done

echo
