about summary refs log tree commit diff
path: root/md4c/default.nix
blob: a918e7d68b26ae53469114ac32bee9ec50b77645 (plain) (blame)
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
# Recipe for building md4c at specific snapshot
#
# SPDX-FileCopyrightText: 2021 Anderson Torres
# SPDX-FileCopyrightText: 2021 Thomas Gerbet
# SPDX-FileCopyrightText: 2021 Leif Middelschulte
# SPDX-License-Identifier: MIT
#
# SPDX-FileCopyrightText: 2023 Nguyễn Gia Phong
# SPDX-License-Identifier: AGPL-3.0-or-later

{ lib, stdenv, version, fetchFromGitHub, commit, hash, patches
, bcExtractHook, binRenameHook, cmake, pkg-config }:

stdenv.mkDerivation {
  pname = "md4c";
  inherit version;

  src = fetchFromGitHub {
    owner = "mity";
    repo = "md4c";
    rev = commit;
    inherit hash;
  };

  patches = patches ++ [
    # We set CMAKE_INSTALL_LIBDIR to the absolute path in $out, so
    # prefix and exec_prefix cannot be $out, too
    # Use CMake's _FULL_ variables instead of `prefix` concatenation.
    ./fix-pkgconfig.patch
  ];

  # RPATH of binary [...] contains a forbidden reference to /build/
  cmakeFlags = [ "-DCMAKE_SKIP_BUILD_RPATH=ON" ];

  nativeBuildInputs = [ bcExtractHook binRenameHook cmake pkg-config ];

  meta = with lib; {
    description = "Markdown parser made in C";
    longDescription = ''
      MD4C is Markdown parser implementation in C, with the following features:

      - Compliance: Generally, MD4C aims to be compliant to the latest version
        of CommonMark specification. Currently, we are fully compliant to
        CommonMark 0.29.
      - Extensions: MD4C supports some commonly requested and accepted
        extensions. See below.
      - Performance: MD4C is very fast.
      - Compactness: MD4C parser is implemented in one source file and one
        header file. There are no dependencies other than standard C library.
      - Embedding: MD4C parser is easy to reuse in other projects, its API is
        very straightforward: There is actually just one function, md_parse().
      - Push model: MD4C parses the complete document and calls few callback
        functions provided by the application to inform it about a start/end of
        every block, a start/end of every span, and with any textual contents.
      - Portability: MD4C builds and works on Windows and POSIX-compliant
        OSes. (It should be simple to make it run also on most other platforms,
        at least as long as the platform provides C standard library, including
        a heap memory management.)
      - Encoding: MD4C by default expects UTF-8 encoding of the input
        document. But it can be compiled to recognize ASCII-only control
        characters (i.e. to disable all Unicode-specific code), or (on Windows)
        to expect UTF-16 (i.e. what is on Windows commonly called just
        "Unicode"). See more details below.
      - Permissive license: MD4C is available under the MIT license.
    '';
    homepage = "https://github.com/mity/md4c";
    license = licenses.mit;
    platforms = platforms.all;
  };
}