From 09526ad7154c71b12357ea8f1b8dc92f7d1bd23f Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Tue, 24 Mar 2015 15:45:20 +0100 Subject: [PATCH] asciidoc2html: Try to find asciidoc on the system. Fixes #106. --- scripts/asciidoc2html.py | 53 ++++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/scripts/asciidoc2html.py b/scripts/asciidoc2html.py index 12730a0e6..7b0289f6a 100755 --- a/scripts/asciidoc2html.py +++ b/scripts/asciidoc2html.py @@ -32,29 +32,45 @@ sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir)) from scripts import utils -def call_asciidoc(src, dst): +def _get_asciidoc_cmd(args): + """Try to find out what commandline to use to invoke asciidoc.""" + if args.asciidoc is not None: + return args.asciidoc + + try: + subprocess.call(['asciidoc'], stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL) + except OSError: + pass + else: + return ['asciidoc'] + + try: + subprocess.call(['asciidoc.py'], stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL) + except OSError: + pass + else: + return ['asciidoc.py'] + + raise FileNotFoundError + + +def call_asciidoc(args, src, dst): """Call asciidoc for the given files. Args: + args: The asciidoc binary to use, as a list. src: The source .asciidoc file. dst: The destination .html file, or None to auto-guess. """ print("Calling asciidoc for {}...".format(os.path.basename(src))) - if os.name == 'nt': - # FIXME this is highly specific to my machine - # https://github.com/The-Compiler/qutebrowser/issues/106 - args = [r'C:\Python27\python', r'J:\bin\asciidoc-8.6.9\asciidoc.py'] - else: - args = ['asciidoc'] + args = args[:] if dst is not None: args += ['--out-file', dst] args.append(src) try: subprocess.check_call(args) - except FileNotFoundError: - utils.print_col("asciidoc needs to be installed to use this script!", - 'red') - sys.exit(1) except (subprocess.CalledProcessError, OSError) as e: utils.print_col(str(e), 'red') sys.exit(1) @@ -67,6 +83,10 @@ def main(colors=False): parser = argparse.ArgumentParser() parser.add_argument('--all', help="Build all documentation into a given " "directory.", nargs=1) + parser.add_argument('--asciidoc', help="Full path to python and " + "asciidoc.py. If not given, it's searched in PATH.", + nargs=2, required=False, + metavar=('PYTHON', 'ASCIIDOC')) args = parser.parse_args() asciidoc_files = [ ('doc/FAQ.asciidoc', 'qutebrowser/html/doc/FAQ.html'), @@ -77,6 +97,13 @@ def main(colors=False): os.mkdir('qutebrowser/html/doc') except FileExistsError: pass + try: + asciidoc = _get_asciidoc_cmd(args) + except FileNotFoundError: + utils.print_col("Could not find asciidoc! Please install it, or use " + "the --asciidoc argument to point this script to the " + "correct python/asciidoc.py location!", 'red') + sys.exit(1) if args.all: for root, _dirs, files in os.walk(os.getcwd()): for filename in files: @@ -92,14 +119,14 @@ def main(colors=False): 'html'))) dst = os.path.join(*parts) os.makedirs(os.path.dirname(dst), exist_ok=True) - call_asciidoc(src, dst) + call_asciidoc(asciidoc, src, dst) else: for src in glob.glob('doc/help/*.asciidoc'): name, _ext = os.path.splitext(os.path.basename(src)) dst = 'qutebrowser/html/doc/{}.html'.format(name) asciidoc_files.append((src, dst)) for src, dst in asciidoc_files: - call_asciidoc(src, dst) + call_asciidoc(asciidoc, src, dst) if __name__ == '__main__':