Opened 10 years ago

Closed 7 months ago

#45133 closed defect (fixed)

scons @2.3.3: Port tries to install outside of prefix when prefix is in /Library

Reported by: djvasi@… Owned by: macports-tickets@…
Priority: Low Milestone:
Component: ports Version: 2.3.1
Keywords: Cc:
Port: scons

Description

On install, I get :

[snip]
--->  Staging scons into destroot
. changed
	gid expected 0 found 80 modified
./usr missing (created)
. missing (directory not created: File exists)
./Applications missing (created)
[snip]
./www missing (created)
xinstall: mkdir /Library/MacPorts/10.9/var/macports/build/_Users_vasi_Source_macports_dports_devel_scons/scons/work/destroot/Library/MacPorts/10.9/share/doc
xinstall: mkdir /Library/MacPorts/10.9/var/macports/build/_Users_vasi_Source_macports_dports_devel_scons/scons/work/destroot/Library/MacPorts/10.9/share/doc/scons
xinstall: mkdir /Library/MacPorts/10.9/var/macports/build/_Users_vasi_Source_macports_dports_devel_scons/scons/work/destroot/Library/MacPorts/10.9/share/doc/scons/examples
running install
running build
running build_py
running build_scripts
running install_lib
creating /usr/local/lib/scons-2.3.3
error: could not create '/usr/local/lib/scons-2.3.3': Operation not permitted
Command failed:  cd "/Library/MacPorts/10.9/var/macports/build/_Users_vasi_Source_macports_dports_devel_scons/scons/work/scons-2.3.3" && /Library/MacPorts/10.9/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 setup.py --no-user-cfg install --prefix=/Library/MacPorts/10.9/Library/Frameworks/Python.framework/Versions/2.7 --root=/Library/MacPorts/10.9/var/macports/build/_Users_vasi_Source_macports_dports_devel_scons/scons/work/destroot 
Exit code: 1
Error: org.macports.destroot for port scons returned: command execution failed

Change History (4)

comment:1 Changed 10 years ago by djvasi@…

It looks like the problem relates to this part of setup.py:

def force_to_usr_local(self):
    """
    A hack to decide if we need to "force" the installation directories
    to be under /usr/local.  This is because Mac Os X Tiger and
    Leopard, by default, put the libraries and scripts in their own
    directories under /Library or /System/Library.
    """
    return (sys.platform[:6] == 'darwin' and
            (self.install_dir[:9] == '/Library/' or
             self.install_dir[:16] == '/System/Library/'))

It assumes that since my prefix is in /Library, it must be a problem. But there's no particular reason I shouldn't be able to put my MacPorts prefix there!

comment:2 Changed 10 years ago by ryandesign (Ryan Carsten Schmidt)

Cc: landonf removed
Owner: changed from macports-tickets@… to landonf@…
Port: scons added

comment:3 Changed 9 years ago by ryandesign (Ryan Carsten Schmidt)

Owner: changed from landonf@… to macports-tickets@…
Priority: NormalLow
Summary: scons @2.3.3: Port tries to install outside of prefixscons @2.3.3: Port tries to install outside of prefix when prefix is in /Library

You're probably the only user who ever configured MacPorts with a prefix inside /Library so fixing this is a low priority.

comment:4 Changed 7 months ago by ryandesign (Ryan Carsten Schmidt)

Resolution: fixed
Status: newclosed

It looks like this code was added with the idea that if you were trying to install scons using the version of python that shipped with macOS, then you would not want scons to try to install itself into the macOS python directory; you would want it to install it somewhere more accessible like /usr/local.

The code was removed as part of a refactor that first shipped in scons 4.0.0. The commit message and the PR don't specifically mention removing this code, except for the mention of removing "obsolete build logic" in the PR title, so I don't know if the refactored code still has this behavior but I couldn't immediately find anything equivalent in the code so I hope this is fixed. If not, please reopen.

Note: See TracTickets for help on using tickets.