10879e0072028179664bbc168ea34f091e5dca99
[guix.git] / mroh / guix / packages / chess.scm
1 (define-module (mroh guix packages chess)
2   #:use-module (guix packages)
3   #:use-module (guix licenses)
4   #:use-module (guix download)
5   #:use-module (guix git-download)
6   #:use-module (guix utils)
7   #:use-module (guix build-system python)
8   #:use-module (guix build-system gnu)
9   #:use-module (guix build-system go)
10   #:use-module (guix build-system qt)
11   #:use-module (gnu packages games)
12   #:use-module (gnu packages python)
13   #:use-module (gnu packages golang)
14   #:use-module (gnu packages qt)
15   #:use-module (gnu packages pkg-config))
16
17 (define-public python-chess
18   (package
19     (name "python-chess")
20     (version "0.31.3")
21     (source
22      (origin
23        (method url-fetch)
24        (uri (pypi-uri "python-chess" version))
25        (sha256
26         (base32
27          "0n35lyq0rsy98szab9d1hl2rm4y752h6yz76520abssr2cr1f0n4"))))
28     (build-system python-build-system)
29     (home-page "https://github.com/niklasf/python-chess")
30     (synopsis "A pure Python chess library")
31     (description "A pure Python chess library with move generation and
32 validation, Polyglot opening book probing, PGN reading and writing,
33 Gaviota tablebase probing, Syzygy tablebase probing and XBoard/UCI
34 engine communication.")
35     (license gpl3)))
36
37 (define-public cfish
38   (package
39     (name "cfish")
40     (version "11")
41     (home-page "https://github.com/syzygy1/Cfish")
42     (source
43      (origin
44        (method git-fetch)
45        (uri (git-reference
46              (url home-page)
47              (commit (string-append "cfish_" version "a"))))
48        (file-name (git-file-name name version))
49        (sha256
50         (base32 "0jmwvbs1sszl5fvzd0k74zxlvvylmczv1ns8k79k9iv1rjw4w5ig"))))
51     (build-system gnu-build-system)
52     (arguments
53      `(#:tests? #f
54        #:make-flags (list "-C" "src" "build" ; strange, profile-build seems slower
55                           (string-append "PREFIX="
56                                          (assoc-ref %outputs "out"))
57                           "ARCH=x86-64-modern" "numa=no" "native=no" "extra=yes")
58        #:phases (modify-phases %standard-phases
59                   (delete 'configure))))
60     (synopsis "C port of stockfish")
61     (description "C port of stockfish")
62     (license gpl3+)))
63
64 (define-public stockfish-modern
65   (package
66     (inherit stockfish)
67     (name "stockfish-modern")
68     (arguments
69      `(,@(substitute-keyword-arguments (package-arguments stockfish)
70            ((#:make-flags mf)
71             `(list "-C" "src" "build"
72                    (string-append "PREFIX="
73                                   (assoc-ref %outputs "out"))
74                    (string-append "ARCH=x86-64-modern"))))))))
75
76 (define-public cutechess
77   (package
78     (name "cutechess")
79     (version "1.0.0")
80     (home-page "https://github.com/cutechess/cutechess")
81     (source
82      (origin
83        (method git-fetch)
84        (uri (git-reference
85              (url home-page)
86              (commit (string-append "gui-" version))))
87        (file-name (git-file-name name version))
88        (sha256
89         (base32 "15y4zf4gj2qirc11rdak6vrajb70vaqkgrm6g3m9npwjiwrif3c6"))))
90     (build-system qt-build-system)
91     (native-inputs
92      `(("qttools" ,qttools)))
93     (inputs
94      `(("qtbase" ,qtbase)
95        ("qtsvg" ,qtsvg)))
96     (arguments
97      `(#:tests? #f                      ; no tests
98        #:phases
99        (modify-phases %standard-phases
100          (replace 'configure
101            (lambda _
102              (invoke "qmake")
103              #t))
104          (replace 'install
105            (lambda* (#:key outputs #:allow-other-keys)
106              (let* ((out (assoc-ref outputs "out"))
107                     (bin (string-append out "/bin")))
108                (install-file "projects/cli/cutechess-cli" bin)
109                (install-file "projects/gui/cutechess" bin)
110                (install-file "docs/cutechess-cli.6" (string-append out "/share/man/man6"))
111                (install-file "docs/engines.json.5" (string-append out "/share/man/man5"))
112                (install-file "dist/linux/cutechess.desktop"
113                              (string-append out "/share/applications")))
114              #t)))))
115     (synopsis "Cute Chess is a graphical user interface, command-line interface and a library for playing chess.")
116     (description "Cute Chess is a graphical user interface, command-line interface and a library for playing chess.")
117     (license gpl3+)))
118
119 (define-public ordo
120   (package
121     (name "ordo")
122     (version "1.2.6")
123     (home-page "https://github.com/michiguel/Ordo")
124     (source
125      (origin
126        (method git-fetch)
127        (uri (git-reference
128              (url home-page)
129              (commit (string-append "v" version))))
130        (file-name (git-file-name name version))
131        (sha256
132         (base32 "0a7wzksv5ys3y27chlnbnfvvjl7yzwb23qdxf6zlgvy1yi4c1c8l"))))
133     (build-system gnu-build-system)
134     (arguments
135      `(#:tests? #f
136        #:make-flags '("CFLAGS=-O3 -DNDEBUG -DMY_SEMAPHORES -I myopt -I sysport")
137        #:phases (modify-phases %standard-phases
138                   (delete 'configure)
139                   (replace 'install
140                     (lambda* (#:key outputs #:allow-other-keys)
141                       (let ((out (assoc-ref outputs "out")))
142                         (install-file "ordo" (string-append out "/bin"))
143                         (install-file "README.md" (string-append out "/share/doc/" ,name "-" ,version)))
144                       #t)))))
145     (synopsis "Ratings for chess and other games")
146     (description "Ratings for chess and other games")
147     (license gpl3+)))
148
149 (define-public ordoprep
150   (package
151     (name "ordoprep")
152     (version "0.9.9.8")
153     (home-page "https://github.com/michiguel/Ordoprep")
154     (source
155      (origin
156        (method git-fetch)
157        (uri (git-reference
158              (url home-page)
159              (commit (string-append "v" version))))
160        (file-name (git-file-name name version))
161        (sha256
162         (base32 "0jqjg3sxb7rrm566lmw8zprpfmml6ak5sx983xcqvx795bxjfld0"))))
163     (build-system gnu-build-system)
164     (arguments
165      `(#:tests? #f
166        #:make-flags '("CFLAGS=-O3 -DNDEBUG -I myopt")
167        #:phases (modify-phases %standard-phases
168                   (delete 'configure)
169                   (replace 'install
170                     (lambda* (#:key outputs #:allow-other-keys)
171                       (let ((out (assoc-ref outputs "out")))
172                         (install-file "ordoprep" (string-append out "/bin"))
173                         (install-file "README.md" (string-append out "/share/doc/" ,name "-" ,version)))
174                       #t)))))
175     (synopsis "Preparation of PGN files for rating calculation programs such as Ordo")
176     (description "Preparation of PGN files for rating calculation programs such as Ordo")
177     (license gpl3+)))
178
179 (define-public wsc
180   (let ((branch "uciEngineBridge")
181         (commit "528008eb9157052fc895bae4f98da23ebc348e1e"))
182     (package
183       (name "wsc")
184       (version (git-version "1" branch commit))
185       (source
186        (origin
187          (method git-fetch)
188          (uri (git-reference
189                (url "https://gitlab.com/mroh69/wsc.git")
190                (commit commit)))
191          (file-name (git-file-name name version))
192          (sha256
193           (base32 "0l5bxyp953hry1hbmphjisr28q3a2ysz865y3vmw714850ibb54i"))))
194       (build-system go-build-system)
195       (native-inputs `(("go-golang-org-x-net" ,go-golang-org-x-net)))
196       (arguments
197        `(#:install-source? #f
198          #:tests? #f
199          #:phases
200          (modify-phases %standard-phases
201            (replace 'build
202              (lambda* (#:key import-path #:allow-other-keys)
203                (with-directory-excursion "src/"
204                  (invoke "go" "build" "-v" "-x" "-o" "wsc" "main.go"))))
205            (replace 'install
206              (lambda* (#:key outputs #:allow-other-keys)
207                (let ((out (assoc-ref outputs "out")))
208                  (install-file "src/wsc" (string-append out "/bin")))
209                #t)))))
210       (synopsis "uci websocket wrapper")
211       (description
212        "connects to a uci chess engine and proxy in/out to a websocket")
213       (home-page "https://gitlab.com/mroh69/wsc")
214       (license #f))))
215
216 (define-public pgn-extract
217   (package
218     (name "pgn-extract")
219     (version "19.04")
220     (home-page "https://www.cs.kent.ac.uk/people/staff/djb/pgn-extract/")
221     (source (origin
222               (method url-fetch)
223               (uri "https://www.cs.kent.ac.uk/~djb/pgn-extract/pgn-extract-19-04.tgz")
224               (sha256
225                (base32 "0w1jlbvd2n21h25cz0xkjzddv1i63vi69l0hxrk95cc356q3bb4g"))))
226     (build-system gnu-build-system)
227     (arguments
228      `(#:tests? #f                      ; TODO
229        #:phases (modify-phases %standard-phases
230                   (replace 'install
231                     (lambda* (#:key outputs #:allow-other-keys)
232                       (let ((out (assoc-ref outputs "out")))
233                         (install-file "pgn-extract" (string-append out "/bin"))
234                         (install-file "pgn-extract.man" (string-append out "/share/man/man1/pgn-extract.1"))
235                         (install-file "eco.pgn" (string-append out "/share/pgn-extract-19.04/")))
236                       #t))
237                   (delete 'configure))))
238     (synopsis "A Portable Game Notation (PGN) Manipulator for Chess Games")
239     (description "This is a command-line program for searching,
240 manipulating and formatting chess games recorded in the Portable Game
241 Notation (PGN) or something close. It is capable of handling files
242 containing millions of games. It also recognises Chess960 encodings.")
243     (license gpl3+)))