ntdll: Translate signal to trap when trap code is 0 on ARM.
[wine.git] / aclocal.m4
bloba812648f210284b066422939d1c284d2675933d3
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   LIBS=$ac_check_soname_save_LIBS])dnl
88 AS_VAR_IF([ac_Lib],[],
89       [AC_MSG_RESULT([not found])
90        $4],
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.])
94        $3])dnl
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 ****
99 dnl
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
145 CFLAGS="$CFLAGS $1"
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_crosscflags_[[$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
164 CFLAGS="$CFLAGS $1"
165 CC="$CROSSCC"
166 ac_exeext=".exe"
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
181 CFLAGS="$CFLAGS $1"
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
194 #endif],
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"
207 LIBS="$LIBS $2"
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],
216 [case "$host_cpu" in
217   aarch64*)
218     ac_prefix_list="aarch64-w64-mingw32-clang aarch64-w64-mingw32-gcc" ;;
219   arm*)
220     ac_prefix_list="armv7-w64-mingw32-clang armv7-w64-mingw32-gcc" ;;
221   i[[3456789]]86*)
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 ])
225                      mingw32-gcc" ;;
226   x86_64)
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 ])" ;;
230   *)
231     ac_prefix_list="" ;;
232 esac
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
243 AC_SUBST(SUBDIRS,"")
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 ()
265     ac_links=$[@]
266     wine_fn_append_rule \
267 "$ac_links:
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],[
288 fi])[]dnl
289 ])])
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,[
298 ])dnl
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]) ;;
323   xno) ;;
324   *)   AC_MSG_ERROR([$3
325 This is an error since --with-$1 was requested.]) ;;
326 esac
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]) ;;
331   xno) ;;
332   *)   AC_MSG_ERROR([$3
333 This is an error since --with-$1 was requested.]) ;;
334 esac
335 m4_ifval([$4],[$4=${$4:-no}])])])
337 AC_DEFUN([WINE_ERROR_WITH],[AS_IF([$2],[case "x$with_$1" in
338   xno) ;;
339   *)   AC_MSG_ERROR([$3
340 Use the --without-$1 option if you really want this.]) ;;
341 esac
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
346     echo >&AS_MESSAGE_FD
347     IFS="|"
348     for msg in $wine_notices; do
349         IFS="$ac_save_IFS"
350         AS_VAR_IF([msg],[],,[AC_MSG_NOTICE([$msg])])
351     done
353 IFS="|"
354 for msg in $wine_warnings; do
355     IFS="$ac_save_IFS"
356     AS_VAR_IF([msg],[],,[echo >&2
357         AC_MSG_WARN([$msg])])
358 done
359 IFS="$ac_save_IFS"])
361 dnl Local Variables:
362 dnl compile-command: "autoreconf --warnings=all"
363 dnl End: