build: Replace #!/usr/bin/env python with passed in PYTHON=
authorAndrew Bartlett <abartlet@samba.org>
Mon, 8 Apr 2013 05:57:45 +0000 (15:57 +1000)
committerMichael Adam <obnox@samba.org>
Tue, 9 Apr 2013 22:13:45 +0000 (00:13 +0200)
This means that if we were forced to use a specific python for the build, we
will put that binary into the top of samba-tool, so it continues to work
after the install.

Andrew Bartlett

Reviewed-by: Michael Adam <obnox@samba.org>
buildtools/wafsamba/samba_python.py
buildtools/wafsamba/wafsamba.py
wscript

index b2172f71a14e73655093e900fca1c1b2e302e6b2..847b431f7d578b70c910308a416639f85852b833 100644 (file)
@@ -5,6 +5,16 @@ from samba_utils import *
 from samba_autoconf import *
 
 from Configure import conf
+
+@conf
+def SAMBA_CHECK_PYTHON(conf, mandatory=True):
+    # enable tool to build python extensions
+    conf.find_program('python', var='PYTHON', mandatory=mandatory)
+    conf.check_tool('python')
+    path_python = conf.find_program('python')
+    conf.env.PYTHON_SPECIFIED = (conf.env.PYTHON != path_python)
+    conf.check_python_version((2,4,2))
+
 @conf
 def SAMBA_CHECK_PYTHON_HEADERS(conf, mandatory=True):
     if conf.env["python_headers_checked"] == []:
index f7156ecf7f4e7f486b45bef1de3dff9ee442f5a1..3559cc196fe339b62d0a570db34169be429b29a7 100644 (file)
@@ -696,14 +696,25 @@ def copy_and_fix_python_path(task):
         replacement="""sys.path.insert(0, "%s")
 sys.path.insert(1, "%s")""" % (task.env["PYTHONARCHDIR"], task.env["PYTHONDIR"])
 
+    shebang = None
+
+    if task.env["PYTHON"][0] == "/":
+        replacement_shebang = "#!%s" % task.env["PYTHON"]
+    else:
+        replacement_shebang = "#!/usr/bin/env %s" % task.env["PYTHON"]
+
     installed_location=task.outputs[0].bldpath(task.env)
     source_file = open(task.inputs[0].srcpath(task.env))
     installed_file = open(installed_location, 'w')
+    lineno = 0
     for line in source_file:
         newline = line
-        if pattern in line:
+        if lineno == 0 and task.env["PYTHON_SPECIFIED"] == True and line[:2] == "#!":
+            newline = replacement_shebang
+        elif pattern in line:
             newline = line.replace(pattern, replacement)
         installed_file.write(newline)
+        lineno = lineno + 1
     installed_file.close()
     os.chmod(installed_location, 0755)
     return 0
@@ -727,6 +738,8 @@ def install_file(bld, destdir, file, chmod=MODE_644, flat=False,
                             target=inst_file)
         bld.add_manual_dependency(bld.path.find_or_declare(inst_file), bld.env["PYTHONARCHDIR"])
         bld.add_manual_dependency(bld.path.find_or_declare(inst_file), bld.env["PYTHONDIR"])
+        bld.add_manual_dependency(bld.path.find_or_declare(inst_file), str(bld.env["PYTHON_SPECIFIED"]))
+        bld.add_manual_dependency(bld.path.find_or_declare(inst_file), bld.env["PYTHON"])
         file = inst_file
     if base_name:
         file = os.path.join(base_name, file)
diff --git a/wscript b/wscript
index 4f823102dd5cf31131d6331671ae614e9fdd3ceb..0410c0bdf3d3e66e00519daf4787c06eaf578ce1 100644 (file)
--- a/wscript
+++ b/wscript
@@ -82,13 +82,10 @@ def configure(conf):
 
     conf.RECURSE('lib/replace')
 
-    conf.find_program('python', var='PYTHON', mandatory=True)
     conf.find_program('perl', var='PERL', mandatory=True)
     conf.find_program('xsltproc', var='XSLTPROC')
 
-    # enable tool to build python extensions
-    conf.check_tool('python')
-    conf.check_python_version((2,4,2))
+    conf.SAMBA_CHECK_PYTHON(mandatory=True)
     conf.SAMBA_CHECK_PYTHON_HEADERS(mandatory=True)
 
     if sys.platform == 'darwin' and not conf.env['HAVE_ENVIRON_DECL']: