| 1 | dnl Process this file with autoconf to produce a configure script |
|---|
| 2 | |
|---|
| 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. |
|---|
| 5 | AC_PREREQ(2.59) |
|---|
| 6 | AC_INIT([survex], [1.4.19], [https://trac.survex.com/]) |
|---|
| 7 | AM_INIT_AUTOMAKE([1.5 gnu -Wall -Wportability -Werror]) |
|---|
| 8 | RELEASE=1 |
|---|
| 9 | |
|---|
| 10 | AC_SUBST(RELEASE) |
|---|
| 11 | AC_CONFIG_HEADERS([config.h]) |
|---|
| 12 | AC_CONFIG_SRCDIR([src/aven.cc]) |
|---|
| 13 | |
|---|
| 14 | COPYRIGHT_MSG="Copyright (C) 1990-2025 Olly Betts" |
|---|
| 15 | AVEN_COPYRIGHT_MSG="Copyright (C) 1999-2003,2005,2006 Mark R. Shinwell" |
|---|
| 16 | |
|---|
| 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]) |
|---|
| 20 | |
|---|
| 21 | AC_SUBST(COPYRIGHT_MSG) |
|---|
| 22 | AC_SUBST(AVEN_COPYRIGHT_MSG) |
|---|
| 23 | |
|---|
| 24 | COPYRIGHT_MSG_UTF8=`echo "$COPYRIGHT_MSG"|sed 's/(C)/©/'` |
|---|
| 25 | AVEN_COPYRIGHT_MSG_UTF8=`echo "$AVEN_COPYRIGHT_MSG"|sed 's/(C)/©/'` |
|---|
| 26 | |
|---|
| 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]) |
|---|
| 31 | |
|---|
| 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) |
|---|
| 37 | |
|---|
| 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) |
|---|
| 44 | |
|---|
| 45 | PKGDOCDIR='${prefix}/share/doc/${PACKAGE}' |
|---|
| 46 | AC_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]) ;; |
|---|
| 51 | esac |
|---|
| 52 | PKGDOCDIR="$enableval" |
|---|
| 53 | ] |
|---|
| 54 | ) |
|---|
| 55 | PKGDOCDIR_EXPANDED=` |
|---|
| 56 | test NONE = "$prefix" && prefix="$ac_default_prefix" |
|---|
| 57 | test NONE = "$exec_prefix" && exec_prefix="$prefix" |
|---|
| 58 | eval echo "$PKGDOCDIR" |
|---|
| 59 | ` |
|---|
| 60 | AC_SUBST(PKGDOCDIR) |
|---|
| 61 | AC_SUBST(PKGDOCDIR_EXPANDED) |
|---|
| 62 | |
|---|
| 63 | AC_CANONICAL_HOST |
|---|
| 64 | |
|---|
| 65 | dnl Checks for programs. |
|---|
| 66 | AC_PROG_CC |
|---|
| 67 | AC_PROG_CPP |
|---|
| 68 | |
|---|
| 69 | AC_PROG_CXX |
|---|
| 70 | AC_PROG_CXXCPP |
|---|
| 71 | |
|---|
| 72 | dnl Probe for any options needed to enable C++11 support. |
|---|
| 73 | AX_CXX_COMPILE_STDCXX_11 |
|---|
| 74 | |
|---|
| 75 | AM_PROG_CC_C_O |
|---|
| 76 | |
|---|
| 77 | AC_LANG([C]) |
|---|
| 78 | |
|---|
| 79 | AC_EXEEXT |
|---|
| 80 | AC_OBJEXT |
|---|
| 81 | |
|---|
| 82 | mswindows=no |
|---|
| 83 | macos=no |
|---|
| 84 | case $host_os in |
|---|
| 85 | darwin*) macos=yes ;; |
|---|
| 86 | *mingw*|*cygwin*|windows*) mswindows=yes ;; |
|---|
| 87 | esac |
|---|
| 88 | |
|---|
| 89 | AC_C_BIGENDIAN |
|---|
| 90 | |
|---|
| 91 | AC_ARG_VAR(STRIP, [Command for discarding symbols from object files]) |
|---|
| 92 | AC_PATH_TOOL(STRIP, strip, [echo "not stripping "]) |
|---|
| 93 | |
|---|
| 94 | AC_CHECK_LIB(m, sqrt) |
|---|
| 95 | |
|---|
| 96 | dnl x86 has excess precision issues with 387 FP instructions, which are |
|---|
| 97 | dnl avoided by using SSE instructions instead. By default we require SSE2 |
|---|
| 98 | dnl which for Intel means a Pentium 4 which was launched in 2000; Pentium |
|---|
| 99 | dnl 3 was finally discontinued in 2007. |
|---|
| 100 | AC_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 | |
|---|
| 111 | AC_MSG_CHECKING([whether to use SSE instructions on x86]) |
|---|
| 112 | case $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)]) ;; |
|---|
| 131 | esac |
|---|
| 132 | |
|---|
| 133 | dnl The wxWidgets libraries we need: |
|---|
| 134 | wx_libs="core,gl" |
|---|
| 135 | |
|---|
| 136 | AC_ARG_VAR(WXCONFIG, [Old name for WX_CONFIG, accepted for compatibility]) |
|---|
| 137 | AC_ARG_VAR(WX_CONFIG, [wxWidgets configuration script to use to build Aven]) |
|---|
| 138 | : ${WX_CONFIG="$WXCONFIG"} |
|---|
| 139 | |
|---|
| 140 | AM_CONDITIONAL(WIN32, [test yes = "$mswindows"]) |
|---|
| 141 | AM_CONDITIONAL(MACOS, [test yes = "$macos"]) |
|---|
| 142 | |
|---|
| 143 | if 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 |
|---|
| 151 | else |
|---|
| 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 |
|---|
| 174 | fi |
|---|
| 175 | |
|---|
| 176 | dnl Unless the user has explicitly specified a --unicode setting, prefer |
|---|
| 177 | dnl --unicode=yes if we can get it. |
|---|
| 178 | case $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 ;; |
|---|
| 186 | esac |
|---|
| 187 | |
|---|
| 188 | WX_LIBS=`$WX_CONFIG --libs "$wx_libs"` |
|---|
| 189 | dnl Needed for nvidia drivers on linux (for some setups anyway). |
|---|
| 190 | AC_CHECK_LIB(Xxf86vm, XF86VidModeQueryVersion, [WX_LIBS="$WX_LIBS -lXxf86vm"], [], [$WX_LIBS]) |
|---|
| 191 | |
|---|
| 192 | save_LIBS=$LIBS |
|---|
| 193 | dnl Check if we need a library for OpenGL functions. Usually it's the "GL" |
|---|
| 194 | dnl library, but it's called opengl32 on Microsoft Windows). |
|---|
| 195 | AC_SEARCH_LIBS([glPushMatrix], [GL opengl32], [WX_LIBS="$WX_LIBS $ac_cv_search_glPushMatrix"], [], [$WX_LIBS]) |
|---|
| 196 | dnl Check if we need a library for GLU functions. Usually it's the "GLU" |
|---|
| 197 | dnl library, but it's called glu32 on Microsoft Windows). |
|---|
| 198 | AC_SEARCH_LIBS([gluProject], [GLU glu32], [WX_LIBS="$WX_LIBS $ac_cv_search_gluProject"], [], [$WX_LIBS]) |
|---|
| 199 | LIBS=$save_LIBS |
|---|
| 200 | |
|---|
| 201 | AC_SUBST(WX_LIBS) |
|---|
| 202 | dnl macOS has OpenGL/gl.h and OpenGL/glu.h. |
|---|
| 203 | AC_CHECK_HEADERS([GL/gl.h OpenGL/gl.h], [], [], [ ]) |
|---|
| 204 | AC_CHECK_HEADERS([GL/glu.h OpenGL/glu.h], [], [], [ ]) |
|---|
| 205 | dnl Older Debian mingw-w64 packages lacked GL/glext.h; macOS has OpenGL/glext.h. |
|---|
| 206 | dnl Requires an explicit include of gl.h first. |
|---|
| 207 | AC_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 | |
|---|
| 215 | WX_CFLAGS=`$WX_CONFIG --cflags "$wx_libs"` |
|---|
| 216 | AC_SUBST(WX_CFLAGS) |
|---|
| 217 | WX_CXXFLAGS=`$WX_CONFIG --cxxflags "$wx_libs"` |
|---|
| 218 | AC_SUBST(WX_CXXFLAGS) |
|---|
| 219 | |
|---|
| 220 | AC_LANG([C]) |
|---|
| 221 | save_CFLAGS=$CFLAGS |
|---|
| 222 | CFLAGS="$CFLAGS $WX_CFLAGS" |
|---|
| 223 | AC_CHECK_SIZEOF([wxChar], [], [ |
|---|
| 224 | #include <wx/defs.h> |
|---|
| 225 | #include <wx/chartype.h> |
|---|
| 226 | ]) |
|---|
| 227 | CFLAGS=$save_CFLAGS |
|---|
| 228 | |
|---|
| 229 | dnl Check for FFmpeg libraries. |
|---|
| 230 | PKG_CHECK_MODULES([FFMPEG], [libavcodec >= 57 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 | ]) |
|---|
| 246 | AC_SUBST([FFMPEG_LIBS]) |
|---|
| 247 | AC_SUBST([FFMPEG_CFLAGS]) |
|---|
| 248 | |
|---|
| 249 | dnl Check for PROJ. |
|---|
| 250 | PKG_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 | ]) |
|---|
| 262 | AC_SUBST([PROJ_LIBS]) |
|---|
| 263 | AC_SUBST([PROJ_CFLAGS]) |
|---|
| 264 | |
|---|
| 265 | dnl Check for GDAL. |
|---|
| 266 | PKG_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 | ]) |
|---|
| 275 | AC_SUBST([GDAL_LIBS]) |
|---|
| 276 | AC_SUBST([GDAL_CFLAGS]) |
|---|
| 277 | |
|---|
| 278 | dnl Checks for header files. |
|---|
| 279 | |
|---|
| 280 | AC_CHECK_HEADERS(string.h) |
|---|
| 281 | |
|---|
| 282 | AC_CHECK_FUNCS([popen hypot mmap strdup]) |
|---|
| 283 | |
|---|
| 284 | dnl We don't access a FILE* from multiple threads and using the unlocked |
|---|
| 285 | dnl versions has significantly less overhead, especially when reading/writing |
|---|
| 286 | dnl byte-by-byte. These are specified by POSIX: |
|---|
| 287 | AC_CHECK_FUNCS([getc_unlocked putc_unlocked putchar_unlocked]) |
|---|
| 288 | dnl These are GNU extensions in glibc: |
|---|
| 289 | AC_CHECK_FUNCS([feof_unlocked ferror_unlocked fread_unlocked fwrite_unlocked]) |
|---|
| 290 | dnl Microsoft extensions: |
|---|
| 291 | AC_CHECK_FUNCS([_getc_nolock _putc_nolock _putchar_nolock _fread_nolock _fwrite_nolock]) |
|---|
| 292 | |
|---|
| 293 | AC_CHECK_FUNCS([setenv unsetenv]) |
|---|
| 294 | |
|---|
| 295 | AC_CHECK_FUNCS([fmemopen]) |
|---|
| 296 | |
|---|
| 297 | dnl Microsoft-specific functions which support positional argument specifiers. |
|---|
| 298 | AC_CHECK_FUNCS([_vfprintf_p _vsprintf_p]) |
|---|
| 299 | |
|---|
| 300 | AC_PATH_PROG([SPHINX_BUILD], [sphinx-build], [$MISSING sphinx-build]) |
|---|
| 301 | AC_ARG_VAR([SPHINX_BUILD], [sphinx-build from python3-sphinx]) |
|---|
| 302 | |
|---|
| 303 | AC_PATH_PROG([MSGFMT], [msgfmt], [$MISSING msgfmt]) |
|---|
| 304 | AC_ARG_VAR([MSGFMT], [msgfmt from gettext]) |
|---|
| 305 | |
|---|
| 306 | AC_ARG_ENABLE([werror], |
|---|
| 307 | [AS_HELP_STRING([--enable-werror], [enable treating compiler warnings as errors [default=no]])], |
|---|
| 308 | [case ${enableval} in |
|---|
| 309 | yes|no) ;; |
|---|
| 310 | *) AC_MSG_ERROR([bad value ${enableval} for --enable-werror]) ;; |
|---|
| 311 | esac], |
|---|
| 312 | [enable_werror=no]) |
|---|
| 313 | |
|---|
| 314 | dnl Put -Werror or equivalent in its own make variable so that it can easily |
|---|
| 315 | dnl be overridden by `make WERROR=` if needed during development (e.g. if |
|---|
| 316 | dnl you want to get a full list of compile warnings to fix rather than |
|---|
| 317 | dnl stopping at the first file with warnings). |
|---|
| 318 | WERROR= |
|---|
| 319 | AC_SUBST([WERROR]) |
|---|
| 320 | |
|---|
| 321 | dnl extra warning flags for building with GCC |
|---|
| 322 | if test yes = "$GCC"; then |
|---|
| 323 | WERROR=-Werror |
|---|
| 324 | if test yes = "$cross_compiling"; then |
|---|
| 325 | dnl AM_CFLAGS="$AM_CFLAGS -Werror -Wall -Wunused -Wpointer-arith\ |
|---|
| 326 | dnl -Wwrite-strings -Wcast-align" |
|---|
| 327 | dnl -Wsign-compare causes a warning with the mingw FD_SET macro, so we have |
|---|
| 328 | dnl to disable it for mingw builds. |
|---|
| 329 | AM_CFLAGS="$AM_CFLAGS -Wall -Wunused -Wpointer-arith\ |
|---|
| 330 | -Wwrite-strings -Wcast-align" |
|---|
| 331 | AM_CXXFLAGS="$AM_CXXFLAGS -Wall -Wunused -Wpointer-arith\ |
|---|
| 332 | -Wwrite-strings -Wcast-align -Wno-sign-compare" |
|---|
| 333 | else |
|---|
| 334 | AM_CFLAGS="$AM_CFLAGS -Wall -W -Wunused -Wshadow -Wpointer-arith\ |
|---|
| 335 | -Wmissing-prototypes -Wwrite-strings -Wredundant-decls -Wnested-externs\ |
|---|
| 336 | -Wcast-align" |
|---|
| 337 | AM_CXXFLAGS="$AM_CXXFLAGS -Wall -W -Wunused -Wshadow -Wpointer-arith\ |
|---|
| 338 | -Wwrite-strings -Wcast-align" |
|---|
| 339 | fi |
|---|
| 340 | dnl too many complaints from headers, etc: -Wconversion |
|---|
| 341 | fi |
|---|
| 342 | AC_SUBST(AM_CFLAGS) |
|---|
| 343 | AC_SUBST(AM_CXXFLAGS) |
|---|
| 344 | |
|---|
| 345 | if test x$enable_werror != xyes; then |
|---|
| 346 | WERROR= |
|---|
| 347 | fi |
|---|
| 348 | |
|---|
| 349 | dnl See if large file support is available. Survex is unlikely to need to |
|---|
| 350 | dnl process files > 2GB in size, but LFS is also needed for stat() to work |
|---|
| 351 | dnl on filing systems which return 64 bit inode values, such as CIFS mounts. |
|---|
| 352 | AC_SYS_LARGEFILE |
|---|
| 353 | |
|---|
| 354 | AC_ARG_ENABLE(profiling, |
|---|
| 355 | [ --enable-profiling Build binaries to generate profiling information], |
|---|
| 356 | [case $enableval in |
|---|
| 357 | yes) AM_CXXFLAGS="$AM_CXXFLAGS -pg" |
|---|
| 358 | AM_CFLAGS="$AM_CFLAGS -pg" |
|---|
| 359 | AC_MSG_RESULT(building binaries to generate profiling information);; |
|---|
| 360 | no) ;; |
|---|
| 361 | *) AC_MSG_ERROR(bad value $enableval for --enable-profiling) ;; |
|---|
| 362 | esac]) |
|---|
| 363 | |
|---|
| 364 | EXTRA_TEXT="AUTHORS COPYING NEWS TODO ChangeLog" |
|---|
| 365 | AC_SUBST(EXTRA_TEXT) |
|---|
| 366 | |
|---|
| 367 | AC_SUBST_FILE(DESC) |
|---|
| 368 | DESC=desc.txt |
|---|
| 369 | AC_SUBST_FILE(AVENDESC) |
|---|
| 370 | AVENDESC=desc-aven.txt |
|---|
| 371 | |
|---|
| 372 | dnl Don't define DATADIR if building for MS Windows - it won't be used, and |
|---|
| 373 | dnl can conflict with the DATADIR typedef in objidl.h |
|---|
| 374 | if test no = "$mswindows"; then |
|---|
| 375 | AC_DEFINE_DIR(DATADIR, datadir, [Location of platform independent support files]) |
|---|
| 376 | fi |
|---|
| 377 | |
|---|
| 378 | AH_BOTTOM( |
|---|
| 379 | [/* Use _unlocked() variants of stdio functions where available, since they are |
|---|
| 380 | * faster, and we don't multithread file accesses. |
|---|
| 381 | */ |
|---|
| 382 | |
|---|
| 383 | #ifdef HAVE_FEOF_UNLOCKED |
|---|
| 384 | # define FEOF(F) feof_unlocked(F) |
|---|
| 385 | #else |
|---|
| 386 | # define FEOF(F) feof(F) |
|---|
| 387 | #endif |
|---|
| 388 | |
|---|
| 389 | #ifdef HAVE_FERROR_UNLOCKED |
|---|
| 390 | # define FERROR(F) ferror_unlocked(F) |
|---|
| 391 | #else |
|---|
| 392 | # define FERROR(F) ferror(F) |
|---|
| 393 | #endif |
|---|
| 394 | |
|---|
| 395 | #ifdef HAVE_FREAD_UNLOCKED |
|---|
| 396 | # define FREAD(P, S, N, F) fread_unlocked(P, S, N, F) |
|---|
| 397 | #elif defined HAVE__FREAD_NOLOCK |
|---|
| 398 | # define FREAD(P, S, N, F) _fread_nolock(P, S, N, F) |
|---|
| 399 | #else |
|---|
| 400 | # define FREAD(P, S, N, F) fread(P, S, N, F) |
|---|
| 401 | #endif |
|---|
| 402 | |
|---|
| 403 | /* If we call this FWRITE() then macos errors out on uses with: |
|---|
| 404 | * error: called object type 'int' is not a function or function pointer |
|---|
| 405 | * Unclear what's going on - a conditional `#undef FWRITE` before defining |
|---|
| 406 | * doesn't help. |
|---|
| 407 | */ |
|---|
| 408 | #ifdef HAVE_FWRITE_UNLOCKED |
|---|
| 409 | # define FWRITE_(P, S, N, F) fwrite_unlocked(P, S, N, F) |
|---|
| 410 | #elif defined HAVE__FWRITE_NOLOCK |
|---|
| 411 | # define FWRITE_(P, S, N, F) _fwrite_nolock(P, S, N, F) |
|---|
| 412 | #else |
|---|
| 413 | # define FWRITE_(P, S, N, F) fwrite(P, S, N, F) |
|---|
| 414 | #endif |
|---|
| 415 | |
|---|
| 416 | #ifdef HAVE_GETC_UNLOCKED |
|---|
| 417 | # define GETC(F) getc_unlocked(F) |
|---|
| 418 | #elif defined HAVE__GETC_NOLOCK |
|---|
| 419 | # define GETC(F) _getc_nolock(F) |
|---|
| 420 | #else |
|---|
| 421 | # define GETC(F) getc(F) |
|---|
| 422 | #endif |
|---|
| 423 | |
|---|
| 424 | #ifdef HAVE_PUTC_UNLOCKED |
|---|
| 425 | # define PUTC(C, F) putc_unlocked(C, F) |
|---|
| 426 | #elif defined HAVE__PUTC_NOLOCK |
|---|
| 427 | # define PUTC(C, F) _putc_nolock(C, F) |
|---|
| 428 | #else |
|---|
| 429 | # define PUTC(C, F) putc(C, F) |
|---|
| 430 | #endif |
|---|
| 431 | |
|---|
| 432 | #ifdef HAVE_PUTC_UNLOCKED |
|---|
| 433 | # define PUTCHAR(C) putchar_unlocked(C) |
|---|
| 434 | #elif defined HAVE__PUTCHAR_NOLOCK |
|---|
| 435 | # define PUTCHAR(C) _putchar_nolock(C) |
|---|
| 436 | #else |
|---|
| 437 | # define PUTCHAR(C) putchar(C) |
|---|
| 438 | #endif |
|---|
| 439 | |
|---|
| 440 | #ifndef __cplusplus |
|---|
| 441 | /* C23 added bool, false and true as keywords - let's emulate that and |
|---|
| 442 | * avoid every C file which uses these needing to include <stdbool.h>. |
|---|
| 443 | */ |
|---|
| 444 | # include <stdbool.h> |
|---|
| 445 | #endif |
|---|
| 446 | ]) |
|---|
| 447 | |
|---|
| 448 | AC_CONFIG_FILES([ |
|---|
| 449 | Makefile src/Makefile doc/Makefile lib/Makefile lib/icons/Makefile |
|---|
| 450 | lib/images/Makefile |
|---|
| 451 | tests/Makefile vim/Makefile survex.iss doc/index.htm |
|---|
| 452 | survex.spec lib/Info.plist |
|---|
| 453 | ]) |
|---|
| 454 | AC_OUTPUT |
|---|