source: trunk/configure.ac @ 8618

Last change on this file since 8618 was 8618, checked in by charles, 13 years ago

(trunk) try to get the new libevent scheme to play nice with "make dist"

File size: 12.3 KB
Line 
1dnl convention: -TR MAJOR MINOR MAINT STATUS - (each a single char)
2dnl STATUS: "X" for prerelease beta builds,
3dnl         "Z" for unsupported trunk builds,
4dnl         "0" for stable, supported releases
5dnl these should be the only two lines you need to change
6m4_define([user_agent_prefix],[1.70])
7m4_define([peer_id_prefix],[-TR1700-])
8
9AC_INIT([transmission],
10        [user_agent_prefix],
11        [http://trac.transmissionbt.com/newticket])
12AC_SUBST(USERAGENT_PREFIX,[user_agent_prefix])
13AC_SUBST(PEERID_PREFIX,[peer_id_prefix])
14
15AC_CONFIG_MACRO_DIR([m4])
16
17dnl AM_CONFIG_HEADER(config.h)
18AC_CONFIG_SRCDIR(libtransmission/transmission.h)
19AM_INIT_AUTOMAKE([1.9 tar-ustar])
20AC_PROG_LIBTOOL
21
22if test m4_substr(peer_id_prefix,6,1) = "0"; then
23  supported_build=yes
24  if test "x$GCC" = "xyes" ; then
25    CFLAGS="$CFLAGS -g -O3 "
26    CXXFLAGS="$CXXFLAGS -g -O3 "
27  fi
28  AC_DEFINE(TR_STABLE_RELEASE, 1, [Define to 1 if this is a stable release of Transmission])
29else
30  supported_build=no
31  if test "x$GCC" = "xyes" ; then
32    CFLAGS="$CFLAGS -g -O0"
33    CXXFLAGS="$CXXFLAGS -g -O0"
34  fi
35  if test m4_substr(peer_id_prefix,6,1) = "X"; then
36    AC_DEFINE(TR_BETA_RELEASE, 1, [Define to 1 if this is a beta release of Transmission])
37  else
38    AC_DEFINE(TR_NIGHTLY_RELEASE, 1, [Define to 1 if this is a nightly release of Transmission])
39  fi
40fi
41AM_CONDITIONAL(TR_UNSTABLE, test "x$supported_build" = "xno")
42
43OPENSSL_MINIMUM=0.9.4
44CURL_MINIMUM=7.16.3
45GIO_MINIMUM=2.15.5
46GLIB_MINIMUM=2.6.0
47GTK_MINIMUM=2.6.0
48LIBNOTIFY_MINIMUM=0.4.3
49DBUS_GLIB_MINIMUM=0.70
50LIBEVENT_MINIMUM=1.4.5
51AC_SUBST(OPENSSL_MINIMUM)
52AC_SUBST(CURL_MINIMUM)
53AC_SUBST(GIO_MINIMUM)
54AC_SUBST(GLIB_MINIMUM)
55AC_SUBST(GTK_MINIMUM)
56AC_SUBST(LIBNOTIFY_MINIMUM)
57AC_SUBST(DBUS_GLIB_MINIMUM)
58AC_SUBST(LIBEVENT_MINIUM)
59
60AC_PROG_CC
61AC_PROG_CXX
62AC_C_INLINE
63if test "x$GCC" = "xyes" ; then
64
65    CFLAGS="$CFLAGS -std=gnu99 -ggdb3 -Wall -W -Wpointer-arith -Wformat-security -Wcast-align -Wundef -Wcast-align -Wstrict-prototypes -Wmissing-declarations -Wmissing-format-attribute -Wredundant-decls -Wnested-externs -Wunused-parameter -Wwrite-strings"
66
67    dnl figure out gcc version
68    AC_MSG_CHECKING([gcc version])
69    GCC_VERSION=`$CC -dumpversion`
70    GCC_MAJOR=`echo $GCC_VERSION | cut -d . -f1`
71    GCC_MINOR=`echo $GCC_VERSION | cut -d . -f2`
72    GCC_VERSION_NUM=`(expr $GCC_MAJOR "*" 100 + $GCC_MINOR) 2>/dev/null`
73
74    AC_MSG_RESULT($GCC_VERSION)
75    if test $GCC_VERSION_NUM -ge 304; then
76        dnl these were added in 3.4
77        CFLAGS="$CFLAGS -Wextra -Wdeclaration-after-statement -Winit-self"
78    fi
79fi
80
81AC_HEADER_STDC
82AC_HEADER_TIME
83
84AC_MSG_CHECKING([for fallocate])
85AC_TRY_LINK([#include <linux/falloc.h>],
86            [return fallocate(-1,0,0,0);],
87            [AC_DEFINE([HAVE_FALLOCATE],[1],[Defined if fallocate() exists])
88             AC_MSG_RESULT([yes])],
89            [AC_MSG_RESULT([no])])
90AC_CHECK_FUNCS([lrintf strlcpy daemon dirname basename daemon strcasecmp localtime_r posix_fallocate memmem])
91AC_PROG_INSTALL
92AC_PROG_MAKE_SET
93ACX_PTHREAD
94
95AC_SEARCH_LIBS([socket], [socket net])
96AC_SEARCH_LIBS([gethostbyname], [nsl bind])
97PKG_CHECK_MODULES(OPENSSL, [openssl >= $OPENSSL_MINIMUM], , [CHECK_SSL()])
98PKG_CHECK_MODULES(LIBCURL, [libcurl >= $CURL_MINIMUM])
99AC_PATH_ZLIB
100
101AC_SYS_LARGEFILE
102
103
104dnl ----------------------------------------------------------------------------
105dnl
106dnl posix_fadvise
107
108dnl can posix_fadvise be used
109AC_CHECK_DECLS(posix_fadvise, [], [], [
110#define _XOPEN_SOURCE 600
111#include <fcntl.h>])
112AC_CHECK_FUNCS([posix_fadvise])
113
114
115dnl ----------------------------------------------------------------------------
116dnl
117dnl file monitoring for the daemon
118
119AC_CHECK_HEADER([sys/inotify.h],
120                [AC_CHECK_FUNC([inotify_init],[have_inotify="yes"],[have_inotify="no"])],
121                [have_inotify="no"])
122AC_ARG_WITH([inotify],
123            [AS_HELP_STRING([--with-inotify],[Enable inotify support (default=auto)])],
124            [want_inotify=${enableval}],
125            [want_inotify=${have_inotify}])
126if test "x$want_inotify" = "xyes" ; then
127    if test "x$have_inotify" = "xyes"; then
128      AC_DEFINE([WITH_INOTIFY],[1])
129    else
130      AC_MSG_ERROR("inotify not found!")
131    fi
132fi
133 
134AC_CHECK_HEADER([sys/event.h],
135                [AC_CHECK_FUNC([kqueue],[have_kqueue="yes"],[have_kqueue="no"])],
136                [have_kqueue="no"])
137AC_ARG_WITH([kqueue],
138            [AS_HELP_STRING([--with-kqueue],[Enable kqueue support (default=auto)])],
139            [want_kqueue=${enableval}],
140            [want_kqueue=${have_kqueue}])
141if test "x$want_kqueue" = "xyes" ; then
142    if test "x$have_kqueue" = "xyes"; then
143      AC_DEFINE([WITH_KQUEUE],[1])
144    else
145      AC_MSG_ERROR("kqueue not found!")
146    fi
147fi
148
149AC_CHECK_HEADERS([xfs/xfs.h])
150
151
152dnl ----------------------------------------------------------------------------
153dnl
154dnl va_copy
155
156AC_MSG_CHECKING([how to copy va_list])
157AC_TRY_LINK([#include <stdarg.h>], [va_list ap1, ap2; va_copy(ap1, ap2);],
158    AC_MSG_RESULT([va_copy]),
159        [ AH_TEMPLATE([va_copy], [define if va_copy is not available])
160        AC_TRY_LINK([#include <stdarg.h>], [va_list ap1, ap2; __va_copy(ap1, ap2);],
161        [ AC_DEFINE([va_copy], [__va_copy])
162        AC_MSG_RESULT([__va_copy])],
163        [ AC_DEFINE([va_copy(dest,src)], [memcpy(&dest,&src,sizeof(va_list))])
164        AC_MSG_RESULT([memcpy])]
165    )
166])
167
168
169dnl build our copy of libevent whether we use it or not,
170dnl because "make dist" needs its Makefiles to exist, and
171dnl AM_CONDITIONAL + AC_CONFIG_SUBDIRS don't seem to play nice
172AC_CONFIG_SUBDIRS([third-party/libevent])
173
174AC_CHECK_HEADER([event-config.h],
175                [libevent_source=system
176                 LIBEVENT_CPPFLAGS=""
177                 LIBEVENT_LIBS="-levent -lrt"],
178                [libevent_source=bundled
179                 AC_MSG_NOTICE([couldn't find event-config.h, so using our own copy of libevent from third-party/libevent/.])
180                 AC_MSG_NOTICE([if you are cross-compiling this is probably NOT what you want.])
181                 LIBEVENT_CPPFLAGS="-I\$(top_srcdir)/third-party/libevent -I\$(top_builddir)/third-party/libevent"
182                 LIBEVENT_LIBS="\$(top_builddir)/third-party/libevent/libevent.la"])
183AC_SUBST(LIBEVENT_CPPFLAGS)
184AC_SUBST(LIBEVENT_LIBS)
185
186
187dnl ----------------------------------------------------------------------------
188dnl
189dnl  detection for the GTK+ client
190
191PKG_CHECK_MODULES(GTK,
192                  [gtk+-2.0 >= $GTK_MINIMUM
193                   glib-2.0 >= $GLIB_MINIMUM
194                   gmodule-2.0 >= $GLIB_MINIMUM
195                   gthread-2.0 >= $GLIB_MINIMUM],
196                  [have_gtk=yes],
197                  [have_gtk=no])
198AC_ARG_ENABLE([gtk],
199              AS_HELP_STRING([--enable-gtk],[build gtk client]),
200              [want_gtk=${enableval}],
201              [want_gtk=${have_gtk}])
202build_gtk=no
203use_gio=no
204use_libnotify=no
205use_dbus_glib=no
206if test "x$want_gtk" = "xyes" ; then
207    if test "x$have_gtk" = "xyes"; then
208      build_gtk=yes
209    else
210      AC_MSG_ERROR("GTK+ not found!")
211    fi
212fi
213AM_CONDITIONAL([BUILD_GTK],[test "x$build_gtk" = "xyes"])
214AC_SUBST(GTK_LIBS)
215AC_SUBST(GTK_CFLAGS)
216
217if test "x$build_gtk" = "xyes"; then
218
219    PKG_CHECK_MODULES([GIO],
220                      [gio-2.0 >= $GIO_MINIMUM],
221                      [use_gio=yes],
222                      [use_gio=no])
223    AC_SUBST(GIO_LIBS)
224    AC_SUBST(GIO_CFLAGS)
225    if test "x$use_gio" = "xyes"; then
226        AC_DEFINE([HAVE_GIO], 1)
227    fi
228
229    PKG_CHECK_MODULES([LIBNOTIFY],
230                      [libnotify >= $LIBNOTIFY_MINIMUM],
231                      [have_libnotify=yes],
232                      [have_libnotify=no])
233    AC_ARG_ENABLE([libnotify],
234                  AS_HELP_STRING([--enable-libnotify],[enable notifications]),,
235                  [enable_libnotify=yes])
236    use_libnotify=no
237    if test "x$enable_libnotify" = "xyes" ; then
238        if test "x$have_libnotify" = "xyes"; then
239            use_libnotify=yes
240            AC_SUBST(LIBNOTIFY_LIBS)
241            AC_SUBST(LIBNOTIFY_CFLAGS)
242            AC_DEFINE([HAVE_LIBNOTIFY], 1)
243        fi
244    fi
245
246    PKG_CHECK_MODULES([DBUS_GLIB],
247                      [dbus-glib-1 >= $DBUS_GLIB_MINIMUM],
248                      [use_dbus_glib=yes],
249                      [use_dbus_glib=no])
250    AC_SUBST(DBUS_GLIB_LIBS)
251    AC_SUBST(DBUS_GLIB_CFLAGS)
252    if test "x$use_dbus_glib" = "xyes"; then
253        AC_DEFINE([HAVE_DBUS_GLIB], 1)
254    fi
255    if test "x$use_dbus_glib" = "xyes"; then
256        AC_PATH_PROG(DBUS_BINDING_TOOL, dbus-binding-tool, no)
257        if test "x$DBUS_BINDING_TOOL" = xno; then
258          AC_MSG_WARN([Cannot find dbus-binding-tool])
259          use_dbus_glib="no (dbus-binding-tool not found)"
260        fi
261    fi
262fi
263
264AC_ARG_ENABLE([nls],
265              AS_HELP_STRING([--enable-nls],[enable native language support]),,
266              [enable_nls=yes])
267
268if test "x$build_gtk" = "xyes" -a  "x$enable_nls" = "xno" ; then
269    AC_MSG_ERROR("The gtk client cannot be built without nls support.  Try adding either --enable-nls or --disable-gtk" )
270fi
271
272use_nls=no
273if test "x$enable_nls" = "xyes" ; then
274    use_nls=yes
275    IT_PROG_INTLTOOL([0.35],[no-xml])
276    AC_CHECK_HEADERS([libintl.h])
277    GETTEXT_PACKAGE=transmission
278    AC_SUBST(GETTEXT_PACKAGE)
279    AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE],["$GETTEXT_PACKAGE"],[Gettext package])
280    AM_GLIB_GNU_GETTEXT
281    transmissionlocaledir='${prefix}/${DATADIRNAME}/locale'
282    AC_SUBST(transmissionlocaledir)
283fi
284
285
286dnl ----------------------------------------------------------------------------
287dnl
288dnl  platform-specific stuff.
289
290AC_CANONICAL_HOST
291have_darwin="no"
292have_msw="no"
293case $host_os in
294
295   *cygwin|*mingw32*)
296     have_msw="yes"
297     CXXFLAGS="$CXXFLAGS -mms-bitfields -mwin32 -mwindows"
298     CPPFLAGS="$CPPFLAGS -DWIN32 -D_WIN32 -DWIN32_LEAN_AND_MEAN"
299     LIBS="$LIBS -lshell32 -lws2_32"
300     transmissionlocaledir="locale"
301     if test -z "$host_alias"; then
302       hostaliaswindres=
303     else
304       hostaliaswindres="$host_alias-windres";
305     fi
306     AC_CHECK_TOOL(WINDRES, windres)
307     ;;
308
309  *darwin*)
310    have_darwin="yes"
311    # Make sure the Universal SDK is installed
312    if test ! -d /Developer/SDKs/MacOSX10.4u.sdk; then
313      cat << EOF
314You need to install the Universal SDK in order to build Transmission:
315  Get your Xcode CD or package
316  Restart the install
317  When it gets to "Installation Type", select "Customize"
318  Select "Mac OS X 10.4 (Universal) SDK" under "Cross Development"
319  Finish the install.
320EOF
321      exit 1
322    fi
323    ;;
324
325esac
326
327AC_ARG_ENABLE([cli],
328              [AS_HELP_STRING([--enable-cli],[build command-line client])],
329              [build_cli=${enableval}],
330              [build_cli="yes"])
331AM_CONDITIONAL([BUILD_CLI],[test "x$build_cli" = "xyes"])
332
333AC_ARG_ENABLE([mac],
334              [AS_HELP_STRING([--enable-mac],[build OS X client])],
335              [build_mac=${enableval}],
336              [build_mac=${have_darwin}])
337AM_CONDITIONAL([BUILD_MAC],[test "x$build_mac" = "xyes"])
338
339AC_ARG_ENABLE([daemon],
340              [AS_HELP_STRING([--enable-daemon],[build daemon])],
341              [build_daemon=${enableval}],
342              [build_daemon="yes"])
343AM_CONDITIONAL([BUILD_DAEMON],[test "x$build_daemon" = "xyes"])
344
345
346if test "x$have_darwin" = "xyes"; then
347    AC_DEFINE([HAVE_DARWIN], 1)
348fi
349if test "x$have_msw" = "xyes"; then
350    AC_DEFINE([HAVE_MSW], 1)
351fi
352AM_CONDITIONAL(WIN32, test "x$have_msw" = "xyes")
353
354dnl ----------------------------------------------------------------------------
355dnl
356dnl  Generate the output
357
358AC_CONFIG_FILES([Makefile
359                 transmission.spec
360                 cli/Makefile
361                 daemon/Makefile
362                 doc/Makefile
363                 libtransmission/Makefile
364                 third-party/Makefile
365                 third-party/miniupnp/Makefile
366                 third-party/libnatpmp/Makefile
367                 third-party/dht/Makefile
368                 macosx/Makefile
369                 gtk/Makefile
370                 gtk/icons/Makefile
371                 po/Makefile.in])
372
373ac_configure_args="$ac_configure_args --enable-static --disable-shared -q"
374AC_OUTPUT
375
376echo "
377
378Configuration:
379
380        Source code location:          ${srcdir}
381        Compiler:                      ${CXX}
382        System or bundled libevent:    ${libevent_source}
383
384        Build OS X client:             ${build_mac}
385        Build GTK+ client:             ${build_gtk}
386          ... with gio support:        ${use_gio}
387          ... with dbus-glib support:  ${use_dbus_glib}
388          ... with libnotify support:  ${use_libnotify}
389        Build Command-Line client:     ${build_cli}
390        Build Daemon:                  ${build_daemon}
391
392"
Note: See TracBrowser for help on using the repository browser.