From 0af4eb8f1bdc55be463a846601029ed3e4d0b6d2 Mon Sep 17 00:00:00 2001
From: Yanis HAMOUDI <yanis.hamoudi@etu.u-pec.fr>
Date: Tue, 4 Feb 2025 17:31:25 +0100
Subject: [PATCH] =?UTF-8?q?Am=C3=A9liorations=20du=20code=20+=20Du=20mode?=
 =?UTF-8?q?=20debug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 bakefile.jar                                  | Bin 0 -> 8694 bytes
 src/fr/monlouyan/bakefile/BakeCLI.java        |   6 +-
 src/fr/monlouyan/bakefile/BakeEngine.java     |  16 +--
 src/fr/monlouyan/bakefile/BakefileParser.java |  21 ++--
 .../monlouyan/bakefile/CommandExecutor.java   |  33 +++--
 .../bakefile/DependencyResolver.java          |  15 +--
 src/fr/monlouyan/bakefile/Rule.java           | 116 ++++++++++++++++++
 src/fr/monlouyan/bakefile/Target.java         |  30 -----
 .../monlouyan/bakefile/TimestampManager.java  |  39 ++++++
 tests/bakefile.jar                            | Bin 0 -> 8694 bytes
 tests/test-01-depuis-rien/bakefile.jar        | Bin 0 -> 8694 bytes
 tests/test-02-existe-deja/bakefile.jar        | Bin 0 -> 8694 bytes
 tests/test-03-circulaire/Bakefile             |  19 ++-
 tests/test-03-circulaire/bakefile.jar         | Bin 0 -> 8694 bytes
 14 files changed, 215 insertions(+), 80 deletions(-)
 create mode 100644 bakefile.jar
 create mode 100644 src/fr/monlouyan/bakefile/Rule.java
 delete mode 100644 src/fr/monlouyan/bakefile/Target.java
 create mode 100644 src/fr/monlouyan/bakefile/TimestampManager.java
 create mode 100644 tests/bakefile.jar
 create mode 100644 tests/test-01-depuis-rien/bakefile.jar
 create mode 100644 tests/test-02-existe-deja/bakefile.jar
 create mode 100644 tests/test-03-circulaire/bakefile.jar

diff --git a/bakefile.jar b/bakefile.jar
new file mode 100644
index 0000000000000000000000000000000000000000..a268f9af06935865663b73b441a7c79f27806997
GIT binary patch
literal 8694
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
K28MDu5Dx(CMf=YH

literal 0
HcmV?d00001

diff --git a/src/fr/monlouyan/bakefile/BakeCLI.java b/src/fr/monlouyan/bakefile/BakeCLI.java
index e3462ee..34d1981 100644
--- a/src/fr/monlouyan/bakefile/BakeCLI.java
+++ b/src/fr/monlouyan/bakefile/BakeCLI.java
@@ -15,7 +15,7 @@ public class BakeCLI {
     /*
      * Mode debug activé ou non
      */
-    private boolean debug;
+    private static boolean debug;
 
     /*
      * Liste des arguments passés en ligne de commande
@@ -30,7 +30,7 @@ public class BakeCLI {
      * @see Main
      */
     public BakeCLI(String[] args){
-        this.debug = false;
+        debug = false;
         this.targets = new ArrayList<>();
         parseArgs(args);
     }
@@ -54,7 +54,7 @@ public class BakeCLI {
      * Permet de savoir si le mode debug est activé ou non.
      * @return true si le mode debug est activé, false sinon
      */
-    public boolean isDebug(){ return debug; }
+    public static boolean isDebug(){ return debug; }
 
     /**
      * Permet de récupérer les arguments autres que "-d" passés en ligne de commande
diff --git a/src/fr/monlouyan/bakefile/BakeEngine.java b/src/fr/monlouyan/bakefile/BakeEngine.java
index 7751a62..574058b 100644
--- a/src/fr/monlouyan/bakefile/BakeEngine.java
+++ b/src/fr/monlouyan/bakefile/BakeEngine.java
@@ -2,7 +2,6 @@ package fr.monlouyan.bakefile;
 
 import java.util.List;
 
-
 public class BakeEngine {
     private BakeCLI cli;
     private BakefileParser parser;
@@ -12,15 +11,16 @@ public class BakeEngine {
     public BakeEngine(BakeCLI cli) {
         this.cli = cli;
         this.parser = new BakefileParser("Bakefile");
-        this.resolver = new DependencyResolver(cli.isDebug());
-        this.executor = new CommandExecutor(cli.isDebug());
+        this.resolver = new DependencyResolver(BakeCLI.isDebug());
+        this.executor = new CommandExecutor(BakeCLI.isDebug());
     }
     
     public void run() {
-        List<Target> targets = parser.parse();
-        List<Target> targetsToBuild = resolver.resolve(targets, cli.getTargets());
-        for (Target target : targetsToBuild) {
-            executor.execute(target);
+        List<Rule> rules = parser.parse();
+        List<Rule> rulesToBuild = resolver.resolve(rules, cli.getTargets());
+        
+        for (Rule rule : rulesToBuild) {
+            executor.execute(rule);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/fr/monlouyan/bakefile/BakefileParser.java b/src/fr/monlouyan/bakefile/BakefileParser.java
index 07cae52..6202da4 100644
--- a/src/fr/monlouyan/bakefile/BakefileParser.java
+++ b/src/fr/monlouyan/bakefile/BakefileParser.java
@@ -26,8 +26,10 @@ public class BakefileParser {
         this.filename = filename;
     }
 
-    public List<Target> parse() {
-        List<Target> targets = new ArrayList<>();
+    public List<Rule> parse() {
+        List<Rule> rules = new ArrayList<>();
+        Set<String> phonyTargets = new HashSet<>();
+
         if (!Files.exists(Paths.get(filename))) {
             System.out.println("*** No targets specified and no makefile found.  Stop.");
             System.exit(1);
@@ -44,30 +46,29 @@ public class BakefileParser {
                 Matcher commandMatcher = COMMAND_PATTERN.matcher(line);
 
                 if (targetMatcher.matches()) {
-                    // Sauvegarde de la précédente target si elle existe
+                    // Sauvegarde de la règle précédente si elle existe
                     if (currentTarget != null) {
-                        targets.add(new Target(currentTarget, dependencies, String.join(" && ", commands)));
+                        rules.add(new Rule(currentTarget, dependencies, commands, phonyTargets.contains(currentTarget)));
                     }
 
-                    // Nouvelle target détectée
+                    // Nouvelle cible détectée
                     currentTarget = targetMatcher.group(1);
                     dependencies = new ArrayList<>(Arrays.asList(targetMatcher.group(2).trim().split("\\s+")));
                     commands = new ArrayList<>();
-
                 } else if (commandMatcher.matches()) {
-                    // Ligne de commande associée à la dernière target trouvée
+                    // Ligne de commande associée à la dernière cible trouvée
                     commands.add(commandMatcher.group(1));
                 }
             }
 
-            // Ajout de la dernière target après la boucle
+            // Ajout de la dernière règle après la boucle
             if (currentTarget != null) {
-                targets.add(new Target(currentTarget, dependencies, String.join(" && ", commands)));
+                rules.add(new Rule(currentTarget, dependencies, commands, phonyTargets.contains(currentTarget)));
             }
 
         } catch (IOException e) {
             e.printStackTrace();
         }
-        return targets;
+        return rules;
     }
 }
diff --git a/src/fr/monlouyan/bakefile/CommandExecutor.java b/src/fr/monlouyan/bakefile/CommandExecutor.java
index dd37dfc..786ecd3 100644
--- a/src/fr/monlouyan/bakefile/CommandExecutor.java
+++ b/src/fr/monlouyan/bakefile/CommandExecutor.java
@@ -9,20 +9,31 @@ public class CommandExecutor {
         this.debug = debug;
     }
     
-    public void execute(Target target) {
-        if (!target.needsUpdate()){
-            System.out.println("bake: '" + target.getName() + "' is up to date.");
+    public void execute(Rule rule) {
+        if (rule.getCommands().isEmpty()) {
+            System.out.println("bake: Nothing to be done for '" + rule.getName() + "'.");
             return;
-        };
+        }
+
+        if (!rule.needsUpdate()){
+            System.out.println("bake: '" + rule.getName() + "' is up to date.");
+            return;
+        }
+        
         try {
-            System.out.println(target.getCommand());
-            ProcessBuilder pb = new ProcessBuilder("sh", "-c", target.getCommand());
-            Process process = pb.start();
-            int exitCode = process.waitFor();
-            if (debug) System.out.println("Executed: " + target.getCommand() + " with exit code " + exitCode);
-            if (exitCode != 0) System.err.println("Error executing " + target.getName());
+            for (String command : rule.getCommands()) {
+                System.out.println(command); // Affichage de la commande executée
+                ProcessBuilder pb = new ProcessBuilder("sh", "-c", command);
+                Process process = pb.start();
+                int exitCode = process.waitFor();
+                if (debug) System.out.println("Executed: " + command + " with exit code " + exitCode);
+                if (exitCode != 0) {
+                    System.err.println("Error executing " + rule.getName() + "");
+                    break;
+                }
+            }
         } catch (IOException | InterruptedException e) {
             e.printStackTrace();
         }
     }    
-}
\ No newline at end of file
+}
diff --git a/src/fr/monlouyan/bakefile/DependencyResolver.java b/src/fr/monlouyan/bakefile/DependencyResolver.java
index 133d492..8ca21fc 100644
--- a/src/fr/monlouyan/bakefile/DependencyResolver.java
+++ b/src/fr/monlouyan/bakefile/DependencyResolver.java
@@ -10,16 +10,17 @@ public class DependencyResolver {
         this.debug = debug;
     }
 
-    public List<Target> resolve(List<Target> allTargets, List<String> requestedTargets) {
-        List<Target> targetsToBuild = new ArrayList<>();
-        for (Target target : allTargets) {
-            if (requestedTargets.isEmpty() || requestedTargets.contains(target.getName())) {
+    public List<Rule> resolve(List<Rule> allRules, List<String> requestedRules) {
+        List<Rule> rulesToBuild = new ArrayList<>();
+        
+        for (Rule rule : allRules) {
+            if (requestedRules.isEmpty() || requestedRules.contains(rule.getName()) || rule.isPhony()) {
                 if (debug){
-                    System.out.println("Target " + target.getName() + " is requested");
+                    System.out.println("Rule " + rule.getName() + " is requested");
                 }
-                targetsToBuild.add(target);
+                rulesToBuild.add(rule);
             }
         }
-        return targetsToBuild;
+        return rulesToBuild;
     }
 }
\ No newline at end of file
diff --git a/src/fr/monlouyan/bakefile/Rule.java b/src/fr/monlouyan/bakefile/Rule.java
new file mode 100644
index 0000000..c15ab74
--- /dev/null
+++ b/src/fr/monlouyan/bakefile/Rule.java
@@ -0,0 +1,116 @@
+package fr.monlouyan.bakefile;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * Représente une règle dans un fichier Bakefile
+ * Dernière modification : 04/02/2025
+ * 
+ * @author Moncef STITI, Yanis HAMOUDI
+ * @version 1.0
+ * @date 04/02/2025
+ */
+public class Rule {
+    /**
+     * Nom de la règle
+     */
+    private String name;
+
+    /**
+     * Liste des dépendances de la règle
+     */
+    private List<String> dependencies;
+
+    /**
+     * Liste des commandes de la règle (actions à exécuter)
+     */
+    private List<String> commands;
+
+    /**
+     * Indique si la règle est une règle phony
+     */
+    private boolean isPhony;
+
+    /**
+     * Constructeur de la classe Rule
+     * @param name Nom de la règle
+     * @param dependencies Liste des dépendances de la règle
+     * @param commands Liste des commandes de la règle à exécuter
+     * @param isPhony Si la règle est une règle phony ou non
+     */
+    public Rule(String name, List<String> dependencies, List<String> commands, boolean isPhony) {
+        this.name = name;
+        this.dependencies = dependencies;
+        this.commands = commands;
+        this.isPhony = isPhony;
+    }
+
+    /**
+     * Permet de récupérer le nom de la règle
+     * @return Le nom de la règle
+     */
+    public String getName() { return name; }
+
+    /**
+     * Permet de récupérer les dépendances de la règle
+     * @return La liste des dépendances de la règle
+     */
+    public List<String> getDependencies() { return dependencies; }
+
+    /**
+     * Permet de récupérer les commandes de la règle
+     * @return La liste des commandes de la règle
+     */
+    public List<String> getCommands() { return commands; }
+
+    /**
+     * Permet de savoir si la règle est une règle phony
+     * @return true si la règle est une règle phony, false sinon
+     */
+    public boolean isPhony() { return isPhony; }
+
+    /**
+     * Permet de savoir si la règle est vide (sans dépendances ni commandes)
+     * @return true si la règle est vide, false sinon
+     */
+    public boolean isEmpty() { return dependencies.isEmpty() && commands.isEmpty(); }
+
+    /**
+     * Détermine si la règle doit être mise à jour.
+     * Une règle doit être mise à jour si l'un de ses fichiers de sortie est plus ancien qu'un de ses fichiers de dépendance.
+     * De plus, les règles phony sont toujours mises à jour.
+     * 
+     * @return true si la règle doit être mise à jour, false sinon.
+     */
+    public boolean needsUpdate() {
+        if (BakeCLI.isDebug()){
+            System.out.println("Debug : Checking if rule " + name + " needs update");
+        }
+
+        if (isPhony) {
+            if (BakeCLI.isDebug()) {
+                System.out.println("Debug : Rule " + name + " is phony, always needs update");
+            }
+            return true; // Les règles phony sont toujours mises à jour
+        }
+    
+        File targetFile = new File(name);
+
+        if (BakeCLI.isDebug()){
+            System.out.println("Debug : Checking if target file " + name + " exist and is up to date");
+        }
+        long targetTimestamp = targetFile.exists() ? TimestampManager.getTimestamp(targetFile) : 0;
+    
+        for (String dependency : dependencies) {
+            File depFile = new File(dependency);
+            if (depFile.exists() && TimestampManager.getTimestamp(depFile) > targetTimestamp) {
+                if (BakeCLI.isDebug()) {
+                    System.out.println("Debug : Dependency " + dependency + " is newer than target file " + name + ", needs update");
+                }
+                return true;
+            }
+        }
+        return false;
+    }
+}
diff --git a/src/fr/monlouyan/bakefile/Target.java b/src/fr/monlouyan/bakefile/Target.java
deleted file mode 100644
index 29b32ca..0000000
--- a/src/fr/monlouyan/bakefile/Target.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package fr.monlouyan.bakefile;
-
-import java.io.File;
-import java.util.List;
-
-public class Target {
-    private String name;
-    private List<String> dependencies;
-    private String command;
-    
-    public Target(String name, List<String> dependencies, String command) {
-        this.name = name;
-        this.dependencies = dependencies;
-        this.command = command;
-    }
-    
-    public boolean needsUpdate() {
-        File targetFile = new File(name);
-        if (!targetFile.exists()) return true;
-        long lastModified = targetFile.lastModified();
-        for (String dep : dependencies) {
-            File depFile = new File(dep);
-            if (depFile.exists() && depFile.lastModified() > lastModified) return true;
-        }
-        return false;
-    }
-    
-    public String getCommand() { return command; }
-    public String getName() { return name; }
-}
\ No newline at end of file
diff --git a/src/fr/monlouyan/bakefile/TimestampManager.java b/src/fr/monlouyan/bakefile/TimestampManager.java
new file mode 100644
index 0000000..fc37bda
--- /dev/null
+++ b/src/fr/monlouyan/bakefile/TimestampManager.java
@@ -0,0 +1,39 @@
+package fr.monlouyan.bakefile;
+
+import java.io.File;
+
+/**
+ * Classe utilitaire pour la gestion des timestamps des fichiers.
+ * Dernière modification : 04/02/2025
+ * 
+ * @author Moncef STITI, Yanis HAMOUDI
+ * @version 1.0
+ * @date 04/02/2025
+ */
+public class TimestampManager {
+
+    /**
+     * Récupère le timestamp d'un fichier.
+     * @param filePath Le chemin du fichier.
+     * @return Le timestamp du fichier, ou 0 si le fichier n'existe pas.
+     */
+    public static long getTimestamp(File file) {
+        if (file.exists()) {
+            return file.lastModified(); // Récupère le timestamp du fichier
+        }
+        return 0; // Le fichier n'existe pas
+    }
+    
+    /**
+     * Compare deux fichiers en fonction de leurs timestamps de modification.
+     * 
+     * @param file1 Premier fichier
+     * @param file2 Deuxième fichier
+     * @return 1 si file1 est plus récent, -1 si file2 est plus récent, 0 s'ils ont le même timestamp
+     */
+    public static int compareTimestamps(File file1, File file2) {
+        long time1 = getTimestamp(file1);
+        long time2 = getTimestamp(file2);
+        return Long.compare(time1, time2);
+    }
+}
diff --git a/tests/bakefile.jar b/tests/bakefile.jar
new file mode 100644
index 0000000000000000000000000000000000000000..a268f9af06935865663b73b441a7c79f27806997
GIT binary patch
literal 8694
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
K28MDu5Dx(CMf=YH

literal 0
HcmV?d00001

diff --git a/tests/test-01-depuis-rien/bakefile.jar b/tests/test-01-depuis-rien/bakefile.jar
new file mode 100644
index 0000000000000000000000000000000000000000..a268f9af06935865663b73b441a7c79f27806997
GIT binary patch
literal 8694
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
K28MDu5Dx(CMf=YH

literal 0
HcmV?d00001

diff --git a/tests/test-02-existe-deja/bakefile.jar b/tests/test-02-existe-deja/bakefile.jar
new file mode 100644
index 0000000000000000000000000000000000000000..a268f9af06935865663b73b441a7c79f27806997
GIT binary patch
literal 8694
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
K28MDu5Dx(CMf=YH

literal 0
HcmV?d00001

diff --git a/tests/test-03-circulaire/Bakefile b/tests/test-03-circulaire/Bakefile
index 369b433..b458a3d 100644
--- a/tests/test-03-circulaire/Bakefile
+++ b/tests/test-03-circulaire/Bakefile
@@ -1,14 +1,11 @@
-main: a.o b.o c.o
-	gcc a.o b.o c.o -o main
+main: a b c
+	gcc a b c -o main
 
-a.o: a.c a.h b.h
-	gcc -Wall -Werror -Wextra -c a.c -o a.o
+a: a.c a.h b.h
+	gcc -Wall -Werror -Wextra -Pendatic -c a.c -o a
 
-b.o: b.c b.h c.h
-	gcc -Wall -Werror -Wextra -c b.c -o b.o
+b: b.c b.h c.h
+	gcc -Wall -Werror -Wextra -Pendatic -c b.c -o b
 
-c.o: c.c c.h a.h
-	gcc -Wall -Werror -Wextra -c c.c -o c.o
-
-clean:
-	rm -f a.o b.o c.o main
+c: c.c c.h a.h
+	gcc -Wall -Werror -Wextra -Pendatic -c c.c -o c
diff --git a/tests/test-03-circulaire/bakefile.jar b/tests/test-03-circulaire/bakefile.jar
new file mode 100644
index 0000000000000000000000000000000000000000..a268f9af06935865663b73b441a7c79f27806997
GIT binary patch
literal 8694
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
K28MDu5Dx(CMf=YH

literal 0
HcmV?d00001