kernelbase: Implement PathCchAddBackslash()/PathCchAddBackslashEx().
[wine.git] / aclocal.m4
blob36881659f5faa06d77c64bc2d621b78764ca0fcf
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 shared lib (no main) with special CFLAGS ****
154 dnl Usage: WINE_TRY_SHLIB_FLAGS(flags,[action-if-yes,[action-if-no]])
156 AC_DEFUN([WINE_TRY_SHLIB_FLAGS],
157 [ac_wine_try_cflags_saved=$CFLAGS
158 CFLAGS="$CFLAGS $1"
159 AC_LINK_IFELSE([AC_LANG_SOURCE([void myfunc() {}])],[$2],[$3])
160 CFLAGS=$ac_wine_try_cflags_saved])
162 dnl **** Check whether we need to define a symbol on the compiler command line ****
164 dnl Usage: WINE_CHECK_DEFINE(name),[action-if-yes,[action-if-no]])
166 AC_DEFUN([WINE_CHECK_DEFINE],
167 [AS_VAR_PUSHDEF([ac_var],[ac_cv_cpp_def_$1])dnl
168 AC_CACHE_CHECK([whether we need to define $1],ac_var,
169     AC_EGREP_CPP(yes,[#ifndef $1
171 #endif],
172     [AS_VAR_SET(ac_var,yes)],[AS_VAR_SET(ac_var,no)]))
173 AS_VAR_IF([ac_var],[yes],
174       [CFLAGS="$CFLAGS -D$1"
175   LINTFLAGS="$LINTFLAGS -D$1"])dnl
176 AS_VAR_POPDEF([ac_var])])
178 dnl **** Check for functions with some extra libraries ****
180 dnl Usage: WINE_CHECK_LIB_FUNCS(funcs,libs,[action-if-found,[action-if-not-found]])
182 AC_DEFUN([WINE_CHECK_LIB_FUNCS],
183 [ac_wine_check_funcs_save_LIBS="$LIBS"
184 LIBS="$LIBS $2"
185 AC_CHECK_FUNCS([$1],[$3],[$4])
186 LIBS="$ac_wine_check_funcs_save_LIBS"])
188 dnl **** Check for a mingw program, trying the various mingw prefixes ****
190 dnl Usage: WINE_CHECK_MINGW_PROG(variable,[value-if-not-found],[path])
192 AC_DEFUN([WINE_CHECK_MINGW_PROG],
193 [case "$host_cpu" in
194   arm*)
195     ac_prefix_list="armv7-w64-mingw32-clang armv7-w64-mingw32-gcc" ;;
196   i[[3456789]]86*)
197     ac_prefix_list="m4_foreach([ac_wine_prefix],[w64-mingw32, pc-mingw32, mingw32msvc, mingw32],
198                         m4_foreach([ac_wine_cpu],[i686,i586,i486,i386],[ac_wine_cpu-ac_wine_prefix-gcc ]))
199                      m4_foreach([ac_wine_cpu],[i686,i586,i486,i386],[ac_wine_cpu-w64-mingw32-clang ])
200                      mingw32-gcc" ;;
201   x86_64)
202     ac_prefix_list="m4_foreach([ac_wine_prefix],[pc-mingw32, w64-mingw32, mingw32msvc],
203                         m4_foreach([ac_wine_cpu],[x86_64,amd64],[ac_wine_cpu-ac_wine_prefix-gcc ]))
204                     m4_foreach([ac_wine_cpu],[x86_64,amd64],[ac_wine_cpu-w64-mingw32-clang ])" ;;
205   *)
206     ac_prefix_list="" ;;
207 esac
208 AC_CHECK_PROGS([$1],[$ac_prefix_list],[$2],[$3])])
211 dnl **** Define helper functions for creating config.status files ****
213 dnl Usage: AC_REQUIRE([WINE_CONFIG_HELPERS])
215 AC_DEFUN([WINE_CONFIG_HELPERS],
216 [wine_rules_file=conf$$rules.make
217 rm -f $wine_rules_file
218 AC_SUBST(SUBDIRS,"")
219 AC_SUBST(DISABLED_SUBDIRS,"")
220 AC_SUBST(CONFIGURE_TARGETS,"")
221 AC_SUBST(ALL_TEST_RESOURCES,"")
223 wine_fn_append_file ()
225     AS_VAR_APPEND($[1]," \\$as_nl       $[2]")
228 wine_fn_append_rule ()
230     AS_ECHO("$[1]") >>$wine_rules_file
233 wine_fn_all_rules ()
235     wine_fn_append_file SUBDIRS $ac_dir
238 wine_fn_disabled_rules ()
240     wine_fn_append_file SUBDIRS $ac_dir
241     wine_fn_append_file DISABLED_SUBDIRS $ac_dir
244 wine_fn_config_makefile ()
246     ac_dir=$[1]
247     ac_enable=$[2]
249     case $ac_dir in
250     dnl These are created as symlinks for wow64 builds
251     fonts|server) test -z "$with_wine64" || return ;;
252     esac
253     AS_VAR_IF([$ac_enable],[no],[wine_fn_disabled_rules],[wine_fn_all_rules])
256 wine_fn_config_lib ()
258     ac_name=$[1]
259     ac_dir=dlls/$ac_name
261     wine_fn_all_rules
264 wine_fn_config_dll ()
266     ac_name=$[1]
267     ac_dir=dlls/$ac_name
268     ac_enable=$[2]
269     AS_VAR_IF([$ac_enable],[no],[wine_fn_disabled_rules],[wine_fn_all_rules])
272 wine_fn_config_program ()
274     ac_name=$[1]
275     ac_dir=programs/$ac_name
276     ac_enable=$[2]
277     AS_VAR_IF([$ac_enable],[no],[wine_fn_disabled_rules],[wine_fn_all_rules])
280 wine_fn_config_test ()
282     ac_dir=$[1]
283     ac_name=$[2]
285     AS_VAR_IF([enable_tests],[no],[wine_fn_disabled_rules; return])
287     wine_fn_append_file ALL_TEST_RESOURCES $ac_name.res
288     wine_fn_all_rules
291 wine_fn_config_tool ()
293     ac_dir=$[1]
294     AS_VAR_IF([enable_tools],[no],[wine_fn_append_file DISABLED_SUBDIRS $ac_dir; return])
296     wine_fn_all_rules
298     wine_fn_append_rule "__tooldeps__: $ac_dir"
299     wine_fn_append_rule "$ac_dir: libs/port"
300     case $ac_dir in
301       tools/winebuild) wine_fn_append_rule "\$(WINEBUILD): $ac_dir" ;;
302     esac
305 wine_fn_config_symlink ()
307     ac_links=$[@]
308     wine_fn_append_rule \
309 "$ac_links:
310         @./config.status \$[@]"
311     for f in $ac_links; do wine_fn_append_file CONFIGURE_TARGETS $f; done
314 dnl **** Define helper function to append a file to a makefile file list ****
316 dnl Usage: WINE_APPEND_FILE(var,file)
318 AC_DEFUN([WINE_APPEND_FILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])wine_fn_append_file $1 "$2"])
320 dnl **** Define helper function to append a rule to a makefile command list ****
322 dnl Usage: WINE_APPEND_RULE(rule)
324 AC_DEFUN([WINE_APPEND_RULE],[AC_REQUIRE([WINE_CONFIG_HELPERS])wine_fn_append_rule "$1"])
326 dnl **** Create symlinks from config.status ****
328 dnl Usage: WINE_CONFIG_SYMLINK(target,src,files,enable,srcfile)
330 AC_DEFUN([WINE_CONFIG_SYMLINK],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
331 m4_ifval([$4],[if test "x$[$4]" != xno; then
332 ])m4_foreach([f],[$3],
333 [AC_CONFIG_LINKS(m4_ifval([$1],[$1/])f[:]m4_ifval([$2],[$2/])m4_ifval([$5],[$5],f))])dnl
334 m4_if([$1],[$2],[test "$srcdir" = "." || ])dnl
335 wine_fn_config_symlink[]m4_foreach([f],[$3],[ ]m4_ifval([$1],[$1/])f)m4_ifval([$4],[
336 fi])[]dnl
337 ])])
339 dnl **** Create a makefile from config.status ****
341 dnl Usage: WINE_CONFIG_MAKEFILE(file,enable)
343 AC_DEFUN([WINE_CONFIG_MAKEFILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
344 AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]$1))dnl
345 m4_append_uniq([_AC_USER_OPTS],ac_enable,[
346 ])dnl
347 wine_fn_config_makefile [$1] ac_enable[]dnl
348 AS_VAR_POPDEF([ac_enable])])
350 dnl **** Create a dll makefile from config.status ****
352 dnl Usage: WINE_CONFIG_DLL(name,enable)
354 AC_DEFUN([WINE_CONFIG_DLL],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
355 AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]$1))dnl
356 m4_append_uniq([_AC_USER_OPTS],ac_enable,[
357 ])dnl
358 wine_fn_config_dll [$1] ac_enable[]dnl
359 AS_VAR_POPDEF([ac_enable])])
361 dnl **** Create a program makefile from config.status ****
363 dnl Usage: WINE_CONFIG_PROGRAM(name,enable)
365 AC_DEFUN([WINE_CONFIG_PROGRAM],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
366 AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]$1))dnl
367 m4_append_uniq([_AC_USER_OPTS],ac_enable,[
368 ])dnl
369 wine_fn_config_program [$1] ac_enable[]dnl
370 AS_VAR_POPDEF([ac_enable])])
372 dnl **** Create a test makefile from config.status ****
374 dnl Usage: WINE_CONFIG_TEST(dir)
376 AC_DEFUN([WINE_CONFIG_TEST],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
377 m4_pushdef([ac_suffix],m4_if(m4_substr([$1],0,9),[programs/],[.exe_test],[_test]))dnl
378 m4_pushdef([ac_name],[m4_bpatsubst([$1],[.*/\(.*\)/tests$],[\1])])dnl
379 wine_fn_config_test $1 ac_name[]ac_suffix[]dnl
380 m4_popdef([ac_suffix])dnl
381 m4_popdef([ac_name])])
383 dnl **** Create a static lib makefile from config.status ****
385 dnl Usage: WINE_CONFIG_LIB(name)
387 AC_DEFUN([WINE_CONFIG_LIB],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
388 wine_fn_config_lib [$1]])
390 dnl **** Create a tool makefile from config.status ****
392 dnl Usage: WINE_CONFIG_TOOL(name)
394 AC_DEFUN([WINE_CONFIG_TOOL],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
395 m4_append_uniq([_AC_USER_OPTS],[enable_tools],[
396 ])dnl
397 wine_fn_config_tool [$1]])
399 dnl **** Append a file to the .gitignore list ****
401 dnl Usage: WINE_IGNORE_FILE(file,enable)
403 AC_DEFUN([WINE_IGNORE_FILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
404 m4_ifval([$2],[test "x$[$2]" = xno || ])wine_fn_append_file CONFIGURE_TARGETS $1])
406 dnl **** Add a message to the list displayed at the end ****
408 dnl Usage: WINE_NOTICE(notice)
409 dnl Usage: WINE_WARNING(warning)
410 dnl Usage: WINE_NOTICE_WITH(with_flag, test, notice, enable)
411 dnl Usage: WINE_WARNING_WITH(with_flag, test, warning, enable)
412 dnl Usage: WINE_ERROR_WITH(with_flag, test, error, enable)
413 dnl Usage: WINE_PRINT_MESSAGES
415 AC_DEFUN([WINE_NOTICE],[AS_VAR_APPEND([wine_notices],["|$1"])])
416 AC_DEFUN([WINE_WARNING],[AS_VAR_APPEND([wine_warnings],["|$1"])])
418 AC_DEFUN([WINE_NOTICE_WITH],[AS_IF([$2],[case "x$with_$1" in
419   x)   WINE_NOTICE([$3]) ;;
420   xno) ;;
421   *)   AC_MSG_ERROR([$3
422 This is an error since --with-$1 was requested.]) ;;
423 esac
424 m4_ifval([$4],[$4=${$4:-no}])])])
426 AC_DEFUN([WINE_WARNING_WITH],[AS_IF([$2],[case "x$with_$1" in
427   x)   WINE_WARNING([$3]) ;;
428   xno) ;;
429   *)   AC_MSG_ERROR([$3
430 This is an error since --with-$1 was requested.]) ;;
431 esac
432 m4_ifval([$4],[$4=${$4:-no}])])])
434 AC_DEFUN([WINE_ERROR_WITH],[AS_IF([$2],[case "x$with_$1" in
435   xno) ;;
436   *)   AC_MSG_ERROR([$3
437 Use the --without-$1 option if you really want this.]) ;;
438 esac
439 m4_ifval([$4],[$4=${$4:-no}])])])
441 AC_DEFUN([WINE_PRINT_MESSAGES],[ac_save_IFS="$IFS"
442 if test "x$wine_notices" != x; then
443     echo >&AS_MESSAGE_FD
444     IFS="|"
445     for msg in $wine_notices; do
446         IFS="$ac_save_IFS"
447         AS_VAR_IF([msg],[],,[AC_MSG_NOTICE([$msg])])
448     done
450 IFS="|"
451 for msg in $wine_warnings; do
452     IFS="$ac_save_IFS"
453     AS_VAR_IF([msg],[],,[echo >&2
454         AC_MSG_WARN([$msg])])
455 done
456 IFS="$ac_save_IFS"])
458 dnl Local Variables:
459 dnl compile-command: "autoreconf --warnings=all"
460 dnl End: