xinput: Make device hotplugging thread-safe.
[wine.git] / aclocal.m4
blob194b3a9d935af47462624f08728d32040d3e9526
1 dnl Macros used to build the Wine configure script
2 dnl
3 dnl Copyright 2002 Alexandre Julliard
4 dnl
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.
9 dnl
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.
14 dnl
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
18 dnl
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
23 dnl that program.
25 dnl WINE_CHECK_HOST_TOOL(VARIABLE, PROG-TO-CHECK-FOR, [VALUE-IF-NOT-FOUND], [PATH])
26 dnl
27 dnl Like AC_CHECK_TOOL but without the broken fallback to non-prefixed name
28 dnl
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()
39 dnl
40 dnl Same as AC_HEADER_MAJOR but fixed to handle the glibc 2.25 sys/types.h breakage
41 dnl
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>.])])
52 fi])
54 dnl **** Initialize the programs used by other checks ****
55 dnl
56 dnl Usage: WINE_PATH_SONAME_TOOLS
57 dnl Usage: WINE_PATH_PKG_CONFIG
58 dnl
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 ****
68 dnl
69 dnl Usage: WINE_CHECK_SONAME(library, function, [action-if-found, [action-if-not-found, [other_libraries, [pattern]]]])
70 dnl
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])
76 AC_CACHE_VAL(ac_Lib,
77 [ac_check_soname_save_LIBS=$LIBS
78 LIBS="-l$1 $5 $LIBS"
79   AC_LINK_IFELSE([AC_LANG_CALL([], [$2])],
80   [case "$LIBEXT" in
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'`])]) ;;
86   esac],
87   [AS_VAR_SET(ac_Lib,[])])
88   LIBS=$ac_check_soname_save_LIBS])dnl
89 AS_VAR_IF([ac_Lib],[],
90       [AC_MSG_RESULT([not found])
91        $4],
92       [AC_MSG_RESULT(AS_VAR_GET(ac_Lib))
93        AC_DEFINE_UNQUOTED(AS_TR_CPP(SONAME_LIB$1),["]AS_VAR_GET(ac_Lib)["],
94                           [Define to the soname of the lib$1 library.])
95        $3])dnl
96 m4_popdef([ac_lib_pattern])dnl
97 AS_VAR_POPDEF([ac_Lib])])
99 dnl **** Get flags from pkg-config or alternate xxx-config program ****
101 dnl Usage: WINE_PACKAGE_FLAGS(var,pkg-name,[default-lib,[cflags-alternate,libs-alternate,[checks]]])
103 AC_DEFUN([WINE_PACKAGE_FLAGS],
104 [AC_REQUIRE([WINE_PATH_PKG_CONFIG])dnl
105 AS_VAR_PUSHDEF([ac_cflags],[[$1]_CFLAGS])dnl
106 AS_VAR_PUSHDEF([ac_libs],[[$1]_LIBS])dnl
107 AC_ARG_VAR(ac_cflags, [C compiler flags for $2, overriding pkg-config])dnl
108 AS_VAR_IF([ac_cflags],[],
109       [AS_VAR_SET_IF([PKG_CONFIG],
110       [ac_cflags=`$PKG_CONFIG --cflags [$2] 2>/dev/null`])])
111 m4_ifval([$4],[test "$cross_compiling" = yes || ac_cflags=[$]{ac_cflags:-[$4]}])
112 AC_ARG_VAR(ac_libs, [Linker flags for $2, overriding pkg-config])dnl
113 AS_VAR_IF([ac_libs],[],
114       [AS_VAR_SET_IF([PKG_CONFIG],
115       [ac_libs=`$PKG_CONFIG --libs [$2] 2>/dev/null`])])
116 m4_ifval([$5],[test "$cross_compiling" = yes || ac_libs=[$]{ac_libs:-[$5]}])
117 m4_ifval([$3],[ac_libs=[$]{ac_libs:-"$3"}])
118 AS_ECHO(["$as_me:${as_lineno-$LINENO}: $2 cflags: $ac_cflags"]) >&AS_MESSAGE_LOG_FD
119 AS_ECHO(["$as_me:${as_lineno-$LINENO}: $2 libs: $ac_libs"]) >&AS_MESSAGE_LOG_FD
120 ac_save_CPPFLAGS=$CPPFLAGS
121 CPPFLAGS="$CPPFLAGS $ac_cflags"
123 CPPFLAGS=$ac_save_CPPFLAGS
124 test -z "$ac_cflags" || ac_cflags=`echo " $ac_cflags" | sed 's/ -I\([[^/]]\)/ -I\$(top_builddir)\/\1/g'`
125 test -z "$ac_libs" || ac_libs=`echo " $ac_libs" | sed 's/ -L\([[^/]]\)/ -L\$(top_builddir)\/\1/g'`
126 AS_VAR_POPDEF([ac_libs])dnl
127 AS_VAR_POPDEF([ac_cflags])])dnl
129 dnl **** Link C code with an assembly file ****
131 dnl Usage: WINE_TRY_ASM_LINK(asm-code,includes,function,[action-if-found,[action-if-not-found]])
133 AC_DEFUN([WINE_TRY_ASM_LINK],
134 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[$2]],[[asm($1); $3]])],[$4],[$5])])
136 dnl **** Check if we can link an empty program with special CFLAGS ****
138 dnl Usage: WINE_TRY_CFLAGS(flags,[action-if-yes,[action-if-no]])
140 dnl The default action-if-yes is to append the flags to EXTRACFLAGS.
142 AC_DEFUN([WINE_TRY_CFLAGS],
143 [AS_VAR_PUSHDEF([ac_var], ac_cv_cflags_[[$1]])dnl
144 AC_CACHE_CHECK([whether the compiler supports $1], ac_var,
145 [ac_wine_try_cflags_saved=$CFLAGS
146 CFLAGS="$CFLAGS $1"
147 AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(int argc, char **argv) { return 0; }]])],
148                [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
149 CFLAGS=$ac_wine_try_cflags_saved])
150 AS_VAR_IF([ac_var],[yes],[m4_default([$2], [EXTRACFLAGS="$EXTRACFLAGS $1"])], [$3])dnl
151 AS_VAR_POPDEF([ac_var])])
153 dnl **** Check if we can link an empty program with special CFLAGS ****
155 dnl Usage: WINE_TRY_CROSSCFLAGS(flags,[action-if-yes,[action-if-no]])
157 dnl The default action-if-yes is to append the flags to EXTRACROSSCFLAGS.
159 AC_DEFUN([WINE_TRY_CROSSCFLAGS],
160 [AS_VAR_PUSHDEF([ac_var], ac_cv_crosscflags_[[$1]])dnl
161 AC_CACHE_CHECK([whether the cross-compiler supports $1], ac_var,
162 [ac_wine_try_cflags_saved=$CFLAGS
163 ac_wine_try_cflags_saved_cc=$CC
164 ac_wine_try_cflags_saved_exeext=$ac_exeext
165 CFLAGS="$CFLAGS $1"
166 CC="$CROSSCC"
167 ac_exeext=".exe"
168 AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(int argc, char **argv) { return 0; }]])],
169                [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
170 CFLAGS=$ac_wine_try_cflags_saved
171 CC=$ac_wine_try_cflags_saved_cc
172 ac_exeext=$ac_wine_try_cflags_saved_exeext])
173 AS_VAR_IF([ac_var],[yes],[m4_default([$2], [EXTRACROSSCFLAGS="$EXTRACROSSCFLAGS $1"])], [$3])dnl
174 AS_VAR_POPDEF([ac_var])])
176 dnl **** Check if we can link an empty shared lib (no main) with special CFLAGS ****
178 dnl Usage: WINE_TRY_SHLIB_FLAGS(flags,[action-if-yes,[action-if-no]])
180 AC_DEFUN([WINE_TRY_SHLIB_FLAGS],
181 [AS_VAR_PUSHDEF([ac_var], ac_cv_cflags_[[$1]])dnl
182 ac_wine_try_cflags_saved=$CFLAGS
183 CFLAGS="$CFLAGS $1"
184 AC_LINK_IFELSE([AC_LANG_SOURCE([[void myfunc() {}]])],
185                [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
186 CFLAGS=$ac_wine_try_cflags_saved
187 AS_VAR_IF([ac_var],[yes], [$2], [$3])dnl
188 AS_VAR_POPDEF([ac_var])])
190 dnl **** Check whether we need to define a symbol on the compiler command line ****
192 dnl Usage: WINE_CHECK_DEFINE(name),[action-if-yes,[action-if-no]])
194 AC_DEFUN([WINE_CHECK_DEFINE],
195 [AS_VAR_PUSHDEF([ac_var],[ac_cv_cpp_def_$1])dnl
196 AC_CACHE_CHECK([whether we need to define $1],ac_var,
197     AC_EGREP_CPP(yes,[#ifndef $1
199 #endif],
200     [AS_VAR_SET(ac_var,yes)],[AS_VAR_SET(ac_var,no)]))
201 AS_VAR_IF([ac_var],[yes],
202       [CFLAGS="$CFLAGS -D$1"
203   LINTFLAGS="$LINTFLAGS -D$1"])dnl
204 AS_VAR_POPDEF([ac_var])])
206 dnl **** Check for functions with some extra libraries ****
208 dnl Usage: WINE_CHECK_LIB_FUNCS(funcs,libs,[action-if-found,[action-if-not-found]])
210 AC_DEFUN([WINE_CHECK_LIB_FUNCS],
211 [ac_wine_check_funcs_save_LIBS="$LIBS"
212 LIBS="$LIBS $2"
213 AC_CHECK_FUNCS([$1],[$3],[$4])
214 LIBS="$ac_wine_check_funcs_save_LIBS"])
216 dnl **** Check for a mingw program, trying the various mingw prefixes ****
218 dnl Usage: WINE_CHECK_MINGW_PROG(variable,[value-if-not-found],[path])
220 AC_DEFUN([WINE_CHECK_MINGW_PROG],
221 [case "$host_cpu" in
222   aarch64*)
223     ac_prefix_list="aarch64-w64-mingw32-clang aarch64-w64-mingw32-gcc" ;;
224   arm*)
225     ac_prefix_list="armv7-w64-mingw32-clang armv7-w64-mingw32-gcc" ;;
226   i[[3456789]]86*)
227     ac_prefix_list="m4_foreach([ac_wine_prefix],[w64-mingw32, pc-mingw32, mingw32msvc, mingw32],
228                         m4_foreach([ac_wine_cpu],[i686,i586,i486,i386],[ac_wine_cpu-ac_wine_prefix-gcc ]))
229                      m4_foreach([ac_wine_cpu],[i686,i586,i486,i386],[ac_wine_cpu-w64-mingw32-clang ])
230                      mingw32-gcc" ;;
231   x86_64)
232     ac_prefix_list="m4_foreach([ac_wine_prefix],[pc-mingw32, w64-mingw32, mingw32msvc],
233                         m4_foreach([ac_wine_cpu],[x86_64,amd64],[ac_wine_cpu-ac_wine_prefix-gcc ]))
234                     m4_foreach([ac_wine_cpu],[x86_64,amd64],[ac_wine_cpu-w64-mingw32-clang ])" ;;
235   *)
236     ac_prefix_list="" ;;
237 esac
238 AC_CHECK_PROGS([$1],[$ac_prefix_list],[$2],[$3])])
241 dnl **** Define helper functions for creating config.status files ****
243 dnl Usage: AC_REQUIRE([WINE_CONFIG_HELPERS])
245 AC_DEFUN([WINE_CONFIG_HELPERS],
246 [wine_rules_file=conf$$rules.make
247 rm -f $wine_rules_file
248 AC_SUBST(SUBDIRS,"")
249 AC_SUBST(DISABLED_SUBDIRS,"")
250 AC_SUBST(CONFIGURE_TARGETS,"")
252 wine_fn_append_file ()
254     AS_VAR_APPEND($[1]," \\$as_nl       $[2]")
257 wine_fn_append_rule ()
259     AS_ECHO("$[1]") >>$wine_rules_file
262 wine_fn_config_makefile ()
264     wine_fn_append_file SUBDIRS $[1]
265     AS_VAR_IF([$[2]],[no],[wine_fn_append_file DISABLED_SUBDIRS $[1]])
268 wine_fn_config_symlink ()
270     ac_links=$[@]
271     wine_fn_append_rule \
272 "$ac_links:
273         @./config.status \$[@]"
274     for f in $ac_links; do wine_fn_append_file CONFIGURE_TARGETS $f; done
277 dnl **** Define helper function to append a rule to a makefile command list ****
279 dnl Usage: WINE_APPEND_RULE(rule)
281 AC_DEFUN([WINE_APPEND_RULE],[AC_REQUIRE([WINE_CONFIG_HELPERS])wine_fn_append_rule "$1"])
283 dnl **** Create symlinks from config.status ****
285 dnl Usage: WINE_CONFIG_SYMLINK(target,src,files,enable,srcfile)
287 AC_DEFUN([WINE_CONFIG_SYMLINK],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
288 m4_ifval([$4],[if test $4; then
289 ])m4_foreach([f],[$3],
290 [AC_CONFIG_LINKS(m4_ifval([$1],[$1/])f[:]m4_ifval([$2],[$2/])m4_ifval([$5],[$5],f))])dnl
291 m4_if([$1],[$2],[test "$srcdir" = "." || ])dnl
292 wine_fn_config_symlink[]m4_foreach([f],[$3],[ ]m4_ifval([$1],[$1/])f)m4_ifval([$4],[
293 fi])[]dnl
294 ])])
296 dnl **** Create a makefile from config.status ****
298 dnl Usage: WINE_CONFIG_MAKEFILE(file,enable,condition)
300 AC_DEFUN([WINE_CONFIG_MAKEFILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
301 AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]m4_bpatsubst([$1],[.*/\([^/]*\)$],[\1])))dnl
302 m4_append_uniq([_AC_USER_OPTS],ac_enable,[
303 ])dnl
304 m4_ifval([$3],[$3 || ])wine_fn_config_makefile [$1] ac_enable[]dnl
305 AS_VAR_POPDEF([ac_enable])])
307 dnl **** Append a file to the .gitignore list ****
309 dnl Usage: WINE_IGNORE_FILE(file,enable)
311 AC_DEFUN([WINE_IGNORE_FILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
312 m4_ifval([$2],[test "x$[$2]" = xno || ])wine_fn_append_file CONFIGURE_TARGETS $1])
314 dnl **** Add a message to the list displayed at the end ****
316 dnl Usage: WINE_NOTICE(notice)
317 dnl Usage: WINE_WARNING(warning)
318 dnl Usage: WINE_NOTICE_WITH(with_flag, test, notice, enable)
319 dnl Usage: WINE_WARNING_WITH(with_flag, test, warning, enable)
320 dnl Usage: WINE_ERROR_WITH(with_flag, test, error, enable)
321 dnl Usage: WINE_PRINT_MESSAGES
323 AC_DEFUN([WINE_NOTICE],[AS_VAR_APPEND([wine_notices],["|$1"])])
324 AC_DEFUN([WINE_WARNING],[AS_VAR_APPEND([wine_warnings],["|$1"])])
326 AC_DEFUN([WINE_NOTICE_WITH],[AS_IF([$2],[case "x$with_$1" in
327   x)   WINE_NOTICE([$3]) ;;
328   xno) ;;
329   *)   AC_MSG_ERROR([$3
330 This is an error since --with-$1 was requested.]) ;;
331 esac
332 m4_ifval([$4],[$4=${$4:-no}])])])
334 AC_DEFUN([WINE_WARNING_WITH],[AS_IF([$2],[case "x$with_$1" in
335   x)   WINE_WARNING([$3]) ;;
336   xno) ;;
337   *)   AC_MSG_ERROR([$3
338 This is an error since --with-$1 was requested.]) ;;
339 esac
340 m4_ifval([$4],[$4=${$4:-no}])])])
342 AC_DEFUN([WINE_ERROR_WITH],[AS_IF([$2],[case "x$with_$1" in
343   xno) ;;
344   *)   AC_MSG_ERROR([$3
345 Use the --without-$1 option if you really want this.]) ;;
346 esac
347 m4_ifval([$4],[$4=${$4:-no}])])])
349 AC_DEFUN([WINE_PRINT_MESSAGES],[ac_save_IFS="$IFS"
350 if test "x$wine_notices" != x; then
351     echo >&AS_MESSAGE_FD
352     IFS="|"
353     for msg in $wine_notices; do
354         IFS="$ac_save_IFS"
355         AS_VAR_IF([msg],[],,[AC_MSG_NOTICE([$msg])])
356     done
358 IFS="|"
359 for msg in $wine_warnings; do
360     IFS="$ac_save_IFS"
361     AS_VAR_IF([msg],[],,[echo >&2
362         AC_MSG_WARN([$msg])])
363 done
364 IFS="$ac_save_IFS"])
366 dnl Local Variables:
367 dnl compile-command: "autoreconf --warnings=all"
368 dnl End: