From: Roland Hieber <rhi@pengutronix.de>
To: ptxdist@pengutronix.de
Cc: Roland Hieber <rhi@pengutronix.de>
Subject: [ptxdist] [PATCH 2/2] open62541: version bump 1.2 -> 1.3.4
Date: Mon, 13 Feb 2023 10:31:17 +0100 [thread overview]
Message-ID: <20230213093117.1865063-2-rhi@pengutronix.de> (raw)
In-Reply-To: <20230213093117.1865063-1-rhi@pengutronix.de>
Update CMake options, and replace the remaining patch with the version
that was merged upstream after the 1.3.4 release.
Signed-off-by: Roland Hieber <rhi@pengutronix.de>
---
...-UA_NODESET_DIR-to-be-custom-defined.patch | 144 ------------------
patches/open62541-1.2/series | 4 -
...w-UA_NODESET_DIR-to-be-custom-define.patch | 71 +++++++++
patches/open62541-1.3.4/series | 4 +
rules/host-open62541.make | 2 +-
rules/open62541.make | 22 ++-
6 files changed, 90 insertions(+), 157 deletions(-)
delete mode 100644 patches/open62541-1.2/0001-CMake-Allow-UA_NODESET_DIR-to-be-custom-defined.patch
delete mode 100644 patches/open62541-1.2/series
create mode 100644 patches/open62541-1.3.4/0001-feat-server-allow-UA_NODESET_DIR-to-be-custom-define.patch
create mode 100644 patches/open62541-1.3.4/series
diff --git a/patches/open62541-1.2/0001-CMake-Allow-UA_NODESET_DIR-to-be-custom-defined.patch b/patches/open62541-1.2/0001-CMake-Allow-UA_NODESET_DIR-to-be-custom-defined.patch
deleted file mode 100644
index d07f9a30ad85..000000000000
--- a/patches/open62541-1.2/0001-CMake-Allow-UA_NODESET_DIR-to-be-custom-defined.patch
+++ /dev/null
@@ -1,144 +0,0 @@
-From 3b0511e0e85700a8623ab6d0e1a6f8df42bc1c16 Mon Sep 17 00:00:00 2001
-From: Sascha Hauer <s.hauer@pengutronix.de>
-Date: Wed, 3 Mar 2021 10:46:28 +0100
-Subject: [PATCH] CMake: Allow UA_NODESET_DIR to be custom defined.
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This makes it easier for developers to keep all ua-nodesets XML
-definitions in a common location.
-
-Backported from: https://github.com/open62541/open62541/pull/3310
-
-Signed-off-by: Björn Esser <b.esser@pengutronix.de>
----
- CMakeLists.txt | 6 +++++-
- doc/nodeset_compiler.rst | 22 +++++++++++-----------
- examples/CMakeLists.txt | 4 ----
- tools/cmake/macros_public.cmake | 2 +-
- 4 files changed, 17 insertions(+), 17 deletions(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index d09a77a6..87338eb8 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -15,7 +15,6 @@ include(GNUInstallDirs)
-
- # Set when installed via make install
- set(open62541_TOOLS_DIR ${PROJECT_SOURCE_DIR}/tools)
--set(open62541_NODESET_DIR ${PROJECT_SOURCE_DIR}/deps/ua-nodeset)
- set(XDP_LIBRARY "/usr/local/src/bpf-next/tools/lib/bpf/libbpf.a")
-
- include(macros_internal)
-@@ -160,6 +159,11 @@ if(UA_ENABLE_ENCRYPTION_OPENSSL)
- set(UA_ENABLE_ENCRYPTION_MBEDTLS OFF)
- endif()
-
-+if(NOT UA_NODESET_DIR)
-+ set(UA_NODESET_DIR ${PROJECT_SOURCE_DIR}/deps/ua-nodeset)
-+endif()
-+set(open62541_NODESET_DIR ${UA_NODESET_DIR})
-+
- # Namespace Zero
- set(UA_NAMESPACE_ZERO "REDUCED" CACHE STRING "Completeness of the generated namespace zero (minimal/reduced/full)")
- SET_PROPERTY(CACHE UA_NAMESPACE_ZERO PROPERTY STRINGS "MINIMAL" "REDUCED" "FULL")
-diff --git a/doc/nodeset_compiler.rst b/doc/nodeset_compiler.rst
-index 730eda80..ea110d40 100644
---- a/doc/nodeset_compiler.rst
-+++ b/doc/nodeset_compiler.rst
-@@ -292,17 +292,17 @@ Here are some examples for the ``DI`` and ``PLCOpen`` nodesets::
- # Generate types and namespace for DI
- ua_generate_nodeset_and_datatypes(
- NAME "di"
-- FILE_CSV "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/OpcUaDiModel.csv"
-- FILE_BSD "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.Types.bsd"
-+ FILE_CSV "${UA_NODESET_DIR}/deps/ua-nodeset/DI/OpcUaDiModel.csv"
-+ FILE_BSD "${UA_NODESET_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.Types.bsd"
- NAMESPACE_MAP "2:http://opcfoundation.org/UA/DI/"
-- FILE_NS "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.NodeSet2.xml"
-+ FILE_NS "${UA_NODESET_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.NodeSet2.xml"
- )
-
- # generate PLCopen namespace which is using DI
- ua_generate_nodeset_and_datatypes(
- NAME "plc"
- # PLCopen does not define custom types. Only generate the nodeset
-- FILE_NS "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/PLCopen/Opc.Ua.Plc.NodeSet2.xml"
-+ FILE_NS "${UA_NODESET_DIR}/PLCopen/Opc.Ua.Plc.NodeSet2.xml"
- # PLCopen depends on the di nodeset, which must be generated before
- DEPENDS "di"
- )
-@@ -401,8 +401,8 @@ This DI nodeset makes use of some additional data types in ``deps/ua-nodeset/DI/
- NAME "ua_types_di"
- TARGET_SUFFIX "types-di"
- NAMESPACE_MAP "2:http://opcfoundation.org/UA/DI/"
-- FILE_CSV "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/OpcUaDiModel.csv"
-- FILES_BSD "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.Types.bsd"
-+ FILE_CSV "${UA_NODESET_DIR}/deps/ua-nodeset/DI/OpcUaDiModel.csv"
-+ FILES_BSD "${UA_NODESET_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.Types.bsd"
- )
-
- The ``NAMESPACE_MAP`` parameter is an array of strings which indicates the mapping of specific namespace uris to the resulting namespace index.
-@@ -414,11 +414,11 @@ Now you can compile the DI nodeset XML using the following command::
-
- ua_generate_nodeset(
- NAME "di"
-- FILE "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.NodeSet2.xml"
-+ FILE "${UA_NODESET_DIR}/DI/Opc.Ua.Di.NodeSet2.xml"
- TYPES_ARRAY "UA_TYPES_DI"
- INTERNAL
- DEPENDS_TYPES "UA_TYPES"
-- DEPENDS_NS "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/Schema/Opc.Ua.NodeSet2.xml"
-+ DEPENDS_NS "${UA_NODESET_DIR}/Schema/Opc.Ua.NodeSet2.xml"
- DEPENDS_TARGET "open62541-generator-types-di"
- )
-
-@@ -429,13 +429,13 @@ Next we can generate the PLCopen nodeset. Since it doesn't require any additiona
-
- ua_generate_nodeset(
- NAME "plc"
-- FILE "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/PLCopen/Opc.Ua.Plc.NodeSet2.xml"
-+ FILE "${UA_NODESET_DIR}/PLCopen/Opc.Ua.Plc.NodeSet2.xml"
- INTERNAL
- DEPENDS_TYPES
- "UA_TYPES" "UA_TYPES_DI"
- DEPENDS_NS
-- "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/Schema/Opc.Ua.NodeSet2.xml"
-- "${PROJECT_SOURCE_DIR}/deps/ua-nodeset/DI/Opc.Ua.Di.NodeSet2.xml"
-+ "${UA_NODESET_DIR}/Schema/Opc.Ua.NodeSet2.xml"
-+ "${UA_NODESET_DIR}/DI/Opc.Ua.Di.NodeSet2.xml"
- DEPENDS_TARGET "open62541-generator-ns-di"
- )
-
-diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
-index 70c84560..b589dec3 100644
---- a/examples/CMakeLists.txt
-+++ b/examples/CMakeLists.txt
-@@ -26,10 +26,6 @@ if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
- set(UA_TOOLS_DIR ${open62541_TOOLS_DIR})
- endif()
-
-- if(NOT UA_NODESET_DIR)
-- set(UA_NODESET_DIR ${open62541_NODESET_DIR})
-- endif()
--
- function(assign_source_group)
- # define empty function. We don't need it in standalone
- endfunction(assign_source_group)
-diff --git a/tools/cmake/macros_public.cmake b/tools/cmake/macros_public.cmake
-index 95414e3d..4172392f 100644
---- a/tools/cmake/macros_public.cmake
-+++ b/tools/cmake/macros_public.cmake
-@@ -97,7 +97,7 @@ endfunction()
- # passed which will all combined to one resulting code.
- # IMPORT_BSD Combination of types array and path to the .bsd file containing additional type definitions referenced by
- # the FILES_BSD files. The value is separated with a hash sign, i.e.
--# 'UA_TYPES#${PROJECT_SOURCE_DIR}/deps/ua-nodeset/Schema/Opc.Ua.Types.bsd'
-+# 'UA_TYPES#${UA_NODESET_DIR}/Schema/Opc.Ua.Types.bsd'
- # Multiple files can be passed which will all be imported.
- # [FILES_SELECTED] Optional path to a simple text file which contains a list of types which should be included in the generation.
- # The file should contain one type per line. Multiple files can be passed to this argument.
---
-2.29.2
-
diff --git a/patches/open62541-1.2/series b/patches/open62541-1.2/series
deleted file mode 100644
index 248a1b603996..000000000000
--- a/patches/open62541-1.2/series
+++ /dev/null
@@ -1,4 +0,0 @@
-# generated by git-ptx-patches
-#tag:base --start-number 1
-0001-CMake-Allow-UA_NODESET_DIR-to-be-custom-defined.patch
-# 4a88edd1483ff7bb07a623335b407de7 - git-ptx-patches magic
diff --git a/patches/open62541-1.3.4/0001-feat-server-allow-UA_NODESET_DIR-to-be-custom-define.patch b/patches/open62541-1.3.4/0001-feat-server-allow-UA_NODESET_DIR-to-be-custom-define.patch
new file mode 100644
index 000000000000..f54b5d7a59b3
--- /dev/null
+++ b/patches/open62541-1.3.4/0001-feat-server-allow-UA_NODESET_DIR-to-be-custom-define.patch
@@ -0,0 +1,71 @@
+From: Noel Graf <69737119+NoelGraf@users.noreply.github.com>
+Date: Tue, 7 Jun 2022 11:04:03 +0200
+Subject: [PATCH] feat(server) allow UA_NODESET_DIR to be custom defined.
+ (#5138)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This makes it easier for developers to keep all ua-nodesets XML
+definitions in a common location.
+
+Signed-off-by: Björn Esser <b.esser@pengutronix.de>
+
+Co-authored-by: Björn Esser <b.esser@pengutronix.de>
+Origin: backport, https://github.com/open62541/open62541/commit/02f101df73b8d9a32b6882f41e1a2240f3c601b3
+Signed-off-by: Roland Hieber <rhi@pengutronix.de>
+---
+ CMakeLists.txt | 15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 1934374ecc2b..27498e54a6be 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -20,7 +20,7 @@ include(GNUInstallDirs)
+
+ # Set when installed via make install
+ set(open62541_TOOLS_DIR ${PROJECT_SOURCE_DIR}/tools)
+-set(open62541_NODESET_DIR ${PROJECT_SOURCE_DIR}/deps/ua-nodeset)
++set(UA_NODESET_DIR ${PROJECT_SOURCE_DIR}/deps/ua-nodeset CACHE STRING "The path to the nodetset directory.")
+ set(open62541_MQTT_DIR ${PROJECT_SOURCE_DIR}/deps/mqtt-c)
+
+ include(macros_internal)
+@@ -1184,12 +1184,12 @@ set(UA_FILE_NODESETS)
+
+ if(UA_NAMESPACE_ZERO STREQUAL "FULL" OR UA_NAMESPACE_ZERO STREQUAL "LATEST_1_05")
+ if(NOT UA_FILE_NS0)
+- set(UA_FILE_NS0 ${open62541_NODESET_DIR}/Schema/Opc.Ua.NodeSet2.xml)
++ set(UA_FILE_NS0 ${UA_NODESET_DIR}/Schema/Opc.Ua.NodeSet2.xml)
+ endif()
+ set(UA_FILE_NODESETS "${UA_FILE_NS0}")
+
+ if(NOT EXISTS "${UA_FILE_NS0}")
+- message(FATAL_ERROR "File ${UA_FILE_NS0} not found. You probably need to initialize the git submodule for deps/ua-nodeset or set open62541_NODESET_DIR.")
++ message(FATAL_ERROR "File ${UA_FILE_NS0} not found. You probably need to initialize the git submodule for deps/ua-nodeset or set UA_NODESET_DIR.")
+ else()
+ # If the "LATEST_1_05" flag is set, it must be checked whether the nodeset NS0 is on the latest version.
+ if(UA_NAMESPACE_ZERO STREQUAL "LATEST_1_05")
+@@ -1202,9 +1202,10 @@ if(UA_NAMESPACE_ZERO STREQUAL "FULL" OR UA_NAMESPACE_ZERO STREQUAL "LATEST_1_05"
+ endif()
+
+
+- set(UA_FILE_NODEIDS ${open62541_NODESET_DIR}/Schema/NodeIds.csv)
+- set(UA_FILE_STATUSCODES ${open62541_NODESET_DIR}/Schema/StatusCode.csv)
+- set(UA_FILE_TYPES_BSD ${open62541_NODESET_DIR}/Schema/Opc.Ua.Types.bsd)
++
++ set(UA_FILE_NODEIDS ${UA_NODESET_DIR}/Schema/NodeIds.csv)
++ set(UA_FILE_STATUSCODES ${UA_NODESET_DIR}/Schema/StatusCode.csv)
++ set(UA_FILE_TYPES_BSD ${UA_NODESET_DIR}/Schema/Opc.Ua.Types.bsd)
+ else()
+ if(NOT UA_FILE_NS0)
+ set(UA_FILE_NS0 ${PROJECT_SOURCE_DIR}/tools/schema/Opc.Ua.NodeSet2.Reduced.xml)
+@@ -1691,7 +1692,7 @@ endif()
+ set(UA_install_tools_dirs "tools/certs"
+ "tools/nodeset_compiler"
+ "tools/schema"
+- ${open62541_NODESET_DIR})
++ ${UA_NODESET_DIR})
+
+ set(UA_install_tools_files "tools/generate_datatypes.py"
+ "tools/generate_nodeid_header.py"
diff --git a/patches/open62541-1.3.4/series b/patches/open62541-1.3.4/series
new file mode 100644
index 000000000000..65289cc57ec5
--- /dev/null
+++ b/patches/open62541-1.3.4/series
@@ -0,0 +1,4 @@
+# generated by git-ptx-patches
+#tag:base --start-number 1
+0001-feat-server-allow-UA_NODESET_DIR-to-be-custom-define.patch
+# 5f49204d943b5891fa7fb1fe92f69352 - git-ptx-patches magic
diff --git a/rules/host-open62541.make b/rules/host-open62541.make
index 2cf575908414..e968bc4ea027 100644
--- a/rules/host-open62541.make
+++ b/rules/host-open62541.make
@@ -35,12 +35,12 @@ HOST_OPEN62541_CONF_OPT = \
-DUA_ENABLE_EXPERIMENTAL_HISTORIZING=OFF \
-DUA_ENABLE_HISTORIZING=OFF \
-DUA_ENABLE_METHODCALLS=OFF \
- -DUA_ENABLE_MICRO_EMB_DEV_PROFILE=OFF \
-DUA_ENABLE_NODEMANAGEMENT=OFF \
-DUA_ENABLE_QUERY=OFF \
-DUA_ENABLE_STATIC_ANALYZER=OFF \
-DUA_ENABLE_SUBSCRIPTIONS=OFF \
-DUA_ENABLE_SUBSCRIPTIONS_EVENTS=OFF \
+ -DUA_FORCE_WERROR=OFF \
-DUA_LOGLEVEL=$(HOST_OPEN62541_LOGLEVEL) \
-DUA_NAMESPACE_ZERO=FULL \
-DUA_NODESET_DIR="$(PTXDIST_SYSROOT_HOST)/usr/share/ua-nodeset"
diff --git a/rules/open62541.make b/rules/open62541.make
index ac2b588294ca..183e4080089d 100644
--- a/rules/open62541.make
+++ b/rules/open62541.make
@@ -15,8 +15,8 @@ PACKAGES-$(PTXCONF_OPEN62541) += open62541
#
# Paths and names
#
-OPEN62541_VERSION := 1.2
-OPEN62541_MD5 := 90034b0cf1714f9bf1d94ec2b17f3086
+OPEN62541_VERSION := 1.3.4
+OPEN62541_MD5 := a3871da1723b0d436564d643e169879e
OPEN62541 := open62541-$(OPEN62541_VERSION)
OPEN62541_SUFFIX := tar.gz
OPEN62541_URL := https://github.com/open62541/open62541/archive/v$(OPEN62541_VERSION)/$(OPEN62541).$(OPEN62541_SUFFIX)
@@ -25,6 +25,8 @@ OPEN62541_DIR := $(BUILDDIR)/$(OPEN62541)
OPEN62541_LICENSE := MPL-2.0
OPEN62541_LICENSE_FILES := file://LICENSE;md5=815ca599c9df247a0c7f619bab123dad
+# use tarballs instead of git submodules
+# see https://github.com/open62541/open62541/tree/v$(version)/deps
OPEN62541_MDNSD_VERSION := 3151afe5899dba5125dffa9f4cf3ae1fe2edc0f0
OPEN62541_MDNSD_MD5 := 75c45c7913b33f92a7be460bce593991
OPEN62541_MDNSD := open62541-mdnsd-$(OPEN62541_MDNSD_VERSION)
@@ -78,40 +80,44 @@ OPEN62541_CONF_OPT := \
-DUA_ENABLE_AMALGAMATION=OFF \
-DUA_ENABLE_COVERAGE=OFF \
-DUA_ENABLE_DA=ON \
- -DUA_ENABLE_CUSTOM_NODESTORE=OFF \
-DUA_ENABLE_DETERMINISTIC_RNG=OFF \
+ -DUA_ENABLE_DIAGNOSTICS=OFF \
-DUA_ENABLE_DISCOVERY=ON \
-DUA_ENABLE_DISCOVERY_MULTICAST=ON \
-DUA_ENABLE_DISCOVERY_SEMAPHORE=ON \
-DUA_ENABLE_ENCRYPTION=ON \
-DUA_ENABLE_EXPERIMENTAL_HISTORIZING=OFF \
-DUA_ENABLE_HARDENING=ON \
+ -DUA_ENABLE_ENCRYPTION_TPM2=OFF \
-DUA_ENABLE_HISTORIZING=ON \
-DUA_ENABLE_IMMUTABLE_NODES=ON \
-DUA_ENABLE_JSON_ENCODING=OFF \
-DUA_ENABLE_MALLOC_SINGLETON=OFF \
-DUA_ENABLE_METHODCALLS=ON \
- -DUA_ENABLE_MICRO_EMB_DEV_PROFILE=ON \
- -DUA_ENABLE_MULTITHREADING=200 \
-DUA_ENABLE_NODEMANAGEMENT=ON \
-DUA_ENABLE_NODESET_COMPILER_DESCRIPTIONS=ON \
-DUA_ENABLE_PUBSUB=ON \
+ -DUA_ENABLE_PUBSUB_DELTAFRAMES=ON \
-DUA_ENABLE_PUBSUB_ETH_UADP=ON \
-DUA_ENABLE_PUBSUB_DELTAFRAMES=ON \
-DUA_ENABLE_PUBSUB_INFORMATIONMODEL=ON \
-DUA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS=ON \
- -DUA_ENABLE_PUBSUB_CUSTOM_PUBLISH_HANDLING=OFF \
-DUA_ENABLE_QUERY=ON \
-DUA_ENABLE_STATIC_ANALYZER=OFF \
-DUA_ENABLE_STATUSCODE_DESCRIPTIONS=ON \
-DUA_ENABLE_SUBSCRIPTIONS=ON \
-DUA_ENABLE_SUBSCRIPTIONS_EVENTS=ON \
- -DUA_ENABLE_TYPENAMES=ON \
-DUA_ENABLE_UNIT_TEST_FAILURE_HOOKS=OFF \
-DUA_ENABLE_UNIT_TESTS_MEMCHECK=OFF \
-DUA_ENABLE_VALGRIND_INTERACTIVE=OFF \
- -DUA_COMPILE_AS_CXX=OFF \
-DUA_FILE_NS0="" \
+ -DUA_FORCE_WERROR=OFF \
+ -DUA_LOGLEVEL=$(OPEN62541_LOGLEVEL) \
+ -DUA_MSVC_FORCE_STATIC_CRT=OFF \
+ -DUA_MULTITHREADING=200 \
+ -DUA_NAMESPACE_ZERO=FULL \
+ -DUA_NODESET_DIR="$(PTXDIST_SYSROOT_HOST)/usr/share/ua-nodeset" \
+ -DUA_PACK_DEBIAN=OFF
-DUA_LOGLEVEL=$(OPEN62541_LOGLEVEL) \
-DUA_MSVC_FORCE_STATIC_CRT=OFF \
-DUA_NAMESPACE_ZERO=FULL \
--
2.30.2
next prev parent reply other threads:[~2023-02-13 9:32 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-13 9:31 [ptxdist] [PATCH 1/2] c-ares: fix license files variable name Roland Hieber
2023-02-13 9:31 ` Roland Hieber [this message]
2023-02-17 15:35 ` [ptxdist] [APPLIED] open62541: version bump 1.2 -> 1.3.4 Michael Olbrich
2023-02-17 15:35 ` [ptxdist] [APPLIED] c-ares: fix license files variable name Michael Olbrich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230213093117.1865063-2-rhi@pengutronix.de \
--to=rhi@pengutronix.de \
--cc=ptxdist@pengutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox