[buildout]
extensions =
  slapos.rebootstrap
  slapos.zcbworkarounds
  buildout-versions

find-links =
    http://www.nexedi.org/static/packages/source/slapos.buildout/
    http://dist.repoze.org
    http://www.nexedi.org/static/packages/source/
    http://www.owlfish.com/software/wsgiutils/download.html

# Separate from site eggs
allowed-eggs-from-site-packages =
include-site-packages = false
exec-sitecustomize = false

# Use only quite well working sites.
allow-hosts =
  *.nexedi.org
  *.python.org
  *.sourceforge.net
  alastairs-place.net
  dist.repoze.org
  effbot.org
  github.com
  peak.telecommunity.com
  psutil.googlecode.com
  www.dabeaz.com
  www.owlfish.com

extends =
# Exact version of Zope
  http://svn.zope.org/repos/main/Zope/tags/2.12.20/versions.cfg
  ../component/logrotate/buildout.cfg
  ../component/dcron/buildout.cfg
  ../component/file/buildout.cfg
  ../component/fonts/buildout.cfg
  ../component/ghostscript/buildout.cfg
  ../component/git/buildout.cfg
  ../component/glib/buildout.cfg
  ../component/graphviz/buildout.cfg
  ../component/gzip/buildout.cfg
  ../component/haproxy/buildout.cfg
  ../component/hookbox/buildout.cfg
  ../component/imagemagick/buildout.cfg
  ../component/kumo/buildout.cfg
  ../component/libreoffice-bin/buildout.cfg
  ../component/lxml-python/buildout.cfg
  ../component/maatkit/buildout.cfg
  ../component/mariadb/buildout.cfg
  ../component/memcached/buildout.cfg
  ../component/mysql-python/buildout.cfg
  ../component/pdftk/buildout.cfg
  ../component/pysvn-python/buildout.cfg
  ../component/python-2.6/buildout.cfg
  ../component/python-2.7/buildout.cfg
  ../component/python-ldap-python/buildout.cfg
  ../component/rdiff-backup/buildout.cfg
  ../component/sphinx/buildout.cfg
  ../component/stunnel/buildout.cfg
  ../component/subversion/buildout.cfg
  ../component/tesseract/buildout.cfg
  ../component/varnish/buildout.cfg
  ../component/w3-validator/buildout.cfg
  ../component/w3m/buildout.cfg
  ../component/xorg/buildout.cfg
  ../component/poppler/buildout.cfg
  ../component/xtrabackup/buildout.cfg
  ../component/zabbix/buildout.cfg
  ../component/sed/buildout.cfg
  ../component/coreutils/buildout.cfg
  ../component/grep/buildout.cfg

versions = versions

parts =
  itools-build
  rdiff-backup
  apache
  apache-antiloris
  file
  graphviz
  memcached
  haproxy
  varnish-2.1
  stunnel
  w3m
  poppler
  libpng
  ghostscript
  mariadb
  sphinx
  imagemagick
  kumo
  libreoffice-bin
  w3-validator
  tesseract-eng-traineddata-unzip
  tesseract
  hookbox
  bootstrap2.6
  zabbix-agent
  pdftk
  dcron

# Buildoutish
  eggs
  instance-recipe-egg
  testrunner
  test_suite_runner

# basic Xorg
  libXdmcp
  libXext
  libXau
  libXinerama
  libSM

# fonts
  liberation-fonts
  ipaex-fonts

# Zope products
  products-deps

# Cloudooo specific part
  cloudooo

# get git repositories
  erp5
  genbt5list

# fix products path (Zeo needs ERP5 Products to be available for
# conflict resolution)
  fix-products-paths
# some additional utils
  slapos-toolbox

[bt5-repository]
# Format:
#   <url or path> [...]
#
# Use absolute paths for local repositories, and URLs for non-local otherwise.
#
list = ${local-bt5-repository:list}

[local-bt5-repository]
# Same as bt5-repository, but only local repository.
# Used to generate bt5lists.
list = ${erp5:location}/bt5 ${erp5:location}/product/ERP5/bootstrap

[genbt5list]
recipe = plone.recipe.command
stop-on-error = true
genbt5list = ${erp5:location}/product/ERP5/bin/genbt5list
command =
  ${buildout:executable} ${:genbt5list} ${local-bt5-repository:list}
update-command = ${:command}

[bootstrap2.6]
python = python2.6

[rebootstrap]
version = 3
section = python2.7
eggs = slapos.libnetworkcache

[itools]
pkgname = itools-0.50.8
location = ${buildout:parts-directory}/${:_buildout_section_name_}
lib = ${:location}/lib
source = ${:location}/src

# ugly itools building sections until itools and setuptools learn to get
# along:

[itools-download]
recipe = hexagonit.recipe.download
strip-top-level-dir = true
url = http://download.hforge.org/itools/0.50/${itools:pkgname}.tar.gz
md5sum = 12704cc354e2201e0921a832bf6b1556
destination = ${itools:source}

[itools-build]
recipe = plone.recipe.command
# reference itools-download:destination instead of itools:source to trigger its
# execution
# here, we unset PYTHONPATH to invoke different python than buildout one.
command =
    cd ${itools-download:destination} &&
    PYTHONPATH= ${python2.6:executable} setup.py build_ext -L ${glib:location}/lib -I ${glib:location}/include/glib-2.0:${glib:location}/lib/glib-2.0/include -R ${glib:location}/lib &&
    PYTHONPATH= ${python2.6:executable} setup.py install_lib -d ${itools:lib}

update-command = ${:command}
location = ${itools:location}
stop-on-error = true

[products-deps]
# Recipe minitage.recipe.fetch is disabled, as it uses PATH variable, but it
# is not possible to change its environment to use localy delivered subversion
# nor git. plone.recipe.command can do same job, but it is controllable which
# binary will be used
recipe = plone.recipe.command
svn_param =--trust-server-cert --non-interactive --quiet
location = ${buildout:parts-directory}/${:_buildout_section_name_}
stop-on-error = true
command =
  ${subversion:location}/bin/svn checkout -r 98997 ${:svn_param} https://svn.plone.org/svn/collective/ExtFile/trunk ${:location}/ExtFile &&
  ${git:location}/bin/git clone --quiet git://git.hforge.org/Localizer.git ${:location}/Localizer && cd ${:location}/Localizer && ${git:location}/bin/git reset --quiet --hard dacb6ba0ae559cd9bdb8822812d24a12a21e9e37

[erp5_repository_list]
repository_id_list = erp5

[erp5]
# Recipe zerokspot.recipe.git is disabled, as is not possible to change its
# environment to use localy delivered git.
# plone.recipe.command can do same job, but it is controllable which binary
# will be used
recipe = plone.recipe.command
location = ${buildout:parts-directory}/${:_buildout_section_name_}
stop-on-error = true
repository = http://git.erp5.org/repos/erp5.git
branch = master
revision =
command = ${git:location}/bin/git clone --quiet -b ${:branch} ${:repository} ${:location} && if [ -n ${:revision} ]; then cd ${:location} && ${git:location}/bin/git reset --quiet --hard ${:revision} ; fi
update-command = cd ${:location} && ${git:location}/bin/git pull --quiet && if [ -n ${:revision} ]; then cd ${:location} && ${git:location}/bin/git reset --quiet --hard ${:revision} ; fi

[products]
# XXX: ERP5 related products are not defined as python distributions, so it is
#      required to configure them in declarative manner
list =

[fix-products-paths]
recipe = plone.recipe.command
stop-on-error = true
command =
  for DIR in "${products-deps:location}"; do cd "$DIR"; rm -f Products ; ln -s . Products; touch __init__.py; done
  for DIR in "${erp5:location}"; do cd "$DIR"; rm -f Products ; ln -s product Products; touch product/__init__.py; done
update-command = ${:command}

[testrunner]
# XXX: Workaround for fact ERP5Type is not an distribution and does not
#      expose entry point for test runner
recipe = zc.recipe.egg
python = python2.6
eggs = ${eggs:eggs}
extra-paths = ${eggs:extra-paths}
entry-points =
  runUnitTest=runUnitTest:main
scripts = runUnitTest
initialization =
  import glob, imp, os, sys
  import App # prevent Testing from importing Zope2.App instead of App
  import Products
  Products.__path__[:0] = filter(None,
    os.getenv('INSERT_PRODUCTS_PATH', '').split(os.pathsep))
  Products.__path__.extend(reversed('''${products:list}'''.split()))
  os.environ['SOFTWARE_HOME'] = os.path.abspath(imp.find_module('Zope2')[1])
  os.environ['ZOPE_SCRIPTS'] = ''
  parts_directory = '''${buildout:parts-directory}'''
  repository_id_list = \
    '''${erp5_repository_list:repository_id_list}'''.split()[::-1]
  os.environ['erp5_tests_bt5_path'] = ','.join(sum((
    [bt5_path, os.path.join(bt5_path, '*')]
    for bt5_path in (os.path.join(parts_directory, x, 'bt5')
                     for x in repository_id_list)), []))
  sys.path[:0] = [os.path.join(parts_directory, x, 'tests')
                  for x in repository_id_list]
  sys.path[:0] = sum((
    glob.glob(os.path.join(parts_directory, x, 'product', '*', 'tests'))
    for x in repository_id_list), [])

[test_suite_runner]
# XXX: Workaround for fact ERP5Type is not an distribution and does not
#      expose entry point for test runner
recipe = zc.recipe.egg
python = python2.6
eggs = ${eggs:eggs}
extra-paths = ${eggs:extra-paths}
entry-points =
  runTestSuite=Products.ERP5Type.tests.runTestSuite:main
scripts = runTestSuite
initialization =
  import os
  import sys
  import Products
  [Products.__path__.insert(0, p) for p in reversed(os.environ.get('INSERT_PRODUCTS_PATH', '').split(':')) if p]
  Products.__path__.extend(reversed('''${products:list}'''.split()))
  import Zope2
  os.environ['SOFTWARE_HOME'] = os.path.abspath(os.path.dirname(os.path.dirname(Zope2.__file__)))
  os.environ['ZOPE_SCRIPTS'] = ''
  repository_id_list = list(reversed('''${erp5_repository_list:repository_id_list}'''.split()))
  sys.path[0:0] = ['/'.join(['''${buildout:parts-directory}''', x]) for x in repository_id_list]

[instance-recipe-egg]
recipe = zc.recipe.egg
python = python2.6
eggs =
# instantiation egg
  ${instance-recipe:egg}

[eggs]
recipe = zc.recipe.egg
python = python2.6
eggs =
  ${mysql-python:egg}
  ${lxml-python:egg}
  ${python-ldap-python:egg}
  ${pysvn-python:egg}
  pycrypto
  PyXML
  SOAPpy
  cElementTree
  chardet
  elementtree
  erp5diff
  ipdb
  mechanize
  numpy
  ordereddict
  paramiko
  ply
  python-magic
  python-memcached
  pytz
  threadframe
  timerserver
  urlnorm
  uuid
  xml_marshaller
  xupdate_processor
  feedparser
  argparse
  validictory

# Zope 2.12 with patched acquisition
  ZODB3
  Zope2
  Acquisition

# Other Zope 2 packages
  Products.PluggableAuthService
  Products.PluginRegistry

# CMF 2.2
  Products.CMFActionIcons
  Products.CMFCalendar
  Products.CMFCore
  Products.CMFDefault
  Products.CMFTopic
  Products.CMFUid
  Products.DCWorkflow
  Products.GenericSetup
  five.localsitemanager

# Other products
  Products.DCWorkflowGraph
  Products.MimetypesRegistry
  Products.ExternalEditor
  Products.TIDStorage
  Products.Zelenium

# Currently forked in our repository
#    Products.PortalTransforms
# Dependency for our fork of PortalTransforms
  StructuredText

# parameterizing the version of the generated python interpreter name by the
# python section version causes dependency between this egg section and the
# installation of python, which we don't want on an instance
interpreter = python2.6
scripts =
  repozo
  runzope
  runzeo
  tidstoraged
  tidstorage_repozo

extra-paths =
  ${itools:location}/lib
  ${products-deps:location}
  ${erp5:location}

[mysql-python]
python = python2.6

[lxml-python]
python = python2.6

[python-ldap-python]
python = python2.6

[pysvn-python]
python = python2.6

[slapos-toolbox]
recipe = zc.recipe.egg
python = ${eggs:python}
eggs =
  ${lxml-python:egg}
  slapos.toolbox

scripts =
  killpidfromfile = slapos.systool:killpidfromfile

[cloudooo]
recipe = zc.recipe.egg
python = python2.6
eggs =
  ${lxml-python:egg}
  cloudooo.handler.ffmpeg
  cloudooo.handler.imagemagick
  cloudooo.handler.ooo
  cloudooo.handler.pdf
  cloudooo
  PasteScript
scripts =
  paster=cloudooo_paster

[versions]
# Use SlapOS patched zc.buildout
zc.buildout = 1.5.3-dev-SlapOS-010

# pin Acquisition and Products.DCWorkflow to Nexedi flavour of eggs
Acquisition = 2.13.7nxd001
Products.DCWorkflow = 2.2.3nxd002

# Known version with works
numpy = 1.3.0
# Patched version which support python 2.6
PyXML = 0.8.4nxd001
# modified version that works fine for buildout installation
SOAPpy = 0.12.0nxd001
# we are still using this old stable version.
rdiff-backup = 1.0.5

# Zope Known Good Set is incompatible with buildout 1.5.0 in case of
# distribute and zc.buildout, and as ERP5 Appliance trunk wants to use
# the newest versions of buildout infrastructure clear the pin
distribute =
setuptools =

# official pysvn egg does not supports --include-dirs and
# --library-dirs, so we use our modified version
pysvn = 1.7.4nxd006