Author: johannes
Date: 2007-12-07 08:57:58 -0600 (Fri, 07 Dec 2007)
New Revision: 9843
Added:
trunk/gnue-common/src/utils/setup.py
Modified:
trunk/gnue-common/src/setup/GSetup.py
Log:
Moved GSetup.py from src/setup into src/utils/setup.py
Modified: trunk/gnue-common/src/setup/GSetup.py
===================================================================
--- trunk/gnue-common/src/setup/GSetup.py 2007-12-07 14:46:25 UTC (rev 9842)
+++ trunk/gnue-common/src/setup/GSetup.py 2007-12-07 14:57:58 UTC (rev 9843)
@@ -22,559 +22,8 @@
# $Id: GSetup.py,v 1.4 2003/10/06 18:33:16 reinhard Exp $
"""
Base classes for package setup based on distutils
+
+This module is deprecated. Please use gnue.common.utils.setup instead.
"""
-import sys
-import time
-import os
-
-from distutils import log
-from distutils.core import setup
-from distutils.filelist import FileList
-
-import distutils.command.sdist
-import distutils.command.build
-import distutils.command.install
-
-import gnue.paths
-
-from gnue.common.utils import version
-
-__all__ = ['GSetup']
-
-# -----------------------------------------------------------------------------
-# Check Python version
-# -----------------------------------------------------------------------------
-
-try:
- if sys.hexversion < 0x02030000:
- raise AttributeError
-
-except AttributeError:
- print "-" * 70
- print """
-You are running Python %s.
-
-GNU Enterprise requires at least Python 2.3.
-If you have a later version installed, you should run setup.py
-against that version. For example, if you have Python 2.3
-installed, you may need to run:
-
-python2.3 setup.py
-""" % sys.version.split()[0]
- print "-" * 70
- sys.exit(1)
-
-# -----------------------------------------------------------------------------
-# Global GSetup instance
-# -----------------------------------------------------------------------------
-
-_setup = None
-
-# =============================================================================
-# SDist: build files to be distributed first
-# =============================================================================
-
-class SDist(distutils.command.sdist.sdist):
- """
- Build files to be distributed
- """
-
- # -------------------------------------------------------------------------
- # Run the sdist command
- # -------------------------------------------------------------------------
-
- def run(self):
- """
- Run the sdist command
- """
- global _setup
-
- _setup.do_build_files('sdist')
- distutils.command.sdist.sdist.run(self)
-
-
- # -------------------------------------------------------------------------
- # Remove files not used
- # -------------------------------------------------------------------------
-
- def prune_file_list(self):
- """
- Prune the list of files included
- """
- distutils.command.sdist.sdist.prune_file_list(self)
- self.filelist.exclude_pattern('*.dist_template', anchor=0)
-
-
- # -------------------------------------------------------------------------
- # Create the directory tree that will become the source distribution arch.
- # -------------------------------------------------------------------------
-
- def make_release_tree(self, base_dir, files):
- """
- Create the directory tree that will become the source distribution
- archive.
- """
- distutils.command.sdist.sdist.make_release_tree(self, base_dir, files)
- self.process_templates(base_dir)
-
- _setup.do_build_svnrev(os.path.join(base_dir, 'src', 'svnrev.py'))
-
-
- # -------------------------------------------------------------------------
- # Process all template files
- # -------------------------------------------------------------------------
-
- def process_templates(self, target):
- """
- Process all distribution template files. Such a template file is
- called "<filename>.dist_template" and will be stored as "<filename>"
- after processing. This method replaces the following strings by their
- corresponding values:
-
- * :PACKAGE: Name of the package, i.e. 'gnue-forms'
- * :TITLE: Title of the package, i.e. 'GNU Enterprise Forms'
- * :VERSION: Full version of the package, i.e. '0.6.9+svn.9794'
- * :MAJOR: The major version, i.e. '0'
- * :MINOR: The minor version, i.e. '6'
- * :PHASE: The phase, i.e. 'final'
- * :BUILD: The build, i.e. '1'
- * :SVN: The current SubVersion revision
- * :DATE_ISO: The date of the package formatted as YYYY-MM-DD
- * :DATE_RFC: The date of the package formatted according to RFC 822
- * :TIME: The time of the package formattes as HH:MM:SS
- * :FINAL: If the build is final it contains the build number,
- otherwise '0'
- """
-
- # Build list of files to be processed.
- filelist = FileList()
- if filelist.include_pattern('*.dist_template', anchor=0) == 0:
- # Nothing to do.
- return
-
- # FIXME: For compatibility with old packages not yet using the version
- # module. Change to unconditional import in gnue-common 0.8.
- try:
- from src import version
-
- except:
- return
-
- # List of keywords to replace.
- keywords = {
- ':PACKAGE:': self.distribution.get_name(),
- ':TITLE:': self.distribution.get_description(),
- ':VERSION:': self.distribution.get_version(),
- ':MAJOR:': str(version.major),
- ':MINOR:': str(version.minor),
- ':PHASE:': str(version.phase),
- ':BUILD:': str(version.build),
- ':SVN:': str(version.svn),
- ':DATE_ISO:': time.strftime('%Y-%m-%d', time.gmtime()),
- ':DATE_RFC:': time.strftime('%a, %d %b %Y', time.gmtime()),
- ':TIME:': time.strftime('%H:%M:%S', time.gmtime())}
-
- # Hack for version numbering schemes that are limited to x.y.z.
- if version.phase == 'final':
- keywords[':FINAL:'] = str(version.build)
- else:
- keywords[':FINAL:'] = '0'
-
- for src in filelist.files:
- dst = os.path.join(target, src[:-14])
- args = (src, dst, keywords)
- self.execute(self.__process_template, args,
- "generating %s from %s" % (dst, src))
-
-
- # -------------------------------------------------------------------------
- # Process a single template
- # -------------------------------------------------------------------------
-
- def __process_template(self, src, dst, keywords):
-
- infile = open(src, 'r')
- content = infile.read()
- infile.close()
-
- for keyword, value in keywords.iteritems():
- content = content.replace(keyword, value)
-
- outfile = open(dst, 'w')
- outfile.write(content)
- outfile.close()
-
- # Let destination file have the same mode than the source file.
- os.chmod(dst, os.stat(src).st_mode)
-
-
-# =============================================================================
-# build: if done from SVN, build files to be installed first
-# =============================================================================
-
-class Build(distutils.command.build.build):
- """
- Build files to be installed
- """
-
- # -------------------------------------------------------------------------
- # Run the command
- # -------------------------------------------------------------------------
-
- def run(self):
- """
- Run the build command
- """
- global _setup
-
- if not os.path.isfile("PKG-INFO"): # downloaded from SVN?
- _setup.do_build_files('build')
-
- distutils.command.build.build.run(self)
-
- if not os.path.isfile("PKG-INFO"):
- _setup.do_build_svnrev(os.path.join(self.build_lib, 'gnue',
- _setup.package[5:].lower(), 'svnrev.py'))
-
-
-# =============================================================================
-# install: Some user_options are no longer allowed
-# =============================================================================
-
-class Install(distutils.command.install.install):
- """
- Install the package
- """
-
- # Commented out because sometimes, to create packages, we want to install
- # other tools in a different target directory than common is installed
- #user_options = distutils.command.install.install.user_options
-
- #allowed_options = ["root=", "compile", "no-compile", "optimize=", "force",
- # "skip-build", "record="]
-
- #user_options = [opt for opt in user_options if opt [0] in allowed_options]
-
-
- # TODO: this code is executed as soon as this module get's importet.
- # Need to check wether this is really what we want here.
- user_options = distutils.command.install.install.user_options
- i = 0
- for option in user_options:
- i = i + 1
- if option[0] == "install-data=":
- user_options.insert(i, ("install-config=", None,
- "installation directory for configuration files"))
- break
-
-
- # -------------------------------------------------------------------------
- # Initalize options
- # -------------------------------------------------------------------------
-
- def initialize_options(self):
- """
- Initialize options
- """
-
- distutils.command.install.install.initialize_options(self)
- self.install_config = None
-
-
- # -------------------------------------------------------------------------
- # Finalize options - set all install targets
- # -------------------------------------------------------------------------
-
- def finalize_options(self):
- """
- Finalize options and set all install targets
- """
-
- if self.install_lib is None:
- self.install_lib = gnue.paths.lib
- if self.install_scripts is None:
- self.install_scripts = gnue.paths.scripts
- if self.install_data is None:
- self.install_data = gnue.paths.data
- if self.install_config is None:
- self.install_config = gnue.paths.config
-
- distutils.command.install.install.finalize_options(self)
-
-
- # -------------------------------------------------------------------------
- # install.run: generate and install path dependent files afterwards
- # -------------------------------------------------------------------------
-
- def run(self):
- """
- Run the install command
- """
-
- global _setup
-
- _setup.check_dependencies()
-
- self.__outputs = []
-
- # install translations
- if os.path.isdir('po'):
- # copy files
- for fname in os.listdir('po'):
- if fname[-4:] == '.gmo':
- src = os.path.join('po', fname)
- dst = os.path.join(self.install_data, 'share', 'locale',
- fname[:-4], 'LC_MESSAGES')
- self.mkpath(dst)
- dst = os.path.join(dst, _setup.package + '.mo')
- self.copy_file(src, dst)
- self.__outputs.append(dst)
-
- distutils.command.install.install.run(self)
-
-
- # -------------------------------------------------------------------------
- # install.get_outputs: list all installed files
- # -------------------------------------------------------------------------
-
- def get_outputs(self):
- """
- List all installed files
- """
-
- return distutils.command.install.install.get_outputs(self) \
- + self.__outputs
-
-
-# =============================================================================
-# GSetup: Basic class for setup scripts of GNUe packages
-# =============================================================================
-
-class GSetup:
- """
- Base class for setup scripts of GNU Enterprise packages
- """
-
- # -------------------------------------------------------------------------
- # Abstract methods: setup.py scripts generally override these
- # -------------------------------------------------------------------------
-
- def set_params(self, params):
- """
- Define setup paramters
- """
- pass
-
-
- # -------------------------------------------------------------------------
- # Build list of file
- # -------------------------------------------------------------------------
-
- def build_files(self, action):
- """
- Build a list of files depending on a given action
- """
- pass
-
-
- # -------------------------------------------------------------------------
- # Check if all dependencies are met
- # -------------------------------------------------------------------------
-
- def check_dependencies(self):
- """
- Check all dependencies
- """
- pass
-
-
- # -------------------------------------------------------------------------
- # Build files if called from SVN
- # -------------------------------------------------------------------------
-
- def do_build_files(self, action):
- """
- Build all files if called from SVN
- """
-
- if os.name == 'posix':
-
- # First check if we have everything installed we need to build the
- # distribution
-
- if os.path.isdir('po'):
- # xgettext
- if os.system("pygettext --version > /dev/null") != 0:
- log.fatal("Could not find 'pygettext'. Strange.")
- log.fatal("It should be included in the Python " \
- "distribution.")
- sys.exit(1)
-
- # msgmerge
- if os.system("msgmerge --version > /dev/null") != 0:
- log.fatal("Could not find 'msgmerge'. Please install " \
- "Gettext.")
- sys.exit(1)
-
- # msgfmt
- if os.system("msgfmt --version > /dev/null") != 0:
- log.fatal("Could not find 'msgfmt'. Please install " \
- "Gettext.")
- sys.exit(1)
-
- # -----------------------------------------------------------------
-
- # build translations
- if os.path.isdir('po'):
- log.info("building translations")
- if os.system("cd po && make gmo") != 0:
- sys.exit(1)
-
- else:
- # on non posix systems just run msgfmt on existing .po files
- if os.path.isdir('po'):
- # msgfmt.py
- argv0_path = os.path.dirname(os.path.abspath(sys.executable))
- sys.path.append(argv0_path + "\\tools\\i18n")
-
- msgfmt_ok = 0
- try:
- import msgfmt
- msgfmt_ok = 1
- except:
- pass
-
- if msgfmt_ok == 1:
- # pygettext.py exist in Python, but no msgmerge, so
- # just create a placeholder...
- potfile = open('po/'+ self.package +'.pot', 'w')
- potfile.write("#placeholder")
- potfile.close()
-
- # build translations
- log.info("building translations")
- for f in os.listdir('po'):
- if f[-3:] == '.po':
- msgfmt.make('po/'+f, 'po/'+f[:-3]+'.gmo')
- msgfmt.MESSAGES = {}
-
- # ---------------------------------------------------------------------
-
- # do package specific stuff
- self.build_files(action)
-
-
- # -------------------------------------------------------------------------
- # Create the svnrev.py file
- # -------------------------------------------------------------------------
-
- def do_build_svnrev(self, filename):
- """
- Create the file 'svnrev.py' which contains the current SubVersion
- revision.
- """
-
- log.info("building svnrev.py")
- output = open(filename, 'w')
- output.write('svnrev = %r' % version.get_svn_revision('src'))
- output.close()
-
-
- # -------------------------------------------------------------------------
- # Helper methods for descendants
- # -------------------------------------------------------------------------
-
- def allfiles(self, directory):
- """
- Get a list of files in a given directory, excluding some specials like
- Makefile, .svn, CSV and so on
- """
-
- directory = os.path.normpath(directory)
- exclude = [".svn", "CVS", "README.cvs", ".cvsignore", "Makefile"]
- return [directory + "/" + fname for fname in os.listdir(directory) \
- if not fname in exclude and
- not os.path.isdir(os.path.join(directory, fname))]
-
-
- # -------------------------------------------------------------------------
- # Get all packages in a directory
- # -------------------------------------------------------------------------
-
- def __get_packages(self, directory, package):
-
- content = os.listdir(directory)
- result = []
- if "__init__.py" in content:
- result = [package]
- for name in content:
- fullname = os.path.join(directory, name)
- if os.path.isdir(fullname):
- result = result + self.__get_packages(fullname, package +
- "." + name)
- return result
-
-
- # -------------------------------------------------------------------------
- # Call the actual setup routine
- # -------------------------------------------------------------------------
-
- def run(self):
- """
- Run the setup routine
- """
-
- global _setup
-
- # set global variable
- _setup = self
-
- setup_params = {"cmdclass_sdist": SDist,
- "cmdclass_build": Build,
- "cmdclass_install": Install
- }
-
- _setup.set_params(setup_params)
-
- # make package available
- self.package = setup_params["name"]
-
- # find out all packages
- if not setup_params.has_key("packages"):
- packages = []
-
- for module, directory in setup_params["package_dir"].items():
- packages = packages + self.__get_packages(directory, module)
-
- setup_params["packages"] = packages
-
- # remove data files that are not available
- for target, files in setup_params["data_files"]:
- i = 0
- while i < len(files):
- fname = files[i]
- if os.path.isfile(fname):
- i += 1
- else:
- log.warn("warning: did not find file %s" % fname)
- files.remove(fname)
-
- # now call setup
- setup(name = setup_params["name"],
- version = setup_params["version"],
- description = setup_params["description"],
- long_description = setup_params["long_description"],
- author = setup_params["author"],
- author_email = setup_params["author_email"],
- url = setup_params["url"],
- license = setup_params["license"],
- packages = setup_params["packages"],
- package_dir = setup_params["package_dir"],
- scripts = setup_params["scripts"],
- data_files = setup_params["data_files"],
-
- # Override certain command classes with our own ones
- cmdclass = {"sdist": setup_params["cmdclass_sdist"],
- "build": setup_params["cmdclass_build"],
- "install": setup_params["cmdclass_install"]})
+from gnue.common.utils.setup import GSetup
Added: trunk/gnue-common/src/utils/setup.py
===================================================================
--- trunk/gnue-common/src/utils/setup.py 2007-12-07 14:46:25 UTC (rev 9842)
+++ trunk/gnue-common/src/utils/setup.py 2007-12-07 14:57:58 UTC (rev 9843)
@@ -0,0 +1,580 @@
+# GNU Enterprise Common Library - Installation Helper For Tools
+#
+# This file is part of GNU Enterprise.
+#
+# GNU Enterprise 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 2, or (at your option) any later version.
+#
+# GNU Enterprise 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 program; see the file COPYING. If not,
+# write to the Free Software Foundation, Inc., 59 Temple Place
+# - Suite 330, Boston, MA 02111-1307, USA.
+#
+# Copyright 2001-2007 Free Software Foundation
+#
+# $Id: GSetup.py,v 1.4 2003/10/06 18:33:16 reinhard Exp $
+"""
+Base classes for package setup based on distutils
+"""
+
+import sys
+import time
+import os
+
+from distutils import log
+from distutils.core import setup
+from distutils.filelist import FileList
+
+import distutils.command.sdist
+import distutils.command.build
+import distutils.command.install
+
+import gnue.paths
+
+from gnue.common.utils import version
+
+__all__ = ['GSetup']
+
+# -----------------------------------------------------------------------------
+# Check Python version
+# -----------------------------------------------------------------------------
+
+try:
+ if sys.hexversion < 0x02030000:
+ raise AttributeError
+
+except AttributeError:
+ print "-" * 70
+ print """
+You are running Python %s.
+
+GNU Enterprise requires at least Python 2.3.
+If you have a later version installed, you should run setup.py
+against that version. For example, if you have Python 2.3
+installed, you may need to run:
+
+python2.3 setup.py
+""" % sys.version.split()[0]
+ print "-" * 70
+ sys.exit(1)
+
+# -----------------------------------------------------------------------------
+# Global GSetup instance
+# -----------------------------------------------------------------------------
+
+_setup = None
+
+# =============================================================================
+# SDist: build files to be distributed first
+# =============================================================================
+
+class SDist(distutils.command.sdist.sdist):
+ """
+ Build files to be distributed
+ """
+
+ # -------------------------------------------------------------------------
+ # Run the sdist command
+ # -------------------------------------------------------------------------
+
+ def run(self):
+ """
+ Run the sdist command
+ """
+ global _setup
+
+ _setup.do_build_files('sdist')
+ distutils.command.sdist.sdist.run(self)
+
+
+ # -------------------------------------------------------------------------
+ # Remove files not used
+ # -------------------------------------------------------------------------
+
+ def prune_file_list(self):
+ """
+ Prune the list of files included
+ """
+ distutils.command.sdist.sdist.prune_file_list(self)
+ self.filelist.exclude_pattern('*.dist_template', anchor=0)
+
+
+ # -------------------------------------------------------------------------
+ # Create the directory tree that will become the source distribution arch.
+ # -------------------------------------------------------------------------
+
+ def make_release_tree(self, base_dir, files):
+ """
+ Create the directory tree that will become the source distribution
+ archive.
+ """
+ distutils.command.sdist.sdist.make_release_tree(self, base_dir, files)
+ self.process_templates(base_dir)
+
+ _setup.do_build_svnrev(os.path.join(base_dir, 'src', 'svnrev.py'))
+
+
+ # -------------------------------------------------------------------------
+ # Process all template files
+ # -------------------------------------------------------------------------
+
+ def process_templates(self, target):
+ """
+ Process all distribution template files. Such a template file is
+ called "<filename>.dist_template" and will be stored as "<filename>"
+ after processing. This method replaces the following strings by their
+ corresponding values:
+
+ * :PACKAGE: Name of the package, i.e. 'gnue-forms'
+ * :TITLE: Title of the package, i.e. 'GNU Enterprise Forms'
+ * :VERSION: Full version of the package, i.e. '0.6.9+svn.9794'
+ * :MAJOR: The major version, i.e. '0'
+ * :MINOR: The minor version, i.e. '6'
+ * :PHASE: The phase, i.e. 'final'
+ * :BUILD: The build, i.e. '1'
+ * :SVN: The current SubVersion revision
+ * :DATE_ISO: The date of the package formatted as YYYY-MM-DD
+ * :DATE_RFC: The date of the package formatted according to RFC 822
+ * :TIME: The time of the package formattes as HH:MM:SS
+ * :FINAL: If the build is final it contains the build number,
+ otherwise '0'
+ """
+
+ # Build list of files to be processed.
+ filelist = FileList()
+ if filelist.include_pattern('*.dist_template', anchor=0) == 0:
+ # Nothing to do.
+ return
+
+ # FIXME: For compatibility with old packages not yet using the version
+ # module. Change to unconditional import in gnue-common 0.8.
+ try:
+ from src import version
+
+ except:
+ return
+
+ # List of keywords to replace.
+ keywords = {
+ ':PACKAGE:': self.distribution.get_name(),
+ ':TITLE:': self.distribution.get_description(),
+ ':VERSION:': self.distribution.get_version(),
+ ':MAJOR:': str(version.major),
+ ':MINOR:': str(version.minor),
+ ':PHASE:': str(version.phase),
+ ':BUILD:': str(version.build),
+ ':SVN:': str(version.svn),
+ ':DATE_ISO:': time.strftime('%Y-%m-%d', time.gmtime()),
+ ':DATE_RFC:': time.strftime('%a, %d %b %Y', time.gmtime()),
+ ':TIME:': time.strftime('%H:%M:%S', time.gmtime())}
+
+ # Hack for version numbering schemes that are limited to x.y.z.
+ if version.phase == 'final':
+ keywords[':FINAL:'] = str(version.build)
+ else:
+ keywords[':FINAL:'] = '0'
+
+ for src in filelist.files:
+ dst = os.path.join(target, src[:-14])
+ args = (src, dst, keywords)
+ self.execute(self.__process_template, args,
+ "generating %s from %s" % (dst, src))
+
+
+ # -------------------------------------------------------------------------
+ # Process a single template
+ # -------------------------------------------------------------------------
+
+ def __process_template(self, src, dst, keywords):
+
+ infile = open(src, 'r')
+ content = infile.read()
+ infile.close()
+
+ for keyword, value in keywords.iteritems():
+ content = content.replace(keyword, value)
+
+ outfile = open(dst, 'w')
+ outfile.write(content)
+ outfile.close()
+
+ # Let destination file have the same mode than the source file.
+ os.chmod(dst, os.stat(src).st_mode)
+
+
+# =============================================================================
+# build: if done from SVN, build files to be installed first
+# =============================================================================
+
+class Build(distutils.command.build.build):
+ """
+ Build files to be installed
+ """
+
+ # -------------------------------------------------------------------------
+ # Run the command
+ # -------------------------------------------------------------------------
+
+ def run(self):
+ """
+ Run the build command
+ """
+ global _setup
+
+ if not os.path.isfile("PKG-INFO"): # downloaded from SVN?
+ _setup.do_build_files('build')
+
+ distutils.command.build.build.run(self)
+
+ if not os.path.isfile("PKG-INFO"):
+ _setup.do_build_svnrev(os.path.join(self.build_lib, 'gnue',
+ _setup.package[5:].lower(), 'svnrev.py'))
+
+
+# =============================================================================
+# install: Some user_options are no longer allowed
+# =============================================================================
+
+class Install(distutils.command.install.install):
+ """
+ Install the package
+ """
+
+ # Commented out because sometimes, to create packages, we want to install
+ # other tools in a different target directory than common is installed
+ #user_options = distutils.command.install.install.user_options
+
+ #allowed_options = ["root=", "compile", "no-compile", "optimize=", "force",
+ # "skip-build", "record="]
+
+ #user_options = [opt for opt in user_options if opt [0] in allowed_options]
+
+
+ # TODO: this code is executed as soon as this module get's importet.
+ # Need to check wether this is really what we want here.
+ user_options = distutils.command.install.install.user_options
+ i = 0
+ for option in user_options:
+ i = i + 1
+ if option[0] == "install-data=":
+ user_options.insert(i, ("install-config=", None,
+ "installation directory for configuration files"))
+ break
+
+
+ # -------------------------------------------------------------------------
+ # Initalize options
+ # -------------------------------------------------------------------------
+
+ def initialize_options(self):
+ """
+ Initialize options
+ """
+
+ distutils.command.install.install.initialize_options(self)
+ self.install_config = None
+
+
+ # -------------------------------------------------------------------------
+ # Finalize options - set all install targets
+ # -------------------------------------------------------------------------
+
+ def finalize_options(self):
+ """
+ Finalize options and set all install targets
+ """
+
+ if self.install_lib is None:
+ self.install_lib = gnue.paths.lib
+ if self.install_scripts is None:
+ self.install_scripts = gnue.paths.scripts
+ if self.install_data is None:
+ self.install_data = gnue.paths.data
+ if self.install_config is None:
+ self.install_config = gnue.paths.config
+
+ distutils.command.install.install.finalize_options(self)
+
+
+ # -------------------------------------------------------------------------
+ # install.run: generate and install path dependent files afterwards
+ # -------------------------------------------------------------------------
+
+ def run(self):
+ """
+ Run the install command
+ """
+
+ global _setup
+
+ _setup.check_dependencies()
+
+ self.__outputs = []
+
+ # install translations
+ if os.path.isdir('po'):
+ # copy files
+ for fname in os.listdir('po'):
+ if fname[-4:] == '.gmo':
+ src = os.path.join('po', fname)
+ dst = os.path.join(self.install_data, 'share', 'locale',
+ fname[:-4], 'LC_MESSAGES')
+ self.mkpath(dst)
+ dst = os.path.join(dst, _setup.package + '.mo')
+ self.copy_file(src, dst)
+ self.__outputs.append(dst)
+
+ distutils.command.install.install.run(self)
+
+
+ # -------------------------------------------------------------------------
+ # install.get_outputs: list all installed files
+ # -------------------------------------------------------------------------
+
+ def get_outputs(self):
+ """
+ List all installed files
+ """
+
+ return distutils.command.install.install.get_outputs(self) \
+ + self.__outputs
+
+
+# =============================================================================
+# GSetup: Basic class for setup scripts of GNUe packages
+# =============================================================================
+
+class GSetup:
+ """
+ Base class for setup scripts of GNU Enterprise packages
+ """
+
+ # -------------------------------------------------------------------------
+ # Abstract methods: setup.py scripts generally override these
+ # -------------------------------------------------------------------------
+
+ def set_params(self, params):
+ """
+ Define setup paramters
+ """
+ pass
+
+
+ # -------------------------------------------------------------------------
+ # Build list of file
+ # -------------------------------------------------------------------------
+
+ def build_files(self, action):
+ """
+ Build a list of files depending on a given action
+ """
+ pass
+
+
+ # -------------------------------------------------------------------------
+ # Check if all dependencies are met
+ # -------------------------------------------------------------------------
+
+ def check_dependencies(self):
+ """
+ Check all dependencies
+ """
+ pass
+
+
+ # -------------------------------------------------------------------------
+ # Build files if called from SVN
+ # -------------------------------------------------------------------------
+
+ def do_build_files(self, action):
+ """
+ Build all files if called from SVN
+ """
+
+ if os.name == 'posix':
+
+ # First check if we have everything installed we need to build the
+ # distribution
+
+ if os.path.isdir('po'):
+ # xgettext
+ if os.system("pygettext --version > /dev/null") != 0:
+ log.fatal("Could not find 'pygettext'. Strange.")
+ log.fatal("It should be included in the Python " \
+ "distribution.")
+ sys.exit(1)
+
+ # msgmerge
+ if os.system("msgmerge --version > /dev/null") != 0:
+ log.fatal("Could not find 'msgmerge'. Please install " \
+ "Gettext.")
+ sys.exit(1)
+
+ # msgfmt
+ if os.system("msgfmt --version > /dev/null") != 0:
+ log.fatal("Could not find 'msgfmt'. Please install " \
+ "Gettext.")
+ sys.exit(1)
+
+ # -----------------------------------------------------------------
+
+ # build translations
+ if os.path.isdir('po'):
+ log.info("building translations")
+ if os.system("cd po && make gmo") != 0:
+ sys.exit(1)
+
+ else:
+ # on non posix systems just run msgfmt on existing .po files
+ if os.path.isdir('po'):
+ # msgfmt.py
+ argv0_path = os.path.dirname(os.path.abspath(sys.executable))
+ sys.path.append(argv0_path + "\\tools\\i18n")
+
+ msgfmt_ok = 0
+ try:
+ import msgfmt
+ msgfmt_ok = 1
+ except:
+ pass
+
+ if msgfmt_ok == 1:
+ # pygettext.py exist in Python, but no msgmerge, so
+ # just create a placeholder...
+ potfile = open('po/'+ self.package +'.pot', 'w')
+ potfile.write("#placeholder")
+ potfile.close()
+
+ # build translations
+ log.info("building translations")
+ for f in os.listdir('po'):
+ if f[-3:] == '.po':
+ msgfmt.make('po/'+f, 'po/'+f[:-3]+'.gmo')
+ msgfmt.MESSAGES = {}
+
+ # ---------------------------------------------------------------------
+
+ # do package specific stuff
+ self.build_files(action)
+
+
+ # -------------------------------------------------------------------------
+ # Create the svnrev.py file
+ # -------------------------------------------------------------------------
+
+ def do_build_svnrev(self, filename):
+ """
+ Create the file 'svnrev.py' which contains the current SubVersion
+ revision.
+ """
+
+ log.info("building svnrev.py")
+ output = open(filename, 'w')
+ output.write('svnrev = %r' % version.get_svn_revision('src'))
+ output.close()
+
+
+ # -------------------------------------------------------------------------
+ # Helper methods for descendants
+ # -------------------------------------------------------------------------
+
+ def allfiles(self, directory):
+ """
+ Get a list of files in a given directory, excluding some specials like
+ Makefile, .svn, CSV and so on
+ """
+
+ directory = os.path.normpath(directory)
+ exclude = [".svn", "CVS", "README.cvs", ".cvsignore", "Makefile"]
+ return [directory + "/" + fname for fname in os.listdir(directory) \
+ if not fname in exclude and
+ not os.path.isdir(os.path.join(directory, fname))]
+
+
+ # -------------------------------------------------------------------------
+ # Get all packages in a directory
+ # -------------------------------------------------------------------------
+
+ def __get_packages(self, directory, package):
+
+ content = os.listdir(directory)
+ result = []
+ if "__init__.py" in content:
+ result = [package]
+ for name in content:
+ fullname = os.path.join(directory, name)
+ if os.path.isdir(fullname):
+ result = result + self.__get_packages(fullname, package +
+ "." + name)
+ return result
+
+
+ # -------------------------------------------------------------------------
+ # Call the actual setup routine
+ # -------------------------------------------------------------------------
+
+ def run(self):
+ """
+ Run the setup routine
+ """
+
+ global _setup
+
+ # set global variable
+ _setup = self
+
+ setup_params = {"cmdclass_sdist": SDist,
+ "cmdclass_build": Build,
+ "cmdclass_install": Install
+ }
+
+ _setup.set_params(setup_params)
+
+ # make package available
+ self.package = setup_params["name"]
+
+ # find out all packages
+ if not setup_params.has_key("packages"):
+ packages = []
+
+ for module, directory in setup_params["package_dir"].items():
+ packages = packages + self.__get_packages(directory, module)
+
+ setup_params["packages"] = packages
+
+ # remove data files that are not available
+ for target, files in setup_params["data_files"]:
+ i = 0
+ while i < len(files):
+ fname = files[i]
+ if os.path.isfile(fname):
+ i += 1
+ else:
+ log.warn("warning: did not find file %s" % fname)
+ files.remove(fname)
+
+ # now call setup
+ setup(name = setup_params["name"],
+ version = setup_params["version"],
+ description = setup_params["description"],
+ long_description = setup_params["long_description"],
+ author = setup_params["author"],
+ author_email = setup_params["author_email"],
+ url = setup_params["url"],
+ license = setup_params["license"],
+ packages = setup_params["packages"],
+ package_dir = setup_params["package_dir"],
+ scripts = setup_params["scripts"],
+ data_files = setup_params["data_files"],
+
+ # Override certain command classes with our own ones
+ cmdclass = {"sdist": setup_params["cmdclass_sdist"],
+ "build": setup_params["cmdclass_build"],
+ "install": setup_params["cmdclass_install"]})
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.