From 0941b5e09ee473dad694c57df0b3bdbcc672130a Mon Sep 17 00:00:00 2001 From: Moncef STITI <moncef.stiti@etu.u-pec.fr> Date: Tue, 4 Feb 2025 19:27:56 +0100 Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20de=20la=20gestion=20des=20d?= =?UTF-8?q?=C3=A9pendances=20circulaires?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bakefile.jar | Bin 8694 -> 9456 bytes src/fr/monlouyan/bakefile/BakeCLI.java | 6 +- src/fr/monlouyan/bakefile/BakeEngine.java | 6 +- src/fr/monlouyan/bakefile/BakefileParser.java | 20 +++++ .../monlouyan/bakefile/CommandExecutor.java | 7 +- .../bakefile/DependencyResolver.java | 72 +++++++++++++++--- src/fr/monlouyan/bakefile/Main.java | 3 +- tests/bakefile.jar | Bin 8694 -> 9456 bytes tests/test-01-depuis-rien/bakefile.jar | Bin 8694 -> 9456 bytes tests/test-02-existe-deja/bakefile.jar | Bin 8694 -> 9456 bytes tests/test-03-circulaire/Bakefile | 6 +- tests/test-03-circulaire/README.md | 14 +++- tests/test-03-circulaire/a.c | 8 +- tests/test-03-circulaire/a.h | 2 +- tests/test-03-circulaire/b.c | 6 +- tests/test-03-circulaire/b.h | 2 +- tests/test-03-circulaire/bakefile.jar | Bin 8694 -> 9456 bytes tests/test-03-circulaire/c.c | 7 +- tests/test-03-circulaire/c.h | 2 +- 19 files changed, 125 insertions(+), 36 deletions(-) diff --git a/bakefile.jar b/bakefile.jar index a268f9af06935865663b73b441a7c79f27806997..4e010784e81242211cca6ae68a6741f22ceb41ab 100644 GIT binary patch delta 6597 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 W#K53~Vq%9pSm7x}HMT-UkPHA@5B<IX delta 5777 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 XGE99kV9`DDVv}#F2(XpQflL4Zd;gSw diff --git a/src/fr/monlouyan/bakefile/BakeCLI.java b/src/fr/monlouyan/bakefile/BakeCLI.java index 34d1981..b909324 100644 --- a/src/fr/monlouyan/bakefile/BakeCLI.java +++ b/src/fr/monlouyan/bakefile/BakeCLI.java @@ -20,7 +20,7 @@ public class BakeCLI { /* * Liste des arguments passés en ligne de commande */ - private List<String> targets; + private static List<String> targets; /** * Constructeur de la classe BakeCLI @@ -31,7 +31,7 @@ public class BakeCLI { */ public BakeCLI(String[] args){ debug = false; - this.targets = new ArrayList<>(); + targets = new ArrayList<>(); parseArgs(args); } @@ -60,5 +60,5 @@ public class BakeCLI { * Permet de récupérer les arguments autres que "-d" passés en ligne de commande * @return */ - public List<String> getTargets(){ return targets; } + public static List<String> getTargets(){ return targets; } } diff --git a/src/fr/monlouyan/bakefile/BakeEngine.java b/src/fr/monlouyan/bakefile/BakeEngine.java index 574058b..8306fa0 100644 --- a/src/fr/monlouyan/bakefile/BakeEngine.java +++ b/src/fr/monlouyan/bakefile/BakeEngine.java @@ -3,13 +3,11 @@ package fr.monlouyan.bakefile; import java.util.List; public class BakeEngine { - private BakeCLI cli; private BakefileParser parser; private DependencyResolver resolver; private CommandExecutor executor; - public BakeEngine(BakeCLI cli) { - this.cli = cli; + public BakeEngine() { this.parser = new BakefileParser("Bakefile"); this.resolver = new DependencyResolver(BakeCLI.isDebug()); this.executor = new CommandExecutor(BakeCLI.isDebug()); @@ -17,7 +15,7 @@ public class BakeEngine { public void run() { List<Rule> rules = parser.parse(); - List<Rule> rulesToBuild = resolver.resolve(rules, cli.getTargets()); + List<Rule> rulesToBuild = resolver.resolve(rules, BakeCLI.getTargets()); for (Rule rule : rulesToBuild) { executor.execute(rule); diff --git a/src/fr/monlouyan/bakefile/BakefileParser.java b/src/fr/monlouyan/bakefile/BakefileParser.java index 6202da4..9659613 100644 --- a/src/fr/monlouyan/bakefile/BakefileParser.java +++ b/src/fr/monlouyan/bakefile/BakefileParser.java @@ -8,6 +8,9 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; public class BakefileParser { + /** + * Nom du fichier Bakefile à parser (donc Bakefile...). + */ private String filename; /** @@ -22,8 +25,15 @@ public class BakefileParser { */ private static final Pattern COMMAND_PATTERN = Pattern.compile("^\\s+(.+)$"); + /** + * Première cible trouvée dans le fichier Bakefile. + */ + private static String firstTarget; + + public BakefileParser(String filename) { this.filename = filename; + firstTarget = null; } public List<Rule> parse() { @@ -46,6 +56,10 @@ public class BakefileParser { Matcher commandMatcher = COMMAND_PATTERN.matcher(line); if (targetMatcher.matches()) { + if (firstTarget == null) { + firstTarget = targetMatcher.group(1); + } + // Sauvegarde de la règle précédente si elle existe if (currentTarget != null) { rules.add(new Rule(currentTarget, dependencies, commands, phonyTargets.contains(currentTarget))); @@ -71,4 +85,10 @@ public class BakefileParser { } return rules; } + + /** + * Permet de récupérer la première cible trouvée dans le fichier Bakefile. + * @return La première cible trouvée + */ + public static String getFirstTarget() { return firstTarget; } } diff --git a/src/fr/monlouyan/bakefile/CommandExecutor.java b/src/fr/monlouyan/bakefile/CommandExecutor.java index 786ecd3..0779d65 100644 --- a/src/fr/monlouyan/bakefile/CommandExecutor.java +++ b/src/fr/monlouyan/bakefile/CommandExecutor.java @@ -15,11 +15,14 @@ public class CommandExecutor { return; } - if (!rule.needsUpdate()){ - System.out.println("bake: '" + rule.getName() + "' is up to date."); + if (!rule.needsUpdate()) { + if (rule.getName().equals(BakefileParser.getFirstTarget())) { + System.out.println("bake: '" + rule.getName() + "' is up to date."); + } return; } + try { for (String command : rule.getCommands()) { System.out.println(command); // Affichage de la commande executée diff --git a/src/fr/monlouyan/bakefile/DependencyResolver.java b/src/fr/monlouyan/bakefile/DependencyResolver.java index 8ca21fc..e47a015 100644 --- a/src/fr/monlouyan/bakefile/DependencyResolver.java +++ b/src/fr/monlouyan/bakefile/DependencyResolver.java @@ -1,26 +1,80 @@ package fr.monlouyan.bakefile; -import java.util.ArrayList; -import java.util.List; +import java.util.*; public class DependencyResolver { private boolean debug; - + private Map<String, Rule> ruleMap; + public DependencyResolver(boolean debug) { this.debug = debug; } public List<Rule> resolve(List<Rule> allRules, List<String> requestedRules) { List<Rule> rulesToBuild = new ArrayList<>(); + ruleMap = new HashMap<>(); + Set<String> builtRules = new HashSet<>(); // Éviter d'ajouter des règles déjà vérifiées for (Rule rule : allRules) { - if (requestedRules.isEmpty() || requestedRules.contains(rule.getName()) || rule.isPhony()) { - if (debug){ - System.out.println("Rule " + rule.getName() + " is requested"); - } - rulesToBuild.add(rule); + ruleMap.put(rule.getName(), rule); + } + + Set<String> visited = new HashSet<>(); + Set<String> stack = new HashSet<>(); + + for (String ruleName : requestedRules.isEmpty() ? ruleMap.keySet() : requestedRules) { + if (ruleMap.containsKey(ruleName)) { + detectCycle(ruleName, visited, stack); + collectDependencies(ruleName, rulesToBuild, builtRules); + } else if (debug) { + System.out.println("Warning: Rule '" + ruleName + "' not found."); } } + return rulesToBuild; } -} \ No newline at end of file + + /** + * Détection des cycles avec DFS + */ + private void detectCycle(String ruleName, Set<String> visited, Set<String> stack) { + if (stack.contains(ruleName)) { + throw new RuntimeException("Dependency cycle detected involving rule: " + ruleName); + } + + if (!visited.contains(ruleName)) { + visited.add(ruleName); + stack.add(ruleName); + + Rule rule = ruleMap.get(ruleName); + if (rule != null) { + for (String dependency : rule.getDependencies()) { + if (ruleMap.containsKey(dependency)) { + detectCycle(dependency, visited, stack); + } + } + } + stack.remove(ruleName); + } + } + + /** + * Collecte récursive des règles à construire en évitant les doublons + */ + private void collectDependencies(String ruleName, List<Rule> rulesToBuild, Set<String> builtRules) { + if (builtRules.contains(ruleName)) { + return; // Évite d'ajouter une règle plusieurs fois + } + + Rule rule = ruleMap.get(ruleName); + if (rule != null) { + for (String dependency : rule.getDependencies()) { + if (ruleMap.containsKey(dependency)) { + collectDependencies(dependency, rulesToBuild, builtRules); + } + } + rulesToBuild.add(rule); + builtRules.add(ruleName); + } + } +} diff --git a/src/fr/monlouyan/bakefile/Main.java b/src/fr/monlouyan/bakefile/Main.java index 9bc4c09..3f455f1 100755 --- a/src/fr/monlouyan/bakefile/Main.java +++ b/src/fr/monlouyan/bakefile/Main.java @@ -16,8 +16,9 @@ public class Main{ * @return void */ public static void main(String[] args){ + @SuppressWarnings("unused") BakeCLI cli = new BakeCLI(args); - BakeEngine engine = new BakeEngine(cli); + BakeEngine engine = new BakeEngine(); engine.run(); } } \ No newline at end of file diff --git a/tests/bakefile.jar b/tests/bakefile.jar index a268f9af06935865663b73b441a7c79f27806997..4e010784e81242211cca6ae68a6741f22ceb41ab 100644 GIT binary patch delta 6597 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 W#K53~Vq%9pSm7x}HMT-UkPHA@5B<IX delta 5777 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 XGE99kV9`DDVv}#F2(XpQflL4Zd;gSw diff --git a/tests/test-01-depuis-rien/bakefile.jar b/tests/test-01-depuis-rien/bakefile.jar index a268f9af06935865663b73b441a7c79f27806997..4e010784e81242211cca6ae68a6741f22ceb41ab 100644 GIT binary patch delta 6597 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 W#K53~Vq%9pSm7x}HMT-UkPHA@5B<IX delta 5777 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 XGE99kV9`DDVv}#F2(XpQflL4Zd;gSw diff --git a/tests/test-02-existe-deja/bakefile.jar b/tests/test-02-existe-deja/bakefile.jar index a268f9af06935865663b73b441a7c79f27806997..4e010784e81242211cca6ae68a6741f22ceb41ab 100644 GIT binary patch delta 6597 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 W#K53~Vq%9pSm7x}HMT-UkPHA@5B<IX delta 5777 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 XGE99kV9`DDVv}#F2(XpQflL4Zd;gSw diff --git a/tests/test-03-circulaire/Bakefile b/tests/test-03-circulaire/Bakefile index b458a3d..c43de20 100644 --- a/tests/test-03-circulaire/Bakefile +++ b/tests/test-03-circulaire/Bakefile @@ -2,10 +2,10 @@ main: a b c gcc a b c -o main a: a.c a.h b.h - gcc -Wall -Werror -Wextra -Pendatic -c a.c -o a + gcc -Wall -Werror -Wextra -ansi -pedantic -c a.c -o a b: b.c b.h c.h - gcc -Wall -Werror -Wextra -Pendatic -c b.c -o b + gcc -Wall -Werror -Wextra -ansi -pedantic -c b.c -o b c: c.c c.h a.h - gcc -Wall -Werror -Wextra -Pendatic -c c.c -o c + gcc -Wall -Werror -Wextra -ansi -pedantic -c c.c -o c diff --git a/tests/test-03-circulaire/README.md b/tests/test-03-circulaire/README.md index abaa797..6a847eb 100644 --- a/tests/test-03-circulaire/README.md +++ b/tests/test-03-circulaire/README.md @@ -1,3 +1,15 @@ -# Test 3 : Dépendances circulaire +# Test 3 : Gestion des dépendances circulaires +## Description +Ce test vérifie que le système de compilation peut détecter et gérer correctement les dépendances circulaires. Il simule un projet où plusieurs fichiers `.c` et `.h` s'incluent mutuellement, créant ainsi une boucle dans les dépendances. +## Fichiers utilisés +- `a.c` : Implémente functionA qui appelle functionB. +- `b.c` : Implémente functionB qui appelle functionC. +- `c.c` : Implémente functionC et inclut a.h, créant une boucle indirecte. +- `a.h`, `b.h`, `c.h` : Fichiers d'en-tête correspondant. +- `Bakefile` : Contient les règles de compilation et les dépendances. +- `bakefile.jar` : Version compilée de notre système de build. + +## Résultat attendu +Si le système de build détecte une dépendance circulaire, il doit la gérer automatiquement en évitant la boucle infinie et en compilant correctement les fichiers. \ No newline at end of file diff --git a/tests/test-03-circulaire/a.c b/tests/test-03-circulaire/a.c index 3f49efe..283d470 100644 --- a/tests/test-03-circulaire/a.c +++ b/tests/test-03-circulaire/a.c @@ -1,12 +1,12 @@ #include <stdio.h> #include "b.h" -void functionA() { - printf("Function A called\n"); - functionB(); // Appelle une fonction de b.c +void functionA(void) { + printf("Fonction A appelée\n"); + functionB(); } -int main() { +int main(void) { functionA(); return 0; } diff --git a/tests/test-03-circulaire/a.h b/tests/test-03-circulaire/a.h index d53839a..f043ff5 100644 --- a/tests/test-03-circulaire/a.h +++ b/tests/test-03-circulaire/a.h @@ -1,6 +1,6 @@ #ifndef A_H #define A_H -void functionA(); +void functionA(void); #endif diff --git a/tests/test-03-circulaire/b.c b/tests/test-03-circulaire/b.c index b7da733..6be825f 100644 --- a/tests/test-03-circulaire/b.c +++ b/tests/test-03-circulaire/b.c @@ -1,7 +1,7 @@ #include <stdio.h> #include "c.h" -void functionB() { - printf("Function B called\n"); - functionC(); // Appelle une fonction de c.c +void functionB(void) { + printf("Fonction B appelée\n"); + functionC(); } diff --git a/tests/test-03-circulaire/b.h b/tests/test-03-circulaire/b.h index 321af19..622ae55 100644 --- a/tests/test-03-circulaire/b.h +++ b/tests/test-03-circulaire/b.h @@ -1,6 +1,6 @@ #ifndef B_H #define B_H -void functionB(); +void functionB(void); #endif diff --git a/tests/test-03-circulaire/bakefile.jar b/tests/test-03-circulaire/bakefile.jar index a268f9af06935865663b73b441a7c79f27806997..4e010784e81242211cca6ae68a6741f22ceb41ab 100644 GIT binary patch delta 6597 zcmez7{K1naz?+$ci-CcIf#KK8i9DK2zh+J}Zvv6KjX>mk^ZNV#mjfhh%U@qxTawIY zCSl+@W5<104+ATsxe~&Y7xF7hJimN5Y?jl@4cWdGpN`fa3XiY&=%~=Rg0sHi{XhL< z5?``s3bbu|x%d9xs&_k|TYvvu_UkE&18=ub&4+G*6c&M$j@(b?F@`%<YMzgtopn2n zL+|ynyl}}sH}6zQD7LuPdl<DT7%wr`N!^_-6`MYNwpVxlO6gq-wfZ$8R@$d>lw6s% z*l@$L4voVd$KT!9weX5g_xo#K=jkdk?f0(sb(2x%S#(y{cWbrEvbx6dg`%AaoRXeB zhArhgt_EjMb32goE%dKb#o=uw!K<HKbM`R&;U&vCd4|x$X@#=pdRHshmexyMz0POe zp*e9azg56V)Aj;kW2Lmzl$fR$sgX~3-j{d;I$!t6vz~Tpg5-pKHKFla4=JoEv2KxD z_j=i{GdJ^AUX#j~oYHBMbMIc%Q|o(CE{$h?yZ1hscCWhTnPIH|WJjgf*ZxUKoPWlq zn=)hfq(A)@D=(I=+4jq&ob}{iYu()e^_!GkYMFnjY!}p+bmuhlVO@P|_QppH$1?W# z&TOAj{PFS6WP|^TN7i@ju{riZG3n<aLAUQO<(;P;Q+dm@EOUSLF`kX*guL6z)X(3% zcS+0R^W8&PAD6s}7ZP&%#msfIWkZ4e1g;~;`wc$IO>%htMzN|PLhFO%WxG8U>Kpdn zzyIB~zVlt8u$-^pVvWG;DV~39_PXjM3R?R26m(7Kuu0y3hi}#&&X??*Ji^Pah#R|Z z{>{NIU_WoV;FnF`IU?Jfmh&nk&u5#!|LfS<%dh&xb^kC1c(Zf-<Jpwt%f!I2gqeW> zlmJB-I5;>Me$8}=Vn70F3=9luMUz)BtJL=fM+aYa5cxMvEXXNiq1Y59v8U6fd5efn z3=`qfh|*)`G5#=Z+ETV#EuO+`^Zv;GW12s6;_P!4cE8R4h}$hlzpPaBvS;#{ck?!< zpZ`AhcK>Gm`wTt_fo{AtLVvij0*_zVvh@9{C`a?px17qlpUbrEnvy7W&Z61BcfA*f zK}r6t`lyRW+|zcipB)u;|JiJ}#_Y*c4=>7_zC*U*jDW@UlM@zj^tiQ&nHD#0dUK;~ zrvI_<*Md%yThdq)?<Bog(`T6bjCZo|Mp^!jh322_TP6ubNnDxjyZi^Ax%rNnx8onF zuHJAuS8{uyyVL9@ja!mdtDKh@Z|0d4IO|cQ`TM1rv2HB&vPyTVdFo2{%ET^j`d#7R zxlvnyr&H_9`pb&n?(*20&tASZDbU<}+4qWbr8<l5wemIISnl9DN1*a)+rsr+k3_{i z12@#MGE1ba_$qW(AnfteQ#<<tFBrL<^z72f<dWkuwmd&q^zO2)Dv#vDK1ld$7*8#b zY`ePp{Q6VZ|ClGRoUd2u(W>Y(Y<uuDyX#EBj<wYjx5g!zM_-)WE)wS<5&j|Qieb&& z7L9$^y+7BS7u+Vyr8aTdrkP6;I_6aWO;=kXcA4kmY~h_xy7Jy1%4W@1kXk&an#+D! z*vY*WPQnf|GP9d`oF!kquiQT4>9?+Vx)YA2?^bhuylL_CZO^~V?Fx(ARv%-1Je^0e zMb9nSLtt4P_r)A$yQs`1FG7@moxi<Od(Yg?mCL{CdanL(nNz|`rdf5LQxx}g`Na<f z9EFs!)iZ35-E}_V@k-0vw*7_e0&$-A8M&(Q4L)&F7kF3=O_Bs0cb)xn^oK)EOQ_aI z$%D#S^|zA$s!LcMTD-F{*d}#`yiJVjq=(9jN-B<ikPS|*GkTr-Sw8XE<@fX1<%%06 zRQD^aVK^$j(BGNct<!zdtfF(fS6VvnZV`O%|5wTD$^GhmAJ{>OzWw`MkKIfR3{0%3 ziGK2FHoN-U!NTDZ|7AIDrbN0pTntzn7+55zlyy}t!<FS|n}eqd>lM9|Oxh>&?%a*Y z$j<*(xA}XR_2u?&2gAE{r(5l{xjOTo_+RE<H)i^!uljpVZHmJolbdsjzs-4HS9kyW z)9vi`e^?d>$9Ju8Sjy1eqGcg@Eq>biQwz7O@oo8aTu<AxyZ+$Kg;}dgr!2hmT)yZq z>vo1fCsUQSXNAgBE^gg2Z}!Bk7iQQj?OC0vTC!(@#01`8Ly4F_u9J<qoNG%Wo$nZh z<SHFXT{k)4G;3J@>b6YPlw_xkELRLoZalH{_HDP~b)MI`YME-1?e<D$=ewU?YTlgF zqg`_Cz<IN^1*+>kTG)N-ndByJV2z%xlD$f9Q?A^EwVspbs2t@Hj9)oZd1>^&jFmkd z4Y@qC!{uB;b644CuiT}UWL?H_Lvx|zZm*sf3mbb1v@SnU)BX1IRHj7dI#t_8@@0!z z?HKDg8Ck;J5|3?}!n1S5^AksVD-~6e8)`P5P<B1%5|fc?A;H12$MA0U&HC#JRcF^s z3OOFC`gH2nDdCs*&OG$D>iE|=)3QESJ)Sl%S6J{+9OGM|Z;AgWWoth*=7{_^?b?Y3 zBg1d}ohkp4h4>x`G&dh|m}XV8x2E1&Zn}V5i=$HD%5x>N{ye*QE7r`Tb@#@N2OWi1 z9ut%i{m{~q{30b{`==QWtD?FTqpcopt-lz4=5F*2b<S7|#Rbt${C+}Hygg6s_q^Go zd3oAgy~A@Bhabwc@yyHk_N`6zrmJV#a)<dX62DGvaC!dV<hvtF8_&5csx~<GKy%a4 z0JSNZ?-VqzC@IZ5w4h-}3(Gl!oT%o$HK$I56-`?H=-;Ci<-VufVs=gn-m+wqQbOgo zeKwPG>+eQ#KHpKgHTG|9?c9yR-p@KEj&(Eya*9{@c=^1D4vH~2_=IP=iVg3~g;|F# z6i4#4#?@;|u&7ARIu$<SU`*7?wx&WxVIj4JMptxJ_kETrQ!PC^DfDa%>sF@|e-A4i zGdTJ>Zk9qkThD67Ex&4S*dH-m>Um-3KQGIvLKi!<g?Q>G1hIRbT(j?eQ-*la5rZr? z%frS(%M6__8f?z&`#!CxGjQ3jjtai>+&k1BvhLY2<>l$AldcQiJd<2KJ%5Q0OPKYM z*RM|7D6AKFQRBKiw#v#^rmRs?=tEXu(f4oV{_0bmGI#e~SKV{)w@0qo{4YgCT8Sq- zkG5{tNYwk~_So_Nih4<o%jd6)eK0R(*{}RCc8@!U=c}1Iv3kzgJ2}?OWYxQqP!PW) z<JYaGe`#Gc)8{E^Zrx*dq-dt$QI8YJF?pfW%vFqzgg>%=czoM7|8rs;cMD6MCa<02 z_<FA@kL<;*jgppLkFEv2d=r_M)^fZrW!DAIqdVpqPx9)2n{)V7-pylQ>jO3x2PU)0 zm;^0f8Y;Y=?_15ed9L>ia=AWn|IYl=aPOO-?el2y8SLCF``Zt^Tl6gYR^pEd$Ep^w zmtEK)oR{Tjdc##+{$cVXrGH&&m!f@-y#2o6-yfUO*VP#dDwE?MSaVFZUsT9AJF}{U z@m}<bxkumqvMtUi)_LF{c#w(jc*KqRKmoyZQBfAr;ujAJh}j%c>NCD`<a$kM*F$lW zw%E-bRWZd99J|vEr^I*4eU~|Rzs06|*6#^6dB<h+COOL;Uw=bvPy5Eta_!4cJ-+j} zP)8}Wu`(vkWf@cY=P8xaHt)2e&MQXepMCg>Y2Mu9-mY$U+m0*Wih5<^*MH*YC!;)j znfib6w%Z?eZ9VsJ>jPP?Wb5oiMz1C=>nq_Kr@G0rUh%IKUE=WGQM>l`%jzDzRo!~J zUCb8FXU`o`j5(ZmYOX<^LX-c+#`PVqq<?jPGu~A=-|F0Zi%$CjuKGtNt6ip8u9OK+ zZrB>|l3(Fmlg9>uwhx?{z0QBw-!k=a1jtRwn|`2P{$E;u?>7&B@ed5g-}EL{?O9u& z`1t;c3J(4M!l4O_ecU_VDJ<qt_|a4F*-~=O@!MjvejaxeFL`c1#q#Z4?kB&*zs(BX zCZ_TF)%}<Qx61|B*59AkKJB39tqXS@a(o}Wc<?IkFE^+X$Z~M5zs<_Pu$l{{5@4J; zc{h(;ec0`AVRwoDye&Q)+8GR@3wJ4<ay9(s7X64<<I0wXD+*$3a@9{dgqiIwEDu{~ z{&sKe3+MY@^1lylo+q|?>sJ1^-v5`(n|CSSOta%iaaGZ|H#Nrl-`CCj^Yi@Qct)Ow zt1YquP74|av}+tbxBAg8k6VW#J?5Q{n`(Jfz&6uzn$_9*fZLa?gZm|3Sw3QuN-&U_ z_kEJ<^^JEEA}vm?iJ0<vn(k!fyp0-j{=ArUhV|4}iC3SDq;(87?6i=&cx2<{19~bF z-$KO;6gQ|kA8rZ}4YYG!w7lGAi(bIAxiZ^pre-;CM_HCh-)P>;(;K~Ba>vttG4CwP zEw$_9eqT6uG4X-soBQ>TveIsbZ}QMES6Fv#lhkQnzshNgjZRHoG~-g+Y&O0{lb=jV zoV>_GZQGypkjOrzw$_j)r`xFy4EhY-XioB1UN>3z)ug3dTRu-M5cyfWB;7h)G_ml@ zg6WIT9|)95&RCZuEg5oY%G(JauP!;4@wi{w<CTV~MbNXq-Anfb81*gx$WwoOGuyn& zb)})_j}@dEtJ=f|nMt4gYk2ze)h!<~q>nSiJ*c>Nz+2*u)b#-SsT1~yaonyyv#Y3a zY1MNfg{xN6m-EayCfPP)=@Rurr*7_5ef{#3WojMAVHst%xNCN*+nhBtSReYIQeC<+ znJw<1Wm|_cd;jvaNgT&l^HiJnFSjvQudl7Q*zji0mn4bw6(6|`eJ*Xc7k8Hm-jyA9 z-7RjN+*cDLwq=DAtr{-9d->?rqMeJHCe?7}7o3rraX7Ut_O`&2v%HBb4d04iEwXaV zt#+M$Bbw)KXwbZML7uz*-8WPy`FP#yy!QgJSec*hU0StuC7SBqr;23zD%<|fcDlsJ zdX2l@%j=oBL7_-OVT|d9747by)vA~eT?o+%Uv)y)uUg67SNP@3*K-%1@0hK=D)Ua! zlazonUincerT2>^`S@<hzL2c{)Zme+Xzg@Rcu~m1-t;>MPM<XN7S`?OUG(^t!>S93 z*F*Pxa>;aB)inEi@{V%_0o?K?>an2<GG?AK-F)fH?)pBH=dtJCq}@H99I=Q=^Kgfm z?tLCFsTI+kdG}LaXsn*}({b`l^A!($ccy3>yU&}Y)An6+`{H@-pHAszxvtUd;(xrO zGg?Oe<&-*~yBj1uPw#xEcgl<JbaRT&lM|A&vhLf>`pLE7%_YlEx2Dxy-|<?HZRwS7 zNfknmzZ7|fHO8;IRKNYUYY)fma{=#{N%U-a?2&&&Y@dE@-}x77f5a~<s@b^o%__&t z1yc^1^d?{7SnxA&vAoKys~7h1nXPqQ^sD3A_mBH_C)B>RZ@SNSk#B8p$UlXD9IsxA zFAo-9Y9znARm0-$zrqq;>vs!hCbFI_zu@+y@wWxbnuWj31pnSYcqQHbVf_)QdGU@( z%#&{&5cu!e)|vdhAgp_1rtzr{(rjv+cl;O3pE$4gUsL1FTSu~I-t<UPGLF7Je`ojS z=84-*Na^uh+j@0vVw%FO@612A$}+cIdr`Yba#cp}x&>eP?&+;Q+m^n%W8J#?&0RN+ zY&6xmvrJ&lQDz&Lb)Tk|EOItz4vQ)esDB`Ju}`f;!SS5wW0tdzjBoh9D2rKm*=Fwy z^NsTJA2aN0>wK^IVf71@(Ds6Ut#6Eb1NjSE=Da%g{>4$#NmX25W#|5g{vRz7wfy5T z%OsgzmqMO`C6;=I33Inx$-Bc)zp(9Cm7>$mkB4%81$?>d9{H=GNVw&7Z$T{I_3s}# z&*{Hawp0DQ&*k=hP(gXp^N-v=76yjf94H0l%*p2j9qQ+XM+XOoi~KX&IcI{*lVwSJ z++2MQsb1UNsMMjrv52*`YipH<S;2!Rb4)B3E;C=f_jYw|de;44N1WqV1(!~cygl>W zmxXg*ep#shm-jDw&-8V*LL7>MbM2m_q|V*Cf9tjF*KSom|L*?%9dpKU^Smhs)DG$$ zW>j}Ry2NO0i;1f|fBjsUxlaTqAH2Ef)vBAP5<auHc|CMm$+De?KZWgogp!DH$ytx3 zqP8Zhd_Ee6K3=%k=G<3}>&h<~=b3EDoR?7G@-riAPGhe}#L<9UORt%$#IpQVrj*Q| zWpY<Tcw>lB$g_K8+9x}Oz3%jK-DvrK)#zG+Zu1n6%sFueQ@%f4<9Si1J~5W@kb?Rb zsT(#o8hVAyPTuIz<yl=6ro_NDJ?m3Tl9b4YsQLuX0{^i4Zw`j#Ox_UdrdwtZB04J| zN7!rA{CFeXb8bhv<{JIsFt}0by|;?7n)9+qx$WU!k9zn5Hs!Hg)L6`^_{reh**eu@ z)17%|afZq-SD1e|kFz@E%~89yP4zZS8mlV0nk-)E_bdzuRta!?#3;$``ft*#H$6ws zZuuZF?P8DEs~MW})DErWs1%vhHEkQ$KmOo5JH=(&mI<!QdLeY{bCtp5z60+j6pGB{ znb)y!cGoKP>dIM(z7s{5l=HGCCmZd$==?1(Z_+kp*^3=(Z2vi}o94RXO?raIg0H7u z)F0-2b<0ET%2BrP%1MduPpw$AnJdw|P-wZz9))Cv=AWL+C#&@bPUQ()YC3c3DnTpP z18N70Rj<XkUaodKCeS9Cm2^c_woNYZOybo!3YwW(yF44OigK>;*uJAs%w+2Glszq< zxfjoTKY>eDe7{Mp<V)@q&T=saTsgaX0t1(C+EY`Xxk2oenxa?iJZ1@xm&>Fc&z-Jh zqZhS+izod~M?y@F=X2IITFF5Px29x-d}&fsX5%_yrZ?er*H?#yUOxUY$Fvvx)LGv8 zQ+3U$*CDHu4sF&{R<*Gfwn_6TzW77S`Q-wub=qlKj<Tf|^`A2}FLC<Md-3dA+AX0! z%8iP@UKuQksn1DUb?$fY#=v<NYkRupO%<AHJ0)>@ee1eSb>b?Htr8|vPl&WmYu&v| zW=ZN(2JSW7LOHqxzePOSiv8yvUQ{>lpi6+|w=b17-<E_IJ&`jB>g0GI#JbV6b$Q(6 z2=~pkM-0v^nHlg%eTQYD%VfPh=Qk8ac)n;6{l>X`-`t$#{^maQ_h(GJwAfd#=0w1J z=P#~D*q)uvNwaws{5A8F!|K{c5<I^nb_!p=^Fw03$B&RV-17~uJX<98EZ9c6CT;bL zAf=M9i*mo-25sBaHq&CasO_qcDY^3#eU?5t>#wx6;Ni=XIpT))+dnNxQ?wHCm0prO z<Ce?2i>32kT$qwF>GH9Us)zgP)44(qmA0MLo_#4Gz2{{~*+o^3FPeherMwquv%Pg* zAN5J~hG&_A@A>N<!drA0%RlHv6dca=Fn=k2`1O|<R%u)B%+}fS<Sy-NG(S1(+D5@k z(=OfK|16;Fo8GD4&BZGe7QQlD^*q3Nl6lVh`A4hTHXMFEqqYAb+cxf%eGkQ14xg)k z;J@OV)%yhpU(Y$JC*77V_kZ(-D;pIoq|-LW>*$I<+iY>ffZ1AezIwt*?bOD8?vqS; z+`DxWuIuzoxgec?;q@o0mic;<r1pNZwy<lK+B7k5!6UI>d)HN4@ZLGtZQP%4`Y&Un z$|ifK=_Usoxu333t5jYkpte$c^+o?4zRRL-l<N2F===I(-nUEgCm!jUJ+!-f>|X<a zeUkJ&rIy$NTc@=xyh3^&H>~;(IA4kU)N01Lmj8juTV|O_7tH!!ReqYc@=EHj3oGY8 zl>RStU#K=dTO}x7tTXhSV$rsLauz4v-Z;-I`L}$A$R!ufHtEgxoA`v5d+FSI8}~au zL)1j#^y<g)^=tfYJC$xyscMQ#cUBIx`1~WEakk2h+1);Gm#@|nXt0=iZQ;aEc}kis zcT4tcy}X&b+Q4!8_RKfRZhQ~8_#P_nisdX@^)TXlfQr0|*elK7m0rfq2X22^*zGl~ zA$~JUMmNiie6f>np8P-a#v=9FgRSS2syK^xip*Z|_h>wi`PSA%_PHUS^l}awUMjhK zb$R=&h2qL0xh;?8D)oA-72-SZoO5z%*hJqqTxYL_dRMW(kFpJOsxjD;Zfk$wd6Jyx zFQ)j1*%kkpLAA`5TsA#RHU@?VJZQCyuDHfzJw>ki(tv|rhaCiJFE8o!UA%UyZ>YwL zwOuoIcP(&r^!OSe*tOjE?zFWh*_@PrM8@evd|>{gQE0}o_XXdcnR91;FDu)(&)$wP zCgHd%=QQTq&XS@|$!c*f0^GK|?-tFJInO!Oc<I$Ya}vJt$;qq{+%;LpBS?1n&(#+k zRpvc)Icl`y$%1<MdpimqNbQt5_};cn`{+ZP;Hs*ukZYXP|5wMnTzTnIEBk4O!-tni zo;y|aHlcgNZ}U=xDQY+Ve(@A~rRaU<nWxI;YQdv(Hcnpjj_<OK^y%!>qR_*ZX39zO zzV})!RVUnJOYY8({dQzu%?^gWg$^0UVO>kQwQ8=^Mf)dgWc(*|&Zgt`>W4!2G8%gi zUbKFtohNLT+`TjR-^}wj9(paWsQL{a*!r5$YAwgez%YjqH4r!Jif6Mj{hGOXmdr~= zre8BBx5`<9r~`5iAc{%ei5E2F3m*)g94POi01`nSDFY1xBgTXqnI|VINK8H}F9TMH z+?&!usA6DXn7{^B_?b;aJHVTfNrVA0#Ejgs&_>a8cyfY*71&_pbfJf$MoI{5@Hat; z$*&Z6z>1OmuYjU>y#!dXo}w67VfVvr`SPp`3>91q45$jFrN9bnpbB4}xNX(X$iNWB W#K53~Vq%9pSm7x}HMT-UkPHA@5B<IX delta 5777 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 XGE99kV9`DDVv}#F2(XpQflL4Zd;gSw diff --git a/tests/test-03-circulaire/c.c b/tests/test-03-circulaire/c.c index 7e53ed3..aee51b0 100644 --- a/tests/test-03-circulaire/c.c +++ b/tests/test-03-circulaire/c.c @@ -1,7 +1,8 @@ #include <stdio.h> +#include <stdlib.h> #include "a.h" -void functionC() { - printf("Function C called\n"); - functionA(); // Appelle une fonction de a.c -> dépendance circulaire +void functionC(void) { + printf("Fonction C appelée\n"); + return; } diff --git a/tests/test-03-circulaire/c.h b/tests/test-03-circulaire/c.h index be34ba5..312d6d6 100644 --- a/tests/test-03-circulaire/c.h +++ b/tests/test-03-circulaire/c.h @@ -1,6 +1,6 @@ #ifndef C_H #define C_H -void functionC(); +void functionC(void); #endif