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