source: git/configure.ac

Last change on this file was fd0e32a, checked in by Olly Betts <olly@…>, 4 months ago

Raise wxWidgets requirement to >= 3.2.0

Previously it was >= 3.0.0 but it is starting to become hard to
keep everything working with 3.0.0 and the time and effort seems
better directed to other things.

The last 3.0.x release was 3.0.5.1 released 2020-05-02.

wx3.2.0 was released 2022-07-06 and it seems everywhere with wxWidgets
packages upgraded to 3.2.x some time ago.

  • Property mode set to 100644
File size: 13.8 KB
Line 
1dnl Process this file with autoconf to produce a configure script
2
3dnl Need autoconf 2.50 or later for AC_ARG_VAR.  2.59 has been around for
4dnl long enough, that we might as well just require that.
5AC_PREREQ(2.59)
6AC_INIT([survex], [1.4.17], [https://trac.survex.com/])
7AM_INIT_AUTOMAKE([1.5 gnu -Wall -Wportability -Werror])
8RELEASE=1
9
10AC_SUBST(RELEASE)
11AC_CONFIG_HEADERS([config.h])
12AC_CONFIG_SRCDIR([src/aven.cc])
13
14COPYRIGHT_MSG="Copyright (C) 1990-2025 Olly Betts"
15AVEN_COPYRIGHT_MSG="Copyright (C) 1999-2003,2005,2006 Mark R. Shinwell"
16
17AC_DEFINE_UNQUOTED(COPYRIGHT_MSG, ["$COPYRIGHT_MSG"], [Copyright Message])
18AC_DEFINE_UNQUOTED(AVEN_COPYRIGHT_MSG, ["$AVEN_COPYRIGHT_MSG"],
19                   [Copyright Message for Aven])
20
21AC_SUBST(COPYRIGHT_MSG)
22AC_SUBST(AVEN_COPYRIGHT_MSG)
23
24COPYRIGHT_MSG_UTF8=`echo "$COPYRIGHT_MSG"|sed 's/(C)/©/'`
25AVEN_COPYRIGHT_MSG_UTF8=`echo "$AVEN_COPYRIGHT_MSG"|sed 's/(C)/©/'`
26
27AC_DEFINE_UNQUOTED(COPYRIGHT_MSG_UTF8, ["$COPYRIGHT_MSG_UTF8"],
28                   [Copyright Message in UTF-8])
29AC_DEFINE_UNQUOTED(AVEN_COPYRIGHT_MSG_UTF8, ["$AVEN_COPYRIGHT_MSG_UTF8"],
30                   [Copyright Message for Aven in UTF-8])
31
32dnl set PRETTYPACKAGE to PACKAGE with the first character capitalised
33PRETTYPACKAGE=`echo "$PACKAGE"|cut -b1|tr a-z A-Z``echo "$PACKAGE"|cut -b2-`
34AC_DEFINE_UNQUOTED(PRETTYPACKAGE, "$PRETTYPACKAGE",
35                   [Name of package (capitalised)])
36AC_SUBST(PRETTYPACKAGE)
37
38dnl set COMMAVERSION to VERSION with the dots replaced by commas -
39dnl e.g. "0,99" or "1,0,22"
40COMMAVERSION=`echo "$VERSION"|tr '.' ','`
41AC_DEFINE_UNQUOTED(COMMAVERSION, $COMMAVERSION,
42                   [Version number of package (comma-separated)])
43AC_SUBST(COMMAVERSION)
44
45PKGDOCDIR='${prefix}/share/doc/${PACKAGE}'
46AC_ARG_ENABLE(docdir,
47[  --enable-docdir=DIR Set directory for installing documentation to DIR],
48[case $enableval in
49 yes|no)
50  AC_MSG_ERROR([configure: Syntax: configure --enable-docdir=DIR]) ;;
51esac
52PKGDOCDIR="$enableval"
53]
54)
55PKGDOCDIR_EXPANDED=`
56 test NONE = "$prefix" && prefix="$ac_default_prefix"
57 test NONE = "$exec_prefix" && exec_prefix="$prefix"
58 eval echo "$PKGDOCDIR"
59`
60AC_SUBST(PKGDOCDIR)
61AC_SUBST(PKGDOCDIR_EXPANDED)
62
63AC_CANONICAL_HOST
64
65dnl Checks for programs.
66AC_PROG_CC
67AC_PROG_CPP
68
69AC_PROG_CXX
70AC_PROG_CXXCPP
71
72dnl Probe for any options needed to enable C++11 support.
73AX_CXX_COMPILE_STDCXX_11
74
75AM_PROG_CC_C_O
76
77AC_LANG([C])
78
79AC_EXEEXT
80AC_OBJEXT
81
82mswindows=no
83macos=no
84case $host_os in
85darwin*) macos=yes ;;
86*mingw*|*cygwin*|windows*) mswindows=yes ;;
87esac
88
89AC_C_BIGENDIAN
90
91AC_ARG_VAR(STRIP, [Command for discarding symbols from object files])
92AC_PATH_TOOL(STRIP, strip, [echo "not stripping "])
93
94AC_CHECK_LIB(m, sqrt)
95
96dnl x86 has excess precision issues with 387 FP instructions, which are
97dnl avoided by using SSE instructions instead.  By default we require SSE2
98dnl which for Intel means a Pentium 4 which was launched in 2000; Pentium
99dnl 3 was finally discontinued in 2007.
100AC_ARG_ENABLE([sse],
101[AS_HELP_STRING([--disable-sse],
102                [disable use of SSE FP instructions on x86])]
103[AS_HELP_STRING([[--enable-sse[=sse|sse2]]],
104                [set which SSE FP instructions to use on x86 (default: sse2)])],
105  [case ${enableval} in
106    sse|sse2|yes|no) ;;
107    *) AC_MSG_ERROR([bad value ${enableval} for --enable-sse or --disable-sse]) ;;
108  esac],
109  [enable_sse=yes])
110
111AC_MSG_CHECKING([whether to use SSE instructions on x86])
112case $host_cpu in
113  i*86)
114    if test "$enable_sse" = no ; then
115      AC_MSG_RESULT([no - WARNING: Testsuite will probably fail])
116    else
117      dnl Default to sse2.
118      test "$enable_sse" != yes || enable_sse=sse2
119      if test yes = "$GXX"; then
120        AC_MSG_RESULT([yes (configure with --disable-sse to disable)])
121        dnl We can unconditionally use -mtune=generic as it was added in GCC
122        dnl 4.2, and supported at least as far back as clang 3.0.
123        AM_CXXFLAGS="$AM_CXXFLAGS -mfpmath=sse -m$enable_sse -mtune=generic"
124      else
125        AC_MSG_RESULT([don't know how to for compiler $CXX])
126      fi
127    fi
128    ;;
129  *)
130    AC_MSG_RESULT([non-x86 arch ($host_cpu)]) ;;
131esac
132
133dnl The wxWidgets libraries we need:
134wx_libs="core,gl"
135
136AC_ARG_VAR(WXCONFIG, [Old name for WX_CONFIG, accepted for compatibility])
137AC_ARG_VAR(WX_CONFIG, [wxWidgets configuration script to use to build Aven])
138: ${WX_CONFIG="$WXCONFIG"}
139
140AM_CONDITIONAL(WIN32, [test yes = "$mswindows"])
141AM_CONDITIONAL(MACOS, [test yes = "$macos"])
142
143if test -n "$WX_CONFIG" ; then
144  dnl WX_CONFIG specified - sanity check the value
145  dnl don't check for --ldflags - older wx-config didn't do that
146  if (exec >&5 2>&5;$WX_CONFIG --libs --cflags --cxxflags "$wx_libs";exit $?) then
147    :
148  else
149    AC_MSG_ERROR(['$WX_CONFIG --libs --cflags --cxxflags "$wx_libs"' does not work, bailing out])
150  fi
151else
152  if test yes = "$macos" ; then
153    wxdef=__WXMAC__
154  elif test yes = "$mswindows" ; then
155    wxdef=__WXMSW__
156  else
157    wxdef=__WXGTK__
158  fi
159  dnl See if wx-config exists and is for the correct version.
160  dnl Fedora seem to install as wx-config-3.2 with a symlink from wx-config, so
161  dnl look for the versioned name in preference.
162  dnl
163  dnl Arch Linux uses wx-config-gtk3.
164  AC_PATH_PROGS(WX_CONFIG, [wx-config-3.2 wx-config-gtk3 wx-config])
165  if test -n "$WX_CONFIG" ; then
166    if (exec >&5 2>&5;$WX_CONFIG --cflags "$wx_libs"|grep -e -D"$wxdef";exit $?) then
167      :
168    else
169      AC_MSG_ERROR([wxWidgets not for the right toolkit.  Run ./configure WX_CONFIG=/path/to/wx-config])
170    fi
171  else
172    AC_MSG_ERROR([wxWidgets not found.  Run ./configure WX_CONFIG=/path/to/wx-config])
173  fi
174fi
175
176dnl Unless the user has explicitly specified a --unicode setting, prefer
177dnl --unicode=yes if we can get it.
178case $WX_CONFIG in
179  *--unicode=*) ;;
180  *)
181    if (exec >&5 2>&5;$WX_CONFIG --unicode=yes --version "$wx_libs";exit $?) ; then
182      WX_CONFIG="$WX_CONFIG --unicode=yes"
183    elif (exec >&5 2>&5;$WX_CONFIG --unicode=no --version "$wx_libs";exit $?) ; then
184      WX_CONFIG="$WX_CONFIG --unicode=no"
185    fi ;;
186esac
187
188WX_LIBS=`$WX_CONFIG --libs "$wx_libs"`
189dnl Needed for nvidia drivers on linux (for some setups anyway).
190AC_CHECK_LIB(Xxf86vm, XF86VidModeQueryVersion, [WX_LIBS="$WX_LIBS -lXxf86vm"], [], [$WX_LIBS])
191
192save_LIBS=$LIBS
193dnl Check if we need a library for OpenGL functions.  Usually it's the "GL"
194dnl library, but it's called opengl32 on Microsoft Windows).
195AC_SEARCH_LIBS([glPushMatrix], [GL opengl32], [WX_LIBS="$WX_LIBS $ac_cv_search_glPushMatrix"], [], [$WX_LIBS])
196dnl Check if we need a library for GLU functions.  Usually it's the "GLU"
197dnl library, but it's called glu32 on Microsoft Windows).
198AC_SEARCH_LIBS([gluProject], [GLU glu32], [WX_LIBS="$WX_LIBS $ac_cv_search_gluProject"], [], [$WX_LIBS])
199LIBS=$save_LIBS
200
201AC_SUBST(WX_LIBS)
202dnl macOS has OpenGL/gl.h and OpenGL/glu.h.
203AC_CHECK_HEADERS([GL/gl.h OpenGL/gl.h], [], [], [ ])
204AC_CHECK_HEADERS([GL/glu.h OpenGL/glu.h], [], [], [ ])
205dnl Older Debian mingw-w64 packages lacked GL/glext.h; macOS has OpenGL/glext.h.
206dnl Requires an explicit include of gl.h first.
207AC_CHECK_HEADERS([GL/glext.h OpenGL/glext.h], [], [], [
208  #ifdef HAVE_GL_GL_H
209  # include <GL/gl.h>
210  #elif defined HAVE_OPENGL_GL_H
211  # include <OpenGL/gl.h>
212  #endif
213  ])
214
215WX_CFLAGS=`$WX_CONFIG --cflags "$wx_libs"`
216AC_SUBST(WX_CFLAGS)
217WX_CXXFLAGS=`$WX_CONFIG --cxxflags "$wx_libs"`
218AC_SUBST(WX_CXXFLAGS)
219
220AC_LANG([C])
221save_CFLAGS=$CFLAGS
222CFLAGS="$CFLAGS $WX_CFLAGS"
223AC_CHECK_SIZEOF([wxChar], [], [
224  #include <wx/defs.h>
225  #include <wx/chartype.h>
226])
227CFLAGS=$save_CFLAGS
228
229dnl Check for FFmpeg libraries.
230PKG_CHECK_MODULES([FFMPEG], [libavcodec libavformat libswscale libavutil], [
231  AC_DEFINE([WITH_FFMPEG], [1], [Use FFmpeg for movie export])
232  save_CXXFLAGS=$CXXFLAGS
233  save_LIBS=$LIBS
234  CFLAGS="$CFLAGS $FFMPEG_CFLAGS"
235  LIBS="$LIBS $FFMPEG_LIBS"
236  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])
237  AC_CHECK_DECLS([AVMEDIA_TYPE_VIDEO], [], [], [#include <libavcodec/avcodec.h>])
238  AC_CHECK_DECLS([AV_CODEC_ID_NONE], [], [], [#include <libavcodec/avcodec.h>])
239  AC_CHECK_DECLS([AV_PIX_FMT_RGB24], [], [], [#include <libavutil/pixfmt.h>])
240  AC_CHECK_DECLS([AV_PIX_FMT_YUV420P], [], [], [#include <libavutil/pixfmt.h>])
241  CXXFLAGS=$save_CXXFLAGS
242  LIBS=$save_LIBS
243], [
244  dnl Build without movie export feature.
245])
246AC_SUBST([FFMPEG_LIBS])
247AC_SUBST([FFMPEG_CFLAGS])
248
249dnl Check for PROJ.
250PKG_CHECK_MODULES([PROJ], [proj >= 6.2.0], [
251], [
252  dnl pkg-config support in proj seems quite new, so probe directly if not
253  dnl found.  We need proj_create_crs_to_crs_from_pj() which was added in
254  dnl 6.2.0.
255  AC_CHECK_LIB([proj], [proj_create_crs_to_crs_from_pj], [
256      PROJ_LIBS=-lproj
257      PROJ_CFLAGS=
258    ], [
259      AC_MSG_ERROR([PROJ required for coordinate transformations])
260    ])
261])
262AC_SUBST([PROJ_LIBS])
263AC_SUBST([PROJ_CFLAGS])
264
265dnl Check for GDAL.
266PKG_CHECK_MODULES([GDAL], [gdal >= 2.3], [
267  AC_DEFINE([HAVE_GDAL], [1], [Define to 1 if you have the 'GDAL' library.])
268], [
269  if test "$mswindows" = no ; then
270    AC_MSG_ERROR([GDAL required for geodata handling])
271  else
272    AC_MSG_WARN([GDAL required for geodata handling])
273  fi
274])
275AC_SUBST([GDAL_LIBS])
276AC_SUBST([GDAL_CFLAGS])
277
278dnl Checks for header files.
279
280AC_CHECK_HEADERS(string.h)
281
282AC_CHECK_FUNCS([popen hypot mmap strdup])
283
284dnl We don't access a FILE* from multiple threads and using the unlocked
285dnl versions has significantly less overhead, especially when reading/writing
286dnl byte-by-byte.  These are specified by POSIX:
287AC_CHECK_FUNCS([getc_unlocked putc_unlocked putchar_unlocked])
288dnl These are GNU extensions in glibc:
289AC_CHECK_FUNCS([feof_unlocked ferror_unlocked fread_unlocked fwrite_unlocked])
290
291AC_CHECK_FUNCS([setenv unsetenv])
292
293AC_CHECK_FUNCS([fmemopen])
294
295dnl Microsoft-specific functions which support positional argument specifiers.
296AC_CHECK_FUNCS([_vfprintf_p _vsprintf_p])
297
298AC_PATH_PROG([SPHINX_BUILD], [sphinx-build], [$MISSING sphinx-build])
299AC_ARG_VAR([SPHINX_BUILD], [sphinx-build from python3-sphinx])
300
301AC_PATH_PROG([MSGFMT], [msgfmt], [$MISSING msgfmt])
302AC_ARG_VAR([MSGFMT], [msgfmt from gettext])
303
304AC_ARG_ENABLE([werror],
305  [AS_HELP_STRING([--enable-werror], [enable treating compiler warnings as errors [default=no]])],
306  [case ${enableval} in
307    yes|no) ;;
308  *) AC_MSG_ERROR([bad value ${enableval} for --enable-werror]) ;;
309  esac],
310  [enable_werror=no])
311
312dnl Put -Werror or equivalent in its own make variable so that it can easily
313dnl be overridden by `make WERROR=` if needed during development (e.g. if
314dnl you want to get a full list of compile warnings to fix rather than
315dnl stopping at the first file with warnings).
316WERROR=
317AC_SUBST([WERROR])
318
319dnl extra warning flags for building with GCC
320if test yes = "$GCC"; then
321  WERROR=-Werror
322  if test yes = "$cross_compiling"; then
323dnl    AM_CFLAGS="$AM_CFLAGS -Werror -Wall -Wunused -Wpointer-arith\
324dnl      -Wwrite-strings -Wcast-align"
325dnl -Wsign-compare causes a warning with the mingw FD_SET macro, so we have
326dnl to disable it for mingw builds.
327    AM_CFLAGS="$AM_CFLAGS -Wall -Wunused -Wpointer-arith\
328      -Wwrite-strings -Wcast-align"
329    AM_CXXFLAGS="$AM_CXXFLAGS -Wall -Wunused -Wpointer-arith\
330      -Wwrite-strings -Wcast-align -Wno-sign-compare"
331  else
332    AM_CFLAGS="$AM_CFLAGS -Wall -W -Wunused -Wshadow -Wpointer-arith\
333      -Wmissing-prototypes -Wwrite-strings -Wredundant-decls -Wnested-externs\
334      -Wcast-align"
335    AM_CXXFLAGS="$AM_CXXFLAGS -Wall -W -Wunused -Wshadow -Wpointer-arith\
336      -Wwrite-strings -Wcast-align"
337  fi
338  dnl too many complaints from headers, etc: -Wconversion
339fi
340AC_SUBST(AM_CFLAGS)
341AC_SUBST(AM_CXXFLAGS)
342
343if test x$enable_werror != xyes; then
344  WERROR=
345fi
346
347dnl See if large file support is available.  Survex is unlikely to need to
348dnl process files > 2GB in size, but LFS is also needed for stat() to work
349dnl on filing systems which return 64 bit inode values, such as CIFS mounts.
350AC_SYS_LARGEFILE
351
352AC_ARG_ENABLE(profiling,
353[  --enable-profiling Build binaries to generate profiling information],
354[case $enableval in
355  yes) AM_CXXFLAGS="$AM_CXXFLAGS -pg"
356       AM_CFLAGS="$AM_CFLAGS -pg"
357       AC_MSG_RESULT(building binaries to generate profiling information);;
358  no) ;;
359  *) AC_MSG_ERROR(bad value $enableval for --enable-profiling) ;;
360esac])
361
362EXTRA_TEXT="AUTHORS COPYING NEWS TODO ChangeLog"
363AC_SUBST(EXTRA_TEXT)
364
365AC_SUBST_FILE(DESC)
366DESC=desc.txt
367AC_SUBST_FILE(AVENDESC)
368AVENDESC=desc-aven.txt
369
370dnl Don't define DATADIR if building for MS Windows - it won't be used, and
371dnl can conflict with the DATADIR typedef in objidl.h
372if test no = "$mswindows"; then
373  AC_DEFINE_DIR(DATADIR, datadir, [Location of platform independent support files])
374fi
375
376AH_BOTTOM(
377[/* Use _unlocked() variants of stdio functions where available, since they are
378 * faster, and we don't multithread file accesses.
379 */
380
381#ifdef HAVE_FEOF_UNLOCKED
382# define FEOF(F) feof_unlocked(F)
383#else
384# define FEOF(F) feof(F)
385#endif
386
387#ifdef HAVE_FERROR_UNLOCKED
388# define FERROR(F) ferror_unlocked(F)
389#else
390# define FERROR(F) ferror(F)
391#endif
392
393#ifdef HAVE_FREAD_UNLOCKED
394# define FREAD(P, S, N, F) fread_unlocked(P, S, N, F)
395#else
396# define FREAD(P, S, N, F) fread(P, S, N, F)
397#endif
398
399/* If we call this FWRITE() then macos errors out on uses with:
400 * error: called object type 'int' is not a function or function pointer
401 * Unclear what's going on - a conditional `#undef FWRITE` before defining
402 * doesn't help.
403 */
404#ifdef HAVE_FWRITE_UNLOCKED
405# define FWRITE_(P, S, N, F) fwrite_unlocked(P, S, N, F)
406#else
407# define FWRITE_(P, S, N, F) fwrite(P, S, N, F)
408#endif
409
410#ifdef HAVE_GETC_UNLOCKED
411# define GETC(F) getc_unlocked(F)
412#else
413# define GETC(F) getc(F)
414#endif
415
416#ifdef HAVE_PUTC_UNLOCKED
417# define PUTC(C, F) putc_unlocked(C, F)
418#else
419# define PUTC(C, F) putc(C, F)
420#endif
421
422#ifdef HAVE_PUTC_UNLOCKED
423# define PUTCHAR(C) putchar_unlocked(C)
424#else
425# define PUTCHAR(C) putchar(C)
426#endif
427
428#ifndef __cplusplus
429/* C23 added bool, false and true as keywords - let's emulate that and
430 * avoid every C file which uses these needing to include <stdbool.h>.
431 */
432# include <stdbool.h>
433#endif
434])
435
436AC_CONFIG_FILES([
437 Makefile src/Makefile doc/Makefile lib/Makefile lib/icons/Makefile
438 lib/images/Makefile
439 tests/Makefile vim/Makefile survex.iss doc/index.htm
440 survex.spec lib/Info.plist
441 ])
442AC_OUTPUT
Note: See TracBrowser for help on using the repository browser.