From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44165) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eyKnN-0006Mi-AA for qemu-devel@nongnu.org; Tue, 20 Mar 2018 13:11:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eyKnI-0006XW-TM for qemu-devel@nongnu.org; Tue, 20 Mar 2018 13:11:33 -0400 Date: Tue, 20 Mar 2018 19:10:42 +0200 From: "Michael S. Tsirkin" Message-ID: <20180320185130-mutt-send-email-mst@kernel.org> References: <1521510562-529051-1-git-send-email-mst@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Subject: Re: [Qemu-devel] [PATCH] qemu: include generated files with <> and not "" List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Weil Cc: qemu-devel@nongnu.org, Peter Maydell , Dmitry Fleytman , sheepdog@lists.wpkg.org, Stefan Hajnoczi , Li Zhijian , David Hildenbrand , Jeff Cody , Zhang Chen , Mark Cave-Ayland , Keith Busch , Max Filippov , Laurent Vivier , Gerd Hoffmann , "Edgar E. Iglesias" , Jiri Pirko , Subbaraya Sundeep , Michael Roth , Marcelo Tosatti , Josh Durgin , Stefano Stabellini , Alberto Garcia , zhanghailiang , Ben Warren , Marcel Apfelbaum , Yongbok Kim , Markus Armbruster , Stefan Berger , Christian Borntraeger , kvm@vger.kernel.org, =?iso-8859-1?Q?Herv=E9?= Poussineau , Shannon Zhao , Anthony Perard , Liu Yuan , David Gibson , Jason Wang , Artyom Tarasenko , Riku Voipio , Fam Zheng , Eduardo Habkost , Corey Minyard , Amit Shah , Pavel Dovgalyuk , Xie Changlong , Alistair Francis , Peter Lieven , "Dr. David Alan Gilbert" , Fabien Chouteau , Greg Kurz , =?iso-8859-1?Q?Marc-Andr=E9?= Lureau , Alex Williamson , qemu-arm@nongnu.org, Peter Chubb , Yuval Shaia , Ronnie Sahlberg , Paolo Bonzini , xen-devel@lists.xenproject.org, John Snow , Richard Henderson , Kevin Wolf , Alexander Graf , qemu-block@nongnu.org, Peter Crosthwaite , Hitoshi Mitake , Wen Congyang , qemu-s390x@nongnu.org, Cornelia Huck , "Richard W.M. Jones" , Juan Quintela , Max Reitz , Michael Walle , qemu-ppc@nongnu.org, Andreas =?iso-8859-1?Q?F=E4rber?= , Igor Mammedov , Hannes Reinecke , Aurelien Jarno , Philippe =?iso-8859-1?Q?Mathieu-Daud=E9?= On Tue, Mar 20, 2018 at 05:33:42PM +0100, Stefan Weil wrote: > Using <> for system include files and "" for local include files is a > convention, and as far as I know most projects adhere to that > convention. So does QEMU currently. Such conventions are not only > important for humans, but also for tools. There are more tools than the > C preprocessor which handle <> and "" differently. For example the GNU > compiler uses -MD or -MMD to automatically generate dependency rules for > make. While -MD generates dependencies to all include files, -MMD does > so only for user include files, but not for system include files. "user" > and "system" means the different forms how include statements are > written. QEMU still seems to use -MMD: > > rules.mak:QEMU_DGFLAGS += -MMD -MP -MT $@ -MF $(@D)/$(*F).d To my knowledge, and according to my limited testing, system headers in this context means the default ones not supplied with -I. If I had to guess, that is the definition most other tools are likely to use. > > Other tools like static code analysers could restrict their warning and > error messages to user include files and ignore problems in system > include files. Could you give some exacmples of tools like that? IMHO they would not work correctly if they did not treat include directives the way compiler does. C standard is pretty explicit that the only difference is extra directories searched: A preprocessing directive of the form # include "q-char-sequence" new-line causes the replacement of that directive by the entire contents of the source file identified by the specified sequence between the " delimiters. The named source file is searched for in an implementation-defined manner. If this search is not supported, or if the search fails, the directive is reprocessed as if it read # include new-line with the identical contained sequence (including > characters, if any) from the original directive. > Very large projects often split in sub projects, maybe one of them > describing the API. Then that API headers are similar to system headers > and can be included using <>, although they still belong to the same > larger project. Do we have a stable QEMU API described in a (small) > number of include files which typically do not change? If yes, then > those include files could be included using <> because we don't need > them in dependency lists or in static code analysis reports. > > For all other QEMU include files, I'd stick to using "". > > Regards > Stefan Most people know that system headers are the ones in /usr/include The distinction that they are pulled in with include "" is a QEMU construct. If we want to be able to distinguish between internal and external headers, the standard way to do it in C is by prefixing the names with qemu/ qemu- or qemu_. In fact we kind of already do this - if you see a name with a slash in there you can be pretty sure it's internal to qemu. Exceptions are elf.h glib-compat.h and the generated trace.h. Let's mv include/* include/qemu/ ? -- MST