configure.ac 11 KB
Newer Older
Lev Walkin's avatar
Lev Walkin committed
1
AC_INIT([asn1c],[0.9.29],[vlm@lionet.info])
2 3

AC_CONFIG_AUX_DIR(config)
4
AC_CONFIG_HEADER([config.h])
5
AM_INIT_AUTOMAKE([foreign])
6
AC_CONFIG_MACRO_DIR([m4])
Lev Walkin's avatar
Lev Walkin committed
7 8 9 10 11 12 13 14 15

dnl Checks for programs.
AC_PROG_CC
AC_PROG_CPP
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_YACC
AM_PROG_LEX
theirix's avatar
theirix committed
16 17 18 19 20
dnl locate ar using standard macro (old automake 1.11 does not know about AM_PROG_AR)
m4_ifdef([AM_PROG_AR],
         [AM_PROG_AR],
         [AC_PATH_PROG(AR, ar, ar, $PATH:/usr/ucb:/usr/ccs/bin)])

Lev Walkin's avatar
Lev Walkin committed
21 22 23
AC_PROG_CXX
CXXFLAGS="-std=c++11"

theirix's avatar
theirix committed
24
LT_INIT
Lev Walkin's avatar
Lev Walkin committed
25

Lev Walkin's avatar
Lev Walkin committed
26 27
dnl If you need to see the details, just run make V=1.
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
Frank Morgner's avatar
Frank Morgner committed
28

Lev Walkin's avatar
Lev Walkin committed
29
case "$host_os" in
Lev Walkin's avatar
Lev Walkin committed
30
cygwin)
Lev Walkin's avatar
Lev Walkin committed
31 32 33 34 35
	case "$target" in
	*mingw*)
		CC="$CC -mno-cygwin"
	esac
	;;
Lev Walkin's avatar
Lev Walkin committed
36 37
esac

38
AC_ARG_ENABLE([ASN_DEBUG],
39 40 41 42 43
  [AS_HELP_STRING([--enable-ASN_DEBUG],
                  [produce debug log during `make check` testing])],
  [enable_asn_debug=$enableval], [enable_asn_debug=no])
  AS_IF([test x$enable_asn_debug != xno], [
      TESTSUITE_CFLAGS="-DEMIT_ASN_DEBUG"
44
      SKELETONS_CFLAGS="-DEMIT_ASN_DEBUG"
45
  ])
46

47 48 49
AX_CHECK_COMPILE_FLAG([-Wall], [CFLAGS="$CFLAGS -Wall"])
AX_CHECK_COMPILE_FLAG([-Wcast-qual], [CFLAGS="$CFLAGS -Wcast-qual"])
AX_CHECK_COMPILE_FLAG([-Wchar-subscripts],
Lev Walkin's avatar
Lev Walkin committed
50
      [CFLAGS="$CFLAGS -Wchar-subscripts"])
51
AX_CHECK_COMPILE_FLAG([-Wmissing-prototypes],
Lev Walkin's avatar
Lev Walkin committed
52
      [CFLAGS="$CFLAGS -Wmissing-prototypes"])
53
AX_CHECK_COMPILE_FLAG([-Wmissing-declarations],
Lev Walkin's avatar
Lev Walkin committed
54
      [CFLAGS="$CFLAGS -Wmissing-declarations"])
Lev Walkin's avatar
Lev Walkin committed
55

56
dnl There are legitimate uses for these features, disable warnings/errors.
57 58
AX_CHECK_COMPILE_FLAG([-Wno-error=attributes],
      [CFLAGS="$CFLAGS -Wno-error=attributes"])
59
AX_CHECK_COMPILE_FLAG([-Wno-error=cast-align],
Lev Walkin's avatar
Lev Walkin committed
60
      [CFLAGS="$CFLAGS -Wno-error=cast-align"])
61
AX_CHECK_COMPILE_FLAG([-Wno-error=visibility],
Lev Walkin's avatar
Lev Walkin committed
62
      [CFLAGS="$CFLAGS -Wno-error=visibility"])
63
AX_CHECK_COMPILE_FLAG([-Wno-error=parentheses-equality],
Lev Walkin's avatar
Lev Walkin committed
64
      [CFLAGS="$CFLAGS -Wno-error=parentheses-equality"])
Lev Walkin's avatar
Lev Walkin committed
65
AX_CHECK_COMPILE_FLAG([-std=gnu99],
Lev Walkin's avatar
Lev Walkin committed
66
      [CFLAGS="$CFLAGS -std=gnu99"
67
       TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -std=gnu99"])
Lev Walkin's avatar
Lev Walkin committed
68
AX_CHECK_COMPILE_FLAG([-Wno-error=unused-variable],
69 70 71 72 73 74 75
      [TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -Wno-error=unused-variable"])

dnl Lower the optimization level in tests to aid debugging.
dnl AX_CHECK_COMPILE_FLAG([-O1],
dnl    [TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -O1"])
dnl AX_CHECK_COMPILE_FLAG([-fno-inline],
dnl     [TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -fno-inline"])
Lev Walkin's avatar
Lev Walkin committed
76

77 78 79 80 81 82 83 84 85 86 87
AX_CODE_COVERAGE
AS_IF([test x$enable_code_coverage != xno], [
	CFLAGS="$CFLAGS $CODE_COVERAGE_CFLAGS"
	# The CODE_COVERAGE_CPPFLAGS contains -DNDEBUG flag
	# which removes assert(...) macros from code coverage and improves the
	# branches score. But when it is defined it results in few
	# unsed-but-set-variable warnings that are treated as errors in the travis-ci
	# build because these variables are only used inside assert macros.
	# error: variable ‘ret’ set but not used [-Werror=unused-but-set-variable]
	#CPPFLAGS="$CPPFLAGS $CODE_COVERAGE_CPPFLAGS"
	CXXFLAGS="$CXXFLAGS $CODE_COVERAGE_CXXFLAGS"
88
	AC_SEARCH_LIBS(gcov_open, gcov, [LDFLAGS="$LDFLAGS $CODE_COVERAGE_LDFLAGS"])
89 90
])

Lev Walkin's avatar
Lev Walkin committed
91 92
dnl Skeletons should be very compatible with most of the compilers, hence
dnl very strict backward compatibility flags.
93
SKELETONS_CFLAGS="${ADD_CFLAGS} ${SKELETONS_CFLAGS}"
Lev Walkin's avatar
Lev Walkin committed
94
AX_CHECK_COMPILE_FLAG([-std=c89],
Lev Walkin's avatar
Lev Walkin committed
95
    [SKELETONS_CFLAGS="$SKELETONS_CFLAGS -std=c89"])
Lev Walkin's avatar
Lev Walkin committed
96
AX_CHECK_COMPILE_FLAG([-Wpedantic],
97 98 99 100 101 102 103 104
    [SKELETONS_CFLAGS="$SKELETONS_CFLAGS -Wpedantic"],
    [
        dnl When -Wpedantic is not supported try the -pedantic instead. (gcc-4.7)
        dnl See https://gcc.gnu.org/gcc-4.8/changes.html
        AX_CHECK_COMPILE_FLAG([-pedantic],
            [SKELETONS_CFLAGS="$SKELETONS_CFLAGS -pedantic"], [], [-Werror])
    ],
    [-Werror]) #clang 3.0 prints warning when the flag is not supported
Lev Walkin's avatar
Lev Walkin committed
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123

AC_ARG_ENABLE(Werror,
  [AS_HELP_STRING([--enable-Werror],
                  [abort compilation after any C compiler warning])],
  [enable_werror=$enableval], [enable_werror=no])
  AS_IF([test x$enable_werror != xno], [
      ADD_CFLAGS="${ADD_CFLAGS} -Werror -W -Wall -Wpointer-arith"
      SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Werror -W -Wall -Wpointer-arith"
      AX_CHECK_COMPILE_FLAG([-Wgnu],
        [SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Wgnu"])
  ])

AC_ARG_ENABLE(test-Werror,
  [AS_HELP_STRING([--enable-test-Werror],
                  [abort compiling tests after any C compiler warning])],
  [enable_test_werror=$enableval], [enable_test_werror=no])
  AS_IF([test x$enable_test_werror != xno], [
      TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -Werror -W -Wpointer-arith"
  ])
124 125
AX_CHECK_COMPILE_FLAG([-Wno-format],
    [SKELETONS_CFLAGS="$SKELETONS_CFLAGS -Wno-format"])
Lev Walkin's avatar
Lev Walkin committed
126

Lev Walkin's avatar
Lev Walkin committed
127

Lev Walkin's avatar
Lev Walkin committed
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
dnl If -m32 is available to create 32-bit code,
dnl treat it like a special case to be checked.
AC_ARG_ENABLE([test-32bit],
    [AS_HELP_STRING([--disable-test-32bit],
    [Disable tests for 32-bit compatibility])],
    [disable_test_32bit=$enableval], [disable_test_32bit=maybe])
AS_IF([test "x$disable_test_32bit" != xno], [
    AX_CHECK_COMPILE_FLAG([-m32], [CFLAGS_M32=-m32],
      [
        CFLAGS_M32=""
        AS_IF([test "x$disable_test_32bit" != xmaybe], [
            AC_MSG_FAILURE([--disable-test-32bit=$disable_test_32bit is not supported on a target system.])
        ])
      ])
])
AC_SUBST(CFLAGS_M32)
AM_CONDITIONAL([EXPLICIT_M32], [test "x${CFLAGS_M32}" != "x"])

Lev Walkin's avatar
Lev Walkin committed
146 147 148 149 150 151 152 153 154 155 156 157 158
SANITIZER_CFLAGS=""

dnl Enable Undefined Behavior Sanitizer, if supported.
AC_ARG_ENABLE([test-ubsan],
    [AS_HELP_STRING([--disable-test-ubsan],
        [Disable Undefined Behavior Sanitizer for tests])],
    [disable_test_ubsan=$enableval], [disable_test_ubsan=maybe])
AS_IF([test "x$disable_test_ubsan" != xno], [
    AX_CHECK_COMPILE_FLAG([-fsanitize=undefined],
      [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=undefined"],
      [
        AS_IF([test "x$disable_test_ubsan" != xmaybe], [
            AC_MSG_FAILURE(
Lev Walkin's avatar
Lev Walkin committed
159
[--disable-test-ubsan=$disable_test_ubsan is not supported on a target system.
Lev Walkin's avatar
Lev Walkin committed
160 161
https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html#how-to-build])])
      ])
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
    AX_CHECK_COMPILE_FLAG([-fno-sanitize-recover=undefined],
      [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=undefined"])

    dnl Unsigned integer overflow is enabled separately.
    AX_CHECK_COMPILE_FLAG([-fsanitize=unsigned-integer-overflow],
      [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=unsigned-integer-overflow"])
    AX_CHECK_COMPILE_FLAG([-fno-sanitize-recover=unsigned-integer-overflow],
      [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=unsigned-integer-overflow"])

    dnl Nullability is enabled separately.
    AX_CHECK_COMPILE_FLAG([-fsanitize=nullability],
      [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=nullability"])
    AX_CHECK_COMPILE_FLAG([-fno-sanitize-recover=nullability],
      [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=nullability"])

    dnl Keep error messages nice. Also consider:
    dnl export ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer
    dnl export UBSAN_OPTIONS=print_stacktrace=1
    AX_CHECK_COMPILE_FLAG([-fno-omit-frame-pointer],
          [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-omit-frame-pointer"])
Lev Walkin's avatar
Lev Walkin committed
182 183
])

184 185
dnl Enable Address Sanitizer, if supported by gcc (4.8+) or clang.
dnl http://clang.llvm.org/docs/AddressSanitizer.html
186
ASAN_ENV_FLAGS=""
187
AC_ARG_ENABLE([test-asan],
Lev Walkin's avatar
Lev Walkin committed
188 189 190 191
    [AS_HELP_STRING([--disable-test-asan],
        [Disable Address Sanitizer for tests])],
    [disable_test_asan=$enableval], [disable_test_asan=maybe])
AS_IF([test "x$disable_test_asan" != xno], [
192
    AX_CHECK_COMPILE_FLAG([-fsanitize=address],
Lev Walkin's avatar
Lev Walkin committed
193 194 195 196
      [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=address"],
      [
        AS_IF([test "x$disable_test_asan" != xmaybe], [
            AC_MSG_FAILURE(
Lev Walkin's avatar
Lev Walkin committed
197
[--disable-test-asan=$disable_test_asan is not supported on a target system.
Lev Walkin's avatar
Lev Walkin committed
198 199
Check out https://clang.llvm.org/docs/AddressSanitizer.html#how-to-build])])
      ])
200 201 202 203 204 205 206
    dnl Address sanitizer sometimes is equipped with the leak sanitizer,
    dnl so we use -fsanitize=leak to permit ASAN_OPTIONS environment.
    dnl If address sanitizer is not equipped with a leak sanitizer,
    dnl invoking programs with ASAN_OPTIONS=detect_leaks=1 will break them.
    AX_CHECK_COMPILE_FLAG([-fsanitize=leak], [
        ASAN_ENV_FLAGS="${ASAN_ENV_FLAGS} ASAN_OPTIONS=detect_leaks=1"
    ])
207 208 209 210
    dnl Keep error messages nice. Also consider:
    dnl export ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer
    dnl export ASAN_OPTIONS=symbolize=1
    AX_CHECK_COMPILE_FLAG([-fno-omit-frame-pointer],
Lev Walkin's avatar
Lev Walkin committed
211 212 213 214
          [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-omit-frame-pointer"])
])


Lev Walkin's avatar
Lev Walkin committed
215 216 217 218 219 220 221 222
dnl Enable LibFuzzer, if supported.
LIBFUZZER_CFLAGS=""
AC_ARG_ENABLE([test-fuzzer],
    [AS_HELP_STRING([--enable-test-fuzzer],
        [Enable LLVM LibFuzzer for randomized testing])],
    [enable_test_fuzzer=$enableval], [enable_test_fuzzer=no])
AS_IF([test "x$enable_test_fuzzer" != xno], [
    AX_CHECK_COMPILE_FLAG([-fsanitize=fuzzer],
Lev Walkin's avatar
Lev Walkin committed
223
      [LIBFUZZER_CFLAGS="${FUZZER_CFLAGS} -fsanitize=fuzzer -DENABLE_LIBFUZZER"],
Lev Walkin's avatar
Lev Walkin committed
224 225 226 227 228 229 230
      [
            AC_MSG_FAILURE(
[--enable-test-fuzzer=$enable_test_fuzzer is not supported on a target system.
Check out http://llvm.org/docs/LibFuzzer.html])
      ])
])

Lev Walkin's avatar
Lev Walkin committed
231
TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} ${SANITIZER_CFLAGS}"
Lev Walkin's avatar
Lev Walkin committed
232
SKELETONS_CFLAGS="${SKELETONS_CFLAGS} ${SANITIZER_CFLAGS}"
233 234

AC_SUBST(ADD_CFLAGS)
Lev Walkin's avatar
Lev Walkin committed
235
AC_SUBST(LIBFUZZER_CFLAGS)
Lev Walkin's avatar
Lev Walkin committed
236
AC_SUBST(SANITIZER_CFLAGS)
237
AC_SUBST(TESTSUITE_CFLAGS)
Lev Walkin's avatar
Lev Walkin committed
238
AC_SUBST(SKELETONS_CFLAGS)
239
AC_SUBST(ASAN_ENV_FLAGS)
Lev Walkin's avatar
Lev Walkin committed
240

Lev Walkin's avatar
Lev Walkin committed
241 242
dnl Checks for header files.
AC_HEADER_STDC
243
AC_CHECK_HEADERS(sys/param.h)
Lev Walkin's avatar
Lev Walkin committed
244 245 246 247 248 249

dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_BIGENDIAN
AC_TYPE_OFF_T
AC_TYPE_SIZE_T
AC_STRUCT_TM
250 251
AC_CHECK_TYPE([__int128],
    [AC_DEFINE(HAVE_128_BIT_INT, 1, [Have 128-bit integer])])
Lev Walkin's avatar
Lev Walkin committed
252 253
AC_CHECK_TYPE(intmax_t, int64_t)

Lev Walkin's avatar
Lev Walkin committed
254 255 256
dnl Test if we should test features that depend on 64-bitness.
AC_CHECK_SIZEOF([void *])
AM_CONDITIONAL([TEST_64BIT], [test "$ac_cv_sizeof_void_p" -eq 8])
257

258 259 260
dnl For mingw
AC_SEARCH_LIBS(getopt, iberty)

Lev Walkin's avatar
Lev Walkin committed
261
AC_CHECK_FUNCS(strtoimax strtoll)
Lev Walkin's avatar
Lev Walkin committed
262
AC_CHECK_FUNCS(mergesort)
Lev Walkin's avatar
Lev Walkin committed
263
AC_CHECK_FUNCS(mkstemps)
264
AC_CHECK_FUNCS(timegm)
265
AC_CHECK_DECLS(strcasecmp)
266
AC_CHECK_DECLS(vasprintf)
267
AC_TRY_LINK_FUNC([symlink],[AC_DEFINE([HAVE_SYMLINK], 1, [Define to 1 if you have the symlink function.])])
Lev Walkin's avatar
Lev Walkin committed
268

269 270 271 272
dnl Use pandoc to generate manual pages.
AC_PATH_PROG([PANDOC], pandoc)
AM_CONDITIONAL([HAVE_PANDOC], [test -n "$PANDOC"])

Lev Walkin's avatar
Lev Walkin committed
273
AC_CONFIG_FILES([\
Lev Walkin's avatar
Lev Walkin committed
274 275
tests/tests-c-compiler/check-src/Makefile   \
tests/tests-asn1c-compiler/Makefile         \
Lev Walkin's avatar
Lev Walkin committed
276
tests/tests-randomized/Makefile             \
Lev Walkin's avatar
Lev Walkin committed
277
tests/tests-c-compiler/Makefile             \
Lev Walkin's avatar
Lev Walkin committed
278
tests/tests-skeletons/Makefile              \
Lev Walkin's avatar
Lev Walkin committed
279
libasn1compiler/Makefile                    \
Lev Walkin's avatar
Lev Walkin committed
280
libasn1common/Makefile                      \
Lev Walkin's avatar
Lev Walkin committed
281 282 283 284 285 286 287 288 289 290 291
libasn1parser/Makefile                      \
libasn1print/Makefile                       \
libasn1fix/Makefile                         \
doc/docsrc/Makefile                         \
skeletons/Makefile                          \
examples/Makefile                           \
doc/man/Makefile                            \
tests/Makefile                              \
asn1c/Makefile                              \
doc/Makefile                                \
Makefile                                    \
Lev Walkin's avatar
Lev Walkin committed
292 293
])
AC_OUTPUT
Lev Walkin's avatar
Lev Walkin committed
294