Move helper scripts to build-aux.
[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_AUX_DIR([build-aux])
74 AC_CONFIG_SRCDIR([src/npth.c])
75 AC_CONFIG_HEADERS([config.h])
76 AC_CONFIG_MACRO_DIR([m4])
77 AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
78 AM_MAINTAINER_MODE
79 AC_CANONICAL_HOST
80 AM_SILENT_RULES
81
82 # Enable GNU extensions on systems that have them.
83 AC_GNU_SOURCE
84
85 AH_VERBATIM([_REENTRANT],
86 [#ifndef _REENTRANT
87 # define _REENTRANT 1
88 #endif])
89
90 # Checks for programs.
91 AC_PROG_CC
92
93 AC_SUBST(LIBNPTH_LT_CURRENT)
94 AC_SUBST(LIBNPTH_LT_AGE)
95 AC_SUBST(LIBNPTH_LT_REVISION)
96
97 AC_SUBST(PACKAGE)
98 AC_SUBST(VERSION)
99 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
100 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
101
102 run_tests="yes"
103 AC_ARG_ENABLE(tests,
104   AC_HELP_STRING([--disable-tests], [disable tests]),
105          run_tests=$enableval)
106 AM_CONDITIONAL(RUN_TESTS, test "$run_tests" = "yes")
107
108
109 # Don't default to build static libs.
110 LT_PREREQ([2.2.6])
111 LT_INIT([win32-dll disable-static])
112 LT_LANG([Windows Resource])
113
114
115 # For now we hardcode the use of version scripts.  It would be better
116 # to write a test for this or even implement this within libtool.
117 have_ld_version_script=no
118 case "${host}" in
119     *-*-linux*)
120         have_ld_version_script=yes
121         ;;
122     *-*-gnu*)
123         have_ld_version_script=yes
124         ;;
125     *-apple-darwin*)
126         AC_DEFINE(_XOPEN_SOURCE, 500, Activate POSIX interface on MacOS X)
127         ;;
128 esac
129
130 AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
131
132 # Set some default values
133 config_libs="-lnpth"
134 have_w32_system=no
135 have_w32ce_system=no
136 have_w64_system=no
137
138 # Define OS macros
139 case "${host}" in
140     x86_64-*mingw32*)
141         have_w64_system=yes
142         ;;
143     *-mingw32ce*)
144         have_w32ce_system=yes
145         ;;
146 esac
147 case "${host}" in
148     *-mingw32ce*|*-mingw32*)
149         have_w32_system=yes
150         ;;
151     *)
152         ;;
153 esac
154
155 if test "$have_w32_system" = yes; then
156    AC_DEFINE(HAVE_W32_SYSTEM,1,
157              [Defined if we run on any kind of W32 API based system])
158 fi
159 AM_CONDITIONAL(HAVE_W32_SYSTEM, test "$have_w32_system" = yes)
160
161 if test "$have_w64_system" = yes; then
162    AC_DEFINE(HAVE_W64_SYSTEM,1,
163              [Defined if we run on a 64 bit W32 API based system])
164 fi
165 AM_CONDITIONAL(HAVE_W64_SYSTEM, test "$have_w64_system" = yes)
166
167 #
168 # Generate values for the DLL version info
169 #
170 if test "$have_w32_system" = yes; then
171     BUILD_TIMESTAMP=`date --iso-8601=minutes`
172     BUILD_ISODATE=`date --iso-8601`
173     changequote(,)dnl
174     BUILD_FILEVERSION=`echo "$VERSION" | sed 's/\([0-9.]*\).*/\1./;s/\./,/g'`
175     changequote([,])dnl
176     BUILD_FILEVERSION="${BUILD_FILEVERSION}git_revision_dec"
177 fi
178 AC_SUBST(BUILD_TIMESTAMP)
179 AC_SUBST(BUILD_ISODATE)
180 AC_SUBST(BUILD_FILEVERSION)
181
182
183 #
184 # Checks for header files.
185 #
186 # fixme: For what do we need the sys/socket test?
187 AC_CHECK_HEADERS([sys/socket.h sys/select.h unistd.h sys/time.h time.h \
188                   signal.h])
189 INSERT_SYS_SELECT_H=
190 if test x"$ac_cv_header_sys_select_h" = xyes; then
191   INSERT_SYS_SELECT_H="include <sys/select.h>"
192 fi
193 AC_SUBST(INSERT_SYS_SELECT_H)
194
195 if test x"$ac_cv_header_sys_time_h" = xyes; then
196   INSERT_SYS_TIME_H="include <sys/time.h>"
197 fi
198 AC_SUBST(INSERT_SYS_TIME_H)
199
200 if test x"$ac_cv_header_time_h" = xyes; then
201   INSERT_TIME_H="include <time.h>"
202 fi
203 AC_SUBST(INSERT_TIME_H)
204
205 if test x"$ac_cv_header_signal_h" = xyes; then
206   INSERT_SIGNAL_H="include <signal.h>"
207 fi
208 AC_SUBST(INSERT_SIGNAL_H)
209
210
211 # Some systems lack socklen_t - provide a replacement.
212 gl_TYPE_SOCKLEN_T
213 case "${host}" in
214   *-*-mingw32*)
215     # socklen_t may or may not be defined depending on what headers
216     # are included.  To be safe we use int as this is the actual type.
217     INSERT_SOCKLEN_T="define _npth_socklen_t int"
218     ;;
219   *)
220     if test ".$gl_cv_socklen_t_equiv" = "."; then
221       INSERT_SOCKLEN_T="define _npth_socklen_t socklen_t"
222     else
223       INSERT_SOCKLEN_T="define _npth_socklen_t ${gl_cv_socklen_t_equiv}"
224     fi
225 esac
226 AC_SUBST(INSERT_SOCKLEN_T)
227
228
229 #
230 # Checks for typedefs, structures, and compiler characteristics.
231 #
232 AC_TYPE_PID_T
233 AC_TYPE_SIZE_T
234 AC_TYPE_SSIZE_T
235
236
237 #
238 # Checks for libraries and functions.
239 #
240 if test "$have_w32_system" = no; then
241   AC_SEARCH_LIBS([pthread_create],[pthread])
242   case "x$ac_cv_search_pthread_create" in
243     xno)
244       have_pthread=no
245       ;;
246     xnone\ required)
247       have_pthread=yes
248       ;;
249     *)
250       have_pthread=yes
251       config_libs="$config_libs $ac_cv_search_pthread_create"
252       ;;
253   esac
254   if test "$have_pthread" != no; then
255     AC_DEFINE(HAVE_PTHREAD,1,[Define if we have pthread.])
256     AC_CHECK_FUNCS([pthread_tryjoin_np pthread_setname_np pthread_getname_np])
257     AC_CHECK_FUNCS([pthread_mutex_timedlock])
258     AC_CHECK_FUNCS([pthread_rwlock_rdlock pthread_rwlock_wrlock])
259     AC_CHECK_FUNCS([pthread_rwlock_timedrdlock pthread_rwlock_timedwrlock])
260     AC_CHECK_FUNCS([pthread_rwlock_tryrdlock pthread_rwlock_trywrlock])
261     AC_CHECK_FUNCS([pthread_atfork])
262   fi
263 fi
264
265 AC_CHECK_FUNCS([select pselect gettimeofday])
266
267 npth_LIBSOCKET
268 config_libs="$config_libs $LIBSOCKET"
269
270 AC_SEARCH_LIBS([clock_gettime],[rt posix4])
271 if test "x$ac_cv_search_clock_gettime" != no; then
272     AC_DEFINE(HAVE_CLOCK_GETTIME,1,
273               [Define to 1 if you have the `clock_gettime' function.])
274 fi
275
276
277 #
278 # Set NETLIBS
279 #
280 if test "$have_w32ce_system" = yes; then
281    NETLIBS="-lws2 $NETLIBS"
282 elif test "$have_w32_system" = yes; then
283    NETLIBS="-lws2_32 $NETLIBS"
284 fi
285 AC_SUBST(NETLIBS)
286
287
288 #
289 # Substitutions to set generated files in a Emacs buffer to read-only.
290 #
291 AC_SUBST(emacs_local_vars_begin, [['Local][ ][Variables:']])
292 AC_SUBST(emacs_local_vars_read_only, ['buffer-read-only: t'])
293 AC_SUBST(emacs_local_vars_end, ['End:'])
294
295
296 #
297 # Substitution used for npth-config
298 #
299 NPTH_CONFIG_LIBS="$config_libs"
300 NPTH_CONFIG_CFLAGS=""
301 NPTH_CONFIG_HOST="$host"
302 AC_SUBST(NPTH_CONFIG_API_VERSION)
303 AC_SUBST(NPTH_CONFIG_LIBS)
304 AC_SUBST(NPTH_CONFIG_CFLAGS)
305 AC_SUBST(NPTH_CONFIG_HOST)
306
307 #
308 # Last check.
309 #
310 die=no
311 if test "$have_w32_system" = no; then
312   if test "$have_pthread" = "no"; then
313      die=yes
314      AC_MSG_NOTICE([[
315 ***
316 *** You need Pthread to build this program.
317 *** Normally, this library comes with your system.  On Windows, you can use:
318 ***   http://sourceware.org/pthreads-win32/
319 ***]])
320   fi
321 fi
322
323 if test "$die" = "yes"; then
324     AC_MSG_ERROR([[
325 ***
326 *** Required libraries not found. Please consult the above messages
327 *** and install them before running configure again.
328 ***]])
329 fi
330
331 #
332 # Write output
333 #
334 AC_CONFIG_FILES([Makefile
335 src/npth.h
336 src/Makefile
337 w32/Makefile
338 tests/Makefile])
339 AC_CONFIG_FILES(npth-config, chmod +x 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 "