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.


  # 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

  # 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!



(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.

    '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.


 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
diff -u -r1.1.1.1 INSTALL.txt
--- doc/INSTALL.txt     18 Jun 2003 02:27:46 -0000
+++ doc/INSTALL.txt     20 Jun 2003 05:03:29 -0000
@@ -13,7 +13,7 @@
-  - 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
-  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
diff -u -r1.1.1.1 Makefile.in
--- inst/Makefile.in    18 Jun 2003 02:27:46 -0000
+++ 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
 # 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_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)
        ${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}
+       touch ${INSTALL_STAMP}
        @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
diff -u -r1.1.1.1 configure.py
--- inst/configure.py   18 Jun 2003 02:27:47 -0000
+++ inst/configure.py   20 Jun 2003 04:41:22 -0000
@@ -20,28 +20,31 @@
 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"'
-    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"
     BUILD_BASE=os.path.join(os.getcwd(), 'build-base')
-    MAKEFILE=open(os.path.join(BASE_DIR, 'inst', IN_MAKEFILE)).read()
+    MAKEFILE=open(os.path.join(BASE_DIR, 'inst', "Makefile%s.in" % 
-        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'):
-        if o == '--prefix':
+        if o in ('--home', '--prefix'):
+            if not a: sys.exit(usage())
+            if o=='--prefix':
+                PREFIX_ARG='--prefix'
         if o == "--ignore-largefile":
@@ -76,6 +82,7 @@
     idata = {
+        '<<PREFIX_ARG>>':PREFIX_ARG,
@@ -94,7 +101,7 @@
 def usage():
-    usage = ("""
+    usage = """
 %(program)s configures and writes a Makefile for Zope.
 Defaults for options are specified in brackets.
@@ -119,14 +126,21 @@
   --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:
+""" % ({'program': sys.argv[0],
+        'PREFIX': PREFIX})
     print usage
 def test_zlib():

Reply via email to