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],
68 [AS_VAR_IF([HOST_ARCH],[i386],
69 [ac_prefix_list="m4_foreach([ac_wine_cpu],[i686,i586,i486,i386],[ac_wine_cpu-w64-mingw32-pkg-config ])"],
70 [ac_prefix_list="$host_cpu-w64-mingw32-pkg-config"])
71 AC_CHECK_PROGS(MINGW_PKG_CONFIG,[$ac_prefix_list],false)])
73 dnl **** Extract the soname of a library ****
75 dnl Usage: WINE_CHECK_SONAME(library, function, [action-if-found, [action-if-not-found, [other_libraries, [pattern]]]])
77 AC_DEFUN([WINE_CHECK_SONAME],
78 [AC_REQUIRE([WINE_PATH_SONAME_TOOLS])dnl
79 AS_VAR_PUSHDEF([ac_Lib],[ac_cv_lib_soname_$1])dnl
80 m4_pushdef([ac_lib_pattern],m4_default([$6],[lib$1]))dnl
81 AC_MSG_CHECKING([for -l$1])
83 [ac_check_soname_save_LIBS=$LIBS
85 AC_LINK_IFELSE([AC_LANG_CALL([], [$2])],
87 dll) AS_VAR_SET(ac_Lib,[`$ac_cv_path_LDD conftest.exe | grep "$1" | sed -e "s/dll.*/dll/"';2,$d'`]) ;;
88 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'`]) ;;
89 *) 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'`])
90 AS_VAR_IF([ac_Lib],[],
91 [AS_VAR_SET(ac_Lib,[`$LDD conftest$ac_exeext | grep "ac_lib_pattern\\.$LIBEXT" | sed -e "s/^.*\(ac_lib_pattern\.$LIBEXT[[^ ]]*\).*$/\1/"';2,$d'`])]) ;;
93 [AS_VAR_SET(ac_Lib,[])])
94 LIBS=$ac_check_soname_save_LIBS])dnl
95 AS_VAR_IF([ac_Lib],[],
96 [AC_MSG_RESULT([not found])
98 [AC_MSG_RESULT(AS_VAR_GET(ac_Lib))
99 AC_DEFINE_UNQUOTED(AS_TR_CPP(SONAME_LIB$1),["]AS_VAR_GET(ac_Lib)["],
100 [Define to the soname of the lib$1 library.])
102 m4_popdef([ac_lib_pattern])dnl
103 AS_VAR_POPDEF([ac_Lib])])
105 dnl **** Get flags from pkg-config or alternate xxx-config program ****
107 dnl Usage: WINE_PACKAGE_FLAGS(var,pkg-name,[default-lib,[cflags-alternate,libs-alternate,[checks]]])
109 AC_DEFUN([WINE_PACKAGE_FLAGS],
110 [AC_REQUIRE([WINE_PATH_PKG_CONFIG])dnl
111 AS_VAR_PUSHDEF([ac_cflags],[[$1]_CFLAGS])dnl
112 AS_VAR_PUSHDEF([ac_libs],[[$1]_LIBS])dnl
114 AC_ARG_VAR(ac_cflags, [C compiler flags for $2, overriding pkg-config])dnl
115 AS_VAR_IF([ac_cflags],[],
116 [AS_VAR_SET_IF([PKG_CONFIG],
117 [ac_cflags=`$PKG_CONFIG --cflags [$2] 2>conftest.err`])])
118 m4_ifval([$4],[test "$cross_compiling" = yes || ac_cflags=[$]{ac_cflags:-[$4]}])
119 AC_ARG_VAR(ac_libs, [Linker flags for $2, overriding pkg-config])dnl
120 AS_VAR_IF([ac_libs],[],
121 [AS_VAR_SET_IF([PKG_CONFIG],
122 [ac_libs=`$PKG_CONFIG --libs [$2] 2>/dev/null`])])
123 m4_ifval([$5],[test "$cross_compiling" = yes || ac_libs=[$]{ac_libs:-[$5]}])
124 m4_ifval([$3],[ac_libs=[$]{ac_libs:-"$3"}])
125 AS_ECHO(["$as_me:${as_lineno-$LINENO}: $2 cflags: $ac_cflags"]) >&AS_MESSAGE_LOG_FD
126 AS_ECHO(["$as_me:${as_lineno-$LINENO}: $2 libs: $ac_libs"]) >&AS_MESSAGE_LOG_FD
127 if test -s conftest.err; then
128 AS_ECHO_N(["$as_me:${as_lineno-$LINENO}: $2 errors: "]) >&AS_MESSAGE_LOG_FD
129 cat conftest.err >&AS_MESSAGE_LOG_FD
132 ac_save_CPPFLAGS=$CPPFLAGS
133 CPPFLAGS="$CPPFLAGS $ac_cflags"
135 CPPFLAGS=$ac_save_CPPFLAGS
136 AS_VAR_POPDEF([ac_libs])dnl
137 AS_VAR_POPDEF([ac_cflags])])dnl
139 dnl **** Get flags from MinGW pkg-config or alternate xxx-config program ****
141 dnl Usage: WINE_MINGW_PACKAGE_FLAGS(var,pkg-name,[default-lib,[checks]])
143 AC_DEFUN([WINE_MINGW_PACKAGE_FLAGS],
144 [AC_REQUIRE([WINE_PATH_MINGW_PKG_CONFIG])dnl
145 AS_VAR_PUSHDEF([ac_cflags],[[$1]_PE_CFLAGS])dnl
146 AS_VAR_PUSHDEF([ac_libs],[[$1]_PE_LIBS])dnl
147 AS_VAR_IF([ac_cflags],[],
148 [AS_VAR_SET_IF([MINGW_PKG_CONFIG],
149 [ac_cflags=`$MINGW_PKG_CONFIG --cflags [$2] 2>/dev/null`])])
150 AS_VAR_IF([ac_libs],[],
151 [AS_VAR_SET_IF([MINGW_PKG_CONFIG],
152 [ac_libs=`$MINGW_PKG_CONFIG --libs [$2] 2>/dev/null`])])
153 m4_ifval([$3],[ac_libs=[$]{ac_libs:-"$3"}])
154 ac_save_CPPFLAGS=$CPPFLAGS
155 CPPFLAGS="$CPPFLAGS $ac_cflags"
157 CPPFLAGS=$ac_save_CPPFLAGS
158 AS_VAR_POPDEF([ac_libs])dnl
159 AS_VAR_POPDEF([ac_cflags])])dnl
161 dnl **** Get flags for an external lib program ****
163 dnl Usage: WINE_EXTLIB_FLAGS(var,pkg-name,default-libs,default-cflags)
165 AC_DEFUN([WINE_EXTLIB_FLAGS],
166 [AS_VAR_PUSHDEF([ac_cflags],[[$1]_PE_CFLAGS])dnl
167 AS_VAR_PUSHDEF([ac_libs],[[$1]_PE_LIBS])dnl
168 AC_ARG_VAR(ac_cflags, [C compiler flags for the PE $2, overriding the bundled version])dnl
169 AC_ARG_VAR(ac_libs, [Linker flags for the PE $2, overriding the bundled version])dnl
170 AS_VAR_IF([ac_libs],[],
172 AS_VAR_IF([ac_cflags],[],[ac_cflags=$4],[enable_$2=no])],
174 AS_ECHO(["$as_me:${as_lineno-$LINENO}: $2 cflags: $ac_cflags"]) >&AS_MESSAGE_LOG_FD
175 AS_ECHO(["$as_me:${as_lineno-$LINENO}: $2 libs: $ac_libs"]) >&AS_MESSAGE_LOG_FD
176 AS_VAR_POPDEF([ac_libs])dnl
177 AS_VAR_POPDEF([ac_cflags])])dnl
179 dnl **** Link C code with an assembly file ****
181 dnl Usage: WINE_TRY_ASM_LINK(asm-code,includes,function,[action-if-found,[action-if-not-found]])
183 AC_DEFUN([WINE_TRY_ASM_LINK],
184 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[$2]],[[asm($1); $3]])],[$4],[$5])])
186 dnl **** Check if we can link an empty program with special CFLAGS ****
188 dnl Usage: WINE_TRY_CFLAGS(flags,[action-if-yes,[action-if-no]])
190 dnl The default action-if-yes is to append the flags to EXTRACFLAGS.
192 AC_DEFUN([WINE_TRY_CFLAGS],
193 [AS_VAR_PUSHDEF([ac_var], ac_cv_cflags_[[$1]])dnl
194 AC_CACHE_CHECK([whether the compiler supports $1], ac_var,
195 [ac_wine_try_cflags_saved=$CFLAGS
197 AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(int argc, char **argv) { return 0; }]])],
198 [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
199 CFLAGS=$ac_wine_try_cflags_saved])
200 AS_VAR_IF([ac_var],[yes],[m4_default([$2], [EXTRACFLAGS="$EXTRACFLAGS $1"])], [$3])dnl
201 AS_VAR_POPDEF([ac_var])])
203 dnl **** Check if we can link an empty program with special CFLAGS ****
205 dnl Usage: WINE_TRY_PE_CFLAGS(flags,[action-if-yes,[action-if-no]])
207 dnl The default action-if-yes is to append the flags to the arch-specific EXTRACFLAGS.
209 AC_DEFUN([WINE_TRY_PE_CFLAGS],
210 [{ AS_VAR_PUSHDEF([ac_var], ac_cv_${wine_arch}_cflags_[[$1]])dnl
211 AC_CACHE_CHECK([whether $CC supports $1], ac_var,
212 [ac_wine_try_cflags_saved=$CFLAGS
213 ac_wine_try_cflags_saved_exeext=$ac_exeext
214 CFLAGS="$CFLAGS -nostdlib -nodefaultlibs $1"
216 AC_LINK_IFELSE([AC_LANG_SOURCE([[void *__os_arm64x_dispatch_ret = 0;
217 int __cdecl mainCRTStartup(void) { return 0; }]])],
218 [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
219 CFLAGS=$ac_wine_try_cflags_saved
220 ac_exeext=$ac_wine_try_cflags_saved_exeext])
221 AS_VAR_IF([ac_var],[yes],[m4_default([$2], [AS_VAR_APPEND([${wine_arch}_EXTRACFLAGS],[" $1"])])], [$3])dnl
222 AS_VAR_POPDEF([ac_var]) }])
224 dnl **** Check whether the given MinGW header is available ****
226 dnl Usage: WINE_CHECK_MINGW_HEADER(header,[action-if-found],[action-if-not-found],[other-includes])
228 AC_DEFUN([WINE_CHECK_MINGW_HEADER],
229 [AS_VAR_PUSHDEF([ac_var],[ac_cv_mingw_header_$1])dnl
230 AC_CACHE_CHECK([for MinGW $1], ac_var,
231 [ac_wine_check_headers_saved_cc=$CC
232 ac_wine_check_headers_saved_exeext=$ac_exeext
233 AS_VAR_COPY([CC],[${wine_arch}_CC])
235 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[$4
236 #include <$1>]])],[AS_VAR_SET([ac_var],[yes])],[AS_VAR_SET([ac_var],[no])])
237 CC=$ac_wine_check_headers_saved_cc
238 ac_exeext=$ac_wine_check_headers_saved_exeext])
239 AS_VAR_IF([ac_var],[yes],[$2],[$3])dnl
240 AS_VAR_POPDEF([ac_var])])
242 dnl **** Check whether the given MinGW library is available ****
244 dnl Usage: WINE_CHECK_MINGW_LIB(library,function,[action-if-found],[action-if-not-found],[other-libraries])
246 AC_DEFUN([WINE_CHECK_MINGW_LIB],
247 [AS_VAR_PUSHDEF([ac_var],[ac_cv_mingw_lib_$1])dnl
248 AC_CACHE_CHECK([for $2 in MinGW -l$1], ac_var,
249 [ac_wine_check_headers_saved_cc=$CC
250 ac_wine_check_headers_saved_exeext=$ac_exeext
251 ac_wine_check_headers_saved_libs=$LIBS
252 AS_VAR_COPY([CC],[${wine_arch}_CC])
255 AC_LINK_IFELSE([AC_LANG_CALL([], [$2])],[AS_VAR_SET([ac_var],[yes])],[AS_VAR_SET([ac_var],[no])])
256 CC=$ac_wine_check_headers_saved_cc
257 ac_exeext=$ac_wine_check_headers_saved_exeext
258 LIBS=$ac_wine_check_headers_saved_libs])
259 AS_VAR_IF([ac_var],[yes],[$3],[$4])dnl
260 AS_VAR_POPDEF([ac_var])])
262 dnl **** Check whether we need to define a symbol on the compiler command line ****
264 dnl Usage: WINE_CHECK_DEFINE(name),[action-if-yes,[action-if-no]])
266 AC_DEFUN([WINE_CHECK_DEFINE],
267 [AS_VAR_PUSHDEF([ac_var],[ac_cv_cpp_def_$1])dnl
268 AC_CACHE_CHECK([whether we need to define $1],ac_var,
269 AC_EGREP_CPP(yes,[#ifndef $1
272 [AS_VAR_SET(ac_var,yes)],[AS_VAR_SET(ac_var,no)]))
273 AS_VAR_IF([ac_var],[yes],
274 [CFLAGS="$CFLAGS -D$1"
275 LINTFLAGS="$LINTFLAGS -D$1"])dnl
276 AS_VAR_POPDEF([ac_var])])
278 dnl **** Check for functions with some extra libraries ****
280 dnl Usage: WINE_CHECK_LIB_FUNCS(funcs,libs,[action-if-found,[action-if-not-found]])
282 AC_DEFUN([WINE_CHECK_LIB_FUNCS],
283 [ac_wine_check_funcs_save_LIBS="$LIBS"
285 AC_CHECK_FUNCS([$1],[$3],[$4])
286 LIBS="$ac_wine_check_funcs_save_LIBS"])
288 dnl **** Define helper functions for creating config.status files ****
290 dnl Usage: AC_REQUIRE([WINE_CONFIG_HELPERS])
292 AC_DEFUN([WINE_CONFIG_HELPERS],
293 [AS_VAR_SET([wine_rules],["all:"])
295 AC_SUBST(DISABLED_SUBDIRS,"")
296 AC_SUBST(CONFIGURE_TARGETS,"")
298 wine_fn_config_makefile ()
300 AS_VAR_APPEND([SUBDIRS],[" \\$as_nl $[1]"])
301 AS_VAR_COPY([enable],[$[2]])
303 no) AS_VAR_APPEND([DISABLED_SUBDIRS],[" $[1]"]) ;;
305 *aarch64*|*arm*|*i386*|*x86_64*)
306 if test -n "$PE_ARCHS"
310 test $(expr ",$enable," : ".*,$i,") -gt 0 || AS_VAR_APPEND([${i}_DISABLED_SUBDIRS],[" $[1]"])
313 test $(expr ",$enable," : ".*,$HOST_ARCH,") -gt 0 || AS_VAR_APPEND([DISABLED_SUBDIRS],[" $[1]"])
316 case "$[1], $PE_ARCHS " in
317 programs/*,*\ arm64ec\ *) AS_VAR_APPEND([arm64ec_DISABLED_SUBDIRS],[" $[1]"]) ;;
322 wine_fn_config_symlink ()
325 AS_VAR_APPEND([wine_rules],["
327 @./config.status \$[@]"])
328 for f in $ac_links; do AS_VAR_APPEND([CONFIGURE_TARGETS],[" $f"]); done
331 dnl **** Define helper function to append a rule to a makefile command list ****
333 dnl Usage: WINE_APPEND_RULE(rule)
335 AC_DEFUN([WINE_APPEND_RULE],[AC_REQUIRE([WINE_CONFIG_HELPERS])AS_VAR_APPEND([wine_rules],["
338 dnl **** Create symlinks from config.status ****
340 dnl Usage: WINE_CONFIG_SYMLINK(target,src,enable)
342 AC_DEFUN([WINE_CONFIG_SYMLINK],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
343 m4_ifval([$3],[if test $3; then
344 ])AC_CONFIG_LINKS([$1:$2])dnl
345 wine_fn_config_symlink[ $1]m4_ifval([$3],[
349 dnl **** Create a makefile from config.status ****
351 dnl Usage: WINE_CONFIG_MAKEFILE(file,enable,condition)
353 AC_DEFUN([WINE_CONFIG_MAKEFILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
354 AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]m4_bpatsubst([$1],[.*/\([^/]*\)$],[\1])))dnl
355 m4_append_uniq([_AC_USER_OPTS],ac_enable,[
357 m4_ifval([$3],[$3 || ])wine_fn_config_makefile [$1] ac_enable[]dnl
358 AS_VAR_POPDEF([ac_enable])])
360 dnl **** Append a file to the .gitignore list ****
362 dnl Usage: WINE_IGNORE_FILE(file,enable)
364 AC_DEFUN([WINE_IGNORE_FILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
365 m4_ifval([$2],[test "x$[$2]" = xno || ])AS_VAR_APPEND([CONFIGURE_TARGETS],[" $1"])])
367 dnl **** Add a message to the list displayed at the end ****
369 dnl Usage: WINE_NOTICE(notice)
370 dnl Usage: WINE_WARNING(warning)
371 dnl Usage: WINE_NOTICE_WITH(with_flag, test, notice, enable)
372 dnl Usage: WINE_WARNING_WITH(with_flag, test, warning, enable)
373 dnl Usage: WINE_ERROR_WITH(with_flag, test, error, enable)
374 dnl Usage: WINE_PRINT_MESSAGES
376 AC_DEFUN([WINE_NOTICE],[AS_VAR_APPEND([wine_notices],["|$1"])])
377 AC_DEFUN([WINE_WARNING],[AS_VAR_APPEND([wine_warnings],["|$1"])])
379 AC_DEFUN([WINE_NOTICE_WITH],[AS_IF([$2],[case "x$with_$1" in
380 x) WINE_NOTICE([$3]) ;;
383 This is an error since --with-$1 was requested.]) ;;
385 m4_ifval([$4],[$4=${$4:-no}])])])
387 AC_DEFUN([WINE_WARNING_WITH],[AS_IF([$2],[case "x$with_$1" in
388 x) WINE_WARNING([$3]) ;;
391 This is an error since --with-$1 was requested.]) ;;
393 m4_ifval([$4],[$4=${$4:-no}])])])
395 AC_DEFUN([WINE_ERROR_WITH],[AS_IF([$2],[case "x$with_$1" in
398 Use the --without-$1 option if you really want this.]) ;;
400 m4_ifval([$4],[$4=${$4:-no}])])])
402 AC_DEFUN([WINE_PRINT_MESSAGES],[ac_save_IFS="$IFS"
403 if test "x$wine_notices" != x; then
406 for msg in $wine_notices; do
408 AS_VAR_IF([msg],[],,[AC_MSG_NOTICE([$msg])])
412 for msg in $wine_warnings; do
414 AS_VAR_IF([msg],[],,[echo >&2
415 AC_MSG_WARN([$msg])])
420 dnl compile-command: "autoreconf --warnings=all"