This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: setup.py: passing --prefix=/ makes --root ignored
Type: behavior Stage: resolved
Components: Distutils, Distutils2 Versions: Python 3.2, Python 3.3, Python 2.7, 3rd party
process
Status: closed Resolution: duplicate
Dependencies: Superseder: make install DESTDIR=/home/blah fails when the prefix specified is /
View: 9674
Assigned To: eric.araujo Nosy List: alexis, anal.phabet, eric.araujo, tarek
Priority: normal Keywords:

Created on 2012-09-27 19:15 by anal.phabet, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Messages (3)
msg171389 - (view) Author: Ron Hubbard (anal.phabet) Date: 2012-09-27 19:15
setup.py loses the DESTDIR aka --root iff "/" is passed as prefix


http://seclists.org/nmap-dev/2012/q3/1025

I can reproduce this now, but only with a prefix of "/". For example,
this works:

$ python setup.py install --prefix "/a" --root "/home/david/destdir"
copying build/scripts-2.7/ndiff -> /home/david/destdir/a/bin

But this doesn't:

$ python setup.py install --prefix "/" --root "/home/david/destdir"
copying build/scripts-2.7/ndiff -> /bin

This looks like a Python/distutils bug.


the same seems to happen on python install:
when installing python 2.7.2, "2to3", "idle", "pydoc" and "smptd.py" are installed into /bin rather than into the chosen destdir

./python -E ./setup.py install \
        --prefix=/ \
        --install-scripts=//bin \
        --install-platlib=//lib/python2.7/lib-dynload \
        --root=//opt/python/
[...]
running install
running build
running build_ext
INFO: Can't locate Tcl/Tk libs and/or headers


running install_scripts
copying build/scripts-2.7/smtpd.py -> /bin
copying build/scripts-2.7/idle -> /bin
copying build/scripts-2.7/pydoc -> /bin
copying build/scripts-2.7/2to3 -> /bin
changing mode of /bin/smtpd.py to 755
changing mode of /bin/idle to 755
changing mode of /bin/pydoc to 755
changing mode of /bin/2to3 to 755
running install_egg_info
Writing /lib/python2.7/lib-dynload/Python-2.7.2-py2.7.egg-info
if test -f //opt/python//bin/python -o -h //opt/python//bin/python; \
then rm -f //opt/python//bin/python; \
else true; \
fi
(cd //opt/python//bin; ln python2.7 python)
rm -f //opt/python//bin/python-config
(cd //opt/python//bin; ln -s python2.7-config python-config)
test -d //opt/python//lib/pkgconfig || /bin/install -c -d -m 755 //opt/python//lib/pkgconfig
rm -f //opt/python//lib/pkgconfig/python.pc
[snip]
msg171390 - (view) Author: Ron Hubbard (anal.phabet) Date: 2012-09-27 19:34
python 2.7.2 installation:
CFLAGS="-D_GNU_SOURCE -D_BSD_SOURCE" ./configure -C --prefix="/" || exit 1
make -j9  || exit 1
make DESTDIR="//opt/python" install || exit 1

what python generates out of 
       --install-scripts=//bin \
       --install-platlib=//lib/python2.7/lib-dynload \
is both wrong (i.e. the platlib stuff also ignores DESTDIR passed to make)
msg171502 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2012-09-28 16:32
Thanks for the report.  This bug was already known, but I haven’t had the time yet to fix it.  I’m adding you to the nosy list on the other bug so that you can follow progress and maybe help testing the fix.
History
Date User Action Args
2022-04-11 14:57:36adminsetgithub: 60269
2012-09-28 16:32:46eric.araujosetstatus: open -> closed


assignee: eric.araujo
type: security -> behavior
stage: resolved
title: Python/distutils setup.py: passing --prefix / makes --root ignored -> setup.py: passing --prefix=/ makes --root ignored
nosy: + alexis, tarek, eric.araujo
versions: + 3rd party, Python 3.2, Python 3.3
messages: + msg171502
superseder: make install DESTDIR=/home/blah fails when the prefix specified is /
components: + Distutils, Distutils2, - Build
resolution: duplicate
2012-09-27 19:34:41anal.phabetsetmessages: + msg171390
2012-09-27 19:28:04anal.phabetsettype: security
2012-09-27 19:15:19anal.phabetcreate