Subject: bug#63783: r-dismo bundles pre-built jars

From: Ricardo Wurmus <[email-masked]>
Date: Thu, 01 Jun 2023 23:05:04 +0200

Ricardo Wurmus <[email-masked]> writes:

> The files dismo.jar and maxent.jar in the r-dismo package don’t have any
> associated source code and are not built from source.

The source code for maxent.jar is here:

   https://github.com/mrmaxent/Maxent

Here’s a draft of a package definition:

--8<---------------cut here---------------start------------->8---
(define-public java-maxent
  (package
    (name "java-maxent")
    (version "3.4.4")
    (source (origin
              (method git-fetch)
              (uri (git-reference
                    (url "https://github.com/mrmaxent/Maxent")
                    (commit (string-append "v" version))))
              (file-name (git-file-name name version))
              (sha256
               (base32
                "12q7hhly76l77vm8w8v9icga2gn6xs0bw33a7wb7zikcmvizcyp0"))))
    (build-system ant-build-system)
    (arguments
     (list
      #:tests? #false                   ;there are none
      #:jdk icedtea-8
      #:phases
      #~(modify-phases %standard-phases
          (replace 'build
            (lambda _
              (with-directory-excursion "gnu/getopt/"
                (invoke "make"))
              ;; See https://github.com/mrmaxent/Maxent/pull/11
              (substitute* "density/Extractor.java"
                (("float") "double"))
              (apply invoke "javac" "-cp" (getcwd) "-g"
                     (find-files "density" "\\.java$"))
              (apply invoke "javac" "-cp" (getcwd) "-g"
                     (find-files "ptolemy/plot" "\\.java$"))
              (apply invoke "javac" "-cp" (getcwd) "-g"
                     (find-files "com" "\\.java$"))
              (apply invoke "javac" "-cp" (getcwd) "-g"
                     (find-files "gui" "\\.java$"))
              (apply invoke "jar" "cvfm" "maxent.jar"
                      (cons* "density/mc.mf"
                             "density/parameters.csv"
                             (append (find-files "density" "\\.class$")
                                     (find-files "density" "\\.html$")
                                     (find-files "gnu/getopt" ".*")
                                     (find-files "gui/layouts" "\\.class$*")
                                     (find-files "com/macfaq/io" "\\.class$*")
                                     (find-files "density/tools" "\\.class$*")
                                     (find-files "ptolemy/plot" "\\.class$*"))))))
          (replace 'install
            (lambda _
              (install-file "maxent.jar"
                            (string-append #$output "/share/java/maxent/")))))))
    (native-inputs
     (list gnu-make))
    (home-page "http://biodiversityinformatics.amnh.org/open_source/maxent")
    (synopsis "Model species geographic distributions")
    (description
     "Maxent is a stand-alone Java application for modelling species
geographic distributions.")
    (license license:expat)))
--8<---------------cut here---------------end--------------->8---

The sources in ptolemy/plot cannot be built yet, because we’re missing a
package for either https://ptolemy.berkeley.edu/ptolemyII/index.htm or
https://ptolemy.berkeley.edu/ptolemyclassic/pt0.7.1/index.htm.

We cannot use the Makefile to “make compile” or “make distribution”
because it starts by building ParamPre.java, which can only be built
when Parameters.java has been compiled.  So perhaps there’s a need for
bootstrapping.  In the above package definition we’re using some .java
files that have been generated through unknown means.

The very small sources for dismo.jar are actually included in the dismo
package itself, they just have unexpected names.

-- 
Ricardo