cxx_modules_converter
Описание
`cxx_modules_converter.py` is a Python script to convert C++ sources and headers to C++20 modules.
Языки
- Python89,3%
- C++10,4%
- C0,3%
cxx_modules_converter
is a Python script to convert C++ sources and headers to C++20 modules.
License
cxx_modules_converter is licensed under the MIT license.
Requirements
Python 3.10 or later is required.
Usage
Script can be used as following:
cxx_modules_converter.py [-h] [-s DIRECTORY] [-i] [-d DESTINATION] [-a {modules,headers}] [-r ROOT] [-p] [-I INCLUDE] [-n NAME] [-k SKIP] [-c COMPAT] [-m COMPAT_MACRO] [-e HEADER] [--export EXPORT] [--exportsuffix EXPORTSUFFIX] [--inextheader INEXTHEADER] [--inextcxx INEXTCXX] [--outextmod OUTEXTMOD] [--outextmodimpl OUTEXTMODIMPL] [--modules MODULES] [--modulestd] [--modulestdcompat] [--join JOIN] [-v]
Options:
- -h, --help show this help message and exit
- -s DIRECTORY, --directory DIRECTORY the directory with files
- -i, --inplace convert files in the same directory or put conversion result to destination (unsupported)
- -d DESTINATION, --destination DESTINATION destination directory where to put conversion result, ignored when --inplace is provided
- -a {modules,headers}, --action {modules,headers} action to perform - convert to modules or headers
- -r ROOT, --root ROOT resolve module names starting from this root directory, ignored when --parent
- -p, --parent resolve module names starting from parent of source directory
- -I INCLUDE, --include INCLUDE include search path, starting from root or parent directory
- -n NAME, --name NAME module name for modules in [root] directory which prefixes all modules
- -k SKIP, --skip SKIP skip patterns - files and directories matching any pattern will not be converted or copied (fmatch is used)
- -c COMPAT, --compat COMPAT compat patterns - files and directories matching any pattern will be converted in compatibility mode allowing to use as either module or header (fmatch is used)
- -m COMPAT_MACRO, --compat-macro COMPAT_MACRO compatibility macro name used in compat modules and headers
- -e HEADER, --header HEADER always include headers with matching names and copy them as is (fmatch is used)
- --export EXPORT A=B means module A exports module B, i.e.
means module A will have--export A=B. useexport import B;to export all imports. use--export "A=*"to export B from all modules. use--export "*=B"to export all from all modules.--export "*=*" - --exportsuffix EXPORTSUFFIX
export module suffix for which
is used instead of simpleexport importimport - --inextheader INEXTHEADER input header file extensions, .h by default. first use replaces the default, subsequent uses append.
- --inextcxx INEXTCXX input C++ source file extensions, .cpp by default. first use replaces the default, subsequent uses append.
- --outextmod OUTEXTMOD output module interface unit file extensions. default: .cppm
- e.g.
to skip the need to change--outextmod=.ixxoptions in msvc (https://learn.microsoft.com/en-us/cpp/build/reference/interface?view=msvc-170)/interface /TP
- e.g.
- --outextmodimpl OUTEXTMODIMPL output module implementation unit file extensions. default: .cpp
- --modules MODULES
: start modules treeM=Pat pathM, directory separator is converted toP(dot). Default: use directory name and file name as module name.. - --modulestd MODULESTD
Enable
module, i.e. definestdto replace--modules vector=stdand other standard headers tovector.import std; - --modulestdcompat MODULESTDCOMPAT
Enable
module, i.e. definestd.compatto replace--modules vector=std.compatand other standard headers tovector.import std.compat; - --join JOIN A=B means create module A with partition modules for files matching pattern B. Example: --join A=A/* creates module A with partitions for all files in A/ directory.
- -v, --version show version
Assumptions
The converter has several configurable assumptions:
- following source files extensions are used by default but can be changed:
- header file (input), configurable with.h--inextheader- c++ source file (input), configurable with.cpp--inextcxx- module implementation unit (output), configurable with.cpp--outextmodimpl- module interface unit (output), configurable with.cppm--outextmod
- header file path is used to determine module name by joining path parts with dots (
); same for c++ source files, but can be customized using.option to combine multiple files into module partitions--join - system header includes using
are moved to global module fragment, but standard library headers can be replaced with#include <>usingimport std;or--modulestdusingimport std.compat;--modulestdcompat
Tests
is used to run tests.
The can be used to create python3 virtual environment, assuming Linux and bash is used:
Install pytest requirements using
Development
For development, you need to install Poetry:
To bump the version, use: