source: configure @ 3ce1bf6

Last change on this file since 3ce1bf6 was e805611, checked in by GitHub <noreply@…>, at 2023-04-05T21:56:36Z

Include /usr/include/json-parser/json.h before lib/json.h (#182)

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