# New Ticket Created by Allison Randal
# Please include the string: [perl #53452]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=53452 >
I've just upgraded my laptop to Mac OS 10.5.2 (from 10.4). I'm using
Apple's build of gcc, 4.0.1.
Since the upgrade, when I change a core PMC (even just adding a comment)
and then try to run 'make' or 'perl Configure.pl && make' on a checkout
that's been built before, I get an error when I hit this stage of the
compile:
---
perl -MExtUtils::Command -e mkpath blib/lib
ar cr blib/lib/libparrot.a src/string.o src/ops/core_ops.o [...]
---
The error is:
---
ar: blib/lib/libparrot.a is a fat file (use libtool(1) or lipo(1) and
ar(1) on it)
ar: blib/lib/libparrot.a: Inappropriate file type or format
make: *** [blib/lib/libparrot.a] Error 1
---
If I run 'make realclean' then libparrot.a and several other related
files are deleted, and I can build again.
Also relevant, when I run a fresh 'make' after 'realclean', ranlib warns:
---
ranlib: archive library: blib/lib/libparrot.a will be fat and ar(1) will
not be able to operate on it
---
That part of the Makefile is generated from the following two lines in
config/gen/makefiles/root.in:
Part of "BUILD TOOLS CONFIGURATIONS":
---
AR_CR = @ar@ @ar_flags@
---
And part of the "$(LIBPARROT_STATIC)" target:
---
$(AR_CR) @[EMAIL PROTECTED]@ @ar_extra@ $(O_FILES)
---
Partial solution -- based on the documentation in 'man libtool':
---
Libtool with -static is intended to replace ar(5) and ranlib.
---
I modified config/gen/makefiles/root.in, changing:
---
$(LIBPARROT_STATIC) : $(O_FILES)
$(MKPATH) @blib_dir@
$(AR_CR) @[EMAIL PROTECTED]@ @ar_extra@ $(O_FILES)
$(RANLIB) $@
---
to:
---
$(LIBPARROT_STATIC) : $(O_FILES)
$(MKPATH) @blib_dir@
libtool -static -o @[EMAIL PROTECTED]@ @ar_extra@ $(O_FILES)
---
And it compiles fine, passes 'make test', and recompiles fine after
modifying a core PMC. But, I suspect this is a modification local to
Apple's GCC, so what works here won't work anywhere else. I need a way
to alter the "LIBPARROT_STATIC" target from config/init/hints/darwin.pm
so it uses 'libtool -static' instead of 'ar' and 'ranlib'.
That's as far as I had time to work on it today, so I'll raise the
question to the group (especially to those who have been working on the
configure and build systems): What's the best way to allow these more
extensive modifications to the build instructions for particular
platforms/compilers?
Allison