aclocal.m4 13 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
[AS_VAR_SET_IF([ac_tool_prefix],
31
  [AC_CHECK_PROG([$1],[${ac_tool_prefix}$2],[${ac_tool_prefix}$2],,[$4])])
32 33 34 35 36
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
dnl WINE_HEADER_MAJOR()
dnl
dnl Same as AC_HEADER_MAJOR but fixed to handle the glibc 2.25 sys/types.h breakage
dnl
AC_DEFUN([WINE_HEADER_MAJOR],
[AC_CHECK_HEADER(sys/mkdev.h,
		[AC_DEFINE(MAJOR_IN_MKDEV, 1,
			   [Define to 1 if `major', `minor', and `makedev' are
			    declared in <mkdev.h>.])])
if test $ac_cv_header_sys_mkdev_h = no; then
  AC_CHECK_HEADER(sys/sysmacros.h,
		  [AC_DEFINE(MAJOR_IN_SYSMACROS, 1,
			     [Define to 1 if `major', `minor', and `makedev'
			      are declared in <sysmacros.h>.])])
fi])

54
dnl **** Initialize the programs used by other checks ****
55
dnl
56
dnl Usage: WINE_PATH_SONAME_TOOLS
57
dnl Usage: WINE_PATH_PKG_CONFIG
58
dnl
59 60
AC_DEFUN([WINE_PATH_SONAME_TOOLS],
[AC_PATH_PROG(LDD,ldd,true,/sbin:/usr/sbin:$PATH)
61
AC_CHECK_TOOL(OTOOL,otool,otool)
62 63 64
AC_CHECK_TOOL(READELF,[readelf],true)])

AC_DEFUN([WINE_PATH_PKG_CONFIG],
65
[WINE_CHECK_HOST_TOOL(PKG_CONFIG,[pkg-config])])
66 67 68

dnl **** Extract the soname of a library ****
dnl
69
dnl Usage: WINE_CHECK_SONAME(library, function, [action-if-found, [action-if-not-found, [other_libraries, [pattern]]]])
70
dnl
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 75
m4_pushdef([ac_lib_pattern],m4_default([$6],[lib$1]))dnl
AC_MSG_CHECKING([for -l$1])
76
AC_CACHE_VAL(ac_Lib,
77 78
[ac_check_soname_save_LIBS=$LIBS
LIBS="-l$1 $5 $LIBS"
79
  AC_LINK_IFELSE([AC_LANG_CALL([], [$2])],
80
  [case "$LIBEXT" in
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'`])]) ;;
86 87
  esac],
  [AS_VAR_SET(ac_Lib,[])])
88
  LIBS=$ac_check_soname_save_LIBS])dnl
89
AS_VAR_IF([ac_Lib],[],
90 91
      [AC_MSG_RESULT([not found])
       $4],
92 93
      [AC_MSG_RESULT(AS_VAR_GET(ac_Lib))
       AC_DEFINE_UNQUOTED(AS_TR_CPP(SONAME_LIB$1),["]AS_VAR_GET(ac_Lib)["],
94 95 96
                          [Define to the soname of the lib$1 library.])
       $3])dnl
m4_popdef([ac_lib_pattern])dnl
97
AS_VAR_POPDEF([ac_Lib])])
98

99 100
dnl **** Get flags from pkg-config or alternate xxx-config program ****
dnl
101
dnl Usage: WINE_PACKAGE_FLAGS(var,pkg-name,[default-lib,[cflags-alternate,libs-alternate,[checks]]])
102 103 104
dnl
AC_DEFUN([WINE_PACKAGE_FLAGS],
[AC_REQUIRE([WINE_PATH_PKG_CONFIG])dnl
105 106 107
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
108 109 110
AS_VAR_IF([ac_cflags],[],
      [AS_VAR_SET_IF([PKG_CONFIG],
      [ac_cflags=`$PKG_CONFIG --cflags [$2] 2>/dev/null`])])
111
m4_ifval([$4],[test "$cross_compiling" = yes || ac_cflags=[$]{ac_cflags:-[$4]}])
112
AC_ARG_VAR(ac_libs, [Linker flags for $2, overriding pkg-config])dnl
113 114 115
AS_VAR_IF([ac_libs],[],
      [AS_VAR_SET_IF([PKG_CONFIG],
      [ac_libs=`$PKG_CONFIG --libs [$2] 2>/dev/null`])])
116
m4_ifval([$5],[test "$cross_compiling" = yes || ac_libs=[$]{ac_libs:-[$5]}])
117
m4_ifval([$3],[ac_libs=[$]{ac_libs:-"$3"}])
118 119
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
120 121 122 123 124 125
ac_save_CPPFLAGS=$CPPFLAGS
CPPFLAGS="$CPPFLAGS $ac_cflags"
$6
CPPFLAGS=$ac_save_CPPFLAGS
AS_VAR_POPDEF([ac_libs])dnl
AS_VAR_POPDEF([ac_cflags])])dnl
126

127 128 129 130 131
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],
132
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[$2]],[[asm($1); $3]])],[$4],[$5])])
133 134 135 136 137

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
138 139
dnl The default action-if-yes is to append the flags to EXTRACFLAGS.
dnl
140
AC_DEFUN([WINE_TRY_CFLAGS],
141 142
[AS_VAR_PUSHDEF([ac_var], ac_cv_cflags_[[$1]])dnl
AC_CACHE_CHECK([whether the compiler supports $1], ac_var,
143 144
[ac_wine_try_cflags_saved=$CFLAGS
CFLAGS="$CFLAGS $1"
145
AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(int argc, char **argv) { return 0; }]])],
146
               [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
147
CFLAGS=$ac_wine_try_cflags_saved])
148
AS_VAR_IF([ac_var],[yes],[m4_default([$2], [EXTRACFLAGS="$EXTRACFLAGS $1"])], [$3])dnl
149
AS_VAR_POPDEF([ac_var])])
150

151 152 153 154 155 156 157
dnl **** Check if we can link an empty program with special CFLAGS ****
dnl
dnl Usage: WINE_TRY_CROSSCFLAGS(flags,[action-if-yes,[action-if-no]])
dnl
dnl The default action-if-yes is to append the flags to EXTRACROSSCFLAGS.
dnl
AC_DEFUN([WINE_TRY_CROSSCFLAGS],
158
[AS_VAR_PUSHDEF([ac_var], ac_cv_crosscflags_[[$1]])dnl
159 160 161 162
AC_CACHE_CHECK([whether the cross-compiler supports $1], ac_var,
[ac_wine_try_cflags_saved=$CFLAGS
ac_wine_try_cflags_saved_cc=$CC
ac_wine_try_cflags_saved_exeext=$ac_exeext
163
CFLAGS="$CFLAGS $EXTRACROSSCFLAGS -nostartfiles -nodefaultlibs $1"
164 165
CC="$CROSSCC"
ac_exeext=".exe"
166
AC_LINK_IFELSE([AC_LANG_SOURCE([[int __cdecl mainCRTStartup(void) { return 0; }]])],
167 168 169 170 171 172 173
               [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
CFLAGS=$ac_wine_try_cflags_saved
CC=$ac_wine_try_cflags_saved_cc
ac_exeext=$ac_wine_try_cflags_saved_exeext])
AS_VAR_IF([ac_var],[yes],[m4_default([$2], [EXTRACROSSCFLAGS="$EXTRACROSSCFLAGS $1"])], [$3])dnl
AS_VAR_POPDEF([ac_var])])

174 175 176 177 178
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],
179 180
[AS_VAR_PUSHDEF([ac_var], ac_cv_cflags_[[$1]])dnl
ac_wine_try_cflags_saved=$CFLAGS
181
CFLAGS="$CFLAGS $1"
182 183 184 185 186
AC_LINK_IFELSE([AC_LANG_SOURCE([[void myfunc() {}]])],
               [AS_VAR_SET(ac_var,yes)], [AS_VAR_SET(ac_var,no)])
CFLAGS=$ac_wine_try_cflags_saved
AS_VAR_IF([ac_var],[yes], [$2], [$3])dnl
AS_VAR_POPDEF([ac_var])])
187

188 189 190 191 192 193 194 195 196 197 198
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)]))
199
AS_VAR_IF([ac_var],[yes],
200 201 202 203
      [CFLAGS="$CFLAGS -D$1"
  LINTFLAGS="$LINTFLAGS -D$1"])dnl
AS_VAR_POPDEF([ac_var])])

204 205 206 207 208 209 210 211 212 213
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"])

214 215
dnl **** Check for a mingw program, trying the various mingw prefixes ****
dnl
216
dnl Usage: WINE_CHECK_MINGW_PROG(variable,[value-if-not-found],[path])
217 218
dnl
AC_DEFUN([WINE_CHECK_MINGW_PROG],
219
[case "$host_cpu" in
220 221
  aarch64*)
    ac_prefix_list="aarch64-w64-mingw32-clang aarch64-w64-mingw32-gcc" ;;
222 223
  arm*)
    ac_prefix_list="armv7-w64-mingw32-clang armv7-w64-mingw32-gcc" ;;
224
  i[[3456789]]86*)
225
    ac_prefix_list="m4_foreach([ac_wine_prefix],[w64-mingw32, pc-mingw32, mingw32msvc, mingw32],
226
                        m4_foreach([ac_wine_cpu],[i686,i586,i486,i386],[ac_wine_cpu-ac_wine_prefix-gcc ]))
227 228
                     m4_foreach([ac_wine_cpu],[i686,i586,i486,i386],[ac_wine_cpu-w64-mingw32-clang ])
                     mingw32-gcc" ;;
229
  x86_64)
230
    ac_prefix_list="m4_foreach([ac_wine_prefix],[pc-mingw32, w64-mingw32, mingw32msvc],
231 232
                        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 ])" ;;
233 234 235
  *)
    ac_prefix_list="" ;;
esac
236
AC_CHECK_PROGS([$1],[$ac_prefix_list],[$2],[$3])])
237 238


239 240 241 242 243
dnl **** Define helper functions for creating config.status files ****
dnl
dnl Usage: AC_REQUIRE([WINE_CONFIG_HELPERS])
dnl
AC_DEFUN([WINE_CONFIG_HELPERS],
244 245
[wine_rules_file=conf$$rules.make
rm -f $wine_rules_file
246
AC_SUBST(SUBDIRS,"")
247
AC_SUBST(DISABLED_SUBDIRS,"")
248
AC_SUBST(CONFIGURE_TARGETS,"")
249 250

wine_fn_append_file ()
251 252 253
{
    AS_VAR_APPEND($[1]," \\$as_nl	$[2]")
}
254

255 256
wine_fn_append_rule ()
{
257
    AS_ECHO("$[1]") >>$wine_rules_file
258 259
}

260 261
wine_fn_config_makefile ()
{
262 263
    wine_fn_append_file SUBDIRS $[1]
    AS_VAR_IF([$[2]],[no],[wine_fn_append_file DISABLED_SUBDIRS $[1]])
264 265 266 267
}

wine_fn_config_symlink ()
{
268
    ac_links=$[@]
269
    wine_fn_append_rule \
270
"$ac_links:
271 272
	@./config.status \$[@]"
    for f in $ac_links; do wine_fn_append_file CONFIGURE_TARGETS $f; done
273
}])
274 275 276

dnl **** Define helper function to append a rule to a makefile command list ****
dnl
277
dnl Usage: WINE_APPEND_RULE(rule)
278
dnl
279
AC_DEFUN([WINE_APPEND_RULE],[AC_REQUIRE([WINE_CONFIG_HELPERS])wine_fn_append_rule "$1"])
280

281 282
dnl **** Create symlinks from config.status ****
dnl
283
dnl Usage: WINE_CONFIG_SYMLINK(target,src,enable)
284
dnl
285
AC_DEFUN([WINE_CONFIG_SYMLINK],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
286 287 288
m4_ifval([$3],[if test $3; then
])AC_CONFIG_LINKS([$1:$2])dnl
wine_fn_config_symlink[ $1]m4_ifval([$3],[
289 290
fi])[]dnl
])])
291

292 293
dnl **** Create a makefile from config.status ****
dnl
294
dnl Usage: WINE_CONFIG_MAKEFILE(file,enable,condition)
295
dnl
296
AC_DEFUN([WINE_CONFIG_MAKEFILE],[AC_REQUIRE([WINE_CONFIG_HELPERS])dnl
297
AS_VAR_PUSHDEF([ac_enable],m4_default([$2],[enable_]m4_bpatsubst([$1],[.*/\([^/]*\)$],[\1])))dnl
298 299
m4_append_uniq([_AC_USER_OPTS],ac_enable,[
])dnl
300
m4_ifval([$3],[$3 || ])wine_fn_config_makefile [$1] ac_enable[]dnl
301
AS_VAR_POPDEF([ac_enable])])
302

303 304 305 306 307
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
308
m4_ifval([$2],[test "x$[$2]" = xno || ])wine_fn_append_file CONFIGURE_TARGETS $1])
309

310 311 312 313
dnl **** Add a message to the list displayed at the end ****
dnl
dnl Usage: WINE_NOTICE(notice)
dnl Usage: WINE_WARNING(warning)
314 315 316
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)
317 318
dnl Usage: WINE_PRINT_MESSAGES
dnl
319 320
AC_DEFUN([WINE_NOTICE],[AS_VAR_APPEND([wine_notices],["|$1"])])
AC_DEFUN([WINE_WARNING],[AS_VAR_APPEND([wine_warnings],["|$1"])])
321 322 323 324 325 326

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.]) ;;
327 328
esac
m4_ifval([$4],[$4=${$4:-no}])])])
329 330 331 332 333 334

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

338 339 340 341
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.]) ;;
342 343
esac
m4_ifval([$4],[$4=${$4:-no}])])])
344

345
AC_DEFUN([WINE_PRINT_MESSAGES],[ac_save_IFS="$IFS"
346
if test "x$wine_notices" != x; then
347
    echo >&AS_MESSAGE_FD
348
    IFS="|"
349
    for msg in $wine_notices; do
350
        IFS="$ac_save_IFS"
351
        AS_VAR_IF([msg],[],,[AC_MSG_NOTICE([$msg])])
352 353
    done
fi
354
IFS="|"
355
for msg in $wine_warnings; do
356
    IFS="$ac_save_IFS"
357
    AS_VAR_IF([msg],[],,[echo >&2
358
        AC_MSG_WARN([$msg])])
359 360 361
done
IFS="$ac_save_IFS"])

362 363 364
dnl Local Variables:
dnl compile-command: "autoreconf --warnings=all"
dnl End: