diff options
author | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2024-10-23 20:48:20 +0900 |
---|---|---|
committer | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2024-11-12 17:41:38 +0900 |
commit | 40625c213ad2007f70117518a7cc290d367e652a (patch) | |
tree | 900492fcfb67ecf76d7151d75c40987143cf3831 /gnu/packages | |
parent | f0c27b2fa824a43bc6a6d056ec7a7c5c78c3a367 (diff) | |
download | guix-40625c213ad2007f70117518a7cc290d367e652a.tar.gz guix-40625c213ad2007f70117518a7cc290d367e652a.zip |
gnu: Add torcs.
* gnu/packages/games.scm (torcs): New variable.
Change-Id: I1e55fc65ff303c309fed50f2071de0eaf4266d57
Diffstat (limited to 'gnu/packages')
-rw-r--r-- | gnu/packages/games.scm | 123 | ||||
-rw-r--r-- | gnu/packages/patches/torcs-glibc-default-source.patch | 25 | ||||
-rw-r--r-- | gnu/packages/patches/torcs-isnan.patch | 15 | ||||
-rw-r--r-- | gnu/packages/patches/torcs-nullptr.patch | 14 |
4 files changed, 177 insertions, 0 deletions
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index a2a3245d76..8779f1ebe2 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -7797,6 +7797,129 @@ challenging battles, and developing characters with your own tailored mix of abilities and powers.") (license license:gpl3+))) +(define-public torcs + (package + (name "torcs") + (version "1.3.7") + (source + (origin + (method url-fetch) + (uri (string-append "https://sourceforge.net/projects/" name + "/files/all-in-one/" version "/" + name "-" version ".tar.bz2/download")) + (sha256 + (base32 + "0kdq0sc7dsfzlr0ggbxggcbkivc6yp30nqwjwcaxg9295s3b06wa")) + (patches (search-patches "torcs-isnan.patch" + "torcs-nullptr.patch" + "torcs-glibc-default-source.patch")) + (snippet + '(begin + (use-modules (guix build utils) + (ice-9 ftw) + (ice-9 regex) + (srfi srfi-26)) + ;; Delete Windows-specific sources and pre-built binaries. + (delete-file-recursively "src/windows") + ;; The license of the kw-* and pw-* car models includes a + ;; non-commercial clause, hence does not comply with the GNU FSDG. + (with-directory-excursion "data/cars/models" + (for-each delete-file-recursively + (scandir "." (cut string-match "^(kc|pw)-" <>)))) + ;; Delete extraneous CVS directories. + (for-each delete-file-recursively + (find-files "." (lambda (file stat) + (and (eq? 'directory (stat:type stat)) + (string=? "CVS" (basename file)))) + #:directories? #t)))))) + (build-system gnu-build-system) + (arguments + ;; Building in parallel fails due to a race where include files have not + ;; yet been generated, with errors such as "controlconfig.cpp:30:10: + ;; fatal error: tgfclient.h: No such file or directory". The issue was + ;; reported to the 'torcs-devel' mailing list (see: + ;; https://sourceforge.net/p/torcs/mailman/torcs-devel/). + (list #:modules `(,@%default-gnu-modules (srfi srfi-26)) + #:parallel-build? #f + #:tests? #f ;no test suite + ;; Ensure the binaries find libraries provided by this very package + ;; (see: https://issues.guix.gnu.org/73979). + #:configure-flags + #~(list (string-append "LDFLAGS=-Wl,-rpath=" #$output + "/lib/torcs/lib")) + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'patch-commands + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "src/linux/torcs.in" + (("/bin/bash") + (search-input-file inputs "bin/bash"))))) + (add-after 'install 'install-data + (lambda _ + (invoke "make" "datainstall"))) + (add-after 'install-data 'install-doc + (lambda _ + (let ((docdir (string-append #$output "/share/doc/torcs/")) + (man6 (string-append #$output "/share/man/man6"))) + (for-each (cut install-file <> man6) + (find-files "doc/man" "\\.6$")) + (install-file "doc/userman/how_to_drive.html" docdir) + (install-file "doc/faq/faq.html" docdir) + (copy-recursively "doc/userman/images" + (string-append docdir "/images"))))) + (add-after 'install 'install-freedesktop-entry + (lambda _ + (let ((iconsdir (string-append #$output "/share/icons/hicolor/" + "48x48/apps"))) + (mkdir-p iconsdir) + (copy-file "Ticon.png" (string-append iconsdir "/torcs.png"))) + (install-file "torcs.desktop" + (string-append #$output + "/share/applications/")))) + (add-after 'install 'fix-permissions + ;; XXX: Otherwise, the guix daemon reports: "suspicious + ;; ownership or permission on /gnu/store/xxx-torcs-1.3.7', + ;; rejecting this build output". + (lambda _ + (chmod #$output #o744)))))) + (inputs + (list bash-minimal + freealut + freeglut + libice + libpng + libsm + libvorbis + libxi + libxmu + libxrandr + libxrender + libxt + mesa + openal + plib + zlib)) + (home-page "https://sourceforge.net/projects/torcs/") + (synopsis "Car racing simulator") + (description "TORCS stands for The Open Racing Car Simulator. It can be +used as an ordinary car racing game, as an artificial intelligence (AI) racing +game, or as a research platform. The game has features such as: +@itemize +@item Input support for a driving wheel, joystick, keyboard or mouse +@item More than 30 car models +@item 30 tracks +@item 50 opponents to race against +@item Lighting, smoke, skidmarks and glowing brake disks graphics +@item Simple damage model and collisions +@item Tire and wheel properties (springs, dampers, stiffness, etc.) +@item Aerodynamics (ground effect, spoilers, etc.) +@end itemize +The difficulty level can be configured, impacting how much damage is caused by +collisions and the level of traction the car has on the track, which makes the +game fun for both novice and experts.") + (license (list license:gpl2+ ;source and most assets + license:fdl1.2+)))) ;how_to_drive.html, faq.html + (define-public quakespasm (package (name "quakespasm") diff --git a/gnu/packages/patches/torcs-glibc-default-source.patch b/gnu/packages/patches/torcs-glibc-default-source.patch new file mode 100644 index 0000000000..eb74cfd4ce --- /dev/null +++ b/gnu/packages/patches/torcs-glibc-default-source.patch @@ -0,0 +1,25 @@ +From: Aurelien Jarno <aurelien@aurel32.net> +Date: Mon, 1 May 2017 15:58:31 +0200 +Subject: glibc default source + +_SVID_SOURCE and _BSD_SOURCE are deprecated, using _DEFAULT_SOURCE +instead. + +Forwarded: https://sourceforge.net/p/torcs/mailman/message/35831161/ +--- + Make-config.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Make-config.in b/Make-config.in +index f0e0a12..8041327 100644 +--- a/Make-config.in ++++ b/Make-config.in +@@ -48,7 +48,7 @@ INSTALL_DATA = @INSTALL_DATA@ + INSTALL_SCRIPT = @INSTALL_SCRIPT@ + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs + +-CFLAGSD = -D_SVID_SOURCE -D_BSD_SOURCE -DSHM -DHAVE_CONFIG_H ++CFLAGSD = -D_DEFAULT_SOURCE -DSHM -DHAVE_CONFIG_H + CXXFLAGS = @CXXFLAGS@ @CPPFLAGS@ ${CFLAGSD} + CFLAGS = @CFLAGS@ ${CFLAGSD} + diff --git a/gnu/packages/patches/torcs-isnan.patch b/gnu/packages/patches/torcs-isnan.patch new file mode 100644 index 0000000000..2ec0c4e1c1 --- /dev/null +++ b/gnu/packages/patches/torcs-isnan.patch @@ -0,0 +1,15 @@ +Source: https://src.fedoraproject.org/rpms/torcs/raw/rawhide/f/torcs-1.3.7-isnan.patch +Upstream-status: https://sourceforge.net/p/torcs/mailman/torcs-devel/thread/0bd466b7-e158-471b-13ad-504167587d01%40embecosm.com/#msg35836767 + +diff -up torcs-1.3.7/src/drivers/olethros/geometry.cpp.orig torcs-1.3.7/src/drivers/olethros/geometry.cpp +--- torcs-1.3.7/src/drivers/olethros/geometry.cpp.orig 2016-06-07 19:49:11.347896827 +0100 ++++ torcs-1.3.7/src/drivers/olethros/geometry.cpp 2016-06-07 19:49:46.532894257 +0100 +@@ -27,6 +27,8 @@ + #ifdef WIN32 + #include <float.h> + #define isnan _isnan ++#else ++#define isnan std::isnan + #endif + + diff --git a/gnu/packages/patches/torcs-nullptr.patch b/gnu/packages/patches/torcs-nullptr.patch new file mode 100644 index 0000000000..a002c48169 --- /dev/null +++ b/gnu/packages/patches/torcs-nullptr.patch @@ -0,0 +1,14 @@ +Source: https://src.fedoraproject.org/rpms/torcs/raw/rawhide/f/torcs-1.3.7-nullptr.patch +Upstream-status: https://sourceforge.net/p/torcs/mailman/message/36490328/ + +--- torcs-1.3.7/src/libs/musicplayer/OpenALMusicPlayer.cpp.orig 2014-02-05 10:54:43.000000000 +0100 ++++ torcs-1.3.7/src/libs/musicplayer/OpenALMusicPlayer.cpp 2018-07-09 20:56:42.521607205 +0100 +@@ -161,7 +161,7 @@ + { + char pcm[BUFFERSIZE]; + int size = 0; +- const char* error = '\0'; ++ const char* error = nullptr; + + if (!stream->read(pcm, BUFFERSIZE, &size, &error)) { + GfError("OpenALMusicPlayer: Stream read error: %s\n", error); |