1dnl Process this file with autoconf to produce a configure script. 2m4_define([siril_major_version], [0]) 3m4_define([siril_minor_version], [99]) 4m4_define([siril_micro_version], [10]) 5m4_define([siril_prerelease_version], [1]) 6m4_define([siril_version], 7 [siril_major_version.siril_minor_version.siril_micro_version]) 8m4_define([siril_version_full], 9 [siril_major_version().siril_minor_version().siril_micro_version()m4_bpatsubst(siril_prerelease_version(), [^], [-])]) 10 11m4_define([siril_unstable], 12 m4_if(m4_eval(siril_minor_version % 2), [1], [yes], [no])) 13m4_define([siril_stable], 14 m4_if(m4_eval(siril_minor_version % 2), [0], [yes], [no])) 15 16dnl change siril_version_full by siril_version for stable release 17AC_INIT([siril], [siril_version_full], 18dnl AC_INIT([siril], [siril_version], 19 [https://gitlab.com/free-astro/siril/issues], 20 [siril], 21 [https://www.siril.org]) 22 23AM_INIT_AUTOMAKE([subdir-objects]) 24AC_CONFIG_HEADERS(config.h) 25AC_CONFIG_SRCDIR([src/main.c]) 26AC_CONFIG_MACRO_DIR([m4]) 27 28SIRIL_UNSTABLE=siril_unstable 29 30dnl ================================================================ 31dnl Gettext stuff. 32dnl ================================================================ 33IT_PROG_INTLTOOL([0.50]) 34AC_SUBST([GETTEXT_PACKAGE], [siril]) 35AC_SUBST(SIRIL_UNSTABLE) 36 37remember_set_CFLAGS="$CFLAGS" 38 39AC_PROG_CC 40AC_HEADER_STDC 41 42m4_include(m4/openmp.m4) 43AC_OPENMP 44 45AC_LANG([C]) 46AC_LANG([C++]) 47 48# remove -g flag from default CFLAGS 49if test "x$remember_set_CFLAGS" = "x"; then 50 if test "$CFLAGS" = "-g -O2"; then 51 CFLAGS="-O2" 52 elif test "$CFLAGS" = "-g"; then 53 CFLAGS="" 54 fi 55fi 56 57CFLAGS="-D_FILE_OFFSET_BITS=64 -Werror=unknown-pragmas -Werror=unused-label -fno-common -ftree-vectorize -fno-math-errno $CFLAGS $OPENMP_CFLAGS" 58CXXFLAGS="$CFLAGS" 59 60if test "x$SIRIL_UNSTABLE" = "xyes"; then 61 AC_DEFINE(SIRIL_UNSTABLE, 1, 62 [Define to 1 if this is an unstable version of Siril]) 63fi 64AM_CONDITIONAL(SIRIL_UNSTABLE, test "x$SIRIL_UNSTABLE" = "xyes") 65 66dnl Set PACKAGE_SOURCE_DIR in config.h. 67packagesrcdir=`cd $srcdir && pwd` 68AC_DEFINE_UNQUOTED(PACKAGE_SOURCE_DIR, "${packagesrcdir}", [Package source dir]) 69 70# Checks for header files. 71AC_CHECK_HEADERS([execinfo.h sys/vfs.h sys/vmount.h sys/statfs.h sys/statvfs.h sys/filio.h]) 72 73# Checks for reallocarray function (used in kplot) 74AC_CHECK_FUNCS(reallocarray, AC_DEFINE([HAVE_REALLOCARRAY], [1], [reallocarray is available]), ) 75# Checks for library functions. 76AC_CHECK_FUNCS(timegm gmtime_r) 77 78AC_CHECK_FUNCS(backtrace, , AC_CHECK_LIB(execinfo, backtrace)) 79 80dnl Set PACKAGE_DOC_DIR in config.h. 81dnl AC_DEFINE_UNQUOTED(PACKAGE_DOC_DIR, "${ac_default_prefix}/share/doc/${PACKAGE}", "package doc dir") 82 83dnl On some platforms, std::atomic needs a helper library 84AC_MSG_CHECKING(whether -latomic is needed) 85AC_LINK_IFELSE([AC_LANG_SOURCE([[ 86 #include <atomic> 87 #include <cstdint> 88 std::atomic<std::int64_t> v; 89 int main() { 90 return v; 91 } 92]])], STD_ATOMIC_NEED_LIBATOMIC=no, STD_ATOMIC_NEED_LIBATOMIC=yes) 93AC_MSG_RESULT($STD_ATOMIC_NEED_LIBATOMIC) 94if test "x$STD_ATOMIC_NEED_LIBATOMIC" = xyes; then 95 LIBATOMIC_LIBS="-latomic" 96fi 97AC_SUBST([LIBATOMIC_LIBS]) 98 99dnl ================ PLATFORM CHECKS ================ 100 101dnl Compute the canonical host-system type variable (need config.guess and config.sub) 102AC_CANONICAL_HOST 103 104AC_MSG_CHECKING([if compiling for Win32]) 105case "$host_os" in 106 mingw* | cygwin*) 107 platform_win32=yes 108 ;; 109 *) 110 platform_win32=no 111 ;; 112esac 113AC_MSG_RESULT([$platform_win32]) 114 115dnl ================ MANDATORY DEPENDECIES ================ 116dnl check math lib 117AC_CHECK_LIB(m, log, LIBS="$LIBS -lm") 118 119dnl check GLIB version 120PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.56.0) 121case "$host_os" in 122 mingw*) 123 PKG_CHECK_MODULES([GIO],[gio-2.0 >= 2.56.0 gio-windows-2.0 >= 2.56.0]) 124 ;; 125 *) 126 PKG_CHECK_MODULES([GIO],[gio-2.0 >= 2.56.0 gio-unix-2.0 >= 2.56.0]) 127 ;; 128esac 129 130dnl Check for json-glib 131PKG_CHECK_MODULES(JSON_GLIB, json-glib-1.0 >= 1.2.6) 132 133dnl check libexiv2 134PKG_CHECK_MODULES(EXIV2, exiv2 >= 0.25) 135 136dnl check GTK 137PKG_CHECK_MODULES(GTK, gtk+-3.0 >= 3.20.0) 138 139dnl check cairo 140PKG_CHECK_MODULES(CAIRO, cairo) 141 142dnl check fftw3 143PKG_CHECK_MODULES(FFTW, [fftw3f]) 144 145dnl check GNU Scientific Library 146PKG_CHECK_MODULES(GSL, [gsl < 2], 147 [AC_DEFINE([HAVE_GSL_1], [1], [Use GSL 1])], 148 [PKG_CHECK_MODULES(GSL, [gsl >= 2], 149 [AC_DEFINE([HAVE_GSL_2], [1], [Use GSL 2])]) 150 ]) 151 152dnl check cfitsio 153PKG_CHECK_MODULES(CFITSIO, [cfitsio]) 154 155dnl check libconfig 156PKG_CHECK_MODULES([LIBCONFIG], [libconfig >= 1.4],, 157 AC_MSG_ERROR([libconfig 1.4 or newer not found.])) 158 159dnl check opencv 160AC_PROG_CXX 161if test -n "$CXX" && ( test "X$CXX" != "Xno" && 162 ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || 163 (test "X$CXX" != "Xg++"))) ; then 164 AC_PROG_CXXCPP 165 166 dnl check for C++11 support 167 m4_include([m4/ax_cxx_compile_stdcxx.m4]) 168 AX_CXX_COMPILE_STDCXX(11, noext, mandatory) 169 170 dnl AC_MSG_WARN(CXX is "$CXX") 171 dnl http://nerdland.net/2009/07/detecting-c-libraries-with-autotools/ solution 2 172 dnl we handle 2 opencv versions because of a debian bug with opencv2 and GTK3 173 PKG_CHECK_MODULES([OPENCV], [opencv >= 3.0], 174 [OPENCV_LIBS="-lopencv_core -lopencv_imgproc -lopencv_calib3d"], 175 [PKG_CHECK_MODULES([OPENCV], [opencv >= 2.0], 176 [OPENCV_LIBS="-lopencv_core -lopencv_imgproc"], 177 [PKG_CHECK_MODULES([OPENCV], [opencv4], 178 [OPENCV_LIBS="-lopencv_core -lopencv_imgproc -lopencv_calib3d"], 179 AC_MSG_ERROR([opencv not found.]))] 180 )] 181 ) 182else 183 AC_MSG_ERROR([no C++ compiler found]) 184fi 185 186PKG_CHECK_MODULES(LIBRTPROCESS, [rtprocess], have_rtprocess="yes", have_rtprocess="no") 187if test "x$have_rtprocess" = "xno"; then 188 AC_MSG_NOTICE([librtprocess not found]) 189 if test "$cross_compiling" != "yes"; then 190 dnl check CMake used for librtprocess 191 AC_PATH_PROG(CMAKE, cmake, no) 192 if test "x$CMAKE" = xno; then 193 AC_MSG_ERROR([CMAKE not found (needed to built internal librtprocess)]) 194 fi 195 196 CMAKE_GENERATOR= 197 if test "$platform_win32" = "yes"; then 198 CMAKE_GENERATOR="-G \"MSYS Makefiles\"" 199 fi 200 AC_SUBST([CMAKE_GENERATOR]) 201 202 AC_MSG_NOTICE([librtprocess will be built statically]) 203 else 204 # When cross-compiling, you should build rtprocess yourself and 205 # install it yourself. 206 AC_MSG_ERROR([librtprocess not found]) 207 fi 208fi 209AM_CONDITIONAL(HAVE_LIBRTPROCESS, test "x$have_rtprocess" = "xyes") 210 211dnl ================ OPTIONAL DEPENDECIES ================ 212 213dnl check raw lib 214PKG_CHECK_MODULES(LIBRAW, [libraw >= 0.17], 215 [AC_DEFINE([HAVE_LIBRAW], [1], [Using RAW images])], 216 AC_MSG_WARN([libraw not found. Not using RAW importer.])) 217 218dnl check tiff lib 219PKG_CHECK_MODULES(LIBTIFF, [libtiff-4], 220 [AC_DEFINE([HAVE_LIBTIFF], [1], [Using TIFF images])], 221 AC_MSG_WARN([libtiff not found. Not using TIFF importer and exporter.])) 222 223dnl check jpeg lib 224dnl PKG_CHECK_MODULES(JPEG, [libjpeg]) 225AC_CHECK_LIB(jpeg, jpeg_mem_src, [], 226 AC_MSG_WARN([libjpeg not found. Not using JPEG importer and exporter.])) 227 228dnl check png lib 229PKG_CHECK_MODULES(LIBPNG, [libpng >= 1.6], 230 [AC_DEFINE([HAVE_LIBPNG], [1], [Using PNG images])], 231 AC_MSG_WARN([libpng not found. Not using PNG importer and exporter.])) 232 233dnl check heif lib 234PKG_CHECK_MODULES(LIBHEIF, [libheif], 235 [AC_DEFINE([HAVE_LIBHEIF], [1], [Using HEIF images])], 236 AC_MSG_WARN([libheif not found. Not using HEIF importer and exporter.])) 237 238dnl check ffms2 239PKG_CHECK_MODULES(FFMS2, [ffms2], 240 [AC_DEFINE([HAVE_FFMS2], [1], [Using FFMS2])], 241 AC_MSG_WARN([libffms2 not found. Not using AVI importer.])) 242 243 244dnl checking several ffmpeg libraries 245PKG_CHECK_MODULES(FFMPEG, [libavformat libavutil >= 55.20 libavcodec libswscale libswresample], 246 [AC_DEFINE([HAVE_FFMPEG], [1], [film export supported])], 247 AC_MSG_WARN([ffmpeg libav libraries not found or too old. Not using film export formats.])) 248 249dnl checking libcurl 250m4_include([m4/libcurl.m4]) 251LIBCURL_CHECK_CONFIG([yes], [7.10.0], 252 [AC_DEFINE([HAVE_LIBCURL], [1], [Using Libcurl ])], 253 AC_MSG_WARN([libcurl not found. Not using web interaction.])) 254 255dnl check wcslib 256PKG_CHECK_MODULES(WCSLIB, [wcslib], 257 [AC_DEFINE([HAVE_WCSLIB], [1], [Using WCSLIB])], 258 AC_MSG_WARN([wcslib not found. Not using WCS API.])) 259 260dnl ================================================================ 261dnl Collect some arguments. 262dnl ================================================================ 263AC_ARG_ENABLE(debug, 264 [AC_HELP_STRING([--enable-debug], 265 [enable debug build [default=no]])],, 266 [enable_debug="no"]) 267 268AM_CONDITIONAL([SIRIL_DEBUG],[test "x$enable_debug" = "xyes"]) 269 270if test "x$enable_debug" = "xyes"; then 271 AC_DEFINE([SIRIL_OUTPUT_DEBUG], [1], [Using debug output]) 272 CFLAGS="-g $CFLAGS" 273 CXXFLAGS="$CFLAGS" 274fi 275 276##################################### 277# Check for Platform and architecture 278##################################### 279platform_family="other" 280PATHSEP=':' 281AC_MSG_CHECKING([platform and architecture]) 282case "$host_os" in 283 linux-* | freebsd-*) 284 platform=unix 285 platform_family="linux" 286 ;; 287 cygwin*) 288 platform=windows 289 platform_family="windows" 290 ;; 291 mingw*) 292 platform=windows 293 platform_family="windows" 294 PATHSEP=';' 295 CFLAGS=" $CFLAGS -D_WIN32_WINNT=0x0600 -DWINVER=0x0600 " 296 CXXFLAGS=" $CXXFLAGS -D_WIN32_WINNT=0x0600 -DWINVER=0x0600 " 297 case "$host_cpu" in 298 x86_64) 299 ;; 300 *) 301 WIN32_LARGE_ADDRESS_AWARE='-Wl,--large-address-aware' 302 ;; 303 esac 304 ;; 305 darwin*) 306 platform=osx 307 platform_family="macos" 308 AC_SUBST(EXTRA_LIBS,'-framework AppKit') 309 CFLAGS="$CFLAGS -ObjC" 310 ;; 311esac 312AC_MSG_RESULT([$platform]) 313AM_CONDITIONAL([PLATFORM_UNIX], [test "$platform" = "unix"]) 314AM_CONDITIONAL([PLATFORM_WIN32], [test "$platform" = "windows"]) 315AM_CONDITIONAL([PLATFORM_OSX], [test "$platform" = "osx"]) 316 317AC_DEFINE_UNQUOTED(SIRIL_BUILD_PLATFORM_FAMILY, "$platform_family", 318 [The OS family this was built for]) 319 320AC_SUBST(WIN32_LARGE_ADDRESS_AWARE) 321AC_SUBST(PATHSEP) 322 323if test "$platform" = "windows"; then 324 AC_CHECK_PROG(ms_librarian, lib.exe, yes, no) 325 AC_CHECK_TOOL(WINDRES, windres, :) 326else 327 WINDRES=":" 328 AC_PROG_LN_S 329fi 330 331AM_CONDITIONAL(MS_LIB_AVAILABLE, test "x$ms_librarian" = xyes) 332AM_CONDITIONAL(HAVE_WINDRES, test "x$WINDRES" != "x:") 333 334AC_SUBST(WINDRES) 335 336##################################### 337# Check for gdk windowing style 338##################################### 339AC_MSG_CHECKING([for native gdk windows style]) 340gdk_targets=`$PKG_CONFIG --variable=targets gdk-3.0` 341gdk_windowing="x11" 342for target in $gdk_targets; 343do 344 case "$target" in 345 quartz) 346 gdk_windowing=quartz 347 ;; 348 win32) 349 gdk_windowing=win32 350 ;; 351 esac 352done 353 354AC_MSG_RESULT([$gdk_windowing]) 355AM_CONDITIONAL(GDK_WINDOWING_QUARTZ, test "$gdk_windowing" = "quartz") 356AM_CONDITIONAL(GDK_WINDOWING_WIN32, test "$gdk_windowing" = "win32") 357AM_CONDITIONAL(GDK_WINDOWING_X11, test "$gdk_windowing" = "x11") 358 359if test "$platform" = "osx"; then 360 AC_DEFINE([OS_OSX],[1],[Defined if os is Mac OSX]) 361 362 PKG_CHECK_MODULES(GTK_MAC, gtk-mac-integration-gtk3 >= 2.0.8) 363 364 AC_SUBST(GTK_MAC_CFLAGS) 365 AC_SUBST(GTK_MAC_LIBS) 366fi 367 368if test `uname` != "Darwin"; then 369 if (test "$platform" = "windows") ; then 370 AC_SUBST(EXTRA_LIBS,'-lpsapi') 371 fi 372fi 373 374################# 375# Bundle packages 376################# 377 378AC_MSG_CHECKING([whether we build a relocatable package]) 379AC_ARG_ENABLE(relocatable-bundle, 380 [ --enable-relocatable-bundle 381 build with resources considered bundled under the same prefix 382 (default=auto)],, 383 enable_relocatable_bundle=auto) 384 385if test "x$enable_relocatable_bundle" != xno && 386 test "x$enable_relocatable_bundle" != xyes; then 387 # By default, assume building for Windows or macOS everything to be on 388 # the same prefix and can be relocated. 389 # On other platforms, build-time paths are meaningful. 390 if test "$platform" = "osx" || 391 test "$platform" = "windows"; then 392 enable_relocatable_bundle=yes 393 else 394 enable_relocatable_bundle=no 395 fi 396fi 397if test "x$enable_relocatable_bundle" = xyes; then 398 AC_DEFINE(ENABLE_RELOCATABLE_RESOURCES, 1, 399 [Define to 1 if resources are considered bundled under the same prefix]) 400fi 401AM_CONDITIONAL(ENABLE_RELOCATABLE_RESOURCES, test x$enable_relocatable_bundle = xyes) 402 403AC_MSG_RESULT([$enable_relocatable_bundle]) 404 405AC_SUBST([AM_LDFLAGS]) 406 407AC_CONFIG_FILES([Makefile src/Makefile subprojects/Makefile data/Makefile pixmaps/Makefile pixmaps/icons/Makefile platform-specific/Makefile platform-specific/linux/Makefile po/Makefile.in]) 408AC_OUTPUT 409