Include sys/select.h if needed.
[npth.git] / configure.ac
1 # configure.ac                                          -*- Autoconf -*-
2 # Copyright (C) 2011 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 # Version number: Remember to change it immediately *after* a release.
34 #                 Make sure to run  "svn up" and "./autogen.sh --force"
35 #                  before a "make dist".  See below for the LT versions.
36 #
37 # The SVN version is usually the next intended release version with
38 # the string "-svnNNN" appended.  The reason for this is that tests for a
39 # specific feature can already be done under the assumption that the
40 # SVN version is the most recent one in a branch.  To disable the SVN
41 # version for the real release, set the my_issvn macro to no.
42 m4_define(my_version, [0.0])
43 m4_define(my_issvn, [yes])
44
45 m4_define([git_revision], m4_esyscmd([git branch -v 2>/dev/null \
46           | awk '/^\* / {printf "%s",$3}']))
47 AC_INIT([npth],
48         [my_version[]m4_if(my_issvn,[yes],[-git[]git_revision])],
49         [gnupg-devel@gnupg.org])
50
51 # LT Version numbers, remember to change them just *before* a release.
52 #   (Code changed:                      REVISION++)
53 #   (Interfaces added/removed/changed:  CURRENT++, REVISION=0)
54 #   (Interfaces added:                  AGE++)
55 #   (Interfaces removed/changed:        AGE=0)
56 #
57 LIBNPTH_LT_CURRENT=0
58 LIBNPTH_LT_AGE=0
59 LIBNPTH_LT_REVISION=0
60
61 # If the API is changed in an incompatible way: increment the next counter.
62 NPTH_CONFIG_API_VERSION=1
63 ##############################################
64
65 m4_define([git_brevis],m4_esyscmd(printf "%u" 0x[]m4_substr(git_revision,0,4)))
66 BUILD_REVISION=m4_if(git_revision,[],[svn_revision],[git_brevis])
67 PACKAGE=$PACKAGE_NAME
68 VERSION=$PACKAGE_VERSION
69
70 AC_CONFIG_SRCDIR([src/npth.c])
71 AC_CONFIG_HEADERS([config.h])
72 AC_CONFIG_MACRO_DIR([m4])
73 AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
74 AM_MAINTAINER_MODE
75 AC_CANONICAL_HOST
76
77 # Enable GNU extensions on systems that have them.
78 AC_GNU_SOURCE
79
80 AH_VERBATIM([_REENTRANT],
81 [#ifndef _REENTRANT
82 # define _REENTRANT 1
83 #endif])
84
85 # Checks for programs.
86 AC_PROG_CC
87
88 AC_SUBST(LIBNPTH_LT_CURRENT)
89 AC_SUBST(LIBNPTH_LT_AGE)
90 AC_SUBST(LIBNPTH_LT_REVISION)
91
92 AC_SUBST(PACKAGE)
93 AC_SUBST(VERSION)
94 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
95 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
96
97 #
98 # Generate values for the DLL version info
99 #
100 if test "$have_w32_system" = yes; then
101     BUILD_TIMESTAMP=`date --iso-8601=minutes`
102     changequote(,)dnl
103     BUILD_FILEVERSION=`echo "$VERSION" | sed 's/\([0-9.]*\).*/\1./;s/\./,/g'`
104     changequote([,])dnl
105     BUILD_FILEVERSION="${BUILD_FILEVERSION}${BUILD_REVISION}"
106 fi
107 AC_SUBST(BUILD_REVISION)
108 AC_SUBST(BUILD_TIMESTAMP)
109 AC_SUBST(BUILD_FILEVERSION)
110
111 run_tests="yes"
112 AC_ARG_ENABLE(tests,
113   AC_HELP_STRING([--disable-tests], [disable tests]),
114          run_tests=$enableval)
115 AM_CONDITIONAL(RUN_TESTS, test "$run_tests" = "yes")
116
117
118 # Don't default to build static libs.
119 LT_PREREQ([2.2.6])
120 LT_INIT([win32-dll disable-static])
121 LT_LANG([Windows Resource])
122
123
124 # For now we hardcode the use of version scripts.  It would be better
125 # to write a test for this or even implement this within libtool.
126 have_ld_version_script=no
127 case "${host}" in
128     *-*-linux*)
129         have_ld_version_script=yes
130         ;;
131     *-*-gnu*)
132         have_ld_version_script=yes
133         ;;
134     *-apple-darwin*)
135         AC_DEFINE(_XOPEN_SOURCE, 500, Activate POSIX interface on MacOS X)
136         ;;
137 esac
138
139 AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
140
141 # Set some default values
142 config_libs="-lnpth"
143 have_w32_system=no
144 have_w32ce_system=no
145 have_w64_system=no
146
147 # Define OS macros
148 case "${host}" in
149     x86_64-*mingw32*)
150         have_w64_system=yes
151         ;;
152     *-mingw32ce*)
153         have_w32ce_system=yes
154         ;;
155 esac
156 case "${host}" in
157     *-mingw32ce*|*-mingw32*)
158         have_w32_system=yes
159         ;;
160     *)
161         ;;
162 esac
163
164 if test "$have_w32_system" = yes; then
165    AC_DEFINE(HAVE_W32_SYSTEM,1,
166              [Defined if we run on any kind of W32 API based system])
167    ACSUBST
168 fi
169 AM_CONDITIONAL(HAVE_W32_SYSTEM, test "$have_w32_system" = yes)
170
171 if test "$have_w64_system" = yes; then
172    AC_DEFINE(HAVE_W64_SYSTEM,1,
173              [Defined if we run on a 64 bit W32 API based system])
174 fi
175 AM_CONDITIONAL(HAVE_W64_SYSTEM, test "$have_w64_system" = yes)
176
177
178 #
179 # Checks for header files.
180 #
181 # fixme: For what do we need the sys/socket test?
182 AC_CHECK_HEADERS([sys/socket.h sys/select.h])
183 INSERT_SYS_SELECT_H=
184 if test x"$ac_cv_header_sys_select_h" = xyes; then
185   INSERT_SYS_SELECT_H="include <sys/select.h>"
186 fi
187 AC_SUBST(INSERT_SYS_SELECT_H)
188
189
190 #
191 # Checks for typedefs, structures, and compiler characteristics.
192 #
193 AC_TYPE_PID_T
194 AC_TYPE_SIZE_T
195 AC_TYPE_SSIZE_T
196
197
198 #
199 # Checks for libraries and functions.
200 #
201 if test "$have_w32_system" = no; then
202   AC_SEARCH_LIBS([pthread_create],[pthread])
203   case "x$ac_cv_search_pthread_create" in
204     xno)
205       have_pthread=no
206       ;;
207     xnone\ required)
208       have_pthread=yes
209       ;;
210     *)
211       have_pthread=yes
212       config_libs="$config_libs $ac_cv_search_pthread_create"
213       ;;
214   esac
215   if test "$have_pthread" != no; then
216     AC_DEFINE(HAVE_PTHREAD,1,[Define if we have pthread.])
217     AC_CHECK_FUNCS([pthread_tryjoin_np pthread_setname_np pthread_getname_np])
218   fi
219 fi
220
221 NETLIBS=
222 if test "$have_w32_system" = yes; then
223    if test "$have_w32ce_system" = yes; then
224      NETLIBS="-lws2 $NETLIBS"
225    else
226      # FIXME: Check why we need to use ws2_32 and document that.
227      NETLIBS="-lws2_32 $NETLIBS"
228    fi
229 fi
230 AC_SUBST(NETLIBS)
231
232 AC_CHECK_FUNCS([select])
233
234 AC_SEARCH_LIBS([clock_gettime],[rt posix4])
235 if test "x$ac_cv_search_clock_gettime" != no; then
236     AC_DEFINE(HAVE_CLOCK_GETTIME,1,
237               [Define to 1 if you have the `clock_gettime' function.])
238 fi
239
240
241 #
242 # Substitutions to set generated files in a Emacs buffer to read-only.
243 #
244 AC_SUBST(emacs_local_vars_begin, ['Local Variables:'])
245 AC_SUBST(emacs_local_vars_read_only, ['buffer-read-only: t'])
246 AC_SUBST(emacs_local_vars_end, ['End:'])
247
248
249 #
250 # Substitution used for npth-config
251 #
252 NPTH_CONFIG_LIBS="$config_libs"
253 NPTH_CONFIG_CFLAGS=""
254 NPTH_CONFIG_HOST="$host"
255 AC_SUBST(NPTH_CONFIG_API_VERSION)
256 AC_SUBST(NPTH_CONFIG_LIBS)
257 AC_SUBST(NPTH_CONFIG_CFLAGS)
258 AC_SUBST(NPTH_CONFIG_HOST)
259
260 #
261 # Last check.
262 #
263 die=no
264 if test "$have_w32_system" = no; then
265   if test "$have_pthread" = "no"; then
266      die=yes
267      AC_MSG_NOTICE([[
268 ***
269 *** You need Pthread to build this program.
270 *** Normally, this library comes with your system.  On Windows, you can use:
271 ***   http://sourceware.org/pthreads-win32/
272 ***]])
273   fi
274 fi
275
276 if test "$die" = "yes"; then
277     AC_MSG_ERROR([[
278 ***
279 *** Required libraries not found. Please consult the above messages
280 *** and install them before running configure again.
281 ***]])
282 fi
283
284 #
285 # Write output
286 #
287 AC_CONFIG_FILES([Makefile
288 src/npth.h
289 src/Makefile
290 w32/Makefile
291 tests/Makefile])
292 AC_CONFIG_FILES(src/npth-config, chmod +x src/npth-config)
293 AC_CONFIG_FILES(w32/npth-config, chmod +x w32/npth-config)
294 AC_OUTPUT