From 42170d379eddc12bd2d1fe84dc268882d8eb4d64 Mon Sep 17 00:00:00 2001 
 | 
From: Silcet <camorga1@gmail.com> 
 | 
Date: Mon, 3 May 2021 08:59:28 +0000 
 | 
Subject: [PATCH] setup: only make one reference to env 
 | 
  
 | 
If sys.executable happens to be '/usr/bin/env python' or something 
 | 
similar, the setup script will result in 'ufw' getting /usr/bin/env 
 | 
repeated on the top line.  This causes an error at runtime.  Perform a 
 | 
quick sanity check on sys.executable before doing the substitution. 
 | 
  
 | 
While we're at it, change the default value of 'exe' to the one we either 
 | 
detected or specified on the build line. 
 | 
  
 | 
Upstream-Status: Inappropriate [ embedded specific ] 
 | 
  
 | 
Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com> 
 | 
  
 | 
The patch was imported from the OpenEmbedded git server 
 | 
(git://git.openembedded.org/openembedded) as of commit id 
 | 
2cc1bd9dd060f5002c2fde7aacba86fe230c12af. 
 | 
  
 | 
A previous change had modified the way the python shebang was updated to 
 | 
follow the same version as the one used to call setup.py. However, it 
 | 
used a regex that was not matching anymore. To fix this, the regex 
 | 
condition is removed so the shebang line is substituted with the sys.executable 
 | 
value. Later in the installation distutils finds the string with the path 
 | 
of sys.executable and replaces it with "#! /usr/bin/env python3". 
 | 
  
 | 
Signed-off-by: Silcet <camorga1@gmail.com> 
 | 
--- 
 | 
 setup.py | 12 ++++++++++-- 
 | 
 1 file changed, 10 insertions(+), 2 deletions(-) 
 | 
  
 | 
diff --git a/setup.py b/setup.py 
 | 
index 2343bc9..f8a638b 100644 
 | 
--- a/setup.py 
 | 
+++ b/setup.py 
 | 
@@ -64,7 +64,7 @@ class Install(_install, object): 
 | 
         real_sharedir = os.path.join(real_prefix, 'share', 'ufw') 
 | 
  
 | 
         # Update the modules' paths 
 | 
-        for fn in [ 'common.py' ]: 
 | 
+        for fn in [ 'common.py', 'util.py' ]: 
 | 
             # 'staging' is used with just 'install' but build_lib is used when 
 | 
             # using 'build'. We could probably override 'def build()' but this 
 | 
             # at least works 
 | 
@@ -97,6 +97,12 @@ class Install(_install, object): 
 | 
                                  "-i", 
 | 
                                  "s%#SHARE_DIR#%" + real_sharedir + "%g", 
 | 
                                  f]) 
 | 
+                                 
 | 
+                subprocess.call(["sed", 
 | 
+                                 "-i.jjm", 
 | 
+                                 "s%/sbin/iptables%" + iptables_exe + "%g", 
 | 
+                                 f]) 
 | 
+ 
 | 
  
 | 
                 if fn == 'common.py' and 'UFW_SKIP_CHECKS' in os.environ and \ 
 | 
                    os.environ['UFW_SKIP_CHECKS'] != '': 
 | 
@@ -123,10 +129,12 @@ class Install(_install, object): 
 | 
             self.mkpath(os.path.dirname(f)) 
 | 
  
 | 
         # update the interpreter to that of the one the user specified for setup 
 | 
+        # Distutils searches for the string of sys.executable and replaces it  
 | 
+        # with the "#! /usr/bin/env pythonX" shebang on a later step 
 | 
         print("Updating staging/ufw to use %s" % (sys.executable)) 
 | 
         subprocess.call(["sed", 
 | 
                          "-i", 
 | 
-                         "1s%^#.*python.*%#! /usr/bin/env " + sys.executable + "%g", 
 | 
+                         "1s%/.*python.*%" + sys.executable + "%g", 
 | 
                          'staging/ufw']) 
 | 
         self.copy_file('staging/ufw', script) 
 | 
         self.copy_file('doc/ufw.8', manpage) 
 |