diff options
-rw-r--r-- | config.tests/language/language.pro | 9 | ||||
-rw-r--r-- | config.tests/language/main.cpp | 123 | ||||
-rw-r--r-- | examples/examples.pro | 4 | ||||
-rw-r--r-- | qtserialbus.pro | 22 | ||||
-rw-r--r-- | tests/tests.pro | 2 |
5 files changed, 142 insertions, 18 deletions
diff --git a/config.tests/language/language.pro b/config.tests/language/language.pro new file mode 100644 index 0000000..908d781 --- /dev/null +++ b/config.tests/language/language.pro @@ -0,0 +1,9 @@ +TEMPLATE = app + +CONFIG += qt +CONFIG += c++11 +CONFIG += console + +QT = core + +SOURCES += main.cpp diff --git a/config.tests/language/main.cpp b/config.tests/language/main.cpp new file mode 100644 index 0000000..dc57aa8 --- /dev/null +++ b/config.tests/language/main.cpp @@ -0,0 +1,123 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtSerialBus module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later 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 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtCore/qglobal.h> + +#include <memory> +#include <type_traits> + +struct Base +{ + virtual void overrideMe() = 0; +}; + +struct Test : public Base +{ + // strongly typed enums + enum struct Enum : char { + EnumA, EnumB + }; + + Test() = default; // defaulted and + Test(const Test&) = delete; // deleted ctors + + explicit Test(int i) + : Test(0, i) { } + Test(int a, int i) + : m_intA(a), m_intI(i) {} + + // std::is_same + template <typename T, typename ... Ts> struct IsType { enum { value = false }; }; + template <typename T, typename T1, typename ... Ts> struct IsType<T, T1, Ts...> { + enum { value = std::is_same<T, T1>::value || IsType<T, Ts...>::value }; + }; + + // std::is_pod + template <typename T> void test(T) const { + static_assert(std::is_pod<T>::value, "Only POD supported."); + static_assert(IsType<T, int>::value, "Only int supported."); + } + + // variadics + template <typename ... Args> + void setValues(Args ... values) + { + const int size = sizeof...(Args); + int tmp[size] = { (test(values), void(), '0')... }; + (void) (tmp); + } + + // override keyword + void overrideMe() override {} + + // const and constexpr + Q_DECL_CONSTEXPR qint64 first() const Q_DECL_NOTHROW { return m_intA; } + Q_DECL_RELAXED_CONSTEXPR void setFirst(int a) Q_DECL_NOTHROW { m_intA = a; } + + // non-static data member initializers + int m_intA = 0; + int m_intI = 0; +}; + +using func = int (*) (int, int); +int total(int a, int i) { return a + i; } + +int main(int /*argc*/, char** /*argv*/) +{ + // unique_ptr and nullptr + std::unique_ptr<Test> t = nullptr; + + // make_unique and delegating ctor + t = std::make_unique<Test>(155); + + // variadics + t->setValues(1, 2, 3, 4, 5); + + // lambda and auto + auto m = [](int a, int b) -> int { + return a * b; + }; + + // decltype + decltype(m) multiply = m; + multiply(t->m_intA, t->m_intI); + + // alias templates + func f = total; + f(t->m_intA, t->m_intI); + + return 0; +} diff --git a/examples/examples.pro b/examples/examples.pro index 13c2806..ed8dea3 100644 --- a/examples/examples.pro +++ b/examples/examples.pro @@ -1,3 +1,5 @@ -TEMPLATE = subdirs +requires(qtHaveModule(widgets)) +requires(qtHaveModule(serialbus)) +TEMPLATE = subdirs SUBDIRS += serialbus diff --git a/qtserialbus.pro b/qtserialbus.pro index 62774c0..d0e94f7 100644 --- a/qtserialbus.pro +++ b/qtserialbus.pro @@ -1,30 +1,18 @@ -requires(!wince) -requires(!winrt) # enforced by qtserialport dependency -requires(!ios) # enforced by qtserialport dependency -requires(!win32-msvc2012) # does not support variadic templates -requires(!win32-msvc2010) # not C++11 capabable -> will be removed from CI soon -requires(!win32-msvc2008) # not C++11 capabable -> will be removed from CI soon -requires(c++11) - -defineTest(isGCCVersionSupported) { - # The below will work for gcc 4.7 and up and also match gcc 5 - greaterThan(QT_GCC_MINOR_VERSION, 6):return(true) - greaterThan(QT_GCC_MAJOR_VERSION, 4):return(true) - warning("Using gcc version "$$QT_GCC_MAJOR_VERSION"."$$QT_GCC_MINOR_VERSION", but at least gcc version 4.7 is required") - return(false) -} - -gcc:!clang:!isGCCVersionSupported(): requires(false) +requires(qtHaveModule(serialport)) lessThan(QT_MAJOR_VERSION, 5) { message("Cannot build current QtSerialBus sources with Qt version $${QT_VERSION}.") } load(configure) +qtCompileTest(language) qtCompileTest(socketcan) qtCompileTest(socketcan_fd) load(qt_parts) +requires(config_language) # enforce defined set of C++11 +!config_language:warning("Cannot compile the module with your compiler, missing C++11 language features.") + linux { !config_socketcan:warning("You need linux/can.h and linux/can/raw.h linux headers for socketCAN support, disabling it") !config_socketcan_fd:warning("Newer kernel needed for flexible data-rate frame support 'canfd_frame'") diff --git a/tests/tests.pro b/tests/tests.pro index 157ef34..f2f91d3 100644 --- a/tests/tests.pro +++ b/tests/tests.pro @@ -1,2 +1,4 @@ +requires(qtHaveModule(serialbus)) + TEMPLATE = subdirs SUBDIRS += auto |