1 dnl Process this file with autoconf to produce a configure script
3 dnl Need autoconf 2.50 or later for AC_ARG_VAR. 2.59 has been around for
4 dnl long enough, that we might as well just require that.
6 AC_INIT([survex], [1.4.8], [https://trac.survex.com/])
7 AM_INIT_AUTOMAKE([1.5 gnu -Wall -Wportability -Werror])
11 AC_CONFIG_HEADERS([config.h])
12 AC_CONFIG_SRCDIR([src/aven.cc])
14 COPYRIGHT_MSG="Copyright (C) 1990-2024 Olly Betts"
15 AVEN_COPYRIGHT_MSG="Copyright (C) 1999-2003,2005,2006 Mark R. Shinwell"
17 AC_DEFINE_UNQUOTED(COPYRIGHT_MSG, ["$COPYRIGHT_MSG"], [Copyright Message])
18 AC_DEFINE_UNQUOTED(AVEN_COPYRIGHT_MSG, ["$AVEN_COPYRIGHT_MSG"],
19 [Copyright Message for Aven])
21 AC_SUBST(COPYRIGHT_MSG)
22 AC_SUBST(AVEN_COPYRIGHT_MSG)
24 COPYRIGHT_MSG_UTF8=`echo "$COPYRIGHT_MSG"|sed 's/(C)/©/'`
25 AVEN_COPYRIGHT_MSG_UTF8=`echo "$AVEN_COPYRIGHT_MSG"|sed 's/(C)/©/'`
27 AC_DEFINE_UNQUOTED(COPYRIGHT_MSG_UTF8, ["$COPYRIGHT_MSG_UTF8"],
28 [Copyright Message in UTF-8])
29 AC_DEFINE_UNQUOTED(AVEN_COPYRIGHT_MSG_UTF8, ["$AVEN_COPYRIGHT_MSG_UTF8"],
30 [Copyright Message for Aven in UTF-8])
32 dnl set PRETTYPACKAGE to PACKAGE with the first character capitalised
33 PRETTYPACKAGE=`echo "$PACKAGE"|cut -b1|tr a-z A-Z``echo "$PACKAGE"|cut -b2-`
34 AC_DEFINE_UNQUOTED(PRETTYPACKAGE, "$PRETTYPACKAGE",
35 [Name of package (capitalised)])
36 AC_SUBST(PRETTYPACKAGE)
38 dnl set COMMAVERSION to VERSION with the dots replaced by commas -
39 dnl e.g. "0,99" or "1,0,22"
40 COMMAVERSION=`echo "$VERSION"|tr '.' ','`
41 AC_DEFINE_UNQUOTED(COMMAVERSION, $COMMAVERSION,
42 [Version number of package (comma-separated)])
43 AC_SUBST(COMMAVERSION)
45 PKGDOCDIR='${prefix}/share/doc/${PACKAGE}'
47 [ --enable-docdir=DIR Set directory for installing documentation to DIR],
50 AC_MSG_ERROR([configure: Syntax: configure --enable-docdir=DIR]) ;;
52 PKGDOCDIR="$enableval"
56 test NONE = "$prefix" && prefix="$ac_default_prefix"
57 test NONE = "$exec_prefix" && exec_prefix="$prefix"
58 eval echo "$PKGDOCDIR"
61 AC_SUBST(PKGDOCDIR_EXPANDED)
65 dnl Checks for programs.
72 dnl Probe for any options needed to enable C++11 support.
73 AX_CXX_COMPILE_STDCXX_11
86 *mingw*|*cygwin*|windows*) mswindows=yes ;;
91 AC_ARG_VAR(STRIP, [Command for discarding symbols from object files])
92 AC_PATH_TOOL(STRIP, strip, [echo "not stripping "])
98 dnl The wxWidgets libraries we need:
99 wx_libs="core,gl,html"
101 AC_ARG_VAR(WXCONFIG, [Old name for WX_CONFIG, accepted for compatibility])
102 AC_ARG_VAR(WX_CONFIG, [wxWidgets configuration script to use to build Aven])
103 : ${WX_CONFIG="$WXCONFIG"}
105 AM_CONDITIONAL(WIN32, [test yes = "$mswindows"])
106 AM_CONDITIONAL(MACOS, [test yes = "$macos"])
108 if test -n "$WX_CONFIG" ; then
109 dnl WX_CONFIG specified - sanity check the value
110 dnl don't check for --ldflags - older wx-config didn't do that
111 if (exec >&5 2>&5;$WX_CONFIG --libs --cflags --cxxflags "$wx_libs";exit $?) then
114 AC_MSG_ERROR(['$WX_CONFIG --libs --cflags --cxxflags "$wx_libs"' does not work, bailing out])
117 if test yes = "$macos" ; then
119 elif test yes = "$mswindows" ; then
124 dnl See if wx-config exists and is for the correct version.
125 dnl Fedora install wx3's wx-config as wx-config-3.0, so look for that in
127 dnl Arch Linux uses wx-config-gtk3.
128 AC_PATH_PROGS(WX_CONFIG, [wx-config-3.0 wx-config-gtk3 wx-config])
129 if test -n "$WX_CONFIG" ; then
130 if (exec >&5 2>&5;$WX_CONFIG --cflags "$wx_libs"|grep -e -D"$wxdef";exit $?) then
133 AC_MSG_ERROR([wxWidgets not for the right toolkit. Run ./configure WX_CONFIG=/path/to/wx-config])
136 AC_MSG_ERROR([wxWidgets not found. Run ./configure WX_CONFIG=/path/to/wx-config])
140 dnl Unless the user has explicitly specified a --unicode setting, prefer
141 dnl --unicode=yes if we can get it.
145 if (exec >&5 2>&5;$WX_CONFIG --unicode=yes --version "$wx_libs";exit $?) ; then
146 WX_CONFIG="$WX_CONFIG --unicode=yes"
147 elif (exec >&5 2>&5;$WX_CONFIG --unicode=no --version "$wx_libs";exit $?) ; then
148 WX_CONFIG="$WX_CONFIG --unicode=no"
152 WX_LIBS=`$WX_CONFIG --libs "$wx_libs"`
153 dnl Needed for nvidia drivers on linux (for some setups anyway).
154 AC_CHECK_LIB(Xxf86vm, XF86VidModeQueryVersion, [WX_LIBS="$WX_LIBS -lXxf86vm"], [], [$WX_LIBS])
155 dnl We use functions from libGLU so always link -lGLU explicitly if it's
157 AC_CHECK_LIB([GLU], [gluProject], [WX_LIBS="$WX_LIBS -lGLU"], [], [$WX_LIBS])
158 dnl We use functions from libGL so always link -lGL explicitly if it's
160 AC_CHECK_LIB([GL], [glPushMatrix], [WX_LIBS="$WX_LIBS -lGL"], [], [$WX_LIBS])
162 dnl macOS has OpenGL/gl.h.
163 AC_CHECK_HEADERS([GL/gl.h OpenGL/gl.h], [], [], [ ])
164 dnl The Debian mingw-w64 packages lack GL/glext.h; macOS has OpenGL/glext.h.
165 AC_CHECK_HEADERS([GL/glext.h OpenGL/glext.h], [], [], [#include <GL/gl.h>])
167 WX_CFLAGS=`$WX_CONFIG --cflags "$wx_libs"`
169 WX_CXXFLAGS=`$WX_CONFIG --cxxflags "$wx_libs"`
170 AC_SUBST(WX_CXXFLAGS)
174 CFLAGS="$CFLAGS $WX_CFLAGS"
175 AC_CHECK_SIZEOF([wxChar], [], [
177 #include <wx/chartype.h>
181 dnl Check for FFmpeg libraries.
182 PKG_CHECK_MODULES([FFMPEG], [libavcodec libavformat libswscale libavutil], [
183 AC_DEFINE([WITH_FFMPEG], [1], [Use FFmpeg for movie export])
184 save_CXXFLAGS=$CXXFLAGS
186 CFLAGS="$CFLAGS $FFMPEG_CFLAGS"
187 LIBS="$LIBS $FFMPEG_LIBS"
188 AC_CHECK_FUNCS([av_guess_format avio_open avio_close avformat_write_header avcodec_encode_video2 avcodec_free_frame avcodec_open2 avformat_new_stream av_frame_alloc av_frame_free])
189 AC_CHECK_DECLS([AVMEDIA_TYPE_VIDEO], [], [], [#include <libavcodec/avcodec.h>])
190 AC_CHECK_DECLS([AV_CODEC_ID_NONE], [], [], [#include <libavcodec/avcodec.h>])
191 AC_CHECK_DECLS([AV_PIX_FMT_RGB24], [], [], [#include <libavutil/pixfmt.h>])
192 AC_CHECK_DECLS([AV_PIX_FMT_YUV420P], [], [], [#include <libavutil/pixfmt.h>])
193 CXXFLAGS=$save_CXXFLAGS
196 dnl Build without movie export feature.
198 AC_SUBST([FFMPEG_LIBS])
199 AC_SUBST([FFMPEG_CFLAGS])
202 PKG_CHECK_MODULES([PROJ], [proj >= 6.2.0], [
204 dnl pkg-config support in proj seems quite new, so probe directly if not
205 dnl found. We need proj_create_crs_to_crs_from_pj() which was added in
207 AC_CHECK_LIB([proj], [proj_create_crs_to_crs_from_pj], [
211 AC_MSG_ERROR([PROJ required for coordinate transformations])
214 AC_SUBST([PROJ_LIBS])
215 AC_SUBST([PROJ_CFLAGS])
217 dnl Checks for header files.
219 dnl don't use AC_CHECK_FUNCS for setjmp - mingw #define-s it to _setjmp
220 AC_CHECK_HEADERS(limits.h string.h setjmp.h sys/select.h)
222 dnl Checks for typedefs, structures, and compiler characteristics.
226 dnl Check for 16-bit and 32-bit integer types.
232 dnl Check if there's a declaration of lround(). Below we also check for
233 dnl lround() with AC_CHECK_FUNCS, which just checks if it can be linked
234 dnl against. Some platforms are missing a prototype for lround(), so
235 dnl both checks are useful.
236 AC_CHECK_DECLS([lround], [], [], [[#include <math.h>]])
237 AC_CHECK_FUNCS([popen getpwuid lround hypot mmap])
239 dnl Much faster than using getc()/putc(), at least on Linux.
240 AC_CHECK_FUNCS([getc_unlocked putc_unlocked])
242 AC_CHECK_FUNCS([setenv unsetenv])
244 AC_PATH_PROG([JW], [jw], [$MISSING jw])
245 AC_ARG_VAR([JW], [jw from docbook-utils/docbook-tools])
247 AC_ARG_ENABLE([werror],
248 [AS_HELP_STRING([--enable-werror], [enable treating compiler warnings as errors [default=maintainer-mode]])],
249 [case ${enableval} in
251 *) AC_MSG_ERROR([bad value ${enableval} for --enable-werror]) ;;
255 dnl Put -Werror or equivalent in its own make variable so that it can easily
256 dnl be overridden by `make WERROR=` if needed during development (e.g. if
257 dnl you want to get a full list of compile warnings to fix rather than
258 dnl stopping at the first file with warnings).
262 dnl extra warning flags for building with GCC
263 if test yes = "$GCC"; then
265 if test yes = "$cross_compiling"; then
266 dnl AM_CFLAGS="$AM_CFLAGS -Werror -Wall -Wunused -Wpointer-arith\
267 dnl -Wwrite-strings -Wcast-align"
268 dnl -Wsign-compare causes a warning with the mingw FD_SET macro, so we have
269 dnl to disable it for mingw builds.
270 AM_CFLAGS="$AM_CFLAGS -Wall -Wunused -Wpointer-arith\
271 -Wwrite-strings -Wcast-align"
272 AM_CXXFLAGS="$AM_CXXFLAGS -Wall -Wunused -Wpointer-arith\
273 -Wwrite-strings -Wcast-align -Wno-sign-compare"
275 AM_CFLAGS="$AM_CFLAGS -Wall -W -Wunused -Wshadow -Wpointer-arith\
276 -Wmissing-prototypes -Wwrite-strings -Wredundant-decls -Wnested-externs\
278 AM_CXXFLAGS="$AM_CXXFLAGS -Wall -W -Wunused -Wshadow -Wpointer-arith\
279 -Wwrite-strings -Wcast-align"
281 dnl too many complaints from headers, etc: -Wconversion
284 AC_SUBST(AM_CXXFLAGS)
286 if test x$enable_werror != xyes; then
290 dnl See if large file support is available. Survex is unlikely to need to
291 dnl process files > 2GB in size, but LFS is also needed for stat() to work
292 dnl on filing systems which return 64 bit inode values, such as CIFS mounts.
295 AC_ARG_ENABLE(profiling,
296 [ --enable-profiling Build binaries to generate profiling information],
298 yes) AM_CXXFLAGS="$AM_CXXFLAGS -pg"
299 AM_CFLAGS="$AM_CFLAGS -pg"
300 AC_MSG_RESULT(building binaries to generate profiling information);;
302 *) AC_MSG_ERROR(bad value $enableval for --enable-profiling) ;;
305 HTMLFILES="AUTHORS.htm HACKING.htm NEWS.htm OLDNEWS.htm TODO.htm index.htm 3dformat.htm 3dformat-old.htm"
308 EXTRA_TEXT="AUTHORS COPYING NEWS TODO ChangeLog"
313 AC_SUBST_FILE(AVENDESC)
314 AVENDESC=desc-aven.txt
316 dnl Don't define DATADIR if building for MS Windows - it won't be used, and
317 dnl can conflict with the DATADIR typedef in objidl.h
318 if test no = "$mswindows"; then
319 AC_DEFINE_DIR(DATADIR, datadir, [Location of platform independent support files])
323 [/* Use getc_unlocked() and putc_unlocked() where available, since they are
324 * faster, and we don't multithread file accesses.
327 #ifdef HAVE_GETC_UNLOCKED
328 # define GETC(F) getc_unlocked(F)
330 # define GETC(F) getc(F)
332 #ifdef HAVE_PUTC_UNLOCKED
333 # define PUTC(C, F) putc_unlocked(C, F)
335 # define PUTC(C, F) putc(C, F)
339 /* C23 added bool, false and true as keywords - let's emulate that and
340 * avoid every C file which uses these needing to include <stdbool.h>.
342 # include <stdbool.h>
347 Makefile src/Makefile doc/Makefile lib/Makefile lib/icons/Makefile
349 tests/Makefile vim/Makefile survex.iss doc/index.htm doc/survex.7
350 survex.spec lib/Info.plist
353 dnl FIXME update msvc makefile for 1.2 branch
354 dnl src/msvc/config.h