Initial support for w32.
[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.h])
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 # Don't default to build static libs.
98 LT_PREREQ([2.2.6])
99 LT_INIT([win32-dll disable-static])
100 LT_LANG([Windows Resource])
101
102 # For now we hardcode the use of version scripts.  It would be better
103 # to write a test for this or even implement this within libtool.
104 have_ld_version_script=no
105 case "${host}" in
106     *-*-linux*)
107         have_ld_version_script=yes
108         ;;
109     *-*-gnu*)
110         have_ld_version_script=yes
111         ;;
112     *-apple-darwin*)
113         AC_DEFINE(_XOPEN_SOURCE, 500, Activate POSIX interface on MacOS X)
114         ;;
115 esac
116
117 AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
118
119 have_w32_system=no
120 have_w32ce_system=no
121 have_w64_system=no
122 case "${host}" in
123     x86_64-*mingw32*)
124         have_w64_system=yes
125         ;;
126     *-mingw32ce*)
127         have_w32ce_system=yes
128         ;;
129 esac
130 case "${host}" in
131     *-mingw32ce*|*-mingw32*)
132         have_w32_system=yes
133         ;;
134     *)
135         ;;
136 esac
137
138 if test "$have_w32_system" = yes; then
139    AC_DEFINE(HAVE_W32_SYSTEM,1,
140              [Defined if we run on any kind of W32 API based system])
141    ACSUBST
142 fi
143 AM_CONDITIONAL(HAVE_W32_SYSTEM, test "$have_w32_system" = yes)
144
145 if test "$have_w64_system" = yes; then
146    AC_DEFINE(HAVE_W64_SYSTEM,1,
147              [Defined if we run on a 64 bit W32 API based system])
148 fi
149 AM_CONDITIONAL(HAVE_W64_SYSTEM, test "$have_w64_system" = yes)
150
151 # Checks for libraries.
152
153 if test "$have_w32_system" = no; then
154   have_pthread=no
155   AC_CHECK_LIB(pthread,pthread_create,have_pthread=yes)
156   if test "$have_pthread" = yes; then
157     AC_DEFINE(HAVE_PTHREAD, ,[Define if we have pthread.])
158   fi
159 fi
160
161 NETLIBS=
162 if test "$have_w32_system" = yes; then
163    if test "$have_w32ce_system" = yes; then
164      NETLIBS="-lws2 $NETLIBS"
165    else
166      # FIXME: Check why we need to use ws2_32 and document that.
167      NETLIBS="-lws2_32 $NETLIBS"
168    fi
169 fi
170 AC_SUBST(NETLIBS)
171
172
173 # Checks for header files.
174 AC_CHECK_HEADERS([sys/socket.h])
175
176 # Checks for typedefs, structures, and compiler characteristics.
177 AC_TYPE_PID_T
178 AC_TYPE_SIZE_T
179 AC_TYPE_SSIZE_T
180
181 # Generate values for the DLL version info
182 if test "$have_w32_system" = yes; then
183     BUILD_TIMESTAMP=`date --iso-8601=minutes`
184     changequote(,)dnl
185     BUILD_FILEVERSION=`echo "$VERSION" | sed 's/\([0-9.]*\).*/\1./;s/\./,/g'`
186     changequote([,])dnl
187     BUILD_FILEVERSION="${BUILD_FILEVERSION}${BUILD_REVISION}"
188 fi
189 AC_SUBST(BUILD_REVISION)
190 AC_SUBST(BUILD_TIMESTAMP)
191 AC_SUBST(BUILD_FILEVERSION)
192
193 # Substitution used for npth-config
194 NPTH_CONFIG_LIBS="-lposix -lrt"
195 NPTH_CONFIG_CFLAGS=""
196 NPTH_CONFIG_HOST="$host"
197 AC_SUBST(NPTH_CONFIG_API_VERSION)
198 AC_SUBST(NPTH_CONFIG_LIBS)
199 AC_SUBST(NPTH_CONFIG_CFLAGS)
200 AC_SUBST(NPTH_CONFIG_HOST)
201
202 run_tests="yes"
203 AC_ARG_ENABLE(tests,
204   AC_HELP_STRING([--disable-tests], [disable tests]),
205          run_tests=$enableval)
206 AM_CONDITIONAL(RUN_TESTS, test "$run_tests" = "yes")
207
208 # Last check.
209 die=no
210 if test "$have_w32_system" = no; then
211   if test "$have_pthread" = "no"; then
212      die=yes
213      AC_MSG_NOTICE([[
214 ***
215 *** You need Pthread to build this program.
216 *** Normally, this library comes with your system.  On Windows, you can use:
217 ***   http://sourceware.org/pthreads-win32/
218 ***]])
219   fi
220 fi
221
222 if test "$die" = "yes"; then
223     AC_MSG_ERROR([[
224 ***
225 *** Required libraries not found. Please consult the above messages
226 *** and install them before running configure again.
227 ***]])
228 fi
229
230 # Checks for library functions.
231 AC_CHECK_FUNCS([select])
232
233 AC_CONFIG_FILES([Makefile src/Makefile w32/Makefile tests/Makefile])
234 AC_CONFIG_FILES(src/npth-config, chmod +x src/npth-config)
235 AC_CONFIG_FILES(w32/npth-config, chmod +x w32/npth-config)
236 AC_OUTPUT