Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
195 lines
5.4 KiB
Nix
195 lines
5.4 KiB
Nix
{
|
|
stdenv,
|
|
lib,
|
|
fetchFromGitHub,
|
|
cmake,
|
|
pkg-config,
|
|
check,
|
|
libxcrypt,
|
|
subunit,
|
|
python3Packages,
|
|
nix-update-script,
|
|
|
|
withDoc ? false,
|
|
graphviz-nox,
|
|
|
|
withExamples ? false,
|
|
|
|
withEncryption ? false, # or "openssl" or "mbedtls"
|
|
openssl,
|
|
mbedtls,
|
|
|
|
# for passthru.tests only
|
|
open62541,
|
|
}:
|
|
|
|
let
|
|
encryptionBackend =
|
|
{
|
|
inherit openssl mbedtls;
|
|
}
|
|
."${withEncryption}" or (throw "Unsupported encryption backend: ${withEncryption}");
|
|
in
|
|
|
|
stdenv.mkDerivation (finalAttrs: {
|
|
pname = "open62541";
|
|
version = "1.4.13";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "open62541";
|
|
repo = "open62541";
|
|
rev = "v${finalAttrs.version}";
|
|
hash = "sha256-y4yxdO55fMmkP+nCU6ToabvAPi6hgXHiDXpF3tNEHNw=";
|
|
fetchSubmodules = true;
|
|
};
|
|
|
|
cmakeFlags = [
|
|
(lib.cmakeFeature "OPEN62541_VERSION" finalAttrs.src.rev)
|
|
(lib.cmakeFeature "UA_NAMESPACE_ZERO" "FULL")
|
|
(lib.cmakeBool "BUILD_SHARED_LIBS" (!stdenv.hostPlatform.isStatic))
|
|
|
|
# Note comment near doCheck
|
|
(lib.cmakeBool "UA_BUILD_UNIT_TESTS" finalAttrs.finalPackage.doCheck)
|
|
(lib.cmakeBool "UA_ENABLE_ALLOW_REUSEADDR" finalAttrs.finalPackage.doCheck)
|
|
|
|
(lib.cmakeBool "UA_BUILD_EXAMPLES" withExamples)
|
|
]
|
|
++ lib.optionals (withEncryption != false) [
|
|
(lib.cmakeFeature "UA_ENABLE_ENCRYPTION" (lib.toUpper withEncryption))
|
|
];
|
|
|
|
nativeBuildInputs = [
|
|
cmake
|
|
pkg-config
|
|
python3Packages.python
|
|
]
|
|
++ lib.optionals withDoc (
|
|
with python3Packages;
|
|
[
|
|
sphinx
|
|
sphinx_rtd_theme
|
|
graphviz-nox
|
|
]
|
|
);
|
|
|
|
buildInputs = lib.optional (withEncryption != false) encryptionBackend;
|
|
|
|
buildFlags = [ "all" ] ++ lib.optional withDoc "doc";
|
|
|
|
# Tests must normally be disabled because they require
|
|
# -DUA_ENABLE_ALLOW_REUSEADDR=ON. The option must not be used in production,
|
|
# since it is a security risk.
|
|
# See https://github.com/open62541/open62541/issues/6407
|
|
doCheck = false;
|
|
|
|
checkInputs = [
|
|
check
|
|
libxcrypt
|
|
subunit
|
|
];
|
|
|
|
# Tests must run sequentially to avoid port collisions on localhost
|
|
enableParallelChecking = false;
|
|
|
|
preCheck =
|
|
let
|
|
disabledTests = [
|
|
# error "Could not create a raw Ethernet socket (are you root?)"
|
|
"check_eventloop_eth"
|
|
|
|
# Cannot set socket option IP_ADD_MEMBERSHIP
|
|
"check_pubsub_publish"
|
|
"check_pubsub_publish_json"
|
|
"check_pubsub_connection_udp"
|
|
"check_pubsub_get_state"
|
|
"check_pubsub_publisherid"
|
|
"check_pubsub_subscribe"
|
|
"check_pubsub_publishspeed"
|
|
"check_pubsub_subscribe_config_freeze"
|
|
"check_pubsub_subscribe_rt_levels"
|
|
"check_pubsub_multiple_subscribe_rt_levels"
|
|
"check_pubsub_config_freeze"
|
|
"check_pubsub_publish_rt_levels"
|
|
|
|
# Could not find the interface
|
|
"check_pubsub_connection_ethernet"
|
|
"check_pubsub_connection_ethernet_etf"
|
|
"check_pubsub_publish_ethernet_etf"
|
|
"check_pubsub_informationmodel"
|
|
"check_pubsub_informationmodel_methods"
|
|
];
|
|
regex = "^(${builtins.concatStringsSep "|" disabledTests})\$";
|
|
in
|
|
lib.optionalString (disabledTests != [ ]) ''
|
|
checkFlagsArray+=(ARGS="-E ${lib.escapeRegex regex}")
|
|
'';
|
|
|
|
postInstall =
|
|
lib.optionalString withDoc ''
|
|
# excluded files, see doc/CMakeLists.txt
|
|
rm -r doc/{_sources/,CMakeFiles/,cmake_install.cmake}
|
|
|
|
# doc is not installed automatically
|
|
mkdir -p $out/share/doc/open62541
|
|
cp -r doc/ $out/share/doc/open62541/html
|
|
''
|
|
+ lib.optionalString withExamples ''
|
|
# install sources of examples
|
|
mkdir -p $out/share/open62541
|
|
cp -r ../examples $out/share/open62541
|
|
|
|
${lib.optionalString (!stdenv.hostPlatform.isWindows) ''
|
|
# remove .exe suffix
|
|
mv -v $out/bin/ua_server_ctt.exe $out/bin/ua_server_ctt
|
|
''}
|
|
|
|
# remove duplicate libraries in build/bin/, which cause forbidden
|
|
# references to /build/ in ua_server_ctt
|
|
rm -r bin/libopen62541*
|
|
'';
|
|
|
|
__darwinAllowLocalNetworking = true;
|
|
|
|
passthru.updateScript = nix-update-script { };
|
|
|
|
passthru.tests =
|
|
let
|
|
open62541Full =
|
|
encBackend:
|
|
(open62541.overrideAttrs (_: {
|
|
doCheck = true;
|
|
})).override
|
|
{
|
|
withDoc = true;
|
|
# if withExamples, one of the example currently fails to build
|
|
#withExamples = true;
|
|
withEncryption = encBackend;
|
|
};
|
|
in
|
|
{
|
|
open62541WithTests = finalAttrs.finalPackage.overrideAttrs (_: {
|
|
doCheck = true;
|
|
});
|
|
open62541Full = open62541Full false;
|
|
open62541Full-openssl = open62541Full "openssl";
|
|
open62541Full-mbedtls = open62541Full "mbedtls";
|
|
};
|
|
|
|
meta = with lib; {
|
|
description = "Open source implementation of OPC UA";
|
|
longDescription = ''
|
|
open62541 (http://open62541.org) is an open source and free implementation
|
|
of OPC UA (OPC Unified Architecture) written in the common subset of the
|
|
C99 and C++98 languages.
|
|
The library is usable with all major compilers and provides the necessary
|
|
tools to implement dedicated OPC UA clients and servers, or to integrate
|
|
OPC UA-based communication into existing applications.
|
|
'';
|
|
homepage = "https://www.open62541.org";
|
|
changelog = "https://github.com/open62541/open62541/releases/tag/v${finalAttrs.version}";
|
|
license = licenses.mpl20;
|
|
maintainers = with maintainers; [ panicgh ];
|
|
platforms = platforms.unix;
|
|
};
|
|
})
|