From 7317ddd1551194772ce7cf952c1f555d70a0e4b7 Mon Sep 17 00:00:00 2001 From: Roland Winklmeier Date: Tue, 13 Jun 2017 10:05:45 +0200 Subject: [PATCH] Add first batch of configuration tests Summary: Configuration tests check whether all mandatory dependencies to build swift are met. They can also be used to check optional dependencies, which results in certain features to be enabled or disabled. This first batch tests for mandatory libraries libpng, zlib and OpenGL. If this is not tested and some libraries are missing, the developer will be notified very late in the build. Reviewers: #swift_pilot_client, msutcliffe Reviewed By: #swift_pilot_client, msutcliffe Subscribers: msutcliffe, jenkins Differential Revision: https://dev.swift-project.org/D34 --- config.tests/gl/gl.cpp | 14 +++++++ config.tests/gl/gl.pro | 16 ++++++++ config.tests/glu/glu.cpp | 14 +++++++ config.tests/glu/glu.pro | 16 ++++++++ config.tests/libpng/libpng.cpp | 7 ++++ config.tests/libpng/libpng.pro | 7 ++++ config.tests/zlib/zlib.cpp | 7 ++++ config.tests/zlib/zlib.pro | 7 ++++ mkspecs/features/common_pre.prf | 53 +------------------------- mkspecs/features/config.pri | 11 ++++++ mkspecs/features/config_test_pre.prf | 2 + mkspecs/features/externals.pri | 56 ++++++++++++++++++++++++++++ swift.pro | 5 +++ 13 files changed, 163 insertions(+), 52 deletions(-) create mode 100644 config.tests/gl/gl.cpp create mode 100644 config.tests/gl/gl.pro create mode 100644 config.tests/glu/glu.cpp create mode 100644 config.tests/glu/glu.pro create mode 100644 config.tests/libpng/libpng.cpp create mode 100644 config.tests/libpng/libpng.pro create mode 100644 config.tests/zlib/zlib.cpp create mode 100644 config.tests/zlib/zlib.pro create mode 100644 mkspecs/features/config_test_pre.prf create mode 100644 mkspecs/features/externals.pri diff --git a/config.tests/gl/gl.cpp b/config.tests/gl/gl.cpp new file mode 100644 index 000000000..8af3e1f48 --- /dev/null +++ b/config.tests/gl/gl.cpp @@ -0,0 +1,14 @@ +#if defined(Q_OS_WIN) + #include + #include +#elif defined(Q_OS_MAC) + #include +#else + #include +#endif + +int main(int, char **) +{ + glGetString(GL_VERSION); + return 0; +} diff --git a/config.tests/gl/gl.pro b/config.tests/gl/gl.pro new file mode 100644 index 000000000..4c1579c52 --- /dev/null +++ b/config.tests/gl/gl.pro @@ -0,0 +1,16 @@ +load(config_test_pre) + +CONFIG -= qt +CONFIG += console + +SOURCES = gl.cpp + +win32 { + DEFINES += Q_OS_WIN + LIBS *= -lopengl32 +} +linux: LIBS *= -lGL +macx { + DEFINES += Q_OS_MAC + LIBS += -framework OpenGL +} diff --git a/config.tests/glu/glu.cpp b/config.tests/glu/glu.cpp new file mode 100644 index 000000000..8d762705d --- /dev/null +++ b/config.tests/glu/glu.cpp @@ -0,0 +1,14 @@ +#if defined(Q_OS_WIN) + #include + #include +#elif defined(Q_OS_MAC) + #include +#else + #include +#endif + +int main(int, char **) +{ + gluGetString(GL_VERSION); + return 0; +} diff --git a/config.tests/glu/glu.pro b/config.tests/glu/glu.pro new file mode 100644 index 000000000..a82352231 --- /dev/null +++ b/config.tests/glu/glu.pro @@ -0,0 +1,16 @@ +load(config_test_pre) + +CONFIG -= qt +CONFIG += console + +SOURCES = glu.cpp + +win32 { + DEFINES += Q_OS_WIN + LIBS *= -lglu32 +} +linux: LIBS *= -lGLU +macx { + DEFINES += Q_OS_MAC + LIBS += -framework OpenGL +} diff --git a/config.tests/libpng/libpng.cpp b/config.tests/libpng/libpng.cpp new file mode 100644 index 000000000..c3668456d --- /dev/null +++ b/config.tests/libpng/libpng.cpp @@ -0,0 +1,7 @@ +#include + +int main(int, char **) +{ + png_access_version_number(); + return 0; +} diff --git a/config.tests/libpng/libpng.pro b/config.tests/libpng/libpng.pro new file mode 100644 index 000000000..da047e586 --- /dev/null +++ b/config.tests/libpng/libpng.pro @@ -0,0 +1,7 @@ +load(config_test_pre) + +CONFIG -= qt +CONFIG += console + +SOURCES = libpng.cpp +LIBS *= -lpng -lz diff --git a/config.tests/zlib/zlib.cpp b/config.tests/zlib/zlib.cpp new file mode 100644 index 000000000..4d131d9b6 --- /dev/null +++ b/config.tests/zlib/zlib.cpp @@ -0,0 +1,7 @@ +#include + +int main(int, char **) +{ + zlibVersion(); + return 0; +} diff --git a/config.tests/zlib/zlib.pro b/config.tests/zlib/zlib.pro new file mode 100644 index 000000000..d74d4b3ae --- /dev/null +++ b/config.tests/zlib/zlib.pro @@ -0,0 +1,7 @@ +load(config_test_pre) + +CONFIG -= qt +CONFIG += console + +SOURCES = zlib.cpp +LIBS *= -lz diff --git a/mkspecs/features/common_pre.prf b/mkspecs/features/common_pre.prf index 1f5379db2..5669de3df 100644 --- a/mkspecs/features/common_pre.prf +++ b/mkspecs/features/common_pre.prf @@ -103,62 +103,11 @@ equals(WORD_SIZE,32) { win32-g++: QMAKE_LFLAGS *= -Wl,--large-address-aware } -################################ -# Path to external dependencies -################################ - -# If you want to manually set the external path, uncomment the following line -# EXTERNALSROOT = /path/to/externals - -isEmpty(EXTERNALSROOT) { - EXTERNALSROOT = $$(SWIFT_EXTERNALS_DIR) -} - -isEmpty(EXTERNALSROOT) { - EXTERNALSROOT = $$SourceRoot/externals -} - -!exists("$$EXTERNALSROOT/common/include") { - error("Could not find externals in $${EXTERNALSROOT}. Please install them!") -} - ################################ # Externals ################################ -EXTERNALS_SPEC = $$basename(QMAKESPEC) -msvc { - clang_cl: EXTERNALS_SPEC = win32-msvc2015 - win32-msvc2017: EXTERNALS_SPEC = win32-msvc2015 - win32-msvc { - # From Qt 5.8.1 onwards, QMAKESPEC is win32-msvc without the version number - # see https://codereview.qt-project.org/#/c/162754/ - lessThan(MSVC_VER, 14.0) | greaterThan(MSVC_VER, 15.0) { - error(This version of Visual Studio is not supported (MSVC_VER = $$MSVC_VER)) - } - EXTERNALS_SPEC = win32-msvc2015 - } -} - -INCLUDEPATH *= $$EXTERNALSROOT/common/include -INCLUDEPATH *= $$EXTERNALSROOT/$$EXTERNALS_SPEC/include -INCLUDEPATH *= $$EXTERNALSROOT/common/include/crashpad -INCLUDEPATH *= $$EXTERNALSROOT/common/include/mini_chromium - -equals(WORD_SIZE,64) { - EXTERNALS_BIN_DIR = $$EXTERNALSROOT/$$EXTERNALS_SPEC/bin64 - EXTERNALS_LIB_DIR = $$EXTERNALSROOT/$$EXTERNALS_SPEC/lib64 -} -equals(WORD_SIZE,32) { - EXTERNALS_BIN_DIR = $$EXTERNALSROOT/$$EXTERNALS_SPEC/bin32 - EXTERNALS_LIB_DIR = $$EXTERNALSROOT/$$EXTERNALS_SPEC/lib32 -} - -LIBS *= -L$$EXTERNALS_LIB_DIR -macx: LIBS *= -F$$EXTERNALS_LIB_DIR -win32: LIBS *= -luser32 - -INCLUDEPATH *= $$EXTERNALDIR/common/include +include(externals.pri) ################################ # Includes diff --git a/mkspecs/features/config.pri b/mkspecs/features/config.pri index ce29c9921..4849a88b3 100644 --- a/mkspecs/features/config.pri +++ b/mkspecs/features/config.pri @@ -28,6 +28,17 @@ isEmpty(BLACK_EOL): BLACK_EOL = "20180101" ## Private Area ## +## Dependency Checks ## +load(configure) + +defineTest(CheckMandatoryDependency) { + !qtCompileTest($${1}): error(Cannot find $${1} development package. Make sure it is installed. Inspect config.log for more information.) +} + +defineTest(CheckOptionalDependency) { + qtCompileTest($${1}) +} + # include vatsim client id and key include(vatsim.pri) diff --git a/mkspecs/features/config_test_pre.prf b/mkspecs/features/config_test_pre.prf new file mode 100644 index 000000000..6ad8c89af --- /dev/null +++ b/mkspecs/features/config_test_pre.prf @@ -0,0 +1,2 @@ +include(wordsize.pri) +include(externals.pri) diff --git a/mkspecs/features/externals.pri b/mkspecs/features/externals.pri new file mode 100644 index 000000000..cb6f19617 --- /dev/null +++ b/mkspecs/features/externals.pri @@ -0,0 +1,56 @@ +################################ +# Path to external dependencies +################################ + +# If you want to manually set the external path, uncomment the following line +# EXTERNALSROOT = /path/to/externals + +isEmpty(EXTERNALSROOT) { + EXTERNALSROOT = $$(SWIFT_EXTERNALS_DIR) +} + +isEmpty(EXTERNALSROOT) { + EXTERNALSROOT = $$SourceRoot/externals +} + +!exists("$$EXTERNALSROOT/common/include") { + error("Could not find externals in $${EXTERNALSROOT}. Please install them!") +} + +################################ +# Externals +################################ + +EXTERNALS_SPEC = $$basename(QMAKESPEC) +msvc { + clang_cl: EXTERNALS_SPEC = win32-msvc2015 + win32-msvc2017: EXTERNALS_SPEC = win32-msvc2015 + win32-msvc { + # From Qt 5.8.1 onwards, QMAKESPEC is win32-msvc without the version number + # see https://codereview.qt-project.org/#/c/162754/ + lessThan(MSVC_VER, 14.0) | greaterThan(MSVC_VER, 15.0) { + error(This version of Visual Studio is not supported (MSVC_VER = $$MSVC_VER)) + } + EXTERNALS_SPEC = win32-msvc2015 + } +} + +INCLUDEPATH *= $$EXTERNALSROOT/common/include +INCLUDEPATH *= $$EXTERNALSROOT/$$EXTERNALS_SPEC/include +INCLUDEPATH *= $$EXTERNALSROOT/common/include/crashpad +INCLUDEPATH *= $$EXTERNALSROOT/common/include/mini_chromium + +equals(WORD_SIZE,64) { + EXTERNALS_BIN_DIR = $$EXTERNALSROOT/$$EXTERNALS_SPEC/bin64 + EXTERNALS_LIB_DIR = $$EXTERNALSROOT/$$EXTERNALS_SPEC/lib64 +} +equals(WORD_SIZE,32) { + EXTERNALS_BIN_DIR = $$EXTERNALSROOT/$$EXTERNALS_SPEC/bin32 + EXTERNALS_LIB_DIR = $$EXTERNALSROOT/$$EXTERNALS_SPEC/lib32 +} + +LIBS *= -L$$EXTERNALS_LIB_DIR +macx: LIBS *= -F$$EXTERNALS_LIB_DIR +win32: LIBS *= -luser32 + +INCLUDEPATH *= $$EXTERNALDIR/common/include diff --git a/swift.pro b/swift.pro index b81d1db05..b05f7b516 100644 --- a/swift.pro +++ b/swift.pro @@ -6,6 +6,11 @@ CONFIG += ordered OTHER_FILES += mkspecs/features/*.prf OTHER_FILES += mkspecs/features/*.pri +CheckMandatoryDependency(gl) +CheckMandatoryDependency(glu) +CheckMandatoryDependency(libpng) +CheckMandatoryDependency(zlib) + contains(BLACK_CONFIG,Doxygen) { SUBDIRS += docs }