summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRohan McGovern <rohan.mcgovern@nokia.com>2011-11-17 15:39:19 +1000
committerQt by Nokia <qt-info@nokia.com>2011-11-23 00:13:46 +0100
commit9ffd7a339f0da644c95e71583134263c06745ed5 (patch)
tree4407a01b28fffdd0474f60ae367ec6551737f82f
parenta25d0ef3c24286602f7d9e80206b37f8ada7ac04 (diff)
Added build system support for installing tests.
Tests will install under $$[QT_INSTALL_TESTS]. TESTDATA may be used to install additional testdata required by the test. The default install rule may be disabled by CONFIG+=no_testcase_installs. Change-Id: I204de60c8e844775906ffd016ca50bffbb414142 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
-rwxr-xr-xconfigure26
-rw-r--r--mkspecs/features/testcase.prf46
-rw-r--r--qmake/option.h3
-rw-r--r--qmake/property.cpp3
-rw-r--r--src/corelib/global/qlibraryinfo.cpp10
-rw-r--r--src/corelib/global/qlibraryinfo.h3
-rw-r--r--tests/auto/widgets/kernel/qlayout/qlayout.pro4
-rw-r--r--tools/configure/configureapp.cpp13
8 files changed, 101 insertions, 7 deletions
diff --git a/configure b/configure
index f6b629ad84..220482adba 100755
--- a/configure
+++ b/configure
@@ -848,6 +848,7 @@ QT_INSTALL_DATA=
QT_INSTALL_TRANSLATIONS=
QT_INSTALL_SETTINGS=
QT_INSTALL_EXAMPLES=
+QT_INSTALL_TESTS=
QT_HOST_PREFIX=
#flags for SQL drivers
@@ -1055,7 +1056,7 @@ while [ "$#" -gt 0 ]; do
shift
VAL=$1
;;
- -prefix|-docdir|-headerdir|-plugindir|-importdir|-datadir|-libdir|-bindir|-translationdir|-sysconfdir|-examplesdir|-depths|-make|-nomake|-platform|-xplatform|-sdk|-arch|-host-arch|-mysql_config|-sysroot)
+ -prefix|-docdir|-headerdir|-plugindir|-importdir|-datadir|-libdir|-bindir|-translationdir|-sysconfdir|-examplesdir|-testsdir|-depths|-make|-nomake|-platform|-xplatform|-sdk|-arch|-host-arch|-mysql_config|-sysroot)
VAR=`echo $1 | sed "s,^-\(.*\),\1,"`
shift
VAL="$1"
@@ -1313,6 +1314,9 @@ while [ "$#" -gt 0 ]; do
examplesdir)
QT_INSTALL_EXAMPLES="$VAL"
;;
+ testsdir)
+ QT_INSTALL_TESTS="$VAL"
+ ;;
qconfig)
CFG_QCONFIG="$VAL"
;;
@@ -3617,6 +3621,17 @@ if [ -z "$QT_INSTALL_EXAMPLES" ]; then #default
fi
QT_INSTALL_EXAMPLES=`"$relpath/config.tests/unix/makeabs" "$QT_INSTALL_EXAMPLES"`
+#tests
+if [ -z "$QT_INSTALL_TESTS" ]; then #default
+ if [ "$CFG_PREFIX_INSTALL" = "no" ]; then
+ if [ "$PLATFORM_MAC" = "yes" ]; then
+ QT_INSTALL_TESTS="/Developer/Tests/Qt"
+ fi
+ fi
+ [ -z "$QT_INSTALL_TESTS" ] && QT_INSTALL_TESTS="$QT_INSTALL_PREFIX/tests" #fallback
+fi
+QT_INSTALL_TESTS=`"$relpath/config.tests/unix/makeabs" "$QT_INSTALL_TESTS"`
+
#-------------------------------------------------------------------------------
# help - interactive parts of the script _after_ this section please
#-------------------------------------------------------------------------------
@@ -3693,7 +3708,7 @@ if [ "$OPT_HELP" = "yes" ]; then
cat <<EOF
Usage: $relconf [-h] [-prefix <dir>] [-prefix-install] [-bindir <dir>] [-libdir <dir>]
[-docdir <dir>] [-headerdir <dir>] [-plugindir <dir> ] [-importdir <dir>] [-datadir <dir>]
- [-translationdir <dir>] [-sysconfdir <dir>] [-examplesdir <dir>]
+ [-translationdir <dir>] [-sysconfdir <dir>] [-examplesdir <dir>] [-testsdir <dir>]
[-release] [-debug] [-debug-and-release]
[-developer-build] [-shared] [-static] [-no-fast] [-fast] [-no-largefile]
[-largefile] [-no-exceptions] [-exceptions] [-no-accessibility]
@@ -3771,6 +3786,8 @@ cat <<EOF
(default PREFIX/etc/settings)
-examplesdir <dir> .... Examples will be installed to <dir>
(default PREFIX/examples)
+ -testsdir <dir> ....... Tests will be installed to <dir>
+ (default PREFIX/tests)
Configure options:
@@ -4616,6 +4633,7 @@ DATA_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_datapath=$QT_INSTA
TRANSLATIONS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_trnspath=$QT_INSTALL_TRANSLATIONS"`
SETTINGS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_stngpath=$QT_INSTALL_SETTINGS"`
EXAMPLES_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_xmplpath=$QT_INSTALL_EXAMPLES"`
+TESTS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_tstspath=$QT_INSTALL_TESTS"`
TODAY=`date +%Y-%m-%d`
cat > "$outpath/src/corelib/global/qconfig.cpp.new" <<EOF
@@ -4640,6 +4658,7 @@ if [ ! -z "$QT_HOST_PREFIX" ]; then
HOSTTRANSLATIONS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_trnspath=$QT_HOST_PREFIX/translations"`
HOSTSETTINGS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_stngpath=$QT_INSTALL_SETTINGS"`
HOSTEXAMPLES_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_xmplpath=$QT_INSTALL_EXAMPLES"`
+ HOSTTESTS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_tstspath=$QT_INSTALL_TESTS"`
cat >> "$outpath/src/corelib/global/qconfig.cpp.new" <<EOF
@@ -4656,6 +4675,7 @@ static const char qt_configure_data_path_str [256 + 12] = "$HOSTDATA_PAT
static const char qt_configure_translations_path_str [256 + 12] = "$HOSTTRANSLATIONS_PATH_STR";
static const char qt_configure_settings_path_str [256 + 12] = "$HOSTSETTINGS_PATH_STR";
static const char qt_configure_examples_path_str [256 + 12] = "$HOSTEXAMPLES_PATH_STR";
+static const char qt_configure_tests_path_str [256 + 12] = "$HOSTTESTS_PATH_STR";
#else // QT_BOOTSTRAPPED
EOF
fi
@@ -4673,6 +4693,7 @@ static const char qt_configure_data_path_str [256 + 12] = "$DATA_PATH_ST
static const char qt_configure_translations_path_str [256 + 12] = "$TRANSLATIONS_PATH_STR";
static const char qt_configure_settings_path_str [256 + 12] = "$SETTINGS_PATH_STR";
static const char qt_configure_examples_path_str [256 + 12] = "$EXAMPLES_PATH_STR";
+static const char qt_configure_tests_path_str [256 + 12] = "$TESTS_PATH_STR";
EOF
if [ ! -z "$QT_HOST_PREFIX" ]; then
@@ -4697,6 +4718,7 @@ cat >> "$outpath/src/corelib/global/qconfig.cpp.new" <<EOF
#define QT_CONFIGURE_TRANSLATIONS_PATH qt_configure_translations_path_str + 12;
#define QT_CONFIGURE_SETTINGS_PATH qt_configure_settings_path_str + 12;
#define QT_CONFIGURE_EXAMPLES_PATH qt_configure_examples_path_str + 12;
+#define QT_CONFIGURE_TESTS_PATH qt_configure_tests_path_str + 12;
EOF
# avoid unecessary rebuilds by copying only if qconfig.cpp has changed
diff --git a/mkspecs/features/testcase.prf b/mkspecs/features/testcase.prf
index eb0aa9fb85..b3ccbd4a51 100644
--- a/mkspecs/features/testcase.prf
+++ b/mkspecs/features/testcase.prf
@@ -65,5 +65,51 @@ QMAKE_EXTRA_TARGETS *= check
}
}
+!no_testcase_installs:!contains(INSTALLS, target) {
+ # Install tests unless no_testcase_installs is set, or there is already
+ # a `target' in INSTALLS.
+ #
+ # Tests are installed under a directory named after the target so that each
+ # test has its own directory for testdata etc.
+ #
+ load(resolve_target)
+ TARGET_BASENAME = $$basename(QMAKE_RESOLVED_TARGET)
+ target.path = $$[QT_INSTALL_TESTS]/$$TARGET_BASENAME
+ INSTALLS += target
+}
+
+contains(INSTALLS, target) {
+ # Install testdata as well, but only if we're actually installing the test.
+ #
+ # Testdata is installed relative to the directory containing the testcase
+ # binary itself, e.g. this:
+ #
+ # CONFIG += testcase
+ # TARGET = tst_qxmlreader
+ #
+ # TESTDATA += testdata/test1.xml testdata/test2.xml
+ #
+ # ... will result in:
+ #
+ # /usr/lib/qt5/tests/tst_qxmlreader/tst_qxmlreader
+ # /usr/lib/qt5/tests/tst_qxmlreader/testdata/test1.xml
+ # /usr/lib/qt5/tests/tst_qxmlreader/testdata/test2.xml
+ # ...
+ #
+ for(file, TESTDATA) {
+ tdi = testdata_install_$${elem}
+ tdif = $${tdi}.files
+ tdip = $${tdi}.path
+
+ # TESTDATA consists of the files to install (source)...
+ $$tdif = $$file
+
+ # ... and the destination preserves the relative path
+ $$tdip = $${target.path}/$$dirname(file)
+
+ INSTALLS += $$tdi
+ }
+}
+
}
diff --git a/qmake/option.h b/qmake/option.h
index 7d57a56543..23fc9543da 100644
--- a/qmake/option.h
+++ b/qmake/option.h
@@ -220,7 +220,8 @@ public:
TranslationsPath,
SettingsPath,
ExamplesPath,
- ImportsPath
+ ImportsPath,
+ TestsPath
};
static QString location(LibraryLocation);
};
diff --git a/qmake/property.cpp b/qmake/property.cpp
index 24312287a4..29e3857838 100644
--- a/qmake/property.cpp
+++ b/qmake/property.cpp
@@ -93,6 +93,8 @@ QMakeProperty::value(QString v, bool just_check)
return QLibraryInfo::location(QLibraryInfo::LibrariesPath);
else if(v == "QT_INSTALL_BINS")
return QLibraryInfo::location(QLibraryInfo::BinariesPath);
+ else if(v == "QT_INSTALL_TESTS")
+ return QLibraryInfo::location(QLibraryInfo::TestsPath);
else if(v == "QT_INSTALL_PLUGINS")
return QLibraryInfo::location(QLibraryInfo::PluginsPath);
else if(v == "QT_INSTALL_IMPORTS")
@@ -199,6 +201,7 @@ QMakeProperty::exec()
specialProps.append("QT_INSTALL_HEADERS");
specialProps.append("QT_INSTALL_LIBS");
specialProps.append("QT_INSTALL_BINS");
+ specialProps.append("QT_INSTALL_TESTS");
specialProps.append("QT_INSTALL_PLUGINS");
specialProps.append("QT_INSTALL_IMPORTS");
specialProps.append("QT_INSTALL_TRANSLATIONS");
diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp
index 541929f192..7868d3db59 100644
--- a/src/corelib/global/qlibraryinfo.cpp
+++ b/src/corelib/global/qlibraryinfo.cpp
@@ -281,6 +281,11 @@ QLibraryInfo::location(LibraryLocation loc)
path = QT_CONFIGURE_EXAMPLES_PATH;
break;
#endif
+#ifdef QT_CONFIGURE_TESTS_PATH
+ case TestsPath:
+ path = QT_CONFIGURE_TESTS_PATH;
+ break;
+#endif
default:
break;
}
@@ -331,6 +336,10 @@ QLibraryInfo::location(LibraryLocation loc)
case ExamplesPath:
key = QLatin1String("Examples");
break;
+ case TestsPath:
+ key = QLatin1String("Tests");
+ defaultValue = QLatin1String("tests");
+ break;
default:
break;
}
@@ -469,6 +478,7 @@ QLibraryInfo::location(LibraryLocation loc)
\value TranslationsPath The location of translation information for Qt strings.
\value SettingsPath The location for Qt settings.
\value ExamplesPath The location for examples upon install.
+ \value TestsPath The location of installed Qt testcases.
\sa location()
*/
diff --git a/src/corelib/global/qlibraryinfo.h b/src/corelib/global/qlibraryinfo.h
index dafc6bbd8b..8d1607d045 100644
--- a/src/corelib/global/qlibraryinfo.h
+++ b/src/corelib/global/qlibraryinfo.h
@@ -77,7 +77,8 @@ public:
TranslationsPath,
SettingsPath,
ExamplesPath,
- ImportsPath
+ ImportsPath,
+ TestsPath
};
static QString location(LibraryLocation); // ### Qt 5: consider renaming it to path()
diff --git a/tests/auto/widgets/kernel/qlayout/qlayout.pro b/tests/auto/widgets/kernel/qlayout/qlayout.pro
index c85879d89c..407890dff7 100644
--- a/tests/auto/widgets/kernel/qlayout/qlayout.pro
+++ b/tests/auto/widgets/kernel/qlayout/qlayout.pro
@@ -11,7 +11,5 @@ wince* {
} else {
DEFINES += SRCDIR=\\\"$$PWD\\\"
- test_data.files = baseline/*
- test_data.path = $${target.path}/baseline
- INSTALLS += test_data
+ TESTDATA += baseline/*
}
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp
index 1048512691..842aeab95b 100644
--- a/tools/configure/configureapp.cpp
+++ b/tools/configure/configureapp.cpp
@@ -1119,6 +1119,13 @@ void Configure::parseCmdLine()
dictionary[ "QT_INSTALL_EXAMPLES" ] = configCmdLine.at(i);
}
+ else if (configCmdLine.at(i) == "-testsdir") {
+ ++i;
+ if (i == argCount)
+ break;
+ dictionary[ "QT_INSTALL_TESTS" ] = configCmdLine.at(i);
+ }
+
else if (configCmdLine.at(i) == "-hostprefix") {
++i;
if (i == argCount)
@@ -2602,6 +2609,8 @@ void Configure::generateOutputVars()
dictionary[ "QT_INSTALL_TRANSLATIONS" ] = qipempty ? "" : fixSeparators(dictionary[ "QT_INSTALL_PREFIX" ] + "/translations");
if (!dictionary[ "QT_INSTALL_EXAMPLES" ].size())
dictionary[ "QT_INSTALL_EXAMPLES" ] = qipempty ? "" : fixSeparators(dictionary[ "QT_INSTALL_PREFIX" ] + "/examples");
+ if (!dictionary[ "QT_INSTALL_TESTS" ].size())
+ dictionary[ "QT_INSTALL_TESTS" ] = qipempty ? "" : fixSeparators(dictionary[ "QT_INSTALL_PREFIX" ] + "/tests");
if (dictionary.contains("XQMAKESPEC") && dictionary[ "XQMAKESPEC" ].startsWith("linux"))
dictionary[ "QMAKE_RPATHDIR" ] = dictionary[ "QT_INSTALL_LIBS" ];
@@ -3103,6 +3112,7 @@ void Configure::generateConfigfiles()
<< "static const char qt_configure_data_path_str [512 + 12] = \"qt_datapath=" << escapeSeparators(dictionary["QT_INSTALL_DATA"]) << "\";" << endl
<< "static const char qt_configure_translations_path_str [512 + 12] = \"qt_trnspath=" << escapeSeparators(dictionary["QT_INSTALL_TRANSLATIONS"]) << "\";" << endl
<< "static const char qt_configure_examples_path_str [512 + 12] = \"qt_xmplpath=" << escapeSeparators(dictionary["QT_INSTALL_EXAMPLES"]) << "\";" << endl
+ << "static const char qt_configure_tests_path_str [512 + 12] = \"qt_tstspath=" << escapeSeparators(dictionary["QT_INSTALL_TESTS"]) << "\";" << endl
//<< "static const char qt_configure_settings_path_str [256] = \"qt_stngpath=" << escapeSeparators(dictionary["QT_INSTALL_SETTINGS"]) << "\";" << endl
;
if (!dictionary[ "QT_HOST_PREFIX" ].isNull()) {
@@ -3117,6 +3127,7 @@ void Configure::generateConfigfiles()
<< "static const char qt_configure_data_path_str [512 + 12] = \"qt_datapath=" << fixSeparators(dictionary[ "QT_HOST_PREFIX" ], true) <<"\";" << endl
<< "static const char qt_configure_translations_path_str [512 + 12] = \"qt_trnspath=" << fixSeparators(dictionary[ "QT_HOST_PREFIX" ] + "/translations", true) <<"\";" << endl
<< "static const char qt_configure_examples_path_str [512 + 12] = \"qt_xmplpath=" << fixSeparators(dictionary[ "QT_HOST_PREFIX" ] + "/example", true) <<"\";" << endl
+ << "static const char qt_configure_tests_path_str [512 + 12] = \"qt_tstspath=" << fixSeparators(dictionary[ "QT_HOST_PREFIX" ] + "/tests", true) <<"\";" << endl
<< "#endif //QT_BOOTSTRAPPED" << endl;
}
tmpStream << "/* strlen( \"qt_lcnsxxxx\") == 12 */" << endl
@@ -3132,6 +3143,7 @@ void Configure::generateConfigfiles()
<< "#define QT_CONFIGURE_DATA_PATH qt_configure_data_path_str + 12;" << endl
<< "#define QT_CONFIGURE_TRANSLATIONS_PATH qt_configure_translations_path_str + 12;" << endl
<< "#define QT_CONFIGURE_EXAMPLES_PATH qt_configure_examples_path_str + 12;" << endl
+ << "#define QT_CONFIGURE_TESTS_PATH qt_configure_tests_path_str + 12;" << endl
//<< "#define QT_CONFIGURE_SETTINGS_PATH qt_configure_settings_path_str + 12;" << endl
<< endl;
@@ -3291,6 +3303,7 @@ void Configure::displayConfig()
cout << "Data installed to..........." << dictionary[ "QT_INSTALL_DATA" ] << endl;
cout << "Translations installed to..." << dictionary[ "QT_INSTALL_TRANSLATIONS" ] << endl;
cout << "Examples installed to......." << dictionary[ "QT_INSTALL_EXAMPLES" ] << endl;
+ cout << "Tests installed to.........." << dictionary[ "QT_INSTALL_TESTS" ] << endl;
if (dictionary.contains("XQMAKESPEC") && dictionary["XQMAKESPEC"].startsWith(QLatin1String("wince"))) {
cout << "Using c runtime detection..." << dictionary[ "CE_CRT" ] << endl;