#! /bin/sh # # $Id$ # # Default settings # SYSTEM= BEOS_NETSERVER=no BEOS_OLDCC=no MATH=no PTHREAD=no OPENSSL= GTK= PREFIX=/usr/local CC="${CC-cc}" CFLAGS="${CFLAGS}" CXX="${CXX-c++}" CXXFLAGS="${CXXFLAGS}" LDFLAGS="${LDFLAGS}" VERBOSE=no # # Functions # usage() { cat << EOF Options: --disable-openssl Disable OpenSSL, use built-in SHA1 implementation --disable-gtk Don't build the GTK+ GUI --prefix=PATH Installation path --verbose Display additional information for debugging Some influential environment variables: CC C compiler command CFLAGS C compiler flags CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker flags EOF } runcmd() { if [ "$VERBOSE" = yes ] then echo "$@" >&2 "$@" else "$@" > /dev/null 2>&1 fi return $! } verbose() { if [ "$VERBOSE" = yes ] then echo "$@" fi } cc_test() { verbose cc_test cat > testconf.c < testconf.c << EOF #include #include int main() { SHA1( 0, 0, 0 ); } EOF if runcmd $CC $CFLAGS $LDFLAGS -o testconf testconf.c -lcrypto then echo "yes" OPENSSL=yes else echo "missing, using built-in SHA1 implementation" OPENSSL=no fi rm -f testconf* } lm_test() { verbose lm_test cat > testconf.c << EOF int main() { return cos( 42 ); } EOF if ! runcmd $CC -o testconf testconf.c then if runcmd $CC -o testconf testconf.c -lm then LDFLAGS="$LDFLAGS -lm" fi fi rm -f testconf* } lrintf_test() { verbose lrintf_test cat > testconf.c << EOF int main() { return ( lrintf( 3.14 ) != 3 ); } EOF if runcmd $CC -o testconf testconf.c $LDFLAGS && runcmd ./testconf then CFLAGS="$CFLAGS -DHAVE_LRINTF" fi rm -f testconf* } gettext_test() { verbose gettext_test cat > testconf.c < int main() { gettext(""); } EOF if runcmd $CC $CFLAGS_GTK $LDFLAGS_GTK -o testconf testconf.c then rm -f testconf* return 0 fi for intl_testdir in $PREFIX/include \ /usr/local/include /usr/X11R6/include /usr/pkg/include do if runcmd $CC $CFLAGS_GTK -I$intl_testdir $LDFLAGS_GTK -o testconf testconf.c then CFLAGS_GTK="$CFLAGS_GTK -I$intl_testdir" rm -f testconf* return 0 fi done rm -f testconf* return 1 } gtk_test() { verbose gtk_test if runcmd pkg-config gtk+-2.0 then if runcmd pkg-config --exists gtk+-2.0 '>=' 2.6.0 then cat > testconf.c << EOF #include int main() { gtk_main(); } EOF if runcmd $CC `pkg-config gtk+-2.0 --cflags --libs` -o testconf testconf.c then CFLAGS_GTK=`pkg-config gtk+-2.0 --cflags` LDFLAGS_GTK=`pkg-config gtk+-2.0 --libs` if gettext_test then echo "yes" GTK=yes LOCALEDIR="$PREFIX/share/locale" CFLAGS_GTK="$CFLAGS_GTK -DLOCALEDIR=\\"\""$LOCALEDIR\\"\" else echo "no (could not find gettext libintl.h)" GTK=no fi else echo "no" GTK=no fi rm -f testconf* else echo "no (2.6.0 or later is required)" GTK=no fi else echo "no" GTK=no fi } # # Parse options # while [ $# -ne 0 ]; do param=`expr "opt$1" : 'opt[^=]*=\(.*\)'` case "x$1" in x--disable-openssl) OPENSSL=no ;; x--disable-gtk) GTK=no ;; x--prefix=*) PREFIX="$param" ;; x--verbose) VERBOSE=yes ;; x--help) usage exit 0 ;; esac shift done # # System-specific flags # SYSTEM=`uname -s` case $SYSTEM in BeOS) RELEASE=`uname -r` case $RELEASE in 6.*|5.0.4) # Zeta or R5 / BONE beta 7 ;; 5.0*) # R5 / net_server BEOS_NETSERVER=yes ;; *) echo "Unsupported BeOS version" exit 1 ;; esac GCCVER=`$CC --version` case $GCCVER in 2.95.3*|3*|4*) ;; 2.9*) BEOS_OLDCC=yes ;; *) echo "Unsupported gcc version" exit 1 ;; esac ;; Darwin) # Make sure the Universal SDK is installed if [ ! -d /Developer/SDKs/MacOSX10.4u.sdk ]; then cat << EOF You need to install the Universal SDK in order to build Transmission: Get your Xcode CD or package Restart the install When it gets to "Installation Type", select "Customize" Select "Mac OS X 10.4 (Universal) SDL" under "Cross Development" Finish the install. EOF exit 1 fi PTHREAD=yes ;; FreeBSD|NetBSD|OpenBSD|Linux|skyos) PTHREAD=yes ;; CYGWIN*) ;; *) echo "Unsupported operating system" exit 1 ;; esac echo "System: $SYSTEM" # # First things first, check to see if there's a compiler installed # cc_test # # OpenSSL settings # echo -n "OpenSSL: " if [ "$OPENSSL" = no ]; then echo "disabled, using built-in SHA1 implementation" else openssl_test fi if [ "$OPENSSL" = no ] && [ "$BEOS_OLDCC" = yes ]; then echo "built-in SHA1 implementation not supported with your gcc version" echo "you must either install OpenSSL or gcc 2.95.3 or newer" exit 1 fi # # GTK+ settings # echo -n "GTK+: " if [ "$GTK" = no ]; then echo "disabled" else gtk_test fi # # Math functions # lm_test lrintf_test # # Generate config.mk # rm -f mk/config.mk cat > mk/config.mk << EOF SYSTEM = $SYSTEM PREFIX = $PREFIX LOCALEDIR = $LOCALEDIR BEOS_NETSERVER = $BEOS_NETSERVER PTHREAD = $PTHREAD OPENSSL = $OPENSSL GTK = $GTK CC = $CC CFLAGS = $CFLAGS CXX = $CXX CXXFLAGS = $CXXFLAGS LDFLAGS = $LDFLAGS CFLAGS_GTK = $CFLAGS_GTK LDFLAGS_GTK = $LDFLAGS_GTK EOF echo echo "Now use GNU make to build Transmission." echo "It may be called 'make' or 'gmake' depending on your system."