source: configure @ e907683

Last change on this file since e907683 was 4aa0f6b, checked in by Wilmer van der Gaast <wilmer@…>, at 2010-06-07T14:31:07Z

Merging killerbee stuff, bringing all the bleeding-edge stuff together.

  • Property mode set to 100755
File size: 16.0 KB
Line 
1#!/bin/sh
2
3##############################
4##  Configurer for BitlBee  ##
5##                          ##
6##  Copyright 2004 Lintux   ##
7##  Copyright 2002 Lucumo   ##
8##############################
9
10prefix='/usr/local/'
11bindir='$prefix/sbin/'
12etcdir='$prefix/etc/bitlbee/'
13mandir='$prefix/share/man/'
14datadir='$prefix/share/bitlbee/'
15config='/var/lib/bitlbee/'
16plugindir='$prefix/lib/bitlbee/'
17includedir='$prefix/include/bitlbee/'
18libevent='/usr/'
19pidfile='/var/run/bitlbee.pid'
20ipcsocket='/var/run/bitlbee.sock'
21pcdir='$prefix/lib/pkgconfig'
22systemlibdirs="/lib /lib64 /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64"
23
24msn=1
25jabber=1
26oscar=1
27yahoo=1
28twitter=1
29twitter=1
30purple=0
31
32debug=0
33strip=1
34gcov=0
35plugins=1
36
37events=glib
38ldap=0
39ssl=auto
40
41arch=`uname -s`
42cpu=`uname -m`
43
44GLIB_MIN_VERSION=2.4
45
46echo BitlBee configure
47
48while [ -n "$1" ]; do
49        e="`expr "X$1" : 'X--\(.*=.*\)'`"
50        if [ -z "$e" ]; then
51                cat<<EOF
52
53Usage: $0 [OPTIONS]
54
55Option          Description                             Default
56
57--prefix=...    Directories to put files in             $prefix
58--bindir=...                                            $bindir
59--etcdir=...                                            $etcdir
60--mandir=...                                            $mandir
61--datadir=...                                           $datadir
62--plugindir=...                                         $plugindir
63--pidfile=...                                           $pidfile
64--config=...                                            $config
65--ipcsocket=...                                         $ipcsocket
66
67--msn=0/1       Disable/enable MSN part                 $msn
68--jabber=0/1    Disable/enable Jabber part              $jabber
69--oscar=0/1     Disable/enable Oscar part (ICQ, AIM)    $oscar
70--yahoo=0/1     Disable/enable Yahoo part               $yahoo
71--twitter=0/1   Disable/enable Twitter part             $twitter
72
73--purple=0/1    Disable/enable libpurple support        $purple
74
75--debug=0/1     Disable/enable debugging                $debug
76--strip=0/1     Disable/enable binary stripping         $strip
77--gcov=0/1      Disable/enable test coverage reporting  $gcov
78--plugins=0/1   Disable/enable plugins support          $plugins
79
80--events=...    Event handler (glib, libevent)          $events
81--ssl=...       SSL library to use (gnutls, nss, openssl, bogus, auto)
82                                                        $ssl
83
84--target=...    Cross compilation target                same as host
85EOF
86                exit;
87        fi
88        eval "$e"
89        shift;
90done
91
92# Expand $prefix and get rid of double slashes
93bindir=`eval echo "$bindir/" | sed 's/\/\{1,\}/\//g'`
94etcdir=`eval echo "$etcdir/" | sed 's/\/\{1,\}/\//g'`
95mandir=`eval echo "$mandir/" | sed 's/\/\{1,\}/\//g'`
96datadir=`eval echo "$datadir/" | sed 's/\/\{1,\}/\//g'`
97config=`eval echo "$config/" | sed 's/\/\{1,\}/\//g'`
98plugindir=`eval echo "$plugindir/" | sed 's/\/\{1,\}/\//g'`
99includedir=`eval echo "$includedir"/ | sed 's/\/\{1,\}/\//g'`
100libevent=`eval echo "$libevent"/ | sed 's/\/\{1,\}/\//g'`
101
102pidfile=`eval echo "$pidfile" | sed 's/\/\{1,\}/\//g'`
103ipcsocket=`eval echo "$ipcsocket" | sed 's/\/\{1,\}/\//g'`
104pcdir=`eval echo "$pcdir" | sed 's/\/\{1,\}/\//g'`
105
106cat<<EOF>Makefile.settings
107## BitlBee settings, generated by configure
108PREFIX=$prefix
109BINDIR=$bindir
110ETCDIR=$etcdir
111MANDIR=$mandir
112DATADIR=$datadir
113PLUGINDIR=$plugindir
114CONFIG=$config
115INCLUDEDIR=$includedir
116PCDIR=$pcdir
117
118TARGET=$target
119ARCH=$arch
120CPU=$cpu
121
122DESTDIR=
123LFLAGS=
124EFLAGS=
125EOF
126
127srcdir="$(dirname $0)"
128if [ "$srcdir" != "." ]; then
129        echo
130        echo "configure script run from a different directory. Will create some symlinks..."
131        if [ ! -e Makefile -o -L Makefile ]; then
132                COPYDIRS="doc lib protocols tests utils"
133                mkdir -p $(cd "$srcdir"; find $COPYDIRS -type d)
134                find . -name Makefile -type l -print0 | xargs -0 rm 2> /dev/null
135                dst="$PWD"
136                cd "$srcdir"
137                for i in $(find . -name Makefile -type f); do
138                        ln -s "$PWD${i#.}" "$dst/$i";
139                done
140                cd "$dst"
141                rm -rf .bzr
142        fi
143       
144        echo "SRCDIR=$srcdir/" >> Makefile.settings
145        CFLAGS="$CFLAGS -I${dst}"
146else
147        srcdir=$PWD
148fi
149
150cat<<EOF>config.h
151/* BitlBee settings, generated by configure
152   
153   Do *NOT* use any of these defines in your code without thinking twice, most
154   of them can/will be overridden at run-time */
155
156#define CONFIG "$config"
157#define ETCDIR "$etcdir"
158#define VARDIR "$datadir"
159#define PLUGINDIR "$plugindir"
160#define PIDFILE "$pidfile"
161#define IPCSOCKET "$ipcsocket"
162#define ARCH "$arch"
163#define CPU "$cpu"
164EOF
165
166
167
168if [ -n "$target" ]; then
169        PKG_CONFIG_LIBDIR=/usr/$target/lib/pkgconfig
170        export PKG_CONFIG_LIBDIR
171        PATH=/usr/$target/bin:$PATH
172        CC=$target-cc
173        LD=$target-ld
174        systemlibdirs="/usr/$target/lib"
175fi
176
177
178if [ "$debug" = "1" ]; then
179        [ -z "$CFLAGS" ] && CFLAGS=-g
180        echo 'DEBUG=1' >> Makefile.settings
181        CFLAGS="$CFLAGS -DDEBUG"
182else
183        [ -z "$CFLAGS" ] && CFLAGS="-O2 -fno-strict-aliasing"
184fi
185
186echo CFLAGS=$CFLAGS >> Makefile.settings
187echo CFLAGS+=-I${srcdir} -I${srcdir}/lib -I${srcdir}/protocols -I. >> Makefile.settings
188
189echo CFLAGS+=-DHAVE_CONFIG_H >> Makefile.settings
190
191if [ -n "$CC" ]; then
192        CC=$CC
193elif type gcc > /dev/null 2> /dev/null; then
194        CC=gcc
195elif type cc > /dev/null 2> /dev/null; then
196        CC=cc
197else
198        echo 'Cannot find a C compiler, aborting.'
199        exit 1;
200fi
201
202echo "CC=$CC" >> Makefile.settings;
203
204if [ -z "$LD" ]; then
205        if type ld > /dev/null 2> /dev/null; then
206                LD=ld
207        else
208                echo 'Cannot find ld, aborting.'
209                exit 1;
210        fi
211fi
212
213echo "LD=$LD" >> Makefile.settings
214
215if [ -z "$PKG_CONFIG" ]; then
216        PKG_CONFIG=pkg-config
217fi
218
219if $PKG_CONFIG --version > /dev/null 2>/dev/null && $PKG_CONFIG glib-2.0; then
220        if $PKG_CONFIG glib-2.0 --atleast-version=$GLIB_MIN_VERSION; then
221                cat<<EOF>>Makefile.settings
222EFLAGS+=`$PKG_CONFIG --libs glib-2.0 gmodule-2.0`
223CFLAGS+=`$PKG_CONFIG --cflags glib-2.0 gmodule-2.0`
224EOF
225        else
226                echo
227                echo 'Found glib2 '`$PKG_CONFIG glib-2.0 --modversion`', but version '$GLIB_MIN_VERSION' or newer is required.'
228                exit 1
229        fi
230else
231        echo
232        echo 'Cannot find glib2 development libraries, aborting. (Install libglib2-dev?)'
233        exit 1
234fi
235
236if [ "$events" = "libevent" ]; then
237        if ! [ -f "${libevent}include/event.h" ]; then
238                echo
239                echo 'Warning: Could not find event.h, you might have to install it and/or specify'
240                echo 'its location using the --libevent= argument. (Example: If event.h is in'
241                echo '/usr/local/include and binaries are in /usr/local/lib: --libevent=/usr/local)'
242        fi
243       
244        echo '#define EVENTS_LIBEVENT' >> config.h
245        cat <<EOF>>Makefile.settings
246EFLAGS+=-levent -L${libevent}lib
247CFLAGS+=-I${libevent}include
248EOF
249elif [ "$events" = "glib" ]; then
250        ## We already use glib anyway, so this is all we need (and in fact not even this, but just to be sure...):
251        echo '#define EVENTS_GLIB' >> config.h
252else
253        echo
254        echo 'ERROR: Unknown event handler specified.'
255        exit 1
256fi
257echo 'EVENT_HANDLER=events_'$events'.o' >> Makefile.settings
258
259detect_gnutls()
260{
261        if $PKG_CONFIG --exists gnutls; then
262                cat <<EOF>>Makefile.settings
263EFLAGS+=`$PKG_CONFIG --libs gnutls`
264CFLAGS+=`$PKG_CONFIG --cflags gnutls`
265EOF
266                ssl=gnutls
267                ret=1
268        elif libgnutls-config --version > /dev/null 2> /dev/null; then
269                cat <<EOF>>Makefile.settings
270EFLAGS+=`libgnutls-config --libs`
271CFLAGS+=`libgnutls-config --cflags`
272EOF
273               
274                ssl=gnutls
275                ret=1;
276        else
277                ret=0;
278        fi;
279}
280
281detect_nss()
282{
283        if $PKG_CONFIG --version > /dev/null 2>/dev/null && $PKG_CONFIG mozilla-nss; then
284                cat<<EOF>>Makefile.settings
285EFLAGS+=`$PKG_CONFIG --libs mozilla-nss`
286CFLAGS+=`$PKG_CONFIG --cflags mozilla-nss`
287EOF
288               
289                ssl=nss
290                ret=1;
291        else
292                ret=0;
293        fi;
294}
295
296detect_ldap()
297{
298        TMPFILE=$(mktemp /tmp/bitlbee-configure.XXXXXX)
299        if $CC -o $TMPFILE -shared -lldap 2>/dev/null >/dev/null; then
300                cat<<EOF>>Makefile.settings
301EFLAGS+=-lldap
302CFLAGS+=
303EOF
304                ldap=1
305                rm -f $TMPFILE
306                ret=1
307        else
308                ldap=0
309                ret=0
310        fi
311}
312
313RESOLV_TESTCODE='
314#include <arpa/nameser.h>
315#include <resolv.h>
316
317int main()
318{
319        ns_initparse( NULL, 0, NULL );
320        ns_parserr( NULL, ns_s_an, 0, NULL );
321}
322'
323
324detect_resolv_dynamic()
325{
326        TMPFILE=$(mktemp /tmp/bitlbee-configure.XXXXXX)
327        ret=1
328        echo "$RESOLV_TESTCODE" | $CC -o $TMPFILE -x c - -lresolv >/dev/null 2>/dev/null
329        if [ "$?" = "0" ]; then
330                echo 'EFLAGS+=-lresolv' >> Makefile.settings
331                ret=0
332        fi
333
334        rm -f $TMPFILE
335        return $ret
336}
337
338detect_resolv_static()
339{
340        TMPFILE=$(mktemp /tmp/bitlbee-configure.XXXXXX)
341        ret=1
342        for i in $systemlibdirs; do
343                if [ -f $i/libresolv.a ]; then
344                        echo "$RESOLV_TESTCODE" | $CC -o $TMPFILE -x c - -Wl,$i/libresolv.a >/dev/null 2>/dev/null
345                        if [ "$?" = "0" ]; then
346                                echo 'EFLAGS+='$i'/libresolv.a' >> Makefile.settings
347                                ret=0
348                        fi
349                fi
350        done
351
352        rm -f $TMPFILE
353        return $ret
354}
355
356if [ "$ssl" = "auto" ]; then
357        detect_gnutls
358        if [ "$ret" = "0" ]; then
359                detect_nss
360        fi
361elif [ "$ssl" = "gnutls" ]; then
362        detect_gnutls
363elif [ "$ssl" = "nss" ]; then
364        detect_nss
365elif [ "$ssl" = "sspi" ]; then
366        echo
367elif [ "$ssl" = "openssl" ]; then
368        echo
369        echo 'No detection code exists for OpenSSL. Make sure that you have a complete'
370        echo 'install of OpenSSL (including devel/header files) before reporting'
371        echo 'compilation problems.'
372        echo
373        echo 'Also, keep in mind that the OpenSSL is, according to some people, not'
374        echo 'completely GPL-compatible. Using GnuTLS or NSS is recommended and better'
375        echo 'supported by us. However, on many BSD machines, OpenSSL can be considered'
376        echo 'part of the operating system, which makes it GPL-compatible.'
377        echo
378        echo 'For more info, see: http://www.openssl.org/support/faq.html#LEGAL2'
379        echo '                    http://www.gnome.org/~markmc/openssl-and-the-gpl.html'
380        echo
381        echo 'Please note that distributing a BitlBee binary which links to OpenSSL is'
382        echo 'probably illegal. If you want to create and distribute a binary BitlBee'
383        echo 'package, you really should use GnuTLS or NSS instead.'
384        echo
385        echo 'Also, the OpenSSL license requires us to say this:'
386        echo ' *    "This product includes software developed by the OpenSSL Project'
387        echo ' *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"'
388       
389        echo 'EFLAGS+=-lssl -lcrypto' >> Makefile.settings
390       
391        ret=1
392elif [ "$ssl" = "bogus" ]; then
393        echo
394        echo 'Using bogus SSL code. This means some features will not work properly.'
395       
396        ## Yes, you, at the console! How can you authenticate if you don't have any SSL!?
397        if [ "$msn" = "1" -o "$yahoo" = "1" ]; then
398                echo
399                echo 'WARNING: The MSN and Yahoo! modules will not work without SSL. Disabling.'
400                msn=0
401                yahoo=0
402        fi
403       
404        ret=1
405else
406        echo
407        echo 'ERROR: Unknown SSL library specified.'
408        exit 1
409fi
410
411if [ "$ret" = "0" ]; then
412        echo
413        echo 'ERROR: Could not find a suitable SSL library (GnuTLS, libnss or OpenSSL).'
414        echo '       Please note that this script doesn'\''t have detection code for OpenSSL,'
415        echo '       so if you want to use that, you have to select it by hand. If you don'\''t'
416        echo '       need SSL support, you can select the "bogus" SSL library. (--ssl=bogus)'
417       
418        exit 1
419fi;
420
421echo 'SSL_CLIENT=ssl_'$ssl'.o' >> Makefile.settings
422
423if detect_resolv_dynamic || detect_resolv_static; then
424        echo '#define HAVE_RESOLV_A' >> config.h
425fi
426
427STORAGES="xml"
428
429if [ "$ldap" = "auto" ]; then
430        detect_ldap
431fi
432
433if [ "$ldap" = 0 ]; then
434        echo "#undef WITH_LDAP" >> config.h
435elif [ "$ldap" = 1 ]; then
436        echo
437        echo 'LDAP support is a work in progress and does NOT work AT ALL right now.'
438        echo
439        exit 1
440       
441        echo "#define WITH_LDAP 1" >> config.h
442        STORAGES="$STORAGES ldap"
443fi
444
445for i in $STORAGES; do
446        STORAGE_OBJS="$STORAGE_OBJS storage_$i.o"
447done
448echo "STORAGE_OBJS="$STORAGE_OBJS >> Makefile.settings
449
450if [ "$strip" = 0 ]; then
451        echo "STRIP=\# skip strip" >> Makefile.settings;
452else
453        if [ "$debug" = 1 ]; then
454                echo
455                echo 'Stripping binaries does not make sense when debugging. Stripping disabled.'
456                echo 'STRIP=\# skip strip' >> Makefile.settings
457                strip=0;
458        elif [ -n "$STRIP" ]; then
459                echo "STRIP=$STRIP" >> Makefile.settings;
460        elif type strip > /dev/null 2> /dev/null; then
461                echo "STRIP=strip" >> Makefile.settings;
462        else
463                echo
464                echo 'No strip utility found, cannot remove unnecessary parts from executable.'
465                echo 'STRIP=\# skip strip' >> Makefile.settings
466                strip=0;
467        fi;
468fi
469
470if [ "$gcov" = "1" ]; then
471        echo "CFLAGS+=--coverage" >> Makefile.settings
472        echo "EFLAGS+=--coverage" >> Makefile.settings
473fi
474
475if [ "$plugins" = 0 ]; then
476        echo '#undef WITH_PLUGINS' >> config.h
477else
478        echo '#define WITH_PLUGINS' >> config.h
479fi
480
481if [ ! -e doc/user-guide/help.txt ] && ! type xmlto > /dev/null 2> /dev/null; then
482        echo
483        echo 'WARNING: Building from an unreleased source tree without prebuilt helpfile.'
484        echo 'Install xmlto if you want online help to work.'
485fi
486
487echo
488if [ -z "$BITLBEE_VERSION" -a -d .bzr ] && type bzr > /dev/null 2> /dev/null; then
489        nick=`bzr nick`
490        if [ -n "$nick" -a "$nick" != "bitlbee" ]; then
491                nick="-$nick"
492        else
493                nick=""
494        fi
495        rev=`bzr revno`
496        echo 'Using bzr revision #'$rev' as version number'
497        BITLBEE_VERSION=\"bzr$nick-$rev\"
498fi
499
500if [ -n "$BITLBEE_VERSION" ]; then
501        echo 'Spoofing version number: '$BITLBEE_VERSION
502        echo '#undef BITLBEE_VERSION' >> config.h
503        echo '#define BITLBEE_VERSION '$BITLBEE_VERSION >> config.h
504        echo
505fi
506
507if ! make helloworld > /dev/null 2>&1; then
508        echo "WARNING: Your version of make (BSD make?) does not support BitlBee's makefiles."
509        echo "BitlBee needs GNU make to build properly. On most systems GNU make is available"
510        echo "under the name 'gmake'."
511        echo
512        if gmake helloworld > /dev/null 2>&1; then
513                echo "gmake seems to be available on your machine, great."
514                echo
515        else
516                echo "gmake is not installed (or not working). Please try to install it."
517                echo
518        fi
519fi
520
521cat <<EOF>bitlbee.pc
522prefix=$prefix
523includedir=$includedir
524
525Name: bitlbee
526Description: IRC to IM gateway
527Requires: glib-2.0
528Version: $BITLBEE_VERSION
529Libs:
530Cflags: -I\${includedir}
531
532EOF
533
534protocols=''
535protoobjs=''
536
537if [ "$purple" = 0 ]; then
538        echo '#undef WITH_PURPLE' >> config.h
539else
540        if ! $PKG_CONFIG purple; then
541                echo
542                echo 'Cannot find libpurple development libraries, aborting. (Install libpurple-dev?)'
543                exit 1
544        fi
545        echo '#define WITH_PURPLE' >> config.h
546        cat<<EOF>>Makefile.settings
547EFLAGS += $($PKG_CONFIG purple --libs)
548PURPLE_CFLAGS += $($PKG_CONFIG purple --cflags)
549EOF
550        protocols=$protocols'purple '
551        protoobjs=$protoobjs'purple_mod.o '
552
553        # Having both libpurple and native IM modules in one binary may
554        # do strange things. Let's not do that.
555        msn=0
556        jabber=0
557        oscar=0
558        yahoo=0
559        twitter=0
560       
561        if [ "$events" = "libevent" ]; then
562                echo
563                echo 'Warning: Some libpurple modules (including msn-pecan) do their event handling'
564                echo 'outside libpurple, talking to GLib directly. At least for now the combination'
565                echo 'libpurple + libevent is *not* recommended!'
566        fi
567fi
568
569if [ "$msn" = 0 ]; then
570        echo '#undef WITH_MSN' >> config.h
571else
572        echo '#define WITH_MSN' >> config.h
573        protocols=$protocols'msn '
574        protoobjs=$protoobjs'msn_mod.o '
575fi
576
577if [ "$jabber" = 0 ]; then
578        echo '#undef WITH_JABBER' >> config.h
579else
580        echo '#define WITH_JABBER' >> config.h
581        protocols=$protocols'jabber '
582        protoobjs=$protoobjs'jabber_mod.o '
583fi
584
585if [ "$oscar" = 0 ]; then
586        echo '#undef WITH_OSCAR' >> config.h
587else
588        echo '#define WITH_OSCAR' >> config.h
589        protocols=$protocols'oscar '
590        protoobjs=$protoobjs'oscar_mod.o '
591fi
592
593if [ "$yahoo" = 0 ]; then
594        echo '#undef WITH_YAHOO' >> config.h
595else
596        echo '#define WITH_YAHOO' >> config.h
597        protocols=$protocols'yahoo '
598        protoobjs=$protoobjs'yahoo_mod.o '
599fi
600
601if [ "$twitter" = 0 ]; then
602        echo '#undef WITH_TWITTER' >> config.h
603else
604        echo '#define WITH_TWITTER' >> config.h
605        protocols=$protocols'twitter '
606        protoobjs=$protoobjs'twitter_mod.o '
607fi
608
609if [ "$protocols" = "PROTOCOLS = " ]; then
610        echo "Warning: You haven't selected any communication protocol to compile!"
611        echo "         BitlBee will run, but you will be unable to connect to IM servers!"
612fi
613
614echo "PROTOCOLS = $protocols" >> Makefile.settings
615echo "PROTOOBJS = $protoobjs" >> Makefile.settings
616
617echo Architecture: $arch
618case "$arch" in
619Linux )
620;;
621GNU/* )
622;;
623*BSD )
624;;
625Darwin )
626        echo 'STRIP=\# skip strip' >> Makefile.settings
627;;
628IRIX )
629;;
630SunOS )
631        echo 'EFLAGS+=-lresolv -lnsl -lsocket' >> Makefile.settings
632        echo 'STRIP=\# skip strip' >> Makefile.settings
633;;
634AIX )
635        echo 'EFLAGS+=-Wl,-brtl' >> Makefile.settings
636;;
637CYGWIN* )
638        echo 'Cygwin is not officially supported.'
639;;
640Windows )
641;;
642* )
643        echo 'We haven'\''t tested BitlBee on many platforms yet, yours is untested. YMMV.'
644        echo 'Please report any problems at http://bugs.bitlbee.org/.'
645;;
646esac
647
648if [ -n "$target" ]; then
649        echo "Cross-compiling for: $target"
650fi
651
652echo
653echo 'Configuration done:'
654
655if [ "$debug" = "1" ]; then
656        echo '  Debugging enabled.'
657else
658        echo '  Debugging disabled.'
659fi
660
661if [ "$strip" = "1" ]; then
662        echo '  Binary stripping enabled.'
663else
664        echo '  Binary stripping disabled.'
665fi
666
667echo '  Using event handler: '$events
668echo '  Using SSL library: '$ssl
669echo '  Building with these storage backends: '$STORAGES
670
671if [ -n "$protocols" ]; then
672        echo '  Building with these protocols:' $protocols
673else
674        echo '  Building without IM-protocol support. We wish you a lot of fun...'
675fi
Note: See TracBrowser for help on using the repository browser.