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.9], [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:
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])
157 dnl Check if we need a library for OpenGL functions. Usually it's the "GL"
158 dnl library, but it's called opengl32 on Microsoft Windows).
159 AC_SEARCH_LIBS([glPushMatrix], [GL opengl32], [WX_LIBS="$WX_LIBS $ac_cv_search_glPushMatrix"], [], [$WX_LIBS])
160 dnl Check if we need a library for GLU functions. Usually it's the "GLU"
161 dnl library, but it's called glu32 on Microsoft Windows).
162 AC_SEARCH_LIBS([gluProject], [GLU glu32], [WX_LIBS="$WX_LIBS $ac_cv_search_gluProject"], [], [$WX_LIBS])
166 dnl macOS has OpenGL/gl.h.
167 AC_CHECK_HEADERS([GL/gl.h OpenGL/gl.h], [], [], [ ])
168 dnl The Debian mingw-w64 packages lack GL/glext.h; macOS has OpenGL/glext.h.
169 AC_CHECK_HEADERS([GL/glext.h OpenGL/glext.h], [], [], [#include <GL/gl.h>])
171 WX_CFLAGS=`$WX_CONFIG --cflags "$wx_libs"`
173 WX_CXXFLAGS=`$WX_CONFIG --cxxflags "$wx_libs"`
174 AC_SUBST(WX_CXXFLAGS)
178 CFLAGS="$CFLAGS $WX_CFLAGS"
179 AC_CHECK_SIZEOF([wxChar], [], [
181 #include <wx/chartype.h>
185 dnl Check for FFmpeg libraries.
186 PKG_CHECK_MODULES([FFMPEG], [libavcodec libavformat libswscale libavutil], [
187 AC_DEFINE([WITH_FFMPEG], [1], [Use FFmpeg for movie export])
188 save_CXXFLAGS=$CXXFLAGS
190 CFLAGS="$CFLAGS $FFMPEG_CFLAGS"
191 LIBS="$LIBS $FFMPEG_LIBS"
192 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])
193 AC_CHECK_DECLS([AVMEDIA_TYPE_VIDEO], [], [], [#include <libavcodec/avcodec.h>])
194 AC_CHECK_DECLS([AV_CODEC_ID_NONE], [], [], [#include <libavcodec/avcodec.h>])
195 AC_CHECK_DECLS([AV_PIX_FMT_RGB24], [], [], [#include <libavutil/pixfmt.h>])
196 AC_CHECK_DECLS([AV_PIX_FMT_YUV420P], [], [], [#include <libavutil/pixfmt.h>])
197 CXXFLAGS=$save_CXXFLAGS
200 dnl Build without movie export feature.
202 AC_SUBST([FFMPEG_LIBS])
203 AC_SUBST([FFMPEG_CFLAGS])
206 PKG_CHECK_MODULES([PROJ], [proj >= 6.2.0], [
208 dnl pkg-config support in proj seems quite new, so probe directly if not
209 dnl found. We need proj_create_crs_to_crs_from_pj() which was added in
211 AC_CHECK_LIB([proj], [proj_create_crs_to_crs_from_pj], [
215 AC_MSG_ERROR([PROJ required for coordinate transformations])
218 AC_SUBST([PROJ_LIBS])
219 AC_SUBST([PROJ_CFLAGS])
222 PKG_CHECK_MODULES([GDAL], [gdal >= 2.3], [
224 AC_MSG_ERROR([GDAL required for geodata handling])
226 AC_SUBST([GDAL_LIBS])
227 AC_SUBST([GDAL_CFLAGS])
229 dnl Checks for header files.
231 dnl don't use AC_CHECK_FUNCS for setjmp - mingw #define-s it to _setjmp
232 AC_CHECK_HEADERS(limits.h string.h setjmp.h)
234 dnl Checks for typedefs, structures, and compiler characteristics.
238 dnl Check for 16-bit and 32-bit integer types.
244 dnl Check if there's a declaration of lround(). Below we also check for
245 dnl lround() with AC_CHECK_FUNCS, which just checks if it can be linked
246 dnl against. Some platforms are missing a prototype for lround(), so
247 dnl both checks are useful.
248 AC_CHECK_DECLS([lround], [], [], [[#include <math.h>]])
249 AC_CHECK_FUNCS([popen getpwuid lround hypot mmap])
251 dnl Much faster than using getc()/putc(), at least on Linux.
252 AC_CHECK_FUNCS([getc_unlocked putc_unlocked])
254 AC_CHECK_FUNCS([setenv unsetenv])
256 AC_CHECK_FUNCS([fmemopen])
258 dnl Microsoft-specific functions which support positional argument specifiers.
259 AC_CHECK_FUNCS([_vfprintf_p _vsprintf_p])
261 AC_PATH_PROG([SPHINX_BUILD], [sphinx-build], [$MISSING sphinx-build])
262 AC_ARG_VAR([SPHINX_BUILD], [sphinx-build from python3-sphinx])
264 AC_PATH_PROG([MSGFMT], [msgfmt], [$MISSING msgfmt])
265 AC_ARG_VAR([MSGFMT], [msgfmt from gettext])
267 AC_ARG_ENABLE([werror],
268 [AS_HELP_STRING([--enable-werror], [enable treating compiler warnings as errors [default=no]])],
269 [case ${enableval} in
271 *) AC_MSG_ERROR([bad value ${enableval} for --enable-werror]) ;;
275 dnl Put -Werror or equivalent in its own make variable so that it can easily
276 dnl be overridden by `make WERROR=` if needed during development (e.g. if
277 dnl you want to get a full list of compile warnings to fix rather than
278 dnl stopping at the first file with warnings).
282 dnl extra warning flags for building with GCC
283 if test yes = "$GCC"; then
285 if test yes = "$cross_compiling"; then
286 dnl AM_CFLAGS="$AM_CFLAGS -Werror -Wall -Wunused -Wpointer-arith\
287 dnl -Wwrite-strings -Wcast-align"
288 dnl -Wsign-compare causes a warning with the mingw FD_SET macro, so we have
289 dnl to disable it for mingw builds.
290 AM_CFLAGS="$AM_CFLAGS -Wall -Wunused -Wpointer-arith\
291 -Wwrite-strings -Wcast-align"
292 AM_CXXFLAGS="$AM_CXXFLAGS -Wall -Wunused -Wpointer-arith\
293 -Wwrite-strings -Wcast-align -Wno-sign-compare"
295 AM_CFLAGS="$AM_CFLAGS -Wall -W -Wunused -Wshadow -Wpointer-arith\
296 -Wmissing-prototypes -Wwrite-strings -Wredundant-decls -Wnested-externs\
298 AM_CXXFLAGS="$AM_CXXFLAGS -Wall -W -Wunused -Wshadow -Wpointer-arith\
299 -Wwrite-strings -Wcast-align"
301 dnl too many complaints from headers, etc: -Wconversion
304 AC_SUBST(AM_CXXFLAGS)
306 if test x$enable_werror != xyes; then
310 dnl See if large file support is available. Survex is unlikely to need to
311 dnl process files > 2GB in size, but LFS is also needed for stat() to work
312 dnl on filing systems which return 64 bit inode values, such as CIFS mounts.
315 AC_ARG_ENABLE(profiling,
316 [ --enable-profiling Build binaries to generate profiling information],
318 yes) AM_CXXFLAGS="$AM_CXXFLAGS -pg"
319 AM_CFLAGS="$AM_CFLAGS -pg"
320 AC_MSG_RESULT(building binaries to generate profiling information);;
322 *) AC_MSG_ERROR(bad value $enableval for --enable-profiling) ;;
325 EXTRA_TEXT="AUTHORS COPYING NEWS TODO ChangeLog"
330 AC_SUBST_FILE(AVENDESC)
331 AVENDESC=desc-aven.txt
333 dnl Don't define DATADIR if building for MS Windows - it won't be used, and
334 dnl can conflict with the DATADIR typedef in objidl.h
335 if test no = "$mswindows"; then
336 AC_DEFINE_DIR(DATADIR, datadir, [Location of platform independent support files])
340 [/* Use getc_unlocked() and putc_unlocked() where available, since they are
341 * faster, and we don't multithread file accesses.
344 #ifdef HAVE_GETC_UNLOCKED
345 # define GETC(F) getc_unlocked(F)
347 # define GETC(F) getc(F)
349 #ifdef HAVE_PUTC_UNLOCKED
350 # define PUTC(C, F) putc_unlocked(C, F)
352 # define PUTC(C, F) putc(C, F)
356 /* C23 added bool, false and true as keywords - let's emulate that and
357 * avoid every C file which uses these needing to include <stdbool.h>.
359 # include <stdbool.h>
364 Makefile src/Makefile doc/Makefile lib/Makefile lib/icons/Makefile
366 tests/Makefile vim/Makefile survex.iss doc/index.htm
367 survex.spec lib/Info.plist
370 dnl FIXME update msvc makefile for 1.2 branch
371 dnl src/msvc/config.h