msvcrt: Import _logb implementation from musl.
[wine.git] / aclocal.m4
blob52b7efc5a03dcbf8746fff391721e1af56abdc8a
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 AS_VAR_POPDEF([ac_libs])dnl
125 AS_VAR_POPDEF([ac_cflags])])dnl
127 dnl **** Link C code with an assembly file ****
129 dnl Usage: WINE_TRY_ASM_LINK(asm-code,includes,function,[action-if-found,[action-if-not-found]])
131 AC_DEFUN([WINE_TRY_ASM_LINK],
132 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[$2]],[[asm($1); $3]])],[$4],[$5])])
134 dnl **** Check if we can link an empty program with special CFLAGS ****
136 dnl Usage: WINE_TRY_CFLAGS(flags,[action-if-yes,[action-if-no]])
138 dnl The default action-if-yes is to append the flags to EXTRACFLAGS.
140 AC_DEFUN([WINE_TRY_CFLAGS],
141 [AS_VAR_PUSHDEF([ac_var], ac_cv_cflags_[[$1]])dnl
142 AC_CACHE_CHECK([whether the compiler supports $1], ac_var,
143 [ac_wine_try_cflags_saved=$CFLAGS
144 CFLAGS="$CFLAGS $1"
145 AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(int argc, char **argv) { return 0; }]])],
146                [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
147 CFLAGS=$ac_wine_try_cflags_saved])
148 AS_VAR_IF([ac_var],[yes],[m4_default([$2], [EXTRACFLAGS="$EXTRACFLAGS $1"])], [$3])dnl
149 AS_VAR_POPDEF([ac_var])])
151 dnl **** Check if we can link an empty program with special CFLAGS ****
153 dnl Usage: WINE_TRY_CROSSCFLAGS(flags,[action-if-yes,[action-if-no]])
155 dnl The default action-if-yes is to append the flags to EXTRACROSSCFLAGS.
157 AC_DEFUN([WINE_TRY_CROSSCFLAGS],
158 [AS_VAR_PUSHDEF([ac_var], ac_cv_crosscflags_[[$1]])dnl
159 AC_CACHE_CHECK([whether the cross-compiler supports $1], ac_var,
160 [ac_wine_try_cflags_saved=$CFLAGS
161 ac_wine_try_cflags_saved_cc=$CC
162 ac_wine_try_cflags_saved_exeext=$ac_exeext
163 CFLAGS="$CFLAGS $EXTRACROSSCFLAGS -nostartfiles -nodefaultlibs $1"
164 CC="$CROSSCC"
165 ac_exeext=".exe"
166 AC_LINK_IFELSE([AC_LANG_SOURCE([[int __cdecl mainCRTStartup(void) { return 0; }]])],
167                [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
168 CFLAGS=$ac_wine_try_cflags_saved
169 CC=$ac_wine_try_cflags_saved_cc
170 ac_exeext=$ac_wine_try_cflags_saved_exeext])
171 AS_VAR_IF([ac_var],[yes],[m4_default([$2], [EXTRACROSSCFLAGS="$EXTRACROSSCFLAGS $1"])], [$3])dnl
172 AS_VAR_POPDEF([ac_var])])
174 dnl **** Check if we can link an empty shared lib (no main) with special CFLAGS ****
176 dnl Usage: WINE_TRY_SHLIB_FLAGS(flags,[action-if-yes,[action-if-no]])
178 AC_DEFUN([WINE_TRY_SHLIB_FLAGS],
179 [AS_VAR_PUSHDEF([ac_var], ac_cv_cflags_[[$1]])dnl
180 ac_wine_try_cflags_saved=$CFLAGS
181 CFLAGS="$CFLAGS $1"
182 AC_LINK_IFELSE([AC_LANG_SOURCE([[void myfunc() {}]])],
183                [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
184 CFLAGS=$ac_wine_try_cflags_saved
185 AS_VAR_IF([ac_var],[yes], [$2], [$3])dnl
186 AS_VAR_POPDEF([ac_var])])
188 dnl **** Check whether we need to define a symbol on the compiler command line ****
190 dnl Usage: WINE_CHECK_DEFINE(name),[action-if-yes,[action-if-no]])
192 AC_DEFUN([WINE_CHECK_DEFINE],
193 [AS_VAR_PUSHDEF([ac_var],[ac_cv_cpp_def_$1])dnl
194 AC_CACHE_CHECK([whether we need to define $1],ac_var,
195     AC_EGREP_CPP(yes,[#ifndef $1
197 #endif],
198     [AS_VAR_SET(ac_var,yes)],[AS_VAR_SET(ac_var,no)]))
199 AS_VAR_IF([ac_var],[yes],
200       [CFLAGS="$CFLAGS -D$1"
201   LINTFLAGS="$LINTFLAGS -D$1"])dnl
202 AS_VAR_POPDEF([ac_var])])
204 dnl **** Check for functions with some extra libraries ****
206 dnl Usage: WINE_CHECK_LIB_FUNCS(funcs,libs,[action-if-found,[action-if-not-found]])
208 AC_DEFUN([WINE_CHECK_LIB_FUNCS],
209 [ac_wine_check_funcs_save_LIBS="$LIBS"
210 LIBS="$LIBS $2"
211 AC_CHECK_FUNCS([$1],[$3],[$4])
212 LIBS="$ac_wine_check_funcs_save_LIBS"])
214 dnl **** Check for a mingw program, trying the various mingw prefixes ****
216 dnl Usage: WINE_CHECK_MINGW_PROG(variable,[value-if-not-found],[path])
218 AC_DEFUN([WINE_CHECK_MINGW_PROG],
219 [case "$host_cpu" in
220   aarch64*)
221     ac_prefix_list="aarch64-w64-mingw32-clang aarch64-w64-mingw32-gcc clang" ;;
222   arm*)
223     ac_prefix_list="armv7-w64-mingw32-clang armv7-w64-mingw32-gcc clang" ;;
224   i[[3456789]]86*)
225     ac_prefix_list="m4_foreach([ac_wine_prefix],[w64-mingw32, pc-mingw32, mingw32msvc, mingw32],
226                         m4_foreach([ac_wine_cpu],[i686,i586,i486,i386],[ac_wine_cpu-ac_wine_prefix-gcc ]))
227                      m4_foreach([ac_wine_cpu],[i686,i586,i486,i386],[ac_wine_cpu-w64-mingw32-clang ])
228                      mingw32-gcc clang" ;;
229   x86_64)
230     ac_prefix_list="m4_foreach([ac_wine_prefix],[pc-mingw32, w64-mingw32, mingw32msvc],
231                         m4_foreach([ac_wine_cpu],[x86_64,amd64],[ac_wine_cpu-ac_wine_prefix-gcc ]))
232                     m4_foreach([ac_wine_cpu],[x86_64,amd64],[ac_wine_cpu-w64-mingw32-clang ]) clang" ;;
233   *)
234     ac_prefix_list="" ;;
235 esac
236 AC_CHECK_PROGS([$1],[$ac_prefix_list],[$2],[$3])])
239 dnl **** Define helper functions for creating config.status files ****
241 dnl Usage: AC_REQUIRE([WINE_CONFIG_HELPERS])
243 AC_DEFUN([WINE_CONFIG_HELPERS],
244 [wine_rules_file=conf$$rules.make
245 rm -f $wine_rules_file
246 AC_SUBST(SUBDIRS,"")
247 AC_SUBST(DISABLED_SUBDIRS,"")
248 AC_SUBST(CONFIGURE_TARGETS,"")
250 wine_fn_append_file ()
252     AS_VAR_APPEND($[1]," \\$as_nl       $[2]")
255 wine_fn_append_rule ()
257     AS_ECHO("$[1]") >>$wine_rules_file
260 wine_fn_config_makefile ()
262     wine_fn_append_file SUBDIRS $[1]
263     AS_VAR_IF([$[2]],[no],[wine_fn_append_file DISABLED_SUBDIRS $[1]])
266 wine_fn_config_symlink ()
268     ac_links=$[@]
269     wine_fn_append_rule \
270 "$ac_links:
271         @./config.status \$[@]"
272     for f in $ac_links; do wine_fn_append_file CONFIGURE_TARGETS $f; done
275 dnl **** Define helper function to append a rule to a makefile command list ****
277 dnl Usage: WINE_APPEND_RULE(rule)
279 AC_DEFUN([WINE_APPEND_RULE],[AC_REQUIRE([WINE_CONFIG_HELPERS])wine_fn_append_rule "$1"])
281 dnl **** Create symlinks from config.status ****
283 dnl Usage: WINE_CONFIG_SYMLINK(target,src,enable)
285 AC_DEFUN([WINE_CONFIG_SYMLINK],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
286 m4_ifval([$3],[if test $3; then
287 ])AC_CONFIG_LINKS([$1:$2])dnl
288 wine_fn_config_symlink[ $1]m4_ifval([$3],[
289 fi])[]dnl
290 ])])
292 dnl **** Create a makefile from config.status ****
294 dnl Usage: WINE_CONFIG_MAKEFILE(file,enable,condition)
296 AC_DEFUN([WINE_CONFIG_MAKEFILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
297 AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]m4_bpatsubst([$1],[.*/\([^/]*\)$],[\1])))dnl
298 m4_append_uniq([_AC_USER_OPTS],ac_enable,[
299 ])dnl
300 m4_ifval([$3],[$3 || ])wine_fn_config_makefile [$1] ac_enable[]dnl
301 AS_VAR_POPDEF([ac_enable])])
303 dnl **** Append a file to the .gitignore list ****
305 dnl Usage: WINE_IGNORE_FILE(file,enable)
307 AC_DEFUN([WINE_IGNORE_FILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
308 m4_ifval([$2],[test "x$[$2]" = xno || ])wine_fn_append_file CONFIGURE_TARGETS $1])
310 dnl **** Add a message to the list displayed at the end ****
312 dnl Usage: WINE_NOTICE(notice)
313 dnl Usage: WINE_WARNING(warning)
314 dnl Usage: WINE_NOTICE_WITH(with_flag, test, notice, enable)
315 dnl Usage: WINE_WARNING_WITH(with_flag, test, warning, enable)
316 dnl Usage: WINE_ERROR_WITH(with_flag, test, error, enable)
317 dnl Usage: WINE_PRINT_MESSAGES
319 AC_DEFUN([WINE_NOTICE],[AS_VAR_APPEND([wine_notices],["|$1"])])
320 AC_DEFUN([WINE_WARNING],[AS_VAR_APPEND([wine_warnings],["|$1"])])
322 AC_DEFUN([WINE_NOTICE_WITH],[AS_IF([$2],[case "x$with_$1" in
323   x)   WINE_NOTICE([$3]) ;;
324   xno) ;;
325   *)   AC_MSG_ERROR([$3
326 This is an error since --with-$1 was requested.]) ;;
327 esac
328 m4_ifval([$4],[$4=${$4:-no}])])])
330 AC_DEFUN([WINE_WARNING_WITH],[AS_IF([$2],[case "x$with_$1" in
331   x)   WINE_WARNING([$3]) ;;
332   xno) ;;
333   *)   AC_MSG_ERROR([$3
334 This is an error since --with-$1 was requested.]) ;;
335 esac
336 m4_ifval([$4],[$4=${$4:-no}])])])
338 AC_DEFUN([WINE_ERROR_WITH],[AS_IF([$2],[case "x$with_$1" in
339   xno) ;;
340   *)   AC_MSG_ERROR([$3
341 Use the --without-$1 option if you really want this.]) ;;
342 esac
343 m4_ifval([$4],[$4=${$4:-no}])])])
345 AC_DEFUN([WINE_PRINT_MESSAGES],[ac_save_IFS="$IFS"
346 if test "x$wine_notices" != x; then
347     echo >&AS_MESSAGE_FD
348     IFS="|"
349     for msg in $wine_notices; do
350         IFS="$ac_save_IFS"
351         AS_VAR_IF([msg],[],,[AC_MSG_NOTICE([$msg])])
352     done
354 IFS="|"
355 for msg in $wine_warnings; do
356     IFS="$ac_save_IFS"
357     AS_VAR_IF([msg],[],,[echo >&2
358         AC_MSG_WARN([$msg])])
359 done
360 IFS="$ac_save_IFS"])
362 dnl Local Variables:
363 dnl compile-command: "autoreconf --warnings=all"
364 dnl End: