Add configure option --enable-silent-rules.
[npth.git] / configure.ac
1 # configure.ac                                          -*- Autoconf -*-
2 # Copyright (C) 2011, 2012 g10 Code GmbH
3 # This file is part of NPTH.
4 #
5 # NPTH is free software; you can redistribute it and/or modify it
6 # under the terms of either
7 #
8 # - the GNU Lesser General Public License as published by the Free
9 # Software Foundation; either version 3 of the License, or (at
10 # your option) any later version.
11 #
12 # or
13 #
14 # - the GNU General Public License as published by the Free
15 # Software Foundation; either version 2 of the License, or (at
16 # your option) any later version.
17 #
18 # or both in parallel, as here.
19 #
20 # NPTH is distributed in the hope that it will be useful, but WITHOUT
21 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
22 # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
23 # Public License for more details.
24 #
25 # You should have received a copy of the GNU Lesser General Public
26 # License along with this program; if not, see <http://www.gnu.org/licenses/>.
27
28 # Process this file with autoconf to produce a configure script.
29
30 AC_PREREQ([2.67])
31 min_automake_version="1.11"
32
33 # To build a release you need to create a tag with the version number
34 # (git tag -s npth-n.m) and run "./autogen.sh --force".  Please bump
35 # the version number immediately after the release and do another
36 # commit and push so that the git magic is able to work.
37 # See below for the LT versions.
38 m4_define(my_version, [0.92])
39
40 # Below is m4 magic to extract and compute the git revision number,
41 # the decimalized short revision number, a beta version string and a
42 # flag indicating a development version (my_isgit). The latter works
43 # by requiring the final tag in the repository.
44 m4_define([git_revision],
45           m4_esyscmd([git rev-parse --short HEAD | tr -d '\n\r']))
46 m4_define([git_revision_dec],
47           m4_esyscmd_s([echo $((0x$(echo ]git_revision[|head -c 4)))]))
48 m4_define([git_betastring],
49           m4_esyscmd_s([git describe --match 'npth-[0-9].*[0-9]' --long|\
50                         awk -F- '$3!=0{print"-beta"$3}']))
51 m4_define([my_isgit],m4_if(git_betastring,[],[no],[yes]))
52 m4_define([my_full_version],[my_version[]git_betastring])
53
54 AC_INIT([npth],[my_full_version],[gnupg-devel@gnupg.org])
55
56 # LT Version numbers, remember to change them just *before* a release.
57 #   (Code changed:                      REVISION++)
58 #   (Interfaces added/removed/changed:  CURRENT++, REVISION=0)
59 #   (Interfaces added:                  AGE++)
60 #   (Interfaces removed/changed:        AGE=0)
61 #
62 LIBNPTH_LT_CURRENT=0
63 LIBNPTH_LT_AGE=0
64 LIBNPTH_LT_REVISION=2
65
66 # If the API is changed in an incompatible way: increment the next counter.
67 NPTH_CONFIG_API_VERSION=1
68 ##############################################
69
70 PACKAGE=$PACKAGE_NAME
71 VERSION=$PACKAGE_VERSION
72
73 AC_CONFIG_SRCDIR([src/npth.c])
74 AC_CONFIG_HEADERS([config.h])
75 AC_CONFIG_MACRO_DIR([m4])
76 AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
77 AM_MAINTAINER_MODE
78 AC_CANONICAL_HOST
79
80 # Enable GNU extensions on systems that have them.
81 AC_GNU_SOURCE
82 AM_SILENT_RULES
83
84 AH_VERBATIM([_REENTRANT],
85 [#ifndef _REENTRANT
86 # define _REENTRANT 1
87 #endif])
88
89 # Checks for programs.
90 AC_PROG_CC
91
92 AC_SUBST(LIBNPTH_LT_CURRENT)
93 AC_SUBST(LIBNPTH_LT_AGE)
94 AC_SUBST(LIBNPTH_LT_REVISION)
95
96 AC_SUBST(PACKAGE)
97 AC_SUBST(VERSION)
98 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
99 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
100
101 run_tests="yes"
102 AC_ARG_ENABLE(tests,
103   AC_HELP_STRING([--disable-tests], [disable tests]),
104          run_tests=$enableval)
105 AM_CONDITIONAL(RUN_TESTS, test "$run_tests" = "yes")
106
107
108 # Don't default to build static libs.
109 LT_PREREQ([2.2.6])
110 LT_INIT([win32-dll disable-static])
111 LT_LANG([Windows Resource])
112
113
114 # For now we hardcode the use of version scripts.  It would be better
115 # to write a test for this or even implement this within libtool.
116 have_ld_version_script=no
117 case "${host}" in
118     *-*-linux*)
119         have_ld_version_script=yes
120         ;;
121     *-*-gnu*)
122         have_ld_version_script=yes
123         ;;
124     *-apple-darwin*)
125         AC_DEFINE(_XOPEN_SOURCE, 500, Activate POSIX interface on MacOS X)
126         ;;
127 esac
128
129 AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
130
131 # Set some default values
132 config_libs="-lnpth"
133 have_w32_system=no
134 have_w32ce_system=no
135 have_w64_system=no
136
137 # Define OS macros
138 case "${host}" in
139     x86_64-*mingw32*)
140         have_w64_system=yes
141         ;;
142     *-mingw32ce*)
143         have_w32ce_system=yes
144         ;;
145 esac
146 case "${host}" in
147     *-mingw32ce*|*-mingw32*)
148         have_w32_system=yes
149         ;;
150     *)
151         ;;
152 esac
153
154 if test "$have_w32_system" = yes; then
155    AC_DEFINE(HAVE_W32_SYSTEM,1,
156              [Defined if we run on any kind of W32 API based system])
157 fi
158 AM_CONDITIONAL(HAVE_W32_SYSTEM, test "$have_w32_system" = yes)
159
160 if test "$have_w64_system" = yes; then
161    AC_DEFINE(HAVE_W64_SYSTEM,1,
162              [Defined if we run on a 64 bit W32 API based system])
163 fi
164 AM_CONDITIONAL(HAVE_W64_SYSTEM, test "$have_w64_system" = yes)
165
166 #
167 # Generate values for the DLL version info
168 #
169 if test "$have_w32_system" = yes; then
170     BUILD_TIMESTAMP=`date --iso-8601=minutes`
171     BUILD_ISODATE=`date --iso-8601`
172     changequote(,)dnl
173     BUILD_FILEVERSION=`echo "$VERSION" | sed 's/\([0-9.]*\).*/\1./;s/\./,/g'`
174     changequote([,])dnl
175     BUILD_FILEVERSION="${BUILD_FILEVERSION}git_revision_dec"
176 fi
177 AC_SUBST(BUILD_TIMESTAMP)
178 AC_SUBST(BUILD_ISODATE)
179 AC_SUBST(BUILD_FILEVERSION)
180
181
182 #
183 # Checks for header files.
184 #
185 # fixme: For what do we need the sys/socket test?
186 AC_CHECK_HEADERS([sys/socket.h sys/select.h unistd.h sys/time.h time.h \
187                   signal.h])
188 INSERT_SYS_SELECT_H=
189 if test x"$ac_cv_header_sys_select_h" = xyes; then
190   INSERT_SYS_SELECT_H="include <sys/select.h>"
191 fi
192 AC_SUBST(INSERT_SYS_SELECT_H)
193
194 if test x"$ac_cv_header_sys_time_h" = xyes; then
195   INSERT_SYS_TIME_H="include <sys/time.h>"
196 fi
197 AC_SUBST(INSERT_SYS_TIME_H)
198
199 if test x"$ac_cv_header_time_h" = xyes; then
200   INSERT_TIME_H="include <time.h>"
201 fi
202 AC_SUBST(INSERT_TIME_H)
203
204 if test x"$ac_cv_header_signal_h" = xyes; then
205   INSERT_SIGNAL_H="include <signal.h>"
206 fi
207 AC_SUBST(INSERT_SIGNAL_H)
208
209
210 # Some systems lack socklen_t - provide a replacement.
211 gl_TYPE_SOCKLEN_T
212 case "${host}" in
213   *-*-mingw32*)
214     # socklen_t may or may not be defined depending on what headers
215     # are included.  To be safe we use int as this is the actual type.
216     INSERT_SOCKLEN_T="define _npth_socklen_t int"
217     ;;
218   *)
219     if test ".$gl_cv_socklen_t_equiv" = "."; then
220       INSERT_SOCKLEN_T="define _npth_socklen_t socklen_t"
221     else
222       INSERT_SOCKLEN_T="define _npth_socklen_t ${gl_cv_socklen_t_equiv}"
223     fi
224 esac
225 AC_SUBST(INSERT_SOCKLEN_T)
226
227
228 #
229 # Checks for typedefs, structures, and compiler characteristics.
230 #
231 AC_TYPE_PID_T
232 AC_TYPE_SIZE_T
233 AC_TYPE_SSIZE_T
234
235
236 #
237 # Checks for libraries and functions.
238 #
239 if test "$have_w32_system" = no; then
240   AC_SEARCH_LIBS([pthread_create],[pthread])
241   case "x$ac_cv_search_pthread_create" in
242     xno)
243       have_pthread=no
244       ;;
245     xnone\ required)
246       have_pthread=yes
247       ;;
248     *)
249       have_pthread=yes
250       config_libs="$config_libs $ac_cv_search_pthread_create"
251       ;;
252   esac
253   if test "$have_pthread" != no; then
254     AC_DEFINE(HAVE_PTHREAD,1,[Define if we have pthread.])
255     AC_CHECK_FUNCS([pthread_tryjoin_np pthread_setname_np pthread_getname_np])
256     AC_CHECK_FUNCS([pthread_mutex_timedlock])
257     AC_CHECK_FUNCS([pthread_rwlock_rdlock pthread_rwlock_wrlock])
258     AC_CHECK_FUNCS([pthread_rwlock_timedrdlock pthread_rwlock_timedwrlock])
259     AC_CHECK_FUNCS([pthread_rwlock_tryrdlock pthread_rwlock_trywrlock])
260     AC_CHECK_FUNCS([pthread_atfork])
261   fi
262 fi
263
264 AC_CHECK_FUNCS([select pselect gettimeofday])
265
266 npth_LIBSOCKET
267 config_libs="$config_libs $LIBSOCKET"
268
269 AC_SEARCH_LIBS([clock_gettime],[rt posix4])
270 if test "x$ac_cv_search_clock_gettime" != no; then
271     AC_DEFINE(HAVE_CLOCK_GETTIME,1,
272               [Define to 1 if you have the `clock_gettime' function.])
273 fi
274
275
276 #
277 # Set NETLIBS
278 #
279 if test "$have_w32ce_system" = yes; then
280    NETLIBS="-lws2 $NETLIBS"
281 elif test "$have_w32_system" = yes; then
282    NETLIBS="-lws2_32 $NETLIBS"
283 fi
284 AC_SUBST(NETLIBS)
285
286
287 #
288 # Substitutions to set generated files in a Emacs buffer to read-only.
289 #
290 AC_SUBST(emacs_local_vars_begin, [['Local][ ][Variables:']])
291 AC_SUBST(emacs_local_vars_read_only, ['buffer-read-only: t'])
292 AC_SUBST(emacs_local_vars_end, ['End:'])
293
294
295 #
296 # Substitution used for npth-config
297 #
298 NPTH_CONFIG_LIBS="$config_libs"
299 NPTH_CONFIG_CFLAGS=""
300 NPTH_CONFIG_HOST="$host"
301 AC_SUBST(NPTH_CONFIG_API_VERSION)
302 AC_SUBST(NPTH_CONFIG_LIBS)
303 AC_SUBST(NPTH_CONFIG_CFLAGS)
304 AC_SUBST(NPTH_CONFIG_HOST)
305
306 #
307 # Last check.
308 #
309 die=no
310 if test "$have_w32_system" = no; then
311   if test "$have_pthread" = "no"; then
312      die=yes
313      AC_MSG_NOTICE([[
314 ***
315 *** You need Pthread to build this program.
316 *** Normally, this library comes with your system.  On Windows, you can use:
317 ***   http://sourceware.org/pthreads-win32/
318 ***]])
319   fi
320 fi
321
322 if test "$die" = "yes"; then
323     AC_MSG_ERROR([[
324 ***
325 *** Required libraries not found. Please consult the above messages
326 *** and install them before running configure again.
327 ***]])
328 fi
329
330 #
331 # Write output
332 #
333 AC_CONFIG_FILES([Makefile
334 src/npth.h
335 src/Makefile
336 w32/Makefile
337 tests/Makefile])
338 AC_CONFIG_FILES(src/npth-config, chmod +x src/npth-config)
339 AC_CONFIG_FILES(w32/npth-config, chmod +x w32/npth-config)
340 AC_OUTPUT
341
342 echo "
343         $PACKAGE_NAME-$PACKAGE_VERSION prepared for make
344
345         Revision: git_revision  (git_revision_dec)
346         Platform: $host
347 "