source: git/configure.ac @ 1e954b3

stereo-2025
Last change on this file since 1e954b3 was aec56a0, checked in by Olly Betts <olly@…>, 5 months ago

Remove vestiges of ancient support for MSVC

This all seems to be significantly out of date or incomplete. If
someone really wanted to build with MSVC they'd likely be better
off starting again.

  • Property mode set to 100644
File size: 13.2 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)
[a6a956a]6AC_INIT([survex], [1.4.16], [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
[f78ff43]14COPYRIGHT_MSG="Copyright (C) 1990-2025 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
[3d848a3]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
[7e2f708]133dnl The wxWidgets libraries we need:
[f31090c]134wx_libs="core,gl"
[7e2f708]135
[a3f519b]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"}
[bd9730c]139
[ab27074]140AM_CONDITIONAL(WIN32, [test yes = "$mswindows"])
[559cd60]141AM_CONDITIONAL(MACOS, [test yes = "$macos"])
[b9bd864]142
[a3f519b]143if test -n "$WX_CONFIG" ; then
144  dnl WX_CONFIG specified - sanity check the value
[f665d6e]145  dnl don't check for --ldflags - older wx-config didn't do that
[7e2f708]146  if (exec >&5 2>&5;$WX_CONFIG --libs --cflags --cxxflags "$wx_libs";exit $?) then
[f665d6e]147    :
[b9bd864]148  else
[5297c43]149    AC_MSG_ERROR(['$WX_CONFIG --libs --cflags --cxxflags "$wx_libs"' does not work, bailing out])
[f665d6e]150  fi
151else
[559cd60]152  if test yes = "$macos" ; then
[f665d6e]153    wxdef=__WXMAC__
154  elif test yes = "$mswindows" ; then
155    wxdef=__WXMSW__
156  else
157    wxdef=__WXGTK__
158  fi
[5297c43]159  dnl See if wx-config exists and is for the correct version.
[034d9a57]160  dnl Fedora install wx3's wx-config as wx-config-3.0, so look for that in
161  dnl preference.
[6aac0b0]162  dnl Arch Linux uses wx-config-gtk3.
163  AC_PATH_PROGS(WX_CONFIG, [wx-config-3.0 wx-config-gtk3 wx-config])
[5297c43]164  if test -n "$WX_CONFIG" ; then
165    if (exec >&5 2>&5;$WX_CONFIG --cflags "$wx_libs"|grep -e -D"$wxdef";exit $?) then
166      :
167    else
168      AC_MSG_ERROR([wxWidgets not for the right toolkit.  Run ./configure WX_CONFIG=/path/to/wx-config])
[b9bd864]169    fi
[5297c43]170  else
[a3f519b]171    AC_MSG_ERROR([wxWidgets not found.  Run ./configure WX_CONFIG=/path/to/wx-config])
[b9bd864]172  fi
[5809313]173fi
[0fd7598]174
[5627cbb]175dnl Unless the user has explicitly specified a --unicode setting, prefer
176dnl --unicode=yes if we can get it.
177case $WX_CONFIG in
178  *--unicode=*) ;;
179  *)
[7e2f708]180    if (exec >&5 2>&5;$WX_CONFIG --unicode=yes --version "$wx_libs";exit $?) ; then
[5627cbb]181      WX_CONFIG="$WX_CONFIG --unicode=yes"
[7e2f708]182    elif (exec >&5 2>&5;$WX_CONFIG --unicode=no --version "$wx_libs";exit $?) ; then
[5627cbb]183      WX_CONFIG="$WX_CONFIG --unicode=no"
184    fi ;;
185esac
[7092fcb]186
[7e2f708]187WX_LIBS=`$WX_CONFIG --libs "$wx_libs"`
[f665d6e]188dnl Needed for nvidia drivers on linux (for some setups anyway).
189AC_CHECK_LIB(Xxf86vm, XF86VidModeQueryVersion, [WX_LIBS="$WX_LIBS -lXxf86vm"], [], [$WX_LIBS])
[cccbf7f]190
191save_LIBS=$LIBS
192dnl Check if we need a library for OpenGL functions.  Usually it's the "GL"
193dnl library, but it's called opengl32 on Microsoft Windows).
194AC_SEARCH_LIBS([glPushMatrix], [GL opengl32], [WX_LIBS="$WX_LIBS $ac_cv_search_glPushMatrix"], [], [$WX_LIBS])
195dnl Check if we need a library for GLU functions.  Usually it's the "GLU"
196dnl library, but it's called glu32 on Microsoft Windows).
197AC_SEARCH_LIBS([gluProject], [GLU glu32], [WX_LIBS="$WX_LIBS $ac_cv_search_gluProject"], [], [$WX_LIBS])
198LIBS=$save_LIBS
199
[f665d6e]200AC_SUBST(WX_LIBS)
[559cd60]201dnl macOS has OpenGL/gl.h.
[ee63994]202AC_CHECK_HEADERS([GL/gl.h OpenGL/gl.h], [], [], [ ])
[559cd60]203dnl The Debian mingw-w64 packages lack GL/glext.h; macOS has OpenGL/glext.h.
[ee63994]204AC_CHECK_HEADERS([GL/glext.h OpenGL/glext.h], [], [], [#include <GL/gl.h>])
[9c0b089]205
[7e2f708]206WX_CFLAGS=`$WX_CONFIG --cflags "$wx_libs"`
[f665d6e]207AC_SUBST(WX_CFLAGS)
[7e2f708]208WX_CXXFLAGS=`$WX_CONFIG --cxxflags "$wx_libs"`
[f665d6e]209AC_SUBST(WX_CXXFLAGS)
210
[0177571]211AC_LANG([C])
[a5d615f]212save_CFLAGS=$CFLAGS
213CFLAGS="$CFLAGS $WX_CFLAGS"
214AC_CHECK_SIZEOF([wxChar], [], [
215  #include <wx/defs.h>
[631fa17]216  #include <wx/chartype.h>
[a5d615f]217])
218CFLAGS=$save_CFLAGS
[30b66b5]219
[40d1db36]220dnl Check for FFmpeg libraries.
221PKG_CHECK_MODULES([FFMPEG], [libavcodec libavformat libswscale libavutil], [
222  AC_DEFINE([WITH_FFMPEG], [1], [Use FFmpeg for movie export])
[f678705]223  save_CXXFLAGS=$CXXFLAGS
224  save_LIBS=$LIBS
[40d1db36]225  CFLAGS="$CFLAGS $FFMPEG_CFLAGS"
226  LIBS="$LIBS $FFMPEG_LIBS"
[f678705]227  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])
228  AC_CHECK_DECLS([AVMEDIA_TYPE_VIDEO], [], [], [#include <libavcodec/avcodec.h>])
229  AC_CHECK_DECLS([AV_CODEC_ID_NONE], [], [], [#include <libavcodec/avcodec.h>])
[ad04c87]230  AC_CHECK_DECLS([AV_PIX_FMT_RGB24], [], [], [#include <libavutil/pixfmt.h>])
[f678705]231  AC_CHECK_DECLS([AV_PIX_FMT_YUV420P], [], [], [#include <libavutil/pixfmt.h>])
232  CXXFLAGS=$save_CXXFLAGS
233  LIBS=$save_LIBS
[4909e7e1]234], [
235  dnl Build without movie export feature.
[9e516d0d]236])
[40d1db36]237AC_SUBST([FFMPEG_LIBS])
238AC_SUBST([FFMPEG_CFLAGS])
[c527c6e]239
[cf62988]240dnl Check for PROJ.
[ab24da7]241PKG_CHECK_MODULES([PROJ], [proj >= 6.2.0], [
[f678705]242], [
[0b5f43d]243  dnl pkg-config support in proj seems quite new, so probe directly if not
[ab24da7]244  dnl found.  We need proj_create_crs_to_crs_from_pj() which was added in
245  dnl 6.2.0.
246  AC_CHECK_LIB([proj], [proj_create_crs_to_crs_from_pj], [
[0b5f43d]247      PROJ_LIBS=-lproj
248      PROJ_CFLAGS=
249    ], [
[cf62988]250      AC_MSG_ERROR([PROJ required for coordinate transformations])
[0b5f43d]251    ])
[f678705]252])
[8c87227]253AC_SUBST([PROJ_LIBS])
[f678705]254AC_SUBST([PROJ_CFLAGS])
[63dc4eb]255
[51eab3b]256dnl Check for GDAL.
257PKG_CHECK_MODULES([GDAL], [gdal >= 2.3], [
[fd36290]258  AC_DEFINE([HAVE_GDAL], [1], [Define to 1 if you have the 'GDAL' library.])
[51eab3b]259], [
[6ad2f09]260  if test "$mswindows" = no ; then
261    AC_MSG_ERROR([GDAL required for geodata handling])
262  else
263    AC_MSG_WARN([GDAL required for geodata handling])
264  fi
[51eab3b]265])
266AC_SUBST([GDAL_LIBS])
267AC_SUBST([GDAL_CFLAGS])
268
[b6f16ea]269dnl Checks for header files.
[ac1beb0]270
[17f4e1e]271AC_CHECK_HEADERS(string.h)
[55302e3]272
[272c294]273AC_CHECK_FUNCS([popen hypot mmap])
[f66c708]274
[c0f9e1e]275dnl We don't access a FILE* from multiple threads and using the unlocked
276dnl versions has significantly less overhead, especially when reading/writing
277dnl byte-by-byte.  These are specified by POSIX:
[e02a6a6]278AC_CHECK_FUNCS([getc_unlocked putc_unlocked])
[c0f9e1e]279dnl These are GNU extensions in glibc:
280AC_CHECK_FUNCS([feof_unlocked ferror_unlocked fread_unlocked fwrite_unlocked])
[0a85859]281
[c891a7e]282AC_CHECK_FUNCS([setenv unsetenv])
283
[725d3b1]284AC_CHECK_FUNCS([fmemopen])
285
[dba56bb]286dnl Microsoft-specific functions which support positional argument specifiers.
287AC_CHECK_FUNCS([_vfprintf_p _vsprintf_p])
288
[d1aefbc]289AC_PATH_PROG([SPHINX_BUILD], [sphinx-build], [$MISSING sphinx-build])
290AC_ARG_VAR([SPHINX_BUILD], [sphinx-build from python3-sphinx])
[788ed2e]291
[f15ee00]292AC_PATH_PROG([MSGFMT], [msgfmt], [$MISSING msgfmt])
293AC_ARG_VAR([MSGFMT], [msgfmt from gettext])
294
[71aa081]295AC_ARG_ENABLE([werror],
[d583ee2]296  [AS_HELP_STRING([--enable-werror], [enable treating compiler warnings as errors [default=no]])],
[71aa081]297  [case ${enableval} in
298    yes|no) ;;
299  *) AC_MSG_ERROR([bad value ${enableval} for --enable-werror]) ;;
300  esac],
301  [enable_werror=no])
302
303dnl Put -Werror or equivalent in its own make variable so that it can easily
304dnl be overridden by `make WERROR=` if needed during development (e.g. if
305dnl you want to get a full list of compile warnings to fix rather than
306dnl stopping at the first file with warnings).
307WERROR=
308AC_SUBST([WERROR])
309
[b4fe9fb]310dnl extra warning flags for building with GCC
[ab27074]311if test yes = "$GCC"; then
[71aa081]312  WERROR=-Werror
[ab27074]313  if test yes = "$cross_compiling"; then
[331b3aa]314dnl    AM_CFLAGS="$AM_CFLAGS -Werror -Wall -Wunused -Wpointer-arith\
315dnl      -Wwrite-strings -Wcast-align"
[75f9a82]316dnl -Wsign-compare causes a warning with the mingw FD_SET macro, so we have
317dnl to disable it for mingw builds.
[331b3aa]318    AM_CFLAGS="$AM_CFLAGS -Wall -Wunused -Wpointer-arith\
[1809849]319      -Wwrite-strings -Wcast-align"
[b960c63]320    AM_CXXFLAGS="$AM_CXXFLAGS -Wall -Wunused -Wpointer-arith\
[75f9a82]321      -Wwrite-strings -Wcast-align -Wno-sign-compare"
[d5bd3a7]322  else
[ab27074]323    AM_CFLAGS="$AM_CFLAGS -Wall -W -Wunused -Wshadow -Wpointer-arith\
324      -Wmissing-prototypes -Wwrite-strings -Wredundant-decls -Wnested-externs\
[c70e8d2]325      -Wcast-align"
[41cfc8c]326    AM_CXXFLAGS="$AM_CXXFLAGS -Wall -W -Wunused -Wshadow -Wpointer-arith\
[0580c6a]327      -Wwrite-strings -Wcast-align"
[d5bd3a7]328  fi
[b9bd864]329  dnl too many complaints from headers, etc: -Wconversion
[96cc0ab]330fi
[b4fe9fb]331AC_SUBST(AM_CFLAGS)
332AC_SUBST(AM_CXXFLAGS)
[55302e3]333
[71aa081]334if test x$enable_werror != xyes; then
335  WERROR=
336fi
337
[8c0bfb4]338dnl See if large file support is available.  Survex is unlikely to need to
339dnl process files > 2GB in size, but LFS is also needed for stat() to work
340dnl on filing systems which return 64 bit inode values, such as CIFS mounts.
341AC_SYS_LARGEFILE
342
[5341d94]343AC_ARG_ENABLE(profiling,
344[  --enable-profiling Build binaries to generate profiling information],
[21fbe7d]345[case $enableval in
[984f49e]346  yes) AM_CXXFLAGS="$AM_CXXFLAGS -pg"
[b4fe9fb]347       AM_CFLAGS="$AM_CFLAGS -pg"
[5876fcb]348       AC_MSG_RESULT(building binaries to generate profiling information);;
[5341d94]349  no) ;;
[ab27074]350  *) AC_MSG_ERROR(bad value $enableval for --enable-profiling) ;;
[5341d94]351esac])
352
[5636835]353EXTRA_TEXT="AUTHORS COPYING NEWS TODO ChangeLog"
354AC_SUBST(EXTRA_TEXT)
355
[96c5d34]356AC_SUBST_FILE(DESC)
357DESC=desc.txt
358AC_SUBST_FILE(AVENDESC)
359AVENDESC=desc-aven.txt
360
[f665d6e]361dnl Don't define DATADIR if building for MS Windows - it won't be used, and
362dnl can conflict with the DATADIR typedef in objidl.h
[4d0204a]363if test no = "$mswindows"; then
364  AC_DEFINE_DIR(DATADIR, datadir, [Location of platform independent support files])
365fi
[18f4759]366
[e02a6a6]367AH_BOTTOM(
[c0f9e1e]368[/* Use _unlocked() variants of stdio functions where available, since they are
[e02a6a6]369 * faster, and we don't multithread file accesses.
370 */
371
[c0f9e1e]372#ifdef HAVE_FEOF_UNLOCKED
373# define FEOF(F) feof_unlocked(F)
374#else
375# define FEOF(F) feof(F)
376#endif
377
378#ifdef HAVE_FERROR_UNLOCKED
379# define FERROR(F) ferror_unlocked(F)
380#else
381# define FERROR(F) ferror(F)
382#endif
383
384#ifdef HAVE_FREAD_UNLOCKED
385# define FREAD(P, S, N, F) fread_unlocked(P, S, N, F)
386#else
387# define FREAD(P, S, N, F) fread(P, S, N, F)
388#endif
389
390#ifdef HAVE_FWRITE_UNLOCKED
391# define FWRITE(P, S, N, F) fwrite_unlocked(P, S, N, F)
392#else
393# define FWRITE(P, S, N, F) fwrite(P, S, N, F)
394#endif
395
[e02a6a6]396#ifdef HAVE_GETC_UNLOCKED
397# define GETC(F) getc_unlocked(F)
398#else
399# define GETC(F) getc(F)
400#endif
[c0f9e1e]401
[e02a6a6]402#ifdef HAVE_PUTC_UNLOCKED
403# define PUTC(C, F) putc_unlocked(C, F)
404#else
405# define PUTC(C, F) putc(C, F)
406#endif
[a17d22fc]407
408#ifndef __cplusplus
409/* C23 added bool, false and true as keywords - let's emulate that and
410 * avoid every C file which uses these needing to include <stdbool.h>.
411 */
412# include <stdbool.h>
413#endif
[e02a6a6]414])
415
[f542bda]416AC_CONFIG_FILES([
417 Makefile src/Makefile doc/Makefile lib/Makefile lib/icons/Makefile
[09dfd18]418 lib/images/Makefile
[d1aefbc]419 tests/Makefile vim/Makefile survex.iss doc/index.htm
[df10c51]420 survex.spec lib/Info.plist
[f542bda]421 ])
422AC_OUTPUT
Note: See TracBrowser for help on using the repository browser.