diff --git a/Makefile b/Makefile index 7a941dd..b468cea 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ -# Définition des variables PACKAGE = fr.monlouyan.bakefile ENTRY = Main +SOURCEDIR = ./src/fr/monlouyan/bakefile/ BUILDDIR = ./build/ DOCDIR = ./doc/ JARNAME = bakefile.jar @@ -9,94 +9,42 @@ MANIFESTPATH = Manifest.MF SOURCEDIR = ./src/ TESTDIR = ./tests/ -# Liste des fichiers source et leurs correspondances en .class -BAKECLI_CLASS = $(BUILDDIR)fr/monlouyan/bakefile/BakeCLI.class -TIMESTAMPMANAGER_CLASS = $(BUILDDIR)fr/monlouyan/bakefile/TimestampManager.class -BAKEFILEPARSER_CLASS = $(BUILDDIR)fr/monlouyan/bakefile/BakefileParser.class -DEPENDENCYRESOLVER_CLASS = $(BUILDDIR)fr/monlouyan/bakefile/DependencyResolver.class -COMMANDEXECUTOR_CLASS = $(BUILDDIR)fr/monlouyan/bakefile/CommandExecutor.class -BAKEENGINE_CLASS = $(BUILDDIR)fr/monlouyan/bakefile/BakeEngine.class -RULE_CLASS = $(BUILDDIR)fr/monlouyan/bakefile/Rule.class -MAIN_CLASS = $(BUILDDIR)fr/monlouyan/bakefile/Main.class +SOURCES := $(shell find $(SOURCEDIR) -name '*.java') -# Fichiers source -BAKECLI_SRC = $(SOURCEDIR)fr/monlouyan/bakefile/BakeCLI.java -TIMESTAMPMANAGER_SRC = $(SOURCEDIR)fr/monlouyan/bakefile/TimestampManager.java -BAKEFILEPARSER_SRC = $(SOURCEDIR)fr/monlouyan/bakefile/BakefileParser.java -DEPENDENCYRESOLVER_SRC = $(SOURCEDIR)fr/monlouyan/bakefile/DependencyResolver.java -COMMANDEXECUTOR_SRC = $(SOURCEDIR)fr/monlouyan/bakefile/CommandExecutor.java -BAKEENGINE_SRC = $(SOURCEDIR)fr/monlouyan/bakefile/BakeEngine.java -RULE_SRC = $(SOURCEDIR)fr/monlouyan/bakefile/Rule.java -MAIN_SRC = $(SOURCEDIR)fr/monlouyan/bakefile/Main.java +all: + @make clean + @make compile + @make jar -# Cible principale -all: init $(MAIN_CLASS) $(JARNAME) deploy-tests +compile: + @echo "Compiling..." + javac -cp $(CLASSP) -d $(BUILDDIR) $(SOURCES) -Xlint:unchecked -Xlint:deprecation + @echo "Done." -# Initialiser les répertoires nécessaires -init: - @mkdir -p $(BUILDDIR) - @mkdir -p $(BUILDDIR)fr/monlouyan/bakefile/ - -$(MAIN_CLASS): $(MAIN_SRC) $(BAKECLI_CLASS) $(BAKEENGINE_CLASS) - @echo "Compilation de $(MAIN_SRC)..." - @javac -cp $(CLASSP) -d $(BUILDDIR) $(MAIN_SRC) -Xlint:unchecked -Xlint:deprecation -sourcepath src - -$(RULE_CLASS): $(RULE_SRC) $(BAKECLI_CLASS) - @echo "Compilation de $(RULE_SRC)..." - @javac -cp $(CLASSP) -d $(BUILDDIR) $(RULE_SRC) -Xlint:unchecked -Xlint:deprecation -sourcepath src - -$(TIMESTAMPMANAGER_CLASS): $(TIMESTAMPMANAGER_SRC) - @echo "Compilation de $(TIMESTAMPMANAGER_SRC)..." - @javac -cp $(CLASSP) -d $(BUILDDIR) $(TIMESTAMPMANAGER_SRC) -Xlint:unchecked -Xlint:deprecation -sourcepath src - -$(DEPENDENCYRESOLVER_CLASS): $(DEPENDENCYRESOLVER_SRC) $(RULE_CLASS) - @echo "Compilation de $(DEPENDENCYRESOLVER_SRC)..." - @javac -cp $(CLASSP) -d $(BUILDDIR) $(DEPENDENCYRESOLVER_SRC) -Xlint:unchecked -Xlint:deprecation -sourcepath src - -$(COMMANDEXECUTOR_CLASS): $(COMMANDEXECUTOR_SRC) $(RULE_CLASS) $(TIMESTAMPMANAGER_CLASS) - @echo "Compilation de $(COMMANDEXECUTOR_SRC)..." - @javac -cp $(CLASSP) -d $(BUILDDIR) $(COMMANDEXECUTOR_SRC) -Xlint:unchecked -Xlint:deprecation -sourcepath src - -$(BAKEFILEPARSER_CLASS): $(BAKEFILEPARSER_SRC) $(RULE_CLASS) - @echo "Compilation de $(BAKEFILEPARSER_SRC)..." - @javac -cp $(CLASSP) -d $(BUILDDIR) $(BAKEFILEPARSER_SRC) -Xlint:unchecked -Xlint:deprecation -sourcepath src - -$(BAKEENGINE_CLASS): $(BAKEENGINE_SRC) $(BAKEFILEPARSER_CLASS) $(DEPENDENCYRESOLVER_CLASS) $(COMMANDEXECUTOR_CLASS) $(RULE_CLASS) $(BAKECLI_CLASS) - @echo "Compilation de $(BAKEENGINE_SRC)..." - @javac -cp $(CLASSP) -d $(BUILDDIR) $(BAKEENGINE_SRC) -Xlint:unchecked -Xlint:deprecation -sourcepath src - -$(BAKECLI_CLASS): $(BAKECLI_SRC) - @echo "Compilation de $(BAKECLI_SRC)..." - @javac -cp $(CLASSP) -d $(BUILDDIR) $(BAKECLI_SRC) -Xlint:unchecked -Xlint:deprecation -sourcepath src - -# Création du fichier JAR (on s'assure que tout est compilé) -$(JARNAME): $(MAIN_CLASS) $(RULE_CLASS) $(TIMESTAMPMANAGER_CLASS) $(DEPENDENCYRESOLVER_CLASS) $(COMMANDEXECUTOR_CLASS) $(BAKEFILEPARSER_CLASS) - @echo "Création du fichier JAR..." - @jar cfm $(JARNAME) $(MANIFESTPATH) -C $(BUILDDIR) fr/monlouyan/bakefile - @echo "Fichier JAR créé : $(JARNAME)" - -# Génération de la documentation Javadoc -javadoc: - @echo "Génération de la documentation Javadoc..." - @javadoc -d $(DOCDIR) -sourcepath $(SOURCEDIR) -subpackages $(PACKAGE) - @echo "Documentation Javadoc générée dans $(DOCDIR)" - -see-javadoc: javadoc - @echo "Ouverture de la documentation Javadoc sur Firefox..." - @firefox $(DOCDIR)/index.html - -# Déploiement du JAR dans les répertoires de test -deploy-tests: $(JARNAME) - @find $(TESTDIR) -type d -name 'bake' -exec cp $(JARNAME) {} \; - -# Nettoyage des fichiers générés clean: - @echo "Nettoyage des fichiers générés..." - @rm -rf $(BUILDDIR) - @rm -rf $(DOCDIR) + @echo "Cleaning up..." + @rm -rf $(BUILDDIR)* $(DOCDIR)* @rm -f $(JARNAME) @find $(TESTDIR) -name "$(JARNAME)" -delete - @echo "Nettoyage terminé." + @echo "Done." -# Cibles spéciales -.PHONY: all init javadoc deploy-tests clean \ No newline at end of file +javadoc: + @echo "Generating javadoc..." + @javadoc -d $(DOCDIR) -sourcepath src -subpackages $(PACKAGE) + @echo "Done." + +jar: + @echo "Creating jar..." + @jar cfm $(JARNAME) $(MANIFESTPATH) -C $(BUILDDIR) fr/monlouyan/bakefile + @echo "Done." + @make deploy-tests + +deploy-tests: + @echo "Deploying JAR to 'bake' directories..." + @find $(TESTDIR) -type d -name 'bake' -exec cp $(JARNAME) {} \; + @echo "Done." + +run_test: + @echo "Running tests..." + @java -cp build fr.monlouyan.bakefile.tests.BakeTestRunner + @echo "Done." \ No newline at end of file diff --git a/src/fr/monlouyan/bakefile/BakefileParser.java b/src/fr/monlouyan/bakefile/BakefileParser.java index 7677630..90a7f2a 100644 --- a/src/fr/monlouyan/bakefile/BakefileParser.java +++ b/src/fr/monlouyan/bakefile/BakefileParser.java @@ -28,7 +28,7 @@ public class BakefileParser { * Format : "nom1 nom2 nom3 : dépendance1 dépendance2" * La nouvelle regex gère plusieurs cibles séparées par des espaces */ - private static final Pattern TARGET_PATTERN = Pattern.compile("^([A-Za-z0-9_.\\-\\$\\(\\)\\{\\}]+(?:\\s+[A-Za-z0-9_.\\-\\$\\(\\)\\{\\}]+)*)\\s*:\\s*([^#]*?)\\s*(?:#.*)?$"); + private static final Pattern TARGET_PATTERN = Pattern.compile("^([A-Za-z0-9_.\\/\\-\\$\\(\\)\\{\\}~]+(?:\\s+[A-Za-z0-9_.\\/\\-\\$\\(\\)\\{\\}~]+)*)\\s*:\\s*([^#]*?)\\s*(?:#.*)?$"); /** * Regex pour détecter les lignes de commande associées à une target.