blob: fc03822fe815cd9957e508af694a890bffedf6ff [file] [log] [blame]
H. Peter Anvind338b372016-02-18 00:54:30 -08001dnl Process this file with autoconf 2.63 or later to produce
H. Peter Anvin1170eb62002-05-19 02:26:38 +00002dnl a configure script.
H. Peter Anvind338b372016-02-18 00:54:30 -08003AC_PREREQ(2.63)
H. Peter Anvin397c1692016-10-04 17:01:59 -07004AC_INIT(config/config.h.in)
5AC_CONFIG_HEADERS(config/config.h)
H. Peter Anvin87bc6192002-04-30 20:53:16 +00006
H. Peter Anvin87bc6192002-04-30 20:53:16 +00007AC_PREFIX_PROGRAM(nasm)
8
9dnl Checks for programs.
H. Peter Anvin70a5d142007-10-13 23:12:46 -070010dnl Consider AC_USE_SYSTEM_EXTENSIONS if autoconf 2.61 is OK in the future
H. Peter Anvin2f0f9ea2008-06-08 20:53:29 -070011AC_USE_SYSTEM_EXTENSIONS
H. Peter Anvinb423c022016-02-18 11:57:53 -080012AC_SYS_LARGEFILE
H. Peter Anvin87bc6192002-04-30 20:53:16 +000013AC_PROG_CC
H. Peter Anvind338b372016-02-18 00:54:30 -080014AC_PROG_CC_STDC
H. Peter Anvin87bc6192002-04-30 20:53:16 +000015AC_PROG_LN_S
16AC_PROG_MAKE_SET
H. Peter Anvin87bc6192002-04-30 20:53:16 +000017AC_PROG_INSTALL
18
H. Peter Anvin89c17702016-03-09 14:11:40 -080019dnl Check for library extension
20PA_LIBEXT
21
Cyrill Gorcunov7729edf2014-12-20 11:35:51 +030022dnl Checks for typedefs, structures, and compiler characteristics.
23AC_C_CONST
H. Peter Anvin03f229c2015-11-04 11:29:09 -080024AC_C_INLINE
Cyrill Gorcunov7729edf2014-12-20 11:35:51 +030025AC_C_RESTRICT
26AC_TYPE_SIZE_T
H. Peter Anvinef635882016-03-01 21:53:09 -080027AC_C_BIGENDIAN(AC_DEFINE(WORDS_BIGENDIAN),AC_DEFINE(WORDS_LITTLEENDIAN),,)
Cyrill Gorcunov7729edf2014-12-20 11:35:51 +030028AH_TEMPLATE(WORDS_BIGENDIAN,
29[Define to 1 if your processor stores words with the most significant
30byte first (like Motorola and SPARC, unlike Intel and VAX).])
31AH_TEMPLATE(WORDS_LITTLEENDIAN,
32[Define to 1 if your processor stores words with the least significant
33byte first (like Intel and VAX, unlike Motorola and SPARC).])
34
H. Peter Anvin8b190832016-11-15 14:01:37 -080035PA_ADD_CFLAGS([-std=c99])
36
H. Peter Anvinb9c1ca72016-03-01 21:51:40 -080037dnl Force gcc and gcc-compatible compilers treat signed integers
38dnl as 2's complement
H. Peter Anvin8d9f5912016-02-27 00:15:13 -080039PA_ADD_CFLAGS([-fwrapv])
H. Peter Anvin87bc6192002-04-30 20:53:16 +000040
H. Peter Anvin8b190832016-11-15 14:01:37 -080041dnl Some environments abuse __STRICT_ANSI__ to disable some
42dnl function declarations
43PA_ADD_CFLAGS([-U__STRICT_ANSI__])
44
H. Peter Anvin43e02622016-08-02 09:28:22 -070045dnl Don't put things in common if we can avoid it. We don't want to
46dnl assume all compilers support common, and this will help find those
47dnl problems. This also works around an OSX linker problem.
48PA_ADD_CFLAGS([-fno-common])
49
H. Peter Anvineec3b522008-06-19 11:39:23 -070050dnl Look for programs...
H. Peter Anvina9397832013-05-17 12:02:49 -070051AC_CHECK_PROGS(NROFF, nroff, false)
H. Peter Anvind089c222013-10-24 13:22:19 +010052AC_CHECK_PROGS(ASCIIDOC, asciidoc, false)
53AC_CHECK_PROGS(XMLTO, xmlto, false)
H. Peter Anvineec3b522008-06-19 11:39:23 -070054AC_CHECK_PROGS(ACRODIST, acrodist, false)
55AC_CHECK_PROGS(PS2PDF, ps2pdf, false)
56AC_CHECK_PROGS(PSTOPDF, pstopdf, false)
H. Peter Anvin620515a2002-04-30 20:57:38 +000057
H. Peter Anvind089c222013-10-24 13:22:19 +010058dnl Check for progs needed for manpage generation
59if test $ASCIIDOC = false; then
H. Peter Anvincc147f72016-03-08 02:06:39 -080060 AC_MSG_WARN([No asciidoc package found])
H. Peter Anvind089c222013-10-24 13:22:19 +010061fi
62if test $XMLTO = false; then
63 AC_MSG_WARN([No xmlto package found])
64fi
65
H. Peter Anvincc147f72016-03-08 02:06:39 -080066dnl Check for host compiler tools
67AC_CHECK_TOOL(AR, ar)
68AC_CHECK_TOOL(RANLIB, ranlib, :)
69AC_CHECK_TOOL(STRIP, strip)
70
H. Peter Anvin87bc6192002-04-30 20:53:16 +000071dnl Checks for header files.
72AC_HEADER_STDC
H. Peter Anvin3ef4f002016-03-08 12:14:55 -080073AC_CHECK_HEADERS(inttypes.h)
H. Peter Anvinfe501952007-10-02 21:53:51 -070074AC_CHECK_HEADERS(strings.h)
H. Peter Anvind338b372016-02-18 00:54:30 -080075AC_HEADER_STDBOOL
H. Peter Anvine65e81b2016-02-18 14:24:40 -080076AC_CHECK_HEADERS(io.h)
H. Peter Anvind81a2352016-09-21 14:03:18 -070077AC_CHECK_HEADERS(fcntl.h)
H. Peter Anvin4627e692016-01-26 12:01:34 -080078AC_CHECK_HEADERS(unistd.h)
H. Peter Anvin4627e692016-01-26 12:01:34 -080079AC_CHECK_HEADERS(sys/param.h)
H. Peter Anvind81a2352016-09-21 14:03:18 -070080AC_CHECK_HEADERS(sys/mman.h)
81AC_CHECK_HEADERS(sys/stat.h)
H. Peter Anvin4c9132e2016-10-19 13:13:38 -070082AC_CHECK_HEADERS(sys/types.h)
H. Peter Anvin4627e692016-01-26 12:01:34 -080083
H. Peter Anvin87bc6192002-04-30 20:53:16 +000084dnl Checks for library functions.
H. Peter Anvinfe501952007-10-02 21:53:51 -070085AC_CHECK_FUNCS(strcasecmp stricmp)
86AC_CHECK_FUNCS(strncasecmp strnicmp)
H. Peter Anvin73b22f52016-02-18 14:40:37 -080087AC_CHECK_FUNCS(strsep)
H. Peter Anvin22538e22016-05-25 05:42:47 -070088AC_CHECK_FUNCS(strnlen)
H. Peter Anvinfe501952007-10-02 21:53:51 -070089
H. Peter Anvin038d8612007-04-12 16:54:50 +000090AC_CHECK_FUNCS(getuid)
91AC_CHECK_FUNCS(getgid)
92
H. Peter Anvin4627e692016-01-26 12:01:34 -080093AC_CHECK_FUNCS(realpath)
94AC_CHECK_FUNCS(canonicalize_file_name)
95AC_CHECK_FUNCS(_fullpath)
96AC_CHECK_FUNCS(pathconf)
97
H. Peter Anvine65e81b2016-02-18 14:24:40 -080098AC_FUNC_FSEEKO
H. Peter Anvinec82d7a2016-02-21 21:20:45 -080099AC_CHECK_FUNCS([_fseeki64])
H. Peter Anvine65e81b2016-02-18 14:24:40 -0800100AC_CHECK_FUNCS([ftruncate _chsize _chsize_s])
H. Peter Anvin397c1692016-10-04 17:01:59 -0700101AC_CHECK_FUNCS([fileno _fileno])
H. Peter Anvine65e81b2016-02-18 14:24:40 -0800102
H. Peter Anvin397c1692016-10-04 17:01:59 -0700103AC_CHECK_FUNCS(_filelengthi64)
104AC_CHECK_FUNCS([stat _stati64])
H. Peter Anvind81a2352016-09-21 14:03:18 -0700105AC_CHECK_FUNCS(fstat)
106AC_CHECK_FUNCS(mmap)
107AC_CHECK_FUNCS(getpagesize)
108AC_CHECK_FUNCS(sysconf)
109
H. Peter Anvin397c1692016-10-04 17:01:59 -0700110AC_CHECK_FUNCS([access _access faccessat])
H. Peter Anvind81a2352016-09-21 14:03:18 -0700111
H. Peter Anvin8d4fb262016-11-15 14:23:54 -0800112PA_HAVE_FUNC(__builtin_clz, (0U))
113PA_HAVE_FUNC(__builtin_clzl, (0UL))
114PA_HAVE_FUNC(__builtin_clzll, (0ULL))
H. Peter Anvin8b190832016-11-15 14:01:37 -0800115PA_HAVE_FUNC(__builtin_expect, (1,1))
H. Peter Anvind338b372016-02-18 00:54:30 -0800116
117dnl Functions for which we have replacements available in lib/
H. Peter Anvincc147f72016-03-08 02:06:39 -0800118AC_CHECK_FUNCS([vsnprintf _vsnprintf])
119AC_CHECK_FUNCS([snprintf _snprintf])
120AC_CHECK_FUNCS([strlcpy])
H. Peter Anvind338b372016-02-18 00:54:30 -0800121
H. Peter Anvinc13d31a2007-10-26 18:49:29 -0700122dnl Check for functions that might not be declared in the headers for
123dnl various idiotic reasons (mostly because of library authors
124dnl abusing the meaning of __STRICT_ANSI__)
125AC_CHECK_DECLS(strcasecmp)
126AC_CHECK_DECLS(stricmp)
127AC_CHECK_DECLS(strncasecmp)
128AC_CHECK_DECLS(strnicmp)
129AC_CHECK_DECLS(strsep)
H. Peter Anvineaa68f12009-08-10 15:56:52 -0700130AC_CHECK_DECLS(strlcpy)
H. Peter Anvin22538e22016-05-25 05:42:47 -0700131AC_CHECK_DECLS(strnlen)
H. Peter Anvinc13d31a2007-10-26 18:49:29 -0700132
H. Peter Anvind81a2352016-09-21 14:03:18 -0700133dnl Check for missing types
134AC_TYPE_UINTPTR_T
135
H. Peter Anvin8b190832016-11-15 14:01:37 -0800136dnl
137dnl Check for supported gcc attributes; some compilers (e.g. Sun CC)
138dnl support these, but don't define __GNUC__ as they don't support
139dnl some other features of gcc.
140dnl
141PA_FUNC_ATTRIBUTE(noreturn)
142PA_FUNC_ATTRIBUTE(returns_nonnull)
143PA_FUNC_ATTRIBUTE(malloc)
144PA_FUNC_ATTRIBUTE(alloc_size, (1))
145PA_FUNC_ATTRIBUTE(format, [(printf,1,2)], int, [const char *, ...], ["%d",1])
146PA_FUNC_ATTRIBUTE(const)
147PA_FUNC_ATTRIBUTE(pure)
H. Peter Anvin87bc6192002-04-30 20:53:16 +0000148
Cyrill Gorcunov325768e2010-11-11 11:18:44 +0300149dnl
150dnl support cchace
151dnl
H. Peter Anvin44a609b2016-02-18 12:09:31 -0800152AC_ARG_ENABLE([ccache],
153[AC_HELP_STRING([--with-ccache], [compile with ccache])],
154[CC="ccache $CC"],
155[])
Cyrill Gorcunov325768e2010-11-11 11:18:44 +0300156
H. Peter Anvinb9c1ca72016-03-01 21:51:40 -0800157dnl If we have gcc, add appropriate code cleanliness options
H. Peter Anvind338b372016-02-18 00:54:30 -0800158PA_ADD_CFLAGS([-W])
159PA_ADD_CFLAGS([-Wall])
Ozkan Sezerec3d4262016-02-12 23:49:49 -0800160PA_ADD_CFLAGS([-pedantic])
H. Peter Anvinc9fd7b22016-05-16 21:35:48 -0700161dnl LLVM doesn't error out on invalid -W options unless this option is
162dnl specified first. Enable this so this script can actually discover
163dnl which -W options are possible for this compiler.
164PA_ADD_CFLAGS([-Werror=unknown-warning-option])
H. Peter Anvin25da6ea2016-03-01 22:20:10 -0800165dnl Suppress format warning on Windows targets due to their <inttypes.h>
166PA_ADD_CFLAGS([-Wpedantic-ms-format],[-Wno-pedantic-ms-format])
167PA_ADD_CFLAGS([-Wc90-c99-compat])
168PA_ADD_CFLAGS([-Wlong-long],[-Wno-long-long])
H. Peter Anvincfd56eb2016-03-06 21:44:14 -0800169dnl PA_ADD_CFLAGS([-Wwrite-strings])
H. Peter Anvin44a609b2016-02-18 12:09:31 -0800170AC_ARG_ENABLE([werror],
171[AC_HELP_STRING([--enable-werror],
172[compile with -Werror to error out on any warning])],
H. Peter Anvinfdf0d072016-03-03 12:39:02 -0800173[], [enable_werror=no])
174AS_IF([test x"$enable_werror" != xno],
H. Peter Anvin44a609b2016-02-18 12:09:31 -0800175[PA_ADD_CFLAGS([-Werror])],
176[PA_ADD_CFLAGS([-Werror=implicit])
Ozkan Sezerec3d4262016-02-12 23:49:49 -0800177PA_ADD_CFLAGS([-Werror=missing-braces])
178PA_ADD_CFLAGS([-Werror=return-type])
179PA_ADD_CFLAGS([-Werror=trigraphs])
180PA_ADD_CFLAGS([-Werror=pointer-arith])
181PA_ADD_CFLAGS([-Werror=strict-prototypes])
182PA_ADD_CFLAGS([-Werror=missing-prototypes])
183PA_ADD_CFLAGS([-Werror=missing-declarations])
184PA_ADD_CFLAGS([-Werror=comment])
H. Peter Anvin44a609b2016-02-18 12:09:31 -0800185PA_ADD_CFLAGS([-Werror=vla])])
Ozkan Sezerec3d4262016-02-12 23:49:49 -0800186
H. Peter Anvin397c1692016-10-04 17:01:59 -0700187AC_OUTPUT_COMMANDS([mkdir -p config nasmlib nsis output stdlib x86 asm disasm])
H. Peter Anvin0fcdade2002-05-19 01:57:54 +0000188AC_OUTPUT(Makefile rdoff/Makefile doc/Makefile)