/**
+ * Macros for building symbol and strings. Standard CPP two step...
+ */
+
+#define __DRI_REAL_STRINGIFY(x) # x
+#define __DRI_STRINGIFY(x) __DRI_REAL_STRINGIFY(x)
+#define __DRI_REAL_MAKE_VERSION(name, version) name ## _ ## version
+#define __DRI_MAKE_VERSION(name, version) __DRI_REAL_MAKE_VERSION(name, version)
+
+#define __DRI_CREATE_NEW_SCREEN \
+ __DRI_MAKE_VERSION(__driCreateNewScreen, __DRI_INTERFACE_VERSION)
+
+#define __DRI_CREATE_NEW_SCREEN_STRING \
+ __DRI_STRINGIFY(__DRI_CREATE_NEW_SCREEN)
+
+/**
* \name Functions and data provided by the driver.
*/
/*@{*/
+#define __DRI_INTERFACE_VERSION 20070105
+
typedef void *(CREATENEWSCREENFUNC)(__DRInativeDisplay *dpy, int scrn,
__DRIscreen *psc, const __GLcontextModes * modes,
const __DRIversion * ddx_version, const __DRIversion * dri_version,
const __DRIinterfaceMethods * interface,
__GLcontextModes ** driver_modes);
typedef CREATENEWSCREENFUNC* PFNCREATENEWSCREENFUNC;
-extern CREATENEWSCREENFUNC __driCreateNewScreen_20070105;
+extern CREATENEWSCREENFUNC __DRI_CREATE_NEW_SCREEN;
+
/**
* The version of the last incompatible loader/driver inteface change is
* appended to the name of the \c __driCreateNewScreen function. This
* prevents loaders from trying to load drivers that are too old.
- *
- * \todo
- * Create a macro or something so that this is automatically updated.
*/
-static const char createNewScreenName[] = "__driCreateNewScreen_20070105";
+static const char createNewScreenName[] = __DRI_CREATE_NEW_SCREEN_STRING;
/**