diff --git a/configure b/configure
index db4abf977bc12492ee509cc0902dc9ba95011c46..234ddc697163cd5ec18b9fe9cc978f0d0ff563a8 100755
--- a/configure
+++ b/configure
@@ -6776,9 +6776,14 @@ QT_LIBINFIX = $QT_LIBINFIX
 QT_NAMESPACE = $QT_NAMESPACE
 
 QT_EDITION = $Edition
-
 EOF
 
+if [ "$Edition" != "OpenSource" ] && [ "$Edition" != "Preview" ]; then
+    echo "QT_LICHECK = $Licheck" >> "$QTCONFIG.tmp"
+    echo "QT_RELEASE_DATE = $ReleaseDate" >> "$QTCONFIG.tmp"
+fi
+echo >> "$QTCONFIG.tmp"
+
 if [ "$CFG_SHARED" = "no" ]; then
     echo "QT_DEFAULT_QPA_PLUGIN = q$QT_QPA_DEFAULT_PLATFORM" >> "$QTCONFIG.tmp"
     echo >> "$QTCONFIG.tmp"
diff --git a/mkspecs/features/default_pre.prf b/mkspecs/features/default_pre.prf
index b06b9d6cfce198bc58839458267c93a0e7648adb..eb3281ea1d14e182e3cf5f0e274675391bf8ac7d 100644
--- a/mkspecs/features/default_pre.prf
+++ b/mkspecs/features/default_pre.prf
@@ -7,3 +7,18 @@ CONFIG = \
     lex yacc debug exceptions depend_includepath \
     testcase_targets import_plugins import_qpa_plugin \
     $$CONFIG
+
+!build_pass:defined(QT_EDITION, var):!equals(QT_EDITION, "OpenSource"):!equals(QT_EDITION, "Preview") {
+    #
+    # call license checker (but cache result for one day)
+    #
+    today = $$section(_DATE_, " ", 0, 2)
+    !isEqual(QMAKE_LICHECK_TIMESTAMP, $$today) {
+        !system("$$system_quote($$system_path($$[QT_HOST_BINS/src]/$$QT_LICHECK)) check" \
+                "$$QT_RELEASE_DATE $$[QMAKE_SPEC] $$[QMAKE_XSPEC]"): \
+            error("License check failed! Giving up ...")
+
+        cache(QMAKE_LICHECK_TIMESTAMP, set stash, today)
+    }
+    unset(today)
+}
diff --git a/qtbase.pro b/qtbase.pro
index bae26414046e549c5766a95952d09fda27270d8a..51e8fb8760b5c37cdaa4d29d0e19f8fcf0149a6b 100644
--- a/qtbase.pro
+++ b/qtbase.pro
@@ -46,6 +46,11 @@ equals(QMAKE_HOST.os, Windows) {
 }
 INSTALLS += qmake
 
+#licheck
+licheck.path = $$[QT_HOST_BINS]
+licheck.files = $$PWD/bin/$$QT_LICHECK
+exists($$licheck.files): INSTALLS += licheck
+
 #syncqt
 syncqt.path = $$[QT_HOST_BINS]
 syncqt.files = $$PWD/bin/syncqt.pl
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp
index 4d1ce3d11326f393dfc98ece3f001329fedb7dfd..6bf06463784b68c5cad1fc7493f21a5c17cc67cd 100644
--- a/tools/configure/configureapp.cpp
+++ b/tools/configure/configureapp.cpp
@@ -3463,6 +3463,11 @@ void Configure::generateQConfigPri()
         configStream << endl
                      << "QT_EDITION = " << dictionary["EDITION"] << endl;
 
+        if (dictionary["EDITION"] != "OpenSource" && dictionary["EDITION"] != "Preview") {
+            configStream << "QT_LICHECK = " << dictionary["LICHECK"] << endl;
+            configStream << "QT_RELEASE_DATE = " << dictionary["RELEASEDATE"] << endl;
+        }
+
         if (!dictionary["CFG_SYSROOT"].isEmpty() && dictionary["CFG_GCC_SYSROOT"] == "yes") {
             configStream << endl
                          << "# sysroot" << endl
diff --git a/tools/configure/tools.cpp b/tools/configure/tools.cpp
index 83d969ce16f9a96288f3350ac6aaa303de4b30e9..095e798332f9492fb6157c82fe0a8bf08acfdf7a 100644
--- a/tools/configure/tools.cpp
+++ b/tools/configure/tools.cpp
@@ -54,6 +54,8 @@ void Tools::checkLicense(QMap<QString,QString> &dictionary,
         return;
     }
 
+    dictionary["LICHECK"] = "licheck.exe";
+
     const QString licenseChecker =
         QDir::toNativeSeparators(sourcePath + "/bin/licheck.exe");