aclocal.m4 13.3 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 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
ac_save_CPPFLAGS=$CPPFLAGS
CPPFLAGS="$CPPFLAGS $ac_cflags"
$6
CPPFLAGS=$ac_save_CPPFLAGS
124 125
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'`
126 127
AS_VAR_POPDEF([ac_libs])dnl
AS_VAR_POPDEF([ac_cflags])])dnl
128

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

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

153 154 155 156 157 158 159
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],
160
[AS_VAR_PUSHDEF([ac_var], ac_cv_crosscflags_[[$1]])dnl
161 162 163 164
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
165
CFLAGS="$CFLAGS $EXTRACROSSCFLAGS -nostartfiles -nodefaultlibs $1"
166 167
CC="$CROSSCC"
ac_exeext=".exe"
168
AC_LINK_IFELSE([AC_LANG_SOURCE([[void __stdcall __delayLoadHelper2(void *descr, void *addr) {} int __cdecl mainCRTStartup(void) { return 0; }]])],
169 170 171 172 173 174 175
               [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])])

176 177 178 179 180
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],
181 182
[AS_VAR_PUSHDEF([ac_var], ac_cv_cflags_[[$1]])dnl
ac_wine_try_cflags_saved=$CFLAGS
183
CFLAGS="$CFLAGS $1"
184 185 186 187 188
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])])
189

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

364 365 366
dnl Local Variables:
dnl compile-command: "autoreconf --warnings=all"
dnl End: