summaryrefslogtreecommitdiff
path: root/guix/packages/cgit.scm
blob: d8b82c7c1fcfd35c218f3679b3a6060c27be0882 (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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
(define-module (packages cgit)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (guix utils)
  #:use-module (guix packages)
  #:use-module (guix deprecation)
  #:use-module (guix gexp)
  #:use-module (guix download)
  #:use-module (guix git-download)
  #:use-module (guix hg-download)
  #:use-module (guix build-system cargo)
  #:use-module (guix build-system cmake)
  #:use-module (guix build-system copy)
  #:use-module (guix build-system emacs)
  #:use-module (guix build-system gnu)
  #:use-module (guix build-system go)
  #:use-module (guix build-system perl)
  #:use-module (guix build-system pyproject)
  #:use-module (guix build-system python)
  #:use-module (guix build-system qt)
  #:use-module (guix build-system trivial)
  #:use-module (gnu packages apr)
  #:use-module (gnu packages autotools)
  #:use-module (gnu packages documentation)
  #:use-module (gnu packages base)
  #:use-module (gnu packages bash)
  #:use-module (gnu packages bison)
  #:use-module (gnu packages boost)
  #:use-module (gnu packages check)
  #:use-module (gnu packages cook)
  #:use-module (gnu packages crates-compression)
  #:use-module (gnu packages crates-io)
  #:use-module (gnu packages crates-vcs)
  #:use-module (gnu packages crates-web)
  #:use-module (gnu packages crypto)
  #:use-module (gnu packages curl)
  #:use-module (gnu packages databases)
  #:use-module (gnu packages docbook)
  #:use-module (gnu packages file)
  #:use-module (gnu packages flex)
  #:use-module (gnu packages freedesktop)
  #:use-module (gnu packages gawk)
  #:use-module (gnu packages gettext)
  #:use-module (gnu packages gl)
  #:use-module (gnu packages glib)
  #:use-module (gnu packages gnome)
  #:use-module (gnu packages gnupg)
  #:use-module (gnu packages golang)
  #:use-module (gnu packages golang-build)
  #:use-module (gnu packages golang-check)
  #:use-module (gnu packages golang-crypto)
  #:use-module (gnu packages golang-vcs)
  #:use-module (gnu packages golang-web)
  #:use-module (gnu packages golang-xyz)
  #:use-module (gnu packages groff)
  #:use-module (gnu packages guile)
  #:use-module (gnu packages guile-xyz)
  #:use-module (gnu packages image)
  #:use-module (gnu packages imagemagick)
  #:use-module (gnu packages less)
  #:use-module (gnu packages libbsd)
  #:use-module (gnu packages libevent)
  #:use-module (gnu packages linux)
  #:use-module (gnu packages mail)
  #:use-module (gnu packages man)
  #:use-module (gnu packages maths)
  #:use-module (gnu packages ncurses)
  #:use-module (gnu packages ssh)
  #:use-module (gnu packages web)
  #:use-module (gnu packages patchutils)
  #:use-module (gnu packages pcre)
  #:use-module (gnu packages perl)
  #:use-module (gnu packages perl-check)
  #:use-module (gnu packages php)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages python)
  #:use-module (gnu packages python-build)
  #:use-module (gnu packages python-check)
  #:use-module (gnu packages python-crypto)
  #:use-module (gnu packages python-web)
  #:use-module (gnu packages python-xyz)
  #:use-module (gnu packages readline)
  #:use-module (gnu packages rsync)
  #:use-module (gnu packages ruby)
  #:use-module (gnu packages sqlite)
  #:use-module (gnu packages texinfo)
  #:use-module (gnu packages text-editors)
  #:use-module (gnu packages admin)
  #:use-module (gnu packages xml)
  #:use-module (gnu packages emacs)
  #:use-module (gnu packages compression)
  #:use-module (gnu packages sdl)
  #:use-module (gnu packages swig)
  #:use-module (gnu packages sync)
  #:use-module (gnu packages tcl)
  #:use-module (gnu packages textutils)
  #:use-module (gnu packages time)
  #:use-module (gnu packages tls)
  #:use-module (gnu packages)
  #:use-module (ice-9 match)
  #:use-module (srfi srfi-1)
  #:use-module (gnu packages version-control))

(define-public cgit
  (let ((commit "f5052197f082472f4a903e96f57d7b68937ebc05")
        (rev "20"))
     (package
       (name "cgit")
       ;; Update the ‘git-source’ input as well.
       (version (git-version "1.2.3" rev commit))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
                       (url "https://codeberg.org/thanosapollo/cgit")
                       (commit commit)))
                 (sha256
                  (base32
                  "09khbhs4l4rlczvmdpif21dcizfk69wy7z0sd67662aqabnryzgb"))
                 (file-name (git-file-name name version))))
       (build-system gnu-build-system)
       (arguments
        (list
         #:tests? #f                    ; XXX: fail to build the in-source git.
         #:test-target "test"
         #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
                              "SHELL_PATH=sh")
         #:phases
         #~(modify-phases %standard-phases
             (add-after 'unpack 'unpack-git
               (lambda* (#:key inputs #:allow-other-keys)
                 ;; Unpack the source of git into the 'git' directory.
                 (invoke "tar" "--strip-components=1" "-C" "git" "-xf"
                         (assoc-ref inputs "git-source"))))
             (add-after 'unpack 'patch-absolute-file-names
               (lambda* (#:key inputs outputs #:allow-other-keys)
                 (define (quoted-file-name input path)
                   (string-append "\"" input path "\""))
                 (substitute* "ui-snapshot.c"
                   (("\"gzip\"")
                    (quoted-file-name (assoc-ref inputs "gzip") "/bin/gzip"))
                   (("\"bzip2\"")
                    (quoted-file-name (assoc-ref inputs "bzip2") "/bin/bzip2"))
                   (("\"xz\"")
                    (quoted-file-name (assoc-ref inputs "xz") "/bin/xz")))
 
                 (substitute* "filters/about-formatting.sh"
                   (("\\$\\(dirname \\$0\\)") (string-append (assoc-ref outputs "out")
                                                         "/lib/cgit/filters"))
                   (("\\| tr") (string-append "| " (which "tr"))))
 
                 (substitute* "filters/html-converters/txt2html"
                   (("sed") (which "sed")))
 
                 (substitute* "filters/html-converters/man2html"
                   (("groff") (which "groff")))
 
                 (substitute* "filters/html-converters/rst2html"
                   (("rst2html\\.py") (which "rst2html.py")))))
             (delete 'configure)         ; no configure script
             (add-after 'build 'build-man
               (lambda* (#:key make-flags #:allow-other-keys)
                 (apply invoke "make" "doc-man" make-flags)))
             (replace 'install
               (lambda* (#:key make-flags outputs #:allow-other-keys)
                 (let ((out (assoc-ref outputs "out")))
                   (apply invoke
                          "make" "install" "install-man"
                          (string-append "prefix=" out)
                          (string-append "CGIT_SCRIPT_PATH=" out "/share/cgit")
                          make-flags)
                   ;; Move the platform-dependent 'cgit.cgi' into lib to get it
                   ;; stripped.
                   (rename-file (string-append out "/share/cgit/cgit.cgi")
                                (string-append out "/lib/cgit/cgit.cgi")))))
             (add-after 'install 'wrap-python-scripts
               (lambda* (#:key outputs #:allow-other-keys)
                 (for-each
                  (lambda (file)
                    (wrap-program (string-append (assoc-ref outputs "out")
                                                 "/lib/cgit/filters/" file)
                      `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))))
                  '("syntax-highlighting.py"
                    "html-converters/md2html")))))))
       (native-inputs
        ;; For building manpage.
        (list asciidoc))
       (inputs
        `( ;; Building cgit requires a Git source tree.
          ("git-source"
           ,(origin
              (method url-fetch)
              ;; cgit is tightly bound to git.  Use GIT_VER from the Makefile,
              ;; which may not match the current (package-version git).
             (uri "mirror://kernel.org/software/scm/git/git-2.45.2.tar.xz")
              (sha256
              (base32 "1nws1vjgj54sv32wxl1h3n1jkcpabqv7a605hhafsby0n5zfigsi"))))
          ("bash-minimal" ,bash-minimal)
          ("openssl" ,openssl)
          ("python" ,python)
          ("python-docutils" ,python-docutils)
          ("python-markdown" ,python-markdown)
          ("python-pygments" ,python-pygments)
          ("zlib" ,zlib)
          ;; bzip2, groff, gzip and xz are inputs (not native inputs)
          ;; since they are actually substituted into cgit source and
          ;; referenced by the built package output.
          ("bzip2" ,bzip2)
          ("groff" ,groff)
          ("gzip" ,gzip)
          ("xz" ,xz)))
       (home-page "https://git.zx2c4.com/cgit/")
       (synopsis "Web frontend for git repositories")
       (description
        "CGit is an attempt to create a fast web interface for the Git SCM, using
 a built-in cache to decrease server I/O pressure.")
       (license license:gpl2))))