diff --git a/Makefile.am b/Makefile.am index 85d4bdf..0e11098 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,2 +1,55 @@ -SUBDIRS=@subdirs@ misc btpd cli +AM_CFLAGS=-std=c99 -Wall @WARNNPS@ +AM_CPPFLAGS=-I$(top_srcdir)/misc -I$(top_srcdir)/evloop @openssl_CPPFLAGS@ -D_GNU_SOURCE=1 -D_FILE_OFFSET_BITS=64 -D@EVLOOP_METHOD@ +AM_LDFLAGS=@openssl_LDFLAGS@ + +bin_PROGRAMS=btpd/btpd cli/btcli cli/btinfo +noinst_LIBRARIES=misc/libmisc.a evloop/libevloop.a + EXTRA_DIST=COPYRIGHT CHANGES + +# btpd +btpd_btpd_SOURCES=\ + btpd/active.c btpd/active.h btpd/addrinfo.c\ + btpd/btpd.c btpd/btpd.h\ + btpd/cli_if.c btpd/content.c btpd/content.h\ + btpd/download.c btpd/download_subr.c btpd/download.h\ + btpd/http_tr_if.c\ + btpd/main.c\ + btpd/nameconn.c btpd/net.c btpd/net.h btpd/net_types.h\ + btpd/net_buf.c btpd/net_buf.h\ + btpd/opts.c btpd/opts.h\ + btpd/peer.c btpd/peer.h\ + btpd/thread_cb.c btpd/tlib.c btpd/tlib.h btpd/torrent.c btpd/torrent.h\ + btpd/tracker_req.c btpd/tracker_req.h\ + btpd/upload.c btpd/upload.h\ + btpd/util.c +btpd_btpd_CFLAGS=-pthread $(AM_CFLAGS) +btpd_btpd_LDADD=misc/libmisc.a evloop/libevloop.a -lcrypto -lm @CLOCKLIB@ + +# btinfo +cli_btinfo_SOURCES=cli/btinfo.c +cli_btinfo_LDADD=misc/libmisc.a -lcrypto -lm + +# btcli +cli_btcli_SOURCES=cli/btcli.c cli/btcli.h cli/add.c cli/del.c cli/list.c cli/kill.c cli/start.c cli/stop.c cli/stat.c +cli_btcli_LDADD=misc/libmisc.a -lcrypto -lm + +# libmisc +misc_libmisc_a_SOURCES=\ + misc/benc.c misc/benc.h\ + misc/btpd_if.c misc/btpd_if.h misc/ipcdefs.h\ + misc/metainfo.c misc/metainfo.h\ + misc/hashtable.c misc/hashtable.h\ + misc/http_client.c misc/http_client.h\ + misc/iobuf.c misc/iobuf.h\ + misc/queue.h\ + misc/stream.c misc/stream.h\ + misc/subr.c misc/subr.h + +# evloop +EXTRA_evloop_libevloop_a_SOURCES=evloop/epoll.c evloop/kqueue.c evloop/poll.c +evloop_libevloop_a_SOURCES=\ + evloop/evloop.h\ + evloop/timeheap.c evloop/timeheap.h evloop/timer.c +evloop_libevloop_a_LIBADD=@EVLOOP_IMPL@ +evloop_libevloop_a_DEPENDENCIES=@EVLOOP_IMPL@ diff --git a/btpd/Makefile.am b/btpd/Makefile.am deleted file mode 100644 index b4def23..0000000 --- a/btpd/Makefile.am +++ /dev/null @@ -1,20 +0,0 @@ -bin_PROGRAMS=btpd -btpd_SOURCES=\ - active.c active.h addrinfo.c\ - btpd.c btpd.h\ - cli_if.c content.c content.h\ - download.c download_subr.c download.h\ - http_tr_if.c\ - main.c\ - nameconn.c net.c net.h net_types.h\ - net_buf.c net_buf.h\ - opts.c opts.h\ - peer.c peer.h\ - thread_cb.c tlib.c tlib.h torrent.c torrent.h\ - tracker_req.c tracker_req.h\ - upload.c upload.h\ - util.c - -btpd_LDADD=../misc/libmisc.a ../libevent/libevent.a -lcrypto -lm -btpd_CPPFLAGS=-I$(top_srcdir)/misc -I$(top_srcdir)/libevent @openssl_CPPFLAGS@ -btpd_LDFLAGS=@openssl_LDFLAGS@ diff --git a/cli/Makefile.am b/cli/Makefile.am deleted file mode 100644 index 3222e95..0000000 --- a/cli/Makefile.am +++ /dev/null @@ -1,11 +0,0 @@ -bin_PROGRAMS=btinfo btcli - -btinfo_SOURCES=btinfo.c -btinfo_LDADD=../misc/libmisc.a -lcrypto -lm -btinfo_CPPFLAGS=-I$(top_srcdir)/misc @openssl_CPPFLAGS@ -btinfo_LDFLAGS=@openssl_LDFLAGS@ - -btcli_SOURCES=btcli.c btcli.h add.c del.c list.c kill.c start.c stop.c stat.c -btcli_LDADD=../misc/libmisc.a -lcrypto -lm -btcli_CPPFLAGS=-I$(top_srcdir)/misc @openssl_CPPFLAGS@ -btcli_LDFLAGS=@openssl_LDFLAGS@ diff --git a/configure.ac b/configure.ac index 9a10faa..d8b7335 100644 --- a/configure.ac +++ b/configure.ac @@ -1,48 +1,78 @@ AC_INIT(btpd, 0.13, btpd@murmeldjur.se) -AM_INIT_AUTOMAKE([foreign]) +AM_INIT_AUTOMAKE([foreign subdir-objects]) -AC_CONFIG_FILES([Makefile btpd/Makefile misc/Makefile cli/Makefile]) +AC_CONFIG_FILES([Makefile]) AC_PROG_CC +AC_PROG_CC_C_O AC_PROG_RANLIB -CFLAGS="$CFLAGS -std=c99" -CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE=1 -D_FILE_OFFSET_BITS=64" - AC_ARG_WITH(openssl, [ --with-openssl=dir use openssl installed in dir], -[ - AC_SUBST(openssl_LDFLAGS,["-L${withval}/lib -Wl,-rpath=${withval}/lib"]) - AC_SUBST(openssl_CPPFLAGS,"-I${withval}/include") -], -[]) - -AC_ARG_WITH(warn, -[ --with-warn=level select warning preset (no,all,allerr)], -[ - case $withval in - no) - ;; - all) - CFLAGS="$CFLAGS -Wall -Wno-pointer-sign" - ;; - allerr) - CFLAGS="$CFLAGS -Wall -Wno-pointer-sign -Werror" - ;; - *) - echo "Warning preset \"$withval\" not recognized. See --help." - exit 1 - ;; - esac -], -[]) + AC_SUBST(openssl_LDFLAGS,["-L${withval}/lib -Wl,-rpath=${withval}/lib"]) + AC_SUBST(openssl_CPPFLAGS,"-I${withval}/include")) + +AC_ARG_WITH(evloop-method, +[ --with-evloop-method select evloop method (epoll,poll,kqueue)], + evloop_methods=$withval, + evloop_methods="epoll kqueue poll") + +AC_SEARCH_LIBS(clock_gettime, rt, + AC_SUBST(CLOCKLIB, $LIBS) + LIBS="" +, + echo btpd needs clock_gettime. + exit 1) + +echo -n "checking whether compiler accepts -Wno-pointer-sign... " +old_CFLAGS=$CFLAGS +CFLAGS="-Wno-pointer-sign" +AC_COMPILE_IFELSE(int main(void) { return 0; }, + AC_SUBST(WARNNPS,"-Wno-pointer-sign") + echo yes +, + echo no) +CFLAGS=$old_CFLAGS old_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $openssl_LDFLAGS" -AC_CHECK_LIB(crypto, SHA1_Final, :, echo Must have openssl; exit 1) +AC_CHECK_LIB(crypto, SHA1_Final,, echo "btpd needs openssl's libraries and headers."; exit 1) LDFLAGS=$old_LDFLAGS +LIBS="" -AC_CONFIG_SUBDIRS([libevent]) +for m in $evloop_methods; do + case $m in + epoll) + AC_CHECK_FUNC(epoll_wait,[ + AC_SUBST(EVLOOP_IMPL,"evloop/epoll.${OBJEXT}") + AC_SUBST(EVLOOP_METHOD,EVLOOP_EPOLL) + break],) + ;; + kqueue) + AC_CHECK_FUNC(kqueue,[ + AC_SUBST(EVLOOP_IMPL,"evloop/kqueue.${OBJEXT}") + AC_SUBST(EVLOOP_METHOD,EVLOOP_KQUEUE) + break],) + ;; + poll) + AC_CHECK_FUNC(poll,[ + AC_SUBST(EVLOOP_IMPL,"evloop/poll.${OBJEXT}") + AC_SUBST(EVLOOP_METHOD,EVLOOP_POLL) + break],) + break + ;; + *) + echo "$m is not a valid evloop method. See --help." + exit 1 + ;; + esac +done +if test x$EVLOOP_METHOD == x; then + echo "no suitable evloop method found." + exit 1 +else + echo selected evloop method $EVLOOP_METHOD. +fi AC_OUTPUT diff --git a/evloop/Makefile.am b/evloop/Makefile.am deleted file mode 100644 index 9826afa..0000000 --- a/evloop/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ -noinst_LIBRARIES=libevloop.a -EXTRA_libevloop_a_SOURCES=epoll.c poll.c -libevloop_a_SOURCES=\ - evloop.h\ - timeheap.c timeheap.h timer.c -CFLAGS=@CFLAGS@ -D@EVLOOP_METHOD@ -I$(top_srcdir)/misc -libevloop_a_LIBADD=@EVLOOP_IMPL@ -libevloop_a_DEPENDENCIES=@EVLOOP_IMPL@ diff --git a/misc/Makefile.am b/misc/Makefile.am deleted file mode 100644 index c0c3844..0000000 --- a/misc/Makefile.am +++ /dev/null @@ -1,12 +0,0 @@ -noinst_LIBRARIES=libmisc.a -libmisc_a_SOURCES=\ - benc.c benc.h\ - btpd_if.c btpd_if.h ipcdefs.h\ - metainfo.c metainfo.h\ - hashtable.c hashtable.h\ - http_client.c http_client.h\ - iobuf.c iobuf.h\ - queue.h\ - stream.c stream.h\ - subr.c subr.h -libmisc_a_CPPFLAGS=-I$(top_srcdir)/libevent @openssl_CPPFLAGS@