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