[Git][NTPsec/ntpsec][master] Revert build to the Old Ways re: python install.

Ian Bruene gitlab at mg.gitlab.com
Fri Jan 5 14:20:41 UTC 2018


Ian Bruene pushed to branch master at NTPsec / ntpsec


Commits:
50daea95 by Ian Bruene at 2018-01-05T07:56:27-06:00
Revert build to the Old Ways re: python install.

This reverts all of the changes associated with the fix_python_config.py
script. The build will no longer throw up in /usr/ when prefix==/usr/local/

- - - - -


12 changed files:

- INSTALL
- contrib/ntpheat
- contrib/ntpheatusb
- devel/testing.txt
- ntpclients/ntpdig.py
- ntpclients/ntploggps.py
- ntpclients/ntplogtemp.py
- ntpclients/ntpmon.py
- ntpclients/ntpq.py
- pylib/wscript
- − wafhelpers/fix_python_config.py
- wscript


Changes:

=====================================
INSTALL
=====================================
--- a/INSTALL
+++ b/INSTALL
@@ -50,6 +50,14 @@ Python 2.x, x >= 6, or Python 3.x, x >= 3::
    Python 3.  Note that you will need both the ordinary Python
    installation and Python dev tools, if your OS makes such a
    distinction.
+   
+   Some OS distros won't find our installed python libraries.
+   Your shell may need something like this:
+     export PYTHONPATH=/usr/local/lib/python2.7/site-packages
+   CentOS 6 is using python 2.6
+     export PYTHONPATH=/usr/local/lib/python2.6/site-packages
+   (I put it in my .bashrc)
+
 
 argparse::
    Required for ntpviz when using Python version 2.6


=====================================
contrib/ntpheat
=====================================
--- a/contrib/ntpheat
+++ b/contrib/ntpheat
@@ -24,7 +24,8 @@ import time
 try:
     import ntp.util
 except ImportError as e:
-    sys.stderr.write("ntpheat: can't find Python NTP modules.\n%s\n" % e)
+    sys.stderr.write("ntpheat: can't find Python NTP modules. "
+                     "-- check PYTHONPATH.\n%s\n" % e)
     sys.exit(1)
 
 # Work with argvars


=====================================
contrib/ntpheatusb
=====================================
--- a/contrib/ntpheatusb
+++ b/contrib/ntpheatusb
@@ -37,7 +37,8 @@ import time
 try:
     import ntp.util
 except ImportError as e:
-    sys.stderr.write("ntpheatusb: can't find Python NTP modules.\n%s\n" % e)
+    sys.stderr.write("ntpheatusb: can't find Python NTP modules. "
+                     "-- check PYTHONPATH.\n%s\n" % e)
     sys.exit(1)
 
 


=====================================
devel/testing.txt
=====================================
--- a/devel/testing.txt
+++ b/devel/testing.txt
@@ -13,7 +13,7 @@ directory to build/main/ntpclients/ and run ./ntpq there. If you get a message
 that says
 
 ---------------------------------------------------------------------
-ntpq: can't find Python NTP library.
+ntpq: can't find Python NTP library -- check PYTHONPATH.
 ---------------------------------------------------------------------
 
 you *may* have a problem.  A lot of what was C code in legacy versions


=====================================
ntpclients/ntpdig.py
=====================================
--- a/ntpclients/ntpdig.py
+++ b/ntpclients/ntpdig.py
@@ -52,7 +52,7 @@ try:
     import ntp.util
 except ImportError as e:
     sys.stderr.write(
-        "ntpdig: can't find Python NTP library.\n")
+        "ntpdig: can't find Python NTP library -- check PYTHONPATH.\n")
     sys.stderr.write("%s\n" % e)
     sys.exit(1)
 


=====================================
ntpclients/ntploggps.py
=====================================
--- a/ntpclients/ntploggps.py
+++ b/ntpclients/ntploggps.py
@@ -48,7 +48,7 @@ try:
     import ntp.util
 except ImportError as e:
     sys.stderr.write(
-        "ntploggps: can't find Python NTP library.\n")
+        "ntploggps: can't find Python NTP library -- check PYTHONPATH.\n")
     sys.stderr.write("%s\n" % e)
     sys.exit(1)
 


=====================================
ntpclients/ntplogtemp.py
=====================================
--- a/ntpclients/ntplogtemp.py
+++ b/ntpclients/ntplogtemp.py
@@ -35,7 +35,7 @@ try:
     import ntp.util
 except ImportError as e:
     sys.stderr.write(
-        "ntplogtemp: can't find Python NTP library.\n")
+        "ntplogtemp: can't find Python NTP library -- check PYTHONPATH.\n")
     sys.stderr.write("%s\n" % e)
     sys.exit(1)
 


=====================================
ntpclients/ntpmon.py
=====================================
--- a/ntpclients/ntpmon.py
+++ b/ntpclients/ntpmon.py
@@ -40,7 +40,7 @@ try:
     import ntp.version
 except ImportError as e:
     sys.stderr.write(
-        "ntpmon: can't find Python NTP library.\n")
+        "ntpmon: can't find Python NTP library -- check PYTHONPATH.\n")
     sys.stderr.write("%s\n" % e)
     sys.exit(1)
 


=====================================
ntpclients/ntpq.py
=====================================
--- a/ntpclients/ntpq.py
+++ b/ntpclients/ntpq.py
@@ -30,7 +30,7 @@ try:
     import ntp.version
 except ImportError as e:
     sys.stderr.write(
-        "ntpq: can't find Python NTP library.\n")
+        "ntpq: can't find Python NTP library -- check PYTHONPATH.\n")
     sys.stderr.write("%s\n" % e)
     sys.exit(1)
 


=====================================
pylib/wscript
=====================================
--- a/pylib/wscript
+++ b/pylib/wscript
@@ -1,5 +1,4 @@
 from waflib import Utils  # pylint: disable=import-error
-from wafhelpers.fix_python_config import FixConfig
 
 
 def options(opt):
@@ -7,9 +6,8 @@ def options(opt):
 
 
 def configure(conf):
-    fixed = FixConfig(conf)
-    fixed.load('python')
-    fixed.check_python_version((2, 6, 0))
+    conf.load('python')
+    conf.check_python_version((2, 6, 0))
     conf.check_python_headers(features='pyext')  # Extension-only, no embedded
 
 


=====================================
wafhelpers/fix_python_config.py deleted
=====================================
--- a/wafhelpers/fix_python_config.py
+++ /dev/null
@@ -1,120 +0,0 @@
-"""Work around waf bugs related to Python config setup."""
-
-import ast, os, sys
-
-from waflib import Utils  # pylint: disable=import-error
-from waflib.Logs import pprint  # pylint: disable=import-error
-
-# NOTE:  Everything in this file relates to waf bugs.  It can go away once
-# the waf bugs are fixed.
-
-# The waf code for setting up PYTHONDIR and PYTHONARCHDIR is broken, because
-# get_python_lib() only returns guaranteed usable library locations when the
-# 'prefix' argument is absent or None, but waf insists on feeding it the PREFIX
-# value.  To make matters worse, the design of waf's ConfigSet object makes it
-# impossible to get it to return a value of None for any item, so merely
-# temporarily patching PREFIX doesn't work.  Thus, the most straightforward
-# workaround is to duplicate the relevant code with the properly omitted
-# 'prefix'.
-#
-# The downside of the prefixless get_python_lib() is that the result may not
-# be FHS-compliant, and may result in conflicts when a base install includes
-# this code and another version is installed later.  There doesn't seem to be
-# a universal solution to this, but it tries to do the best it can by using
-# waf's original prefixed result when it appears in the target Python's
-# sys.path (with any preexisting PYTHONPATH definition inhibited).
-# Unfortunately, it will only appear there if it already exists, even though
-# the install itself will create it if needed.
-#
-# In principle, there might be some value in allowing a prefix to be optionally
-# supplied (separately from PREFIX), but given that both values are already
-# overridable, there's little need for an additional option.
-#
-# Naturally, the fix doesn't override user-supplied values, but the fixup runs
-# after the version check, using the captured original settings to determine
-# whether to override.
-
-# An additional function is temporarily needed to clean up any libraries
-# that had been installed to the incorrect PYTHONDIR by former
-# versions of the script.
-#
-# Although this code is a NOP when the old and new install locations are
-# identical, for maximum safety the extra deletions are done preinstall
-# and postuninstall.  This might matter if the old and new locations were
-# symlinked together (a possible workaround for the old bug).
-#
-# Merely removing the libraries doesn't remove the containing directory(s)
-# which may have been newly created by the old script.  Removing any such
-# directories is desirable, but doing so automatically would be too
-# dangerous.  The compromise is to issue a warning message when an empty
-# containing directory is left.  This is always done at the end, to avoid
-# burying the warning in the install messages.
-
-
-class FixConfig(object):
-    """Methods and state for working around waf's python-config bugs."""
-
-    def __init__(self, conf):
-        """Initialize state from conf object."""
-        self.conf = conf
-        self.opts = None
-
-    def get_options(self):
-        """Capture values after option processing."""
-        self.opts = self.conf.env.derive().detach()
-
-    def fix_python_libs(self):
-        """Fix up library install paths."""
-        # Remember original setting for "compatibility cleanup".
-        self.conf.env.OLD_PYTHONDIR = self.conf.env.PYTHONDIR
-        if Utils.is_win32:
-            return  # No fixups supported on Windows
-        # Note that get_python_variables() doesn't work for sys.path
-        path_env = dict(os.environ)
-        path_env.pop('PYTHONPATH', None)  # Ignore any current PYTHONPATH
-        path_str = self.conf.cmd_and_log(self.conf.env.PYTHON
-                                         + ['-c',
-                                            'import sys; print(sys.path)'],
-                                         env=path_env)
-        sys_path = ast.literal_eval(path_str)
-        if (not ('PYTHONDIR' in self.opts or 'PYTHONDIR' in self.conf.environ)
-            and self.conf.env.PYTHONDIR not in sys_path):
-            (pydir,) = self.conf.get_python_variables(
-                ["get_python_lib(plat_specific=0)"]
-                )
-            self.conf.env.PYTHONDIR = pydir
-        if (not ('PYTHONARCHDIR' in self.opts
-                 or 'PYTHONARCHDIR' in self.conf.environ)
-            and self.conf.env.PYTHONARCHDIR not in sys_path):
-            (pyarchdir,) = self.conf.get_python_variables(
-                ["get_python_lib(plat_specific=1)"]
-                )
-            self.conf.env.PYTHONARCHDIR = pyarchdir or pydir
-
-    def load(self, *args, **kwargs):
-        """Do the load and capture the options."""
-        self.conf.load(*args, **kwargs)
-        self.get_options()
-
-    def check_python_version(self, *args, **kwargs):
-        """Check version and fix up install paths."""
-        self.conf.check_python_version(*args, **kwargs)
-        self.fix_python_libs()
-
-    @staticmethod
-    def cleanup_python_libs(ctx, cmd='preinstall'):
-        """Remove any Python libs that were installed to the wrong location."""
-        if not ctx.env.PYTHONDIR:
-            return  # Here on pre-setup call
-        if ctx.env.PYTHONDIR == ctx.env.OLD_PYTHONDIR:
-            return  # Here when old bug had no effect
-        if not os.path.isdir(ctx.env.OLD_PYTHONDIR):
-            return  # Here when old dir doesn't exist or isn't a dir
-        if cmd in ('preinstall', 'uninstall'):
-            ctx.exec_command('rm -rf %s/ntp' % ctx.env.OLD_PYTHONDIR)
-        if cmd == 'preinstall':
-            return  # Skip message where it's not likely to be seen
-        # See if we may have left an inappropriate empty directory
-        if not os.listdir(ctx.env.OLD_PYTHONDIR):
-            pprint('YELLOW',
-                   'May need to manually remove %s' % ctx.env.OLD_PYTHONDIR)


=====================================
wscript
=====================================
--- a/wscript
+++ b/wscript
@@ -24,7 +24,6 @@ from wafhelpers.options import options_cmd
 from wafhelpers.probes \
     import probe_header_with_prerequisites, probe_function_with_prerequisites
 from wafhelpers.test import test_write_log, test_print_log
-from wafhelpers.fix_python_config import FixConfig
 
 
 pprint.__doc__ = None
@@ -1018,9 +1017,6 @@ def afterparty(ctx):
     # expected to work.
     if ctx.cmd == 'clean':
         ctx.exec_command("rm -f ntpd/version.h ")
-    if ctx.cmd in ('uninstall', 'install'):
-        # Make sure libs are removed from the old location
-        FixConfig.cleanup_python_libs(ctx, ctx.cmd)
     for x in ("ntpclients", "tests/pylib",):
         # List used to be longer...
         path_build = ctx.bldnode.make_node("pylib")
@@ -1062,10 +1058,6 @@ def build(ctx):
         # the build directory never happens.  This is how we foil that.
         ctx.add_pre_fun(lambda ctx: ctx.exec_command("rm -f pylib/*.py[co]"))
 
-    if ctx.cmd == "install":
-        # Make sure libs are removed from the old location
-        ctx.add_pre_fun(FixConfig.cleanup_python_libs)
-
     if ctx.env.ENABLE_DOC_USER:
         if ctx.variant != "main":
             ctx.recurse("docs")
@@ -1141,8 +1133,8 @@ def build(ctx):
 
     if ctx.cmd == "build":
         if "PYTHONPATH" in os.environ:
-            print("--- PYTHONPATH is set, "
-                  "this may mask or cause library-related problems ---")
+            print("--- PYTHONPATH is not set, "
+                  "loading the Python ntp library may be troublesome ---")
 
 #
 # Boot script setup



View it on GitLab: https://gitlab.com/NTPsec/ntpsec/commit/50daea95f4ee40e32f0e8ec27e677fd35f712be7

---
View it on GitLab: https://gitlab.com/NTPsec/ntpsec/commit/50daea95f4ee40e32f0e8ec27e677fd35f712be7
You're receiving this email because of your account on gitlab.com.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ntpsec.org/pipermail/vc/attachments/20180105/ef45e3bf/attachment.html>


More information about the vc mailing list