aclocal.m4 25.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
dnl Macros used to build the Wine configure script
dnl
dnl Copyright 2002 Alexandre Julliard
dnl
dnl This library is free software; you can redistribute it and/or
dnl modify it under the terms of the GNU Lesser General Public
dnl License as published by the Free Software Foundation; either
dnl version 2.1 of the License, or (at your option) any later version.
dnl
dnl This library is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
dnl Lesser General Public License for more details.
dnl
dnl You should have received a copy of the GNU Lesser General Public
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 20 21 22 23
dnl As a special exception to the GNU Lesser General Public License,
dnl if you distribute this file as part of a program that contains a
dnl configuration script generated by Autoconf, you may include it
dnl under the same distribution terms that you use for the rest of
dnl that program.
24

25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
dnl WINE_CHECK_HOST_TOOL(VARIABLE, PROG-TO-CHECK-FOR, [VALUE-IF-NOT-FOUND], [PATH])
dnl
dnl Like AC_CHECK_TOOL but without the broken fallback to non-prefixed name
dnl
AC_DEFUN([WINE_CHECK_HOST_TOOL],
[if test -n "$ac_tool_prefix"; then
  AC_CHECK_PROG([$1],[${ac_tool_prefix}$2],[${ac_tool_prefix}$2],,[$4])
fi
if test -n "$ac_cv_prog_$1"; then
  $1="$ac_cv_prog_$1"
elif test "$cross_compiling" != yes; then
  unset ac_cv_prog_$1
  AC_CHECK_PROG([$1],[$2],[$2],[$3],[$4])
fi])

40
dnl **** Initialize the programs used by other checks ****
41
dnl
42
dnl Usage: WINE_PATH_SONAME_TOOLS
43
dnl Usage: WINE_PATH_PKG_CONFIG
44
dnl
45 46
AC_DEFUN([WINE_PATH_SONAME_TOOLS],
[AC_PATH_PROG(LDD,ldd,true,/sbin:/usr/sbin:$PATH)
47 48 49
AC_CHECK_TOOL(READELF,[readelf],true)])

AC_DEFUN([WINE_PATH_PKG_CONFIG],
50
[WINE_CHECK_HOST_TOOL(PKG_CONFIG,[pkg-config])])
51 52 53

dnl **** Extract the soname of a library ****
dnl
54
dnl Usage: WINE_CHECK_SONAME(library, function, [action-if-found, [action-if-not-found, [other_libraries, [pattern]]]])
55
dnl
56
AC_DEFUN([WINE_CHECK_SONAME],
57
[AC_REQUIRE([WINE_PATH_SONAME_TOOLS])dnl
58
AS_VAR_PUSHDEF([ac_Lib],[ac_cv_lib_soname_$1])dnl
59 60
m4_pushdef([ac_lib_pattern],m4_default([$6],[lib$1]))dnl
AC_MSG_CHECKING([for -l$1])
61
AC_CACHE_VAL(ac_Lib,
62 63
[ac_check_soname_save_LIBS=$LIBS
LIBS="-l$1 $5 $LIBS"
64
  AC_LINK_IFELSE([AC_LANG_CALL([], [$2])],
65
  [case "$LIBEXT" in
66
    dll) AS_VAR_SET(ac_Lib,[`$ac_cv_path_LDD conftest.exe | grep "$1" | sed -e "s/dll.*/dll/"';2,$d'`]) ;;
67
    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'`]) ;;
68 69 70
    *) 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'`])
       AS_IF([test "x]AS_VAR_GET(ac_Lib)[" = x],
             [AS_VAR_SET(ac_Lib,[`$LDD conftest$ac_exeext | grep "ac_lib_pattern\\.$LIBEXT" | sed -e "s/^.*\(ac_lib_pattern\.$LIBEXT[[^	 ]]*\).*$/\1/"';2,$d'`])]) ;;
71
  esac])
72
  LIBS=$ac_check_soname_save_LIBS])dnl
73
AS_IF([test "x]AS_VAR_GET(ac_Lib)[" = "x"],
74 75
      [AC_MSG_RESULT([not found])
       $4],
76 77
      [AC_MSG_RESULT(AS_VAR_GET(ac_Lib))
       AC_DEFINE_UNQUOTED(AS_TR_CPP(SONAME_LIB$1),["]AS_VAR_GET(ac_Lib)["],
78 79 80
                          [Define to the soname of the lib$1 library.])
       $3])dnl
m4_popdef([ac_lib_pattern])dnl
81
AS_VAR_POPDEF([ac_Lib])])
82

83 84
dnl **** Get flags from pkg-config or alternate xxx-config program ****
dnl
85
dnl Usage: WINE_PACKAGE_FLAGS(var,pkg-name,[default-lib,[cflags-alternate,libs-alternate,[checks]]])
86 87 88
dnl
AC_DEFUN([WINE_PACKAGE_FLAGS],
[AC_REQUIRE([WINE_PATH_PKG_CONFIG])dnl
89 90 91 92
AS_VAR_PUSHDEF([ac_cflags],[[$1]_CFLAGS])dnl
AS_VAR_PUSHDEF([ac_libs],[[$1]_LIBS])dnl
AC_ARG_VAR(ac_cflags, [C compiler flags for $2, overriding pkg-config])dnl
AS_IF([test -n "$ac_cflags"],[],
93
      [test -n "$PKG_CONFIG"],
94
      [ac_cflags=`$PKG_CONFIG --cflags [$2] 2>/dev/null`])
95
m4_ifval([$4],[test "$cross_compiling" = yes || ac_cflags=[$]{ac_cflags:-[$4]}])
96 97
AC_ARG_VAR(ac_libs, [Linker flags for $2, overriding pkg-config])dnl
AS_IF([test -n "$ac_libs"],[],
98
      [test -n "$PKG_CONFIG"],
99
      [ac_libs=`$PKG_CONFIG --libs [$2] 2>/dev/null`])
100
m4_ifval([$5],[test "$cross_compiling" = yes || ac_libs=[$]{ac_libs:-[$5]}])
101 102 103 104 105
m4_ifval([$3],[ac_libs=[$]{ac_libs:-"$3"}])
ac_save_CPPFLAGS=$CPPFLAGS
CPPFLAGS="$CPPFLAGS $ac_cflags"
$6
CPPFLAGS=$ac_save_CPPFLAGS
106 107
test -z "$ac_cflags" || ac_cflags=`echo " $ac_cflags" | sed 's/ -I\([[^/]]\)/ -I\$(top_builddir)\/\1/g'`
test -z "$ac_libs" || ac_libs=`echo " $ac_libs" | sed 's/ -L\([[^/]]\)/ -L\$(top_builddir)\/\1/g'`
108 109
AS_VAR_POPDEF([ac_libs])dnl
AS_VAR_POPDEF([ac_cflags])])dnl
110

111 112 113 114 115
dnl **** Link C code with an assembly file ****
dnl
dnl Usage: WINE_TRY_ASM_LINK(asm-code,includes,function,[action-if-found,[action-if-not-found]])
dnl
AC_DEFUN([WINE_TRY_ASM_LINK],
116
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[$2]],[[asm($1); $3]])],[$4],[$5])])
117 118 119 120 121

dnl **** Check if we can link an empty program with special CFLAGS ****
dnl
dnl Usage: WINE_TRY_CFLAGS(flags,[action-if-yes,[action-if-no]])
dnl
122 123
dnl The default action-if-yes is to append the flags to EXTRACFLAGS.
dnl
124
AC_DEFUN([WINE_TRY_CFLAGS],
125 126
[AS_VAR_PUSHDEF([ac_var], ac_cv_cflags_[[$1]])dnl
AC_CACHE_CHECK([whether the compiler supports $1], ac_var,
127 128
[ac_wine_try_cflags_saved=$CFLAGS
CFLAGS="$CFLAGS $1"
129
AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(int argc, char **argv) { return 0; }]])],
130
               [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
131
CFLAGS=$ac_wine_try_cflags_saved])
132 133 134
AS_IF([test AS_VAR_GET(ac_var) = yes],
      [m4_default([$2], [EXTRACFLAGS="$EXTRACFLAGS $1"])], [$3])dnl
AS_VAR_POPDEF([ac_var])])
135

136 137 138 139 140 141 142
dnl **** Check if we can link an empty shared lib (no main) with special CFLAGS ****
dnl
dnl Usage: WINE_TRY_SHLIB_FLAGS(flags,[action-if-yes,[action-if-no]])
dnl
AC_DEFUN([WINE_TRY_SHLIB_FLAGS],
[ac_wine_try_cflags_saved=$CFLAGS
CFLAGS="$CFLAGS $1"
143
AC_LINK_IFELSE([AC_LANG_SOURCE([void myfunc() {}])],[$2],[$3])
144 145
CFLAGS=$ac_wine_try_cflags_saved])

146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
dnl **** Check whether we need to define a symbol on the compiler command line ****
dnl
dnl Usage: WINE_CHECK_DEFINE(name),[action-if-yes,[action-if-no]])
dnl
AC_DEFUN([WINE_CHECK_DEFINE],
[AS_VAR_PUSHDEF([ac_var],[ac_cv_cpp_def_$1])dnl
AC_CACHE_CHECK([whether we need to define $1],ac_var,
    AC_EGREP_CPP(yes,[#ifndef $1
yes
#endif],
    [AS_VAR_SET(ac_var,yes)],[AS_VAR_SET(ac_var,no)]))
AS_IF([test AS_VAR_GET(ac_var) = yes],
      [CFLAGS="$CFLAGS -D$1"
  LINTFLAGS="$LINTFLAGS -D$1"])dnl
AS_VAR_POPDEF([ac_var])])

162 163 164 165 166 167 168 169 170 171
dnl **** Check for functions with some extra libraries ****
dnl
dnl Usage: WINE_CHECK_LIB_FUNCS(funcs,libs,[action-if-found,[action-if-not-found]])
dnl
AC_DEFUN([WINE_CHECK_LIB_FUNCS],
[ac_wine_check_funcs_save_LIBS="$LIBS"
LIBS="$LIBS $2"
AC_CHECK_FUNCS([$1],[$3],[$4])
LIBS="$ac_wine_check_funcs_save_LIBS"])

172 173 174 175 176
dnl **** Check for a mingw program, trying the various mingw prefixes ****
dnl
dnl Usage: WINE_CHECK_MINGW_PROG(variable,prog,[value-if-not-found],[path])
dnl
AC_DEFUN([WINE_CHECK_MINGW_PROG],
177 178
[case "$host_cpu" in
  i[[3456789]]86*)
179
    ac_prefix_list="m4_foreach([ac_wine_prefix],[w64-mingw32, pc-mingw32, mingw32msvc, mingw32],
180 181
                        m4_foreach([ac_wine_cpu],[i686,i586,i486,i386],[ac_wine_cpu-ac_wine_prefix-$2 ]))
                        mingw32-$2" ;;
182
  x86_64)
183 184
    ac_prefix_list="m4_foreach([ac_wine_prefix],[pc-mingw32, w64-mingw32, mingw32msvc],
                        m4_foreach([ac_wine_cpu],[x86_64,amd64],[ac_wine_cpu-ac_wine_prefix-$2 ]))" ;;
185 186 187 188
  *)
    ac_prefix_list="" ;;
esac
AC_CHECK_PROGS([$1],[$ac_prefix_list],[$3],[$4])])
189 190


191 192 193 194 195
dnl **** Define helper functions for creating config.status files ****
dnl
dnl Usage: AC_REQUIRE([WINE_CONFIG_HELPERS])
dnl
AC_DEFUN([WINE_CONFIG_HELPERS],
196 197
[wine_rules_file=conf$$rules.make
rm -f $wine_rules_file
198
ALL_POT_FILES=""
199
AC_SUBST(ALL_TEST_RESOURCES,"")
200 201

wine_fn_append_file ()
202 203 204
{
    AS_VAR_APPEND($[1]," \\$as_nl	$[2]")
}
205

206 207
wine_fn_append_rule ()
{
208
    AS_ECHO("$[1]") >>$wine_rules_file
209 210
}

211 212
wine_fn_has_flag ()
{
213
    expr ",$ac_flags," : ".*,$[1],.*" >/dev/null
214 215
}

216
wine_fn_depend_rules ()
217
{
218
    ac_alldeps=$[1]
219 220
    ac_makedep="\$(MAKEDEP)"
    ac_input=Make.vars.in:$ac_dir/Makefile.in
221
    if test $ac_dir != tools
222 223
    then
        dnl makedep is in tools so tools makefile cannot depend on it
224
        ac_alldeps="$[1] $ac_makedep"
225
    else
226
        ac_alldeps="$[1] include/config.h"
227
    fi
228 229 230
    case $[1] in
      *.in) ac_input=$ac_input:$[1] ;;
      *) ac_makedep="$[1] $ac_makedep" ;;
231
    esac
232

233
    wine_fn_append_rule \
234
"$ac_dir/Makefile: $ac_dir/Makefile.in Make.vars.in config.status $ac_alldeps
235
	@./config.status --file $ac_dir/Makefile:$ac_input && cd $ac_dir && \$(MAKE) depend
236 237 238
depend: $ac_dir/depend
.PHONY: $ac_dir/depend
$ac_dir/depend: $ac_makedep dummy
239
	@./config.status --file $ac_dir/Makefile:$ac_input && cd $ac_dir && \$(MAKE) depend"
240 241
}

242 243
wine_fn_pot_rules ()
{
244
    test "x$with_gettextpo" = xyes || return
245

246
    if wine_fn_has_flag mc
247 248
    then
        wine_fn_append_file ALL_POT_FILES $ac_dir/msg.pot
249
        wine_fn_append_rule \
250 251 252 253
"$ac_dir/msg.pot: $ac_dir/Makefile dummy
	@cd $ac_dir && \$(MAKE) msg.pot
$ac_dir/msg.pot: tools/wmc include"
    fi
254
    if wine_fn_has_flag po
255 256
    then
        wine_fn_append_file ALL_POT_FILES $ac_dir/rsrc.pot
257
        wine_fn_append_rule \
258 259
"$ac_dir/rsrc.pot: $ac_dir/Makefile dummy
	@cd $ac_dir && \$(MAKE) rsrc.pot
Rafał Mużyło's avatar
Rafał Mużyło committed
260
$ac_dir/rsrc.pot: tools/wrc include"
261 262 263
    fi
}

264
wine_fn_all_rules ()
265
{
266
    ac_rules=$[1]
267

268
    wine_fn_depend_rules ${ac_rules:-Make.rules}
269
    wine_fn_append_rule \
270 271
"all: $ac_dir
.PHONY: $ac_dir
272
$ac_dir: $ac_dir/Makefile dummy
273
	@cd $ac_dir && \$(MAKE)"
274 275 276 277
}

wine_fn_install_rules ()
{
278
    wine_fn_has_flag install-lib || wine_fn_has_flag install-dev || return
279

280
    wine_fn_append_rule \
281 282
".PHONY: $ac_dir/install $ac_dir/uninstall
$ac_dir/install:: $ac_dir
283
	@cd $ac_dir && \$(MAKE) install
284
$ac_dir/uninstall:: $ac_dir/Makefile
285
	@cd $ac_dir && \$(MAKE) uninstall
286 287
install:: $ac_dir/install
__uninstall__: $ac_dir/uninstall"
288

289
    if wine_fn_has_flag install-lib
290
    then
291
        wine_fn_append_rule \
292 293
".PHONY: $ac_dir/install-lib
$ac_dir/install-lib:: $ac_dir
294
	@cd $ac_dir && \$(MAKE) install-lib
295
install-lib:: $ac_dir/install-lib"
296 297
    fi

298
    if wine_fn_has_flag install-dev
299
    then
300
        wine_fn_append_rule \
301 302
".PHONY: $ac_dir/install-dev
$ac_dir/install-dev:: $ac_dir
303
	@cd $ac_dir && \$(MAKE) install-dev
304
install-dev:: $ac_dir/install-dev"
305
    fi
306 307
}

308 309 310 311
wine_fn_clean_rules ()
{
    ac_clean=$[@]

312
    if wine_fn_has_flag clean
313 314
    then
        wine_fn_append_rule \
315 316 317
"__clean__: $ac_dir/clean
.PHONY: $ac_dir/clean
$ac_dir/clean: $ac_dir/Makefile
318 319 320 321 322 323 324 325 326
	@cd $ac_dir && \$(MAKE) clean
	\$(RM) $ac_dir/Makefile"
    else
        wine_fn_append_rule \
"clean::
	\$(RM) \$(CLEAN_FILES:%=$ac_dir/%) $ac_clean $ac_dir/Makefile"
    fi
}

327 328 329 330 331 332 333 334 335
wine_fn_disabled_rules ()
{
    ac_clean=$[@]

    wine_fn_append_rule \
"clean::
	\$(RM) \$(CLEAN_FILES:%=$ac_dir/%) $ac_clean $ac_dir/Makefile"
}

336 337 338 339 340 341
wine_fn_config_makefile ()
{
    ac_dir=$[1]
    ac_enable=$[2]
    ac_flags=$[3]

342 343 344 345
    AS_VAR_IF([$ac_enable],[no],[wine_fn_disabled_rules; return])
    wine_fn_all_rules
    wine_fn_install_rules
    wine_fn_clean_rules
346 347
}

348 349 350
wine_fn_config_lib ()
{
    ac_name=$[1]
351
    ac_flags=$[2]
352
    ac_dir=dlls/$ac_name
353

354
    wine_fn_all_rules Make.rules.in
355
    wine_fn_clean_rules
356

357
    wine_fn_append_rule \
358 359
".PHONY: $ac_dir/install $ac_dir/uninstall
$ac_dir/install:: $ac_dir \$(DESTDIR)\$(dlldir)
360
	\$(INSTALL_DATA) $ac_dir/lib$ac_name.a \$(DESTDIR)\$(dlldir)/lib$ac_name.a
361
$ac_dir/uninstall::
362
	\$(RM) \$(DESTDIR)\$(dlldir)/lib$ac_name.a
363 364
install install-dev:: $ac_dir/install
__uninstall__: $ac_dir/uninstall
365
__builddeps__: $ac_dir
366
$ac_dir: tools/widl tools/winebuild tools/winegcc include"
367 368
}

369 370
wine_fn_config_dll ()
{
371 372
    ac_name=$[1]
    ac_dir=dlls/$ac_name
373
    ac_enable=$[2]
374
    ac_flags=$[3]
375
    ac_implib=${4:-$ac_name}
376
    ac_file=$ac_dir/lib$ac_implib
377
    ac_dll=$ac_name
378
    ac_deps="tools/widl tools/winebuild tools/winegcc include"
379 380
    ac_implibflags=""

381
    case $ac_name in
382
      *16) ac_implibflags=" -m16" ;;
383 384
      *.*) ;;
      *)   ac_dll=$ac_dll.dll ;;
385
    esac
386

387
    ac_clean=
388 389 390
    wine_fn_has_flag implib && ac_clean="$ac_clean $ac_file.$IMPLIBEXT"
    wine_fn_has_flag mc && ac_clean="$ac_clean $ac_dir/msg.pot"
    wine_fn_has_flag po && ac_clean="$ac_clean $ac_dir/rsrc.pot"
391

392 393
    AS_VAR_IF([$ac_enable],[no],
              dnl enable_win16 is special in that it disables import libs too
394
              [if wine_fn_has_flag implib && test "$ac_enable" != enable_win16
395
               then
396
                   wine_fn_depend_rules Make.rules.in
397
                   wine_fn_clean_rules $ac_clean
398
               else
399
                   wine_fn_disabled_rules $ac_clean
400 401 402
                   return
               fi],

403
              [wine_fn_all_rules Make.rules.in
404
               wine_fn_clean_rules $ac_clean
405
               wine_fn_append_rule \
406
"$ac_dir: __builddeps__
407
manpages htmlpages sgmlpages xmlpages:: $ac_dir/Makefile
408
	@cd $ac_dir && \$(MAKE) \$[@]
409 410 411
.PHONY: $ac_dir/install-lib $ac_dir/uninstall
install install-lib:: $ac_dir/install-lib
__uninstall__: $ac_dir/uninstall"
412 413 414
                if test -n "$DLLEXT"
                then
                    wine_fn_append_rule \
415
"$ac_dir/install-lib:: $ac_dir \$(DESTDIR)\$(dlldir) \$(DESTDIR)\$(fakedlldir)
416
	\$(INSTALL_PROGRAM) $ac_dir/$ac_dll$DLLEXT \$(DESTDIR)\$(dlldir)/$DLLPREFIX$ac_dll$DLLEXT
417
	\$(INSTALL_DATA) $ac_dir/$ac_dll.fake \$(DESTDIR)\$(fakedlldir)/$ac_dll
418
$ac_dir/uninstall::
419
	\$(RM) \$(DESTDIR)\$(dlldir)/$DLLPREFIX$ac_dll$DLLEXT \$(DESTDIR)\$(fakedlldir)/$ac_dll"
420 421
                else
                    wine_fn_append_rule \
422
"$ac_dir/install-lib:: $ac_dir \$(DESTDIR)\$(dlldir)
423
	\$(INSTALL_PROGRAM) $ac_dir/$ac_dll \$(DESTDIR)\$(dlldir)/$ac_dll
424
$ac_dir/uninstall::
425
	\$(RM) \$(DESTDIR)\$(dlldir)/$ac_dll"
426
                fi
427

428
                wine_fn_pot_rules])
429

430
    if wine_fn_has_flag staticimplib
431
    then
432
        wine_fn_append_rule \
433 434
"__builddeps__: $ac_file.$IMPLIBEXT $ac_file.$STATIC_IMPLIBEXT
$ac_file.$IMPLIBEXT $ac_file.$STATIC_IMPLIBEXT $ac_file.cross.a: $ac_deps
435 436
$ac_file.def: $ac_dir/$ac_name.spec $ac_dir/Makefile \$(WINEBUILD)
	\$(WINEBUILD) \$(TARGETFLAGS)$ac_implibflags -w --def -o \$[@] --export \$(srcdir)/$ac_dir/$ac_name.spec
437 438
$ac_file.$STATIC_IMPLIBEXT: $ac_dir/Makefile dummy
	@cd $ac_dir && \$(MAKE) lib$ac_implib.$STATIC_IMPLIBEXT
439 440
.PHONY: $ac_dir/install-dev $ac_dir/uninstall
$ac_dir/install-dev:: $ac_file.$IMPLIBEXT \$(DESTDIR)\$(dlldir)
441
	\$(INSTALL_DATA) $ac_file.$IMPLIBEXT \$(DESTDIR)\$(dlldir)/lib$ac_implib.$IMPLIBEXT
442
$ac_dir/uninstall::
443
	\$(RM) \$(DESTDIR)\$(dlldir)/lib$ac_implib.$IMPLIBEXT
444 445
install install-dev:: $ac_dir/install-dev
__uninstall__: $ac_dir/uninstall"
446 447 448

        if test "$IMPLIBEXT" != "$STATIC_IMPLIBEXT"
        then
449
            wine_fn_append_rule \
450
"$ac_dir/install-dev:: $ac_file.$STATIC_IMPLIBEXT \$(DESTDIR)\$(dlldir) __builddeps__
451
	\$(INSTALL_DATA) $ac_file.$STATIC_IMPLIBEXT \$(DESTDIR)\$(dlldir)/lib$ac_implib.$STATIC_IMPLIBEXT
452
$ac_dir/uninstall::
453 454 455
	\$(RM) \$(DESTDIR)\$(dlldir)/lib$ac_implib.$STATIC_IMPLIBEXT"
        fi

456
        if test -n "$CROSSTARGET"
457
        then
458
            wine_fn_append_rule \
459
"__builddeps__: $ac_file.cross.a
460 461
$ac_file.cross.a: $ac_dir/Makefile dummy
	@cd $ac_dir && \$(MAKE) lib$ac_implib.cross.a"
462 463
        fi

464
    elif wine_fn_has_flag implib
465
    then
466
        wine_fn_append_rule \
467
"__builddeps__: $ac_file.$IMPLIBEXT
468 469 470 471
$ac_file.def: $ac_dir/$ac_name.spec $ac_dir/Makefile \$(WINEBUILD)
	\$(WINEBUILD) \$(TARGETFLAGS)$ac_implibflags -w --def -o \$[@] --export \$(srcdir)/$ac_dir/$ac_name.spec
$ac_file.a: $ac_dir/$ac_name.spec $ac_dir/Makefile \$(WINEBUILD)
	\$(WINEBUILD) \$(TARGETFLAGS)$ac_implibflags -w --implib -o \$[@] --export \$(srcdir)/$ac_dir/$ac_name.spec
472 473
.PHONY: $ac_dir/install-dev $ac_dir/uninstall
$ac_dir/install-dev:: $ac_file.$IMPLIBEXT \$(DESTDIR)\$(dlldir)
474
	\$(INSTALL_DATA) $ac_file.$IMPLIBEXT \$(DESTDIR)\$(dlldir)/lib$ac_implib.$IMPLIBEXT
475
$ac_dir/uninstall::
476
	\$(RM) \$(DESTDIR)\$(dlldir)/lib$ac_implib.$IMPLIBEXT
477 478
install install-dev:: $ac_dir/install-dev
__uninstall__: $ac_dir/uninstall"
479
        if test -n "$CROSSTARGET"
480
        then
481
            wine_fn_append_rule \
482
"__builddeps__: $ac_file.cross.a
483 484
$ac_file.cross.a: $ac_dir/$ac_name.spec $ac_dir/Makefile \$(WINEBUILD)
	\$(WINEBUILD) \$(CROSSTARGET:%=-b %)$ac_implibflags -w --implib -o \$[@] --export \$(srcdir)/$ac_dir/$ac_name.spec"
485
        fi
486

487
        if test "$ac_name" != "$ac_implib"
488
        then
489
            wine_fn_append_rule \
490 491
"__builddeps__: dlls/lib$ac_implib.$IMPLIBEXT
dlls/lib$ac_implib.$IMPLIBEXT: $ac_file.$IMPLIBEXT
492
	\$(RM) \$[@] && \$(LN_S) $ac_name/lib$ac_implib.$IMPLIBEXT \$[@]
493 494
clean::
	\$(RM) dlls/lib$ac_implib.$IMPLIBEXT"
495
            if test -n "$CROSSTARGET"
496
            then
497
                wine_fn_append_rule \
498 499
"__builddeps__: dlls/lib$ac_implib.cross.a
dlls/lib$ac_implib.cross.a: $ac_file.cross.a
500
	\$(RM) \$[@] && \$(LN_S) $ac_name/lib$ac_implib.cross.a \$[@]"
501
            fi
502 503 504 505 506 507
        fi
    fi
}

wine_fn_config_program ()
{
508 509
    ac_name=$[1]
    ac_dir=programs/$ac_name
510
    ac_enable=$[2]
511
    ac_flags=$[3]
512 513 514 515 516 517 518
    ac_program=$ac_name

    case $ac_name in
      *.*) ;;
      *)   ac_program=$ac_program.exe ;;
    esac

519
    ac_clean=
520 521 522
    wine_fn_has_flag mc && ac_clean="$ac_clean $ac_dir/msg.pot"
    wine_fn_has_flag po && ac_clean="$ac_clean $ac_dir/rsrc.pot"
    wine_fn_has_flag manpage && ac_clean="$ac_clean $ac_dir/$ac_name.man"
523
    test -n "$DLLEXT" || ac_clean="$ac_clean $ac_dir/$ac_program"
524

525
    AS_VAR_IF([$ac_enable],[no],[wine_fn_disabled_rules $ac_clean; return])
526

527
    wine_fn_all_rules Make.rules.in
528
    wine_fn_clean_rules $ac_clean
529
    wine_fn_append_rule "$ac_dir: __builddeps__"
530
    wine_fn_pot_rules
531

532
    wine_fn_has_flag install || return
533
    wine_fn_append_rule \
534 535 536
".PHONY: $ac_dir/install $ac_dir/uninstall
install install-lib:: $ac_dir/install
__uninstall__: $ac_dir/uninstall"
537 538

    if test -n "$DLLEXT"
539
    then
540
        wine_fn_append_rule \
541
"$ac_dir/install:: $ac_dir \$(DESTDIR)\$(dlldir) \$(DESTDIR)\$(fakedlldir)
542
	\$(INSTALL_PROGRAM) $ac_dir/$ac_program$DLLEXT \$(DESTDIR)\$(dlldir)/$DLLPREFIX$ac_program$DLLEXT
543
	\$(INSTALL_DATA) $ac_dir/$ac_program.fake \$(DESTDIR)\$(fakedlldir)/$ac_program
544
$ac_dir/uninstall::
545
	\$(RM) \$(DESTDIR)\$(dlldir)/$DLLPREFIX$ac_program$DLLEXT \$(DESTDIR)\$(fakedlldir)/$ac_program"
546

547
        if test -z "$with_wine64" && wine_fn_has_flag installbin
548
        then
549
            wine_fn_append_rule \
550
"$ac_dir/install:: __tooldeps__ \$(DESTDIR)\$(bindir)
551
	\$(INSTALL_SCRIPT) \$(TOOLSDIR)/tools/wineapploader \$(DESTDIR)\$(bindir)/$ac_name
552
$ac_dir/uninstall::
553
	\$(RM) \$(DESTDIR)\$(bindir)/$ac_name"
554 555
        fi
    else
556
        wine_fn_append_rule \
557
"$ac_dir/install:: $ac_dir \$(DESTDIR)\$(bindir)
558
	\$(INSTALL_PROGRAM) $ac_dir/$ac_program \$(DESTDIR)\$(bindir)/$ac_program
559
$ac_dir/uninstall::
560
	\$(RM) \$(DESTDIR)\$(bindir)/$ac_program"
561 562
    fi

563
    if test -z "$with_wine64" && wine_fn_has_flag manpage
564
    then
565
        wine_fn_append_rule \
566
"$ac_dir/install:: $ac_dir \$(DESTDIR)\$(mandir)/man\$(prog_manext)
567
	\$(INSTALL_DATA) $ac_dir/$ac_name.man \$(DESTDIR)\$(mandir)/man\$(prog_manext)/$ac_name.\$(prog_manext)
568
$ac_dir/uninstall::
569
	\$(RM) \$(DESTDIR)\$(mandir)/man\$(prog_manext)/$ac_name.\$(prog_manext)"
570
    fi
571 572
}

573 574 575 576
wine_fn_config_test ()
{
    ac_dir=$[1]
    ac_name=$[2]
577
    ac_flags=$[3]
578 579

    ac_clean=
580
    test -n "$CROSSTARGET" && ac_clean=`expr $ac_dir/${ac_name} : "\\(.*\\)_test"`_crosstest.exe
581
    test -n "$DLLEXT" || ac_clean=$ac_dir/${ac_name}.exe
582 583
    ac_clean="$ac_clean $ac_dir/testlist.c"

584
    AS_VAR_IF([enable_tests],[no],[wine_fn_disabled_rules $ac_clean; return])
585

586
    wine_fn_append_file ALL_TEST_RESOURCES $ac_name.res
587
    wine_fn_all_rules Make.rules.in
588
    wine_fn_clean_rules $ac_clean
589

590 591
    wine_fn_append_rule \
"$ac_dir: programs/winetest/Makefile __builddeps__
592
programs/winetest: $ac_dir
593 594 595
check test: $ac_dir/test
.PHONY: $ac_dir/test
$ac_dir/test: dummy
596 597
	@cd $ac_dir && \$(MAKE) test
testclean::
598 599
	\$(RM) $ac_dir/*.ok"

600
        if test -n "$CROSSTARGET"
601
        then
602
            wine_fn_append_rule \
603 604 605
"crosstest: $ac_dir/crosstest
.PHONY: $ac_dir/crosstest
$ac_dir/crosstest: $ac_dir/Makefile __builddeps__ dummy
606
	@cd $ac_dir && \$(MAKE) crosstest"
607
        fi
608 609 610 611 612
}

wine_fn_config_tool ()
{
    ac_dir=$[1]
613
    ac_flags=$[2]
614
    AS_VAR_IF([enable_tools],[no],[return])
615

616 617 618
    wine_fn_all_rules
    wine_fn_install_rules
    wine_fn_clean_rules
619

620 621
    wine_fn_append_rule "__tooldeps__: $ac_dir"
    wine_fn_append_rule "$ac_dir: libs/port"
622
    case $ac_dir in
623
      tools/winebuild) wine_fn_append_rule "\$(WINEBUILD): $ac_dir" ;;
624
    esac
625 626 627 628 629 630
}

wine_fn_config_makerules ()
{
    ac_rules=$[1]
    ac_deps=$[2]
631
    wine_fn_append_rule \
632 633 634 635 636 637 638 639
"$ac_rules: $ac_rules.in $ac_deps config.status
	@./config.status $ac_rules
distclean::
	\$(RM) $ac_rules"
}

wine_fn_config_symlink ()
{
640 641 642 643 644 645 646
    ac_linkdir=
    if test "x$[1]" = "x-d"
    then
        ac_linkdir=$[2]
        shift; shift
    fi
    ac_links=$[@]
647
    wine_fn_append_rule \
648 649
"$ac_links:
	@./config.status \$[@]
650
distclean::
651 652
	\$(RM) $ac_links"
    test -n "$ac_linkdir" || return
653
    wine_fn_append_rule "$ac_linkdir/Makefile $ac_linkdir/depend: $ac_links"
654 655
}

656
if test -z "$CROSSTARGET"
657
then
658
    wine_fn_append_rule \
659 660 661
"crosstest:
	@echo \"crosstest is not supported (mingw not installed?)\" && false"
fi])
662 663 664 665 666 667 668 669 670

dnl **** Define helper function to append a file to a makefile file list ****
dnl
dnl Usage: WINE_APPEND_FILE(var,file)
dnl
AC_DEFUN([WINE_APPEND_FILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])wine_fn_append_file $1 "$2"])

dnl **** Define helper function to append a rule to a makefile command list ****
dnl
671
dnl Usage: WINE_APPEND_RULE(rule)
672
dnl
673
AC_DEFUN([WINE_APPEND_RULE],[AC_REQUIRE([WINE_CONFIG_HELPERS])wine_fn_append_rule "$1"])
674

675
dnl **** Create nonexistent directories from config.status ****
676 677 678 679
dnl
dnl Usage: WINE_CONFIG_EXTRA_DIR(dirname)
dnl
AC_DEFUN([WINE_CONFIG_EXTRA_DIR],
680 681 682 683
[AC_CONFIG_COMMANDS([$1],[test -d "$1" || { AC_MSG_NOTICE([creating $1]); AS_MKDIR_P("$1"); }])dnl
wine_fn_append_rule \
"clean::
	\$(RM) \$(CLEAN_FILES:%=[$1]/%)"])
684

685 686
dnl **** Create symlinks from config.status ****
dnl
687
dnl Usage: WINE_CONFIG_SYMLINK(target,src,files,enable,srcfile)
688
dnl
689
AC_DEFUN([WINE_CONFIG_SYMLINK],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
690 691 692 693 694 695 696
m4_ifval([$4],[if test "x$[$4]" != xno; then
])m4_foreach([f],[$3],
[AC_CONFIG_LINKS(m4_ifval([$1],[$1/])f[:]m4_ifval([$2],[$2/])m4_ifval([$5],[$5],f))])dnl
m4_if([$1],[$2],[test "$srcdir" = "." || ])dnl
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],[
fi])[]dnl
])])
697

698 699 700 701
dnl **** Create a make rules file from config.status ****
dnl
dnl Usage: WINE_CONFIG_MAKERULES(file,var,deps)
dnl
702
AC_DEFUN([WINE_CONFIG_MAKERULES],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
703
wine_fn_config_makerules $1 $3
704 705 706 707 708 709
$2=$1
AC_SUBST_FILE([$2])dnl
AC_CONFIG_FILES([$1])])

dnl **** Create a makefile from config.status ****
dnl
710
dnl Usage: WINE_CONFIG_MAKEFILE(file,enable,flags)
711
dnl
712
AC_DEFUN([WINE_CONFIG_MAKEFILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
713
AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]$1))dnl
714 715
m4_append_uniq([_AC_USER_OPTS],ac_enable,[
])dnl
716
wine_fn_config_makefile [$1] ac_enable [$3]dnl
717
AS_VAR_POPDEF([ac_enable])])
718

719 720
dnl **** Create a dll makefile from config.status ****
dnl
721
dnl Usage: WINE_CONFIG_DLL(name,enable,flags,implib)
722
dnl
723
AC_DEFUN([WINE_CONFIG_DLL],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
724
AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]$1))dnl
725 726
m4_append_uniq([_AC_USER_OPTS],ac_enable,[
])dnl
727
wine_fn_config_dll [$1] ac_enable [$3] [$4]dnl
728
AS_VAR_POPDEF([ac_enable])])
729 730 731

dnl **** Create a program makefile from config.status ****
dnl
732
dnl Usage: WINE_CONFIG_PROGRAM(name,enable,flags)
733
dnl
734
AC_DEFUN([WINE_CONFIG_PROGRAM],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
735
AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]$1))dnl
736 737
m4_append_uniq([_AC_USER_OPTS],ac_enable,[
])dnl
738
wine_fn_config_program [$1] ac_enable [$3]dnl
739
AS_VAR_POPDEF([ac_enable])])
740 741 742

dnl **** Create a test makefile from config.status ****
dnl
743
dnl Usage: WINE_CONFIG_TEST(dir,flags)
744
dnl
745 746 747
AC_DEFUN([WINE_CONFIG_TEST],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
m4_pushdef([ac_suffix],m4_if(m4_substr([$1],0,9),[programs/],[.exe_test],[_test]))dnl
m4_pushdef([ac_name],[m4_bpatsubst([$1],[.*/\(.*\)/tests$],[\1])])dnl
748
wine_fn_config_test $1 ac_name[]ac_suffix [$2]dnl
749
m4_popdef([ac_suffix])dnl
750
m4_popdef([ac_name])])
751 752 753

dnl **** Create a static lib makefile from config.status ****
dnl
754
dnl Usage: WINE_CONFIG_LIB(name,flags)
755
dnl
756
AC_DEFUN([WINE_CONFIG_LIB],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
757
wine_fn_config_lib [$1] [$2]])
758

759 760
dnl **** Create a tool makefile from config.status ****
dnl
761
dnl Usage: WINE_CONFIG_TOOL(name,flags)
762 763
dnl
AC_DEFUN([WINE_CONFIG_TOOL],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
764 765
m4_append_uniq([_AC_USER_OPTS],[enable_tools],[
])dnl
766
wine_fn_config_tool [$1] [$2]])
767

768 769 770
dnl **** Add a message to the list displayed at the end ****
dnl
dnl Usage: WINE_NOTICE(notice)
771
dnl Usage: WINE_NOTICE_WITH(with_flag, test, notice)
772
dnl Usage: WINE_WARNING(warning)
773
dnl Usage: WINE_WARNING_WITH(with_flag, test, warning)
774 775
dnl Usage: WINE_PRINT_MESSAGES
dnl
776 777
AC_DEFUN([WINE_NOTICE],[AS_VAR_APPEND([wine_notices],["|$1"])])
AC_DEFUN([WINE_WARNING],[AS_VAR_APPEND([wine_warnings],["|$1"])])
778 779 780 781 782 783 784 785 786 787 788 789 790 791

AC_DEFUN([WINE_NOTICE_WITH],[AS_IF([$2],[case "x$with_$1" in
  x)   WINE_NOTICE([$3]) ;;
  xno) ;;
  *)   AC_MSG_ERROR([$3
This is an error since --with-$1 was requested.]) ;;
esac])])

AC_DEFUN([WINE_WARNING_WITH],[AS_IF([$2],[case "x$with_$1" in
  x)   WINE_WARNING([$3]) ;;
  xno) ;;
  *)   AC_MSG_ERROR([$3
This is an error since --with-$1 was requested.]) ;;
esac])])
792

793 794 795 796 797 798
AC_DEFUN([WINE_ERROR_WITH],[AS_IF([$2],[case "x$with_$1" in
  xno) ;;
  *)   AC_MSG_ERROR([$3
Use the --without-$1 option if you really want this.]) ;;
esac])])

799
AC_DEFUN([WINE_PRINT_MESSAGES],[ac_save_IFS="$IFS"
800 801
if test "x$wine_notices != "x; then
    echo >&AS_MESSAGE_FD
802
    IFS="|"
803
    for msg in $wine_notices; do
804
        IFS="$ac_save_IFS"
805 806 807 808 809
        if test -n "$msg"; then
            AC_MSG_NOTICE([$msg])
        fi
    done
fi
810
IFS="|"
811
for msg in $wine_warnings; do
812
    IFS="$ac_save_IFS"
813 814 815 816 817 818 819
    if test -n "$msg"; then
        echo >&2
        AC_MSG_WARN([$msg])
    fi
done
IFS="$ac_save_IFS"])

820 821 822
dnl Local Variables:
dnl compile-command: "autoreconf --warnings=all"
dnl End: