diff mbox series

vxworks: allow self configured definition of _WRS_VXWORKS_MAJOR

Message ID 7619A147-B1FC-4B67-A6AA-12FEF83194C8@adacore.com
State New
Headers show
Series vxworks: allow self configured definition of _WRS_VXWORKS_MAJOR | expand

Commit Message

Olivier Hainque Oct. 15, 2020, 9:33 a.m. UTC
Hello,

While performing experimental builds for testing
purposes, I had occasional uses of the possibility to
enforce a _WRS_VXWORKS_MAJOR in an environment where
it was not available from the system headers, by way
of a self-spec at configuration time.

This patch adjusts _vxworks-versions.h to help support
that.

The experiments also exposed that _WRS_VXWORKS_MINOR
is only provided when really meaningful, e.g. from
6.4 to 6.9, and that it is possibly omitted even in
very recent VxWorks 7 configurations. We just then pick
a conervative default to 0 in such cases.

Tested with a few regular build & test sequences
for VxWworks 6.9 and 7.2 in addition to the experimental
ones.

Olivier


2020-10-15  Olivier Hainque  <hainque@adacore.com>

gcc/
	* config/vxworks/_vxworks-versions.h: Only include
	version.h if _WRS_VXWORKS_MAJOR is not defined.
	Provide a default _WRS_VXWORKS_MINOR (0).
diff mbox series

Patch

--- a/gcc/config/vxworks/_vxworks-versions.h
+++ b/gcc/config/vxworks/_vxworks-versions.h
@@ -22,17 +22,29 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #ifndef _VXWORKS_VERSIONS_H
 #define _VXWORKS_VERSIONS_H  1
 
-/* All we need is access to the bare _WRS_VXWORKS_MAJOR/MINOR macros
-   exposed by version.h.  Cheat a bit to make sure we don't drag additional
-   header files, which can easily cause #include ordering nightmares.  */
+/* All we need is access to the bare _WRS_VXWORKS_MAJOR/MINOR macros,
+   exposed by version.h or already provided somehow (e.g. with a self
+   spec for some reason).  When resorting to system headers, cheat a
+   bit to make sure we don't drag additional header files, which can
+   easily cause #include ordering nightmares.  */
 
+#if !defined(_WRS_VXWORKS_MAJOR)
 #pragma push_macro("_WRS_KERNEL")
 #undef _WRS_KERNEL
 #include <version.h>
 #pragma pop_macro("_WRS_KERNEL")
+#endif
+
+/* A lot depends on the MAJOR so we really need to make sure we have
+   that.  MINOR is less critical and many environments don't actually
+   define it unless it is really meaningful (e.g. 6.4 through 6.9).  */
 
 #if !defined(_WRS_VXWORKS_MAJOR)
-#error "VxWorks version macros needed but not defined"
+#error "_WRS_VXWORKS_MAJOR undefined"
+#endif
+
+#if !defined(_WRS_VXWORKS_MINOR)
+#define _WRS_VXWORKS_MINOR 0
 #endif
 
 #define _VXWORKS_MAJOR_GT(MAJOR) (_WRS_VXWORKS_MAJOR > (MAJOR))