PhoenixGenerator  2.0.4
Set of tools to generate code
Loading...
Searching...
No Matches
simple_project_generator.cpp File Reference
#include <ctime>
#include "directory_replace_placeholder.h"
#include "simple_project_generator.h"
#include "parserClassConfig.h"
#include "CppTraitFromString.h"
#include "CppTraitSetter.h"
#include "CppTraitGetter.h"
#include "CppTraitCopy.h"
#include "CppTraitTypeStream.h"
#include "CppTraitDataStream.h"
#include "CppTraitConfigStream.h"
#include "CppTraitCheckStream.h"
#include "PTraitBackendManager.h"
#include "WrapperTraitGetterSetter.h"
#include "WrapperTraitTypeStream.h"
#include "WrapperTraitDataStream.h"
#include "PWrapperTraitBackendManager.h"
#include "generator_class_cpp.h"
#include "wrapper_generator_struct.h"
#include "simpleClassGenerator.h"
+ Include dependency graph for simple_project_generator.cpp:

Go to the source code of this file.

Functions

PMapString generateAllReplacementData (const ProjectConfig &projectConfig)
 Generate all replacement data for project generation.
 
PString generateAuthorListPixi (const ProjectConfig &projectConfig)
 Generate author list for Pixi.
 
PString generateCmakeFindBody (const ProjectConfig &projectConfig)
 Generate CMake find_package commands for non-Phoenix dependencies.
 
PString generateKeywordsBody (const ProjectConfig &projectConfig)
 Generate keywords list for codemeta.json.
 
PString generateMaintainer (const ProjectConfig &projectConfig)
 Generate maintainer information for codemeta.json.
 
PString generateMarkdownDepList (const ProjectConfig &projectConfig)
 Generate markdown list of Phoenix dependencies.
 
PString generatePhoenixFindModule (const ProjectConfig &projectConfig)
 Generate Phoenix find module list.
 
PString generatePhoenixGlobalDep (const ProjectConfig &projectConfig)
 Generate Phoenix global dependencies variable.
 
PString generatePhoenixPullExtraModule (const ProjectConfig &projectConfig)
 Generate Phoenix pull_extra_module commands.
 
PString generatePixiBody (const ProjectConfig &projectConfig)
 Generate Pixi dependencies.
 
PString generateProjectAuthorList (const ProjectConfig &projectConfig)
 Generate project author list for codemeta.json.
 
PString generateProjectContributorList (const ProjectConfig &projectConfig)
 Generate project contributor list for codemeta.json.
 
PMapString generateReplacementMap (const ProjectConfig &projectConfig, const PString &cmakeFindBody, const PString &phoenixPullExtraModule, const PString &phoenixFindModule, const PString &phoenixGlobalDep, const PString &targetLinkBody, const PString &pixiBody, const PString &markdownDepList, const PString &authorListPixi, const PString &projectAuthorList, const PString &projectContributorList, const PString &maintainer, const PString &keywordsBody, const PString &dateStr)
 Generate the replacement map for placeholders.
 
PString generateTargetLinkBody (const ProjectConfig &projectConfig)
 Generate target_link_libraries command.
 
bool isPhoenixDependency (const PString &packageName)
 Check if a package is a Phoenix dependency.
 
bool simple_project_generate_source (const ProjectParam &projectParam)
 Save generated sources of project.
 
bool simple_project_generator (const PPath &descriptionFile, const PVecPath &vecClassConfigFile, const PString &projectType, const GeneratorMode &mode)
 Create a simple project from a configuration.
 
bool simple_project_load_config (ProjectParam &param, const PPath &pdataDir, const PVecPath &vecClassConfigFile)
 Load configuration pdata of generated sources.
 

Function Documentation

◆ generateAllReplacementData()

PMapString generateAllReplacementData ( const ProjectConfig & projectConfig)

Generate all replacement data for project generation.

Parameters
projectConfig: project configuration
Returns
replacement map for placeholders

Definition at line 322 of file simple_project_generator.cpp.

322 {
323 // Generate various bodies using dedicated functions
324 PString cmakeFindBody = generateCmakeFindBody(projectConfig);
325 PString phoenixPullExtraModule = generatePhoenixPullExtraModule(projectConfig);
326 PString phoenixFindModule = generatePhoenixFindModule(projectConfig);
327 PString phoenixGlobalDep = generatePhoenixGlobalDep(projectConfig);
328 PString targetLinkBody = generateTargetLinkBody(projectConfig);
329 PString pixiBody = generatePixiBody(projectConfig);
330 PString markdownDepList = generateMarkdownDepList(projectConfig);
331 PString authorListPixi = generateAuthorListPixi(projectConfig);
332 PString projectAuthorList = generateProjectAuthorList(projectConfig);
333 PString projectContributorList = generateProjectContributorList(projectConfig);
334 PString maintainer = generateMaintainer(projectConfig);
335 PString keywordsBody = generateKeywordsBody(projectConfig);
336
337 time_t timestamp;
338 PString dateStr = ctime(&(timestamp = time(nullptr)));
339 dateStr = dateStr.eraseLastChar("\n"); // Remove the trailing \n
340
341 // Generate the replacement map
342 return generateReplacementMap(projectConfig, cmakeFindBody, phoenixPullExtraModule,
343 phoenixFindModule, phoenixGlobalDep, targetLinkBody,
344 pixiBody, markdownDepList, authorListPixi, projectAuthorList,
345 projectContributorList, maintainer, keywordsBody, dateStr);
346}
PString generateAuthorListPixi(const ProjectConfig &projectConfig)
Generate author list for Pixi.
PString generateCmakeFindBody(const ProjectConfig &projectConfig)
Generate CMake find_package commands for non-Phoenix dependencies.
PString generateProjectContributorList(const ProjectConfig &projectConfig)
Generate project contributor list for codemeta.json.
PString generateKeywordsBody(const ProjectConfig &projectConfig)
Generate keywords list for codemeta.json.
PString generatePhoenixFindModule(const ProjectConfig &projectConfig)
Generate Phoenix find module list.
PString generateMarkdownDepList(const ProjectConfig &projectConfig)
Generate markdown list of Phoenix dependencies.
PString generatePhoenixPullExtraModule(const ProjectConfig &projectConfig)
Generate Phoenix pull_extra_module commands.
PString generatePixiBody(const ProjectConfig &projectConfig)
Generate Pixi dependencies.
PString generateMaintainer(const ProjectConfig &projectConfig)
Generate maintainer information for codemeta.json.
PString generateTargetLinkBody(const ProjectConfig &projectConfig)
Generate target_link_libraries command.
PString generateProjectAuthorList(const ProjectConfig &projectConfig)
Generate project author list for codemeta.json.
PString generatePhoenixGlobalDep(const ProjectConfig &projectConfig)
Generate Phoenix global dependencies variable.
PMapString generateReplacementMap(const ProjectConfig &projectConfig, const PString &cmakeFindBody, const PString &phoenixPullExtraModule, const PString &phoenixFindModule, const PString &phoenixGlobalDep, const PString &targetLinkBody, const PString &pixiBody, const PString &markdownDepList, const PString &authorListPixi, const PString &projectAuthorList, const PString &projectContributorList, const PString &maintainer, const PString &keywordsBody, const PString &dateStr)
Generate the replacement map for placeholders.

References generateAuthorListPixi(), generateCmakeFindBody(), generateKeywordsBody(), generateMaintainer(), generateMarkdownDepList(), generatePhoenixFindModule(), generatePhoenixGlobalDep(), generatePhoenixPullExtraModule(), generatePixiBody(), generateProjectAuthorList(), generateProjectContributorList(), generateReplacementMap(), and generateTargetLinkBody().

Referenced by simple_project_generator().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ generateAuthorListPixi()

PString generateAuthorListPixi ( const ProjectConfig & projectConfig)

Generate author list for Pixi.

Parameters
projectConfig: project configuration
Returns
author list for Pixi

Definition at line 173 of file simple_project_generator.cpp.

173 {
174 PString authorListPixi;
175 authorListPixi += "authors = [\n";
176 for(ProjectMembersMap::const_iterator it = projectConfig.authorMap.begin(); it != projectConfig.authorMap.end(); ++it){
177 const PProjectMembers & author = it->second;
178 authorListPixi += " \"" + author.getFirstName() + " " + author.getLastName() + " <" + author.getEmail() + ">\",\n";
179 }
180 authorListPixi += "]\n";
181 return authorListPixi;
182}
Describes a package attributes.
const PString & getFirstName() const
Gets the firstName of the PProjectMembers.
const PString & getLastName() const
Gets the lastName of the PProjectMembers.
const PString & getEmail() const
Gets the email of the PProjectMembers.
ProjectMembersMap authorMap
Map of authors of the project.

References ProjectConfig::authorMap, PProjectMembers::getEmail(), PProjectMembers::getFirstName(), and PProjectMembers::getLastName().

Referenced by generateAllReplacementData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ generateCmakeFindBody()

PString generateCmakeFindBody ( const ProjectConfig & projectConfig)

Generate CMake find_package commands for non-Phoenix dependencies.

Parameters
projectConfig: project configuration
Returns
CMake find_package commands

Definition at line 51 of file simple_project_generator.cpp.

51 {
52 PString cmakeFindBody;
53 for(PackageMap::const_iterator depIt = projectConfig.mapDependencies.begin(); depIt != projectConfig.mapDependencies.end(); ++depIt){
54 const PPackageAttribute & pkgAttr = depIt->second;
55 if(!isPhoenixDependency(pkgAttr.getName())){
56 if(!pkgAttr.getCmakeFind().empty()){
57 cmakeFindBody += "find_package("+pkgAttr.getCmakeFind()+")";
58 }
59 }
60 }
61 return cmakeFindBody;
62}
Describes a package attributes.
const PString & getName() const
Gets the name of the PPackageAttribute.
const PString & getCmakeFind() const
Gets the cmakeFind of the PPackageAttribute.
bool isPhoenixDependency(const PString &packageName)
Check if a package is a Phoenix dependency.
PackageMap mapDependencies
Map of all dependencies of the project with structure PPackageAttribute values.

References PPackageAttribute::getCmakeFind(), PPackageAttribute::getName(), isPhoenixDependency(), and ProjectConfig::mapDependencies.

Referenced by generateAllReplacementData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ generateKeywordsBody()

PString generateKeywordsBody ( const ProjectConfig & projectConfig)

Generate keywords list for codemeta.json.

Parameters
projectConfig: project configuration
Returns
keywords list

Definition at line 256 of file simple_project_generator.cpp.

256 {
257 PString keywordsBody;
258 if(!projectConfig.keywordList.empty()){
259 bool firstKeyword = true;
260 for(std::vector<PString>::const_iterator it = projectConfig.keywordList.begin(); it != projectConfig.keywordList.end(); ++it){
261 if(!firstKeyword) keywordsBody += ",\n";
262 keywordsBody += " \"" + *it + "\"";
263 firstKeyword = false;
264 }
265 }
266 return keywordsBody;
267}
std::vector< PString > keywordList
List of keywords linked to the project.

References ProjectConfig::keywordList.

Referenced by generateAllReplacementData().

+ Here is the caller graph for this function:

◆ generateMaintainer()

PString generateMaintainer ( const ProjectConfig & projectConfig)

Generate maintainer information for codemeta.json.

Parameters
projectConfig: project configuration
Returns
maintainer information

Definition at line 238 of file simple_project_generator.cpp.

238 {
239 PString maintainer;
240 const PProjectMembers & maintainerPerson = projectConfig.maintainerMap.begin()->second;
241 maintainer += " \"@type\": \"Person\",\n";
242 maintainer += " \"givenName\": \"" + maintainerPerson.getFirstName() + "\",\n";
243 maintainer += " \"familyName\": \"" + maintainerPerson.getLastName() + "\",\n";
244 maintainer += " \"email\": \"" + maintainerPerson.getEmail() + "\",\n";
245 maintainer += " \"affiliation\": {\n";
246 maintainer += " \"@type\": \"Organization\",\n";
247 maintainer += " \"name\": \"" + maintainerPerson.getAffiliation() + "\"\n";
248 maintainer += " }";
249 return maintainer;
250}
const PString & getAffiliation() const
Gets the affiliation of the PProjectMembers.
ProjectMembersMap maintainerMap
Map of maintainers of the project.

References PProjectMembers::getAffiliation(), PProjectMembers::getEmail(), PProjectMembers::getFirstName(), PProjectMembers::getLastName(), and ProjectConfig::maintainerMap.

Referenced by generateAllReplacementData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ generateMarkdownDepList()

PString generateMarkdownDepList ( const ProjectConfig & projectConfig)

Generate markdown list of Phoenix dependencies.

Parameters
projectConfig: project configuration
Returns
markdown list of Phoenix dependencies

Definition at line 158 of file simple_project_generator.cpp.

158 {
159 PString packageMdList;
160 for(PackageMap::const_iterator depIt = projectConfig.mapDependencies.begin(); depIt != projectConfig.mapDependencies.end(); ++depIt){
161 const PPackageAttribute & pkgAttr = depIt->second;
162 if(isPhoenixDependency(pkgAttr.getName())){
163 packageMdList += "- ["+pkgAttr.getName()+"]("+pkgAttr.getUrl()+")\n";
164 }
165 }
166 return packageMdList;
167}
const PString & getUrl() const
Gets the url of the PPackageAttribute.

References PPackageAttribute::getName(), PPackageAttribute::getUrl(), isPhoenixDependency(), and ProjectConfig::mapDependencies.

Referenced by generateAllReplacementData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ generatePhoenixFindModule()

PString generatePhoenixFindModule ( const ProjectConfig & projectConfig)

Generate Phoenix find module list.

Parameters
projectConfig: project configuration
Returns
Phoenix find module list

Definition at line 83 of file simple_project_generator.cpp.

83 {
84 PString phoenixFindModule;
85 for(PackageMap::const_iterator depIt = projectConfig.mapDependencies.begin(); depIt != projectConfig.mapDependencies.end(); ++depIt){
86 const PPackageAttribute & pkgAttr = depIt->second;
87 if(isPhoenixDependency(pkgAttr.getName())){
88 phoenixFindModule += " "+pkgAttr.getName();
89 }
90 }
91 return phoenixFindModule;
92}

References PPackageAttribute::getName(), isPhoenixDependency(), and ProjectConfig::mapDependencies.

Referenced by generateAllReplacementData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ generatePhoenixGlobalDep()

PString generatePhoenixGlobalDep ( const ProjectConfig & projectConfig)

Generate Phoenix global dependencies variable.

Parameters
projectConfig: project configuration
Returns
Phoenix global dependencies variable

Definition at line 98 of file simple_project_generator.cpp.

98 {
99 PString phoenixGlobalDep;
100 phoenixGlobalDep += "set(" + projectConfig.name.toUpper() + "_TEST_DEPENDENCIES\n";
101 phoenixGlobalDep += "\t" + projectConfig.name.toSnakeCase() + "\n";
102 for(PackageMap::const_reverse_iterator depIt = projectConfig.mapDependencies.rbegin(); depIt != projectConfig.mapDependencies.rend(); ++depIt){
103 const PPackageAttribute & pkgAttr = depIt->second;
104 if(isPhoenixDependency(pkgAttr.getName())){
105 phoenixGlobalDep += "\t"+pkgAttr.getCmakeLib()+"\n";
106 }
107 }
108 phoenixGlobalDep += ")";
109 return phoenixGlobalDep;
110}
const PString & getCmakeLib() const
Gets the cmakeLib of the PPackageAttribute.
PString name
Name of the project.

References PPackageAttribute::getCmakeLib(), PPackageAttribute::getName(), isPhoenixDependency(), ProjectConfig::mapDependencies, and ProjectConfig::name.

Referenced by generateAllReplacementData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ generatePhoenixPullExtraModule()

PString generatePhoenixPullExtraModule ( const ProjectConfig & projectConfig)

Generate Phoenix pull_extra_module commands.

Parameters
projectConfig: project configuration
Returns
Phoenix pull_extra_module commands

Definition at line 68 of file simple_project_generator.cpp.

68 {
69 PString phoenixPullExtraModule;
70 for(PackageMap::const_iterator depIt = projectConfig.mapDependencies.begin(); depIt != projectConfig.mapDependencies.end(); ++depIt){
71 const PPackageAttribute & pkgAttr = depIt->second;
72 if(isPhoenixDependency(pkgAttr.getName())){
73 phoenixPullExtraModule += "pull_extra_module(\""+pkgAttr.getName()+"\" \""+pkgAttr.getUrl()+"\")\n";
74 }
75 }
76 return phoenixPullExtraModule;
77}

References PPackageAttribute::getName(), PPackageAttribute::getUrl(), isPhoenixDependency(), and ProjectConfig::mapDependencies.

Referenced by generateAllReplacementData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ generatePixiBody()

PString generatePixiBody ( const ProjectConfig & projectConfig)

Generate Pixi dependencies.

Parameters
projectConfig: project configuration
Returns
Pixi dependencies

Definition at line 133 of file simple_project_generator.cpp.

133 {
134 PString pixiBody;
135 for(PackageMap::const_iterator depIt = projectConfig.mapDependencies.begin(); depIt != projectConfig.mapDependencies.end(); ++depIt){
136 const PPackageAttribute & pkgAttr = depIt->second;
137 PString pixi_name = pkgAttr.getPixiName().toLower();
138 PString min_version = pkgAttr.getMinVersion();
139 PString max_version = pkgAttr.getMaxVersion();
140 if(pixi_name == "") continue;
141 else if(min_version.empty() && max_version.empty()){
142 pixiBody += pixi_name + " = \"*\"\n";
143 }else if(max_version.empty()){
144 pixiBody += pixi_name + " = \"" + min_version + "\"\n";
145 }else{
146 pixiBody += pixi_name + " = \"" + min_version;
147 if(!min_version.empty() && !max_version.empty()) pixiBody += ",";
148 pixiBody += max_version + "\"\n";
149 }
150 }
151 return pixiBody;
152}
const PString & getMaxVersion() const
Gets the maxVersion of the PPackageAttribute.
const PString & getMinVersion() const
Gets the minVersion of the PPackageAttribute.
const PString & getPixiName() const
Gets the pixiName of the PPackageAttribute.

References PPackageAttribute::getMaxVersion(), PPackageAttribute::getMinVersion(), PPackageAttribute::getPixiName(), and ProjectConfig::mapDependencies.

Referenced by generateAllReplacementData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ generateProjectAuthorList()

PString generateProjectAuthorList ( const ProjectConfig & projectConfig)

Generate project author list for codemeta.json.

Parameters
projectConfig: project configuration
Returns
project author list

Definition at line 188 of file simple_project_generator.cpp.

188 {
189 PString projectAuthorList;
190 bool firstAuthor = true;
191 for(ProjectMembersMap::const_iterator it = projectConfig.authorMap.begin(); it != projectConfig.authorMap.end(); ++it){
192 const PProjectMembers & author = it->second;
193 if(!firstAuthor) projectAuthorList += ",\n";
194 projectAuthorList += " {\n";
195 projectAuthorList += " \"@type\": \"Person\",\n";
196 projectAuthorList += " \"givenName\": \"" + author.getFirstName() + "\",\n";
197 projectAuthorList += " \"familyName\": \"" + author.getLastName() + "\",\n";
198 projectAuthorList += " \"email\": \"" + author.getEmail() + "\",\n";
199 projectAuthorList += " \"affiliation\": {\n";
200 projectAuthorList += " \"@type\": \"Organization\",\n";
201 projectAuthorList += " \"name\": \"" + author.getAffiliation() + "\"\n";
202 projectAuthorList += " }\n";
203 projectAuthorList += " }";
204 firstAuthor = false;
205 }
206 return projectAuthorList;
207}

References ProjectConfig::authorMap, PProjectMembers::getAffiliation(), PProjectMembers::getEmail(), PProjectMembers::getFirstName(), and PProjectMembers::getLastName().

Referenced by generateAllReplacementData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ generateProjectContributorList()

PString generateProjectContributorList ( const ProjectConfig & projectConfig)

Generate project contributor list for codemeta.json.

Parameters
projectConfig: project configuration
Returns
project contributor list

Definition at line 213 of file simple_project_generator.cpp.

213 {
214 PString projectContributorList;
215 bool firstContributor = true;
216 for(ProjectMembersMap::const_iterator it = projectConfig.contributorMap.begin(); it != projectConfig.contributorMap.end(); ++it){
217 const PProjectMembers & contributor = it->second;
218 if(!firstContributor) projectContributorList += ",\n";
219 projectContributorList += " {\n";
220 projectContributorList += " \"@type\": \"Person\",\n";
221 projectContributorList += " \"givenName\": \"" + contributor.getFirstName() + "\",\n";
222 projectContributorList += " \"familyName\": \"" + contributor.getLastName() + "\",\n";
223 projectContributorList += " \"email\": \"" + contributor.getEmail() + "\",\n";
224 projectContributorList += " \"affiliation\": {\n";
225 projectContributorList += " \"@type\": \"Organization\",\n";
226 projectContributorList += " \"name\": \"" + contributor.getAffiliation() + "\"\n";
227 projectContributorList += " }\n";
228 projectContributorList += " }";
229 firstContributor = false;
230 }
231 return projectContributorList;
232}
ProjectMembersMap contributorMap
Map of the contributors of the project.

References ProjectConfig::contributorMap, PProjectMembers::getAffiliation(), PProjectMembers::getEmail(), PProjectMembers::getFirstName(), and PProjectMembers::getLastName().

Referenced by generateAllReplacementData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ generateReplacementMap()

PMapString generateReplacementMap ( const ProjectConfig & projectConfig,
const PString & cmakeFindBody,
const PString & phoenixPullExtraModule,
const PString & phoenixFindModule,
const PString & phoenixGlobalDep,
const PString & targetLinkBody,
const PString & pixiBody,
const PString & markdownDepList,
const PString & authorListPixi,
const PString & projectAuthorList,
const PString & projectContributorList,
const PString & maintainer,
const PString & keywordsBody,
const PString & dateStr )

Generate the replacement map for placeholders.

Parameters
projectConfig: project configuration
cmakeFindBody: CMake find_package commands
phoenixPullExtraModule: Phoenix pull_extra_module commands
phoenixFindModule: Phoenix find module list
phoenixGlobalDep: Phoenix global dependencies variable
targetLinkBody: target_link_libraries command
pixiBody: Pixi dependencies
authorListPixi: author list for Pixi
projectAuthorList: project author list
projectContributorList: project contributor list
maintainer: maintainer information
keywordsBody: keywords list
dateStr: creation date string
Returns
replacement map for placeholders

Definition at line 285 of file simple_project_generator.cpp.

290{
291 PMapString mapReplace;
292 mapReplace["XXXProjectNameXXX"] = projectConfig.name; //project name
293 mapReplace["XXXPROJECT_NAMEXXX"] = projectConfig.name.toUpper(); //project name uppercase
294 mapReplace["xxxproject_namexxx"] = projectConfig.name.toSnakeCase(); //project library
295 mapReplace["XXXProjectNameDescriptionXXX"] = projectConfig.description; //description
296 mapReplace["XXXProjectNameUrlXXX"] = projectConfig.url; //project url
297 mapReplace["XXXProjectVersionXXX"] = projectConfig.version; //project version
298 mapReplace["XXXProjectNameHomepageUrlXXX"] = projectConfig.url; //project doc url (TODO add it or deduce it from the project url for gitlab)
299 mapReplace["XXXProjectNameRunnerTagXXX"] = projectConfig.runnerTag; //Project CI runner tag
300 mapReplace["XXXProjectFindPackageDependenciesXXX"] = cmakeFindBody; //project find_package
301 mapReplace["XXXProjectPhoenixDependenciesXXX"] = phoenixPullExtraModule; //project pull_extra_module
302 mapReplace["XXXProjectNameCMakeFindDependenciesXXX"] = phoenixFindModule; //project dependencies of phoenix_create_find
303 mapReplace["XXXProjectDependenciesCMakeVarXXX"] = phoenixGlobalDep; //cmake variable to hold test dependencies
304 mapReplace["XXXProjectNameTargetLinkLinDependenciesXXX"] = targetLinkBody; //full target_link_library command of generated lib
305 mapReplace["XXXCxxWorkflowUrlXXX"] = projectConfig.ciToolkitUrl+"@"+projectConfig.ciToolkitVersion; //Url and version of the CI workflow
306 mapReplace["xxxphoenixprojectpixipackagenamexxx"] = projectConfig.name.toLower(); //name of the pixi package
307 mapReplace["xxxprojectnamepixiextradependenciesxxx"] = pixiBody; //extra pixi dependencies
308 mapReplace["XXXProjectNameMarkdownListDependenciesXXX"] = markdownDepList; //markdown list of Phoenix dependencies
309 mapReplace["XXXcreationDateXXX"] = dateStr; //creation date
310 mapReplace["XXXProjectAuthorListPixiXXX"] = authorListPixi; //author list for pixi.toml
311 mapReplace["XXXAuthorListXXX"] = projectAuthorList; //author list for codemeta.json
312 mapReplace["XXXContributorListXXX"] = projectContributorList; //contributor list for codemeta.json
313 mapReplace["XXXMaintainerXXX"] = maintainer; //maintainer for codemeta.json
314 mapReplace["XXXKeywordListsXXX"] = keywordsBody; //keyword list for codemeta.json
315 return mapReplace;
316}
PString description
Description of the project.
PString runnerTag
Specific runner tag if needed (could be MUST_big_runner)
PString ciToolkitUrl
CI toolkit url.
PString ciToolkitVersion
Version of the Phoenix CI toolkit component (optional, defaults to 3.0.4)
PString url
Project url.
PString version
Project version.

References ProjectConfig::ciToolkitUrl, ProjectConfig::ciToolkitVersion, ProjectConfig::description, ProjectConfig::name, ProjectConfig::runnerTag, ProjectConfig::url, and ProjectConfig::version.

Referenced by generateAllReplacementData().

+ Here is the caller graph for this function:

◆ generateTargetLinkBody()

PString generateTargetLinkBody ( const ProjectConfig & projectConfig)

Generate target_link_libraries command.

Parameters
projectConfig: project configuration
Returns
target_link_libraries command

Definition at line 116 of file simple_project_generator.cpp.

116 {
117 PString targetLinkBody;
118 targetLinkBody += "target_link_libraries("+projectConfig.name.toSnakeCase()+" ";
119 for(PackageMap::const_iterator depIt = projectConfig.mapDependencies.begin(); depIt != projectConfig.mapDependencies.end(); ++depIt){
120 const PPackageAttribute & pkgAttr = depIt->second;
121 if(!isPhoenixDependency(pkgAttr.getName())){
122 targetLinkBody += pkgAttr.getCmakeLib()+" ";
123 }
124 }
125 targetLinkBody += ")\n";
126 return targetLinkBody;
127}

References PPackageAttribute::getCmakeLib(), PPackageAttribute::getName(), isPhoenixDependency(), ProjectConfig::mapDependencies, and ProjectConfig::name.

Referenced by generateAllReplacementData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isPhoenixDependency()

bool isPhoenixDependency ( const PString & packageName)

Check if a package is a Phoenix dependency.

Parameters
packageName: name of the package
Returns
true if it's a Phoenix dependency, false otherwise

Definition at line 43 of file simple_project_generator.cpp.

43 {
44 return (packageName.isSameBegining("Phoenix") || packageName.isSameBegining("phoenix"));
45}

Referenced by generateCmakeFindBody(), generateMarkdownDepList(), generatePhoenixFindModule(), generatePhoenixGlobalDep(), generatePhoenixPullExtraModule(), and generateTargetLinkBody().

+ Here is the caller graph for this function:

◆ simple_project_generate_source()

bool simple_project_generate_source ( const ProjectParam & projectParam)

Save generated sources of project.

Parameters
projectParam: ProjectParam to be used
Returns
true on success, false otherwise

Definition at line 379 of file simple_project_generator.cpp.

379 {
380 if(projectParam.mode.type == ProjectType::CPP){
381 PTraitBackendManager manager;
383 manager.addTraitBackend<CppTraitCopy>();
390 return generator_class_full(manager, projectParam);
391 }else if(projectParam.mode.type == ProjectType::WRAPPER){
396 return wrapper_generator_class_full(manager, projectParam);
397 }
398 return false;
399}
Class generator for setter trait.
Class generator for setter trait.
Class generator for setter trait.
Class generator for setter trait.
Class generator for setter trait.
Class generator for setter trait.
Class generator for setter trait.
Class generator for setter trait.
Manager of the Trait backends.
void addTraitBackend()
Add a trait backend into the PTraitBackendManager.
Manager of the Trait backends.
void addTraitBackend()
Add a trait backend into the PWrapperTraitBackendManager.
Class generator for setter trait.
Class generator for setter trait.
Class generator for setter trait.
bool generator_class_full(const PTraitBackendManager &manager, const ProjectParam &projectParam)
Generate the full sources and related unit tests from configuration.
ProjectType::ProjectType type
Type of the project to be generated.
GeneratorMode mode
Mode to be used to generate the project.
bool wrapper_generator_class_full(const PWrapperTraitBackendManager &manager, const ProjectParam &projectParam)
Generate the full sources and related unit tests from configuration.

References PTraitBackendManager::addTraitBackend(), PWrapperTraitBackendManager::addTraitBackend(), ProjectType::CPP, generator_class_full(), ProjectParam::mode, GeneratorMode::type, ProjectType::WRAPPER, and wrapper_generator_class_full().

Referenced by simple_project_generator().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ simple_project_generator()

bool simple_project_generator ( const PPath & descriptionFile,
const PVecPath & vecClassConfigFile,
const PString & projectType,
const GeneratorMode & mode )

Create a simple project from a configuration.

Parameters
descriptionFile: description of the full project
vecClassConfigFile: vector of class configuration files (.pdata files)
projectType: type of the project (SimpleCpp)
mode: all modes of the generator (data/check/type/config stream)
Returns
true on success, false otherwise

Definition at line 408 of file simple_project_generator.cpp.

410{
411 //First, let's read the toml config of the project
412 ProjectConfig projectConfig;
413 if(!project_generator_loadConfig(projectConfig, descriptionFile)){
414 std::cerr << "simple_project_generator : cannot parse project description file '"<<descriptionFile<<"'" << std::endl;
415 return false;
416 }
417 //Then look in the config files if the packages exists
418 if(!project_generator_loadPackageInfo(projectConfig)){
419 std::cerr << "simple_project_generator : cannot find package info of project '"<<projectConfig.name<<"'" << std::endl;
420 return false;
421 }
422 // Generate replacement data
423 PMapString mapReplace = generateAllReplacementData(projectConfig);
424 PPath inputConfigPlaceholderDir = PPath(SYSTEM_INSTALL_DIR) / PPath("share") / PPath("PhoenixGenerator") / PPath("Projects") / PPath(projectType), outputPath("./");
425 if(!directory_replace_placeholder(outputPath, inputConfigPlaceholderDir, mapReplace)){
426 std::cerr << "simple_project_generator : cannot replace placeholder in project generation '"<<projectConfig.name<<"'" << std::endl;
427 return false;
428 }
429 PPath mainPath = PPath(".") / PPath(projectConfig.name);
430 PPath srcPath = mainPath / PPath("src"), pdataDir = mainPath / PPath("pdata");
431 if(!pdataDir.createDirectory()){
432 std::cerr << "simple_project_generator : cannot create pdata directory '"<<pdataDir<<"'" << std::endl;
433 return false;
434 }
435 ProjectParam param;
436 param.mode = mode;
437 param.name = projectConfig.name;
438 param.version = projectConfig.version;
439 param.outputProjectDir = mainPath;
440 param.outputSourceDir = srcPath;
441 if(param.mode.type == ProjectType::CPP){
442 param.outputTestDir = mainPath / PPath("TESTS");
443 }else if(param.mode.type == ProjectType::WRAPPER){
444 param.outputTestDir = mainPath / PPath("tests");
445 }
446
447 if(!simple_project_load_config(param, pdataDir, vecClassConfigFile)){
448 std::cerr << "simple_project_generator : cannot load config to generate project in '"<<srcPath<<"'" << std::endl;
449 return false;
450 }
452 std::cerr << "simple_project_generator : cannot generate sources in '"<<srcPath<<"'" << std::endl;
453 return false;
454 }
455 // Generate class generator script
456 if(!generateClassGeneratorScript(vecClassConfigFile, pdataDir, param.mode)){
457 std::cerr << "simple_project_generator : cannot generate class generator script in pdata directory '"<<pdataDir<<"'" << std::endl;
458 return false;
459 }
460 return true;
461}
bool project_generator_loadPackageInfo(ProjectConfig &config)
This function should load the package info file from share/PhoenixGenerator/Packages and retrieve the...
bool project_generator_loadConfig(ProjectConfig &config, const PPath &descriptionFile)
Load the project configuration.
bool generateClassGeneratorScript(const PVecPath &vecClassConfigFile, const PPath &scriptDir, const GeneratorMode &mode)
Generate a bash script to re generate all the classes from their pdata configuration files.
bool simple_project_load_config(ProjectParam &param, const PPath &pdataDir, const PVecPath &vecClassConfigFile)
Load configuration pdata of generated sources.
bool simple_project_generate_source(const ProjectParam &projectParam)
Save generated sources of project.
PMapString generateAllReplacementData(const ProjectConfig &projectConfig)
Generate all replacement data for project generation.
Configuration of the project.
Set of parameters to generate a project.
PPath outputProjectDir
Output path of the full project.
PString version
Version of the project.
PPath outputTestDir
Output path of the unit tests.
PString name
Name of the project.
PPath outputSourceDir
Output path of the sources.

References ProjectType::CPP, generateAllReplacementData(), generateClassGeneratorScript(), ProjectParam::mode, ProjectConfig::name, ProjectParam::name, ProjectParam::outputProjectDir, ProjectParam::outputSourceDir, ProjectParam::outputTestDir, project_generator_loadConfig(), project_generator_loadPackageInfo(), simple_project_generate_source(), simple_project_load_config(), GeneratorMode::type, ProjectConfig::version, ProjectParam::version, and ProjectType::WRAPPER.

+ Here is the call graph for this function:

◆ simple_project_load_config()

bool simple_project_load_config ( ProjectParam & param,
const PPath & pdataDir,
const PVecPath & vecClassConfigFile )

Load configuration pdata of generated sources.

Parameters
[out]param: ProjectParam to be updated
pdataDir: directory where to save pdata configuration
vecClassConfigFile: vector of class configuration files (.pdata files)
Returns
true on success, false otherwise

Definition at line 354 of file simple_project_generator.cpp.

354 {
355 bool b(true);
356 for(const PPath & classConfigFile : vecClassConfigFile){
357 PDataConfig dataConfig;
358 dataConfig.getFileName() = classConfigFile;
359 if(!parserClassConfig(dataConfig.getVecClassConfig(), dataConfig.getVecInclude(), classConfigFile)){
360 std::cerr << "simple_project_load_config : can't load file '" << classConfigFile << "'" << std::endl;
361 b = false; //Best effort strategy
362 }
363 param.vecDataConfig.push_back(dataConfig);
364
365 PPath destFile = pdataDir / classConfigFile.getFileName();
366 PString fileContent = classConfigFile.loadFileContent();
367 if(!destFile.saveFileContent(fileContent)){
368 std::cerr << "simple_project_load_config : cannot copy pdata file to project pdata directory '"<<destFile<<"'" << std::endl;
369 b = false; //Best effort strategy
370 }
371 }
372 return b;
373}
Class to describe a basic class.
Definition PDataConfig.h:17
const PVecClassConfig & getVecClassConfig() const
Get the vector of all config class of the current pdata file.
const PPath & getFileName() const
Get the file name of the current PDataConfig.
const PVecPath & getVecInclude() const
Get the vector of all include files of the current pdata file.
bool parserClassConfig(std::vector< PClassConfig > &listClassConfig, PVecPath &listInclude, const PPath &fileName)
Parser list class config.
PVecDataConfig vecDataConfig
Configuration of classes to be generated.

References PDataConfig::getFileName(), PDataConfig::getVecClassConfig(), PDataConfig::getVecInclude(), parserClassConfig(), and ProjectParam::vecDataConfig.

Referenced by simple_project_generator().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: