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 **** Get the ldd program name; used by WINE_GET_SONAME ****
27 dnl Usage: WINE_PATH_LDD
29 AC_DEFUN([WINE_PATH_LDD],[AC_PATH_PROG(LDD,ldd,true,/sbin:/usr/sbin:$PATH)])
31 dnl **** Extract the soname of a library ****
33 dnl Usage: WINE_CHECK_SONAME(library, function, [action-if-found, [action-if-not-found, [other_libraries, [pattern]]]])
35 AC_DEFUN([WINE_CHECK_SONAME],
36 [AC_REQUIRE([WINE_PATH_LDD])dnl
37 AS_VAR_PUSHDEF([ac_Lib],[ac_cv_lib_soname_$1])dnl
38 m4_pushdef([ac_lib_pattern],m4_default([$6],[lib$1]))dnl
39 AC_MSG_CHECKING([for -l$1])
41 [ac_check_soname_save_LIBS=$LIBS
43 AC_LINK_IFELSE([AC_LANG_CALL([], [$2])],
45 dll) AS_VAR_SET(ac_Lib,[`$ac_cv_path_LDD conftest.exe | grep "$1" | sed -e "s/dll.*/dll/"';2,$d'`]) ;;
46 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'`]) ;;
47 *) AS_VAR_SET(ac_Lib,[`$ac_cv_path_LDD conftest$ac_exeext | grep "ac_lib_pattern\\.$LIBEXT" | sed -e "s/^.*\(ac_lib_pattern\.$LIBEXT[[^ ]]*\).*$/\1/"';2,$d'`]) ;;
49 LIBS=$ac_check_soname_save_LIBS])dnl
50 AS_IF([test "x]AS_VAR_GET(ac_Lib)[" = "x"],
51 [AC_MSG_RESULT([not found])
53 [AC_MSG_RESULT(AS_VAR_GET(ac_Lib))
54 AC_DEFINE_UNQUOTED(AS_TR_CPP(SONAME_LIB$1),["]AS_VAR_GET(ac_Lib)["],
55 [Define to the soname of the lib$1 library.])
57 m4_popdef([ac_lib_pattern])dnl
58 AS_VAR_POPDEF([ac_Lib])])
60 dnl **** Link C code with an assembly file ****
62 dnl Usage: WINE_TRY_ASM_LINK(asm-code,includes,function,[action-if-found,[action-if-not-found]])
64 AC_DEFUN([WINE_TRY_ASM_LINK],
65 [AC_LINK_IFELSE(AC_LANG_PROGRAM([[$2]],[[asm($1); $3]]),[$4],[$5])])
67 dnl **** Check if we can link an empty program with special CFLAGS ****
69 dnl Usage: WINE_TRY_CFLAGS(flags,[action-if-yes,[action-if-no]])
71 dnl The default action-if-yes is to append the flags to EXTRACFLAGS.
73 AC_DEFUN([WINE_TRY_CFLAGS],
74 [AS_VAR_PUSHDEF([ac_var], ac_cv_cflags_[[$1]])dnl
75 AC_CACHE_CHECK([whether the compiler supports $1], ac_var,
76 [ac_wine_try_cflags_saved=$CFLAGS
78 AC_LINK_IFELSE(AC_LANG_SOURCE([[int main(int argc, char **argv) { return 0; }]]),
79 [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
80 CFLAGS=$ac_wine_try_cflags_saved])
81 AS_IF([test AS_VAR_GET(ac_var) = yes],
82 [m4_default([$2], [EXTRACFLAGS="$EXTRACFLAGS $1"])], [$3])dnl
83 AS_VAR_POPDEF([ac_var])])
85 dnl **** Check if we can link an empty shared lib (no main) with special CFLAGS ****
87 dnl Usage: WINE_TRY_SHLIB_FLAGS(flags,[action-if-yes,[action-if-no]])
89 AC_DEFUN([WINE_TRY_SHLIB_FLAGS],
90 [ac_wine_try_cflags_saved=$CFLAGS
92 AC_LINK_IFELSE([void myfunc() {}],[$2],[$3])
93 CFLAGS=$ac_wine_try_cflags_saved])
95 dnl **** Check whether we need to define a symbol on the compiler command line ****
97 dnl Usage: WINE_CHECK_DEFINE(name),[action-if-yes,[action-if-no]])
99 AC_DEFUN([WINE_CHECK_DEFINE],
100 [AS_VAR_PUSHDEF([ac_var],[ac_cv_cpp_def_$1])dnl
101 AC_CACHE_CHECK([whether we need to define $1],ac_var,
102 AC_EGREP_CPP(yes,[#ifndef $1
105 [AS_VAR_SET(ac_var,yes)],[AS_VAR_SET(ac_var,no)]))
106 AS_IF([test AS_VAR_GET(ac_var) = yes],
107 [CFLAGS="$CFLAGS -D$1"
108 LINTFLAGS="$LINTFLAGS -D$1"])dnl
109 AS_VAR_POPDEF([ac_var])])
111 dnl **** Check for functions with some extra libraries ****
113 dnl Usage: WINE_CHECK_LIB_FUNCS(funcs,libs,[action-if-found,[action-if-not-found]])
115 AC_DEFUN([WINE_CHECK_LIB_FUNCS],
116 [ac_wine_check_funcs_save_LIBS="$LIBS"
118 AC_CHECK_FUNCS([$1],[$3],[$4])
119 LIBS="$ac_wine_check_funcs_save_LIBS"])
121 dnl **** Check for a mingw program, trying the various mingw prefixes ****
123 dnl Usage: WINE_CHECK_MINGW_PROG(variable,prog,[value-if-not-found],[path])
125 AC_DEFUN([WINE_CHECK_MINGW_PROG],
128 ac_prefix_list="m4_foreach([ac_wine_prefix],[pc-mingw32, mingw32msvc, mingw32],
129 m4_foreach([ac_wine_cpu],[i686,i586,i486,i386],[ac_wine_cpu-ac_wine_prefix-$2 ]))" ;;
131 ac_prefix_list="m4_foreach([ac_wine_prefix],[pc-mingw32,w64-mingw32],[x86_64-ac_wine_prefix-$2 ])" ;;
135 AC_CHECK_PROGS([$1],[$ac_prefix_list],[$3],[$4])])
138 dnl **** Define helper functions for creating config.status files ****
140 dnl Usage: AC_REQUIRE([WINE_CONFIG_HELPERS])
142 AC_DEFUN([WINE_CONFIG_HELPERS],
143 [AC_SUBST(ALL_MAKEFILE_DEPENDS,["# Makefile dependencies
144 Makefile: Makefile.in Make.rules config.status"])
145 AC_SUBST(ALL_WINETEST_DEPENDS,["# Test binaries"])
147 AC_SUBST(ALL_MAKERULES,"")
148 AC_SUBST(ALL_SYMLINKS,"")
149 AC_SUBST(ALL_DIRS,"")
150 AC_SUBST(ALL_TEST_BINARIES,"")
151 AC_SUBST(ALL_PROGRAM_BIN_INSTALL_DIRS,"")
153 wine_fn_append_file ()
155 AS_VAR_APPEND($[1]," \\$as_nl $[2]")
158 wine_fn_append_rule ()
160 AS_VAR_APPEND($[1],"$as_nl$[2]")
163 wine_fn_all_dir_rules ()
165 wine_fn_append_file ALL_DIRS $[1]
166 wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
167 "$[1]/__clean__: $[1]/Makefile
168 $[1]/Makefile $[1]/__depend__: $[1]/Makefile.in config.status $[2]
169 @./config.status --file $[1]/Makefile && cd $[1] && \$(MAKE) depend"
172 wine_fn_config_makefile ()
176 wine_fn_all_dir_rules $ac_dir "Make.rules \$(MAKEDEP)"
178 AS_VAR_IF([$ac_enable],[no],,[wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
180 $ac_dir: $ac_dir/Makefile dummy
181 @cd $ac_dir && \$(MAKE)
183 @cd $ac_dir && \$(MAKE) install
184 install-lib:: $ac_dir
185 @cd $ac_dir && \$(MAKE) install-lib
186 install-dev:: $ac_dir
187 @cd $ac_dir && \$(MAKE) install-dev
188 uninstall:: $ac_dir/Makefile
189 @cd $ac_dir && \$(MAKE) uninstall"])
192 wine_fn_config_lib ()
196 wine_fn_all_dir_rules $ac_dir "dlls/Makeimplib.rules \$(MAKEDEP)"
197 wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
198 "all __builddeps__: $ac_dir
199 __buildcrossdeps__: $ac_dir/lib$ac_name.cross.a
200 $ac_dir $ac_dir/lib$ac_name.cross.a: $ac_dir/Makefile tools/widl tools/winebuild tools/winegcc include
202 @cd $ac_dir && \$(MAKE)
203 $ac_dir/lib$ac_name.cross.a: dummy
204 @cd $ac_dir && \$(MAKE) lib$ac_name.cross.a
205 install install-dev:: $ac_dir
206 @cd $ac_dir && \$(MAKE) install
207 uninstall:: $ac_dir/Makefile
208 @cd $ac_dir && \$(MAKE) uninstall"
211 wine_fn_config_dll ()
217 ac_file="dlls/$ac_dir/lib$ac_implib"
218 ac_deps="tools/widl tools/winebuild tools/winegcc include"
220 wine_fn_all_dir_rules dlls/$ac_dir "dlls/Makedll.rules \$(MAKEDEP)"
222 AS_VAR_IF([$ac_enable],[no],
223 dnl enable_win16 is special in that it disables import libs too
224 [test "$ac_enable" != enable_win16 || return 0],
225 [wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
226 "all .PHONY: dlls/$ac_dir
227 dlls/$ac_dir: dlls/$ac_dir/Makefile __builddeps__ dummy
228 @cd dlls/$ac_dir && \$(MAKE)
229 install:: dlls/$ac_dir/Makefile __builddeps__
230 @cd dlls/$ac_dir && \$(MAKE) install
231 install-lib:: dlls/$ac_dir/Makefile __builddeps__
232 @cd dlls/$ac_dir && \$(MAKE) install-lib
233 uninstall manpages htmlpages sgmlpages xmlpages:: dlls/$ac_dir/Makefile
234 @cd dlls/$ac_dir && \$(MAKE) \$[@]"])
236 if test -n "$ac_implibsrc"
238 wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
239 "__builddeps__: $ac_file.$IMPLIBEXT $ac_file.$STATIC_IMPLIBEXT
240 __buildcrossdeps__: $ac_file.cross.a
241 $ac_file.$IMPLIBEXT $ac_file.$STATIC_IMPLIBEXT $ac_file.cross.a: $ac_deps
242 $ac_file.def: dlls/$ac_dir/$ac_dir.spec dlls/$ac_dir/Makefile
243 @cd dlls/$ac_dir && \$(MAKE) \`basename \$[@]\`
244 $ac_file.$STATIC_IMPLIBEXT $ac_file.cross.a: dlls/$ac_dir/Makefile dummy
245 @cd dlls/$ac_dir && \$(MAKE) \`basename \$[@]\`
246 install-dev:: dlls/$ac_dir/Makefile __builddeps__
247 @cd dlls/$ac_dir && \$(MAKE) install-dev"
248 elif test -n "$ac_implib"
250 wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
251 "__builddeps__: $ac_file.$IMPLIBEXT
252 __buildcrossdeps__: $ac_file.cross.a
253 $ac_file.$IMPLIBEXT $ac_file.cross.a: dlls/$ac_dir/$ac_dir.spec dlls/$ac_dir/Makefile $ac_deps
254 @cd dlls/$ac_dir && \$(MAKE) \`basename \$[@]\`
255 install-dev:: dlls/$ac_dir/Makefile __builddeps__
256 @cd dlls/$ac_dir && \$(MAKE) install-dev"
258 if test "$ac_dir" != "$ac_implib"
260 wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
261 "__builddeps__: dlls/lib$ac_implib.$IMPLIBEXT
262 __buildcrossdeps__: dlls/lib$ac_implib.cross.a
263 dlls/lib$ac_implib.$IMPLIBEXT: $ac_file.$IMPLIBEXT
264 \$(RM) \$[@] && \$(LN_S) $ac_dir/lib$ac_implib.$IMPLIBEXT \$[@]
265 dlls/lib$ac_implib.cross.a: $ac_file.cross.a
266 \$(RM) \$[@] && \$(LN_S) $ac_dir/lib$ac_implib.cross.a \$[@]
268 \$(RM) dlls/lib$ac_implib.$IMPLIBEXT"
273 wine_fn_config_program ()
278 wine_fn_all_dir_rules programs/$ac_dir "programs/Makeprog.rules \$(MAKEDEP)"
280 AS_VAR_IF([$ac_enable],[no],,[wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
281 "all .PHONY: programs/$ac_dir
282 programs/$ac_dir: programs/$ac_dir/Makefile __builddeps__ dummy
283 @cd programs/$ac_dir && \$(MAKE)"
285 if test -n "$ac_install"
287 wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
288 "install install-lib:: programs/$ac_dir/Makefile __builddeps__
289 @cd programs/$ac_dir && \$(MAKE) install
290 uninstall:: programs/$ac_dir/Makefile
291 @cd programs/$ac_dir && \$(MAKE) uninstall"
292 test "$ac_install" != installbin || wine_fn_append_file ALL_PROGRAM_BIN_INSTALL_DIRS programs/$ac_dir
296 wine_fn_config_test ()
300 wine_fn_append_file ALL_TEST_BINARIES $ac_name.exe
301 wine_fn_append_rule ALL_WINETEST_DEPENDS \
302 "$ac_name.exe: \$(TOPOBJDIR)/$ac_dir/$ac_name.exe$DLLEXT
303 cp \$(TOPOBJDIR)/$ac_dir/$ac_name.exe$DLLEXT \$[@] && \$(STRIP) \$[@]
305 echo \"$ac_name.exe TESTRES \\\"$ac_name.exe\\\"\" >\$[@] || (\$(RM) \$[@] && false)
306 $ac_name.res: $ac_name.rc $ac_name.exe"
307 wine_fn_all_dir_rules $ac_dir "Maketest.rules \$(MAKEDEP)"
309 AS_VAR_IF([enable_tests],[no],,[wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
310 "all programs/winetest .PHONY: $ac_dir
311 $ac_dir: $ac_dir/Makefile __builddeps__ dummy
312 @cd $ac_dir && \$(MAKE)
313 crosstest .PHONY: $ac_dir/__crosstest__
314 $ac_dir/__crosstest__: $ac_dir/Makefile __buildcrossdeps__ dummy
315 @cd $ac_dir && \$(MAKE) crosstest
316 test .PHONY: $ac_dir/__test__
317 $ac_dir/__test__: dummy
318 @cd $ac_dir && \$(MAKE) test
320 \$(RM) $ac_dir/*.ok"])
323 wine_fn_config_tool ()
327 if test "$ac_dir" != tools
329 dnl makedep is in tools so tools makefile cannot depend on it
330 ac_deps="$ac_deps \$(MAKEDEP)"
332 wine_fn_all_dir_rules $ac_dir "$ac_deps"
334 AS_VAR_IF([enable_tools],[no],,[case $ac_dir in
335 dnl tools directory has both install-lib and install-dev
336 tools) wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
338 @cd $ac_dir && \$(MAKE) install
339 install-lib:: $ac_dir
340 @cd $ac_dir && \$(MAKE) install-lib
341 install-dev:: $ac_dir
342 @cd $ac_dir && \$(MAKE) install-dev" ;;
343 *) wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
344 "install install-dev:: $ac_dir
345 @cd $ac_dir && \$(MAKE) install" ;;
347 wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
348 "uninstall:: $ac_dir/Makefile
349 @cd $ac_dir && \$(MAKE) uninstall
350 all __tooldeps__ .PHONY: $ac_dir
351 $ac_dir: $ac_dir/Makefile libs/port dummy
352 @cd $ac_dir && \$(MAKE)"])
355 dnl **** Define helper function to append a file to a makefile file list ****
357 dnl Usage: WINE_APPEND_FILE(var,file)
359 AC_DEFUN([WINE_APPEND_FILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])wine_fn_append_file $1 "$2"])
361 dnl **** Define helper function to append a rule to a makefile command list ****
363 dnl Usage: WINE_APPEND_RULE(var,rule)
365 AC_DEFUN([WINE_APPEND_RULE],[AC_REQUIRE([WINE_CONFIG_HELPERS])wine_fn_append_rule $1 "$2"])
367 dnl **** Create nonexistent directories from config.status ****
369 dnl Usage: WINE_CONFIG_EXTRA_DIR(dirname)
371 AC_DEFUN([WINE_CONFIG_EXTRA_DIR],
372 [AC_CONFIG_COMMANDS([$1],[test -d "$1" || { AC_MSG_NOTICE([creating $1]); AS_MKDIR_P("$1"); }])])
374 dnl **** Create symlinks from config.status ****
376 dnl Usage: WINE_CONFIG_SYMLINK(name,target)
378 AC_DEFUN([WINE_CONFIG_SYMLINK],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
379 AC_CONFIG_LINKS([$1:]m4_default([$2],[$1]))dnl
380 m4_if([$2],,[test "$srcdir" = "." || ])WINE_APPEND_FILE(ALL_SYMLINKS,[$1])])
382 dnl **** Create a make rules file from config.status ****
384 dnl Usage: WINE_CONFIG_MAKERULES(file,var,deps)
386 AC_DEFUN([WINE_CONFIG_MAKERULES],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
387 WINE_APPEND_FILE(ALL_MAKERULES,[$1])
388 WINE_APPEND_RULE(ALL_MAKEFILE_DEPENDS,[$1: m4_ifval([$3],[$1.in $3],[$1.in]) config.status])
390 AC_SUBST_FILE([$2])dnl
391 AC_CONFIG_FILES([$1])])
393 dnl **** Create a makefile from config.status ****
395 dnl Usage: WINE_CONFIG_MAKEFILE(file,enable)
397 AC_DEFUN([WINE_CONFIG_MAKEFILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
398 AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]$1))dnl
399 wine_fn_config_makefile [$1] ac_enable[]dnl
400 AS_VAR_POPDEF([ac_enable])])
402 dnl **** Create a dll makefile from config.status ****
404 dnl Usage: WINE_CONFIG_DLL(name,enable,implib,implibsrc)
406 AC_DEFUN([WINE_CONFIG_DLL],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
407 AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]$1))dnl
408 wine_fn_config_dll [$1] ac_enable [$3] m4_ifval([$4],["$4"])dnl
409 AS_VAR_POPDEF([ac_enable])])
411 dnl **** Create a program makefile from config.status ****
413 dnl Usage: WINE_CONFIG_PROGRAM(name,install,enable)
415 AC_DEFUN([WINE_CONFIG_PROGRAM],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
416 AS_VAR_PUSHDEF([ac_enable],m4_default([$3],[enable_]$1))dnl
417 wine_fn_config_program [$1] ac_enable [$2]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 wine_fn_config_tool $1])
445 dnl **** Add a message to the list displayed at the end ****
447 dnl Usage: WINE_NOTICE(notice)
448 dnl Usage: WINE_NOTICE_WITH(with_flag, test, notice)
449 dnl Usage: WINE_WARNING(warning)
450 dnl Usage: WINE_WARNING_WITH(with_flag, test, warning)
451 dnl Usage: WINE_PRINT_MESSAGES
453 AC_DEFUN([WINE_NOTICE],[AS_VAR_APPEND([wine_notices],["|$1"])])
454 AC_DEFUN([WINE_WARNING],[AS_VAR_APPEND([wine_warnings],["|$1"])])
456 AC_DEFUN([WINE_NOTICE_WITH],[AS_IF([$2],[case "x$with_$1" in
457 x) WINE_NOTICE([$3]) ;;
460 This is an error since --with-$1 was requested.]) ;;
463 AC_DEFUN([WINE_WARNING_WITH],[AS_IF([$2],[case "x$with_$1" in
464 x) WINE_WARNING([$3]) ;;
467 This is an error since --with-$1 was requested.]) ;;
470 AC_DEFUN([WINE_ERROR_WITH],[AS_IF([$2],[case "x$with_$1" in
473 Use the --without-$1 option if you really want this.]) ;;
476 AC_DEFUN([WINE_PRINT_MESSAGES],[ac_save_IFS="$IFS"
477 if test "x$wine_notices != "x; then
480 for msg in $wine_notices; do
482 if test -n "$msg"; then
483 AC_MSG_NOTICE([$msg])
488 for msg in $wine_warnings; do
490 if test -n "$msg"; then
498 dnl compile-command: "autoreconf --warnings=all"