spl-core 4.1.2__py3-none-any.whl → 4.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. spl_core/__init__.py +1 -1
  2. spl_core/__run.py +12 -0
  3. spl_core/common/command_line_executor.py +3 -1
  4. spl_core/kickstart/create.py +66 -0
  5. spl_core/kickstart/templates/application/.vscode/cmake-variants.json +20 -0
  6. spl_core/{project_creator/templates/project/{{cookiecutter.name}} → kickstart/templates/application}/KConfig +2 -2
  7. spl_core/kickstart/templates/application/src/greeter/CMakeLists.txt +3 -0
  8. spl_core/kickstart/templates/application/src/greeter/doc/_images/screenshot.png +0 -0
  9. spl_core/kickstart/templates/application/src/greeter/doc/index.rst +26 -0
  10. spl_core/kickstart/templates/application/src/greeter/src/greeter.c +24 -0
  11. spl_core/kickstart/templates/application/src/greeter/src/greeter.h +6 -0
  12. spl_core/kickstart/templates/application/src/greeter/test/test_greeter.cc +27 -0
  13. spl_core/{project_creator/templates/project/{{cookiecutter.name}}/{% if cookiecutter.touch_components -%} components {%- endif %}/main/doc/index.rst → kickstart/templates/application/src/main/doc/index.rst} +6 -2
  14. spl_core/kickstart/templates/application/src/main/src/main.c +13 -0
  15. spl_core/kickstart/templates/application/test/EnglishVariant/test__EnglishVariant.py +16 -0
  16. spl_core/kickstart/templates/application/test/German/test__GermanVariant.py +16 -0
  17. spl_core/kickstart/templates/application/variants/EnglishVariant/parts.cmake +2 -0
  18. spl_core/kickstart/templates/application/variants/GermanVariant/config.cmake +1 -0
  19. spl_core/kickstart/templates/application/variants/GermanVariant/config.txt +13 -0
  20. spl_core/kickstart/templates/application/variants/GermanVariant/parts.cmake +2 -0
  21. spl_core/{project_creator/templates/project/{{cookiecutter.name}} → kickstart/templates/project}/.gitignore +3 -0
  22. spl_core/kickstart/templates/project/.vscode/extensions.json +20 -0
  23. spl_core/{project_creator/templates/project/{{cookiecutter.name}} → kickstart/templates/project}/.vscode/tasks.json +24 -4
  24. spl_core/{project_creator/templates/project/{{cookiecutter.name}} → kickstart/templates/project}/CMakeLists.txt +9 -1
  25. spl_core/{project_creator/templates/project/{{cookiecutter.name}} → kickstart/templates/project}/build.ps1 +47 -17
  26. spl_core/{project_creator/templates/project/{{cookiecutter.name}} → kickstart/templates/project}/conf.py +8 -6
  27. spl_core/{project_creator/templates/project/{{cookiecutter.name}} → kickstart/templates/project}/doc/Doxyfile.in +2 -2
  28. spl_core/{project_creator/templates/project/{{cookiecutter.name}} → kickstart/templates/project}/doc/common/index.rst +1 -1
  29. spl_core/{project_creator/templates/project/{{cookiecutter.name}} → kickstart/templates/project}/doc/components/index.rst +2 -3
  30. spl_core/{project_creator/templates/project/{{cookiecutter.name}} → kickstart/templates/project}/doc/doxygen-awesome/doxygen-awesome.css +16 -16
  31. spl_core/{project_creator/templates/project/{{cookiecutter.name}} → kickstart/templates/project}/doc/test_report_template.txt +0 -2
  32. spl_core/{project_creator/templates/project/{{cookiecutter.name}} → kickstart/templates/project}/index.rst +1 -0
  33. spl_core/kickstart/templates/project/pipfile +6 -0
  34. spl_core/{project_creator/templates/project/{{cookiecutter.name}} → kickstart/templates/project}/pytest.ini +2 -1
  35. spl_core/kickstart/templates/project/scoopfile.json +14 -0
  36. spl_core/{project_creator/templates/project/{{cookiecutter.name}}/{% if cookiecutter.touch_tools -%} tools {%- endif %}/toolchains/clang/toolchain.cmake → kickstart/templates/project/tools/toolchains/clang/toolchain.cmake} +1 -1
  37. spl_core/main.py +44 -0
  38. {spl_core-4.1.2.dist-info → spl_core-4.2.0.dist-info}/METADATA +14 -2
  39. spl_core-4.2.0.dist-info/RECORD +60 -0
  40. spl_core/common/cmake.py +0 -52
  41. spl_core/project_creator/creator.py +0 -133
  42. spl_core/project_creator/templates/project/cookiecutter.json +0 -14
  43. spl_core/project_creator/templates/project/{{cookiecutter.name}}/.flake8 +0 -2
  44. spl_core/project_creator/templates/project/{{cookiecutter.name}}/.vscode/cmake-variants.json +0 -18
  45. spl_core/project_creator/templates/project/{{cookiecutter.name}}/.vscode/extensions.json +0 -18
  46. spl_core/project_creator/templates/project/{{cookiecutter.name}}/LICENSE +0 -21
  47. spl_core/project_creator/templates/project/{{cookiecutter.name}}/Pipfile +0 -30
  48. spl_core/project_creator/templates/project/{{cookiecutter.name}}/README.md +0 -7
  49. spl_core/project_creator/templates/project/{{cookiecutter.name}}/install-mandatory.bat +0 -1
  50. spl_core/project_creator/templates/project/{{cookiecutter.name}}/scoopfile.json +0 -47
  51. spl_core/project_creator/templates/project/{{cookiecutter.name}}/test/test_build.py +0 -39
  52. spl_core/project_creator/templates/project/{{cookiecutter.name}}/test/test_unittests.py +0 -28
  53. spl_core/project_creator/templates/project/{{cookiecutter.name}}/test/utils.py +0 -26
  54. spl_core/project_creator/templates/project/{{cookiecutter.name}}/tools/setup/git-config.ps1 +0 -8
  55. spl_core/project_creator/templates/project/{{cookiecutter.name}}/{% if cookiecutter.touch_components -%} components {%- endif %}/component/CMakeLists.txt +0 -3
  56. spl_core/project_creator/templates/project/{{cookiecutter.name}}/{% if cookiecutter.touch_components -%} components {%- endif %}/component/doc/_images/screenshot.png +0 -0
  57. spl_core/project_creator/templates/project/{{cookiecutter.name}}/{% if cookiecutter.touch_components -%} components {%- endif %}/component/doc/design.rst +0 -25
  58. spl_core/project_creator/templates/project/{{cookiecutter.name}}/{% if cookiecutter.touch_components -%} components {%- endif %}/component/doc/index.rst +0 -8
  59. spl_core/project_creator/templates/project/{{cookiecutter.name}}/{% if cookiecutter.touch_components -%} components {%- endif %}/component/src/component.c +0 -31
  60. spl_core/project_creator/templates/project/{{cookiecutter.name}}/{% if cookiecutter.touch_components -%} components {%- endif %}/component/src/component.h +0 -1
  61. spl_core/project_creator/templates/project/{{cookiecutter.name}}/{% if cookiecutter.touch_components -%} components {%- endif %}/component/test/test_component.cc +0 -60
  62. spl_core/project_creator/templates/project/{{cookiecutter.name}}/{% if cookiecutter.touch_components -%} components {%- endif %}/main/src/main.c +0 -17
  63. spl_core/project_creator/templates/variant/cookiecutter.json +0 -4
  64. spl_core/project_creator/templates/variant/{{cookiecutter.flavor}}/{{cookiecutter.subsystem}}/config.txt +0 -1
  65. spl_core/project_creator/templates/variant/{{cookiecutter.flavor}}/{{cookiecutter.subsystem}}/parts.cmake +0 -2
  66. spl_core/project_creator/variant.py +0 -23
  67. spl_core/project_creator/workspace_artifacts.py +0 -36
  68. spl_core-4.1.2.dist-info/RECORD +0 -68
  69. /spl_core/{project_creator → kickstart}/__init__.py +0 -0
  70. /spl_core/{project_creator/templates/project/{{cookiecutter.name}}/{% if cookiecutter.touch_components -%} components {%- endif %} → kickstart/templates/application/src}/main/CMakeLists.txt +0 -0
  71. /spl_core/{project_creator/templates/variant/{{cookiecutter.flavor}}/{{cookiecutter.subsystem}} → kickstart/templates/application/variants/EnglishVariant}/config.cmake +0 -0
  72. /spl_core/{project_creator/templates/project/{{cookiecutter.name}} → kickstart/templates/project}/.vscode/cmake-kits.json +0 -0
  73. /spl_core/{project_creator/templates/project/{{cookiecutter.name}} → kickstart/templates/project}/.vscode/launch.json +0 -0
  74. /spl_core/{project_creator/templates/project/{{cookiecutter.name}} → kickstart/templates/project}/.vscode/settings.json +0 -0
  75. /spl_core/{project_creator/templates/project/{{cookiecutter.name}} → kickstart/templates/project}/build.bat +0 -0
  76. /spl_core/{project_creator/templates/project/{{cookiecutter.name}} → kickstart/templates/project}/doc/doxygen-awesome/LICENSE +0 -0
  77. /spl_core/{project_creator/templates/project/{{cookiecutter.name}} → kickstart/templates/project}/doc/software_architecture/index.rst +0 -0
  78. /spl_core/{project_creator/templates/project/{{cookiecutter.name}} → kickstart/templates/project}/doc/software_requirements/index.rst +0 -0
  79. /spl_core/{project_creator/templates/project/{{cookiecutter.name}}/{% if cookiecutter.touch_tools -%} tools {%- endif %} → kickstart/templates/project/tools}/toolchains/gcc/toolchain.cmake +0 -0
  80. {spl_core-4.1.2.dist-info → spl_core-4.2.0.dist-info}/LICENSE +0 -0
  81. {spl_core-4.1.2.dist-info → spl_core-4.2.0.dist-info}/WHEEL +0 -0
@@ -204,7 +204,7 @@ html {
204
204
  --code-background: #2a2c2f;
205
205
 
206
206
  --tablehead-background: #2a2c2f;
207
-
207
+
208
208
  --blockquote-background: #222325;
209
209
  --blockquote-foreground: #7e8c92;
210
210
 
@@ -888,7 +888,7 @@ div.header {
888
888
  flex-wrap: nowrap;
889
889
  align-items: flex-start;
890
890
  }
891
-
891
+
892
892
  div.contents .textblock {
893
893
  min-width: 200px;
894
894
  flex-grow: 1;
@@ -980,21 +980,21 @@ html.dark-mode div.contents .dotgraph iframe
980
980
  h2.groupheader {
981
981
  border-bottom: 0px;
982
982
  color: var(--page-foreground-color);
983
- box-shadow:
984
- 100px 0 var(--page-background-color),
983
+ box-shadow:
984
+ 100px 0 var(--page-background-color),
985
985
  -100px 0 var(--page-background-color),
986
986
  100px 0.75px var(--separator-color),
987
987
  -100px 0.75px var(--separator-color),
988
- 500px 0 var(--page-background-color),
988
+ 500px 0 var(--page-background-color),
989
989
  -500px 0 var(--page-background-color),
990
990
  500px 0.75px var(--separator-color),
991
991
  -500px 0.75px var(--separator-color),
992
- 900px 0 var(--page-background-color),
992
+ 900px 0 var(--page-background-color),
993
993
  -900px 0 var(--page-background-color),
994
994
  900px 0.75px var(--separator-color),
995
995
  -900px 0.75px var(--separator-color),
996
996
  1400px 0 var(--page-background-color),
997
- -1400px 0 var(--page-background-color),
997
+ -1400px 0 var(--page-background-color),
998
998
  1400px 0.75px var(--separator-color),
999
999
  -1400px 0.75px var(--separator-color),
1000
1000
  1900px 0 var(--page-background-color),
@@ -1165,8 +1165,8 @@ div.toc li a.aboveActive {
1165
1165
 
1166
1166
  div.contents .toc.interactive > h3::before {
1167
1167
  content: "";
1168
- width: 0;
1169
- height: 0;
1168
+ width: 0;
1169
+ height: 0;
1170
1170
  border-left: 4px solid transparent;
1171
1171
  border-right: 4px solid transparent;
1172
1172
  border-top: 5px solid var(--primary-color);
@@ -1857,8 +1857,8 @@ table.memberdecls img[src="closed.png"],
1857
1857
  table.memberdecls img[src="open.png"],
1858
1858
  div.dynheader img[src="open.png"],
1859
1859
  div.dynheader img[src="closed.png"] {
1860
- width: 0;
1861
- height: 0;
1860
+ width: 0;
1861
+ height: 0;
1862
1862
  border-left: 4px solid transparent;
1863
1863
  border-right: 4px solid transparent;
1864
1864
  border-top: 5px solid var(--primary-color);
@@ -1876,7 +1876,7 @@ table.memberdecls img {
1876
1876
  table.memberdecls img[src="closed.png"],
1877
1877
  div.dynheader img[src="closed.png"] {
1878
1878
  transform: rotate(-90deg);
1879
-
1879
+
1880
1880
  }
1881
1881
 
1882
1882
  .compoundTemplParams {
@@ -1919,7 +1919,7 @@ div.dynheader img[src="closed.png"] {
1919
1919
  margin-bottom: calc(0px - var(--page-font-size));
1920
1920
  }
1921
1921
 
1922
- table.memberdecls .memItemRight,
1922
+ table.memberdecls .memItemRight,
1923
1923
  table.memberdecls .mdescRight,
1924
1924
  table.memberdecls .memTemplItemRight {
1925
1925
  border-top: 0;
@@ -2105,8 +2105,8 @@ html.dark-mode .iconfopen, html.dark-mode .iconfclosed {
2105
2105
  background-color: transparent;
2106
2106
  }
2107
2107
 
2108
- /*
2109
- Class Index Doxygen 1.8
2108
+ /*
2109
+ Class Index Doxygen 1.8
2110
2110
  */
2111
2111
 
2112
2112
  table.classindex {
@@ -2251,7 +2251,7 @@ div.contents .toc::-webkit-scrollbar-thumb,
2251
2251
  background-color: transparent;
2252
2252
  border: var(--webkit-scrollbar-padding) solid transparent;
2253
2253
  border-radius: calc(var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding));
2254
- background-clip: padding-box;
2254
+ background-clip: padding-box;
2255
2255
  }
2256
2256
 
2257
2257
  #nav-tree:hover::-webkit-scrollbar-thumb,
@@ -34,5 +34,6 @@ Variant Report
34
34
  {% if build_config.target == 'reports' %}
35
35
  {{ build_config.reports_output_dir }}/coverage
36
36
  {% endif %}
37
+ doc/results/index
37
38
 
38
39
  {% endif %}
@@ -0,0 +1,6 @@
1
+ [packages]
2
+ pytest = "8.1.1"
3
+ spl-core = "*"
4
+
5
+ [requires]
6
+ python_version = "3.11"
@@ -5,5 +5,6 @@ testpaths =
5
5
  test
6
6
  junit_logging = all
7
7
  addopts =
8
+ -vv
8
9
  --capture=tee-sys
9
- --verbose
10
+ --junitxml=build/test-report.xml
@@ -0,0 +1,14 @@
1
+ {
2
+ "buckets": [
3
+ {
4
+ "Name": "versions",
5
+ "Source": "https://github.com/ScoopInstaller/Versions"
6
+ }
7
+ ],
8
+ "apps": [
9
+ {
10
+ "Source": "versions",
11
+ "Name": "mingw-winlibs-llvm-ucrt"
12
+ }
13
+ ]
14
+ }
@@ -1,7 +1,7 @@
1
1
  # TODO: caching required due to cmake tools extension issue: https://github.com/microsoft/vscode-cmake-tools/issues/1188
2
2
  # TODO: get debugging running (lldb-mi not found in any current package, switching back to gcc)
3
3
  set(CMAKE_C_COMPILER clang CACHE STRING "C Compiler")
4
- # TODO: clarify why llvm-cov produces invalid gcov files (contain blank lines), releated GCOVR issue: https://github.com/gcovr/gcovr/issues/331
4
+ # TODO: clarify why llvm-cov produces invalid gcov files (contain blank lines), related GCOVR issue: https://github.com/gcovr/gcovr/issues/331
5
5
  set(GCOVR_ADDITIONAL_OPTIONS --gcov-executable \"llvm-cov gcov\" --gcov-ignore-parse-errors --html-title \"Code Coverage Report \(tool suite: LLVM Clang\)\")
6
6
 
7
7
  set(CMAKE_CXX_COMPILER clang++ CACHE STRING "CXX Compiler")
spl_core/main.py ADDED
@@ -0,0 +1,44 @@
1
+ import sys
2
+ from pathlib import Path
3
+
4
+ import typer
5
+ from py_app_dev.core.exceptions import UserNotificationException
6
+ from py_app_dev.core.logging import logger, setup_logger, time_it
7
+
8
+ from spl_core import __version__
9
+ from spl_core.kickstart.create import KickstartProject
10
+
11
+ package_name = "please"
12
+
13
+ app = typer.Typer(name=package_name, help="Software Product Line Support for CMake.", no_args_is_help=True, add_completion=False)
14
+
15
+
16
+ @app.callback(invoke_without_command=True)
17
+ def version(
18
+ version: bool = typer.Option(None, "--version", "-v", is_eager=True, help="Show version and exit."),
19
+ ) -> None:
20
+ if version:
21
+ typer.echo(f"{package_name} {__version__}")
22
+ raise typer.Exit()
23
+
24
+
25
+ @app.command()
26
+ @time_it("init")
27
+ def init(
28
+ project_dir: Path = typer.Option(Path.cwd().absolute(), help="The project directory"), # noqa: B008
29
+ force: bool = typer.Option(False, help="Force the initialization of the project even if the directory is not empty."),
30
+ ) -> None:
31
+ KickstartProject(project_dir, force).run()
32
+
33
+
34
+ def main() -> None:
35
+ try:
36
+ setup_logger()
37
+ app()
38
+ except UserNotificationException as e:
39
+ logger.error(f"{e}")
40
+ sys.exit(1)
41
+
42
+
43
+ if __name__ == "__main__":
44
+ main()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: spl-core
3
- Version: 4.1.2
3
+ Version: 4.2.0
4
4
  Summary: Software Product Line Support for CMake
5
5
  Home-page: https://github.com/avengineers/spl-core
6
6
  License: MIT
@@ -17,10 +17,22 @@ Classifier: Programming Language :: Python :: 3.10
17
17
  Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Topic :: Software Development :: Libraries
19
19
  Requires-Dist: cookiecutter (==2.1.1)
20
+ Requires-Dist: doxysphinx (>=3.3.7,<4.0.0)
20
21
  Requires-Dist: gcovr
21
22
  Requires-Dist: hammocking
22
23
  Requires-Dist: kconfiglib
23
24
  Requires-Dist: py-app-dev (>=2.1.0,<3.0.0)
25
+ Requires-Dist: sphinx (>=7.3.5,<8.0.0)
26
+ Requires-Dist: sphinx-copybutton (>=0.5.2,<0.6.0)
27
+ Requires-Dist: sphinx-needs (>=2.0.0,<3.0.0)
28
+ Requires-Dist: sphinx-new-tab-link (>=0.4.0,<0.5.0)
29
+ Requires-Dist: sphinx-rtd-size (>=0.2.0,<0.3.0)
30
+ Requires-Dist: sphinx-rtd-theme (>=2.0.0,<3.0.0)
31
+ Requires-Dist: sphinx-test-reports (>=1.0.2,<2.0.0)
32
+ Requires-Dist: sphinxcontrib-datatemplates (>=0.11.0,<0.12.0)
33
+ Requires-Dist: sphinxcontrib-mermaid (>=0.9.2,<0.10.0)
34
+ Requires-Dist: sphinxcontrib-plantuml (>=0.29,<0.30)
35
+ Requires-Dist: typer[all] (>=0.12.3,<0.13.0)
24
36
  Project-URL: Bug Tracker, https://github.com/avengineers/spl-core/issues
25
37
  Project-URL: Changelog, https://github.com/avengineers/spl-core/blob/develop/CHANGELOG.md
26
38
  Project-URL: Documentation, https://spl-core.readthedocs.io
@@ -55,7 +67,7 @@ _SPL Core_ is our CMake module to support multiple projects as variants of one S
55
67
  With the integrated project creator you can create a new SPL workspace, e.g.:
56
68
 
57
69
  ```powershell
58
- pipenv run python src/project_creator/creator.py workspace --name MyProject --variant FLV1/SYS1 --out_dir C:\dev
70
+ pipenv run python src/project_creator/creator.py workspace --name MyProject --variant MyVariant --out_dir C:\dev
59
71
  ```
60
72
 
61
73
  Note: one can use the `--variant` argument several times to create a project with multiple variants.
@@ -0,0 +1,60 @@
1
+ spl_core/__init__.py,sha256=pU56ZDjCDnUbINe39hYuKXHy9UI9Tf4xjWgnxBlxEDk,22
2
+ spl_core/__run.py,sha256=DphnN7_Bjiw_mOOztsHxTDHS8snz1g2MMWAaJpZxPKM,361
3
+ spl_core/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ spl_core/common/command_line_executor.py,sha256=ID0Hw_ETduDoeHNDLJtbRPVPQTJPh_Zt7PdrBW2pAG4,2079
5
+ spl_core/common/path.py,sha256=sDujd3n4XP1XGjHc7ImXEdjihO6A8BOIDbKCf7HgQ0Y,462
6
+ spl_core/gcov_maid/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ spl_core/gcov_maid/gcov_maid.py,sha256=5rPIeL9daQDm5ad9xzaIhlDf_0H5g6r2zHo8WN8T4-8,1455
8
+ spl_core/kconfig/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ spl_core/kconfig/kconfig.py,sha256=JLBSUvPnc5dEZNWHeuMTFgP9iBgtzEV6tnrhE4-5oCg,9795
10
+ spl_core/kickstart/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
+ spl_core/kickstart/create.py,sha256=Lv7-3nb71HKmclHBSCliLKiFdmAIOBl1VTvA39YboLQ,2741
12
+ spl_core/kickstart/templates/application/.vscode/cmake-variants.json,sha256=sF_dsbdrDwhfIo5EfGzvIgMZZcz5Z5k4Al0qrS8j7AY,553
13
+ spl_core/kickstart/templates/application/KConfig,sha256=tl_9L535AhJdCHBhi4xDez3sK_Yc78e0KBekg5e-48w,589
14
+ spl_core/kickstart/templates/application/src/greeter/CMakeLists.txt,sha256=MX7J58ZkxUNRshAUb1AdT_qO-XJABVO6vfpgEHeVp1g,117
15
+ spl_core/kickstart/templates/application/src/greeter/doc/_images/screenshot.png,sha256=LsjExuSbDPsy3BzpPrfYMsD2fwYdNZzKS56s6aSn8Rc,11090
16
+ spl_core/kickstart/templates/application/src/greeter/doc/index.rst,sha256=60b9gaeeCKp-J0nnB5f8Ndk8g18NbGQobuCj0WfPNsQ,500
17
+ spl_core/kickstart/templates/application/src/greeter/src/greeter.c,sha256=ikOfwUoSZekDHjVb9nnh_99cOQBmB8nNxgshl12cGc0,431
18
+ spl_core/kickstart/templates/application/src/greeter/src/greeter.h,sha256=CFvhZ41kcD9XC3T6sJtWntkRYxR6HI8xY5xGpvAy9Jk,99
19
+ spl_core/kickstart/templates/application/src/greeter/test/test_greeter.cc,sha256=Vg6u4Cn1Q6ntsdc3JlK1VTiPT3tDejvHD-280QKuAhc,482
20
+ spl_core/kickstart/templates/application/src/main/CMakeLists.txt,sha256=9gu3ydUv1cT3WjXw944lAvVK0MzJaCD1zKqvRZmTt_o,68
21
+ spl_core/kickstart/templates/application/src/main/doc/index.rst,sha256=vJah60GsBx70m-Q1d9sR34cSziwA7wMR-10jMSSlO6c,303
22
+ spl_core/kickstart/templates/application/src/main/src/main.c,sha256=vNj-JGFqD70h_AVpjFiHeB6pvbW2OpZeSF7munyY6tY,215
23
+ spl_core/kickstart/templates/application/test/EnglishVariant/test__EnglishVariant.py,sha256=P66U-6oCKTwLQ_tFFVPEyRbTvfQjKoREnqqWXou4OOc,437
24
+ spl_core/kickstart/templates/application/test/German/test__GermanVariant.py,sha256=v4O8mbDA7tAHNus2fQ4MJvXp6kBLyersBy7J-rgpoq4,436
25
+ spl_core/kickstart/templates/application/variants/EnglishVariant/config.cmake,sha256=SbFIGrclTicjW-TNH4QlUilaSs1CCmL882PBrlVau8g,94
26
+ spl_core/kickstart/templates/application/variants/EnglishVariant/parts.cmake,sha256=CnNxm2Cf2X_0vkS52xj5WNTLffVQP9CflkEaDEtlxXs,61
27
+ spl_core/kickstart/templates/application/variants/GermanVariant/config.cmake,sha256=SbFIGrclTicjW-TNH4QlUilaSs1CCmL882PBrlVau8g,94
28
+ spl_core/kickstart/templates/application/variants/GermanVariant/config.txt,sha256=6gfkKIlqKPOK2pI4TIGN58FG7VCRfgcFLzR9HPog4dg,188
29
+ spl_core/kickstart/templates/application/variants/GermanVariant/parts.cmake,sha256=CnNxm2Cf2X_0vkS52xj5WNTLffVQP9CflkEaDEtlxXs,61
30
+ spl_core/kickstart/templates/project/.gitignore,sha256=Ibd6YbqO2UPfauJzrdgY7z4ar0aPmEwYQ-ncDKzZrlg,638
31
+ spl_core/kickstart/templates/project/.vscode/cmake-kits.json,sha256=oLn_-InkXE3Th6OL5hlSxBZsx2dBaKShrHZVcyAcfFU,269
32
+ spl_core/kickstart/templates/project/.vscode/extensions.json,sha256=49RYati_P9i3zdiKuaTIkNQnA1uH1eIUd6DusIa9TT0,624
33
+ spl_core/kickstart/templates/project/.vscode/launch.json,sha256=30-tsNapUNNIvVDohdIf4SEnHrHh8qbWuTjLJjsMcEY,1103
34
+ spl_core/kickstart/templates/project/.vscode/settings.json,sha256=w2zAkNk4P0eZC5zDxiG7jKy35Jl37TyVDg38lXjq3hw,1369
35
+ spl_core/kickstart/templates/project/.vscode/tasks.json,sha256=fPaiY-vpI-3wMK0dpc3LZma4-YYyaI_xc6uQrEUf6sw,3434
36
+ spl_core/kickstart/templates/project/CMakeLists.txt,sha256=pufvVYIpu56BQv04JgJMBzi0DG_pLN0S7d0s4zU8WRg,1817
37
+ spl_core/kickstart/templates/project/build.bat,sha256=HlOqePYRoHTrp7v6oQ551dXI-qCymGCG0gQ9Au6bpos,73
38
+ spl_core/kickstart/templates/project/build.ps1,sha256=oQSCxUoleJSkBSRW3nTqg_23eANh9mfjlJPgTfH21Ak,11057
39
+ spl_core/kickstart/templates/project/conf.py,sha256=wGhSzSyUx5otw3kPeOzIEKFIxA-Z70K-foUuQWYBY64,6775
40
+ spl_core/kickstart/templates/project/doc/Doxyfile.in,sha256=NOj07VHEUeEfYIrETKg--G2ShBXMqFh61q1FdhfY-5U,123953
41
+ spl_core/kickstart/templates/project/doc/common/index.rst,sha256=tOqSYkFdxIJtBcllwMwWEkw9_cbbAsg9NPU2AanyJNc,91
42
+ spl_core/kickstart/templates/project/doc/components/index.rst,sha256=1n4qdJD38Q-sRaiqW3rF2rQK9ag3OchslA8uTzmarkM,590
43
+ spl_core/kickstart/templates/project/doc/doxygen-awesome/LICENSE,sha256=49p1TD9lfMeFlPouijKDZl94x0PfJIX6nkmKiXMFEZE,1072
44
+ spl_core/kickstart/templates/project/doc/doxygen-awesome/doxygen-awesome.css,sha256=bNr_9KABkHTxWMkHqXJcXXxEScP2nlnJ2eV9me1Vjmw,63045
45
+ spl_core/kickstart/templates/project/doc/software_architecture/index.rst,sha256=Oq602GCpTJmV-uQDfsvgcEChSLGNDPIjBecCXv5wEg0,44
46
+ spl_core/kickstart/templates/project/doc/software_requirements/index.rst,sha256=FmnMsx1Ih2qulGuLcch7vBW5Gxkv42P3BeAeih7c3Ro,95
47
+ spl_core/kickstart/templates/project/doc/test_report_template.txt,sha256=Pj9npGI1sVMDBrDQJ1jS_T_ysLgwvBzNO8T5FMjYsIE,1213
48
+ spl_core/kickstart/templates/project/index.rst,sha256=7HHmhxme_djB5iostqFc_7U8liKmTCNQZraC9nopEfg,1044
49
+ spl_core/kickstart/templates/project/pipfile,sha256=vV8woA8pI6kHXBf00_68802SW5o-wG44K-64apbv0wI,85
50
+ spl_core/kickstart/templates/project/pytest.ini,sha256=TB-kMa5upQAA6NgiPrTxVWCFaDTIoZN04ZnQL6byzjQ,159
51
+ spl_core/kickstart/templates/project/scoopfile.json,sha256=DcfZ8jYf9hmPHM-AWwnPKQJCzRG3fCuYtMeoY01nkag,219
52
+ spl_core/kickstart/templates/project/tools/toolchains/clang/toolchain.cmake,sha256=fDD-eb6DeqmAYkCbILL2V5PLnCPRdTu1Tpg0WfDC_dE,713
53
+ spl_core/kickstart/templates/project/tools/toolchains/gcc/toolchain.cmake,sha256=AmLzPyhTgfc_Dsre4AlsvSOkVGW6VswWvrEnUL8JLhA,183
54
+ spl_core/main.py,sha256=_hL4j155WZMXog_755bgAH1PeUwvTdJZvVdVw9EWhvo,1225
55
+ spl_core/test_utils/base_variant_test_runner.py,sha256=4ugideRMJqj1oaSboMSK7qZnAwg3O8Ysk23SdIi_t1o,3221
56
+ spl_core/test_utils/spl_build.py,sha256=TtYFTY94Fa9eXdtY9NavrCulx-NEONRm81GSLHGB_yQ,5599
57
+ spl_core-4.2.0.dist-info/LICENSE,sha256=UjjA0o8f5tT3wVm7qodTLAhPWLl6kgVyn9FPAd1VeYY,1099
58
+ spl_core-4.2.0.dist-info/METADATA,sha256=UkiI2qgKeYngvGmzv_dCUTc3PNVq6OxP791HfUb5idc,2590
59
+ spl_core-4.2.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
60
+ spl_core-4.2.0.dist-info/RECORD,,
spl_core/common/cmake.py DELETED
@@ -1,52 +0,0 @@
1
- import logging
2
- import subprocess
3
- from subprocess import CompletedProcess
4
-
5
- from spl_core.project_creator.variant import Variant
6
- from spl_core.project_creator.workspace_artifacts import WorkspaceArtifacts
7
-
8
-
9
- class CMake:
10
- executable = "cmake"
11
-
12
- def __init__(self, workspace_artifacts: WorkspaceArtifacts):
13
- self.logger = logging.getLogger(__name__)
14
- self.workspace_artifacts = workspace_artifacts
15
-
16
- def run(self, variant: Variant, build_kit: str = "prod", target: str = "all") -> CompletedProcess[bytes]:
17
- ret_status = self.configure(variant, build_kit)
18
- if ret_status.returncode == 0:
19
- ret_status = self.build(variant, build_kit, target)
20
- return ret_status
21
-
22
- def configure(self, variant: Variant, build_kit: str = "prod") -> CompletedProcess[bytes]:
23
- arguments = (
24
- f" --log-level=DEBUG"
25
- f" -S{self.workspace_artifacts.root_dir}"
26
- f" -B{self.workspace_artifacts.get_build_dir(variant, build_kit)}"
27
- f" -G Ninja "
28
- f" -DBUILD_KIT:STRING={build_kit}"
29
- f" -DVARIANT:STRING={variant.to_string()}"
30
- f" -DCMAKE_BUILD_TYPE:STRING={variant.to_string('_')}"
31
- )
32
- if build_kit == "test":
33
- toolchain = self.workspace_artifacts.root_dir.joinpath(
34
- "tools\\toolchains\\gcc\\toolchain.cmake"
35
- )
36
- arguments += f" -DCMAKE_TOOLCHAIN_FILE={toolchain}"
37
- return self.run_cmake(arguments)
38
-
39
- def build(
40
- self, variant: Variant, build_kit: str = "prod", target: str = "all"
41
- ) -> CompletedProcess[bytes]:
42
- arguments = (
43
- f" --build {self.workspace_artifacts.get_build_dir(variant, build_kit)}"
44
- f" --config {variant.to_string('_')}"
45
- f" --target {target} -- "
46
- )
47
- return self.run_cmake(arguments)
48
-
49
- def run_cmake(self, arguments: str) -> CompletedProcess[bytes]:
50
- command = self.executable + " " + arguments
51
- print(f"Running {command}")
52
- return subprocess.run(command.split())
@@ -1,133 +0,0 @@
1
- import argparse
2
- import logging
3
- import shutil
4
- from pathlib import Path
5
- from typing import Any, Dict, List
6
-
7
- from cookiecutter.main import cookiecutter
8
-
9
- from spl_core.common.path import existing_path
10
- from spl_core.project_creator.variant import Variant
11
- from spl_core.project_creator.workspace_artifacts import WorkspaceArtifacts
12
-
13
-
14
- class Creator:
15
- def __init__(self, project_name: str, out_dir: Path):
16
- self.logger = logging.getLogger(__name__)
17
- self.project_name = project_name
18
- self.out_dir = out_dir.absolute()
19
- self.project_root_dir = self.out_dir.joinpath(self.project_name)
20
- self.project_artifacts = WorkspaceArtifacts(self.project_root_dir)
21
-
22
- @classmethod
23
- def from_folder(cls, project_dir: Path) -> "Creator":
24
- return cls(project_dir.name, project_dir.parent)
25
-
26
- @staticmethod
27
- def create_project_description(name: str, variants: List[Variant], touch_only_variants_data: bool = False) -> Dict[str, Any]:
28
- project_description = {"name": name, "variants": {}, "touch_components": not touch_only_variants_data, "touch_tools": not touch_only_variants_data}
29
- variants.sort()
30
- for index, variant in enumerate(variants):
31
- project_description["variants"] = {str(index): vars(variant) for index, variant in enumerate(variants)}
32
- return project_description
33
-
34
- @property
35
- def project_template_path(self) -> Path:
36
- return Path(__file__).parent.joinpath("templates/project")
37
-
38
- @property
39
- def variant_template_path(self) -> Path:
40
- return Path(__file__).parent.joinpath("templates/variant")
41
-
42
- def materialize(self, variants: List[Variant]) -> Path:
43
- result_path = self.materialize_workspace(variants)
44
- self.materialize_variants(variants)
45
- self.logger.info(f"Project created under: {result_path}")
46
- return Path(result_path)
47
-
48
- def materialize_workspace(self, variants: List[Variant], touch_only_variants_data: bool = False) -> Path:
49
- project_description = self.create_project_description(self.project_name, variants, touch_only_variants_data)
50
- result_path = cookiecutter(str(self.project_template_path), output_dir=f"{self.out_dir}", no_input=True, extra_context=project_description, overwrite_if_exists=True)
51
- return result_path
52
-
53
- def materialize_variants(self, variants: List[Variant]) -> None:
54
- for variant in variants:
55
- self.materialize_variant(vars(variant), self.project_artifacts.variants_dir)
56
-
57
- def materialize_variant(self, variant_description: Dict[str, Any], out_dir: Path) -> Path:
58
- result_path = cookiecutter(str(self.variant_template_path), output_dir=f"{out_dir}", no_input=True, extra_context=variant_description, overwrite_if_exists=True)
59
- self.logger.info(f"Variant created under: {result_path}")
60
- return Path(result_path)
61
-
62
- def add_variants(self, variants: List[Variant]) -> None:
63
- existing_variants = self.collect_project_variants()
64
- new_variants = [variant for variant in variants if variant not in existing_variants]
65
- if len(new_variants):
66
- self.materialize_workspace(new_variants + existing_variants, touch_only_variants_data=True)
67
- self.materialize_variants(variants)
68
- if len(new_variants) != len(variants):
69
- self.logger.warning(f"Skip adding variants" f" ({', '.join([str(v) for v in variants if v not in new_variants])})" f" because they already exist in {self.project_root_dir}.")
70
- else:
71
- self.logger.warning(f"Nothing to add. All the provided variants" f" ({', '.join([str(v) for v in variants])}) already exist in {self.project_root_dir}.")
72
-
73
- def delete_variants(self, variants: List[Variant]) -> None:
74
- existing_variants = self.collect_project_variants()
75
- variants_to_be_deleted = [variant for variant in variants if variant in existing_variants]
76
- if len(variants_to_be_deleted):
77
- remaining_variants = list(set(existing_variants) - set(variants_to_be_deleted))
78
- self.materialize_workspace(remaining_variants, touch_only_variants_data=True)
79
- for variant in variants_to_be_deleted:
80
- self.delete_variant_dir(variant)
81
- if len(variants_to_be_deleted) != len(variants):
82
- self.logger.warning(f"Skip deleting variants" f" ({', '.join([str(v) for v in variants if v not in variants_to_be_deleted])})" f" because they do not exist in {self.project_root_dir}.")
83
- else:
84
- self.logger.warning(f"Nothing to delete. None of the provided variants" f" ({', '.join([str(v) for v in variants])}) exists in {self.project_root_dir}.")
85
-
86
- def delete_variant_dir(self, variant: Variant) -> None:
87
- variant_dir = self.project_artifacts.variants_dir.joinpath(f"{variant}")
88
- if variant_dir.exists():
89
- shutil.rmtree(variant_dir)
90
-
91
- def collect_project_variants(self) -> List[Variant]:
92
- variants = []
93
- variant_dirs = self.project_artifacts.variants_dir.glob("*/*/")
94
- for variant_dir in variant_dirs:
95
- variants.append(Variant(variant_dir.parent.name, variant_dir.name))
96
- return variants
97
-
98
-
99
- def main(command_arguments: Any = None) -> None:
100
- arguments = parse_arguments(command_arguments)
101
- if arguments.command_scope == "workspace":
102
- Creator(arguments.name, arguments.out_dir).materialize(arguments.variant)
103
- else: # scope is variant
104
- creator = Creator.from_folder(arguments.workspace_dir)
105
- if arguments.add:
106
- creator.add_variants(arguments.add)
107
- else:
108
- creator.delete_variants(arguments.delete)
109
-
110
-
111
- def parse_arguments(command_arguments: Any = None) -> argparse.Namespace:
112
- parser = argparse.ArgumentParser(description="Workspace creator")
113
- subparsers = parser.add_subparsers(dest="command_scope")
114
-
115
- parser_workspace = subparsers.add_parser("workspace", help="Create a workspace")
116
- parser_workspace.add_argument("--name", required=True, type=str, help="Workspace name. A directory with this name will be created in the <out_dir>.")
117
- parser_workspace.add_argument("--variant", required=True, action="append", type=Variant.from_string, help="Variant name as <flavor>/<subsystem>. E.g. FLV1/SYS1. " "This option can be used multiple times.")
118
- parser_workspace.add_argument("--out_dir", required=True, type=existing_path, help="Target directory where the workspace folder will be created.")
119
-
120
- parser_variant = subparsers.add_parser("variant", help="Add/delete variant to existing workspace")
121
- command_group = parser_variant.add_mutually_exclusive_group(required=True)
122
- command_group.add_argument(
123
- "--add", action="append", type=Variant.from_string, metavar="VARIANT", help="Add a variant to a workspace. Variant name as <flavor>/<subsystem>." " E.g. FLV1/SYS1. This option can be used multiple times."
124
- )
125
- command_group.add_argument(
126
- "--delete", action="append", type=Variant.from_string, metavar="VARIANT", help="Delete a variant from a workspace. Variant name as <flavor>/<subsystem>." " E.g. FLV1/SYS1. This option can be used multiple times."
127
- )
128
- parser_variant.add_argument("--workspace_dir", required=True, type=existing_path, help="Workspace root directory.")
129
- return parser.parse_args(command_arguments)
130
-
131
-
132
- if __name__ == "__main__":
133
- main()
@@ -1,14 +0,0 @@
1
- {
2
- "name": "project",
3
- "touch_components": "True",
4
- "touch_tools": "True",
5
- "variants": {
6
- "1": {
7
- "flavor": "flavor",
8
- "subsystem": "subsystem"
9
- }
10
- },
11
- "_copy_without_render": [
12
- "*.rst"
13
- ]
14
- }
@@ -1,2 +0,0 @@
1
- [flake8]
2
- max-line-length = 240
@@ -1,18 +0,0 @@
1
- {
2
- "variant": {
3
- "choices": {
4
- {%- for variant in cookiecutter.variants.values() -%}
5
- "{{ variant["flavor"] }}/{{ variant["subsystem"] }}": {
6
- "buildType": "{{ variant["flavor"] }}_{{ variant["subsystem"] }}",
7
- "long": "select to build variant '{{ variant["flavor"] }}/{{ variant["subsystem"] }}'",
8
- "settings": {
9
- "FLAVOR": "{{ variant["flavor"] }}",
10
- "SUBSYSTEM": "{{ variant["subsystem"] }}"
11
- },
12
- "short": "{{ variant["flavor"] }}/{{ variant["subsystem"] }}"
13
- }{{ ", " if not loop.last else "" }}
14
- {%- endfor -%}
15
- },
16
- "default": "{{ cookiecutter.variants["0"]["flavor"] }}/{{ cookiecutter.variants["0"]["subsystem"] }}"
17
- }
18
- }
@@ -1,18 +0,0 @@
1
- {
2
- "recommendations": [
3
- "mhutchie.git-graph",
4
- "ms-vscode.cmake-tools",
5
- "twxs.cmake",
6
- "ms-vscode.cpptools",
7
- "ms-vscode.cpptools-themes",
8
- "visualstudioexptteam.intellicode-api-usage-examples",
9
- "visualstudioexptteam.vscodeintellicode",
10
- "haugerbr.project-tasks",
11
- "avengineers.show-link-list",
12
- "ms-python.vscode-pylance",
13
- "ms-python.python",
14
- "donjayamanne.python-environment-manager",
15
- "felipecaputo.git-project-manager",
16
- "ms-vscode.powershell"
17
- ]
18
- }
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2023 - present Marquardt GmbH and members of AVENGINEERS
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1,30 +0,0 @@
1
- [[source]]
2
- url = "https://pypi.org/simple"
3
- verify_ssl = true
4
- name = "pypi"
5
-
6
- [packages]
7
- spl-core = "*"
8
- jinja2 = "*"
9
- pytest = "*"
10
- pytest-env = "*"
11
- testfixtures = "*"
12
- junitparser = "*"
13
- mashumaro = "*"
14
- loguru = "*"
15
- black = "*"
16
- flake8 = "*"
17
- sphinx = "*"
18
- sphinx-rtd-theme = "*"
19
- sphinxcontrib-mermaid = "*"
20
- sphinx-needs = "*"
21
- sphinx-test-reports = "*"
22
- doxysphinx = "*"
23
- sphinx-rtd-size = "*"
24
- sphinxcontrib-datatemplates = "*"
25
- pyelftools = "*"
26
- sphinxcontrib-plantuml = "*"
27
- pipenv = "*"
28
-
29
- [requires]
30
- python_version = "3.11"
@@ -1,7 +0,0 @@
1
- # Software Product Line {{cookiecutter.name}}
2
-
3
-
4
- ## Preparation
5
-
6
- You can install required tools and install some VS Code extensions. The installer uses Scoop/PowerShell, so it will only run on Windows. The installation is done by executing `install-mandatory.bat`. In case you are sitting behind a proxy server, make sure to add:
7
-
@@ -1 +0,0 @@
1
- call %~dp0build.bat -install %* || exit /b 1