X-Git-Url: http://git.pond.sub.org/?p=empserver;a=blobdiff_plain;f=configure.ac;h=240343238fda14268e8176e24b0b1b2e957f0c30;hp=7205fb70c517b159fd8f6124b9ca3cb6a7617c48;hb=refs%2Fheads%2Ffever;hpb=6dd3097e78e7d4fa0008f96f1a32124294ea7b14 diff --git a/configure.ac b/configure.ac index 7205fb70c..240343238 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # # Empire - A multi-player, client/server Internet based war game. -# Copyright (C) 1986-2011, Dave Pare, Jeff Bailey, Thomas Ruschak, +# Copyright (C) 1986-2021, Dave Pare, Jeff Bailey, Thomas Ruschak, # Ken Stevens, Steve McClure, Markus Armbruster # # Empire is free software: you can redistribute it and/or modify @@ -27,39 +27,50 @@ # configure.ac: Autoconf input file # # Known contributors to this file: -# Markus Armbruster, 2005-2010 +# Markus Armbruster, 2005-2020 # # Process this file with autoconf to produce a configure script. # Autoconf makes checking for and programming around assorted ancient -# crap relatively painless. But why bother? Just rely on C89 and -# POSIX, and when something breaks on some oddball machine, see -# whether it's worth fixing. - -AC_PREREQ(2.59) -AC_INIT([Wolfpack Empire], [4.3.28], [wolfpack@wolfpackempire.com], [empire]) +# crap relatively painless. But why bother? Just rely on POSIX, and +# when something breaks on some oddball machine, see whether it's +# worth fixing. + +AC_PREREQ(2.69) +AC_INIT([Wolfpack Empire], + m4_esyscmd([build-aux/git-version-gen .tarball-version]), + [wolfpack@wolfpackempire.com], [empire], + [http://www.wolfpackempire.com/]) AC_CONFIG_SRCDIR([include/combat.h]) +AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_HEADERS([config.h]) - ### Checks for programs AC_PROG_AWK AC_PROG_INSTALL AC_PROG_RANLIB -AC_PROG_CC -AC_SUBST(GCC) + +AC_PROG_CC_STDC AM_PROG_CC_C_O # Private automake macro, tsk, tsk, tsk... _AM_DEPENDENCIES(CC) +AC_DEFINE([_XOPEN_SOURCE], [600], + [Request POSIX-1.2001 with XSI Extension]) +# Note: this is after AC_PROG_CC_STDC, because Solaris cc fails with +# _XOPEN_SOURCE unless switched to C99, which breaks AC_PROG_CC_STDC. AC_ARG_VAR(NROFF, [nroff command]) AC_CHECK_PROG(NROFF, groff, [GROFF_NO_SGR= groff -Tascii -U], nroff) # not really a check for a program, but close enough -if test -d $srcdir/.git; then revctrl=git +if test -d $srcdir/.git +then revctrl=git else revctrl= fi +if test "$revctrl" && test -r $srcdir/.tarball-version +then AC_MSG_ERROR([$srcdir/.tarball-version must not exist]) +fi AC_SUBST(revctrl,$revctrl) # Not a program, but need to check this early @@ -67,11 +78,14 @@ MY_WINDOWS_API ### Checks for libraries -ACX_PTHREAD +AX_PTHREAD LIBS_util="$LIBS" LIBS="$LIBS_SOCKETS $LIBS" -LIB_SOCKET_NSL +AX_LIB_SOCKET_NSL LIBS_server="$LIBS" +MY_WITH_READLINE +MY_WITH_TERMINFO +LIBS_client="$LIBS" ### Checks for header files @@ -79,12 +93,90 @@ LIBS_server="$LIBS" ### Checks for typedefs, structures, and compiler characteristics -AC_C_CHAR_UNSIGNED +if test "$GCC" +then + +# Enable useful warnings +# Some of them are commented out because the code needs cleanup first +# Clang needs to be tested with -Werror=unknown-warning-option +AX_CHECK_COMPILE_FLAG([-Werror=unknown-warning-option], +[cflags_test="-Werror=unknown-warning-option"], +[cflags_test=""]) +MY_APPEND_COMPILE_FLAGS([-Wall -Wextra dnl +dnl -Wcast-align dnl +dnl -Wconversion dnl +-Wdeclaration-after-statement dnl +dnl -Wformat-nonliteral dnl +-Wformat-security dnl +-Winit-self dnl +-Wlogical-op dnl +-Wmissing-prototypes dnl +-Wnested-externs dnl +-Wold-style-definition dnl +-Wpacked dnl +-Wpointer-arith dnl +-Wredundant-decls dnl +dnl -Wshadow dnl +-Wstrict-prototypes dnl +dnl too prone to false positives: -Wsuggest-attribute=format dnl +dnl -Wswitch-default dnl +-Wundef dnl +-Wno-unused-parameter dnl +], [], [$cflags_test]) + +# No multiple definitions of uninitialized global variables +MY_APPEND_COMPILE_FLAGS([-fno-common]) + +# Reign in overzealous optimizers +# +# Contemporary compilers can squeeze out some extra performance by +# assuming the program never executes code that has undefined behavior +# according to the C standard. Unfortunately, this can break +# programs. Pointing out that these programs are non-conforming is as +# correct as it is unhelpful, at least as long as the compiler is +# unable to diagnose the non-conformingness. +# +# Since keeping our programs working is a lot more important to us +# than running them as fast as possible, forbid some assumptions that +# are known to break real-world programs: +# +# * Aliasing: perfectly clean programs don't engage in type-punning, +# and perfectly conforming programs do it only in full accordance +# with the standard's (subtle!) aliasing rules. Neither kind of +# perfection is realistic for us, therefore -fno-strict-aliasing. +# +# * Signed integer overflow: perfectly clean programs won't ever do +# signed integer arithmetic that overflows. This is an imperfect +# program, therefore -fno-strict-overflow. +# +MY_APPEND_COMPILE_FLAGS([dnl +-fno-strict-aliasing dnl +-fno-strict-overflow]) + +# Emit extra code to check for buffer overflows +# Could fall back to -fstack-protector when -fstack-protector-strong +# isnt't supported, for users of older compilers. Doesn't seem worth +# the trouble, though. +# Some ports of the GNU toolchain reportedly support it in the +# compiler, but not libc. Use a test program that makes the compiler +# emit the extra stack checking code, and test it compiles and links. +AX_APPEND_LINK_FLAGS([-fstack-protector-strong], [], [], + [AC_LANG_SOURCE([[ +int +main(int argc, char *argv[]) +{ + char arr[64], *dst = arr, *src = argv[0]; + while ((*dst++ = *src++)) ; +} + ]])]) + +fi # $GCC ### Checks for library functions -AC_CHECK_FUNCS(getaddrinfo getpass) +AC_CHECK_FUNCS(getaddrinfo) +MY_WORKING_IN6_IS_ADDR_V4MAPPED MY_FUNC_MAKECONTEXT @@ -107,7 +199,7 @@ AC_ARG_WITH([pthread], # Select thread package empthread= if test "$with_pthread" != no; then - if test "$acx_pthread_ok" = yes; then + if test "$ax_pthread_ok" = yes; then empthread=POSIX fi fi @@ -129,9 +221,6 @@ POSIX) AC_DEFINE([EMPTH_POSIX], 1, [Define to use POSIX threads]) ;; Windows) AC_DEFINE([EMPTH_W32], 1, [Define to use Windows threads]) ;; esac -MY_WITH_TERMINFO -LIBS_client="$LIBS" - ### Output @@ -158,6 +247,7 @@ AC_OUTPUT AC_MSG_NOTICE([]) AC_MSG_NOTICE([-= Configuration summary =-]) AC_MSG_NOTICE([Thread package: $empthread]) +AC_MSG_NOTICE([ readline: $with_readline]) AC_MSG_NOTICE([ terminfo: $with_terminfo]) AC_MSG_NOTICE([ EMPIREHOST: $EMPIREHOST]) AC_MSG_NOTICE([ EMPIREPORT: $EMPIREPORT])