preproc: Fix sigsegv in find_cc
[nasm.git] / configure.ac
blobd6b61b4992b0675adb0d29c9ef7053771ef0ef33
1 dnl Process this file with autoconf 2.63 or later to produce
2 dnl a configure script.
3 AC_PREREQ(2.63)
4 AC_INIT(config/config.h.in)
5 AC_CONFIG_HEADERS(config/config.h)
7 AC_PREFIX_PROGRAM(nasm)
9 dnl Save initial CFLAGS, to see if -g -O2 came from configure or not
10 pa_init_cflags="$CFLAGS"
12 dnl This prevents us from running Wine and thinking we are not
13 dnl cross-compiling when in fact we are; running Wine here is at
14 dnl the best very slow and doesn't buy us a single thing at all.
15 WINELOADER=/dev/null
16 export WINELOADER
18 dnl Checks for programs and enable necessary CC extensions
19 AC_USE_SYSTEM_EXTENSIONS
20 AC_SYS_LARGEFILE
21 AC_PROG_CC
22 AC_PROG_CC_STDC
23 AC_PROG_LN_S
24 AC_PROG_MAKE_SET
25 AC_PROG_INSTALL
27 dnl If the user did not specify a CFLAGS default, change default -O2
28 dnl to either -O3 (normal) or -O0 (for debugging)
29 PA_ARG_DISABLED([optimization],
30  [compile without optimization (-O0) to help debugging],
31  [pa_optimize=-O0], [pa_optimize=-O3])
33 dnl Compile and link with dwarf debug
34 PA_ARG_ENABLED([gdb],
35  [disable optimization and compile with extra debug information for GDB debugger],
36  [pa_optimize='-O0'
37   PA_ADD_CFLAGS([-ggdb3])
38  ])
40 AS_IF([test x"$pa_init_cflags" = x],
41       [CFLAGS=`echo "$CFLAGS" | sed -e "s/-O2/$pa_optimize/"`])
43 AS_IF([test x"$pa_optimize" = "x-O0"],
44       [PA_ADD_CFLAGS([-fno-omit-frame-pointer])])
46 dnl Check for library extension
47 PA_LIBEXT
49 dnl Checks for typedefs, structures, and compiler characteristics.
50 AC_C_CONST
51 AC_C_INLINE
52 AC_C_RESTRICT
53 AC_TYPE_SIZE_T
54 AC_C_BIGENDIAN(AC_DEFINE(WORDS_BIGENDIAN),AC_DEFINE(WORDS_LITTLEENDIAN),,)
55 AH_TEMPLATE(WORDS_BIGENDIAN,
56 [Define to 1 if your processor stores words with the most significant
57 byte first (like Motorola and SPARC, unlike Intel and VAX).])
58 AH_TEMPLATE(WORDS_LITTLEENDIAN,
59 [Define to 1 if your processor stores words with the least significant
60 byte first (like Intel and VAX, unlike Motorola and SPARC).])
62 dnl Force gcc and gcc-compatible compilers treat signed integers
63 dnl as 2's complement
64 PA_ADD_CFLAGS([-fwrapv])
66 dnl Some environments abuse __STRICT_ANSI__ to disable some
67 dnl function declarations
68 PA_ADD_CFLAGS([-U__STRICT_ANSI__])
70 dnl Don't put things in common if we can avoid it.  We don't want to
71 dnl assume all compilers support common, and this will help find those
72 dnl problems.  This also works around an OSX linker problem.
73 PA_ADD_CFLAGS([-fno-common])
75 dnl Look for programs...
76 AC_CHECK_PROGS(NROFF,    nroff,    false)
77 AC_CHECK_PROGS(ASCIIDOC, asciidoc, false)
78 AC_CHECK_PROGS(XMLTO,    xmlto,    false)
80 dnl Check for progs needed for manpage generation
81 AS_IF([test $ASCIIDOC = false],
82   [AC_MSG_WARN([No asciidoc package found])]
84 AS_IF([test $XMLTO = false],
85   [AC_MSG_WARN([No xmlto package found])]
88 dnl Check for host compiler tools
89 AC_CHECK_TOOL(AR, ar)
90 AC_CHECK_TOOL(RANLIB, ranlib, :)
91 AC_CHECK_TOOL(STRIP, strip)
93 dnl Checks for header files.
94 AC_HEADER_STDC
95 AC_CHECK_HEADERS(inttypes.h)
96 AC_CHECK_HEADERS(strings.h)
97 AC_HEADER_STDBOOL
98 AC_CHECK_HEADERS(stdnoreturn.h)
99 AC_CHECK_HEADERS(io.h)
100 AC_CHECK_HEADERS(fcntl.h)
101 AC_CHECK_HEADERS(unistd.h)
102 AC_CHECK_HEADERS(sys/param.h)
103 AC_CHECK_HEADERS(sys/mman.h)
104 AC_CHECK_HEADERS(sys/types.h)
105 AC_CHECK_HEADERS(sys/stat.h)
107 dnl Checks for library functions.
108 AC_CHECK_FUNCS(strcasecmp stricmp)
109 AC_CHECK_FUNCS(strncasecmp strnicmp)
110 AC_CHECK_FUNCS(strsep)
111 AC_CHECK_FUNCS(strnlen)
113 AC_CHECK_FUNCS(getuid)
114 AC_CHECK_FUNCS(getgid)
116 AC_CHECK_FUNCS(realpath)
117 AC_CHECK_FUNCS(canonicalize_file_name)
118 AC_CHECK_FUNCS(_fullpath)
119 AC_CHECK_FUNCS(pathconf)
121 AC_FUNC_FSEEKO
122 AC_CHECK_FUNCS([_fseeki64])
123 AC_CHECK_FUNCS([ftruncate _chsize _chsize_s])
124 AC_CHECK_FUNCS([fileno _fileno])
126 AC_CHECK_FUNCS(_filelengthi64)
127 AC_FUNC_MMAP
128 AC_CHECK_FUNCS(getpagesize)
129 AC_CHECK_FUNCS(sysconf)
131 AC_CHECK_FUNCS([access _access faccessat])
133 PA_HAVE_FUNC(__builtin_clz, (0U))
134 PA_HAVE_FUNC(__builtin_clzl, (0UL))
135 PA_HAVE_FUNC(__builtin_clzll, (0ULL))
136 PA_HAVE_FUNC(__builtin_expect, (1,1))
138 dnl Functions for which we have replacements available in lib/
139 AC_CHECK_FUNCS([vsnprintf _vsnprintf])
140 AC_CHECK_FUNCS([snprintf _snprintf])
141 AC_CHECK_FUNCS([strlcpy])
143 dnl These types are POSIX-specific, and Windows does it differently...
144 AC_CHECK_TYPES([struct _stati64])
145 AC_CHECK_TYPES([struct stat])
146 AC_CHECK_FUNCS([stat _stati64])
147 AC_CHECK_FUNCS([fstat _fstati64])
149 dnl Check for functions that might not be declared in the headers for
150 dnl various idiotic reasons (mostly because of library authors
151 dnl abusing the meaning of __STRICT_ANSI__)
152 AC_CHECK_DECLS(strcasecmp)
153 AC_CHECK_DECLS(stricmp)
154 AC_CHECK_DECLS(strncasecmp)
155 AC_CHECK_DECLS(strnicmp)
156 AC_CHECK_DECLS(strsep)
157 AC_CHECK_DECLS(strlcpy)
158 AC_CHECK_DECLS(strnlen)
160 dnl Check for missing types
161 AC_TYPE_UINTPTR_T
163 dnl Documentation: should we generate an uncompressed PDF?  It is
164 dnl about twice as big, but it can be externally compressed (e.g. with xz)
165 dnl and becomes significantly smaller than the original.
166 PA_ARG_DISABLED([pdf-compression],
167   [generate an uncompressed documentation PDF],
168   [PDFOPT='-nocompress'])
169 AC_SUBST([PDFOPT])
172 dnl Check for supported gcc attributes; some compilers (e.g. Sun CC)
173 dnl support these, but don't define __GNUC__ as they don't support
174 dnl some other features of gcc.
176 PA_ADD_CFLAGS([-Werror=attributes])
177 PA_FUNC_ATTRIBUTE(noreturn)
178 PA_FUNC_ATTRIBUTE(returns_nonnull)
179 PA_FUNC_ATTRIBUTE(malloc)
180 PA_FUNC_ATTRIBUTE(alloc_size, (1))
181 PA_FUNC_ATTRIBUTE(format, [(printf,1,2)], int, [const char *, ...], ["%d",1])
182 PA_FUNC_ATTRIBUTE(const)
183 PA_FUNC_ATTRIBUTE(pure)
184 PA_FUNC_ATTRIBUTE_ERROR
187 dnl support function sections (if available)
189 PA_ARG_ENABLED([sections],
190  [compile with function/data section support],
191  [PA_ADD_CLDFLAGS([-ffunction-sections])
192   PA_ADD_CLDFLAGS([-fdata-sections])
193   PA_ADD_CLDFLAGS([-Wl,--gc-sections])],
194  [])
197 dnl support LTO
199 PA_ARG_ENABLED([lto],
200  [compile with gcc-style link time optimization],
201  [PA_ADD_CLDFLAGS([-flto])
202   dnl Note: we use _PROG rather than _TOOL since we are prepending the full
203   dnl CC name which ought to already contain the host triplet if needed
204   ccbase=`echo "$CC" | awk '{ print $1; }'`
205   AC_CHECK_PROGS(CC_AR, [${ccbase}-ar], [$ac_cv_prog_AR])
206   AR="$CC_AR"
207   AC_CHECK_PROGS(CC_RANLIB, [${ccbase}-ranlib], [$ac_cv_prog_RANLIB])
208   RANLIB="$CC_RANLIB"], [])
211 dnl support sanitizers (if available)
213 PA_ARG_ENABLED([sanitizer],
214  [compile with sanitizers enabled],
215  [PA_ADD_CFLAGS([-fno-omit-frame-pointer])
216   PA_ADD_CLDFLAGS([-fsanitize=address])
217   PA_ADD_CLDFLAGS([-fsanitize=undefined])])
219 dnl If we have gcc, add appropriate code cleanliness options
220 PA_ADD_CFLAGS([-W])
221 PA_ADD_CFLAGS([-Wall])
222 PA_ADD_CFLAGS([-pedantic])
223 dnl LLVM doesn't error out on invalid -W options unless this option is
224 dnl specified first.  Enable this so this script can actually discover
225 dnl which -W options are possible for this compiler.
226 PA_ADD_CFLAGS([-Werror=unknown-warning-option])
227 dnl Suppress format warning on Windows targets due to their <inttypes.h>
228 PA_ADD_CFLAGS([-Wpedantic-ms-format],[-Wno-pedantic-ms-format])
229 PA_ADD_CFLAGS([-Wc90-c99-compat])
230 PA_ADD_CFLAGS([-Wlong-long],[-Wno-long-long])
231 dnl PA_ADD_CFLAGS([-Wwrite-strings])
232 PA_ARG_ENABLED([werror],
233  [compile with -Werror to error out on any warning],
234  [PA_ADD_CFLAGS([-Werror])],
235  [PA_ADD_CFLAGS([-Werror=implicit])
236   PA_ADD_CFLAGS([-Werror=missing-braces])
237   PA_ADD_CFLAGS([-Werror=return-type])
238   PA_ADD_CFLAGS([-Werror=trigraphs])
239   PA_ADD_CFLAGS([-Werror=pointer-arith])
240   PA_ADD_CFLAGS([-Werror=strict-prototypes])
241   PA_ADD_CFLAGS([-Werror=missing-prototypes])
242   PA_ADD_CFLAGS([-Werror=missing-declarations])
243   PA_ADD_CFLAGS([-Werror=comment])
244   PA_ADD_CFLAGS([-Werror=vla])]
248 dnl support ccache
250 PA_ARG_ENABLED([ccache], [compile with ccache], [CC="ccache $CC"], [])
252 AC_OUTPUT_COMMANDS([mkdir -p config nasmlib nsis output stdlib x86 asm disasm rdoff macros common])
253 AC_OUTPUT(Makefile doc/Makefile)