PhoenixGenerator  3.4.0
Generate code from template files and projects in C++, Rust, Python and wrapped C++ to Python
Loading...
Searching...
No Matches
simple_project_generator.h File Reference
Include dependency graph for simple_project_generator.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

bool isPhoenixDependency (const PString &packageName)
 Check if a package is a Phoenix dependency.
bool simple_project_generator (const PPath &descriptionFile, const PVecPath &vecClassConfigFile, const PString &projectType, const GeneratorMode &mode)
 Create a simple project from a configuration.

Function Documentation

◆ 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 61 of file simple_project_generator.cpp.

61 {
62 return (packageName.isSameBegining("Phoenix") || packageName.isSameBegining("phoenix"));
63}

References isPhoenixDependency().

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

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 465 of file simple_project_generator.cpp.

467{
468 //First, let's read the toml config of the project
469 ProjectConfig projectConfig;
470 if(!project_generator_loadConfig(projectConfig, descriptionFile)){
471 std::cerr << "simple_project_generator : cannot parse project description file '"<<descriptionFile<<"'" << std::endl;
472 return false;
473 }
474 //Then look in the config files if the packages exists
475 if(!project_generator_loadPackageInfo(projectConfig)){
476 std::cerr << "simple_project_generator : cannot find package info of project '"<<projectConfig.name<<"'" << std::endl;
477 return false;
478 }
479 // Generate replacement data
480 PMapString mapReplace = generateAllReplacementData(projectConfig, mode, vecClassConfigFile);
481 PPath inputConfigPlaceholderDir = PPath::getProgramPrefix() / PPath("share") / PPath("PhoenixGenerator") / PPath("Projects") / PPath(projectType), outputPath("./");
482 if(!directory_replace_placeholder(outputPath, inputConfigPlaceholderDir, mapReplace)){
483 std::cerr << "simple_project_generator : cannot replace placeholder in project generation '"<<projectConfig.name<<"'" << std::endl;
484 return false;
485 }
486 PPath mainPath = PPath(".") / PPath(projectConfig.name);
487 PPath srcPath = mainPath / PPath("src"), pdataDir = mainPath / PPath("pdata");
488 if(!pdataDir.createDirectory()){
489 std::cerr << "simple_project_generator : cannot create pdata directory '"<<pdataDir<<"'" << std::endl;
490 return false;
491 }
492 ProjectParam param;
493 param.mode = mode;
494 param.name = projectConfig.name;
495 param.version = projectConfig.version;
496 param.outputProjectDir = mainPath;
497 param.outputSourceDir = srcPath;
499 param.outputTestDir = mainPath / PPath("TESTS");
500 }else if(param.mode.type == ProjectType::WRAPPER || param.mode.type == ProjectType::RUST){
501 param.outputTestDir = mainPath / PPath("tests");
502 }
503
504 if(!simple_project_load_config(param, pdataDir, vecClassConfigFile)){
505 std::cerr << "simple_project_generator : cannot load config to generate project in '"<<srcPath<<"'" << std::endl;
506 return false;
507 }
509 std::cerr << "simple_project_generator : cannot generate sources in '"<<srcPath<<"'" << std::endl;
510 return false;
511 }
512 // Generate class generator script
513 if(!generateClassGeneratorScript(vecClassConfigFile, pdataDir, param.mode)){
514 std::cerr << "simple_project_generator : cannot generate class generator script in pdata directory '"<<pdataDir<<"'" << std::endl;
515 return false;
516 }
517 return true;
518}
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.
PMapString generateAllReplacementData(const ProjectConfig &projectConfig, const GeneratorMode &mode, const PVecPath &vecClassConfigFile)
Generate all replacement data for project generation.
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.
ProjectType::ProjectType type
Type of the project to be generated.
Configuration of the project.
PString name
Name of the project.
PString version
Project version.
Set of parameters to generate a project.
PPath outputProjectDir
Output path of the full project.
GeneratorMode mode
Mode to be used to generate the 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, ProjectType::NANOBIND_WRAPPER, ProjectParam::outputProjectDir, ProjectParam::outputSourceDir, ProjectParam::outputTestDir, project_generator_loadConfig(), project_generator_loadPackageInfo(), ProjectType::RUST, simple_project_generate_source(), simple_project_generator(), simple_project_load_config(), GeneratorMode::type, ProjectConfig::version, ProjectParam::version, and ProjectType::WRAPPER.

Referenced by simple_project_generator().

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