[buildout]
# Local development
develop =
  ${:parts-directory}/slapos.cookbook-repository
  ${:parts-directory}/cloudooo-repository

extensions =
  slapos.zcbworkarounds
  mr.developer

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

allow-hosts += pybrary.net

extends =
# Exact version of Zope
  https://raw.github.com/zopefoundation/Zope/2.13.21/versions.cfg
  ../../stack/slapos.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/graphviz/buildout.cfg
  ../../component/gzip/buildout.cfg
  ../../component/haproxy/buildout.cfg
  ../../component/hookbox/buildout.cfg
  ../../component/librsvg/buildout.cfg
  ../../component/imagemagick/buildout.cfg
  ../../component/inkscape/buildout.cfg
  ../../component/kumo/buildout.cfg
  ../../component/libdmtx/buildout.cfg
  ../../component/libpng/buildout.cfg
  ../../component/libreoffice-bin/buildout.cfg
  ../../component/lxml-python/buildout.cfg
  ../../component/percona-toolkit/buildout.cfg
  ../../component/mariadb/buildout.cfg
  ../../component/mysql-python/buildout.cfg
  ../../component/pil-python/buildout.cfg
  ../../component/pycrypto-python/buildout.cfg
  ../../component/pysvn-python/buildout.cfg
  ../../component/python-2.7/buildout.cfg
  ../../component/python-ldap-python/buildout.cfg
  ../../component/rdiff-backup/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
  ../../component/dash/buildout.cfg
  ../../component/wget/buildout.cfg
  ../../component/aspell/buildout.cfg
  ../../component/cloudooo/buildout.cfg
  ../../component/jsl/buildout.cfg

parts =
  rdiff-backup
  aspell
  aspell-en-dictionary
  apache
  apache-antiloris
  file
  graphviz
  haproxy
  jsl
  stunnel
  varnish-3.0
  w3m
  poppler
  libpng
  ghostscript
  mariadb
  mroonga-mariadb
  imagemagick
  inkscape
  libdmtx
  dmtx-utils
  kumo
  libreoffice-bin
  w3-validator
  tesseract
  hookbox
  perl-DBD-mariadb
  perl-DBI
  percona-toolkit
  zabbix-agent
  dcron
  dash
  wget

# Buildoutish
  eggs
  testrunner
  test_suite_runner

# basic Xorg
  libXdmcp
  libXext
  libXau
  libSM
  libXrender

# fonts
  liberation-fonts
  ipaex-fonts
  ocrb-fonts

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

# Local development
  slapos.cookbook-repository
  check-recipe
# Create instance template
  template

# Local development
[slapos.cookbook-repository]
recipe = slapos.recipe.build:gitclone
repository = http://git.erp5.org/repos/slapos.git
branch = erp5
git-executable = ${git:location}/bin/git

[check-recipe]
recipe = plone.recipe.command
stop-on-error = true
update-command = ${:command}
command = grep parts ${buildout:develop-eggs-directory}/slapos.cookbook.egg-link

[template-jinja2-base]
recipe = slapos.recipe.template:jinja2
template = ${:_profile_base_location_}/${:filename}.in
rendered = ${buildout:directory}/${:filename}
# XXX: extra-context is needed because we cannot append to a key of an extended
# section.
extra-context =
context =
    key bin_directory buildout:bin-directory
    key develop_eggs_directory buildout:develop-eggs-directory
    key eggs_directory buildout:eggs-directory
    key slapos_core_version versions:slapos.core
    ${:extra-context}

[template-mariadb]
< = template-jinja2-base
filename = instance-mariadb.cfg
md5sum = 49ae6f1bf97d3755978fe08b8e29fb5a
extra-context =
    key coreutils_location coreutils:location
    key dcron_location dcron:location
    key gettext_location gettext:location
    key grep_location grep:location
    key gzip_location gzip:location
    key logrotate_location logrotate:location
    key mariadb_location mariadb:location
    key perl_location perl:location
    key perl_siteprefix perl:siteprefix
    key sed_location sed:location
    key xtrabackup_location xtrabackup:location

[template-zope]
recipe = slapos.recipe.build:download
url = ${:_profile_base_location_}/instance-zope.cfg.in
md5sum = 23baedc096a3ee046d2efe2195e19b96
mode = 640

[template-kumofs]
< = template-jinja2-base
filename = instance-kumofs.cfg
md5sum = 40817014a41497bceb696e512436e670
extra-context =
    key dash_location dash:location
    key dcron_location dcron:location
    key gzip_location gzip:location
    key kumo_location kumo:location
    key logrotate_location logrotate:location

[template-tidstorage]
recipe = slapos.recipe.build:download
url = ${:_profile_base_location_}/instance-tidstorage.cfg.in
md5sum = 2bc13fc6cd52c7b8e2b4ddb99a69974b
mode = 640

[template-cloudooo]
recipe = slapos.recipe.build:download
url = ${:_profile_base_location_}/instance-cloudoo.cfg.in
md5sum = 53492e520be57f4c6a9eacd107c8d446
mode = 640

[template-zope-conf]
recipe = slapos.recipe.build:download
url = ${:_profile_base_location_}/zope.conf.in
md5sum = bc2154161a1d5baddc4ed4dfaaf94fbe
mode = 640

[template]
< = template-jinja2-base
# XXX: "template.cfg" is hardcoded in instanciation recipe
filename = template.cfg
template = ${:_profile_base_location_}/instance.cfg.in
md5sum = 4504529abf707c4a5cd6ccacc761ec71
extra-context =
    key apache_location apache:location
    key aspell_location aspell:location
    key buildout_bin_directory buildout:bin-directory
    key coreutils_location coreutils:location
    key curl_location curl:location
    key dash_location dash:location
    key dcron_location dcron:location
    key dmtx_utils_location dmtx-utils:location
    key erp5_location erp5:location
    key file_location file:location
    key fontconfig_location fontconfig:location
    key fonts_location fonts:location
    key freetype_location freetype:location
    key git_location git:location
    key graphviz_location graphviz:location
    key grep_location grep:location
    key gzip_location gzip:location
    key haproxy_location haproxy:location
    key imagemagick_location imagemagick:location
    key jsl_location jsl:location
    key libICE_location libICE:location
    key libSM_location libSM:location
    key libX11_location libX11:location
    key libXau_location libXau:location
    key libXdmcp_location libXdmcp:location
    key libXext_location libXext:location
    key libXrender_location libXrender:location
    key libpng12_location libpng12:location
    key libreoffice_bin_location libreoffice-bin:location
    key librsvg_location librsvg:location
    key libxcb_location libxcb:location
    key local_bt5_repository local-bt5-repository:list
    key logrotate_location logrotate:location
    key mariadb_location mariadb:location
    key openssl_location openssl:location
    key poppler_location poppler:location
    key sed_location sed:location
    key stunnel_location stunnel:location
    key template_cloudooo template-cloudooo:target
    key template_erp5_single template-erp5-single:target
    key template_erp5_cluster template-erp5-cluster:target
    key template_kumofs template-kumofs:rendered
    key template_mariadb template-mariadb:rendered
    key template_memcached template-memcached:rendered
    key template_tidstorage template-tidstorage:target
    key template_varnish template-varnish:target
    key template_zope template-zope:target
    key template_zope_conf template-zope-conf:target
    key tesseract_location tesseract:location
    key varnish_location varnish-3.0:location
    key w3m_location w3m:location
    key wget_location wget:location
    key zlib_location zlib:location

[template-memcached]
< = template-jinja2-base
filename = instance-memcached.cfg
md5sum = 346c864c1f119360eddb5e163f16d4f3
extra-context =
    key dash_location dash:location
    key dcron_location dcron:location
    key gzip_location gzip:location
    key kumo_location kumo:location
    key logrotate_location logrotate:location

[template-erp5-single]
recipe = slapos.recipe.build:download
url = ${:_profile_base_location_}/instance-erp5-single.cfg.in
md5sum = becf4faf3df849bb90ddf5f587f02d5e
mode = 640

[template-erp5-cluster]
recipe = slapos.recipe.build:download
url = ${:_profile_base_location_}/instance-erp5-cluster.cfg.in
md5sum = f4c9cdbbac82232b84db080461bd0007
mode = 640

[template-varnish]
recipe = slapos.recipe.build:download
url = ${:_profile_base_location_}/instance-varnish.cfg.in
md5sum = ae0465591c22c0cb316c1706965c6b18
mode = 640

[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}

[erp5_repository_list]
repository_id_list = erp5

[erp5]
recipe = slapos.recipe.build:gitclone
repository = http://git.erp5.org/repos/erp5.git
branch = master
git-executable = ${git:location}/bin/git

[fix-products-paths]
recipe = plone.recipe.command
stop-on-error = true
dir = ${erp5:location}
command =
  rm -f "${:dir}/Products" && ln -s product "${:dir}/Products" && touch "${:dir}/product/__init__.py"
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.7
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))
  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)), []))
  extra_path_list = '''${:extra-paths}'''.split()
  sys.path[:0] = sum((
    glob.glob(os.path.join(x, 'tests'))
    for x in extra_path_list), [])
  sys.path[:0] = sum((
    glob.glob(os.path.join(x, 'Products', '*', 'tests'))
    for x in extra_path_list), [])
  sys.path[:0] = sum((
    glob.glob(os.path.join(x, 'Products', '*', 'tests'))
    for x in os.getenv('INSERT_PRODUCTS_PATH', '').split(os.pathsep)), [])
  os.environ['PATH'] = '${jsl:location}/bin:%s' % os.environ['PATH']
  os.environ['CGI_PATH'] = '${w3-validator:location}/httpd/cgi-bin'

[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.7
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]
  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]

[eggs]
recipe = zc.recipe.egg
python = python2.7
eggs =
  ${mysql-python:egg}
  ${lxml-python:egg}
  ${pil-python:egg}
  ${python-ldap-python:egg}
  ${pysvn-python:egg}
  ${pycrypto-python:egg}
  lock_file
  PyXML
  Pympler
  SOAPpy
  cElementTree
  chardet
  coverage
  elementtree
  erp5diff
  inotifyx
  ipdb
  Jinja2
  mechanize
  numpy
  paramiko
  ply
  pyflakes
  pypdf2
  python-magic
  python-memcached
  pytz
  requests
  threadframe
  timerserver
  urlnorm
  uuid
  xml_marshaller
  xupdate_processor
  feedparser
  argparse
  validictory
  erp5.util
  huBarcode
  qrcode
  spyne
  httplib2
  suds
  pprofile
# Needed for checking ZODB Components source code
  pylint

# Zope
  ZODB3
  Zope2
# Zope acquisition patch
  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.LongRequestLogger

# BBB: Temporarily keep zope.app.testing awaiting we use newer version of CMF
#      (for tests like testCookieCrumbler).
  zope.app.testing

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

# Needed for parsing .po files from our Localizer subset
  polib

# 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.7
scripts =
  repozo
  runzope
  runzeo
  tidstoraged
  tidstorage_repozo
  web_checker_utility = erp5.util.webchecker:web_checker_utility

extra-paths =
  ${erp5:location}

[zodbanalyze]
recipe = zc.recipe.egg
python = python2.7
eggs =
  ZODB3
  erp5.util
entry-points =
  zodbanalyze=erp5.util.zodbanalyze:main
scripts = zodbanalyze

[cloudooo-repository]
branch =
revision = 5c67568c403239bd8e25993602d03c553236fcec

[mysql-python]
python = python2.7

[lxml-python]
python = python2.7

[pil-python]
python = python2.7

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

[pysvn-python]
python = python2.7

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

scripts =
  killpidfromfile
  onetimedownload
  zodbpack

[versions]
# pin Acquisition and Products.DCWorkflow to Nexedi flavour of eggs
Acquisition = 2.13.8nxd001
Products.DCWorkflow = 2.2.4nxd001

# specify dev version to be sure that an old released version is not used
cloudooo = 1.2.5-dev

# use newer version than specified in ZTK
Jinja2 = 2.7.2
PasteDeploy = 1.5.2
Pygments = 1.6
argparse = 1.2.1
coverage = 3.7.1
lxml = 3.3.0
mr.developer = 1.27
setuptools = 2.1

# huBarcode 1.0.0 has an issue with importing PIL.
huBarcode = 0.63

# Known version with works
numpy = 1.6.2

# test_UserManagerInterfaces in testERP5Security fails with 1.10.0.
Products.PluggableAuthService = 1.9.0

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

# modified version to support ipv6
python-memcached = 1.47-ipv6-1

# use newest version of pytz
pytz =

# we are still using this old stable version.
rdiff-backup = 1.0.5

# use newest version of slapos.cookbook
slapos.cookbook =

# we need to define an explicit version of slapos.core that is propagated to instances
slapos.core = 1.0.2.1

# modified version that works fine for buildout installation
SOAPpy = 0.12.0nxd001

# CMF 2.3 is not yet supported.
Products.CMFCalendar = 2.2.2
Products.CMFCore = 2.2.8
Products.CMFDefault = 2.2.3
Products.CMFTopic = 2.2.1
Products.CMFUid = 2.2.1

# newer version requires zope.traversing>=4.0.0a2.
zope.app.appsetup = 3.16.0

# newer version requires zope.i18n>=4.0.0a3
zope.app.publication = 3.14.0

# newer version requires zope.testbrowser>=4
zope.app.testing = 3.8.1

# Pinned versions
Flask = 0.10.1
GitPython = 0.3.2.RC1
MySQL-python = 1.2.5
PIL = 1.1.7
PyXML = 0.8.5
Products.CMFActionIcons = 2.1.3
Products.DCWorkflowGraph = 0.4.1
Products.ExternalEditor = 1.1.0
Products.GenericSetup = 1.7.4
Products.LongRequestLogger = 1.1.0
Products.MimetypesRegistry = 2.0.5
Products.PluginRegistry = 1.3
Products.TIDStorage = 5.4.9
Products.ZSQLMethods = 2.13.4
PyPDF2 = 1.20
StructuredText = 2.11.1
WSGIUtils = 0.7
Werkzeug = 0.9.4
apache-libcloud = 0.14.0
async = 0.6.1
atomize = 0.1.1
cElementTree = 1.0.5-20051216
chardet = 2.2.1
cliff = 1.5.2
csp-eventlet = 0.7.0
elementtree = 1.2.7-20070827-preview
erp5.recipe.cmmiforcei686 = 0.1.3
erp5.util = 0.4.36
erp5diff = 0.8.1.5
eventlet = 0.14.0
feedparser = 5.1.3
five.formlib = 1.0.4
five.localsitemanager = 2.0.5
fpconst = 0.7.2
gitdb = 0.5.4
greenlet = 0.4.2
hexagonit.recipe.cmmi = 2.0
http-parser = 0.8.3
inotifyx = 0.2.0
ipdb = 0.8
ipython = 1.1.0
itsdangerous = 0.23
meld3 = 0.6.10
netaddr = 0.7.10
netifaces = 0.8_1
paramiko = 1.12.1
plone.recipe.command = 1.1
ply = 3.4
polib = 1.0.3
psutil = 1.2.1
pyflakes = 0.7.3
python-ldap = 2.4.13
python-magic = 0.4.6
qrcode = 4.0.4
requests = 2.2.1
restkit = 4.2.2
rtjp-eventlet = 0.3.2
slapos.recipe.build = 0.12
slapos.recipe.template = 2.5
slapos.toolbox = 0.38.1
smmap = 0.8.2
socketpool = 0.5.3
spyne = 2.10.9
stevedore = 0.14.1
supervisor = 3.0
threadframe = 0.2
timerserver = 2.0.2
urlnorm = 1.1.2
uuid = 1.30
validictory = 0.9.3
xml-marshaller = 0.9.7
xupdate-processor = 0.4
zope.app.debug = 3.4.1
zope.app.dependable = 3.5.1
zope.app.form = 4.0.2
pylint = 1.1.0