f31522130f
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
140 lines
5.0 KiB
Plaintext
140 lines
5.0 KiB
Plaintext
# http://www.w3.org/TR/xml/#syntax
|
|
defineReplace(xml_escape) {
|
|
1 ~= s,&,&,
|
|
1 ~= s,\',',
|
|
1 ~= s,\",",
|
|
1 ~= s,<,<,
|
|
1 ~= s,>,>,
|
|
return($$1)
|
|
}
|
|
|
|
defineTest(qtFlattenResources) {
|
|
isEmpty(RCC_DIR):RCC_DIR = .
|
|
immediate = qmake_immediate$$QMAKE_RESOURCES_IMMEDIATE_NR
|
|
defined(QMAKE_RESOURCES_IMMEDIATE_NR, var): \
|
|
QMAKE_RESOURCES_IMMEDIATE_NR = $$num_add($$QMAKE_RESOURCES_IMMEDIATE_NR, 1)
|
|
else: \
|
|
QMAKE_RESOURCES_IMMEDIATE_NR = 1
|
|
|
|
RESOURCES += $$immediate
|
|
for(resource, RESOURCES) {
|
|
# Regular case of user qrc file
|
|
contains(resource, ".*\\.qrc$"): \
|
|
next()
|
|
|
|
# Fallback for stand-alone files/directories
|
|
!defined($${resource}.files, var) {
|
|
!equals(resource, $$immediate) {
|
|
!exists($$absolute_path($$resource, $$_PRO_FILE_PWD_)): \
|
|
warning("Failure to find: $$resource")
|
|
$${immediate}.files += $$resource
|
|
OTHER_FILES *= $$resource
|
|
}
|
|
RESOURCES -= $$resource
|
|
next()
|
|
}
|
|
|
|
RESOURCES -= $$resource
|
|
isEmpty(BUILDS)|build_pass {
|
|
resource_file = $$absolute_path($$RCC_DIR/qmake_$${resource}.qrc, $$OUT_PWD)
|
|
RESOURCES += $$resource_file
|
|
} else: android {
|
|
# Android will need a resource file for each architecture make sure it is placed
|
|
# correctly for other functions that need the right paths for these files
|
|
for (arch, ANDROID_ABIS) {
|
|
resource_file = $$absolute_path($$RCC_DIR/$$arch/qmake_$${resource}.qrc, $$OUT_PWD)
|
|
RESOURCES += $$resource_file
|
|
}
|
|
}
|
|
|
|
isEmpty(BUILDS)|build_pass {
|
|
# Collection of files, generate qrc file
|
|
prefix = $$eval($${resource}.prefix)
|
|
isEmpty(prefix): \
|
|
prefix = "/"
|
|
|
|
resource_file_content = \
|
|
"<!DOCTYPE RCC><RCC version=\"1.0\">" \
|
|
"<qresource prefix=\"$$xml_escape($$prefix)\">"
|
|
|
|
abs_base = $$absolute_path($$eval($${resource}.base), $$_PRO_FILE_PWD_)
|
|
|
|
for(file, $${resource}.files) {
|
|
abs_path = $$absolute_path($$file, $$_PRO_FILE_PWD_)
|
|
files = $$files($$abs_path/*, true)
|
|
isEmpty(files): \
|
|
files = $$abs_path
|
|
for (file, files) {
|
|
exists($$file/*): next() # exclude directories
|
|
alias = $$relative_path($$file, $$abs_base)
|
|
|
|
# If a resource is added by the build system from outside of $$_PRO_FILE_PWD_
|
|
# everything except the filename needs to be discarded.
|
|
subdir = $$find(alias, ^../)
|
|
if (!isEmpty(subdir)): alias = $$basename(file)
|
|
|
|
resource_file_content += \
|
|
"<file alias=\"$$xml_escape($$alias)\">$$xml_escape($$file)</file>"
|
|
OTHER_FILES *= $$file
|
|
}
|
|
}
|
|
|
|
resource_file_content += \
|
|
"</qresource>" \
|
|
"</RCC>"
|
|
|
|
!write_file($$resource_file, resource_file_content): \
|
|
error()
|
|
}
|
|
}
|
|
export(RCC_DIR)
|
|
export(QMAKE_RESOURCES_IMMEDIATE_NR)
|
|
export(RESOURCES)
|
|
export(OTHER_FILES)
|
|
export($${immediate}.files)
|
|
return(true)
|
|
}
|
|
|
|
defineTest(qtEnsurePluginResourcesCpp) {
|
|
contains(DEFINES, QT_PLUGIN_RESOURCE_INIT_FUNCTION=.*): \
|
|
return(true)
|
|
|
|
!isEmpty(RESOURCES):contains(TEMPLATE, .*lib):plugin:static {
|
|
pluginBaseName = $$basename(TARGET)
|
|
pluginName = $$lower($$replace(pluginBaseName, [-], _))
|
|
resource_init_function = $${pluginName}_plugin_resource_init
|
|
DEFINES += "QT_PLUGIN_RESOURCE_INIT_FUNCTION=$$resource_init_function"
|
|
RESOURCE_INIT_CPP = $$OUT_PWD/$${pluginName}_plugin_resources.cpp
|
|
|
|
GENERATED_SOURCES += $$RESOURCE_INIT_CPP
|
|
QMAKE_DISTCLEAN += $$RESOURCE_INIT_CPP
|
|
|
|
isEmpty(BUILDS)|build_pass {
|
|
RESOURCE_INIT_CONT = \
|
|
"// This file is autogenerated by qmake. It contains a function that" \
|
|
"// references all resources the plugin includes and the function is" \
|
|
"// referenced by QT_(MOC_)EXPORT_PLUGIN to ensure the inclusion in" \
|
|
"// the statically linked plugin." \
|
|
"$${LITERAL_HASH}include <QtCore/qglobal.h>" \
|
|
"void $${resource_init_function}() " \
|
|
"{" \
|
|
|
|
for (resource, RESOURCES) {
|
|
resource_name = $$replace($$list($$basename(resource)),\.qrc$, )
|
|
resource_name = $$replace(resource_name, [^a-zA-Z0-9_], _)
|
|
RESOURCE_INIT_CONT += " Q_INIT_RESOURCE($$resource_name);"
|
|
}
|
|
|
|
RESOURCE_INIT_CONT += \
|
|
"}"
|
|
|
|
write_file($$RESOURCE_INIT_CPP, RESOURCE_INIT_CONT)|error()
|
|
}
|
|
|
|
export(DEFINES)
|
|
export(GENERATED_SOURCES)
|
|
export(QMAKE_DISTCLEAN)
|
|
}
|
|
return(true)
|
|
}
|