aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBart Ribbers <bribbers@disroot.org>2020-05-01 16:34:53 +0200
committerRasmus Thomsen <oss@cogitri.dev>2020-05-04 10:32:10 +0000
commit268f3a0125fca0dd33986c8e88059d7bf4dcc527 (patch)
treeaaf30bb083dce4e08b8f96c35f08136b5727ae9b
parent232bd6503ca9083e7a9eee5f955ff1d547cf9b78 (diff)
downloadaports-268f3a0125fca0dd33986c8e88059d7bf4dcc527.tar.gz
aports-268f3a0125fca0dd33986c8e88059d7bf4dcc527.tar.bz2
aports-268f3a0125fca0dd33986c8e88059d7bf4dcc527.tar.xz
testing/timed: new aport
-rw-r--r--testing/timed/0001-Fixes-build.patch455
-rw-r--r--testing/timed/APKBUILD39
2 files changed, 494 insertions, 0 deletions
diff --git a/testing/timed/0001-Fixes-build.patch b/testing/timed/0001-Fixes-build.patch
new file mode 100644
index 0000000000..5b816f882d
--- /dev/null
+++ b/testing/timed/0001-Fixes-build.patch
@@ -0,0 +1,455 @@
+The build system refers to unexisting files, this patch adds these.
+
+This patch is not ready for upstreaming yet.
+It seems to build fine on RPM-based systems, so why it doesn't on Alpine has to be investigated first.
+
+diff --git a/src/server/adaptor.h b/src/server/adaptor.h
+index 76faa2c..65fa2cc 100644
+--- a/src/server/adaptor.h
++++ b/src/server/adaptor.h
+@@ -35,6 +35,7 @@
+ #include <QString>
+ #include <QDBusAbstractAdaptor>
+ #include <QDBusMessage>
++#include <QDateTime>
+
+ #include "../lib/event-io.h"
+ #include "../lib/wall-info.h"
+diff --git a/src/server/config.type.cpp b/src/server/config.type.cpp
+new file mode 100644
+index 0000000..790a2c3
+--- /dev/null
++++ b/src/server/config.type.cpp
+@@ -0,0 +1,33 @@
++#include <iodata-qt5/validator>
++#include "config.type.h"
++iodata::validator * etc_timed_rc_validator(){
++static bool init_done = false ;
++static iodata::validator A ;
++static iodata::/*validator::*/record_type record_type1 = { "config_t", vector<iodata::/*validator::*/node*>(10) } ;
++static iodata::/*validator::*/node_integer node1("queue_threshold_long", 0, 0, 5000) ;
++static iodata::/*validator::*/node_integer node2("queue_threshold_short", 0, 0, 1000) ;
++static iodata::/*validator::*/node_bytes node3("data_directory", 0, 0, ".timed") ;
++static iodata::/*validator::*/node_bytes node4("settings_file", 0, 0, "settings.data") ;
++static iodata::/*validator::*/node_bytes node5("events_file", 0, 0, "events.data") ;
++static iodata::/*validator::*/node_bytes node6("default_timezone", 0, 0, "Europe/Helsinki") ;
++static iodata::/*validator::*/node_integer node7("default_gmt_offset", 0, 0, 7200) ;
++static iodata::/*validator::*/node_integer node8("voland_ping_retries", 0, 0, 5) ;
++static iodata::/*validator::*/node_integer node9("voland_ping_sleep", 0, 0, 3000) ;
++static iodata::/*validator::*/node_integer node10("dialog_discard_threshold", 0, 0, 1440) ;
++if (not init_done) { init_done = true ;
++A.set_static() ;
++record_type1.nodes[0] = &node1 ;
++record_type1.nodes[1] = &node2 ;
++record_type1.nodes[2] = &node3 ;
++record_type1.nodes[3] = &node4 ;
++record_type1.nodes[4] = &node5 ;
++record_type1.nodes[5] = &node6 ;
++record_type1.nodes[6] = &node7 ;
++record_type1.nodes[7] = &node8 ;
++record_type1.nodes[8] = &node9 ;
++record_type1.nodes[9] = &node10 ;
++A.types["config_t"] = &record_type1 ;
++}
++return &A ;
++}
++
+diff --git a/src/server/config.type.h b/src/server/config.type.h
+new file mode 100644
+index 0000000..19e45fa
+--- /dev/null
++++ b/src/server/config.type.h
+@@ -0,0 +1,5 @@
++#ifndef iodata_type_to_cxx_36533611597108116361108110310010049508410010747524756545672528056120841041181141165169122701225010353577311276108891018747
++#define iodata_type_to_cxx_36533611597108116361108110310010049508410010747524756545672528056120841041181141165169122701225010353577311276108891018747
++#include <iodata-qt5/validator>
++iodata::validator * etc_timed_rc_validator() ;
++#endif
+diff --git a/src/server/customization.type.cpp b/src/server/customization.type.cpp
+new file mode 100644
+index 0000000..cac87d3
+--- /dev/null
++++ b/src/server/customization.type.cpp
+@@ -0,0 +1,23 @@
++#include <iodata-qt5/validator>
++#include "customization.type.h"
++iodata::validator * customization_data_validator(){
++static bool init_done = false ;
++static iodata::validator A ;
++static iodata::/*validator::*/record_type record_type1 = { "customization_t", vector<iodata::/*validator::*/node*>(5) } ;
++static iodata::/*validator::*/node_bytes node1("format24", 0, 0, "True") ;
++static iodata::/*validator::*/node_bytes node2("useNitz", 0, 0, "True") ;
++static iodata::/*validator::*/node_bytes node3("autoTime", 0, 0, "True") ;
++static iodata::/*validator::*/node_bytes node4("guessTz", 0, 0, "True") ;
++static iodata::/*validator::*/node_bytes node5("tz", 0, 0, "Europe/Helsinki") ;
++if (not init_done) { init_done = true ;
++A.set_static() ;
++record_type1.nodes[0] = &node1 ;
++record_type1.nodes[1] = &node2 ;
++record_type1.nodes[2] = &node3 ;
++record_type1.nodes[3] = &node4 ;
++record_type1.nodes[4] = &node5 ;
++A.types["customization_t"] = &record_type1 ;
++}
++return &A ;
++}
++
+diff --git a/src/server/customization.type.h b/src/server/customization.type.h
+new file mode 100644
+index 0000000..85a6217
+--- /dev/null
++++ b/src/server/customization.type.h
+@@ -0,0 +1,5 @@
++#ifndef iodata_type_to_cxx_3653361159710811636788649106102111118575712255688710012010311353120977411580115471047269494690121985674481075775871147349
++#define iodata_type_to_cxx_3653361159710811636788649106102111118575712255688710012010311353120977411580115471047269494690121985674481075775871147349
++#include <iodata-qt5/validator>
++iodata::validator * customization_data_validator() ;
++#endif
+diff --git a/src/server/queue.type.cpp b/src/server/queue.type.cpp
+new file mode 100644
+index 0000000..c307310
+--- /dev/null
++++ b/src/server/queue.type.cpp
+@@ -0,0 +1,115 @@
++#include <iodata-qt5/validator>
++#include "queue.type.h"
++iodata::validator * events_data_validator(){
++static bool init_done = false ;
++static iodata::validator A ;
++static iodata::/*validator::*/record_type record_type1 = { "action_t", vector<iodata::/*validator::*/node*>(3) } ;
++static iodata::/*validator::*/record_type record_type2 = { "b_attr_t", vector<iodata::/*validator::*/node*>(1) } ;
++static iodata::/*validator::*/record_type record_type3 = { "broken_down_t", vector<iodata::/*validator::*/node*>(5) } ;
++static iodata::/*validator::*/record_type record_type4 = { "cred_modifier_t", vector<iodata::/*validator::*/node*>(2) } ;
++static iodata::/*validator::*/record_type record_type5 = { "credentials_t", vector<iodata::/*validator::*/node*>(3) } ;
++static iodata::/*validator::*/record_type record_type6 = { "event_queue_t", vector<iodata::/*validator::*/node*>(2) } ;
++static iodata::/*validator::*/record_type record_type7 = { "event_t", vector<iodata::/*validator::*/node*>(15) } ;
++static iodata::/*validator::*/record_type record_type8 = { "key_value_t", vector<iodata::/*validator::*/node*>(2) } ;
++static iodata::/*validator::*/record_type record_type9 = { "recurrence_pattern_t", vector<iodata::/*validator::*/node*>(6) } ;
++static const char *bitmask_list1[] = { NULL } ;
++static iodata::/*validator::*/node_bitmask node1("flags", 0, 0, iodata::bitmask(0, bitmask_list1)) ;
++static iodata::/*validator::*/node_record node2("attr", 1, 0, "key_value_t", &record_type8) ;
++static iodata::/*validator::*/node_record node3("cred_modifier", 1, 0, "cred_modifier_t", &record_type4) ;
++static iodata::/*validator::*/node_record node4("attr", 1, 0, "key_value_t", &record_type8) ;
++static iodata::/*validator::*/node_integer node5("year", 0, 0, 0) ;
++static iodata::/*validator::*/node_integer node6("month", 0, 0, 0) ;
++static iodata::/*validator::*/node_integer node7("day", 0, 0, 0) ;
++static iodata::/*validator::*/node_integer node8("hour", 0, 0, 0) ;
++static iodata::/*validator::*/node_integer node9("minute", 0, 0, 0) ;
++static iodata::/*validator::*/node_bytes node10("token", 0, 1, "") ;
++static iodata::/*validator::*/node_integer node11("accrue", 0, 0, 0) ;
++static iodata::/*validator::*/node_bytes node12("uid", 0, 0, "nobody") ;
++static iodata::/*validator::*/node_bytes node13("gid", 0, 0, "nogroup") ;
++static iodata::/*validator::*/node_bytes node14("tokens", 1, 0, "") ;
++static iodata::/*validator::*/node_integer node15("next_cookie", 0, 0, 1) ;
++static iodata::/*validator::*/node_record node16("events", 1, 0, "event_t", &record_type7) ;
++static iodata::/*validator::*/node_integer node17("cookie", 0, 1, 0) ;
++static iodata::/*validator::*/node_integer node18("ticker", 0, 0, 0) ;
++static iodata::/*validator::*/node_record node19("t", 0, 0, "broken_down_t", &record_type3) ;
++static iodata::/*validator::*/node_bytes node20("tz", 0, 0, "") ;
++static iodata::/*validator::*/node_record node21("attr", 1, 0, "key_value_t", &record_type8) ;
++static const char *bitmask_list2[] = { NULL } ;
++static iodata::/*validator::*/node_bitmask node22("flags", 0, 0, iodata::bitmask(0, bitmask_list2)) ;
++static iodata::/*validator::*/node_record node23("recrs", 1, 0, "recurrence_pattern_t", &record_type9) ;
++static iodata::/*validator::*/node_record node24("actions", 1, 0, "action_t", &record_type1) ;
++static iodata::/*validator::*/node_integer node25("snooze", 1, 0, 0) ;
++static iodata::/*validator::*/node_record node26("b_attr", 1, 0, "b_attr_t", &record_type2) ;
++static iodata::/*validator::*/node_integer node27("dialog_time", 0, 0, 0) ;
++static iodata::/*validator::*/node_integer node28("tsz_max", 0, 0, 0) ;
++static iodata::/*validator::*/node_integer node29("tsz_counter", 0, 0, 0) ;
++static iodata::/*validator::*/node_record node30("client_creds", 0, 0, "credentials_t", &record_type5) ;
++static iodata::/*validator::*/node_record node31("cred_modifier", 1, 0, "cred_modifier_t", &record_type4) ;
++static iodata::/*validator::*/node_bytes node32("key", 0, 0, "") ;
++static iodata::/*validator::*/node_bytes node33("val", 0, 0, "") ;
++static const char *bitmask_list3[] = { NULL } ;
++static iodata::/*validator::*/node_bitmask node34("flags", 0, 0, iodata::bitmask(0, bitmask_list3)) ;
++static const char *bitmask_list4[] = { "any_mins", NULL } ;
++static iodata::/*validator::*/node_bitmask node35("mins", 0, 0, iodata::bitmask(0, bitmask_list4)) ;
++static const char *bitmask_list5[] = { "any_hour", NULL } ;
++static iodata::/*validator::*/node_bitmask node36("hour", 0, 0, iodata::bitmask(0, bitmask_list5)) ;
++static const char *bitmask_list6[] = { "any_mday", NULL } ;
++static iodata::/*validator::*/node_bitmask node37("mday", 0, 0, iodata::bitmask(0, bitmask_list6)) ;
++static const char *bitmask_list7[] = { "any_wday", NULL } ;
++static iodata::/*validator::*/node_bitmask node38("wday", 0, 0, iodata::bitmask(0, bitmask_list7)) ;
++static const char *bitmask_list8[] = { "any_mons", NULL } ;
++static iodata::/*validator::*/node_bitmask node39("mons", 0, 0, iodata::bitmask(0, bitmask_list8)) ;
++if (not init_done) { init_done = true ;
++A.set_static() ;
++record_type1.nodes[0] = &node1 ;
++record_type1.nodes[1] = &node2 ;
++record_type1.nodes[2] = &node3 ;
++A.types["action_t"] = &record_type1 ;
++record_type2.nodes[0] = &node4 ;
++A.types["b_attr_t"] = &record_type2 ;
++record_type3.nodes[0] = &node5 ;
++record_type3.nodes[1] = &node6 ;
++record_type3.nodes[2] = &node7 ;
++record_type3.nodes[3] = &node8 ;
++record_type3.nodes[4] = &node9 ;
++A.types["broken_down_t"] = &record_type3 ;
++record_type4.nodes[0] = &node10 ;
++record_type4.nodes[1] = &node11 ;
++A.types["cred_modifier_t"] = &record_type4 ;
++record_type5.nodes[0] = &node12 ;
++record_type5.nodes[1] = &node13 ;
++record_type5.nodes[2] = &node14 ;
++A.types["credentials_t"] = &record_type5 ;
++record_type6.nodes[0] = &node15 ;
++record_type6.nodes[1] = &node16 ;
++A.types["event_queue_t"] = &record_type6 ;
++record_type7.nodes[0] = &node17 ;
++record_type7.nodes[1] = &node18 ;
++record_type7.nodes[2] = &node19 ;
++record_type7.nodes[3] = &node20 ;
++record_type7.nodes[4] = &node21 ;
++record_type7.nodes[5] = &node22 ;
++record_type7.nodes[6] = &node23 ;
++record_type7.nodes[7] = &node24 ;
++record_type7.nodes[8] = &node25 ;
++record_type7.nodes[9] = &node26 ;
++record_type7.nodes[10] = &node27 ;
++record_type7.nodes[11] = &node28 ;
++record_type7.nodes[12] = &node29 ;
++record_type7.nodes[13] = &node30 ;
++record_type7.nodes[14] = &node31 ;
++A.types["event_t"] = &record_type7 ;
++record_type8.nodes[0] = &node32 ;
++record_type8.nodes[1] = &node33 ;
++A.types["key_value_t"] = &record_type8 ;
++record_type9.nodes[0] = &node34 ;
++record_type9.nodes[1] = &node35 ;
++record_type9.nodes[2] = &node36 ;
++record_type9.nodes[3] = &node37 ;
++record_type9.nodes[4] = &node38 ;
++record_type9.nodes[5] = &node39 ;
++A.types["recurrence_pattern_t"] = &record_type9 ;
++}
++return &A ;
++}
++
+diff --git a/src/server/queue.type.h b/src/server/queue.type.h
+new file mode 100644
+index 0000000..aeb4a6a
+--- /dev/null
++++ b/src/server/queue.type.h
+@@ -0,0 +1,5 @@
++#ifndef iodata_type_to_cxx_365336115971081163699676812048721149972120559810779841095611711010510311310371579971775271102888690508111211551651205047
++#define iodata_type_to_cxx_365336115971081163699676812048721149972120559810779841095611711010510311310371579971775271102888690508111211551651205047
++#include <iodata-qt5/validator>
++iodata::validator * events_data_validator() ;
++#endif
+diff --git a/src/server/server.pro b/src/server/server.pro
+index 3bec0c7..3b00d76 100644
+--- a/src/server/server.pro
++++ b/src/server/server.pro
+@@ -10,7 +10,7 @@ VERSION = $$(TIMED_VERSION)
+ INCLUDEPATH += ../h
+
+ QMAKE_LIBDIR_FLAGS += -L../lib -L../voland
+-LIBS += -ltimed-qt5 -ltimed-voland-qt5
++LIBS += -ltimed-qt5 -ltimed-voland-qt5 -liodata-qt5
+
+ IODATA_TYPES = queue.type config.type settings.type customization.type tzdata.type
+
+@@ -70,7 +70,13 @@ SOURCES += \
+ ofonomodemmanager.cpp \
+ modemwatcher.cpp \
+ ofonoconstants.cpp \
+- ntpcontroller.cpp
++ ntpcontroller.cpp \
++ config.type.cpp \
++ customization.type.cpp \
++ queue.type.cpp \
++ settings.type.cpp \
++ timed-cust-rc.type.cpp \
++ tzdata.type.cpp
+
+ SOURCES += credentials.cpp
+ HEADERS += credentials.h
+diff --git a/src/server/settings.type.cpp b/src/server/settings.type.cpp
+new file mode 100644
+index 0000000..2a85916
+--- /dev/null
++++ b/src/server/settings.type.cpp
+@@ -0,0 +1,59 @@
++#include <iodata-qt5/validator>
++#include "settings.type.h"
++iodata::validator * settings_data_validator(){
++static bool init_done = false ;
++static iodata::validator A ;
++static iodata::/*validator::*/record_type record_type1 = { "empty_t", vector<iodata::/*validator::*/node*>(0) } ;
++static iodata::/*validator::*/record_type record_type2 = { "generic_zone_t", vector<iodata::/*validator::*/node*>(1) } ;
++static iodata::/*validator::*/record_type record_type3 = { "key_int_t", vector<iodata::/*validator::*/node*>(2) } ;
++static iodata::/*validator::*/record_type record_type4 = { "manual_offset_t", vector<iodata::/*validator::*/node*>(1) } ;
++static iodata::/*validator::*/record_type record_type5 = { "settings_t", vector<iodata::/*validator::*/node*>(15) } ;
++static iodata::/*validator::*/node_bytes node1("value", 0, 0, "[unknown]") ;
++static iodata::/*validator::*/node_bytes node2("key", 0, 1, "") ;
++static iodata::/*validator::*/node_integer node3("value", 0, 0, 0) ;
++static iodata::/*validator::*/node_integer node4("value", 0, 0, -1) ;
++static iodata::/*validator::*/node_integer node5("time_nitz", 0, 0, -1) ;
++static iodata::/*validator::*/node_integer node6("local_cellular", 0, 0, -1) ;
++static iodata::/*validator::*/node_integer node7("format_24", 0, 0, -1) ;
++static iodata::/*validator::*/node_integer node8("auto_dst", 0, 0, 1) ;
++static iodata::/*validator::*/node_record node9("manual_utc", 0, 0, "empty_t", &record_type1) ;
++static iodata::/*validator::*/node_record node10("nitz_utc", 0, 0, "empty_t", &record_type1) ;
++static iodata::/*validator::*/node_record node11("gps_utc", 0, 0, "empty_t", &record_type1) ;
++static iodata::/*validator::*/node_record node12("ntp_utc", 0, 0, "empty_t", &record_type1) ;
++static iodata::/*validator::*/node_record node13("manual_offset", 0, 0, "manual_offset_t", &record_type4) ;
++static iodata::/*validator::*/node_record node14("nitz_offset", 0, 0, "empty_t", &record_type1) ;
++static iodata::/*validator::*/node_record node15("manual_zone", 0, 0, "generic_zone_t", &record_type2) ;
++static iodata::/*validator::*/node_record node16("cellular_zone", 0, 0, "generic_zone_t", &record_type2) ;
++static iodata::/*validator::*/node_integer node17("default_snooze", 0, 0, 300) ;
++static iodata::/*validator::*/node_record node18("app_snooze", 1, 0, "key_int_t", &record_type3) ;
++static iodata::/*validator::*/node_integer node19("alarms", 0, 0, 1) ;
++if (not init_done) { init_done = true ;
++A.set_static() ;
++A.types["empty_t"] = &record_type1 ;
++record_type2.nodes[0] = &node1 ;
++A.types["generic_zone_t"] = &record_type2 ;
++record_type3.nodes[0] = &node2 ;
++record_type3.nodes[1] = &node3 ;
++A.types["key_int_t"] = &record_type3 ;
++record_type4.nodes[0] = &node4 ;
++A.types["manual_offset_t"] = &record_type4 ;
++record_type5.nodes[0] = &node5 ;
++record_type5.nodes[1] = &node6 ;
++record_type5.nodes[2] = &node7 ;
++record_type5.nodes[3] = &node8 ;
++record_type5.nodes[4] = &node9 ;
++record_type5.nodes[5] = &node10 ;
++record_type5.nodes[6] = &node11 ;
++record_type5.nodes[7] = &node12 ;
++record_type5.nodes[8] = &node13 ;
++record_type5.nodes[9] = &node14 ;
++record_type5.nodes[10] = &node15 ;
++record_type5.nodes[11] = &node16 ;
++record_type5.nodes[12] = &node17 ;
++record_type5.nodes[13] = &node18 ;
++record_type5.nodes[14] = &node19 ;
++A.types["settings_t"] = &record_type5 ;
++}
++return &A ;
++}
++
+diff --git a/src/server/settings.type.h b/src/server/settings.type.h
+new file mode 100644
+index 0000000..b9f714c
+--- /dev/null
++++ b/src/server/settings.type.h
+@@ -0,0 +1,5 @@
++#ifndef iodata_type_to_cxx_365336115971081163666995311270727910611411411610510212256121100122102102108106881131027886118102116768979491097256122728512211253
++#define iodata_type_to_cxx_365336115971081163666995311270727910611411411610510212256121100122102102108106881131027886118102116768979491097256122728512211253
++#include <iodata-qt5/validator>
++iodata::validator * settings_data_validator() ;
++#endif
+diff --git a/src/server/timed-cust-rc.type.cpp b/src/server/timed-cust-rc.type.cpp
+new file mode 100644
+index 0000000..4c00f02
+--- /dev/null
++++ b/src/server/timed-cust-rc.type.cpp
+@@ -0,0 +1,25 @@
++#include <iodata-qt5/validator>
++#include "timed-cust-rc.type.h"
++iodata::validator * foo(){
++static bool init_done = false ;
++static iodata::validator A ;
++static iodata::/*validator::*/record_type record_type1 = { "const_t", vector<iodata::/*validator::*/node*>(1) } ;
++static iodata::/*validator::*/record_type record_type2 = { "timed_cust_rc_t", vector<iodata::/*validator::*/node*>(4) } ;
++static iodata::/*validator::*/node_bytes node1("rc_location", 0, 0, "/etc/timed-cust.rc") ;
++static iodata::/*validator::*/node_bytes node2("time_nitz", 0, 0, "yes") ;
++static iodata::/*validator::*/node_bytes node3("format_24", 0, 0, "r") ;
++static iodata::/*validator::*/node_bytes node4("default_tz", 0, 0, "327") ;
++static iodata::/*validator::*/node_bytes node5("hash", 0, 0, "") ;
++if (not init_done) { init_done = true ;
++A.set_static() ;
++record_type1.nodes[0] = &node1 ;
++A.types["const_t"] = &record_type1 ;
++record_type2.nodes[0] = &node2 ;
++record_type2.nodes[1] = &node3 ;
++record_type2.nodes[2] = &node4 ;
++record_type2.nodes[3] = &node5 ;
++A.types["timed_cust_rc_t"] = &record_type2 ;
++}
++return &A ;
++}
++
+diff --git a/src/server/timed-cust-rc.type.h b/src/server/timed-cust-rc.type.h
+new file mode 100644
+index 0000000..105e4a9
+--- /dev/null
++++ b/src/server/timed-cust-rc.type.h
+@@ -0,0 +1,5 @@
++#ifndef iodata_type_to_cxx_36533611597108116368011599807010649105105698254817310669119488253122761187875110121101100114764965104578410911453886910253
++#define iodata_type_to_cxx_36533611597108116368011599807010649105105698254817310669119488253122761187875110121101100114764965104578410911453886910253
++#include <iodata-qt5/validator>
++iodata::validator * foo() ;
++#endif
+diff --git a/src/server/tzdata.type.cpp b/src/server/tzdata.type.cpp
+new file mode 100644
+index 0000000..65f7d72
+--- /dev/null
++++ b/src/server/tzdata.type.cpp
+@@ -0,0 +1,53 @@
++#include <iodata-qt5/validator>
++#include "tzdata.type.h"
++iodata::validator * tzdata_validator(){
++static bool init_done = false ;
++static iodata::validator A ;
++static iodata::/*validator::*/record_type record_type1 = { "country_record_t", vector<iodata::/*validator::*/node*>(3) } ;
++static iodata::/*validator::*/record_type record_type2 = { "mcc_country_pair_t", vector<iodata::/*validator::*/node*>(2) } ;
++static iodata::/*validator::*/record_type record_type3 = { "mcc_to_xy_t", vector<iodata::/*validator::*/node*>(1) } ;
++static iodata::/*validator::*/record_type record_type4 = { "tz_distinct_info_t", vector<iodata::/*validator::*/node*>(2) } ;
++static iodata::/*validator::*/record_type record_type5 = { "tz_distinct_t", vector<iodata::/*validator::*/node*>(1) } ;
++static iodata::/*validator::*/record_type record_type6 = { "tz_single_info_t", vector<iodata::/*validator::*/node*>(2) } ;
++static iodata::/*validator::*/record_type record_type7 = { "tz_single_t", vector<iodata::/*validator::*/node*>(1) } ;
++static iodata::/*validator::*/record_type record_type8 = { "zones_by_country_t", vector<iodata::/*validator::*/node*>(1) } ;
++static iodata::/*validator::*/node_bytes node1("xy", 0, 1, "") ;
++static iodata::/*validator::*/node_bytes node2("major", 1, 1, "") ;
++static iodata::/*validator::*/node_bytes node3("minor", 1, 1, "") ;
++static iodata::/*validator::*/node_integer node4("mcc", 0, 1, 0) ;
++static iodata::/*validator::*/node_bytes node5("country", 0, 1, "") ;
++static iodata::/*validator::*/node_record node6("mcc_to_xy", 1, 1, "mcc_country_pair_t", &record_type2) ;
++static iodata::/*validator::*/node_integer node7("mcc", 0, 1, 0) ;
++static iodata::/*validator::*/node_bytes node8("tz", 1, 1, "") ;
++static iodata::/*validator::*/node_record node9("list", 1, 1, "tz_distinct_info_t", &record_type4) ;
++static iodata::/*validator::*/node_integer node10("mcc", 0, 1, 0) ;
++static iodata::/*validator::*/node_bytes node11("tz", 0, 1, "") ;
++static iodata::/*validator::*/node_record node12("list", 1, 1, "tz_single_info_t", &record_type6) ;
++static iodata::/*validator::*/node_record node13("xy_to_tz", 1, 1, "country_record_t", &record_type1) ;
++if (not init_done) { init_done = true ;
++A.set_static() ;
++record_type1.nodes[0] = &node1 ;
++record_type1.nodes[1] = &node2 ;
++record_type1.nodes[2] = &node3 ;
++A.types["country_record_t"] = &record_type1 ;
++record_type2.nodes[0] = &node4 ;
++record_type2.nodes[1] = &node5 ;
++A.types["mcc_country_pair_t"] = &record_type2 ;
++record_type3.nodes[0] = &node6 ;
++A.types["mcc_to_xy_t"] = &record_type3 ;
++record_type4.nodes[0] = &node7 ;
++record_type4.nodes[1] = &node8 ;
++A.types["tz_distinct_info_t"] = &record_type4 ;
++record_type5.nodes[0] = &node9 ;
++A.types["tz_distinct_t"] = &record_type5 ;
++record_type6.nodes[0] = &node10 ;
++record_type6.nodes[1] = &node11 ;
++A.types["tz_single_info_t"] = &record_type6 ;
++record_type7.nodes[0] = &node12 ;
++A.types["tz_single_t"] = &record_type7 ;
++record_type8.nodes[0] = &node13 ;
++A.types["zones_by_country_t"] = &record_type8 ;
++}
++return &A ;
++}
++
+diff --git a/src/server/tzdata.type.h b/src/server/tzdata.type.h
+new file mode 100644
+index 0000000..4a2e83b
+--- /dev/null
++++ b/src/server/tzdata.type.h
+@@ -0,0 +1,5 @@
++#ifndef iodata_type_to_cxx_36533611597108116361031117710974501117811888881171217311611611669711187210849114110110759797717767100113100831164710747669855
++#define iodata_type_to_cxx_36533611597108116361031117710974501117811888881171217311611611669711187210849114110110759797717767100113100831164710747669855
++#include <iodata-qt5/validator>
++iodata::validator * tzdata_validator() ;
++#endif
diff --git a/testing/timed/APKBUILD b/testing/timed/APKBUILD
new file mode 100644
index 0000000000..39d2caaa19
--- /dev/null
+++ b/testing/timed/APKBUILD
@@ -0,0 +1,39 @@
+# Contributor: Bart Ribbers <bribbers@disroot.org>
+# Maintainer: Bart Ribbers <bribbers@disroot.org>
+pkgname=timed
+pkgver=3.6.6
+pkgrel=0
+pkgdesc="The time daemon manages system time, timezone and settings, executing actions at given time and managing the event queue"
+url="https://git.sailfishos.org/mer-core/profiled"
+arch="all"
+license="LGPL-2.1-only"
+depends_dev="libiodata-dev elogind-dev sailfish-access-control"
+makedepends="$depends_dev qt5-qtbase-dev"
+subpackages="$pkgname-dev"
+source="https://git.sailfishos.org/mer-core/timed/-/archive/$pkgver/timed-$pkgver.tar.gz
+ 0001-Fixes-build.patch
+ "
+
+prepare() {
+ default_prepare
+
+ # The build system refers to qmacro.h in a different location
+ # Taken from upstream RPM packaging
+ mkdir -p src/h/timed-qt5
+ ln -f src/lib/qmacro.h src/h/timed-qt5/qmacro.h
+}
+
+build() {
+ qmake-qt5 -recursive
+ make
+}
+
+package() {
+ INSTALL_ROOT="$pkgdir" make install
+
+ # Remove installed tests
+ rm -r "$pkgdir"/opt
+}
+
+sha512sums="d6d9c7cd27084c10a2da8afa1985041e41d093875e54c22d1b2dbe210309387e6773645a8e827b335dd215e96f4e34013017bacfbb05828d08e2cfdbcf124cfb timed-3.6.6.tar.gz
+a53958ea2a3b8cd2f0ffa9e1b53b90657a8e638878292fe294d1745c31ee7c8b159010723ceea9164450453dbb208adfd58f97578adf750292df86b8c3c4a772 0001-Fixes-build.patch"