source: configure @ 21029d0

Last change on this file since 21029d0 was 8462239, checked in by Wilmer van der Gaast <wilmer@…>, at 2010-03-18T22:18:52Z

Use a proper tempfile for the libresolv checks and add a missing " to
systemlibdir. :-/

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