1m4_define([lib_major], [2])
2m4_define([lib_minor], [3])
3m4_define([lib_level], [1])
4m4_define([lib_version], [lib_major.lib_minor.lib_level])
5
6AC_INIT([libsidplayfp],[lib_version],[],[],[https://github.com/libsidplayfp/libsidplayfp/])
7AC_CONFIG_AUX_DIR([build-aux])
8AC_CONFIG_MACRO_DIRS([m4 src/builders/exsid-builder/driver/m4])
9AC_CONFIG_SRCDIR([src/sidplayfp/sidplayfp.cpp])
10AC_CONFIG_HEADERS([src/config.h])
11AM_INIT_AUTOMAKE
12
13LIB_MAJOR=lib_major
14LIB_MINOR=lib_minor
15LIB_LEVEL=lib_level
16AC_SUBST([LIB_MAJOR])
17AC_SUBST([LIB_MINOR])
18AC_SUBST([LIB_LEVEL])
19
20AC_CANONICAL_HOST
21
22AS_CASE([$host_os],
23        [mingw*], [MINGW32=yes],
24        [darwin*], [MACOS=yes],
25        [MINGW32=no MACOS=no]
26)
27AM_CONDITIONAL([MINGW32], [test "x$MINGW32" = "xyes"])
28AM_CONDITIONAL([MACOS], [test "x$MACOS" = "xyes"])
29
30dnl Initialize libtool.
31LT_INIT([win32-dll])
32
33dnl Checks for programs.
34AC_PROG_CXX
35
36dnl Use C++ for tests.
37AC_LANG([C++])
38
39AX_CXX_COMPILE_STDCXX_11([noext], [optional])
40AX_CXX_COMPILE_STDCXX_14([noext], [optional])
41
42dnl check for hidden visibility support
43AX_CHECK_COMPILE_FLAG([-fvisibility=hidden -fvisibility-inlines-hidden], [has_visibility=yes], [has_visibility=no])
44AM_CONDITIONAL([HAVE_VISIBILITY], [test "x$has_visibility" = xyes])
45
46dnl Checks for typedefs, structures, and compiler characteristics.
47AC_C_BIGENDIAN
48
49AC_CHECK_SIZEOF([short])
50AC_CHECK_SIZEOF([int])
51
52AS_IF([test $ac_cv_sizeof_short -ne 2],
53  [AC_MSG_ERROR([size of short must be 16 bit])]
54)
55
56AS_IF([test $ac_cv_sizeof_int -lt 4],
57  [AC_MSG_ERROR([only 32 bit or better CPUs are supported])]
58)
59
60AS_IF([test "x${ac_cv_header_stdint_h}" != "xyes"],
61  [AC_MSG_ERROR([Required header stdint.h not found])]
62)
63
64dnl Checks for non-standard functions.
65
66AC_CHECK_DECL(
67    [strcasecmp],
68    [AC_CHECK_FUNCS([strcasecmp])],
69    [AC_CHECK_DECL(
70        [stricmp],
71        [AC_CHECK_FUNCS([stricmp])]
72    )]
73)
74
75AC_CHECK_DECL(
76    [strncasecmp],
77    [AC_CHECK_FUNCS([strncasecmp])],
78    [AC_CHECK_DECL(
79        [strnicmp],
80        [AC_CHECK_FUNCS([strnicmp])]
81    )]
82)
83
84AX_LIB_GCRYPT([auto])
85AM_CONDITIONAL([LIBGCRYPT], [test "x$have_libgcrypt" = "xyes"])
86
87
88dnl libtool-style version-info number
89#
90# https://autotools.io/libtool/version.html
91#
92# Always increase the revision value.
93#
94# Increase the current value whenever an interface has been added, removed or changed.
95#
96# Increase the age value only if the changes made to the ABI are backward compatible.
97
98LIBSIDPLAYCUR=9
99LIBSIDPLAYREV=23
100LIBSIDPLAYAGE=3
101LIBSIDPLAYVERSION=$LIBSIDPLAYCUR:$LIBSIDPLAYREV:$LIBSIDPLAYAGE
102
103LIBSTILVIEWCUR=0
104LIBSTILVIEWREV=4
105LIBSTILVIEWAGE=0
106LIBSTILVIEWVERSION=$LIBSTILVIEWCUR:$LIBSTILVIEWREV:$LIBSTILVIEWAGE
107
108AC_MSG_CHECKING([for debugging])
109AC_ARG_ENABLE(debug, [AS_HELP_STRING([--enable-debug], [compile for debugging @<:@no/yes/full, default=no@:>@])],
110 [], [enable_debug=no])
111
112AS_IF([test "x$enable_debug" = "xno"],
113  [AC_MSG_RESULT([Build without debugging messages]); debug_flags=-DNDEBUG],
114  [AS_IF([test "x$enable_debug" = "xyes"],
115    [AC_MSG_RESULT([Build with debugging messages]); debug_flags=-DDEBUG=1],
116    [AC_MSG_RESULT([Build with all debugging messages]); debug_flags=-DDEBUG=10]
117  )]
118)
119
120AC_SUBST([debug_flags])
121
122AC_ARG_ENABLE([hardsid],
123  AS_HELP_STRING([--enable-hardsid],[enable hardsid builder [default=no]])
124)
125
126AM_CONDITIONAL([HARDSID], [test "x$enable_hardsid" = "xyes"])
127
128
129AC_ARG_ENABLE([inline],
130  AS_HELP_STRING([--enable-inline],[enable inlining of functions [default=yes]])
131)
132
133AS_IF([test x"$enable_inline" != "xno"],
134  [RESID_INLINE=inline; RESID_INLINING=1],
135  [RESID_INLINE=""; RESID_INLINING=0]
136)
137
138AC_ARG_WITH(
139    [simd],
140    [AS_HELP_STRING([--with-simd], [Build with SIMD optimizations [@<:@sse2/mmx/neon/none, default=none@:>@]])],
141    [],
142    [with_simd=none]
143)
144
145AS_IF([test x"$with_simd" != xnone],
146    # Testing for intrinsic headers requires compiler
147    # support activated by specific flags.
148    # These are most likely defined in CXXFLAGS
149    # but AC_CHECK_HEADERS uses only CPPFLAGS
150    # so we need a workaround.
151    [saveCPPFLAGS=$CPPFLAGS
152    CPPFLAGS="$CPPFLAGS $CXXFLAGS"
153
154    AS_CASE([$with_simd],
155        [sse2], [AC_CHECK_HEADERS([emmintrin.h])],
156        [mmx],  [AC_CHECK_HEADERS([mmintrin.h])],
157        [neon], [AC_CHECK_HEADERS([arm_neon.h])],
158        [AC_MSG_ERROR([Unrecognized SIMD specified])]
159    )
160
161    CPPFLAGS=$saveCPPFLAGS]
162)
163
164AC_CACHE_CHECK([for working bool], ac_cv_cxx_bool,
165[AC_COMPILE_IFELSE(
166  [AC_LANG_PROGRAM([],
167    [[bool flag;]])],
168  [ac_cv_cxx_bool=yes],
169  [ac_cv_cxx_bool=no])]
170)
171
172AS_IF([test "x$ac_cv_cxx_bool" = "xno"],
173  [HAVE_BOOL=0],
174  [HAVE_BOOL=1]
175)
176
177dnl Enable branch prediction hints.
178AC_ARG_ENABLE([branch-hints],
179  [AS_HELP_STRING([--enable-branch-hints],
180    [enable static branch prediction hints [default=yes]])],
181  [],
182  [enable_branch_hints=yes]
183)
184
185AS_IF([test "$enable_branch_hints" != no],
186  [RESID_BRANCH_HINTS=1],
187  [RESID_BRANCH_HINTS=0]
188)
189
190AC_CACHE_CHECK([for log1p], [resid_cv_log1p],
191  [AC_COMPILE_IFELSE(
192    [AC_LANG_PROGRAM(
193      [ #include <math.h> ], [ log1p(1); ]
194    )],
195    [resid_cv_log1p=yes], [resid_cv_log1p=no]
196  )]
197)
198
199AS_IF([test "$resid_cv_log1p" = no],
200  [HAVE_LOG1P=0],
201  [HAVE_LOG1P=1]
202)
203
204AC_CACHE_CHECK([for __builtin_expect], [resid_cv_builtin_expect],
205  [AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main() { __builtin_expect(0, 0); }])],
206    [resid_cv_builtin_expect=yes], [resid_cv_builtin_expect=no])]
207)
208
209AS_IF([test "$resid_cv_builtin_expect" = no],
210  [HAVE_BUILTIN_EXPECT=0],
211  [HAVE_BUILTIN_EXPECT=1]
212)
213
214
215AC_CHECK_PROGS([DOXYGEN], [doxygen])
216AS_IF([test -z "$DOXYGEN"],
217  [AC_MSG_WARN([Doxygen not found - continuing without Doxygen support])],
218  [AC_CHECK_PROG([DOT], [dot], [YES], [NO])]
219)
220
221AM_CONDITIONAL([HAVE_DOXYGEN], [test -n "$DOXYGEN"])
222
223AM_COND_IF([HAVE_DOXYGEN], [AC_CONFIG_FILES([Doxyfile])])
224
225
226AC_ARG_ENABLE([testsuite],
227  [AS_HELP_STRING([--enable-testsuite=PATH_TO_TESTSUITE],
228    [enable VICE testsuite [default=no]]
229  )],
230  [],
231  [enable_testsuite=no]
232)
233
234AS_IF([test "x$enable_testsuite" != xno],
235  AC_DEFINE_UNQUOTED([VICE_TESTSUITE],
236    ["$enable_testsuite"],
237    [Path to VICE testsuite.]
238  )
239)
240
241AM_CONDITIONAL([TESTSUITE], [test "x$enable_testsuite" != xno])
242
243# FIXME use pkgconfig
244AC_ARG_ENABLE([tests],
245  [AS_HELP_STRING([--enable-tests],
246    [enable unit tests [default=no]]
247  )],
248  [[echo Enabling unit tests]
249    AC_CHECK_HEADERS([UnitTest++/UnitTest++.h], [], AC_MSG_ERROR([UnitTest++.h header not found]))
250        AS_IF(
251                [test "x${ac_cv_header_UnitTestpp_UnitTestpp_h}" = xyes],
252                AC_CHECK_LIB([UnitTest++], [main], [unittest_libs=-lUnitTest++], AC_MSG_ERROR([UnitTest++ library not found]))
253        )
254    [am_unittest=true]
255  ],
256  [am_unittest=false]
257)
258
259AM_CONDITIONAL([ENABLE_TEST], [test x$am_unittest = xtrue])
260AC_SUBST([unittest_libs])
261
262NEW_8580_FILTER=1
263AM_CONDITIONAL([NEW_8580_FILTER], [test $NEW_8580_FILTER != 0])
264
265AC_SUBST(HAVE_BOOL)
266AC_SUBST(HAVE_LOG1P)
267AC_SUBST(HAVE_BUILTIN_EXPECT)
268AC_SUBST(RESID_INLINING)
269AC_SUBST(RESID_INLINE)
270AC_SUBST(RESID_BRANCH_HINTS)
271AC_SUBST(NEW_8580_FILTER)
272
273AC_SUBST(LIBSIDPLAYVERSION)
274AC_SUBST(LIBSTILVIEWVERSION)
275
276# exSID support
277AC_ARG_WITH(
278    [exsid],
279    [AS_HELP_STRING([--with-exsid], [Build with exsid support [@<:@yes/no/check, default=check@:>@]])],
280    [],
281    [with_exsid=check]
282)
283
284# exSID support requires either libexsid or one of libfdti1 or libftd2xx
285AS_IF(
286    [test "x$with_exsid" != "xno"],
287    [PKG_CHECK_MODULES([EXSID],
288        [libexsid >= 2.0],
289        [AC_DEFINE([HAVE_EXSID], 1, [Define to 1 if you have libexsid (-lexsid).])
290        build_exsid_builder=yes],
291        [AC_MSG_WARN([$EXSID_PKG_ERRORS] [- using internal driver])
292            AS_IF([test "x$MINGW32" != "xyes"],
293                AC_SEARCH_LIBS([dlopen], [dl dld], [],
294                  [AC_MSG_ERROR([unable to find the dlopen() function])]
295                )
296            )
297            AC_CHECK_HEADERS([ftd2xx.h],
298                [AC_DEFINE([HAVE_FTD2XX], 1, [Define to 1 if you have ftd2xx.h])
299                build_exsid_builder=yes
300                build_exsid_driver=yes],
301                [AC_MSG_WARN([ftd2xx.h not found, support will not be available])]
302            )
303            AC_MSG_CHECKING([for libftdi1])
304            PKG_CHECK_EXISTS([libftdi1 >= 1.0],
305                [AC_DEFINE([HAVE_FTDI], 1, [Define to 1 if you have ftdi.h])
306                build_exsid_builder=yes
307                build_exsid_driver=yes
308                FTDI_CFLAGS=`$PKG_CONFIG --cflags libftdi1`
309                AC_MSG_RESULT([yes])],
310                [AC_MSG_WARN([libftdi1 not found, support will not be available])]
311            )]
312    )]
313)
314
315AS_IF(
316    [test "x$with_exsid" = "xyes" -a "x$build_exsid_builder" != xyes],
317    [AC_MSG_ERROR([Neither libexsid nor ftd2xx nor libftdi1 found])]
318)
319
320AC_SUBST([FTDI_CFLAGS])
321
322AM_CONDITIONAL([EXSID_SUPPORT], [ test "x${build_exsid_builder}" = xyes])
323AM_CONDITIONAL([EXSID_DRIVER], [ test "x${build_exsid_driver}" = xyes])
324
325# check for thread model if available
326AS_IF([test "x$build_exsid_driver" = xyes],
327        [AX_PTHREAD(
328                [AC_DEFINE([EXSID_THREADED], 1, [Define for threaded driver])]
329                [AC_DEFINE([HAVE_PTHREAD_H], 1, [Define to 1 if you have pthread.h])]
330        )]
331)
332
333eval loadable_shrext=$shrext_cmds
334AC_DEFINE_UNQUOTED([SHLIBEXT], ["${loadable_shrext}"], [Shared library extension])
335
336
337AC_CONFIG_FILES([
338Makefile
339libsidplayfp.pc
340libstilview.pc
341src/sidplayfp/sidversion.h
342src/builders/residfp-builder/residfp/siddefs-fp.h
343src/builders/resid-builder/resid/siddefs.h
344tests/Makefile
345])
346
347AC_OUTPUT
348