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