blob: 95c6c319139a796a06a251cd34cd9797d10b8583 [file] [log] [blame]
Alexandre Julliard67e8dc62002-05-20 18:29:58 +00001dnl Macros used to build the Wine configure script
2dnl
3dnl Copyright 2002 Alexandre Julliard
4dnl
5dnl This library is free software; you can redistribute it and/or
6dnl modify it under the terms of the GNU Lesser General Public
7dnl License as published by the Free Software Foundation; either
8dnl version 2.1 of the License, or (at your option) any later version.
9dnl
10dnl This library is distributed in the hope that it will be useful,
11dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
12dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13dnl Lesser General Public License for more details.
14dnl
15dnl You should have received a copy of the GNU Lesser General Public
16dnl License along with this library; if not, write to the Free Software
17dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18dnl
Alexandre Julliard1d8d0172002-08-02 19:34:21 +000019dnl As a special exception to the GNU Lesser General Public License,
20dnl if you distribute this file as part of a program that contains a
21dnl configuration script generated by Autoconf, you may include it
22dnl under the same distribution terms that you use for the rest of
23dnl that program.
Alexandre Julliard67e8dc62002-05-20 18:29:58 +000024
25dnl **** Get the ldd program name; used by WINE_GET_SONAME ****
26dnl
27dnl Usage: WINE_PATH_LDD
28dnl
29AC_DEFUN([WINE_PATH_LDD],[AC_PATH_PROG(LDD,ldd,true,/sbin:/usr/sbin:$PATH)])
30
31dnl **** Extract the soname of a library ****
32dnl
33dnl Usage: WINE_GET_SONAME(LIBRARY, FUNCTION, [OTHER_LIBRARIES])
34dnl
35AC_DEFUN([WINE_GET_SONAME],
36[AC_REQUIRE([WINE_PATH_LDD])
37AC_CACHE_CHECK([for -l$1 soname], ac_cv_lib_soname_$1,
38[ac_get_soname_save_LIBS=$LIBS
39LIBS="-l$1 $3 $LIBS"
40 AC_LINK_IFELSE([AC_LANG_CALL([], [$2])],
41 [ac_cv_lib_soname_$1=`$ac_cv_path_LDD conftest$ac_exeext | grep lib$1\\.so | sed 's/^[[ ]]*\([[^ ]]*\)[[ ]]*=>.*$/\1/'`
42 if test "x$ac_cv_lib_soname_$1" = "x"
43 then
44 ac_cv_lib_soname_$1="lib$1.so"
45 fi],
46 [ac_cv_lib_soname_$1="lib$1.so"])
47 LIBS=$ac_get_soname_save_LIBS])
48if test "x$ac_cv_lib_soname_$1" != xNONE
49then AC_DEFINE_UNQUOTED(AS_TR_CPP(SONAME_LIB$1),"$ac_cv_lib_soname_$1",
50 [Define to the soname of the lib$1 library.])dnl
51fi])
52
53dnl **** Check if a structure contains a specified member ****
54dnl
55dnl Usage: WINE_CHECK_STRUCT_MEMBER(struct,member,[includes,[action-if-found,[action-if-not-found]]])
56dnl
57AC_DEFUN([WINE_CHECK_STRUCT_MEMBER],
58[AC_CACHE_CHECK([for $2 in struct $1], ac_cv_c_$1_$2,
59 AC_TRY_COMPILE([$3],[struct $1 s; s.$2 = 0],ac_cv_c_$1_$2="yes",ac_cv_c_$1_$2="no"))
60AS_IF([ test "x$ac_cv_c_$1_$2" = "xyes"],[$4],[$5])
61])
62
63dnl **** Check for reentrant libc ****
64dnl
65dnl Usage: WINE_CHECK_ERRNO(errno-name,[action-if-yes,[action-if-no]])
66dnl
67dnl For cross-compiling we blindly assume that libc is reentrant. This is
68dnl ok since non-reentrant libc is quite rare (mostly old libc5 versions).
69dnl
70AC_DEFUN([WINE_CHECK_ERRNO],
71[AC_CACHE_CHECK([for reentrant libc: $1],[wine_cv_libc_r_$1],
72 [AC_TRY_RUN([int myerrno = 0;
Alexandre Julliard67e8dc62002-05-20 18:29:58 +000073int *$1(){return &myerrno;}
Alexandre Julliard770c33f2002-07-01 18:39:26 +000074main(){close(333); close(333); exit(!myerrno);}],
Alexandre Julliard67e8dc62002-05-20 18:29:58 +000075 wine_cv_libc_r_$1=yes, wine_cv_libc_r_$1=no,
76 wine_cv_libc_r_$1=yes)])
77AS_IF([test "$wine_cv_libc_r_$1" = "yes"],[$2],[$3])])
78
79dnl **** Link C code with an assembly file ****
80dnl
81dnl Usage: WINE_TRY_ASM_LINK(asm-code,includes,function,[action-if-found,[action-if-not-found]])
82dnl
83AC_DEFUN([WINE_TRY_ASM_LINK],
Alexandre Julliard520852c2002-08-07 00:04:44 +000084[AC_TRY_LINK([void ac_asm(void) { asm([$1]); }
Alexandre Julliard84555cc2002-07-22 20:51:02 +000085[$2]],[$3],[$4],[$5])])
Alexandre Julliard67e8dc62002-05-20 18:29:58 +000086
87dnl **** Check if we can link an empty program with special CFLAGS ****
88dnl
89dnl Usage: WINE_TRY_CFLAGS(flags,[action-if-yes,[action-if-no]])
90dnl
91AC_DEFUN([WINE_TRY_CFLAGS],
92[ac_wine_try_cflags_saved=$CFLAGS
93CFLAGS="$CFLAGS $1"
94AC_TRY_LINK([],[],[$2],[$3])
95CFLAGS=$ac_wine_try_cflags_saved])
96
Alexandre Julliard05783b52002-12-11 00:21:55 +000097dnl **** Check whether we need to define a symbol on the compiler command line ****
98dnl
99dnl Usage: WINE_CHECK_DEFINE(name),[action-if-yes,[action-if-no]])
100dnl
101AC_DEFUN([WINE_CHECK_DEFINE],
102[AS_VAR_PUSHDEF([ac_var],[ac_cv_cpp_def_$1])dnl
103AC_CACHE_CHECK([whether we need to define $1],ac_var,
104 AC_EGREP_CPP(yes,[#ifndef $1
105yes
106#endif],
107 [AS_VAR_SET(ac_var,yes)],[AS_VAR_SET(ac_var,no)]))
108AS_IF([test AS_VAR_GET(ac_var) = yes],
109 [CFLAGS="$CFLAGS -D$1"
110 LINTFLAGS="$LINTFLAGS -D$1"])dnl
111AS_VAR_POPDEF([ac_var])])
112
Alexandre Julliarddf234a92002-05-22 02:10:39 +0000113dnl **** Check for ln ****
114dnl
115dnl Usage: WINE_PROG_LN
116dnl
117AC_DEFUN([WINE_PROG_LN],
118[AC_MSG_CHECKING([whether ln works])
119rm -f conf$$ conf$$.file
120echo >conf$$.file
121if ln conf$$.file conf$$ 2>/dev/null; then
122 AC_SUBST(LN,ln)
123 AC_MSG_RESULT([yes])
124else
125 AC_SUBST(LN,["cp -p"])
126 AC_MSG_RESULT([no, using $LN])
127fi
128rm -f conf$$ conf$$.file])
129
Alexandre Julliard67e8dc62002-05-20 18:29:58 +0000130dnl **** Create non-existent directories from config.status ****
131dnl
132dnl Usage: WINE_CONFIG_EXTRA_DIR(dirname)
133dnl
134AC_DEFUN([WINE_CONFIG_EXTRA_DIR],
135[AC_CONFIG_COMMANDS([$1],[test -d "$1" || (AC_MSG_NOTICE([creating $1]) && mkdir "$1")])])