diff mbox

PATCH TRUNK: [gcc/configure.ac] Generate GCCPLUGIN_VERSION_* macros

Message ID 20110706134642.GA27870@ours.starynkevitch.net
State New
Headers show

Commit Message

Basile Starynkevitch July 6, 2011, 1:46 p.m. UTC
On Wed, Jul 06, 2011 at 03:21:47PM +0200, Richard Guenther wrote:
> On Wed, Jul 6, 2011 at 2:50 PM, Basile Starynkevitch
> <basile@starynkevitch.net> wrote:
> >
> > I belive it can help to make plugin code more robust. A serious plugin developper could then add in his plugin code something like
> >
> > #if GCCPLUGIN_VERSION != 4007
> > #error this plugin can be built only for GCC 4.7
> > #endif
> >
> > and with such a feature the plugin won't even compile if, for one reason or
> > another, the wrong gcc has been considered i.e. passed with
> >   -I$(gcc -print-file-name=plugin)
> >
> > This brings some help to the careful plugin coder, and don't harm GCC itself.
> >
> > For GCC trunk or branches we have the BUILDING_GCC_VERSION macro, but it
> > does not appear in the headers insdtalled by gcc-4.6-plugin-dev package.
> > Plugins can currently only check for version compatibility at plugin dlopen
> > time, not at plugin build time!
> 
> I'd say exposng major, minor and patchlevel (instead of micro)
> should be enough.  


Thanks for the comment. I am attaching a diff to GCC trunk 175912, and I
documented the feature.

#### gcc/ChangeLog entry #####
2011-07-06  Basile Starynkevitch  <basile@starynkevitch.net>

	* configure.ac (plugin-version.h): Generate
	GCCPLUGIN_VERSION_MAJOR, GCCPLUGIN_VERSION_MINOR,
	GCCPLUGIN_VERSION_PATCHLEVEL, GCCPLUGIN_VERSION constant integer
	macros.

	* configure: Regenerate.

	* doc/plugins.texi (Building GCC plugins): Mention
	GCCPLUGIN_VERSION ... constant macros in plugin-version.h.
### end of gcc/ChangeLog entry ####

Ok for trunk?

Regards.

Comments

Richard Biener July 6, 2011, 2:02 p.m. UTC | #1
On Wed, Jul 6, 2011 at 3:46 PM, Basile Starynkevitch
<basile@starynkevitch.net> wrote:
> On Wed, Jul 06, 2011 at 03:21:47PM +0200, Richard Guenther wrote:
>> On Wed, Jul 6, 2011 at 2:50 PM, Basile Starynkevitch
>> <basile@starynkevitch.net> wrote:
>> >
>> > I belive it can help to make plugin code more robust. A serious plugin developper could then add in his plugin code something like
>> >
>> > #if GCCPLUGIN_VERSION != 4007
>> > #error this plugin can be built only for GCC 4.7
>> > #endif
>> >
>> > and with such a feature the plugin won't even compile if, for one reason or
>> > another, the wrong gcc has been considered i.e. passed with
>> >   -I$(gcc -print-file-name=plugin)
>> >
>> > This brings some help to the careful plugin coder, and don't harm GCC itself.
>> >
>> > For GCC trunk or branches we have the BUILDING_GCC_VERSION macro, but it
>> > does not appear in the headers insdtalled by gcc-4.6-plugin-dev package.
>> > Plugins can currently only check for version compatibility at plugin dlopen
>> > time, not at plugin build time!
>>
>> I'd say exposng major, minor and patchlevel (instead of micro)
>> should be enough.
>
>
> Thanks for the comment. I am attaching a diff to GCC trunk 175912, and I
> documented the feature.
>
> #### gcc/ChangeLog entry #####
> 2011-07-06  Basile Starynkevitch  <basile@starynkevitch.net>
>
>        * configure.ac (plugin-version.h): Generate
>        GCCPLUGIN_VERSION_MAJOR, GCCPLUGIN_VERSION_MINOR,
>        GCCPLUGIN_VERSION_PATCHLEVEL, GCCPLUGIN_VERSION constant integer
>        macros.
>
>        * configure: Regenerate.
>
>        * doc/plugins.texi (Building GCC plugins): Mention
>        GCCPLUGIN_VERSION ... constant macros in plugin-version.h.
> ### end of gcc/ChangeLog entry ####
>
> Ok for trunk?

I'm not sure using cut is portable enough - for bversion.h generation
we use sed instead (see Makefile.in), so I suppose copying that
would be better.

I can't approve the configury changes but the change itself looks
reasonable to me

Thanks,
Richard.

> Regards.
>
> --
> Basile STARYNKEVITCH         http://starynkevitch.net/Basile/
> email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359
> 8, rue de la Faiencerie, 92340 Bourg La Reine, France
> *** opinions {are only mines, sont seulement les miennes} ***
>
diff mbox

Patch

Index: gcc/doc/plugins.texi
===================================================================
--- gcc/doc/plugins.texi	(revision 175912)
+++ gcc/doc/plugins.texi	(working copy)
@@ -417,6 +417,17 @@ 
 Inside plugins, this @code{plugin} directory name can be queried by
 calling @code{default_plugin_dir_name ()}.
 
+Plugins may know, when they are compiled, the GCC version for which
+@file{plugin-version.h} is provided. The constant macros
+@code{GCCPLUGIN_VERSION_MAJOR}, @code{GCCPLUGIN_VERSION_MINOR},
+@code{GCCPLUGIN_VERSION_PATCHLEVEL}, @code{GCCPLUGIN_VERSION} are
+integer numbers, so a plugin could ensure it is built for GCC 4.7 with 
+@smallexample
+#if GCCPLUGIN_VERSION != 4007
+#error this GCC plugin is for GCC 4.7
+#endif
+@end smallexample
+
 The following GNU Makefile excerpt shows how to build a simple plugin:
 
 @smallexample
Index: gcc/configure
===================================================================
--- gcc/configure	(revision 175912)
+++ gcc/configure	(working copy)
@@ -11072,6 +11072,11 @@ 
 cat > plugin-version.h <<EOF
 #include "configargs.h"
 
+#define GCCPLUGIN_VERSION_MAJOR   `cut -d. -f1 $srcdir/BASE-VER`
+#define GCCPLUGIN_VERSION_MINOR   `cut -d. -f2 $srcdir/BASE-VER`
+#define GCCPLUGIN_VERSION_PATCHLEVEL   `cut -d. -f3 $srcdir/BASE-VER`
+#define GCCPLUGIN_VERSION  (GCCPLUGIN_VERSION_MAJOR*1000 + GCCPLUGIN_VERSION_MINOR)
+
 static char basever[] = "$gcc_BASEVER";
 static char datestamp[] = "$gcc_DATESTAMP";
 static char devphase[] = "$gcc_DEVPHASE";
@@ -17623,7 +17628,7 @@ 
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 17626 "configure"
+#line 17631 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -17729,7 +17734,7 @@ 
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 17732 "configure"
+#line 17737 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
Index: gcc/configure.ac
===================================================================
--- gcc/configure.ac	(revision 175912)
+++ gcc/configure.ac	(working copy)
@@ -1511,6 +1511,11 @@ 
 cat > plugin-version.h <<EOF
 #include "configargs.h"
 
+#define GCCPLUGIN_VERSION_MAJOR   `cut -d. -f1 $srcdir/BASE-VER`
+#define GCCPLUGIN_VERSION_MINOR   `cut -d. -f2 $srcdir/BASE-VER`
+#define GCCPLUGIN_VERSION_PATCHLEVEL   `cut -d. -f3 $srcdir/BASE-VER`
+#define GCCPLUGIN_VERSION  (GCCPLUGIN_VERSION_MAJOR*1000 + GCCPLUGIN_VERSION_MINOR)
+
 static char basever[] = "$gcc_BASEVER";
 static char datestamp[] = "$gcc_DATESTAMP";
 static char devphase[] = "$gcc_DEVPHASE";