diff --git a/.gitignore b/.gitignore index 2b3dd86ebb98c0ff8c00a39a417f774c1b804c2b..752dc96100cc4bea6910047ae07a32e831d240e9 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ build/ root/ sources/ .orchestra/ +__pycache__/ +*.py[cod] diff --git a/config/components/llvm_documentation.lib.yml b/config/components/llvm_documentation.lib.yml index d79171451af3c1551edc63d45d64a47e0912408d..aeb1aa67e8b1e0f5280bd08ac944b49d5e523107 100644 --- a/config/components/llvm_documentation.lib.yml +++ b/config/components/llvm_documentation.lib.yml @@ -3,16 +3,18 @@ #@yaml/text-templated-strings --- #@ def _llvm_documentation_component(): +repository: llvm-project builds: default: depencencies: - llvm configure: | rm -rf "$BUILD_DIR" - mkdir -p "$BUILD_DIR" - clone llvm-project "$BUILD_DIR" + cp -r "$SOURCE_DIR" "$BUILD_DIR" + # mkdir -p "$BUILD_DIR" + # clone llvm-project "$BUILD_DIR" - sed 's|FILE_PATTERNS|#FILE_PATTERNS|' -i "$BUILD_DIR/*/docs/doxygen.cfg.in" + sed 's|FILE_PATTERNS|#FILE_PATTERNS|' -i "$BUILD_DIR"/*/docs/doxygen.cfg.in mkdir -p "$BUILD_DIR/build" @@ -32,28 +34,34 @@ builds: fi cd $BUILD_DIR/build/docs/doxygen/html - sed -i 's|$$$$(XCODE_INSTALL)/usr/bin/docsetutil|'$(PWD)'/support/docsetutil|' Makefile - sed -i 's|XCODE_INSTALL="$$$$(shell xcode-select -print-path)"||' Makefile + sed -i 's|$(XCODE_INSTALL)/usr/bin/docsetutil|'$ORCHESTRA'/helpers/docsetutil|' Makefile + sed -i 's|XCODE_INSTALL="$(shell xcode-select -print-path)"||' Makefile sed -i 's|<string>doxygen</string>|<string>llvm</string>|' Info.plist (@= make @) sed -i -s 's/ inherit / /' llvm.docset/Contents/Resources/Documents/*.html - $(call download-file,$(1)/build/docs/doxygen/html/llvm.docset/Contents/Resources/Documents,https://opensource.apple.com/source/lldb/lldb-310.2.36/www/cpp_reference/html,dynsections.js) - cd $(1)/build/tools/clang/docs/doxygen/html - sed -i 's|$$$$(XCODE_INSTALL)/usr/bin/docsetutil|'$(PWD)'/support/docsetutil|' Makefile - sed -i 's|XCODE_INSTALL="$$$$(shell xcode-select -print-path)"||' Makefile + download_file.sh "$BUILD_DIR/build/docs/doxygen/html/llvm.docset/Contents/Resources/Documents" \ + "https://opensource.apple.com/source/lldb/lldb-310.2.36/www/cpp_reference/html" \ + "dynsections.js" + + + cd $BUILD_DIR/build/tools/clang/docs/doxygen/html + sed -i 's|$(XCODE_INSTALL)/usr/bin/docsetutil|'$ORCHESTRA'/helpers/docsetutil|' Makefile + sed -i 's|XCODE_INSTALL="$(shell xcode-select -print-path)"||' Makefile sed -i 's|<string>doxygen</string>|<string>clang</string>|' Info.plist (@= make @) sed -i -s 's/ inherit / /' clang.docset/Contents/Resources/Documents/*.html - $(call download-file,$(1)/build/tools/clang/docs/doxygen/html/clang.docset/Contents/Resources/Documents,https://opensource.apple.com/source/lldb/lldb-310.2.36/www/cpp_reference/html,dynsections.js) + download_file.sh "$BUILD_DIR/build/tools/clang/docs/doxygen/html/clang.docset/Contents/Resources/Documents" \ + "https://opensource.apple.com/source/lldb/lldb-310.2.36/www/cpp_reference/html" \ + "dynsections.js" - mkdir -p $$$$DESTDIR$(INSTALL_PATH)/share/doc/llvm - cp -ar $(1)/build/docs/doxygen/html/llvm.docset $$$$DESTDIR$(INSTALL_PATH)/share/doc/llvm + mkdir -p "${DESTDIR}${ORCHESTRA_ROOT}/share/doc/llvm" + cp -ar "$BUILD_DIR/build/docs/doxygen/html/llvm.docset" "${DESTDIR}${ORCHESTRA_ROOT}/share/doc/llvm" - mkdir -p $$$$DESTDIR$(INSTALL_PATH)/share/doc/clang - cp -ar $(1)/build/tools/clang/docs/doxygen/html/clang.docset $$$$DESTDIR$(INSTALL_PATH)/share/doc/clang + mkdir -p "${DESTDIR}${ORCHESTRA_ROOT}/share/doc/clang" + cp -ar "$BUILD_DIR/build/tools/clang/docs/doxygen/html/clang.docset" "${DESTDIR}${ORCHESTRA_ROOT}/share/doc/clang" #@ end --- diff --git a/helpers/docsetutil b/helpers/docsetutil new file mode 100755 index 0000000000000000000000000000000000000000..6ce0ad4ac849efaa9fc2cc34660b8c41ace82316 --- /dev/null +++ b/helpers/docsetutil @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 + +import sys +import os +import subprocess +from xml.dom.minidom import parse, Element +import sqlite3 + +def main(): + assert len(sys.argv) == 3 + assert sys.argv[1] == "index" + base_path = sys.argv[2] + resources_path = os.path.join(base_path, "Contents", "Resources") + print("Loading Tokens.xml") + xml_root = parse(os.path.join(resources_path, "Tokens.xml")) + + print("Extracting data") + data = set() + index = -1 + for token in filter(lambda x: type(x) is Element, + xml_root.childNodes[0].childNodes): + name = token.getElementsByTagName("Name")[0].childNodes[0].nodeValue + item_type = "" + element_type = token.getElementsByTagName("Type") + if element_type: + item_type = element_type[0].childNodes[0].nodeValue + path = token.getElementsByTagName("Path")[0].childNodes[0].nodeValue + anchor = token.getElementsByTagName("Anchor") + if len(anchor) != 0: + anchor = anchor[0].childNodes[0].nodeValue + path += "#" + anchor + + index += 1 + data.add((index, name, item_type, path)) + + if name.startswith("llvm::"): + index += 1 + data.add((index, name.replace("llvm::", ""), item_type, path)) + + print("Creating docSet.dsidx") + index_path = os.path.join(resources_path, "docSet.dsidx") + if os.path.exists(index_path): + os.remove(index_path) + connection = sqlite3.connect(index_path) + c = connection.cursor() + c.execute("""CREATE TABLE searchIndex(id INTEGER PRIMARY KEY, + name TEXT, + type TEXT, + path TEXT)""") + + print("Inserting {} elements".format(len(data))) + c.executemany("""INSERT INTO searchIndex(id, name, type, path) + VALUES(?, ?, ?, ?)""", data); + + print("Checking we inserted everything") + c.execute("SELECT COUNT(*) FROM searchIndex") + assert c.fetchall()[0][0] == len(data) + + print("Committing and closing database") + connection.commit() + c.close() + print("All done") + +if __name__ == "__main__": + main() diff --git a/helpers/download_file.sh b/helpers/download_file.sh new file mode 100755 index 0000000000000000000000000000000000000000..c98d79d358c3cb30e0500e49695d986433a8f916 --- /dev/null +++ b/helpers/download_file.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# $(1): destination +# $(2): path +# $(3): file name + +echo "Downloading $3 from $2" +mkdir -p "$SOURCE_ARCHIVES" +trap "rm -f -- '$SOURCE_ARCHIVES/$3'" EXIT + +if [ -e "$SOURCE_ARCHIVES/$3" ]; then + echo "$3 already cached" +else + curl -L "$2/$3" > "$SOURCE_ARCHIVES/$3" +fi + +trap - EXIT; + +echo "Copying $3 into $1" +cp "$SOURCE_ARCHIVES/$3" "$1/$3"