transmission/configure

541 lines
9.4 KiB
Bash
Executable File

#! /bin/sh
#
# $Id$
#
# Default settings
#
SYSTEM=
BEOS_NETSERVER=no
BEOS_OLDCC=no
MATH=no
PTHREAD=no
OPENSSL=
GTK=
LIBEVENT=
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
--disable-daemon Don't build the daemon
--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 <<EOF
int main()
{
return 0;
}
EOF
if ! runcmd $CC -o testconf testconf.c
then
rm -f testconf*
echo "Could not find a working compiler"
exit 1
fi
rm -f testconf*
}
openssl_test()
{
verbose openssl_test
cat > testconf.c << EOF
#include <stdio.h>
#include <openssl/sha.h>
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="-lm $LDFLAGS"
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*
}
strlcpy_test()
{
verbose strlcpy_test
cat > testconf.c << EOF
#include <string.h>
int main()
{
char buf[] = "1234:p";
strlcpy( buf, "foo", sizeof buf );
return ( 0 == memcmp( buf, "foo\0:p", 6 ) ? 0 : 1 );
}
EOF
if runcmd $CC -o testconf testconf.c && runcmd ./testconf
then
CFLAGS="$CFLAGS -DHAVE_STRLCPY"
fi
rm -f testconf*
}
strlcat_test()
{
verbose strlcat_test
cat > testconf.c << EOF
#include <string.h>
int main()
{
char buf[] = "1234567:p";
buf[0] = '\0';
strlcat( buf, "foo", sizeof buf );
strlcat( buf, "bar", sizeof buf );
return ( 0 == memcmp( buf, "foobar\0:p", 6 ) ? 0 : 1 );
}
EOF
if runcmd $CC -o testconf testconf.c && runcmd ./testconf
then
CFLAGS="$CFLAGS -DHAVE_STRLCAT"
fi
rm -f testconf*
}
asprintf_test()
{
verbose asprintf_test
cat > testconf.c <<EOF
#define _GNU_SOURCE
#include <stdio.h>
int main()
{
asprintf( NULL, NULL );
return 0;
}
EOF
if runcmd $CC -o testconf testconf.c
then
CFLAGS="$CFLAGS -DHAVE_ASPRINTF"
fi
rm -f testconf*
}
snprintf_test()
{
verbose snprintf_test
cat > testconf.c <<EOF
#include <stdio.h>
int main()
{
char buf[] = "blueberry";
return ( 6 != snprintf( buf, 4, "%s%s", "foo", "bar" ) ||
0 != memcmp( buf, "foo\0berry", 9 ) );
}
EOF
if ! runcmd $CC -o testconf testconf.c || ! runcmd ./testconf
then
echo "error: broken snprintf() found"
exit 1
fi
rm -f testconf*
}
libgen_test()
{
verbose libgen_test
cat > testconf.c << EOF
#include <libgen.h>
int main()
{
return 0;
}
EOF
if runcmd $CC -o testconf testconf.c
then
CFLAGS="$CFLAGS -DHAVE_DIRNAME -DHAVE_BASENAME"
fi
rm -f testconf*
}
gettext_test()
{
verbose gettext_test
cat > testconf.c <<EOF
#include <libintl.h>
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 <gtk/gtk.h>
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
}
libevent_test()
{
verbose libevent_test
cat > testconf.c <<EOF
#include <sys/types.h>
#include <sys/time.h>
#include <event.h>
int main()
{
event_init();
return 0;
}
EOF
if runcmd $CC $CFLAGS -levent $LDFLAGS -o testconf testconf.c
then
LIBEVENT=yes
LDFLAGS_EVENT="-levent"
rm -f testconf*
return 0
fi
for event_testdir in $PREFIX /usr/local /usr/X11R6 /usr/pkg
do
if runcmd $CC $CFLAGS -I$event_testdir/include $LDFLAGS -levent \
-L$event_testdir/lib -o testconf testconf.c
then
LIBEVENT=yes
CFLAGS_EVENT="-I$event_testdir/include"
LDFLAGS_EVENT="-levent -L$event_testdir/lib"
rm -f testconf*
return 0
fi
done
LIBEVENT=no
rm -f testconf*
return 1
}
#
# Parse options
#
while [ $# -ne 0 ]; do
param=`expr "opt$1" : 'opt[^=]*=\(.*\)'`
case "x$1" in
x--disable-openssl|x--without-openssl)
OPENSSL=no
;;
x--disable-daemon|x--without-daemon)
LIBEVENT=no
;;
x--disable-gtk|x--without-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 -dumpversion`
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) SDK" 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 [ "x$GTK" = xno ]; then
echo "disabled"
else
gtk_test
if [ "x$GTK" = xno ] && [ "x$SYSTEM" = xLinux ]; then
cat <<EOF
*** GTK+ was not found, transmission-gtk will *NOT* be built. If you
*** wish to use the graphical version of Transmission then you will
*** need to install GTK+ headers and libraries. Try using your
*** distribution's package management utility to find a package called
*** libgtk2.0-dev, gtk2-devel, or something similar; then install it
*** and re-run this script.
EOF
fi
fi
#
# libevent settings
#
echo -n "Daemon: "
if [ "$LIBEVENT" = no ]; then
echo "disabled"
else
if libevent_test; then
echo "yes"
else
echo "no (can't find libevent)"
fi
fi
#
# Math functions
#
lm_test
lrintf_test
#
# String functions
#
strlcpy_test
strlcat_test
asprintf_test
snprintf_test
libgen_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
DAEMON = $LIBEVENT
CC = $CC
CFLAGS = $CFLAGS
CXX = $CXX
CXXFLAGS = $CXXFLAGS
LDFLAGS = $LDFLAGS
CFLAGS_GTK = $CFLAGS_GTK
LDFLAGS_GTK = $LDFLAGS_GTK
CFLAGS_EVENT = $CFLAGS_EVENT
LDFLAGS_EVENT = $LDFLAGS_EVENT
EOF
echo
echo "Now use GNU make to build Transmission."
echo "It may be called 'make' or 'gmake' depending on your system."