about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/tools/build-managers/conan
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/tools/build-managers/conan')
-rw-r--r--nixpkgs/pkgs/development/tools/build-managers/conan/default.nix103
1 files changed, 103 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/tools/build-managers/conan/default.nix b/nixpkgs/pkgs/development/tools/build-managers/conan/default.nix
new file mode 100644
index 000000000000..cc44ac1a2208
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/build-managers/conan/default.nix
@@ -0,0 +1,103 @@
+{ lib, python3, git, pkgconfig }:
+
+# Note:
+# Conan has specific dependency demanands; check
+#     https://github.com/conan-io/conan/blob/master/conans/requirements.txt
+#     https://github.com/conan-io/conan/blob/master/conans/requirements_server.txt
+# on the release branch/commit we're packaging.
+#
+# Two approaches are used here to deal with that:
+# Pinning the specific versions it wants in `newPython`,
+# and using `substituteInPlace conans/requirements.txt ...`
+# in `postPatch` to allow newer versions when we know
+# (e.g. from changelogs) that they are compatible.
+
+let newPython = python3.override {
+  packageOverrides = self: super: {
+    distro = super.distro.overridePythonAttrs (oldAttrs: rec {
+      version = "1.1.0";
+      src = oldAttrs.src.override {
+        inherit version;
+        sha256 = "1vn1db2akw98ybnpns92qi11v94hydwp130s8753k6ikby95883j";
+      };
+    });
+    node-semver = super.node-semver.overridePythonAttrs (oldAttrs: rec {
+      version = "0.6.1";
+      src = oldAttrs.src.override {
+        inherit version;
+        sha256 = "1dv6mjsm67l1razcgmq66riqmsb36wns17mnipqr610v0z0zf5j0";
+      };
+    });
+    pluginbase = super.pluginbase.overridePythonAttrs (oldAttrs: rec {
+      version = "0.7";
+      src = oldAttrs.src.override {
+        inherit version;
+        sha256 = "c0abe3218b86533cca287e7057a37481883c07acef7814b70583406938214cc8";
+      };
+    });
+  };
+};
+
+in newPython.pkgs.buildPythonApplication rec {
+  version = "1.24.0";
+  pname = "conan";
+
+  src = newPython.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "0nkh4f6plamijwcfw536ydm0i04y74qmkh5l1nanyb8p0c3z3x0y";
+  };
+
+  propagatedBuildInputs = with newPython.pkgs; [
+    bottle
+    colorama
+    dateutil
+    deprecation
+    distro
+    fasteners
+    future
+    jinja2
+    node-semver
+    patch-ng
+    pluginbase
+    pygments
+    pyjwt
+    pylint # Not in `requirements.txt` but used in hooks, see https://github.com/conan-io/conan/pull/6152
+    pyyaml
+    requests
+    six
+    tqdm
+    urllib3
+  ];
+
+  checkInputs = [
+    pkgconfig
+    git
+  ] ++ (with newPython.pkgs; [
+    codecov
+    mock
+    pytest
+    node-semver
+    nose
+    parameterized
+    webtest
+  ]);
+
+  # Conan 1.14.0 has removed all tests from the Pypi source dist:
+  #     https://github.com/conan-io/conan/pull/4713
+  # We have recommended they be added back:
+  #     https://github.com/conan-io/conan/issues/4563#issuecomment-602225083
+  doCheck = false;
+
+  postPatch = ''
+    substituteInPlace conans/requirements.txt \
+      --replace "PyYAML>=3.11, <3.14.0" "PyYAML"
+  '';
+
+  meta = with lib; {
+    homepage = "https://conan.io";
+    description = "Decentralized and portable C/C++ package manager";
+    license = licenses.mit;
+    maintainers = with maintainers; [ HaoZeke ];
+    platforms = platforms.linux;
+  };
+}