# If the first argument is "jeu"...
ifeq (jeu,$(firstword $(MAKECMDGOALS)))
  # use the rest as arguments for "jeu"
  RUN_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
  # ...and turn them into do-nothing targets
  $(eval $(RUN_ARGS):;@:)
endif

# If the first argument is "creation"...
ifeq (creation,$(firstword $(MAKECMDGOALS)))
  # use the rest as arguments for "creation"
  CREATION_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
  # ...and turn them into do-nothing targets
  $(eval $(CREATION_ARGS):;@:)
endif

### VARIABLES ###

JC = javac
JCFLAGS = -encoding UTF-8 -implicit:none
JVM = java
JVMFLAGS =

SRCDIR = ./src
OUTDIR = ./out
DOCDIR = ./doc

### LISTE DES FICHIERS SOURCE ###

SRCFILES := $(wildcard $(SRCDIR)/*.java)

### LISTE DES FICHIERS OBJET ###

CLASSFILES := $(patsubst $(SRCDIR)/%.java,$(OUTDIR)/%.class,$(SRCFILES))

### REGLES ESSENTIELLES ###

# Compilation de tous les fichiers source
$(OUTDIR)/%.class : $(SRCDIR)/%.java | $(OUTDIR)
	@mkdir -p $(OUTDIR)
	$(JC) $(JCFLAGS) -cp $(SRCDIR) -d $(OUTDIR) $<

# Crée le répertoire de sortie s'il n'existe pas
$(OUTDIR):
	mkdir -p $(OUTDIR)

# La classe MainJeu dépend de tous les fichiers compilés
$(OUTDIR)/MainJeu.class : $(CLASSFILES)

# La classe MainCreation dépend de tous les fichiers compilés
$(OUTDIR)/MainCreation.class : $(CLASSFILES)

### REGLES OPTIONNELLES ###

# Règle pour lancer le programme MainJeu
jeu : $(OUTDIR)/MainJeu.class
	$(JVM) $(JVMFLAGS) -cp $(OUTDIR) MainJeu $(RUN_ARGS)

# Règle pour lancer le programme MainCreation
creation : $(OUTDIR)/MainCreation.class
	$(JVM) $(JVMFLAGS) -cp $(OUTDIR) MainCreation $(CREATION_ARGS)

# Nettoyage des fichiers générés
clean :
	-rm -rf $(OUTDIR)
	-rm -rf $(DOCDIR)

# Nettoyage et suppression des fichiers générés, y compris la classe Main
mrproper : clean

# Génération de la documentation
doc :
	javadoc -d $(DOCDIR) $(SRCDIR)/*.java

### BUTS FACTICES ###

.PHONY : jeu creation clean mrproper doc

### FIN ###
