guix-packages/ambrevar/streetsofrage: Add working non-containerized version

master
Pierre Neidhardt 2019-03-22 15:06:18 +01:00
parent 9ab568f06e
commit 3b3a3c22e6
1 changed files with 125 additions and 38 deletions

View File

@ -8,6 +8,7 @@
#:use-module (gnu packages gcc)
#:use-module (gnu packages compression)
#:use-module (gnu packages elf)
#:use-module (gnu packages image)
#:use-module (gnu packages linux)
#:use-module (gnu packages sdl)
;; #:use-module (gnu packages pulseaudio)
@ -22,10 +23,11 @@
,@(package-arguments package64)))))
(define-public zlib32 (to32 zlib))
(define-public glibc32 (to32 glibc))
(define-public streets-of-rage-remake
(define-public streets-of-rage-remake-containerized
(package
(name "streets-of-rage-remake")
(name "streets-of-rage-remake-containerized")
(version "5.1")
(source (origin
(method url-fetch)
@ -58,6 +60,7 @@
("alsa-lib" ,(to32 alsa-lib))
("sdl" ,(to32 sdl))
("sdl-mixer" ,(to32 sdl-mixer))
("libpng" ,(to32 libpng-1.2))
;; ("pulseaudio" (to32 pulseaudio))
))
;; (inputs
@ -114,30 +117,39 @@
(for-each (lambda (f) (rename-file (string-append "bennugd/" f)
(string-append "data/" f)))
'("libbgdrtm.so" "libcrypto.so.1.0.0" "libdraw.so"))
(with-directory-excursion "data"
(for-each (lambda (f) (rename-file f
(string-append "lib" (basename f))))
(find-files "." "mod.*")))
;; TODO: Patch the executable to use the right RPATH to its dependent libraries.
(let* ((bash (assoc-ref %build-inputs "bash"))
(zlib (assoc-ref %build-inputs "zlib"))
(sdl (assoc-ref %build-inputs "sdl"))
(sdl-mixer (assoc-ref %build-inputs "sdl-mixer"))
(libpng (assoc-ref %build-inputs "libpng"))
(glibc (assoc-ref %build-inputs "glibc"))
(sorr (string-append out "/sorr"))
(sorr-real (string-append out "/bgdi"))
(sorr-data (string-append out "/share/streetsofrageremake/SorR.dat")))
;; Wrap program:
(call-with-output-file sorr
(lambda (p)
(format p "\
;; Wrap program:
(call-with-output-file sorr
(lambda (p)
;; Expose /dev/snd for sound.
(format p "\
#!~a/bin/bash
guix environment --container \
--share=/tmp/.X11-unix/ \
--share=/dev/snd \
--expose=~a/lib=/lib \
--ad-hoc streets-of-rage-remake coreutils -- \
env LD_LIBRARY_PATH=\"~a/lib:~a/lib:~a/lib:~a/lib:~a${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH\" \
env DISPLAY=$DISPLAY LD_LIBRARY_PATH=\"~a/lib:~a/lib:~a/lib:~a/lib:~a/lib:~a${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH\" \
~a ~a \"$@\"~%"
bash
glibc ; Need to be exposed to /lib, or else it won't start.
glibc zlib sdl sdl-mixer (string-append out "/data") ; (string-append out "/bennugd")
sorr-real sorr-data)))
(chmod sorr #o755))
bash
glibc ; Need to be exposed to /lib, or else it won't start.
glibc zlib sdl sdl-mixer libpng (string-append out "/data") ; (string-append out "/bennugd")
sorr-real sorr-data)))
;; libmod_map.so: cannot open shared object file: No such file or directory
(chmod sorr 493))
#t))))
(home-page "http://www.sorrcommunity.com/t148-sor-v5-for-linux-debian-download-links")
(synopsis "Remake of the classic Streets of Rage 1, 2 and 3")
@ -146,29 +158,104 @@ guix environment --container \
"No URL"
""))))
;; guix environment --container --link-profile --network --expose=/gnu/store/rqh1nhjvgdyzyfw164lah2pzwgr2ywx9-glibc32-2.28/lib=/lib coreutils streets-of-rage-remake -- ldd /gnu/store/ibm8jmj3ds1fsq6hkiin178f4127y89x-streets-of-rage-remake-5.1/bgdi
;; guix environment --container --link-profile --network --expose=/gnu/store/rqh1nhjvgdyzyfw164lah2pzwgr2ywx9-glibc32-2.28/lib=/lib coreutils streets-of-rage-remake -- env LD_LIBRARY_PATH=/gnu/store/ibm8jmj3ds1fsq6hkiin178f4127y89x-streets-of-rage-remake-5.1/data:/gnu/store/ibm8jmj3ds1fsq6hkiin178f4127y89x-streets-of-rage-remake-5.1/bennugd /gnu/store/ibm8jmj3ds1fsq6hkiin178f4127y89x-streets-of-rage-remake-5.1/bgdi
;; guix environment --container --link-profile --network --expose=/gnu/store/bb3jg758jgxgslv16b8g3vsji6s56l12-zlib32-1.2.11/lib=/lib --expose=/gnu/store/rqh1nhjvgdyzyfw164lah2pzwgr2ywx9-glibc32-2.28/lib=/lib coreutils streets-of-rage-remake -- ls /lib
;; TODO: How to build union of dirs? Make union package?
;; guix environment --container --link-profile --network --expose=/gnu/store/bb3jg758jgxgslv16b8g3vsji6s56l12-zlib32-1.2.11/lib=/zlib --expose=/gnu/store/rqh1nhjvgdyzyfw164lah2pzwgr2ywx9-glibc32-2.28/lib=/lib coreutils streets-of-rage-remake -- env LD_LIBRARY_PATH=/gnu/store/ibm8jmj3ds1fsq6hkiin178f4127y89x-streets-of-rage-remake-5.1/data:/gnu/store/ibm8jmj3ds1fsq6hkiin178f4127y89x-streets-of-rage-remake-5.1/bennugd:/zlib /gnu/store/ibm8jmj3ds1fsq6hkiin178f4127y89x-streets-of-rage-remake-5.1/bgdi
;; guix environment --container --link-profile --network --expose=/gnu/store/bb3jg758jgxgslv16b8g3vsji6s56l12-zlib32-1.2.11/lib=/zlib --expose=/gnu/store/rqh1nhjvgdyzyfw164lah2pzwgr2ywx9-glibc32-2.28/lib=/lib coreutils streets-of-rage-remake -- env LD_LIBRARY_PATH=/gnu/store/2min05ipil5bjx5ab2d5j2c3i4ama8ph-streets-of-rage-remake-5.1/data:/gnu/store/2min05ipil5bjx5ab2d5j2c3i4ama8ph-streets-of-rage-remake-5.1/bennugd:/zlib /gnu/store/2min05ipil5bjx5ab2d5j2c3i4ama8ph-streets-of-rage-remake-5.1/bgdi /gnu/store/2min05ipil5bjx5ab2d5j2c3i4ama8ph-streets-of-rage-remake-5.
;; guix environment --container --link-profile --network --expose=/gnu/store/bb3jg758jgxgslv16b8g3vsji6s56l12-zlib32-1.2.11/lib=/zlib --expose=/gnu/store/rqh1nhjvgdyzyfw164lah2pzwgr2ywx9-glibc32-2.28/lib=/lib coreutils streets-of-rage-remake -- env LD_LIBRARY_PATH=/gnu/store/ibm8jmj3ds1fsq6hkiin178f4127y89x-streets-of-rage-remake-5.1/data:/gnu/store/ibm8jmj3ds1fsq6hkiin178f4127y89x-streets-of-rage-remake-5.1/bennugd:/zlib /gnu/store/ibm8jmj3ds1fsq6hkiin178f4127y89x-streets-of-rage-remake-5.1/bgdi /gnu/store/ibm8jmj3ds1fsq6hkiin178f4127y89x-streets-of-rage-remake-5.1/SorR.dat
;; /gnu/store/ypk09ld0nxiyh9qb8zc8xfgkhwricycb-alsa-lib32-1.1.7/share/aclocal'
;; guix environment --container --link-profile --network --expose=/gnu/store/rqh1nhjvgdyzyfw164lah2pzwgr2ywx9-glibc32-2.28/lib=/lib coreutils streets-of-rage-remake -- ldd /gnu/store/ibm8jmj3ds1fsq6hkiin178f4127y89x-streets-of-rage-remake-5.1/bgdi
;; guix environment --container --link-profile --network --expose=/gnu/store/bb3jg758jgxgslv16b8g3vsji6s56l12-zlib32-1.2.11/lib=/zlib --expose=/gnu/store/rqh1nhjvgdyzyfw164lah2pzwgr2ywx9-glibc32-2.28/lib=/lib coreutils streets-of-rage-remake -- env LD_LIBRARY_PATH=/gnu/store/ibm8jmj3ds1fsq6hkiin178f4127y89x-streets-of-rage-remake-5.1/data:/gnu/store/ibm8jmj3ds1fsq6hkiin178f4127y89x-streets-of-rage-remake-5.1/bennugd:/zlib:/gnu/store/ypk09ld0nxiyh9qb8zc8xfgkhwricycb-alsa-lib32-1.1.7/lib /gnu/store/ibm8jmj3ds1fsq6hkiin178f4127y89x-streets-of-rage-remake-5.1/bgdi /gnu/store/ibm8jmj3ds1fsq6hkiin178f4127y89x-streets-of-rage-remake-5.1/SorR.dat
;; UTILS:
;; guix environment --container --link-profile --network coreutils streets-of-rage-remake -- ls /gnu/store
;; (setq SORR_PATH "/gnu/store/7w0m1c2g2wpkn63inc1373hbmzhj2yj8-streets-of-rage-remake-5.1")
;; guix environment --container --link-profile --network --expose=/gnu/store/bb3jg758jgxgslv16b8g3vsji6s56l12-zlib32-1.2.11/lib=/zlib --expose=/gnu/store/rqh1nhjvgdyzyfw164lah2pzwgr2ywx9-glibc32-2.28/lib=/lib coreutils streets-of-rage-remake -- env LD_LIBRARY_PATH=$SORR_PATH/data:$SORR_PATH/bennugd:/zlib:/gnu/store/ypk09ld0nxiyh9qb8zc8xfgkhwricycb-alsa-lib32-1.1.7/lib $SORR_PATH/bgdi $SORR_PATH/SorR.dat
(define-public streets-of-rage-remake
(package
(name "streets-of-rage-remake")
(version "5.1")
(source (origin
(method url-fetch)
(uri (string-append "http://launchpad.net/~ubuntugames/+archive/ubuntu/games/+files/sorr_"
version ".orig.tar.gz"))
(sha256
(base32
"1gld4i6ma265j7jw06c1drfp7pbg3n8dpm4lg9xgg28dkl5flwai"))))
(build-system trivial-build-system)
(inputs
`(("bash" ,bash-minimal)
;; ("coreutils" ,coreutils)
("glibc" ,(to32 glibc))
("zlib" ,(to32 zlib))
("alsa-lib" ,(to32 alsa-lib))
("sdl" ,(to32 sdl))
("sdl-mixer" ,(to32 sdl-mixer))
("libpng" ,(to32 libpng-1.2))
;; ("pulseaudio" (to32 pulseaudio))
))
;; (inputs
;; `(("glibc" ,glibc32)))
(native-inputs
`(("patchelf" ,(to32 patchelf))
("tar" ,tar)
("gzip" ,gzip)))
(arguments
`(#:modules ((guix build utils))
#:builder
(begin
(use-modules (guix build utils))
(let ((out (assoc-ref %outputs "out")))
(setenv "PATH" (string-append
(assoc-ref %build-inputs "gzip") "/bin:"
(assoc-ref %build-inputs "patchelf") "/bin:"
(assoc-ref %build-inputs "tar") "/bin"))
(invoke "tar" "xvf" (assoc-ref %build-inputs "source"))
(mkdir-p out)
(copy-recursively "." out)
(chdir out)
;; (mkdir-p "share/applications/")
;; (rename-file "sorr.desktop" "share/applications/sorr.desktop")
;; (mkdir-p "share/icons/hicolor/48x48/apps/")
;; (rename-file "sorr.png" "share/icons/hicolor/48x48/apps/sorr.png")
;; (mkdir-p "bin")
;; (rename-file "bgdi" "bin/bgdi")
;; (rename-file "data" "lib")
;; (mkdir-p "bin")
;; (rename-file "bennugd/libbgdrtm.so" "lib/libbgdrtm.so")
;; (mkdir-p "share/streetsofrageremake")
;; (for-each (lambda (f) (rename-file f (string-append "share/streetsofrageremake/" f)))
;; '("SorMaker.dat" "SorR.dat" "manual" "manual.html"
;; "mod" "palettes" "Readme.txt"))
(delete-file "sorr")
;; Remove the unneeded executable bit.
(for-each (lambda (file)
(chmod file #o644))
(find-files "." ".*"))
(chmod "bgdi" #o755)
;; TODO: Sort out data from bennugd:
(for-each (lambda (f) (rename-file (string-append "bennugd/" f)
(string-append "data/" f)))
'("libbgdrtm.so" "libcrypto.so.1.0.0" "libdraw.so"))
(with-directory-excursion "data"
(for-each (lambda (f) (rename-file f
(string-append "lib" (basename f))))
(find-files "." "mod.*")))
;; TODO: Patch the executable to use the right RPATH to its dependent libraries.
(let* ((bash (assoc-ref %build-inputs "bash"))
(zlib (assoc-ref %build-inputs "zlib"))
(sdl (assoc-ref %build-inputs "sdl"))
(sdl-mixer (assoc-ref %build-inputs "sdl-mixer"))
(libpng (assoc-ref %build-inputs "libpng"))
(glibc (assoc-ref %build-inputs "glibc"))
(sorr (string-append out "/sorr"))
(sorr-real (string-append out "/bgdi"))
(sorr-data (string-append out "/share/streetsofrageremake/SorR.dat")))
(invoke "patchelf" "--set-interpreter" (string-append glibc "/lib/ld-linux.so.2")
(string-append out "/bgdi"))
(for-each (lambda (f)
(invoke "patchelf" "--set-rpath"
(string-append
(string-append out "/data") ":"
(string-append sdl "/lib") ":"
(string-append sdl-mixer "/lib") ":"
(string-append libpng "/lib") ":"
(string-append zlib "/lib"))
f))
(append (list (string-append out "/bgdi"))
(find-files "data" ".*")))
)
#t))))
(home-page "http://www.sorrcommunity.com/t148-sor-v5-for-linux-debian-download-links")
(synopsis "Remake of the classic Streets of Rage 1, 2 and 3")
(description "Remake of the classic Streets of Rage 1, 2 and 3")
(license ((@@ (guix licenses) license) "No license"
"No URL"
""))))