Make: Get SHELL from Autoconf
[empserver] / configure.ac
1 #
2 #   Empire - A multi-player, client/server Internet based war game.
3 #   Copyright (C) 1986-2020, Dave Pare, Jeff Bailey, Thomas Ruschak,
4 #                 Ken Stevens, Steve McClure, Markus Armbruster
5 #
6 #   Empire is free software: you can redistribute it and/or modify
7 #   it under the terms of the GNU General Public License as published by
8 #   the Free Software Foundation, either version 3 of the License, or
9 #   (at your option) any later version.
10 #
11 #   This program is distributed in the hope that it will be useful,
12 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
13 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 #   GNU General Public License for more details.
15 #
16 #   You should have received a copy of the GNU General Public License
17 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 #
19 #   ---
20 #
21 #   See files README, COPYING and CREDITS in the root of the source
22 #   tree for related information and legal notices.  It is expected
23 #   that future projects/authors will amend these files as needed.
24 #
25 #   ---
26 #
27 #   configure.ac: Autoconf input file
28 #
29 #   Known contributors to this file:
30 #      Markus Armbruster, 2005-2020
31 #
32 # Process this file with autoconf to produce a configure script.
33
34 # Autoconf makes checking for and programming around assorted ancient
35 # crap relatively painless.  But why bother?  Just rely on POSIX, and
36 # when something breaks on some oddball machine, see whether it's
37 # worth fixing.
38
39 AC_PREREQ(2.69)
40 AC_INIT([Wolfpack Empire],
41         m4_esyscmd([build-aux/git-version-gen .tarball-version]),
42         [wolfpack@wolfpackempire.com], [empire],
43         [http://www.wolfpackempire.com/])
44 AC_CONFIG_SRCDIR([include/combat.h])
45 AC_CONFIG_AUX_DIR([build-aux])
46 AC_CONFIG_MACRO_DIR([m4])
47 AC_CONFIG_HEADERS([config.h])
48
49 ### Checks for programs
50 AC_PROG_AWK
51 AC_PROG_INSTALL
52 AC_PROG_RANLIB
53
54 AC_PROG_CC_STDC
55 AM_PROG_CC_C_O
56 # Private automake macro, tsk, tsk, tsk...
57 _AM_DEPENDENCIES(CC)
58 AC_DEFINE([_XOPEN_SOURCE], [600],
59           [Request POSIX-1.2001 with XSI Extension])
60 # Note: this is after AC_PROG_CC_STDC, because Solaris cc fails with
61 # _XOPEN_SOURCE unless switched to C99, which breaks AC_PROG_CC_STDC.
62
63 AC_ARG_VAR(NROFF, [nroff command])
64 AC_CHECK_PROG(NROFF, groff, [GROFF_NO_SGR= groff -Tascii -U], nroff)
65
66 # not really a check for a program, but close enough
67 if test -d $srcdir/.git
68 then revctrl=git
69 else revctrl=
70 fi
71 if test "$revctrl" && test -r $srcdir/.tarball-version
72 then AC_MSG_ERROR([$srcdir/.tarball-version must not exist])
73 fi
74 AC_SUBST(revctrl,$revctrl)
75
76 # Not a program, but need to check this early
77 MY_WINDOWS_API
78
79
80 ### Checks for libraries
81 AX_PTHREAD
82 LIBS_util="$LIBS"
83 LIBS="$LIBS_SOCKETS $LIBS"
84 AX_LIB_SOCKET_NSL
85 LIBS_server="$LIBS"
86 MY_WITH_READLINE
87
88
89 ### Checks for header files
90
91
92 ### Checks for typedefs, structures, and compiler characteristics
93
94 if test "$GCC"
95 then
96
97 # Enable useful warnings
98 # Some of them are commented out because the code needs cleanup first
99 # Clang needs to be tested with -Werror=unknown-warning-option
100 AX_CHECK_COMPILE_FLAG([-Werror=unknown-warning-option],
101 [cflags_test="-Werror=unknown-warning-option"],
102 [cflags_test=""])
103 MY_APPEND_COMPILE_FLAGS([-Wall -Wextra dnl
104 dnl -Wcast-align dnl
105 dnl -Wconversion dnl
106 -Wdeclaration-after-statement dnl
107 dnl -Wformat-nonliteral dnl
108 -Wformat-security dnl
109 -Winit-self dnl
110 -Wlogical-op dnl
111 -Wmissing-prototypes dnl
112 -Wnested-externs dnl
113 -Wold-style-definition dnl
114 -Wpacked dnl
115 -Wpointer-arith dnl
116 -Wredundant-decls dnl
117 dnl -Wshadow dnl
118 -Wstrict-prototypes dnl
119 dnl too prone to false positives: -Wsuggest-attribute=format dnl
120 dnl -Wswitch-default dnl
121 -Wundef dnl
122 -Wno-unused-parameter dnl
123 ], [], [$cflags_test])
124
125 # Our carg() conflicts with libm's TODO clean that up
126 MY_APPEND_COMPILE_FLAGS([-fno-builtin-carg -Wno-incompatible-library-redeclaration])
127
128 # No multiple definitions of uninitialized global variables
129 MY_APPEND_COMPILE_FLAGS([-fno-common])
130
131 # Reign in overzealous optimizers
132 #
133 # Contemporary compilers can squeeze out some extra performance by
134 # assuming the program never executes code that has undefined behavior
135 # according to the C standard.  Unfortunately, this can break
136 # programs.  Pointing out that these programs are non-conforming is as
137 # correct as it is unhelpful, at least as long as the compiler is
138 # unable to diagnose the non-conformingness.
139 #
140 # Since keeping our programs working is a lot more important to us
141 # than running them as fast as possible, forbid some assumptions that
142 # are known to break real-world programs:
143 #
144 # * Aliasing: perfectly clean programs don't engage in type-punning,
145 #   and perfectly conforming programs do it only in full accordance
146 #   with the standard's (subtle!) aliasing rules.  Neither kind of
147 #   perfection is realistic for us, therefore -fno-strict-aliasing.
148 #
149 # * Signed integer overflow: perfectly clean programs won't ever do
150 #   signed integer arithmetic that overflows.  This is an imperfect
151 #   program, therefore -fno-strict-overflow.
152 #
153 MY_APPEND_COMPILE_FLAGS([dnl
154 -fno-strict-aliasing dnl
155 -fno-strict-overflow])
156
157 # Emit extra code to check for buffer overflows
158 # Could fall back to -fstack-protector when -fstack-protector-strong
159 # isnt't supported, for users of older compilers.  Doesn't seem worth
160 # the trouble, though.
161 # Some ports of the GNU toolchain reportedly support it in the
162 # compiler, but not libc.  Use a test program that makes the compiler
163 # emit the extra stack checking code, and test it compiles and links.
164 AX_APPEND_LINK_FLAGS([-fstack-protector-strong], [], [],
165     [AC_LANG_SOURCE([[
166 int
167 main(int argc, char *argv[])
168 {
169     char arr[64], *dst = arr, *src = argv[0];
170     while ((*dst++ = *src++)) ;
171 }
172     ]])])
173
174 fi # $GCC
175
176
177 ### Checks for library functions
178
179 AC_CHECK_FUNCS(getaddrinfo)
180 MY_WORKING_IN6_IS_ADDR_V4MAPPED
181 MY_FUNC_MAKECONTEXT
182
183
184 ### Site configuration
185
186 # Can't be bothered to make MAXNOC configurable right now.
187 AC_DEFINE([MAXNOC], [99],
188           [The maximum number of countries])
189
190 AC_ARG_VAR([EMPIREHOST], [Default host (client only) [127.0.0.1]])
191 test "$EMPIREHOST" || EMPIREHOST=127.0.0.1
192
193 AC_ARG_VAR([EMPIREPORT], [Default port (client and server) [6665]])
194 test "$EMPIREPORT" || EMPIREPORT=6665
195
196 AC_ARG_WITH([pthread],
197             AS_HELP_STRING([--with-pthread],
198                            [use POSIX threads]))
199
200 # Select thread package
201 empthread=
202 if test "$with_pthread" != no; then
203     if test "$ax_pthread_ok" = yes; then
204         empthread=POSIX
205     fi
206 fi
207 if test -z "$with_pthread" || test "$with_pthread" = no; then
208     if test "$ac_cv_func_makecontext" = yes; then
209         empthread=LWP
210     fi
211     if test $Windows_API = yes; then
212         empthread=Windows
213     fi
214 fi
215 if test -z "$empthread"; then
216     AC_MSG_ERROR([No usable thread package found])
217 fi
218 AC_SUBST(empthread)
219 case $empthread in
220 LWP)    AC_DEFINE([EMPTH_LWP], 1, [Define to use LWP threads]) ;;
221 POSIX)  AC_DEFINE([EMPTH_POSIX], 1, [Define to use POSIX threads]) ;;
222 Windows) AC_DEFINE([EMPTH_W32], 1, [Define to use Windows threads]) ;;
223 esac
224
225 MY_WITH_TERMINFO
226 LIBS_client="$LIBS"
227
228
229 ### Output
230
231 LIBS="$LIBS_util"
232 AC_SUBST(LIBS_client)
233 AC_SUBST(LIBS_server)
234
235 AC_CONFIG_FILES([GNUmakefile])
236 AC_CONFIG_COMMANDS([stamp-h],
237         [case $revctrl in
238         git)
239             mkdir -p `cd $srcdir && git ls-files \
240                 | sed -n 's,/@<:@^/@:>@*$,,gp' | uniq`
241             ;;
242         *)
243             mkdir -p `sed s/.*=// <$srcdir/sources.mk | tr ' ' '\012' \
244                 | sed -n '/\//s,/@<:@^/@:>@*$,,gp'| uniq`
245         esac
246         mkdir -p info.html info.nr lib
247         touch stamp-h],
248         [revctrl=$revctrl])
249 AC_OUTPUT
250
251 AC_MSG_NOTICE([])
252 AC_MSG_NOTICE([-= Configuration summary =-])
253 AC_MSG_NOTICE([Thread package: $empthread])
254 AC_MSG_NOTICE([      readline: $with_readline])
255 AC_MSG_NOTICE([      terminfo: $with_terminfo])
256 AC_MSG_NOTICE([    EMPIREHOST: $EMPIREHOST])
257 AC_MSG_NOTICE([    EMPIREPORT: $EMPIREPORT])