@@ -0,0 +1,56 @@
1+{ lib
2+, fetchFromGitHub
3+, cmake
4+, llvmPackages_11
5+, unstableGitUpdater
6+}:
7+
8+let
9+ c2ffiBranch = "llvm-11.0.0";
10+ llvmPackages = llvmPackages_11;
11+in
12+
13+llvmPackages.stdenv.mkDerivation {
14+ pname = "c2ffi-${c2ffiBranch}";
15+ version = "unstable-2021-04-15";
16+
17+ src = fetchFromGitHub {
18+ owner = "rpav";
19+ repo = "c2ffi";
20+ rev = "0255131f80b21334e565231331c2b451b6bba8c4";
21+ sha256 = "0ihysgqjyg5xwi098hxf15lpdi6g4nwpzczp495is912c48fy6b6";
22+ };
23+
24+ passthru.updateScript = unstableGitUpdater {
25+ url = "https://github.com/rpav/c2ffi.git";
26+ branch = c2ffiBranch;
27+ };
28+
29+ nativeBuildInputs = [
30+ cmake
31+ ];
32+
33+ buildInputs = [
34+ llvmPackages.llvm
35+ llvmPackages.clang
36+ llvmPackages.libclang
37+ ];
38+
39+ # This isn't much, but...
40+ doInstallCheck = true;
41+ installCheckPhase = ''
42+ $out/bin/c2ffi --help 2>&1 >/dev/null
43+ '';
44+
45+ # LLVM may be compiled with -fno-rtti, so let's just turn it off.
46+ # A mismatch between lib{clang,LLVM}* and us can lead to the link time error:
47+ # undefined reference to `typeinfo for clang::ASTConsumer'
48+ CXXFLAGS="-fno-rtti";
49+
50+ meta = with lib; {
51+ homepage = "https://github.com/rpav/c2ffi";
52+ description = "An LLVM based tool for extracting definitions from C, C++, and Objective C header files for use with foreign function call interfaces";
53+ license = licenses.lgpl21Only;
54+ maintainers = with maintainers; [ attila-lendvai ];
55+ };
56+}