#!/bin/sh # # vdr-xinelibout configure script # # Copyright (c) Petri Hintukainen 2008 # # See the main source file 'xineliboutput.c' for copyright information and # how to reach the author. # # * $Id: configure,v 1.13 2009-01-08 11:58:33 rofafor Exp $ # PKG_CONFIG="pkg-config" makefile="config.mak" header="features.h" logfile="configure.log" debug=no CC="cc" CXX="g++" CFLAGS="" # # tools # toupper(){ echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ } die(){ log "$@" exit -1 } log(){ echo "$@" echo "$@" >> $logfile } logdbg(){ [ x$debug = xyes ] && log "$@" || echo "$@" >> $logfile } not_in_list(){ key=$1 shift for item in $*; do test $key = $item && return 1 done return 0 } add_flag(){ eval not_in_list $flag \$$flags_list || return 1 eval $flags_list=\"\$${flags_list} ${flag}\" } add_flags(){ flags_list=$1 shift for flag in $*; do add_flag $flags_list $flag done } # # enable/disable # set_opt(){ eval HAVE_$(toupper $1)=$2 } set_opts(){ optvalue=$1 shift for optname in $*; do set_opt $optname $optvalue done } enable(){ set_opts yes $* } disable(){ set_opts no $* } enabled(){ ucfeature=$(toupper $1) eval test "x\$HAVE_${ucfeature}" = "xyes" } disabled(){ ucfeature=$(toupper $1) eval test "x\$HAVE_${ucfeature}" = "xno" } # # compile/link tests # generate_test_c(){ hdrname=$1 subsys=$2 func=$3 if test x"$subsys" = xX11 ; then cat <testhdr.c #include #include <$hdrname> int main(int c, char **v) { $func; return 0; } EOF else cat <testhdr.c #include #include <$hdrname> int main(int c, char **v) { $func; } EOF fi } test_library_c(){ log -n "Checking for $libname ... " generate_test_c $hdr $subsys $func $CC -g testhdr.c -o testhdr $CFLAGS $lib > /dev/null 2>&1 err=$? if test $err = 0; then log "yes" add_flags LIBS_$subsys $lib logdbg adding $lib to LIBS_$subsys else log "no" logdbg "--------" logdbg "/* $CC -g testhdr.c -o testhdr $CFLAGS $lib */" logdbg `cat testhdr.c` logdbg "--------" fi rm -f testhdr.c testhdr return $err } # # pkg-config tests # test_pkgconfig(){ disabled pkgconfig && return 1 log -n "Checking for $PKG_CONFIG ... " disable pkgconfig $PKG_CONFIG --version>/dev/null && enable pkgconfig log $HAVE_PKGCONFIG } test_library_pc(){ subsys="$1" libname="$2" log -n "Checking for pkg-config $libname ... " if $PKG_CONFIG --exists $libname; then add_flags LIBS_$subsys \ `pkg-config --libs-only-L $libname` \ `pkg-config --libs-only-l $libname` add_flags CFLAGS_$subsys `pkg-config --cflags-only-I $libname` log "yes" return 0 fi log "no" return 1 } # # generic test # test_library(){ subsys="$1" libname="$2" hdr="$3" lib="$4" func="$5" feature=$(toupper $libname) # do not test if disabled from command-line if disabled $feature; then log "Not checking for $libname" disable $feature return 1 fi disable $feature # try pkg-config first if enabled pkgconfig; then test_library_pc "$subsys" "$libname" && enable "$feature" fi # compile/link test as fallback if disabled $feature; then test_library_c "$subsys" "$libname" "$hdr" "$lib" "$func" && enable $feature fi } # # configurable features # SUBSYSTEMS=" x11 fb vdr libxine " FEATURES=" $SUBSYSTEMS libextractor libavutil libjpeg xshm xdpms xinerama xrandr xrender vdpau " # set defaults enable x11 vdr fb xine # clear log file rm -f $logfile # # Parse command-line arguments # show_help(){ echo "Usage: configure [options]" echo "Options: [defaults in brackets after descriptions]" echo echo " --help print this message" echo " --enable-x11 build X11 frontend (vdr-sxfe) [yes]" echo " --enable-fb build framebuffer frontend (vdr-fbfe) [yes]" echo " --enable-vdr build VDR plugin [yes]" echo " --enable-libxine build xine plugins [yes]" echo echo " --disable-libextractor disable libextractor support (media file metainfo) [no]" echo " --disable-libjpeg disable libjpeg support [no]" echo " --disable-xshm disable XShm support [no]" echo " --disable-xdpms disable Xdpms support [no]" echo " --disable-xinerama disable Xinerama support [no]" echo " --disable-xrandr disable Xrandr support (video mode switching) [no]" echo " --disable-xrender disable Xrender support (HUD OSD) [no]" echo " --disable-vdpau disable VDPAU support (X11) [no]" echo echo " --debug debug configure script" echo " --disable-pkgconfig do not use pkg-config" echo " --cc=CC select C compiler" echo " --cxx=CXX select C++ compiler" echo " --add-cflags=FLAGS add compiler flags" } for opt do optval="${opt#*=}" logdbg "Command line: $opt [$optval]" case "$opt" in --help) show_help && die ;; --debug) debug=yes logdbg "Debug mode" ;; --cc=?*) CC=$optval logdbg "C compiler: $CC" ;; --cxx=?*) CXX=$optval logdbg "C++ compiler: $CXX" ;; --add-cflags=?*) CFLAGS="$CFLAGS $optval" logdbg "CFLAGS: $CFLAGS" ;; --disable-pkgconfig) disable pkgconfig logdbg "Disabled pkg-config" ;; --enable-?*|--disable-?*) eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'` logdbg " $action $option" not_in_list $option $FEATURES && die "unknown option $opt" eval $action \${option} ;; -*) die "unknown option $opt" ;; esac done # # maintain deps # check_deps(){ disabled libxine && disable x11 fb libavutil libjpeg disabled x11 && disable xshm xrender xrandr xdpms xinerama vdpau disabled vdr && disable libextractor } check_deps # # Run the tests # test_pkgconfig # fake test that should fail [ $debug = yes ] && \ test_library X11 do_error "none.h" "-lnolib" test_library VDR libextractor "extractor.h" "-lextractor" "EXTRACTOR_getKeywords(0,0)" test_library XINE libxine "xine.h" "-lxine" "xine_init(0)" if enabled libxine; then log -n "Checking for xine plugin directory ..." if enabled pkgconfig && $PKG_CONFIG libxine --atleast-version 1.1.90; then XINEPLUGINDIR=`$PKG_CONFIG libxine --variable=plugindir` else XINEPLUGINDIR=`xine-config --plugindir` fi log " $XINEPLUGINDIR" test_library XINE libavutil "libavutil/mem.h" "-lavutil" "av_mallocz(1)" test_library XINE libjpeg "jpeglib.h" "-ljpeg" "jpeg_create_compress(0)" test_library X11 x11 "X11/X.h" "-lX11" "XInitThreads()" if enabled x11; then test_library X11 xext "X11/extensions/Xext.h" "-lXext" "" test_library X11 xshm "X11/extensions/XShm.h" "-lXext" "XShmQueryExtension(0)" test_library X11 xrender "X11/extensions/Xrender.h" "-lXrender" "XRenderQueryFormats(0)" test_library X11 xrandr "X11/extensions/Xrandr.h" "-lXrandr" "XRRGetScreenInfo(0,0)" test_library X11 xdpms "X11/extensions/dpms.h" "-lXext" "DPMSDisable(0)" test_library X11 xinerama "X11/extensions/Xinerama.h" "-lXinerama" "XineramaQueryScreens(0,0)" test_library X11 vdpau "vdpau/vdpau_x11.h" "-lvdpau" "vdp_device_create_x11(0,0,0,0)" fi fi check_deps # need -lm for ceil/floor in HUD OSD enabled xrender && add_flags "LIBS_X11" "-lm" # # Print results # log log "Enabled features:" for feature in $FEATURES; do enabled $feature && log " $feature" done log "Disabled features:" for feature in $FEATURES; do enabled $feature || log " $feature" done log # # create features.h # log "Creating $header ..." cat <$header /* Automatically generated by configure - do not modify! */ #ifndef XINELIBOUTPUT_FEATURES_H #define XINELIBOUTPUT_FEATURES_H EOF for feature in $FEATURES; do enabled $feature && echo "#define HAVE_$(toupper $feature) 1">>$header || \ echo "#undef HAVE_$(toupper $feature)">>$header done echo "" >> $header echo "#endif /* XINELIBOUTPUT_FEATURES_H */" >> $header # # create features.mak # log "Creating $makefile ..." echo "# Automatically generated by configure - do not modify!" > $makefile echo >> $makefile # subsystems echo "XINELIBOUTPUT_VDRPLUGIN=$HAVE_VDR" >> $makefile echo "XINELIBOUTPUT_XINEPLUGIN=$HAVE_LIBXINE" >> $makefile echo "XINELIBOUTPUT_X11=$HAVE_X11" >> $makefile echo "XINELIBOUTPUT_FB=$HAVE_FB" >> $makefile echo >> $makefile # features for feature in $FEATURES; do feature="`toupper $feature`" enabled $feature && echo "HAVE_$feature=yes">>$makefile || echo "HAVE_$feature=no">>$makefile done echo >> $makefile # xine plugin dir enabled libxine && echo "XINEPLUGINDIR=$XINEPLUGINDIR" >> $makefile && echo >> $makefile # cc/ld flags echo "CFLAGS_XINE += $CFLAGS_XINE">>$makefile echo "CFLAGS_VDR += $CFLAGS_VDR">>$makefile echo "CFLAGS_X11 += $CFLAGS_X11">>$makefile echo "LIBS_XINE += $LIBS_XINE">>$makefile echo "LIBS_VDR += $LIBS_VDR">>$makefile echo "LIBS_X11 += $LIBS_X11">>$makefile