On Jan 22, 2010, at 4:59 PM, Ryan Schmidt wrote:

> On Jan 22, 2010, at 18:20, Scott Haneda wrote:
> 
>> For reasons that are too silly to repeat, I am now sitting on a clean 10.6 
>> updated install, with a new MacPorts, and zero ports installed.  I will be 
>> installing all my ports new and clean.
>> 
>> In macports.conf I see:
>>   # CPU architecture to compile for. Defaults to i386 or ppc on Mac OS X 10.5
>>   # and earlier, depending on the CPU type detected at runtime. On Mac OS X 
>> 10.6
>>   # the default is x86_64 if the CPU supports it, i386 otherwise.
>>   #build_arch                     i386
>> 
>> And also:
>>   # Options for Universal Binaries (+universal variant)
>> 
>>   # machine architectures
>>   universal_archs         x86_64 i386
>> 
>> This is a MacBook that I use for development, 1.83 Intel Core 2 Duo
>> 
>> I am thinking I want to build UB for everything.  This just seems better in 
>> the long run.  I will run into the problems of some ports not being able to 
>> support it, and can work to solve those problems, or file tickets to get 
>> them solved.  Is this a good or bad idea?
> 
> I personally do this (x86_64 i386 universal) since I must in order to build 
> wine. But as you say some ports will not build this way at this time, so 
> watch out and be prepared to retry without universal. (sudo port clean 
> problemport && sudo port install problemport -universal)

I am still not understanding this.  I add multiple values to build_arch and 
uncomment it?
#build_arch                     i386
 -- would become --
build_arch      x86_64  i386

Arent those both intel specific architectures?  I was under the impression a 
Universal Binary was a 4 way thing, and would support PPC as well, so some 
portion, if not all of this list:
386 ppc ppc64 ppc7400 ppc970 x86_64

Or is it just going to be impossible to expect to build for PPC as well on an 
Intel machine?  I suppose I do not even want to, as it is just bloat? 

I just ran `file` on some of the more popular binaries that Apple ships, and I 
find all of them are three way, take httpd for example:

$file /usr/sbin/httpd
/usr/sbin/httpd: Mach-O universal binary with 3 architectures
/usr/sbin/httpd (for architecture x86_64):      Mach-O 64-bit executable x86_64
/usr/sbin/httpd (for architecture i386):        Mach-O executable i386
/usr/sbin/httpd (for architecture ppc7400):     Mach-O executable ppc

So ppc and ppc64 are missing.  I am only asking as I am in a position to start 
clean.  If I make a poor decision now, I will have to go back and rebuild all 
my ports, which is risky for some.  `mtr` is not something I am worried about, 
but some of the more complex chain dependent ones where my own personal files 
become part of the install, I worry about just firing off even a `upgrade` 
command, let alone something that will run the entire install list and just 
upgrade them to a new arch.

You mentioned you used "x86_64 i386 universal", I am assuming that is the value 
you have for "universal_archs"?  Can you explain that some?  As "universal" 
seems a keyword, not a real architecture of any form.

>> Would I just delete the i386 string from the "universal_archs"?
> 
> No... that would leave your universal_archs with just "x86_64", and a single 
> architecture kind of by definition wouldn't be universal. You would leave 
> universal_archs as it is and build your ports with the +universal variant so 
> they are built for x86_64 and i386.

Got it.  But why then, do those ports that support the +universal at best seem 
to be building out a 2 way file, at most three? There is an entire line of PPC 
arch's that I am not seeing mentioned, and not understanding.

>> I add +universal to most oft the ports I installed in the past, which 
>> sometimes got me into trouble, as for example, with php5-mcrypt, I had to 
>> also rebuild the entire chain that it was dependent on.  
>> 
>> Where do I define that I need not remember to add +universal, and it will be 
>> the default, and is that even a good idea?
> 
> variants.conf. I do this, as indicated above.

At the bottom of variants.conf I added:
+universal

I assume that is the same as appending +universal to a `port install` command.  
And if something does not work, or I `port info` a port and notice there is no 
universal variant, I simply -universal and it will over-ride it?

I just ran:
$sudo port -d install memtester
$port installed
The following ports are currently installed:
  memtester @4.1.2_0 (active)

$file /opt/local/bin/memtester
/opt/local/bin/memtester: Mach-O 64-bit executable x86_64

But I had +universal set in variants.conf, I thought this would stop it in it's 
tracks, and force me to make a decision as to what I need to do at that point.  
How would I know this port needs altering for fixing, if it just went in clean?

Or I guess this is unique, and has to do with:
DEBUG: not using configure, so not adding the default universal variant

If this was using configure, then I would have been stopped?

>> Looking for suggestions on the pros and cons.  I am also fine with just 
>> leaving things are they are, but it is my understanding that means my builds 
>> are only good for this machine or very similar machines.
> 
> I would say MacPorts builds are always only good for this machine or very 
> similar machines. Certainly the major OS version (10.4, 10.5, 10.6) and CPU 
> architecture (ppc, ppc64, i386, x86_64) must match.

How come?  Why could I not built out mcrypt.so for all 4 of those 
architectures, and have a .so extension I could share with others if I desired? 
 I am asking this from a technical perspective, not that there is any desire to 
do such a thing. Though in thought, it may be nice, one could make a fully 
portable MAMP stack, use Apples Package Maker, or the inbuilt stuff in 
MacPorts, put the bits where the need to go, and you should have a MAMP system 
up and running on any machine from a old G3 imac forward.  Or am I reading into 
this all wrong?

>> I am still at a loss, for example, with my memteter Portfile, which does not 
>> have a +universal variant.  What would happen under an install of that port, 
>> where I add +univeral?  I assume it will just ignore that and build it for 
>> this architecture.
> 
> memtester has no universal variant because it sets "use_configure no". 
> Therefore it will build for build_arch.

I only did so because that is how the README for the source got me thinking:
    memtester is currently only distributed in source-code form. Building
    it, however, is simple -- just type `make`.  There's no `configure` script
    or anything like that.  

But it also states:
    If you have a really strange system/toolchain, you might need to edit the
    conf-cc or conf-ld files, but try to build it without changes first.

I do not really know what to put into those files, or if I should skip that 
method and use some form of configure appending.  However, since the source 
does not use configure, I guess I have to go the road of editing the conf-cc 
and conf-ld files.

I will do what I can to learn more about this stuff, this is really not my area 
of expertise though.  Any pointers are appreciated.

>> But then I look at `port info mtr` and see it has:
>> Variants:             darwin_10, universal
>> 
>> But looking at the Portfile, these are the only things I see different to me:
>> configure.args-append --without-gtk
>> 
>> platform darwin 10 {
>>   configure.env-append LIBS=-lresolv
>> }
>> 
>> Is that all I have to do, is add in some appended args and will get 
>> universal?  I suspect I need to go back to the source, and read through it 
>> and see what it takes to build memtester out universal, but I am still at a 
>> loss as to what is generating the "Variants: darwin_10, universal" line.
> 
> mtr has a universal variant because it does not contain the lines 
> "use_configure no" or "universal_variant no" and therefore inherits the 
> default universal variant defined in MacPorts base which works for most 
> autoconf-based software.
> 
> mtr has a darwin_10 variant because it contains a section "platform darwin 
> 10".
> 
> To create a universal variant for ports that aren't standard and can't use 
> MacPorts' built-in universal variant, simply define one:
> 
> variant universal {
>       [do whatever's necessary to build universal]
> }

Ok, so that is the tricky bit I am going to need to figure out with memtester, 
thanks.

> It may be instructive to grep existing portfiles for "variant universal" to 
> see what they do.

I just did that, there is a lot of stuff in there to go through, thanks for the 
suggestion. Hopefully I find one with use_configure set to no, and also still 
showing "variant universal".  I *think* that will get me closest to the changes 
I need to make in the memtester Portfile.

Thank you again for all your help.
-- 
Scott * If you contact me off list replace talklists@ with scott@ * 

_______________________________________________
macports-users mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macports-users

Reply via email to