Merge pull request #226146 from panicgh/open62541

Sandro 7e3c25bf 156c2f71

Changed files
+163
pkgs
development
libraries
open62541
top-level
+161
pkgs/development/libraries/open62541/default.nix
···
+
{ stdenv
+
, lib
+
, fetchFromGitHub
+
, fetchpatch
+
, cmake
+
, pkg-config
+
, check
+
, subunit
+
, python3Packages
+
+
, withDoc ? false
+
, graphviz-nox
+
+
, withExamples ? false
+
+
, withEncryption ? false # or "openssl" or "mbedtls"
+
, openssl
+
, mbedtls
+
+
, withPubSub ? false
+
+
# 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.3.5";
+
+
src = fetchFromGitHub {
+
owner = "open62541";
+
repo = "open62541";
+
rev = "v${finalAttrs.version}";
+
sha256 = "sha256-X0kdMKSqKAJvmrd1YcYe1mJpFONqPCALA09xwd6o7BQ=";
+
fetchSubmodules = true;
+
};
+
+
patches = [
+
(fetchpatch {
+
name = "Ensure-absolute-paths-in-pkg-config-file.patch";
+
url = "https://github.com/open62541/open62541/commit/023d4b6b8bdec987f8f3ffee6c09801bbee4fa2d.patch";
+
sha256 = "sha256-mq4h32js2RjI0Ljown/01SXA3gc+7+zX8meIcvDPvoA=";
+
})
+
];
+
+
cmakeFlags = [
+
"-DOPEN62541_VERSION=v${finalAttrs.version}"
+
+
"-DBUILD_SHARED_LIBS=${if stdenv.hostPlatform.isStatic then "OFF" else "ON"}"
+
"-DUA_NAMESPACE_ZERO=FULL"
+
+
"-DUA_BUILD_UNIT_TESTS=${if finalAttrs.doCheck then "ON" else "OFF"}"
+
]
+
++ lib.optional withExamples "-DUA_BUILD_EXAMPLES=ON"
+
++ lib.optional (withEncryption != false)
+
"-DUA_ENABLE_ENCRYPTION=${lib.toUpper withEncryption}"
+
++ lib.optional withPubSub "-DUA_ENABLE_PUBSUB=ON"
+
;
+
+
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";
+
+
doCheck = true;
+
+
checkInputs = [
+
check
+
subunit
+
];
+
+
# Tests must run sequentially to avoid port collisions on localhost
+
enableParallelChecking = false;
+
+
preCheck = let
+
disabledTests =
+
lib.optionals (withEncryption == "mbedtls") [
+
"encryption_basic128rsa15"
+
]
+
++ lib.optionals withPubSub [
+
# "Cannot set socket option IP_ADD_MEMBERSHIP"
+
"pubsub_publish"
+
"check_pubsub_get_state"
+
"check_pubsub_publish_rt_levels"
+
"check_pubsub_subscribe_config_freeze"
+
"check_pubsub_subscribe_rt_levels"
+
"check_pubsub_multiple_subscribe_rt_levels"
+
];
+
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*
+
'';
+
+
passthru.tests = let
+
open62541Full = encBackend: open62541.override {
+
withDoc = true;
+
# if (withExamples && withPubSub), one of the example currently fails to build
+
#withExamples = true;
+
withEncryption = encBackend;
+
withPubSub = true;
+
};
+
in {
+
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";
+
license = licenses.mpl20;
+
maintainers = with maintainers; [ panicgh ];
+
platforms = platforms.linux;
+
};
+
})
+2
pkgs/top-level/all-packages.nix
···
ookla-speedtest = callPackage ../tools/networking/ookla-speedtest { };
+
open62541 = callPackage ../development/libraries/open62541 { };
+
openalSoft = callPackage ../development/libraries/openal-soft {
inherit (darwin.apple_sdk.frameworks) CoreServices AudioUnit AudioToolbox;