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 dnl **** Extract the soname of a library ****
69 dnl Usage: WINE_CHECK_SONAME(library, function, [action-if-found, [action-if-not-found, [other_libraries, [pattern]]]])
71 AC_DEFUN([WINE_CHECK_SONAME],
72 [AC_REQUIRE([WINE_PATH_SONAME_TOOLS])dnl
73 AS_VAR_PUSHDEF([ac_Lib],[ac_cv_lib_soname_$1])dnl
74 m4_pushdef([ac_lib_pattern],m4_default([$6],[lib$1]))dnl
75 AC_MSG_CHECKING([for -l$1])
77 [ac_check_soname_save_LIBS=$LIBS
79 AC_LINK_IFELSE([AC_LANG_CALL([], [$2])],
81 dll) AS_VAR_SET(ac_Lib,[`$ac_cv_path_LDD conftest.exe | grep "$1" | sed -e "s/dll.*/dll/"';2,$d'`]) ;;
82 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'`]) ;;
83 *) 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'`])
84 AS_VAR_IF([ac_Lib],[],
85 [AS_VAR_SET(ac_Lib,[`$LDD conftest$ac_exeext | grep "ac_lib_pattern\\.$LIBEXT" | sed -e "s/^.*\(ac_lib_pattern\.$LIBEXT[[^ ]]*\).*$/\1/"';2,$d'`])]) ;;
87 LIBS=$ac_check_soname_save_LIBS])dnl
88 AS_VAR_IF([ac_Lib],[],
89 [AC_MSG_RESULT([not found])
91 [AC_MSG_RESULT(AS_VAR_GET(ac_Lib))
92 AC_DEFINE_UNQUOTED(AS_TR_CPP(SONAME_LIB$1),["]AS_VAR_GET(ac_Lib)["],
93 [Define to the soname of the lib$1 library.])
95 m4_popdef([ac_lib_pattern])dnl
96 AS_VAR_POPDEF([ac_Lib])])
98 dnl **** Get flags from pkg-config or alternate xxx-config program ****
100 dnl Usage: WINE_PACKAGE_FLAGS(var,pkg-name,[default-lib,[cflags-alternate,libs-alternate,[checks]]])
102 AC_DEFUN([WINE_PACKAGE_FLAGS],
103 [AC_REQUIRE([WINE_PATH_PKG_CONFIG])dnl
104 AS_VAR_PUSHDEF([ac_cflags],[[$1]_CFLAGS])dnl
105 AS_VAR_PUSHDEF([ac_libs],[[$1]_LIBS])dnl
106 AC_ARG_VAR(ac_cflags, [C compiler flags for $2, overriding pkg-config])dnl
107 AS_VAR_IF([ac_cflags],[],
108 [AS_VAR_SET_IF([PKG_CONFIG],
109 [ac_cflags=`$PKG_CONFIG --cflags [$2] 2>/dev/null`])])
110 m4_ifval([$4],[test "$cross_compiling" = yes || ac_cflags=[$]{ac_cflags:-[$4]}])
111 AC_ARG_VAR(ac_libs, [Linker flags for $2, overriding pkg-config])dnl
112 AS_VAR_IF([ac_libs],[],
113 [AS_VAR_SET_IF([PKG_CONFIG],
114 [ac_libs=`$PKG_CONFIG --libs [$2] 2>/dev/null`])])
115 m4_ifval([$5],[test "$cross_compiling" = yes || ac_libs=[$]{ac_libs:-[$5]}])
116 m4_ifval([$3],[ac_libs=[$]{ac_libs:-"$3"}])
117 AS_ECHO(["$as_me:${as_lineno-$LINENO}: $2 cflags: $ac_cflags"]) >&AS_MESSAGE_LOG_FD
118 AS_ECHO(["$as_me:${as_lineno-$LINENO}: $2 libs: $ac_libs"]) >&AS_MESSAGE_LOG_FD
119 ac_save_CPPFLAGS=$CPPFLAGS
120 CPPFLAGS="$CPPFLAGS $ac_cflags"
122 CPPFLAGS=$ac_save_CPPFLAGS
123 test -z "$ac_cflags" || ac_cflags=`echo " $ac_cflags" | sed 's/ -I\([[^/]]\)/ -I\$(top_builddir)\/\1/g'`
124 test -z "$ac_libs" || ac_libs=`echo " $ac_libs" | sed 's/ -L\([[^/]]\)/ -L\$(top_builddir)\/\1/g'`
125 AS_VAR_POPDEF([ac_libs])dnl
126 AS_VAR_POPDEF([ac_cflags])])dnl
128 dnl **** Link C code with an assembly file ****
130 dnl Usage: WINE_TRY_ASM_LINK(asm-code,includes,function,[action-if-found,[action-if-not-found]])
132 AC_DEFUN([WINE_TRY_ASM_LINK],
133 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[$2]],[[asm($1); $3]])],[$4],[$5])])
135 dnl **** Check if we can link an empty program with special CFLAGS ****
137 dnl Usage: WINE_TRY_CFLAGS(flags,[action-if-yes,[action-if-no]])
139 dnl The default action-if-yes is to append the flags to EXTRACFLAGS.
141 AC_DEFUN([WINE_TRY_CFLAGS],
142 [AS_VAR_PUSHDEF([ac_var], ac_cv_cflags_[[$1]])dnl
143 AC_CACHE_CHECK([whether the compiler supports $1], ac_var,
144 [ac_wine_try_cflags_saved=$CFLAGS
146 AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(int argc, char **argv) { return 0; }]])],
147 [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
148 CFLAGS=$ac_wine_try_cflags_saved])
149 AS_VAR_IF([ac_var],[yes],[m4_default([$2], [EXTRACFLAGS="$EXTRACFLAGS $1"])], [$3])dnl
150 AS_VAR_POPDEF([ac_var])])
152 dnl **** Check if we can link an empty program with special CFLAGS ****
154 dnl Usage: WINE_TRY_CROSSCFLAGS(flags,[action-if-yes,[action-if-no]])
156 dnl The default action-if-yes is to append the flags to EXTRACROSSCFLAGS.
158 AC_DEFUN([WINE_TRY_CROSSCFLAGS],
159 [AS_VAR_PUSHDEF([ac_var], ac_cv_cflags_[[$1]])dnl
160 AC_CACHE_CHECK([whether the cross-compiler supports $1], ac_var,
161 [ac_wine_try_cflags_saved=$CFLAGS
162 ac_wine_try_cflags_saved_cc=$CC
163 ac_wine_try_cflags_saved_exeext=$ac_exeext
167 AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(int argc, char **argv) { return 0; }]])],
168 [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
169 CFLAGS=$ac_wine_try_cflags_saved
170 CC=$ac_wine_try_cflags_saved_cc
171 ac_exeext=$ac_wine_try_cflags_saved_exeext])
172 AS_VAR_IF([ac_var],[yes],[m4_default([$2], [EXTRACROSSCFLAGS="$EXTRACROSSCFLAGS $1"])], [$3])dnl
173 AS_VAR_POPDEF([ac_var])])
175 dnl **** Check if we can link an empty shared lib (no main) with special CFLAGS ****
177 dnl Usage: WINE_TRY_SHLIB_FLAGS(flags,[action-if-yes,[action-if-no]])
179 AC_DEFUN([WINE_TRY_SHLIB_FLAGS],
180 [ac_wine_try_cflags_saved=$CFLAGS
182 AC_LINK_IFELSE([AC_LANG_SOURCE([void myfunc() {}])],[$2],[$3])
183 CFLAGS=$ac_wine_try_cflags_saved])
185 dnl **** Check whether we need to define a symbol on the compiler command line ****
187 dnl Usage: WINE_CHECK_DEFINE(name),[action-if-yes,[action-if-no]])
189 AC_DEFUN([WINE_CHECK_DEFINE],
190 [AS_VAR_PUSHDEF([ac_var],[ac_cv_cpp_def_$1])dnl
191 AC_CACHE_CHECK([whether we need to define $1],ac_var,
192 AC_EGREP_CPP(yes,[#ifndef $1
195 [AS_VAR_SET(ac_var,yes)],[AS_VAR_SET(ac_var,no)]))
196 AS_VAR_IF([ac_var],[yes],
197 [CFLAGS="$CFLAGS -D$1"
198 LINTFLAGS="$LINTFLAGS -D$1"])dnl
199 AS_VAR_POPDEF([ac_var])])
201 dnl **** Check for functions with some extra libraries ****
203 dnl Usage: WINE_CHECK_LIB_FUNCS(funcs,libs,[action-if-found,[action-if-not-found]])
205 AC_DEFUN([WINE_CHECK_LIB_FUNCS],
206 [ac_wine_check_funcs_save_LIBS="$LIBS"
208 AC_CHECK_FUNCS([$1],[$3],[$4])
209 LIBS="$ac_wine_check_funcs_save_LIBS"])
211 dnl **** Check for a mingw program, trying the various mingw prefixes ****
213 dnl Usage: WINE_CHECK_MINGW_PROG(variable,[value-if-not-found],[path])
215 AC_DEFUN([WINE_CHECK_MINGW_PROG],
218 ac_prefix_list="aarch64-w64-mingw32-clang aarch64-w64-mingw32-gcc" ;;
220 ac_prefix_list="armv7-w64-mingw32-clang armv7-w64-mingw32-gcc" ;;
222 ac_prefix_list="m4_foreach([ac_wine_prefix],[w64-mingw32, pc-mingw32, mingw32msvc, mingw32],
223 m4_foreach([ac_wine_cpu],[i686,i586,i486,i386],[ac_wine_cpu-ac_wine_prefix-gcc ]))
224 m4_foreach([ac_wine_cpu],[i686,i586,i486,i386],[ac_wine_cpu-w64-mingw32-clang ])
227 ac_prefix_list="m4_foreach([ac_wine_prefix],[pc-mingw32, w64-mingw32, mingw32msvc],
228 m4_foreach([ac_wine_cpu],[x86_64,amd64],[ac_wine_cpu-ac_wine_prefix-gcc ]))
229 m4_foreach([ac_wine_cpu],[x86_64,amd64],[ac_wine_cpu-w64-mingw32-clang ])" ;;
233 AC_CHECK_PROGS([$1],[$ac_prefix_list],[$2],[$3])])
236 dnl **** Define helper functions for creating config.status files ****
238 dnl Usage: AC_REQUIRE([WINE_CONFIG_HELPERS])
240 AC_DEFUN([WINE_CONFIG_HELPERS],
241 [wine_rules_file=conf$$rules.make
242 rm -f $wine_rules_file
244 AC_SUBST(DISABLED_SUBDIRS,"")
245 AC_SUBST(CONFIGURE_TARGETS,"")
247 wine_fn_append_file ()
249 AS_VAR_APPEND($[1]," \\$as_nl $[2]")
252 wine_fn_append_rule ()
254 AS_ECHO("$[1]") >>$wine_rules_file
257 wine_fn_config_makefile ()
259 wine_fn_append_file SUBDIRS $[1]
260 AS_VAR_IF([$[2]],[no],[wine_fn_append_file DISABLED_SUBDIRS $[1]])
263 wine_fn_config_symlink ()
266 wine_fn_append_rule \
268 @./config.status \$[@]"
269 for f in $ac_links; do wine_fn_append_file CONFIGURE_TARGETS $f; done
272 dnl **** Define helper function to append a rule to a makefile command list ****
274 dnl Usage: WINE_APPEND_RULE(rule)
276 AC_DEFUN([WINE_APPEND_RULE],[AC_REQUIRE([WINE_CONFIG_HELPERS])wine_fn_append_rule "$1"])
278 dnl **** Create symlinks from config.status ****
280 dnl Usage: WINE_CONFIG_SYMLINK(target,src,files,enable,srcfile)
282 AC_DEFUN([WINE_CONFIG_SYMLINK],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
283 m4_ifval([$4],[if test $4; then
284 ])m4_foreach([f],[$3],
285 [AC_CONFIG_LINKS(m4_ifval([$1],[$1/])f[:]m4_ifval([$2],[$2/])m4_ifval([$5],[$5],f))])dnl
286 m4_if([$1],[$2],[test "$srcdir" = "." || ])dnl
287 wine_fn_config_symlink[]m4_foreach([f],[$3],[ ]m4_ifval([$1],[$1/])f)m4_ifval([$4],[
291 dnl **** Create a makefile from config.status ****
293 dnl Usage: WINE_CONFIG_MAKEFILE(file,enable,condition)
295 AC_DEFUN([WINE_CONFIG_MAKEFILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
296 AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]m4_bpatsubst([$1],[.*/\([^/]*\)$],[\1])))dnl
297 m4_append_uniq([_AC_USER_OPTS],ac_enable,[
299 m4_ifval([$3],[$3 || ])wine_fn_config_makefile [$1] ac_enable[]dnl
300 AS_VAR_POPDEF([ac_enable])])
302 dnl **** Append a file to the .gitignore list ****
304 dnl Usage: WINE_IGNORE_FILE(file,enable)
306 AC_DEFUN([WINE_IGNORE_FILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
307 m4_ifval([$2],[test "x$[$2]" = xno || ])wine_fn_append_file CONFIGURE_TARGETS $1])
309 dnl **** Add a message to the list displayed at the end ****
311 dnl Usage: WINE_NOTICE(notice)
312 dnl Usage: WINE_WARNING(warning)
313 dnl Usage: WINE_NOTICE_WITH(with_flag, test, notice, enable)
314 dnl Usage: WINE_WARNING_WITH(with_flag, test, warning, enable)
315 dnl Usage: WINE_ERROR_WITH(with_flag, test, error, enable)
316 dnl Usage: WINE_PRINT_MESSAGES
318 AC_DEFUN([WINE_NOTICE],[AS_VAR_APPEND([wine_notices],["|$1"])])
319 AC_DEFUN([WINE_WARNING],[AS_VAR_APPEND([wine_warnings],["|$1"])])
321 AC_DEFUN([WINE_NOTICE_WITH],[AS_IF([$2],[case "x$with_$1" in
322 x) WINE_NOTICE([$3]) ;;
325 This is an error since --with-$1 was requested.]) ;;
327 m4_ifval([$4],[$4=${$4:-no}])])])
329 AC_DEFUN([WINE_WARNING_WITH],[AS_IF([$2],[case "x$with_$1" in
330 x) WINE_WARNING([$3]) ;;
333 This is an error since --with-$1 was requested.]) ;;
335 m4_ifval([$4],[$4=${$4:-no}])])])
337 AC_DEFUN([WINE_ERROR_WITH],[AS_IF([$2],[case "x$with_$1" in
340 Use the --without-$1 option if you really want this.]) ;;
342 m4_ifval([$4],[$4=${$4:-no}])])])
344 AC_DEFUN([WINE_PRINT_MESSAGES],[ac_save_IFS="$IFS"
345 if test "x$wine_notices" != x; then
348 for msg in $wine_notices; do
350 AS_VAR_IF([msg],[],,[AC_MSG_NOTICE([$msg])])
354 for msg in $wine_warnings; do
356 AS_VAR_IF([msg],[],,[echo >&2
357 AC_MSG_WARN([$msg])])
362 dnl compile-command: "autoreconf --warnings=all"