source: configure @ ac3b8ff

Last change on this file since ac3b8ff was 1de945b, checked in by dequis <dx@…>, at 2018-03-19T15:39:57Z

configure: Add -Wformat -Werror=format-security to default CFLAGS

Matches debian build scripts.

Also expands the condition to gcc or clang. I'd rather remove this,
apparently it exists because some opensolaris compiler didn't have -Wall
which seems absurd to me, but whatever.

  • Property mode set to 100755
File size: 23.9 KB
RevLine 
[b7d3cc34]1#!/bin/sh
2
3##############################
4##  Configurer for BitlBee  ##
5##                          ##
6##  Copyright 2004 Lintux   ##
7##  Copyright 2002 Lucumo   ##
8##############################
9
10prefix='/usr/local/'
[57da960]11bindir='$prefix/bin/'
12sbindir='$prefix/sbin/'
[b7d3cc34]13etcdir='$prefix/etc/bitlbee/'
14mandir='$prefix/share/man/'
15datadir='$prefix/share/bitlbee/'
16config='/var/lib/bitlbee/'
[54b2a36]17libdir='$prefix/lib/'
[85cf37f]18plugindir='$prefix/lib/bitlbee/'
19includedir='$prefix/include/bitlbee/'
[417002e]20systemdsystemunitdir=''
[85cf37f]21libevent='/usr/'
[34b17d9]22pidfile='/var/run/bitlbee.pid'
[4c225f0]23ipcsocket=''
[e506d6c]24pcdir='$prefix/lib/pkgconfig'
[25b80e9c]25systemlibdirs="/lib64 /usr/lib64 /usr/local/lib64 /lib /usr/lib /usr/local/lib"
[f5bbaba]26sysroot=''
[b7d3cc34]27
[2f8e3ca]28configure_args="$@"
29
[04e2a05]30# Set these to default-on to let it be overriden by either the user or purple
31#
32# If the user sets one of these to 1, purple won't disable them.
33# Otherwise, if it's still default-on, it gets included in normal builds,
34# but not purple ones.
35jabber="default-on"
36oscar="default-on"
37
[1b221e0]38twitter=1
[04dc563]39purple=0
[b7d3cc34]40
[65d0dfd]41verbose=0
[a85a8ab]42doc=1
[b7d3cc34]43debug=0
[2a1c27f]44strip=0
[66b9e86e]45gcov=0
[e2472dd]46asan=0
[2abfbc5]47plugins=1
[04f0c10]48otr=0
[85cf37f]49
50events=glib
[b7d3cc34]51ssl=auto
52
[a6005da]53pam=0
[50bb490]54ldap=0
[a6005da]55
[7281ad1]56pie=1
57
[21f450c]58arch=$(uname -s)
59
[34afea7]60GLIB_MIN_VERSION=2.16
[670204f]61
[25c4c78]62# Cygwin and Darwin don't support PIC/PIE
63case "$arch" in
[a85a8ab]64        CYGWIN* )
65                pie=0;;
66        Darwin )
67                pie=0;;
[25c4c78]68esac
69
[70ec7ab]70get_version() {
71        REAL_BITLBEE_VERSION=$(grep '^#define BITLBEE_VERSION ' $srcdir/bitlbee.h | sed 's/.*\"\(.*\)\".*/\1/')
[041777e]72
73        if [ -n "$BITLBEE_VERSION" ]; then
74                # environment variable already set to something to spoof it
75                # don't replace it with the git stuff
76                return
77        fi
78
[70ec7ab]79        BITLBEE_VERSION=$REAL_BITLBEE_VERSION
80
81        if [ -d $srcdir/.git ] && type git > /dev/null 2> /dev/null; then
82                timestamp=$(cd $srcdir; git show -s --format=%ci HEAD | sed 's/ .*$//; s/-//g')
83                branch=$(cd $srcdir; git rev-parse --abbrev-ref HEAD)
84
[1d8cbc9]85                search='\(.*\)-\([0-9]*\)-\(g[0-9a-f]*\)'
[70ec7ab]86                replace="\1+$timestamp+$branch+\2-\3-git"
87
[e28c449]88                describe=$(cd $srcdir; git describe --long --tags 2>/dev/null)
89                if [ $? -ne 0 ]; then
90                        describe=${REAL_BITLBEE_VERSION}-0-g$(cd $srcdir; git rev-parse --short HEAD)
91                fi
[70ec7ab]92
[c984ee3]93                BITLBEE_VERSION=$(echo $describe | sed "s#$search#$replace#")
[e28c449]94
95                unset timestamp branch search replace describe
[70ec7ab]96        fi
97}
98
99if [ "$1" = "--dump-version" ]; then
100        srcdir=$(cd $(dirname $0);pwd)
101        get_version
102        echo $BITLBEE_VERSION
103        exit
104fi
105
106echo BitlBee configure
107
[b7d3cc34]108while [ -n "$1" ]; do
[4966712a]109        e="$(expr "X$1" : 'X--\(.*=.*\)')"
[b7d3cc34]110        if [ -z "$e" ]; then
111                cat<<EOF
112
113Usage: $0 [OPTIONS]
114
115Option          Description                             Default
116
117--prefix=...    Directories to put files in             $prefix
118--bindir=...                                            $bindir
[57da960]119--sbindir=...                                           $sbindir
[b7d3cc34]120--etcdir=...                                            $etcdir
121--mandir=...                                            $mandir
122--datadir=...                                           $datadir
[7b23afd]123--plugindir=...                                         $plugindir
[417002e]124--systemdsystemunitdir=...                              $systemdsystemunitdir
[34b17d9]125--pidfile=...                                           $pidfile
[b7d3cc34]126--config=...                                            $config
127
[65d0dfd]128--verbose=0/1   Disable/enable verbose build            $verbose
129
[b7d3cc34]130--jabber=0/1    Disable/enable Jabber part              $jabber
131--oscar=0/1     Disable/enable Oscar part (ICQ, AIM)    $oscar
[4aa0f6b]132--twitter=0/1   Disable/enable Twitter part             $twitter
[b7d3cc34]133
[796da03]134--purple=0/1    Disable/enable libpurple support        $purple
[04f0c10]135                (automatically disables other protocol modules)
[b7d3cc34]136
[a6005da]137--pam=0/1       Disable/enable PAM authentication       $pam
[50bb490]138--ldap=0/1      Disable/enable LDAP authentication      $ldap
[a6005da]139
[a85a8ab]140--doc=0/1       Disable/enable help.txt generation      $doc
[b7d3cc34]141--debug=0/1     Disable/enable debugging                $debug
142--strip=0/1     Disable/enable binary stripping         $strip
[7281ad1]143--pie=0/1       Build position independent executable   $pie
[66b9e86e]144--gcov=0/1      Disable/enable test coverage reporting  $gcov
[e2472dd]145--asan=0/1      Disable/enable AddressSanitizer         $asan
[2abfbc5]146--plugins=0/1   Disable/enable plugins support          $plugins
[04f0c10]147--otr=0/1/auto/plugin
148                Disable/enable OTR encryption support   $otr
[b7d3cc34]149
[85cf37f]150--events=...    Event handler (glib, libevent)          $events
[e1d3f98]151--ssl=...       SSL library to use (gnutls, nss, openssl, auto)
[b7d3cc34]152                                                        $ssl
[aec56b0]153
[7281ad1]154
[f1e7407]155--target=...    Cross compilation target                same as host
[f5bbaba]156--sysroot=...   Cross compilation sysroot               $sysroot
[b7d3cc34]157EOF
158                exit;
159        fi
160        eval "$e"
161        shift;
162done
163
164# Expand $prefix and get rid of double slashes
[4966712a]165bindir=$(eval echo "$bindir/" | sed 's/\/\{1,\}/\//g')
166sbindir=$(eval echo "$sbindir/" | sed 's/\/\{1,\}/\//g')
167etcdir=$(eval echo "$etcdir/" | sed 's/\/\{1,\}/\//g')
168mandir=$(eval echo "$mandir/" | sed 's/\/\{1,\}/\//g')
169datadir=$(eval echo "$datadir/" | sed 's/\/\{1,\}/\//g')
170config=$(eval echo "$config/" | sed 's/\/\{1,\}/\//g')
[54b2a36]171libdir=$(eval echo "$libdir/" | sed 's/\/\{1,\}/\//g')
[4966712a]172plugindir=$(eval echo "$plugindir/" | sed 's/\/\{1,\}/\//g')
173includedir=$(eval echo "$includedir"/ | sed 's/\/\{1,\}/\//g')
174libevent=$(eval echo "$libevent"/ | sed 's/\/\{1,\}/\//g')
175
176pidfile=$(eval echo "$pidfile" | sed 's/\/\{1,\}/\//g')
177ipcsocket=$(eval echo "$ipcsocket" | sed 's/\/\{1,\}/\//g')
178pcdir=$(eval echo "$pcdir" | sed 's/\/\{1,\}/\//g')
[b7d3cc34]179
[17f6079]180protocols_mods=""
181
[b95b0c8]182cat <<EOF >Makefile.settings
[b7d3cc34]183## BitlBee settings, generated by configure
[2f8e3ca]184
185# ./configure $configure_args
186
[b7d3cc34]187PREFIX=$prefix
188BINDIR=$bindir
[57da960]189SBINDIR=$sbindir
[b7d3cc34]190ETCDIR=$etcdir
191MANDIR=$mandir
192DATADIR=$datadir
[7b23afd]193PLUGINDIR=$plugindir
[b7d3cc34]194CONFIG=$config
[54b2a36]195LIBDIR=$libdir
[e506d6c]196INCLUDEDIR=$includedir
197PCDIR=$pcdir
[b7d3cc34]198
[1bf9492]199TARGET=$target
[b7d3cc34]200
[25b80e9c]201INSTALL=install -p
202
[b7d3cc34]203DESTDIR=
204LFLAGS=
[7a80925]205EFLAGS=-lm
[b7d3cc34]206EOF
207
[1074806]208srcdir=$(cd $(dirname $0);pwd)
209currdir=$(pwd)
210if [ "$srcdir" != "$currdir" ]; then 
[f60079b]211        echo
212        echo "configure script run from a different directory. Will create some symlinks..."
213        if [ ! -e Makefile -o -L Makefile ]; then
[04dc563]214                COPYDIRS="doc lib protocols tests utils"
215                mkdir -p $(cd "$srcdir"; find $COPYDIRS -type d)
[f60079b]216                find . -name Makefile -type l -print0 | xargs -0 rm 2> /dev/null
217                dst="$PWD"
218                cd "$srcdir"
[04dc563]219                for i in $(find . -name Makefile -type f); do
[f60079b]220                        ln -s "$PWD${i#.}" "$dst/$i";
221                done
222                cd "$dst"
223                rm -rf .bzr
224        fi
225       
[7fa5c19]226        echo "_SRCDIR_=$srcdir/" >> Makefile.settings
[f60079b]227        CFLAGS="$CFLAGS -I${dst}"
228else
229        srcdir=$PWD
230fi
231
[b95b0c8]232cat<<EOF >config.h
[b7d3cc34]233/* BitlBee settings, generated by configure
234   
235   Do *NOT* use any of these defines in your code without thinking twice, most
236   of them can/will be overridden at run-time */
237
[2f8e3ca]238#define BITLBEE_CONFIGURE_ARGS "$configure_args"
239
[b7d3cc34]240#define CONFIG "$config"
241#define ETCDIR "$etcdir"
242#define VARDIR "$datadir"
[7b23afd]243#define PLUGINDIR "$plugindir"
[ad66dcd]244#define DATADIR "$datadir"
[34b17d9]245#define PIDFILE "$pidfile"
[6dff9d4]246#define IPCSOCKET "$ipcsocket"
[b7d3cc34]247EOF
248
[1bf9492]249
250
[f1e7407]251if [ -n "$target" ]; then
[f5bbaba]252        # prepend sysroot to system lib dirs
253
254        systemlibdirs_cross=''
255        for i in $systemlibdirs; do
256                systemlibdirs_cross="$systemlibdirs_cross $sysroot$i"
257        done
258        systemlibdirs=$systemlibdirs_cross
259        unset systemlibdirs_cross
260
261        # backward compatibility
262
263        if [ -z "$PKG_CONFIG_LIBDIR" ]; then
264                PKG_CONFIG_LIBDIR=/usr/$target/lib/pkgconfig
265                export PKG_CONFIG_LIBDIR
266        fi
267
268        if [ -d /usr/$target/bin ]; then
269                PATH=/usr/$target/bin:$PATH
270        fi
271
272        if [ -d /usr/$target/lib ]; then
273                systemlibdirs="$systemlibdirs /usr/$target/lib"
274        fi
275
[f1e7407]276        CC=$target-cc
277        LD=$target-ld
[f5bbaba]278        STRIP=$target-strip
[f1e7407]279fi
280
[e2472dd]281if [ "$asan" = "1" ]; then
282        CFLAGS="$CFLAGS -fsanitize=address"
283        LDFLAGS="$LDFLAGS -fsanitize=address"
284        debug=1
285fi
[1bf9492]286
[65d0dfd]287if [ "$verbose" = "0" ]; then
288        echo 'VERBOSE=@' >> Makefile.settings
289else
290        echo 'VERBOSE=' >> Makefile.settings
291fi
292
[08b0ed8]293cat <<EOF >>Makefile.settings
294
295# Enable/disable output verbosity
296ifdef V
297ifeq (\$(V),1)
298        VERBOSE=
299else
300        VERBOSE=@
301endif
302endif
303
304EOF
305
[b7d3cc34]306if [ "$debug" = "1" ]; then
307        echo 'DEBUG=1' >> Makefile.settings
[e2472dd]308        CFLAGS="$CFLAGS -g3 -DDEBUG -O0"
[b7d3cc34]309else
[2a1c27f]310        [ -z "$CFLAGS" ] && CFLAGS="-g -O2 -fno-strict-aliasing"
[b7d3cc34]311fi
312
[7281ad1]313if [ "$pie" = "1" ]; then
314        echo 'CFLAGS_BITLBEE=-fPIE' >> Makefile.settings
315        echo 'LDFLAGS_BITLBEE=-pie' >> Makefile.settings
316fi
317
[d203495]318echo LDFLAGS=$LDFLAGS >> Makefile.settings
319
[daae10f]320echo CFLAGS=$CFLAGS $CPPFLAGS >> Makefile.settings
[f60079b]321echo CFLAGS+=-I${srcdir} -I${srcdir}/lib -I${srcdir}/protocols -I. >> Makefile.settings
[b7d3cc34]322
[41a94dd]323echo CFLAGS+=-DHAVE_CONFIG_H -D_GNU_SOURCE >> Makefile.settings
[f712188]324
[b7d3cc34]325if [ -n "$CC" ]; then
[5973412]326        CC=$CC
[b7d3cc34]327elif type gcc > /dev/null 2> /dev/null; then
[5973412]328        CC=gcc
[b7d3cc34]329elif type cc > /dev/null 2> /dev/null; then
[5973412]330        CC=cc
[b7d3cc34]331else
332        echo 'Cannot find a C compiler, aborting.'
333        exit 1;
334fi
335
[5973412]336echo "CC=$CC" >> Makefile.settings;
[1de945b]337if echo $CC | grep -qw 'gcc\|clang'; then
[daae10f]338        # Apparently -Wall is gcc-specific?
[1de945b]339        echo CFLAGS+=-Wall -Wformat -Werror=format-security >> Makefile.settings
[daae10f]340fi
[5973412]341
[f1e7407]342if [ -z "$LD" ]; then
343        if type ld > /dev/null 2> /dev/null; then
344                LD=ld
345        else
346                echo 'Cannot find ld, aborting.'
347                exit 1;
348        fi
[b7d3cc34]349fi
350
[f1e7407]351echo "LD=$LD" >> Makefile.settings
352
[32c632f]353if [ -z "$PKG_CONFIG" ]; then
354        PKG_CONFIG=pkg-config
355fi
356
[9ae8f82]357if ! $PKG_CONFIG --version > /dev/null 2>/dev/null; then
358        echo
359        echo 'Cannot find pkg-config, aborting.'
360        exit 1
361fi
362
363if $PKG_CONFIG glib-2.0; then
[670204f]364        if $PKG_CONFIG glib-2.0 --atleast-version=$GLIB_MIN_VERSION; then
[b95b0c8]365                cat<<EOF >>Makefile.settings
[4966712a]366EFLAGS+=$($PKG_CONFIG --libs glib-2.0 gmodule-2.0)
367CFLAGS+=$($PKG_CONFIG --cflags glib-2.0 gmodule-2.0)
[b7d3cc34]368EOF
[670204f]369        else
370                echo
[4966712a]371                echo 'Found glib2 '$($PKG_CONFIG glib-2.0 --modversion)', but version '$GLIB_MIN_VERSION' or newer is required.'
[670204f]372                exit 1
373        fi
[b7d3cc34]374else
[670204f]375        echo
[574af7e]376        echo 'Cannot find glib2 development libraries, aborting. (Install libglib2-dev?)'
[670204f]377        exit 1
[b7d3cc34]378fi
379
[85cf37f]380if [ "$events" = "libevent" ]; then
[003553b]381        if ! [ -f "${libevent}include/event.h" ]; then
[85cf37f]382                echo
383                echo 'Warning: Could not find event.h, you might have to install it and/or specify'
384                echo 'its location using the --libevent= argument. (Example: If event.h is in'
385                echo '/usr/local/include and binaries are in /usr/local/lib: --libevent=/usr/local)'
386        fi
387       
388        echo '#define EVENTS_LIBEVENT' >> config.h
[b95b0c8]389        cat <<EOF >>Makefile.settings
[85cf37f]390EFLAGS+=-levent -L${libevent}lib
391CFLAGS+=-I${libevent}include
392EOF
393elif [ "$events" = "glib" ]; then
394        ## We already use glib anyway, so this is all we need (and in fact not even this, but just to be sure...):
395        echo '#define EVENTS_GLIB' >> config.h
[b7d3cc34]396else
397        echo
[85cf37f]398        echo 'ERROR: Unknown event handler specified.'
399        exit 1
[b7d3cc34]400fi
[85cf37f]401echo 'EVENT_HANDLER=events_'$events'.o' >> Makefile.settings
[b7d3cc34]402
403detect_gnutls()
404{
[4af7b4f]405        if $PKG_CONFIG --exists gnutls; then
[b95b0c8]406                cat <<EOF >>Makefile.settings
[4966712a]407EFLAGS+=$($PKG_CONFIG --libs gnutls) $(libgcrypt-config --libs)
408CFLAGS+=$($PKG_CONFIG --cflags gnutls) $(libgcrypt-config --cflags)
[4af7b4f]409EOF
410                ssl=gnutls
[a59bd11]411                if ! $PKG_CONFIG gnutls --atleast-version=2.8; then
[5513f3e]412                        echo
413                        echo 'Warning: With GnuTLS versions <2.8, certificate expire dates are not verified.'
414                fi
[4af7b4f]415                ret=1
416        elif libgnutls-config --version > /dev/null 2> /dev/null; then
[b95b0c8]417                cat <<EOF >>Makefile.settings
[4966712a]418EFLAGS+=$(libgnutls-config --libs) $(libgcrypt-config --libs)
419CFLAGS+=$(libgnutls-config --cflags) $(libgcrypt-config --cflags)
[b7d3cc34]420EOF
421               
422                ssl=gnutls
423                ret=1;
424        else
425                ret=0;
426        fi;
427}
428
429detect_nss()
430{
[ef043d3]431        if $PKG_CONFIG --version > /dev/null 2>/dev/null && $PKG_CONFIG nss; then
[b95b0c8]432                cat<<EOF >>Makefile.settings
[4966712a]433EFLAGS+=$($PKG_CONFIG --libs nss)
434CFLAGS+=$($PKG_CONFIG --cflags nss)
[b7d3cc34]435EOF
436               
437                ssl=nss
438                ret=1;
439        else
440                ret=0;
441        fi;
442}
443
[36cf9fd]444RESOLV_TESTCODE='
[aee8c19]445#include <sys/types.h>
446#include <netinet/in.h>
[36cf9fd]447#include <arpa/nameser.h>
448#include <resolv.h>
449
[632627e]450int main()
451{
452
453        res_query( NULL, 0, 0, NULL, 0);
454        dn_expand( NULL, NULL, NULL, NULL, 0);
455        dn_skipname( NULL, NULL);
456}
457'
458RESOLV_NS_TESTCODE='
459#include <sys/types.h>
460#include <netinet/in.h>
461#include <arpa/nameser.h>
462#include <resolv.h>
463
[36cf9fd]464int main()
465{
466        ns_initparse( NULL, 0, NULL );
467        ns_parserr( NULL, ns_s_an, 0, NULL );
468}
469'
[632627e]470RESOLV_NS_TYPES_TESTCODE='
471#include <sys/types.h>
472#include <netinet/in.h>
473#include <arpa/nameser.h>
474
475int main()
476{
477        ns_msg nsh;
478        ns_rr rr;
479
[fb87924]480        /* Not all platforms we want to work on have
481         ns_* routines, so use this to make sure
482         the compiler uses it.*/
483        return (int)(sizeof(nsh) + sizeof(rr));
[632627e]484}
485'
[36cf9fd]486
487detect_resolv_dynamic()
488{
[aee8c19]489        case "$arch" in
[632627e]490        OpenBSD )
491                # In FreeBSD res_*/dn_* routines are present in libc.so
492                LIBRESOLV=;;
[aee8c19]493        FreeBSD )
[632627e]494                # In FreeBSD res_*/dn_* routines are present in libc.so
495                LIBRESOLV=;;
496        CYGWIN* )
497                # In Cygwin res_*/dn_* routines are present in libc.so
[aee8c19]498                LIBRESOLV=;;
499        * )
500                LIBRESOLV=-lresolv;;
501        esac
[4fca1db]502        TMPFILE=$(mktemp /tmp/bitlbee-configure.XXXXXX)
[8462239]503        ret=1
[aee8c19]504        echo "$RESOLV_TESTCODE" | $CC -o $TMPFILE -x c - $LIBRESOLV >/dev/null 2>/dev/null
[36cf9fd]505        if [ "$?" = "0" ]; then
[aee8c19]506                echo "EFLAGS+=$LIBRESOLV" >> Makefile.settings
[8462239]507                ret=0
[36cf9fd]508        fi
509
[8462239]510        rm -f $TMPFILE
511        return $ret
[36cf9fd]512}
513
514detect_resolv_static()
515{
[4fca1db]516        TMPFILE=$(mktemp /tmp/bitlbee-configure.XXXXXX)
[8462239]517        ret=1
[36cf9fd]518        for i in $systemlibdirs; do
519                if [ -f $i/libresolv.a ]; then
[8462239]520                        echo "$RESOLV_TESTCODE" | $CC -o $TMPFILE -x c - -Wl,$i/libresolv.a >/dev/null 2>/dev/null
[36cf9fd]521                        if [ "$?" = "0" ]; then
522                                echo 'EFLAGS+='$i'/libresolv.a' >> Makefile.settings
[8462239]523                                ret=0
[36cf9fd]524                        fi
525                fi
526        done
527
[8462239]528        rm -f $TMPFILE
529        return $ret
[36cf9fd]530}
531
[632627e]532detect_resolv_ns_dynamic()
533{
534        case "$arch" in
535        FreeBSD )
536                # In FreeBSD ns_ routines are present in libc.so
537                LIBRESOLV=;;
538        * )
539                LIBRESOLV=-lresolv;;
540        esac
541        TMPFILE=$(mktemp /tmp/bitlbee-configure.XXXXXX)
542        ret=1
543        echo "$RESOLV_NS_TESTCODE" | $CC -o $TMPFILE -x c - $LIBRESOLV >/dev/null 2>/dev/null
[a67e781]544        if [ "$?" = "0" ]; then
545                ret=0
546        fi
[632627e]547
548        rm -f $TMPFILE
549        return $ret
550}
551
552detect_resolv_ns_static()
553{
554        TMPFILE=$(mktemp /tmp/bitlbee-configure.XXXXXX)
555        ret=1
556        for i in $systemlibdirs; do
557                if [ -f $i/libresolv.a ]; then
558                        echo "$RESOLV_NS_TESTCODE" | $CC -o $TMPFILE -x c - -Wl,$i/libresolv.a >/dev/null 2>/dev/null
[a67e781]559                        if [ "$?" = "0" ]; then
560                                ret=0
561                        fi
[632627e]562                fi
563        done
564
565        rm -f $TMPFILE
566        return $ret
567}
568
569detect_nameser_has_ns_types()
570{
[a67e781]571        TMPFILE=$(mktemp /tmp/bitlbee-configure.XXXXXX)
572        ret=1
573        # since we aren't actually linking with ns_* routines
574        # we can just compile the test code
575        echo "$RESOLV_NS_TYPES_TESTCODE" | $CC -o $TMPFILE -x c -  >/dev/null 2>/dev/null
576        if [ "$?" = "0" ]; then
577                ret=0
578        fi
579
580        rm -f $TMPFILE
581        return $ret
[632627e]582}
583
[b3c467b]584if [ "$ssl" = "auto" ]; then
585        detect_gnutls
[b7d3cc34]586        if [ "$ret" = "0" ]; then
[c5920df]587                # Disable NSS for now as it's known to not work very well ATM.
588                #detect_nss
[191cfb1]589                :
[b7d3cc34]590        fi
[b3c467b]591elif [ "$ssl" = "gnutls" ]; then
592        detect_gnutls
593elif [ "$ssl" = "nss" ]; then
594        detect_nss
595elif [ "$ssl" = "openssl" ]; then
596        echo
597        echo 'No detection code exists for OpenSSL. Make sure that you have a complete'
[b3eee9b]598        echo 'installation of OpenSSL (including devel/header files) before reporting'
[b3c467b]599        echo 'compilation problems.'
600        echo
601        echo 'Also, keep in mind that the OpenSSL is, according to some people, not'
[b3eee9b]602        echo 'completely GPL-compatible. Using GnuTLS is recommended and better supported'
603        echo 'by us. However, on many BSD machines, OpenSSL can be considered part of the'
604        echo 'operating system, which makes it GPL-compatible.'
[b3c467b]605        echo
606        echo 'For more info, see: http://www.openssl.org/support/faq.html#LEGAL2'
607        echo '                    http://www.gnome.org/~markmc/openssl-and-the-gpl.html'
608        echo
609        echo 'Please note that distributing a BitlBee binary which links to OpenSSL is'
610        echo 'probably illegal. If you want to create and distribute a binary BitlBee'
[b3eee9b]611        echo 'package, you really should use GnuTLS instead.'
[b3c467b]612        echo
613        echo 'Also, the OpenSSL license requires us to say this:'
614        echo ' *    "This product includes software developed by the OpenSSL Project'
615        echo ' *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"'
[b7d3cc34]616       
[b3c467b]617        echo 'EFLAGS+=-lssl -lcrypto' >> Makefile.settings
618       
619        ret=1
620else
621        echo
622        echo 'ERROR: Unknown SSL library specified.'
623        exit 1
[b7d3cc34]624fi
625
[b3c467b]626if [ "$ret" = "0" ]; then
627        echo
628        echo 'ERROR: Could not find a suitable SSL library (GnuTLS, libnss or OpenSSL).'
629        echo '       Please note that this script doesn'\''t have detection code for OpenSSL,'
[e1d3f98]630        echo '       so if you want to use that, you have to select it by hand.'
[b7d3cc34]631       
[b3c467b]632        exit 1
633fi;
634
635echo 'SSL_CLIENT=ssl_'$ssl'.o' >> Makefile.settings
636
[632627e]637if detect_nameser_has_ns_types; then
638        echo '#define NAMESER_HAS_NS_TYPES' >> config.h
639fi
[36cf9fd]640if detect_resolv_dynamic || detect_resolv_static; then
641        echo '#define HAVE_RESOLV_A' >> config.h
[a67e781]642        if detect_resolv_ns_dynamic || detect_resolv_ns_static; then
643                echo '#define HAVE_RESOLV_A_WITH_NS' >> config.h
644        fi
[632627e]645else
[a67e781]646        echo 'Insufficient resolv routines. Jabber server must be set explicitly'
[36cf9fd]647fi
[36e9f62]648
[632627e]649
[ba7d16f]650STORAGES="xml"
[b3c467b]651
652for i in $STORAGES; do
653        STORAGE_OBJS="$STORAGE_OBJS storage_$i.o"
654done
655echo "STORAGE_OBJS="$STORAGE_OBJS >> Makefile.settings
656
[8e6ecfe]657authobjs=
658authlibs=
[a6005da]659if [ "$pam" = 0 ]; then
660        echo '#undef WITH_PAM' >> config.h
661else
662        if ! echo '#include <security/pam_appl.h>' | $CC -E - >/dev/null 2>/dev/null; then
663                echo 'Cannot find libpam development libraries, aborting. (Install libpam0g-dev?)'
664                exit 1
665        fi
666        echo '#define WITH_PAM' >> config.h
667        authobjs=$authobjs'auth_pam.o '
668        authlibs=$authlibs'-lpam '
669fi
[50bb490]670if [ "$ldap" = 0 ]; then
671        echo '#undef WITH_LDAP' >> config.h
672else
673        if ! echo '#include <ldap.h>' | $CC -E - >/dev/null 2>/dev/null; then
674                echo 'Cannot find libldap development libraries, aborting. (Install libldap2-dev?)'
675                exit 1
676        fi
677        echo '#define WITH_LDAP' >> config.h
678        authobjs=$authobjs'auth_ldap.o '
679        authlibs=$authlibs'-lldap '
680fi
[8e6ecfe]681echo AUTH_OBJS=$authobjs >> Makefile.settings
682echo EFLAGS+=$authlibs >> Makefile.settings
683
[b7d3cc34]684if [ "$strip" = 0 ]; then
685        echo "STRIP=\# skip strip" >> Makefile.settings;
686else
687        if [ "$debug" = 1 ]; then
688                echo
689                echo 'Stripping binaries does not make sense when debugging. Stripping disabled.'
690                echo 'STRIP=\# skip strip' >> Makefile.settings
691                strip=0;
692        elif [ -n "$STRIP" ]; then
693                echo "STRIP=$STRIP" >> Makefile.settings;
694        elif type strip > /dev/null 2> /dev/null; then
695                echo "STRIP=strip" >> Makefile.settings;
696        else
697                echo
698                echo 'No strip utility found, cannot remove unnecessary parts from executable.'
699                echo 'STRIP=\# skip strip' >> Makefile.settings
700                strip=0;
701        fi;
702fi
703
[417002e]704if [ -z "$systemdsystemunitdir" ]; then
705        if $PKG_CONFIG --exists systemd; then
[4966712a]706                systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)
[417002e]707        fi
708fi
709if [ -n "$systemdsystemunitdir" ]; then
710        if [ "$systemdsystemunitdir" != "no" ]; then
711                echo "SYSTEMDSYSTEMUNITDIR=$systemdsystemunitdir" >> Makefile.settings
712        fi
713fi
714
[66b9e86e]715if [ "$gcov" = "1" ]; then
[31fc3970]716        echo "CFLAGS+=--coverage" >> Makefile.settings
717        echo "EFLAGS+=--coverage" >> Makefile.settings
[66b9e86e]718fi
719
[2abfbc5]720if [ "$plugins" = 0 ]; then
[489847f]721        plugindir=""
[2abfbc5]722        echo '#undef WITH_PLUGINS' >> config.h
723else
724        echo '#define WITH_PLUGINS' >> config.h
725fi
726
[6738a67]727otrprefix=""
[764c7d1]728if [ "$otr" = "auto" ]; then
[a59bd11]729        ! $PKG_CONFIG --exists libotr
730        otr=$?
731fi
732
733if [ "$otr" != 0 ] && ! $PKG_CONFIG --atleast-version=4.0 --print-errors libotr; then
734        exit 1
[764c7d1]735fi
[a59bd11]736
[6738a67]737if [ "$otr" = 1 ]; then
[858ea01]738        # BI == built-in
739        echo '#define OTR_BI' >> config.h
[872e017]740        echo "EFLAGS+=$($PKG_CONFIG --libs libotr) $(libgcrypt-config --libs)" >> Makefile.settings
741        echo "CFLAGS+=$($PKG_CONFIG --cflags libotr) $(libgcrypt-config --cflags)" >> Makefile.settings
[858ea01]742        echo 'OTR_BI=otr.o' >> Makefile.settings
743elif [ "$otr" = "plugin" ]; then
[a59bd11]744        # for some mysterious reason beyond the comprehension of my mortal mind,
745        # the libgcrypt flags aren't needed when building as plugin. add them anyway.
[858ea01]746        echo '#define OTR_PI' >> config.h
[872e017]747        echo "OTRFLAGS=$($PKG_CONFIG --libs libotr) $(libgcrypt-config --libs)" >> Makefile.settings
748        echo "CFLAGS+=$($PKG_CONFIG --cflags libotr) $(libgcrypt-config --cflags)" >> Makefile.settings
[858ea01]749        echo 'OTR_PI=otr.so' >> Makefile.settings
[764c7d1]750fi
751
[1cef55f]752if [ -z "$PYTHON" ]; then
753        PYTHON=python
754fi
755
[a85a8ab]756if [ "$doc" = "1" ]; then
[beb0f54]757        # check this here just in case someone tries to install it in python2.4...
[4d51c84]758        if [ ! -e $srcdir/doc/user-guide/help.txt ] && ! $PYTHON -m xml.etree.ElementTree > /dev/null 2>&1; then
[a85a8ab]759                echo
[beb0f54]760                echo 'ERROR: Python (>=2.5 or 3.x) is required to generate docs'
[1cef55f]761                echo "(Use the PYTHON environment variable if it's in a weird location)"
[beb0f54]762                exit 1
[a85a8ab]763        fi
[beb0f54]764        echo "DOC=1" >> Makefile.settings
[1cef55f]765        echo "PYTHON=$PYTHON" >> Makefile.settings
[ceebeb1]766fi
767
[70ec7ab]768get_version
[e26aa72]769
[70ec7ab]770if [ "$BITLBEE_VERSION" != "$REAL_BITLBEE_VERSION" ]; then
[b7d3cc34]771        echo 'Spoofing version number: '$BITLBEE_VERSION
772        echo '#undef BITLBEE_VERSION' >> config.h
[f287f04]773        echo '#define BITLBEE_VERSION "'$BITLBEE_VERSION'"' >> config.h
[ffea9b9]774        echo
[b7d3cc34]775fi
776
[4fca1db]777if ! make helloworld > /dev/null 2>&1; then
778        echo "WARNING: Your version of make (BSD make?) does not support BitlBee's makefiles."
779        echo "BitlBee needs GNU make to build properly. On most systems GNU make is available"
780        echo "under the name 'gmake'."
781        echo
782        if gmake helloworld > /dev/null 2>&1; then
783                echo "gmake seems to be available on your machine, great."
784                echo
785        else
786                echo "gmake is not installed (or not working). Please try to install it."
787                echo
788        fi
789fi
790
[54b2a36]791pkgconfiglibs=''
792case "$arch" in
793CYGWIN* )
[b9c10a1]794        pkgconfiglibs='-L${libdir} -lbitlbee -no-undefined'
[54b2a36]795esac
796
[b95b0c8]797cat <<EOF >bitlbee.pc
[e506d6c]798prefix=$prefix
799includedir=$includedir
[489847f]800plugindir=$plugindir
[54b2a36]801libdir=$libdir
[ad66dcd]802datadir=$datadir
[e506d6c]803
804Name: bitlbee
805Description: IRC to IM gateway
806Requires: glib-2.0
807Version: $BITLBEE_VERSION
[54b2a36]808Libs: $pkgconfiglibs
[e506d6c]809Cflags: -I\${includedir}
810
811EOF
812
[b7d3cc34]813protocols=''
814protoobjs=''
815
[e248c7f]816if [ "$purple" = 0 ]; then
817        echo '#undef WITH_PURPLE' >> config.h
818else
[e08e53c]819        if ! $PKG_CONFIG purple; then
820                echo
821                echo 'Cannot find libpurple development libraries, aborting. (Install libpurple-dev?)'
822                exit 1
823        fi
[e248c7f]824        echo '#define WITH_PURPLE' >> config.h
[b95b0c8]825        cat<<EOF >>Makefile.settings
[e08e53c]826EFLAGS += $($PKG_CONFIG purple --libs)
827PURPLE_CFLAGS += $($PKG_CONFIG purple --cflags)
828EOF
[e248c7f]829        protocols=$protocols'purple '
830        protoobjs=$protoobjs'purple_mod.o '
831
[04e2a05]832        # only disable these if the user didn't enable them explicitly
833        [ "$jabber" = "default-on" ] && jabber=0
834        [ "$oscar" = "default-on" ] && oscar=0
[18e1f3b]835
836        echo '#undef PACKAGE' >> config.h
837        echo '#define PACKAGE "BitlBee-LIBPURPLE"' >> config.h
[bda2975]838       
839        if [ "$events" = "libevent" ]; then
840                echo 'Warning: Some libpurple modules (including msn-pecan) do their event handling'
841                echo 'outside libpurple, talking to GLib directly. At least for now the combination'
842                echo 'libpurple + libevent is *not* recommended!'
[c775a58]843                echo
[bda2975]844        fi
[e248c7f]845fi
846
[b0a89cc]847case "$CC" in
848*gcc* )
[e371011]849        echo CFLAGS+=-MMD -MF .depend/\$@.d >> Makefile.settings
[fe92921]850        for i in . lib tests protocols protocols/*/; do
[b0a89cc]851                mkdir -p $i/.depend
852        done
853esac
854
[b7d3cc34]855if [ "$jabber" = 0 ]; then
856        echo '#undef WITH_JABBER' >> config.h
857else
858        echo '#define WITH_JABBER' >> config.h
859        protocols=$protocols'jabber '
[b5a22e3]860        protoobjs=$protoobjs'jabber_mod.o '
[b7d3cc34]861fi
862
863if [ "$oscar" = 0 ]; then
864        echo '#undef WITH_OSCAR' >> config.h
865else
866        echo '#define WITH_OSCAR' >> config.h
867        protocols=$protocols'oscar '
[b5a22e3]868        protoobjs=$protoobjs'oscar_mod.o '
[b7d3cc34]869fi
870
[1b221e0]871if [ "$twitter" = 0 ]; then
872        echo '#undef WITH_TWITTER' >> config.h
873else
874        echo '#define WITH_TWITTER' >> config.h
875        protocols=$protocols'twitter '
876        protoobjs=$protoobjs'twitter_mod.o '
877fi
878
[b7d3cc34]879if [ "$protocols" = "PROTOCOLS = " ]; then
[43462708]880        echo "Warning: You haven't selected any communication protocol to compile!"
[b3c467b]881        echo "         BitlBee will run, but you will be unable to connect to IM servers!"
[b7d3cc34]882fi
883
884echo "PROTOCOLS = $protocols" >> Makefile.settings
885echo "PROTOOBJS = $protoobjs" >> Makefile.settings
886
887echo Architecture: $arch
888case "$arch" in
889Linux )
890;;
891GNU/* )
892;;
893*BSD )
894;;
895Darwin )
[caceb06]896        echo 'STRIP=\# skip strip' >> Makefile.settings
[b7d3cc34]897;;
898IRIX )
899;;
900SunOS )
901        echo 'EFLAGS+=-lresolv -lnsl -lsocket' >> Makefile.settings
902        echo 'STRIP=\# skip strip' >> Makefile.settings
[70d7795]903        echo '#define NO_FD_PASSING' >> config.h
[b7d3cc34]904;;
[8de63c3]905AIX )
906        echo 'EFLAGS+=-Wl,-brtl' >> Makefile.settings
[b7d3cc34]907;;
908CYGWIN* )
[54b2a36]909        echo 'EFLAGS+=-Wl,--export-all,--out-implib,libbitlbee.dll.a' >> Makefile.settings
910        echo 'IMPLIB=libbitlbee.dll.a' >> Makefile.settings
[b7d3cc34]911;;
[aec56b0]912Windows )
[e252d8c]913        echo 'Native windows compilation is not supported anymore, use cygwin instead.'
[aec56b0]914;;
[b7d3cc34]915* )
[8d6c4b1]916        echo 'We haven'\''t tested BitlBee on many platforms yet, yours is untested. YMMV.'
917        echo 'Please report any problems at http://bugs.bitlbee.org/.'
[b7d3cc34]918;;
919esac
920
[f1e7407]921if [ -n "$target" ]; then
922        echo "Cross-compiling for: $target"
923fi
924
[b7d3cc34]925echo
926echo 'Configuration done:'
927
928if [ "$debug" = "1" ]; then
[b3c467b]929        echo '  Debugging enabled.'
[b7d3cc34]930else
[b3c467b]931        echo '  Debugging disabled.'
[b7d3cc34]932fi
933
[e2472dd]934if [ "$asan" = "1" ]; then
935        echo '  AddressSanitizer (ASAN) enabled.'
936else
937        echo '  AddressSanitizer (ASAN) disabled.'
938fi
939
[7281ad1]940if [ "$pie" = "1" ]; then
941        echo '  Building PIE executable'
942else
943        echo '  Building non-PIE executable'
944fi
945
[b7d3cc34]946if [ "$strip" = "1" ]; then
[b3c467b]947        echo '  Binary stripping enabled.'
[b7d3cc34]948else
[b3c467b]949        echo '  Binary stripping disabled.'
[b7d3cc34]950fi
951
[764c7d1]952if [ "$otr" = "1" ]; then
953        echo '  Off-the-Record (OTR) Messaging enabled.'
[858ea01]954elif [ "$otr" = "plugin" ]; then
955        echo '  Off-the-Record (OTR) Messaging enabled (as a plugin).'
[764c7d1]956else
957        echo '  Off-the-Record (OTR) Messaging disabled.'
958fi
959
[417002e]960if [ -n "$systemdsystemunitdir" ]; then
961        echo '  systemd enabled.'
962else
963        echo '  systemd disabled.'
964fi
965
[b3c467b]966echo '  Using event handler: '$events
967echo '  Using SSL library: '$ssl
[4e3df8a]968#echo '  Building with these storage backends: '$STORAGES
[b7d3cc34]969
970if [ -n "$protocols" ]; then
[17f6079]971        echo '  Building with these protocols:' $protocols$protocols_mods
[4e3df8a]972        case "$protocols" in
973        *purple*)
974                echo "    Note that BitlBee-libpurple is supported on a best-effort basis. It's"
975                echo "    not *fully* compatible with normal BitlBee. Don't use it unless you"
976                echo "    absolutely need it (i.e. support for a certain protocol or feature)."
977        esac
[b7d3cc34]978else
[b3c467b]979        echo '  Building without IM-protocol support. We wish you a lot of fun...'
[b7d3cc34]980fi
Note: See TracBrowser for help on using the repository browser.