ntdll/tests: Add tests for NtCompareObjects.
[wine.git] / aclocal.m4
bloba261105d44deb0baadcec87090f67ec0136c10b7
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 **** Get flags for an external lib program ****
129 dnl Usage: WINE_EXTLIB_FLAGS(var,pkg-name,default-libs,default-cflags)
131 AC_DEFUN([WINE_EXTLIB_FLAGS],
132 [AS_VAR_PUSHDEF([ac_cflags],[[$1]_PE_CFLAGS])dnl
133 AS_VAR_PUSHDEF([ac_libs],[[$1]_PE_LIBS])dnl
134 AC_ARG_VAR(ac_cflags, [C compiler flags for the PE $2, overriding the bundled version])dnl
135 AC_ARG_VAR(ac_libs, [Linker flags for the PE $2, overriding the bundled version])dnl
136 AS_VAR_IF([ac_cflags],[],[ac_cflags=$4],[enable_$2=no])
137 AS_VAR_IF([ac_libs],[],[ac_libs=$3],[enable_$2=no])
138 AS_ECHO(["$as_me:${as_lineno-$LINENO}: $2 cflags: $ac_cflags"]) >&AS_MESSAGE_LOG_FD
139 AS_ECHO(["$as_me:${as_lineno-$LINENO}: $2 libs: $ac_libs"]) >&AS_MESSAGE_LOG_FD
140 AS_VAR_POPDEF([ac_libs])dnl
141 AS_VAR_POPDEF([ac_cflags])])dnl
143 dnl **** Link C code with an assembly file ****
145 dnl Usage: WINE_TRY_ASM_LINK(asm-code,includes,function,[action-if-found,[action-if-not-found]])
147 AC_DEFUN([WINE_TRY_ASM_LINK],
148 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[$2]],[[asm($1); $3]])],[$4],[$5])])
150 dnl **** Check if we can link an empty program with special CFLAGS ****
152 dnl Usage: WINE_TRY_CFLAGS(flags,[action-if-yes,[action-if-no]])
154 dnl The default action-if-yes is to append the flags to EXTRACFLAGS.
156 AC_DEFUN([WINE_TRY_CFLAGS],
157 [AS_VAR_PUSHDEF([ac_var], ac_cv_cflags_[[$1]])dnl
158 AC_CACHE_CHECK([whether the compiler supports $1], ac_var,
159 [ac_wine_try_cflags_saved=$CFLAGS
160 CFLAGS="$CFLAGS $1"
161 AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(int argc, char **argv) { return 0; }]])],
162                [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
163 CFLAGS=$ac_wine_try_cflags_saved])
164 AS_VAR_IF([ac_var],[yes],[m4_default([$2], [EXTRACFLAGS="$EXTRACFLAGS $1"])], [$3])dnl
165 AS_VAR_POPDEF([ac_var])])
167 dnl **** Check if we can link an empty program with special CFLAGS ****
169 dnl Usage: WINE_TRY_CROSSCFLAGS(flags,[action-if-yes,[action-if-no]])
171 dnl The default action-if-yes is to append the flags to EXTRACROSSCFLAGS.
173 AC_DEFUN([WINE_TRY_CROSSCFLAGS],
174 [AS_VAR_PUSHDEF([ac_var], ac_cv_crosscflags_[[$1]])dnl
175 AC_CACHE_CHECK([whether the cross-compiler supports $1], ac_var,
176 [ac_wine_try_cflags_saved=$CFLAGS
177 ac_wine_try_cflags_saved_cc=$CC
178 ac_wine_try_cflags_saved_exeext=$ac_exeext
179 CFLAGS="$CFLAGS $EXTRACROSSCFLAGS -nostartfiles -nodefaultlibs $1"
180 CC="$CROSSCC"
181 ac_exeext=".exe"
182 AC_LINK_IFELSE([AC_LANG_SOURCE([[int __cdecl mainCRTStartup(void) { return 0; }]])],
183                [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
184 CFLAGS=$ac_wine_try_cflags_saved
185 CC=$ac_wine_try_cflags_saved_cc
186 ac_exeext=$ac_wine_try_cflags_saved_exeext])
187 AS_VAR_IF([ac_var],[yes],[m4_default([$2], [EXTRACROSSCFLAGS="$EXTRACROSSCFLAGS $1"])], [$3])dnl
188 AS_VAR_POPDEF([ac_var])])
190 dnl **** Check if we can link an empty shared lib (no main) with special CFLAGS ****
192 dnl Usage: WINE_TRY_SHLIB_FLAGS(flags,[action-if-yes,[action-if-no]])
194 AC_DEFUN([WINE_TRY_SHLIB_FLAGS],
195 [AS_VAR_PUSHDEF([ac_var], ac_cv_cflags_[[$1]])dnl
196 ac_wine_try_cflags_saved=$CFLAGS
197 CFLAGS="$CFLAGS $1"
198 AC_LINK_IFELSE([AC_LANG_SOURCE([[void myfunc() {}]])],
199                [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
200 CFLAGS=$ac_wine_try_cflags_saved
201 AS_VAR_IF([ac_var],[yes], [$2], [$3])dnl
202 AS_VAR_POPDEF([ac_var])])
204 dnl **** Check whether we need to define a symbol on the compiler command line ****
206 dnl Usage: WINE_CHECK_DEFINE(name),[action-if-yes,[action-if-no]])
208 AC_DEFUN([WINE_CHECK_DEFINE],
209 [AS_VAR_PUSHDEF([ac_var],[ac_cv_cpp_def_$1])dnl
210 AC_CACHE_CHECK([whether we need to define $1],ac_var,
211     AC_EGREP_CPP(yes,[#ifndef $1
213 #endif],
214     [AS_VAR_SET(ac_var,yes)],[AS_VAR_SET(ac_var,no)]))
215 AS_VAR_IF([ac_var],[yes],
216       [CFLAGS="$CFLAGS -D$1"
217   LINTFLAGS="$LINTFLAGS -D$1"])dnl
218 AS_VAR_POPDEF([ac_var])])
220 dnl **** Check for functions with some extra libraries ****
222 dnl Usage: WINE_CHECK_LIB_FUNCS(funcs,libs,[action-if-found,[action-if-not-found]])
224 AC_DEFUN([WINE_CHECK_LIB_FUNCS],
225 [ac_wine_check_funcs_save_LIBS="$LIBS"
226 LIBS="$LIBS $2"
227 AC_CHECK_FUNCS([$1],[$3],[$4])
228 LIBS="$ac_wine_check_funcs_save_LIBS"])
230 dnl **** Check for a mingw program, trying the various mingw prefixes ****
232 dnl Usage: WINE_CHECK_MINGW_PROG(variable,[value-if-not-found],[path])
234 AC_DEFUN([WINE_CHECK_MINGW_PROG],
235 [case "$host_cpu" in
236   aarch64*)
237     ac_prefix_list="aarch64-w64-mingw32-clang aarch64-w64-mingw32-gcc clang" ;;
238   arm*)
239     ac_prefix_list="armv7-w64-mingw32-clang armv7-w64-mingw32-gcc clang" ;;
240   i[[3456789]]86*)
241     ac_prefix_list="m4_foreach([ac_wine_prefix],[w64-mingw32, pc-mingw32, mingw32msvc, mingw32],
242                         m4_foreach([ac_wine_cpu],[i686,i586,i486,i386],[ac_wine_cpu-ac_wine_prefix-gcc ]))
243                      m4_foreach([ac_wine_cpu],[i686,i586,i486,i386],[ac_wine_cpu-w64-mingw32-clang ])
244                      mingw32-gcc clang" ;;
245   x86_64)
246     ac_prefix_list="m4_foreach([ac_wine_prefix],[pc-mingw32, w64-mingw32, mingw32msvc],
247                         m4_foreach([ac_wine_cpu],[x86_64,amd64],[ac_wine_cpu-ac_wine_prefix-gcc ]))
248                     m4_foreach([ac_wine_cpu],[x86_64,amd64],[ac_wine_cpu-w64-mingw32-clang ]) clang" ;;
249   *)
250     ac_prefix_list="" ;;
251 esac
252 AC_CHECK_PROGS([$1],[$ac_prefix_list],[$2],[$3])])
255 dnl **** Define helper functions for creating config.status files ****
257 dnl Usage: AC_REQUIRE([WINE_CONFIG_HELPERS])
259 AC_DEFUN([WINE_CONFIG_HELPERS],
260 [AS_VAR_SET([wine_rules],["all:"])
261 AC_SUBST(SUBDIRS,"")
262 AC_SUBST(DISABLED_SUBDIRS,"")
263 AC_SUBST(CONFIGURE_TARGETS,"")
265 wine_fn_append_file ()
267     AS_VAR_APPEND($[1]," \\$as_nl       $[2]")
270 wine_fn_append_rule ()
272     AS_VAR_APPEND(wine_rules,"$as_nl$[1]")
275 wine_fn_config_makefile ()
277     wine_fn_append_file SUBDIRS $[1]
278     AS_VAR_IF([$[2]],[no],[wine_fn_append_file DISABLED_SUBDIRS $[1]])
281 wine_fn_config_symlink ()
283     ac_links=$[@]
284     wine_fn_append_rule \
285 "$ac_links:
286         @./config.status \$[@]"
287     for f in $ac_links; do wine_fn_append_file CONFIGURE_TARGETS $f; done
290 dnl **** Define helper function to append a rule to a makefile command list ****
292 dnl Usage: WINE_APPEND_RULE(rule)
294 AC_DEFUN([WINE_APPEND_RULE],[AC_REQUIRE([WINE_CONFIG_HELPERS])wine_fn_append_rule "$1"])
296 dnl **** Create symlinks from config.status ****
298 dnl Usage: WINE_CONFIG_SYMLINK(target,src,enable)
300 AC_DEFUN([WINE_CONFIG_SYMLINK],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
301 m4_ifval([$3],[if test $3; then
302 ])AC_CONFIG_LINKS([$1:$2])dnl
303 wine_fn_config_symlink[ $1]m4_ifval([$3],[
304 fi])[]dnl
305 ])])
307 dnl **** Create a makefile from config.status ****
309 dnl Usage: WINE_CONFIG_MAKEFILE(file,enable,condition)
311 AC_DEFUN([WINE_CONFIG_MAKEFILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
312 AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]m4_bpatsubst([$1],[.*/\([^/]*\)$],[\1])))dnl
313 m4_append_uniq([_AC_USER_OPTS],ac_enable,[
314 ])dnl
315 m4_ifval([$3],[$3 || ])wine_fn_config_makefile [$1] ac_enable[]dnl
316 AS_VAR_POPDEF([ac_enable])])
318 dnl **** Append a file to the .gitignore list ****
320 dnl Usage: WINE_IGNORE_FILE(file,enable)
322 AC_DEFUN([WINE_IGNORE_FILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
323 m4_ifval([$2],[test "x$[$2]" = xno || ])wine_fn_append_file CONFIGURE_TARGETS $1])
325 dnl **** Add a message to the list displayed at the end ****
327 dnl Usage: WINE_NOTICE(notice)
328 dnl Usage: WINE_WARNING(warning)
329 dnl Usage: WINE_NOTICE_WITH(with_flag, test, notice, enable)
330 dnl Usage: WINE_WARNING_WITH(with_flag, test, warning, enable)
331 dnl Usage: WINE_ERROR_WITH(with_flag, test, error, enable)
332 dnl Usage: WINE_PRINT_MESSAGES
334 AC_DEFUN([WINE_NOTICE],[AS_VAR_APPEND([wine_notices],["|$1"])])
335 AC_DEFUN([WINE_WARNING],[AS_VAR_APPEND([wine_warnings],["|$1"])])
337 AC_DEFUN([WINE_NOTICE_WITH],[AS_IF([$2],[case "x$with_$1" in
338   x)   WINE_NOTICE([$3]) ;;
339   xno) ;;
340   *)   AC_MSG_ERROR([$3
341 This is an error since --with-$1 was requested.]) ;;
342 esac
343 m4_ifval([$4],[$4=${$4:-no}])])])
345 AC_DEFUN([WINE_WARNING_WITH],[AS_IF([$2],[case "x$with_$1" in
346   x)   WINE_WARNING([$3]) ;;
347   xno) ;;
348   *)   AC_MSG_ERROR([$3
349 This is an error since --with-$1 was requested.]) ;;
350 esac
351 m4_ifval([$4],[$4=${$4:-no}])])])
353 AC_DEFUN([WINE_ERROR_WITH],[AS_IF([$2],[case "x$with_$1" in
354   xno) ;;
355   *)   AC_MSG_ERROR([$3
356 Use the --without-$1 option if you really want this.]) ;;
357 esac
358 m4_ifval([$4],[$4=${$4:-no}])])])
360 AC_DEFUN([WINE_PRINT_MESSAGES],[ac_save_IFS="$IFS"
361 if test "x$wine_notices" != x; then
362     echo >&AS_MESSAGE_FD
363     IFS="|"
364     for msg in $wine_notices; do
365         IFS="$ac_save_IFS"
366         AS_VAR_IF([msg],[],,[AC_MSG_NOTICE([$msg])])
367     done
369 IFS="|"
370 for msg in $wine_warnings; do
371     IFS="$ac_save_IFS"
372     AS_VAR_IF([msg],[],,[echo >&2
373         AC_MSG_WARN([$msg])])
374 done
375 IFS="$ac_save_IFS"])
377 dnl Local Variables:
378 dnl compile-command: "autoreconf --warnings=all"
379 dnl End: