mirror of
https://github.com/nmap/nmap.git
synced 2025-12-07 21:21:31 +00:00
Add some features from Zenmap's setup.pl to ndiff one. The main feature is adding the ndiff.py Python module install directory to ndiff script so it can always (we hope) be found even if the dir isn't in the user's PYTHONPATH.
This commit is contained in:
@@ -1,12 +1,51 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import errno
|
||||
import sys
|
||||
import os
|
||||
import os.path
|
||||
import re
|
||||
|
||||
import distutils.command
|
||||
import distutils.command.install
|
||||
import distutils.core
|
||||
import distutils.cmd
|
||||
import distutils.errors
|
||||
from distutils.command.install import install
|
||||
|
||||
APP_NAME = "ndiff"
|
||||
|
||||
def path_strip_prefix(path, prefix):
|
||||
"""Return path stripped of its directory prefix if it starts with prefix,
|
||||
otherwise return path unmodified. This only works correctly with Unix
|
||||
paths; for example it will not replace the drive letter on a Windows path.
|
||||
Examples:
|
||||
>>> path_strip_prefix('/tmp/destdir/usr/bin', '/tmp/destdir')
|
||||
'/usr/bin'
|
||||
>>> path_strip_prefix('/tmp/../tmp/destdir/usr/bin', '/tmp///destdir')
|
||||
'/usr/bin'
|
||||
>>> path_strip_prefix('/etc', '/tmp/destdir')
|
||||
'/etc'
|
||||
>>> path_strip_prefix('/etc', '/')
|
||||
'/etc'
|
||||
>>> path_strip_prefix('/etc', '')
|
||||
'/etc'
|
||||
"""
|
||||
absolute = os.path.isabs(path)
|
||||
path = os.path.normpath(path)
|
||||
prefix = os.path.normpath(prefix)
|
||||
if path.startswith(prefix) and prefix != os.sep:
|
||||
path = path[len(prefix):]
|
||||
# Absolute paths must remain absolute and relative paths must remain
|
||||
# relative.
|
||||
assert os.path.isabs(path) == absolute
|
||||
return path
|
||||
|
||||
|
||||
|
||||
###############################################################################
|
||||
# Distutils subclasses
|
||||
|
||||
class null_command(distutils.cmd.Command):
|
||||
"""This is a dummy distutils command that does nothing. We use it to
|
||||
replace the install_egg_info and avoid installing a .egg-info file, because
|
||||
@@ -26,6 +65,7 @@ class checked_install(distutils.command.install.install):
|
||||
caused by not having the python-dev package installed. By default,
|
||||
distutils gives a misleading error message: "invalid Python installation."
|
||||
"""
|
||||
|
||||
def finalize_options(self):
|
||||
try:
|
||||
distutils.command.install.install.finalize_options(self)
|
||||
@@ -33,6 +73,43 @@ class checked_install(distutils.command.install.install):
|
||||
raise distutils.errors.DistutilsPlatformError(str(e) + """
|
||||
Installing your distribution's python-dev package may solve this problem.""")
|
||||
|
||||
def set_modules_path(self):
|
||||
app_file_name = os.path.join(self.install_scripts, APP_NAME)
|
||||
# Find where the modules are installed. distutils will put them in
|
||||
# self.install_lib, but that path can contain the root (DESTDIR), so we
|
||||
# must strip it off if necessary.
|
||||
modules_dir = self.install_lib
|
||||
if self.root is not None:
|
||||
modules_dir = path_strip_prefix(modules_dir, self.root)
|
||||
|
||||
app_file = open(app_file_name, "r")
|
||||
lines = app_file.readlines()
|
||||
app_file.close()
|
||||
|
||||
for i in range(len(lines)):
|
||||
if re.match(r'^INSTALL_LIB =', lines[i]):
|
||||
lines[i] = "INSTALL_LIB = %s\n" % repr(modules_dir)
|
||||
break
|
||||
else:
|
||||
raise ValueError(
|
||||
"INSTALL_LIB replacement not found in %s" % app_file_name)
|
||||
|
||||
app_file = open(app_file_name, "w")
|
||||
app_file.writelines(lines)
|
||||
app_file.close()
|
||||
|
||||
|
||||
def run(self):
|
||||
install.run(self)
|
||||
|
||||
# These below are from Zenmap. We're only using set_modules_path right now, but we might consider whether the others would be useful (or, if not, whether we should remove them from Zenmap).
|
||||
# self.set_perms()
|
||||
self.set_modules_path()
|
||||
# self.fix_paths()
|
||||
# self.create_uninstaller()
|
||||
# self.write_installed_files()
|
||||
|
||||
|
||||
distutils.core.setup(name=u"ndiff", scripts=[u"scripts/ndiff"],
|
||||
py_modules=[u"ndiff"],
|
||||
data_files=[(u"share/man/man1", [u"docs/ndiff.1"])],
|
||||
|
||||
Reference in New Issue
Block a user