mirror of
https://github.com/lucaspalomodevelop/meshlab.git
synced 2026-03-14 08:34:37 +00:00
99 lines
3.3 KiB
Python
Executable File
99 lines
3.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
from pathlib import Path
|
|
|
|
from jinja2 import Environment, FileSystemLoader
|
|
from jinja2.utils import Markup
|
|
|
|
try:
|
|
# You need to add:
|
|
#
|
|
# from .configuration import Configuration
|
|
# from .__main__ import process_file
|
|
#
|
|
# to your [~/.local/lib/python3.7/site-packages/]cmake_format/__init__.py
|
|
from cmake_format import process_file as cf_process_file, Configuration as CF_Configuration
|
|
HAVE_CMAKE_FORMAT = True
|
|
except:
|
|
HAVE_CMAKE_FORMAT = False
|
|
|
|
|
|
class CMaker:
|
|
def __init__(self, format_config=None):
|
|
self.root = Path(__file__).parent.resolve()
|
|
self.template_dir = self.root / 'templates'
|
|
self.env = Environment(keep_trailing_newline=True,
|
|
autoescape=False,
|
|
loader=FileSystemLoader([str(self.template_dir)]))
|
|
self.template = self.env.get_template('CMakeLists.template.cmake')
|
|
self.format_config = format_config
|
|
|
|
def handle_dir(self, d, recurse=True):
|
|
# print(d)
|
|
if recurse:
|
|
glob = d.rglob
|
|
else:
|
|
glob = d.glob
|
|
data = {
|
|
"name": d.stem,
|
|
}
|
|
sources = list(sorted(x.relative_to(d) for x in glob("*.cpp")
|
|
if not x.name.startswith('moc_') and not x.name.startswith('qrc_')))
|
|
if sources:
|
|
data['sources'] = sources
|
|
|
|
headers = list(sorted(x.relative_to(d) for x in glob("*.h")
|
|
if not x.name.startswith('ui_') and not x.name.startswith('moc_')))
|
|
if headers:
|
|
data["headers"] = headers
|
|
|
|
resources = list(sorted(x.relative_to(d) for x in glob("*.qrc")))
|
|
if resources:
|
|
data["resources"] = resources
|
|
|
|
ui = list(sorted(x.relative_to(d) for x in glob("*.ui")))
|
|
if ui:
|
|
data["ui"] = ui
|
|
|
|
data["xml"] = list(sorted(x.relative_to(d) for x in glob("*.xml")))
|
|
assert(len(data['xml']) in (0, 1))
|
|
|
|
custom_template_name = d.name + '.cmake'
|
|
if (self.template_dir / custom_template_name).exists():
|
|
print(d, "has a custom template")
|
|
template = self.env.get_template(custom_template_name)
|
|
else:
|
|
template = self.template
|
|
output = template.render(data)
|
|
if self.format_config:
|
|
output = cf_process_file(self.format_config, output)
|
|
with open(d / 'CMakeLists.txt', 'w', encoding='utf-8') as fp:
|
|
fp.write(output)
|
|
|
|
def run(self):
|
|
self.handle_dir(self.root / 'common', False)
|
|
self.handle_dir(self.root / 'meshlab')
|
|
self.handle_dir(self.root / 'meshlabserver')
|
|
plugins_dirs = (
|
|
self.root / 'meshlabplugins',
|
|
self.root / 'plugins_experimental',
|
|
self.root / 'plugins_unsupported',
|
|
self.root / 'sampleplugins'
|
|
)
|
|
for plugins_dir in plugins_dirs:
|
|
if not plugins_dir.exists():
|
|
continue
|
|
for d in plugins_dir.iterdir():
|
|
if d.is_dir():
|
|
self.handle_dir(d)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
config = None
|
|
if HAVE_CMAKE_FORMAT:
|
|
#config = get_default_cmake_format_config(enable_markup=False)
|
|
config = CF_Configuration(enable_markup=False, tab_size=4)
|
|
|
|
app = CMaker(config)
|
|
app.run()
|