Boot Linux faster!

Check our new training course

Boot Linux faster!

Check our new training course
and Creative Commons CC-BY-SA
lecture and lab materials

Bootlin logo

Elixir Cross Referencer

#!/usr/bin/env python3
#
# Copyright (c) 2017, Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0

# Very quick script to move docs from different places into the doc directory
# to fix the website and external links

import os
import shutil
import re
import sys
import fnmatch


# direcories to search for .rst files
CONTENT_DIRS = ["samples", "boards"]

# directives to parse for included files
DIRECTIVES = ["figure","include","image","literalinclude"]

if "ZEPHYR_BASE" not in os.environ:
    sys.stderr.write("$ZEPHYR_BASE environment variable undefined.\n")
    exit(1)
ZEPHYR_BASE = os.environ["ZEPHYR_BASE"]

def get_rst_files(dir):
    matches = []
    for root, dirnames, filenames in os.walk('%s/%s' %(ZEPHYR_BASE, dir)):
        for filename in fnmatch.filter(filenames, '*.rst'):
            matches.append(os.path.join(root, filename))
    for file in matches:
        frel = file.replace(ZEPHYR_BASE,"").strip("/")
        dir=os.path.dirname(frel)
        if not os.path.exists(os.path.join(ZEPHYR_BASE, "doc", dir)):
            os.makedirs(os.path.join(ZEPHYR_BASE, "doc", dir))

        shutil.copyfile(file, os.path.join(ZEPHYR_BASE, "doc", frel))

        with open(file, encoding="utf-8") as f:
            content = f.readlines()
        content = [x.strip() for x in content]
        directives = "|".join(DIRECTIVES)
        pattern = re.compile("\s*\.\.\s+(%s)::\s+(.*)" %directives)
        for l in content:
            m = pattern.match(l)
            if m:
                inf = m.group(2)
                ind = os.path.dirname(inf)
                if not os.path.exists(os.path.join(ZEPHYR_BASE, "doc", dir, ind)):
                    os.makedirs(os.path.join(ZEPHYR_BASE, "doc", dir, ind))

                shutil.copyfile(os.path.join(ZEPHYR_BASE, dir, inf),
                        os.path.join(ZEPHYR_BASE, "doc", dir, inf))

        f.close()

def main():
    for d in CONTENT_DIRS:
        get_rst_files(d)

if __name__ == "__main__":
    main()