root/gtkradiant.scm

(define-module (hidamari-blue gtkradiant)
  #:use-module (guix packages)
  #:use-module (ice-9 match)
  #:use-module (guix utils)
  #:use-module (guix download)
  #:use-module (guix git-download)
  #:use-module (guix svn-download)
  #:use-module (guix build-system gnu)
  #:use-module (guix build-system scons)
  #:use-module (guix build-system cmake)
  #:use-module ((guix licenses) #:renamer (symbol-prefix-proc 'license:))
  #:use-module (gnu packages)
  #:use-module (gnu packages python)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages ncurses)
  #:use-module (gnu packages base)
  #:use-module (gnu packages sdl)
  #:use-module (gnu packages gl)
  #:use-module (gnu packages gnome)
  #:use-module (gnu packages bison)
  #:use-module (gnu packages flex)
  #:use-module (gnu packages databases)
  #:use-module (gnu packages compression)
  #:use-module (gnu packages fontutils)
  #:use-module (gnu packages fonts)
  #:use-module (gnu packages image)
  #:use-module (gnu packages games)
  #:use-module (gnu packages audio)
  #:use-module (gnu packages video)
  #:use-module (gnu packages mp3)
  #:use-module (gnu packages xiph)
  #:use-module (gnu packages xml)
  #:use-module (gnu packages gtk)
  #:use-module (gnu packages xorg)
  #:use-module (gnu packages wxwidgets)
  #:use-module (gnu packages version-control)
  #:use-module (gnu packages perl))

(define-public gtkradiant
  (let ((commit "69972f94582f0723c9ceaabf6751a911bf1fdcc3")
        (data-packs '(("Q3Pack" 138 "1m8c1f26rrc89ad1fijwc7m3gjmzj59v4kawd7zhqqlcpvc47854")
                      ("UrTPack" 138 "08nn7l9b1zgyqkjsvn0pvl82ivnr5limpnadg4i43mhs4hvw820d")
                      ("ETPack" 138 "02dfg5xdjqnii949zh0xjb0k5yv2z86jirqy0s05xz65hwwrd9ls")
                      ("QLPack" 138 "0fa4pnb8yyl17kik5j16sag1608jfcdjmyb2f5ykky9ivlwhnxch")
                      ("Q2Pack" 138 "1xdyy86sfb0kmdpfi98nvjgqir5mdyw5628br7wrrwdnbx2ivpv9")
                      ("QuetooPack" 138 "1bivwhanm4fz8d2jbd92fndqi5pf0mbhwvwb9mmlcm0xk0yfbrj8")
                      ("JAPack" 138 "06nh5fqyg65wg7f77knff7m6q5jlcfscimihjsjw96y3qn809bvi")
                      ("STVEFPack" 138 "04hyi48il5l922a9fd4c29zqkba4yd1cgmn20r4530wz5ra75qxa")
                      ("WolfPack" 138 "1z2ax6g4s1fx5vfdlbvrxgm2yagfbw98b0aiflfi8wl8m3lf9pgb"))))
    ;; The homepage says:
    ;;   "We do not currently have Linux packages for GtkRadiant 1.6.5.
    ;;    We recommend users compile the latest version from the source code."
    ;; There are no tags in the git repository.
    ;; The source download links to the generated github master.tar.gz
    ;; https://icculus.org/gtkradiant/downloads.html
    (package
     (name "gtkradiant")
     (version "1.6.5-69972f9")
     (source (origin (method git-fetch)
                     (uri (git-reference
                           (url "https://github.com/TTimo/GtkRadiant/")
                           (commit commit)))
                     (sha256
                      (base32
                       "1psrk7kjsh15d6d4wams5nxi2h0g7ksbgi6nzcpybiqxf989dg4k"))))
     (arguments `(#:tests?
                  #f                    ;no test target, but some config tests?
                  #:scons
                  ,scons-python2
                  #:phases
                  (modify-phases
                   %standard-phases
                   (add-after
                    'unpack 'extract-subversion
                    (lambda* (#:key outputs inputs #:allow-other-keys)
                      (let ((out (assoc-ref outputs "out")))
                        (mkdir-p (string-append out "/bin"))
                        (mkdir-p (string-append out "/share/gtkradiant"))
                        (mkdir-p (string-append out "/share/gtkradiant/modules"))
                        (mkdir-p (string-append out "/share/gtkradiant/installs"))
                        (for-each
                         (lambda (name)
                           ;; (mkdir-p (string-append "install/installs/" name))
                           (copy-recursively (string-append (assoc-ref inputs name))
                                             (string-append out "/share/gtkradiant/installs/" name)))
                         (list ,@(map car data-packs)))
                        (substitute* "config.py"
                                     (("cmd = \\[ 'svn', 'update', path \\]")
                                      "cmd = [ 'echo', 'already prefeched to', path ]"))

                        (substitute* "config.py"
                                     (("self\\.install_directory = 'install'")
                                      (string-append
                                       "self.install_directory = '" out "/share/gtkradiant'")))
                        (substitute* "config.py"
                                     (("install/modules")
                                      (string-append out "/share/gtkradiant/modules")))

                        #t)))
                   (add-after
                    'install 'actually-install-stuff
                    (lambda* (#:key outputs #:allow-other-keys)
                      (let ((out (assoc-ref outputs "out")))
                        (rename-file (string-append out "/share/gtkradiant/q3data") (string-append out "/bin/q3data"))
                        (rename-file (string-append out "/share/gtkradiant/q3map2") (string-append out "/bin/q3map2"))
                        (rename-file (string-append out "/share/gtkradiant/q3map2_urt") (string-append out "/bin/q3map2_urt"))
                        ;; rename to avoid collisions with other radiants
                        (rename-file (string-append out "/share/gtkradiant/radiant.bin") (string-append out "/bin/gtkradiant"))
                        ;; ;; TODO tell the radiant.bin where these dirs are during configure
                        ;; (copy-recursively "install/modules" (string-append out "/share/gtkradiant/modules"))
                        ;; (copy-recursively "install/installs" (string-append out "/share/gtkradiant/installs"))
                        ;; (copy-recursively "install/games" (string-append out "/share/gtkradiant/games"))
                        ;; (copy-recursively "install/bitmaps" (string-append out "/share/gtkradiant/bitmaps"))
                        )
                      #t)
                    ))))
     (build-system scons-build-system)
     (inputs `(("libgtk2" ,gtk+-2)
               ("libxml2" ,libxml2)
               ("glu" ,glu)
               ("gtkglext" ,gtkglext)
               ("libjpeg" ,libjpeg)
               ;; ("libmikmod" ,libmikmod)
               ;; ("libvorbis" ,libvorbis)
               ;; ("libxmp" ,libxmp)
               ("mesa" ,mesa)
               ;; ("mpg123" ,mpg123)
               ;; ("sdl2" ,sdl2)
               ))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ,@(map
           (match-lambda
            ((name revision hash)
             (list
              name
              (origin
               (method svn-fetch)
               (uri (svn-reference
                     (url (string-append "svn://svn.icculus.org/gtkradiant-gamepacks/"
                                         name "/trunk"))
                     (revision revision)))
               (file-name (string-append name "-data.tar.gz"))
               (sha256 (base32 hash))))))
           data-packs)))
     (synopsis "map editor for quake first person shooters")
     (description "first person shooter map editor")
     (home-page "https://icculus.org/gtkradiant/")
     (license license:gpl2))))