From a3ee9bc23ead3ca88cb6787ca7add085d1d8ffcc Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 17 Oct 2011 15:16:31 +1000 Subject: First step of removal of Q_SENSORS_EXPXORT macro from qglobal.h Each module handles its own exports. We need to change the QtSensors version, remove the qglobal.h define and then add it back under the old name in QtSensors. Change-Id: I4183b7fcfc46469745c11c373d3122f02d64ccc7 Reviewed-by: Alex --- src/sensors/make_sensor.pl | 6 +- src/sensors/qaccelerometer.h | 6 +- src/sensors/qambientlightsensor.h | 6 +- src/sensors/qcompass.h | 6 +- src/sensors/qgyroscope.h | 6 +- src/sensors/qirproximitysensor.h | 6 +- src/sensors/qlightsensor.h | 6 +- src/sensors/qmagnetometer.h | 6 +- src/sensors/qorientationsensor.h | 6 +- src/sensors/qproximitysensor.h | 6 +- src/sensors/qrotationsensor.h | 6 +- src/sensors/qsensor.h | 8 ++- src/sensors/qsensorbackend.h | 2 +- src/sensors/qsensormanager.cpp | 2 +- src/sensors/qsensormanager.h | 4 +- src/sensors/qsensorplugin.h | 6 +- src/sensors/qsensorsglobal.h | 73 ++++++++++++++++++++++++ src/sensors/qtapsensor.h | 6 +- src/sensors/sensors.pro | 1 + tests/auto/qsensor/tst_qsensor.cpp | 2 +- tests/auto/sensors2qmlapi/tst_sensors2qmlapi.cpp | 2 +- 21 files changed, 125 insertions(+), 47 deletions(-) create mode 100644 src/sensors/qsensorsglobal.h diff --git a/src/sensors/make_sensor.pl b/src/sensors/make_sensor.pl index 9a6ea40..0082287 100755 --- a/src/sensors/make_sensor.pl +++ b/src/sensors/make_sensor.pl @@ -128,7 +128,7 @@ QT_BEGIN_NAMESPACE class '.$reading_private.'; -class Q_SENSORS_EXPORT '.$reading.' : public QSensorReading +class Q_SENSORS_EXPORT_TEMP '.$reading.' : public QSensorReading { Q_OBJECT Q_PROPERTY(qreal myprop READ myprop) @@ -138,7 +138,7 @@ public: void setMyprop(qreal myprop); }; -class Q_SENSORS_EXPORT '.$filter.' : public QSensorFilter +class Q_SENSORS_EXPORT_TEMP '.$filter.' : public QSensorFilter { public: virtual bool filter('.$reading.' *reading) = 0; @@ -146,7 +146,7 @@ private: bool filter(QSensorReading *reading) { return filter(static_cast<'.$reading.'*>(reading)); } }; -class Q_SENSORS_EXPORT '.$sensor.' : public QSensor +class Q_SENSORS_EXPORT_TEMP '.$sensor.' : public QSensor { Q_OBJECT public: diff --git a/src/sensors/qaccelerometer.h b/src/sensors/qaccelerometer.h index e376b3f..08549ed 100644 --- a/src/sensors/qaccelerometer.h +++ b/src/sensors/qaccelerometer.h @@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE class QAccelerometerReadingPrivate; -class Q_SENSORS_EXPORT QAccelerometerReading : public QSensorReading +class Q_SENSORS_EXPORT_TEMP QAccelerometerReading : public QSensorReading { Q_OBJECT Q_PROPERTY(qreal x READ x) @@ -66,7 +66,7 @@ public: void setZ(qreal z); }; -class Q_SENSORS_EXPORT QAccelerometerFilter : public QSensorFilter +class Q_SENSORS_EXPORT_TEMP QAccelerometerFilter : public QSensorFilter { public: virtual bool filter(QAccelerometerReading *reading) = 0; @@ -74,7 +74,7 @@ private: bool filter(QSensorReading *reading) { return filter(static_cast(reading)); } }; -class Q_SENSORS_EXPORT QAccelerometer : public QSensor +class Q_SENSORS_EXPORT_TEMP QAccelerometer : public QSensor { Q_OBJECT public: diff --git a/src/sensors/qambientlightsensor.h b/src/sensors/qambientlightsensor.h index 5f05520..aa39670 100644 --- a/src/sensors/qambientlightsensor.h +++ b/src/sensors/qambientlightsensor.h @@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE class QAmbientLightReadingPrivate; -class Q_SENSORS_EXPORT QAmbientLightReading : public QSensorReading +class Q_SENSORS_EXPORT_TEMP QAmbientLightReading : public QSensorReading { Q_OBJECT Q_ENUMS(LightLevel) @@ -68,7 +68,7 @@ public: void setLightLevel(LightLevel lightLevel); }; -class Q_SENSORS_EXPORT QAmbientLightFilter : public QSensorFilter +class Q_SENSORS_EXPORT_TEMP QAmbientLightFilter : public QSensorFilter { public: virtual bool filter(QAmbientLightReading *reading) = 0; @@ -76,7 +76,7 @@ private: bool filter(QSensorReading *reading) { return filter(static_cast(reading)); } }; -class Q_SENSORS_EXPORT QAmbientLightSensor : public QSensor +class Q_SENSORS_EXPORT_TEMP QAmbientLightSensor : public QSensor { Q_OBJECT public: diff --git a/src/sensors/qcompass.h b/src/sensors/qcompass.h index 623b5c5..13dd1ac 100644 --- a/src/sensors/qcompass.h +++ b/src/sensors/qcompass.h @@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE class QCompassReadingPrivate; -class Q_SENSORS_EXPORT QCompassReading : public QSensorReading +class Q_SENSORS_EXPORT_TEMP QCompassReading : public QSensorReading { Q_OBJECT Q_PROPERTY(qreal azimuth READ azimuth) @@ -62,7 +62,7 @@ public: void setCalibrationLevel(qreal calibrationLevel); }; -class Q_SENSORS_EXPORT QCompassFilter : public QSensorFilter +class Q_SENSORS_EXPORT_TEMP QCompassFilter : public QSensorFilter { public: virtual bool filter(QCompassReading *reading) = 0; @@ -70,7 +70,7 @@ private: bool filter(QSensorReading *reading) { return filter(static_cast(reading)); } }; -class Q_SENSORS_EXPORT QCompass : public QSensor +class Q_SENSORS_EXPORT_TEMP QCompass : public QSensor { Q_OBJECT public: diff --git a/src/sensors/qgyroscope.h b/src/sensors/qgyroscope.h index d4d2b65..ecb6cd8 100644 --- a/src/sensors/qgyroscope.h +++ b/src/sensors/qgyroscope.h @@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE class QGyroscopeReadingPrivate; -class Q_SENSORS_EXPORT QGyroscopeReading : public QSensorReading +class Q_SENSORS_EXPORT_TEMP QGyroscopeReading : public QSensorReading { Q_OBJECT Q_PROPERTY(qreal x READ x) @@ -66,7 +66,7 @@ public: void setZ(qreal z); }; -class Q_SENSORS_EXPORT QGyroscopeFilter : public QSensorFilter +class Q_SENSORS_EXPORT_TEMP QGyroscopeFilter : public QSensorFilter { public: virtual bool filter(QGyroscopeReading *reading) = 0; @@ -74,7 +74,7 @@ private: bool filter(QSensorReading *reading) { return filter(static_cast(reading)); } }; -class Q_SENSORS_EXPORT QGyroscope : public QSensor +class Q_SENSORS_EXPORT_TEMP QGyroscope : public QSensor { Q_OBJECT public: diff --git a/src/sensors/qirproximitysensor.h b/src/sensors/qirproximitysensor.h index 41f9985..58b7100 100644 --- a/src/sensors/qirproximitysensor.h +++ b/src/sensors/qirproximitysensor.h @@ -46,7 +46,7 @@ class QIRProximityReadingPrivate; -class Q_SENSORS_EXPORT QIRProximityReading : public QSensorReading +class Q_SENSORS_EXPORT_TEMP QIRProximityReading : public QSensorReading { Q_OBJECT Q_PROPERTY(qreal reflectance READ reflectance) @@ -56,7 +56,7 @@ public: void setReflectance(qreal reflectance); }; -class Q_SENSORS_EXPORT QIRProximityFilter : public QSensorFilter +class Q_SENSORS_EXPORT_TEMP QIRProximityFilter : public QSensorFilter { public: virtual bool filter(QIRProximityReading *reading) = 0; @@ -64,7 +64,7 @@ private: bool filter(QSensorReading *reading) { return filter(static_cast(reading)); } }; -class Q_SENSORS_EXPORT QIRProximitySensor : public QSensor +class Q_SENSORS_EXPORT_TEMP QIRProximitySensor : public QSensor { Q_OBJECT public: diff --git a/src/sensors/qlightsensor.h b/src/sensors/qlightsensor.h index 6cea67b..9e3a7de 100644 --- a/src/sensors/qlightsensor.h +++ b/src/sensors/qlightsensor.h @@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE class QLightReadingPrivate; -class Q_SENSORS_EXPORT QLightReading : public QSensorReading +class Q_SENSORS_EXPORT_TEMP QLightReading : public QSensorReading { Q_OBJECT Q_PROPERTY(qreal lux READ lux) @@ -58,7 +58,7 @@ public: void setLux(qreal lux); }; -class Q_SENSORS_EXPORT QLightFilter : public QSensorFilter +class Q_SENSORS_EXPORT_TEMP QLightFilter : public QSensorFilter { public: virtual bool filter(QLightReading *reading) = 0; @@ -66,7 +66,7 @@ private: bool filter(QSensorReading *reading) { return filter(static_cast(reading)); } }; -class Q_SENSORS_EXPORT QLightSensor : public QSensor +class Q_SENSORS_EXPORT_TEMP QLightSensor : public QSensor { Q_OBJECT #ifdef Q_QDOC diff --git a/src/sensors/qmagnetometer.h b/src/sensors/qmagnetometer.h index c382cd7..e8891f1 100644 --- a/src/sensors/qmagnetometer.h +++ b/src/sensors/qmagnetometer.h @@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE class QMagnetometerReadingPrivate; -class Q_SENSORS_EXPORT QMagnetometerReading : public QSensorReading +class Q_SENSORS_EXPORT_TEMP QMagnetometerReading : public QSensorReading { Q_OBJECT Q_PROPERTY(qreal x READ x) @@ -70,7 +70,7 @@ public: void setCalibrationLevel(qreal calibrationLevel); }; -class Q_SENSORS_EXPORT QMagnetometerFilter : public QSensorFilter +class Q_SENSORS_EXPORT_TEMP QMagnetometerFilter : public QSensorFilter { public: virtual bool filter(QMagnetometerReading *reading) = 0; @@ -78,7 +78,7 @@ private: bool filter(QSensorReading *reading) { return filter(static_cast(reading)); } }; -class Q_SENSORS_EXPORT QMagnetometer : public QSensor +class Q_SENSORS_EXPORT_TEMP QMagnetometer : public QSensor { Q_OBJECT #ifdef Q_QDOC diff --git a/src/sensors/qorientationsensor.h b/src/sensors/qorientationsensor.h index b9e2206..d5985f4 100644 --- a/src/sensors/qorientationsensor.h +++ b/src/sensors/qorientationsensor.h @@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE class QOrientationReadingPrivate; -class Q_SENSORS_EXPORT QOrientationReading : public QSensorReading +class Q_SENSORS_EXPORT_TEMP QOrientationReading : public QSensorReading { Q_OBJECT Q_ENUMS(Orientation) @@ -69,7 +69,7 @@ public: void setOrientation(Orientation orientation); }; -class Q_SENSORS_EXPORT QOrientationFilter : public QSensorFilter +class Q_SENSORS_EXPORT_TEMP QOrientationFilter : public QSensorFilter { public: virtual bool filter(QOrientationReading *reading) = 0; @@ -77,7 +77,7 @@ private: bool filter(QSensorReading *reading) { return filter(static_cast(reading)); } }; -class Q_SENSORS_EXPORT QOrientationSensor : public QSensor +class Q_SENSORS_EXPORT_TEMP QOrientationSensor : public QSensor { Q_OBJECT public: diff --git a/src/sensors/qproximitysensor.h b/src/sensors/qproximitysensor.h index 5c8ae20..3a7cdf7 100644 --- a/src/sensors/qproximitysensor.h +++ b/src/sensors/qproximitysensor.h @@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE class QProximityReadingPrivate; -class Q_SENSORS_EXPORT QProximityReading : public QSensorReading +class Q_SENSORS_EXPORT_TEMP QProximityReading : public QSensorReading { Q_OBJECT Q_PROPERTY(bool close READ close) @@ -58,7 +58,7 @@ public: void setClose(bool close); }; -class Q_SENSORS_EXPORT QProximityFilter : public QSensorFilter +class Q_SENSORS_EXPORT_TEMP QProximityFilter : public QSensorFilter { public: virtual bool filter(QProximityReading *reading) = 0; @@ -66,7 +66,7 @@ private: bool filter(QSensorReading *reading) { return filter(static_cast(reading)); } }; -class Q_SENSORS_EXPORT QProximitySensor : public QSensor +class Q_SENSORS_EXPORT_TEMP QProximitySensor : public QSensor { Q_OBJECT public: diff --git a/src/sensors/qrotationsensor.h b/src/sensors/qrotationsensor.h index 19a548a..fae93ba 100644 --- a/src/sensors/qrotationsensor.h +++ b/src/sensors/qrotationsensor.h @@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE class QRotationReadingPrivate; -class Q_SENSORS_EXPORT QRotationReading : public QSensorReading +class Q_SENSORS_EXPORT_TEMP QRotationReading : public QSensorReading { Q_OBJECT Q_PROPERTY(qreal x READ x) @@ -66,7 +66,7 @@ public: void setZ(qreal z); }; -class Q_SENSORS_EXPORT QRotationFilter : public QSensorFilter +class Q_SENSORS_EXPORT_TEMP QRotationFilter : public QSensorFilter { public: virtual bool filter(QRotationReading *reading) = 0; @@ -74,7 +74,7 @@ private: bool filter(QSensorReading *reading) { return filter(static_cast(reading)); } }; -class Q_SENSORS_EXPORT QRotationSensor : public QSensor +class Q_SENSORS_EXPORT_TEMP QRotationSensor : public QSensor { Q_OBJECT #ifdef Q_QDOC diff --git a/src/sensors/qsensor.h b/src/sensors/qsensor.h index 62b5f45..aa97c61 100644 --- a/src/sensors/qsensor.h +++ b/src/sensors/qsensor.h @@ -42,6 +42,8 @@ #ifndef QSENSOR_H #define QSENSOR_H +#include + #include #include #include @@ -69,7 +71,7 @@ struct qoutputrange }; typedef QList qoutputrangelist; -class Q_SENSORS_EXPORT QSensor : public QObject +class Q_SENSORS_EXPORT_TEMP QSensor : public QObject { friend class QSensorBackend; @@ -158,7 +160,7 @@ private: Q_DISABLE_COPY(QSensor) }; -class Q_SENSORS_EXPORT QSensorFilter +class Q_SENSORS_EXPORT_TEMP QSensorFilter { friend class QSensor; public: @@ -170,7 +172,7 @@ protected: QSensor *m_sensor; }; -class Q_SENSORS_EXPORT QSensorReading : public QObject +class Q_SENSORS_EXPORT_TEMP QSensorReading : public QObject { friend class QSensorBackend; diff --git a/src/sensors/qsensorbackend.h b/src/sensors/qsensorbackend.h index 43b2aaa..9775186 100644 --- a/src/sensors/qsensorbackend.h +++ b/src/sensors/qsensorbackend.h @@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE -class Q_SENSORS_EXPORT QSensorBackend : public QObject +class Q_SENSORS_EXPORT_TEMP QSensorBackend : public QObject { Q_OBJECT public: diff --git a/src/sensors/qsensormanager.cpp b/src/sensors/qsensormanager.cpp index 86ddf56..f569df6 100644 --- a/src/sensors/qsensormanager.cpp +++ b/src/sensors/qsensormanager.cpp @@ -128,7 +128,7 @@ Q_GLOBAL_STATIC(QSensorManagerPrivate, sensorManagerPrivate) static void initPlugin(QObject *plugin); static QSettings::Scope settings_scope = QSettings::SystemScope; static bool load_external_plugins = true; -Q_SENSORS_EXPORT void sensors_unit_test_hook(int index) +Q_SENSORS_EXPORT_TEMP void sensors_unit_test_hook(int index) { QSensorManagerPrivate *d = sensorManagerPrivate(); diff --git a/src/sensors/qsensormanager.h b/src/sensors/qsensormanager.h index 3fa7698..9846651 100644 --- a/src/sensors/qsensormanager.h +++ b/src/sensors/qsensormanager.h @@ -52,7 +52,7 @@ class QSensorPluginInterface; typedef QSensorPluginInterface *(*CreatePluginFunc)(); -class Q_SENSORS_EXPORT QSensorManager +class Q_SENSORS_EXPORT_TEMP QSensorManager { public: // Register a backend (call this from a plugin) @@ -68,7 +68,7 @@ public: static void registerStaticPlugin(CreatePluginFunc func); }; -class Q_SENSORS_EXPORT QSensorBackendFactory +class Q_SENSORS_EXPORT_TEMP QSensorBackendFactory { public: virtual QSensorBackend *createBackend(QSensor *sensor) = 0; diff --git a/src/sensors/qsensorplugin.h b/src/sensors/qsensorplugin.h index 9ceb404..9e82828 100644 --- a/src/sensors/qsensorplugin.h +++ b/src/sensors/qsensorplugin.h @@ -42,13 +42,15 @@ #ifndef QSENSORPLUGIN_H #define QSENSORPLUGIN_H +#include + #include #include #include QT_BEGIN_NAMESPACE -class Q_SENSORS_EXPORT QSensorPluginInterface +class Q_SENSORS_EXPORT_TEMP QSensorPluginInterface { public: virtual void registerSensors() = 0; @@ -56,7 +58,7 @@ protected: ~QSensorPluginInterface() {} }; -class Q_SENSORS_EXPORT QSensorChangesInterface +class Q_SENSORS_EXPORT_TEMP QSensorChangesInterface { public: virtual void sensorsChanged() = 0; diff --git a/src/sensors/qsensorsglobal.h b/src/sensors/qsensorsglobal.h new file mode 100644 index 0000000..0aab6a6 --- /dev/null +++ b/src/sensors/qsensorsglobal.h @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtSensors module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QSENSORSGLOBAL_H +#define QSENSORSGLOBAL_H + +#include + +#if defined(Q_OS_WIN) +# if defined(QT_NODLL) +# undef QT_MAKEDLL +# undef QT_DLL +# elif defined(QT_MAKEDLL) +# if defined(QT_DLL) +# undef QT_DLL +# endif +# if defined(QT_BUILD_SENSORS_LIB) +# define Q_SENSORS_EXPORT_TEMP Q_DECL_EXPORT +# else +# define Q_SENSORS_EXPORT_TEMP Q_DECL_IMPORT +# endif +# elif defined(QT_DLL) +# define Q_SENSORS_EXPORT_TEMP Q_DECL_EXPORT +# endif +#endif + +#if !defined(Q_SENSORS_EXPORT_TEMP) +# if defined(QT_SHARED) +# define Q_SENSORS_EXPORT_TEMP Q_DECL_EXPORT +# else +# define Q_SENSORS_EXPORT_TEMP +# endif +#endif + +#endif // QSENSORSGLOBAL_H + diff --git a/src/sensors/qtapsensor.h b/src/sensors/qtapsensor.h index 52ee9c5..7e0af91 100644 --- a/src/sensors/qtapsensor.h +++ b/src/sensors/qtapsensor.h @@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE class QTapReadingPrivate; -class Q_SENSORS_EXPORT QTapReading : public QSensorReading +class Q_SENSORS_EXPORT_TEMP QTapReading : public QSensorReading { Q_OBJECT Q_ENUMS(TapDirection) @@ -79,7 +79,7 @@ public: void setDoubleTap(bool doubleTap); }; -class Q_SENSORS_EXPORT QTapFilter : public QSensorFilter +class Q_SENSORS_EXPORT_TEMP QTapFilter : public QSensorFilter { public: virtual bool filter(QTapReading *reading) = 0; @@ -87,7 +87,7 @@ private: bool filter(QSensorReading *reading) { return filter(static_cast(reading)); } }; -class Q_SENSORS_EXPORT QTapSensor : public QSensor +class Q_SENSORS_EXPORT_TEMP QTapSensor : public QSensor { Q_OBJECT #ifdef Q_QDOC diff --git a/src/sensors/sensors.pro b/src/sensors/sensors.pro index 4646a38..3377dfb 100644 --- a/src/sensors/sensors.pro +++ b/src/sensors/sensors.pro @@ -42,6 +42,7 @@ PUBLIC_HEADERS += \ qsensorbackend.h\ qsensormanager.h\ qsensorplugin.h\ + qsensorsglobal.h PRIVATE_HEADERS += \ qsensorpluginloader_p.h\ diff --git a/tests/auto/qsensor/tst_qsensor.cpp b/tests/auto/qsensor/tst_qsensor.cpp index 3218d7f..0354314 100644 --- a/tests/auto/qsensor/tst_qsensor.cpp +++ b/tests/auto/qsensor/tst_qsensor.cpp @@ -56,7 +56,7 @@ // The unit test needs to change the behaviour of the library. It does this // through an exported but undocumented function. -Q_SENSORS_EXPORT void sensors_unit_test_hook(int index); +Q_SENSORS_EXPORT_TEMP void sensors_unit_test_hook(int index); bool operator==(const qoutputrange &orl1, const qoutputrange &orl2) { return (orl1.minimum == orl2.minimum && diff --git a/tests/auto/sensors2qmlapi/tst_sensors2qmlapi.cpp b/tests/auto/sensors2qmlapi/tst_sensors2qmlapi.cpp index 25419bc..3ba2ed4 100644 --- a/tests/auto/sensors2qmlapi/tst_sensors2qmlapi.cpp +++ b/tests/auto/sensors2qmlapi/tst_sensors2qmlapi.cpp @@ -53,7 +53,7 @@ QDeclAccelerometer* TestSensorPlugin::stAccel = 0; QDeclAmbientLightSensor* TestSensorPlugin::stAbl = 0; QDeclProximitySensor* TestSensorPlugin::stProxi = 0; -Q_SENSORS_EXPORT void sensors_unit_test_hook(int index); +Q_SENSORS_EXPORT_TEMP void sensors_unit_test_hook(int index); class tst_Sensors2QMLAPI : public QObject { -- cgit v1.2.1