Add a preprocessor protocol name variable

We should convert - to _ in the preprocessor protocol name since - will
lead to a new token, but we don't since it is better to fail early here
and the official wayland-scanner doesn't do this either. The generated
c++ header will give a compiler error when being used which gives the
user a chance to change the protocol name.

Change-Id: I049bdecacc8ed9a70c0879494d4d358ce53f3320
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
This commit is contained in:
Jorgen Lind 2013-11-25 10:44:29 +01:00 committed by The Qt Project
parent e36edb655f
commit 34720a996f

View File

@ -344,6 +344,11 @@ void process(QXmlStreamReader &xml, const QByteArray &headerPath)
return;
}
//We should convert - to _ so that the preprocessor wont generate code which will lead to unexpected behavior
//However, the wayland-scanner doesn't do so we will do the same for now
//QByteArray preProcessorProtocolName = QByteArray(protocolName).replace('-', '_').toUpper();
QByteArray preProcessorProtocolName = QByteArray(protocolName).toUpper();
QList<WaylandInterface> interfaces;
while (xml.readNextStartElement()) {
@ -357,7 +362,7 @@ void process(QXmlStreamReader &xml, const QByteArray &headerPath)
return;
if (option == ServerHeader) {
QByteArray inclusionGuard = "QT_WAYLAND_SERVER_" + protocolName.toUpper();
QByteArray inclusionGuard = QByteArray("QT_WAYLAND_SERVER_") + preProcessorProtocolName.constData();
printf("#ifndef %s\n", inclusionGuard.constData());
printf("#define %s\n", inclusionGuard.constData());
printf("\n");
@ -381,13 +386,15 @@ void process(QXmlStreamReader &xml, const QByteArray &headerPath)
printf("\n");
printf("QT_BEGIN_NAMESPACE\n");
QByteArray serverExport;
if (headerPath.size()) {
serverExport = QByteArray("Q_WAYLAND_SERVER_") + preProcessorProtocolName + "_EXPORT";
printf("\n");
printf("#if !defined(Q_WAYLAND_SERVER_%s_EXPORT)\n", protocolName.toUpper().constData());
printf("#if !defined(%s)\n", serverExport.constData());
printf("# if defined(QT_SHARED)\n");
printf("# define Q_WAYLAND_SERVER_%s_EXPORT Q_DECL_EXPORT\n", protocolName.toUpper().constData());
printf("# define %s Q_DECL_EXPORT\n", serverExport.constData());
printf("# else\n");
printf("# define Q_WAYLAND_SERVER_%s_EXPORT\n", protocolName.toUpper().constData());
printf("# define %s\n", serverExport.constData());
printf("# endif\n");
printf("#endif\n");
}
@ -405,10 +412,7 @@ void process(QXmlStreamReader &xml, const QByteArray &headerPath)
QByteArray stripped = stripInterfaceName(interface.name);
const char *interfaceNameStripped = stripped.constData();
if (headerPath.isEmpty())
printf(" class %s\n {\n", interfaceName);
else
printf(" class Q_WAYLAND_SERVER_%s_EXPORT %s\n {\n",protocolName.toUpper().constData(), interfaceName);
printf(" class %s %s\n {\n", serverExport.constData(), interfaceName);
printf(" public:\n");
printf(" %s(struct ::wl_client *client, int id);\n", interfaceName);
printf(" %s(struct ::wl_display *display);\n", interfaceName);
@ -764,7 +768,7 @@ void process(QXmlStreamReader &xml, const QByteArray &headerPath)
}
if (option == ClientHeader) {
QByteArray inclusionGuard = "QT_WAYLAND_" + protocolName.toUpper();
QByteArray inclusionGuard = QByteArray("QT_WAYLAND_") + preProcessorProtocolName.constData();
printf("#ifndef %s\n", inclusionGuard.constData());
printf("#define %s\n", inclusionGuard.constData());
printf("\n");
@ -777,13 +781,16 @@ void process(QXmlStreamReader &xml, const QByteArray &headerPath)
printf("\n");
printf("QT_BEGIN_NAMESPACE\n");
QByteArray clientExport;
if (headerPath.size()) {
clientExport = QByteArray("Q_WAYLAND_CLIENT_") + preProcessorProtocolName + "_EXPORT";
printf("\n");
printf("#if !defined(Q_WAYLAND_CLIENT_%s_EXPORT)\n", protocolName.toUpper().constData());
printf("#if !defined(%s)\n", clientExport.constData());
printf("# if defined(QT_SHARED)\n");
printf("# define Q_WAYLAND_CLIENT_%s_EXPORT Q_DECL_EXPORT\n", protocolName.toUpper().constData());
printf("# define %s Q_DECL_EXPORT\n", clientExport.constData());
printf("# else\n");
printf("# define Q_WAYLAND_CLIENT_%s_EXPORT\n", protocolName.toUpper().constData());
printf("# define %s\n", clientExport.constData());
printf("# endif\n");
printf("#endif\n");
}
@ -800,10 +807,7 @@ void process(QXmlStreamReader &xml, const QByteArray &headerPath)
QByteArray stripped = stripInterfaceName(interface.name);
const char *interfaceNameStripped = stripped.constData();
if (headerPath.isEmpty())
printf(" class %s\n {\n", interfaceName);
else
printf(" class Q_WAYLAND_CLIENT_%s_EXPORT %s\n {\n",protocolName.toUpper().constData(), interfaceName);
printf(" class %s %s\n {\n", clientExport.constData(), interfaceName);
printf(" public:\n");
printf(" %s(struct ::wl_registry *registry, int id);\n", interfaceName);
printf(" %s(struct ::%s *object);\n", interfaceName, interfaceName);