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 [wine_fn_append_file ()
145 AS_VAR_APPEND($[1]," \\$as_nl $[2]")
148 wine_fn_append_rule ()
150 AS_VAR_APPEND($[1],"$as_nl$[2]")
153 wine_fn_config_makefile ()
157 wine_fn_append_file ALL_DIRS $ac_dir
158 wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
159 "$ac_dir/__clean__ $ac_dir/__install__ $ac_dir/__install-dev__ $ac_dir/__install-lib__ $ac_dir/__uninstall__ $ac_dir: $ac_dir/Makefile
160 $ac_dir/Makefile $ac_dir/__depend__: $ac_dir/Makefile.in config.status $ac_deps
161 @./config.status --file $ac_dir/Makefile && cd $ac_dir && \$(MAKE) depend"
164 wine_fn_config_lib ()
168 wine_fn_append_file ALL_DIRS $ac_dir
169 wine_fn_append_file ALL_STATICLIB_DIRS $ac_dir
170 wine_fn_append_file ALL_STATIC_LIBS $ac_dir/lib$ac_name.a
171 wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
172 "$ac_dir/__install__ $ac_dir/__install-dev__: $ac_dir
173 $ac_dir $ac_dir/lib$ac_name.cross.a: tools/widl tools/winebuild tools/winegcc include
174 $ac_dir/lib$ac_name.cross.a: $ac_dir/Makefile dummy
175 @cd $ac_dir && \$(MAKE) lib$ac_name.cross.a
176 $ac_dir/__clean__ $ac_dir/__install-lib__ $ac_dir/__uninstall__ $ac_dir: $ac_dir/Makefile
177 $ac_dir/Makefile $ac_dir/__depend__: $ac_dir/Makefile.in config.status dlls/Makeimplib.rules \$(MAKEDEP)
178 @./config.status --file $ac_dir/Makefile && cd $ac_dir && \$(MAKE) depend"
181 wine_fn_config_dll ()
187 ac_file="dlls/$ac_dir/lib$ac_implib"
188 ac_deps="tools/widl tools/winebuild tools/winegcc include"
190 wine_fn_append_file ALL_DIRS dlls/$ac_dir
191 wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
192 "dlls/$ac_dir dlls/$ac_dir/__install__ dlls/$ac_dir/__install-lib__ dlls/$ac_dir/__install-dev__: __builddeps__ dlls/$ac_dir/Makefile
193 dlls/$ac_dir/__clean__ dlls/$ac_dir/__uninstall__ dlls/$ac_dir: dlls/$ac_dir/Makefile
194 dlls/$ac_dir/Makefile dlls/$ac_dir/__depend__: dlls/$ac_dir/Makefile.in config.status dlls/Makedll.rules \$(MAKEDEP)
195 @./config.status --file dlls/$ac_dir/Makefile && cd dlls/$ac_dir && \$(MAKE) depend"
196 AS_VAR_IF([$ac_enable],[no],
197 dnl enable_win16 is special in that it disables import libs too
198 [test "$ac_enable" != enable_win16 || return 0],
199 [wine_fn_append_file ALL_DLL_DIRS dlls/$ac_dir])
201 if test -n "$ac_implibsrc"
203 wine_fn_append_file ALL_IMPORT_LIBS $ac_file.$IMPLIBEXT
204 wine_fn_append_file ALL_IMPORT_LIBS $ac_file.$STATIC_IMPLIBEXT
205 wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
206 "$ac_file.$IMPLIBEXT $ac_file.$STATIC_IMPLIBEXT $ac_file.cross.a: $ac_deps
207 $ac_file.def: dlls/$ac_dir/$ac_dir.spec dlls/$ac_dir/Makefile
208 @cd dlls/$ac_dir && \$(MAKE) \`basename \$[@]\`
209 $ac_file.$STATIC_IMPLIBEXT $ac_file.cross.a: dlls/$ac_dir/Makefile dummy
210 @cd dlls/$ac_dir && \$(MAKE) \`basename \$[@]\`"
211 elif test -n "$ac_implib"
213 wine_fn_append_file ALL_IMPORT_LIBS $ac_file.$IMPLIBEXT
214 wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
215 "$ac_file.$IMPLIBEXT $ac_file.cross.a: $ac_deps
216 $ac_file.$IMPLIBEXT $ac_file.cross.a: dlls/$ac_dir/$ac_dir.spec dlls/$ac_dir/Makefile
217 @cd dlls/$ac_dir && \$(MAKE) \`basename \$[@]\`"
219 if test "$ac_dir" != "$ac_implib"
221 wine_fn_append_file ALL_IMPORT_LIBS dlls/lib$ac_implib.$IMPLIBEXT
222 wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
223 "dlls/lib$ac_implib.$IMPLIBEXT: $ac_file.$IMPLIBEXT
224 \$(RM) \$[@] && \$(LN_S) $ac_dir/lib$ac_implib.$IMPLIBEXT \$[@]
225 dlls/lib$ac_implib.cross.a: $ac_file.cross.a
226 \$(RM) \$[@] && \$(LN_S) $ac_dir/lib$ac_implib.cross.a \$[@]
228 \$(RM) dlls/lib$ac_implib.$IMPLIBEXT"
233 wine_fn_config_program ()
238 wine_fn_append_file ALL_DIRS programs/$ac_dir
239 wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
240 "programs/$ac_dir programs/$ac_dir/__install__ programs/$ac_dir/__install-lib__: __builddeps__ programs/$ac_dir/Makefile
241 programs/$ac_dir/__clean__ programs/$ac_dir/__install-dev__ programs/$ac_dir/__uninstall__ programs/$ac_dir: programs/$ac_dir/Makefile
242 programs/$ac_dir/Makefile programs/$ac_dir/__depend__: programs/$ac_dir/Makefile.in config.status programs/Makeprog.rules \$(MAKEDEP)
243 @./config.status --file programs/$ac_dir/Makefile && cd programs/$ac_dir && \$(MAKE) depend"
244 AS_VAR_IF([$ac_enable],[no],,[wine_fn_append_file ALL_PROGRAM_DIRS programs/$ac_dir
246 installbin) wine_fn_append_file ALL_INSTALL_DIRS programs/$ac_dir
247 wine_fn_append_file ALL_PROGRAM_BIN_INSTALL_DIRS programs/$ac_dir ;;
248 install) wine_fn_append_file ALL_INSTALL_DIRS programs/$ac_dir ;;
252 wine_fn_config_test ()
256 wine_fn_append_file ALL_TEST_BINARIES $ac_name.exe
257 wine_fn_append_rule ALL_WINETEST_DEPENDS \
258 "$ac_name.exe: \$(TOPOBJDIR)/$ac_dir/$ac_name.exe$DLLEXT
259 cp \$(TOPOBJDIR)/$ac_dir/$ac_name.exe$DLLEXT \$[@] && \$(STRIP) \$[@]
261 echo \"$ac_name.exe TESTRES \\\"$ac_name.exe\\\"\" >\$[@] || (\$(RM) \$[@] && false)
262 $ac_name.res: $ac_name.rc $ac_name.exe"
263 wine_fn_append_file ALL_DIRS $ac_dir
264 wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
265 "$ac_dir: __builddeps__
266 $ac_dir/__crosstest__: __buildcrossdeps__
267 $ac_dir/__clean__ $ac_dir/__crosstest__ $ac_dir: $ac_dir/Makefile
268 $ac_dir/Makefile $ac_dir/__depend__: $ac_dir/Makefile.in config.status Maketest.rules \$(MAKEDEP)
269 @./config.status --file $ac_dir/Makefile && cd $ac_dir && \$(MAKE) depend"
270 AS_VAR_IF([enable_tests],[no],,[wine_fn_append_file ALL_TEST_DIRS $ac_dir])
273 wine_fn_config_tool ()
277 if test "$ac_dir" != tools
279 dnl makedep is in tools so tools makefile cannot depend on it
280 ac_deps="$ac_deps \$(MAKEDEP)"
282 wine_fn_append_file ALL_DIRS $ac_dir
283 wine_fn_append_rule ALL_MAKEFILE_DEPENDS \
284 "$ac_dir/__clean__ $ac_dir/__install__ $ac_dir/__install-dev__ $ac_dir/__install-lib__ $ac_dir/__uninstall__ $ac_dir: $ac_dir/Makefile
285 $ac_dir/Makefile $ac_dir/__depend__: $ac_dir/Makefile.in config.status $ac_deps
286 @./config.status --file $ac_dir/Makefile && cd $ac_dir && \$(MAKE) depend"
287 AS_VAR_IF([enable_tools],[no],,[wine_fn_append_file ALL_TOOL_DIRS $ac_dir])
290 dnl **** Define helper function to append a file to a makefile file list ****
292 dnl Usage: WINE_APPEND_FILE(var,file)
294 AC_DEFUN([WINE_APPEND_FILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])wine_fn_append_file $1 "$2"])
296 dnl **** Define helper function to append a rule to a makefile command list ****
298 dnl Usage: WINE_APPEND_RULE(var,rule)
300 AC_DEFUN([WINE_APPEND_RULE],[AC_REQUIRE([WINE_CONFIG_HELPERS])wine_fn_append_rule $1 "$2"])
302 dnl **** Create nonexistent directories from config.status ****
304 dnl Usage: WINE_CONFIG_EXTRA_DIR(dirname)
306 AC_DEFUN([WINE_CONFIG_EXTRA_DIR],
307 [AC_CONFIG_COMMANDS([$1],[test -d "$1" || { AC_MSG_NOTICE([creating $1]); AS_MKDIR_P("$1"); }])])
309 dnl **** Create symlinks from config.status ****
311 dnl Usage: WINE_CONFIG_SYMLINK(name,target)
313 AC_DEFUN([WINE_CONFIG_SYMLINK],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
314 AC_CONFIG_LINKS([$1:]m4_default([$2],[$1]))dnl
315 m4_if([$2],,[test "$srcdir" = "." || ])WINE_APPEND_FILE(ALL_SYMLINKS,[$1])])
317 dnl **** Create a make rules file from config.status ****
319 dnl Usage: WINE_CONFIG_MAKERULES(file,var,deps)
321 AC_DEFUN([WINE_CONFIG_MAKERULES],
322 [WINE_APPEND_FILE(ALL_MAKERULES,[$1])
323 WINE_APPEND_RULE(ALL_MAKEFILE_DEPENDS,[$1: m4_ifval([$3],[$1.in $3],[$1.in]) config.status])
325 AC_SUBST_FILE([$2])dnl
326 AC_CONFIG_FILES([$1])])
328 dnl **** Create a makefile from config.status ****
330 dnl Usage: WINE_CONFIG_MAKEFILE(file,deps,var,enable)
332 AC_DEFUN([WINE_CONFIG_MAKEFILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
333 m4_pushdef([ac_dir],m4_bpatsubst([$1],[^\(\(.*\)/\)?Makefile$],[\2]))dnl
334 m4_pushdef([ac_name],m4_bpatsubst(ac_dir,[.*/\(.*\)$],[\1]))dnl
335 m4_if(ac_dir,,WINE_APPEND_RULE(ALL_MAKEFILE_DEPENDS,[$1: $1.in $2 config.status])
336 AC_CONFIG_FILES([$1]),
337 [wine_fn_config_makefile ac_dir m4_if(ac_dir,tools,[$2],["$2 \$(MAKEDEP)"])
338 AS_VAR_PUSHDEF([ac_enable],m4_default([$4],[enable_]ac_name))dnl
339 m4_ifval([$3],[test "x$ac_enable" != xno]m4_foreach([ac_var],[$3],[ && WINE_APPEND_FILE(ac_var,ac_dir)]))
340 AS_VAR_POPDEF([ac_enable])])dnl
341 m4_popdef([ac_dir])dnl
342 m4_popdef([ac_name])])
344 dnl **** Create a dll makefile from config.status ****
346 dnl Usage: WINE_CONFIG_DLL(name,enable,implib,implibsrc)
348 AC_DEFUN([WINE_CONFIG_DLL],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
349 AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]$1))dnl
350 wine_fn_config_dll [$1] ac_enable [$3] m4_ifval([$4],["$4"])dnl
351 AS_VAR_POPDEF([ac_enable])])
353 dnl **** Create a program makefile from config.status ****
355 dnl Usage: WINE_CONFIG_PROGRAM(name,install,enable)
357 AC_DEFUN([WINE_CONFIG_PROGRAM],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
358 AS_VAR_PUSHDEF([ac_enable],m4_default([$3],[enable_]$1))dnl
359 wine_fn_config_program [$1] ac_enable [$2]dnl
360 AS_VAR_POPDEF([ac_enable])])
362 dnl **** Create a test makefile from config.status ****
364 dnl Usage: WINE_CONFIG_TEST(dir)
366 AC_DEFUN([WINE_CONFIG_TEST],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
367 m4_pushdef([ac_suffix],m4_if(m4_substr([$1],0,9),[programs/],[.exe_test],[_test]))dnl
368 m4_pushdef([ac_name],[m4_bpatsubst([$1],[.*/\(.*\)/tests$],[\1])])dnl
369 wine_fn_config_test $1 ac_name[]ac_suffix[]dnl
370 m4_popdef([ac_suffix])dnl
371 m4_popdef([ac_name])])
373 dnl **** Create a static lib makefile from config.status ****
375 dnl Usage: WINE_CONFIG_LIB(name)
377 AC_DEFUN([WINE_CONFIG_LIB],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
378 wine_fn_config_lib $1])
380 dnl **** Create a tool makefile from config.status ****
382 dnl Usage: WINE_CONFIG_TOOL(name)
384 AC_DEFUN([WINE_CONFIG_TOOL],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
385 wine_fn_config_tool $1])
387 dnl **** Add a message to the list displayed at the end ****
389 dnl Usage: WINE_NOTICE(notice)
390 dnl Usage: WINE_NOTICE_WITH(with_flag, test, notice)
391 dnl Usage: WINE_WARNING(warning)
392 dnl Usage: WINE_WARNING_WITH(with_flag, test, warning)
393 dnl Usage: WINE_PRINT_MESSAGES
395 AC_DEFUN([WINE_NOTICE],[AS_VAR_APPEND([wine_notices],["|$1"])])
396 AC_DEFUN([WINE_WARNING],[AS_VAR_APPEND([wine_warnings],["|$1"])])
398 AC_DEFUN([WINE_NOTICE_WITH],[AS_IF([$2],[case "x$with_$1" in
399 x) WINE_NOTICE([$3]) ;;
402 This is an error since --with-$1 was requested.]) ;;
405 AC_DEFUN([WINE_WARNING_WITH],[AS_IF([$2],[case "x$with_$1" in
406 x) WINE_WARNING([$3]) ;;
409 This is an error since --with-$1 was requested.]) ;;
412 AC_DEFUN([WINE_ERROR_WITH],[AS_IF([$2],[case "x$with_$1" in
415 Use the --without-$1 option if you really want this.]) ;;
418 AC_DEFUN([WINE_PRINT_MESSAGES],[ac_save_IFS="$IFS"
419 if test "x$wine_notices != "x; then
422 for msg in $wine_notices; do
424 if test -n "$msg"; then
425 AC_MSG_NOTICE([$msg])
430 for msg in $wine_warnings; do
432 if test -n "$msg"; then
440 dnl compile-command: "autoreconf --warnings=all"