pupnp (libupnp) snapshot from SourceForge: git clone git://pupnp.git.sourceforge...
[igd2-for-linux:pandonghui1211s-igd2-for-linux.git] / pupnp_branch-1.6.x / configure.ac
1 # -*- Autoconf -*-
2 #
3 # Top-level configure.ac file for libupnp
4 #
5 # Process this file with autoconf to produce a configure script.
6 #
7 # (C) Copyright 2005-2007 RĂ©mi Turboult <r3mi@users.sourceforge.net>
8 #
9
10 AC_PREREQ(2.60)
11
12 AC_INIT([libupnp], [1.6.7], [mroberto@users.sourceforge.net])
13 dnl ############################################################################
14 dnl # *Independently* of the above libupnp package version, the libtool version
15 dnl # of the 3 libraries need to be updated whenever there is a change released:
16 dnl # "current:revision:age" (this is NOT the same as the package version),
17 dnl # where:
18 dnl #   - library code modified:                revision++
19 dnl #   - interfaces changed/added/removed:     current++ and revision=0
20 dnl #   - interfaces added:                     age++
21 dnl #   - interfaces removed:                   age=0
22 dnl # *please update only once, before a formal release, not for each change*
23 dnl #
24 dnl ############################################################################
25 dnl # Release 1.4.1:
26 dnl #AC_SUBST([LT_VERSION_IXML],       [2:2:0])
27 dnl #AC_SUBST([LT_VERSION_THREADUTIL], [2:2:0])
28 dnl #AC_SUBST([LT_VERSION_UPNP],       [2:2:0])
29 dnl #
30 dnl ############################################################################
31 dnl # Release 1.4.6:
32 dnl # "current:revision:age"
33 dnl #
34 dnl # - Code has changed in ixml
35 dnl #   revision: 2 -> 3
36 dnl # - Code has changed in threadutil
37 dnl #   revision: 2 -> 3
38 dnl # - Interface added in threadutil
39 dnl #   current: 2 -> 3
40 dnl #   revisiion: 3 -> 0
41 dnl #   age: 0 -> 1
42 dnl # - Code has changed in upnp
43 dnl #   revision: 2 -> 3
44 dnl #
45 dnl #AC_SUBST([LT_VERSION_IXML],       [2:3:0])
46 dnl #AC_SUBST([LT_VERSION_THREADUTIL], [3:0:1])
47 dnl #AC_SUBST([LT_VERSION_UPNP],       [2:3:0])
48 dnl #
49 dnl ############################################################################
50 dnl # Release 1.6.0:
51 dnl # "current:revision:age"
52 dnl #
53 dnl # - Code has changed in ixml
54 dnl #   revision: 3 -> 4
55 dnl # - Code has changed in threadutil
56 dnl #   revision: 0 -> 1
57 dnl # - Code has changed in upnp
58 dnl #   revision: 3 -> 4
59 dnl # - Interface changed in upnp
60 dnl #   current: 2 -> 3
61 dnl #   revision: 4 -> 0
62 dnl # - Interface removed in upnp
63 dnl #   age: 0 -> 0
64 dnl #
65 dnl #AC_SUBST([LT_VERSION_IXML],       [2:4:0])
66 dnl #AC_SUBST([LT_VERSION_THREADUTIL], [3:1:1])
67 dnl #AC_SUBST([LT_VERSION_UPNP],       [3:0:0])
68 dnl #
69 dnl ############################################################################
70 dnl # Release 1.6.1:
71 dnl # "current:revision:age"
72 dnl #
73 dnl # - Code has changed in threadutil
74 dnl #   revision: 1 -> 2
75 dnl # - Interface added in threadutil
76 dnl #   current: 3 -> 4
77 dnl #   revision: 2 -> 0
78 dnl # - Interface added in threadutil
79 dnl #   age: 1 -> 2
80 dnl # - Code has changed in upnp
81 dnl #   revision: 0 -> 1
82 dnl #
83 dnl #AC_SUBST([LT_VERSION_IXML],       [2:4:0])
84 dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:0:2])
85 dnl #AC_SUBST([LT_VERSION_UPNP],       [3:1:0])
86 dnl #
87 dnl ############################################################################
88 dnl # Release 1.6.2:
89 dnl # "current:revision:age"
90 dnl #
91 dnl # - Code has changed in upnp
92 dnl #   revision: 1 -> 2
93 dnl #
94 dnl #AC_SUBST([LT_VERSION_IXML],       [2:4:0])
95 dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:0:2])
96 dnl #AC_SUBST([LT_VERSION_UPNP],       [3:2:0])
97 dnl #
98 dnl ############################################################################
99 dnl # Release 1.6.3:
100 dnl # "current:revision:age"
101 dnl #
102 dnl # - Code has changed in threadutil
103 dnl #   revision: 0 -> 1
104 dnl #
105 dnl #AC_SUBST([LT_VERSION_IXML],       [2:4:0])
106 dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:1:2])
107 dnl #AC_SUBST([LT_VERSION_UPNP],       [3:2:0])
108 dnl #
109 dnl ############################################################################
110 dnl # Release 1.6.4:
111 dnl # "current:revision:age"
112 dnl #
113 dnl # - Code has changed in threadutil
114 dnl #   revision: 1 -> 2
115 dnl # - Code has changed in upnp
116 dnl #   revision: 2 -> 3
117 dnl #
118 dnl #AC_SUBST([LT_VERSION_IXML],       [2:4:0])
119 dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:2:2])
120 dnl #AC_SUBST([LT_VERSION_UPNP],       [3:3:0])
121 dnl #
122 dnl ############################################################################
123 dnl # Release 1.6.5:
124 dnl # "current:revision:age"
125 dnl #
126 dnl # - Code has changed in upnp
127 dnl #   revision: 3 -> 4
128 dnl #
129 dnl #AC_SUBST([LT_VERSION_IXML],       [2:4:0])
130 dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:2:2])
131 dnl #AC_SUBST([LT_VERSION_UPNP],       [3:4:0])
132 dnl #
133 dnl ############################################################################
134 dnl # Release 1.6.6:
135 dnl # "current:revision:age"
136 dnl #
137 dnl # - Code has changed in threadutil
138 dnl #   revision: 2 -> 3
139 dnl # - Code has changed in upnp
140 dnl #   revision: 4 -> 5
141 dnl #
142 dnl #AC_SUBST([LT_VERSION_IXML],       [2:4:0])
143 dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:3:2])
144 dnl #AC_SUBST([LT_VERSION_UPNP],       [3:5:0])
145 dnl #
146 dnl ############################################################################
147 dnl # Release 1.6.7:
148 dnl # "current:revision:age"
149 dnl #
150 dnl #AC_SUBST([LT_VERSION_IXML],       [2:4:0])
151 dnl #AC_SUBST([LT_VERSION_THREADUTIL], [4:3:2])
152 dnl #AC_SUBST([LT_VERSION_UPNP],       [3:5:0])
153 dnl #
154 dnl ############################################################################
155 AC_SUBST([LT_VERSION_IXML],       [2:4:0])
156 AC_SUBST([LT_VERSION_THREADUTIL], [4:3:2])
157 AC_SUBST([LT_VERSION_UPNP],       [3:5:0])
158 dnl ############################################################################
159 dnl # Repeating the algorithm to place it closer to the modificatin place:
160 dnl #   - library code modified:                revision++
161 dnl #   - interfaces changed/added/removed:     current++ and revision=0
162 dnl #   - interfaces added:                     age++
163 dnl #   - interfaces removed:                   age=0
164 dnl # *please update only once, before a formal release, not for each change*
165 dnl ############################################################################
166
167
168 AC_CONFIG_AUX_DIR([build-aux])
169 AC_CONFIG_MACRO_DIR([m4])
170 AC_CONFIG_SRCDIR([upnp/inc/upnp.h])
171
172
173 AM_INIT_AUTOMAKE([1.8 -Wall foreign subdir-objects dist-bzip2])
174
175
176 #
177 # Get canonical host names in host and host_os
178 #
179 AC_CANONICAL_HOST
180
181 #
182 # There are 3 configuration files :
183 # 1) "./autoconfig.h" is auto-generated and used only internally during build
184 #    (usually named "config.h" but conflicts with the file below)
185 # 2) "./upnp/src/inc/config.h" is static and contains some compile-time 
186 #    parameters. This file was previously in "./upnp/inc" but is no longer 
187 #    installed (contains internal definitions only).
188 # 3) "./upnp/inc/upnpconfig.h" is auto-generated and installed with the 
189 #    libraries : it contains information on the configuration of the
190 #    installed libraries.
191 #
192 AC_CONFIG_HEADERS([autoconfig.h upnp/inc/upnpconfig.h])
193 #AC_SYS_LARGEFILE_SENSITIVE
194
195 AC_REVISION([$Revision: 1.11 $])
196
197 upnpmaj=`echo "$PACKAGE_VERSION" | sed 's/\..*//' `
198 upnpmin=[`echo "$PACKAGE_VERSION" | sed 's/^[^.]\.// ; s/[^0-9].*$//' `]
199 upnppatch=[`echo "$PACKAGE_VERSION" | sed 's/^[^.]\.[^.]\.// ; s/[^0-9].*$//' `]
200 AC_DEFINE_UNQUOTED([UPNP_VERSION_STRING], "$PACKAGE_VERSION", [see upnpconfig.h])
201 AC_DEFINE_UNQUOTED([UPNP_VERSION_MAJOR], $upnpmaj, [see upnpconfig.h])
202 AC_DEFINE_UNQUOTED([UPNP_VERSION_MINOR], $upnpmin, [see upnpconfig.h])
203 AC_DEFINE_UNQUOTED([UPNP_VERSION_PATCH], $upnppatch, [see upnpconfig.h])
204
205
206 #
207 # Check for DEBUG flag
208 #
209 RT_BOOL_ARG_ENABLE([debug], [no], [extra debugging code])
210 if test "x$enable_debug" = xyes ; then
211         AC_DEFINE(UPNP_HAVE_DEBUG, 1, [see upnpconfig.h])
212         AC_DEFINE(DEBUG, 1, [Define to 1 to compile debug code])
213 else
214         AC_DEFINE(NO_DEBUG, 1, [Define to 1 to prevent some debug code])
215         AC_DEFINE(NDEBUG, 1, [Define to 1 to prevent compilation of assert()])
216 fi
217
218
219 #
220 # Check for libupnp subsets
221 #
222 RT_BOOL_ARG_ENABLE([client], [yes], [control point code (client)])
223 if test "x$enable_client" = xyes ; then
224         AC_DEFINE(UPNP_HAVE_CLIENT, 1, [see upnpconfig.h])
225 fi
226
227
228 RT_BOOL_ARG_ENABLE([device], [yes],
229      [device specific code (implies --disable-webserver if disabled)])
230 if test "x$enable_device" = xyes ; then
231         AC_DEFINE(UPNP_HAVE_DEVICE, 1, [see upnpconfig.h])
232 fi
233
234
235 if test "x$enable_device" = xno ; then 
236         enable_webserver=no
237 else 
238         RT_BOOL_ARG_ENABLE([webserver], [yes], [integrated web server])
239 fi
240 AM_CONDITIONAL(ENABLE_WEBSERVER, test x"$enable_webserver" = xyes)
241 if test "x$enable_webserver" = xyes ; then
242         AC_DEFINE(UPNP_HAVE_WEBSERVER, 1, [see upnpconfig.h])
243 fi
244
245
246 RT_BOOL_ARG_ENABLE([tools], [yes], [helper APIs in upnptools.h])
247 if test "x$enable_tools" = xyes ; then
248         AC_DEFINE(UPNP_HAVE_TOOLS, 1, [see upnpconfig.h])
249 fi
250
251
252 RT_BOOL_ARG_ENABLE([samples], [yes], [compilation of upnp/sample/ code])
253
254
255 #
256 # doc installation
257 # autoconf >= 2.60 already defines ${docdir}, but we will not use its 
258 # default value, which is ${datarootdir}/doc/${PACKAGE_TARNAME}.
259 # That would give us ${datarootdir}/doc/libupnp, and we want the package
260 # version on that.
261 #
262 docdir="${datadir}/doc/${PACKAGE_NAME}-${PACKAGE_VERSION}"
263 AC_MSG_CHECKING([for documentation directory])
264 AC_ARG_WITH(
265         [documentation], 
266         AS_HELP_STRING(
267                 [--with-documentation=directory_name],
268                 [where documentation is installed 
269                  @<:@[DATADIR/doc/]AC_PACKAGE_NAME[-]AC_PACKAGE_VERSION@:>@])
270 AS_HELP_STRING(
271                 [--without-documentation],
272                 [do not install the documentation]),
273         [],
274         [with_documentation=no])
275
276 #
277 # If something has been entered after an equal sign, assume it is the directory
278 #
279 if test x"$with_documentation" != xyes -a x"$with_documentation" != xno; then
280         docdir="$with_documentation"
281 fi
282 AM_CONDITIONAL(WITH_DOCUMENTATION, test x"$with_documentation" != xno)
283 AC_SUBST(docdir)
284 AC_MSG_RESULT($docdir)
285
286
287 #
288 # Checks for programs
289 #
290 AC_PROG_CC
291 AM_PROG_CC_C_O
292 AC_PROG_LIBTOOL
293 AC_PROG_INSTALL
294 AC_PROG_MAKE_SET
295 AC_PROG_EGREP
296
297 #
298 # Default compilation flags
299 #
300 echo "--------------------- Default compilation flags -------------------------------"
301 echo host is $host
302 echo host_os is $host_os
303 case $host_os in
304 freebsd*)
305         echo "Using FreeBSD specific compiler settings"
306         # Put FreeBSD specific compiler flags here
307         ;;
308 *)
309         echo "Using non-specific system compiler settings"
310         if test x"$enable_debug" = xyes; then
311                 # AC_PROG_CC already sets CFLAGS to "-g -O2" by default
312                 #:
313                 # Use -O0 in debug so that variables do not get optimized out
314                 AX_CFLAGS_GCC_OPTION([-O0])
315         else
316                 # add optimise for size
317                 AX_CFLAGS_GCC_OPTION([-Os])
318         fi
319         ;;
320 esac
321
322 AX_CFLAGS_WARN_ALL
323 echo "-------------------------------------------------------------------------------"
324
325
326 #
327 # Lot's of stuff to ensure large file support
328 #
329 AC_TYPE_SIZE_T
330 AC_TYPE_OFF_T
331 AC_DEFINE([_LARGE_FILE_SOURCE], [], [Large files support])
332 AC_DEFINE([_FILE_OFFSET_BITS], [64], [File Offset size])
333
334
335 #
336 # Checks for header files
337 #
338 AC_HEADER_STDC
339 # libupnp code doesn't use autoconf variables yet,
340 # so just abort if a header file is not found.
341 AC_CHECK_HEADERS(
342         [ \
343         arpa/inet.h \
344         fcntl.h \
345         inttypes.h \
346         limits.h \
347         netdb.h \
348         netinet/in.h \
349         stdlib.h \
350         string.h \
351         sys/ioctl.h \
352         sys/socket.h \
353         sys/time.h \
354         sys/timeb.h \
355         syslog.h \
356         unistd.h \
357         ],
358         [],
359         [AC_MSG_ERROR([required header file missing])])
360
361
362 #
363 # Checks for typedefs, structures, and compiler characteristics
364 #       
365 AC_C_CONST
366 TYPE_SOCKLEN_T
367
368
369 #
370 # Checks for library functions
371 #
372 AC_FUNC_VPRINTF
373 AC_FUNC_FSEEKO
374 AC_CHECK_FUNCS(ftime,, [AC_CHECK_LIB(compat, ftime)])
375
376
377 #
378 # Checks for POSIX Threads
379 #
380 echo "--------------------------- pthread stuff -------------------------------------"
381 ACX_PTHREAD(
382         [],
383         [AC_MSG_ERROR([POSIX threads are required to build this program])])
384 #
385 # Update environment variables for pthreads
386 #
387 CC="$PTHREAD_CC"
388 CFLAGS="$PTHREAD_CFLAGS $CFLAGS"
389 LIBS="$PTHREAD_LIBS $LIBS"
390 #
391 # Determine if pthread_rwlock_t is available
392 #
393 echo "----------------------- pthread_rwlock_t stuff --------------------------------"
394 AC_MSG_CHECKING([if pthread_rwlock_t is available])
395 AC_LANG([C])
396 AC_COMPILE_IFELSE(
397         [AC_LANG_PROGRAM(
398                 [#include <pthread.h>],
399                 [pthread_rwlock_t *x;])],
400         [AC_DEFINE([UPNP_USE_RWLOCK], [1], [Use pthread_rwlock_t])
401                 AC_MSG_RESULT([yes, supported without any options])],
402         [AC_COMPILE_IFELSE(
403                 [AC_LANG_PROGRAM(
404                         [#define _GNU_SOURCE
405                         #include <pthread.h>],
406                         [pthread_rwlock_t *x;])],
407                 [AC_DEFINE([UPNP_USE_RWLOCK], [1], [Use pthread_rwlock_t])
408                         CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
409                         AC_MSG_RESULT([yes, definition of _GNU_SOURCE required])],
410                 [AC_DEFINE([UPNP_USE_RWLOCK], [0], [Do not use pthread_rwlock_t])
411                         AC_MSG_RESULT([no, needs to fallback to pthread_mutex])
412                         AC_MSG_ERROR([pthread_rwlock_t not available])])])
413 echo "-------------------------------------------------------------------------------"
414
415
416 AC_CONFIG_FILES([
417         Makefile
418         ixml/Makefile
419         ixml/doc/Makefile
420         threadutil/Makefile
421         upnp/Makefile
422         upnp/doc/Makefile
423         upnp/sample/Makefile
424         docs/dist/Makefile
425         libupnp.pc
426         ])
427
428
429 AC_OUTPUT
430