diff options
-rw-r--r-- | .cmake.conf | 2 | ||||
-rw-r--r-- | .qmake.conf | 2 | ||||
-rw-r--r-- | coin/module_config.yaml | 23 | ||||
-rw-r--r-- | dependencies.yaml | 4 | ||||
-rw-r--r-- | examples/CMakeLists.txt | 2 | ||||
-rw-r--r-- | examples/activeqt/CMakeLists.txt | 18 | ||||
-rw-r--r-- | src/activeqt/container/qaxbase.cpp | 39 | ||||
-rw-r--r-- | src/activeqt/container/qaxdump.cpp | 7 | ||||
-rw-r--r-- | src/activeqt/control/Qt6AxServerMacros.cmake | 61 | ||||
-rw-r--r-- | tools/dumpcpp/moc.cpp | 4 |
10 files changed, 110 insertions, 52 deletions
diff --git a/.cmake.conf b/.cmake.conf index 77b7fa8..e62fae5 100644 --- a/.cmake.conf +++ b/.cmake.conf @@ -1,2 +1,2 @@ -set(QT_REPO_MODULE_VERSION "6.2.1") +set(QT_REPO_MODULE_VERSION "6.2.8") set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "") diff --git a/.qmake.conf b/.qmake.conf index 87681be..a0cf48b 100644 --- a/.qmake.conf +++ b/.qmake.conf @@ -2,4 +2,4 @@ load(qt_build_config) DEFINES += QT_NO_FOREACH QT_NO_JAVA_STYLE_ITERATORS -MODULE_VERSION = 6.2.1 +MODULE_VERSION = 6.2.8 diff --git a/coin/module_config.yaml b/coin/module_config.yaml index 3326a5f..4dd4012 100644 --- a/coin/module_config.yaml +++ b/coin/module_config.yaml @@ -1,4 +1,5 @@ version: 2 +alias: qtactiveqt accept_configuration: condition: or conditions: @@ -19,9 +20,31 @@ instructions: - type: AppendToEnvironmentVariable variableName: NON_QTBASE_CONFIGURE_ARGS variableValue: " -DQT_NO_AX_SERVER_REGISTRATION=ON" + disable_if: + condition: property + property: features + contains_value: UseConfigure - type: AppendToEnvironmentVariable variableName: NON_QTBASE_TARGET_CONFIGURE_ARGS variableValue: " -DQT_NO_AX_SERVER_REGISTRATION=ON" + disable_if: + condition: property + property: features + contains_value: UseConfigure + - type: AppendToEnvironmentVariable + variableName: NON_QTBASE_CMAKE_ARGS + variableValue: " -DQT_NO_AX_SERVER_REGISTRATION=ON" + enable_if: + condition: property + property: features + contains_value: UseConfigure + - type: AppendToEnvironmentVariable + variableName: NON_QTBASE_TARGET_CMAKE_ARGS + variableValue: " -DQT_NO_AX_SERVER_REGISTRATION=ON" + enable_if: + condition: property + property: features + contains_value: UseConfigure - !include "{{qt/qtbase}}/coin_module_build_template_v2.yaml" Test: diff --git a/dependencies.yaml b/dependencies.yaml index a31faf8..1b97928 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -1,4 +1,4 @@ dependencies: - ../qtbase: - ref: d20ede49940548a27b7cd7bc4154950aa8b1924c + ../tqtc-qtbase: + ref: 4c1c38dede55565afa846685b3e19cf8f1cfed0c required: true diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 362d2da..3baa897 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,6 +1,6 @@ # Generated from examples.pro. -qt_examples_build_begin() +qt_examples_build_begin(EXTERNAL_BUILD) add_subdirectory(activeqt) diff --git a/examples/activeqt/CMakeLists.txt b/examples/activeqt/CMakeLists.txt index 62c0318..168dd37 100644 --- a/examples/activeqt/CMakeLists.txt +++ b/examples/activeqt/CMakeLists.txt @@ -1,19 +1,19 @@ # Generated from activeqt.pro. if(MSVC) - add_subdirectory(comapp) - add_subdirectory(hierarchy) - add_subdirectory(menus) - add_subdirectory(multiple) - add_subdirectory(simple) - add_subdirectory(wrapper) + qt_internal_add_example(comapp) + qt_internal_add_example(hierarchy) + qt_internal_add_example(menus) + qt_internal_add_example(multiple) + qt_internal_add_example(simple) + qt_internal_add_example(wrapper) if(TARGET Qt6::OpenGLWidgets AND QT_FEATURE_opengl AND NOT QT_FEATURE_opengles2) # special case - add_subdirectory(opengl) + qt_internal_add_example(opengl) endif() if(TARGET Qt::QuickControls2) - add_subdirectory(simpleqml) + qt_internal_add_example(simpleqml) endif() endif() if(MINGW OR QT_BUILD_SHARED_LIBS) - add_subdirectory(mediaplayer) + qt_internal_add_example(mediaplayer) endif() diff --git a/src/activeqt/container/qaxbase.cpp b/src/activeqt/container/qaxbase.cpp index 4944c3b..0d4fae7 100644 --- a/src/activeqt/container/qaxbase.cpp +++ b/src/activeqt/container/qaxbase.cpp @@ -78,6 +78,7 @@ #include <private/qobject_p.h> #include <private/qmetaobject_p.h> #include <private/qmetaobjectbuilder_p.h> +#include <private/qtools_p.h> #include <qt_windows.h> #include <ocidl.h> @@ -388,7 +389,7 @@ public: if (qobject->signalsBlocked()) return S_OK; - const QMetaObject *meta = combase->axBaseMetaObject(); + const QMetaObject *meta = qobject->metaObject(); const QMetaObjectExtra &moExtra = moextra_cache.value(meta); int index = -1; @@ -497,7 +498,11 @@ public: if (dispID == DISPID_UNKNOWN || !combase) return S_OK; - const QMetaObject *meta = combase->axBaseMetaObject(); + QObject *qobject = combase->qObject(); + if (qobject->signalsBlocked()) + return S_OK; + + const QMetaObject *meta = qobject->metaObject(); if (!meta) return S_OK; @@ -505,10 +510,6 @@ public: if (propname.isEmpty()) return S_OK; - QObject *qobject = combase->qObject(); - if (qobject->signalsBlocked()) - return S_OK; - // emit the generic signal combase->d->emitPropertyChanged(QString::fromLatin1(propname)); @@ -624,7 +625,7 @@ QByteArray QAxEventSink::findProperty(DISPID dispID) typeinfo->Release(); QByteArray propsignal(propname + "Changed("); - const QMetaObject *mo = combase->axBaseMetaObject(); + const QMetaObject *mo = combase->qObject()->metaObject(); int index = mo->indexOfProperty(propname); const QMetaProperty prop = mo->property(index); propsignal += prop.typeName(); @@ -2288,7 +2289,7 @@ void MetaObjectGenerator::addSetterSlot(const QByteArray &property) if (isupper(prototype.at(0))) { prototype.insert(0, "Set"); } else { - prototype[0] = char(toupper(prototype[0])); + prototype[0] = QtMiscUtils::toAsciiUpper(prototype[0]); prototype.insert(0, "set"); } const QByteArray type = propertyType(property); @@ -2486,7 +2487,7 @@ void MetaObjectGenerator::readFuncsInfo(ITypeInfo *typeinfo, ushort nFuncs) set = "Set"; } else { set = "set"; - prototype[0] = char(toupper(prototype[0])); + prototype[0] = QtMiscUtils::toAsciiUpper(prototype[0]); } prototype = set + prototype; @@ -3265,7 +3266,7 @@ bool QAxBasePrivate::checkHRESULT(HRESULT hres, EXCEPINFO *exc, const QString &n */ int QAxBase::internalProperty(QMetaObject::Call call, int index, void **v) { - const QMetaObject *mo = axBaseMetaObject(); + const QMetaObject *mo = qObject()->metaObject(); const QMetaProperty prop = mo->property(index + mo->propertyOffset()); QByteArray propname = prop.name(); @@ -3370,7 +3371,7 @@ int QAxBase::internalInvoke(QMetaObject::Call call, int index, void **v) if (!disp) return index; - const QMetaObject *mo = axBaseMetaObject(); + const QMetaObject *mo = qObject()->metaObject(); // get the slot information const QMetaMethod slot = mo->method(index + mo->methodOffset()); Q_ASSERT(slot.methodType() == QMetaMethod::Slot); @@ -3488,7 +3489,7 @@ int QAxBasePrivate::qtStaticMetaCall(QAxBase *_t, QMetaObject::Call _c, int _id, if (_c != QMetaObject::InvokeMetaMethod) return 0; Q_ASSERT(_t != nullptr); - const QMetaObject *mo = _t->axBaseMetaObject(); + const QMetaObject *mo = _t->qObject()->metaObject(); switch (mo->method(_id + mo->methodOffset()).methodType()) { case QMetaMethod::Signal: QMetaObject::activate(_t->qObject(), mo, _id, _a); @@ -3504,7 +3505,7 @@ int QAxBasePrivate::qtStaticMetaCall(QAxBase *_t, QMetaObject::Call _c, int _id, int QAxBasePrivate::qtMetaCall(QMetaObject::Call call, int id, void **v) { - const QMetaObject *mo = q->axBaseMetaObject(); + const QMetaObject *mo = q->qObject()->metaObject(); if (q->isNull() && mo->property(id + mo->propertyOffset()).name() != QByteArray("control")) { qWarning("QAxBase::qt_metacall: Object is not initialized, or initialization failed"); return id; @@ -3529,7 +3530,7 @@ int QAxBasePrivate::qtMetaCall(QMetaObject::Call call, int id, void **v) #ifdef QT_CHECK_STATE static void qax_noSuchFunction(int disptype, const QByteArray &name, const QByteArray &function, const QAxBase *that) { - const QMetaObject *metaObject = that->axBaseMetaObject(); + const QMetaObject *metaObject = that->qObject()->metaObject(); const char *coclass = metaObject->classInfo(metaObject->indexOfClassInfo("CoClass")).value(); if (disptype == DISPATCH_METHOD) { @@ -3577,7 +3578,7 @@ bool QAxBase::dynamicCallHelper(const char *name, void *inout, QList<QVariant> & return false; } - const QMetaObject *mo = axBaseMetaObject(); + const QMetaObject *mo = qObject()->metaObject(); Q_ASSERT(d->metaobj); const QMetaObjectExtra &moExtra = moextra_cache.value(d->metaobj); @@ -4019,7 +4020,7 @@ QAxObject *QAxBase::querySubObject(const char *name, QList<QVariant> &vars) case VT_EMPTY: #ifdef QT_CHECK_STATE { - auto mo = axBaseMetaObject(); + auto mo = qObject()->metaObject(); const char *coclass = mo->classInfo(mo->indexOfClassInfo("CoClass")).value(); qWarning("QAxBase::querySubObject: %s: Error calling function or property in %s (%s)" , name, control().toLatin1().data(), coclass ? coclass: "unknown"); @@ -4029,7 +4030,7 @@ QAxObject *QAxBase::querySubObject(const char *name, QList<QVariant> &vars) default: #ifdef QT_CHECK_STATE { - auto mo = axBaseMetaObject(); + auto mo = qObject()->metaObject(); const char *coclass = mo->classInfo(mo->indexOfClassInfo("CoClass")).value(); qWarning("QAxBase::querySubObject: %s: Method or property is not of interface type in %s (%s)" , name, control().toLatin1().data(), coclass ? coclass: "unknown"); @@ -4136,7 +4137,7 @@ QAxBase::PropertyBag QAxBase::propertyBag() const persist->Release(); return result; } - const QMetaObject *mo = axBaseMetaObject(); + const QMetaObject *mo = qObject()->metaObject(); for (int p = mo->propertyOffset(); p < mo->propertyCount(); ++p) { const QMetaProperty property = mo->property(p); QVariant var = qObject()->property(property.name()); @@ -4176,7 +4177,7 @@ void QAxBase::setPropertyBag(const PropertyBag &bag) pbag->Release(); persist->Release(); } else { - const QMetaObject *mo = axBaseMetaObject(); + const QMetaObject *mo = qObject()->metaObject(); for (int p = mo->propertyOffset(); p < mo->propertyCount(); ++p) { const QMetaProperty property = mo->property(p); QVariant var = bag.value(QLatin1String(property.name())); diff --git a/src/activeqt/container/qaxdump.cpp b/src/activeqt/container/qaxdump.cpp index 093fef6..7b6a872 100644 --- a/src/activeqt/container/qaxdump.cpp +++ b/src/activeqt/container/qaxdump.cpp @@ -57,6 +57,7 @@ #include <qt_windows.h> #include <qtextstream.h> #include <qiodevicebase.h> +#include <private/qtools_p.h> #include <ctype.h> @@ -120,12 +121,12 @@ static QByteArray namedPrototype(const QByteArrayList ¶meterTypes, const QBy static QByteArray toType(const QByteArray &t) { - QByteArray type = QMetaType::fromName(type).id() != QMetaType::UnknownType + QByteArray type = QMetaType::fromName(t).id() != QMetaType::UnknownType ? t : QByteArrayLiteral("int"); if (type.at(0) == 'Q') type.remove(0, 1); - type[0] = toupper(type.at(0)); + type[0] = QtMiscUtils::toAsciiLower(type.at(0)); if (type == "VariantList") type = "List"; else if (type == "Map<QVariant,QVariant>") @@ -363,7 +364,7 @@ QString qax_generateDocumentation(QAxBase *that) setterSlot = "Set" + name; } else { QByteArray nameUp = name; - nameUp[0] = char(toupper(nameUp.at(0))); + nameUp[0] = QtMiscUtils::toAsciiUpper(nameUp.at(0)); setterSlot = "set" + nameUp; } detail += QLatin1String("<a href=\"#") + QString::fromLatin1(setterSlot) + QLatin1String("\">") + diff --git a/src/activeqt/control/Qt6AxServerMacros.cmake b/src/activeqt/control/Qt6AxServerMacros.cmake index 0e6bcad..24cbaab 100644 --- a/src/activeqt/control/Qt6AxServerMacros.cmake +++ b/src/activeqt/control/Qt6AxServerMacros.cmake @@ -52,36 +52,67 @@ function(qt6_target_idl target) set(output_idl "${CMAKE_CURRENT_BINARY_DIR}/${target}$<CONFIG>.idl") set(output_tlb "${CMAKE_CURRENT_BINARY_DIR}/${target}$<CONFIG>.tlb") + _qt_internal_get_tool_wrapper_script_path(tool_wrapper) set(tlb_command_list "") - _qt_internal_wrap_tool_command(tlb_command_list APPEND - "$<TARGET_FILE:${QT_CMAKE_EXPORT_NAMESPACE}::idc>" "$<TARGET_FILE:${target}>" - /idl "${output_idl}" -version 1.0 + + # Wrap tool paths in $<COMMAND_CONFIG> to ensure we use the release tool when building debug + # targets in a multi-config build, because the debug tool is usually not built by default. + if(CMAKE_GENERATOR STREQUAL "Ninja Multi-Config" AND CMAKE_VERSION VERSION_GREATER_EQUAL "3.20") + set(cmb "$<COMMAND_CONFIG:") + set(cme ">") + else() + set(cmb "") + set(cme "") + endif() + + set(idc_target "${QT_CMAKE_EXPORT_NAMESPACE}::idc") + set(idc_target_file "$<TARGET_FILE:${idc_target}>") + set(idc_target_file_command_config_wrapped "${cmb}${idc_target_file}${cme}") + + list(APPEND tlb_command_list + COMMAND + "${tool_wrapper}" + "${idc_target_file_command_config_wrapped}" + "$<TARGET_FILE:${target}>" + /idl "${output_idl}" -version 1.0 ) - _qt_internal_wrap_tool_command(tlb_command_list APPEND - midl "${output_idl}" /nologo /tlb "${output_tlb}" + list(APPEND tlb_command_list + COMMAND + "${tool_wrapper}" midl "${output_idl}" /nologo /tlb "${output_tlb}" ) set(rc_files "$<FILTER:$<TARGET_PROPERTY:${target},SOURCES>,INCLUDE,\\.rc$>") set(have_rc_files "$<NOT:$<BOOL:$<STREQUAL:${rc_files},>>>") - set(rc_cmd "$<TARGET_FILE:${QT_CMAKE_EXPORT_NAMESPACE}::idc>$<SEMICOLON>\ -$<TARGET_FILE:${target}>$<SEMICOLON>/tlb$<SEMICOLON>${output_tlb}") - set(no_rc_cmd "echo \"No rc-file linked into project. The type library of the ${target} \ -target will be a separate file.\"") - _qt_internal_wrap_tool_command(tlb_command_list APPEND - "$<IF:${have_rc_files},${rc_cmd},${no_rc_cmd}>" + + set(no_rc_cmd "echo$<SEMICOLON>No rc-file linked into project. The type library of the \ +${target} target will be a separate file.") + + set(idc_args + "$<SEMICOLON>$<TARGET_FILE:${target}>$<SEMICOLON>/tlb$<SEMICOLON>${output_tlb}") + + # Split command into two parts, so that COMMAND_CONFIG can be applied only to the idc tool path, + # but not the target and tlb files. + set(cmd_part1 "${cmb}$<IF:${have_rc_files},${idc_target_file},${no_rc_cmd}>${cme}") + set(cmd_part2 "$<${have_rc_files}:${idc_args}>") + + list(APPEND tlb_command_list + COMMAND + "${tool_wrapper}" "${cmd_part1}" "${cmd_part2}" ) if(NOT arg_NO_AX_SERVER_REGISTRATION AND NOT QT_NO_AX_SERVER_REGISTRATION) - _qt_internal_wrap_tool_command(tlb_command_list APPEND - "$<TARGET_FILE:${QT_CMAKE_EXPORT_NAMESPACE}::idc>" - "$<TARGET_FILE:${target}>" /regserver + list(APPEND tlb_command_list + COMMAND + "${tool_wrapper}" + "${idc_target_file_command_config_wrapped}" + "$<TARGET_FILE:${target}>" /regserver ) endif() add_custom_command(TARGET ${target} POST_BUILD ${tlb_command_list} DEPENDS - ${QT_CMAKE_EXPORT_NAMESPACE}::idc + "${idc_target}" VERBATIM COMMAND_EXPAND_LISTS ) diff --git a/tools/dumpcpp/moc.cpp b/tools/dumpcpp/moc.cpp index f4747f3..a594837 100644 --- a/tools/dumpcpp/moc.cpp +++ b/tools/dumpcpp/moc.cpp @@ -35,6 +35,8 @@ #include <QTemporaryFile> #include <QTextStream> +#include <private/qtools_p.h> + QT_BEGIN_NAMESPACE QByteArray setterName(const QByteArray &propertyName) @@ -43,7 +45,7 @@ QByteArray setterName(const QByteArray &propertyName) if (isupper(setter.at(0))) { setter = "Set" + setter; } else { - setter[0] = char(toupper(setter[0])); + setter[0] = QtMiscUtils::toAsciiUpper(setter[0]); setter = "set" + setter; } return setter; |