source: git/configure.ac @ a6125af

stereo-2025
Last change on this file since a6125af was 6ad2f09, checked in by Olly Betts <olly@…>, 9 months ago

Build without GDAL on Microsoft Windows

The build with GDAL currently doesn't work - aven fails during DLL
initialisation. The problem seems to be in the packaged dependencies
but it's really unclear exactly where and the debugging tools don't
seem to help much.

We really need a working build so turning off GDAL for now seems the
least terrible option. Hopefully the problem will get resolved for
us and we can turn this back on in the future.

  • Property mode set to 100644
File size: 11.9 KB
RevLine 
[c746b4d]1dnl Process this file with autoconf to produce a configure script
[483ac4e]2
[a884696]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)
[0249518]6AC_INIT([survex], [1.4.11], [https://trac.survex.com/])
[6e0cdc2c]7AM_INIT_AUTOMAKE([1.5 gnu -Wall -Wportability -Werror])
[191536f]8RELEASE=1
[79b37a4c]9
[5636835]10AC_SUBST(RELEASE)
[e02a6a6]11AC_CONFIG_HEADERS([config.h])
[5b7b184]12AC_CONFIG_SRCDIR([src/aven.cc])
[96cc0ab]13
[78966780]14COPYRIGHT_MSG="Copyright (C) 1990-2024 Olly Betts"
[920b066]15AVEN_COPYRIGHT_MSG="Copyright (C) 1999-2003,2005,2006 Mark R. Shinwell"
[55302e3]16
[8c05f13]17AC_DEFINE_UNQUOTED(COPYRIGHT_MSG, ["$COPYRIGHT_MSG"], [Copyright Message])
18AC_DEFINE_UNQUOTED(AVEN_COPYRIGHT_MSG, ["$AVEN_COPYRIGHT_MSG"],
[99f252b]19                   [Copyright Message for Aven])
20
21AC_SUBST(COPYRIGHT_MSG)
22AC_SUBST(AVEN_COPYRIGHT_MSG)
[706b033]23
[5627cbb]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
[1d43ee5]32dnl set PRETTYPACKAGE to PACKAGE with the first character capitalised
[21fbe7d]33PRETTYPACKAGE=`echo "$PACKAGE"|cut -b1|tr a-z A-Z``echo "$PACKAGE"|cut -b2-`
[82afbc4]34AC_DEFINE_UNQUOTED(PRETTYPACKAGE, "$PRETTYPACKAGE",
[99f252b]35                   [Name of package (capitalised)])
[aa931b2]36AC_SUBST(PRETTYPACKAGE)
37
[e2546c0]38dnl set COMMAVERSION to VERSION with the dots replaced by commas -
39dnl e.g. "0,99" or "1,0,22"
[21fbe7d]40COMMAVERSION=`echo "$VERSION"|tr '.' ','`
[e2546c0]41AC_DEFINE_UNQUOTED(COMMAVERSION, $COMMAVERSION,
[1db3fa5]42                   [Version number of package (comma-separated)])
[e2546c0]43AC_SUBST(COMMAVERSION)
44
[d0a7bba]45PKGDOCDIR='${prefix}/share/doc/${PACKAGE}'
[4b4bd47]46AC_ARG_ENABLE(docdir,
47[  --enable-docdir=DIR Set directory for installing documentation to DIR],
[21fbe7d]48[case $enableval in
[4b4bd47]49 yes|no)
50  AC_MSG_ERROR([configure: Syntax: configure --enable-docdir=DIR]) ;;
51esac
[ab27074]52PKGDOCDIR="$enableval"
[4b4bd47]53]
54)
[e2ac794]55PKGDOCDIR_EXPANDED=`
[21fbe7d]56 test NONE = "$prefix" && prefix="$ac_default_prefix"
57 test NONE = "$exec_prefix" && exec_prefix="$prefix"
58 eval echo "$PKGDOCDIR"
[e2ac794]59`
[4b4bd47]60AC_SUBST(PKGDOCDIR)
[9b579156]61AC_SUBST(PKGDOCDIR_EXPANDED)
[4b4bd47]62
[4d0204a]63AC_CANONICAL_HOST
[984f49e]64
[55302e3]65dnl Checks for programs.
66AC_PROG_CC
[f78ad72]67AC_PROG_CPP
[5809313]68
[f665d6e]69AC_PROG_CXX
70AC_PROG_CXXCPP
[039fb01]71
[4a7c2f0d]72dnl Probe for any options needed to enable C++11 support.
73AX_CXX_COMPILE_STDCXX_11
74
[c13d1930]75AM_PROG_CC_C_O
76
[0177571]77AC_LANG([C])
[55302e3]78
[96cc0ab]79AC_EXEEXT
80AC_OBJEXT
81
[2032841]82mswindows=no
[559cd60]83macos=no
[21fbe7d]84case $host_os in
[559cd60]85darwin*) macos=yes ;;
[4d0204a]86*mingw*|*cygwin*|windows*) mswindows=yes ;;
87esac
88
[21c226e]89AC_C_BIGENDIAN
[bd63572]90
[c746b4d]91AC_ARG_VAR(STRIP, [Command for discarding symbols from object files])
[4a6f8f6]92AC_PATH_TOOL(STRIP, strip, [echo "not stripping "])
[55302e3]93
[647407d]94AC_CHECK_LIB(m, sqrt)
95
[665029b9]96AC_PATH_XTRA
97
[7e2f708]98dnl The wxWidgets libraries we need:
[f31090c]99wx_libs="core,gl"
[7e2f708]100
[a3f519b]101AC_ARG_VAR(WXCONFIG, [Old name for WX_CONFIG, accepted for compatibility])
102AC_ARG_VAR(WX_CONFIG, [wxWidgets configuration script to use to build Aven])
103: ${WX_CONFIG="$WXCONFIG"}
[bd9730c]104
[ab27074]105AM_CONDITIONAL(WIN32, [test yes = "$mswindows"])
[559cd60]106AM_CONDITIONAL(MACOS, [test yes = "$macos"])
[b9bd864]107
[a3f519b]108if test -n "$WX_CONFIG" ; then
109  dnl WX_CONFIG specified - sanity check the value
[f665d6e]110  dnl don't check for --ldflags - older wx-config didn't do that
[7e2f708]111  if (exec >&5 2>&5;$WX_CONFIG --libs --cflags --cxxflags "$wx_libs";exit $?) then
[f665d6e]112    :
[b9bd864]113  else
[5297c43]114    AC_MSG_ERROR(['$WX_CONFIG --libs --cflags --cxxflags "$wx_libs"' does not work, bailing out])
[f665d6e]115  fi
116else
[559cd60]117  if test yes = "$macos" ; then
[f665d6e]118    wxdef=__WXMAC__
119  elif test yes = "$mswindows" ; then
120    wxdef=__WXMSW__
121  else
122    wxdef=__WXGTK__
123  fi
[5297c43]124  dnl See if wx-config exists and is for the correct version.
[034d9a57]125  dnl Fedora install wx3's wx-config as wx-config-3.0, so look for that in
126  dnl preference.
[6aac0b0]127  dnl Arch Linux uses wx-config-gtk3.
128  AC_PATH_PROGS(WX_CONFIG, [wx-config-3.0 wx-config-gtk3 wx-config])
[5297c43]129  if test -n "$WX_CONFIG" ; then
130    if (exec >&5 2>&5;$WX_CONFIG --cflags "$wx_libs"|grep -e -D"$wxdef";exit $?) then
131      :
132    else
133      AC_MSG_ERROR([wxWidgets not for the right toolkit.  Run ./configure WX_CONFIG=/path/to/wx-config])
[b9bd864]134    fi
[5297c43]135  else
[a3f519b]136    AC_MSG_ERROR([wxWidgets not found.  Run ./configure WX_CONFIG=/path/to/wx-config])
[b9bd864]137  fi
[5809313]138fi
[0fd7598]139
[5627cbb]140dnl Unless the user has explicitly specified a --unicode setting, prefer
141dnl --unicode=yes if we can get it.
142case $WX_CONFIG in
143  *--unicode=*) ;;
144  *)
[7e2f708]145    if (exec >&5 2>&5;$WX_CONFIG --unicode=yes --version "$wx_libs";exit $?) ; then
[5627cbb]146      WX_CONFIG="$WX_CONFIG --unicode=yes"
[7e2f708]147    elif (exec >&5 2>&5;$WX_CONFIG --unicode=no --version "$wx_libs";exit $?) ; then
[5627cbb]148      WX_CONFIG="$WX_CONFIG --unicode=no"
149    fi ;;
150esac
[7092fcb]151
[7e2f708]152WX_LIBS=`$WX_CONFIG --libs "$wx_libs"`
[f665d6e]153dnl Needed for nvidia drivers on linux (for some setups anyway).
154AC_CHECK_LIB(Xxf86vm, XF86VidModeQueryVersion, [WX_LIBS="$WX_LIBS -lXxf86vm"], [], [$WX_LIBS])
[cccbf7f]155
156save_LIBS=$LIBS
157dnl Check if we need a library for OpenGL functions.  Usually it's the "GL"
158dnl library, but it's called opengl32 on Microsoft Windows).
159AC_SEARCH_LIBS([glPushMatrix], [GL opengl32], [WX_LIBS="$WX_LIBS $ac_cv_search_glPushMatrix"], [], [$WX_LIBS])
160dnl Check if we need a library for GLU functions.  Usually it's the "GLU"
161dnl library, but it's called glu32 on Microsoft Windows).
162AC_SEARCH_LIBS([gluProject], [GLU glu32], [WX_LIBS="$WX_LIBS $ac_cv_search_gluProject"], [], [$WX_LIBS])
163LIBS=$save_LIBS
164
[f665d6e]165AC_SUBST(WX_LIBS)
[559cd60]166dnl macOS has OpenGL/gl.h.
[ee63994]167AC_CHECK_HEADERS([GL/gl.h OpenGL/gl.h], [], [], [ ])
[559cd60]168dnl The Debian mingw-w64 packages lack GL/glext.h; macOS has OpenGL/glext.h.
[ee63994]169AC_CHECK_HEADERS([GL/glext.h OpenGL/glext.h], [], [], [#include <GL/gl.h>])
[9c0b089]170
[7e2f708]171WX_CFLAGS=`$WX_CONFIG --cflags "$wx_libs"`
[f665d6e]172AC_SUBST(WX_CFLAGS)
[7e2f708]173WX_CXXFLAGS=`$WX_CONFIG --cxxflags "$wx_libs"`
[f665d6e]174AC_SUBST(WX_CXXFLAGS)
175
[0177571]176AC_LANG([C])
[a5d615f]177save_CFLAGS=$CFLAGS
178CFLAGS="$CFLAGS $WX_CFLAGS"
179AC_CHECK_SIZEOF([wxChar], [], [
180  #include <wx/defs.h>
[631fa17]181  #include <wx/chartype.h>
[a5d615f]182])
183CFLAGS=$save_CFLAGS
[30b66b5]184
[40d1db36]185dnl Check for FFmpeg libraries.
186PKG_CHECK_MODULES([FFMPEG], [libavcodec libavformat libswscale libavutil], [
187  AC_DEFINE([WITH_FFMPEG], [1], [Use FFmpeg for movie export])
[f678705]188  save_CXXFLAGS=$CXXFLAGS
189  save_LIBS=$LIBS
[40d1db36]190  CFLAGS="$CFLAGS $FFMPEG_CFLAGS"
191  LIBS="$LIBS $FFMPEG_LIBS"
[f678705]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>])
[ad04c87]195  AC_CHECK_DECLS([AV_PIX_FMT_RGB24], [], [], [#include <libavutil/pixfmt.h>])
[f678705]196  AC_CHECK_DECLS([AV_PIX_FMT_YUV420P], [], [], [#include <libavutil/pixfmt.h>])
197  CXXFLAGS=$save_CXXFLAGS
198  LIBS=$save_LIBS
[4909e7e1]199], [
200  dnl Build without movie export feature.
[9e516d0d]201])
[40d1db36]202AC_SUBST([FFMPEG_LIBS])
203AC_SUBST([FFMPEG_CFLAGS])
[c527c6e]204
[cf62988]205dnl Check for PROJ.
[ab24da7]206PKG_CHECK_MODULES([PROJ], [proj >= 6.2.0], [
[f678705]207], [
[0b5f43d]208  dnl pkg-config support in proj seems quite new, so probe directly if not
[ab24da7]209  dnl found.  We need proj_create_crs_to_crs_from_pj() which was added in
210  dnl 6.2.0.
211  AC_CHECK_LIB([proj], [proj_create_crs_to_crs_from_pj], [
[0b5f43d]212      PROJ_LIBS=-lproj
213      PROJ_CFLAGS=
214    ], [
[cf62988]215      AC_MSG_ERROR([PROJ required for coordinate transformations])
[0b5f43d]216    ])
[f678705]217])
[8c87227]218AC_SUBST([PROJ_LIBS])
[f678705]219AC_SUBST([PROJ_CFLAGS])
[63dc4eb]220
[51eab3b]221dnl Check for GDAL.
[6ad2f09]222have_gdal=1
[51eab3b]223PKG_CHECK_MODULES([GDAL], [gdal >= 2.3], [
224], [
[6ad2f09]225  if test "$mswindows" = no ; then
226    AC_MSG_ERROR([GDAL required for geodata handling])
227  else
228    AC_MSG_WARN([GDAL required for geodata handling])
229  fi
230  have_gdal=0
[51eab3b]231])
[6ad2f09]232AC_DEFINE_UNQUOTED([HAVE_GDAL], [$have_gdal], [Define to 1 if you have the 'GDAL' library.])
[51eab3b]233AC_SUBST([GDAL_LIBS])
234AC_SUBST([GDAL_CFLAGS])
235
[b6f16ea]236dnl Checks for header files.
[ac1beb0]237
[f78ad72]238dnl don't use AC_CHECK_FUNCS for setjmp - mingw #define-s it to _setjmp
[9463b1d]239AC_CHECK_HEADERS(limits.h string.h setjmp.h)
[55302e3]240
241dnl Checks for typedefs, structures, and compiler characteristics.
242AC_TYPE_SIZE_T
243AC_STRUCT_TM
244
[8c45eea]245dnl Check for 16-bit and 32-bit integer types.
246AC_TYPE_INT16_T
[136cff2]247AC_TYPE_UINT16_T
[8c45eea]248AC_TYPE_INT32_T
[136cff2]249AC_TYPE_UINT32_T
[647407d]250
[0a9b040]251dnl Check if there's a declaration of lround().  Below we also check for
252dnl lround() with AC_CHECK_FUNCS, which just checks if it can be linked
253dnl against.  Some platforms are missing a prototype for lround(), so
[6b536b3]254dnl both checks are useful.
[0a9b040]255AC_CHECK_DECLS([lround], [], [], [[#include <math.h>]])
[a901cea]256AC_CHECK_FUNCS([popen getpwuid lround hypot mmap])
[f66c708]257
[e02a6a6]258dnl Much faster than using getc()/putc(), at least on Linux.
259AC_CHECK_FUNCS([getc_unlocked putc_unlocked])
[0a85859]260
[c891a7e]261AC_CHECK_FUNCS([setenv unsetenv])
262
[725d3b1]263AC_CHECK_FUNCS([fmemopen])
264
[dba56bb]265dnl Microsoft-specific functions which support positional argument specifiers.
266AC_CHECK_FUNCS([_vfprintf_p _vsprintf_p])
267
[d1aefbc]268AC_PATH_PROG([SPHINX_BUILD], [sphinx-build], [$MISSING sphinx-build])
269AC_ARG_VAR([SPHINX_BUILD], [sphinx-build from python3-sphinx])
[788ed2e]270
[f15ee00]271AC_PATH_PROG([MSGFMT], [msgfmt], [$MISSING msgfmt])
272AC_ARG_VAR([MSGFMT], [msgfmt from gettext])
273
[71aa081]274AC_ARG_ENABLE([werror],
[d583ee2]275  [AS_HELP_STRING([--enable-werror], [enable treating compiler warnings as errors [default=no]])],
[71aa081]276  [case ${enableval} in
277    yes|no) ;;
278  *) AC_MSG_ERROR([bad value ${enableval} for --enable-werror]) ;;
279  esac],
280  [enable_werror=no])
281
282dnl Put -Werror or equivalent in its own make variable so that it can easily
283dnl be overridden by `make WERROR=` if needed during development (e.g. if
284dnl you want to get a full list of compile warnings to fix rather than
285dnl stopping at the first file with warnings).
286WERROR=
287AC_SUBST([WERROR])
288
[b4fe9fb]289dnl extra warning flags for building with GCC
[ab27074]290if test yes = "$GCC"; then
[71aa081]291  WERROR=-Werror
[ab27074]292  if test yes = "$cross_compiling"; then
[331b3aa]293dnl    AM_CFLAGS="$AM_CFLAGS -Werror -Wall -Wunused -Wpointer-arith\
294dnl      -Wwrite-strings -Wcast-align"
[75f9a82]295dnl -Wsign-compare causes a warning with the mingw FD_SET macro, so we have
296dnl to disable it for mingw builds.
[331b3aa]297    AM_CFLAGS="$AM_CFLAGS -Wall -Wunused -Wpointer-arith\
[1809849]298      -Wwrite-strings -Wcast-align"
[b960c63]299    AM_CXXFLAGS="$AM_CXXFLAGS -Wall -Wunused -Wpointer-arith\
[75f9a82]300      -Wwrite-strings -Wcast-align -Wno-sign-compare"
[d5bd3a7]301  else
[ab27074]302    AM_CFLAGS="$AM_CFLAGS -Wall -W -Wunused -Wshadow -Wpointer-arith\
303      -Wmissing-prototypes -Wwrite-strings -Wredundant-decls -Wnested-externs\
[c70e8d2]304      -Wcast-align"
[41cfc8c]305    AM_CXXFLAGS="$AM_CXXFLAGS -Wall -W -Wunused -Wshadow -Wpointer-arith\
[0580c6a]306      -Wwrite-strings -Wcast-align"
[d5bd3a7]307  fi
[b9bd864]308  dnl too many complaints from headers, etc: -Wconversion
[96cc0ab]309fi
[b4fe9fb]310AC_SUBST(AM_CFLAGS)
311AC_SUBST(AM_CXXFLAGS)
[55302e3]312
[71aa081]313if test x$enable_werror != xyes; then
314  WERROR=
315fi
316
[8c0bfb4]317dnl See if large file support is available.  Survex is unlikely to need to
318dnl process files > 2GB in size, but LFS is also needed for stat() to work
319dnl on filing systems which return 64 bit inode values, such as CIFS mounts.
320AC_SYS_LARGEFILE
321
[5341d94]322AC_ARG_ENABLE(profiling,
323[  --enable-profiling Build binaries to generate profiling information],
[21fbe7d]324[case $enableval in
[984f49e]325  yes) AM_CXXFLAGS="$AM_CXXFLAGS -pg"
[b4fe9fb]326       AM_CFLAGS="$AM_CFLAGS -pg"
[5876fcb]327       AC_MSG_RESULT(building binaries to generate profiling information);;
[5341d94]328  no) ;;
[ab27074]329  *) AC_MSG_ERROR(bad value $enableval for --enable-profiling) ;;
[5341d94]330esac])
331
[5636835]332EXTRA_TEXT="AUTHORS COPYING NEWS TODO ChangeLog"
333AC_SUBST(EXTRA_TEXT)
334
[96c5d34]335AC_SUBST_FILE(DESC)
336DESC=desc.txt
337AC_SUBST_FILE(AVENDESC)
338AVENDESC=desc-aven.txt
339
[f665d6e]340dnl Don't define DATADIR if building for MS Windows - it won't be used, and
341dnl can conflict with the DATADIR typedef in objidl.h
[4d0204a]342if test no = "$mswindows"; then
343  AC_DEFINE_DIR(DATADIR, datadir, [Location of platform independent support files])
344fi
[18f4759]345
[e02a6a6]346AH_BOTTOM(
347[/* Use getc_unlocked() and putc_unlocked() where available, since they are
348 * faster, and we don't multithread file accesses.
349 */
350
351#ifdef HAVE_GETC_UNLOCKED
352# define GETC(F) getc_unlocked(F)
353#else
354# define GETC(F) getc(F)
355#endif
356#ifdef HAVE_PUTC_UNLOCKED
357# define PUTC(C, F) putc_unlocked(C, F)
358#else
359# define PUTC(C, F) putc(C, F)
360#endif
[a17d22fc]361
362#ifndef __cplusplus
363/* C23 added bool, false and true as keywords - let's emulate that and
364 * avoid every C file which uses these needing to include <stdbool.h>.
365 */
366# include <stdbool.h>
367#endif
[e02a6a6]368])
369
[f542bda]370AC_CONFIG_FILES([
371 Makefile src/Makefile doc/Makefile lib/Makefile lib/icons/Makefile
[09dfd18]372 lib/images/Makefile
[d1aefbc]373 tests/Makefile vim/Makefile survex.iss doc/index.htm
[df10c51]374 survex.spec lib/Info.plist
[f542bda]375 ])
376AC_OUTPUT
[d959ab2]377dnl FIXME update msvc makefile for 1.2 branch
[cf733ae]378dnl src/msvc/config.h
Note: See TracBrowser for help on using the repository browser.