Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 30 Jan 2018 23:15:24 +0100
From:      Jan Beich <jbeich@FreeBSD.org>
To:        bob prohaska <fbsd@www.zefox.net>
Cc:        Steve Kargl <sgk@troutmask.apl.washington.edu>, freebsd-arm@freebsd.org, freebsd-ports@freebsd.org
Subject:   Re: Use of undeclared identifier 'fpgetmask'
Message-ID:  <a7wv-803n-wny@FreeBSD.org>
In-Reply-To: <20180130181359.GA22433@www.zefox.net> (bob prohaska's message of "Tue, 30 Jan 2018 10:13:59 -0800")
References:  <20180120222638.GA82875@www.zefox.net> <20180120230421.GA57305@troutmask.apl.washington.edu> <20180121160130.GA85652@www.zefox.net> <20180121173553.GA73646@troutmask.apl.washington.edu> <20180121175840.GA85758@www.zefox.net> <20180121181214.GA73826@troutmask.apl.washington.edu> <20180122164848.GA89314@www.zefox.net> <20180122181426.GA81243@troutmask.apl.washington.edu> <20180130181359.GA22433@www.zefox.net>

next in thread | previous in thread | raw e-mail | index | archive | help
bob prohaska <fbsd@www.zefox.net> writes:

> On Mon, Jan 22, 2018 at 10:14:26AM -0800, Steve Kargl wrote:
>
>> On Mon, Jan 22, 2018 at 08:48:48AM -0800, bob prohaska wrote:
>> > > What happens if you force inclusion by deleting #ifdef HAVE_IEEEFP_H?
>> > > 
>> > After commenting out the test, running make clean and restarting a single-
>> > threaded make the process stops with the same error:
>> > 
>> > src/main.cpp:679:15: error: use of undeclared identifier 'fpgetmask'
>> >     fpsetmask(fpgetmask() & ~(FP_X_DZ | FP_X_INV));
>> > 
>> > 
>> > I've placed a copy of the make log file at 
>> > http://www.zefox.net/~fbsd/rpi2/inkscape/ieeefp_h_included.log
>> > 
>> 
>> rpi2 is an ARM based board, right?  Compare 
>> /usr/src/sys/amd64/include/ieeefp.h
>> /usr/src/sys/arm/include/ieeefp.h
>> It seems that FreeBSD' ARM architecture doesn't implement
>> the functions associate with ieeefp.h.  You probably need
>> to force HAVE_IEEEF_H to 0.
>
> It looks as if there's no option to set HAVE_IEEEFP_H to zero,
> at least not in a straightforward way. Poking around in
> /usr/ports/graphics/inkscape/work/inkscape-0.92.2 one finds
> a README which describes two manual build procedures, but
> those seem to automate the setting of HAVE_IEEEFP_H
>
> The relevant lines appear to be:
>
> for ac_header in ieeefp.h
> do :
>   ac_fn_cxx_check_header_mongrel "$LINENO" "ieeefp.h" "ac_cv_header_ieeefp_h" "$ac_includes_default"
> if test "x$ac_cv_header_ieeefp_h" = xyes; then :
>   cat >>confdefs.h <<_ACEOF
> #define HAVE_IEEEFP_H 1
> _ACEOF

autoconf often supports overriding e.g.,

  CONFIGURE_ENV += ac_cv_header_ieeefp_h=no
  CONFIGURE_ENV += ac_cv_func_setmask=no

except those would be nop due to USES=cmake.

> main.cpp:679:15: error: use of undeclared identifier 'fpgetmask'
>     fpsetmask(fpgetmask() & ~(FP_X_DZ | FP_X_INV));

CMakeScripts/ConfigChecks.cmake has the following line

  CHECK_FUNCTION_EXISTS(fpsetmask HAVE_FPSETMASK)

which is under the following caveat

  * ``check_function_exists()`` only verifies linking, it does not verify
    that the function is declared in system headers.

suggesting fpsetmask() is actually present on armv6

  $ nm -D /lib/libc.so.7 | fgrep fpsetmask
  00050dd4 T fpsetmask

cf. https://svnweb.freebsd.org/changeset/base/264696



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?a7wv-803n-wny>