#!/bin/sh
# dlfcn-win32 configure script
#
# Copyright (c) 2007, 2009, 2012 Ramiro Polla
# Copyright (c) 2014 Tiancheng "Timothy" Gu
#
# Differently from the rest of the dlfcn-win32 codebase that is licensed
# under the MIT license, this configure script is based in part on the FFmpeg
# configure script, and so it is licensed under the GNU Lesser General Public
# License version 2.1 or later (LGPL v2.1+). A copy of the LGPL v2.1 license
# is available at https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html
set_all(){
value=$1
shift
for var in $*; do
eval $var=$value
done
}
enable(){
set_all yes $*
}
disable(){
set_all no $*
}
enabled(){
eval test "x\$$1" = "xyes"
}
disabled(){
eval test "x\$$1" = "xno"
}
show_help(){
echo "Usage: configure [options]"
echo "Options: [defaults in brackets after descriptions]"
echo "All \"enable\" options have \"disable\" counterparts"
echo
echo " --help print this message"
echo " --prefix=PREFIX install in PREFIX [$prefix]"
echo " --libdir=DIR install libs in DIR [$libdir]"
echo " --incdir=DIR install includes in DIR [$incdir]"
echo " --enable-shared build shared libraries [no]"
echo " --enable-static build static libraries [yes]"
echo " --enable-msvc create msvc-compatible import lib [auto]"
echo " --enable-stripping strip shared library [yes]"
echo " --enable-wine[=cmd] use wine in tests [auto,cmd=$winecmd]"
echo
echo " --cc=CC use C compiler CC [$cc_default]"
echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
exit 1
}
die_unknown(){
echo "Unknown option \"$1\"."
echo "See $0 --help for available options."
exit 1
}
prefix="/mingw"
libdir='${prefix}/lib'
incdir='${prefix}/include'
ar="ar"
cc_default="gcc"
ranlib="ranlib"
strip="strip"
winecmd="wine"
DEFAULT="msvc
wine
"
DEFAULT_NO="shared
"
DEFAULT_YES="static
stripping
"
CMDLINE_SELECT="$DEFAULT
$DEFAULT_NO
$DEFAULT_YES
"
enable $DEFAULT_YES
disable $DEFAULT_NO
for opt do
optval="${opt#*=}"
case "$opt" in
--help)
show_help
;;
--prefix=*)
prefix="$optval"
;;
--libdir=*)
libdir="$optval"
;;
--incdir=*)
incdir="$optval"
;;
--cc=*)
cc="$optval"
;;
--cross-prefix=*)
cross_prefix="$optval"
;;
--enable-wine=*)
winecmd="$optval"
enable wine
;;
--enable-?*|--disable-?*)
eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
echo "$CMDLINE_SELECT" | grep -q "^ *$option\$" || die_unknown $opt
$action $option
;;
*)
die_unknown $opt
;;
esac
done
ar="${cross_prefix}${ar}"
cc_default="${cross_prefix}${cc_default}"
ranlib="${cross_prefix}${ranlib}"
strip="${cross_prefix}${strip}"
if ! test -z $cc; then
cc_default="${cc}"
fi
cc="${cc_default}"
disabled shared && disabled static && {
echo "At least one library type must be set.";
exit 1;
}
# simple cc test
cat > tmptest.c << EOF
#include <windows.h>
void function(void)
{ LoadLibrary(NULL); }
EOF
echo testing compiler: $cc -shared -o tmptest.dll tmptest.c
$cc -shared -o tmptest.dll tmptest.c
test "$?" != 0 && {
echo "$cc could not create shared file with Windows API functions.";
echo "Make sure your MinGW system is working properly.";
exit 1;
}
if enabled wine; then # wine explicitly enabled
$winecmd --version > /dev/null 2>&1 /dev/null || {
echo "wine command not found."
echo "Make sure wine is installed and its bin folder is in your \$PATH."
exit 1
}
elif disabled wine; then # explicitly disabled
winecmd=""
else # autodetect
$winecmd --version > /dev/null 2>&1 /dev/null && enable wine || winecmd=""
fi
if ! enabled stripping; then
strip="@echo ignoring strip"
fi
if enabled msvc; then # msvc explicitly enabled
disabled shared && {
echo "MSVC understands static libraries created by gcc."
echo "There's no need to create an import lib."
exit 1
}
lib /? > /dev/null 2>&1 /dev/null || {
echo "MSVC's lib command not found."
echo "Make sure MSVC is installed and its bin folder is in your \$PATH."
exit 1
}
fi
if enabled shared; then # msvc autodetected
lib /? > /dev/null 2>&1 /dev/null && enable msvc || disable msvc
fi
enabled msvc && libcmd="lib" || libcmd="@echo ignoring lib"
echo "# Automatically generated by configure" > config.mak
echo "prefix=$prefix" >> config.mak
echo "libdir=$libdir" >> config.mak
echo "incdir=$incdir" >> config.mak
echo "AR=$ar" >> config.mak
echo "CC=$cc" >> config.mak
echo "RANLIB=$ranlib" >> config.mak
echo "STRIP=$strip" >> config.mak
echo "BUILD_SHARED=$shared" >> config.mak
echo "BUILD_STATIC=$static" >> config.mak
echo "BUILD_MSVC=$msvc" >> config.mak
echo "LIBCMD=$libcmd" >> config.mak
echo "WINE=$winecmd" >> config.mak
echo "prefix: $prefix"
echo "libdir: $libdir"
echo "incdir: $incdir"
echo "ar: $ar"
echo "cc: $cc"
echo "ranlib: $ranlib"
echo "strip: $strip"
echo "static: $static"
echo "shared: $shared"
if enabled shared; then
echo "msvc: $msvc";
echo "strip: $stripping";
fi
echo "wine: $wine $winecmd"