#!/bin/sh # dlfcn-win32 configure script # # Copyright (c) 2007, 2009, 2012 Ramiro Polla # Copyright (c) 2014 Tiancheng "Timothy" Gu # # Parts copied from FFmpeg's configure. Original license was: # # Copyright (c) 2000-2002 Fabrice Bellard # Copyright (c) 2005-2007 Diego Biurrun # Copyright (c) 2005-2007 Mans Rullgard # # dlfcn-win32 is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # dlfcn-win32 is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with dlfcn-win32; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 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 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"