aboutsummaryrefslogtreecommitdiff
path: root/rpkid
diff options
context:
space:
mode:
Diffstat (limited to 'rpkid')
-rw-r--r--rpkid/setup.py88
-rw-r--r--rpkid/setup_extensions.py94
2 files changed, 97 insertions, 85 deletions
diff --git a/rpkid/setup.py b/rpkid/setup.py
index 859f8aeb..ad960876 100644
--- a/rpkid/setup.py
+++ b/rpkid/setup.py
@@ -15,11 +15,7 @@
# PERFORMANCE OF THIS SOFTWARE.
from distutils.core import setup, Extension
-from distutils.util import change_root, convert_path
-from distutils.command.build_scripts import build_scripts as _build_scripts
-from distutils.command.install_scripts import install_scripts as _install_scripts
-from distutils import log
-from stat import S_IMODE
+import setup_extensions
import os
try:
@@ -46,84 +42,6 @@ except ImportError:
ac_datarootdir = None
ac_sysconfdir = None
-class build_scripts(_build_scripts):
- """
- Hacked version of distutils.build_scripts, designed to support
- multiple target installation directories like install_data does.
-
- [(target_directory, [list_of_source_scripts]), ...]
-
- Most of the real work is in the companion hacked install_scripts,
- but we need to tweak the list of source files that build_scripts
- pulls out of the Distribution object.
- """
-
- def finalize_options(self):
- _build_scripts.finalize_options(self)
- self.scripts = []
- for script in self.distribution.scripts:
- if isinstance(script, str):
- self.scripts.append(script)
- else:
- self.scripts.extend(script[1])
-
-class install_scripts(_install_scripts):
- """
- Hacked version of distutils.install_scripts, designed to support
- multiple target installation directories like install_data does.
-
- [(target_directory, [list_of_source_scripts]), ...]
-
- The code here is a tweaked combination of what the stock
- install_scripts and install_data classes do.
- """
-
- user_options = _install_scripts.user_options + [
- ("root=", None, "install everything relative to this alternate root directory")]
-
- def initialize_options(self):
- _install_scripts.initialize_options(self)
- self.outfiles = []
- self.root = None
-
- def finalize_options (self):
- self.set_undefined_options("build",
- ("build_scripts", "build_dir"))
- self.set_undefined_options("install",
- ("install_scripts", "install_dir"),
- ("root", "root"),
- ("force", "force"),
- ("skip_build", "skip_build"))
-
- def run(self):
- if not self.skip_build:
- self.run_command("build_scripts")
- for script in self.distribution.scripts:
- if isinstance(script, str):
- fn = os.path.join(self.build_dir, os.path.basename(convert_path(script)))
- out, _ = self.copy_file(fn, self.install_dir)
- self.outfiles.append(out)
- else:
- dn = convert_path(script[0])
- if not os.path.isabs(dn):
- dn = os.path.join(self.install_dir, dn)
- elif self.root:
- dn = change_root(self.root, dn)
- self.mkpath(dn)
- if not script[1]:
- self.outfiles.append(dn)
- else:
- for s in script[1]:
- fn = os.path.join(self.build_dir, os.path.basename(convert_path(s)))
- out, _ = self.copy_file(fn, dn)
- self.outfiles.append(out)
- if os.name == "posix":
- for fn in self.get_outputs():
- mode = S_IMODE(os.stat(fn).st_mode) | 0555
- log.info("changing mode of %s to %o", fn, mode)
- if not self.dry_run:
- os.chmod(fn, mode)
-
# pylint: disable=W0622
setup(name = "rpkitoolkit",
@@ -131,8 +49,8 @@ setup(name = "rpkitoolkit",
description = "RPKI Toolkit",
license = "BSD",
url = "http://rpki.net/",
- cmdclass = {"build_scripts" : build_scripts,
- "install_scripts" : install_scripts},
+ cmdclass = {"build_scripts" : setup_extensions.build_scripts,
+ "install_scripts" : setup_extensions.install_scripts},
packages = ["rpki",
"rpki.POW",
"rpki.irdb",
diff --git a/rpkid/setup_extensions.py b/rpkid/setup_extensions.py
new file mode 100644
index 00000000..12b123aa
--- /dev/null
+++ b/rpkid/setup_extensions.py
@@ -0,0 +1,94 @@
+# $Id$
+#
+# This module extends the stock distutils install_setup code to
+# support installation into multiple target directories, with
+# semantics similar to what distutils already supports for
+# script_files. The bulk of this code is taken directly from the
+# stock distutils package, with minor changes. As such, I consider
+# this to be a derivative work of the distutils package for copyright
+# purposes.
+
+from distutils.util import change_root, convert_path
+from distutils.command.build_scripts import build_scripts as _build_scripts
+from distutils.command.install_scripts import install_scripts as _install_scripts
+from distutils import log
+from stat import S_IMODE
+import os
+
+class build_scripts(_build_scripts):
+ """
+ Hacked version of distutils.build_scripts, designed to support
+ multiple target installation directories like install_data does.
+
+ [(target_directory, [list_of_source_scripts]), ...]
+
+ Most of the real work is in the companion hacked install_scripts,
+ but we need to tweak the list of source files that build_scripts
+ pulls out of the Distribution object.
+ """
+
+ def finalize_options(self):
+ _build_scripts.finalize_options(self)
+ self.scripts = []
+ for script in self.distribution.scripts:
+ if isinstance(script, str):
+ self.scripts.append(script)
+ else:
+ self.scripts.extend(script[1])
+
+class install_scripts(_install_scripts):
+ """
+ Hacked version of distutils.install_scripts, designed to support
+ multiple target installation directories like install_data does.
+
+ [(target_directory, [list_of_source_scripts]), ...]
+
+ The code here is a tweaked combination of what the stock
+ install_scripts and install_data classes do.
+ """
+
+ user_options = _install_scripts.user_options + [
+ ("root=", None, "install everything relative to this alternate root directory")]
+
+ def initialize_options(self):
+ _install_scripts.initialize_options(self)
+ self.outfiles = []
+ self.root = None
+
+ def finalize_options (self):
+ self.set_undefined_options("build",
+ ("build_scripts", "build_dir"))
+ self.set_undefined_options("install",
+ ("install_scripts", "install_dir"),
+ ("root", "root"),
+ ("force", "force"),
+ ("skip_build", "skip_build"))
+
+ def run(self):
+ if not self.skip_build:
+ self.run_command("build_scripts")
+ for script in self.distribution.scripts:
+ if isinstance(script, str):
+ fn = os.path.join(self.build_dir, os.path.basename(convert_path(script)))
+ out, _ = self.copy_file(fn, self.install_dir)
+ self.outfiles.append(out)
+ else:
+ dn = convert_path(script[0])
+ if not os.path.isabs(dn):
+ dn = os.path.join(self.install_dir, dn)
+ elif self.root:
+ dn = change_root(self.root, dn)
+ self.mkpath(dn)
+ if not script[1]:
+ self.outfiles.append(dn)
+ else:
+ for s in script[1]:
+ fn = os.path.join(self.build_dir, os.path.basename(convert_path(s)))
+ out, _ = self.copy_file(fn, dn)
+ self.outfiles.append(out)
+ if os.name == "posix":
+ for fn in self.get_outputs():
+ mode = S_IMODE(os.stat(fn).st_mode) | 0555
+ log.info("changing mode of %s to %o", fn, mode)
+ if not self.dry_run:
+ os.chmod(fn, mode)