summaryrefslogtreecommitdiffstats
path: root/pkgs/by-name/li/libusb1/package.nix
blob: 06f18ee6e5caccd8ed837247e88ea8f067194321 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
{
  lib,
  stdenv,
  fetchFromGitHub,
  autoreconfHook,
  doxygen,
  pkg-config,
  enableUdev ?
    stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isStatic && !stdenv.hostPlatform.isAndroid,
  udev,
  udevCheckHook,
  withExamples ? false,
  withStatic ? false,
  withDocs ? stdenv.buildPlatform.canExecute stdenv.hostPlatform,
}:

stdenv.mkDerivation (finalAttrs: {
  pname = "libusb";
  version = "1.0.30";

  src = fetchFromGitHub {
    owner = "libusb";
    repo = "libusb";
    rev = "v${finalAttrs.version}";
    sha256 = "sha256-qgs8h1vSqJg2muBDWN5nJlvaMjGYZnwMg1m07rqzHco=";
  };

  outputs = [
    "out"
    "dev"
  ]
  ++ lib.optionals withDocs [ "doc" ];

  nativeBuildInputs = [
    pkg-config
    autoreconfHook
  ]
  ++ lib.optionals withDocs [ doxygen ];
  propagatedBuildInputs = lib.optional enableUdev udev;

  # Many dependents are dealing with hardware devices, exposing udev rules for them.
  # Checking these by propagated hook might improve discoverability
  propagatedNativeBuildInputs = lib.optional enableUdev udevCheckHook;

  dontDisableStatic = withStatic;

  # libusb-1.0.rc:11: fatal error: opening dependency file .deps/libusb-1.0.Tpo: No such file or directory
  dontAddDisableDepTrack = stdenv.hostPlatform.isWindows;

  configureFlags =
    lib.optional (!enableUdev) "--disable-udev" ++ lib.optional withExamples "--enable-examples-build";

  postBuild = lib.optionalString withDocs ''
    make -C doc
    mkdir -p "$doc/share/doc/libusb"
    cp -r doc/api-1.0/* "$doc/share/doc/libusb/"
  '';

  preFixup = lib.optionalString enableUdev ''
    sed 's,-ludev,-L${lib.getLib udev}/lib -ludev,' -i $out/lib/libusb-1.0.la
  '';

  postInstall = lib.optionalString withExamples ''
    mkdir -p $out/{bin,sbin,examples/bin}
    cp -r examples/.libs/* $out/examples/bin
    ln -s $out/examples/bin/fxload $out/sbin/fxload
  '';

  meta = {
    homepage = "https://libusb.info/";
    description = "Cross-platform user-mode USB device library";
    longDescription = ''
      libusb is a cross-platform user-mode library that provides access to USB devices.
    '';
    platforms = lib.platforms.all;
    license = lib.licenses.lgpl21Plus;
    maintainers = with lib.maintainers; [
      prusnak
      logger
    ];
  };
})