релиз
This commit is contained in:
67
main.py
Normal file
67
main.py
Normal file
@@ -0,0 +1,67 @@
|
||||
import os
|
||||
import sys
|
||||
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
|
||||
|
||||
def generate_context(libname):
|
||||
return {
|
||||
'project_name': libname,
|
||||
'project_name_code': libname.replace(' ', '_').lower(),
|
||||
'project_name_cmake': libname.replace(' ', '-').lower(),
|
||||
'include_dir': libname.replace(' ', '-').lower(),
|
||||
'include_header': f"{libname.replace(' ', '-').lower()}/{libname.split(' ')[-1].lower()}.h",
|
||||
'namespace': libname.split(' ')[-1].lower()
|
||||
}
|
||||
|
||||
|
||||
def render_template(filename, context):
|
||||
file_loader = FileSystemLoader('templates')
|
||||
env = Environment(loader=file_loader)
|
||||
template = env.get_template(f'{filename}.jinja')
|
||||
return template.render(context)
|
||||
|
||||
|
||||
def write_file(filename, content):
|
||||
with open(filename, 'w') as f:
|
||||
f.write(content)
|
||||
|
||||
|
||||
def create_all(libname, libpath, examples):
|
||||
os.mkdir(libpath)
|
||||
os.mkdir(f"{libpath}/include")
|
||||
os.mkdir(f"{libpath}/include/{libname.replace(' ', '-').lower()}")
|
||||
os.mkdir(f"{libpath}/src")
|
||||
os.mkdir(f"{libpath}/tests")
|
||||
|
||||
context = generate_context(libname)
|
||||
|
||||
context['examples_names'] = examples
|
||||
|
||||
write_file(f"{libpath}/CMakeLists.txt", render_template("CMakeLists.txt", context))
|
||||
write_file(f"{libpath}/include/{context['include_header']}", render_template("include/lib/lib.h", context))
|
||||
write_file(f"{libpath}/src/{context['namespace']}.cpp", render_template("src/lib.cpp", context))
|
||||
write_file(f"{libpath}/tests/CMakeLists.txt", render_template("tests/CMakeLists.txt", context))
|
||||
write_file(f"{libpath}/tests/main.cpp", render_template("tests/main.cpp", context))
|
||||
write_file(f"{libpath}/tests/test-{context['namespace']}.cpp", render_template("tests/test-lib.cpp", context))
|
||||
|
||||
if len(examples) > 0:
|
||||
os.mkdir(f"{libpath}/examples")
|
||||
for example in examples:
|
||||
context = generate_context(libname)
|
||||
context['example_name'] = example
|
||||
context['example_name_code'] = example.replace(' ', '_').lower()
|
||||
context['example_name_cmake'] = example.replace(' ', '-').lower()
|
||||
|
||||
example_dir = f"{libpath}/examples/{context['example_name_cmake']}"
|
||||
os.mkdir(example_dir)
|
||||
write_file(f"{example_dir}/CMakeLists.txt", render_template("examples/CMakeLists.txt", context))
|
||||
write_file(f"{example_dir}/main.cpp", render_template("examples/main.cpp", context))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) < 3:
|
||||
print(f"Usage: {sys.argv[0]} libname /path/to/project <example-name-1> <example-name-2> ...")
|
||||
exit(1)
|
||||
create_all(sys.argv[1], sys.argv[2], sys.argv[3:])
|
||||
|
||||
Reference in New Issue
Block a user