+universal help

Ryan Schmidt ryandesign at macports.org
Wed Jan 27 17:16:28 PST 2010

On Jan 27, 2010, at 14:12, Scott Haneda wrote:

> Hello, I am working on adding +universal to memtester, which is a "configure no" style portfile.
> Not using MacPorts, I just figured out how to get this to built out universal.  There are two files in the source
>    conf-cc
>    conf-ld

Yes, sorry, I was going to suggest to you that you modify conf-cc and conf-ld but I hadn't quite gotten everything to work yet.

> If I edit them to this:
>    head -n1 conf-cc
>    /usr/bin/gcc -O2 -DPOSIX -c -arch x86_64 -arch i386
>    head -n1 conf-ld
>    /usr/bin/cc -s -arch x86_64 -arch i386
> Previous pre-edit of the files were lacking the full path, and of course, lacking the string "-arch x86_64 -arch i386"
> Do I need to add ppc and the rest of the -arch's?  What is the full list I should be adding?

You need to add the archs the user has requested via the universal_archs variable in macports.conf, accessible in the portfile via the ${configure.universal_archs} variable. MacPorts has already assembled the string with all the arch flags for you. It's in the variable ${configure.universal_cflags}.

memtester also doesn't support selecting a different build_arch in macports.conf (portfile variable: ${configure.build_arch}). This is to be expected, since that also happens in a way that assumes a configure-based script; ports that don't use the default universal variant don't by default get build_arch support either. The solution is similar, and the pre-made architecture flag is in the variable ${configure.cc_archflags}.

> Just adding those will not get +universal to show up in `port info`, can someone guide me with that part?

Declare a universal variant.

variant universal {

> What is the best way to reinplace the data I need to?
> Here is what I get after running `make`:
>    $file memtester
>    memtester: Mach-O universal binary with 2 architectures
>    memtester (for architecture x86_64):	Mach-O 64-bit executable x86_64
>    memtester (for architecture i386):	Mach-O executable i386
> My guess would be to add:
> platform darwin 10 {
>    # Reinplace foo to alter the above two files
> }

This has nothing to do with Snow Leopard specifically so there's no call for a platform darwin 10 section.

> * If I do add -arch ppc and -arch ppc64, I get a bunch of errors, the main one being:
>    ld: symbol(s) not found for architecture ppc64
>    collect2: ld returned 1 exit status
>    lipo: can't open input file: /var/tmp//ccpg8LXX.out (No such file or directory)
>    make: *** [memtester] Error 1
> I just tried to built the current port on a PPC machine, and I get:
>    $sudo port install memtester
>    Password:
>    Warning: Can't open index file for source: file:///Users/me/macports
>    Error: Port memtester not found

Attached is a patch that allows memtester to build universal and for a non-default build_arch. It seems to build fine on Snow Leopard (x86_64 only, i386 only, x86_64/i386 universal) and Leopard on a G4 (ppc only, ppc/i386 universal).

-------------- next part --------------
A non-text attachment was scrubbed...
Name: memtester.diff
Type: application/octet-stream
Size: 730 bytes
Desc: not available
URL: <http://lists.macosforge.org/pipermail/macports-dev/attachments/20100127/9c8e8bb7/attachment.obj>

More information about the macports-dev mailing list