Index: scons-2.0.1/setup.py |
=================================================================== |
--- scons-2.0.1/setup.py (revision 0) |
+++ scons-2.0.1/setup.py (revision 0) |
@@ -0,0 +1,425 @@ |
+# |
+# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 The SCons Foundation |
+# |
+# Permission is hereby granted, free of charge, to any person obtaining |
+# a copy of this software and associated documentation files (the |
+# "Software"), to deal in the Software without restriction, including |
+# without limitation the rights to use, copy, modify, merge, publish, |
+# distribute, sublicense, and/or sell copies of the Software, and to |
+# permit persons to whom the Software is furnished to do so, subject to |
+# the following conditions: |
+# |
+# The above copyright notice and this permission notice shall be included |
+# in all copies or substantial portions of the Software. |
+# |
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY |
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE |
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE |
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
+ |
+__revision__ = "src/setup.py 5134 2010/08/16 23:02:40 bdeegan" |
+ |
+import os |
+import os.path |
+import stat |
+import sys |
+ |
+Version = "2.0.1" |
+ |
+man_pages = [ |
+ 'scons.1', |
+ 'sconsign.1', |
+ 'scons-time.1', |
+] |
+ |
+(head, tail) = os.path.split(sys.argv[0]) |
+ |
+if head: |
+ os.chdir(head) |
+ sys.argv[0] = tail |
+ |
+is_win32 = 0 |
+if not sys.platform == 'win32': |
+ try: |
+ if sys.argv[1] == 'bdist_wininst': |
+ is_win32 = 1 |
+ except IndexError: |
+ pass |
+else: |
+ is_win32 = 1 |
+ |
+try: |
+ import distutils |
+ import distutils.core |
+ import distutils.command.install |
+ import distutils.command.install_data |
+ import distutils.command.install_lib |
+ import distutils.command.install_scripts |
+ import distutils.command.build_scripts |
+except ImportError: |
+ sys.stderr.write("""Could not import distutils. |
+ |
+Building or installing SCons from this package requires that the Python |
+distutils be installed. See the README or README.txt file from this |
+package for instructions on where to find distutils for installation on |
+your system, or on how to install SCons from a different package. |
+""") |
+ sys.exit(1) |
+ |
+_install = distutils.command.install.install |
+_install_data = distutils.command.install_data.install_data |
+_install_lib = distutils.command.install_lib.install_lib |
+_install_scripts = distutils.command.install_scripts.install_scripts |
+_build_scripts = distutils.command.build_scripts.build_scripts |
+ |
+class _options(object): |
+ pass |
+ |
+Options = _options() |
+ |
+Installed = [] |
+ |
+def set_explicitly(name, args): |
+ """ |
+ Return if the installation directory was set explicitly by the |
+ user on the command line. This is complicated by the fact that |
+ "install --install-lib=/foo" gets turned into "install_lib |
+ --install-dir=/foo" internally. |
+ """ |
+ if args[0] == "install_" + name: |
+ s = "--install-dir=" |
+ else: |
+ # The command is something else (usually "install") |
+ s = "--install-%s=" % name |
+ set = 0 |
+ length = len(s) |
+ for a in args[1:]: |
+ if a[:length] == s: |
+ set = 1 |
+ break |
+ return set |
+ |
+class install(_install): |
+ user_options = _install.user_options + [ |
+ ('no-scons-script', None, |
+ "don't install 'scons', only install 'scons-%s'" % Version), |
+ ('no-version-script', None, |
+ "don't install 'scons-%s', only install 'scons'" % Version), |
+ ('install-bat', None, |
+ "install 'scons.bat' script"), |
+ ('no-install-bat', None, |
+ "do not install 'scons.bat' script"), |
+ ('install-man', None, |
+ "install SCons man pages"), |
+ ('no-install-man', None, |
+ "do not install SCons man pages"), |
+ ('standard-lib', None, |
+ "install SCons library in standard Python location"), |
+ ('standalone-lib', None, |
+ "install SCons library in separate standalone directory"), |
+ ('version-lib', None, |
+ "install SCons library in version-numbered directory"), |
+ ] |
+ boolean_options = _install.boolean_options + [ |
+ 'no-scons-script', |
+ 'no-version-script', |
+ 'install-bat', |
+ 'no-install-bat', |
+ 'install-man', |
+ 'no-install-man', |
+ 'standard-lib', |
+ 'standalone-lib', |
+ 'version-lib' |
+ ] |
+ |
+ if hasattr(os, 'symlink'): |
+ user_options.append( |
+ ('hardlink-scons', None, |
+ "hard link 'scons' to the version-numbered script, don't make a separate 'scons' copy"), |
+ ) |
+ boolean_options.append('hardlink-script') |
+ |
+ if hasattr(os, 'symlink'): |
+ user_options.append( |
+ ('symlink-scons', None, |
+ "make 'scons' a symbolic link to the version-numbered script, don't make a separate 'scons' copy"), |
+ ) |
+ boolean_options.append('symlink-script') |
+ |
+ def initialize_options(self): |
+ _install.initialize_options(self) |
+ self.no_scons_script = 0 |
+ self.no_version_script = 0 |
+ self.install_bat = 0 |
+ self.no_install_bat = not is_win32 |
+ self.install_man = 0 |
+ self.no_install_man = is_win32 |
+ self.standard_lib = 0 |
+ self.standalone_lib = 0 |
+ self.version_lib = 0 |
+ self.hardlink_scons = 0 |
+ self.symlink_scons = 0 |
+ # Don't warn about having to put the library directory in the |
+ # search path. |
+ self.warn_dir = 0 |
+ |
+ def finalize_options(self): |
+ _install.finalize_options(self) |
+ if self.install_bat: |
+ Options.install_bat = 1 |
+ else: |
+ Options.install_bat = not self.no_install_bat |
+ if self.install_man: |
+ Options.install_man = 1 |
+ else: |
+ Options.install_man = not self.no_install_man |
+ Options.standard_lib = self.standard_lib |
+ Options.standalone_lib = self.standalone_lib |
+ Options.version_lib = self.version_lib |
+ Options.install_scons_script = not self.no_scons_script |
+ Options.install_version_script = not self.no_version_script |
+ Options.hardlink_scons = self.hardlink_scons |
+ Options.symlink_scons = self.symlink_scons |
+ |
+def get_scons_prefix(libdir, is_win32): |
+ """ |
+ Return the right prefix for SCons library installation. Find |
+ this by starting with the library installation directory |
+ (.../site-packages, most likely) and crawling back up until we reach |
+ a directory name beginning with "python" (or "Python"). |
+ """ |
+ drive, head = os.path.splitdrive(libdir) |
+ while head: |
+ if head == os.sep: |
+ break |
+ head, tail = os.path.split(head) |
+ if tail.lower()[:6] == "python": |
+ # Found the Python library directory... |
+ if is_win32: |
+ # ...on Win32 systems, "scons" goes in the directory: |
+ # C:\PythonXX => C:\PythonXX\scons |
+ return os.path.join(drive + head, tail) |
+ else: |
+ # ...on other systems, "scons" goes above the directory: |
+ # /usr/lib/pythonX.X => /usr/lib/scons |
+ return os.path.join(drive + head) |
+ return libdir |
+ |
+def force_to_usr_local(self): |
+ """ |
+ A hack to decide if we need to "force" the installation directories |
+ to be under /usr/local. This is because Mac Os X Tiger and |
+ Leopard, by default, put the libraries and scripts in their own |
+ directories under /Library or /System/Library. |
+ """ |
+ return (sys.platform[:6] == 'darwin' and |
+ (self.install_dir[:9] == '/Library/' or |
+ self.install_dir[:16] == '/System/Library/')) |
+ |
+class install_lib(_install_lib): |
+ def finalize_options(self): |
+ _install_lib.finalize_options(self) |
+ if force_to_usr_local(self): |
+ self.install_dir = '/usr/local/lib' |
+ args = self.distribution.script_args |
+ if not set_explicitly("lib", args): |
+ # They didn't explicitly specify the installation |
+ # directory for libraries... |
+ is_win32 = sys.platform == "win32" or args[0] == 'bdist_wininst' |
+ prefix = get_scons_prefix(self.install_dir, is_win32) |
+ if Options.standalone_lib: |
+ # ...but they asked for a standalone directory. |
+ self.install_dir = os.path.join(prefix, "scons") |
+ elif Options.version_lib or not Options.standard_lib: |
+ # ...they asked for a version-specific directory, |
+ # or they get it by default. |
+ self.install_dir = os.path.join(prefix, "scons-%s" % Version) |
+ |
+ msg = "Installed SCons library modules into %s" % self.install_dir |
+ Installed.append(msg) |
+ |
+class install_scripts(_install_scripts): |
+ def finalize_options(self): |
+ _install_scripts.finalize_options(self) |
+ if force_to_usr_local(self): |
+ self.install_dir = '/usr/local/bin' |
+ self.build_dir = os.path.join('build', 'scripts') |
+ msg = "Installed SCons scripts into %s" % self.install_dir |
+ Installed.append(msg) |
+ |
+ def do_nothing(self, *args, **kw): |
+ pass |
+ |
+ def hardlink_scons(self, src, dst, ver): |
+ try: os.unlink(dst) |
+ except OSError: pass |
+ os.link(ver, dst) |
+ |
+ def symlink_scons(self, src, dst, ver): |
+ try: os.unlink(dst) |
+ except OSError: pass |
+ os.symlink(os.path.split(ver)[1], dst) |
+ |
+ def copy_scons(self, src, dst, *args): |
+ try: os.unlink(dst) |
+ except OSError: pass |
+ self.copy_file(src, dst) |
+ self.outfiles.append(dst) |
+ |
+ def report(self, msg, args): |
+ # Wrapper around self.announce, used by older distutils versions. |
+ self.announce(msg % args) |
+ |
+ def run(self): |
+ # This "skip_build/build_scripts" block is cut-and-paste from |
+ # distutils. |
+ if not self.skip_build: |
+ self.run_command('build_scripts') |
+ |
+ # Custom SCons installation stuff. |
+ if Options.hardlink_scons: |
+ create_basename_script = self.hardlink_scons |
+ elif Options.symlink_scons: |
+ create_basename_script = self.symlink_scons |
+ elif Options.install_scons_script: |
+ create_basename_script = self.copy_scons |
+ else: |
+ create_basename_script = self.do_nothing |
+ |
+ if Options.install_version_script: |
+ create_version_script = self.copy_scons |
+ else: |
+ create_version_script = self.do_nothing |
+ |
+ inputs = self.get_inputs() |
+ bat_scripts = [x for x in inputs if x[-4:] == '.bat'] |
+ non_bat_scripts = [x for x in inputs if x[-4:] != '.bat'] |
+ |
+ self.outfiles = [] |
+ self.mkpath(self.install_dir) |
+ |
+ for src in non_bat_scripts: |
+ base = os.path.basename(src) |
+ scons = os.path.join(self.install_dir, base) |
+ scons_ver = scons + '-' + Version |
+ create_version_script(src, scons_ver) |
+ create_basename_script(src, scons, scons_ver) |
+ |
+ if Options.install_bat: |
+ if is_win32: |
+ bat_install_dir = get_scons_prefix(self.install_dir, is_win32) |
+ else: |
+ bat_install_dir = self.install_dir |
+ for src in bat_scripts: |
+ scons_bat = os.path.join(bat_install_dir, 'scons.bat') |
+ scons_version_bat = os.path.join(bat_install_dir, |
+ 'scons-' + Version + '.bat') |
+ self.copy_scons(src, scons_bat) |
+ self.copy_scons(src, scons_version_bat) |
+ |
+ # This section is cut-and-paste from distutils, modulo being |
+ # able |
+ if os.name == 'posix': |
+ try: report = distutils.log.info |
+ except AttributeError: report = self.report |
+ # Set the executable bits (owner, group, and world) on |
+ # all the scripts we just installed. |
+ for file in self.get_outputs(): |
+ if self.dry_run: |
+ report("changing mode of %s", file) |
+ else: |
+ mode = ((os.stat(file)[stat.ST_MODE]) | 0555) & 07777 |
+ report("changing mode of %s", file) |
+ os.chmod(file, mode) |
+ |
+class build_scripts(_build_scripts): |
+ def finalize_options(self): |
+ _build_scripts.finalize_options(self) |
+ self.build_dir = os.path.join('build', 'scripts') |
+ |
+class install_data(_install_data): |
+ def initialize_options(self): |
+ _install_data.initialize_options(self) |
+ def finalize_options(self): |
+ _install_data.finalize_options(self) |
+ if force_to_usr_local(self): |
+ self.install_dir = '/usr/local' |
+ if Options.install_man: |
+ if is_win32: |
+ dir = 'Doc' |
+ else: |
+ dir = os.path.join('man', 'man1') |
+ self.data_files = [(dir, man_pages)] |
+ man_dir = os.path.join(self.install_dir, dir) |
+ msg = "Installed SCons man pages into %s" % man_dir |
+ Installed.append(msg) |
+ else: |
+ self.data_files = [] |
+ |
+description = "Open Source next-generation build tool." |
+ |
+long_description = """Open Source next-generation build tool. |
+Improved, cross-platform substitute for the classic Make |
+utility. In short, SCons is an easier, more reliable |
+and faster way to build software.""" |
+ |
+scripts = [ |
+ 'script/scons', |
+ 'script/sconsign', |
+ 'script/scons-time', |
+ |
+ # We include scons.bat in the list of scripts, even on UNIX systems, |
+ # because we provide an option to allow it be installed explicitly, |
+ # for example if you're installing from UNIX on a share that's |
+ # accessible to Windows and you want the scons.bat. |
+ 'script/scons.bat', |
+] |
+ |
+#if is_win32: |
+# scripts = scripts + [ |
+# 'script/scons-post-install.py' |
+# ] |
+ |
+arguments = { |
+ 'name' : "scons", |
+ 'version' : Version, |
+ 'description' : description, |
+ 'long_description' : long_description, |
+ 'author' : 'Steven Knight', |
+ 'author_email' : 'knight@baldmt.com', |
+ 'url' : "http://www.scons.org/", |
+ 'packages' : ["SCons", |
+ "SCons.compat", |
+ "SCons.Node", |
+ "SCons.Options", |
+ "SCons.Platform", |
+ "SCons.Scanner", |
+ "SCons.Script", |
+ "SCons.Tool", |
+ "SCons.Tool.MSCommon", |
+ "SCons.Tool.packaging", |
+ "SCons.Variables", |
+ ], |
+ 'package_dir' : {'' : 'engine'}, |
+ 'data_files' : [('man/man1', man_pages)], |
+ 'scripts' : scripts, |
+ 'cmdclass' : {'install' : install, |
+ 'install_lib' : install_lib, |
+ 'install_data' : install_data, |
+ 'install_scripts' : install_scripts, |
+ 'build_scripts' : build_scripts} |
+} |
+ |
+distutils.core.setup(**arguments) |
+ |
+if Installed: |
+ print '\n'.join(Installed) |
+ |
+# Local Variables: |
+# tab-width:4 |
+# indent-tabs-mode:nil |
+# End: |
+# vim: set expandtab tabstop=4 shiftwidth=4: |
Property changes on: scons-2.0.1/setup.py |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |