source: trunk/configure.ac @ 8149

Last change on this file since 8149 was 8149, checked in by charles, 12 years ago

(trunk) If avahi's zeroconf implementation is available, use it to advertise our web ui

File size: 12.1 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.51+])
7m4_define([peer_id_prefix],[-TR151Z-])
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 -funroll-loops "
26    CXXFLAGS="$CXXFLAGS -g -O3 -funroll-loops "
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
48WX_MINIMUM=2.6.0
49LIBNOTIFY_MINIMUM=0.4.3
50DBUS_GLIB_MINIMUM=0.70
51AC_SUBST(OPENSSL_MINIMUM)
52AC_SUBST(CURL_MINIMUM)
53AC_SUBST(GIO_MINIMUM)
54AC_SUBST(GLIB_MINIMUM)
55AC_SUBST(GTK_MINIMUM)
56AC_SUBST(WX_MINIMUM)
57AC_SUBST(LIBNOTIFY_MINIMUM)
58AC_SUBST(DBUS_GLIB_MINIMUM)
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])
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
168dnl ----------------------------------------------------------------------------
169dnl
170dnl  libevent fun
171
172AC_CONFIG_SUBDIRS([third-party/libevent])
173AC_MSG_NOTICE([invoking libevent's configure script])
174LIBEVENT_CPPFLAGS="-I\$(top_srcdir)/third-party/libevent"
175AC_SUBST(LIBEVENT_CPPFLAGS)
176
177
178dnl ----------------------------------------------------------------------------
179dnl
180dnl  detection for the GTK+ client
181
182PKG_CHECK_MODULES(GTK,
183                  [gtk+-2.0 >= $GTK_MINIMUM
184                   glib-2.0 >= $GLIB_MINIMUM
185                   gmodule-2.0 >= $GLIB_MINIMUM
186                   gthread-2.0 >= $GLIB_MINIMUM],
187                  [have_gtk=yes],
188                  [have_gtk=no])
189AC_ARG_ENABLE([gtk],
190              AS_HELP_STRING([--enable-gtk],[build gtk client]),
191              [want_gtk=${enableval}],
192              [want_gtk=${have_gtk}])
193build_gtk=no
194use_gio=no
195use_libnotify=no
196use_dbus_glib=no
197if test "x$want_gtk" = "xyes" ; then
198    if test "x$have_gtk" = "xyes"; then
199      build_gtk=yes
200    else
201      AC_MSG_ERROR("GTK+ not found!")
202    fi
203fi
204AM_CONDITIONAL([BUILD_GTK],[test "x$build_gtk" = "xyes"])
205AC_SUBST(GTK_LIBS)
206AC_SUBST(GTK_CFLAGS)
207
208if test "x$build_gtk" = "xyes"; then
209
210    PKG_CHECK_MODULES([GIO],
211                      [gio-2.0 >= $GIO_MINIMUM],
212                      [use_gio=yes],
213                      [use_gio=no])
214    AC_SUBST(GIO_LIBS)
215    AC_SUBST(GIO_CFLAGS)
216    if test "x$use_gio" = "xyes"; then
217        AC_DEFINE([HAVE_GIO], 1)
218    fi
219
220    PKG_CHECK_MODULES([LIBNOTIFY],
221                      [libnotify >= $LIBNOTIFY_MINIMUM],
222                      [have_libnotify=yes],
223                      [have_libnotify=no])
224    AC_ARG_ENABLE([libnotify],
225                  AS_HELP_STRING([--enable-libnotify],[enable notifications]),,
226                  [enable_libnotify=yes])
227    use_libnotify=no
228    if test "x$enable_libnotify" = "xyes" ; then
229        if test "x$have_libnotify" = "xyes"; then
230            use_libnotify=yes
231            AC_SUBST(LIBNOTIFY_LIBS)
232            AC_SUBST(LIBNOTIFY_CFLAGS)
233            AC_DEFINE([HAVE_LIBNOTIFY], 1)
234        fi
235    fi
236
237    PKG_CHECK_MODULES([DBUS_GLIB],
238                      [dbus-glib-1 >= $DBUS_GLIB_MINIMUM],
239                      [use_dbus_glib=yes],
240                      [use_dbus_glib=no])
241    AC_SUBST(DBUS_GLIB_LIBS)
242    AC_SUBST(DBUS_GLIB_CFLAGS)
243    if test "x$use_dbus_glib" = "xyes"; then
244        AC_DEFINE([HAVE_DBUS_GLIB], 1)
245    fi
246    if test "x$use_dbus_glib" = "xyes"; then
247        AC_PATH_PROG(DBUS_BINDING_TOOL, dbus-binding-tool, no)
248        if test "x$DBUS_BINDING_TOOL" = xno; then
249          AC_MSG_WARN([Cannot find dbus-binding-tool])
250          use_dbus_glib="no (dbus-binding-tool not found)"
251        fi
252    fi
253fi
254
255PKG_CHECK_MODULES([AVAHI],
256                  [avahi-client],
257                  [have_avahi=yes],
258                  [have_avahi=no])
259AC_ARG_ENABLE([avahi],
260              AS_HELP_STRING([--enable-avahi],[enable mDNS advertising for the web interface]),,
261              [enable_avahi=yes])
262use_avahi=no
263if test "x$enable_avahi" = "xyes" ; then
264    if test "x$have_avahi" = "xyes"; then
265        use_avahi=yes
266        AC_DEFINE([HAVE_AVAHI], 1)
267    fi
268fi
269
270AC_ARG_ENABLE([nls],
271              AS_HELP_STRING([--enable-nls],[enable native language support]),,
272              [enable_nls=yes])
273
274if test "x$build_gtk" = "xyes" -a  "x$enable_nls" = "xno" ; then
275    AC_MSG_ERROR("The gtk client cannot be built without nls support.  Try adding either --enable-nls or --disable-gtk" )
276fi
277
278use_nls=no
279if test "x$enable_nls" = "xyes" ; then
280    use_nls=yes
281    IT_PROG_INTLTOOL([0.23],[no-xml])
282    AC_CHECK_HEADERS([libintl.h])
283    GETTEXT_PACKAGE=transmission
284    AC_SUBST(GETTEXT_PACKAGE)
285    AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE],["$GETTEXT_PACKAGE"],[Gettext package])
286    AM_GLIB_GNU_GETTEXT
287    transmissionlocaledir='${prefix}/${DATADIRNAME}/locale'
288    AC_SUBST(transmissionlocaledir)
289fi
290
291
292dnl ----------------------------------------------------------------------------
293dnl
294dnl  platform-specific stuff.
295
296AC_CANONICAL_HOST
297have_darwin="no"
298have_msw="no"
299case $host_os in
300
301   *cygwin|*mingw32*)
302     have_msw="yes"
303     CXXFLAGS="$CXXFLAGS -mms-bitfields -mwin32 -mwindows"
304     CPPFLAGS="$CPPFLAGS -DWIN32 -D_WIN32 -DWIN32_LEAN_AND_MEAN"
305     LIBS="$LIBS -lshell32 -lws2_32"
306     transmissionlocaledir="locale"
307     if test -z "$host_alias"; then
308       hostaliaswindres=
309     else
310       hostaliaswindres="$host_alias-windres";
311     fi
312     AC_CHECK_TOOL(WINDRES, windres)
313     ;;
314
315  *darwin*)
316    have_darwin="yes"
317    # Make sure the Universal SDK is installed
318    if test ! -d /Developer/SDKs/MacOSX10.4u.sdk; then
319      cat << EOF
320You need to install the Universal SDK in order to build Transmission:
321  Get your Xcode CD or package
322  Restart the install
323  When it gets to "Installation Type", select "Customize"
324  Select "Mac OS X 10.4 (Universal) SDK" under "Cross Development"
325  Finish the install.
326EOF
327      exit 1
328    fi
329    ;;
330
331esac
332
333AC_ARG_ENABLE([cli],
334              [AS_HELP_STRING([--enable-cli],[build command-line client])],
335              [build_cli=${enableval}],
336              [build_cli="yes"])
337AM_CONDITIONAL([BUILD_CLI],[test "x$build_cli" = "xyes"])
338
339AC_ARG_ENABLE([mac],
340              [AS_HELP_STRING([--enable-mac],[build OS X client])],
341              [build_mac=${enableval}],
342              [build_mac=${have_darwin}])
343AM_CONDITIONAL([BUILD_MAC],[test "x$build_mac" = "xyes"])
344
345AC_ARG_ENABLE([daemon],
346              [AS_HELP_STRING([--enable-daemon],[build daemon])],
347              [build_daemon=${enableval}],
348              [build_daemon="yes"])
349AM_CONDITIONAL([BUILD_DAEMON],[test "x$build_daemon" = "xyes"])
350
351
352if test "x$have_darwin" = "xyes"; then
353    AC_DEFINE([HAVE_DARWIN], 1)
354fi
355if test "x$have_msw" = "xyes"; then
356    AC_DEFINE([HAVE_MSW], 1)
357fi
358AM_CONDITIONAL(WIN32, test "x$have_msw" = "xyes")
359
360dnl ----------------------------------------------------------------------------
361dnl
362dnl  Generate the output
363
364AC_CONFIG_FILES([Makefile
365                 transmission.spec
366                 cli/Makefile
367                 daemon/Makefile
368                 doc/Makefile
369                 libtransmission/Makefile
370                 third-party/Makefile
371                 third-party/miniupnp/Makefile
372                 third-party/libnatpmp/Makefile
373                 macosx/Makefile
374                 gtk/Makefile
375                 gtk/icons/Makefile
376                 po/Makefile.in])
377
378ac_configure_args="$ac_configure_args --enable-static --disable-shared -q"
379AC_OUTPUT
380
381echo "
382
383Configuration:
384
385        Source code location:       ${srcdir}
386        Compiler:                   ${CXX}
387        Build Command-Line client:  ${build_cli}
388        Build Daemon:               ${build_daemon}
389        Build GTK+ client:          ${build_gtk}
390          ... gio support:          ${use_gio}
391          ... dbus-glib support:    ${use_dbus_glib}
392          ... libnotify support:    ${use_libnotify}
393          ... avahi support:        ${use_avahi}
394        Build OS X client:          ${build_mac}
395
396"
Note: See TracBrowser for help on using the repository browser.