On June 19, Chris McDonough wrote: > On Thu, 2003-06-19 at 20:24, Adrian van den Dries wrote: > > Why not avoid that altogether and let the user supply the > > correct python? > > This is somewhat of a style choice
OK, ZC's call. ;-) > Well, as we all know, shell scripting kinda blows. There is no way that > I know of to portably use an array in shell, and I wanted to eventually > make it possible to use something other than bash to run the configure > script (bash has arrays, but I'm not sure if bourne shell does). You may be interested in Kenneth Almquist's ash (aka dash in Debian): Description: The Debian Almquist Shell "dash" is a POSIX compliant shell that is much smaller than "bash". We take advantage of that by making it the shell on the installation root floppy, where space is at a premium. . It can be usefully installed as /bin/sh (because it executes scripts somewhat faster than "bash"), or as the default shell either of root or of a second user with a userid of 0 (because it depends on fewer libraries, and is therefore less likely to be affected by an upgrade problem or a disk failure). It is also useful for checking that a script uses only POSIX syntax. > You're suggesting that "--prefix" be changed to "--home". ... > You're suggesting that specifying a "--home" implies that libraries will > be installed to $home/lib/python. > > This is where I get a little confused. How does a user signify that > Zope libraries should get installed into the Python site-package > directory? What happens if "--home" is left unspecified? Is the > "--prefix" option still around? If so, what does it do? Can you give > an example of a configure command that would imply that Zope libraries > get installed to site-packages? Erm, yes. I originally wanted --home and --prefix aliased, but I've changed my mind. It should mirror the behaviour of the same options to the distutils' install target. With the distutils, ``--home`` is version-agnostic (installs package ``foo`` into ``$HOME/lib/python/foo/``) and ``--prefix`` is version-aware (installs into ``$PREFIX/lib/pythonX.Y/site-packages``). ``inst/Makefile.in`` could probably be updated to do a --prefix install if $(PREFIX) is defined, else it defaults to a --home install. (Mockups) # the next commands are all equivalent # and produce the install target # ``python setup.py --home=/usr/local/zope`` python inst/configure.py --home=/usr/local/zope ./configure --home=/usr/local/zope ./configure # the next command produces the install target # ``python setup.py --prefix=/usr/local`` # which installs packages to /usr/local/lib/python2.2/site-packages python inst/configure.py --prefix=/usr/local > I think it is possible to tweak many things now via make -e after > examination of the makefile. OK, that is what the Deb should do. > Well, if you ignore the shell scripts, I think we're ok, then! Peaches! ... (Couple of hours later). OK, attached is a patch to inst/Makefile.in and inst/configure.py that distinguishes --home and --prefix parameters and passes them onto the distutils. But for some reason, there is still no difference between --prefix and --home, even though it's passing those options to the distutils. I suspect it might have something to do with this exerpt from setup.py:: # We create a custom "install scheme" that works the same way on all # platforms. We do this in order to prevent distutils from trying to # guess where to put our files on a per-platform basis. ZOPE_INSTALL_SCHEME = { 'purelib': '$base/lib/python', 'platlib': '$base/lib/python', 'headers': '$base/lib/python', 'scripts': '$base/bin', 'data' : '$base/lib/python', } That looks a little evil to me. a. -- Adrian van den Dries [EMAIL PROTECTED] Development team www.dev.flow.com.au FLOW Communications Pty. Ltd. www.flow.com.au
Index: doc/INSTALL.txt =================================================================== RCS file: /var/lib/cvs/flowcom/Zope/dist/doc/INSTALL.txt,v retrieving revision 1.1.1.1 diff -u -r1.1.1.1 INSTALL.txt --- doc/INSTALL.txt 18 Jun 2003 02:27:46 -0000 1.1.1.1 +++ doc/INSTALL.txt 20 Jun 2003 05:03:29 -0000 @@ -13,7 +13,7 @@ Recommendations - - You are recommended to build and install Zope as a non-root user. + - We recommend you build and install Zope as a non-root user. Building Zope @@ -23,8 +23,25 @@ ./configure --prefix=/where/to/install/zope make - If you do not specify a '--prefix' option, during a later step, Zope - will be installed into a default location. + or + + ./configure --home=/where/to/install/zope + make + + If you do not specify the '--home' or '--prefix' options, during a + later step, Zope will be installed into a default location. + + --prefix differs from --home by installing Python packages into + $PREFIX/lib/pythonX.Y/site-packages, where --home installs the + packages into $HOME/lib/python. These options map directly to + the respective options for the distutils install target. + + - '--prefix' is more suited for distributions and more highly + controlled environments. + + - '--home' will suit most environments that use multiple versions of + Python or Zope, or require a higher level of isolation from system + software. If the configure script cannot find a suitable Python interpreter for use with Zope, it will complain with an informative error Index: inst/Makefile.in =================================================================== RCS file: /var/lib/cvs/flowcom/Zope/dist/inst/Makefile.in,v retrieving revision 1.1.1.1 diff -u -r1.1.1.1 Makefile.in --- inst/Makefile.in 18 Jun 2003 02:27:46 -0000 1.1.1.1 +++ inst/Makefile.in 20 Jun 2003 05:25:33 -0000 @@ -35,26 +35,33 @@ .PHONY : clean install uninstall instance untestinst testinst build unbuild .PHONY : default +BUILD_STAMP=${BASE_DIR}/.build-stamp + # default: The default step (invoked when make is called without a target) default: build - @echo - @echo Zope built. Next, do \'make install\' \(or \'make instance\' - @echo to run a Zope instance directly from the build directory\). - @echo # build: Do whatever 'setup.py build' implies -build: +build: ${BUILD_STAMP} + +${BUILD_STAMP}: ${PYTHON} "${BASE_DIR}/setup.py" \ ${DISTUTILS_OPTS} build ${BUILD_FLAGS} + touch ${BUILD_STAMP} + @echo + @echo Zope built. Next, do \'make install\' \(or \'make instance\' + @echo to run a Zope instance directly from the build directory\). + @echo # unbuild: Remove the build directory (undo the make build step) unbuild: ${RMRF} ${BUILD_BASE} + ${RM} ${BUILD_STAMP} # install: Install a software home. -install: build +install: ${BUILD_STAMP} ${PYTHON} "${BASE_DIR}/setup.py" ${DISTUTILS_OPTS} install \ - --home="${PREFIX}" ${BUILD_FLAGS} ${INSTALL_FLAGS} + <<PREFIX_ARG>>="${PREFIX}" ${BUILD_FLAGS} ${INSTALL_FLAGS} + touch ${INSTALL_STAMP} @echo @echo Zope binaries installed successfully. @echo Now run \'${PREFIX}/bin/mkzopeinstance\' Index: inst/configure.py =================================================================== RCS file: /var/lib/cvs/flowcom/Zope/dist/inst/configure.py,v retrieving revision 1.1.1.1 diff -u -r1.1.1.1 configure.py --- inst/configure.py 18 Jun 2003 02:27:47 -0000 1.1.1.1 +++ inst/configure.py 20 Jun 2003 04:41:22 -0000 @@ -20,28 +20,31 @@ QUIET=0 +PREFIX="/opt" +MAKEFILE_MOD="" +MAKE_COMMAND="make" + if sys.platform == 'win32': - PREFIX = 'c:\\Zope-' + versions.ZOPE_MAJOR_VERSION - IN_MAKEFILE = 'Makefile.win.in' + PREFIX="C:" + MAKEFILE_MOD=".win" MAKE_COMMAND='the Visual C++ batch file "VCVARS32.bat" and then "nmake build"' -else: - PREFIX = '/opt/Zope-' + versions.ZOPE_MAJOR_VERSION - IN_MAKEFILE = 'Makefile.in' - MAKE_COMMAND='make' + +PREFIX = os.path.join(PREFIX, 'Zope-%s' % versions.ZOPE_MAJOR_VERSION) def main(): # below assumes this script is in the BASE_DIR/inst directory global PREFIX + PREFIX_ARG="--home" BASE_DIR=os.path.abspath(os.path.dirname(os.path.dirname(sys.argv[0]))) BUILD_BASE=os.path.join(os.getcwd(), 'build-base') PYTHON=sys.executable - MAKEFILE=open(os.path.join(BASE_DIR, 'inst', IN_MAKEFILE)).read() + MAKEFILE=open(os.path.join(BASE_DIR, 'inst', "Makefile%s.in" % MAKEFILE_MOD)).read() REQUIRE_LF_ENABLED = 1 REQUIRE_ZLIB=1 INSTALL_FLAGS = '' DISTUTILS_OPTS = '' try: - longopts = ["help", "ignore-largefile", "ignore-zlib", "prefix=", + longopts = ["help", "ignore-largefile", "ignore-zlib", "prefix=", "home=", "build-base=", "optimize", "quiet"] opts, args = getopt.getopt(sys.argv[1:], "h", longopts) except getopt.GetoptError, v: @@ -52,7 +55,10 @@ if o in ('-h', '--help'): usage() sys.exit() - if o == '--prefix': + if o in ('--home', '--prefix'): + if not a: sys.exit(usage()) + if o=='--prefix': + PREFIX_ARG='--prefix' PREFIX=os.path.abspath(os.path.expanduser(a)) if o == "--ignore-largefile": REQUIRE_LF_ENABLED=0 @@ -76,6 +82,7 @@ idata = { '<<PYTHON>>':PYTHON, '<<PREFIX>>':PREFIX, + '<<PREFIX_ARG>>':PREFIX_ARG, '<<BASE_DIR>>':BASE_DIR, '<<BUILD_BASE>>':BUILD_BASE, '<<INSTALL_FLAGS>>':INSTALL_FLAGS, @@ -94,7 +101,7 @@ out("") def usage(): - usage = (""" + usage = """ %(program)s configures and writes a Makefile for Zope. Defaults for options are specified in brackets. @@ -119,14 +126,21 @@ Directories: --build-base=DIR use DIR to store temporary build files - - --prefix=DIR install Zope files in DIR [%(TARGET_DIR)s] + + --home=DIR install Zope software in DIR [%(PREFIX)s] + Python packages go in DIR/lib/python + + --prefix=DIR install Zope files in DIR [%(PREFIX)s] + Python packages go in + DIR/lib/pythonX.Y/site-packages By default, 'make install' will install Zope software files in -'%(target_dir)s' You can specify an alternate location for these -files by using '--prefix', for example: '--prefix=$HOME/zope'. -""" % ({'program':sys.argv[0], 'TARGET_DIR':TARGET_DIR}) - ) +'%(PREFIX)s' You can specify an alternate location for these +files by using '--home' or '--prefix', for example: +'--home=$HOME/zope'. + +""" % ({'program': sys.argv[0], + 'PREFIX': PREFIX}) print usage def test_zlib():