# SPDX-FileCopyrightText: 2023 OPAL-RT Germany GmbH # SPDX-License-Identifier: Apache-2.0 { # General configuration src, version, withGpl ? true, withAllExtras ? false, withAllFormats ? false, withAllHooks ? false, withAllNodes ? false, # Extra features withExtraConfig ? withAllExtras, withExtraGraphviz ? withAllExtras, # Format-types withFormatProtobuf ? withAllFormats, # Hook-types withHookLua ? withAllHooks, # Node-types withNodeAmqp ? withAllNodes, withNodeComedi ? withAllNodes, withNodeEthercat ? withAllNodes, withNodeIec60870 ? withAllNodes, withNodeIec61850 ? withAllNodes, withNodeInfiniband ? withAllNodes, withNodeKafka ? withAllNodes, withNodeModbus ? withAllNodes, withNodeMqtt ? withAllNodes, withNodeNanomsg ? withAllNodes, withNodeRedis ? withAllNodes, withNodeRtp ? withAllNodes, withNodeSocket ? withAllNodes, withNodeTemper ? withAllNodes, withNodeUldaq ? withAllNodes, withNodeWebrtc ? withAllNodes, withNodeZeromq ? withAllNodes, # Minimal dependencies cmake, coreutils, graphviz, jq, lib, makeWrapper, pkg-config, stdenv, # Optional dependencies comedilib, curl, czmq, ethercat, gnugrep, jansson, lib60870, libconfig, libdatachannel, libiec61850, libmodbus, libnl, libre, libsodium, libuldaq, libusb, libuuid, libwebsockets, lua, mosquitto, nanomsg, openssl, pkgsBuildBuild, protobufc, protobufcBuildBuild ? pkgsBuildBuild.protobufc, rabbitmq-c, rdkafka, rdma-core, redis-plus-plus, spdlog, }: stdenv.mkDerivation { inherit src version; pname = "villas"; outputs = [ "out" "dev" ]; separateDebugInfo = true; cmakeFlags = [ ] ++ lib.optionals (!withGpl) [ "-DWITHOUT_GPL=ON" ] ++ lib.optionals withFormatProtobuf [ "-DCMAKE_FIND_ROOT_PATH=${protobufcBuildBuild}/bin" ]; postPatch = '' patchShebangs --host ./tools ''; postInstall = '' if [ -d $out/include/villas/ ] && [ -d $dev/include/villas/ ]; then mv $out/include/villas/* $dev/include/villas/ rm -d $out/include/villas fi wrapProgram $out/bin/villas \ --set PATH ${ lib.makeBinPath [ (placeholder "out") gnugrep coreutils ] } wrapProgram $out/bin/villas-api \ --set PATH ${ lib.makeBinPath [ coreutils curl jq ] } ''; nativeBuildInputs = [ cmake makeWrapper pkg-config ]; depsBuildBuild = lib.optionals withFormatProtobuf [ protobufcBuildBuild ]; buildInputs = [ jansson libwebsockets libuuid openssl curl spdlog ] ++ lib.optionals withExtraConfig [ libconfig ] ++ lib.optionals withExtraGraphviz [ graphviz ] ++ lib.optionals withFormatProtobuf [ protobufc ] ++ lib.optionals withHookLua [ lua ] ++ lib.optionals withNodeAmqp [ rabbitmq-c ] ++ lib.optionals withNodeComedi [ comedilib ] ++ lib.optionals withNodeEthercat [ ethercat ] ++ lib.optionals withNodeIec60870 [ lib60870 ] ++ lib.optionals withNodeIec61850 [ libiec61850 ] ++ lib.optionals withNodeInfiniband [ rdma-core ] ++ lib.optionals withNodeKafka [ rdkafka ] ++ lib.optionals withNodeModbus [ libmodbus ] ++ lib.optionals withNodeMqtt [ mosquitto ] ++ lib.optionals withNodeNanomsg [ nanomsg ] ++ lib.optionals withNodeRedis [ redis-plus-plus ] ++ lib.optionals withNodeRtp [ libre ] ++ lib.optionals withNodeSocket [ libnl ] ++ lib.optionals withNodeTemper [ libusb ] ++ lib.optionals withNodeUldaq [ libuldaq ] ++ lib.optionals withNodeWebrtc [ libdatachannel ] ++ lib.optionals withNodeZeromq [ czmq libsodium ]; meta = with lib; { mainProgram = "villas"; description = "a tool connecting real-time power grid simulation equipment"; homepage = "https://villas.fein-aachen.org/"; license = licenses.asl20; }; }