Files
RedBear-OS/local/recipes/qt/qtdeclarative/source/tools/qmltc/qmltcoutputir.h
T
vasilito f31522130f fix: comprehensive boot warnings and exceptions — fixable silenced, unfixable diagnosed
Build system (5 gaps hardened):
- COOKBOOK_OFFLINE defaults to true (fork-mode)
- normalize_patch handles diff -ruN format
- New 'repo validate-patches' command (25/25 relibc patches)
- 14 patched Qt/Wayland/display recipes added to protected list
- relibc archive regenerated with current patch chain

Boot fixes (fixable):
- Full ISO EFI partition: 16 MiB → 1 MiB (matches mini, BIOS hardcoded 2 MiB offset)
- D-Bus system bus: absolute /usr/bin/dbus-daemon path (was skipped)
- redbear-sessiond: absolute /usr/bin/redbear-sessiond path (was skipped)
- daemon framework: silenced spurious INIT_NOTIFY warnings for oneshot_async services (P0-daemon-silence-init-notify.patch)
- udev-shim: demoted INIT_NOTIFY warning to INFO (expected for oneshot_async)
- relibc: comprehensive named semaphores (sem_open/close/unlink) replacing upstream todo!() stubs
- greeterd: Wayland socket timeout 15s → 30s (compositor DRM wait)
- greeter-ui: built and linked (header guard unification, sem_compat stubs removed)
- mc: un-ignored in both configs, fixed glib/libiconv/pcre2 transitive deps
- greeter config: removed stale keymapd dependency from display/greeter services
- prefix toolchain: relibc headers synced, _RELIBC_STDLIB_H guard unified

Unfixable (diagnosed, upstream):
- i2c-hidd: abort on no-I2C-hardware (QEMU) — process::exit → relibc abort
- kded6/greeter-ui: page fault 0x8 — Qt library null deref
- Thread panics fd != -1 — Rust std library on Redox
- DHCP timeout / eth0 MAC — QEMU user-mode networking
- hwrngd/thermald — no hardware RNG/thermal in VM
- live preload allocation — BIOS memory fragmentation, continues on demand
2026-05-05 20:20:37 +01:00

196 lines
6.4 KiB
C++

// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QMLTCOUTPUTIR_H
#define QMLTCOUTPUTIR_H
#include <QtCore/qstring.h>
#include <QtCore/qlist.h>
#include <QtCore/qstringlist.h>
#include <QtCore/qset.h>
#include <private/qqmljsmetatypes_p.h>
#include <optional>
QT_BEGIN_NAMESPACE
// Below are the classes that represent compiled QML types in a string data
// form. These classes are used to generate C++ code.
// Represents C++ variable
struct QmltcVariable
{
QString cppType; // C++ type of a variable
QString name; // variable name
QString defaultValue; // optional initialization value
QmltcVariable() = default;
// special ctor for QList's emplace back
QmltcVariable(const QString &t, const QString &n, const QString &v = QString())
: cppType(t), name(n), defaultValue(v)
{
}
};
struct QmltcProperty : QmltcVariable
{
QString containingClass;
QString signalName;
QmltcProperty() = default;
QmltcProperty(const QString t, const QString &n, const QString &c, const QString &s)
: QmltcVariable(t, n), containingClass(c), signalName(s)
{
}
};
// Represents QML -> C++ compiled enumeration type
struct QmltcEnum
{
QString cppType; // C++ type of an enum
QStringList keys; // enumerator keys
QStringList values; // enumerator values
QString ownMocLine; // special MOC line that follows enum declaration
QmltcEnum() = default;
QmltcEnum(const QString &t, const QStringList &ks, const QStringList &vs, const QString &l)
: cppType(t), keys(ks), values(vs), ownMocLine(l)
{
}
};
struct QmltcMethodBase
{
QStringList comments; // C++ comments
QString name; // C++ function name
QList<QmltcVariable> parameterList; // C++ function parameter list
QStringList body; // C++ function code
QQmlJSMetaMethod::Access access = QQmlJSMetaMethod::Public; // access specifier
QStringList declarationPrefixes;
QStringList modifiers; // cv-qualifiers, ref-qualifier, noexcept, attributes
};
// Represents QML -> C++ compiled function
struct QmltcMethod : QmltcMethodBase
{
QString returnType; // C++ return type
QQmlJSMetaMethodType type = QQmlJSMetaMethodType::Method; // Qt function type
// TODO: should be a better way to handle this
bool userVisible = false; // tells if a function is prioritized during the output generation
};
// Represents C++ ctor of a type
struct QmltcCtor : QmltcMethodBase
{
QStringList initializerList; // C++ ctor's initializer list
};
// Represents C++ dtor of a type
struct QmltcDtor : QmltcMethodBase
{
};
// Represents a generated class that knows how to set the public,
// writable properties of a compiled QML -> C++ type.
// This is generally intended to be available for the root of the
// document to allow the user to set the initial values for
// properties, when creating a component, with support for strong
// typing.
struct QmltcPropertyInitializer {
QString name;
QmltcCtor constructor;
// A member containing a reference to the object for which the
// properties should be set.
QmltcVariable component;
// A member containing a cache of properties that were actually
// set that can be referenced later..
QmltcVariable initializedCache;
// Setter methods for each property.
QList<QmltcMethod> propertySetters;
};
// Represents a generated class that contains a bundle of values to
// initialize the required properties of a type.
//
// This is generally intended to be available for the root component
// of the document, where it will be used as a constructor argument to
// force the user to provide initial values for the required
// properties of the constructed type.
struct QmltcRequiredPropertiesBundle {
QString name;
QList<QmltcVariable> members;
};
// Represents QML -> C++ compiled type
struct QmltcType
{
QString cppType; // C++ type of the QML type
QStringList baseClasses; // C++ type names of base classes
QStringList mocCode; // Qt MOC code
QStringList otherCode; // Random code that doesn't fit any category, e.g. friend declarations
// member types: enumerations and child types
QList<QmltcEnum> enums;
QList<QmltcType> children; // these are pretty much always empty
// special member functions:
QmltcCtor baselineCtor {}; // does basic contruction
QmltcCtor externalCtor {}; // calls basicCtor, calls init
QmltcMethod init {}; // starts object initialization (context setup), calls finalize
QmltcMethod beginClass {}; // calls QQmlParserStatus::classBegin()
QmltcMethod endInit {}; // ends object initialization (with "simple" bindings setup)
QmltcMethod setComplexBindings {}; // sets up "complex" (e.g. script) bindings
QmltcMethod completeComponent {}; // calls QQmlParserStatus::componentComplete()
QmltcMethod finalizeComponent {}; // calls QQmlFinalizerHook::componentFinalized()
QmltcMethod handleOnCompleted {}; // calls Component.onCompleted
std::optional<QmltcDtor> dtor {};
// member functions: methods, signals and slots
QList<QmltcMethod> functions;
// member variables
QList<QmltcVariable> variables;
QList<QmltcProperty> properties;
// QML document root specific:
std::optional<QmltcMethod> typeCount; // the number of QML types defined in a document
// TODO: only needed for binding callables - should not be needed, generally
bool ignoreInit = false; // specifies whether init and externalCtor should be ignored
// needed for singletons
std::optional<QmltcMethod> staticCreate{};
// A proxy class that provides a restricted interface that only
// allows setting the properties of the type.
QmltcPropertyInitializer propertyInitializer{};
std::optional<QmltcRequiredPropertiesBundle> requiredPropertiesBundle{};
};
// Represents whole QML program, compiled to C++
struct QmltcProgram
{
QString url; // QML file url
QString cppPath; // C++ output .cpp path
QString hPath; // C++ output .h path
QString outNamespace;
QString exportMacro; // if not empty, the macro that should be used to export the generated
// classes
QSet<QString> includes; // non-default C++ include files
QmltcMethod urlMethod; // returns QUrl of the QML document
QList<QmltcType> compiledTypes; // all QML types that are compiled to C++
};
QT_END_NAMESPACE
#endif // QMLTCOUTPUTIR_H