From: Stefan Bund Date: Mon, 19 Oct 2009 13:19:37 +0000 (+0200) Subject: initial commit X-Git-Url: http://g0dil.de/git?p=zope-bootstrap.git;a=commitdiff_plain;h=5c9273d3cbce5153300cf16e93ef9331e3b07f99 initial commit --- 5c9273d3cbce5153300cf16e93ef9331e3b07f99 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f4aa359 --- /dev/null +++ b/.gitignore @@ -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 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 index 0000000..10bb154 --- /dev/null +++ b/README.txt @@ -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 index 0000000..ad6fdc6 --- /dev/null +++ b/bootstrap.py @@ -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 index 0000000..53343be --- /dev/null +++ b/buildout.cfg @@ -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 index 0000000..5a8ccfd --- /dev/null +++ b/products/README.txt @@ -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 index 0000000..0014180 --- /dev/null +++ b/src/README.txt @@ -0,0 +1 @@ +Packages in eggs that you develop should go in this directory