1 dnl Process this file with autoconf 2.63 or later to produce
2 dnl a configure script.
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.
18 dnl Checks for programs and enable necessary CC extensions
19 AC_USE_SYSTEM_EXTENSIONS
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])
32 AS_IF([test x"$pa_init_cflags" = x],
33 [CFLAGS=`echo "$CFLAGS" | sed -e "s/-O2/$pa_optimize/"`])
35 dnl Check for library extension
38 dnl Checks for typedefs, structures, and compiler characteristics.
43 AC_C_BIGENDIAN(AC_DEFINE(WORDS_BIGENDIAN),AC_DEFINE(WORDS_LITTLEENDIAN),,)
44 AH_TEMPLATE(WORDS_BIGENDIAN,
45 [Define to 1 if your processor stores words with the most significant
46 byte first (like Motorola and SPARC, unlike Intel and VAX).])
47 AH_TEMPLATE(WORDS_LITTLEENDIAN,
48 [Define to 1 if your processor stores words with the least significant
49 byte first (like Intel and VAX, unlike Motorola and SPARC).])
51 dnl Force gcc and gcc-compatible compilers treat signed integers
53 PA_ADD_CFLAGS([-fwrapv])
55 dnl Some environments abuse __STRICT_ANSI__ to disable some
56 dnl function declarations
57 PA_ADD_CFLAGS([-U__STRICT_ANSI__])
59 dnl Don't put things in common if we can avoid it. We don't want to
60 dnl assume all compilers support common, and this will help find those
61 dnl problems. This also works around an OSX linker problem.
62 PA_ADD_CFLAGS([-fno-common])
64 dnl Look for programs...
65 AC_CHECK_PROGS(NROFF, nroff, false)
66 AC_CHECK_PROGS(ASCIIDOC, asciidoc, false)
67 AC_CHECK_PROGS(XMLTO, xmlto, false)
69 dnl Check for progs needed for manpage generation
70 AS_IF([test $ASCIIDOC = false],
71 [AC_MSG_WARN([No asciidoc package found])]
73 AS_IF([test $XMLTO = false],
74 [AC_MSG_WARN([No xmlto package found])]
77 dnl Check for host compiler tools
79 AC_CHECK_TOOL(RANLIB, ranlib, :)
80 AC_CHECK_TOOL(STRIP, strip)
82 dnl Checks for header files.
84 AC_CHECK_HEADERS(inttypes.h)
85 AC_CHECK_HEADERS(strings.h)
87 AC_CHECK_HEADERS(stdnoreturn.h)
88 AC_CHECK_HEADERS(io.h)
89 AC_CHECK_HEADERS(fcntl.h)
90 AC_CHECK_HEADERS(unistd.h)
91 AC_CHECK_HEADERS(sys/param.h)
92 AC_CHECK_HEADERS(sys/mman.h)
93 AC_CHECK_HEADERS(sys/types.h)
94 AC_CHECK_HEADERS(sys/stat.h)
96 dnl Checks for library functions.
97 AC_CHECK_FUNCS(strcasecmp stricmp)
98 AC_CHECK_FUNCS(strncasecmp strnicmp)
99 AC_CHECK_FUNCS(strsep)
100 AC_CHECK_FUNCS(strnlen)
102 AC_CHECK_FUNCS(getuid)
103 AC_CHECK_FUNCS(getgid)
105 AC_CHECK_FUNCS(realpath)
106 AC_CHECK_FUNCS(canonicalize_file_name)
107 AC_CHECK_FUNCS(_fullpath)
108 AC_CHECK_FUNCS(pathconf)
111 AC_CHECK_FUNCS([_fseeki64])
112 AC_CHECK_FUNCS([ftruncate _chsize _chsize_s])
113 AC_CHECK_FUNCS([fileno _fileno])
115 AC_CHECK_FUNCS(_filelengthi64)
117 AC_CHECK_FUNCS(getpagesize)
118 AC_CHECK_FUNCS(sysconf)
120 AC_CHECK_FUNCS([access _access faccessat])
122 PA_HAVE_FUNC(__builtin_clz, (0U))
123 PA_HAVE_FUNC(__builtin_clzl, (0UL))
124 PA_HAVE_FUNC(__builtin_clzll, (0ULL))
125 PA_HAVE_FUNC(__builtin_expect, (1,1))
127 dnl Functions for which we have replacements available in lib/
128 AC_CHECK_FUNCS([vsnprintf _vsnprintf])
129 AC_CHECK_FUNCS([snprintf _snprintf])
130 AC_CHECK_FUNCS([strlcpy])
132 dnl These types are POSIX-specific, and Windows does it differently...
133 AC_CHECK_TYPES([struct _stati64])
134 AC_CHECK_TYPES([struct stat])
135 AC_CHECK_FUNCS([stat _stati64])
136 AC_CHECK_FUNCS([fstat _fstati64])
138 dnl Check for functions that might not be declared in the headers for
139 dnl various idiotic reasons (mostly because of library authors
140 dnl abusing the meaning of __STRICT_ANSI__)
141 AC_CHECK_DECLS(strcasecmp)
142 AC_CHECK_DECLS(stricmp)
143 AC_CHECK_DECLS(strncasecmp)
144 AC_CHECK_DECLS(strnicmp)
145 AC_CHECK_DECLS(strsep)
146 AC_CHECK_DECLS(strlcpy)
147 AC_CHECK_DECLS(strnlen)
149 dnl Check for missing types
153 dnl Check for supported gcc attributes; some compilers (e.g. Sun CC)
154 dnl support these, but don't define __GNUC__ as they don't support
155 dnl some other features of gcc.
157 PA_ADD_CFLAGS([-Werror=attributes])
158 PA_FUNC_ATTRIBUTE(noreturn)
159 PA_FUNC_ATTRIBUTE(returns_nonnull)
160 PA_FUNC_ATTRIBUTE(malloc)
161 PA_FUNC_ATTRIBUTE(alloc_size, (1))
162 PA_FUNC_ATTRIBUTE(format, [(printf,1,2)], int, [const char *, ...], ["%d",1])
163 PA_FUNC_ATTRIBUTE(const)
164 PA_FUNC_ATTRIBUTE(pure)
165 PA_FUNC_ATTRIBUTE_ERROR
168 dnl support function sections
170 PA_ARG_ENABLED([sections],
171 [compile with function/data section support],
172 [PA_ADD_CFLAGS([-ffunction-sections]),
173 PA_ADD_CFLAGS([-fdata-sections])],
178 PA_ARG_ENABLED([lto],
179 [compile with gcc-style link time optimization],
180 [PA_ADD_CLDFLAGS([-flto])
181 dnl Note: we use _PROG rather than _TOOL since we are prepending the full
182 dnl CC name which ought to already contain the host triplet if needed
183 ccbase=`echo "$CC" | awk '{ print $1; }'`
184 AC_CHECK_PROGS(CC_AR, [${ccbase}-ar], [$ac_cv_prog_AR])
186 AC_CHECK_PROGS(CC_RANLIB, [${ccbase}-ranlib], [$ac_cv_prog_RANLIB])
187 RANLIB="$CC_RANLIB"], [])
189 dnl If we have gcc, add appropriate code cleanliness options
191 PA_ADD_CFLAGS([-Wall])
192 PA_ADD_CFLAGS([-pedantic])
193 dnl LLVM doesn't error out on invalid -W options unless this option is
194 dnl specified first. Enable this so this script can actually discover
195 dnl which -W options are possible for this compiler.
196 PA_ADD_CFLAGS([-Werror=unknown-warning-option])
197 dnl Suppress format warning on Windows targets due to their <inttypes.h>
198 PA_ADD_CFLAGS([-Wpedantic-ms-format],[-Wno-pedantic-ms-format])
199 PA_ADD_CFLAGS([-Wc90-c99-compat])
200 PA_ADD_CFLAGS([-Wlong-long],[-Wno-long-long])
201 dnl PA_ADD_CFLAGS([-Wwrite-strings])
202 PA_ARG_ENABLED([werror],
203 [compile with -Werror to error out on any warning],
204 [PA_ADD_CFLAGS([-Werror])],
205 [PA_ADD_CFLAGS([-Werror=implicit])
206 PA_ADD_CFLAGS([-Werror=missing-braces])
207 PA_ADD_CFLAGS([-Werror=return-type])
208 PA_ADD_CFLAGS([-Werror=trigraphs])
209 PA_ADD_CFLAGS([-Werror=pointer-arith])
210 PA_ADD_CFLAGS([-Werror=strict-prototypes])
211 PA_ADD_CFLAGS([-Werror=missing-prototypes])
212 PA_ADD_CFLAGS([-Werror=missing-declarations])
213 PA_ADD_CFLAGS([-Werror=comment])
214 PA_ADD_CFLAGS([-Werror=vla])]
220 PA_ARG_ENABLED([ccache], [compile with ccache], [CC="ccache $CC"], [])
222 AC_OUTPUT_COMMANDS([mkdir -p config nasmlib nsis output stdlib x86 asm disasm rdoff])
223 AC_OUTPUT(Makefile doc/Makefile)