# 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

Reply via email to