diff --git a/.gitignore b/.gitignore index aced4f0a0..6424be280 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,15 @@ nbactions*.xml # Playground #/tool/playground/ + +# Generated files +out/ +doc/ +gen3/ +gen4/ +tmp/ + +# Configurable build files +bild.py +bild* + diff --git a/bild.py b/bild.py index af87271bd..84cd0ec9c 100755 --- a/bild.py +++ b/bild.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +# !/usr/bin/env python import os import string @@ -34,145 +34,214 @@ if not os.path.exists("bilder.py"): from bilder import * VERSION = "4.4" -JAVA_TARGET = "." -PYTHON2_TARGET = "../antlr4-python2" -PYTHON3_TARGET = "../antlr4-python3" -CSHARP_TARGET = "../antlr4-csharp" +JAVA_TARGET = "." +PYTHON2_TARGET = "../antlr4-python2" +PYTHON3_TARGET = "../antlr4-python3" +CSHARP_TARGET = "../antlr4-csharp" # Properties needed to run Python[23] tests test_properties = { - "antlr-python2-python":"/usr/local/Cellar/python/2.7.5/bin/python2.7", - "antlr-python2-runtime":uniformpath(PYTHON2_TARGET)+"/src", - "antlr-python3-python":"/usr/local/Cellar/python3/3.4.1/bin/python3", - "antlr-python3-runtime":uniformpath(PYTHON3_TARGET)+"/src", +"antlr-python2-python": "/usr/local/bin/python2.7", +"antlr-python2-runtime": uniformpath(PYTHON2_TARGET) + "/src", +"antlr-python3-python": "/usr/local/bin/python3.4", +"antlr-python3-runtime": uniformpath(PYTHON3_TARGET) + "/src", +} + +TARGETS = {"Java": uniformpath(JAVA_TARGET), + "Python2": uniformpath(PYTHON2_TARGET), + "Python3": uniformpath(PYTHON3_TARGET), #"CSharp":uniformpath(CSHARP_TARGET) } -TARGETS = {"Java":uniformpath(JAVA_TARGET), - "Python2":uniformpath(PYTHON2_TARGET), - "Python3":uniformpath(PYTHON3_TARGET), - #"CSharp":uniformpath(CSHARP_TARGET) - } def parsers(): - antlr3("tool/src/org/antlr/v4/parse", "gen3", package="org.antlr.v4.parse") - antlr3("tool/src/org/antlr/v4/codegen", "gen3", package="org.antlr.v4.codegen", args=["-lib",uniformpath("gen3/org/antlr/v4/parse")]) - antlr4("runtime/Java/src/org/antlr/v4/runtime/tree/xpath", "gen4", package="org.antlr.v4.runtime.tree.xpath") + antlr3("tool/src/org/antlr/v4/parse", "gen3", package="org.antlr.v4.parse") + antlr3("tool/src/org/antlr/v4/codegen", "gen3", package="org.antlr.v4.codegen", + args=["-lib", uniformpath("gen3/org/antlr/v4/parse")]) + antlr4("runtime/Java/src/org/antlr/v4/runtime/tree/xpath", "gen4", package="org.antlr.v4.runtime.tree.xpath") + def compile(): - require(parsers) - cp = uniformpath("out")+os.pathsep+ \ - os.path.join(JARCACHE,"antlr-3.5.1-complete.jar")+os.pathsep+ \ - "runtime/Java/lib/org.abego.treelayout.core.jar"+os.pathsep - if os.path.exists(JARCACHE+"/antlr-4.4-complete.jar"): - cp += JARCACHE+"/antlr-4.4-complete.jar" - srcpath = ["gen3", "gen4", "runtime/JavaAnnotations/src", "runtime/Java/src", "tool/src"] - args = ["-Xlint", "-Xlint:-serial", "-g", "-sourcepath", string.join(srcpath, os.pathsep)] - for sp in srcpath: - javac(sp, "out", version="1.6", cp=cp, args=args) - # pull in targets - for t in TARGETS: - javac(TARGETS[t]+"/tool/src", "out", version="1.6", cp=cp, args=args) + require(parsers) + cp = uniformpath("out") + os.pathsep + \ + os.path.join(JARCACHE, "antlr-3.5.1-complete.jar") + os.pathsep + \ + "runtime/Java/lib/org.abego.treelayout.core.jar" + os.pathsep + if os.path.exists(JARCACHE + "/antlr-" + VERSION + "-complete.jar"): + cp += JARCACHE + "/antlr-" + VERSION + "-complete.jar" + srcpath = ["gen3", "gen4", "runtime/JavaAnnotations/src", "runtime/Java/src", "tool/src"] + args = ["-Xlint", "-Xlint:-serial", "-g", "-sourcepath", string.join(srcpath, os.pathsep)] + for sp in srcpath: + javac(sp, "out", version="1.6", cp=cp, args=args) + # pull in targets + for t in TARGETS: + javac(TARGETS[t] + "/tool/src", "out", version="1.6", cp=cp, args=args) + def mkjar_complete(): - require(compile) - copytree(src="tool/resources", trg="out") # messages, Java code gen, etc... - manifest = \ -"""Main-Class: org.antlr.v4.Tool -Implementation-Vendor: ANTLR -Implementation-Title: ANTLR 4 Tool -Implementation-Version: %s -Built-By: %s -Build-Jdk: 1.6 -Created-By: http://www.bildtool.org -""" % (VERSION,os.getlogin()) - # unjar required libraries - unjar("runtime/Java/lib/org.abego.treelayout.core.jar", trgdir="out") - unjar(os.path.join(JARCACHE,"antlr-3.5.1-complete.jar"), trgdir="out") - # pull in target templates - for t in TARGETS: - trgdir = "out/org/antlr/v4/tool/templates/codegen/"+t - mkdir(trgdir) - copyfile(TARGETS[t]+"/tool/resources/org/antlr/v4/tool/templates/codegen/"+t+"/"+t+".stg", - trgdir) - jarfile = "dist/antlr-"+VERSION+"-complete.jar" - jar(jarfile, srcdir="out", manifest=manifest) - print "Generated "+jarfile + require(compile) + copytree(src="tool/resources", trg="out") # messages, Java code gen, etc... + manifest = \ + """Main-Class: org.antlr.v4.Tool + Implementation-Vendor: ANTLR + Implementation-Title: ANTLR 4 Tool + Implementation-Version: %s + Built-By: %s + Build-Jdk: 1.6 + Created-By: http://www.bildtool.org + """ % (VERSION, os.getlogin()) + # unjar required libraries + unjar("runtime/Java/lib/org.abego.treelayout.core.jar", trgdir="out") + unjar(os.path.join(JARCACHE, "antlr-3.5.1-complete.jar"), trgdir="out") + # pull in target templates + for t in TARGETS: + trgdir = "out/org/antlr/v4/tool/templates/codegen/" + t + mkdir(trgdir) + copyfile(TARGETS[t] + "/tool/resources/org/antlr/v4/tool/templates/codegen/" + t + "/" + t + ".stg", + trgdir) + jarfile = "dist/antlr4-" + VERSION + "-complete.jar" + jar(jarfile, srcdir="out", manifest=manifest) + print "Generated " + jarfile + def mkjar_runtime(): - # out/... dir is full of tool-related stuff, make special dir out/runtime - # unjar required library - unjar("runtime/Java/lib/org.abego.treelayout.core.jar", trgdir="out/runtime") - cp = uniformpath("out/runtime")+os.pathsep+ \ - "runtime/Java/lib/org.abego.treelayout.core.jar" - args = ["-Xlint", "-Xlint:-serial", "-g"] - srcpath = ["gen4", "runtime/JavaAnnotations/src", "runtime/Java/src"] - args = ["-Xlint", "-Xlint:-serial", "-g", "-sourcepath", string.join(srcpath, os.pathsep)] - for sp in srcpath: - javac(sp, "out", version="1.6", cp=cp, args=args) - manifest = \ -"""Implementation-Vendor: ANTLR -Implementation-Title: ANTLR 4 Runtime -Implementation-Version: %s -Built-By: %s -Build-Jdk: 1.6 -Created-By: http://www.bildtool.org -""" % (VERSION,os.getlogin()) - jarfile = "dist/antlr-runtime-" + VERSION + ".jar" - jar(jarfile, srcdir="out/runtime", manifest=manifest) - print "Generated "+jarfile + # out/... dir is full of tool-related stuff, make special dir out/runtime + # unjar required library + unjar("runtime/Java/lib/org.abego.treelayout.core.jar", trgdir="out/runtime") + cp = uniformpath("out/runtime") + os.pathsep + \ + "runtime/Java/lib/org.abego.treelayout.core.jar" + args = ["-Xlint", "-Xlint:-serial", "-g"] + srcpath = ["gen4", "runtime/JavaAnnotations/src", "runtime/Java/src"] + args = ["-Xlint", "-Xlint:-serial", "-g", "-sourcepath", string.join(srcpath, os.pathsep)] + for sp in srcpath: + javac(sp, "out", version="1.6", cp=cp, args=args) + manifest = \ + """Implementation-Vendor: ANTLR + Implementation-Title: ANTLR 4 Runtime + Implementation-Version: %s + Built-By: %s + Build-Jdk: 1.6 + Created-By: http://www.bildtool.org + """ % (VERSION, os.getlogin()) + jarfile = "dist/antlr4-" + VERSION + ".jar" + jar(jarfile, srcdir="out/runtime", manifest=manifest) + print "Generated " + jarfile + def mkjar(): - mkjar_complete() - # put it in JARCARCHE too so bild can find it during antlr4() - copyfile(src="dist/antlr-4.4-complete.jar", trg=JARCACHE) - # rebuild/bootstrap XPath with 4.4 so it can use 4.4 runtime (gen'd with 4.3 at this point) - rmdir("gen4/org/antlr/v4/runtime/tree/xpath") # kill 4.3-generated version - antlr4("runtime/Java/src/org/antlr/v4/runtime/tree/xpath", "gen4", version="4.4", package="org.antlr.v4.runtime.tree.xpath") - compile() - mkjar_complete() # make it again with up to date XPath lexer - mkjar_runtime() # now build the runtime jar + mkjar_complete() + # put it in JARCARCHE too so bild can find it during antlr4() + copyfile(src="dist/antlr4-" + VERSION + "-complete.jar", trg=JARCACHE) + # rebuild/bootstrap XPath with 4.4 so it can use 4.4 runtime (gen'd with 4.3 at this point) + rmdir("gen4/org/antlr/v4/runtime/tree/xpath") # kill 4.3-generated version + antlr4("runtime/Java/src/org/antlr/v4/runtime/tree/xpath", "gen4", version=VERSION, + package="org.antlr.v4.runtime.tree.xpath") + compile() + mkjar_complete() # make it again with up to date XPath lexer + mkjar_runtime() # now build the runtime jar + def tests(): - require(mkjar) - junit_jar, hamcrest_jar = load_junitjars() - cp = uniformpath("dist/antlr-"+VERSION+"-complete.jar")+os.pathsep+ \ - uniformpath("out/test/Java")+os.pathsep+ \ - junit_jar+os.pathsep+hamcrest_jar - properties = ["-D%s=%s" % (p, test_properties[p]) for p in test_properties] - args = ["-Xlint", "-Xlint:-serial", "-g"] - javac("tool/test", "out/test/Java", version="1.6", cp=cp, args=args) # all targets can use org.antlr.v4.test.* - for t in TARGETS: - print "Test %7s --------------" % t - # Prefix CLASSPATH with individual target tests - cp = uniformpath(TARGETS[t]+"/tool/test") + os.pathsep + cp - javac(TARGETS[t]+"/tool/test", "out/test/"+t, version="1.6", cp=cp, args=args) - junit("out/test/"+t, cp=cp, verbose=False, args=properties) + require(mkjar) + junit_jar, hamcrest_jar = load_junitjars() + cp = uniformpath("dist/antlr4-" + VERSION + "-complete.jar") + os.pathsep + \ + uniformpath("out/test/Java") + os.pathsep + \ + junit_jar + os.pathsep + hamcrest_jar + properties = ["-D%s=%s" % (p, test_properties[p]) for p in test_properties] + args = ["-Xlint", "-Xlint:-serial", "-g"] + javac("tool/test", "out/test/Java", version="1.6", cp=cp, args=args) # all targets can use org.antlr.v4.test.* + for t in TARGETS: + print "Test %7s --------------" % t + # Prefix CLASSPATH with individual target tests + cp = uniformpath(TARGETS[t] + "/tool/test") + os.pathsep + cp + javac(TARGETS[t] + "/tool/test", "out/test/" + t, version="1.6", cp=cp, args=args) + junit("out/test/" + t, cp=cp, verbose=False, args=properties) + def all(): - mkjar() - tests() - mkdoc() + clean(True) + mkjar() + tests() + mkdoc() + mksrc() + install() + clean() + +def install(): + mvn_install("dist/antlr4-" + VERSION + "-complete.jar", + "dist/antlr4-" + VERSION + "-complete-sources.jar", + "dist/antlr4-" + VERSION + "-complete-javadoc.jar", + "org.antlr", + "antlr4", + VERSION) + mvn_install("dist/antlr4-" + VERSION + ".jar", + "dist/antlr4-" + VERSION + "-sources.jar", + "dist/antlr4-" + VERSION + "-javadoc.jar", + "org.antlr", + "antlr4-runtime", + VERSION) + +def clean(dist=False): + if dist: + rmdir("dist") + rmdir("out") + rmdir("gen3") + rmdir("gen4") + rmdir("doc") + + +def mksrc(): + srcpath = "runtime/Java/src/org" + jarfile = "dist/antlr4-" + VERSION + "-sources.jar" + zip(jarfile, srcpath) + print "Generated " + jarfile + jarfile = "dist/antlr4-" + VERSION + "-complete-sources.jar" + srcpaths = [ srcpath, "gen3/org", "gen4/org", "runtime/JavaAnnotations/src/org", "tool/src/org"] + zip(jarfile, srcpaths) + print "Generated " + jarfile -def clean(): - rmdir("out") - rmdir("gen3") - rmdir("gen4") - rmdir("doc") def mkdoc(): - mkdir("doc/Java") - mkdir("doc/JavaTool") - javadoc(srcdir="runtime/Java/src", trgdir="doc/Java", packages="org.antlr.v4.runtime") - toolsrc = [TARGETS[t]+"/tool/src" for t in TARGETS] - toolsrc = string.join(toolsrc, ":") - javadoc(srcdir=toolsrc, trgdir="doc/JavaTool", packages="org.antlr.v4") - # build stack merge PredictionContext and ATNState images from DOT - # DOT Images are in runtime/Java/src/main/dot/org/antlr/v4/runtime/atn/images/ - # Gen into E.g., doc/Java/org/antlr/v4/runtime/atn/images/SingletonMerge_DiffRootSamePar.svg - mkdir("doc/Java/org/antlr/v4/runtime/atn/images") - for f in glob.glob("runtime/Java/src/main/dot/org/antlr/v4/runtime/atn/images/*.dot"): - dot(f, "doc/Java/org/antlr/v4/runtime/atn/images", format="svg") - zip("doc/antlr4-runtime.zip", "doc/Java") - zip("doc/antlr4-tool.zip", "doc/JavaTool") + # add a few source dirs to reduce the number of javadoc errors + # JavaDoc needs antlr annotations source code + mkdir("out/Annotations") + download("http://search.maven.org/remotecontent?filepath=org/antlr/antlr4-annotations/4.3/antlr4-annotations-4.3-sources.jar", "out/Annotations") + unjar("out/Annotations/antlr4-annotations-4.3-sources.jar", trgdir="out/Annotations") + # JavaDoc needs abego treelayout source code + mkdir("out/TreeLayout") + download("http://search.maven.org/remotecontent?filepath=org/abego/treelayout/org.abego.treelayout.core/1.0.1/org.abego.treelayout.core-1.0.1-sources.jar", "out/TreeLayout") + unjar("out/TreeLayout/org.abego.treelayout.core-1.0.1-sources.jar", trgdir="out/TreeLayout") + # JavaDoc needs antlr runtime 3.5.2 source code + mkdir("out/Antlr352Runtime") + download("http://search.maven.org/remotecontent?filepath=org/antlr/antlr-runtime/3.5.2/antlr-runtime-3.5.2-sources.jar", "out/Antlr352Runtime") + unjar("out/Antlr352Runtime/antlr-runtime-3.5.2-sources.jar", trgdir="out/Antlr352Runtime") + # JavaDoc needs antlr ST4 source code + mkdir("out/ST4") + download("http://search.maven.org/remotecontent?filepath=org/antlr/ST4/4.0.8/ST4-4.0.8-sources.jar", "out/ST4") + unjar("out/ST4/ST4-4.0.8-sources.jar", trgdir="out/ST4") + # go! + mkdir("doc/Java") + mkdir("doc/JavaTool") + dirs = ["runtime/Java/src"] + dirs += ["out/Annotations"] + dirs += ["out/TreeLayout"] + exclude = ["org/antlr/runtime", + "org/abego", + "org/stringtemplate", + "org/antlr/stringtemplate"] + javadoc(srcdir=dirs, trgdir="doc/Java", packages="org.antlr.v4.runtime", exclude=exclude) + dirs += ["gen3"] + dirs += [TARGETS[t] + "/tool/src" for t in TARGETS] + dirs += ["out/Antlr352Runtime"] + dirs += ["out/ST4"] + javadoc(srcdir=dirs, trgdir="doc/JavaTool", packages="org.antlr.v4", exclude=exclude) + # build stack merge PredictionContext and ATNState images from DOT + # DOT Images are in runtime/Java/src/main/dot/org/antlr/v4/runtime/atn/images/ + # Gen into E.g., doc/Java/org/antlr/v4/runtime/atn/images/SingletonMerge_DiffRootSamePar.svg + mkdir("doc/Java/org/antlr/v4/runtime/atn/images") + for f in glob.glob("runtime/Java/src/main/dot/org/antlr/v4/runtime/atn/images/*.dot"): + dot(f, "doc/Java/org/antlr/v4/runtime/atn/images", format="svg") + zip("dist/antlr4-" + VERSION + "-javadoc.jar", "doc/Java") + zip("dist/antlr4-" + VERSION + "-complete-javadoc.jar", "doc/JavaTool") -processargs(globals()) # E.g., "python bild.py all" + + +processargs(globals()) # E.g., "python bild.py all"