/
home
/
obinna
/
html
/
boazapp
/
vendor
/
symfony
/
flex
/
src
/
Configurator
/
Upload File
HOME
<?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Flex\Configurator; use Symfony\Flex\Lock; use Symfony\Flex\Recipe; use Symfony\Flex\Update\RecipeUpdate; /** * @author Fabien Potencier <fabien@symfony.com> */ class MakefileConfigurator extends AbstractConfigurator { public function configure(Recipe $recipe, $definitions, Lock $lock, array $options = []) { $this->write('Adding Makefile entries'); $this->configureMakefile($recipe, $definitions, $options['force'] ?? false); } public function unconfigure(Recipe $recipe, $vars, Lock $lock) { if (!file_exists($makefile = $this->options->get('root-dir').'/Makefile')) { return; } $contents = preg_replace(\sprintf('{%s*###> %s ###.*###< %s ###%s+}s', "\n", $recipe->getName(), $recipe->getName(), "\n"), "\n", file_get_contents($makefile), -1, $count); if (!$count) { return; } $this->write(\sprintf('Removing Makefile entries from %s', $makefile)); if (!trim($contents)) { @unlink($makefile); } else { file_put_contents($makefile, ltrim($contents, "\r\n")); } } public function update(RecipeUpdate $recipeUpdate, array $originalConfig, array $newConfig): void { $recipeUpdate->setOriginalFile( 'Makefile', $this->getContentsAfterApplyingRecipe($recipeUpdate->getRootDir(), $recipeUpdate->getOriginalRecipe(), $originalConfig) ); $recipeUpdate->setNewFile( 'Makefile', $this->getContentsAfterApplyingRecipe($recipeUpdate->getRootDir(), $recipeUpdate->getNewRecipe(), $newConfig) ); } private function configureMakefile(Recipe $recipe, array $definitions, bool $update) { $makefile = $this->options->get('root-dir').'/Makefile'; if (!$update && $this->isFileMarked($recipe, $makefile)) { return; } $data = $this->options->expandTargetDir(implode("\n", $definitions)); $data = $this->markData($recipe, $data); $data = "\n".ltrim($data, "\r\n"); if (!file_exists($makefile)) { $envKey = $this->options->get('runtime')['env_var_name'] ?? 'APP_ENV'; $dotenvPath = $this->options->get('runtime')['dotenv_path'] ?? '.env'; file_put_contents( $this->options->get('root-dir').'/Makefile', <<<EOF ifndef {$envKey} include {$dotenvPath} endif .DEFAULT_GOAL := help .PHONY: help help: @awk 'BEGIN {FS = ":.*?## "}; /^[a-zA-Z-]+:.*?## .*$$/ {printf "\033[32m%-15s\033[0m %s\\n", $$1, $$2}' Makefile | sort EOF ); } if (!$this->updateData($makefile, $data)) { file_put_contents($makefile, $data, \FILE_APPEND); } } private function getContentsAfterApplyingRecipe(string $rootDir, Recipe $recipe, array $definitions): ?string { if (0 === \count($definitions)) { return null; } $file = $rootDir.'/Makefile'; $originalContents = file_exists($file) ? file_get_contents($file) : null; $this->configureMakefile( $recipe, $definitions, true ); $updatedContents = file_exists($file) ? file_get_contents($file) : null; if (null === $originalContents) { if (file_exists($file)) { unlink($file); } } else { file_put_contents($file, $originalContents); } return $updatedContents; } }