summaryrefslogtreecommitdiffstats
path: root/software.sxml
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--software.sxml226
1 files changed, 226 insertions, 0 deletions
diff --git a/software.sxml b/software.sxml
new file mode 100644
index 0000000..8ef1002
--- /dev/null
+++ b/software.sxml
@@ -0,0 +1,226 @@
1(use-modules (ice-9 match)
2 (srfi srfi-9)
3 (srfi srfi-69)
4 (haunt utils))
5
6(define-record-type <project>
7 (project id name url members)
8 project?
9 (id project-id)
10 (name project-name)
11 (url project-url)
12 (members project-members set-project-members!))
13
14(define-record-type <person>
15 (make-person name url avatar)
16 person?
17 (name person-name)
18 (url person-url)
19 (avatar person-avatar))
20
21(define* (person name #:optional url avatar)
22 (make-person name url avatar))
23
24(define %projects
25 (let ((table (make-hash-table)))
26 (for-each
27 (match-lambda
28 ((id name url)
29 (hash-table-set! table id (project id name url (list)))))
30 '((8sync
31 "8sync"
32 "https://www.gnu.org/software/8sync/")
33 (adns
34 "GNU adns"
35 "https://www.gnu.org/software/adns/")
36 (archimedes
37 "GNU Archimedes"
38 "https://www.gnu.org/software/archimedes/")
39 (binutils
40 "binutils"
41 "https://www.gnu.org/software/binutils/")
42 (classpath
43 "GNU Classpath"
44 "https://www.gnu.org/software/classpath/")
45 (dominion
46 "GNU Dominion"
47 "https://savannah.gnu.org/projects/dominion")
48 (gcc
49 "GNU Compiler Collection (GCC)"
50 "https://gcc.gnu.org")
51 (gdb
52 "GDB" "https://www.gnu.org/software/gdb/")
53 (glibc
54 "GNU C Library"
55 "https://www.gnu.org/software/libc/")
56 (gneural
57 "GNU Gneural Network"
58 "https://www.gnu.org/software/gneuralnetwork/")
59 (gnucobol
60 "GnuCOBOL"
61 "https://gnucobol.sourceforge.io/")
62 (gnupg
63 "GnuPG"
64 "https://gnupg.org")
65 (gsl
66 "GNU Scientific Library"
67 "https://www.gnu.org/software/gsl/")
68 (guile
69 "GNU Guile"
70 "https://www.gnu.org/software/guile/")
71 (guile-debbugs
72 "Guile-Debbugs"
73 "https://savannah.gnu.org/projects/guile-debbugs/")
74 (guile-gnome
75 "Guile-GNOME"
76 "https://www.gnu.org/software/guile-gnome/")
77 (guile-opengl
78 "Guile-OpenGL"
79 "https://www.gnu.org/software/guile-opengl/")
80 (guile-rpc
81 "GNU Guile-RPC"
82 "https://www.gnu.org/software/guile-rpc/")
83 (guix
84 "GNU Guix"
85 "https://guix.gnu.org")
86 (gwl
87 "Guix Workflow Language"
88 "https://guixwl.org")
89 (hurd
90 "GNU Hurd"
91 "https://hurd.gnu.org")
92 (indent
93 "GNU indent"
94 "https://www.gnu.org/software/indent/")
95 (libgcrypt
96 "GNU Libgcrypt"
97 "https://gnupg.org/related_software/libgcrypt/")
98 (libtasn1
99 "GNU Libtasn1"
100 "https://www.gnu.org/software/libtasn1/")
101 (lilypond
102 "GNU LilyPond"
103 "https://lilypond.org/")
104 (liquid-war-6
105 "Liquid War 6"
106 "https://www.gnu.org/software/liquidwar6/")
107 (mcsim
108 "GNU MCSim"
109 "https://www.gnu.org/software/mcsim/")
110 (mediagoblin
111 "GNU MediaGoblin"
112 "https://mediagoblin.org/")
113 (mes
114 "GNU Mes"
115 "https://www.gnu.org/software/mes/")
116 (mpc
117 "GNU MPC"
118 "http://www.multiprecision.org/mpc/")
119 (nano-archimedes
120 "GNU Nano-Archimedes"
121 "https://www.gnu.org/software/archimedes/")
122 (shepherd
123 "GNU Shepherd"
124 "https://www.gnu.org/software/shepherd/")
125 (source-highlight
126 "GNU Source Highlight"
127 "https://www.gnu.org/software/src-highlite/")
128 (userv
129 "GNU userv"
130 "https://www.gnu.org/software/userv/")))
131 table))
132
133(define-syntax-rule (define-member person projects ...)
134 (for-each (lambda (project-id)
135 (let ((project
136 (hash-table-ref %projects project-id
137 (lambda ()
138 (error (format #false
139 "Unknown project ~a for ~a~%"
140 project-id name))))))
141 (set-project-members!
142 project (cons person (project-members project)))))
143 (quote (projects ...))))
144
145(define-member (person "Carlos O'Donell")
146 glibc gdb gcc binutils)
147(define-member (person "Mark J. Wielaard"
148 "https://gnu.wildebeest.org/blog/mjw/")
149 classpath gcc glibc gdb)
150(define-member (person "Andy Wingo"
151 "https://wingolog.org")
152 guile guile-gnome guile-opengl)
153(define-member (person "Ludovic Courtès"
154 "https://people.bordeaux.inria.fr/lcourtes/")
155 guix guile shepherd guile-rpc)
156(define-member (person "Frederic Y. Bois")
157 mcsim)
158(define-member (person "Andrej Shadura")
159 indent)
160(define-member (person "Werner Koch")
161 gnupg libgcrypt)
162(define-member (person "Mark Galassi")
163 gsl dominion)
164(define-member (person "Jean Michel Sellier")
165 archimedes nano-archimedes gneural)
166(define-member (person "Christopher Webber"
167 "https://dustycloud.org")
168 8sync mediagoblin)
169(define-member (person "Ian Jackson")
170 adns userv)
171(define-member (person "Samuel Thibault")
172 hurd)
173(define-member (person "Jan Nieuwenhuizen")
174 mes lilypond)
175(define-member (person "Christian Mauduit")
176 liquid-war-6)
177(define-member (person "Nikos Mavrogiannopoulos")
178 libtasn1)
179(define-member (person "Andreas Enge")
180 mpc)
181(define-member (person "Han-Wen Nienhuys")
182 lilypond)
183(define-member (person "Tobias Geerinckx-Rice")
184 guix)
185(define-member (person "Bernard Giroud")
186 gnucobol)
187(define-member (person "Tom Tromey")
188 source-highlight)
189(define-member (person "Jeff Law")
190 gcc)
191(define-member (person "David Malcolm")
192 gcc)
193(define-member (person "Ricardo Wurmus"
194 "https://elephly.net")
195 guix gwl guile-debbugs)
196
197
198`((title . "Software")
199 (author . "The GNU Assembly")
200 (date . ,(string->date* "2021-04-13 23:00"))
201 (menu . "software")
202 (content
203 ((h2 "Software")
204 (p "Maintainers of the following projects participate in the GNU Assembly:")
205 (ul (@ (class "projects"))
206 ,@(hash-table-fold %projects
207 (lambda (key project acc)
208 (cons `(li (span
209 (a (@ (class "project-url")
210 (href ,(project-url project)))
211 ,(project-name project))
212 ,(let ((members (project-members project)))
213 `(details
214 (summary ,(format #false "members (~a)"
215 (length members)))
216 (ul (@ (class "members"))
217 ,(map (lambda (person)
218 `(li (@ (class "person"))
219 ,(let ((home-page (person-url person)))
220 (if home-page
221 `(a (@ (href ,home-page))
222 ,(person-name person))
223 (person-name person)))))
224 members))))))
225 acc))
226 '())))))