1 AC_INIT([asn1c],[0.9.29],[vlm@lionet.info])
3 AC_CONFIG_AUX_DIR(config)
4 AC_CONFIG_HEADER([config.h])
5 AM_INIT_AUTOMAKE([foreign])
6 AC_CONFIG_MACRO_DIR([m4])
8 dnl Checks for programs.
16 dnl locate ar using standard macro (old automake 1.11 does not know about AM_PROG_AR)
17 m4_ifdef([AM_PROG_AR],
19 [AC_PATH_PROG(AR, ar, ar, $PATH:/usr/ucb:/usr/ccs/bin)])
26 dnl If you need to see the details, just run make V=1.
27 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
38 AC_ARG_ENABLE([ASN_DEBUG],
39 [AS_HELP_STRING([--enable-ASN_DEBUG],
40 [produce debug log during `make check` testing])],
41 [enable_asn_debug=$enableval], [enable_asn_debug=no])
42 AS_IF([test x$enable_asn_debug != xno], [
43 TESTSUITE_CFLAGS="-DASN_EMIT_DEBUG"
44 SKELETONS_CFLAGS="-DASN_EMIT_DEBUG"
47 AX_CHECK_COMPILE_FLAG([-Wall], [CFLAGS="$CFLAGS -Wall"])
48 AX_CHECK_COMPILE_FLAG([-Wcast-qual], [CFLAGS="$CFLAGS -Wcast-qual"])
49 AX_CHECK_COMPILE_FLAG([-Wchar-subscripts],
50 [CFLAGS="$CFLAGS -Wchar-subscripts"])
51 AX_CHECK_COMPILE_FLAG([-Wmissing-prototypes],
52 [CFLAGS="$CFLAGS -Wmissing-prototypes"])
53 AX_CHECK_COMPILE_FLAG([-Wmissing-declarations],
54 [CFLAGS="$CFLAGS -Wmissing-declarations"])
56 dnl There are legitimate uses for these features, disable warnings/errors.
57 AX_CHECK_COMPILE_FLAG([-Wno-error=attributes],
58 [CFLAGS="$CFLAGS -Wno-error=attributes"])
59 AX_CHECK_COMPILE_FLAG([-Wno-error=cast-align],
60 [CFLAGS="$CFLAGS -Wno-error=cast-align"])
61 AX_CHECK_COMPILE_FLAG([-Wno-error=visibility],
62 [CFLAGS="$CFLAGS -Wno-error=visibility"])
63 AX_CHECK_COMPILE_FLAG([-Wno-error=parentheses-equality],
64 [CFLAGS="$CFLAGS -Wno-error=parentheses-equality"])
65 AX_CHECK_COMPILE_FLAG([-std=gnu99],
66 [CFLAGS="$CFLAGS -std=gnu99"
67 TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -std=gnu99"])
68 AX_CHECK_COMPILE_FLAG([-Wno-error=unused-variable],
69 [TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -Wno-error=unused-variable"])
71 dnl Lower the optimization level in tests to aid debugging.
72 dnl AX_CHECK_COMPILE_FLAG([-O1],
73 dnl [TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -O1"])
74 dnl AX_CHECK_COMPILE_FLAG([-fno-inline],
75 dnl [TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -fno-inline"])
78 AS_IF([test x$enable_code_coverage != xno], [
79 CFLAGS="$CFLAGS $CODE_COVERAGE_CFLAGS"
80 # The CODE_COVERAGE_CPPFLAGS contains -DNDEBUG flag
81 # which removes assert(...) macros from code coverage and improves the
82 # branches score. But when it is defined it results in few
83 # unsed-but-set-variable warnings that are treated as errors in the travis-ci
84 # build because these variables are only used inside assert macros.
85 # error: variable ‘ret’ set but not used [-Werror=unused-but-set-variable]
86 #CPPFLAGS="$CPPFLAGS $CODE_COVERAGE_CPPFLAGS"
87 CXXFLAGS="$CXXFLAGS $CODE_COVERAGE_CXXFLAGS"
88 AC_SEARCH_LIBS(gcov_open, gcov, [LDFLAGS="$LDFLAGS $CODE_COVERAGE_LDFLAGS"])
91 dnl Skeletons should be very compatible with most of the compilers, hence
92 dnl very strict backward compatibility flags.
93 SKELETONS_CFLAGS="${ADD_CFLAGS} ${SKELETONS_CFLAGS}"
94 AX_CHECK_COMPILE_FLAG([-std=c89],
95 [SKELETONS_CFLAGS="$SKELETONS_CFLAGS -std=c89"])
96 AX_CHECK_COMPILE_FLAG([-Wpedantic],
97 [SKELETONS_CFLAGS="$SKELETONS_CFLAGS -Wpedantic"],
99 dnl When -Wpedantic is not supported try the -pedantic instead. (gcc-4.7)
100 dnl See https://gcc.gnu.org/gcc-4.8/changes.html
101 AX_CHECK_COMPILE_FLAG([-pedantic],
102 [SKELETONS_CFLAGS="$SKELETONS_CFLAGS -pedantic"], [], [-Werror])
104 [-Werror]) #clang 3.0 prints warning when the flag is not supported
106 AC_ARG_ENABLE(Werror,
107 [AS_HELP_STRING([--enable-Werror],
108 [abort compilation after any C compiler warning])],
109 [enable_werror=$enableval], [enable_werror=no])
110 AS_IF([test x$enable_werror != xno], [
111 ADD_CFLAGS="${ADD_CFLAGS} -Werror -W -Wall -Wpointer-arith"
112 SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Werror -W -Wall -Wpointer-arith"
113 AX_CHECK_COMPILE_FLAG([-Wgnu],
114 [SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Wgnu"])
117 AX_CHECK_COMPILE_FLAG([-Wno-long-long],
118 [SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Wno-long-long"])
120 AC_ARG_ENABLE(test-Werror,
121 [AS_HELP_STRING([--enable-test-Werror],
122 [abort compiling tests after any C compiler warning])],
123 [enable_test_werror=$enableval], [enable_test_werror=no])
124 AS_IF([test x$enable_test_werror != xno], [
125 TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -Werror -W -Wpointer-arith"
128 dnl If requested and -m32 is available to create 32-bit code,
129 dnl treat it like a special case to be checked.
130 AC_ARG_ENABLE([test-32bit],
131 [AS_HELP_STRING([--enable-test-32bit],
132 [enable tests for 32-bit compatibility])],
133 [enable_test_32bit=$enableval], [enable_test_32bit=no])
134 AS_IF([test "x$enable_test_32bit" != xno], [
135 AX_CHECK_COMPILE_FLAG([-m32], [CFLAGS_M32="-m32 -DEXPLICIT_32BIT"],
138 AC_MSG_FAILURE([--enable-test-32bit=$enable_test_32bit is requested but not supported by the _AC_LANG compiler])
142 AM_CONDITIONAL([EXPLICIT_M32], [test "x${CFLAGS_M32}" != "x"])
146 dnl Enable Undefined Behavior Sanitizer, if supported.
147 AC_ARG_ENABLE([test-ubsan],
148 [AS_HELP_STRING([--disable-test-ubsan],
149 [disable Undefined Behavior Sanitizer for tests])],
150 [disable_test_ubsan=$enableval], [disable_test_ubsan=maybe])
151 AS_IF([test "x$disable_test_ubsan" != xno], [
152 AX_CHECK_COMPILE_AND_LINK_FLAG([-fsanitize=undefined],
153 [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=undefined"],
155 AS_IF([test "x$disable_test_ubsan" != xmaybe], [
157 [--disable-test-ubsan=$disable_test_ubsan is not supported on a target system.
158 https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html#how-to-build])])
161 [AC_LANG_PROGRAM([void test(int *);void test(int *n) { *n = 0; }])]
163 AX_CHECK_COMPILE_FLAG([-fno-sanitize-recover=undefined],
164 [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=undefined"])
166 dnl Unsigned integer overflow is enabled separately.
167 AX_CHECK_COMPILE_AND_LINK_FLAG([-fsanitize=unsigned-integer-overflow],
168 [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=unsigned-integer-overflow"], [], [], [AC_LANG_PROGRAM([int test(unsigned); int test(unsigned n) { return n + 1; }])])
169 AX_CHECK_COMPILE_FLAG([-fno-sanitize-recover=unsigned-integer-overflow],
170 [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=unsigned-integer-overflow"])
172 dnl Nullability is enabled separately.
173 AX_CHECK_COMPILE_AND_LINK_FLAG([-fsanitize=nullability],
174 [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=nullability"])
175 AX_CHECK_COMPILE_FLAG([-fno-sanitize-recover=nullability],
176 [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=nullability"])
178 dnl Keep error messages nice. Also consider:
179 dnl export ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer
180 dnl export UBSAN_OPTIONS=print_stacktrace=1
181 AX_CHECK_COMPILE_FLAG([-fno-omit-frame-pointer],
182 [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-omit-frame-pointer"])
185 dnl Enable Address Sanitizer, if supported by gcc (4.8+) or clang.
186 dnl http://clang.llvm.org/docs/AddressSanitizer.html
188 AC_ARG_ENABLE([test-asan],
189 [AS_HELP_STRING([--disable-test-asan],
190 [disable Address Sanitizer for tests])],
191 [disable_test_asan=$enableval], [disable_test_asan=maybe])
192 AS_IF([test "x$disable_test_asan" != xno], [
193 AX_CHECK_COMPILE_AND_LINK_FLAG([-fsanitize=address],
194 [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=address"],
196 AS_IF([test "x$disable_test_asan" != xmaybe], [
198 [--disable-test-asan=$disable_test_asan is not supported on a target system.
199 Check out https://clang.llvm.org/docs/AddressSanitizer.html#how-to-build])])
202 dnl Address sanitizer sometimes is equipped with the leak sanitizer.
203 dnl If address sanitizer is not equipped with a leak sanitizer,
204 dnl invoking programs with ASAN_OPTIONS=detect_leaks=1 will break them.
205 ASAN_OPTIONS="detect_leaks=1"
207 save_cflags="${CFLAGS}"
208 CFLAGS="${CFLAGS} ${SANITIZER_CFLAGS}"
209 AC_RUN_IFELSE([AC_LANG_PROGRAM()], [
210 ASAN_ENV_FLAGS="${ASAN_ENV_FLAGS} ASAN_OPTIONS=detect_leaks=1"
212 CFLAGS="${save_cflags}"
215 dnl Keep error messages nice. Also consider:
216 dnl export ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer
217 dnl export ASAN_OPTIONS=symbolize=1
218 AX_CHECK_COMPILE_FLAG([-fno-omit-frame-pointer],
219 [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-omit-frame-pointer"])
222 dnl Enable LibFuzzer, if supported.
224 AC_ARG_ENABLE([test-fuzzer],
225 [AS_HELP_STRING([--enable-test-fuzzer],
226 [enable LLVM LibFuzzer for randomized testing])],
227 [enable_test_fuzzer=$enableval], [enable_test_fuzzer=no])
228 AS_IF([test "x$enable_test_fuzzer" != xno], [
229 AX_CHECK_COMPILE_AND_LINK_FLAG([-fsanitize=fuzzer],
230 [LIBFUZZER_CFLAGS="-fsanitize=fuzzer -DENABLE_LIBFUZZER"],
232 [--enable-test-fuzzer=$enable_test_fuzzer is not supported on a target system.
233 Check out http://llvm.org/docs/LibFuzzer.html])],
236 #include <sys/types.h>
237 int LLVMFuzzerTestOneInput(const unsigned char *Data, size_t Size);
238 int LLVMFuzzerTestOneInput(const unsigned char *Data, size_t Size) {
246 TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} ${SANITIZER_CFLAGS}"
247 SKELETONS_CFLAGS="${SKELETONS_CFLAGS} ${SANITIZER_CFLAGS}"
250 AC_SUBST(LIBFUZZER_CFLAGS)
251 AC_SUBST(SANITIZER_CFLAGS)
252 AC_SUBST(TESTSUITE_CFLAGS)
253 AC_SUBST(SKELETONS_CFLAGS)
254 AC_SUBST(ASAN_ENV_FLAGS)
256 dnl Checks for header files.
258 AC_CHECK_HEADERS(sys/param.h)
260 dnl Checks for typedefs, structures, and compiler characteristics.
265 AC_CHECK_TYPE([__int128],
266 [AC_DEFINE(HAVE_128_BIT_INT, 1, [Have 128-bit integer])])
267 AC_CHECK_TYPE(intmax_t, int64_t)
269 dnl Test if we should test features that depend on 64-bitness.
270 AC_CHECK_SIZEOF([void *])
271 AM_CONDITIONAL([TEST_64BIT], [test "$ac_cv_sizeof_void_p" -eq 8])
274 AC_SEARCH_LIBS(getopt, iberty)
276 AC_CHECK_FUNCS(strtoimax strtoll)
277 AC_CHECK_FUNCS(mergesort)
278 AC_CHECK_FUNCS(mkstemps)
279 AC_CHECK_FUNCS(timegm)
280 AC_CHECK_DECLS(strcasecmp)
281 AC_CHECK_DECLS(vasprintf)
282 AC_TRY_LINK_FUNC([symlink],[AC_DEFINE([HAVE_SYMLINK], 1, [Define to 1 if you have the symlink function.])])
284 dnl Use pandoc to generate manual pages.
285 AC_PATH_PROG([PANDOC], pandoc)
286 AM_CONDITIONAL([HAVE_PANDOC], [test -n "$PANDOC"])
289 tests/tests-c-compiler/check-src/Makefile \
290 tests/tests-asn1c-compiler/Makefile \
291 tests/tests-asn1c-smoke/Makefile \
292 tests/tests-randomized/Makefile \
293 tests/tests-c-compiler/Makefile \
294 tests/tests-skeletons/Makefile \
295 libasn1compiler/Makefile \
296 libasn1common/Makefile \
297 libasn1parser/Makefile \
298 libasn1print/Makefile \
299 libasn1fix/Makefile \
300 doc/docsrc/Makefile \