Subject: | CCFLAGS and "not a CODE |
Date: | Sun, 04 Dec 2011 07:12:34 +1100 |
To: | bug-Image-PNGwriter [...] rt.cpan.org |
From: | Kevin Ryde <user42 [...] zip.com.au> |
With recent debian i386 perl 5.14.2 "make test" gets an error
# Failed test 'use Image::PNGwriter;'
# at t/Image-PNGwriter.t line 9.
# Tried to use 'Image::PNGwriter'.
# Error: Not a CODE reference at /usr/lib/perl/5.14/DynaLoader.pm line 207.
# END failed--call queue aborted at /tmp/Image-PNGwriter-0.01/blib/lib/Image/PNGwriter.pm line 207.
# Compilation failed in require at (eval 4) line 2.
# BEGIN failed--compilation aborted at (eval 4) line 2.
# Looks like you failed 1 test of 2.
t/Image-PNGwriter.t .. Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/2 subtests
I believe the way Makefile.PL overrides CCFLAGS loses flags which are
necessary for binary compatibility on perl structs etc. It's probably
-D_FILE_OFFSET_BITS=64 needed, but I didn't try to see what affects it.
PNGwriter.o built with or without the CCFLAGS override come out
different in certain offsets, in particular PL_unitcheckav hits
somewhere wrong and the call_list() of that array generated by the
xsubpp goes bad resulting in "Not a CODE reference".
INC is a good place to add flags like $freetype_cflags (which is after
all just a -I include), per first diff below. Otherwise the
ExtUtils::MakeMaker docs advise that $Config{ccflags} should be kept in
CCFLAGS for this binary compatibility, per second diff below.
Message body is not shown because sender requested not to inline it.
Message body is not shown because sender requested not to inline it.