From 4a50f09cec841e661e31bc3c2cf597e2f87b179a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C5=81ukasz=20Nowak?= <luke@nexedi.com>
Date: Mon, 30 May 2011 14:01:50 +0200
Subject: [PATCH] Moved to http://git.erp5.org/repos/slapos.recipe.build

---
 setup.py                       |   2 -
 slapos/recipe/README.build.txt |  91 -------------
 slapos/recipe/build.py         | 240 ---------------------------------
 3 files changed, 333 deletions(-)
 delete mode 100644 slapos/recipe/README.build.txt
 delete mode 100644 slapos/recipe/build.py

diff --git a/setup.py b/setup.py
index a3895f5f9..c775bf070 100644
--- a/setup.py
+++ b/setup.py
@@ -41,8 +41,6 @@ setup(name=name,
       zip_safe=True,
       entry_points={
         'zc.buildout': [
-          'build = slapos.recipe.build:Script',
-          'buildcmmi = slapos.recipe.build:Cmmi',
           'download = slapos.recipe.download:Recipe',
           'erp5 = slapos.recipe.erp5:Recipe',
           'erp5testnode = slapos.recipe.erp5testnode:Recipe',
diff --git a/slapos/recipe/README.build.txt b/slapos/recipe/README.build.txt
deleted file mode 100644
index 9c33fe2e2..000000000
--- a/slapos/recipe/README.build.txt
+++ /dev/null
@@ -1,91 +0,0 @@
-build
-=====
-
-Recipe to build the software.
-
-Example buildout::
-
-  [buildout]
-  parts =
-    file
-
-  [zlib]
-  # Use standard configure, make, make install way
-  recipe = slapos.cookbook:build
-  url = http://prdownloads.sourceforge.net/libpng/zlib-1.2.5.tar.gz?download
-  md5sum = c735eab2d659a96e5a594c9e8541ad63
-  slapos_promisee =
-    directory:include
-    file:include/zconf.h
-    file:include/zlib.h
-    directory:lib
-    statlib:lib/libz.a
-    dynlib:lib/libz.so linked:libc.so.6 rpath:
-    dynlib:lib/libz.so.1 linked:libc.so.6 rpath:
-    dynlib:lib/libz.so.1.2.5 linked:libc.so.6
-    directory:lib/pkgconfig
-    file:lib/pkgconfig/zlib.pc
-    directory:share
-    directory:share/man
-    directory:share/man/man3
-    file:share/man/man3/zlib.3
-
-  [file]
-  recipe = slapos.cookbook:buildcmmi
-  url = ftp://ftp.astron.com/pub/file/file-5.04.tar.gz
-  md5sum = accade81ff1cc774904b47c72c8aeea0
-  environment =
-    CPPFLAGS=-I${zlib:location}/include
-    LDFLAGS=-L${zlib:location}/lib -Wl,-rpath -Wl,${zlib:location}/lib
-  slapos_promisee =
-    directory:bin
-    dynlib:bin/file linked:libz.so.1,libc.so.6,libmagic.so.1 rpath:${zlib:location}/lib,!/lib
-    directory:include
-    file:include/magic.h
-    directory:lib
-    statlib:lib/libmagic.a
-    statlib:lib/libmagic.la
-    dynlib:lib/libmagic.so linked:libz.so.1,libc.so.6 rpath:${zlib:location}/lib
-    dynlib:lib/libmagic.so.1 linked:libz.so.1,libc.so.6 rpath:${zlib:location}/lib
-    dynlib:lib/libmagic.so.1.0.0 linked:libz.so.1,libc.so.6 rpath:${zlib:location}/lib
-    directory:share
-    directory:share/man
-    directory:share/man/man1
-    file:share/man/man1/file.1
-    directory:share/man/man3
-    file:share/man/man3/libmagic.3
-    directory:share/man/man4
-    file:share/man/man4/magic.4
-    directory:share/man/man5
-    directory:share/misc
-    file:share/misc/magic.mgc
-
-  [somethingelse]
-  # default way with using script
-  recipe = slapos.cookbook:build
-  url_0 = http://host/path/file.tar.gz
-  md5sum = 9631070eac74f92a812d4785a84d1b4e
-  script =
-    import os
-    os.chdir(%(work_directory)s)
-    unpack(%(url_0), strip_path=True)
-    execute('make')
-    execute('make install DEST=%(location)s')
-  slapos_promisee =
-    ...
-
-TODO:
-
- * add linking suport, buildout definition:
-
-slapos_link = <relative/path> [optional-path
-
-can be used as::
-
-  [file]
-  slapos_link =
-    bin/file
-    bin/file ${buildout:bin-directory}/bin/anotherfile
-
-Which will link ${file:location}/bin/file to ${buildout:bin-directory}/bin/file
-and ${file:location}/bin/file to ${buildout:bin-directory}/bin/anotherfile
diff --git a/slapos/recipe/build.py b/slapos/recipe/build.py
deleted file mode 100644
index dbda7d8ba..000000000
--- a/slapos/recipe/build.py
+++ /dev/null
@@ -1,240 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2010 Vifib SARL and Contributors. All Rights Reserved.
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsibility of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# guarantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
-import logging
-import os
-import setuptools
-import shutil
-import subprocess
-import tempfile
-import zc.buildout
-
-def readElfAsDict(f):
-  """Reads ELF information from file"""
-  popen = subprocess.Popen(['readelf', '-d', f],
-      stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
-  result = popen.communicate()[0]
-  if popen.returncode != 0:
-    raise AssertionError(result)
-  library_list = []
-  rpath_list = []
-  runpath_list = []
-  for l in result.split('\n'):
-    if '(NEEDED)' in l:
-      library_list.append(l.split(':')[1].strip(' []'))
-    elif '(RPATH)' in l:
-      rpath_list = [q.rstrip('/') for q in l.split(':',1)[1].strip(' []').split(':')]
-    elif '(RUNPATH)' in l:
-      runpath_list = [q.rstrip('/') for q in l.split(':',1)[1].strip(' []').split(':')]
-  if len(runpath_list) == 0:
-    runpath_list = rpath_list
-  elif len(rpath_list) != 0 and runpath_list != rpath_list:
-    raise ValueError('RPATH and RUNPATH are different.')
-  return dict(
-    library_list=sorted(library_list),
-    runpath_list=sorted(runpath_list)
-  )
-
-def call(*args, **kwargs):
-  """Subprocess call with closed file descriptors and stdin"""
-  kwargs.update(
-    stdin=subprocess.PIPE,
-    close_fds=True)
-  popen = subprocess.Popen(*args, **kwargs)
-  popen.stdin.flush()
-  popen.stdin.close()
-  popen.stdin = None
-  popen.communicate()
-  if popen.returncode != 0:
-    raise subprocess.CalledProcessError(popen.returncode, ' '.join(args[0]))
-
-def calls(call_string, **kwargs):
-  """Subprocesser caller which allows to pass arguments as string"""
-  call(call_string.split(), **kwargs)
-
-def guessworkdir(path):
-  if len(os.listdir(path)) == 1:
-    return os.path.join(path, os.listdir(path)[0])
-  return path
-
-class Script:
-  """Free script building system"""
-  def _checkPromisee(self, location):
-    promisee_problem_list = []
-    a = promisee_problem_list.append
-    for promisee in self.options['slapos_promisee'].split('\n'):
-      promisee = promisee.strip()
-      if not promisee:
-        continue
-      if promisee.startswith('file:') or promisee.startswith('statlib'):
-        s, path = promisee.split(':')
-        if not os.path.exists(os.path.join(location, path)):
-          a('File promisee not met for %r' % path)
-      elif promisee.startswith('directory'):
-        s, path = promisee.split(':')
-        if not os.path.isdir(os.path.join(location, path)):
-          a('Directory promisee not met for %r' %
-              path)
-      elif promisee.startswith('dynlib:'):
-        if 'linked:' not in promisee:
-          raise zc.buildout.UserError('dynlib promisee requires \'linked:\' '
-            'parameter.')
-        if 'rpath:' not in promisee:
-          rpath_list = []
-        for promisee_part in promisee.split():
-          if promisee_part.startswith('dynlib:'):
-            s, path = promisee_part.split(':')
-          elif promisee_part.startswith('linked:'):
-            s, link_list = promisee_part.split(':')
-            link_list = link_list.split(',')
-          elif promisee_part.startswith('rpath:'):
-            s, rpath_list = promisee_part.split(':')
-            if rpath_list:
-              r = rpath_list
-              rpath_list = []
-              for q in r.split(','):
-                if q.startswith('!'):
-                  q = q.replace('!', location)
-                rpath_list.append(q)
-            else:
-              rpath_list = []
-        if not os.path.exists(os.path.join(location, path)):
-          a('Dynlib promisee file not met %r' % promisee)
-        else:
-          elf_dict = readElfAsDict(os.path.join(location, path))
-          if sorted(link_list) != sorted(elf_dict['library_list']):
-            a('Promisee library list not met (wanted: %r, found: %r)'%(
-              link_list, elf_dict['library_list']))
-          if sorted(rpath_list) != sorted(elf_dict['runpath_list']):
-            a('Promisee rpath list not met (wanted: %r, found: %r)'%(
-              rpath_list, elf_dict['runpath_list']))
-      else:
-        raise zc.buildout.UserError('Unknown promisee %r' % promisee)
-    if len(promisee_problem_list):
-      raise zc.buildout.UserError('Promisee not met, found issues:\n  %s' %
-          '  '.join([q+'\n' for q in promisee_problem_list]))
-
-  def download(self, url, md5sum):
-    download = zc.buildout.download.Download(self.buildout['buildout'],
-        hash_name=True)
-    path, is_temp = download(url, md5sum=self.options.get('md5sum'))
-    return path
-
-  def extract(self, path):
-    extract_dir = tempfile.mkdtemp(self.name)
-    self.logger.debug('Created working directory %r' % extract_dir)
-    setuptools.archive_util.unpack_archive(path, extract_dir)
-    self.cleanup_dir_list.append(extract_dir)
-    return extract_dir
-
-  script = 'raise NotImplementedError'
-  def __init__(self, buildout, name, options):
-    self.cleanup_dir_list = []
-    self.options = options
-    self.buildout = buildout
-    self.name = name
-    self.logger = logging.getLogger('SlapOS build of %s' % self.name)
-
-    self.options.setdefault('location',
-        os.path.join(buildout['buildout']['parts-directory'], self.name))
-
-    # cleanup some variables
-    for k in ['location', 'url', 'md5sum']:
-      self.options[k] = self.options.get(k, '').strip()
-    self.options['script'] = self.options.get('script', self.script) % self.options
-
-  def getEnvironment(self):
-    # prepare cool dictionary
-    wanted_env = {}
-    for line in self.options.get('environment', '').splitlines():
-      line = line.strip()
-      if not line:
-        continue
-      if not '=' in line:
-        raise zc.buildout.UserError('Line %r in environment is incorrect' % line)
-
-      key, value = line.split('=')
-      key = key.strip()
-      value = value.strip()
-      if key in wanted_env:
-        raise zc.buildout.UserError('Key %r is repeated' % key)
-      wanted_env[key] = value
-    env = {}
-    for k,v in os.environ.iteritems():
-      change = wanted_env.pop(k, None)
-      if change is not None:
-        env[k] = change % os.environ
-        self.logger.info('Environment %r setup to %r' % (k, env[k]))
-      else:
-        env[k] =v
-    for k,v in wanted_env.iteritems():
-      self.logger.info('Environment %r added with %r' % (k, v))
-      env[k] = v
-    return env
-
-  def install(self):
-    try:
-      env = self.getEnvironment()
-      exec self.options['script']
-      try:
-        self._checkPromisee(self.options['location'])
-      except Exception:
-        if os.path.exists(self.options['location']):
-          self.logger.info('Removing location %r because of error' % self.options['location'])
-          shutil.rmtree(self.options['location'])
-        raise
-    finally:
-      for d in self.cleanup_dir_list:
-        if os.path.exists(d):
-          self.logger.debug('Cleanup directory %r' % d)
-          shutil.rmtree(d)
-
-    return [self.options['location']]
-
-  def update(self):
-    pass
-
-class Cmmi(Script):
-  """Simple configure-make-make-insall compatible with hexagonit.recipe.cmmi
-
-  Compatibility on parameter level, without bug-to-bug, hack-to-hack"""
-
-  script = """
-extract_dir = self.extract(self.download(self.options['url'], self.options.get('md5sum')))
-workdir = guessworkdir(extract_dir)
-configure_command = ["./configure", "--prefix=%(location)s"]
-configure_command.extend(%(configure-options)r.split())
-self.logger.info('Configuring with: %%s' %% configure_command)
-call(configure_command, cwd=workdir, env=env)
-self.logger.info('Building')
-call("make", cwd=workdir, env=env)
-self.logger.info('Installing')
-call(["make", "install"], cwd=workdir, env=env)
-"""
-
-  def __init__(self, buildout, name, options):
-    options['configure-options'] = ' '.join(options.get('configure-options', '').strip().splitlines())
-    Script.__init__(self, buildout, name, options)
-- 
2.30.9