Date: Mon, 1 Jul 2002 16:18:47 +0200 (CEST) From: Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at> To: Scott Bolte <listS+freebsd-questions@niss.com> Cc: freebsd-questions@freebsd.org, <freebsd-emulators@freebsd.org>, <wine-devel@winehq.com> Subject: Re: heads up: wine 20020605 broken on FreeBSD, workaround included Message-ID: <Pine.BSF.4.44.0207011602370.52277-100000@naos.dbai.tuwien.ac.at> In-Reply-To: <200207011338.g61DcQ601786@crag.niss.com>
next in thread | previous in thread | raw e-mail | index | archive | help
[ I'm now also Cc:ing this to the Wine developers, thus the full-quote. In fact, all non-GLIBC platforms seem to be affected by this bug! ] Based on your pointer, I believe I found the problem. In aclocal.m4 we have: AC_DEFUN([WINE_CHECK_ERRNO], [AC_CACHE_CHECK([for reentrant libc: $1],[wine_cv_libc_r_$1], [AC_TRY_RUN([int myerrno = 0; char buf[256]; int *$1(){return &myerrno;} main(){connect(0,buf,255); exit(!myerrno);}], wine_cv_libc_r_$1=yes, wine_cv_libc_r_$1=no, wine_cv_libc_r_$1=yes)]) AS_IF([test "$wine_cv_libc_r_$1" = "yes"],[$2],[$3])]) which, in configure, becomes: int myerrno = 0; char buf256; int *__error(){return &myerrno;} main(){connect(0,buf,255); exit(!myerrno);} That is, instead of an array of 256 characters, we have one character, and the invocation of connect() is definitely incorrect. Could someone more familiar with autoconf please have a look at this? Gerald On Mon, 1 Jul 2002, Scott Bolte wrote: > Over the weekend I tried to get wine 20020605 to run on a > new installation of FreeBSD 4.6. It took a while, I haven't > tried wine since 1997 after all, but I determined that my > problems were due to configure's reentrant libc test failing > when building the port. > > The wine_cv_libc_reentrant test in configure.ac first checks > for Linux (__errno_location) and then tests for FreeBSD > (__error). I don't have more time to figure out why, but > nesting the FreeBSD test that way results in a false > negative. The configuration will continue, as will the > build, but the resulting non-reentrant code goes into an > endless loop when trying to spawn threads. > > A crude workaround, for FreeBSD users at least, is to > replace the Linux test with the FreeBSD one. This needs to > be done before configure is run. I did it by hand, but I > expect the following code would do the trick. > > % cd /usr/ports/emulators/wine > % make patch > % perl -i -pe 's/__errno_location/__error/' work/wine-20020605/configure.ac > % make > % make install > > Below is the autoconf test script that demonstrates the > problem. It needs to be run in > /usr/ports/emulators/wine/work/wine-20020605/configure.ac > > Scott > > P.S. I'm not on the freebsd-emulators mailing list, but I > see from freebsd-questions that at least one other > person got wine to compile on 4.6. I can't explain > why it worked for him and not for me. However, I > installed a brand new copy of 4.6 from the standard > ISO images just to run wine. > > ---- testconf.ac > dnl Process this file with autoconf to produce a configure script. > dnl Original author: Michael Patra > dnl See ChangeLog file for detailed change history. > > m4_define(WINE_VERSION,regexp(m4_include(VERSION),[version \([-.0-9A-Za-z]+\)],[\1])) > > AC_PREREQ(2.53) > AC_INIT([Wine],WINE_VERSION) > AC_CONFIG_SRCDIR(server/atom.c) > AC_CONFIG_AUX_DIR(tools) > > dnl **** Check for some programs **** > > AC_PROG_CC > > dnl **** Check for reentrant libc **** > > wine_cv_libc_reentrant=no > > dnl ##### > dnl ##### There is a problem if the FreeBSD test is nested > dnl ##### after the Linux test. In that instance, it fails. > dnl ##### If, on the other hand, it is tested first, it works. > dnl ##### > dnl ##### Swap the order of two following test case to see > dnl ##### how they differ. (Ignore the second case since it > dnl ##### will use cached data.) > dnl ##### > > dnl FreeBSD style errno location > WINE_CHECK_ERRNO([__error], [wine_cv_libc_reentrant=__error]) > > dnl Linux style errno location > WINE_CHECK_ERRNO([__errno_location], [wine_cv_libc_reentrant=__errno_location], > dnl FreeBSD style errno location > WINE_CHECK_ERRNO([__error], [wine_cv_libc_reentrant=__error] > )) > -- Gerald "Jerry" pfeifer@dbai.tuwien.ac.at http://www.dbai.tuwien.ac.at/~pfeifer/ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.44.0207011602370.52277-100000>