1 dnl Macros used to build the Wine configure script
3 dnl Copyright 2002 Alexandre Julliard
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.
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.
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
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
25 dnl WINE_CHECK_HOST_TOOL(VARIABLE, PROG-TO-CHECK-FOR, [VALUE-IF-NOT-FOUND], [PATH])
27 dnl Like AC_CHECK_TOOL but without the broken fallback to non-prefixed name
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()
40 dnl Same as AC_HEADER_MAJOR but fixed to handle the glibc 2.25 sys/types.h breakage
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>.])])
54 dnl **** Initialize the programs used by other checks ****
56 dnl Usage: WINE_PATH_SONAME_TOOLS
57 dnl Usage: WINE_PATH_PKG_CONFIG
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 ****
69 dnl Usage: WINE_CHECK_SONAME(library, function, [action-if-found, [action-if-not-found, [other_libraries, [pattern]]]])
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])
77 [ac_check_soname_save_LIBS=$LIBS
79 AC_LINK_IFELSE([AC_LANG_CALL([], [$2])],
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'`])]) ;;
87 LIBS=$ac_check_soname_save_LIBS])dnl
88 AS_VAR_IF([ac_Lib],[],
89 [AC_MSG_RESULT([not found])
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.])
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 ****
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
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
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
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"
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],
195 ac_prefix_list="armv7-w64-mingw32-clang armv7-w64-mingw32-gcc" ;;
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 ])
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 ])" ;;
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
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
235 wine_fn_append_file SUBDIRS $ac_dir
236 wine_fn_append_rule \
240 @cd $ac_dir && \$(MAKE)"
243 wine_fn_disabled_rules ()
245 wine_fn_append_file SUBDIRS $ac_dir
246 wine_fn_append_file DISABLED_SUBDIRS $ac_dir
249 wine_fn_config_makefile ()
255 dnl These are created as symlinks for wow64 builds
256 fonts|server) test -z "$with_wine64" || return ;;
258 AS_VAR_IF([$ac_enable],[no],[wine_fn_disabled_rules; return])
262 wine_fn_config_lib ()
268 AS_VAR_IF([enable_tools],[no],,[ac_deps="tools/widl tools/winebuild tools/winegcc $ac_deps"])
271 wine_fn_append_rule \
272 "__builddeps__: $ac_dir
276 wine_fn_config_dll ()
282 AS_VAR_IF([$ac_enable],[no],[wine_fn_disabled_rules; return])
285 wine_fn_append_rule \
286 "$ac_dir: __builddeps__
287 manpages htmlpages sgmlpages xmlpages::
288 @cd $ac_dir && \$(MAKE) \$[@]"
291 wine_fn_config_program ()
294 ac_dir=programs/$ac_name
297 AS_VAR_IF([$ac_enable],[no],[wine_fn_disabled_rules; return])
300 wine_fn_append_rule "$ac_dir: __builddeps__"
303 wine_fn_config_test ()
308 AS_VAR_IF([enable_tests],[no],[wine_fn_disabled_rules; return])
310 wine_fn_append_file ALL_TEST_RESOURCES $ac_name.res
313 wine_fn_append_rule \
314 "$ac_dir: __builddeps__
315 programs/winetest: $ac_dir
316 check test: $ac_dir/test
319 @cd $ac_dir && \$(MAKE) test"
321 if test -n "$CROSSTARGET"
323 wine_fn_append_rule \
324 "crosstest: $ac_dir/crosstest
325 .PHONY: $ac_dir/crosstest
326 $ac_dir/crosstest: __builddeps__ dummy
327 @cd $ac_dir && \$(MAKE) crosstest"
331 wine_fn_config_tool ()
334 AS_VAR_IF([enable_tools],[no],[wine_fn_append_file DISABLED_SUBDIRS $ac_dir; return])
338 wine_fn_append_rule "__tooldeps__: $ac_dir"
339 wine_fn_append_rule "$ac_dir: libs/port"
341 tools/winebuild) wine_fn_append_rule "\$(WINEBUILD): $ac_dir" ;;
345 wine_fn_config_symlink ()
348 if test "x$[1]" = "x-d"
354 wine_fn_append_rule \
356 @./config.status \$[@]"
357 for f in $ac_links; do wine_fn_append_file CONFIGURE_TARGETS $f; done
358 test -n "$ac_linkdir" || return
359 wine_fn_append_rule "$ac_linkdir/depend: $ac_links"
362 dnl **** Define helper function to append a file to a makefile file list ****
364 dnl Usage: WINE_APPEND_FILE(var,file)
366 AC_DEFUN([WINE_APPEND_FILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])wine_fn_append_file $1 "$2"])
368 dnl **** Define helper function to append a rule to a makefile command list ****
370 dnl Usage: WINE_APPEND_RULE(rule)
372 AC_DEFUN([WINE_APPEND_RULE],[AC_REQUIRE([WINE_CONFIG_HELPERS])wine_fn_append_rule "$1"])
374 dnl **** Create symlinks from config.status ****
376 dnl Usage: WINE_CONFIG_SYMLINK(target,src,files,enable,srcfile)
378 AC_DEFUN([WINE_CONFIG_SYMLINK],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
379 m4_ifval([$4],[if test "x$[$4]" != xno; then
380 ])m4_foreach([f],[$3],
381 [AC_CONFIG_LINKS(m4_ifval([$1],[$1/])f[:]m4_ifval([$2],[$2/])m4_ifval([$5],[$5],f))])dnl
382 m4_if([$1],[$2],[test "$srcdir" = "." || ])dnl
383 wine_fn_config_symlink[]m4_if([$1],[$2],,m4_ifval([$1],[ -d $1]))[]m4_foreach([f],[$3],[ ]m4_ifval([$1],[$1/])f)m4_ifval([$4],[
387 dnl **** Create a makefile from config.status ****
389 dnl Usage: WINE_CONFIG_MAKEFILE(file,enable)
391 AC_DEFUN([WINE_CONFIG_MAKEFILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
392 AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]$1))dnl
393 m4_append_uniq([_AC_USER_OPTS],ac_enable,[
395 wine_fn_config_makefile [$1] ac_enable[]dnl
396 AS_VAR_POPDEF([ac_enable])])
398 dnl **** Create a dll makefile from config.status ****
400 dnl Usage: WINE_CONFIG_DLL(name,enable)
402 AC_DEFUN([WINE_CONFIG_DLL],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
403 AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]$1))dnl
404 m4_append_uniq([_AC_USER_OPTS],ac_enable,[
406 wine_fn_config_dll [$1] ac_enable[]dnl
407 AS_VAR_POPDEF([ac_enable])])
409 dnl **** Create a program makefile from config.status ****
411 dnl Usage: WINE_CONFIG_PROGRAM(name,enable)
413 AC_DEFUN([WINE_CONFIG_PROGRAM],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
414 AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]$1))dnl
415 m4_append_uniq([_AC_USER_OPTS],ac_enable,[
417 wine_fn_config_program [$1] ac_enable[]dnl
418 AS_VAR_POPDEF([ac_enable])])
420 dnl **** Create a test makefile from config.status ****
422 dnl Usage: WINE_CONFIG_TEST(dir)
424 AC_DEFUN([WINE_CONFIG_TEST],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
425 m4_pushdef([ac_suffix],m4_if(m4_substr([$1],0,9),[programs/],[.exe_test],[_test]))dnl
426 m4_pushdef([ac_name],[m4_bpatsubst([$1],[.*/\(.*\)/tests$],[\1])])dnl
427 wine_fn_config_test $1 ac_name[]ac_suffix[]dnl
428 m4_popdef([ac_suffix])dnl
429 m4_popdef([ac_name])])
431 dnl **** Create a static lib makefile from config.status ****
433 dnl Usage: WINE_CONFIG_LIB(name)
435 AC_DEFUN([WINE_CONFIG_LIB],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
436 wine_fn_config_lib [$1]])
438 dnl **** Create a tool makefile from config.status ****
440 dnl Usage: WINE_CONFIG_TOOL(name)
442 AC_DEFUN([WINE_CONFIG_TOOL],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
443 m4_append_uniq([_AC_USER_OPTS],[enable_tools],[
445 wine_fn_config_tool [$1]])
447 dnl **** Append a file to the .gitignore list ****
449 dnl Usage: WINE_IGNORE_FILE(file,enable)
451 AC_DEFUN([WINE_IGNORE_FILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
452 m4_ifval([$2],[test "x$[$2]" = xno || ])wine_fn_append_file CONFIGURE_TARGETS $1])
454 dnl **** Add a message to the list displayed at the end ****
456 dnl Usage: WINE_NOTICE(notice)
457 dnl Usage: WINE_WARNING(warning)
458 dnl Usage: WINE_NOTICE_WITH(with_flag, test, notice, enable)
459 dnl Usage: WINE_WARNING_WITH(with_flag, test, warning, enable)
460 dnl Usage: WINE_ERROR_WITH(with_flag, test, error, enable)
461 dnl Usage: WINE_PRINT_MESSAGES
463 AC_DEFUN([WINE_NOTICE],[AS_VAR_APPEND([wine_notices],["|$1"])])
464 AC_DEFUN([WINE_WARNING],[AS_VAR_APPEND([wine_warnings],["|$1"])])
466 AC_DEFUN([WINE_NOTICE_WITH],[AS_IF([$2],[case "x$with_$1" in
467 x) WINE_NOTICE([$3]) ;;
470 This is an error since --with-$1 was requested.]) ;;
472 m4_ifval([$4],[$4=${$4:-no}])])])
474 AC_DEFUN([WINE_WARNING_WITH],[AS_IF([$2],[case "x$with_$1" in
475 x) WINE_WARNING([$3]) ;;
478 This is an error since --with-$1 was requested.]) ;;
480 m4_ifval([$4],[$4=${$4:-no}])])])
482 AC_DEFUN([WINE_ERROR_WITH],[AS_IF([$2],[case "x$with_$1" in
485 Use the --without-$1 option if you really want this.]) ;;
487 m4_ifval([$4],[$4=${$4:-no}])])])
489 AC_DEFUN([WINE_PRINT_MESSAGES],[ac_save_IFS="$IFS"
490 if test "x$wine_notices" != x; then
493 for msg in $wine_notices; do
495 AS_VAR_IF([msg],[],,[AC_MSG_NOTICE([$msg])])
499 for msg in $wine_warnings; do
501 AS_VAR_IF([msg],[],,[echo >&2
502 AC_MSG_WARN([$msg])])
507 dnl compile-command: "autoreconf --warnings=all"