# Définition des variables
PACKAGE = fr.monlouyan.bakefile
ENTRY = Main
BUILDDIR = ./build/
DOCDIR = ./doc/
CLASSP = ./build
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

# 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

# Cible principale
all: init $(MAIN_CLASS)

# 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


# 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

# Nettoyage des fichiers générés
clean:
	echo "Nettoyage des fichiers générés..."
	rm -rf $(BUILDDIR)
	rm -rf $(DOCDIR)
	echo "Nettoyage terminé."

# Cibles spéciales
.PHONY: all init javadoc clean