<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">Le 21 octobre 2016 Ã  08:36, Rémi Cardona <span dir="ltr"><<a href="mailto:remi@gentoo.org" target="_blank">remi@gentoo.org</a>></span> a Ã©crit :<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="gmail-">Le 06/10/2016 Ã  20:44, Ludovic Rousseau a Ã©crit :<br>
> Bonsoir,<br>
><br>
> Je commence Ã  corriger les warnings. Juste avec clang et le niveau de<br>
> warnings de base j'ai déjà plusieurs warnings inquiétants.<br>
><br>
> Par exemple j'en ai corrigé 1 qui est aussi un bug :<br>
> <a href="https://github.com/grisbi/grisbi/commit/f28fd44812a9112c670568849ae491a73f5e7d4e" rel="noreferrer" target="_blank">https://github.com/grisbi/<wbr>grisbi/commit/<wbr>f28fd44812a9112c670568849ae491<wbr>a73f5e7d4e</a><br>
><br>
> Mon idée est de corriger tous les warnings et ensuite de configurer<br>
> Travis-CI avec -Werror pour qu'un nouveau warning fasse Ã©chouer la<br>
> compilation automatique.<br>
<br>
</span>C'est une super idée! Depuis le début, je compilais grisbi avec pas mal<br>
d'options mais le passage Ã  gtk3 a généré tellement de nouveaux warnings<br>
que j'ai laissé tomber (honte sur moi). Idem pour static-analyzer de<br>
clang, il m'a permis de corriger Ã©normément de problèmes alors que le<br>
projet Ã©tait tout jeune. J'imagine qu'il a encore du s'améliorer depuis<br>
et qu'il trouve moult nouveaux problèmes :)<br>
<br>
Concernant les warnings, je suggère de s'inspirer de ce qui est fait<br>
dans la galaxie Xorg:<br>
<br>
* une macro XORG_TESTSET_CFLAG[1] qui teste qu'une option de compilateur<br>
marche (du moins, ne fait pas planter la compilation d'un fichier vide)<br>
* une macro XORG_COMPILER_FLAGS[2] qui définit une belle liste de<br>
warnings Ã  activer[3], et de warnings systématiquement transformés en<br>
erreurs[4]<br>
* une macro XORG_STRICT_OPTION[5] qui ajoute l'option<br>
--enable-strict-compilation au ./configure pour facilement activer -Werror<br>
<br>
Cette dernière option n'est pas activée par défaut afin de ne pas casser<br>
inutilement la compilation de vieilles versions de paquets Xorg avec de<br>
nouveaux compilateurs. Lorsqu'une personne travaille sur le code de<br>
Xorg, il/elle n'a donc qu'à activer cette option pour avoir le niveau<br>
maximum de sévérité.<br>
<br>
Le code des macros m4 de Xorg est assez compliqué, voire velu, mais il<br>
s'explique par le nombre d'OS et d'architectures (donc de compilateurs)<br>
supportés, ainsi que par le nombre de paquets l'utilisant (20+<br>
bibliothèques, 10+ pilotes, 30+ outils, le serveur X, etc).<br>
<br>
J'ai pris Xorg parce que je connais plutôt bien ce projet, mais si<br>
d'autres choses existent ailleurs (je pense Ã  autoconf-archive<br>
notamment[6][7]), allons-y!<br></blockquote><div><br></div><div>Super. Je ne connaissais pas cet aspect de Xorg.<br></div><div><br>Avec clang 8.0.0 la macro XORG_COMPILER_FLAGS m'a trouvé :<br>BASE_CFLAGS =  -Wall -Wpointer-arith -Wmissing-declarations -Wformat=2 -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wbad-function-cast -Wold-style-definition -Wdeclaration-after-statement -Wunused -Wuninitialized -Wshadow -Wmissing-noreturn -Wmissing-format-attribute -Wredundant-decls -Werror=implicit -Werror=nonnull -Werror=init-self -Werror=main -Werror=missing-braces -Werror=sequence-point -Werror=return-type -Werror=trigraphs -Werror=array-bounds -Werror=write-strings -Werror=address -Werror=int-to-pointer-cast -Werror=pointer-to-int-cast<br><br></div><div>Il semble que toutes les options testées par XORG_COMPILER_FLAGS  (sauf -Wlogical-op) soient présentes :<br></div><div>[...]<br></div><div>checking whether __clang__ is declared... yes<br>checking whether __INTEL_COMPILER is declared... no<br>checking whether __SUNPRO_C is declared... no<br>checking if gcc supports -Werror=unknown-warning-option... yes<br>checking if gcc supports -Werror=unused-command-line-argument... yes<br>checking if gcc supports -Wall... yes<br>checking if gcc supports -Wpointer-arith... yes<br>checking if gcc supports -Wmissing-declarations... yes<br>checking if gcc supports -Wformat=2... yes<br>checking if gcc supports -Wstrict-prototypes... yes<br>checking if gcc supports -Wmissing-prototypes... yes<br>checking if gcc supports -Wnested-externs... yes<br>checking if gcc supports -Wbad-function-cast... yes<br>checking if gcc supports -Wold-style-definition... yes<br>checking if gcc supports -Wdeclaration-after-statement... yes<br>checking if gcc supports -Wunused... yes<br>checking if gcc supports -Wuninitialized... yes<br>checking if gcc supports -Wshadow... yes<br>checking if gcc supports -Wmissing-noreturn... yes<br>checking if gcc supports -Wmissing-format-attribute... yes<br>checking if gcc supports -Wredundant-decls... yes<br>checking if gcc supports -Wlogical-op... no<br>checking if gcc supports -Werror=implicit... yes<br>checking if gcc supports -Werror=nonnull... yes<br>checking if gcc supports -Werror=init-self... yes<br>checking if gcc supports -Werror=main... yes<br>checking if gcc supports -Werror=missing-braces... yes<br>checking if gcc supports -Werror=sequence-point... yes<br>checking if gcc supports -Werror=return-type... yes<br>checking if gcc supports -Werror=trigraphs... yes<br>checking if gcc supports -Werror=array-bounds... yes<br>checking if gcc supports -Werror=write-strings... yes<br>checking if gcc supports -Werror=address... yes<br>checking if gcc supports -Werror=int-to-pointer-cast... yes<br>checking if gcc supports -Werror=pointer-to-int-cast... yes<br>checking if gcc supports -pedantic... yes<br>checking if gcc supports -Werror... yes<br>checking if gcc supports -Werror=attributes... yes<br><div>[...]<br></div><br></div><div>Je crois qu'il va falloir activer une options une par une. J'ai un peu trop de warnings si j'utilise tout d'un coup :-)<br><br></div><div>à+<br><br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Rémi<br>
<br>
[1]<br>
<a href="https://cgit.freedesktop.org/xorg/util/macros/tree/xorg-macros.m4.in#n1540" rel="noreferrer" target="_blank">https://cgit.freedesktop.org/<wbr>xorg/util/macros/tree/xorg-<wbr>macros.m4.in#n1540</a><br>
[2]<br>
<a href="https://cgit.freedesktop.org/xorg/util/macros/tree/xorg-macros.m4.in#n1633" rel="noreferrer" target="_blank">https://cgit.freedesktop.org/<wbr>xorg/util/macros/tree/xorg-<wbr>macros.m4.in#n1633</a><br>
[3]<br>
<a href="https://cgit.freedesktop.org/xorg/util/macros/tree/xorg-macros.m4.in#n1669" rel="noreferrer" target="_blank">https://cgit.freedesktop.org/<wbr>xorg/util/macros/tree/xorg-<wbr>macros.m4.in#n1669</a><br>
[4]<br>
<a href="https://cgit.freedesktop.org/xorg/util/macros/tree/xorg-macros.m4.in#n1702" rel="noreferrer" target="_blank">https://cgit.freedesktop.org/<wbr>xorg/util/macros/tree/xorg-<wbr>macros.m4.in#n1702</a><br>
[5]<br>
<a href="https://cgit.freedesktop.org/xorg/util/macros/tree/xorg-macros.m4.in#n1765" rel="noreferrer" target="_blank">https://cgit.freedesktop.org/<wbr>xorg/util/macros/tree/xorg-<wbr>macros.m4.in#n1765</a><br>
[6] <a href="https://cgit.freedesktop.org/systemd/systemd/tree/configure.ac#n148" rel="noreferrer" target="_blank">https://cgit.freedesktop.org/<wbr>systemd/systemd/tree/<wbr>configure.ac#n148</a><br>
[7]<br>
<a href="http://www.gnu.org/software/autoconf-archive/ax_append_compile_flags.html#ax_append_compile_flags" rel="noreferrer" target="_blank">http://www.gnu.org/software/<wbr>autoconf-archive/ax_append_<wbr>compile_flags.html#ax_append_<wbr>compile_flags</a><br>
<div class="gmail-HOEnZb"><div class="gmail-h5">______________________________<wbr>_________________<br>
devel mailing list<br>
<a href="mailto:devel@listes.grisbi.org">devel@listes.grisbi.org</a><br>
<a href="http://listes.grisbi.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://listes.grisbi.org/<wbr>mailman/listinfo/devel</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature"> Dr. Ludovic Rousseau</div>
</div></div>