From: Michael Zucchi <notzed@gmail.com>
To: guix-devel <guix-devel@gnu.org>
Subject: icu4j, antlr4, source archives without a root path
Date: Mon, 11 May 2020 09:59:18 +0930 [thread overview]
Message-ID: <5b42ff70-c6e3-e1f5-c1f8-101df1314f96@gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 17911 bytes --]
Morning,
While working toward openjfx I encountered a problem with the java-icu4j
package required for antlr4 which openjfx requires. Firstly it's
building the wrong source - it's trying to build ic4j-*-src.jar which
only contains the java source suitable for browsing in an ide and is
thus missing the resource and build files. So while it creates a
package that allows compilation to pass it doesn't actually work.
So I tried creating one from the correct source, and for the sake of it,
using the same version as the existing icu4c package - 66.1[1]. The
correct java source archive is icu4j-66_1.tgz
<https://github.com/unicode-org/icu/releases/download/release-66-1/icu4j-66_1.tgz><https://github.com/unicode-org/icu/releases/download/release-66-1/icu4j-66_1.tgz>.
<https://github.com/unicode-org/icu/releases/download/release-66-1/icu4j-66_1-src.jar>
I couldn't use githere because the icu git repository requires git lfs.
My system git doesn't have it so i didn't even try to see if git-fetch
supports it.
For some reason (unlike icu4c) this is not archived within a single
subdirectory which causes at least two problems. First the
gnu-build-system unpack function changes to the first subdirectory it
finds after unpacking any archive, which in this case is nothing
useful. This can be hacked around by replacing the unpack function or
adding a post-pack modification to run "cd ..". The second is that you
cannot apply any patches as the (source (patches --)) function uses an
entirely different mechanism to change to the source root subdirectory
where it simply chooses the first directory entry it finds - which at
least in this case is a file! So it fails and aborts. Of course the
patches could just be applied as a post-unpack function in the same
manner as substitute* is often used.
I found this second issue by accident, icu4j doesn't need a patch.
For what it's worth by mid last week I went through this and managed to
get antlr4 to build (what an awful mess[2]) and have worked out the
steps for openjfx but it was such a miserable few days of work that I
went and did other things for a while. So sorry to say that at this
point I'm not sure if i'll ever get around to submitting patches for any
of this.
Regards,
Z
[1] https://github.com/unicode-org/icu/releases/tag/release-66-1
[2] antlr.scm work in progress
(define-module (antlr)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix git-download)
#:use-module (guix build-system ant)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (gnu packages)
#:use-module (gnu packages java))
; really out of date but this
is the version used by antlr4
; this might want to have
javafx.json (the api) as a separate output?
(define-public jsonp
(package
(name "jsonp")
(version "jsonp-1.0.4")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/javaee/jsonp.git")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32
"01r4syivcywpvxkr1hn0az9316pr7qpnx154zzzw0nijfmdlbw7n"))))
(build-system ant-build-system)
(arguments
`(#:jar-name (string-append ,name "-" ,version ".jar")
#:tests? #f
#:source-dir "impl/src/main/java:api/src/main/java"
#:phases
(modify-phases %standard-phases
(add-before 'build 'fix-build-xml
(lambda _
(substitute* "build.xml"
(("target name=\"compile\">")
"target name=\"compile\">
<copy todir=\"${classes.dir}\">
<fileset dir=\"impl/src/main/resources\">
<include name=\"**/*.properties\"/>
</fileset>
</copy>")))))))
(home-page "https://javaee.github.io/jsonp/")
(synopsis "JSON Processing api")
(description "JSON Processing (JSON-P) is a Java API to process
(for e.g. parse, generate, transform and query) JSON messages. It
produces and consumes JSON text in a streaming fashion (similar to
StAX API for XML) and allows to build a Java object model for JSON
text using API classes (similar to DOM API for XML). ")
(license license:gpl2))) ; with classpath exception
; java-icu4j is broken
(define-public java-icu4j-66
(package
(name "icu4j")
(version "66.1")
(source (origin
(method url-fetch)
(uri (string-append
"https://github.com/unicode-org/icu/releases/download/release-"
(string-map (lambda (x) (if (char=? x #\.) #\- x))
version)
"/icu4j-"
(string-map (lambda (x) (if (char=? x #\.) #\_ x))
version)
".tgz"))
(sha256
(base32
"1ahdyz9209lwl7knb2l3gmnkkby221p0vpgx70fj4j02rdzgvw0d"))
))
(build-system ant-build-system)
(arguments
`(#:tests? #f ; no tests included
#:phases
(modify-phases %standard-phases
(replace 'unpack
(lambda* (#:key source #:allow-other-keys)
(mkdir "source")
(chdir "source")
(invoke "tar" "xvf" source)))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(mkdir-p (string-append out "/share/java"))
(copy-file "icu4j.jar" (string-append out
"/share/java/icu4j-" ,version ".jar"))
#t)))
)
)
)
(home-page "http://site.icu-project.org/")
(synopsis "International Components for Unicode")
(description
"ICU is a set of C/C++ and Java libraries providing Unicode and
globalisation support for software applications. This package contains the
Java part.")
(license license:x11)))
(define-public antlr4
(package
(name "antlr4")
(version "4.7.2")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/antlr/antlr4")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32
"1pl0zs6c6wx9nmq30s7ccpc3dl72az55i8vfp574fw9sywmvxmlj"))
(patches
(search-patches "antlr-template.patch"))
))
(build-system ant-build-system)
(arguments
`(#:jar-name (string-append ,name "-" ,version ".jar")
#:source-dir
"tool/src:runtime/Java/src:build/gensrc/tool"
#:tests? #f
#:phases
(modify-phases %standard-phases
(add-after 'install 'bin-install
(lambda* (#:key inputs outputs #:allow-other-keys)
(let ((jar (string-append (assoc-ref outputs
"out") "/share/java"))
(bin (string-append (assoc-ref outputs
"out") "/bin")))
(mkdir-p bin)
(with-output-to-file (string-append bin
"/antlr4")
(lambda _
(display
(string-append "#!" (which "sh") "\n"
"java -cp " jar "/" ,name
"-" ,version ".jar:"
(string-concatenate
(find-files (assoc-ref
inputs "stringtemplate")
".*\\.jar"))
":"
(string-concatenate
(find-files (assoc-ref
inputs "stringtemplate4")
".*\\.jar"))
":"
(string-concatenate
(find-files (string-append
(assoc-ref inputs "antlr")
"/lib")
".*\\.jar"))
" org.antlr.Tool $*"))))
(chmod (string-append bin "/antlr4") #o755))
#t))
(add-after 'configure 'generate-grammar
(lambda _
(invoke "antlr3"
"-o", "build/gensrc",
"tool/src/org/antlr/v4/codegen/SourceGenTriggers.g"
"tool/src/org/antlr/v4/parse/ANTLRLexer.g"
"tool/src/org/antlr/v4/parse/ANTLRParser.g"
"tool/src/org/antlr/v4/parse/ATNBuilder.g"
"tool/src/org/antlr/v4/parse/ActionSplitter.g"
"tool/src/org/antlr/v4/parse/BlockSetTransformer.g"
"tool/src/org/antlr/v4/parse/GrammarTreeVisitor.g"
"tool/src/org/antlr/v4/parse/LeftRecursiveRuleWalker.g")
#t))
(add-after 'generate-grammar 'build-runtime
(lambda _
(mkdir-p "build/classes")
(apply invoke "javac"
"-source" "1.7"
"-target" "1.7"
"-d" "build/classes"
(find-files "runtime/Java/src"
"\\.java$"))))
(add-after 'build-runtime 'build-controller
; replicate functionality of
maven-stringtemplate-plugin as there is no tool for it(?)
(lambda* (#:key inputs #:allow-other-keys)
(with-output-to-file
"build/gensrc/MakeTemplate.java"
(lambda _
(display "import org.stringtemplate.v4.ST;
import org.stringtemplate.v4.STGroup;
import org.stringtemplate.v4.STGroupDir;
import org.stringtemplate.v4.misc.ErrorBuffer;
import org.stringtemplate.v4.AutoIndentWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Map;
public class MakeTemplate {
public static void main(String[] argv) {
String dir=argv[0];
String name=argv[1];
String res=argv[2];
STGroup group = new STGroupDir(dir);
ST st = group.getInstanceOf(name);
for (Map.Entry<String,Object> e:
org.antlr.v4.unicode.UnicodeDataTemplateController.getProperties().entrySet())
st.add(e.getKey(), e.getValue());
try (FileWriter out = new FileWriter(res)) {
ErrorBuffer listener = new ErrorBuffer();
st.write(new AutoIndentWriter(out), listener);
if(!listener.errors.isEmpty())
throw new IOException(listener.toString());
} catch (IOException x) {
x.printStackTrace(System.err);
System.exit(1);
}
}
}")))
(mkdir "build/genclasses")
(invoke "javac"
"-d" "build/genclasses"
"-classpath"
(string-join
(append
'("build/classes")
(find-files (assoc-ref inputs
"stringtemplate") "\\.jar$")
(find-files (assoc-ref inputs
"icu4j") "\\.jar$"))
":")
"tool/src/org/antlr/v4/unicode/UnicodeDataTemplateController.java"
"build/gensrc/MakeTemplate.java")
#t))
(add-after 'build-controller 'process-templates
(lambda* (#:key inputs #:allow-other-keys)
(mkdir-p "build/gensrc/tool/org/antlr/v4/unicode")
(invoke "java"
"-classpath"
(string-join
(append
'("build/classes" "build/genclasses")
(find-files (assoc-ref inputs
"stringtemplate") "\\.jar$")
(find-files (assoc-ref inputs
"antlr3") "\\.jar$")
(find-files (assoc-ref inputs
"icu4j") "\\.jar$"))
":")
"MakeTemplate"
"tool/resources/org/antlr/v4/tool/templates"
"unicodedata"
"build/gensrc/tool/org/antlr/v4/unicode/UnicodeData.java")))
(add-before 'build 'fix-build-xml
(lambda _
(substitute* "build.xml"
(("target name=\"compile\">")
"target name=\"compile\">
<copy todir=\"${classes.dir}\">
<fileset dir=\"tool/resources\">
<include name=\"**/*.stg\"/>
<include name=\"**/*.st\"/>
<include name=\"**/*.sti\"/>
</fileset>
</copy>")
(("(<javac.*srcdir=\"tool/src[^>]*)/>" all letters)
(string-append letters "><exclude
name=\"org/antlr/v4/unicode/UnicodeDataTemplateController.java\"/>
<exclude name=\"org/antlr/v4/gui/**\"/>
</javac>")))
#t)))))
(native-inputs
`(("icu4j" ,java-icu4j-66)
("antlr3" ,antlr3)
))
(inputs
`(("junit" ,java-junit)
("stringtemplate" ,java-stringtemplate)
("jsonp" ,jsonp)
))
(propagated-inputs
`(
("antlr3" ,antlr3)
("stringtemplate" ,java-stringtemplate)
))
(home-page "https://www.antlr.org")
(synopsis "Framework for constructing recognisers, compilers, and
translators")
(description "ANTLR, ANother Tool for Language Recognition,
(formerly PCCTS)
is a language tool that provides a framework for constructing recognisers,
compilers, and translators from grammatical descriptions containing
Java, C#,
C++, or Python actions. ANTLR provides excellent support for tree
construction,
tree walking, and translation.")
(license license:bsd-3)))
[-- Attachment #2: Type: text/html, Size: 24145 bytes --]
next reply other threads:[~2020-05-11 0:29 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-11 0:29 Michael Zucchi [this message]
2020-05-12 21:57 ` icu4j, antlr4, source archives without a root path Björn Höfling
2020-06-28 20:41 ` Julien Lepiller
2020-07-05 12:20 ` Julien Lepiller
2020-07-06 1:43 ` Michael Zucchi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5b42ff70-c6e3-e1f5-c1f8-101df1314f96@gmail.com \
--to=notzed@gmail.com \
--cc=guix-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).