#!/bin/bash #---------------------------------------------------------------------------------------------- # configure script for VapourSynth plugins #---------------------------------------------------------------------------------------------- # -- help ------------------------------------------------------------------------------------- if test x"$1" = x"-h" -o x"$1" = x"--help" ; then cat << EOF Usage: [PKG_CONFIG_PATH=/foo/bar/lib/pkgconfig] ./configure [options] options: -h, --help print help (this) --prefix=PREFIX install architecture-independent files into PREFIX [/usr/local] --exec-prefix=EPREFIX install architecture-dependent files into EPREFIX [PREFIX] --libdir=DIR install libs in DIR [EPREFIX/lib] --vs-plugindir=DIR location of VapourSynth plugin directory, default is [libdir]/vapoursynth --target-os=TARGET_OS select target operating system --cross-prefix=PREFIX use PREFIX for compilation tools --sysroot=SYSROOT root of cross-build tree --enable-debug compile with debug symbols and never strip --extra-cflags=XCFLAGS add XCFLAGS to CFLAGS --extra-ldflags=XLDFLAGS add XLDFLAGS to LDFLAGS --extra-libs=XLIBS add XLIBS to LIBS EOF exit 1 fi #-- func -------------------------------------------------------------------------------------- error_exit() { echo error: $1 exit 1 } log_echo() { echo $1 echo >> config.log echo --------------------------------- >> config.log echo $1 >> config.log } cc_check() { rm -f conftest.c if [ -n "$3" ]; then echo "#include <$3>" >> config.log echo "#include <$3>" > conftest.c fi echo "int main(void){$4 return 0;}" >> config.log echo "int main(void){$4 return 0;}" >> conftest.c echo $CC conftest.c -o conftest $1 $2 >> config.log $CC conftest.c -o conftest $1 $2 2>> config.log ret=$? echo $ret >> config.log rm -f conftest* return $ret } #---------------------------------------------------------------------------------------------- rm -f config.* .depend SRCDIR="$(cd $(dirname $0); pwd)" test "$SRCDIR" = "$(pwd)" && SRCDIR=. test -n "$(echo $SRCDIR | grep ' ')" && \ error_exit "out-of-tree builds are impossible with whitespace in source path" # -- output config.h -------------------------------------------------------------------------- pushd $SRCDIR REV="$(git rev-list --count HEAD 2> /dev/null)" HASH="$(git rev-parse --short HEAD 2> /dev/null)" popd cat >> config.h << EOF #define VSDCTFILTER_REV "$REV" #define VSDCTFILTER_GIT_HASH "$HASH" EOF # -- init ------------------------------------------------------------------------------------- CC="gcc" LD="gcc" STRIP="strip" DEBUG="" prefix="" exec_prefix="" libdir="" vsplugindir="" DESTDIR="" CFLAGS="-Wall -std=c99 -I. -I$SRCDIR" LDFLAGS="-L." DEPLIBS="" SRC_SOURCE="src/croutines.c src/main.c" # -- options ---------------------------------------------------------------------------------- echo all command lines: > config.log echo "$*" >> config.log for opt; do optarg="${opt#*=}" case "$opt" in --prefix=*) prefix="$optarg" ;; --exec-prefix=*) exec_prefix="$optarg" ;; --libdir=*) libdir="$optarg" ;; --vs-plugindir=*) vsplugindir="$optarg" ;; --destdir=*) DESTDIR="$optarg" ;; --enable-debug) DEBUG="enabled" ;; --extra-cflags=*) XCFLAGS="$optarg" ;; --extra-ldflags=*) XLDFLAGS="$optarg" ;; --extra-libs=*) XLIBS="$optarg" ;; --target-os=*) TARGET_OS="$optarg" ;; --cross-prefix=*) CROSS="$optarg" ;; --sysroot=*) CFLAGS="$CFLAGS --sysroot=$optarg" LDFLAGS="$LDFLAGS --sysroot=$optarg" ;; *) error_exit "unknown option $opt" ;; esac done test -n "$prefix" || prefix="/usr/local" test -n "$exec_prefix" || exec_prefix='${prefix}' test -n "$libdir" || libdir='${exec_prefix}/lib' test -n "$vsplugindir" || vsplugindir='${libdir}/vapoursynth' BASENAME="vsdctfilter" if test -n "$TARGET_OS"; then TARGET_OS=$(echo $TARGET_OS | tr '[A-Z]' '[a-z]') else TARGET_OS=$($CC -dumpmachine | tr '[A-Z]' '[a-z]') fi case "$TARGET_OS" in *mingw*|*cygwin*) SYS="WIN32" SOSUFFIX="dll" SONAME="$BASENAME.$SOSUFFIX" SOFLAGS="-Wl,--enable-auto-image-base -Wl,--export-all-symbols" CFLAGS="$CFLAGS -D__USE_MINGW_ANSI_STDIO" ;; *darwin*) SYS="MACOSX" SOSUFFIX="dylib" SONAME="lib$BASENAME.$REV.$SOSUFFIX" SONAME_LN="lib$BASENAME.$SOSUFFIX" SOFLAGS="-dynamiclib -Wl,-single_module -Wl,-read_only_relocs,suppress -install_name ${DESTDIR}${libdir}/${SONAME}" ;; *) SOSUFFIX="so" SONAME="lib$BASENAME.$SOSUFFIX.$REV" SONAME_LN="lib$BASENAME.$SOSUFFIX" SOFLAGS="-Wl,-soname,$SONAME" CFLAGS="$CFLAGS -fPIC" LDFLAGS="-fPIC $LDFLAGS" ;; esac # -- add extra -------------------------------------------------------------------------------- if test -n "$prefix"; then CFLAGS="$CFLAGS -I$prefix/include" LDFLAGS="$LDFLAGS -L$prefix/lib" fi test -n "$libdir" && LDFLAGS="$LDFLAGS -L$libdir" CFLAGS="$CFLAGS $XCFLAGS" LDFLAGS="$LDFLAGS $XLDFLAGS" # -- check_exe -------------------------------------------------------------------------------- CC="${CROSS}${CC}" LD="${CROSS}${LD}" STRIP="${CROSS}${STRIP}" for f in "$CC" "$LD" "$STRIP"; do test -n "$(which $f 2> /dev/null)" || error_exit "$f is not executable" done # -- check & set cflags and ldflags ---------------------------------------------------------- if test -n "$DEBUG"; then CFLAGS="$CFLAGS -g3 -O0" STRIP="" else CFLAGS="-O3 -ffast-math -fomit-frame-pointer -fno-tree-vectorize $CFLAGS" fi log_echo "CFLAGS/LDFLAGS checking..." if ! cc_check "$CFLAGS" "$LDFLAGS"; then error_exit "invalid CFLAGS/LDFLAGS" fi if cc_check "$CFLAGS -fexcess-precision=fast" "$LDFLAGS"; then CFLAGS="$CFLAGS -fexcess-precision=fast" fi if cc_check "-msse2 -mfpmath=sse $CFLAGS" "$LDFLAGS"; then CFLAGS="-msse2 -mfpmath=sse $CFLAGS" fi # -- check pkg-config ---------------------------------------------------------------- PKGCONFIGEXE="pkg-config" test -n "$(which ${CROSS}${PKGCONFIGEXE} 2> /dev/null)" && \ PKGCONFIGEXE=${CROSS}${PKGCONFIGEXE} if $PKGCONFIGEXE --exists $DEPLIBS 2> /dev/null; then LIBS="$($PKGCONFIGEXE --libs $DEPLIBS)" CFLAGS="$CFLAGS $($PKGCONFIGEXE --cflags $DEPLIBS)" else for lib in $DEPLIBS; do LIBS="$LIBS -l${lib#lib}" done log_echo "warning: pkg-config or pc files not found, lib detection may be inaccurate." fi # -- LDFLAGS settings -------------------------------------------------------------------------- if [ "$SYS" = WIN32 ]; then LDFLAGS="$LDFLAGS -shared -Wl,--dll,--add-stdcall-alias" LIBS="-lwinmm $LIBS $XLIBS" else LDFLAGS="$LDFLAGS -shared" LIBS="$LIBS $XLIBS" fi # -- output config.mak ------------------------------------------------------------------------ rm -f config.mak cat >> config.mak << EOF CC = $CC LD = $LD STRIP = $STRIP CFLAGS = $CFLAGS LDFLAGS = $LDFLAGS LIBS = $LIBS SRCDIR = $SRCDIR DESTDIR = $DESTDIR prefix = $prefix exec_prefix = $exec_prefix libdir = $libdir vsplugindir = $vsplugindir SRC_SOURCE = $SRC_SOURCE BASENAME=$BASENAME SONAME=$SONAME SONAME_LN=$SONAME_LN SOSUFFIX=$SOSUFFIX SOFLAGS=$SOFLAGS EOF cat >> config.log << EOF --------------------------------- setting --------------------------------- EOF cat config.mak >> config.log cat << EOF settings... CC = $CC LD = $LD STRIP = $STRIP CFLAGS = $CFLAGS LDFLAGS = $LDFLAGS LIBS = $LIBS SONAME = $SONAME SOFLAGS = $SOFLAGS PREFIX = $prefix VSPLUGINDIR = $vsplugindir EOF test "$SRCDIR" = "." || cp -f $SRCDIR/GNUmakefile . # --------------------------------------------------------------------------------------------- cat << EOF configure finished. type 'make' : compile $SONAME EOF