aclocal.m4 23 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
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],
30 31 32 33 34 35 36
[AS_VAR_SET_IF([ac_tool_prefix],
  AC_CHECK_PROG([$1],[${ac_tool_prefix}$2],[${ac_tool_prefix}$2],,[$4]))
AS_VAR_IF([ac_cv_prog_$1],[],
  [AS_VAR_IF([cross_compiling],[yes],[],
    [AS_UNSET([ac_cv_prog_$1])
     AC_CHECK_PROG([$1],[$2],[$2],[$3],[$4])])],
[AS_VAR_COPY([$1],[ac_cv_prog_$1])])])
37

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

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

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

82 83
dnl **** Get flags from pkg-config or alternate xxx-config program ****
dnl
84
dnl Usage: WINE_PACKAGE_FLAGS(var,pkg-name,[default-lib,[cflags-alternate,libs-alternate,[checks]]])
85 86 87
dnl
AC_DEFUN([WINE_PACKAGE_FLAGS],
[AC_REQUIRE([WINE_PATH_PKG_CONFIG])dnl
88 89 90
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
91 92 93
AS_VAR_IF([ac_cflags],[],
      [AS_VAR_SET_IF([PKG_CONFIG],
      [ac_cflags=`$PKG_CONFIG --cflags [$2] 2>/dev/null`])])
94
m4_ifval([$4],[test "$cross_compiling" = yes || ac_cflags=[$]{ac_cflags:-[$4]}])
95
AC_ARG_VAR(ac_libs, [Linker flags for $2, overriding pkg-config])dnl
96 97 98
AS_VAR_IF([ac_libs],[],
      [AS_VAR_SET_IF([PKG_CONFIG],
      [ac_libs=`$PKG_CONFIG --libs [$2] 2>/dev/null`])])
99
m4_ifval([$5],[test "$cross_compiling" = yes || ac_libs=[$]{ac_libs:-[$5]}])
100
m4_ifval([$3],[ac_libs=[$]{ac_libs:-"$3"}])
101 102
AS_ECHO(["$as_me:${as_lineno-$LINENO}: $2 cflags: $ac_cflags"]) >&AS_MESSAGE_LOG_FD
AS_ECHO(["$as_me:${as_lineno-$LINENO}: $2 libs: $ac_libs"]) >&AS_MESSAGE_LOG_FD
103 104 105 106
ac_save_CPPFLAGS=$CPPFLAGS
CPPFLAGS="$CPPFLAGS $ac_cflags"
$6
CPPFLAGS=$ac_save_CPPFLAGS
107 108
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'`
109 110
AS_VAR_POPDEF([ac_libs])dnl
AS_VAR_POPDEF([ac_cflags])])dnl
111

112 113 114 115 116
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],
117
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[$2]],[[asm($1); $3]])],[$4],[$5])])
118 119 120 121 122

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
123 124
dnl The default action-if-yes is to append the flags to EXTRACFLAGS.
dnl
125
AC_DEFUN([WINE_TRY_CFLAGS],
126 127
[AS_VAR_PUSHDEF([ac_var], ac_cv_cflags_[[$1]])dnl
AC_CACHE_CHECK([whether the compiler supports $1], ac_var,
128 129
[ac_wine_try_cflags_saved=$CFLAGS
CFLAGS="$CFLAGS $1"
130
AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(int argc, char **argv) { return 0; }]])],
131
               [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
132
CFLAGS=$ac_wine_try_cflags_saved])
133
AS_VAR_IF([ac_var],[yes],[m4_default([$2], [EXTRACFLAGS="$EXTRACFLAGS $1"])], [$3])dnl
134
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
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)]))
157
AS_VAR_IF([ac_var],[yes],
158 159 160 161
      [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
dnl **** Check for a mingw program, trying the various mingw prefixes ****
dnl
174
dnl Usage: WINE_CHECK_MINGW_PROG(variable,[value-if-not-found],[path])
175 176
dnl
AC_DEFUN([WINE_CHECK_MINGW_PROG],
177
[case "$host_cpu" in
178 179
  arm*)
    ac_prefix_list="armv7-w64-mingw32-clang armv7-w64-mingw32-gcc" ;;
180
  i[[3456789]]86*)
181
    ac_prefix_list="m4_foreach([ac_wine_prefix],[w64-mingw32, pc-mingw32, mingw32msvc, mingw32],
182
                        m4_foreach([ac_wine_cpu],[i686,i586,i486,i386],[ac_wine_cpu-ac_wine_prefix-gcc ]))
183 184
                     m4_foreach([ac_wine_cpu],[i686,i586,i486,i386],[ac_wine_cpu-w64-mingw32-clang ])
                     mingw32-gcc" ;;
185
  x86_64)
186
    ac_prefix_list="m4_foreach([ac_wine_prefix],[pc-mingw32, w64-mingw32, mingw32msvc],
187 188
                        m4_foreach([ac_wine_cpu],[x86_64,amd64],[ac_wine_cpu-ac_wine_prefix-gcc ]))
                    m4_foreach([ac_wine_cpu],[x86_64,amd64],[ac_wine_cpu-w64-mingw32-clang ])" ;;
189 190 191
  *)
    ac_prefix_list="" ;;
esac
192
AC_CHECK_PROGS([$1],[$ac_prefix_list],[$2],[$3])])
193 194


195 196 197 198 199
dnl **** Define helper functions for creating config.status files ****
dnl
dnl Usage: AC_REQUIRE([WINE_CONFIG_HELPERS])
dnl
AC_DEFUN([WINE_CONFIG_HELPERS],
200 201
[wine_rules_file=conf$$rules.make
rm -f $wine_rules_file
202
AC_SUBST(SUBDIRS,"")
203
AC_SUBST(DISABLED_SUBDIRS,"")
204
AC_SUBST(CONFIGURE_TARGETS,"")
205
AC_SUBST(ALL_TEST_RESOURCES,"")
206 207

wine_fn_append_file ()
208 209 210
{
    AS_VAR_APPEND($[1]," \\$as_nl	$[2]")
}
211

212 213
wine_fn_append_rule ()
{
214
    AS_ECHO("$[1]") >>$wine_rules_file
215 216
}

217 218
wine_fn_has_flag ()
{
219
    expr ",$ac_flags," : ".*,$[1],.*" >/dev/null
220 221
}

222
wine_fn_all_rules ()
223
{
224
    wine_fn_append_file SUBDIRS $ac_dir
225
    wine_fn_append_rule \
226 227
"all: $ac_dir
.PHONY: $ac_dir
228
$ac_dir: dummy
229
	@cd $ac_dir && \$(MAKE)"
230 231 232 233
}

wine_fn_install_rules ()
{
234
    wine_fn_has_flag install-lib || wine_fn_has_flag install-dev || return
235

236
    wine_fn_append_rule \
237 238
".PHONY: $ac_dir/install $ac_dir/uninstall
$ac_dir/install:: $ac_dir
239
	@cd $ac_dir && \$(MAKE) install
240
$ac_dir/uninstall::
241
	@cd $ac_dir && \$(MAKE) uninstall
242 243
install:: $ac_dir/install
__uninstall__: $ac_dir/uninstall"
244

245
    if wine_fn_has_flag install-lib
246
    then
247
        wine_fn_append_rule \
248 249
".PHONY: $ac_dir/install-lib
$ac_dir/install-lib:: $ac_dir
250
	@cd $ac_dir && \$(MAKE) install-lib
251
install-lib:: $ac_dir/install-lib"
252 253
    fi

254
    if wine_fn_has_flag install-dev
255
    then
256
        wine_fn_append_rule \
257 258
".PHONY: $ac_dir/install-dev
$ac_dir/install-dev:: $ac_dir
259
	@cd $ac_dir && \$(MAKE) install-dev
260
install-dev:: $ac_dir/install-dev"
261
    fi
262 263
}

264 265 266 267
wine_fn_clean_rules ()
{
    ac_clean=$[@]

268
    if wine_fn_has_flag clean
269 270
    then
        wine_fn_append_rule \
271 272
"$ac_dir/clean: dummy
	@cd $ac_dir && \$(MAKE) clean"
273 274
    else
        wine_fn_append_rule \
275 276 277 278
"$ac_dir/clean: dummy
	\$(RM) \$(CLEAN_FILES:%=$ac_dir/%) $ac_clean"
    fi
        wine_fn_append_rule \
279
"__clean__: $ac_dir/clean
280
.PHONY: $ac_dir/clean"
281 282
}

283 284 285 286
wine_fn_disabled_rules ()
{
    ac_clean=$[@]

287 288
    wine_fn_append_file SUBDIRS $ac_dir
    wine_fn_append_file DISABLED_SUBDIRS $ac_dir
289 290 291 292
    wine_fn_append_rule \
"__clean__: $ac_dir/clean
.PHONY: $ac_dir/clean
$ac_dir/clean: dummy
293
	\$(RM) \$(CLEAN_FILES:%=$ac_dir/%) $ac_clean"
294 295
}

296 297 298 299 300 301
wine_fn_config_makefile ()
{
    ac_dir=$[1]
    ac_enable=$[2]
    ac_flags=$[3]

302 303 304 305
    case $ac_dir in
    dnl These are created as symlinks for wow64 builds
    fonts|server) test -z "$with_wine64" || return ;;
    esac
306 307 308 309
    AS_VAR_IF([$ac_enable],[no],[wine_fn_disabled_rules; return])
    wine_fn_all_rules
    wine_fn_install_rules
    wine_fn_clean_rules
310 311
}

312 313 314
wine_fn_config_lib ()
{
    ac_name=$[1]
315
    ac_flags=$[2]
316
    ac_dir=dlls/$ac_name
317
    ac_deps="include"
318

319
    AS_VAR_IF([enable_tools],[no],,[ac_deps="tools/widl tools/winebuild tools/winegcc $ac_deps"])
320
    wine_fn_all_rules
321
    wine_fn_clean_rules
322

323
    wine_fn_append_rule \
324
".PHONY: $ac_dir/install $ac_dir/uninstall
325
$ac_dir/install:: $ac_dir
326
	\$(INSTALL_DATA) $ac_dir/lib$ac_name.a \$(DESTDIR)\$(dlldir)/lib$ac_name.a
327
$ac_dir/uninstall::
328
	\$(RM) \$(DESTDIR)\$(dlldir)/lib$ac_name.a
329 330
install install-dev:: $ac_dir/install
__uninstall__: $ac_dir/uninstall
331
__builddeps__: $ac_dir
332
$ac_dir: $ac_deps"
333 334
}

335 336
wine_fn_config_dll ()
{
337 338
    ac_name=$[1]
    ac_dir=dlls/$ac_name
339
    ac_enable=$[2]
340
    ac_flags=$[3]
341
    ac_implib=${4:-$ac_name}
342
    ac_file=$ac_dir/lib$ac_implib
343
    ac_dll=$ac_name
344
    ac_deps="include"
345 346
    ac_implibflags=""

347
    AS_VAR_IF([enable_tools],[no],,[ac_deps="tools/widl tools/winebuild tools/winegcc $ac_deps"])
348
    case $ac_name in
349
      *.*16) ac_implibflags=" -m16" ;;
350 351
      *.*) ;;
      *)   ac_dll=$ac_dll.dll ;;
352
    esac
353

354
    ac_clean=
355
    wine_fn_has_flag implib && ac_clean="$ac_clean $ac_file.$IMPLIBEXT"
356
    test -n "$DLLEXT" || ac_clean="$ac_clean $ac_dir/$ac_dll"
357

358 359
    AS_VAR_IF([$ac_enable],[no],
              dnl enable_win16 is special in that it disables import libs too
360
              [if test "$ac_enable" != enable_win16
361
               then
362
                   wine_fn_clean_rules $ac_clean
363 364
                   wine_fn_append_file SUBDIRS $ac_dir
                   wine_fn_append_file DISABLED_SUBDIRS $ac_dir
365
               else
366
                   wine_fn_disabled_rules $ac_clean
367 368 369
                   return
               fi],

370
              [wine_fn_all_rules
371
               wine_fn_clean_rules $ac_clean
372
               wine_fn_append_rule \
373
"$ac_dir: __builddeps__
374
manpages htmlpages sgmlpages xmlpages::
375
	@cd $ac_dir && \$(MAKE) \$[@]
376 377 378
.PHONY: $ac_dir/install-lib $ac_dir/uninstall
install install-lib:: $ac_dir/install-lib
__uninstall__: $ac_dir/uninstall"
379 380 381
                if test -n "$DLLEXT"
                then
                    wine_fn_append_rule \
382
"$ac_dir/install-lib:: $ac_dir
383
	\$(INSTALL_PROGRAM) $ac_dir/$ac_dll$DLLEXT \$(DESTDIR)\$(dlldir)/$ac_dll$DLLEXT
384
	\$(INSTALL_DATA) $ac_dir/$ac_dll.fake \$(DESTDIR)\$(fakedlldir)/$ac_dll
385
$ac_dir/uninstall::
386
	\$(RM) \$(DESTDIR)\$(dlldir)/$ac_dll$DLLEXT \$(DESTDIR)\$(fakedlldir)/$ac_dll"
387 388
                else
                    wine_fn_append_rule \
389
"$ac_dir/install-lib:: $ac_dir
390
	\$(INSTALL_PROGRAM) $ac_dir/$ac_dll \$(DESTDIR)\$(dlldir)/$ac_dll
391
$ac_dir/uninstall::
392
	\$(RM) \$(DESTDIR)\$(dlldir)/$ac_dll"
393
                fi])
394

395
    if wine_fn_has_flag staticimplib
396
    then
397
        wine_fn_append_rule \
398 399 400 401
"__builddeps__: $ac_file.a
$ac_file.a $ac_file.cross.a: $ac_deps
$ac_file.a: dummy
	@cd $ac_dir && \$(MAKE) lib$ac_implib.a
402
.PHONY: $ac_dir/install-dev $ac_dir/uninstall
403 404
$ac_dir/install-dev:: $ac_file.a
	\$(INSTALL_DATA) $ac_file.a \$(DESTDIR)\$(dlldir)/lib$ac_implib.a
405
$ac_dir/uninstall::
406
	\$(RM) \$(DESTDIR)\$(dlldir)/lib$ac_implib.a
407 408
install install-dev:: $ac_dir/install-dev
__uninstall__: $ac_dir/uninstall"
409

410
        if test -n "$CROSSTARGET" -a -z "$ac_implibflags"
411
        then
412
            wine_fn_append_rule \
413
"__builddeps__: $ac_file.cross.a
414
$ac_file.cross.a: dummy
415
	@cd $ac_dir && \$(MAKE) lib$ac_implib.cross.a"
416 417
        fi

418
    elif wine_fn_has_flag implib
419
    then
420
        wine_fn_append_rule \
421
"__builddeps__: $ac_file.$IMPLIBEXT
422
$ac_file.def: $srcdir/$ac_dir/$ac_name.spec \$(WINEBUILD)
423
	\$(WINEBUILD) \$(TARGETFLAGS)$ac_implibflags -w --def -o \$[@] --export $srcdir/$ac_dir/$ac_name.spec
424
$ac_file.a: $srcdir/$ac_dir/$ac_name.spec \$(WINEBUILD)
425
	\$(WINEBUILD) \$(TARGETFLAGS)$ac_implibflags -w --implib -o \$[@] --export $srcdir/$ac_dir/$ac_name.spec
426
.PHONY: $ac_dir/install-dev $ac_dir/uninstall
427
$ac_dir/install-dev:: $ac_file.$IMPLIBEXT
428
	\$(INSTALL_DATA) $ac_file.$IMPLIBEXT \$(DESTDIR)\$(dlldir)/lib$ac_implib.$IMPLIBEXT
429
$ac_dir/uninstall::
430
	\$(RM) \$(DESTDIR)\$(dlldir)/lib$ac_implib.$IMPLIBEXT
431 432
install install-dev:: $ac_dir/install-dev
__uninstall__: $ac_dir/uninstall"
433
        if test -n "$CROSSTARGET" -a -z "$ac_implibflags"
434
        then
435
            wine_fn_append_rule \
436
"__builddeps__: $ac_file.cross.a
437
$ac_file.cross.a: $srcdir/$ac_dir/$ac_name.spec \$(WINEBUILD)
438
	\$(WINEBUILD) \$(CROSSTARGET:%=-b %)$ac_implibflags -w --implib -o \$[@] --export $srcdir/$ac_dir/$ac_name.spec"
439
        fi
440 441 442 443 444
    fi
}

wine_fn_config_program ()
{
445 446
    ac_name=$[1]
    ac_dir=programs/$ac_name
447
    ac_enable=$[2]
448
    ac_flags=$[3]
449 450 451 452 453 454 455
    ac_program=$ac_name

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

456
    ac_clean=
457
    wine_fn_has_flag manpage && ac_clean="$ac_clean $ac_dir/$ac_name.man"
458
    test -n "$DLLEXT" || ac_clean="$ac_clean $ac_dir/$ac_program"
459

460
    AS_VAR_IF([$ac_enable],[no],[wine_fn_disabled_rules $ac_clean; return])
461

462
    wine_fn_all_rules
463
    wine_fn_clean_rules $ac_clean
464
    wine_fn_append_rule "$ac_dir: __builddeps__"
465

466
    wine_fn_has_flag install || return
467
    wine_fn_append_rule \
468 469 470
".PHONY: $ac_dir/install $ac_dir/uninstall
install install-lib:: $ac_dir/install
__uninstall__: $ac_dir/uninstall"
471 472

    if test -n "$DLLEXT"
473
    then
474
        wine_fn_append_rule \
475
"$ac_dir/install:: $ac_dir
476
	\$(INSTALL_PROGRAM) $ac_dir/$ac_program$DLLEXT \$(DESTDIR)\$(dlldir)/$ac_program$DLLEXT
477
	\$(INSTALL_DATA) $ac_dir/$ac_program.fake \$(DESTDIR)\$(fakedlldir)/$ac_program
478
$ac_dir/uninstall::
479
	\$(RM) \$(DESTDIR)\$(dlldir)/$ac_program$DLLEXT \$(DESTDIR)\$(fakedlldir)/$ac_program"
480

481
        if test -z "$with_wine64" && wine_fn_has_flag installbin
482
        then
483
            wine_fn_append_rule \
484
"$ac_dir/install:: __tooldeps__
485
	\$(INSTALL_SCRIPT) \$(TOOLSDIR)/tools/wineapploader \$(DESTDIR)\$(bindir)/$ac_name
486
$ac_dir/uninstall::
487
	\$(RM) \$(DESTDIR)\$(bindir)/$ac_name"
488 489
        fi
    else
490
        wine_fn_append_rule \
491
"$ac_dir/install:: $ac_dir
492
	\$(INSTALL_PROGRAM) $ac_dir/$ac_program \$(DESTDIR)\$(bindir)/$ac_program
493
$ac_dir/uninstall::
494
	\$(RM) \$(DESTDIR)\$(bindir)/$ac_program"
495 496
    fi

497
    if test -z "$with_wine64" && wine_fn_has_flag manpage
498
    then
499
        wine_fn_append_rule \
500
"$ac_dir/install:: $ac_dir
501
	\$(INSTALL_DATA) $ac_dir/$ac_name.man \$(DESTDIR)\$(mandir)/man\$(prog_manext)/$ac_name.\$(prog_manext)
502
$ac_dir/uninstall::
503
	\$(RM) \$(DESTDIR)\$(mandir)/man\$(prog_manext)/$ac_name.\$(prog_manext)"
504
    fi
505 506
}

507 508 509 510
wine_fn_config_test ()
{
    ac_dir=$[1]
    ac_name=$[2]
511
    ac_flags=$[3]
512 513

    ac_clean=
514
    test -n "$CROSSTARGET" && ac_clean=`expr $ac_dir/${ac_name} : "\\(.*\\)_test"`_crosstest.exe
515
    test -n "$DLLEXT" || ac_clean="$ac_dir/${ac_name}.exe $ac_dir/${ac_name}-stripped.exe"
516

517
    AS_VAR_IF([enable_tests],[no],[wine_fn_disabled_rules $ac_clean; return])
518

519
    wine_fn_append_file ALL_TEST_RESOURCES $ac_name.res
520
    wine_fn_all_rules
521
    wine_fn_clean_rules $ac_clean
522

523
    wine_fn_append_rule \
524
"$ac_dir: __builddeps__
525
programs/winetest: $ac_dir
526 527 528
check test: $ac_dir/test
.PHONY: $ac_dir/test
$ac_dir/test: dummy
529 530
	@cd $ac_dir && \$(MAKE) test
testclean::
531 532
	\$(RM) $ac_dir/*.ok"

533
        if test -n "$CROSSTARGET"
534
        then
535
            wine_fn_append_rule \
536 537
"crosstest: $ac_dir/crosstest
.PHONY: $ac_dir/crosstest
538
$ac_dir/crosstest: __builddeps__ dummy
539
	@cd $ac_dir && \$(MAKE) crosstest"
540
        fi
541 542 543 544 545
}

wine_fn_config_tool ()
{
    ac_dir=$[1]
546
    ac_flags=$[2]
547
    AS_VAR_IF([enable_tools],[no],[wine_fn_append_file DISABLED_SUBDIRS $ac_dir; return])
548

549 550 551
    wine_fn_all_rules
    wine_fn_install_rules
    wine_fn_clean_rules
552

553 554
    wine_fn_append_rule "__tooldeps__: $ac_dir"
    wine_fn_append_rule "$ac_dir: libs/port"
555
    case $ac_dir in
556
      tools/winebuild) wine_fn_append_rule "\$(WINEBUILD): $ac_dir" ;;
557
    esac
558 559 560 561
}

wine_fn_config_symlink ()
{
562 563 564 565 566 567 568
    ac_linkdir=
    if test "x$[1]" = "x-d"
    then
        ac_linkdir=$[2]
        shift; shift
    fi
    ac_links=$[@]
569
    wine_fn_append_rule \
570
"$ac_links:
571 572
	@./config.status \$[@]"
    for f in $ac_links; do wine_fn_append_file CONFIGURE_TARGETS $f; done
573
    test -n "$ac_linkdir" || return
574
    wine_fn_append_rule "$ac_linkdir/depend: $ac_links"
575
}])
576 577 578 579 580 581 582 583 584

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
585
dnl Usage: WINE_APPEND_RULE(rule)
586
dnl
587
AC_DEFUN([WINE_APPEND_RULE],[AC_REQUIRE([WINE_CONFIG_HELPERS])wine_fn_append_rule "$1"])
588

589 590
dnl **** Create symlinks from config.status ****
dnl
591
dnl Usage: WINE_CONFIG_SYMLINK(target,src,files,enable,srcfile)
592
dnl
593
AC_DEFUN([WINE_CONFIG_SYMLINK],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
594 595 596 597 598 599 600
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
])])
601

602 603
dnl **** Create a makefile from config.status ****
dnl
604
dnl Usage: WINE_CONFIG_MAKEFILE(file,enable,flags)
605
dnl
606
AC_DEFUN([WINE_CONFIG_MAKEFILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
607
AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]$1))dnl
608 609
m4_append_uniq([_AC_USER_OPTS],ac_enable,[
])dnl
610
wine_fn_config_makefile [$1] ac_enable [$3]dnl
611
AS_VAR_POPDEF([ac_enable])])
612

613 614
dnl **** Create a dll makefile from config.status ****
dnl
615
dnl Usage: WINE_CONFIG_DLL(name,enable,flags,implib)
616
dnl
617
AC_DEFUN([WINE_CONFIG_DLL],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
618
AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]$1))dnl
619 620
m4_append_uniq([_AC_USER_OPTS],ac_enable,[
])dnl
621
wine_fn_config_dll [$1] ac_enable [$3] [$4]dnl
622
AS_VAR_POPDEF([ac_enable])])
623 624 625

dnl **** Create a program makefile from config.status ****
dnl
626
dnl Usage: WINE_CONFIG_PROGRAM(name,enable,flags)
627
dnl
628
AC_DEFUN([WINE_CONFIG_PROGRAM],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
629
AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]$1))dnl
630 631
m4_append_uniq([_AC_USER_OPTS],ac_enable,[
])dnl
632
wine_fn_config_program [$1] ac_enable [$3]dnl
633
AS_VAR_POPDEF([ac_enable])])
634 635 636

dnl **** Create a test makefile from config.status ****
dnl
637
dnl Usage: WINE_CONFIG_TEST(dir,flags)
638
dnl
639 640 641
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
642
wine_fn_config_test $1 ac_name[]ac_suffix [$2]dnl
643
m4_popdef([ac_suffix])dnl
644
m4_popdef([ac_name])])
645 646 647

dnl **** Create a static lib makefile from config.status ****
dnl
648
dnl Usage: WINE_CONFIG_LIB(name,flags)
649
dnl
650
AC_DEFUN([WINE_CONFIG_LIB],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
651
wine_fn_config_lib [$1] [$2]])
652

653 654
dnl **** Create a tool makefile from config.status ****
dnl
655
dnl Usage: WINE_CONFIG_TOOL(name,flags)
656 657
dnl
AC_DEFUN([WINE_CONFIG_TOOL],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
658 659
m4_append_uniq([_AC_USER_OPTS],[enable_tools],[
])dnl
660
wine_fn_config_tool [$1] [$2]])
661

662 663 664 665 666
dnl **** Append a file to the .gitignore list ****
dnl
dnl Usage: WINE_IGNORE_FILE(file,enable)
dnl
AC_DEFUN([WINE_IGNORE_FILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
667
m4_ifval([$2],[test "x$[$2]" = xno || ])wine_fn_append_file CONFIGURE_TARGETS $1])
668

669 670 671 672
dnl **** Add a message to the list displayed at the end ****
dnl
dnl Usage: WINE_NOTICE(notice)
dnl Usage: WINE_WARNING(warning)
673 674 675
dnl Usage: WINE_NOTICE_WITH(with_flag, test, notice, enable)
dnl Usage: WINE_WARNING_WITH(with_flag, test, warning, enable)
dnl Usage: WINE_ERROR_WITH(with_flag, test, error, enable)
676 677
dnl Usage: WINE_PRINT_MESSAGES
dnl
678 679
AC_DEFUN([WINE_NOTICE],[AS_VAR_APPEND([wine_notices],["|$1"])])
AC_DEFUN([WINE_WARNING],[AS_VAR_APPEND([wine_warnings],["|$1"])])
680 681 682 683 684 685

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.]) ;;
686 687
esac
m4_ifval([$4],[$4=${$4:-no}])])])
688 689 690 691 692 693

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.]) ;;
694 695
esac
m4_ifval([$4],[$4=${$4:-no}])])])
696

697 698 699 700
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.]) ;;
701 702
esac
m4_ifval([$4],[$4=${$4:-no}])])])
703

704
AC_DEFUN([WINE_PRINT_MESSAGES],[ac_save_IFS="$IFS"
705
if test "x$wine_notices" != x; then
706
    echo >&AS_MESSAGE_FD
707
    IFS="|"
708
    for msg in $wine_notices; do
709
        IFS="$ac_save_IFS"
710
        AS_VAR_IF([msg],[],,[AC_MSG_NOTICE([$msg])])
711 712
    done
fi
713
IFS="|"
714
for msg in $wine_warnings; do
715
    IFS="$ac_save_IFS"
716
    AS_VAR_IF([msg],[],,[echo >&2
717
        AC_MSG_WARN([$msg])])
718 719 720
done
IFS="$ac_save_IFS"])

721 722 723
dnl Local Variables:
dnl compile-command: "autoreconf --warnings=all"
dnl End: