initial commit
Stefan Bund [Mon, 19 Oct 2009 13:19:37 +0000 (15:19 +0200)]
.gitignore [new file with mode: 0644]
Makefile [new file with mode: 0644]
README.txt [new file with mode: 0644]
bootstrap.py [new file with mode: 0644]
buildout.cfg [new file with mode: 0644]
products/README.txt [new file with mode: 0644]
src/README.txt [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..f4aa359
--- /dev/null
@@ -0,0 +1,11 @@
+python/
+var/
+bin/
+develop-eggs/
+downloads/
+eggs/
+fake-eggs/
+parts/
+/.*.stamp
+/.installed.cfg
+*.pyc
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..2480418
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,90 @@
+# -*- makefile -*-
+
+PYTHON_URL     = http://www.python.org/ftp/python/2.4.6/Python-2.4.6.tgz
+PYTHON_VERSION = 2.4.6
+EZSETUP_URL    = http://peak.telecommunity.com/dist/ez_setup.py
+PIL_URL        = http://effbot.org/downloads/Imaging-1.1.6.tar.gz
+PIL_VERSION    = 1.1.6
+
+###########################################################################
+
+PYTHON_DIR=python
+BASEDIR=$(shell pwd)
+
+PYTHON       = $(BASEDIR)/$(PYTHON_DIR)/bin/python
+EASY_INSTALL = $(BASEDIR)/$(PYTHON_DIR)/bin/easy_install
+PASTER       = $(BASEDIR)/$(PYTHON_DIR)/bin/paster
+
+default: update
+
+python24-unpack: .python24-unpack.stamp
+.python24-unpack.stamp:
+       mkdir $(PYTHON_DIR)
+       wget "$(PYTHON_URL)" -O $(PYTHON_DIR)/python.tgz
+       tar -C $(PYTHON_DIR) -xzf $(PYTHON_DIR)/python.tgz
+       rm -f $(PYTHON_DIR)/python.tgz
+       touch .python24-unpack.stamp
+
+python24-build: .python24-build.stamp
+.python24-build.stamp:
+       cd $(PYTHON_DIR)/Python-$(PYTHON_VERSION) && ./configure --prefix=$(BASEDIR)/$(PYTHON_DIR)
+       cd $(PYTHON_DIR)/Python-$(PYTHON_VERSION) && make
+       cd $(PYTHON_DIR)/Python-$(PYTHON_VERSION) && make install
+       touch .python24-build.stamp
+
+python24: python24-unpack python24-build
+
+setuptools: .setuptools.stamp
+.setuptools.stamp:
+       mkdir $(PYTHON_DIR)/Extensions
+       wget $(SETUPTOOLS_URL) -O $(PYTHON_DIR)/Extensions/ez_setup.py
+       cd $(PYTHON_DIR)/Extensions && $(PYTHON) ez_setup.py
+       touch .setuptools.stamp
+
+eggs: .eggs.stamp
+.eggs.stamp:
+       $(EASY_INSTALL) ZopeSkel
+       $(EASY_INSTALL) zc.buildout
+       touch .eggs.stamp
+
+pil: .pil.stamp
+.pil.stamp:
+       wget $(PIL_URL) -O $(PYTHON_DIR)/Extensions/pil.tgz
+       tar -C $(PYTHON_DIR)/Extensions -xzf $(PYTHON_DIR)/Extensions/pil.tgz
+       rm -f $(PYTHON_DIR)/Extensions/pil.tgz
+       cd $(PYTHON_DIR)/Extensions/Imaging-$(PIL_VERSION) && $(PYTHON) setup.py install
+       touch .pil.stamp
+
+buildout: buildout.cfg
+buildout.cfg:
+       $(PASTER) create --no-interactive -t plone3_buildout . zope_password=admin
+       touch .buildout.stamp
+
+bootstrap: .bootstrap.stamp
+.bootstrap.stamp:
+       $(PYTHON) bootstrap.py
+       touch .bootstrap.stamp
+
+.gitignore:
+       @echo "python/" >.gitignore
+       @echo "var/" >>.gitignore
+       @echo "bin/" >>.gitignore
+       @echo "develop-eggs/" >>.gitignore
+       @echo "downloads/" >>.gitignore
+       @echo "eggs/" >>.gitignore
+       @echo "fake-eggs/" >>.gitignore
+       @echo "parts/" >>.gitignore
+       @echo "/.*.stamp" >>.gitignore
+       @echo "/.installed.cfg" >>.gitignore
+       @echo "*.pyc" >>.gitignore
+
+update:
+       bin/buildout
+
+update-nonet:
+       bin/buildout -No
+
+shell:
+       @PATH=$(BASEDIR)/$(PYTHON_DIR)/bin:$(BASEDIR)/bin:$$PATH $$SHELL
+
+init: python24 setuptools eggs pil buildout bootstrap update .gitignore
diff --git a/README.txt b/README.txt
new file mode 100644 (file)
index 0000000..10bb154
--- /dev/null
@@ -0,0 +1,327 @@
+=======================
+Using a custom buildout
+=======================
+
+Note: If you are using Windows, if you do not have PIL installed, or you are
+not using Python 2.4 as your main system Python, please see the relevant
+sections below.
+
+You probably got here by running something like:
+
+ $ paster create -t plone3_buildout
+
+Now, you need to run:
+
+ $ python bootstrap.py
+
+This will install zc.buildout for you.
+
+To create an instance immediately, run:
+
+ $ bin/buildout
+
+This will download Plone's eggs and products for you, as well as other
+dependencies, create a new Zope 2 installation (unless you specified
+an existing one when you ran "paster create"), and create a new Zope instance
+configured with these products.
+
+You can start your Zope instance by running:
+
+ $ bin/instance start
+
+or, to run in foreground mode:
+
+ $ bin/instance fg
+
+To run unit tests, you can use:
+
+ $ bin/instance test -s my.package
+
+Installing PIL
+--------------
+
+To use Plone, you need PIL, the Python Imaging Library. If you don't already
+have this, download and install it from http://www.pythonware.com/products/pil.
+
+Using a different Python installation
+--------------------------------------
+
+Buildout will use your system Python installation by default. However, Zope
+2.10 (and by extension, Plone) will only work with Python 2.4. You can verify
+which version of Python you have, by running:
+
+ $ python -V
+
+If that is not a 2.4 version, you need to install Python 2.4 from
+http://python.org. If you wish to keep another version as your main system
+Python, edit buildout.cfg and add an 'executable' option to the "[buildout]"
+section, pointing to a python interpreter binary:
+
+ [buildout]
+ ...
+ executable = /path/to/python
+
+Working with buildout.cfg
+-------------------------
+
+You can change any option in buildout.cfg and re-run bin/buildout to reflect
+the changes. This may delete things inside the 'parts' directory, but should
+keep your Data.fs and source files intact.
+
+To save time, you can run buildout in "offline" (-o) and non-updating (-N)
+mode, which will prevent it from downloading things and checking for new
+versions online:
+
+ $ bin/buildout -Nov
+
+Creating new eggs
+-----------------
+
+New packages you are working on (but which are not yet released as eggs and
+uploaded to the Python Package Index, aka PYPI) should be placed in src. You can do:
+
+ $ cd src/
+ $ paster create -t plone my.package
+
+Use "paster create --list-templates" to see all available templates. Answer
+the questions and you will get a new egg. Then tell buildout about your egg
+by editing buildout.cfg and adding your source directory to 'develop':
+
+ [buildout]
+ ...
+ develop =
+    src/my.package
+
+You can list multiple packages here, separated by whitespace or indented
+newlines.
+
+You probably also want the Zope instance to know about the package. Add its
+package name to the list of eggs in the "[instance]" section, or under the
+main "[buildout]" section:
+
+ [instance]
+ ...
+ eggs =
+    ${buildout:eggs}
+    ${plone:eggs}
+    my.package
+
+Leave the ${buildout:eggs} part in place - it tells the instance to use the
+eggs that buildout will have downloaded from the Python Package Index
+previously.
+
+If you also require a ZCML slug for your package, buildout can create one
+automatically. Just add the package to the 'zcml' option:
+
+ [instance]
+ ...
+ zcml =
+    my.package
+
+When you are finished, re-run buildout. Offline, non-updating mode should
+suffice:
+
+ $ bin/buildout -Nov
+
+Developing old-style products
+-----------------------------
+
+If you are developing old-style Zope 2 products (not eggs) then you can do so
+by placing the product code in the top-level 'products' directory. This is
+analogous to the 'Products/' directory inside a normal Zope 2 instance and is
+scanned on start-up for new products.
+
+Depending on a new egg
+----------------------
+
+If you want to use a new egg that is in the Python Package Index, all you need
+to do is to add it to the "eggs" option under the main "[buildout]" section:
+
+ [buildout]
+ ...
+ eggs =
+    my.package
+
+If it's listed somewhere else than the Python Package Index, you can add a link
+telling buildout where to find it in the 'find-links' option:
+
+ [buildout]
+ ...
+ find-links =
+    http://dist.plone.org
+    http://download.zope.org/distribution/
+    http://effbot.org/downloads
+    http://some.host.com/packages
+
+Using existing old-style products
+---------------------------------
+
+If you are using an old-style (non-egg) product, you can either add it as an
+automatically downloaded archive or put it in the top-level "products" folder.
+The former is probably better, because it means you can redistribute your
+buildout.cfg more easily:
+
+ [productdistros]
+ recipe = plone.recipe.distros
+ urls =
+    http://plone.org/products/someproduct/releases/1.3/someproduct-1.3.tar.gz
+
+If someproduct-1.3.tar.gz extracts into several products inside a top-level
+directory, e.g. SomeProduct-1.3/PartOne and SomeProduct-1.3/PartTwo, then
+add it as a "nested package":
+
+ [productdistros]
+ recipe = plone.recipe.distros
+ urls =
+    http://plone.org/products/someproduct/releases/1.3/someproduct-1.3.tar.gz
+ nested-packages =
+    someproduct-1.3.tar.gz
+
+Alternatively, if it extracts to a directory which contains the version
+number, add it as a "version suffix package":
+
+ [productdistros]
+ recipe = plone.recipe.distros
+ urls =
+    http://plone.org/products/someproduct/releases/1.3/someproduct-1.3.tar.gz
+ version-suffix-packages =
+    someproduct-1.3.tar.gz
+
+You can also track products by adding a new bundle checkout part. It
+doesn't strictly have to be an svn bundle at all, any svn location will do,
+and cvs is also supported:
+
+ [buildout]
+ ...
+ parts =
+    plone
+    zope2
+    productdistros
+    myproduct
+    instance
+    zopepy
+
+Note that "myproduct" comes before the "instance" part. You then
+need to add a new section to buildout.cfg:
+
+ [myproduct]
+ recipe = plone.recipe.bundlecheckout
+ url = http://svn.plone.org/svn/collective/myproduct/trunk
+
+Finally, you need to tell Zope to find this new checkout and add it to its
+list of directories that are scanned for products:
+
+ [instance]
+ ...
+ products =
+    ${buildout:directory}/products
+    ${productdistros:location}
+    ${plonebundle:location}
+    ${myproduct:location}
+
+Without this last step, the "myproduct" part is simply managing an svn
+checkout and could potentially be used for something else instead.
+
+=============
+Using Windows
+=============
+
+To use buildout on Windows, you will need to install a few dependencies which
+other platforms manage on their own.
+
+Here are the steps you need to follow (thanks to Hanno Schlichting for these):
+
+Python (http://python.org)
+--------------------------
+
+  - Download and install Python 2.4.4 using the Windows installer from
+    http://www.python.org/ftp/python/2.4.4/python-2.4.4.msi
+    Select 'Install for all users' and it will put Python into the
+    "C:\Python24" folder by default.
+
+  - You also want the pywin32 extensions available from
+    http://downloads.sourceforge.net/pywin32/pywin32-210.win32-py2.4.exe?modtime=1159009237&big_mirror=0
+
+  - And as a last step you want to download the Python imaging library available
+    from http://effbot.org/downloads/PIL-1.1.6.win32-py2.4.exe
+
+  - If you develop Zope based applications you will usually only need Python 2.4
+    at the moment, so it's easiest to put the Python binary on the systems PATH,
+    so you don't need to specify its location manually each time you call it.
+
+    Thus, put "C:\Python24" and "C:\Python24\Scripts" onto the PATH. You can
+    find the PATH definition in the control panel under system preferences on
+    the advanced tab at the bottom. The button is called environment variables.
+    You want to add it at the end of the already existing PATH in the system
+    section. Paths are separated by a semicolons.
+
+  - You can test if this was successful by opening a new shell (cmd) and type
+    in 'python -V'. It should report version 2.4.4 (or whichever version you
+    installed).
+
+    Opening a new shell can be done quickly by using the key combination
+    'Windows-r' or if you are using Parallels on a Mac 'Apple-r'. Type in 'cmd'
+    into the popup box that opens up and hit enter.
+
+
+Subversion (http://subversion.tigris.org)
+-----------------------------------------
+
+  - Download the nice installer from
+    http://subversion.tigris.org/files/documents/15/35379/svn-1.4.2-setup.exe
+
+  - Run the installer. It defaults to installing into
+    "C:\Program Files\Subversion".
+
+  - Now put the install locations bin subfolder (for example
+    "C:\Program Files\Subversion\bin") on your system PATH in the same way you
+    put Python on it.
+
+  - Open a new shell again and type in: 'svn --version' it should report
+    version 1.4.2 or newer.
+
+
+MinGW (http://www.mingw.org/)
+-----------------------------
+
+  This is a native port of the gcc compiler and its dependencies for Windows.
+  There are other approaches enabling you to compile Python C extensions on
+  Windows including Cygwin and using the official Microsoft C compiler, but this
+  is a lightweight approach that uses only freely available tools. As
+  it's used by a lot of people chances are high it will work for you and there's
+  plenty of documentation out there to help you in troubleshooting problems.
+
+  - Download the MinGW installer from
+    http://downloads.sourceforge.net/mingw/MinGW-5.1.3.exe?modtime=1168794334&big_mirror=1
+
+  - The installer will ask you which options you would like to install. Choose
+    base and make here. It will install into "C:\MinGW" by default. The install
+    might take some time as it's getting files from sourceforge.net and you
+    might need to hit 'retry' a couple of times.
+
+  - Now put the install location's bin subfolder (for example "C:\MinGW\bin") on
+    your system PATH in the same way you put Python on it.
+
+  - Test this again by typing in: 'gcc --version' on a newly opened shell and
+    it should report version 3.4.2 or newer.
+
+
+Configure Distutils to use MinGW
+--------------------------------
+
+  Some general information are available from
+  http://www.mingw.org/MinGWiki/index.php/Python%20extensions for example but
+  you don't need to read them all.
+
+  - Create a file called 'distutils.cfg' in "C:\Python24\Lib\distutils". Open it
+    with a text editor ('notepad distutils.cfg') and fill in the following lines:
+
+    [build]
+    compiler=mingw32
+
+    This will tell distutils to use MinGW as the default compiler, so you don't
+    need to specify it manually using "--compiler=mingw32" while calling a
+    package's setup.py with a command that involves building C extensions. This
+    is extremely useful if the build command is written down in a buildout
+    recipe where you cannot change the options without hacking the recipe
+    itself. The z2c.recipe.zope2install used in ploneout is one such example.
diff --git a/bootstrap.py b/bootstrap.py
new file mode 100644 (file)
index 0000000..ad6fdc6
--- /dev/null
@@ -0,0 +1,62 @@
+##############################################################################
+#
+# Copyright (c) 2006 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Bootstrap a buildout-based project
+
+Simply run this script in a directory containing a buildout.cfg.
+The script accepts buildout command-line options, so you can
+use the -c option to specify an alternate configuration file.
+
+$Id: bootstrap.py 85041 2008-03-31 15:57:30Z andreasjung $
+"""
+
+import os, shutil, sys, tempfile, urllib2
+
+tmpeggs = tempfile.mkdtemp()
+
+try:
+    import pkg_resources
+except ImportError:
+    ez = {}
+    exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py'
+                         ).read() in ez
+    ez['use_setuptools'](to_dir=tmpeggs, download_delay=0)
+
+    import pkg_resources
+
+if sys.platform == 'win32':
+    def quote(c):
+        if ' ' in c:
+            return '"%s"' % c # work around spawn lamosity on windows
+        else:
+            return c
+else:
+    def quote (c):
+        return c
+
+cmd = 'from setuptools.command.easy_install import main; main()'
+ws  = pkg_resources.working_set
+assert os.spawnle(
+    os.P_WAIT, sys.executable, quote (sys.executable),
+    '-c', quote (cmd), '-mqNxd', quote (tmpeggs), 'zc.buildout',
+    dict(os.environ,
+         PYTHONPATH=
+         ws.find(pkg_resources.Requirement.parse('setuptools')).location
+         ),
+    ) == 0
+
+ws.add_entry(tmpeggs)
+ws.require('zc.buildout')
+import zc.buildout.buildout
+zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap'])
+shutil.rmtree(tmpeggs)
diff --git a/buildout.cfg b/buildout.cfg
new file mode 100644 (file)
index 0000000..53343be
--- /dev/null
@@ -0,0 +1,84 @@
+[buildout]
+parts =
+    zope2
+    productdistros
+    instance
+    zopepy
+
+# Change the number here to change the version of Plone being used
+extends = http://dist.plone.org/release/3.3.1/versions.cfg
+versions = versions
+
+# Add additional egg download sources here. dist.plone.org contains archives
+# of Plone packages.
+find-links =
+    http://dist.plone.org/release/3.3.1
+    http://dist.plone.org/thirdparty
+
+# Add additional eggs here
+eggs =
+
+# Reference any eggs you are developing here, one per line
+# e.g.: develop = src/my.package
+develop =
+
+
+
+
+[zope2]
+# For more information on this step and configuration options see:
+# http://pypi.python.org/pypi/plone.recipe.zope2install
+recipe = plone.recipe.zope2install
+fake-zope-eggs = true
+url = ${versions:zope2-url}
+
+# Use this section to download additional old-style products.
+# List any number of URLs for product tarballs under URLs (separate
+# with whitespace, or break over several lines, with subsequent lines
+# indented). If any archives contain several products inside a top-level
+# directory, list the archive file name (i.e. the last part of the URL,
+# normally with a .tar.gz suffix or similar) under 'nested-packages'.
+# If any archives extract to a product directory with a version suffix, list
+# the archive name under 'version-suffix-packages'.
+[productdistros]
+# For more information on this step and configuration options see:
+# http://pypi.python.org/pypi/plone.recipe.distros
+recipe = plone.recipe.distros
+urls =
+nested-packages =
+version-suffix-packages =
+
+[instance]
+# For more information on this step and configuration options see:
+# http://pypi.python.org/pypi/plone.recipe.zope2instance
+recipe = plone.recipe.zope2instance
+zope2-location = ${zope2:location}
+user = admin:admin
+http-address = 8070
+#debug-mode = on
+#verbose-security = on
+
+# If you want Zope to know about any additional eggs, list them here.
+# This should include any development eggs you listed in develop-eggs above,
+# e.g. eggs = Plone my.package
+eggs =
+    Plone
+    ${buildout:eggs}
+    
+
+# If you want to register ZCML slugs for any packages, list them here.
+# e.g. zcml = my.package my.other.package
+zcml =
+
+products =
+    ${buildout:directory}/products
+    ${productdistros:location}
+
+[zopepy]
+# For more information on this step and configuration options see:
+# http://pypi.python.org/pypi/zc.recipe.egg
+recipe = zc.recipe.egg
+eggs = ${instance:eggs}
+interpreter = zopepy
+extra-paths = ${zope2:location}/lib/python
+scripts = zopepy
diff --git a/products/README.txt b/products/README.txt
new file mode 100644 (file)
index 0000000..5a8ccfd
--- /dev/null
@@ -0,0 +1 @@
+Old-style Zope products you are developing can be added here
diff --git a/src/README.txt b/src/README.txt
new file mode 100644 (file)
index 0000000..0014180
--- /dev/null
@@ -0,0 +1 @@
+Packages in eggs that you develop should go in this directory