Migration issue

Russell Jones russell.jones at physics.ox.ac.uk
Thu Jan 12 16:04:35 CET 2017

On 11/01/17 18:04, Adam Dershowitz wrote:
>> On Jan 11, 2017, at 10:05 AM, Russell Jones 
>> <russell.jones at physics.ox.ac.uk 
>> <mailto:russell.jones at physics.ox.ac.uk>> wrote:
>> On 06/01/17 17:37, Adam Dershowitz wrote:
>>>> On Jan 6, 2017, at 9:49 AM, Russell Jones 
>>>> <russell.jones at physics.ox.ac.uk> wrote:
>>>> On 06/01/17 14:28, Adam Dershowitz wrote:
>>>>> > On Jan 6, 2017, at 9:04 AM, Russell Jones 
>>>>> <russell.jones at physics.ox.ac.uk> wrote:
>>>>> >
>>>>> > On 06/01/17 13:22, Adam Dershowitz wrote:
>>>>> >> On Jan 6, 2017, at 2:20 AM, Ryan Schmidt 
>>>>> <ryandesign at macports.org> wrote:
>>>>> >>> On Jan 5, 2017, at 09:26, Adam Dershowitz wrote:
>>>>> >>>> I just tried what you suggested for py27-numpy and it just 
>>>>> activated without any error.
>>>>> >>> Yes, there will not be an error at activation time. However, 
>>>>> if you have anything installed that required py27-numpy to be 
>>>>> universal, it will now be broken.
>>>>> >>>> So, myports.txt has
>>>>> >>>>  py27-numpy @1.11.3_0+gfortran (active) platform='darwin 15' 
>>>>> archs='x86_64'
>>>>> >>>>
>>>>> >>>> And, after the migration it had installed both that and the 
>>>>> +universal variant.
>>>>> >>>> Yet, when I tried to activate the non-universal version it 
>>>>> did it without complaint.  So, I really don’t understand why the 
>>>>> +universal got built at all.
>>>>> >>>> Any suggestions?
>>>>> >>> I don't have any answers for you, beyond the usual reasons why 
>>>>> a port is installed universal, which are:
>>>>> >>>
>>>>> >>> - you explicitly asked for it to be installed universal
>>>>> >>> - you installed another port universal that depends on this port
>>>>> >>> - you installed another port that is 32-bit only, and you are 
>>>>> on a 64-bit machine, and the other port depends on this port (You 
>>>>> can check if the other port says "supported_archs i386 ppc" (or 
>>>>> the other way around))
>>>>> >>> - it enables the universal by default, and possibly requires 
>>>>> the universal variant to be used (You can check the portfile to 
>>>>> see if "default_variants +universal" appears)
>>>>> >> What seems really odd to me that I took I moved my myports.txt 
>>>>> from one machine to another.  So, I used one machine to generate 
>>>>> that list, and brought it to another machine to build.
>>>>> >> Both are MacBook pros (one new and one old) and that same list, 
>>>>> on the new machine, added a bunch of universal ports.  So, I don’t 
>>>>> see how any of the items in the list above could do that.  If it 
>>>>> was not universal on the old machine, why would it end up 
>>>>> universal on the new machine?
>>>>> >> Could going from 10.11 to 10.12 make something required to be 
>>>>> universal?  Or could going from Xcode 7 to 8 make a port 
>>>>> universal?  Because otherwise, I just don’t see why they should be 
>>>>> different.
>>>>> >> If anything, I would expect that the newer OS and newer 
>>>>> hardware should be able to do more things as 64 bit, so would 
>>>>> require less universal stuff.
>>>>> >>
>>>>> >> —Adam
>>>>> > Could you gzip and attach the list of ports from the old machine 
>>>>> and the output of "port installed requested"?
>>>>> >
>>>>> > The approach I suggested can't work, I now realize, as variants 
>>>>> aren't used for working out dependencies ( 
>>>>> https://trac.macports.org/wiki/FAQ#dependonvariant )
>>>>> >
>>>>> > Russell
>>>>> >
>>>>> Here are the two files.
>>>>> I don’t believe that I have ever intentionally installed anything 
>>>>> +universal.  So, I’m fairly sure that anything in this list that 
>>>>> is universal is because of 3, or 4 above.  But, when I then moved 
>>>>> to the new machine, it proceeded to make a bunch more things 
>>>>> universal.
>>>>> As far as I’m concerned pretty much all of my ports should just be 
>>>>> installed with default variants, so few, if any, should be 
>>>>> universal.  As everything is now working, this is not a big deal.  
>>>>> But, it does mean that upgrades often must be built, instead of 
>>>>> using the binary, which would be much faster and use less drive 
>>>>> space.
>>>>> thanks,
>>>>> —Adam
>>>> It looks like the extra +universal stuff comes from the things that 
>>>> were marked +universal installing all their dependencies 
>>>> +universal, which is expected behaviour. It looks like the restore 
>>>> script just installs the things listed in the order given, so 
>>>> doesn't preserve the variants exactly (+universal satisfies a 
>>>> request to install with no variants, I think, though I'm unsure). 
>>>> You could search and replace +universal (i.e. remove all instances 
>>>> of it) in myports, then tear-down and redo the install, I guess.
>>>> Russell
>>> But, this list is from the old machine.  My question is why the new 
>>> machine ended up with a lot more +universal.  For example, the list 
>>> that I sent does not have +universal for py27-numpy, while the new 
>>> machine, that I used the above list to install, did end up with 
>>> +universal.
>>> If the prior machine did not require +universal, based on the 
>>> dependency tree, why would the new machine require it?  Or was 
>>> something broken on the old machine, where it really did require 
>>> +universal, but never actually installed it that way, and I happened 
>>> never to hit that bug?
>>> —Adam
>> Well, in the scenario I'm thinking of, it would be because something 
>> was built +universal that depended on py27-numpy before py27-numpy 
>> was checked for whether it's installed by itself. It's possible to 
>> install programs -universal that are depended on by others that are 
>> +universal without error or warning, as you've seen. It also seems 
>> that link checking doesn't pick it up. I'm not sure how one goes 
>> about using the 32-bit portions of programs (as opposed to linking 
>> 32-bit binaries against them, which you do with the -m32 flag, IIRC) 
>> where the program is not 32-bit only. So it's possible you only ever 
>> used the 64-bit portions of the binaries and so didn't see any 
>> problems. I'll happily concede something else may be going on.
>> Russell
> If you are correct is there any way to fix it?  One option would be to 
> uninstall everything and then to avoid the migration script, and just 
> to reinstall my list of requested ports and see what happens.  But, 
> that will take some time.  Especially, since a good number of ports 
> end up building from source instead of binaries.  But, it could be 
> that the reason for this is that they ended up being +universal, so 
> they were not available on the buildbots.
> It does seem odd that gcc6, which is only a build dependancies, is 
> building +universal, as I would not expect that a compiler would have 
> to match what it is building (32 bit v 64 bit).  the only port that it 
> is needed to build and shows up as universal is py27-numpy.  So, I 
> would guess that is why it then gets forced to be universal.
> —Adam
Well, you could try something like this:
port installed | grep '+universal' | sed 's/@.*//' | xargs -n1 -IXYZ 
echo sudo port install XYZ -universal
(remove "echo" if the output looks sane).

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macports.org/pipermail/macports-users/attachments/20170112/851c9e4c/attachment.html>

More information about the macports-users mailing list