diff --git a/BoostLibraryList/.env b/BoostLibraryList/.env new file mode 100644 index 0000000..52765ec --- /dev/null +++ b/BoostLibraryList/.env @@ -0,0 +1 @@ +GITHUB_TOKEN= \ No newline at end of file diff --git a/BoostLibraryList/boost-1.90.0_all_extensions_summary.txt b/BoostLibraryList/boost-1.90.0_all_extensions_summary.txt new file mode 100644 index 0000000..39f1322 --- /dev/null +++ b/BoostLibraryList/boost-1.90.0_all_extensions_summary.txt @@ -0,0 +1,71 @@ +All extensions (from boost-1.90.0_libraries_list.txt) +Extension -> # libraries that have at least one file with that extension: + + .v2: 92 + .qbk: 88 + .html: 81 + .png: 55 + .css: 31 + .adoc: 29 + .xml: 27 + .txt: 23 + .cpp: 18 + .sh: 18 + .svg: 18 + .gif: 17 + .idx: 16 + .rst: 12 + .hpp: 11 + .pdf: 11 + .md: 11 + .json: 11 + .jam: 9 + .manifest: 9 + .jpg: 9 + .py: 8 + .yml: 8 + .xsl: 7 + .js: 6 + .htm: 6 + .dox: 5 + .dia: 4 + .bat: 3 + .mml: 2 + .tex: 2 + .c: 2 + .dot: 2 + .graffle: 2 + .pl: 2 + .sty: 2 + .ttf: 2 + .ico: 2 + .jpeg: 1 + .mak: 1 + .reno: 1 + .pptx: 1 + .xlsx: 1 + .output: 1 + .csh: 1 + .fig: 1 + .w: 1 + .toc: 1 + .hdf: 1 + .tcl: 1 + .ent: 1 + .odp: 1 + .layout: 1 + .schematic: 1 + .h: 1 + .mac: 1 + .log: 1 + .in: 1 + .vpp: 1 + .toml: 1 + .dat: 1 + .jinja2: 1 + .rb: 1 + .mjs: 1 + .odg: 1 + +Total unique extensions: 65 +Total (library, extension) pairs: 688 diff --git a/BoostLibraryList/boost-1.90.0_doc_extensions_summary.txt b/BoostLibraryList/boost-1.90.0_doc_extensions_summary.txt new file mode 100644 index 0000000..bbb80fd --- /dev/null +++ b/BoostLibraryList/boost-1.90.0_doc_extensions_summary.txt @@ -0,0 +1,19 @@ +Documentation extensions only (from boost-1.90.0_libraries_list.txt) +Extension -> # libraries that have at least one file with that extension: + + .qbk: 88 + .html: 81 + .adoc: 29 + .xml: 27 + .txt: 23 + .rst: 12 + .md: 11 + .xsl: 7 + .htm: 6 + .dox: 5 + .tex: 2 + .reno: 1 + .ent: 1 + +Total unique extensions: 13 +Total (library, extension) pairs: 293 diff --git a/BoostLibraryList/boost-1.90.0_libraries_list.txt b/BoostLibraryList/boost-1.90.0_libraries_list.txt index bfb6562..fff3170 100644 --- a/BoostLibraryList/boost-1.90.0_libraries_list.txt +++ b/BoostLibraryList/boost-1.90.0_libraries_list.txt @@ -1,173 +1,173 @@ -"system", "https://github.com/boostorg/system.git", "boost-1.90.0", "" -"multi_array", "https://github.com/boostorg/multi_array.git", "boost-1.90.0", "" -"math", "https://github.com/boostorg/math.git", "boost-1.90.0", "" -"smart_ptr", "https://github.com/boostorg/smart_ptr.git", "boost-1.90.0", "" -"parameter", "https://github.com/boostorg/parameter.git", "boost-1.90.0", "" -"algorithm", "https://github.com/boostorg/algorithm.git", "boost-1.90.0", "" -"Min-Max", "https://github.com/boostorg/algorithm.git", "boost-1.90.0", "minmax" -"String Algo", "https://github.com/boostorg/algorithm.git", "boost-1.90.0", "string" -"any", "https://github.com/boostorg/any.git", "boost-1.90.0", "" -"concept_check", "https://github.com/boostorg/concept_check.git", "boost-1.90.0", "" -"python", "https://github.com/boostorg/python.git", "boost-1.90.0", "" -"tti", "https://github.com/boostorg/tti.git", "boost-1.90.0", "" -"functional", "https://github.com/boostorg/functional.git", "boost-1.90.0", "" -"Functional/Factory", "https://github.com/boostorg/functional.git", "boost-1.90.0", "factory" -"Functional/Forward", "https://github.com/boostorg/functional.git", "boost-1.90.0", "forward" -"Functional/Overloaded Function", "https://github.com/boostorg/functional.git", "boost-1.90.0", "overloaded_function" -"config", "https://github.com/boostorg/config.git", "boost-1.90.0", "" -"log", "https://github.com/boostorg/log.git", "boost-1.90.0", "" -"interprocess", "https://github.com/boostorg/interprocess.git", "boost-1.90.0", "" -"exception", "https://github.com/boostorg/exception.git", "boost-1.90.0", "" -"foreach", "https://github.com/boostorg/foreach.git", "boost-1.90.0", "" -"spirit", "https://github.com/boostorg/spirit.git", "boost-1.90.0", "" -"io", "https://github.com/boostorg/io.git", "boost-1.90.0", "" -"units", "https://github.com/boostorg/units.git", "boost-1.90.0", "" -"preprocessor", "https://github.com/boostorg/preprocessor.git", "boost-1.90.0", "" -"format", "https://github.com/boostorg/format.git", "boost-1.90.0", "" -"xpressive", "https://github.com/boostorg/xpressive.git", "boost-1.90.0", "" -"integer", "https://github.com/boostorg/integer.git", "boost-1.90.0", "" -"thread", "https://github.com/boostorg/thread.git", "boost-1.90.0", "" -"tokenizer", "https://github.com/boostorg/tokenizer.git", "boost-1.90.0", "" -"timer", "https://github.com/boostorg/timer.git", "boost-1.90.0", "" -"regex", "https://github.com/boostorg/regex.git", "boost-1.90.0", "" -"crc", "https://github.com/boostorg/crc.git", "boost-1.90.0", "" -"random", "https://github.com/boostorg/random.git", "boost-1.90.0", "" -"serialization", "https://github.com/boostorg/serialization.git", "boost-1.90.0", "" -"test", "https://github.com/boostorg/test.git", "boost-1.90.0", "" -"date_time", "https://github.com/boostorg/date_time.git", "boost-1.90.0", "" -"Tribool", "https://github.com/boostorg/logic.git", "boost-1.90.0", "tribool" -"graph", "https://github.com/boostorg/graph.git", "boost-1.90.0", "" -"Numeric Conversion", "https://github.com/boostorg/numeric_conversion.git", "boost-1.90.0", "numeric/conversion" -"lambda", "https://github.com/boostorg/lambda.git", "boost-1.90.0", "" -"mpl", "https://github.com/boostorg/mpl.git", "boost-1.90.0", "" -"typeof", "https://github.com/boostorg/typeof.git", "boost-1.90.0", "" -"tuple", "https://github.com/boostorg/tuple.git", "boost-1.90.0", "" -"utility", "https://github.com/boostorg/utility.git", "boost-1.90.0", "" -"Call Traits", "https://github.com/boostorg/utility.git", "boost-1.90.0", "call_traits" -"Compressed Pair", "https://github.com/boostorg/utility.git", "boost-1.90.0", "compressed_pair" -"Identity Type", "https://github.com/boostorg/utility.git", "boost-1.90.0", "identity_type" -"In Place Factory, Typed In Place Factory", "https://github.com/boostorg/utility.git", "boost-1.90.0", "in_place_factories" -"Operators", "https://github.com/boostorg/utility.git", "boost-1.90.0", "operators" -"Result Of", "https://github.com/boostorg/utility.git", "boost-1.90.0", "result_of" -"String View", "https://github.com/boostorg/utility.git", "boost-1.90.0", "string_view" -"Value Initialized", "https://github.com/boostorg/utility.git", "boost-1.90.0", "value_initialized" -"dynamic_bitset", "https://github.com/boostorg/dynamic_bitset.git", "boost-1.90.0", "" -"assign", "https://github.com/boostorg/assign.git", "boost-1.90.0", "" -"filesystem", "https://github.com/boostorg/filesystem.git", "boost-1.90.0", "" -"function", "https://github.com/boostorg/function.git", "boost-1.90.0", "" -"conversion", "https://github.com/boostorg/conversion.git", "boost-1.90.0", "" -"optional", "https://github.com/boostorg/optional.git", "boost-1.90.0", "" -"property_tree", "https://github.com/boostorg/property_tree.git", "boost-1.90.0", "" -"bimap", "https://github.com/boostorg/bimap.git", "boost-1.90.0", "" -"variant", "https://github.com/boostorg/variant.git", "boost-1.90.0", "" -"array", "https://github.com/boostorg/array.git", "boost-1.90.0", "" -"iostreams", "https://github.com/boostorg/iostreams.git", "boost-1.90.0", "" -"multi_index", "https://github.com/boostorg/multi_index.git", "boost-1.90.0", "" -"ptr_container", "https://github.com/boostorg/ptr_container.git", "boost-1.90.0", "" -"statechart", "https://github.com/boostorg/statechart.git", "boost-1.90.0", "" -"static_assert", "https://github.com/boostorg/static_assert.git", "boost-1.90.0", "" -"range", "https://github.com/boostorg/range.git", "boost-1.90.0", "" -"rational", "https://github.com/boostorg/rational.git", "boost-1.90.0", "" -"iterator", "https://github.com/boostorg/iterator.git", "boost-1.90.0", "" -"graph_parallel", "https://github.com/boostorg/graph_parallel.git", "boost-1.90.0", "" -"property_map", "https://github.com/boostorg/property_map.git", "boost-1.90.0", "" -"program_options", "https://github.com/boostorg/program_options.git", "boost-1.90.0", "" -"detail", "https://github.com/boostorg/detail.git", "boost-1.90.0", "" -"Interval", "https://github.com/boostorg/interval.git", "boost-1.90.0", "numeric/interval" -"uBLAS", "https://github.com/boostorg/ublas.git", "boost-1.90.0", "numeric/ublas" -"wave", "https://github.com/boostorg/wave.git", "boost-1.90.0", "" -"type_traits", "https://github.com/boostorg/type_traits.git", "boost-1.90.0", "" -"bind", "https://github.com/boostorg/bind.git", "boost-1.90.0", "" -"Member Function", "https://github.com/boostorg/bind.git", "boost-1.90.0", "mem_fn" -"pool", "https://github.com/boostorg/pool.git", "boost-1.90.0", "" -"proto", "https://github.com/boostorg/proto.git", "boost-1.90.0", "" -"fusion", "https://github.com/boostorg/fusion.git", "boost-1.90.0", "" -"function_types", "https://github.com/boostorg/function_types.git", "boost-1.90.0", "" -"gil", "https://github.com/boostorg/gil.git", "boost-1.90.0", "" -"intrusive", "https://github.com/boostorg/intrusive.git", "boost-1.90.0", "" -"asio", "https://github.com/boostorg/asio.git", "boost-1.90.0", "" -"uuid", "https://github.com/boostorg/uuid.git", "boost-1.90.0", "" -"circular_buffer", "https://github.com/boostorg/circular_buffer.git", "boost-1.90.0", "" -"mpi", "https://github.com/boostorg/mpi.git", "boost-1.90.0", "" -"unordered", "https://github.com/boostorg/unordered.git", "boost-1.90.0", "" -"signals2", "https://github.com/boostorg/signals2.git", "boost-1.90.0", "" -"accumulators", "https://github.com/boostorg/accumulators.git", "boost-1.90.0", "" -"atomic", "https://github.com/boostorg/atomic.git", "boost-1.90.0", "" -"scope_exit", "https://github.com/boostorg/scope_exit.git", "boost-1.90.0", "" -"flyweight", "https://github.com/boostorg/flyweight.git", "boost-1.90.0", "" -"icl", "https://github.com/boostorg/icl.git", "boost-1.90.0", "" -"predef", "https://github.com/boostorg/predef.git", "boost-1.90.0", "" -"chrono", "https://github.com/boostorg/chrono.git", "boost-1.90.0", "" -"polygon", "https://github.com/boostorg/polygon.git", "boost-1.90.0", "" -"msm", "https://github.com/boostorg/msm.git", "boost-1.90.0", "" -"heap", "https://github.com/boostorg/heap.git", "boost-1.90.0", "" -"coroutine", "https://github.com/boostorg/coroutine.git", "boost-1.90.0", "" -"coroutine2", "https://github.com/boostorg/coroutine2.git", "boost-1.90.0", "" -"ratio", "https://github.com/boostorg/ratio.git", "boost-1.90.0", "" -"Odeint", "https://github.com/boostorg/odeint.git", "boost-1.90.0", "numeric/odeint" -"geometry", "https://github.com/boostorg/geometry.git", "boost-1.90.0", "" -"phoenix", "https://github.com/boostorg/phoenix.git", "boost-1.90.0", "" -"move", "https://github.com/boostorg/move.git", "boost-1.90.0", "" -"locale", "https://github.com/boostorg/locale.git", "boost-1.90.0", "" -"container", "https://github.com/boostorg/container.git", "boost-1.90.0", "" -"local_function", "https://github.com/boostorg/local_function.git", "boost-1.90.0", "" -"context", "https://github.com/boostorg/context.git", "boost-1.90.0", "" -"type_erasure", "https://github.com/boostorg/type_erasure.git", "boost-1.90.0", "" -"multiprecision", "https://github.com/boostorg/multiprecision.git", "boost-1.90.0", "" -"lockfree", "https://github.com/boostorg/lockfree.git", "boost-1.90.0", "" -"assert", "https://github.com/boostorg/assert.git", "boost-1.90.0", "" -"align", "https://github.com/boostorg/align.git", "boost-1.90.0", "" -"type_index", "https://github.com/boostorg/type_index.git", "boost-1.90.0", "" -"core", "https://github.com/boostorg/core.git", "boost-1.90.0", "" -"Enable If", "https://github.com/boostorg/core.git", "boost-1.90.0", "utility/enable_if" -"Swap", "https://github.com/boostorg/core.git", "boost-1.90.0", "utility/swap" -"Ref", "https://github.com/boostorg/core.git", "boost-1.90.0", "bind/ref" -"throw_exception", "https://github.com/boostorg/throw_exception.git", "boost-1.90.0", "" -"winapi", "https://github.com/boostorg/winapi.git", "boost-1.90.0", "" -"lexical_cast", "https://github.com/boostorg/lexical_cast.git", "boost-1.90.0", "" -"sort", "https://github.com/boostorg/sort.git", "boost-1.90.0", "" -"convert", "https://github.com/boostorg/convert.git", "boost-1.90.0", "" -"endian", "https://github.com/boostorg/endian.git", "boost-1.90.0", "" -"vmd", "https://github.com/boostorg/vmd.git", "boost-1.90.0", "" -"dll", "https://github.com/boostorg/dll.git", "boost-1.90.0", "" -"compute", "https://github.com/boostorg/compute.git", "boost-1.90.0", "" -"hana", "https://github.com/boostorg/hana.git", "boost-1.90.0", "" -"metaparse", "https://github.com/boostorg/metaparse.git", "boost-1.90.0", "" -"qvm", "https://github.com/boostorg/qvm.git", "boost-1.90.0", "" -"fiber", "https://github.com/boostorg/fiber.git", "boost-1.90.0", "" -"process", "https://github.com/boostorg/process.git", "boost-1.90.0", "" -"stacktrace", "https://github.com/boostorg/stacktrace.git", "boost-1.90.0", "" -"poly_collection", "https://github.com/boostorg/poly_collection.git", "boost-1.90.0", "" -"beast", "https://github.com/boostorg/beast.git", "boost-1.90.0", "" -"mp11", "https://github.com/boostorg/mp11.git", "boost-1.90.0", "" -"callable_traits", "https://github.com/boostorg/callable_traits.git", "boost-1.90.0", "" -"contract", "https://github.com/boostorg/contract.git", "boost-1.90.0", "" -"container_hash", "https://github.com/boostorg/container_hash.git", "boost-1.90.0", "" -"hof", "https://github.com/boostorg/hof.git", "boost-1.90.0", "" -"yap", "https://github.com/boostorg/yap.git", "boost-1.90.0", "" -"safe_numerics", "https://github.com/boostorg/safe_numerics.git", "boost-1.90.0", "" -"parameter_python", "https://github.com/boostorg/parameter_python.git", "boost-1.90.0", "" -"outcome", "https://github.com/boostorg/outcome.git", "boost-1.90.0", "" -"histogram", "https://github.com/boostorg/histogram.git", "boost-1.90.0", "" -"variant2", "https://github.com/boostorg/variant2.git", "boost-1.90.0", "" -"nowide", "https://github.com/boostorg/nowide.git", "boost-1.90.0", "" -"static_string", "https://github.com/boostorg/static_string.git", "boost-1.90.0", "" -"stl_interfaces", "https://github.com/boostorg/stl_interfaces.git", "boost-1.90.0", "" -"leaf", "https://github.com/boostorg/leaf.git", "boost-1.90.0", "" -"json", "https://github.com/boostorg/json.git", "boost-1.90.0", "" -"pfr", "https://github.com/boostorg/pfr.git", "boost-1.90.0", "" -"describe", "https://github.com/boostorg/describe.git", "boost-1.90.0", "" -"lambda2", "https://github.com/boostorg/lambda2.git", "boost-1.90.0", "" -"property_map_parallel", "https://github.com/boostorg/property_map_parallel.git", "boost-1.90.0", "" -"url", "https://github.com/boostorg/url.git", "boost-1.90.0", "" -"mysql", "https://github.com/boostorg/mysql.git", "boost-1.90.0", "" -"compat", "https://github.com/boostorg/compat.git", "boost-1.90.0", "" -"redis", "https://github.com/boostorg/redis.git", "boost-1.90.0", "" -"cobalt", "https://github.com/boostorg/cobalt.git", "boost-1.90.0", "" -"charconv", "https://github.com/boostorg/charconv.git", "boost-1.90.0", "" -"scope", "https://github.com/boostorg/scope.git", "boost-1.90.0", "" -"parser", "https://github.com/boostorg/parser.git", "boost-1.90.0", "" -"mqtt5", "https://github.com/boostorg/mqtt5.git", "boost-1.90.0", "" -"hash2", "https://github.com/boostorg/hash2.git", "boost-1.90.0", "" -"bloom", "https://github.com/boostorg/bloom.git", "boost-1.90.0", "" -"openmethod", "https://github.com/boostorg/openmethod.git", "boost-1.90.0", "" +"system", "https://github.com/boostorg/system.git", "boost-1.90.0", "root", ".adoc|.html" +"multi_array", "https://github.com/boostorg/multi_array.git", "boost-1.90.0", "root", ".gif|.html|.jam|.v2|.xml" +"math", "https://github.com/boostorg/math.git", "boost-1.90.0", "root", ".cpp|.css|.hpp|.html|.idx|.jpeg|.js|.mak|.manifest|.mml|.pdf|.png|.qbk|.sh|.svg|.tex|.txt|.v2" +"smart_ptr", "https://github.com/boostorg/smart_ptr.git", "boost-1.90.0", "root", ".adoc|.html" +"parameter", "https://github.com/boostorg/parameter.git", "boost-1.90.0", "root", ".css|.gif|.html|.rst|.v2" +"algorithm", "https://github.com/boostorg/algorithm.git", "boost-1.90.0", "root", ".qbk|.v2" +"Min-Max", "https://github.com/boostorg/algorithm.git", "boost-1.90.0", "root/minmax", ".html" +"String Algo", "https://github.com/boostorg/algorithm.git", "boost-1.90.0", "root/string", ".html|.v2|.xml" +"any", "https://github.com/boostorg/any.git", "boost-1.90.0", "root", ".qbk|.v2" +"concept_check", "https://github.com/boostorg/concept_check.git", "boost-1.90.0", "root", ".v2|.xml" +"python", "https://github.com/boostorg/python.git", "boost-1.90.0", "root", ".bat|.css|.html|.png|.py|.qbk|.rst|.svg|.txt" +"tti", "https://github.com/boostorg/tti.git", "boost-1.90.0", "root", ".idx|.qbk|.txt|.v2" +"functional", "https://github.com/boostorg/functional.git", "boost-1.90.0", "root", ".jam" +"Functional/Factory", "https://github.com/boostorg/functional.git", "boost-1.90.0", "root/factory", ".html|.qbk" +"Functional/Forward", "https://github.com/boostorg/functional.git", "boost-1.90.0", "root/forward", ".html|.qbk" +"Functional/Overloaded Function", "https://github.com/boostorg/functional.git", "boost-1.90.0", "root/overloaded_function", ".html|.qbk|.v2" +"config", "https://github.com/boostorg/config.git", "boost-1.90.0", "root", ".html|.manifest|.qbk|.v2" +"log", "https://github.com/boostorg/log.git", "boost-1.90.0", "root", ".dia|.png|.qbk|.svg|.v2|.xsl" +"interprocess", "https://github.com/boostorg/interprocess.git", "boost-1.90.0", "root", ".idx|.qbk|.v2" +"exception", "https://github.com/boostorg/exception.git", "boost-1.90.0", "root", ".css|.html|.png|.reno|.txt" +"foreach", "https://github.com/boostorg/foreach.git", "boost-1.90.0", "root", ".qbk|.v2" +"spirit", "https://github.com/boostorg/spirit.git", "boost-1.90.0", "root", ".html|.idx|.pdf|.png|.pptx|.qbk|.tex|.txt|.xlsx" +"io", "https://github.com/boostorg/io.git", "boost-1.90.0", "root", ".adoc|.html" +"units", "https://github.com/boostorg/units.git", "boost-1.90.0", "root", ".qbk|.v2" +"preprocessor", "https://github.com/boostorg/preprocessor.git", "boost-1.90.0", "root", ".c|.cpp|.css|.html" +"format", "https://github.com/boostorg/format.git", "boost-1.90.0", "root", ".html" +"xpressive", "https://github.com/boostorg/xpressive.git", "boost-1.90.0", "root", ".qbk|.v2" +"integer", "https://github.com/boostorg/integer.git", "boost-1.90.0", "root", ".qbk|.v2" +"thread", "https://github.com/boostorg/thread.git", "boost-1.90.0", "root", ".html|.qbk|.v2" +"tokenizer", "https://github.com/boostorg/tokenizer.git", "boost-1.90.0", "root", ".htm|.html" +"timer", "https://github.com/boostorg/timer.git", "boost-1.90.0", "root", ".html" +"regex", "https://github.com/boostorg/regex.git", "boost-1.90.0", "root", ".html|.qbk|.v2" +"crc", "https://github.com/boostorg/crc.git", "boost-1.90.0", "root", ".cpp|.qbk|.v2" +"random", "https://github.com/boostorg/random.git", "boost-1.90.0", "root", ".qbk|.v2" +"serialization", "https://github.com/boostorg/serialization.git", "boost-1.90.0", "root", ".css|.gif|.html|.txt" +"test", "https://github.com/boostorg/test.git", "boost-1.90.0", "root", ".cpp|.css|.hpp|.jpg|.md|.output|.png|.qbk|.svg|.txt|.v2" +"date_time", "https://github.com/boostorg/date_time.git", "boost-1.90.0", "root", ".html|.jam|.png" +"Tribool", "https://github.com/boostorg/logic.git", "boost-1.90.0", "root/tribool", "" +"graph", "https://github.com/boostorg/graph.git", "boost-1.90.0", "root", ".cpp|.csh|.dot|.fig|.gif|.graffle|.htm|.html|.jpg|.pdf|.pl|.png|.rst|.sh|.sty|.svg|.w" +"Numeric Conversion", "https://github.com/boostorg/numeric_conversion.git", "boost-1.90.0", "root/numeric/conversion", "" +"lambda", "https://github.com/boostorg/lambda.git", "boost-1.90.0", "root", ".html|.v2|.xml|.xsl" +"mpl", "https://github.com/boostorg/mpl.git", "boost-1.90.0", "root", ".css|.html|.pdf|.png|.py|.rst|.toc|.txt" +"typeof", "https://github.com/boostorg/typeof.git", "boost-1.90.0", "root", ".qbk|.v2" +"tuple", "https://github.com/boostorg/tuple.git", "boost-1.90.0", "root", ".qbk|.v2" +"utility", "https://github.com/boostorg/utility.git", "boost-1.90.0", "root", ".png|.qbk|.svg|.v2|.xml" +"Call Traits", "https://github.com/boostorg/utility.git", "boost-1.90.0", "root/call_traits", "" +"Compressed Pair", "https://github.com/boostorg/utility.git", "boost-1.90.0", "root/compressed_pair", "" +"Identity Type", "https://github.com/boostorg/utility.git", "boost-1.90.0", "root/identity_type", ".html|.qbk|.v2" +"In Place Factory, Typed In Place Factory", "https://github.com/boostorg/utility.git", "boost-1.90.0", "root/in_place_factories", "" +"Operators", "https://github.com/boostorg/utility.git", "boost-1.90.0", "root/operators", "" +"Result Of", "https://github.com/boostorg/utility.git", "boost-1.90.0", "root/result_of", "" +"String View", "https://github.com/boostorg/utility.git", "boost-1.90.0", "root/string_view", "" +"Value Initialized", "https://github.com/boostorg/utility.git", "boost-1.90.0", "root/value_initialized", "" +"dynamic_bitset", "https://github.com/boostorg/dynamic_bitset.git", "boost-1.90.0", "root", ".adoc|.json|.sh|.v2|.yml" +"assign", "https://github.com/boostorg/assign.git", "boost-1.90.0", "root", ".css|.html" +"filesystem", "https://github.com/boostorg/filesystem.git", "boost-1.90.0", "root", ".cpp|.css|.htm|.html|.txt|.v2" +"function", "https://github.com/boostorg/function.git", "boost-1.90.0", "root", ".v2|.xml" +"conversion", "https://github.com/boostorg/conversion.git", "boost-1.90.0", "root", ".qbk|.v2" +"optional", "https://github.com/boostorg/optional.git", "boost-1.90.0", "root", ".png|.qbk|.v2" +"property_tree", "https://github.com/boostorg/property_tree.git", "boost-1.90.0", "root", ".png|.qbk|.v2" +"bimap", "https://github.com/boostorg/bimap.git", "boost-1.90.0", "root", ".css|.hdf|.html|.jam|.manifest|.png|.qbk|.v2" +"variant", "https://github.com/boostorg/variant.git", "boost-1.90.0", "root", ".v2|.xml" +"array", "https://github.com/boostorg/array.git", "boost-1.90.0", "root", ".adoc|.v2" +"iostreams", "https://github.com/boostorg/iostreams.git", "boost-1.90.0", "root", ".css|.gif|.html|.js|.png" +"multi_index", "https://github.com/boostorg/multi_index.git", "boost-1.90.0", "root", ".css|.gif|.html|.jpg|.png" +"ptr_container", "https://github.com/boostorg/ptr_container.git", "boost-1.90.0", "root", ".css|.html|.png|.rst|.sh|.txt|.xml" +"statechart", "https://github.com/boostorg/statechart.git", "boost-1.90.0", "root", ".gif|.html|.pdf" +"static_assert", "https://github.com/boostorg/static_assert.git", "boost-1.90.0", "root", ".qbk|.v2" +"range", "https://github.com/boostorg/range.git", "boost-1.90.0", "root", ".cpp|.qbk|.rst|.v2" +"rational", "https://github.com/boostorg/rational.git", "boost-1.90.0", "root", "" +"iterator", "https://github.com/boostorg/iterator.git", "boost-1.90.0", "root", ".css|.htm|.html|.pdf|.png|.py|.qbk|.rst|.sh|.sty|.v2" +"graph_parallel", "https://github.com/boostorg/graph_parallel.git", "boost-1.90.0", "root", ".graffle|.html|.png|.rst|.tcl" +"property_map", "https://github.com/boostorg/property_map.git", "boost-1.90.0", "root", ".html|.rst" +"program_options", "https://github.com/boostorg/program_options.git", "boost-1.90.0", "root", ".dox|.ent|.html|.txt|.v2|.xml" +"detail", "https://github.com/boostorg/detail.git", "boost-1.90.0", "root", ".css|.html|.jam|.png|.qbk" +"Interval", "https://github.com/boostorg/interval.git", "boost-1.90.0", "root/numeric/interval", "" +"uBLAS", "https://github.com/boostorg/ublas.git", "boost-1.90.0", "root/numeric/ublas", "" +"wave", "https://github.com/boostorg/wave.git", "boost-1.90.0", "root", ".css|.gif|.html" +"type_traits", "https://github.com/boostorg/type_traits.git", "boost-1.90.0", "root", ".html|.idx|.qbk|.v2" +"bind", "https://github.com/boostorg/bind.git", "boost-1.90.0", "root", ".html|.qbk|.v2" +"Member Function", "https://github.com/boostorg/bind.git", "boost-1.90.0", "root/mem_fn", "" +"pool", "https://github.com/boostorg/pool.git", "boost-1.90.0", "root", ".html|.idx|.pdf|.png|.qbk|.svg|.v2" +"proto", "https://github.com/boostorg/proto.git", "boost-1.90.0", "root", ".qbk|.sh|.v2|.xml" +"fusion", "https://github.com/boostorg/fusion.git", "boost-1.90.0", "root", ".html|.png|.qbk" +"function_types", "https://github.com/boostorg/function_types.git", "boost-1.90.0", "root", ".html|.qbk" +"gil", "https://github.com/boostorg/gil.git", "boost-1.90.0", "root", ".css|.dox|.gif|.html|.jpg|.md|.png|.py|.rst|.svg|.txt" +"intrusive", "https://github.com/boostorg/intrusive.git", "boost-1.90.0", "root", ".idx|.qbk|.v2" +"asio", "https://github.com/boostorg/asio.git", "boost-1.90.0", "root", ".dot|.dox|.pl|.png|.qbk|.txt|.v2|.xml|.xsl" +"uuid", "https://github.com/boostorg/uuid.git", "boost-1.90.0", "root", ".adoc|.v2" +"circular_buffer", "https://github.com/boostorg/circular_buffer.git", "boost-1.90.0", "root", ".idx|.png|.qbk|.v2" +"mpi", "https://github.com/boostorg/mpi.git", "boost-1.90.0", "root", ".png|.qbk|.v2" +"unordered", "https://github.com/boostorg/unordered.git", "boost-1.90.0", "root", ".adoc|.json|.png|.sh|.v2|.yml" +"signals2", "https://github.com/boostorg/signals2.git", "boost-1.90.0", "root", ".cpp|.jam|.v2|.xml" +"accumulators", "https://github.com/boostorg/accumulators.git", "boost-1.90.0", "root", ".qbk|.v2" +"atomic", "https://github.com/boostorg/atomic.git", "boost-1.90.0", "root", ".png|.qbk|.svg|.v2" +"scope_exit", "https://github.com/boostorg/scope_exit.git", "boost-1.90.0", "root", ".html|.qbk|.v2" +"flyweight", "https://github.com/boostorg/flyweight.git", "boost-1.90.0", "root", ".css|.gif|.html|.png" +"icl", "https://github.com/boostorg/icl.git", "boost-1.90.0", "root", ".html|.odp|.pdf|.qbk|.v2" +"predef", "https://github.com/boostorg/predef.git", "boost-1.90.0", "root", ".adoc|.css|.html|.jam" +"chrono", "https://github.com/boostorg/chrono.git", "boost-1.90.0", "root", ".html|.qbk|.v2" +"polygon", "https://github.com/boostorg/polygon.git", "boost-1.90.0", "root", ".PNG|.cpp|.gif|.hpp|.htm|.jpg|.layout|.pdf|.png|.schematic" +"msm", "https://github.com/boostorg/msm.git", "boost-1.90.0", "root", ".adoc|.cpp|.gif|.h|.hpp|.jpg|.json|.md|.yml" +"heap", "https://github.com/boostorg/heap.git", "boost-1.90.0", "root", ".qbk|.v2" +"coroutine", "https://github.com/boostorg/coroutine.git", "boost-1.90.0", "root", ".dia|.png|.qbk|.v2" +"coroutine2", "https://github.com/boostorg/coroutine2.git", "boost-1.90.0", "root", ".dia|.png|.qbk|.v2" +"ratio", "https://github.com/boostorg/ratio.git", "boost-1.90.0", "root", ".qbk|.v2" +"Odeint", "https://github.com/boostorg/odeint.git", "boost-1.90.0", "root/numeric/odeint", "" +"geometry", "https://github.com/boostorg/geometry.git", "boost-1.90.0", "root", ".TTF|.cpp|.dox|.gif|.hpp|.html|.ico|.mac|.png|.py|.qbk|.sh|.svg|.txt|.xml" +"phoenix", "https://github.com/boostorg/phoenix.git", "boost-1.90.0", "root", ".css|.html|.manifest|.png|.qbk" +"move", "https://github.com/boostorg/move.git", "boost-1.90.0", "root", ".qbk|.v2" +"locale", "https://github.com/boostorg/locale.git", "boost-1.90.0", "root", ".css|.html|.png|.sh|.txt|.v2" +"container", "https://github.com/boostorg/container.git", "boost-1.90.0", "root", ".html|.idx|.jpg|.png|.qbk|.v2" +"local_function", "https://github.com/boostorg/local_function.git", "boost-1.90.0", "root", ".html|.qbk|.v2" +"context", "https://github.com/boostorg/context.git", "boost-1.90.0", "root", ".html|.manifest|.qbk|.v2|.xml" +"type_erasure", "https://github.com/boostorg/type_erasure.git", "boost-1.90.0", "root", ".jam|.qbk" +"multiprecision", "https://github.com/boostorg/multiprecision.git", "boost-1.90.0", "root", ".cpp|.css|.html|.idx|.manifest|.mml|.png|.qbk|.sh|.svg|.v2" +"lockfree", "https://github.com/boostorg/lockfree.git", "boost-1.90.0", "root", ".qbk|.v2" +"assert", "https://github.com/boostorg/assert.git", "boost-1.90.0", "root", ".adoc|.html" +"align", "https://github.com/boostorg/align.git", "boost-1.90.0", "root", ".qbk" +"type_index", "https://github.com/boostorg/type_index.git", "boost-1.90.0", "root", ".qbk|.v2" +"core", "https://github.com/boostorg/core.git", "boost-1.90.0", "root", ".qbk|.v2" +"Enable If", "https://github.com/boostorg/core.git", "boost-1.90.0", "root/utility/enable_if", "" +"Swap", "https://github.com/boostorg/core.git", "boost-1.90.0", "root/utility/swap", "" +"Ref", "https://github.com/boostorg/core.git", "boost-1.90.0", "root/bind/ref", "" +"throw_exception", "https://github.com/boostorg/throw_exception.git", "boost-1.90.0", "root", ".adoc|.html" +"winapi", "https://github.com/boostorg/winapi.git", "boost-1.90.0", "root", ".qbk|.v2" +"lexical_cast", "https://github.com/boostorg/lexical_cast.git", "boost-1.90.0", "root", ".qbk|.v2" +"sort", "https://github.com/boostorg/sort.git", "boost-1.90.0", "root", ".css|.gif|.htm|.html|.idx|.js|.log|.pdf|.png|.qbk|.txt|.v2|.xml" +"convert", "https://github.com/boostorg/convert.git", "boost-1.90.0", "root", ".html|.idx|.manifest|.png|.qbk|.sh|.v2" +"endian", "https://github.com/boostorg/endian.git", "boost-1.90.0", "root", ".adoc|.html" +"vmd", "https://github.com/boostorg/vmd.git", "boost-1.90.0", "root", ".idx|.qbk|.v2" +"dll", "https://github.com/boostorg/dll.git", "boost-1.90.0", "root", ".qbk|.v2" +"compute", "https://github.com/boostorg/compute.git", "boost-1.90.0", "root", ".qbk|.v2" +"hana", "https://github.com/boostorg/hana.git", "boost-1.90.0", "root", ".hpp|.html|.in|.js|.png|.txt|.v2|.xml" +"metaparse", "https://github.com/boostorg/metaparse.git", "boost-1.90.0", "root", ".png|.qbk|.sh|.svg|.v2" +"qvm", "https://github.com/boostorg/qvm.git", "boost-1.90.0", "root", ".adoc|.css|.html|.png|.yml" +"fiber", "https://github.com/boostorg/fiber.git", "boost-1.90.0", "root", ".dia|.html|.jpg|.manifest|.png|.qbk|.v2|.vpp|.xml" +"process", "https://github.com/boostorg/process.git", "boost-1.90.0", "root", ".adoc|.jam|.svg|.txt" +"stacktrace", "https://github.com/boostorg/stacktrace.git", "boost-1.90.0", "root", ".qbk|.v2" +"poly_collection", "https://github.com/boostorg/poly_collection.git", "boost-1.90.0", "root", ".css|.png|.qbk|.v2" +"beast", "https://github.com/boostorg/beast.git", "boost-1.90.0", "root", ".png|.qbk|.xml|.xsl" +"mp11", "https://github.com/boostorg/mp11.git", "boost-1.90.0", "root", ".adoc|.html" +"callable_traits", "https://github.com/boostorg/callable_traits.git", "boost-1.90.0", "root", ".cpp|.qbk|.v2|.xml" +"contract", "https://github.com/boostorg/contract.git", "boost-1.90.0", "root", ".qbk|.v2" +"container_hash", "https://github.com/boostorg/container_hash.git", "boost-1.90.0", "root", ".adoc|.v2" +"hof", "https://github.com/boostorg/hof.git", "boost-1.90.0", "root", ".bat|.html|.js|.md|.py|.rst|.txt|.v2" +"yap", "https://github.com/boostorg/yap.git", "boost-1.90.0", "root", ".cpp|.idx|.png|.qbk|.svg|.txt|.v2" +"safe_numerics", "https://github.com/boostorg/safe_numerics.git", "boost-1.90.0", "root", ".bat|.css|.gif|.html|.jpg|.manifest|.pdf|.png|.sh|.xml|.xsl" +"parameter_python", "https://github.com/boostorg/parameter_python.git", "boost-1.90.0", "root", ".css|.gif|.rst|.v2" +"outcome", "https://github.com/boostorg/outcome.git", "boost-1.90.0", "root", ".c|.cpp|.css|.gif|.html|.ico|.md|.png|.toml|.xml" +"histogram", "https://github.com/boostorg/histogram.git", "boost-1.90.0", "root", ".TTF|.dat|.json|.md|.py|.qbk|.svg" +"variant2", "https://github.com/boostorg/variant2.git", "boost-1.90.0", "root", ".adoc|.html" +"nowide", "https://github.com/boostorg/nowide.git", "boost-1.90.0", "root", ".dox|.sh|.v2" +"static_string", "https://github.com/boostorg/static_string.git", "boost-1.90.0", "root", ".hpp|.json|.qbk|.xml" +"stl_interfaces", "https://github.com/boostorg/stl_interfaces.git", "boost-1.90.0", "root", ".idx|.qbk|.txt|.v2" +"leaf", "https://github.com/boostorg/leaf.git", "boost-1.90.0", "root", ".adoc|.css|.html|.md|.png|.yml" +"json", "https://github.com/boostorg/json.git", "boost-1.90.0", "root", ".adoc|.hpp|.html|.jinja2|.json|.md|.png|.rb" +"pfr", "https://github.com/boostorg/pfr.git", "boost-1.90.0", "root", ".qbk|.v2" +"describe", "https://github.com/boostorg/describe.git", "boost-1.90.0", "root", ".adoc|.html" +"lambda2", "https://github.com/boostorg/lambda2.git", "boost-1.90.0", "root", ".adoc|.html" +"property_map_parallel", "https://github.com/boostorg/property_map_parallel.git", "boost-1.90.0", "root", "" +"url", "https://github.com/boostorg/url.git", "boost-1.90.0", "root", ".adoc|.cpp|.hpp|.html|.js|.json|.md|.mjs|.odg|.png|.py|.qbk|.sh|.svg|.xml|.xsl|.yml" +"mysql", "https://github.com/boostorg/mysql.git", "boost-1.90.0", "root", ".hpp|.json|.md|.png|.qbk|.svg|.xml" +"compat", "https://github.com/boostorg/compat.git", "boost-1.90.0", "root", ".adoc|.html" +"redis", "https://github.com/boostorg/redis.git", "boost-1.90.0", "root", ".adoc|.cpp|.json|.md|.sh|.txt|.yml" +"cobalt", "https://github.com/boostorg/cobalt.git", "boost-1.90.0", "root", ".adoc|.png" +"charconv", "https://github.com/boostorg/charconv.git", "boost-1.90.0", "root", ".adoc|.html" +"scope", "https://github.com/boostorg/scope.git", "boost-1.90.0", "root", ".qbk|.xsl" +"parser", "https://github.com/boostorg/parser.git", "boost-1.90.0", "root", ".idx|.qbk|.sh|.v2|.xml" +"mqtt5", "https://github.com/boostorg/mqtt5.git", "boost-1.90.0", "root", ".json|.qbk|.xml" +"hash2", "https://github.com/boostorg/hash2.git", "boost-1.90.0", "root", ".adoc|.html" +"bloom", "https://github.com/boostorg/bloom.git", "boost-1.90.0", "root", ".adoc|.html|.png|.v2" +"openmethod", "https://github.com/boostorg/openmethod.git", "boost-1.90.0", "root", ".adoc|.cpp|.css|.hpp|.html|.json|.png|.sh|.svg|.txt|.v2|.xml|.yml" diff --git a/BoostLibraryList/boost-1.90.0_libraries_list_submodules.txt b/BoostLibraryList/boost-1.90.0_libraries_list_submodules.txt new file mode 100644 index 0000000..e569773 --- /dev/null +++ b/BoostLibraryList/boost-1.90.0_libraries_list_submodules.txt @@ -0,0 +1,157 @@ +"system", "https://github.com/boostorg/system.git", "system", "boost-1.90.0", "root", ".adoc|.html" +"multi_array", "https://github.com/boostorg/multi_array.git", "multi_array", "boost-1.90.0", "root", ".gif|.html|.jam|.v2|.xml" +"math", "https://github.com/boostorg/math.git", "math", "boost-1.90.0", "root", ".cpp|.css|.hpp|.html|.idx|.jpeg|.js|.mak|.manifest|.mml|.pdf|.png|.qbk|.sh|.svg|.tex|.txt|.v2" +"smart_ptr", "https://github.com/boostorg/smart_ptr.git", "smart_ptr", "boost-1.90.0", "root", ".adoc|.html" +"parameter", "https://github.com/boostorg/parameter.git", "parameter", "boost-1.90.0", "root", ".css|.gif|.html|.rst|.v2" +"algorithm", "https://github.com/boostorg/algorithm.git", "algorithm|Min-Max|String Algo", "boost-1.90.0", "root|root/minmax|root/string", ".html|.qbk|.v2|.xml" +"any", "https://github.com/boostorg/any.git", "any", "boost-1.90.0", "root", ".qbk|.v2" +"concept_check", "https://github.com/boostorg/concept_check.git", "concept_check", "boost-1.90.0", "root", ".v2|.xml" +"python", "https://github.com/boostorg/python.git", "python", "boost-1.90.0", "root", ".bat|.css|.html|.png|.py|.qbk|.rst|.svg|.txt" +"tti", "https://github.com/boostorg/tti.git", "tti", "boost-1.90.0", "root", ".idx|.qbk|.txt|.v2" +"functional", "https://github.com/boostorg/functional.git", "functional|Functional/Factory|Functional/Forward|Functional/Overloaded Function", "boost-1.90.0", "root|root/factory|root/forward|root/overloaded_function", ".html|.jam|.qbk|.v2" +"config", "https://github.com/boostorg/config.git", "config", "boost-1.90.0", "root", ".html|.manifest|.qbk|.v2" +"log", "https://github.com/boostorg/log.git", "log", "boost-1.90.0", "root", ".dia|.png|.qbk|.svg|.v2|.xsl" +"interprocess", "https://github.com/boostorg/interprocess.git", "interprocess", "boost-1.90.0", "root", ".idx|.qbk|.v2" +"exception", "https://github.com/boostorg/exception.git", "exception", "boost-1.90.0", "root", ".css|.html|.png|.reno|.txt" +"foreach", "https://github.com/boostorg/foreach.git", "foreach", "boost-1.90.0", "root", ".qbk|.v2" +"spirit", "https://github.com/boostorg/spirit.git", "spirit", "boost-1.90.0", "root", ".html|.idx|.pdf|.png|.pptx|.qbk|.tex|.txt|.xlsx" +"io", "https://github.com/boostorg/io.git", "io", "boost-1.90.0", "root", ".adoc|.html" +"units", "https://github.com/boostorg/units.git", "units", "boost-1.90.0", "root", ".qbk|.v2" +"preprocessor", "https://github.com/boostorg/preprocessor.git", "preprocessor", "boost-1.90.0", "root", ".c|.cpp|.css|.html" +"format", "https://github.com/boostorg/format.git", "format", "boost-1.90.0", "root", ".html" +"xpressive", "https://github.com/boostorg/xpressive.git", "xpressive", "boost-1.90.0", "root", ".qbk|.v2" +"integer", "https://github.com/boostorg/integer.git", "integer", "boost-1.90.0", "root", ".qbk|.v2" +"thread", "https://github.com/boostorg/thread.git", "thread", "boost-1.90.0", "root", ".html|.qbk|.v2" +"tokenizer", "https://github.com/boostorg/tokenizer.git", "tokenizer", "boost-1.90.0", "root", ".htm|.html" +"timer", "https://github.com/boostorg/timer.git", "timer", "boost-1.90.0", "root", ".html" +"regex", "https://github.com/boostorg/regex.git", "regex", "boost-1.90.0", "root", ".html|.qbk|.v2" +"crc", "https://github.com/boostorg/crc.git", "crc", "boost-1.90.0", "root", ".cpp|.qbk|.v2" +"random", "https://github.com/boostorg/random.git", "random", "boost-1.90.0", "root", ".qbk|.v2" +"serialization", "https://github.com/boostorg/serialization.git", "serialization", "boost-1.90.0", "root", ".css|.gif|.html|.txt" +"test", "https://github.com/boostorg/test.git", "test", "boost-1.90.0", "root", ".cpp|.css|.hpp|.jpg|.md|.output|.png|.qbk|.svg|.txt|.v2" +"date_time", "https://github.com/boostorg/date_time.git", "date_time", "boost-1.90.0", "root", ".html|.jam|.png" +"logic", "https://github.com/boostorg/logic.git", "Tribool", "boost-1.90.0", "root/tribool", "" +"graph", "https://github.com/boostorg/graph.git", "graph", "boost-1.90.0", "root", ".cpp|.csh|.dot|.fig|.gif|.graffle|.htm|.html|.jpg|.pdf|.pl|.png|.rst|.sh|.sty|.svg|.w" +"numeric_conversion", "https://github.com/boostorg/numeric_conversion.git", "Numeric Conversion", "boost-1.90.0", "root/numeric/conversion", "" +"lambda", "https://github.com/boostorg/lambda.git", "lambda", "boost-1.90.0", "root", ".html|.v2|.xml|.xsl" +"mpl", "https://github.com/boostorg/mpl.git", "mpl", "boost-1.90.0", "root", ".css|.html|.pdf|.png|.py|.rst|.toc|.txt" +"typeof", "https://github.com/boostorg/typeof.git", "typeof", "boost-1.90.0", "root", ".qbk|.v2" +"tuple", "https://github.com/boostorg/tuple.git", "tuple", "boost-1.90.0", "root", ".qbk|.v2" +"utility", "https://github.com/boostorg/utility.git", "utility|Call Traits|Compressed Pair|Identity Type|In Place Factory, Typed In Place Factory|Operators|Result Of|String View|Value Initialized", "boost-1.90.0", "root|root/call_traits|root/compressed_pair|root/identity_type|root/in_place_factories|root/operators|root/result_of|root/string_view|root/value_initialized", ".html|.png|.qbk|.svg|.v2|.xml" +"dynamic_bitset", "https://github.com/boostorg/dynamic_bitset.git", "dynamic_bitset", "boost-1.90.0", "root", ".adoc|.json|.sh|.v2|.yml" +"assign", "https://github.com/boostorg/assign.git", "assign", "boost-1.90.0", "root", ".css|.html" +"filesystem", "https://github.com/boostorg/filesystem.git", "filesystem", "boost-1.90.0", "root", ".cpp|.css|.htm|.html|.txt|.v2" +"function", "https://github.com/boostorg/function.git", "function", "boost-1.90.0", "root", ".v2|.xml" +"conversion", "https://github.com/boostorg/conversion.git", "conversion", "boost-1.90.0", "root", ".qbk|.v2" +"optional", "https://github.com/boostorg/optional.git", "optional", "boost-1.90.0", "root", ".png|.qbk|.v2" +"property_tree", "https://github.com/boostorg/property_tree.git", "property_tree", "boost-1.90.0", "root", ".png|.qbk|.v2" +"bimap", "https://github.com/boostorg/bimap.git", "bimap", "boost-1.90.0", "root", ".css|.hdf|.html|.jam|.manifest|.png|.qbk|.v2" +"variant", "https://github.com/boostorg/variant.git", "variant", "boost-1.90.0", "root", ".v2|.xml" +"array", "https://github.com/boostorg/array.git", "array", "boost-1.90.0", "root", ".adoc|.v2" +"iostreams", "https://github.com/boostorg/iostreams.git", "iostreams", "boost-1.90.0", "root", ".css|.gif|.html|.js|.png" +"multi_index", "https://github.com/boostorg/multi_index.git", "multi_index", "boost-1.90.0", "root", ".css|.gif|.html|.jpg|.png" +"ptr_container", "https://github.com/boostorg/ptr_container.git", "ptr_container", "boost-1.90.0", "root", ".css|.html|.png|.rst|.sh|.txt|.xml" +"statechart", "https://github.com/boostorg/statechart.git", "statechart", "boost-1.90.0", "root", ".gif|.html|.pdf" +"static_assert", "https://github.com/boostorg/static_assert.git", "static_assert", "boost-1.90.0", "root", ".qbk|.v2" +"range", "https://github.com/boostorg/range.git", "range", "boost-1.90.0", "root", ".cpp|.qbk|.rst|.v2" +"rational", "https://github.com/boostorg/rational.git", "rational", "boost-1.90.0", "root", "" +"iterator", "https://github.com/boostorg/iterator.git", "iterator", "boost-1.90.0", "root", ".css|.htm|.html|.pdf|.png|.py|.qbk|.rst|.sh|.sty|.v2" +"graph_parallel", "https://github.com/boostorg/graph_parallel.git", "graph_parallel", "boost-1.90.0", "root", ".graffle|.html|.png|.rst|.tcl" +"property_map", "https://github.com/boostorg/property_map.git", "property_map", "boost-1.90.0", "root", ".html|.rst" +"program_options", "https://github.com/boostorg/program_options.git", "program_options", "boost-1.90.0", "root", ".dox|.ent|.html|.txt|.v2|.xml" +"detail", "https://github.com/boostorg/detail.git", "detail", "boost-1.90.0", "root", ".css|.html|.jam|.png|.qbk" +"interval", "https://github.com/boostorg/interval.git", "Interval", "boost-1.90.0", "root/numeric/interval", "" +"ublas", "https://github.com/boostorg/ublas.git", "uBLAS", "boost-1.90.0", "root/numeric/ublas", "" +"wave", "https://github.com/boostorg/wave.git", "wave", "boost-1.90.0", "root", ".css|.gif|.html" +"type_traits", "https://github.com/boostorg/type_traits.git", "type_traits", "boost-1.90.0", "root", ".html|.idx|.qbk|.v2" +"bind", "https://github.com/boostorg/bind.git", "bind|Member Function", "boost-1.90.0", "root|root/mem_fn", ".html|.qbk|.v2" +"pool", "https://github.com/boostorg/pool.git", "pool", "boost-1.90.0", "root", ".html|.idx|.pdf|.png|.qbk|.svg|.v2" +"proto", "https://github.com/boostorg/proto.git", "proto", "boost-1.90.0", "root", ".qbk|.sh|.v2|.xml" +"fusion", "https://github.com/boostorg/fusion.git", "fusion", "boost-1.90.0", "root", ".html|.png|.qbk" +"function_types", "https://github.com/boostorg/function_types.git", "function_types", "boost-1.90.0", "root", ".html|.qbk" +"gil", "https://github.com/boostorg/gil.git", "gil", "boost-1.90.0", "root", ".css|.dox|.gif|.html|.jpg|.md|.png|.py|.rst|.svg|.txt" +"intrusive", "https://github.com/boostorg/intrusive.git", "intrusive", "boost-1.90.0", "root", ".idx|.qbk|.v2" +"asio", "https://github.com/boostorg/asio.git", "asio", "boost-1.90.0", "root", ".dot|.dox|.pl|.png|.qbk|.txt|.v2|.xml|.xsl" +"uuid", "https://github.com/boostorg/uuid.git", "uuid", "boost-1.90.0", "root", ".adoc|.v2" +"circular_buffer", "https://github.com/boostorg/circular_buffer.git", "circular_buffer", "boost-1.90.0", "root", ".idx|.png|.qbk|.v2" +"mpi", "https://github.com/boostorg/mpi.git", "mpi", "boost-1.90.0", "root", ".png|.qbk|.v2" +"unordered", "https://github.com/boostorg/unordered.git", "unordered", "boost-1.90.0", "root", ".adoc|.json|.png|.sh|.v2|.yml" +"signals2", "https://github.com/boostorg/signals2.git", "signals2", "boost-1.90.0", "root", ".cpp|.jam|.v2|.xml" +"accumulators", "https://github.com/boostorg/accumulators.git", "accumulators", "boost-1.90.0", "root", ".qbk|.v2" +"atomic", "https://github.com/boostorg/atomic.git", "atomic", "boost-1.90.0", "root", ".png|.qbk|.svg|.v2" +"scope_exit", "https://github.com/boostorg/scope_exit.git", "scope_exit", "boost-1.90.0", "root", ".html|.qbk|.v2" +"flyweight", "https://github.com/boostorg/flyweight.git", "flyweight", "boost-1.90.0", "root", ".css|.gif|.html|.png" +"icl", "https://github.com/boostorg/icl.git", "icl", "boost-1.90.0", "root", ".html|.odp|.pdf|.qbk|.v2" +"predef", "https://github.com/boostorg/predef.git", "predef", "boost-1.90.0", "root", ".adoc|.css|.html|.jam" +"chrono", "https://github.com/boostorg/chrono.git", "chrono", "boost-1.90.0", "root", ".html|.qbk|.v2" +"polygon", "https://github.com/boostorg/polygon.git", "polygon", "boost-1.90.0", "root", ".PNG|.cpp|.gif|.hpp|.htm|.jpg|.layout|.pdf|.png|.schematic" +"msm", "https://github.com/boostorg/msm.git", "msm", "boost-1.90.0", "root", ".adoc|.cpp|.gif|.h|.hpp|.jpg|.json|.md|.yml" +"heap", "https://github.com/boostorg/heap.git", "heap", "boost-1.90.0", "root", ".qbk|.v2" +"coroutine", "https://github.com/boostorg/coroutine.git", "coroutine", "boost-1.90.0", "root", ".dia|.png|.qbk|.v2" +"coroutine2", "https://github.com/boostorg/coroutine2.git", "coroutine2", "boost-1.90.0", "root", ".dia|.png|.qbk|.v2" +"ratio", "https://github.com/boostorg/ratio.git", "ratio", "boost-1.90.0", "root", ".qbk|.v2" +"odeint", "https://github.com/boostorg/odeint.git", "Odeint", "boost-1.90.0", "root/numeric/odeint", "" +"geometry", "https://github.com/boostorg/geometry.git", "geometry", "boost-1.90.0", "root", ".TTF|.cpp|.dox|.gif|.hpp|.html|.ico|.mac|.png|.py|.qbk|.sh|.svg|.txt|.xml" +"phoenix", "https://github.com/boostorg/phoenix.git", "phoenix", "boost-1.90.0", "root", ".css|.html|.manifest|.png|.qbk" +"move", "https://github.com/boostorg/move.git", "move", "boost-1.90.0", "root", ".qbk|.v2" +"locale", "https://github.com/boostorg/locale.git", "locale", "boost-1.90.0", "root", ".css|.html|.png|.sh|.txt|.v2" +"container", "https://github.com/boostorg/container.git", "container", "boost-1.90.0", "root", ".html|.idx|.jpg|.png|.qbk|.v2" +"local_function", "https://github.com/boostorg/local_function.git", "local_function", "boost-1.90.0", "root", ".html|.qbk|.v2" +"context", "https://github.com/boostorg/context.git", "context", "boost-1.90.0", "root", ".html|.manifest|.qbk|.v2|.xml" +"type_erasure", "https://github.com/boostorg/type_erasure.git", "type_erasure", "boost-1.90.0", "root", ".jam|.qbk" +"multiprecision", "https://github.com/boostorg/multiprecision.git", "multiprecision", "boost-1.90.0", "root", ".cpp|.css|.html|.idx|.manifest|.mml|.png|.qbk|.sh|.svg|.v2" +"lockfree", "https://github.com/boostorg/lockfree.git", "lockfree", "boost-1.90.0", "root", ".qbk|.v2" +"assert", "https://github.com/boostorg/assert.git", "assert", "boost-1.90.0", "root", ".adoc|.html" +"align", "https://github.com/boostorg/align.git", "align", "boost-1.90.0", "root", ".qbk" +"type_index", "https://github.com/boostorg/type_index.git", "type_index", "boost-1.90.0", "root", ".qbk|.v2" +"core", "https://github.com/boostorg/core.git", "core|Enable If|Swap|Ref", "boost-1.90.0", "root|root/utility/enable_if|root/utility/swap|root/bind/ref", ".qbk|.v2" +"throw_exception", "https://github.com/boostorg/throw_exception.git", "throw_exception", "boost-1.90.0", "root", ".adoc|.html" +"winapi", "https://github.com/boostorg/winapi.git", "winapi", "boost-1.90.0", "root", ".qbk|.v2" +"lexical_cast", "https://github.com/boostorg/lexical_cast.git", "lexical_cast", "boost-1.90.0", "root", ".qbk|.v2" +"sort", "https://github.com/boostorg/sort.git", "sort", "boost-1.90.0", "root", ".css|.gif|.htm|.html|.idx|.js|.log|.pdf|.png|.qbk|.txt|.v2|.xml" +"convert", "https://github.com/boostorg/convert.git", "convert", "boost-1.90.0", "root", ".html|.idx|.manifest|.png|.qbk|.sh|.v2" +"endian", "https://github.com/boostorg/endian.git", "endian", "boost-1.90.0", "root", ".adoc|.html" +"vmd", "https://github.com/boostorg/vmd.git", "vmd", "boost-1.90.0", "root", ".idx|.qbk|.v2" +"dll", "https://github.com/boostorg/dll.git", "dll", "boost-1.90.0", "root", ".qbk|.v2" +"compute", "https://github.com/boostorg/compute.git", "compute", "boost-1.90.0", "root", ".qbk|.v2" +"hana", "https://github.com/boostorg/hana.git", "hana", "boost-1.90.0", "root", ".hpp|.html|.in|.js|.png|.txt|.v2|.xml" +"metaparse", "https://github.com/boostorg/metaparse.git", "metaparse", "boost-1.90.0", "root", ".png|.qbk|.sh|.svg|.v2" +"qvm", "https://github.com/boostorg/qvm.git", "qvm", "boost-1.90.0", "root", ".adoc|.css|.html|.png|.yml" +"fiber", "https://github.com/boostorg/fiber.git", "fiber", "boost-1.90.0", "root", ".dia|.html|.jpg|.manifest|.png|.qbk|.v2|.vpp|.xml" +"process", "https://github.com/boostorg/process.git", "process", "boost-1.90.0", "root", ".adoc|.jam|.svg|.txt" +"stacktrace", "https://github.com/boostorg/stacktrace.git", "stacktrace", "boost-1.90.0", "root", ".qbk|.v2" +"poly_collection", "https://github.com/boostorg/poly_collection.git", "poly_collection", "boost-1.90.0", "root", ".css|.png|.qbk|.v2" +"beast", "https://github.com/boostorg/beast.git", "beast", "boost-1.90.0", "root", ".png|.qbk|.xml|.xsl" +"mp11", "https://github.com/boostorg/mp11.git", "mp11", "boost-1.90.0", "root", ".adoc|.html" +"callable_traits", "https://github.com/boostorg/callable_traits.git", "callable_traits", "boost-1.90.0", "root", ".cpp|.qbk|.v2|.xml" +"contract", "https://github.com/boostorg/contract.git", "contract", "boost-1.90.0", "root", ".qbk|.v2" +"container_hash", "https://github.com/boostorg/container_hash.git", "container_hash", "boost-1.90.0", "root", ".adoc|.v2" +"hof", "https://github.com/boostorg/hof.git", "hof", "boost-1.90.0", "root", ".bat|.html|.js|.md|.py|.rst|.txt|.v2" +"yap", "https://github.com/boostorg/yap.git", "yap", "boost-1.90.0", "root", ".cpp|.idx|.png|.qbk|.svg|.txt|.v2" +"safe_numerics", "https://github.com/boostorg/safe_numerics.git", "safe_numerics", "boost-1.90.0", "root", ".bat|.css|.gif|.html|.jpg|.manifest|.pdf|.png|.sh|.xml|.xsl" +"parameter_python", "https://github.com/boostorg/parameter_python.git", "parameter_python", "boost-1.90.0", "root", ".css|.gif|.rst|.v2" +"headers", "https://github.com/boostorg/headers.git", "", "boost-1.90.0", "", "" +"outcome", "https://github.com/boostorg/outcome.git", "outcome", "boost-1.90.0", "root", ".c|.cpp|.css|.gif|.html|.ico|.md|.png|.toml|.xml" +"histogram", "https://github.com/boostorg/histogram.git", "histogram", "boost-1.90.0", "root", ".TTF|.dat|.json|.md|.py|.qbk|.svg" +"variant2", "https://github.com/boostorg/variant2.git", "variant2", "boost-1.90.0", "root", ".adoc|.html" +"nowide", "https://github.com/boostorg/nowide.git", "nowide", "boost-1.90.0", "root", ".dox|.sh|.v2" +"static_string", "https://github.com/boostorg/static_string.git", "static_string", "boost-1.90.0", "root", ".hpp|.json|.qbk|.xml" +"stl_interfaces", "https://github.com/boostorg/stl_interfaces.git", "stl_interfaces", "boost-1.90.0", "root", ".idx|.qbk|.txt|.v2" +"leaf", "https://github.com/boostorg/leaf.git", "leaf", "boost-1.90.0", "root", ".adoc|.css|.html|.md|.png|.yml" +"json", "https://github.com/boostorg/json.git", "json", "boost-1.90.0", "root", ".adoc|.hpp|.html|.jinja2|.json|.md|.png|.rb" +"pfr", "https://github.com/boostorg/pfr.git", "pfr", "boost-1.90.0", "root", ".qbk|.v2" +"describe", "https://github.com/boostorg/describe.git", "describe", "boost-1.90.0", "root", ".adoc|.html" +"lambda2", "https://github.com/boostorg/lambda2.git", "lambda2", "boost-1.90.0", "root", ".adoc|.html" +"property_map_parallel", "https://github.com/boostorg/property_map_parallel.git", "property_map_parallel", "boost-1.90.0", "root", "" +"url", "https://github.com/boostorg/url.git", "url", "boost-1.90.0", "root", ".adoc|.cpp|.hpp|.html|.js|.json|.md|.mjs|.odg|.png|.py|.qbk|.sh|.svg|.xml|.xsl|.yml" +"mysql", "https://github.com/boostorg/mysql.git", "mysql", "boost-1.90.0", "root", ".hpp|.json|.md|.png|.qbk|.svg|.xml" +"compat", "https://github.com/boostorg/compat.git", "compat", "boost-1.90.0", "root", ".adoc|.html" +"redis", "https://github.com/boostorg/redis.git", "redis", "boost-1.90.0", "root", ".adoc|.cpp|.json|.md|.sh|.txt|.yml" +"cobalt", "https://github.com/boostorg/cobalt.git", "cobalt", "boost-1.90.0", "root", ".adoc|.png" +"charconv", "https://github.com/boostorg/charconv.git", "charconv", "boost-1.90.0", "root", ".adoc|.html" +"scope", "https://github.com/boostorg/scope.git", "scope", "boost-1.90.0", "root", ".qbk|.xsl" +"parser", "https://github.com/boostorg/parser.git", "parser", "boost-1.90.0", "root", ".idx|.qbk|.sh|.v2|.xml" +"mqtt5", "https://github.com/boostorg/mqtt5.git", "mqtt5", "boost-1.90.0", "root", ".json|.qbk|.xml" +"hash2", "https://github.com/boostorg/hash2.git", "hash2", "boost-1.90.0", "root", ".adoc|.html" +"bloom", "https://github.com/boostorg/bloom.git", "bloom", "boost-1.90.0", "root", ".adoc|.html|.png|.v2" +"openmethod", "https://github.com/boostorg/openmethod.git", "openmethod", "boost-1.90.0", "root", ".adoc|.cpp|.css|.hpp|.html|.json|.png|.sh|.svg|.txt|.v2|.xml|.yml" diff --git a/BoostLibraryList/collect_boost_libraries.py b/BoostLibraryList/collect_boost_libraries.py deleted file mode 100644 index 57e2d7f..0000000 --- a/BoostLibraryList/collect_boost_libraries.py +++ /dev/null @@ -1,215 +0,0 @@ -#!/usr/bin/env python3 -""" -Collect all Boost library names and their GitHub paths from boostorg/boost. - -1. Fetches .gitmodules from https://github.com/boostorg/boost (master). -2. For each submodule in libs/, fetches meta/libraries.json from the repo - at the given release version (e.g. boost-1.90.0) or develop if not given. -3. Extracts library name and GitHub path from each libraries.json entry. -4. Writes the list in the format: name_or_key, repo_url.git, "ref", "subpath" - (no sorting; order follows .gitmodules and libraries.json order) - -Usage: - python collect_boost_libraries.py [--version BOOST_VERSION] [--output FILE] - python collect_boost_libraries.py --version boost-1.90.0 -o list.txt -""" - -import argparse -import json -import os -import re -import sys -from typing import List, Tuple -from urllib.error import HTTPError, URLError -from urllib.request import Request, urlopen - -GITMODULES_URL = "https://raw.githubusercontent.com/boostorg/boost/master/.gitmodules" -# {repo} = submodule name, {ref} = branch/tag (e.g. develop, boost-1.90.0) -LIBS_JSON_TEMPLATE = ( - "https://raw.githubusercontent.com/boostorg/{repo}/{ref}/meta/libraries.json" -) -REPO_URL_TEMPLATE = "https://github.com/boostorg/{repo}.git" -DEFAULT_REF = "develop" -USER_AGENT = "BoostLibraryList/1.0" - - -def quoted(s: str) -> str: - """Return string wrapped in double quotes with internal quotes escaped.""" - return '"' + s.replace('"', '""') + '"' - - -def fetch_url(url: str) -> str: - req = Request(url, headers={"User-Agent": USER_AGENT}) - with urlopen(req, timeout=30) as r: - return r.read().decode("utf-8") - - -def parse_gitmodules(content: str) -> List[Tuple[str, str]]: - """Parse .gitmodules and return list of (submodule_name, path).""" - PATH_PREFIX = "path = " - URL_PREFIX = "url = " - - entries = [] - current_name = None - current_path = None - for line in content.splitlines(): - line = line.strip() - m = re.match(r'\[submodule\s+"([^"]+)"\]', line) - if m: - if current_name is not None and current_path is not None: - entries.append((current_name, current_path)) - current_name = m.group(1) - current_path = None - continue - if line.startswith(PATH_PREFIX): - current_path = line[len(PATH_PREFIX):].strip() - elif line.startswith(URL_PREFIX): - pass # we use submodule name for repo, path for libs/tools - if current_name is not None and current_path is not None: - entries.append((current_name, current_path)) - return entries - - -def get_libraries_from_repo(submodule_name: str, ref: str) -> List[Tuple[str, str, str]]: - """ - Fetch meta/libraries.json for a submodule at ref (branch/tag). - Returns list of (first_column, repo_url, subpath). - - Root library (key == submodule): first_column = key, subpath = "". - - Sub-library: first_column = name, subpath = path relative to repo (e.g. "minmax"). - """ - url = LIBS_JSON_TEMPLATE.format(repo=submodule_name, ref=ref) - try: - content = fetch_url(url) - except HTTPError as e: - if e.code == 404: - return [] - raise - except URLError: - return [] - - try: - raw = json.loads(content) - except json.JSONDecodeError: - return [] - - # Support both array ([{...}, ...]) and single object ({...}) formats - if isinstance(raw, list): - libs = raw - elif isinstance(raw, dict): - libs = [raw] - else: - return [] - - repo_url = REPO_URL_TEMPLATE.format(repo=submodule_name) - result = [] - for obj in libs: - if not isinstance(obj, dict): - continue - name = obj.get("name") or obj.get("key", "") - key = obj.get("key", "") - if not name or not key: - continue - # Root: key == submodule -> first_col = key, subpath = "" - # Sub: key is submodule/path -> first_col = name, subpath = relative path - if key == submodule_name: - first_column = key - subpath = "" - else: - prefix = submodule_name + "/" - first_column = name - subpath = key[len(prefix) :] if key.startswith(prefix) else key - result.append((first_column, repo_url, subpath)) - return result - - -def main(): - parser = argparse.ArgumentParser( - description="Collect Boost library names and GitHub paths" - ) - parser.add_argument( - "--version", - "-v", - metavar="REF", - default=None, - help="Release version or branch (e.g. boost-1.90.0). Default: develop", - ) - parser.add_argument( - "--output", - "-o", - default="boost_libraries_list.txt", - help="Output file path (default: boost_libraries_list.txt)", - ) - args = parser.parse_args() - - # Validate output path - out_path = args.output - out_dir = os.path.dirname(out_path) - if out_dir and not os.path.exists(out_dir): - print(f"Error: Output directory '{out_dir}' does not exist", file=sys.stderr) - sys.exit(1) - - ref = args.version if args.version is not None else DEFAULT_REF - print(f"Using ref for libraries.json: {ref}", file=sys.stderr) - print("Fetching .gitmodules from boostorg/boost...", file=sys.stderr) - - # Fetch .gitmodules with error handling - try: - gitmodules = fetch_url(GITMODULES_URL) - except HTTPError as e: - print(f"Failed to fetch .gitmodules: HTTP {e.code} - {e.reason}", file=sys.stderr) - sys.exit(1) - except URLError as e: - print(f"Failed to fetch .gitmodules: {e.reason}", file=sys.stderr) - sys.exit(1) - except Exception as e: - print(f"Unexpected error fetching .gitmodules: {e}", file=sys.stderr) - sys.exit(1) - - submodules = parse_gitmodules(gitmodules) - # Only submodules under libs/ - lib_submodules = [(n, p) for n, p in submodules if p.startswith("libs/")] - print(f"Found {len(lib_submodules)} libs submodules.", file=sys.stderr) - - all_libraries = [] - seen = set() # (first_col, repo_url, subpath) to avoid duplicates - - for i, (submodule_name, path_in_boost) in enumerate(lib_submodules, 1): - print(f" [{i}/{len(lib_submodules)}] {submodule_name} ...", - file=sys.stderr, end=" ", flush=True) - try: - libs = get_libraries_from_repo(submodule_name, ref) - for first_col, repo_url, subpath in libs: - key = (first_col, repo_url, subpath) - if key not in seen: - seen.add(key) - all_libraries.append((first_col, repo_url, subpath)) - print(len(libs), file=sys.stderr) - except (HTTPError, URLError, json.JSONDecodeError) as e: - print(f"error: {e}", file=sys.stderr) - except Exception as e: - print(f"unexpected error: {e}", file=sys.stderr) - - # Check if any libraries were found - if not all_libraries: - print("Warning: No libraries found!", file=sys.stderr) - sys.exit(1) - - # Write output file with error handling - try: - with open(out_path, "w", encoding="utf-8") as f: - for first_col, repo_url, subpath in all_libraries: - subpath_quoted = quoted(subpath) if subpath else '""' - line = ( - f"{quoted(first_col)}, {quoted(repo_url)}, " - f"{quoted(ref)}, {subpath_quoted}\n" - ) - f.write(line) - except IOError as e: - print(f"Failed to write output file: {e}", file=sys.stderr) - sys.exit(1) - - print(f"Wrote {len(all_libraries)} libraries to {out_path}", file=sys.stderr) - - -if __name__ == "__main__": - main() diff --git a/BoostLibraryList/collect_boost_libraries_extensions.py b/BoostLibraryList/collect_boost_libraries_extensions.py new file mode 100644 index 0000000..5f714e0 --- /dev/null +++ b/BoostLibraryList/collect_boost_libraries_extensions.py @@ -0,0 +1,495 @@ +#!/usr/bin/env python3 +""" +Collect all Boost library names and their GitHub paths from boostorg/boost. + +1. Fetches .gitmodules from https://github.com/boostorg/boost + (uses specified version or master by default). +2. For each submodule in libs/, fetches meta/libraries.json from the repo + at the given release version (e.g. boost-1.90.0) or develop if not given. +3. Extracts library name and GitHub path from each libraries.json entry. +4. For each library, doc folder is subpath + "/doc"; fetches file list via + GitHub API (git/trees recursive) and collects unique file extensions. +5. Writes two output files: + - Per-library format: name_or_key, repo_url.git, "ref", "subpath", "extensions" + - Per-submodule format: submodule_name, repo_url.git, "library_names", "ref", "subpaths", "extensions" + +Usage: + python collect_boost_libraries_extensions.py [--version BOOST_VERSION] [--output FILE] + python collect_boost_libraries_extensions.py --version boost-1.90.0 -o list.txt + python collect_boost_libraries_extensions.py --version boost-1.90.0 --no-extensions + python collect_boost_libraries_extensions.py --token YOUR_GITHUB_TOKEN +""" + +import argparse +import json +import os +import re +import sys +from collections import defaultdict +from typing import Dict, List, Optional, Set, Tuple +from urllib.error import HTTPError, URLError +from urllib.request import Request, urlopen + +# {ref} = branch/tag (e.g. develop, boost-1.90.0, master) +GITMODULES_URL_TEMPLATE = "https://raw.githubusercontent.com/boostorg/boost/{ref}/.gitmodules" +# {repo} = submodule name, {ref} = branch/tag (e.g. develop, boost-1.90.0) +LIBS_JSON_TEMPLATE = ( + "https://raw.githubusercontent.com/boostorg/{repo}/{ref}/meta/libraries.json" +) +REPO_URL_TEMPLATE = "https://github.com/boostorg/{repo}.git" +GITHUB_API_BASE = "https://api.github.com" +DEFAULT_GITMODULES_REF = "master" +DEFAULT_LIBS_REF = "develop" +USER_AGENT = "BoostLibraryList/1.0" +ENV_FILENAME = ".env" +GITMODULES_PATH_PREFIX = "path = " + + +def load_dotenv_script_dir() -> None: + """ + Load .env from the directory containing this script. Sets os.environ for + KEY=value lines. Also supports JSON-like "github_token": "value" and + sets GITHUB_TOKEN so the script picks it up. + """ + script_dir = os.path.dirname(os.path.abspath(__file__)) + env_path = os.path.join(script_dir, ENV_FILENAME) + if not os.path.isfile(env_path): + return + try: + with open(env_path, "r", encoding="utf-8") as f: + content = f.read() + except OSError as e: + print(f"Warning: could not read .env: {e}", file=sys.stderr) + return + for line in content.splitlines(): + line = line.strip() + if not line or line.startswith("#"): + continue + # Standard .env: GITHUB_TOKEN=value or KEY="value" + m = re.match(r"([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$", line) + if m: + key, value = m.group(1), m.group(2).strip() + if value.startswith('"') and value.endswith('"'): + value = value[1:-1].replace('""', '"') + elif value.startswith("'") and value.endswith("'"): + value = value[1:-1] + if key and value: + os.environ.setdefault(key, value) + continue + # JSON-like: "github_token": "value" -> set GITHUB_TOKEN + m = re.match(r'"github_token"\s*:\s*"((?:[^"\\]|\\.)*)"', line) + if m: + os.environ.setdefault("GITHUB_TOKEN", m.group(1)) + continue + + +def quoted(s: str) -> str: + """Return string wrapped in double quotes with internal quotes escaped.""" + return '"' + s.replace('"', '""') + '"' + + +def format_subpath_display(subpath: str) -> str: + """Return 'root' for empty subpath, else 'root/subpath'.""" + return "root" if not subpath else f"root/{subpath}" + + +def fetch_url(url: str, token: Optional[str] = None) -> str: + headers = {"User-Agent": USER_AGENT} + if token: + headers["Authorization"] = f"Bearer {token}" + req = Request(url, headers=headers) + with urlopen(req, timeout=30) as r: + return r.read().decode("utf-8") + + +def fetch_json(url: str, token: Optional[str] = None) -> dict: + """Fetch URL and parse response as JSON.""" + content = fetch_url(url, token=token) + return json.loads(content) + + +def parse_repo_url(repo_url: str) -> Tuple[str, str]: + """Extract (owner, repo) from https://github.com/owner/repo.git .""" + m = re.match(r"https?://github\.com/([^/]+)/([^/]+?)(?:\.git)?/?$", repo_url.strip()) + if not m: + raise ValueError(f"Cannot parse repo URL: {repo_url}") + return m.group(1), m.group(2).removesuffix(".git") + + +def group_by_submodule( + libraries: List[Tuple[str, str, str, str]] +) -> Dict[Tuple[str, str], List[Tuple[str, str, str]]]: + """ + Group libraries by (submodule_name, repo_url). + Returns dict mapping (submodule, repo_url) -> [(lib_name, subpath, extensions), ...] + """ + grouped: Dict[Tuple[str, str], List[Tuple[str, str, str]]] = defaultdict(list) + for lib_name, repo_url, subpath, extensions in libraries: + # Extract submodule name from repo URL (e.g., "algorithm" from "boostorg/algorithm.git") + try: + _, repo = parse_repo_url(repo_url) + submodule_name = repo + except ValueError: + # Fallback: use lib_name if URL parsing fails + submodule_name = lib_name + grouped[(submodule_name, repo_url)].append((lib_name, subpath, extensions)) + return grouped + + +def get_doc_extensions( + owner: str, repo: str, ref: str, doc_path: str, token: Optional[str] = None +) -> Set[str]: + """ + List all files under doc_path in the repo at ref via GitHub Git Trees API. + Returns the set of file extensions (e.g. {".html", ".adoc"}). + """ + extensions: Set[str] = set() + try: + # Get commit for ref to obtain tree SHA + commit_url = f"{GITHUB_API_BASE}/repos/{owner}/{repo}/commits/{ref}" + commit_data = fetch_json(commit_url, token=token) + tree_sha = commit_data.get("commit", {}).get("tree", {}).get("sha") + if not tree_sha: + return extensions + # Get full tree recursively + tree_url = f"{GITHUB_API_BASE}/repos/{owner}/{repo}/git/trees/{tree_sha}?recursive=1" + tree_data = fetch_json(tree_url, token=token) + tree_entries = tree_data.get("tree") or [] + prefix = doc_path.rstrip("/") + "/" + for entry in tree_entries: + if entry.get("type") != "blob": + continue + path = entry.get("path", "") + if not path.startswith(prefix): + continue + _, ext = os.path.splitext(path) + if ext: + extensions.add(ext) + except HTTPError as e: + if e.code != 404: + raise + except (URLError, json.JSONDecodeError, KeyError) as e: + print( + f"get_doc_extensions failed for {owner}/{repo} {doc_path}: {e}", + file=sys.stderr, + ) + return extensions + + +def parse_gitmodules(content: str) -> List[Tuple[str, str]]: + """Parse .gitmodules and return list of (submodule_name, path).""" + entries = [] + current_name = None + current_path = None + for line in content.splitlines(): + line = line.strip() + m = re.match(r'\[submodule\s+"([^"]+)"\]', line) + if m: + if current_name is not None and current_path is not None: + entries.append((current_name, current_path)) + current_name = m.group(1) + current_path = None + continue + if line.startswith(GITMODULES_PATH_PREFIX): + current_path = line[len(GITMODULES_PATH_PREFIX):].strip() + if current_name is not None and current_path is not None: + entries.append((current_name, current_path)) + return entries + + +def get_libraries_from_repo(submodule_name: str, ref: str) -> List[Tuple[str, str, str]]: + """ + Fetch meta/libraries.json for a submodule at ref (branch/tag). + Returns list of (first_column, repo_url, subpath). + - Root library (key == submodule): first_column = key, subpath = "". + - Sub-library: first_column = name, subpath = path relative to repo (e.g. "minmax"). + """ + url = LIBS_JSON_TEMPLATE.format(repo=submodule_name, ref=ref) + try: + content = fetch_url(url) + except HTTPError as e: + if e.code == 404: + return [] + raise + except URLError: + return [] + + try: + raw = json.loads(content) + except json.JSONDecodeError: + return [] + + # Support both array ([{...}, ...]) and single object ({...}) formats + if isinstance(raw, list): + libs = raw + elif isinstance(raw, dict): + libs = [raw] + else: + return [] + + repo_url = REPO_URL_TEMPLATE.format(repo=submodule_name) + result = [] + for obj in libs: + if not isinstance(obj, dict): + continue + name = obj.get("name") or obj.get("key", "") + key = obj.get("key", "") + if not name or not key: + continue + # Root: key == submodule -> first_col = key, subpath = "" + # Sub: key is submodule/path -> first_col = name, subpath = relative path + if key == submodule_name: + first_column = key + subpath = "" + else: + prefix = submodule_name + "/" + first_column = name + subpath = key[len(prefix):] if key.startswith(prefix) else key + result.append((first_column, repo_url, subpath)) + return result + + +def parse_args(): + """Parse command-line arguments and validate output path. Returns (args, gitmodules_ref, libs_ref).""" + load_dotenv_script_dir() + parser = argparse.ArgumentParser( + description="Collect Boost library names and GitHub paths" + ) + parser.add_argument( + "--version", + "-v", + metavar="REF", + default=None, + help=f"Version/ref for both .gitmodules and libraries.json (e.g. boost-1.90.0). " + f"If not specified, uses {DEFAULT_GITMODULES_REF} for .gitmodules and {DEFAULT_LIBS_REF} for libraries.json", + ) + parser.add_argument( + "--output", + "-o", + default="boost_libraries_list.txt", + help="Output file path (default: boost_libraries_list.txt)", + ) + parser.add_argument( + "--no-extensions", + action="store_true", + help="Do not fetch doc folder file extensions (output 4 columns only)", + ) + parser.add_argument( + "--token", + "-t", + metavar="GITHUB_TOKEN", + default=os.environ.get("GITHUB_TOKEN"), + help="GitHub token for API (avoids rate limit; or set GITHUB_TOKEN)", + ) + parser.add_argument( + "--limit", + "-n", + type=int, + metavar="N", + default=None, + help="Process only first N lib submodules (for quick testing)", + ) + args = parser.parse_args() + + out_dir = os.path.dirname(args.output) + if out_dir and not os.path.exists(out_dir): + print(f"Error: Output directory '{out_dir}' does not exist", file=sys.stderr) + sys.exit(1) + + if args.version is not None: + # Use the same version for both .gitmodules and libraries.json + gitmodules_ref = args.version + libs_ref = args.version + else: + # Use separate defaults + gitmodules_ref = DEFAULT_GITMODULES_REF + libs_ref = DEFAULT_LIBS_REF + + return args, gitmodules_ref, libs_ref + + +def fetch_gitmodules(ref: str) -> str: + """Fetch .gitmodules from boostorg/boost at specified ref. Exits on failure.""" + url = GITMODULES_URL_TEMPLATE.format(ref=ref) + print(f"Fetching .gitmodules from boostorg/boost at {ref}...", file=sys.stderr) + try: + return fetch_url(url) + except HTTPError as e: + print(f"Failed to fetch .gitmodules: HTTP {e.code} - {e.reason}", file=sys.stderr) + sys.exit(1) + except URLError as e: + print(f"Failed to fetch .gitmodules: {e.reason}", file=sys.stderr) + sys.exit(1) + + +def collect_all_libraries( + lib_submodules: List[Tuple[str, str]], ref: str +) -> List[Tuple[str, str, str]]: + """Fetch library metadata for each submodule. Returns list of (first_col, repo_url, subpath).""" + all_libraries: List[Tuple[str, str, str]] = [] + seen: Set[Tuple[str, str, str]] = set() + + for i, (submodule_name, _path_in_boost) in enumerate(lib_submodules, 1): + print( + f" [{i}/{len(lib_submodules)}] {submodule_name} ...", + file=sys.stderr, + end=" ", + flush=True, + ) + try: + libs = get_libraries_from_repo(submodule_name, ref) + for first_col, repo_url, subpath in libs: + key = (first_col, repo_url, subpath) + if key not in seen: + seen.add(key) + all_libraries.append((first_col, repo_url, subpath)) + print(len(libs), file=sys.stderr) + except (HTTPError, URLError, json.JSONDecodeError) as e: + print(f"error: {e}", file=sys.stderr) + + return all_libraries + + +def fetch_extensions_for_libraries( + all_libraries: List[Tuple[str, str, str]], + ref: str, + token: Optional[str], +) -> List[Tuple[str, str, str, str]]: + """Fetch doc folder file extensions for each library. Returns list of 4-tuples.""" + n_libs = len(all_libraries) + print(f"Fetching doc folder extensions via GitHub API ({n_libs} libraries)...", file=sys.stderr) + rows_with_ext: List[Tuple[str, str, str, str]] = [] + for i, (first_col, repo_url, subpath) in enumerate(all_libraries, 1): + doc_path = "doc" if not subpath else f"{subpath}/doc" + try: + owner, repo = parse_repo_url(repo_url) + exts = get_doc_extensions(owner, repo, ref, doc_path, token=token) + ext_str = "|".join(sorted(exts)) if exts else "" + rows_with_ext.append((first_col, repo_url, subpath, ext_str)) + print(f" [{i}/{n_libs}] {first_col} -> {ext_str or '(none)'}", file=sys.stderr) + except (ValueError, HTTPError, URLError, KeyError, json.JSONDecodeError) as e: + print(f" [{i}/{n_libs}] {first_col} error: {e}", file=sys.stderr) + rows_with_ext.append((first_col, repo_url, subpath, "")) + return rows_with_ext + + +def write_library_output( + all_libraries: List[Tuple[str, str, str, str]], + out_path: str, + ref: str, + include_extensions: bool, +) -> None: + """Write per-library output file. Exits on write failure.""" + try: + with open(out_path, "w", encoding="utf-8") as f: + for row in all_libraries: + first_col, repo_url, subpath = row[0], row[1], row[2] + subpath_display = format_subpath_display(subpath) + line = ( + f"{quoted(first_col)}, {quoted(repo_url)}, " + f"{quoted(ref)}, {quoted(subpath_display)}" + ) + if include_extensions: + line += f", {quoted(row[3])}" + line += "\n" + f.write(line) + except OSError as e: + print(f"Failed to write output file: {e}", file=sys.stderr) + sys.exit(1) + print(f"Wrote {len(all_libraries)} libraries to {out_path}", file=sys.stderr) + + +def write_submodule_output( + all_libraries: List[Tuple[str, str, str, str]], + lib_submodules: List[Tuple[str, str]], + out_path: str, + ref: str, +) -> None: + """Write per-submodule output file (one row per lib submodule). Exits on write failure.""" + submodule_out_path = out_path.replace(".txt", "_submodules.txt") + if submodule_out_path == out_path: + submodule_out_path = out_path + "_submodules" + + grouped = group_by_submodule(all_libraries) + submodule_rows: List[Tuple[str, str, str, str, str, str]] = [] + + # Build one row per lib submodule so submodules with 0 libraries get an empty row + for submodule_name, _path_in_boost in lib_submodules: + repo_url = REPO_URL_TEMPLATE.format(repo=submodule_name) + libs_data = grouped.get((submodule_name, repo_url), []) + + if not libs_data: + submodule_rows.append((submodule_name, repo_url, "", ref, "", "")) + continue + + lib_names = [lib[0] for lib in libs_data] + subpaths = [format_subpath_display(lib[1]) for lib in libs_data] + + all_exts: Set[str] = set() + for lib in libs_data: + ext_str = lib[2] + if ext_str: + all_exts.update(ext_str.split("|")) + combined_exts = "|".join(sorted(all_exts)) if all_exts else "" + + submodule_rows.append(( + submodule_name, + repo_url, + "|".join(lib_names), + ref, + "|".join(subpaths), + combined_exts, + )) + + try: + with open(submodule_out_path, "w", encoding="utf-8") as f: + for row in submodule_rows: + submodule, repo_url, lib_names, ref_val, subpaths, exts = row + line = ( + f"{quoted(submodule)}, {quoted(repo_url)}, " + f"{quoted(lib_names)}, {quoted(ref_val)}, " + f"{quoted(subpaths)}, {quoted(exts)}\n" + ) + f.write(line) + except OSError as e: + print(f"Failed to write submodule output file: {e}", file=sys.stderr) + sys.exit(1) + print(f"Wrote {len(submodule_rows)} submodules to {submodule_out_path}", file=sys.stderr) + + +def main() -> None: + """Orchestrate fetching, collecting, and writing library and submodule outputs.""" + args, gitmodules_ref, libs_ref = parse_args() + out_path = args.output + + print(f"Using .gitmodules ref: {gitmodules_ref}", file=sys.stderr) + print(f"Using libraries.json ref: {libs_ref}", file=sys.stderr) + + gitmodules = fetch_gitmodules(gitmodules_ref) + submodules = parse_gitmodules(gitmodules) + lib_submodules = [(n, p) for n, p in submodules if p.startswith("libs/")] + if args.limit is not None: + lib_submodules = lib_submodules[: args.limit] + print(f"Limited to first {len(lib_submodules)} libs submodules.", file=sys.stderr) + print(f"Found {len(lib_submodules)} libs submodules.", file=sys.stderr) + + all_libraries = collect_all_libraries(lib_submodules, libs_ref) + if not all_libraries: + print("Warning: No libraries found!", file=sys.stderr) + sys.exit(1) + + include_extensions = not args.no_extensions + if include_extensions: + all_libraries = fetch_extensions_for_libraries( + all_libraries, libs_ref, args.token + ) + else: + all_libraries = [(f, u, s, "") for f, u, s in all_libraries] + + write_library_output(all_libraries, out_path, libs_ref, include_extensions) + write_submodule_output(all_libraries, lib_submodules, out_path, libs_ref) + + +if __name__ == "__main__": + main() + diff --git a/BoostLibraryList/sum_extensions.py b/BoostLibraryList/sum_extensions.py new file mode 100644 index 0000000..236c509 --- /dev/null +++ b/BoostLibraryList/sum_extensions.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python3 +""" +Sum/count extensions from a libraries list file (5th column). +Outputs: (1) all extensions, (2) documentation extensions only. + +Expects CSV-like lines with fields separated by \", \"; the last field +(extensions) is pipe-separated (e.g. \".adoc|.html|.qbk\"). +""" +import sys +from collections import Counter + +# Documentation content formats only (case-insensitive match) +DOC_EXTENSIONS = { + ".adoc", ".asciidoc", ".dox", ".ent", ".htm", ".html", ".md", ".qbk", + ".reno", ".rst", ".tex", ".txt", ".xml", ".xsl", +} + +DEFAULT_INPUT_PATH = "boost-1.90.0_libraries_list.txt" +OUTPUT_ALL = "boost-1.90.0_all_extensions_summary.txt" +OUTPUT_DOC = "boost-1.90.0_doc_extensions_summary.txt" + + +def norm_ext(ext: str) -> str: + """Normalize extension to lowercase with leading dot.""" + e = ext.strip().strip('"') + return e.lower() if e.startswith(".") else "." + e.lower() + + +def write_summary(path: str, title: str, counts: dict[str, int]) -> None: + """Write extension summary to path. Raises OSError on write failure.""" + lines = [ + title, + "Extension -> # libraries that have at least one file with that extension:", + "", + ] + for ext, n in sorted(counts.items(), key=lambda x: -x[1]): + lines.append(f" {ext}: {n}") + lines.extend([ + "", + f"Total unique extensions: {len(counts)}", + f"Total (library, extension) pairs: {sum(counts.values())}", + "", + ]) + with open(path, "w", encoding="utf-8") as f: + f.write("\n".join(lines)) + + +def main() -> None: + input_path = sys.argv[1] if len(sys.argv) > 1 else DEFAULT_INPUT_PATH + + try: + with open(input_path, "r", encoding="utf-8") as f: + lines_content = f.read() + except FileNotFoundError: + print(f"Error: Input file not found: {input_path}", file=sys.stderr) + sys.exit(1) + except OSError as e: + print(f"Error: Could not read {input_path}: {e}", file=sys.stderr) + sys.exit(1) + + exts = [] + for line in lines_content.splitlines(): + line = line.strip() + if not line: + continue + parts = line.split('", "') + if len(parts) < 5: + continue + last = parts[-1].rstrip('"').strip() + if not last: + continue + for e in last.split("|"): + e = e.strip().strip('"') + if e: + exts.append(e) + + counts_raw = Counter(exts) + counts_all: dict[str, int] = {} + for ext, n in counts_raw.items(): + key = norm_ext(ext) + counts_all[key] = counts_all.get(key, 0) + n + + counts_doc = {ext: n for ext, n in counts_all.items() if ext in DOC_EXTENSIONS} + + title_all = f"All extensions (from {input_path})" + title_doc = f"Documentation extensions only (from {input_path})" + + try: + write_summary(OUTPUT_ALL, title_all, counts_all) + write_summary(OUTPUT_DOC, title_doc, counts_doc) + except OSError as e: + print(f"Error: Could not write output file: {e}", file=sys.stderr) + sys.exit(1) + + print(f"Wrote {OUTPUT_ALL}") + print(f"Wrote {OUTPUT_DOC}") + + +if __name__ == "__main__": + main()