blob: 479ae3b4def7196533447e56d0a242c57a6483b6 [file] [log] [blame]
jjako52c62342003-01-28 21:58:05 +00001# Process this file with autoconf to produce a configure script.
Pau Espin Pedrold0ba6642019-06-27 17:07:45 +02002AC_INIT([osmo-ggsn],[m4_esyscmd(./git-version-gen .tarball-version)],[osmocom-net-gprs@lists.osmocom.org])
jjako52c62342003-01-28 21:58:05 +00003AC_CONFIG_SRCDIR([gtp/gtp.c])
Pau Espin Pedrol1eeb1132019-06-27 17:28:51 +02004AC_CONFIG_HEADERS([config.h])
jjako52c24142002-12-16 13:33:51 +00005
Neels Hofmeyree9d34a2016-10-01 00:51:13 +02006dnl *This* is the root dir, even if an install-sh exists in ../ or ../../
7AC_CONFIG_AUX_DIR([.])
8
Harald Welte1d8ffc62017-10-12 19:30:49 +08009AC_CONFIG_TESTDIR(tests)
Jan Engelhardtaab47af2019-08-14 19:22:22 +020010AC_CANONICAL_HOST
jjako77edc822004-09-10 17:19:31 +000011
Oliver Smith349cbfc2021-01-27 17:49:36 +010012CFLAGS="$CFLAGS -std=gnu11"
13
Harald Weltebdca4b72011-11-02 13:11:56 +010014dnl kernel style compile messages
15m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
16
jjako52c62342003-01-28 21:58:05 +000017# Checks for programs.
jjako52c24142002-12-16 13:33:51 +000018AC_PROG_CC
19AC_PROG_INSTALL
jjako52c62342003-01-28 21:58:05 +000020AC_PROG_AWK
21AC_PROG_CPP
Holger Hans Peter Freythere071e302012-11-02 10:00:10 +010022LT_INIT
jjako52c24142002-12-16 13:33:51 +000023
Pau Espin Pedrol8df01fa2020-08-18 12:47:26 +020024dnl patching ${archive_cmds} to affect generation of file "libtool" to fix linking with clang
Eric107c8132020-04-11 01:17:48 +020025AS_CASE(["$LD"],[*clang*],
26 [AS_CASE(["${host_os}"],
27 [*linux*],[archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'])])
28
Neels Hofmeyr38929c92016-10-01 00:51:26 +020029dnl check for pkg-config (explained in detail in libosmocore/configure.ac)
30AC_PATH_PROG(PKG_CONFIG_INSTALLED, pkg-config, no)
31if test "x$PKG_CONFIG_INSTALLED" = "xno"; then
32 AC_MSG_WARN([You need to install pkg-config])
33fi
34PKG_PROG_PKG_CONFIG([0.20])
35
Emmanuel Bretelle2a103682010-09-07 17:01:20 +020036AC_CONFIG_MACRO_DIR([m4])
37AC_CONFIG_LIBOBJ_DIR([lib])
jjako52c62342003-01-28 21:58:05 +000038
jjakoc13c9df2003-07-07 15:15:38 +000039AC_ARG_ENABLE(static-exec,
40 [ --enable-static-exec Enable static linking of executables],
41 [ EXEC_LDFLAGS="-all-static"])
42
43AC_SUBST(EXEC_LDFLAGS)
jjako52c24142002-12-16 13:33:51 +000044
jjakoe31b2402004-12-30 23:07:42 +000045
jjako77edc822004-09-10 17:19:31 +000046case "${host}" in
Pau Espin Pedrol381b7232018-09-10 12:19:45 +020047 i*86-*-linux-gnu*)
Holger Hans Peter Freyther0aa17872012-11-06 14:10:17 +010048 EXEC_LDADD="" ;;
Pau Espin Pedrol381b7232018-09-10 12:19:45 +020049 *solaris*)
jjakoe31b2402004-12-30 23:07:42 +000050 EXEC_LDADD="-lresolv -lsocket -lnsl" ;;
jjako77edc822004-09-10 17:19:31 +000051esac
52
jjakoe31b2402004-12-30 23:07:42 +000053AC_SUBST(EXEC_LDADD)
jjako77edc822004-09-10 17:19:31 +000054
jjako77edc822004-09-10 17:19:31 +000055
jjako52c62342003-01-28 21:58:05 +000056# Checks for libraries.
57# FIXME: Replace `main' with a function in `-le':
jjakoc13c9df2003-07-07 15:15:38 +000058#AC_CHECK_LIB([e], [main])
jjako52c62342003-01-28 21:58:05 +000059# FIXME: Replace `main' with a function in `-lgtp':
jjakoc13c9df2003-07-07 15:15:38 +000060#AC_CHECK_LIB([gtp], [main])
jjako52c62342003-01-28 21:58:05 +000061# FIXME: Replace `main' with a function in `-links':
jjakoc13c9df2003-07-07 15:15:38 +000062#AC_CHECK_LIB([inks], [main])
jjako52c62342003-01-28 21:58:05 +000063
Maxbdc504e2017-08-28 12:15:03 +020064dnl include release helper
65RELMAKE='-include osmo-release.mk'
66AC_SUBST([RELMAKE])
67
Pablo Neira Ayuso466da992016-05-10 19:08:29 +020068dnl GTP Linux kernel dependencies
69AC_ARG_ENABLE([gtp-linux],
70 AS_HELP_STRING([--enable-gtp-linux], [Build GTP tunneling Linux kernel]),
71 [enable_gtp_linux="$enableval"], [enable_gtp_linux="no"])
Pablo Neira Ayuso4b075b62015-11-17 12:22:42 +010072
Pablo Neira Ayuso466da992016-05-10 19:08:29 +020073AS_IF([test "x$enable_gtp_linux" = "xyes"], [
Pau Espin Pedrola06b2d32018-05-03 16:05:28 +020074 PKG_CHECK_MODULES([LIBGTPNL], [libgtpnl >= 1.2.0])
Andreas Schultzc80680a2015-11-17 12:22:44 +010075])
Pablo Neira Ayuso4b075b62015-11-17 12:22:42 +010076
Pablo Neira Ayuso466da992016-05-10 19:08:29 +020077AM_CONDITIONAL([ENABLE_GTP_KERNEL], [test "$enable_gtp_linux" = "yes"])
Pablo Neira Ayuso4b075b62015-11-17 12:22:42 +010078
jjako52c62342003-01-28 21:58:05 +000079# Checks for header files.
jjako52c24142002-12-16 13:33:51 +000080AC_HEADER_STDC
81AC_HEADER_SYS_WAIT
Holger Hans Peter Freyther9c7fd8e2014-12-04 16:32:37 +010082AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h netinet/in.h stdint.h stdlib.h string.h sys/ioctl.h sys/socket.h sys/time.h unistd.h])
jjako52c24142002-12-16 13:33:51 +000083
Pau Espin Pedrol08ca4252019-06-27 18:07:41 +020084# Check for if header. Some versions of linux/if.h fail without sys/socket.h included beforehand:
85# see https://algorithmicallyrandom.blogspot.com/2012/07/error-on-including-include.html
86AC_CHECK_HEADERS([linux/if.h net/if.h], [], [], [#ifdef HAVE_SYS_SOCKET_H
87 # include <sys/socket.h>
88 # endif
89 ])
jjako77edc822004-09-10 17:19:31 +000090
91# Check for tun header
92AC_CHECK_HEADERS([linux/if_tun.h net/if_tun.h])
93
94# Check for netlink and rtnetlink headers
95AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h])
96
97
jjako52c62342003-01-28 21:58:05 +000098# Checks for typedefs, structures, and compiler characteristics.
jjako52c24142002-12-16 13:33:51 +000099AC_C_CONST
jjako52c62342003-01-28 21:58:05 +0000100AC_TYPE_MODE_T
jjako52c24142002-12-16 13:33:51 +0000101AC_TYPE_SIZE_T
102AC_HEADER_TIME
103
jjako77edc822004-09-10 17:19:31 +0000104# check for ifaliasreq
105AC_MSG_CHECKING(whether struct ifaliasreq exist)
106AH_TEMPLATE(HAVE_IFALIASREQ)
107AC_EGREP_HEADER(ifaliasreq, net/if.h,
108[AC_MSG_RESULT(yes)
109 AC_DEFINE([HAVE_IFALIASREQ])],
110 AC_MSG_RESULT(no))
111
112# check for ifreq.ifru_netmask
113AC_MSG_CHECKING(whether struct ifreq.ifru_netmask exist)
114AH_TEMPLATE(HAVE_IFREQ_IFRU_NETMASK)
115AC_EGREP_HEADER(ifru_netmask, linux/if.h,
116[AC_MSG_RESULT(yes)
117 AC_DEFINE([HAVE_IFREQ_IFRU_NETMASK])],
118 AC_MSG_RESULT(no))
119
120
121# check for rt_msghdr
122AC_MSG_CHECKING(whether struct rt_msghdr exist)
123AH_TEMPLATE(HAVE_RT_MSGHDR)
124AC_EGREP_HEADER(rt_msghdr, net/route.h,
125[AC_MSG_RESULT(yes)
126 AC_DEFINE([HAVE_RT_MSGHDR])],
127 AC_MSG_RESULT(no))
128
Harald Welte63ebccd2017-08-02 21:10:09 +0200129AC_MSG_CHECKING(whether struct iphdr exists)
130AH_TEMPLATE(HAVE_IPHDR)
131AC_EGREP_HEADER(struct iphdr, netinet/ip.h,
132[AC_MSG_RESULT(yes)
133 AC_DEFINE([HAVE_IPHDR])],
134 AC_MSG_RESULT(no))
jjako77edc822004-09-10 17:19:31 +0000135
Pau Espin Pedrolff2ebee2020-04-18 23:47:06 +0200136# Address generation modes (enum) implemented in linux 3.17 (bc91b0f07ada5535427373a4e2050877bcc12218)
137# /proc/sys/net/ipv6/conf/${iface}/addr_gen_mode was added in linux 4.11 (d35a00b8e33dab7385f724e713ae71c8be0a49f4)
138AC_MSG_CHECKING(whether enum in6_addr_gen_mode.IN6_ADDR_GEN_MODE_NONE exists)
139AH_TEMPLATE(HAVE_IN6_ADDR_GEN_MODE_NONE)
140AC_EGREP_HEADER(IN6_ADDR_GEN_MODE_NONE, linux/if_link.h,
141[AC_MSG_RESULT(yes)
142 AC_DEFINE([HAVE_IN6_ADDR_GEN_MODE_NONE])],
143 AC_MSG_RESULT(no))
144
jjako52c62342003-01-28 21:58:05 +0000145# Checks for library functions.
jjako52c24142002-12-16 13:33:51 +0000146AC_PROG_GCC_TRADITIONAL
jjakoacba8e62005-03-14 21:53:10 +0000147# AC_FUNC_MALLOC
Pau Espin Pedrol381b7232018-09-10 12:19:45 +0200148# AC_FUNC_MEMCMP
jjako52c62342003-01-28 21:58:05 +0000149AC_CHECK_FUNCS([gethostbyname inet_ntoa memset select socket strdup strerror strtol])
jjako1d3db972004-01-16 09:56:56 +0000150AC_CHECK_FUNCS(inet_aton inet_addr, break)
151
152# check for getopt in standard library
153adl_FUNC_GETOPT_LONG
jjako52c24142002-12-16 13:33:51 +0000154
Harald Weltea8921772017-02-23 21:55:33 +0100155AM_INIT_AUTOMAKE([foreign])
jjako52c24142002-12-16 13:33:51 +0000156
Pau Espin Pedrolb1f641b2021-02-23 13:34:39 +0100157PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.5.0)
158PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.5.0)
159PKG_CHECK_MODULES(LIBOSMOCTRL, libosmoctrl >= 1.5.0)
Holger Hans Peter Freytherca524ef2014-12-03 19:59:15 +0100160
Neels Hofmeyr878ece72017-11-17 01:43:36 +0100161AC_ARG_ENABLE(sanitize,
162 [AS_HELP_STRING(
163 [--enable-sanitize],
164 [Compile with address sanitizer enabled],
165 )],
166 [sanitize=$enableval], [sanitize="no"])
167if test x"$sanitize" = x"yes"
168then
169 CFLAGS="$CFLAGS -fsanitize=address -fsanitize=undefined"
170 CPPFLAGS="$CPPFLAGS -fsanitize=address -fsanitize=undefined"
171fi
172
Neels Hofmeyrfc8357a2018-03-05 20:42:45 +0100173AC_ARG_ENABLE(werror,
174 [AS_HELP_STRING(
175 [--enable-werror],
176 [Turn all compiler warnings into errors, with exceptions:
177 a) deprecation (allow upstream to mark deprecation without breaking builds);
178 b) "#warning" pragmas (allow to remind ourselves of errors without breaking builds)
179 ]
180 )],
181 [werror=$enableval], [werror="no"])
182if test x"$werror" = x"yes"
183then
184 WERROR_FLAGS="-Werror"
185 WERROR_FLAGS+=" -Wno-error=deprecated -Wno-error=deprecated-declarations"
186 WERROR_FLAGS+=" -Wno-error=cpp" # "#warning"
187 CFLAGS="$CFLAGS $WERROR_FLAGS"
188 CPPFLAGS="$CPPFLAGS $WERROR_FLAGS"
189fi
190
Oliver Smithbf47f712018-11-14 10:47:01 +0100191# Generate manuals
192AC_ARG_ENABLE(manuals,
193 [AS_HELP_STRING(
194 [--enable-manuals],
195 [Generate manual PDFs [default=no]],
196 )],
197 [osmo_ac_build_manuals=$enableval], [osmo_ac_build_manuals="no"])
198AM_CONDITIONAL([BUILD_MANUALS], [test x"$osmo_ac_build_manuals" = x"yes"])
199AC_ARG_VAR(OSMO_GSM_MANUALS_DIR, [path to common osmo-gsm-manuals files, overriding pkg-config and "../osmo-gsm-manuals"
200 fallback])
201if test x"$osmo_ac_build_manuals" = x"yes"
202then
203 # Find OSMO_GSM_MANUALS_DIR (env, pkg-conf, fallback)
204 if test -n "$OSMO_GSM_MANUALS_DIR"; then
205 echo "checking for OSMO_GSM_MANUALS_DIR... $OSMO_GSM_MANUALS_DIR (from env)"
206 else
207 OSMO_GSM_MANUALS_DIR="$($PKG_CONFIG osmo-gsm-manuals --variable=osmogsmmanualsdir 2>/dev/null)"
208 if test -n "$OSMO_GSM_MANUALS_DIR"; then
209 echo "checking for OSMO_GSM_MANUALS_DIR... $OSMO_GSM_MANUALS_DIR (from pkg-conf)"
210 else
211 OSMO_GSM_MANUALS_DIR="../osmo-gsm-manuals"
212 echo "checking for OSMO_GSM_MANUALS_DIR... $OSMO_GSM_MANUALS_DIR (fallback)"
213 fi
214 fi
215 if ! test -d "$OSMO_GSM_MANUALS_DIR"; then
216 AC_MSG_ERROR("OSMO_GSM_MANUALS_DIR does not exist! Install osmo-gsm-manuals or set OSMO_GSM_MANUALS_DIR.")
217 fi
218
219 # Find and run check-depends
220 CHECK_DEPENDS="$OSMO_GSM_MANUALS_DIR/check-depends.sh"
221 if ! test -x "$CHECK_DEPENDS"; then
222 CHECK_DEPENDS="osmo-gsm-manuals-check-depends"
223 fi
224 if ! $CHECK_DEPENDS; then
225 AC_MSG_ERROR("missing dependencies for --enable-manuals")
226 fi
227
228 # Put in Makefile with absolute path
229 OSMO_GSM_MANUALS_DIR="$(realpath "$OSMO_GSM_MANUALS_DIR")"
230 AC_SUBST([OSMO_GSM_MANUALS_DIR])
231fi
232
Pau Espin Pedrol381b7232018-09-10 12:19:45 +0200233# https://www.freedesktop.org/software/systemd/man/daemon.html
234AC_ARG_WITH([systemdsystemunitdir],
235 [AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files])],,
236 [with_systemdsystemunitdir=auto])
237AS_IF([test "x$with_systemdsystemunitdir" = "xyes" -o "x$with_systemdsystemunitdir" = "xauto"], [
238 def_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)
239
240 AS_IF([test "x$def_systemdsystemunitdir" = "x"],
241 [AS_IF([test "x$with_systemdsystemunitdir" = "xyes"],
242 [AC_MSG_ERROR([systemd support requested but pkg-config unable to query systemd package])])
243 with_systemdsystemunitdir=no],
244 [with_systemdsystemunitdir="$def_systemdsystemunitdir"])])
245AS_IF([test "x$with_systemdsystemunitdir" != "xno"],
246 [AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])])
247AM_CONDITIONAL([HAVE_SYSTEMD], [test "x$with_systemdsystemunitdir" != "xno"])
248
Neels Hofmeyrfc8357a2018-03-05 20:42:45 +0100249AC_MSG_RESULT([CFLAGS="$CFLAGS"])
250AC_MSG_RESULT([CPPFLAGS="$CPPFLAGS"])
251
jjako52c62342003-01-28 21:58:05 +0000252AC_CONFIG_FILES([Makefile
253 doc/Makefile
Harald Weltece316f42017-09-05 22:24:45 +0200254 doc/examples/Makefile
jjako52c62342003-01-28 21:58:05 +0000255 ggsn/Makefile
256 gtp/Makefile
Harald Welte6fc42402011-05-10 17:44:39 +0200257 lib/Makefile
jjako52c62342003-01-28 21:58:05 +0000258 intl/Makefile
259 po/Makefile
260 sgsnemu/Makefile
Oliver Smithbf47f712018-11-14 10:47:01 +0100261 doc/manuals/Makefile
Pau Espin Pedrol381b7232018-09-10 12:19:45 +0200262 contrib/Makefile
263 contrib/systemd/Makefile
Oliver Smith569e46c2020-05-14 11:43:21 +0200264 contrib/osmo-ggsn.spec
jjakoc13c9df2003-07-07 15:15:38 +0000265 tests/Makefile
Harald Welte1d8ffc62017-10-12 19:30:49 +0800266 tests/lib/Makefile
Harald Welte5943cbb2017-10-13 15:57:01 +0200267 tests/gtp/Makefile
Oliver Smith065ddb62020-05-15 13:49:12 +0200268 libgtp.pc])
jjako52c62342003-01-28 21:58:05 +0000269AC_OUTPUT
Pablo Neira Ayuso4b075b62015-11-17 12:22:42 +0100270
271echo "
Harald Welte632e8432017-09-05 18:12:14 +0200272osmo-ggsn Configuration:
Pablo Neira Ayuso466da992016-05-10 19:08:29 +0200273 GTP Linux kernel support: ${enable_gtp_linux}"