1 dnl Macros used to build the Wine configure script
3 dnl Copyright 2002 Alexandre Julliard
5 dnl This library is free software; you can redistribute it and/or
6 dnl modify it under the terms of the GNU Lesser General Public
7 dnl License as published by the Free Software Foundation; either
8 dnl version 2.1 of the License, or (at your option) any later version.
10 dnl This library is distributed in the hope that it will be useful,
11 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
12 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 dnl Lesser General Public License for more details.
15 dnl You should have received a copy of the GNU Lesser General Public
16 dnl License along with this library; if not, write to the Free Software
17 dnl Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 dnl As a special exception to the GNU Lesser General Public License,
20 dnl if you distribute this file as part of a program that contains a
21 dnl configuration script generated by Autoconf, you may include it
22 dnl under the same distribution terms that you use for the rest of
25 dnl WINE_CHECK_HOST_TOOL(VARIABLE, PROG-TO-CHECK-FOR, [VALUE-IF-NOT-FOUND], [PATH])
27 dnl Like AC_CHECK_TOOL but without the broken fallback to non-prefixed name
29 AC_DEFUN([WINE_CHECK_HOST_TOOL],
30 [AS_VAR_SET_IF([ac_tool_prefix],
31 [AC_CHECK_PROG([$1],[${ac_tool_prefix}$2],[${ac_tool_prefix}$2],,[$4])])
32 AS_VAR_IF([ac_cv_prog_$1],[],
33 [AS_VAR_IF([cross_compiling],[yes],[],
34 [AS_UNSET([ac_cv_prog_$1])
35 AC_CHECK_PROG([$1],[$2],[$2],[$3],[$4])])],
36 [AS_VAR_COPY([$1],[ac_cv_prog_$1])])])
38 dnl WINE_HEADER_MAJOR()
40 dnl Same as AC_HEADER_MAJOR but fixed to handle the glibc 2.25 sys/types.h breakage
42 AC_DEFUN([WINE_HEADER_MAJOR],
43 [AC_CHECK_HEADER(sys/mkdev.h,
44 [AC_DEFINE(MAJOR_IN_MKDEV, 1,
45 [Define to 1 if `major', `minor', and `makedev' are
46 declared in <mkdev.h>.])])
47 if test $ac_cv_header_sys_mkdev_h = no; then
48 AC_CHECK_HEADER(sys/sysmacros.h,
49 [AC_DEFINE(MAJOR_IN_SYSMACROS, 1,
50 [Define to 1 if `major', `minor', and `makedev'
51 are declared in <sysmacros.h>.])])
54 dnl **** Initialize the programs used by other checks ****
56 dnl Usage: WINE_PATH_SONAME_TOOLS
57 dnl Usage: WINE_PATH_PKG_CONFIG
59 AC_DEFUN([WINE_PATH_SONAME_TOOLS],
60 [AC_PATH_PROG(LDD,ldd,true,/sbin:/usr/sbin:$PATH)
61 AC_CHECK_TOOL(OTOOL,otool,otool)
62 AC_CHECK_TOOL(READELF,[readelf],true)])
64 AC_DEFUN([WINE_PATH_PKG_CONFIG],
65 [WINE_CHECK_HOST_TOOL(PKG_CONFIG,[pkg-config])])
67 AC_DEFUN([WINE_PATH_MINGW_PKG_CONFIG],
70 ac_prefix_list="m4_foreach([ac_wine_cpu],[i686,i586,i486,i386],[ac_wine_cpu-w64-mingw32-pkg-config ])" ;;
72 ac_prefix_list="$host_cpu-w64-mingw32-pkg-config" ;;
74 AC_CHECK_PROGS(MINGW_PKG_CONFIG,[$ac_prefix_list],false)])
76 dnl **** Extract the soname of a library ****
78 dnl Usage: WINE_CHECK_SONAME(library, function, [action-if-found, [action-if-not-found, [other_libraries, [pattern]]]])
80 AC_DEFUN([WINE_CHECK_SONAME],
81 [AC_REQUIRE([WINE_PATH_SONAME_TOOLS])dnl
82 AS_VAR_PUSHDEF([ac_Lib],[ac_cv_lib_soname_$1])dnl
83 m4_pushdef([ac_lib_pattern],m4_default([$6],[lib$1]))dnl
84 AC_MSG_CHECKING([for -l$1])
86 [ac_check_soname_save_LIBS=$LIBS
88 AC_LINK_IFELSE([AC_LANG_CALL([], [$2])],
90 dll) AS_VAR_SET(ac_Lib,[`$ac_cv_path_LDD conftest.exe | grep "$1" | sed -e "s/dll.*/dll/"';2,$d'`]) ;;
91 dylib) AS_VAR_SET(ac_Lib,[`$OTOOL -L conftest$ac_exeext | grep "ac_lib_pattern\\.[[0-9A-Za-z.]]*dylib" | sed -e "s/^.*\/\(ac_lib_pattern\.[[0-9A-Za-z.]]*dylib\).*$/\1/"';2,$d'`]) ;;
92 *) AS_VAR_SET(ac_Lib,[`$READELF -d conftest$ac_exeext | grep "NEEDED.*ac_lib_pattern\\.$LIBEXT" | sed -e "s/^.*\\m4_dquote(\\(ac_lib_pattern\\.$LIBEXT[[^ ]]*\\)\\).*$/\1/"';2,$d'`])
93 AS_VAR_IF([ac_Lib],[],
94 [AS_VAR_SET(ac_Lib,[`$LDD conftest$ac_exeext | grep "ac_lib_pattern\\.$LIBEXT" | sed -e "s/^.*\(ac_lib_pattern\.$LIBEXT[[^ ]]*\).*$/\1/"';2,$d'`])]) ;;
96 [AS_VAR_SET(ac_Lib,[])])
97 LIBS=$ac_check_soname_save_LIBS])dnl
98 AS_VAR_IF([ac_Lib],[],
99 [AC_MSG_RESULT([not found])
101 [AC_MSG_RESULT(AS_VAR_GET(ac_Lib))
102 AC_DEFINE_UNQUOTED(AS_TR_CPP(SONAME_LIB$1),["]AS_VAR_GET(ac_Lib)["],
103 [Define to the soname of the lib$1 library.])
105 m4_popdef([ac_lib_pattern])dnl
106 AS_VAR_POPDEF([ac_Lib])])
108 dnl **** Get flags from pkg-config or alternate xxx-config program ****
110 dnl Usage: WINE_PACKAGE_FLAGS(var,pkg-name,[default-lib,[cflags-alternate,libs-alternate,[checks]]])
112 AC_DEFUN([WINE_PACKAGE_FLAGS],
113 [AC_REQUIRE([WINE_PATH_PKG_CONFIG])dnl
114 AS_VAR_PUSHDEF([ac_cflags],[[$1]_CFLAGS])dnl
115 AS_VAR_PUSHDEF([ac_libs],[[$1]_LIBS])dnl
117 AC_ARG_VAR(ac_cflags, [C compiler flags for $2, overriding pkg-config])dnl
118 AS_VAR_IF([ac_cflags],[],
119 [AS_VAR_SET_IF([PKG_CONFIG],
120 [ac_cflags=`$PKG_CONFIG --cflags [$2] 2>conftest.err`])])
121 m4_ifval([$4],[test "$cross_compiling" = yes || ac_cflags=[$]{ac_cflags:-[$4]}])
122 AC_ARG_VAR(ac_libs, [Linker flags for $2, overriding pkg-config])dnl
123 AS_VAR_IF([ac_libs],[],
124 [AS_VAR_SET_IF([PKG_CONFIG],
125 [ac_libs=`$PKG_CONFIG --libs [$2] 2>/dev/null`])])
126 m4_ifval([$5],[test "$cross_compiling" = yes || ac_libs=[$]{ac_libs:-[$5]}])
127 m4_ifval([$3],[ac_libs=[$]{ac_libs:-"$3"}])
128 AS_ECHO(["$as_me:${as_lineno-$LINENO}: $2 cflags: $ac_cflags"]) >&AS_MESSAGE_LOG_FD
129 AS_ECHO(["$as_me:${as_lineno-$LINENO}: $2 libs: $ac_libs"]) >&AS_MESSAGE_LOG_FD
130 if test -s conftest.err; then
131 AS_ECHO_N(["$as_me:${as_lineno-$LINENO}: $2 errors: "]) >&AS_MESSAGE_LOG_FD
132 cat conftest.err >&AS_MESSAGE_LOG_FD
135 ac_save_CPPFLAGS=$CPPFLAGS
136 CPPFLAGS="$CPPFLAGS $ac_cflags"
138 CPPFLAGS=$ac_save_CPPFLAGS
139 AS_VAR_POPDEF([ac_libs])dnl
140 AS_VAR_POPDEF([ac_cflags])])dnl
142 dnl **** Get flags from MinGW pkg-config or alternate xxx-config program ****
144 dnl Usage: WINE_MINGW_PACKAGE_FLAGS(var,pkg-name,[default-lib,[checks]])
146 AC_DEFUN([WINE_MINGW_PACKAGE_FLAGS],
147 [AC_REQUIRE([WINE_PATH_MINGW_PKG_CONFIG])dnl
148 AS_VAR_PUSHDEF([ac_cflags],[[$1]_PE_CFLAGS])dnl
149 AS_VAR_PUSHDEF([ac_libs],[[$1]_PE_LIBS])dnl
150 AS_VAR_IF([ac_cflags],[],
151 [AS_VAR_SET_IF([MINGW_PKG_CONFIG],
152 [ac_cflags=`$MINGW_PKG_CONFIG --cflags [$2] 2>/dev/null`])])
153 AS_VAR_IF([ac_libs],[],
154 [AS_VAR_SET_IF([MINGW_PKG_CONFIG],
155 [ac_libs=`$MINGW_PKG_CONFIG --libs [$2] 2>/dev/null`])])
156 m4_ifval([$3],[ac_libs=[$]{ac_libs:-"$3"}])
157 ac_save_CPPFLAGS=$CPPFLAGS
158 CPPFLAGS="$CPPFLAGS $ac_cflags"
160 CPPFLAGS=$ac_save_CPPFLAGS
161 AS_VAR_POPDEF([ac_libs])dnl
162 AS_VAR_POPDEF([ac_cflags])])dnl
164 dnl **** Get flags for an external lib program ****
166 dnl Usage: WINE_EXTLIB_FLAGS(var,pkg-name,default-libs,default-cflags)
168 AC_DEFUN([WINE_EXTLIB_FLAGS],
169 [AS_VAR_PUSHDEF([ac_cflags],[[$1]_PE_CFLAGS])dnl
170 AS_VAR_PUSHDEF([ac_libs],[[$1]_PE_LIBS])dnl
171 AC_ARG_VAR(ac_cflags, [C compiler flags for the PE $2, overriding the bundled version])dnl
172 AC_ARG_VAR(ac_libs, [Linker flags for the PE $2, overriding the bundled version])dnl
173 AS_VAR_IF([ac_libs],[],
175 AS_VAR_IF([ac_cflags],[],[ac_cflags=$4],[enable_$2=no])],
177 AS_ECHO(["$as_me:${as_lineno-$LINENO}: $2 cflags: $ac_cflags"]) >&AS_MESSAGE_LOG_FD
178 AS_ECHO(["$as_me:${as_lineno-$LINENO}: $2 libs: $ac_libs"]) >&AS_MESSAGE_LOG_FD
179 AS_VAR_POPDEF([ac_libs])dnl
180 AS_VAR_POPDEF([ac_cflags])])dnl
182 dnl **** Link C code with an assembly file ****
184 dnl Usage: WINE_TRY_ASM_LINK(asm-code,includes,function,[action-if-found,[action-if-not-found]])
186 AC_DEFUN([WINE_TRY_ASM_LINK],
187 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[$2]],[[asm($1); $3]])],[$4],[$5])])
189 dnl **** Check if we can link an empty program with special CFLAGS ****
191 dnl Usage: WINE_TRY_CFLAGS(flags,[action-if-yes,[action-if-no]])
193 dnl The default action-if-yes is to append the flags to EXTRACFLAGS.
195 AC_DEFUN([WINE_TRY_CFLAGS],
196 [AS_VAR_PUSHDEF([ac_var], ac_cv_cflags_[[$1]])dnl
197 AC_CACHE_CHECK([whether the compiler supports $1], ac_var,
198 [ac_wine_try_cflags_saved=$CFLAGS
200 AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(int argc, char **argv) { return 0; }]])],
201 [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
202 CFLAGS=$ac_wine_try_cflags_saved])
203 AS_VAR_IF([ac_var],[yes],[m4_default([$2], [EXTRACFLAGS="$EXTRACFLAGS $1"])], [$3])dnl
204 AS_VAR_POPDEF([ac_var])])
206 dnl **** Check if we can link an empty program with special CFLAGS ****
208 dnl Usage: WINE_TRY_PE_CFLAGS(flags,[action-if-yes,[action-if-no]])
210 dnl The default action-if-yes is to append the flags to the arch-specific EXTRACFLAGS.
212 AC_DEFUN([WINE_TRY_PE_CFLAGS],
213 [{ AS_VAR_PUSHDEF([ac_var], ac_cv_${wine_arch}_cflags_[[$1]])dnl
214 AC_CACHE_CHECK([whether $CC supports $1], ac_var,
215 [ac_wine_try_cflags_saved=$CFLAGS
216 ac_wine_try_cflags_saved_exeext=$ac_exeext
217 CFLAGS="$CFLAGS -nostdlib -nodefaultlibs $1"
219 AC_LINK_IFELSE([AC_LANG_SOURCE([[int __cdecl mainCRTStartup(void) { return 0; }]])],
220 [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
221 CFLAGS=$ac_wine_try_cflags_saved
222 ac_exeext=$ac_wine_try_cflags_saved_exeext])
223 AS_VAR_IF([ac_var],[yes],[m4_default([$2], [AS_VAR_APPEND([${wine_arch}_EXTRACFLAGS],[" $1"])], [$3])])dnl
224 AS_VAR_POPDEF([ac_var]) }])
226 dnl **** Check whether the given MinGW header is available ****
228 dnl Usage: WINE_CHECK_MINGW_HEADER(header,[action-if-found],[action-if-not-found],[other-includes])
230 AC_DEFUN([WINE_CHECK_MINGW_HEADER],
231 [AS_VAR_PUSHDEF([ac_var],[ac_cv_mingw_header_$1])dnl
232 AC_CACHE_CHECK([for MinGW $1], ac_var,
233 [ac_wine_check_headers_saved_cc=$CC
234 ac_wine_check_headers_saved_exeext=$ac_exeext
235 AS_VAR_COPY([CC],[${wine_arch}_CC])
237 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[$4
238 #include <$1>]])],[AS_VAR_SET([ac_var],[yes])],[AS_VAR_SET([ac_var],[no])])
239 CC=$ac_wine_check_headers_saved_cc
240 ac_exeext=$ac_wine_check_headers_saved_exeext])
241 AS_VAR_IF([ac_var],[yes],[$2],[$3])dnl
242 AS_VAR_POPDEF([ac_var])])
244 dnl **** Check whether the given MinGW library is available ****
246 dnl Usage: WINE_CHECK_MINGW_LIB(library,function,[action-if-found],[action-if-not-found],[other-libraries])
248 AC_DEFUN([WINE_CHECK_MINGW_LIB],
249 [AS_VAR_PUSHDEF([ac_var],[ac_cv_mingw_lib_$1])dnl
250 AC_CACHE_CHECK([for $2 in MinGW -l$1], ac_var,
251 [ac_wine_check_headers_saved_cc=$CC
252 ac_wine_check_headers_saved_exeext=$ac_exeext
253 ac_wine_check_headers_saved_libs=$LIBS
254 AS_VAR_COPY([CC],[${wine_arch}_CC])
257 AC_LINK_IFELSE([AC_LANG_CALL([], [$2])],[AS_VAR_SET([ac_var],[yes])],[AS_VAR_SET([ac_var],[no])])
258 CC=$ac_wine_check_headers_saved_cc
259 ac_exeext=$ac_wine_check_headers_saved_exeext
260 LIBS=$ac_wine_check_headers_saved_libs])
261 AS_VAR_IF([ac_var],[yes],[$3],[$4])dnl
262 AS_VAR_POPDEF([ac_var])])
264 dnl **** Check if we can link an empty shared lib (no main) with special CFLAGS ****
266 dnl Usage: WINE_TRY_SHLIB_FLAGS(flags,[action-if-yes,[action-if-no]])
268 AC_DEFUN([WINE_TRY_SHLIB_FLAGS],
269 [AS_VAR_PUSHDEF([ac_var], ac_cv_cflags_[[$1]])dnl
270 ac_wine_try_cflags_saved=$CFLAGS
272 AC_LINK_IFELSE([AC_LANG_SOURCE([[void myfunc() {}]])],
273 [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
274 CFLAGS=$ac_wine_try_cflags_saved
275 AS_VAR_IF([ac_var],[yes], [$2], [$3])dnl
276 AS_VAR_POPDEF([ac_var])])
278 dnl **** Check whether we need to define a symbol on the compiler command line ****
280 dnl Usage: WINE_CHECK_DEFINE(name),[action-if-yes,[action-if-no]])
282 AC_DEFUN([WINE_CHECK_DEFINE],
283 [AS_VAR_PUSHDEF([ac_var],[ac_cv_cpp_def_$1])dnl
284 AC_CACHE_CHECK([whether we need to define $1],ac_var,
285 AC_EGREP_CPP(yes,[#ifndef $1
288 [AS_VAR_SET(ac_var,yes)],[AS_VAR_SET(ac_var,no)]))
289 AS_VAR_IF([ac_var],[yes],
290 [CFLAGS="$CFLAGS -D$1"
291 LINTFLAGS="$LINTFLAGS -D$1"])dnl
292 AS_VAR_POPDEF([ac_var])])
294 dnl **** Check for functions with some extra libraries ****
296 dnl Usage: WINE_CHECK_LIB_FUNCS(funcs,libs,[action-if-found,[action-if-not-found]])
298 AC_DEFUN([WINE_CHECK_LIB_FUNCS],
299 [ac_wine_check_funcs_save_LIBS="$LIBS"
301 AC_CHECK_FUNCS([$1],[$3],[$4])
302 LIBS="$ac_wine_check_funcs_save_LIBS"])
304 dnl **** Define helper functions for creating config.status files ****
306 dnl Usage: AC_REQUIRE([WINE_CONFIG_HELPERS])
308 AC_DEFUN([WINE_CONFIG_HELPERS],
309 [AS_VAR_SET([wine_rules],["all:"])
311 AC_SUBST(DISABLED_SUBDIRS,"")
312 AC_SUBST(CONFIGURE_TARGETS,"")
314 wine_fn_config_makefile ()
316 AS_VAR_APPEND([SUBDIRS],[" \\$as_nl $[1]"])
317 AS_VAR_COPY([enable],[$[2]])
319 no) AS_VAR_APPEND([DISABLED_SUBDIRS],[" $[1]"]) ;;
320 *aarch64*|*arm*|*i386*|*x86_64*)
321 if test -n "$PE_ARCHS"
325 test $(expr ",$enable," : ".*,$i,") -gt 0 || AS_VAR_APPEND([${i}_DISABLED_SUBDIRS],[" $[1]"])
328 test $(expr ",$enable," : ".*,$HOST_ARCH,") -gt 0 || AS_VAR_APPEND([DISABLED_SUBDIRS],[" $[1]"])
333 wine_fn_config_symlink ()
336 AS_VAR_APPEND([wine_rules],["
338 @./config.status \$[@]"])
339 for f in $ac_links; do AS_VAR_APPEND([CONFIGURE_TARGETS],[" $f"]); done
342 dnl **** Define helper function to append a rule to a makefile command list ****
344 dnl Usage: WINE_APPEND_RULE(rule)
346 AC_DEFUN([WINE_APPEND_RULE],[AC_REQUIRE([WINE_CONFIG_HELPERS])AS_VAR_APPEND([wine_rules],["
349 dnl **** Create symlinks from config.status ****
351 dnl Usage: WINE_CONFIG_SYMLINK(target,src,enable)
353 AC_DEFUN([WINE_CONFIG_SYMLINK],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
354 m4_ifval([$3],[if test $3; then
355 ])AC_CONFIG_LINKS([$1:$2])dnl
356 wine_fn_config_symlink[ $1]m4_ifval([$3],[
360 dnl **** Create a makefile from config.status ****
362 dnl Usage: WINE_CONFIG_MAKEFILE(file,enable,condition)
364 AC_DEFUN([WINE_CONFIG_MAKEFILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
365 AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]m4_bpatsubst([$1],[.*/\([^/]*\)$],[\1])))dnl
366 m4_append_uniq([_AC_USER_OPTS],ac_enable,[
368 m4_ifval([$3],[$3 || ])wine_fn_config_makefile [$1] ac_enable[]dnl
369 AS_VAR_POPDEF([ac_enable])])
371 dnl **** Append a file to the .gitignore list ****
373 dnl Usage: WINE_IGNORE_FILE(file,enable)
375 AC_DEFUN([WINE_IGNORE_FILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
376 m4_ifval([$2],[test "x$[$2]" = xno || ])AS_VAR_APPEND([CONFIGURE_TARGETS],[" $1"])])
378 dnl **** Add a message to the list displayed at the end ****
380 dnl Usage: WINE_NOTICE(notice)
381 dnl Usage: WINE_WARNING(warning)
382 dnl Usage: WINE_NOTICE_WITH(with_flag, test, notice, enable)
383 dnl Usage: WINE_WARNING_WITH(with_flag, test, warning, enable)
384 dnl Usage: WINE_ERROR_WITH(with_flag, test, error, enable)
385 dnl Usage: WINE_PRINT_MESSAGES
387 AC_DEFUN([WINE_NOTICE],[AS_VAR_APPEND([wine_notices],["|$1"])])
388 AC_DEFUN([WINE_WARNING],[AS_VAR_APPEND([wine_warnings],["|$1"])])
390 AC_DEFUN([WINE_NOTICE_WITH],[AS_IF([$2],[case "x$with_$1" in
391 x) WINE_NOTICE([$3]) ;;
394 This is an error since --with-$1 was requested.]) ;;
396 m4_ifval([$4],[$4=${$4:-no}])])])
398 AC_DEFUN([WINE_WARNING_WITH],[AS_IF([$2],[case "x$with_$1" in
399 x) WINE_WARNING([$3]) ;;
402 This is an error since --with-$1 was requested.]) ;;
404 m4_ifval([$4],[$4=${$4:-no}])])])
406 AC_DEFUN([WINE_ERROR_WITH],[AS_IF([$2],[case "x$with_$1" in
409 Use the --without-$1 option if you really want this.]) ;;
411 m4_ifval([$4],[$4=${$4:-no}])])])
413 AC_DEFUN([WINE_PRINT_MESSAGES],[ac_save_IFS="$IFS"
414 if test "x$wine_notices" != x; then
417 for msg in $wine_notices; do
419 AS_VAR_IF([msg],[],,[AC_MSG_NOTICE([$msg])])
423 for msg in $wine_warnings; do
425 AS_VAR_IF([msg],[],,[echo >&2
426 AC_MSG_WARN([$msg])])
431 dnl compile-command: "autoreconf --warnings=all"