diff --git a/src/ncc/Classes/PhpExtension/Templates/CliTemplate.php b/src/ncc/Classes/PhpExtension/Templates/CliTemplate.php index 7f9426a..48f5375 100644 --- a/src/ncc/Classes/PhpExtension/Templates/CliTemplate.php +++ b/src/ncc/Classes/PhpExtension/Templates/CliTemplate.php @@ -74,7 +74,6 @@ self::writeProgramTemplate($project_manager); self::writeMainEntryTemplate($project_manager); - self::writeMakefileTemplate($project_manager); $project_manager->save(); } @@ -114,22 +113,4 @@ ) ); } - - /** - * Writes the Makefile to the project directory - * - * @param ProjectManager $project_manager - * @return void - * @throws IOException - * @throws PathNotFoundException - */ - private static function writeMakefileTemplate(ProjectManager $project_manager): void - { - IO::fwrite( - $project_manager->getProjectPath() . DIRECTORY_SEPARATOR . 'Makefile', - ConstantCompiler::compileConstants($project_manager->getProjectConfiguration(), - IO::fread(__DIR__ . DIRECTORY_SEPARATOR . 'Makefile.tpl') - ) - ); - } } \ No newline at end of file diff --git a/src/ncc/Classes/PhpExtension/Templates/Makefile.tpl b/src/ncc/Classes/PhpExtension/Templates/Makefile.tpl index 404177e..e7d3a5c 100644 --- a/src/ncc/Classes/PhpExtension/Templates/Makefile.tpl +++ b/src/ncc/Classes/PhpExtension/Templates/Makefile.tpl @@ -11,10 +11,13 @@ all: build build: ncc build --config=$(CONFIG) --log-level $(LOG_LEVEL) -install: - ncc package install --package=$(PACKAGE) --skip-dependencies --reinstall -y --log-level $(LOG_LEVEL) +install: build + ncc package install --package=$(PACKAGE) --skip-dependencies --build-source --reinstall -y --log-level $(LOG_LEVEL) + +test: build + phpunit clean: rm -rf build -.PHONY: all build install clean \ No newline at end of file +.PHONY: all build install test clean \ No newline at end of file diff --git a/src/ncc/Classes/PhpExtension/Templates/MakefileTemplate.php b/src/ncc/Classes/PhpExtension/Templates/MakefileTemplate.php new file mode 100644 index 0000000..5723fed --- /dev/null +++ b/src/ncc/Classes/PhpExtension/Templates/MakefileTemplate.php @@ -0,0 +1,61 @@ +getProjectPath() . DIRECTORY_SEPARATOR . 'Makefile', + ConstantCompiler::compileConstants($project_manager->getProjectConfiguration(), + IO::fread(__DIR__ . DIRECTORY_SEPARATOR . 'Makefile.tpl') + ) + ); + } +} \ No newline at end of file diff --git a/src/ncc/Classes/PhpExtension/Templates/PhpUnitTemplate.php b/src/ncc/Classes/PhpExtension/Templates/PhpUnitTemplate.php index b09a154..7b953ae 100644 --- a/src/ncc/Classes/PhpExtension/Templates/PhpUnitTemplate.php +++ b/src/ncc/Classes/PhpExtension/Templates/PhpUnitTemplate.php @@ -40,8 +40,11 @@ class PhpUnitTemplate implements TemplateInterface { /** - * @inheritDoc - * @param ProjectManager $project_manager + * Applies the necessary templates for the given project. + * + * @param ProjectManager $project_manager Manager responsible for handling project-related tasks. + * + * @return void */ public static function applyTemplate(ProjectManager $project_manager): void { @@ -49,6 +52,14 @@ self::createPhpUnitTemplate($project_manager); } + /** + * Creates a PHPUnit template in the specified project directory. + * + * @param ProjectManager $project_manager The project manager instance containing project configuration and path details. + * @return void + * @throws IOException + * @throws PathNotFoundException + */ private static function createPhpUnitTemplate(ProjectManager $project_manager): void { IO::fwrite( @@ -64,6 +75,12 @@ } } + /** + * Creates the PHPUnit bootstrap template file for the given project. + * + * @param ProjectManager $project_manager The project manager instance handling project configuration and paths. + * @return void + */ private static function createPhpUnitBootstrapTemplate(ProjectManager $project_manager): void { IO::fwrite( diff --git a/src/ncc/Enums/ProjectTemplates.php b/src/ncc/Enums/ProjectTemplates.php index 43107a1..b938004 100644 --- a/src/ncc/Enums/ProjectTemplates.php +++ b/src/ncc/Enums/ProjectTemplates.php @@ -34,5 +34,23 @@ */ case PHP_CLI = 'phpcli'; + /** + * A template for generating a Makefile for the PHP project + */ + case PHP_MAKE = 'phpmake'; + + /** + * A template used for creating PHP Unit testing bootstrap + */ case PHP_UNIT = 'phpunit'; + + /** + * Template that combines PHP_LIBRARY, PHP_MAKE and PHP_UNIT in one + */ + case PHP_LIBRARY_FULL = 'phplib_full'; + + /** + * Template that combines PHP_LIBRARY, PHP_MAKE, PHP_UNIT and PHP_CLI in one + */ + case PHP_CLI_FULL = 'phpcli_full'; } \ No newline at end of file diff --git a/src/ncc/Managers/ProjectManager.php b/src/ncc/Managers/ProjectManager.php index 97924d1..af6e3b8 100644 --- a/src/ncc/Managers/ProjectManager.php +++ b/src/ncc/Managers/ProjectManager.php @@ -30,6 +30,7 @@ use ncc\Classes\PhpExtension\NccCompiler; use ncc\Classes\PhpExtension\Templates\CliTemplate; use ncc\Classes\PhpExtension\Templates\LibraryTemplate; + use ncc\Classes\PhpExtension\Templates\MakefileTemplate; use ncc\Classes\PhpExtension\Templates\PhpUnitTemplate; use ncc\Enums\CompilerExtensions; use ncc\Enums\Options\BuildConfigurationOptions; @@ -199,10 +200,27 @@ LibraryTemplate::applyTemplate($this); break; + case ProjectTemplates::PHP_MAKE->value: + MakefileTemplate::applyTemplate($this); + break; + case ProjectTemplates::PHP_UNIT->value: PhpUnitTemplate::applyTemplate($this); break; + case ProjectTemplates::PHP_LIBRARY_FULL->value: + LibraryTemplate::applyTemplate($this); + MakefileTemplate::applyTemplate($this); + PhpUnitTemplate::applyTemplate($this); + break; + + case ProjectTemplates::PHP_CLI_FULL: + CliTemplate::applyTemplate($this); + LibraryTemplate::applyTemplate($this); + MakefileTemplate::applyTemplate($this); + PhpUnitTemplate::applyTemplate($this); + break; + default: throw new NotSupportedException('The given template \'' . $template_name . '\' is not supported'); }