s4-waf: added auto-detection of perl manpage extensions
authorAndrew Tridgell <tridge@samba.org>
Sun, 28 Mar 2010 10:00:51 +0000 (21:00 +1100)
committerAndrew Tridgell <tridge@samba.org>
Tue, 6 Apr 2010 10:27:14 +0000 (20:27 +1000)
some systems produce pidl.1p, others pidl.1. We need to know which one
to use.

buildtools/wafsamba/samba_conftests.py
pidl/wscript

index 47bef40a3dc39960dff6179d3e2142ea0916f16a..94ddf3a5a9b6d605b760712a724bd04dc2900301 100644 (file)
@@ -1,7 +1,7 @@
 # a set of config tests that use the samba_autoconf functions
 # to test for commonly needed configuration options
 
-import os, Build, shutil, Utils
+import os, Build, shutil, Utils, re
 from Configure import conf
 from samba_utils import *
 
@@ -63,21 +63,8 @@ def CHECK_CHARSET_EXISTS(conf, charset, outcharset='UCS-2LE', headers=None, defi
                            lib='iconv',
                            headers=headers)
 
-
-
-# this one is quite complex, and should probably be broken up
-# into several parts. I'd quite like to create a set of CHECK_COMPOUND()
-# functions that make writing complex compound tests like this much easier
-@conf
-def CHECK_LIBRARY_SUPPORT(conf, rpath=False, msg=None):
-    '''see if the platform supports building libraries'''
-
-    if msg is None:
-        if rpath:
-            msg = "rpath library support"
-        else:
-            msg = "building library support"
-
+def find_config_dir(conf):
+    '''find a directory to run tests in'''
     k = 0
     while k < 10000:
         dir = os.path.join(conf.blddir, '.conf_check_%d' % k)
@@ -100,6 +87,23 @@ def CHECK_LIBRARY_SUPPORT(conf, rpath=False, msg=None):
         os.stat(dir)
     except:
         conf.fatal('cannot use the configuration test folder %r' % dir)
+    return dir
+
+
+# this one is quite complex, and should probably be broken up
+# into several parts. I'd quite like to create a set of CHECK_COMPOUND()
+# functions that make writing complex compound tests like this much easier
+@conf
+def CHECK_LIBRARY_SUPPORT(conf, rpath=False, msg=None):
+    '''see if the platform supports building libraries'''
+
+    if msg is None:
+        if rpath:
+            msg = "rpath library support"
+        else:
+            msg = "building library support"
+
+    dir = find_config_dir(conf)
 
     bdir = os.path.join(dir, 'testbuild')
     if not os.path.exists(bdir):
@@ -174,3 +178,60 @@ def CHECK_LIBRARY_SUPPORT(conf, rpath=False, msg=None):
 
     conf.check_message(msg, '', ret)
     return ret
+
+
+
+@conf
+def CHECK_PERL_MANPAGE(conf, msg=None, section=None):
+    '''work out what extension perl uses for manpages'''
+
+    if msg is None:
+        if section:
+            msg = "perl man%s extension" % section
+        else:
+            msg = "perl manpage generation"
+
+    conf.check_message_1(msg)
+
+    dir = find_config_dir(conf)
+
+    bdir = os.path.join(dir, 'testbuild')
+    if not os.path.exists(bdir):
+        os.makedirs(bdir)
+
+    dest = open(os.path.join(bdir, 'Makefile.PL'), 'w')
+    dest.write("""
+use ExtUtils::MakeMaker;
+WriteMakefile(
+    'NAME'     => 'WafTest',
+    'EXE_FILES' => [ 'WafTest' ]
+);
+""")
+    dest.close()
+    back = os.path.abspath('.')
+    os.chdir(bdir)
+    proc = Utils.pproc.Popen(['perl', 'Makefile.PL'],
+                             stdout=Utils.pproc.PIPE,
+                             stderr=Utils.pproc.PIPE)
+    (out, err) = proc.communicate()
+    os.chdir(back)
+
+    ret = (proc.returncode == 0)
+    if not ret:
+        conf.check_message_2('not found', color='YELLOW')
+        return
+
+    if section:
+        f = open(os.path.join(bdir,'Makefile'), 'r')
+        man = f.read()
+        f.close()
+        m = re.search('MAN%sEXT\s+=\s+(\w+)' % section, man)
+        if not m:
+            conf.check_message_2('not found', color='YELLOW')
+            return
+        ext = m.group(1)
+        conf.check_message_2(ext)
+        return ext
+
+    conf.check_message_2('ok')
+    return True
index 35681b9299a353bed7e2a687bd2cbc0bfddad2d2..52e4bae662f857375b53053d3765dc5af3be4d73 100644 (file)
@@ -8,8 +8,9 @@ def set_options(opt):
 def configure(conf):
     conf.check_tool('perl')
     # we need a recent version of MakeMaker to get the right man page names
-    if conf.check_perl_module('ExtUtils::MakeMaker 6.42'):
-        conf.DEFINE('HAVE_PERL_MAKEMAKER', 1)
+    if conf.CHECK_PERL_MANPAGE():
+        conf.env.PERLMAN1EXT = conf.CHECK_PERL_MANPAGE(section='1')
+        conf.env.PERLMAN3EXT = conf.CHECK_PERL_MANPAGE(section='3')
 
 def build(bld):
     bld.INSTALL_FILES('${BINDIR}', 'pidl', chmod=0755)
@@ -22,11 +23,13 @@ def build(bld):
     pidl_src = ['pidl']
     pidl_src.extend(bld.path.ant_glob('lib/**/*.pm').split())
 
-    pidl_manpages = '''blib/man1/pidl.1p blib/man3/Parse::Pidl::NDR.3pm
-                       blib/man3/Parse::Pidl::Wireshark::Conformance.3pm
-                       blib/man3/Parse::Pidl::Dump.3pm
-                       blib/man3/Parse::Pidl::Util.3pm
-                       blib/man3/Parse::Pidl::Wireshark::NDR.3pm'''.split()
+    pidl_manpages = '''blib/man1/pidl.${PERLMAN1EXT} blib/man3/Parse::Pidl::NDR.${PERLMAN3EXT}
+                       blib/man3/Parse::Pidl::Wireshark::Conformance.${PERLMAN3EXT}
+                       blib/man3/Parse::Pidl::Dump.${PERLMAN3EXT}
+                       blib/man3/Parse::Pidl::Util.${PERLMAN3EXT}
+                       blib/man3/Parse::Pidl::Wireshark::NDR.${PERLMAN3EXT}'''.split()
+
+    pidl_manpages = bld.EXPAND_VARIABLES(pidl_manpages)
 
     # use perl to build the manpages
     bld.env.pidl_srcdir = os.path.join(bld.srcnode.abspath(), 'pidl')