From: <dal...@us...> - 2009-08-23 17:26:31
|
Revision: 16043 http://jedit.svn.sourceforge.net/jedit/?rev=16043&view=rev Author: daleanson Date: 2009-08-23 17:26:22 +0000 (Sun, 23 Aug 2009) Log Message: ----------- Added properties for compiler.bootclasspath and compiler.extdirs to make it easier to build a Java 1.5 compatible plugin when running Java 1.6. Modified Paths: -------------- build-support/trunk/build.properties.sample build-support/trunk/plugin-build.xml Modified: build-support/trunk/build.properties.sample =================================================================== --- build-support/trunk/build.properties.sample 2009-08-23 13:21:47 UTC (rev 16042) +++ build-support/trunk/build.properties.sample 2009-08-23 17:26:22 UTC (rev 16043) @@ -66,7 +66,7 @@ #compiler.debug=off #compiler.debuglevel=lines,vars,source -# Gererate optimized code +# Generate optimized code #compiler.optimize=off # Deprecation warnings. @@ -90,6 +90,13 @@ # Fork the javac compiler #compiler.fork=no +# Location for rt.jar and ext dir. By default, these are set to the +# appropriate value for the running jvm. These are necessary, for example, +# when compiling a Java 1.5 compatible plugin while running Java 1.6. +#compiler.bootclasspath=${java.home}/lib/rt.jar +#compiler.extdirs=${java.ext.dirs} + + # Documentation build options # What target to use for the docs Modified: build-support/trunk/plugin-build.xml =================================================================== --- build-support/trunk/plugin-build.xml 2009-08-23 13:21:47 UTC (rev 16042) +++ build-support/trunk/plugin-build.xml 2009-08-23 17:26:22 UTC (rev 16043) @@ -79,6 +79,8 @@ <property name="compiler.source" value="1.5" /> <property name="compiler.listfiles" value="no" /> <property name="compiler.fork" value="no" /> + <property name="compiler.bootclasspath" value="${java.home}/lib/rt.jar"/> + <property name="compiler.extdirs" value="${java.ext.dirs}"/> <!-- default documentation options --> <property name="docs-proc.target" value="xsltproc" /> @@ -154,6 +156,8 @@ source="${compiler.source}" listfiles="${compiler.listfiles}" fork="${compiler.fork}" + bootclasspath="${compiler.bootclasspath}" + extdirs="${compiler.extdirs}" > <src location="${src.dir}" /> <classpath refid="default.class.path" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2009-08-25 16:58:45
|
Revision: 16058 http://jedit.svn.sourceforge.net/jedit/?rev=16058&view=rev Author: ezust Date: 2009-08-25 16:58:34 +0000 (Tue, 25 Aug 2009) Log Message: ----------- Got rid of cvs props and actions. Updated docbook props in .sample Modified Paths: -------------- build-support/trunk/build.properties.sample build-support/trunk/plugin-build.xml Modified: build-support/trunk/build.properties.sample =================================================================== --- build-support/trunk/build.properties.sample 2009-08-25 14:07:57 UTC (rev 16057) +++ build-support/trunk/build.properties.sample 2009-08-25 16:58:34 UTC (rev 16058) @@ -114,16 +114,30 @@ # Title for javadoc documentation #javadoc.title=${ant.project.name} API -# Where to find the DocBook XML catalog file -# REQUIRED: xsltproc is skipped unless this is set. -#docbook.catalog=C:\\Programme\\DocBook\\XML\\4.2\\docbook.cat +# If xsltproc is in your path, uncomment this: +#xsltproc.executable=xsltproc -# Where to find the DocBook XML DTD -#docbookx.dtd=C:\\Programme\\DocBook\\XML\\4.2\\docbookx.dtd +# You can specify the absolute path of the win32 or cygwin binary +# (from the "libxslt" package) of xsltproc here: +#xsltproc.executable=C:/ppApps/xsltproc/xsltproc.exe -# Where to find the DocBook stylesheet -#docbook.xsl=C:\\Programme\\DocBook\\XSL\\1.70.1\\ +### For generating the docs, adjust the following to your local paths +### For xsltproc to work, the path to the DocBook stuff MUST NOT contain spaces! +# cygwin "docbook-xml44" and "docbook-xsl" packages +# can be used to install docbook-xml and docbook-dtd +# (example windows locations): +#docbook.catalog=c:/cygwin/usr/share/xml/docbook/4.4/docbook.cat +#docbook.xsl=c:/cygwin/usr/share/docbook-xsl + +# Debian location +#docbook.xsl=/usr/share/xml/docbook/stylesheet/nwalsh +#docbook.catalog=/usr/share/xml/docbook/schema/dtd/4.4/docbook.cat + +# Fink (Mac OS/X) location +#docbook.catalog=/sw/share/xml/dtd/docbookx/4.4.0/docbook.cat +#docbook.xsl=/sw/share/xml/xsl/docbook-xsl + # The name of the xsl stylesheet (without the path info) #docbook.xsl.sheet=html/chunk.xsl @@ -133,17 +147,6 @@ # The path to the xsltproc executable #xsltproc.executable=C:\\Programme\\xsltproc\\xsltproc.exe -# CVS options - -# CVS user name -#jedit.cvs.user=${user.name} - -# CVS_RSH value -#cvs.rsh=ssh - -# CVSROOT -#cvs.root=:ext:${jedit.cvs.user}@jedit.cvs.sourceforge.net:/cvsroot/jedit - # JUnit options # Where to find jUnit Modified: build-support/trunk/plugin-build.xml =================================================================== --- build-support/trunk/plugin-build.xml 2009-08-25 14:07:57 UTC (rev 16057) +++ build-support/trunk/plugin-build.xml 2009-08-25 16:58:34 UTC (rev 16058) @@ -44,6 +44,7 @@ several default properties used by the different targets. --> <!-- ================================================== --> + <property file="${user.home}/.build.properties" /> <property file="${user.home}/build.properties" /> <echo>${java.home}</echo> @@ -95,13 +96,9 @@ dirsep="/"> <path location="${docbook.xsl}/${docbook.xsl.sheet}" /> </pathconvert> + <property name="xsltproc.executable" value="xsltproc" /> - <!-- default cvs options --> - <property name="jedit.cvs.user" value="${user.name}" /> - <property name="cvs.rsh" value="ssh" /> - <property name="cvs.root" value=":ext:${jedit.cvs.user}@jedit.cvs.sourceforge.net:/cvsroot/jedit" /> - <!-- default junit options --> <property name="junit.jar" value="junit.jar" /> <property name="junit.testcase" value="${ant.project.name}TestSuite" /> @@ -534,39 +531,7 @@ <!--{{{ Dependencies ================================= --> - <!-- {{{ Target: cvs.update =========================== --> - <!-- Updates a plugin's source code from CVS. This - target expects one parameter, "plugin.name", - containing the name of the plugin's directory in - CVS (don't include the leading "plugins"; for - example, use "XML" for the XML Plugin. --> - <target name="cvs.update"> - <mkdir dir="${plugins.srcdir}" /> - <cvs command="update -dP" - compression="true" - cvsRsh="${cvs.rsh}" - cvsRoot="${cvs.root}" - dest="${plugins.srcdir}" - package="${plugin.name}" /> - </target> - <!-- ===============================================}}} --> - <!-- {{{ Target: update.dependencies ================== --> - <!-- This task iterates through the dependency list - defined in the property "plugin.dependencies" - as a comma-separated list of plugin names, calling - the "cvs.update" target for each dependency. --> - <target name="update.dependencies" - description="Download the most recent source of the needed plugins from CVS" - if="plugin.dependencies,ant-contrib.jar"> - <foreach list="${plugin.dependencies}" - target="cvs.update" - param="plugin.name" - delimiter="," - trim="true" /> - </target> - <!-- ===============================================}}} --> - <!-- {{{ Target: build.dependencies =================== --> <target name="build.dependencies" description="Builds the needed plugins from the available source code." This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2010-09-28 08:02:45
|
Revision: 18624 http://jedit.svn.sourceforge.net/jedit/?rev=18624&view=rev Author: kpouer Date: 2010-09-28 08:02:38 +0000 (Tue, 28 Sep 2010) Log Message: ----------- added ivy support for plugin compilation Modified Paths: -------------- build-support/trunk/plugin-build.xml Added Paths: ----------- build-support/trunk/ivysettings.properties build-support/trunk/ivysettings.xml Added: build-support/trunk/ivysettings.properties =================================================================== --- build-support/trunk/ivysettings.properties (rev 0) +++ build-support/trunk/ivysettings.properties 2010-09-28 08:02:38 UTC (rev 18624) @@ -0,0 +1 @@ +mirror=ovh \ No newline at end of file Added: build-support/trunk/ivysettings.xml =================================================================== --- build-support/trunk/ivysettings.xml (rev 0) +++ build-support/trunk/ivysettings.xml 2010-09-28 08:02:38 UTC (rev 18624) @@ -0,0 +1,13 @@ +<ivysettings> + <properties file="ivysettings.properties"/> + <resolvers> + <ibiblio name="maven" m2compatible="true" usepoms="false"/> + <url name="jedit-plugins-resolver"> + <artifact pattern="jar:http://${mirror}.dl.sourceforge.net/sourceforge/jedit-plugins/[artifact]-[revision]-bin.zip!/[artifact].jar" /> + </url> + </resolvers> + <modules> + <module organisation="jedit-plugins" name=".*" resolver="jedit-plugins-resolver"/> + <module organisation="*" name=".*" resolver="maven"/> + </modules> +</ivysettings> \ No newline at end of file Modified: build-support/trunk/plugin-build.xml =================================================================== --- build-support/trunk/plugin-build.xml 2010-09-28 04:30:48 UTC (rev 18623) +++ build-support/trunk/plugin-build.xml 2010-09-28 08:02:38 UTC (rev 18624) @@ -1,4 +1,4 @@ -<project name="jEditPlugin" default="build"> +<project xmlns:ivy="antlib:org.apache.ivy.ant" name="jEditPlugin" default="build"> <!-- {{{ Top-Level build file for jEdit plugins. ====== --> <!-- @@ -70,6 +70,7 @@ <property name="build.docs" value="${build.dir}/docs" /> <property name="build.javadoc" value="${build.docs}/javadoc" /> <property name="build.extras" value="${build.dir}/extras" /> + <property name="build.lib" value="${build.dir}/lib" /> <!-- default compiler flags --> <property name="compiler.debug" value="off" /> @@ -125,6 +126,9 @@ <path id="default.class.path"> <pathelement location="${jedit.install.dir}/jedit.jar" /> <pathelement location="${junit.jar}" /> + <fileset dir="${build.dir}"> + <include name="lib/*.jar"/> + </fileset> </path> <!-- this is the classpath used by the "compile" @@ -215,6 +219,51 @@ </and> </selector> + <!--{{{ Ivy setup *****============================== --> + <property name="ivy.install.version" value="2.2.0-rc1" /> + <condition property="ivy.home" value="${env.IVY_HOME}"> + <isset property="env.IVY_HOME" /> + </condition> + <property name="ivy.home" value="${user.home}/.ant" /> + <property name="ivy.jar.dir" value="${ivy.home}/lib" /> + <property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar" /> + <property name="ivy.settings.file" value="${build.support}/ivysettings.xml" /> + + <target name="download-ivy" unless="offline"> + + <mkdir dir="${ivy.jar.dir}"/> + <!-- download Ivy from web site so that it can be used even without any special installation --> + <get src="http://repo2.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar" + dest="${ivy.jar.file}" usetimestamp="true"/> + </target> + + <target name="init-ivy" depends="download-ivy"> + <!-- try to load ivy here from ivy home, in case the user has not already dropped + it into ant's lib dir (note that the latter copy will always take precedence). + We will not fail as long as local lib dir exists (it may be empty) and + ivy is in at least one of ant's lib dir or the local lib dir. --> + <path id="ivy.lib.path"> + <fileset dir="${ivy.jar.dir}" includes="*.jar"/> + + </path> + <taskdef resource="org/apache/ivy/ant/antlib.xml" + uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/> + </target> + <!--}}}--> + + <!--{{{ Target: resolve ============================== --> + <target name="checkIvy"> + <condition property="ivyPresent"> + <available file="ivy.xml" type="file"/> + </condition> + </target> + <target name="resolve" description="Retrieve dependencies" + depends="checkIvy,init-ivy" if="ivyPresent"> + <echo>ivy.xml present, retrieving dependencies</echo> + <ivy:retrieve pattern="${build.lib}/[artifact].[ext]"/> + </target> + <!-- ===============================================}}} --> + <!-- {{{ Target: compile ============================== --> <!-- Compiles all the ".java" files present in the directory pointed by the "src.dir" property @@ -233,7 +282,7 @@ compiler.source: the source option (1.5) compiler.listfiles: the listfiles option (no) --> <target name="compile" - description="Compile the plugin's classes"> + description="Compile the plugin's classes" depends="resolve"> <mkdir dir="${build.classes}" /> <jp.javac> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <el...@us...> - 2010-11-30 01:53:23
|
Revision: 19074 http://jedit.svn.sourceforge.net/jedit/?rev=19074&view=rev Author: elberry Date: 2010-11-30 01:53:17 +0000 (Tue, 30 Nov 2010) Log Message: ----------- Adding ci_release script to help with doing jEdit releases from Hudson. Added Paths: ----------- build-support/trunk/ci/ build-support/trunk/ci/ci_release.groovy Added: build-support/trunk/ci/ci_release.groovy =================================================================== --- build-support/trunk/ci/ci_release.groovy (rev 0) +++ build-support/trunk/ci/ci_release.groovy 2010-11-30 01:53:17 UTC (rev 19074) @@ -0,0 +1,130 @@ +#!/usr/bin/env groovy + +/** + * The Command class makes it easy to create a command line command and execute it. + */ +class Command { + String name + Map options + File directory + + Map execute() { + run(toParts()) + } + + protected Map run(List<String> commandParts) { + println "Executing: ${commandParts}" + def out = new StringBuffer() + def err = new StringBuffer() + def p = null; + long start = System.nanoTime() + try { + def pb = new ProcessBuilder() + pb.command(commandParts.toArray() as String[]) + pb.directory(directory) + p = pb.start() + } catch (Exception e) { + StringWriter writer = new StringWriter() + e.printStackTrace(new PrintWriter(writer)) + err.append(writer.toString()) + } + p?.waitForProcessOutput(out, err) + long end = System.nanoTime() + long runtime = end - start + def output = [value: p?.exitValue(), out: out.toString(), err: err.toString()] + output.execution = [start: start, end: end, runtime: runtime] + return output + } + + List<String> toParts() { + def parts = [name] + options.collect { + if(it.value) { + if(it.value instanceof Collection) { + [it.key, it.value.flatten()] + } else { + [it.key, it.value] + } + } else { + [it.key] + } + } + parts.flatten() + } + + String toString() { + return toParts().join(" ") + } +} + + +def props = System.properties +def env = System.env + +String baseUrl = "https://jedit.svn.sourceforge.net/svnroot/jedit/jEdit" + +String workspace = props.get("user.dir") + +// Delete tag if it already exists +String tagUrl = "${baseUrl}/branches/ci_release_test/${env.release_tag_name}" +def command = new Command(name: "svn", options: [ + "delete": tagUrl, + "-m": '"Tag deleted by Hudson CI to be recreated."' +]) +def output = command.execute() +// we ignore the output. The tag will be created regardless. + +// Create tag +command = new Command(name: "svn", options: [ + "copy": ["${baseUrl}/${env.release_branch}", "${tagUrl}"], + "-m": "\"Tag created by Hudson CI - Version: ${env.release_version}\"" +]) +output = command.execute() + +if(output.value != 0) { + println " code: ${output.value}" + println " err: ${output.err}" + println " out: ${output.out}" + System.exit(output.value) +} + +// checkout the new tag. +command = new Command(name: "svn", options: [ + "co": [tagUrl, "jedit"] +]) +output = command.execute() +if(output.value == 0) { + println "Tag checked out into 'jedit' directory" +} + +println "Copying properties over to appropriate directories" +String xsl = props.get("docbook.xsl") +String catalog = props.get("docbook.catalog") +String xsltproc = props.get("xsltproc.executable") +String fopDir = props.get("fop.dir") +String launch4j = props.get("launch4j.dir") +String installDir = props.get("install.dir") +String pluginsDir = props.get("jedit.plugins.dir") +String jeditJarsDir = props.get("jedit.jars.dir") + +def jeditProps = """ci.workspace=${workspace} +docbook.xsl=${xsl} +docbook.catalog=${catalog} +xsltproc.executable=${xsltproc} +fop.dir=${fopDir} +launch4j.dir=${launch4j} +""" + +def pluginProps = """${jeditProps} +install.dir=${installDir} +jedit.plugins.dir=${pluginsDir} +jedit.jars.dir=${jeditJarsDir} +""" + +File jeditPropsFile = new File(workspace, "jedit/build.properties") +File pluginPropsFile = new File(workspace, "jedit/jars/build.properties") +/* NOTE: this assumes that you are not using "update" in the + SCM section. This script appends the properties to the + files, it does not replace them. */ +jeditPropsFile.append(jeditProps) + +pluginPropsFile.append(pluginProps) Property changes on: build-support/trunk/ci/ci_release.groovy ___________________________________________________________________ Added: svn:executable + * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2011-10-28 20:01:32
|
Revision: 20154 http://jedit.svn.sourceforge.net/jedit/?rev=20154&view=rev Author: ezust Date: 2011-10-28 20:01:25 +0000 (Fri, 28 Oct 2011) Log Message: ----------- updating docs.upload Modified Paths: -------------- build-support/trunk/build.properties.sample build-support/trunk/plugin-build.xml Modified: build-support/trunk/build.properties.sample =================================================================== --- build-support/trunk/build.properties.sample 2011-10-28 19:38:06 UTC (rev 20153) +++ build-support/trunk/build.properties.sample 2011-10-28 20:01:25 UTC (rev 20154) @@ -79,10 +79,10 @@ #compiler.nowarn=off # Target JVM version -#compiler.target=1.4 +#compiler.target=1.5 # Java version of the source files -#compiler.source=1.4 +#compiler.source=1.5 # List files being compiled #compiler.listfiles=no @@ -100,6 +100,7 @@ # Documentation build options # What target to use for the docs +# can be 'none' if you provide HTML docs that are not generated #docs-proc.target=xsltproc # Stylesheet file to use Modified: build-support/trunk/plugin-build.xml =================================================================== --- build-support/trunk/plugin-build.xml 2011-10-28 19:38:06 UTC (rev 20153) +++ build-support/trunk/plugin-build.xml 2011-10-28 20:01:25 UTC (rev 20154) @@ -233,7 +233,7 @@ <mkdir dir="${ivy.jar.dir}"/> <!-- download Ivy from web site so that it can be used even without any special installation --> - <get src="http://repo2.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar" + <get src="http://repo2.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar" dest="${ivy.jar.file}" usetimestamp="true"/> </target> @@ -257,7 +257,7 @@ <available file="ivy.xml" type="file"/> </condition> </target> - <target name="resolve" description="Retrieve dependencies" + <target name="resolve" description="Retrieve dependencies" depends="checkIvy,init-ivy" if="ivyPresent"> <echo>ivy.xml present, retrieving dependencies</echo> <ivy:retrieve pattern="${build.lib}/[artifact].[ext]"/> @@ -458,7 +458,7 @@ <target name="upload.docs" depends="javadoc, userdocs" description="upload documentation to plugins.jedit.org site" > <exec dir="${build.docs}" executable="rsync"> - <arg line="-avz ./ ${sourceforge.user.name}@plugins.jedit.org:/home/groups/j/je/jedit-plugins/htdocs/plugindoc/${ant.project.name}" /> + <arg line="-avz ./ ${sourceforge.user.name},je...@sh...:/home/project-web/jedit-plugins/htdocs/plugindoc/${ant.project.name}" /> </exec> </target> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jar...@us...> - 2012-02-26 16:30:12
|
Revision: 21214 http://jedit.svn.sourceforge.net/jedit/?rev=21214&view=rev Author: jarekczek Date: 2012-02-26 16:30:03 +0000 (Sun, 26 Feb 2012) Log Message: ----------- build.support: Added ability to automatically download the plugins being dependencies specified in props file of another plugin, FR #3488089. Functionality of parsing plugins' props files added by the way to plugin-build.xml. By the way added build-helper.xml ant library which allows fast inclusion of libraries, for example necessary to run scripts. This functionality is based on ivy. The way plugins are build is not changed yet. Modified Paths: -------------- build-support/trunk/plugin-build.xml Added Paths: ----------- build-support/trunk/build-helper.xml build-support/trunk/ivy.plugin.deps.template.xml build-support/trunk/ivy.xml Added: build-support/trunk/build-helper.xml =================================================================== --- build-support/trunk/build-helper.xml (rev 0) +++ build-support/trunk/build-helper.xml 2012-02-26 16:30:03 UTC (rev 21214) @@ -0,0 +1,265 @@ +<project name="jedit-build-helper" default="build" + xmlns:ivy="antlib:org.apache.ivy.ant" > + +<!-- :noTabs=true:tabSize=2:folding=explicit:collapseFolds=1: + +This file is part of jedit, but it contains general purpose helper macros +for use in any ant script. + +Copyright (C) 2012 Jarek Czekalski <jar...@po...> + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +--> + +<!-- ==================== USAGE ======================= +This file should be imported to use its functionality. + +depends="get-lib-ivy" +depends="get-lib-scripting" +<get-lib name=xxx /> + to support a new library add it as a conf to ivy.xml file + and create a target get-lib-xxx +<propertycopy name= from= /> - set property @{name} to ${${from}} + +Properties considered private are prefixed with jbh. to avoid conflicts +with properties from calling projects +--> + +<!-- Properties allowing customization --> +<!-- <property name="ivy.install.version" value="2.2.0" />--> +<!-- <property name="jbh.ivy.file" value="" /> --> + +<!-- {{{ Private part ================================= --> + +<!-- {{{ jbh.set-properties macro ===================== --> +<macrodef name="jbh.set-properties"> + <sequential> + <property name="jbh.file" value="${ant.file.jedit-build-helper}" /> + <pathconvert property="jbh.dir"> + <path><pathelement location="${jbh.file}" /></path> + <mapper type="regexp" from="(.*)[/\\]([^/\\]*)" to="\1" /> + </pathconvert> + <property name="ivy.install.version" value="2.2.0" /> + <property name="jbh.ivy.file" value="${jbh.dir}/ivy.xml" /> + </sequential> +</macrodef> +<!-- }}} ============================================== --> + +<!-- }}} ============================================== --> + +<!-- {{{ General purpose macros ======================= --> + +<!-- {{{ propertycopy macro =========================== --> +<!-- a workaround for indirect property expansion taken from + http://ant.apache.org/faq.html#propertyvalue-as-name-for-property --> +<macrodef name="propertycopy"> + <attribute name="name"/> + <attribute name="from"/> + <sequential> + <property name="@{name}" value="${@{from}}"/> + </sequential> +</macrodef> +<!-- }}} ============================================== --> + +<!-- {{{ dump-prop-ref macro ========================== --> +<!-- Dumps the value of the data with the given reference --> +<macrodef name="dump-prop-ref"> + <attribute name="refid"/> + <sequential> + <local name="x" /> + <property name="x" refid="@{refid}" /> + <echo message="@{refid}: ${x}" /> + </sequential> +</macrodef> +<!-- }}} ============================================== --> + +<!-- }}} ============================================== --> + +<!-- {{{ Macros for checking existance of files an directories --> + +<!-- {{{ Private part ================================= --> + +<!-- {{{ check-file-dir-var macro ===================== --> +<macrodef name="check-file-dir-var"> + <!-- private --> + <attribute name="type" /> + <attribute name="var" /> + <sequential> + <local name="file" /> + <local name="desc" /> + <propertycopy name="file" from="@{var}" /> + <condition property="desc" value="file" else="directory"> + <equals arg1="@{type}" arg2="file" /> + </condition> + <!--<echo>Checking ${desc} ${file} from property @{var}</echo>--> + <fail message="Property not set: @{var}" + unless="@{var}" /> + <fail message="The ${desc} ${file} pointed by property @{var} does not exist. "> + <condition> + <not><available file="${file}" type="@{type}" /></not> + </condition> + </fail> + </sequential> +</macrodef> +<!-- }}} ============================================== --> + +<!-- }}} ============================================== --> + +<!-- {{{ check-file-var macro ========================= --> +<!-- Checks whether a property ${var} is defined and whether + a file exists --> +<macrodef name="check-file-var"> + <attribute name="var" /> + <sequential> + <check-file-dir-var type="file" var="@{var}" /> + </sequential> +</macrodef> +<!-- }}} ============================================== --> + +<!-- {{{ check-dir-var macro ========================== --> +<!-- Checks whether a property ${var} is defined and whether + a directory exists --> +<macrodef name="check-dir-var"> + <attribute name="var" /> + <sequential> + <check-file-dir-var type="dir" var="@{var}" /> + </sequential> +</macrodef> +<!-- }}} ============================================== --> + +<!-- }}} ============================================== --> + +<!-- {{{ Ivy macros and targets ======================= --> + +<!-- {{{ Private part ================================= --> + +<!-- {{{ download-ivy target ========================== --> +<!-- Private. Use get-ivy instead --> +<target name="download-ivy" unless="jbh.ivy.no-download"> + <echo>Downloading ivy.jar to ${ivy.jar.file}</echo> + <property name="ivy.install.version" value="2.2.0" /> + <get src="http://repo2.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar" + dest="${ivy.jar.file}" /> +</target> +<!-- }}} ============================================== --> + +<!-- {{{ ivy.download-lib target ====================== --> +<!-- Private. Use macrodef get-lib instead --> +<target name="ivy.download-lib" unless="jbh.lib.present" > + <ivy:retrieve pattern="${lib.dir}/${name}/[artifact].[ext]" + file="${jbh.ivy.file}" conf="${name}" /> +</target> +<!-- }}} ============================================== --> + +<!-- {{{ get-lib target =============================== --> +<!-- Private. Use macrodef get-lib instead --> +<!-- Separate target is necessary here, because we need to set a property + which must be cancelled for subsequent calls --> +<target name="get-lib"> + <available file="${lib.dir}/${name}" type="dir" + property="jbh.lib.present" /> + <antcall target="ivy.download-lib"> + <param name="name" value="${name}" /> + </antcall> +</target> +<!-- }}} ============================================== --> + +<!-- }}} ============================================== --> + +<!-- {{{ get-ivy macro ================================ --> + +<!-- Downloads ivy if it is not already on disk in ${ivy.jar.file}. + ${ivy.jar.file} set to ${lib.dir}/ivy/ivy.jar + Defines ivy tasks. --> +<macrodef name="get-ivy" > + <sequential> + <jbh.set-properties /> + <fail unless="lib.dir">Property lib.dir must be defined.</fail> + <mkdir dir="${lib.dir}" /> + <available property="lib.dir.ok" type="dir" file="${lib.dir}" /> + <fail unless="lib.dir.ok">Directory ${lib.dir} does not exist.</fail> + <mkdir dir="${lib.dir}/ivy" /> + <property name="ivy.jar.file" value="${lib.dir}/ivy/ivy.jar" /> + <condition property="jbh.ivy.no-download" value="true"> + <and> + <not><isset property="force-download" /></not> + <available file="${ivy.jar.file}" /> + </and> + </condition> + <antcall target="jedit-build-helper.download-ivy" /> + <path id="ivy.jar.path"> + <pathelement path="${ivy.jar.file}"/> + </path> + <taskdef resource="org/apache/ivy/ant/antlib.xml" + uri="antlib:org.apache.ivy.ant" classpathref="ivy.jar.path"/> + <property name="get.lib.ivy.done" value="true" /> + </sequential> +</macrodef> + +<!-- }}} ============================================== --> + +<!-- {{{ get-lib macro ================================ --> + +<!-- Download the library @name. If the library is on disk, network is not + employed. You can force download with ${force-download} or by + removing the ${lib.dir}/@{name} directory. + Sets the path with id lib.@{name}.path. + + Example of usage: + <property name="lib.dir" value="${basedir}/lib" /> + <get-lib name="scripting" /> + <script language="beanshell" classpathref="lib.scripting.path" > + print("hi"); + </script> + + --> +<macrodef name="get-lib"> + <attribute name="name" /> + <sequential> + <jbh.set-properties /> + <check-file-var var="jbh.ivy.file" /> + <get-ivy /> + <echo>Getting library @{name} into ${lib.dir}</echo> + <antcall target="jedit-build-helper.get-lib"> + <param name="name" value="@{name}" /> + </antcall> + <property name="get.lib.@{name}.done" value="true" /> + <path id="lib.@{name}.path"> + <fileset dir="${lib.dir}/@{name}" includes="*.jar" /> + </path> + </sequential> +</macrodef> + +<!-- }}} ============================================== --> + +<!-- {{{ specific get-lib targets ===================== --> +<target name="get-lib-ivy" unless="get.lib.ivy.done"> + <get-ivy /> +</target> + +<target name="get-lib-scripting" depends="get-lib-ivy" + unless="get.lib.scripting.done" > + <get-lib name="scripting" /> +</target> +<!-- }}} ============================================== --> + +<!-- }}} ============================================== --> + +<!-- explicit fold - copy and paste --> +<!-- {{{ ============================================== --> +<!-- }}} ============================================== --> + +</project> Added: build-support/trunk/ivy.plugin.deps.template.xml =================================================================== --- build-support/trunk/ivy.plugin.deps.template.xml (rev 0) +++ build-support/trunk/ivy.plugin.deps.template.xml 2012-02-26 16:30:03 UTC (rev 21214) @@ -0,0 +1,9 @@ +<ivy-module version="2.0"> + +<info organisation="jedit-plugins" module="???"/> + +<dependencies> +<!--<dependency org="jedit-plugins" name="ErrorList" rev="1.9"/>--> +</dependencies> + +</ivy-module> Added: build-support/trunk/ivy.xml =================================================================== --- build-support/trunk/ivy.xml (rev 0) +++ build-support/trunk/ivy.xml 2012-02-26 16:30:03 UTC (rev 21214) @@ -0,0 +1,87 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ jEdit - Programmer's Text Editor + ~ :tabSize=8:indentSize=8:noTabs=false: + ~ :folding=explicit:collapseFolds=1: + ~ + ~ Copyright © 2011 jEdit contributors + ~ + ~ This program is free software; you can redistribute it and/or + ~ modify it under the terms of the GNU General Public License + ~ as published by the Free Software Foundation; either version 2 + ~ of the License, or any later version. + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of + ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ~ GNU General Public License for more details. + ~ + ~ You should have received a copy of the GNU General Public License + ~ along with this program; if not, write to the Free Software + ~ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + --> + +<ivy-module version="2.0" + xmlns:e="http://ant.apache.org/ivy/extra" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"> + + <info organisation="org.jedit" module="jedit"> + <license name="GPLv2" url="http://www.gnu.org/licenses/gpl-2.0.txt"/> + <ivyauthor name="Björn "Vampire" Kautler"/> + <description homepage="http://www.jEdit.org"> + jEdit - Programmer's Text Editor + </description> + </info> + + <configurations confmappingoverride="true" + defaultconfmapping="sources,javadoc->@; + compile->master; + %->default"> + <conf name="default" description="Runtime dependencies and master artifacts" extends="master, runtime"/> + <conf name="master" description="Artifacts of this module without dependencies"/> + <conf name="compile" description="Compile dependencies" visibility="private" transitive="false"/> + <conf name="runtime" description="Runtime dependencies" extends="compile"/> + <conf name="test" description="Testing dependencies" visibility="private" extends="runtime"/> + <conf name="provided" description="Provided dependencies" visibility="private"/> + <conf name="sources" description="Source artifacts" visibility="private"/> + <conf name="javadoc" description="JavaDoc artifacts" visibility="private"/> + <conf name="ant-contrib" description="Dependencies for ant-contrib" visibility="private"/> + <conf name="docbook" description="Dependencies for translating DocBook files" visibility="private"/> + <conf name="fop" description="Dependencies for FOP" visibility="private"/> + <conf name="jarbundler" description="Dependencies for JarBundler" visibility="private"/> + <conf name="launch4j" description="Dependencies for Launch4j" visibility="private"/> + <conf name="scripting" description="Dependencies for Scripting" visibility="private"/> + <conf name="default-plugins" description="Shipped default plugins" visibility="private"/> + </configurations> + + <publications defaultconf="master"/> + + <dependencies defaultconf="compile;sources;javadoc"> + <dependency org="ant-contrib" name="ant-contrib" rev="1.0b3" conf="ant-contrib"/> + + <dependency org="junit" name="junit-dep" rev="4.10" conf="test;sources;javadoc"/> + <dependency org="org.hamcrest" name="hamcrest-library" rev="1.2.1" conf="test;sources;javadoc"/> + + <dependency org="saxon" name="saxon" rev="6.5.3" conf="docbook"/> + <dependency org="net.sf.docbook" name="docbook-xsl" rev="1.76.1" conf="docbook"> + <artifact name="docbook-xsl" e:classifier="resources" type="zip"/> + </dependency> + <dependency org="net.sf.docbook" name="docbook-xsl-saxon" rev="1.0.0" conf="docbook"/> + <dependency org="xerces" name="xercesImpl" rev="2.10.0" conf="docbook,jarbundler"/> + + <dependency org="org.apache.xmlgraphics" name="fop" rev="1.0" conf="fop"/> + + <dependency org="net.sf.launch4j" name="launch4j" rev="3.0.2" conf="launch4j"> + <artifact name="launch4j" e:classifier="win32" type="zip"/> + <artifact name="launch4j" e:classifier="macosx" type="tgz"/> + <artifact name="launch4j" e:classifier="linux" type="tgz"/> + </dependency> + + <dependency org="org.jedit.plugins" name="MacOSX" rev="1.2" conf="default-plugins"/> + <dependency org="org.jedit.plugins" name="QuickNotepad" rev="4.4" conf="default-plugins"/> + + <dependency org="bsf" name="bsf" rev="2.4.0" conf="scripting"/> + <dependency org="org.beanshell" name="bsh" rev="2.0b4" conf="scripting"/> + <dependency org="org.bouncycastle" name="bcpg-jdk16" rev="1.46" conf="scripting"/> + </dependencies> +</ivy-module> Modified: build-support/trunk/plugin-build.xml =================================================================== --- build-support/trunk/plugin-build.xml 2012-02-26 15:14:49 UTC (rev 21213) +++ build-support/trunk/plugin-build.xml 2012-02-26 16:30:03 UTC (rev 21214) @@ -36,6 +36,8 @@ --> <!-- ===============================================}}} --> + <import file="${build.support}/build-helper.xml" /> + <!-- {{{ Property definitions ========================= --> <!-- First loads options from the user's optional build.properties files in the following order: @@ -49,7 +51,7 @@ <property file="${basedir}/../build.properties" /> <property file="${user.home}/.build.properties" /> <property file="${user.home}/build.properties" /> - <echo>${java.home}</echo> + <!-- <echo>plugin-build java.home=${java.home}</echo> --> <!-- where to find jEdit and plugins --> <property name="sourceforge.user.name" value="${user.name}" /> @@ -147,60 +149,6 @@ <!-- ===============================================}}} --> - <!-- {{{ Helper macros ================================ --> - - <macrodef name="check-file-var"> - <!--Checks whether a variable ${var} is defined and whether - a file exists--> - <attribute name="var" /> - <sequential> - <check-file-dir-var type="file" var="@{var}" /> - </sequential> - </macrodef> - - <macrodef name="check-dir-var"> - <!--Checks whether a variable ${var} is defined and whether - a directory exists--> - <attribute name="var" /> - <sequential> - <check-file-dir-var type="dir" var="@{var}" /> - </sequential> - </macrodef> - - <macrodef name="check-file-dir-var"> - <!-- private --> - <attribute name="type" /> - <attribute name="var" /> - <sequential> - <local name="file" /> - <local name="desc" /> - <propertycopy name="file" from="@{var}" /> - <condition property="desc" value="file" else="directory"> - <equals arg1="@{type}" arg2="file" /> - </condition> - <echo>Checking ${desc} ${file} from property @{var}</echo> - <fail message="Please set "@{var}" in build.properties" - unless="@{var}" /> - <fail message="The ${desc} ${file} pointed by variable @{var} does not exist. Check build.properties"> - <condition> - <not><available file="${file}" type="@{type}" /></not> - </condition> - </fail> - </sequential> - </macrodef> - - <macrodef name="propertycopy"> - <!-- a workaround for indirect property expansion taken from - http://ant.apache.org/faq.html#propertyvalue-as-name-for-property --> - <attribute name="name"/> - <attribute name="from"/> - <sequential> - <property name="@{name}" value="${@{from}}"/> - </sequential> - </macrodef> - - <!-- }}} ============================================== --> - <!-- {{{ Custom javac task ============================ --> <presetdef name="jp.javac"> <javac destdir="${build.classes}" @@ -674,6 +622,209 @@ </target> <!-- ===============================================}}} --> + <!-- {{{ get-plugin-jar-name macro ==================== --> +<!-- Takes class-name and insert jar name for the class into output-prop + property. This is needed only for plugins that are dependencies for + other plugins. Conversion from class name to jar name is not always + straightforward as there are no strict rules for that. Here are some + rules applied and then exceptions come. + Requires earlier call to get-lib scripting + --> +<macrodef name="get-plugin-jar-name"> + <attribute name="class-name" /> + <attribute name="output-prop" /> + <sequential> + <local name="attr-class-name" /> + <local name="attr-output-prop" /> + <property name="attr-class-name" value="@{class-name}" /> + <property name="attr-output-prop" value="@{output-prop}" /> + <script language="beanshell" classpathref="lib.scripting.path" > + sJarName = project.getProperty("attr-class-name"); + sJarName = sJarName.replaceFirst("^.*\\.([^\\.]+)$", "$1"); + if (sJarName.length()>9) { + sJarName = sJarName.replaceFirst("^(.*)Plugin", "$1"); + } + if (sJarName.equals("JNA") || + sJarName.equals("SVN") || + sJarName.equals("JDiff") || + sJarName.equals("Xerces")) sJarName += "Plugin"; + if (sJarName.equals("Project")) sJarName = "ProjectViewer"; + project.setProperty(project.getProperty("attr-output-prop"), + sJarName); + //print(sJarName); + </script> + </sequential> +</macrodef> +<!-- ===================================================}}} --> + + <!-- {{{ get-plugin-info target======================== --> + <!-- + Parses files from src.dir using selectors compileFiles and extraFiles + Downloads necessary libraries into build directory. + Sets properties: + plugin.class.name - e.g. projectviewer.ProjectPlugin + plugin.jar.name - e.g. ProjectViewer + plugin.jedit.version.full - e.g. 4.4.99.0 + plugin.jedit.version - e.g. 4.4 + plugin.dep.X.class - e.g. CommonControlsPlugin, X=0..n + plugin.dep.X.version - e.g. 1.3 + plugin.dep.X.jar.name - e.g. CommonControls + --> +<target name="get-plugin-info" depends="get-lib-scripting" > + <local name="src.fileset" /> + <fileset id="src.fileset" dir="${src.dir}" > + <or> + <selector refid="compileFiles" /> + <selector refid="extraFiles" /> + </or> + </fileset> + <script language="beanshell" classpathref="lib.scripting.path" > + + String getPluginClassName(fs) { // {{{ + for (f: fs.iterator()) { + if (f.toString().endsWith("Plugin.java")) { + sPluginClass = f.toString().substring(sBaseDir.length()+1); + sPluginClass = sPluginClass.replaceFirst("\\.java$", ""); + sPluginClass = sPluginClass.replaceAll("[/\\\\]", "."); + break; + } + } + project.setProperty("plugin.class.name", sPluginClass); + return sPluginClass; + } //}}} + + fs = project.getReference("src.fileset"); + sBaseDir = fs.getDir().toString(); + //ps = new org.apache.tools.ant.types.PropertySet(); + ps = project.createDataType("propertyset"); + //ps.setProject(project); + project.addReference("plugin.props.set", ps); + //print("no files:" + fs.size()); + + sPluginClass = getPluginClassName(fs); + ps.appendName("plugin.class.name"); + ps.appendName("plugin.jar.name"); + + // load all props files {{{ + props = new Properties(); + for (f: fs.iterator()) { + if (f.toString().endsWith(".props")) { + props.load(f.getInputStream()); + } + } // }}} + + // read depends + // see PluginJAR.checkDependencies() + i = 0; iPluginDep = 0; + sDepPropName = "plugin." + sPluginClass + ".depend."; + while((dep = props.getProperty(sDepPropName + i)) != null) { + deps = dep.split(" "); + if (deps[0].equals("jedit")) { + project.setProperty("plugin.jedit.version.full", deps[1]); + v = deps[1].split("\\."); + project.setProperty("plugin.jedit.version", v[0] + "." + v[1]); + ps.appendName("plugin.jedit.version.full"); + ps.appendName("plugin.jedit.version"); + } + if (deps[0].equals("optional")) { + // ignore the optional keyword, treat as usual plugin dep + deps = java.util.Arrays.copyOfRange(deps, 1, deps.length); + } + if (deps[0].equals("plugin")) { + //print("" + iPluginDep + deps[1] + "-" + deps[2]); + sPref = "plugin.dep." + iPluginDep; + sDepPluginClass = deps[1]; + project.setProperty(sPref + ".class", sDepPluginClass); + project.setProperty(sPref + ".version", deps[2]); + ps.appendRegex(sPref + "\\.*"); + m = project.createTask("get-plugin-jar-name"); + m.setDynamicAttribute("class-name", deps[1]); + m.setDynamicAttribute("output-prop", sPref + ".jar.name"); + m.execute(); + iPluginDep++; + } + + i++; + } + </script> + <get-plugin-jar-name class-name="${plugin.class.name}" + output-prop="plugin.jar.name" /> +</target> +<!-- }}} ================================================== --> + + <!-- {{{ gen-plugin-deps-ivy-file target ============== --> +<!-- Generates an ivy.xml file specified by property plugin.deps.ivy.file + based on plugin.deps.ivy.template --> +<target name="gen-plugin-deps-ivy-file" + depends="get-plugin-info, get-lib-scripting" + unless="plugin.deps.present" > + <script language="beanshell" classpathref="lib.scripting.path"> + sTemplFile = project.getProperty("plugin.deps.ivy.template"); + sOutFile = project.getProperty("plugin.deps.ivy.file"); + builder = javax.xml.parsers.DocumentBuilderFactory.newInstance() + .newDocumentBuilder(); + doc = builder.parse(new File(sTemplFile)); + docElem = doc.getDocumentElement(); + lfNode = doc.createTextNode(System.getProperty("line.separator")); + info = docElem.getElementsByTagName("info").item(0); + info.setAttribute("module", project.getProperty("plugin.jar.name")); + deps = docElem.getElementsByTagName("dependencies").item(0); + iDep = 0; + while (true) { + sDepProp = "plugin.dep." + iDep; + sDepClass = project.getProperty(sDepProp + ".class"); + if (sDepClass == null) { break; } + sDepJarName = project.getProperty(sDepProp + ".jar.name"); + sDepVer = project.getProperty(sDepProp + ".version"); + + dep = doc.createElement("dependency"); + dep.setAttribute("org", "jedit-plugins"); + dep.setAttribute("name", sDepJarName); + dep.setAttribute("rev", sDepVer); + deps.appendChild(dep); + deps.appendChild(lfNode.cloneNode(true)); + + iDep++; + } + transformer = javax.xml.transform.TransformerFactory.newInstance() + .newTransformer(); + src = new javax.xml.transform.dom.DOMSource(doc); + dest = new javax.xml.transform.stream.StreamResult(new File(sOutFile)); + transformer.transform(src, dest); + </script> +</target> +<!-- }}} ================================================== --> + + <!-- {{{ check-plugin-deps-dir target ================= --> +<!-- Checks whether the directory exists. If it exists, then + presence of all plugin dependencies is assumed. + To force re-downloading remove the ${lib.dir}/plugin-deps directory + --> +<target name="check-plugin-deps-dir" > + <property name="plugin.deps.dir" value="${lib.dir}/plugin-deps" /> + <condition property="plugin.deps.present"> + <available file="${plugin.deps.dir}" type="dir" /> + </condition> +</target> +<!-- }}} ================================================== --> + + <!-- {{{ download-plugin-deps target ================== --> +<!-- + --> +<target name="download-plugin-deps" + depends="check-plugin-deps-dir, get-lib-ivy" + unless="plugin.deps.present"> + <property name="plugin.deps.ivy.template" + value="${build.support}/ivy.plugin.deps.template.xml" /> + <property name="plugin.deps.ivy.file" + value="${basedir}/build/ivy.plugin.deps.xml" /> + <check-file-var var="plugin.deps.ivy.template" /> + <antcall target="gen-plugin-deps-ivy-file" /> + <ivy:retrieve file="${plugin.deps.ivy.file}" + pattern="${plugin.deps.dir}/[artifact].[ext]" /> +</target> +<!-- }}} ================================================== --> + <!-- ================================================== }}}--> </project> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jar...@us...> - 2012-03-03 17:34:28
|
Revision: 21243 http://jedit.svn.sourceforge.net/jedit/?rev=21243&view=rev Author: jarekczek Date: 2012-03-03 17:34:20 +0000 (Sat, 03 Mar 2012) Log Message: ----------- 1. Changed the way target download-plugin-deps works: zip files are downloaded and then unpacked. It allows downloading of additional files if they are in plugin zip-files, like in case of CommonControls containing kappalayout.jar 2. Prepared the environment to compile custom tasks. Custom tasks are in build.support/java-src directory. 3. Refactored plugin release target to use custom ant tasks instead of beanshell script. Beanshell script doesn't allow for proper code reusage which will be needed for further improvements in plugin release area. 4. Added jedit-plugins-zip resolver to allow for downloading whole plugin zips. This way is chosen by setting organisation to "jedit-plugins-zip" in the ivy file. Modified Paths: -------------- build-support/trunk/build-helper.xml build-support/trunk/ivy.plugin.deps.template.xml build-support/trunk/ivysettings.xml build-support/trunk/plugin-build.xml Added Paths: ----------- build-support/trunk/java-src/ build-support/trunk/java-src/org/ build-support/trunk/java-src/org/jedit/ build-support/trunk/java-src/org/jedit/ant/ build-support/trunk/java-src/org/jedit/ant/GenPluginDepsIvyFileTask.java build-support/trunk/java-src/org/jedit/ant/GetPluginInfoTask.java build-support/trunk/java-src/org/jedit/ant/GetPluginJarNameTask.java build-support/trunk/java-src/org/jedit/ant/antlib.xml Property Changed: ---------------- build-support/trunk/ Property changes on: build-support/trunk ___________________________________________________________________ Modified: svn:ignore - lib \.hg* + build lib \.hg* Modified: build-support/trunk/build-helper.xml =================================================================== --- build-support/trunk/build-helper.xml 2012-03-02 19:36:51 UTC (rev 21242) +++ build-support/trunk/build-helper.xml 2012-03-03 17:34:20 UTC (rev 21243) @@ -129,6 +129,17 @@ </macrodef> <!-- }}} ============================================== --> +<!-- {{{ check-prop macro ============================= --> +<!-- Checks whether a property ${prop} is set. --> +<macrodef name="check-prop"> + <attribute name="prop" /> + <sequential> + <fail message="Property not set: @{prop}" + unless="@{prop}" /> + </sequential> +</macrodef> +<!-- }}} ============================================== --> + <!-- {{{ check-dir-var macro ========================== --> <!-- Checks whether a property ${var} is defined and whether a directory exists --> Modified: build-support/trunk/ivy.plugin.deps.template.xml =================================================================== --- build-support/trunk/ivy.plugin.deps.template.xml 2012-03-02 19:36:51 UTC (rev 21242) +++ build-support/trunk/ivy.plugin.deps.template.xml 2012-03-03 17:34:20 UTC (rev 21243) @@ -3,7 +3,7 @@ <info organisation="jedit-plugins" module="???"/> <dependencies> -<!--<dependency org="jedit-plugins" name="ErrorList" rev="1.9"/>--> +<!--<dependency org="jedit-plugins-zip" name="ErrorList" rev="1.9"/>--> </dependencies> </ivy-module> Modified: build-support/trunk/ivysettings.xml =================================================================== --- build-support/trunk/ivysettings.xml 2012-03-02 19:36:51 UTC (rev 21242) +++ build-support/trunk/ivysettings.xml 2012-03-03 17:34:20 UTC (rev 21243) @@ -3,11 +3,17 @@ <resolvers> <ibiblio name="maven" m2compatible="true" usepoms="false"/> <url name="jedit-plugins-resolver"> - <artifact pattern="jar:http://${mirror}.dl.sourceforge.net/sourceforge/jedit-plugins/[artifact]-[revision]-bin.zip!/[artifact].jar" /> - </url> + <artifact pattern="jar:http://${mirror}.dl.sourceforge.net/sourceforge/jedit-plugins/[artifact]-[revision]-bin.zip!/[artifact].jar" /> + </url> + <url name="jedit-plugins-zip-resolver"> + <artifact pattern="http://${mirror}.dl.sourceforge.net/sourceforge/jedit-plugins/[artifact]-[revision]-bin.zip" /> + </url> </resolvers> <modules> - <module organisation="jedit-plugins" name=".*" resolver="jedit-plugins-resolver"/> + <module organisation="jedit-plugins-zip" name=".*" + resolver="jedit-plugins-zip-resolver"/> + <module organisation="jedit-plugins" name=".*" + resolver="jedit-plugins-resolver"/> <module organisation="*" name=".*" resolver="maven"/> </modules> </ivysettings> \ No newline at end of file Added: build-support/trunk/java-src/org/jedit/ant/GenPluginDepsIvyFileTask.java =================================================================== --- build-support/trunk/java-src/org/jedit/ant/GenPluginDepsIvyFileTask.java (rev 0) +++ build-support/trunk/java-src/org/jedit/ant/GenPluginDepsIvyFileTask.java 2012-03-03 17:34:20 UTC (rev 21243) @@ -0,0 +1,119 @@ +/* + * Definition of a task for jedit build environment. + * :tabSize=2:indentSize=2:noTabs=true: + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 2012 Jarek Czekalski + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package org.jedit.ant; + +import java.io.File; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.Task; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +/** Generates an <code>ivy.xml</code> file specified by property + plugin.deps.ivy.file based on plugin.deps.ivy.template. + There is a problem in automatic creation of parent directory + of plugin.deps.ivy.file, so it must be done manually before calling + this target. + */ + +public class GenPluginDepsIvyFileTask extends Task +{ + private String sTemplateFile; + private String sOutFile; + private Project p; + + @Override + public void execute() + { + p = getProject(); + if (sTemplateFile == null) { + throw new BuildException("\"template\" parameter not specified."); + } + if (sOutFile == null) { + throw new BuildException("\"outFile\" parameter not specified."); + } + + try { + DocumentBuilder builder = DocumentBuilderFactory.newInstance() + .newDocumentBuilder(); + Document doc = builder.parse(new File(sTemplateFile)); + Element docElem = doc.getDocumentElement(); + Node lfNode = doc.createTextNode(System.getProperty("line.separator")); + Element info = (Element)docElem.getElementsByTagName("info").item(0); + info.setAttribute("module", p.getProperty("plugin.jar.name")); + Element deps = (Element)docElem.getElementsByTagName("dependencies") + .item(0); + int iDep = 0; + while (true) { + String sDepProp = "plugin.dep." + iDep; + String sDepClass = p.getProperty(sDepProp + ".class"); + if (sDepClass == null) { break; } + String sDepJarName = p.getProperty(sDepProp + ".jar.name"); + String sDepVer = p.getProperty(sDepProp + ".version"); + + Element dep = doc.createElement("dependency"); + dep.setAttribute("org", "jedit-plugins-zip"); + dep.setAttribute("name", sDepJarName); + dep.setAttribute("rev", sDepVer); + deps.appendChild(dep); + deps.appendChild(lfNode.cloneNode(true)); + + iDep++; + } + Transformer transformer = TransformerFactory.newInstance() + .newTransformer(); + DOMSource src = new DOMSource(doc); + StreamResult dest = new StreamResult(new File(sOutFile)); + transformer.transform(src, dest); + } + catch (javax.xml.parsers.ParserConfigurationException e1) { + throw new BuildException(e1); + } + catch (org.xml.sax.SAXException e2) { + throw new BuildException(e2); + } + catch (javax.xml.transform.TransformerException e3) { + throw new BuildException(e3); + } + catch (java.io.IOException e4) { + throw new BuildException(e4); + } + } + + public void setTemplate(String s) + { + sTemplateFile = s; + } + + public void setOutFile(String s) + { + sOutFile = s; + } + +} \ No newline at end of file Added: build-support/trunk/java-src/org/jedit/ant/GetPluginInfoTask.java =================================================================== --- build-support/trunk/java-src/org/jedit/ant/GetPluginInfoTask.java (rev 0) +++ build-support/trunk/java-src/org/jedit/ant/GetPluginInfoTask.java 2012-03-03 17:34:20 UTC (rev 21243) @@ -0,0 +1,180 @@ +/* + * Definition of a task for jedit build environment. + * :tabSize=2:indentSize=2:noTabs=true: + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 2012 Jarek Czekalski + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package org.jedit.ant; + +import java.io.File; +import java.util.Iterator; +import java.util.Properties; +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.types.FileSet; +import org.apache.tools.ant.types.PropertySet; +import org.apache.tools.ant.types.resources.FileResource; +import org.apache.tools.ant.types.resources.FileResourceIterator; + +/** Takes fileset ids as arguments: <code>fsSrc</code> and + <code>fsExtras</code> and generates plugin information. + Sets the following properties:<ul> + <li>plugin.class.name - e.g. projectviewer.ProjectPlugin + <li>plugin.jar.name - e.g. ProjectViewer + <li>plugin.jedit.version.full - e.g. 4.4.99.0 + <li>plugin.jedit.version - e.g. 4.4 + <li>plugin.dep.X.class - e.g. CommonControlsPlugin, X=0..n + <li>plugin.dep.X.version - e.g. 1.3 + <li>plugin.dep.X.jar.name - e.g. CommonControls + </ul> + and a property set <code>plugin.props.set</code>. + */ + +public class GetPluginInfoTask extends Task +{ + private FileSet fsSrc; + private FileSet fsExtras; + private Project p; + private PropertySet ps; + + //{{{ getPluginClassName method + /** Gets an <code>Iterator</code> over objects implementing + <code>toString</code> and discovers the plugin name. + The strings are treated as filenames and the filename ending + with <code>Plugin.java</code> denotes the plugin name. + This is the same as done in + <code>org.gjt.sp.jedit.PluginJAR.generateCache()</code>. + @param sBaseDir The base directory will be substracted from plugin + filename to get only the part containing the + package name. May be <code>null</code> + @param it The <code>iterator</code> over <code>Object</code>s, + which implement <code>toString()</code> + @return <code>null</code> if not a plugin. + */ + public static String getPluginClassName(String sBaseDir, Iterator it) { + String sPluginClass = null; + while (it.hasNext()) { + String sFile = it.next().toString(); + if (sFile.endsWith("Plugin.java")) { + sPluginClass = sFile.substring(sBaseDir.length()+1); + sPluginClass = sPluginClass.replaceFirst("\\.java$", ""); + sPluginClass = sPluginClass.replaceAll("[/\\\\]", "."); + break; + } + } + return sPluginClass; + } //}}} + + //{{{ parsePropse method + /** Reads dependencies from properties. + * See <code>PluginJAR.checkDependencies()</code> */ + private void parseProps(String sPluginClass, Properties props) + { + int i, iPluginDep; + i = 0; iPluginDep = 0; + String sDepPropName = "plugin." + sPluginClass + ".depend."; + String sDep; + while((sDep = props.getProperty(sDepPropName + i)) != null) { + String asDeps[] = sDep.split(" "); + if (asDeps[0].equals("jedit")) { + p.setProperty("plugin.jedit.version.full", asDeps[1]); + String v[] = asDeps[1].split("\\."); + getProject().setProperty("plugin.jedit.version", v[0] + "." + v[1]); + ps.appendName("plugin.jedit.version.full"); + ps.appendName("plugin.jedit.version"); + } + if (asDeps[0].equals("optional")) { + // ignore the optional keyword, treat as usual plugin dep + asDeps = java.util.Arrays.copyOfRange(asDeps, 1, asDeps.length); + } + if (asDeps[0].equals("plugin")) { + //print("" + iPluginDep + asDeps[1] + "-" + asDeps[2]); + String sPref = "plugin.dep." + iPluginDep; + String sDepPluginClass = asDeps[1]; + p.setProperty(sPref + ".class", sDepPluginClass); + p.setProperty(sPref + ".version", asDeps[2]); + ps.appendRegex(sPref + "\\.*"); + String sJarName = GetPluginJarNameTask.getJarName(asDeps[1]); + p.setProperty(sPref + ".jar.name", sJarName); + iPluginDep++; + } + + i++; + } + p.setProperty("plugin.dep.count", "" + iPluginDep); + } //}}} + + @Override + public void execute() + { + p = getProject(); + if (fsSrc == null) { + throw new BuildException("fsSrc parameter not specified."); + } + if (fsExtras == null) { + throw new BuildException("fsSrc parameter not specified."); + } + + String sPluginClass = getPluginClassName(fsSrc.getDir().toString(), + fsSrc.iterator()); + getProject().setProperty("plugin.class.name", sPluginClass); + ps = (PropertySet)getProject().createDataType("propertyset"); + getProject().addReference("plugin.props.set", ps); + //print("no src files:" + fsSrc.size()); + + ps.appendName("plugin.class.name"); + ps.appendName("plugin.jar.name"); + ps.appendName("plugin.dep.count"); + + // load all props files {{{ + Properties props = new Properties(); + FileResourceIterator it = (FileResourceIterator)fsExtras.iterator(); + while (it.hasNext()) { + FileResource fr = (FileResource)it.next(); + if (fr.toString().endsWith(".props")) { + try { + props.load(fr.getInputStream()); + } + catch (java.io.IOException e) { + throw new BuildException(e); + } + } + } // }}} + + parseProps(sPluginClass, props); + } + + public void setFsSrc(String sId) + { + Object o = getProject().getReference(sId); + if (o == null || !(o instanceof FileSet)) { + throw new BuildException("Fileset id fsSrc not correct."); + } + fsSrc = (FileSet)o; + } + + public void setFsExtras(String sId) + { + Object o = getProject().getReference(sId); + if (o == null || !(o instanceof FileSet)) { + throw new BuildException("Fileset id fsExtras not correct."); + } + fsExtras = (FileSet)o; + } +} \ No newline at end of file Added: build-support/trunk/java-src/org/jedit/ant/GetPluginJarNameTask.java =================================================================== --- build-support/trunk/java-src/org/jedit/ant/GetPluginJarNameTask.java (rev 0) +++ build-support/trunk/java-src/org/jedit/ant/GetPluginJarNameTask.java 2012-03-03 17:34:20 UTC (rev 21243) @@ -0,0 +1,110 @@ +/* + * GetPluginJarNameTask.java - Definition of a task for jedit build + * environment. + * :tabSize=2:indentSize=2:noTabs=true: + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 2012 Jarek Czekalski + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package org.jedit.ant; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.Task; + +/** Takes <code>className</code> and inserts jar name for the class into + <code>outputProp</code> + property. This is needed only for plugins that are dependencies for + other plugins. Conversion from class name to jar name is not always + straightforward as there are no strict rules for that. Here are some + rules applied and then exceptions come. + */ + +public class GetPluginJarNameTask extends Task +{ + private String sClassName; + private String sOutputProp; + + /** To be used as a non-task + @return Never <code>null</code>. When no other clue + <code>sClassName</code> */ + public static String getJarName(String sClassName) + { + String sJarName = sClassName; + sJarName = sJarName.replaceFirst("^.*\\.([^\\.]+)$", "$1"); + if (sJarName.length()>9) { + sJarName = sJarName.replaceFirst("^(.*)Plugin", "$1"); + } + // 3 letter plugins are not included as the "Plugin" + // suffix is not removed in such a case + if (sJarName.equals("Antelope") || + sJarName.equals("AntViz") || // {{{ similar exceptions + sJarName.equals("AStyle") || + sJarName.equals("AStyle") || + sJarName.equals("CheckStyle") || + sJarName.equals("ClearCase") || + sJarName.equals("Gesture") || + sJarName.equals("Global") || + sJarName.equals("GroovyScriptEngine") || + sJarName.equals("Headline") || + sJarName.equals("HexTools") || + sJarName.equals("JavascriptScriptEngine") || + sJarName.equals("Jazzy") || + sJarName.equals("JCrontab") || + sJarName.equals("JDiff") || + sJarName.equals("JDoc") || + sJarName.equals("JFugue") || + sJarName.equals("JSwat") || + sJarName.equals("JTidy") || + sJarName.equals("Lucene") || + sJarName.equals("Markdown") || + sJarName.equals("Maven") || + sJarName.equals("Rhino") || + sJarName.equals("Ruby") || + sJarName.equals("Saxon") || + sJarName.equals("Scalac") || + sJarName.equals("ScriptEngine") || // }}} + sJarName.equals("Xerces")) sJarName += "Plugin"; + if (sJarName.equals("Project")) sJarName = "ProjectViewer"; + return sJarName; + } + + @Override + public void execute() + { + if (sClassName == null) { + throw new BuildException("className parameter not specified."); + } + if (sOutputProp == null) { + throw new BuildException("outputProp parameter not specified."); + } + String sJarName = getJarName(sClassName); + getProject().setProperty(sOutputProp, sJarName); + getProject().log("class:"+sClassName + " prop:"+sOutputProp + + " jar:"+sJarName, Project.MSG_VERBOSE); + } + + public void setClassName(String s) + { + sClassName = s; + } + + public void setOutputProp(String s) + { + sOutputProp = s; + } +} \ No newline at end of file Added: build-support/trunk/java-src/org/jedit/ant/antlib.xml =================================================================== --- build-support/trunk/java-src/org/jedit/ant/antlib.xml (rev 0) +++ build-support/trunk/java-src/org/jedit/ant/antlib.xml 2012-03-03 17:34:20 UTC (rev 21243) @@ -0,0 +1,6 @@ +<?xml version="1.0"?> +<antlib> + <taskdef name="gen-plugin-deps-ivy-file" classname="org.jedit.ant.GenPluginDepsIvyFileTask"/> + <taskdef name="get-plugin-info" classname="org.jedit.ant.GetPluginInfoTask"/> + <taskdef name="get-plugin-jar-name" classname="org.jedit.ant.GetPluginJarNameTask"/> +</antlib> Modified: build-support/trunk/plugin-build.xml =================================================================== --- build-support/trunk/plugin-build.xml 2012-03-02 19:36:51 UTC (rev 21242) +++ build-support/trunk/plugin-build.xml 2012-03-03 17:34:20 UTC (rev 21243) @@ -1,13 +1,13 @@ -<project xmlns:ivy="antlib:org.apache.ivy.ant" name="jEditPlugin" default="build"> +<project name="jEditPlugin" default="build" + xmlns:ivy="antlib:org.apache.ivy.ant" + xmlns:jedit="antlib:org.jedit.ant" + > <!-- {{{ Top-Level build file for jEdit plugins. ====== --> <!-- Version: $Id$ Requires apache Ant 1.6, including optional tasks, and xerces. - :tabSize=4:indentSize=4:noTabs=true: - :folding=explicit:collapseFolds=2: - To use this file, use the "import" task from ant on your plugin's build file, like this: @@ -139,6 +139,14 @@ automatically to the javac command. --> <path id="project.class.path" /> + <!-- jedit tasks properties --> + <property name="jedit.classes" value="${build.support}/build/classes" /> + <property name="jedit.src" value="${build.support}/java-src" /> + <uptodate targetfile="${build.support}/build/doc/index.html" + property="jedit.tasks.javadoc.uptodate" > + <srcfiles dir="${jedit.src}" /> + </uptodate> + <!-- {{{ Load ant-contrib library ===================== --> <taskdef resource="net/sf/antcontrib/antcontrib.properties" onerror="ignore"> <classpath> @@ -244,6 +252,7 @@ <target name="resolve" description="Retrieve dependencies" depends="check-ivy-xml" if="ivy.xml.present"> <echo>ivy.xml present, retrieving dependencies</echo> + <!-- lib.dir is probably already set, but to be sure --> <property name="lib.dir" value="${build.support}/lib" /> <get-ivy /> <ivy:retrieve pattern="${build.lib}/[artifact].[ext]" @@ -571,7 +580,7 @@ <!-- ===============================================}}} --> - <!-- {{{ Dependencies ================================= --> + <!-- {{{ Dependencies ================================= --> <!-- {{{ Target: build.dependencies =================== --> @@ -607,80 +616,56 @@ </target> <!-- ===============================================}}} --> - <!-- {{{ get-plugin-jar-name macro ==================== --> -<!-- Takes class-name and insert jar name for the class into output-prop - property. This is needed only for plugins that are dependencies for - other plugins. Conversion from class name to jar name is not always - straightforward as there are no strict rules for that. Here are some - rules applied and then exceptions come. - Requires earlier call to get-lib scripting - --> -<macrodef name="get-plugin-jar-name"> - <attribute name="class-name" /> - <attribute name="output-prop" /> - <sequential> - <local name="attr-class-name" /> - <local name="attr-output-prop" /> - <property name="attr-class-name" value="@{class-name}" /> - <property name="attr-output-prop" value="@{output-prop}" /> - <script language="beanshell" classpathref="lib.scripting.path" > - sJarName = project.getProperty("attr-class-name"); - sJarName = sJarName.replaceFirst("^.*\\.([^\\.]+)$", "$1"); - if (sJarName.length()>9) { - sJarName = sJarName.replaceFirst("^(.*)Plugin", "$1"); - } - if (sJarName.equals("Antelope") || - sJarName.equals("AntViz") || // {{{ similar exceptions - sJarName.equals("AStyle") || - sJarName.equals("AStyle") || - sJarName.equals("CheckStyle") || - sJarName.equals("ClearCase") || - sJarName.equals("Gesture") || - sJarName.equals("Global") || - sJarName.equals("GroovyScriptEngine") || - sJarName.equals("Headline") || - sJarName.equals("HexTools") || - sJarName.equals("JavascriptScriptEngine") || - sJarName.equals("Jazzy") || - sJarName.equals("JCrontab") || - sJarName.equals("JDiff") || - sJarName.equals("JDoc") || - sJarName.equals("JFugue") || - sJarName.equals("JSwat") || - sJarName.equals("JTA") || - sJarName.equals("JTidy") || - sJarName.equals("Lucene") || - sJarName.equals("Markdown") || - sJarName.equals("Maven") || - sJarName.equals("Rhino") || - sJarName.equals("Ruby") || - sJarName.equals("Saxon") || - sJarName.equals("Scalac") || - sJarName.equals("ScriptEngine") || // }}} - sJarName.equals("Xerces")) sJarName += "Plugin"; - if (sJarName.equals("Project")) sJarName = "ProjectViewer"; - project.setProperty(project.getProperty("attr-output-prop"), - sJarName); - //print(sJarName); - </script> - </sequential> -</macrodef> -<!-- ===================================================}}} --> + <!-- ================================================== }}}--> + <!-- {{{ Common targets =============================== --> + + <!-- {{{ Target: clean-build-support ================== --> + <!-- Removes recreatable files from build.support directory --> + <target name="clean-build-support"> + <delete dir="${build.support}/build" quiet="true" /> + <delete dir="${build.support}/lib" quiet="true" /> + </target> + <!-- ===============================================}}} --> + + <!-- {{{ def-jedit-tasks target ======================= --> + + <target name="def-jedit-tasks" + depends="common-props, jedit-tasks-javadoc" > + <mkdir dir="${jedit.classes}" /> + <copy todir="${jedit.classes}"> + <fileset dir="${jedit.src}" includes="**/antlib.xml" /> + </copy> + <javac srcdir="${jedit.src}" destdir="${jedit.classes}" + debug="true" > + <compilerarg value="-Xlint:deprecation"/> + </javac> + <taskdef resource="org/jedit/ant/antlib.xml" + uri="antlib:org.jedit.ant" classpath="${jedit.classes}"/> + </target> + + <!-- ===============================================}}} --> + + <!-- {{{ jedit-tasks-javadoc target =================== --> + + <target name="jedit-tasks-javadoc" + unless="jedit.tasks.javadoc.uptodate" > + <javadoc sourcepath="${jedit.src}" + destdir="${build.support}/build/doc" /> + </target> + + <!-- ===============================================}}} --> + + <!-- ================================================== }}}--> + + <!-- {{{ Plugin release targets ======================= --> + <!-- {{{ get-plugin-info target======================== --> <!-- Parses files from src.dir using selectors compileFiles and extraFiles - Downloads necessary libraries into build directory. - Sets properties: - plugin.class.name - e.g. projectviewer.ProjectPlugin - plugin.jar.name - e.g. ProjectViewer - plugin.jedit.version.full - e.g. 4.4.99.0 - plugin.jedit.version - e.g. 4.4 - plugin.dep.X.class - e.g. CommonControlsPlugin, X=0..n - plugin.dep.X.version - e.g. 1.3 - plugin.dep.X.jar.name - e.g. CommonControls + and produces plugin information. Details in jedit tasks doc. --> -<target name="get-plugin-info" depends="get-lib-scripting" > +<target name="get-plugin-info" depends="def-jedit-tasks" > <local name="src.fileset" /> <local name="extras.fileset" /> <fileset id="src.fileset" dir="${src.dir}" > @@ -689,83 +674,10 @@ <fileset id="extras.fileset" dir="${basedir}" > <selector refid="extraFiles" /> </fileset> - <script language="beanshell" classpathref="lib.scripting.path" > - String getPluginClassName(fs) { // {{{ - sPluginClass = ""; - sBaseDir = fs.getDir().toString(); - for (f: fs.iterator()) { - if (f.toString().endsWith("Plugin.java")) { - sPluginClass = f.toString().substring(sBaseDir.length()+1); - sPluginClass = sPluginClass.replaceFirst("\\.java$", ""); - sPluginClass = sPluginClass.replaceAll("[/\\\\]", "."); - break; - } - } - project.setProperty("plugin.class.name", sPluginClass); - return sPluginClass; - } //}}} - - fsSrc = project.getReference("src.fileset"); - ps = project.createDataType("propertyset"); - project.addReference("plugin.props.set", ps); - //print("no src files:" + fsSrc.size()); - - sPluginClass = getPluginClassName(fsSrc); - if ("".equals(sPluginClass)) { - throw new RuntimeException("Plugin class name not found in " - +"source fileset"); - } - ps.appendName("plugin.class.name"); - ps.appendName("plugin.jar.name"); - ps.appendName("plugin.dep.count"); - - // load all props files {{{ - props = new Properties(); - fsProps = project.getReference("extras.fileset"); - for (f: fsProps.iterator()) { - if (f.toString().endsWith(".props")) { - props.load(f.getInputStream()); - } - } // }}} - - // read depends - // see PluginJAR.checkDependencies() - // props.list(System.out); - i = 0; iPluginDep = 0; - sDepPropName = "plugin." + sPluginClass + ".depend."; - while((dep = props.getProperty(sDepPropName + i)) != null) { - deps = dep.split(" "); - if (deps[0].equals("jedit")) { - project.setProperty("plugin.jedit.version.full", deps[1]); - v = deps[1].split("\\."); - project.setProperty("plugin.jedit.version", v[0] + "." + v[1]); - ps.appendName("plugin.jedit.version.full"); - ps.appendName("plugin.jedit.version"); - } - if (deps[0].equals("optional")) { - // ignore the optional keyword, treat as usual plugin dep - deps = java.util.Arrays.copyOfRange(deps, 1, deps.length); - } - if (deps[0].equals("plugin")) { - //print("" + iPluginDep + deps[1] + "-" + deps[2]); - sPref = "plugin.dep." + iPluginDep; - sDepPluginClass = deps[1]; - project.setProperty(sPref + ".class", sDepPluginClass); - project.setProperty(sPref + ".version", deps[2]); - ps.appendRegex(sPref + "\\.*"); - m = project.createTask("get-plugin-jar-name"); - m.setDynamicAttribute("class-name", deps[1]); - m.setDynamicAttribute("output-prop", sPref + ".jar.name"); - m.execute(); - iPluginDep++; - } - - i++; - } - project.setProperty("plugin.dep.count", "" + iPluginDep); - </script> - <get-plugin-jar-name class-name="${plugin.class.name}" - output-prop="plugin.jar.name" /> + <jedit:get-plugin-info fsSrc="src.fileset" + fsExtras="extras.fileset" /> + <jedit:get-plugin-jar-name className="${plugin.class.name}" + outputProp="plugin.jar.name" /> <!--<dump-prop-ref refid="src.fileset" />--> <!--<dump-prop-ref refid="plugin.props.set" />--> @@ -785,47 +697,18 @@ <!-- {{{ gen-plugin-deps-ivy-file target ============== --> <!-- Generates an ivy.xml file specified by property plugin.deps.ivy.file - based on plugin.deps.ivy.template. - There is a problem in automatic creation of parent directory - of plugin.deps.ivy.file, so it must be done manually before calling - this target. --> + based on plugin.deps.ivy.template. --> <target name="gen-plugin-deps-ivy-file" - depends="get-plugin-info, get-lib-scripting" + depends="get-plugin-info" unless="plugin.deps.present" > - <script language="beanshell" classpathref="lib.scripting.path"> - sTemplFile = project.getProperty("plugin.deps.ivy.template"); - sOutFile = project.getProperty("plugin.deps.ivy.file"); - builder = javax.xml.parsers.DocumentBuilderFactory.newInstance() - .newDocumentBuilder(); - doc = builder.parse(new File(sTemplFile)); - docElem = doc.getDocumentElement(); - lfNode = doc.createTextNode(System.getProperty("line.separator")); - info = docElem.getElementsByTagName("info").item(0); - info.setAttribute("module", project.getProperty("plugin.jar.name")); - deps = docElem.getElementsByTagName("dependencies").item(0); - iDep = 0; - while (true) { - sDepProp = "plugin.dep." + iDep; - sDepClass = project.getProperty(sDepProp + ".class"); - if (sDepClass == null) { break; } - sDepJarName = project.getProperty(sDepProp + ".jar.name"); - sDepVer = project.getProperty(sDepProp + ".version"); - - dep = doc.createElement("dependency"); - dep.setAttribute("org", "jedit-plugins"); - dep.setAttribute("name", sDepJarName); - dep.setAttribute("rev", sDepVer); - deps.appendChild(dep); - deps.appendChild(lfNode.cloneNode(true)); - - iDep++; - } - transformer = javax.xml.transform.TransformerFactory.newInstance() - .newTransformer(); - src = new javax.xml.transform.dom.DOMSource(doc); - dest = new javax.xml.transform.stream.StreamResult(new File(sOutFile)); - transformer.transform(src, dest); - </script> + <local name="dir" /> + <check-file-var var="plugin.deps.ivy.template" /> + <dirname file="${plugin.deps.ivy.file}" property="dir" /> + <mkdir dir="${dir}" /> + <jedit:gen-plugin-deps-ivy-file + template="${plugin.deps.ivy.template}" + outFile="${plugin.deps.ivy.file}" + /> </target> <!-- }}} ================================================== --> @@ -835,7 +718,8 @@ To force re-downloading remove the ${lib.dir}/plugin-deps directory --> <target name="check-plugin-deps-dir" > - <property name="plugin.deps.dir" value="${lib.dir}/plugin-deps" /> + <mkdir dir="${build.lib}" /> + <property name="plugin.deps.dir" value="${build.lib}/plugin-deps" /> <condition property="plugin.deps.present"> <available file="${plugin.deps.dir}" type="dir" /> </condition> @@ -843,23 +727,30 @@ <!-- }}} ================================================== --> <!-- {{{ download-plugin-deps target ================== --> -<!-- - --> -<target name="download-plugin-deps" - depends="check-plugin-deps-dir, get-lib-ivy" - unless="plugin.deps.present"> - <property name="plugin.deps.ivy.template" - value="${build.support}/ivy.plugin.deps.template.xml" /> - <property name="plugin.deps.ivy.file" - value="${basedir}/build/ivy.plugin.deps.xml" /> - <check-file-var var="plugin.deps.ivy.template" /> - <antcall target="gen-plugin-deps-ivy-file" /> - <ivy:retrieve file="${plugin.deps.ivy.file}" - pattern="${plugin.deps.dir}/[artifact].[ext]" /> -</target> -<!-- }}} ================================================== --> + <target name="download-plugin-deps" + depends="check-plugin-deps-dir, get-lib-ivy, def-jedit-tasks" + unless="plugin.deps.present"> + <property name="plugin.deps.ivy.template" + value="${build.support}/ivy.plugin.deps.template.xml" /> + <property name="plugin.deps.ivy.file" + value="${basedir}/build/ivy.plugin.deps.xml" /> + <check-file-var var="plugin.deps.ivy.template" /> + <antcall target="gen-plugin-deps-ivy-file" /> + <ivy:retrieve file="${plugin.deps.ivy.file}" + pattern="${plugin.deps.dir}/[artifact].zip" + log="download-only" /> + <unzip dest="${plugin.deps.dir}"> + <fileset dir="${plugin.deps.dir}" includes="*.zip" /> + </unzip> + <delete> + <fileset dir="${plugin.deps.dir}" includes="*.zip" /> + </delete> + </target> + <!-- }}} ================================================== --> <!-- ================================================== }}}--> </project> +<!-- :tabSize=4:indentSize=4:noTabs=true: + :folding=explicit:collapseFolds=2: --> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jar...@us...> - 2012-03-05 19:23:55
|
Revision: 21247 http://jedit.svn.sourceforge.net/jedit/?rev=21247&view=rev Author: jarekczek Date: 2012-03-05 19:23:48 +0000 (Mon, 05 Mar 2012) Log Message: ----------- Added a new typedef: plugininfo, which took some code from get-plugin-info task. A new typedef allows for more ant-like syntax and has a new capability: reading plugin info from jar files. This funcionality is a prerequisite for downloading plugin dependencies recursively. Modified Paths: -------------- build-support/trunk/java-src/org/jedit/ant/GetPluginInfoTask.java build-support/trunk/java-src/org/jedit/ant/GetPluginJarNameTask.java build-support/trunk/java-src/org/jedit/ant/antlib.xml build-support/trunk/plugin-build.xml Added Paths: ----------- build-support/trunk/java-src/org/jedit/ant/PluginInfoType.java Modified: build-support/trunk/java-src/org/jedit/ant/GetPluginInfoTask.java =================================================================== --- build-support/trunk/java-src/org/jedit/ant/GetPluginInfoTask.java 2012-03-05 17:26:56 UTC (rev 21246) +++ build-support/trunk/java-src/org/jedit/ant/GetPluginInfoTask.java 2012-03-05 19:23:48 UTC (rev 21247) @@ -32,9 +32,9 @@ import org.apache.tools.ant.types.resources.FileResource; import org.apache.tools.ant.types.resources.FileResourceIterator; -/** Takes fileset ids as arguments: <code>fsSrc</code> and - <code>fsExtras</code> and generates plugin information. - Sets the following properties:<ul> +/** Takes <code>plugininfo</code> as nested argument and stores the plugin + info as properties. + <p>The following properties are set:<ul> <li>plugin.class.name - e.g. projectviewer.ProjectPlugin <li>plugin.jar.name - e.g. ProjectViewer <li>plugin.jedit.version.full - e.g. 4.4.99.0 @@ -44,137 +44,33 @@ <li>plugin.dep.X.jar.name - e.g. CommonControls </ul> and a property set <code>plugin.props.set</code>. + Properties names and property set name may be prefixed if + the <code>prefix</code> attribute is specified. When providing this + attribute include a dot at the end. */ public class GetPluginInfoTask extends Task { - private FileSet fsSrc; - private FileSet fsExtras; - private Project p; - private PropertySet ps; + private PluginInfoType pi; + private String sPrefix = ""; - //{{{ getPluginClassName method - /** Gets an <code>Iterator</code> over objects implementing - <code>toString</code> and discovers the plugin name. - The strings are treated as filenames and the filename ending - with <code>Plugin.java</code> denotes the plugin name. - This is the same as done in - <code>org.gjt.sp.jedit.PluginJAR.generateCache()</code>. - @param sBaseDir The base directory will be substracted from plugin - filename to get only the part containing the - package name. May be <code>null</code> - @param it The <code>iterator</code> over <code>Object</code>s, - which implement <code>toString()</code> - @return <code>null</code> if not a plugin. - */ - public static String getPluginClassName(String sBaseDir, Iterator it) { - String sPluginClass = null; - while (it.hasNext()) { - String sFile = it.next().toString(); - if (sFile.endsWith("Plugin.java")) { - sPluginClass = sFile.substring(sBaseDir.length()+1); - sPluginClass = sPluginClass.replaceFirst("\\.java$", ""); - sPluginClass = sPluginClass.replaceAll("[/\\\\]", "."); - break; - } - } - return sPluginClass; - } //}}} - - //{{{ parsePropse method - /** Reads dependencies from properties. - * See <code>PluginJAR.checkDependencies()</code> */ - private void parseProps(String sPluginClass, Properties props) - { - int i, iPluginDep; - i = 0; iPluginDep = 0; - String sDepPropName = "plugin." + sPluginClass + ".depend."; - String sDep; - while((sDep = props.getProperty(sDepPropName + i)) != null) { - String asDeps[] = sDep.split(" "); - if (asDeps[0].equals("jedit")) { - p.setProperty("plugin.jedit.version.full", asDeps[1]); - String v[] = asDeps[1].split("\\."); - getProject().setProperty("plugin.jedit.version", v[0] + "." + v[1]); - ps.appendName("plugin.jedit.version.full"); - ps.appendName("plugin.jedit.version"); - } - if (asDeps[0].equals("optional")) { - // ignore the optional keyword, treat as usual plugin dep - asDeps = java.util.Arrays.copyOfRange(asDeps, 1, asDeps.length); - } - if (asDeps[0].equals("plugin")) { - //print("" + iPluginDep + asDeps[1] + "-" + asDeps[2]); - String sPref = "plugin.dep." + iPluginDep; - String sDepPluginClass = asDeps[1]; - p.setProperty(sPref + ".class", sDepPluginClass); - p.setProperty(sPref + ".version", asDeps[2]); - ps.appendRegex(sPref + "\\.*"); - String sJarName = GetPluginJarNameTask.getJarName(asDeps[1]); - p.setProperty(sPref + ".jar.name", sJarName); - iPluginDep++; - } - - i++; - } - p.setProperty("plugin.dep.count", "" + iPluginDep); - } //}}} - @Override public void execute() { - p = getProject(); - if (fsSrc == null) { - throw new BuildException("fsSrc parameter not specified."); + if (pi == null) { + throw new BuildException("pluginInfo not provided"); } - if (fsExtras == null) { - throw new BuildException("fsSrc parameter not specified."); - } - - String sPluginClass = getPluginClassName(fsSrc.getDir().toString(), - fsSrc.iterator()); - getProject().setProperty("plugin.class.name", sPluginClass); - ps = (PropertySet)getProject().createDataType("propertyset"); - getProject().addReference("plugin.props.set", ps); - //print("no src files:" + fsSrc.size()); - - ps.appendName("plugin.class.name"); - ps.appendName("plugin.jar.name"); - ps.appendName("plugin.dep.count"); - - // load all props files {{{ - Properties props = new Properties(); - FileResourceIterator it = (FileResourceIterator)fsExtras.iterator(); - while (it.hasNext()) { - FileResource fr = (FileResource)it.next(); - if (fr.toString().endsWith(".props")) { - try { - props.load(fr.getInputStream()); - } - catch (java.io.IOException e) { - throw new BuildException(e); - } - } - } // }}} - - parseProps(sPluginClass, props); + pi.setProjectProperties(sPrefix); } - public void setFsSrc(String sId) + public void add(PluginInfoType pi) { - Object o = getProject().getReference(sId); - if (o == null || !(o instanceof FileSet)) { - throw new BuildException("Fileset id fsSrc not correct."); - } - fsSrc = (FileSet)o; + this.pi = pi; } - public void setFsExtras(String sId) + public void setPrefix(String s) { - Object o = getProject().getReference(sId); - if (o == null || !(o instanceof FileSet)) { - throw new BuildException("Fileset id fsExtras not correct."); - } - fsExtras = (FileSet)o; + sPrefix = s; } + } \ No newline at end of file Modified: build-support/trunk/java-src/org/jedit/ant/GetPluginJarNameTask.java =================================================================== --- build-support/trunk/java-src/org/jedit/ant/GetPluginJarNameTask.java 2012-03-05 17:26:56 UTC (rev 21246) +++ build-support/trunk/java-src/org/jedit/ant/GetPluginJarNameTask.java 2012-03-05 19:23:48 UTC (rev 21247) @@ -40,10 +40,12 @@ private String sOutputProp; /** To be used as a non-task - @return Never <code>null</code>. When no other clue + @return <code>null</code> if <code>sClassName</code> + is <code>null</code>. When no other clue - <code>sClassName</code> */ public static String getJarName(String sClassName) { + if (sClassName == null) { return null; } String sJarName = sClassName; sJarName = sJarName.replaceFirst("^.*\\.([^\\.]+)$", "$1"); if (sJarName.length()>9) { Added: build-support/trunk/java-src/org/jedit/ant/PluginInfoType.java =================================================================== --- build-support/trunk/java-src/org/jedit/ant/PluginInfoType.java (rev 0) +++ build-support/trunk/java-src/org/jedit/ant/PluginInfoType.java 2012-03-05 19:23:48 UTC (rev 21247) @@ -0,0 +1,274 @@ +/* + * Definition of an ant type for jedit build environment. + * :tabSize=2:indentSize=2:noTabs=true: + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 2012 Jarek Czekalski + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package org.jedit.ant; + +import java.util.Arrays; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.Properties; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.types.DataType; +import org.apache.tools.ant.types.FileSet; +import org.apache.tools.ant.types.PropertySet; +import org.apache.tools.ant.types.resources.FileResource; +import org.apache.tools.ant.types.resources.FileResourceIterator; + +/** Takes filesets as nested arguments: <code>fsSrc</code> and + <code>fsExtras</code> and retrieves plugin information. + Alternatively <code>jar</code> attibute may be given to parse the + jar contents instead of filesets. + */ + +public class PluginInfoType extends DataType +{ + // input parameters + private FileSet fsSrc; + private FileSet fsExtras; + private String sJarIn; + + // plugin info + private String sClass; + private String sJar; + private String sJeditVersionShort; + private String sJeditVersionFull; + private ArrayList<Dep> deps = new ArrayList<Dep>(); + + /** Whether the info is already filled. */ + private boolean bFilled; + private Project p; + + //{{{ getPluginClassName method + /** Gets an <code>Iterator</code> over objects implementing + <code>toString</code> and discovers the plugin name. + The strings are treated as filenames and the filename ending + with <code>Plugin.java</code> denotes the plugin name. + This is the same as done in + <code>org.gjt.sp.jedit.PluginJAR.generateCache()</code>. + @param sBaseDir The base directory will be substracted from plugin + filename to get only the part containing the + package name. May be <code>null</code> + @param it The <code>iterator</code> over <code>Object</code>s, + which implement <code>toString()</code> + @return <code>null</code> if not a plugin. + */ + public static String getPluginClassName(String sBaseDir, Iterator it) { + String sPluginClass = null; + while (it.hasNext()) { + String sFile = it.next().toString(); + if (sFile.endsWith("Plugin.java") || + sFile.endsWith("Plugin.class") ) { + sPluginClass = sFile; + if (sBaseDir != null) { + sPluginClass = sPluginClass.substring(sBaseDir.length()+1); + } + sPluginClass = sPluginClass.replaceFirst("\\.((java)|(class))$", ""); + sPluginClass = sPluginClass.replaceAll("[/\\\\]", "."); + break; + } + } + return sPluginClass; + } //}}} + + //{{{ fill() method + public void fill() + { + if (isReference()) { getRef().fill(); return; } + if (bFilled) { return; } + Iterator itSrc, itExtras; + String sBaseDir; + ZipFile zip = null; + p = getProject(); + if (sJarIn != null) { + // process jar file to get the info + try { + zip = new ZipFile(sJarIn); + sBaseDir = null; + itSrc = Collections.list(zip.entries()).iterator(); + itExtras = itSrc; + } catch (java.io.IOException ioe) { + throw new BuildException(ioe); + } + } else { + // filesets given as source for the info + if (fsSrc == null) { + throw new BuildException("fsSrc parameter not specified."); + } + if (fsExtras == null) { + throw new BuildException("fsExtras parameter not specified."); + } + sBaseDir = fsSrc.getDir().toString(); + itSrc = fsSrc.iterator(); + itExtras = fsExtras.iterator(); + } + sClass = getPluginClassName(sBaseDir, itSrc); + sJar = GetPluginJarNameTask.getJarName(sClass); + + // load all props files {{{ + Properties props = new Properties(); + while (itExtras.hasNext()) { + Object entry = itExtras.next(); + if (entry.toString().endsWith(".props")) { + try { + if (sJarIn != null) { + ZipEntry zipEntry = (ZipEntry)entry; + props.load(zip.getInputStream(zipEntry)); + } else { + FileResource fr = (FileResource)entry; + props.load(fr.getInputStream()); + } + } catch (java.io.IOException e) { + throw new BuildException(e); + } + } + } // }}} + + parseProps(sClass, props); + bFilled = true; + } //}}} + + //{{{ parsePropse method + /** Reads dependencies from properties. + * See <code>PluginJAR.checkDependencies()</code> */ + private void parseProps(String sPluginClass, Properties props) + { + int i, iPluginDep; + i = 0; iPluginDep = 0; + String sDepPropName = "plugin." + sPluginClass + ".depend."; + String sDep; + while((sDep = props.getProperty(sDepPropName + i)) != null) { + String asDeps[] = sDep.split(" "); + if (asDeps[0].equals("jedit")) { + sJeditVersionFull = asDeps[1]; + String v[] = sJeditVersionFull.split("\\."); + sJeditVersionShort = v[0] + "." + v[1]; + } + if (asDeps[0].equals("optional")) { + // ignore the optional keyword, treat as usual plugin dep + asDeps = Arrays.copyOfRange(asDeps, 1, asDeps.length); + } + if (asDeps[0].equals("plugin")) { + Dep dep = new Dep(); + //print("" + iPluginDep + asDeps[1] + "-" + asDeps[2]); + String sPref = "plugin.dep." + iPluginDep; + dep.sClass = asDeps[1]; + dep.sVersion = asDeps[2]; + dep.sJar = GetPluginJarNameTask.getJarName(asDeps[1]); + deps.add(dep); + iPluginDep++; + } + + i++; + } + } //}}} + + public void setJar(String s) + { + sJarIn = s; + checkAttr(); + } + + public void addFsSrc(FileSet fs) + { + fsSrc = fs; + checkAttr(); + } + + public void addFsExtras(FileSet fs) + { + fsExtras = fs; + checkAttr(); + } + + private void checkAttr() + { + p = getProject(); + if (sJarIn != null && (fsSrc != null || fsExtras != null)) { + throw new BuildException("jar and fsSrc/Extras " + + "are mutually exclusive."); + } + } + + protected PluginInfoType getRef() { + return (PluginInfoType) getCheckedRef(PluginInfoType.class, + "plugininfotype"); + } + + public String toString() + { + if (isReference()) { return getRef().toString(); } + String s; + if (!bFilled) { fill(); } + s = "Plugin class name: " + sClass + ", jar name: " + sJar + "\n"; + s += "jedit version: " + sJeditVersionFull; + s += ", dependencies count: " + deps.size() + "\n"; + for (Dep dep: deps) { + s += "dependency: " + dep.sJar + " " + dep.sVersion + "\n"; + } + return s; + } + + //{{{ setProjectProperties() method + /** Stores plugin info in project properties. For details see + {@link GetPluginInfoTask}. + @param sPref Prefix added to the properties. May not be + <code>null</code> + */ + public void setProjectProperties(String sPref) + { + if (isReference()) { getRef().setProjectProperties(sPref); return; } + fill(); + PropertySet ps = (PropertySet)p.createDataType("propertyset"); + p.addReference(sPref + "plugin.props.set", ps); + p.setProperty(sPref + "plugin.class.name", sClass); + p.setProperty(sPref + "plugin.jar.name", sJar); + p.setProperty(sPref + "plugin.jedit.version.full", sJeditVersionFull); + p.setProperty(sPref + "plugin.jedit.version", sJeditVersionShort); + p.setProperty(sPref + "plugin.dep.count", "" + deps.size()); + ps.appendName(sPref + "plugin.class.name"); + ps.appendName(sPref + "plugin.jar.name"); + ps.appendName(sPref + "plugin.jedit.version.full"); + ps.appendName(sPref + "plugin.jedit.version"); + ps.appendName(sPref + "plugin.dep.count"); + for (int i=0; i<deps.size(); i++) { + Dep dep = deps.get(i); + String sDepPref = sPref + "plugin.dep." + i; + p.setProperty(sDepPref + ".class", dep.sClass); + p.setProperty(sDepPref + ".version", dep.sVersion); + p.setProperty(sDepPref + ".jar.name", dep.sJar); + ps.appendRegex(sDepPref + "\\.*"); + } + } //}}} + + //{{{ Dep class + /** Plugin dependency information */ + public static class Dep + { + String sClass; + String sVersion; + String sJar; + } //}}} +} \ No newline at end of file Modified: build-support/trunk/java-src/org/jedit/ant/antlib.xml =================================================================== --- build-support/trunk/java-src/org/jedit/ant/antlib.xml 2012-03-05 17:26:56 UTC (rev 21246) +++ build-support/trunk/java-src/org/jedit/ant/antlib.xml 2012-03-05 19:23:48 UTC (rev 21247) @@ -1,6 +1,8 @@ <?xml version="1.0"?> <antlib> - <taskdef name="gen-plugin-deps-ivy-file" classname="org.jedit.ant.GenPluginDepsIvyFileTask"/> - <taskdef name="get-plugin-info" classname="org.jedit.ant.GetPluginInfoTask"/> - <taskdef name="get-plugin-jar-name" classname="org.jedit.ant.GetPluginJarNameTask"/> + <typedef name="plugininfo" classname="org.jedit.ant.PluginInfoType"/> + + <taskdef name="gen-plugin-deps-ivy-file" classname="org.jedit.ant.GenPluginDepsIvyFileTask"/> + <taskdef name="get-plugin-info" classname="org.jedit.ant.GetPluginInfoTask"/> + <taskdef name="get-plugin-jar-name" classname="org.jedit.ant.GetPluginJarNameTask"/> </antlib> Modified: build-support/trunk/plugin-build.xml =================================================================== --- build-support/trunk/plugin-build.xml 2012-03-05 17:26:56 UTC (rev 21246) +++ build-support/trunk/plugin-build.xml 2012-03-05 19:23:48 UTC (rev 21247) @@ -668,16 +668,16 @@ <target name="get-plugin-info" depends="def-jedit-tasks" > <local name="src.fileset" /> <local name="extras.fileset" /> - <fileset id="src.fileset" dir="${src.dir}" > - <selector refid="compileFiles" /> - </fileset> - <fileset id="extras.fileset" dir="${basedir}" > - <selector refid="extraFiles" /> - </fileset> - <jedit:get-plugin-info fsSrc="src.fileset" - fsExtras="extras.fileset" /> - <jedit:get-plugin-jar-name className="${plugin.class.name}" - outputProp="plugin.jar.name" /> + <jedit:get-plugin-info> + <jedit:plugininfo> + <fsSrc dir="${src.dir}" > + <selector refid="compileFiles" /> + </fsSrc> + <fsExtras dir="${basedir}" > + <selector refid="extraFiles" /> + </fsExtras> + </jedit:plugininfo> + </jedit:get-plugin-info> <!--<dump-prop-ref refid="src.fileset" />--> <!--<dump-prop-ref refid="plugin.props.set" />--> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jar...@us...> - 2012-03-10 13:36:56
|
Revision: 21303 http://jedit.svn.sourceforge.net/jedit/?rev=21303&view=rev Author: jarekczek Date: 2012-03-10 13:36:49 +0000 (Sat, 10 Mar 2012) Log Message: ----------- Added download-plugin-deps-rec target and did some cleaning and improvements, mainly in java files for ant tasks. Modified Paths: -------------- build-support/trunk/java-src/org/jedit/ant/GenPluginDepsIvyFileTask.java build-support/trunk/java-src/org/jedit/ant/PluginInfoType.java build-support/trunk/java-src/org/jedit/ant/antlib.xml build-support/trunk/plugin-build.xml Added Paths: ----------- build-support/trunk/java-src/org/jedit/ant/DownloadPluginDepsRecTask.java build-support/trunk/java-src/org/jedit/ant/Misc.java Added: build-support/trunk/java-src/org/jedit/ant/DownloadPluginDepsRecTask.java =================================================================== --- build-support/trunk/java-src/org/jedit/ant/DownloadPluginDepsRecTask.java (rev 0) +++ build-support/trunk/java-src/org/jedit/ant/DownloadPluginDepsRecTask.java 2012-03-10 13:36:49 UTC (rev 21303) @@ -0,0 +1,235 @@ +/* + * Definition of a task for jedit build environment. + * :tabSize=2:indentSize=2:noTabs=true: + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 2012 Jarek Czekalski + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package org.jedit.ant; + +//{{{ imports +import java.io.File; +import java.util.Iterator; +import java.util.Properties; +import org.apache.ivy.ant.IvyRetrieve; +import org.apache.ivy.ant.IvyResolve; +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.taskdefs.Delete; +import org.apache.tools.ant.taskdefs.Expand; +import org.apache.tools.ant.types.FileSet; +import org.apache.tools.ant.types.PropertySet; +import org.apache.tools.ant.types.resources.FileResource; +import org.apache.tools.ant.types.resources.FileResourceIterator; +//}}} + +/** Takes <code>plugininfo</code> as nested argument and downloads plugin + dependencies. Then checks all downloaded jars and tries to satisfy + their dependencies. Repeats it until all the dependencies are sastified. + Task attributes:<ul> + <li><code>todir</code> - destination directory + <li><code>ivyfilesdir</code> - directory to place ivy files in. The ivy + files are numbered from <code>0</code> to <code>n</code>. + <li><code>template</code> - ivy file serving as a template + </ul> + <p>Warning: erase the contents of <code>todir</code> directory. + */ + +public class DownloadPluginDepsRecTask extends Task +{ + private String sToDir; + private File toDir; + private String sIvyFilesDir; + private String sTemplateFile; + /** Plugin info received from caller. We don't want to change it. */ + private PluginInfoType pi0; + private Project p; + + private static final String sIvyFilePref = "ivy.plugin.deps"; + + //{{{ execute method + @Override + public void execute() + { + p = getProject(); + checkAttrs(); + clearOldIvyFiles(); + toDir.mkdirs(); + PluginInfoType pi = pi0.clone(); + + log("Initial dependencies of " + pi.getJarName() + + " " + pi.getVersion() + ":\n"); + log(pi.getDepsString()); + + boolean bNewDeps = true; + int iRound = 0; + while (true) { + p.log("Downloading recursively plugin dependencies for " + + pi.getJarName() + ", round " + iRound); + downloadDeps(pi, iRound); + bNewDeps = addJarDeps(pi); + if (!bNewDeps) { break; } + iRound += 1; + if (iRound >= 3) { + throw new BuildException("Too many rounds (" + iRound + ") while " + + "trying to download plugin dependencies recursively."); + } + } + + log("Final recursive dependencies of " + pi.getJarName() + + " " + pi.getVersion() + ":\n"); + log(pi.getDepsString()); + } //}}} + + //{{{ checkAttrs method + private void checkAttrs() + { + if (pi0 == null) { + throw new BuildException("pluginInfo not provided"); + } + if (sToDir == null) { + throw new BuildException("todir not provided"); + } + if (sIvyFilesDir == null) { + throw new BuildException("ivyfilesdir not provided"); + } + if (sTemplateFile == null) { + throw new BuildException("template not provided"); + } + toDir = Misc.getProjectFile(p, sToDir); + } //}}} + + //{{{ clearOldIvyFiles method + private void clearOldIvyFiles() + { + Delete del = (Delete)p.createTask("delete"); + del.setDir(Misc.getProjectFile(p, sIvyFilesDir)); + del.setIncludes(sIvyFilePref + ".*.xml"); + del.execute(); + } //}}} + + //{{{ clearDestDir method + private void clearDestDir() + { + Delete del = (Delete)p.createTask("delete"); + del.setDir(toDir); + del.setIncludes("*"); + del.execute(); + } //}}} + + //{{{ downloadDeps method + private void downloadDeps(PluginInfoType pi, int iRound) + { + // A simplest way in case a plugin needs to be updated is to + // erase all and download again. Ivy doesn't really download them + // each time, but copies from the cache + clearDestDir(); + + // generate ivy file + File ivyFile = new File(Misc.getProjectFile(p, sIvyFilesDir), + sIvyFilePref + "." + iRound + ".xml"); + GenPluginDepsIvyFileTask gen = new GenPluginDepsIvyFileTask(); + gen.setProject(p); + gen.setTemplate(sTemplateFile); + gen.setOutFile(ivyFile.toString()); + gen.add(pi); + gen.execute(); + + // download zips using ivy:resolve and ivy:retrieve tasks + p.log(ivyFile+""); + IvyResolve res = new IvyResolve(); + res.setProject(p); + res.setFile(ivyFile); + res.setLog("download-only"); + res.execute(); + IvyRetrieve ret = new IvyRetrieve(); + ret.setProject(p); + ret.setFile(ivyFile); + ret.setPattern(toDir.toString() + "/[artifact].zip"); + // ret.setOrganisation("jedit"); + // ret.setModule(pi.getJarName()); + // ret.setKeep(false); + ret.setLog("download-only"); + ret.execute(); + + // unzip them + Expand unzip = (Expand)p.createTask("unzip"); + unzip.setDest(toDir); + FileSet fsZips = new FileSet(); + fsZips.setProject(p); + fsZips.setDir(toDir); + fsZips.setIncludes("*.zip"); + unzip.add(fsZips); + unzip.execute(); + + // delete zips + Delete del = new Delete(); + del.setProject(p); + del.add(fsZips); + del.execute(); + } //}}} + + //{{{ addJarDeps method + /** Opens jars in <code>toDir</code> and adds their plugin dependencies + to current dependencies list <code>pi</code>. + @param pi Plugin info to which new deps will be added. + @return <code>true</code> if new deps were added, <code>false</code> + if the jars needn't nothing more than currently in + <code>pi</code>. */ + private boolean addJarDeps(PluginInfoType pi) + { + boolean bNewDeps = false; + for (String sFile: toDir.list()) { + if (sFile.endsWith(".jar")) { + StringBuilder sbMsg = new StringBuilder(); + PluginInfoType piJar = new PluginInfoType(); + piJar.setProject(p); + piJar.setJar(new File(toDir, sFile).toString()); + if (pi.joinDeps(piJar, sbMsg)) { + bNewDeps = true; + p.log(piJar.getJarName() + " " + piJar.getVersion() + + " needs also:"); + p.log(sbMsg.toString()); + } + } + } + return bNewDeps; + } //}}} + + // methods setting task parameters {{{ + public void add(PluginInfoType pi) + { + this.pi0 = pi; + } + + public void setToDir(String s) + { + sToDir = s; + } + + public void setIvyFilesDir(String s) + { + sIvyFilesDir = s; + } + + public void setTemplate(String s) + { + sTemplateFile = s; + } + //}}} +} \ No newline at end of file Modified: build-support/trunk/java-src/org/jedit/ant/GenPluginDepsIvyFileTask.java =================================================================== --- build-support/trunk/java-src/org/jedit/ant/GenPluginDepsIvyFileTask.java 2012-03-10 09:18:21 UTC (rev 21302) +++ build-support/trunk/java-src/org/jedit/ant/GenPluginDepsIvyFileTask.java 2012-03-10 13:36:49 UTC (rev 21303) @@ -35,17 +35,19 @@ import org.w3c.dom.Element; import org.w3c.dom.Node; -/** Generates an <code>ivy.xml</code> file specified by property - plugin.deps.ivy.file based on plugin.deps.ivy.template. - There is a problem in automatic creation of parent directory - of plugin.deps.ivy.file, so it must be done manually before calling - this target. +/** Generates an <code>ivy.xml</code> file specified by <code>outFile</code> + based on <code>template</code> ivy file. The dependencies are taken + from obligatory nested <code>plugininfo</code> element. + I had problems with automatic creation of parent directory + of <code>outFile</code>, so it must be done manually before calling + this task. */ public class GenPluginDepsIvyFileTask extends Task { private String sTemplateFile; private String sOutFile; + private PluginInfoType pi; private Project p; @Override @@ -58,6 +60,9 @@ if (sOutFile == null) { throw new BuildException("\"outFile\" parameter not specified."); } + if (pi == null) { + throw new BuildException("Nested \"plugininfo\" data not specified."); + } try { DocumentBuilder builder = DocumentBuilderFactory.newInstance() @@ -66,25 +71,17 @@ Element docElem = doc.getDocumentElement(); Node lfNode = doc.createTextNode(System.getProperty("line.separator")); Element info = (Element)docElem.getElementsByTagName("info").item(0); - info.setAttribute("module", p.getProperty("plugin.jar.name")); + info.setAttribute("module", pi.getJarName()); Element deps = (Element)docElem.getElementsByTagName("dependencies") .item(0); - int iDep = 0; - while (true) { - String sDepProp = "plugin.dep." + iDep; - String sDepClass = p.getProperty(sDepProp + ".class"); - if (sDepClass == null) { break; } - String sDepJarName = p.getProperty(sDepProp + ".jar.name"); - String sDepVer = p.getProperty(sDepProp + ".version"); - + for (int iDep=0; iDep<pi.getDepCount(); iDep++) { + PluginInfoType.Dep depInfo = pi.getDep(iDep); Element dep = doc.createElement("dependency"); dep.setAttribute("org", "jedit-plugins-zip"); - dep.setAttribute("name", sDepJarName); - dep.setAttribute("rev", sDepVer); + dep.setAttribute("name", depInfo.getJarName()); + dep.setAttribute("rev", depInfo.getVersion()); deps.appendChild(dep); deps.appendChild(lfNode.cloneNode(true)); - - iDep++; } Transformer transformer = TransformerFactory.newInstance() .newTransformer(); @@ -116,4 +113,9 @@ sOutFile = s; } + public void add(PluginInfoType pi) + { + this.pi = pi; + } + } \ No newline at end of file Added: build-support/trunk/java-src/org/jedit/ant/Misc.java =================================================================== --- build-support/trunk/java-src/org/jedit/ant/Misc.java (rev 0) +++ build-support/trunk/java-src/org/jedit/ant/Misc.java 2012-03-10 13:36:49 UTC (rev 21303) @@ -0,0 +1,134 @@ +/* + * Ant utilities for jedit build environment. + * :tabSize=2:indentSize=2:noTabs=true: + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 2001 Slava Pestov + * Copyright (C) 2012 Jarek Czekalski jar...@po... + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package org.jedit.ant; + +import java.io.File; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.types.Resource; +import org.apache.tools.ant.types.resources.FileResource; +import org.apache.tools.ant.types.resources.FileResource; + +public class Misc +{ + + //{{{ getProjectFile method + public static File getProjectFile(Project p, String path) + { + Resource r = p.getResource(path); + if (r == null) { return null; } + FileResource fr = (FileResource)r.as(FileResource.class); + if (fr == null) { return null; } + return fr.getFile(); + } //}}} + + //{{{ compareStrings method + /** + * Compares two strings. Copied from org.gjt.sp.StandardUtilities. + * Last modified in r3881 in org.gjt.sp.jedit.MiscUtilities. + * Author: Slava Pestov.<p> + * + * Unlike <function>String.compareTo()</function>, + * this method correctly recognizes and handles embedded numbers. + * For example, it places "My file 2" before "My file 10".<p> + * + * @param str1 The first string + * @param str2 The second string + * @param ignoreCase If true, case will be ignored + * @return negative If str1 < str2, 0 if both are the same, + * positive if str1 > str2 + * @since jEdit 4.3pre5 + */ + public static int compareStrings(String str1, String str2, boolean ignoreCase) + { + char[] char1 = str1.toCharArray(); + char[] char2 = str2.toCharArray(); + + int len = Math.min(char1.length,char2.length); + + for(int i = 0, j = 0; i < len && j < len; i++, j++) + { + char ch1 = char1[i]; + char ch2 = char2[j]; + if(Character.isDigit(ch1) && Character.isDigit(ch2) + && ch1 != '0' && ch2 != '0') + { + int _i = i + 1; + int _j = j + 1; + + for(; _i < char1.length; _i++) + { + if(!Character.isDigit(char1[_i])) + { + //_i--; + break; + } + } + + for(; _j < char2.length; _j++) + { + if(!Character.isDigit(char2[_j])) + { + //_j--; + break; + } + } + + int len1 = _i - i; + int len2 = _j - j; + if(len1 > len2) + return 1; + else if(len1 < len2) + return -1; + else + { + for(int k = 0; k < len1; k++) + { + ch1 = char1[i + k]; + ch2 = char2[j + k]; + if(ch1 != ch2) + return ch1 - ch2; + } + } + + i = _i - 1; + j = _j - 1; + } + else + { + if(ignoreCase) + { + ch1 = Character.toLowerCase(ch1); + ch2 = Character.toLowerCase(ch2); + } + + if(ch1 != ch2) + return ch1 - ch2; + } + } + + return char1.length - char2.length; + } //}}} + //}}} + +} + Modified: build-support/trunk/java-src/org/jedit/ant/PluginInfoType.java =================================================================== --- build-support/trunk/java-src/org/jedit/ant/PluginInfoType.java 2012-03-10 09:18:21 UTC (rev 21302) +++ build-support/trunk/java-src/org/jedit/ant/PluginInfoType.java 2012-03-10 13:36:49 UTC (rev 21303) @@ -43,7 +43,7 @@ jar contents instead of filesets. */ -public class PluginInfoType extends DataType +public class PluginInfoType extends DataType implements Cloneable { // input parameters private FileSet fsSrc; @@ -53,14 +53,36 @@ // plugin info private String sClass; private String sJar; + private String sVersion; private String sJeditVersionShort; private String sJeditVersionFull; - private ArrayList<Dep> deps = new ArrayList<Dep>(); + private DepList deps = new DepList(); /** Whether the info is already filled. */ private boolean bFilled; private Project p; + //{{{ filled method + /** Returns <code>PluginInfoType</code> object that is ok to operate on. + That is: filled and being not a reference. Serves as a shorthand */ + private PluginInfoType filled() + { + if (isReference()) { return getRef().filled(); } + fill(); + return this; + } + + //{{{ get... methods + public String getClassName() { return filled().sClass; } + public String getJarName() { return filled().sJar; } + public String getVersion() { return filled().sVersion; } + public String getJeditVersionShort() { return filled().sJeditVersionShort; } + public String getJeditVersionFull() { return filled().sJeditVersionFull; } + public int getDepCount() { return filled().deps.size(); } + public String getDepsString() { return filled().deps.toString(); } + public Dep getDep(int i) { return filled().deps.get(i); } + //}}} + //{{{ getPluginClassName method /** Gets an <code>Iterator</code> over objects implementing <code>toString</code> and discovers the plugin name. @@ -79,13 +101,21 @@ String sPluginClass = null; while (it.hasNext()) { String sFile = it.next().toString(); - if (sFile.endsWith("Plugin.java") || - sFile.endsWith("Plugin.class") ) { + sFile = sFile.replaceFirst("\\.class", ".java"); + // There are some class ending with Plugin not being real plugins. + // For example in XML plugin. + // How to tell them? Donna. Inserting exceptions for them. + // TODO: One coulde try all potential plugin classes until finds + // the one specifing jedit version. Too difficult. + if (sFile.endsWith("Plugin.java") + && !sFile.endsWith("CssSideKickPlugin.java") + && !sFile.endsWith("HtmlSideKickPlugin.java") + && !sFile.endsWith("JavaScriptSideKickPlugin.java")) { sPluginClass = sFile; if (sBaseDir != null) { sPluginClass = sPluginClass.substring(sBaseDir.length()+1); } - sPluginClass = sPluginClass.replaceFirst("\\.((java)|(class))$", ""); + sPluginClass = sPluginClass.replaceFirst("\\.java$", ""); sPluginClass = sPluginClass.replaceAll("[/\\\\]", "."); break; } @@ -146,6 +176,7 @@ } } // }}} + sVersion = props.getProperty("plugin." + sClass + ".version", ""); parseProps(sClass, props); bFilled = true; } //}}} @@ -222,15 +253,27 @@ if (isReference()) { return getRef().toString(); } String s; if (!bFilled) { fill(); } - s = "Plugin class name: " + sClass + ", jar name: " + sJar + "\n"; + s = "Plugin class name: " + sClass + ", jar name: " + sJar; + s += ", version: " + sVersion + "\n"; s += "jedit version: " + sJeditVersionFull; s += ", dependencies count: " + deps.size() + "\n"; - for (Dep dep: deps) { - s += "dependency: " + dep.sJar + " " + dep.sVersion + "\n"; - } + s += deps.toString(); return s; } + public PluginInfoType clone() + { + if (isReference()) { return getRef().clone(); } + PluginInfoType piNew = null; + try { + piNew = (PluginInfoType)super.clone(); + piNew.deps = this.deps.clone(); + } catch (CloneNotSupportedException e) { + throw new BuildException(e); + } + return piNew; + } + //{{{ setProjectProperties() method /** Stores plugin info in project properties. For details see {@link GetPluginInfoTask}. @@ -263,6 +306,39 @@ } } //}}} + //{{{ joinDeps method + /** Adds dependencies from <code>pi</code> to current dependencies. + @return <code>true</code> if there were new dependencies. */ + public boolean joinDeps(PluginInfoType pi2, StringBuilder sb) + { + boolean bNewDeps = false; + for (int i2 = 0; i2 < pi2.getDepCount(); i2++) { + int iState = 1; // 0 - same, 1 - new, 2 - update + Dep dep2 = pi2.getDep(i2); + for (Dep dep: this.filled().deps) { + if (dep.getJarName().equals(dep2.getJarName())) { + if (Misc.compareStrings(dep.getVersion(), dep2.getVersion(), true) + < 0) { + iState = 2; + dep.sVersion = dep2.getVersion(); + } else { + iState = 0; + } + break; + } + } + if (iState == 1) { + this.filled().deps.add(dep2); + } + if (iState != 0) { + sb.append(dep2.getJarName() + " " + dep2.getVersion() + " (" + + (iState == 2 ? "update" : "new") + ")\n"); + bNewDeps = true; + } + } + return bNewDeps; + } //}}} + //{{{ Dep class /** Plugin dependency information */ public static class Dep @@ -270,5 +346,59 @@ String sClass; String sVersion; String sJar; + + //{{{ get... methods + public String getClassName() { return sClass; } + public String getJarName() { return sJar; } + public String getVersion() { return sVersion; } + //}}} + } //}}} + + //{{{ DepList class + /** A list of dependencies being plugins */ + public static class DepList implements Iterable<Dep>, Cloneable + { + private ArrayList<Dep> a = new ArrayList<Dep>(); + + // several methods imitating ArrayList {{{ + public void add(Dep d) + { + a.add(d); + } + + public Dep get(int i) + { + return a.get(i); + } + + public int size() + { + return a.size(); + } + + public Iterator<Dep> iterator() + { + return a.iterator(); + } + + @SuppressWarnings (value="unchecked") + public DepList clone() + { + DepList depsNew = new DepList(); + depsNew.a = (ArrayList)this.a.clone(); + return depsNew; + } + //}}} + + public String toString() + { + StringBuilder sb = new StringBuilder(); + for (Dep dep: a) { + sb.append("dependency: " + dep.sJar + " " + dep.sVersion + "\n"); + } + return sb.toString(); + } + + } //}}} } \ No newline at end of file Modified: build-support/trunk/java-src/org/jedit/ant/antlib.xml =================================================================== --- build-support/trunk/java-src/org/jedit/ant/antlib.xml 2012-03-10 09:18:21 UTC (rev 21302) +++ build-support/trunk/java-src/org/jedit/ant/antlib.xml 2012-03-10 13:36:49 UTC (rev 21303) @@ -2,6 +2,8 @@ <antlib> <typedef name="plugininfo" classname="org.jedit.ant.PluginInfoType"/> + <taskdef name="download-plugin-deps-rec" + classname="org.jedit.ant.DownloadPluginDepsRecTask"/> <taskdef name="gen-plugin-deps-ivy-file" classname="org.jedit.ant.GenPluginDepsIvyFileTask"/> <taskdef name="get-plugin-info" classname="org.jedit.ant.GetPluginInfoTask"/> <taskdef name="get-plugin-jar-name" classname="org.jedit.ant.GetPluginJarNameTask"/> Modified: build-support/trunk/plugin-build.xml =================================================================== --- build-support/trunk/plugin-build.xml 2012-03-10 09:18:21 UTC (rev 21302) +++ build-support/trunk/plugin-build.xml 2012-03-10 13:36:49 UTC (rev 21303) @@ -631,17 +631,20 @@ <!-- {{{ def-jedit-tasks target ======================= --> <target name="def-jedit-tasks" - depends="jedit-tasks-javadoc" > + depends="get-lib-ivy, jedit-tasks-javadoc" > <mkdir dir="${jedit.classes}" /> <copy todir="${jedit.classes}"> <fileset dir="${jedit.src}" includes="**/antlib.xml" /> </copy> <javac srcdir="${jedit.src}" destdir="${jedit.classes}" - debug="true" > - <compilerarg value="-Xlint:deprecation"/> + debug="true" classpathref="ivy.jar.path" > + <compilerarg value="-Xlint:deprecation,unchecked"/> </javac> <taskdef resource="org/jedit/ant/antlib.xml" - uri="antlib:org.jedit.ant" classpath="${jedit.classes}"/> + uri="antlib:org.jedit.ant" + classpath="${jedit.classes}" + classpathref="ivy.jar.path" + /> </target> <!-- ===============================================}}} --> @@ -649,9 +652,15 @@ <!-- {{{ jedit-tasks-javadoc target =================== --> <target name="jedit-tasks-javadoc" - unless="jedit.tasks.javadoc.uptodate" > + depends="get-lib-ivy" + unless="${jedit.tasks.javadoc.uptodate}" > <javadoc sourcepath="${jedit.src}" - destdir="${build.support}/build/doc" /> + destdir="${build.support}/build/doc"> + <classpath refid="ivy.jar.path" /> + <classpath> + <pathelement path="${java.class.path}" /> + </classpath> + </javadoc> </target> <!-- ===============================================}}} --> @@ -669,7 +678,7 @@ <local name="src.fileset" /> <local name="extras.fileset" /> <jedit:get-plugin-info> - <jedit:plugininfo> + <jedit:plugininfo id="cur.plugin.info"> <fsSrc dir="${src.dir}" > <selector refid="compileFiles" /> </fsSrc> @@ -684,8 +693,6 @@ <echo>Plugin properties discovered:</echo> <echo>plugin.class.name: ${plugin.class.name}</echo> <echo>plugin.dep.count: ${plugin.dep.count}</echo> - <echo></echo> - <echo></echo> <fail>Property plugin.jedit.version.full not set. Getting plugin properties failed. <condition> @@ -707,8 +714,9 @@ <mkdir dir="${dir}" /> <jedit:gen-plugin-deps-ivy-file template="${plugin.deps.ivy.template}" - outFile="${plugin.deps.ivy.file}" - /> + outFile="${plugin.deps.ivy.file}" > + <jedit:plugininfo refid="cur.plugin.info" /> + </jedit:gen-plugin-deps-ivy-file> </target> <!-- }}} ================================================== --> @@ -726,7 +734,24 @@ </target> <!-- }}} ================================================== --> + <!-- {{{ check-plugin-deps-rec-dir target ============= --> +<!-- Sets up the property and the directory for plugin dependencies. --> + <target name="check-plugin-deps-rec-dir" > + <mkdir dir="${build.lib}" /> + <property name="plugin.deps.rec.dir" + value="${build.lib}/plugin-deps-rec" /> + <condition property="plugin.deps.rec.present"> + <available file="${plugin.deps.rec.dir}" type="dir" /> + </condition> + </target> +<!-- }}} ================================================== --> + <!-- {{{ download-plugin-deps target ================== --> + <!-- Downloads plugins being plugin dependencies, but only those + directly specified in properties files. + This is done only once, as the existence + of the directory blocks the target. May be used for plugin + building. For running - recursive dependencies are required. --> <target name="download-plugin-deps" depends="check-plugin-deps-dir, get-lib-ivy, def-jedit-tasks" unless="plugin.deps.present"> @@ -735,10 +760,15 @@ <property name="plugin.deps.ivy.file" value="${basedir}/build/ivy.plugin.deps.xml" /> <check-file-var var="plugin.deps.ivy.template" /> - <antcall target="gen-plugin-deps-ivy-file" /> + <antcall target="gen-plugin-deps-ivy-file" + inheritrefs="true" /> <ivy:retrieve file="${plugin.deps.ivy.file}" pattern="${plugin.deps.dir}/[artifact].zip" log="download-only" /> + <!-- Usually ivy creates the directory, but some plugins just + don't have any plugin dependencies specified. To make + subsequent targets safe, the directory must be created now. --> + <mkdir dir="${plugin.deps.dir}" /> <unzip dest="${plugin.deps.dir}"> <fileset dir="${plugin.deps.dir}" includes="*.zip" /> </unzip> @@ -748,6 +778,25 @@ </target> <!-- }}} ================================================== --> + <!-- {{{ download-plugin-deps-rec target ================== --> + <!-- Unlike non-recursive download - this is not blocked by the + existance of the directory. --> + <target name="download-plugin-deps-rec" + depends="check-plugin-deps-rec-dir, get-lib-ivy, def-jedit-tasks, + get-plugin-info" > + <property name="plugin.deps.ivy.template" + value="${build.support}/ivy.plugin.deps.template.xml" /> + <check-file-var var="plugin.deps.ivy.template" /> + <jedit:download-plugin-deps-rec + todir="${plugin.deps.rec.dir}" + ivyfilesdir="${build.dir}" + template="${plugin.deps.ivy.template}" > + <jedit:plugininfo refid="cur.plugin.info" /> + </jedit:download-plugin-deps-rec> + + </target> + <!-- }}} ================================================== --> + <!-- ================================================== }}}--> </project> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jar...@us...> - 2012-08-07 06:06:00
|
Revision: 21982 http://jedit.svn.sourceforge.net/jedit/?rev=21982&view=rev Author: jarekczek Date: 2012-08-07 06:05:54 +0000 (Tue, 07 Aug 2012) Log Message: ----------- Changed jedit file server for ivy, from switched of ovh to freefr Modified Paths: -------------- build-support/trunk/ivysettings.properties build-support/trunk/ivysettings.xml Modified: build-support/trunk/ivysettings.properties =================================================================== --- build-support/trunk/ivysettings.properties 2012-08-06 19:19:16 UTC (rev 21981) +++ build-support/trunk/ivysettings.properties 2012-08-07 06:05:54 UTC (rev 21982) @@ -1 +1,5 @@ -mirror=ovh \ No newline at end of file +#mirror=ovh +#artifactPath=${mirror}.dl.sourceforge.net/sourceforge/jedit-plugins + +mirror=freefr +artifactPath=${mirror}.dl.sourceforge.net/project/jedit-plugins/[artifact]/[revision] Modified: build-support/trunk/ivysettings.xml =================================================================== --- build-support/trunk/ivysettings.xml 2012-08-06 19:19:16 UTC (rev 21981) +++ build-support/trunk/ivysettings.xml 2012-08-07 06:05:54 UTC (rev 21982) @@ -3,10 +3,10 @@ <resolvers> <ibiblio name="maven" m2compatible="true" usepoms="false"/> <url name="jedit-plugins-resolver"> - <artifact pattern="jar:http://${mirror}.dl.sourceforge.net/sourceforge/jedit-plugins/[artifact]-[revision]-bin.zip!/[artifact].jar" /> + <artifact pattern="jar:http://${artifactPath}/[artifact]-[revision]-bin.zip!/[artifact].jar" /> </url> <url name="jedit-plugins-zip-resolver"> - <artifact pattern="http://${mirror}.dl.sourceforge.net/sourceforge/jedit-plugins/[artifact]-[revision]-bin.zip" /> + <artifact pattern="http://${artifactPath}/[artifact]-[revision]-bin.zip" /> </url> </resolvers> <modules> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ker...@us...> - 2013-02-27 20:17:36
|
Revision: 22816 http://jedit.svn.sourceforge.net/jedit/?rev=22816&view=rev Author: kerik-sf Date: 2013-02-27 20:17:28 +0000 (Wed, 27 Feb 2013) Log Message: ----------- fix FR #3496032 auto-add release info to users-guide.xsl from properties - properties from ThePlugin.props are now accessible in the build file - plugin.class and plugin.version are also available Modified Paths: -------------- build-support/trunk/plugin-build.xml build-support/trunk/users-guide.xsl Modified: build-support/trunk/plugin-build.xml =================================================================== --- build-support/trunk/plugin-build.xml 2013-02-27 19:23:28 UTC (rev 22815) +++ build-support/trunk/plugin-build.xml 2013-02-27 20:17:28 UTC (rev 22816) @@ -51,6 +51,69 @@ <property file="${basedir}/../build.properties" /> <property file="${user.home}/.build.properties" /> <property file="${user.home}/build.properties" /> + + <!-- {{{ load properties from *.props, to find out which version the plugin + is at. Defines 2 properties: + - plugin.class: to resolve other plugin class dependent properties + - plugin.version: for users-guide.xsl to add version automatically + --> + <!-- ================================================== --> + <script language="javascript"> <![CDATA[ + function echo(msg) + { + echot = project.createTask("echo"); + echot.setMessage(msg); + echot.perform(); + } + + var filter = new java.io.FileFilter({accept: function(pathname) { + return pathname.getName().endsWith(".props"); + }}); + + basedir = project.getProperty().get("basedir"); + var props = new java.io.File(basedir).listFiles(filter); + if(props.length == 0)echo("no *.props file found in "+basedir); + + /* load every *.props file found in basedir (hopefully only one) */ + for(i=0;i<props.length;i++){ + readprops = project.createTask("property"); + readprops.setFile(props[i]); + readprops.perform(); + + } + + /* look in all properties for plugin.xxx.name */ + for(it=project.getProperties().entrySet().iterator();it.hasNext();) + { + var v = it.next(); + if(v.getKey().startsWith("plugin.") && v.getKey().endsWith(".name")) + { + + /* define plugin.class: it may prove useful for other tasks */ + pluginclass = v.getKey().substring(7,v.getKey().lastIndexOf(".name")); + + setpluginclass = project.createTask("property"); + setpluginclass.setName("plugin.class"); + setpluginclass.setValue(pluginclass); + setpluginclass.perform(); + + /* define plugin.version: it's what we wanted, after all */ + pluginversion = project.getProperties().get("plugin."+pluginclass+".version") + + setpluginversion = project.createTask("property"); + setpluginversion.setName("plugin.version"); + setpluginversion.setValue(pluginversion); + setpluginversion.perform(); + + break; + } + } + + echo("plugin.class is "+project.getProperties().get("plugin.class")); + echo("plugin.version is "+project.getProperties().get("plugin.version")); + ]]> </script> + <!-- }}} --> + <!-- <echo>plugin-build java.home=${java.home}</echo> --> <!-- where to find jEdit and plugins --> <property name="sourceforge.user.name" @@ -441,6 +504,9 @@ <filterset> <filter token="docs.style.sheet" value="${docs.style.sheet}" /> + <!-- property deduced via javascript from MyPlugin.props --> + <filter token="plugin.version" + value="${plugin.version}" /> </filterset> </copy> <antcall target="docs-${docs-proc.target}" /> Modified: build-support/trunk/users-guide.xsl =================================================================== --- build-support/trunk/users-guide.xsl 2013-02-27 19:23:28 UTC (rev 22815) +++ build-support/trunk/users-guide.xsl 2013-02-27 20:17:28 UTC (rev 22816) @@ -280,10 +280,18 @@ <p> <strong> <!-- release --> + <xsl:choose> + <xsl:when test="articleinfo/releaseinfo | bookinfo/releaseinfo + | artheader/releaseinfo | info/releaseinfo"> <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="articleinfo/releaseinfo"/> <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="bookinfo/releaseinfo"/> <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="artheader/releaseinfo"/> <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="info/releaseinfo"/> + </xsl:when> + <xsl:otherwise> + <xsl:text>Version @plugin.version@</xsl:text> + </xsl:otherwise> + </xsl:choose> <!-- compute release date automatically --> <xsl:text> (</xsl:text> @@ -303,7 +311,7 @@ </tr> </table> - <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="articleinfo/legalnotice"/> + <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="articleinfo/legalnotice | bookinfo/legalnotice"/> <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="artheader/legalnotice"/> <xsl:apply-templates mode="article.titlepage.recto.auto.mode" select="info/legalnotice"/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2019-08-22 00:36:35
|
Revision: 24944 http://sourceforge.net/p/jedit/svn/24944 Author: ezust Date: 2019-08-22 00:36:30 +0000 (Thu, 22 Aug 2019) Log Message: ----------- Make common plugin build support work with Java 11, by removing usage of compiler.source and compiler.target. Modified Paths: -------------- build-support/trunk/ivysettings.properties build-support/trunk/plugin-build.xml Modified: build-support/trunk/ivysettings.properties =================================================================== --- build-support/trunk/ivysettings.properties 2019-08-19 18:50:51 UTC (rev 24943) +++ build-support/trunk/ivysettings.properties 2019-08-22 00:36:30 UTC (rev 24944) @@ -2,4 +2,5 @@ #artifactPath=${mirror}.dl.sourceforge.net/sourceforge/jedit-plugins mirror=freefr -artifactPath=${mirror}.dl.sourceforge.net/project/jedit-plugins/[artifact]/[revision] +artifactPath=downloads.sourceforge.net/project/jedit-plugins/[artifact]/[revision]/[artifact]-[revision]-bin.zip!/[artifact].jar +downloads.sourceforge.net/project/jedit-plugins/[artifact]/[revision]/[artifact]-[revision]-bin.zip!/[artifact].jar \ No newline at end of file Modified: build-support/trunk/plugin-build.xml =================================================================== --- build-support/trunk/plugin-build.xml 2019-08-19 18:50:51 UTC (rev 24943) +++ build-support/trunk/plugin-build.xml 2019-08-22 00:36:30 UTC (rev 24944) @@ -147,12 +147,10 @@ <property name="compiler.deprecation" value="off" /> <property name="compiler.verbose" value="off" /> <property name="compiler.nowarn" value="off" /> - <property name="compiler.target" value="1.7" /> - <property name="compiler.source" value="1.7" /> <property name="compiler.listfiles" value="no" /> <property name="compiler.fork" value="no" /> <property name="compiler.bootclasspath" value="${java.home}/lib/rt.jar"/> - <property name="compiler.extdirs" value="${java.ext.dirs}"/> + <!-- property name="compiler.extdirs" value="${java.ext.dirs}"/ --> <property name="compiler.userargs" value="" /> <!-- default documentation options --> @@ -233,12 +231,9 @@ deprecation="${compiler.deprecation}" verbose="${compiler.verbose}" nowarn="${compiler.nowarn}" - target="${compiler.target}" - source="${compiler.source}" listfiles="${compiler.listfiles}" fork="${compiler.fork}" bootclasspath="${compiler.bootclasspath}" - extdirs="${compiler.extdirs}" > <src location="${src.dir}" /> <compilerarg line="${compiler.userargs}" /> @@ -344,8 +339,6 @@ compiler.deprecation: deprecation option (off) compiler.verbose: the verbose option (off) compiler.nowarn: the nowarn option (off) - compiler.target: the target option (1.6) - compiler.source: the source option (1.6) compiler.listfiles: the listfiles option (no) --> <target name="compile" description="Compile the plugin's classes" depends="resolve"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2020-03-07 03:06:18
|
Revision: 24981 http://sourceforge.net/p/jedit/svn/24981 Author: ezust Date: 2020-03-07 03:06:17 +0000 (Sat, 07 Mar 2020) Log Message: ----------- Add default compiler source/target for JDK 11. Modified Paths: -------------- build-support/trunk/build.properties.sample build-support/trunk/plugin-build.xml Modified: build-support/trunk/build.properties.sample =================================================================== --- build-support/trunk/build.properties.sample 2020-03-04 08:27:39 UTC (rev 24980) +++ build-support/trunk/build.properties.sample 2020-03-07 03:06:17 UTC (rev 24981) @@ -79,10 +79,10 @@ #compiler.nowarn=off # Target JVM version -#compiler.target=1.6 +#compiler.target=11 # Java version of the source files -#compiler.source=1.6 +#compiler.source=11 # List files being compiled #compiler.listfiles=no @@ -150,7 +150,7 @@ #docs.style.sheet=${docbook.xsl}/${docbook.xsl.sheet} # Windows binaries can be gotten at http://www.zlatkovic.com/libxml.en.html -# You need iconv, libxml2, libxslt, and zlib for the xsltproc package. +# You need iconv, libxml2, libxslt, and zlib for the xsltproc package. # The path to the xsltproc executable #xsltproc.executable=C:\\Programme\\xsltproc\\xsltproc.exe Modified: build-support/trunk/plugin-build.xml =================================================================== --- build-support/trunk/plugin-build.xml 2020-03-04 08:27:39 UTC (rev 24980) +++ build-support/trunk/plugin-build.xml 2020-03-07 03:06:17 UTC (rev 24981) @@ -141,6 +141,8 @@ <property name="build.lib" value="${build.dir}/lib" /> <!-- default compiler flags --> + <property name="compiler.source" value="11" /> ++ <property name="compiler.target" value="11" /> <property name="compiler.debug" value="off" /> <property name="compiler.debuglevel" value="lines,vars,source" /> <property name="compiler.optimize" value="off" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2020-03-11 19:53:42
|
Revision: 24991 http://sourceforge.net/p/jedit/svn/24991 Author: kpouer Date: 2020-03-11 19:53:40 +0000 (Wed, 11 Mar 2020) Log Message: ----------- updated mirror and plugin resolver Modified Paths: -------------- build-support/trunk/ivysettings.properties build-support/trunk/ivysettings.xml Modified: build-support/trunk/ivysettings.properties =================================================================== --- build-support/trunk/ivysettings.properties 2020-03-11 19:47:57 UTC (rev 24990) +++ build-support/trunk/ivysettings.properties 2020-03-11 19:53:40 UTC (rev 24991) @@ -1,6 +1,3 @@ -#mirror=ovh -#artifactPath=${mirror}.dl.sourceforge.net/sourceforge/jedit-plugins +mirror=netcologne +zipPath=https://${mirror}.dl.sourceforge.net/project/jedit-plugins/[artifact]/[revision]/[artifact]-[revision]-bin.zip -mirror=freefr -artifactPath=downloads.sourceforge.net/project/jedit-plugins/[artifact]/[revision]/[artifact]-[revision]-bin.zip!/[artifact].jar - Modified: build-support/trunk/ivysettings.xml =================================================================== --- build-support/trunk/ivysettings.xml 2020-03-11 19:47:57 UTC (rev 24990) +++ build-support/trunk/ivysettings.xml 2020-03-11 19:53:40 UTC (rev 24991) @@ -1,12 +1,12 @@ <ivysettings> <properties file="ivysettings.properties"/> <resolvers> - <ibiblio name="maven" m2compatible="true" usepoms="false"/> + <ibiblio name="maven" m2compatible="true" usepoms="false" root="https://repo1.maven.org/maven2"/> <url name="jedit-plugins-resolver"> - <artifact pattern="jar:http://${artifactPath}/[artifact]-[revision]-bin.zip!/[artifact].jar" /> + <artifact pattern="jar:${zipPath}!/[artifact].jar" /> </url> <url name="jedit-plugins-zip-resolver"> - <artifact pattern="http://${artifactPath}/[artifact]-[revision]-bin.zip" /> + <artifact pattern="${zipPath}" /> </url> </resolvers> <modules> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |