150 lines
3.1 KiB
Nix
150 lines
3.1 KiB
Nix
{
|
|
cmake,
|
|
lib,
|
|
fetchzip,
|
|
intel-decimalfp,
|
|
pkg-config,
|
|
protobuf,
|
|
python3Packages,
|
|
stdenv,
|
|
}: let
|
|
version = "1044.01";
|
|
|
|
src-with-protobuf = stdenv.mkDerivation {
|
|
pname = "ibkr-tws-api-src";
|
|
inherit version;
|
|
|
|
src = fetchzip {
|
|
url = "https://interactivebrokers.github.io/downloads/twsapi_macunix.${version}.zip";
|
|
hash = "sha256-9bi2Mgp3qDHz8R2lrXEOYIeBffRKOWqKxDYecybR8Eo=";
|
|
stripRoot = false;
|
|
};
|
|
|
|
nativeBuildInputs = [
|
|
protobuf
|
|
];
|
|
|
|
configurePhase = ''
|
|
runHook preConfigure
|
|
|
|
rm IBJts/source/{cppclient/client/protobufUnix/*,pythonclient/ibapi/protobuf/*}
|
|
protoc \
|
|
-IIBJts/source/proto \
|
|
--cpp_out=IBJts/source/cppclient/client/protobufUnix \
|
|
--python_out=IBJts/source/pythonclient/ibapi/protobuf \
|
|
IBJts/source/proto/*.proto
|
|
|
|
sed -i '/^import / { s/\(\<[A-Za-z0-9_]*[A-Za-z0-9]_pb2\)/ibapi.protobuf.\1/g }' IBJts/source/pythonclient/ibapi/protobuf/*.py
|
|
touch IBJts/source/pythonclient/ibapi/protobuf/__init__.py
|
|
|
|
runHook postConfigure
|
|
'';
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
cp -r . $out
|
|
|
|
runHook postInstall
|
|
'';
|
|
};
|
|
|
|
native-lib = stdenv.mkDerivation {
|
|
pname = "ibkr-tws-api-native";
|
|
inherit version;
|
|
|
|
src = src-with-protobuf;
|
|
sourceRoot = "ibkr-tws-api-src-${version}/IBJts/source/cppclient/client";
|
|
|
|
buildInputs = [
|
|
intel-decimalfp
|
|
protobuf
|
|
];
|
|
|
|
postPatch = ''
|
|
sed -i 's/-std=c++11/-std=c++17/' makefile
|
|
'';
|
|
|
|
makeFlags = [
|
|
"LIB_DIR=${intel-decimalfp}/lib"
|
|
"LIB_NAME=libbid.a"
|
|
];
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
mkdir -p $out/lib
|
|
cp -v lib*.so $out/lib
|
|
|
|
runHook postInstall
|
|
'';
|
|
};
|
|
|
|
test-client = stdenv.mkDerivation {
|
|
pname = "ibkr-tws-api-test-client";
|
|
inherit version;
|
|
|
|
src = src-with-protobuf;
|
|
sourceRoot = "ibkr-tws-api-src-${version}/IBJts/samples/Cpp/TestCppClient";
|
|
|
|
nativeBuildInputs = [
|
|
pkg-config
|
|
];
|
|
|
|
buildInputs = [
|
|
intel-decimalfp
|
|
native-lib
|
|
protobuf
|
|
];
|
|
|
|
postPatch = ''
|
|
sed -i "s/-std=c++11/-std=c++17/; s@-lprotobuf@$(pkg-config --libs protobuf)@" makefile
|
|
'';
|
|
|
|
makeFlags = [
|
|
"TestCppClientDynamic"
|
|
"LIB_DIR=${intel-decimalfp}/lib"
|
|
"LIB_NAME_SO=libbid.a"
|
|
"SOURCE_DIR=${native-lib}/lib"
|
|
];
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
mkdir -p $out/bin
|
|
install -m755 TestCppClientDynamic $out/bin/TestCppClient
|
|
|
|
runHook postInstall
|
|
'';
|
|
|
|
postFixup = ''
|
|
patchelf --add-rpath ${native-lib}/lib $out/bin/TestCppClient
|
|
'';
|
|
|
|
meta = {
|
|
mainProgram = "TestCppClient";
|
|
};
|
|
};
|
|
|
|
py-client = {
|
|
buildPythonPackage,
|
|
protobuf,
|
|
}:
|
|
buildPythonPackage {
|
|
pname = "ibapi-python";
|
|
inherit version;
|
|
|
|
src = src-with-protobuf;
|
|
sourceRoot = "ibkr-tws-api-src-${version}/IBJts/source/pythonclient";
|
|
|
|
format = "setuptools";
|
|
|
|
propagatedBuildInputs = [
|
|
protobuf
|
|
];
|
|
};
|
|
in {
|
|
inherit test-client;
|
|
native = native-lib;
|
|
ibapi-python = python3Packages.callPackage py-client {};
|
|
}
|