Esempio n. 1
0
    def is_installed(self, environ, version=None, strict=False):
        if version is None:
            version = '3.1.2'
        options.set_debug(self.debug)
        limit = False
        antlr_root = None
        if 'ANTLR' in environ and environ['ANTLR']:
            antlr_root = environ['ANTLR']
            limit = True

        classpaths = []
        if not limit:
            try:
                pathlist = environ['CLASSPATH'] ## from java config
                for path in pathlist:
                    classpaths.append(os.path.dirname(path))
            except KeyError:
                pass
            try:
                antlr_root = os.environ['ANTLR_ROOT']
            except KeyError:
                pass
            for d in programfiles_directories():
                classpaths.append(os.path.join(d, 'ANTLR', 'lib'))

        try:
            java_home = None
            if 'JAVA_HOME' in environ.keys():
                java_home = os.path.join(environ['JAVA_HOME'], 'lib')
            jarfile = find_file('antlr*' + version[0] + '*.jar',
                                ['/usr/share/java', '/usr/local/share/java',
                                 '/opt/local/share/java', java_home,
                                 antlr_root,] + classpaths)
            self.environment['ANTLR'] = [environ['JAVA'],
                                         "-classpath", os.path.abspath(jarfile),
                                         "org.antlr.Tool",]
            self.found = True
        except ConfigError:
            if self.debug:
                print(sys.exc_info()[1])
        return self.found
Esempio n. 2
0
def make_doc(src_file, target_dir=None, stylesheet=None):
    (XSLTPROC, JAVA_SAXON, NET_SAXON) = range(3)

    src_dir = os.path.abspath(os.path.dirname(src_file))
    if target_dir is None:
        pth = os.path.relpath(os.path.dirname(src_file)).split(os.sep)[1:]
        # pylint: disable=W0142
        target_dir = os.path.join(options.target_build_dir, *pth)
    if stylesheet is None:
        stylesheet = 'http://docbook.sourceforge.net/release/fo/docbook.xsl'

    fop_exe = find_program('fop')
    java_exe = find_program('java')
    try:  ## prefer xsltproc
        xslt_exe = [find_program('xsltproc')]
        which = XSLTPROC
    except Exception:  # pylint: disable=W0703
        try:
            classpaths = []
            try:
                for path in os.environ['CLASSPATH'].split(os.pathsep):
                    classpaths.append(os.path.dirname(path))
            except KeyError:
                pass
            try:
                classpaths.append(os.path.join(os.environ['JAVA_HOME'], 'lib'))
            except KeyError:
                pass
            saxon_jar = find_file('saxon*.jar',
                                  ['/usr/share/java', '/usr/local/share/java',
                                   '/opt/local/share/java',] + classpaths)
            resolver_jar = find_file('resolver*.jar',
                                     ['/usr/share/java',
                                      '/usr/local/share/java',
                                      '/opt/local/share/java',] + classpaths)
            xslt_exe = [java_exe, '-classpath',
                        os.pathsep.join([saxon_jar, resolver_jar]),
                        '-jar', saxon_jar]
            which = JAVA_SAXON
        except Exception:  # pylint: disable=W0703
            xslt_exe = [find_program('saxon')]
            which = NET_SAXON

    if not os.path.exists(target_dir):
        mkdir(target_dir)
    copy_tree(src_dir, target_dir)

    ## Need to respect relative paths
    here = os.getcwd()
    os.chdir(target_dir)
    src_base = os.path.basename(src_file)
    fo_src = os.path.splitext(src_base)[0] + '.fo'
    pdf_dst = os.path.splitext(src_base)[0] + '.pdf'

    if which == XSLTPROC:
        cmd_line = xslt_exe + ['-xinclude', '-o', fo_src, stylesheet, src_base]
    elif which == JAVA_SAXON:
        cmd_line = xslt_exe + ['-o', fo_src, src_base, stylesheet]
    else:
        cmd_line = xslt_exe + [src_base, '-o:' + fo_src, '-xsl:' + stylesheet]
        if 'XML_CATALOG_FILES' in os.environ:
            cmd_line += ['-catalog:' + os.environ['XML_CATALOG_FILES']]
    subprocess.check_call(" ".join(cmd_line), shell=True)

    cmd_line = [fop_exe, '-fo', fo_src, '-pdf', pdf_dst]
    subprocess.check_call(" ".join(cmd_line), shell=True)
    os.chdir(here)