Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

1800 lines (1609 sloc) 80.369 kb
<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="jar" name="JRuby">
<description>JRuby is a Java implementation of a Ruby runtime.</description>
<!-- First try to load machine-specific properties. -->
<property file="build.properties"/>
<!-- Then set defaults for any values not set by build.properties -->
<property file="default.build.properties"/>
<path id="build.classpath">
<fileset dir="${build.lib.dir}" includes="*.jar"/>
</path>
<path id="jruby.execute.classpath">
<path refid="build.classpath"/>
<pathelement path="${jruby.classes.dir}"/>
</path>
<path id="emma.classpath">
<pathelement location="${build.lib.dir}/emma.jar" />
<pathelement location="${build.lib.dir}/emma_ant.jar" />
</path>
<patternset id="java.src.pattern">
<include name="**/*.java"/>
<exclude unless="sun-misc-signal" name="**/SunSignalFacade.java"/>
</patternset>
<import file="netbeans-ant.xml" optional="true"/>
<import file="ivy/build.xml" />
<condition property="dev.null" value="/dev/null">
<os family="unix"/>
</condition>
<condition property="dev.null" value="NUL">
<os family="windows"/>
</condition>
<condition property="dev.null" value="dev_null">
<not>
<or>
<os family="unix"/>
<os family="windows"/>
</or>
</not>
</condition>
<!-- test launching: force encoding to UTF-8 because of stupid Macroman on OS X -->
<condition property="test.sysprops.set" value="test.sysprops.mac">
<equals arg1="${java.vendor}" arg2="Apple Inc."/>
</condition>
<condition property="test.sysprops.set" value="test.sysprops.other">
<not><equals arg1="${java.vendor}" arg2="Apple Inc."/></not>
</condition>
<property name="mac.file.encoding" value="UTF-8"/>
<propertyset id="test.sysprops.mac">
<propertyref name="mac.file.encoding"/>
</propertyset>
<propertyset id="test.sysprops.other">
</propertyset>
<propertyset id="test.sysproperties">
<propertyset refid="${test.sysprops.set}"/>
<mapper type="glob" from="mac.*" to="*"/>
</propertyset>
<!-- if ruby.home is not set, use env var -->
<condition property="ruby.home" value="${env.RUBY_HOME}">
<not><isset property="ruby.home"/></not>
</condition>
<condition property="is.windows" value="true">
<os family="windows"/>
</condition>
<tstamp><format property="build.date" pattern="yyyy-MM-dd"/></tstamp>
<property environment="env"/>
<!-- Use JAVA_OPTS env var if set, -ea (supported by all JVMs) otherwise -->
<condition property="java.opts" value="${env.JAVA_OPTS}"><isset property="env.JAVA_OPTS"/></condition>
<condition property="java.opts" value="-ea"><not><isset property="java.opts"/></not></condition>
<!-- sets up a "make" command from ENV, if available -->
<condition property="make.cmd" value="${env.MAKE}"><isset property="env.MAKE"/></condition>
<condition property="make.cmd" value="make"><not><isset property="make.cmd"/></not></condition>
<property name="version.ruby" value="${version.ruby.major}.${version.ruby.minor}"/>
<property name="rdoc.archive" value="docs/rdocs.tar.gz"/>
<!-- Initializes the build -->
<target name="init" unless="init.hasrun">
<!-- do not unpack rdocs if they're already there -->
<uptodate property="extract-rdocs.hasrun" srcfile="${rdoc.archive}" targetfile="share/ri.jar"/>
<!-- do not generate ri cache if it's already generated -->
<uptodate property="generate-ri-cache.hasrun" srcfile="${rdoc.archive}" targetfile="share/ri_cache.bin.gz"/>
<!-- do not unpack native libs if they're already there -->
<uptodate property="native-libs-uptodate" targetfile="${lib.dir}/native/libs.OK">
<srcfiles dir= "build_lib" includes="jffi-*.jar"/>
</uptodate>
<!-- set appropriate spec tag filter if on windows -->
<condition property="spec.windows.flag" value="-g windows">
<os family="windows"/>
</condition>
<!-- if bin/jruby does not exist, copy from bin/jruby.bash -->
<condition property="prepare-bin-jruby.hasrun" value="true">
<available file="bin/jruby"/>
</condition>
<antcall target="prepare-bin-jruby"/>
<!-- Checks if specific libs and versions are avaiable -->
<available property="sun-misc-signal"
classname="sun.misc.Signal"/>
<property name="init.hasrun" value="true"/>
</target>
<!-- Prepares a bin/jruby executable from bin/jruby.bash -->
<target name="prepare-bin-jruby" unless="prepare-bin-jruby.hasrun">
<exec executable="/bin/sh" osfamily="unix">
<arg line="-c 'test -f &quot;${basedir}/bin/jruby&quot; || cp &quot;${basedir}/bin/jruby.bash&quot; &quot;${basedir}/bin/jruby&quot;'"/>
</exec>
<chmod perm="755" file="bin/jruby"/>
</target>
<!-- Creates the directories needed for building -->
<target name="prepare" depends="init, create-dirs, copy-resources, extract-rdocs, update-constants">
</target>
<target name="create-dirs" unless="create-dirs.hasrun">
<mkdir dir="${build.dir}"/>
<mkdir dir="${classes.dir}"/>
<mkdir dir="${jruby.classes.dir}"/>
<mkdir dir="${test.classes.dir}"/>
<mkdir dir="${test.results.dir}"/>
<mkdir dir="${html.test.results.dir}"/>
<mkdir dir="${docs.dir}"/>
<mkdir dir="${api.docs.dir}"/>
<property name="create-dirs.hasrun" value="true"/>
</target>
<target name="copy-resources" unless="copy-resources.hasrun">
<copy todir="${jruby.classes.dir}" preservelastmodified="true">
<fileset dir="${src.dir}">
<include name="**/*.rb"/>
</fileset>
</copy>
<copy todir="${jruby.classes.dir}/builtin" preservelastmodified="true">
<fileset dir="${lib.dir}/ruby/site_ruby/shared/builtin">
<include name="**/*.rb"/>
<include name="**/*.jar"/>
</fileset>
</copy>
<property name="copy-resources.hasrun" value="true"/>
</target>
<!-- extract rdoc archive into share/ -->
<target name="extract-rdocs" depends="init" unless="extract-rdocs.hasrun">
<untar src="${rdoc.archive}" dest="${basedir}" compression="gzip"/>
<jar file="share/ri.jar">
<fileset dir="share" includes="ri/**/*"/>
</jar>
<property name="RDOCS_EXTRACTED" value="true"/>
</target>
<macrodef name="update-constants">
<attribute name="tzdata-version" default="${tzdata.distributed.version}"/>
<sequential>
<echo message="Updating Constants.java"/>
<!-- gross bit of property-juggling here to handle error case when git can't be executed -->
<exec osfamily="unix" executable="/bin/sh" outputproperty="jruby.revision.output" failonerror="false" failifexecutionfails="false" errorproperty="jruby.revision.error">
<arg line="-c 'git log -1 --format=format:%h'"/>
</exec>
<exec osfamily="windows" executable="cmd" outputproperty="jruby.revision.output" failonerror="false" failifexecutionfails="false" errorproperty="jruby.revision.error">
<arg line="/c git log -1 --format=format:%h"/>
</exec>
<condition property="jruby.revision" value="fffffff">
<equals arg1="${jruby.revision.output}" arg2=""/>
</condition>
<condition property="jruby.revision" value="${jruby.revision.output}">
<not><equals arg1="${jruby.revision.output}" arg2=""/></not>
</condition>
<echo message="...using git revision = ${jruby.revision}, tzdata = @{tzdata-version}"/>
<!-- avoid overwriting if it hasn't changed, to avoid recompiles -->
<copy file="src_gen/org/jruby/runtime/Constants.java"
tofile="src_gen/org/jruby/runtime/Constants.java.old"
preservelastmodified="true" failonerror="false"/>
<copy file="src/org/jruby/runtime/Constants.java"
overwrite="true"
tofile="src_gen/org/jruby/runtime/Constants.java.gen" >
<filterset>
<filter token="version.ruby.major" value="${version.ruby.major}"/>
<filter token="version.ruby" value="${version.ruby}"/>
<filter token="version.ruby.patchlevel" value="${version.ruby.patchlevel}"/>
<filter token="version.ruby1_9.major" value="${version.ruby1_9.major}"/>
<filter token="version.ruby1_9" value="${version.ruby1_9}"/>
<filter token="version.ruby1_9.patchlevel" value="${version.ruby1_9.patchlevel}"/>
<filter token="version.ruby1_9.revision" value="${version.ruby1_9.revision}"/>
<filter token="build.date" value="${build.date}"/>
<filter token="version.jruby" value="${version.jruby}"/>
<filter token="java.specification.version" value="${java.specification.version}"/>
<filter token="javac.version" value="${javac.version}"/>
<filter token="os.arch" value="${os.arch}"/>
<filter token="jruby.revision" value="${jruby.revision}"/>
<filter token="joda.time.version" value="${joda.time.version}"/>
<filter token="tzdata.version" value="@{tzdata-version}"/>
<filter token="jruby.default.ruby.version" value="${jruby.default.ruby.version}"/>
</filterset>
</copy>
<condition property="constants.java.is.same">
<filesmatch file1="src_gen/org/jruby/runtime/Constants.java.gen" file2="src_gen/org/jruby/runtime/Constants.java.old" textfile="true"/>
</condition>
<antcall target="_uc_internal_"/>
<property name="update-constants.hasrun" value="true"/>
</sequential>
</macrodef>
<target name="update-constants" unless="update-constants.hasrun">
<update-constants/>
</target>
<target name="_uc_internal_" unless="constants.java.is.same">
<copy file="src_gen/org/jruby/runtime/Constants.java.gen" tofile="src_gen/org/jruby/runtime/Constants.java"/>
<javac destdir="${jruby.classes.dir}" debug="true" srcdir="src_gen"
includes="org/jruby/runtime/Constants.java" source="${javac.version}"
target="${javac.version}" deprecation="true" encoding="UTF-8"
includeantruntime="false"/>
</target>
<target name="compile-annotation-binder">
<mkdir dir="src_gen"/>
<javac destdir="${jruby.classes.dir}" debug="true" srcdir="${src.dir}"
sourcepath="" classpathref="build.classpath" source="${javac.version}"
target="${javac.version}" deprecation="true" encoding="UTF-8"
includeantruntime="false">
<include name="org/jruby/anno/FrameField.java"/>
<include name="org/jruby/anno/AnnotationBinder.java"/>
<include name="org/jruby/anno/JRubyMethod.java"/>
<include name="org/jruby/anno/FrameField.java"/>
<include name="org/jruby/CompatVersion.java"/>
<include name="org/jruby/runtime/Visibility.java"/>
<include name="org/jruby/util/CodegenUtils.java"/>
</javac>
</target>
<target name="compile" depends="compile-jruby, generate-method-classes, generate-unsafe"
description="Compile the source files for the project.">
</target>
<target name="compile-jruby" depends="prepare, compile-annotation-binder" unless="compiled">
<!-- Generate binding logic ahead of time -->
<apt factory="org.jruby.anno.AnnotationBinder" destdir="${jruby.classes.dir}"
debug="true" source="${javac.version}" target="${javac.version}"
deprecation="true" encoding="UTF-8" includeantruntime="true">
<classpath refid="jruby.execute.classpath"/>
<src path="${src.dir}"/>
<exclude name="org/jruby/runtime/Constants.java"/>
<exclude name="java/dyn/**"/>
<patternset refid="java.src.pattern"/>
<compilerarg line="-XDignore.symbol.file=true"/>
<compilerarg line="-J-Xmx${jruby.compile.memory}"/>
</apt>
<!-- Apply any instrumentation that is enabled (code coverage, etc) -->
<antcall target="instrument"/>
<property name="compiled" value="true"/>
</target>
<target name="generate-method-classes">
<available file="src_gen/annotated_classes.txt" property="annotations.changed"/>
<antcall target="_gmc_internal_"/>
</target>
<target name="_gmc_internal_" if="annotations.changed">
<echo message="Generating invokers..."/>
<java classname="org.jruby.anno.InvokerGenerator" fork="true" failonerror="true">
<classpath refid="jruby.execute.classpath"/>
<jvmarg line="${java.opts}"/>
<!-- uncomment this line when building on a JVM with invokedynamic
<jvmarg line="-XX:+InvokeDynamic"/>
-->
<sysproperty key="jruby.bytecode.version" value="${javac.version}"/>
<arg value="src_gen/annotated_classes.txt"/>
<arg value="${jruby.classes.dir}"/>
</java>
<echo message="Compiling populators..."/>
<javac destdir="${jruby.classes.dir}" debug="true" source="${javac.version}"
target="${javac.version}" deprecation="true" encoding="UTF-8"
includeantruntime="true">
<classpath refid="jruby.execute.classpath"/>
<src path="src_gen"/>
<patternset refid="java.src.pattern"/>
</javac>
<delete file="src_gen/annotated_classes.txt"/>
</target>
<target name="generate-unsafe">
<available file="${jruby.classes.dir}/org/jruby/util/unsafe/GeneratedUnsafe.class" property="unsafe.not.needed"/>
<antcall target="_gu_internal_"/>
</target>
<target name="_gu_internal_" unless="unsafe.not.needed">
<echo message="Generating Unsafe impl..."/>
<java classname="org.jruby.util.unsafe.UnsafeGenerator" fork="true" failonerror="true">
<classpath refid="jruby.execute.classpath"/>
<jvmarg line="${java.opts}"/>
<!-- uncomment this line when building on a JVM with invokedynamic
<jvmarg line="-XX:+InvokeDynamic"/>
-->
<arg value="org.jruby.util.unsafe"/>
<arg value="${jruby.classes.dir}/org/jruby/util/unsafe"/>
</java>
</target>
<target name="unzip-native-libs" unless="native-libs-uptodate">
<unzip-native-libs destination.dir="${lib.dir}/native"/>
<echo file="${lib.dir}/native/libs.OK"/>
</target>
<target name="jar-jruby" depends="init, compile, unzip-native-libs" unless="jar-up-to-date, jar-jruby.hasrun">
<jar destfile="${lib.dir}/jruby.jar" compress="true" index="true" update="true">
<fileset dir="${jruby.classes.dir}"/>
<zipfileset src="${asm.jar}"/>
<zipfileset src="${asm.commons.jar}"/>
<zipfileset src="${asm.util.jar}"/>
<zipfileset src="${asm.analysis.jar}"/>
<zipfileset src="${asm.tree.jar}"/>
<zipfileset src="${build.lib.dir}/bytelist.jar"/>
<zipfileset src="${build.lib.dir}/constantine.jar"/>
<zipfileset src="${build.lib.dir}/jline-${jline.version}.jar"/>
<zipfileset src="${build.lib.dir}/jcodings.jar"/>
<zipfileset src="${build.lib.dir}/joni.jar"/>
<zipfileset src="${build.lib.dir}/jnr-netdb.jar"/>
<zipfileset src="${build.lib.dir}/jnr-posix.jar"/>
<zipfileset src="${build.lib.dir}/jaffl.jar"/>
<zipfileset src="${build.lib.dir}/jffi.jar"/>
<zipfileset src="${build.lib.dir}/jffi-i386-Linux.jar"/>
<zipfileset src="${build.lib.dir}/jffi-x86_64-Linux.jar"/>
<zipfileset src="${build.lib.dir}/jffi-Darwin.jar"/>
<zipfileset src="${build.lib.dir}/jffi-i386-SunOS.jar"/>
<zipfileset src="${build.lib.dir}/jffi-x86_64-SunOS.jar"/>
<zipfileset src="${build.lib.dir}/jffi-ppc-AIX.jar"/>
<zipfileset src="${build.lib.dir}/jffi-ppc-Linux.jar"/>
<zipfileset src="${build.lib.dir}/jffi-ppc64-Linux.jar"/>
<zipfileset src="${build.lib.dir}/jffi-sparc-SunOS.jar"/>
<zipfileset src="${build.lib.dir}/jffi-sparcv9-SunOS.jar"/>
<zipfileset src="${build.lib.dir}/jffi-i386-FreeBSD.jar"/>
<zipfileset src="${build.lib.dir}/jffi-x86_64-FreeBSD.jar"/>
<zipfileset src="${build.lib.dir}/jffi-i386-OpenBSD.jar"/>
<zipfileset src="${build.lib.dir}/jffi-x86_64-OpenBSD.jar"/>
<zipfileset src="${build.lib.dir}/jffi-i386-Windows.jar"/>
<zipfileset src="${build.lib.dir}/jffi-x86_64-Windows.jar"/>
<zipfileset src="${build.lib.dir}/jffi-s390x-Linux.jar"/>
<zipfileset src="${build.lib.dir}/joda-time-${joda.time.version}.jar"/>
<zipfileset src="${build.lib.dir}/snakeyaml-1.9.jar"/>
<zipfileset src="${build.lib.dir}/yecht.jar"/>
<zipfileset src="${build.lib.dir}/yydebug.jar"/>
<zipfileset src="${build.lib.dir}/nailgun-0.7.1.jar"/>
<zipfileset src="${build.lib.dir}/jzlib-1.1.0.jar"/>
<metainf dir="spi">
<include name="services/**"/>
</metainf>
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-Class" value="org.jruby.Main"/>
</manifest>
</jar>
<antcall target="add-emma-jars"/>
<!-- temporarily commented out due to JRUBY-6163 <antcall target="generate-ri-cache"/> -->
<property name="jar-jruby.hasrun" value="true"/>
</target>
<target name="add-emma-jars" if="coverage.enabled">
<jar destfile="${lib.dir}/jruby.jar" compress="true" index="true" update="true">
<zipfileset src="${build.lib.dir}/emma.jar"/>
</jar>
</target>
<target name="generate-ri-cache" unless="generate-ri-cache.hasrun">
<echo message="Using JRuby to generate RI cache to share"/>
<property name="jruby.home" value="${basedir}"/>
<java classname="org.jruby.Main" resultproperty="ri.output" output="false" failonerror="true">
<classpath refid="jruby.execute.classpath"/>
<sysproperty key="jruby.home" value="${basedir}"/>
<arg value="-S"/><arg value="ri"/><arg value="String"/>
</java>
<property name="generate-ri-cache.hasrun" value="true"/>
</target>
<!-- Jar up a "base" jar that does not include any maven-sourced dependencies
other than ASM, which is rewritten to avoid conflicts. -->
<target name="jar-jruby-core" depends="compile" unless="jar-jruby-core.hasrun">
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpath="${build.lib.dir}/jarjar-1.0.jar"/>
<jarjar destfile="${lib.dir}/jruby-core.jar" compress="true" index="true">
<fileset dir="${jruby.classes.dir}"/>
<zipfileset src="${asm.jar}"/>
<zipfileset src="${asm.util.jar}"/>
<zipfileset src="${build.lib.dir}/yecht.jar"/>
<metainf dir="spi">
<include name="services/**"/>
</metainf>
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-Class" value="org.jruby.Main"/>
</manifest>
<rule pattern="org.objectweb.asm.**" result="org.jruby.org.objectweb.asm.@1"/>
</jarjar>
<antcall target="_osgify-jar_">
<param name="bndfile" value="jruby.bnd" />
<param name="jar.wrap" value="${lib.dir}/jruby.jar" />
<param name="bar.wrap" value="${lib.dir}/jruby.bar" />
</antcall>
<property name="jar-jruby-core.hasrun" value="true"/>
</target>
<target name="jar-jruby-dist" depends="compile">
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpath="${build.lib.dir}/jarjar-1.0.jar"/>
<echo message="jarjaring for dist"/>
<jarjar destfile="${lib.dir}/jruby.jar" compress="true">
<fileset dir="${jruby.classes.dir}"/>
<zipfileset src="${asm.jar}"/>
<zipfileset src="${asm.commons.jar}"/>
<zipfileset src="${asm.util.jar}"/>
<zipfileset src="${asm.analysis.jar}"/>
<zipfileset src="${asm.tree.jar}"/>
<zipfileset src="${build.lib.dir}/constantine.jar"/>
<zipfileset src="${build.lib.dir}/bytelist.jar"/>
<zipfileset src="${build.lib.dir}/jline-${jline.version}.jar"/>
<zipfileset src="${build.lib.dir}/jcodings.jar"/>
<zipfileset src="${build.lib.dir}/joni.jar"/>
<zipfileset src="${build.lib.dir}/jnr-netdb.jar"/>
<zipfileset src="${build.lib.dir}/jnr-posix.jar"/>
<zipfileset src="${build.lib.dir}/jaffl.jar"/>
<zipfileset src="${build.lib.dir}/jffi.jar"/>
<zipfileset src="${build.lib.dir}/jffi-i386-Linux.jar"/>
<zipfileset src="${build.lib.dir}/jffi-x86_64-Linux.jar"/>
<zipfileset src="${build.lib.dir}/jffi-Darwin.jar"/>
<zipfileset src="${build.lib.dir}/jffi-i386-SunOS.jar"/>
<zipfileset src="${build.lib.dir}/jffi-x86_64-SunOS.jar"/>
<zipfileset src="${build.lib.dir}/jffi-ppc-AIX.jar"/>
<zipfileset src="${build.lib.dir}/jffi-ppc-Linux.jar"/>
<zipfileset src="${build.lib.dir}/jffi-ppc64-Linux.jar"/>
<zipfileset src="${build.lib.dir}/jffi-sparc-SunOS.jar"/>
<zipfileset src="${build.lib.dir}/jffi-sparcv9-SunOS.jar"/>
<zipfileset src="${build.lib.dir}/jffi-i386-FreeBSD.jar"/>
<zipfileset src="${build.lib.dir}/jffi-x86_64-FreeBSD.jar"/>
<zipfileset src="${build.lib.dir}/jffi-i386-OpenBSD.jar"/>
<zipfileset src="${build.lib.dir}/jffi-x86_64-OpenBSD.jar"/>
<zipfileset src="${build.lib.dir}/jffi-i386-Windows.jar"/>
<zipfileset src="${build.lib.dir}/jffi-x86_64-Windows.jar"/>
<zipfileset src="${build.lib.dir}/jffi-s390x-Linux.jar"/>
<zipfileset src="${build.lib.dir}/joda-time-${joda.time.version}.jar"/>
<zipfileset src="${build.lib.dir}/snakeyaml-1.9.jar"/>
<zipfileset src="${build.lib.dir}/yecht.jar"/>
<zipfileset src="${build.lib.dir}/yydebug.jar"/>
<zipfileset src="${build.lib.dir}/nailgun-0.7.1.jar"/>
<zipfileset src="${build.lib.dir}/jzlib-1.1.0.jar"/>
<metainf dir="spi">
<include name="services/**"/>
</metainf>
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-Class" value="org.jruby.Main"/>
</manifest>
<rule pattern="org.objectweb.asm.**" result="org.jruby.org.objectweb.asm.@1"/>
</jarjar>
<antcall target="_osgify-jar_">
<param name="bndfile" value="jruby.bnd" />
<param name="jar.wrap" value="${lib.dir}/jruby.jar" />
<param name="bar.wrap" value="${lib.dir}/jruby.bar" />
</antcall>
<!-- temporarily commented out due to JRUBY-6163 <antcall target="generate-ri-cache"/> -->
</target>
<target name="jarjar" depends="jar-jruby-dist"/>
<!-- Use Bnd to wrap the JAR generated by jarjar in above task -->
<target name="_osgify-jar_">
<filter token="JRUBY_VERSION" value="${version.jruby}"/>
<copy file="jruby.bnd.template" tofile="${build.dir}/${bndfile}" filtering="true"/>
<taskdef resource="aQute/bnd/ant/taskdef.properties"
classpath="${build.lib.dir}/bnd.jar"/>
<bndwrap definitions="${build.dir}" output="${dest.lib.dir}">
<fileset file="${jar.wrap}" />
</bndwrap>
<move file="${bar.wrap}" tofile="${jar.wrap}"
overwrite="true" />
</target>
<target name="jar-jruby-stdlib" depends="compile" unless="jar-jruby-stdlib.hasrun"
description="Create the 'sdtlib' JRuby jar. Pass 'filename' to adjust.">
<property name="mainclass" value="org.jruby.Main"/>
<property name="filename" value="jruby-stdlib.jar"/>
<property name="bilename" value="jruby-stdlib.bar"/>
<property name="jar-stdlib-home" value="${build.dir}/jar-stdlib/META-INF/jruby.home"/>
<mkdir dir="${jar-stdlib-home}"/>
<copy todir="${jar-stdlib-home}">
<fileset dir="${basedir}">
<patternset refid="dist.bindir.files"/>
<patternset refid="dist.lib.files"/>
</fileset>
</copy>
<java classname="${mainclass}" fork="true" maxmemory="${jruby.launch.memory}" failonerror="true">
<classpath>
<path refid="jruby.execute.classpath"/>
<pathelement location="${build.dir}/jar-stdlib"/>
</classpath>
<sysproperty key="jruby.home" value="${jar-stdlib-home}"/>
<env key="RUBYOPT" value=""/>
<env key="GEM_HOME" value="${jar-stdlib-home}/lib/ruby/gems/1.8"/>
<jvmarg line="${java.opts}"/>
<arg line="-S gem install ${complete.jar.gems}"/>
<arg line="--no-ri --no-rdoc --ignore-dependencies --env-shebang"/>
</java>
<delete dir="${jar-stdlib-home}/lib/ruby/gems/1.8/cache"/>
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpath="${build.lib.dir}/jarjar-1.0.jar"/>
<jarjar destfile="${dest.lib.dir}/${filename}">
<fileset dir="${build.dir}/jar-stdlib">
<exclude name="META-INF/jruby.home/lib/ruby/site_ruby/shared/builtin/**"/>
</fileset>
<metainf dir="spi">
<include name="services/**"/>
</metainf>
<manifest>
<attribute name="Built-By" value="${user.name}"/>
</manifest>
</jarjar>
<antcall target="_osgify-jar_">
<param name="bndfile" value="jruby-stdlib.bnd" />
<param name="jar.wrap" value="${dest.lib.dir}/${filename}" />
<param name="bar.wrap" value="${dest.lib.dir}/${bilename}" />
</antcall>
<property name="jar-jruby-stdlib.hasrun" value="true" />
</target>
<target name="jar-jruby-complete" depends="compile" unless="jar-jruby-complete.hasrun"
description="Create the 'complete' JRuby jar. Pass 'mainclass' and 'filename' to adjust.">
<property name="mainclass" value="org.jruby.Main"/>
<property name="filename" value="jruby-complete.jar"/>
<property name="bilename" value="jruby-complete.bar"/>
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpath="${build.lib.dir}/jarjar-1.0.jar"/>
<property name="jar-complete-home" value="${build.dir}/jar-complete/META-INF/jruby.home"/>
<mkdir dir="${jar-complete-home}"/>
<copy todir="${jar-complete-home}">
<fileset dir="${basedir}">
<patternset refid="dist.bindir.files"/>
<patternset refid="dist.lib.files"/>
</fileset>
</copy>
<copy todir="${build.dir}/jar-complete/cext">
<fileset dir="${lib.dir}">
<patternset refid="dist.jruby-cext-native.files"/>
</fileset>
</copy>
<java classname="${mainclass}" fork="true" maxmemory="${jruby.launch.memory}" failonerror="true">
<classpath>
<path refid="jruby.execute.classpath"/>
<pathelement location="${build.dir}/jar-complete"/>
</classpath>
<sysproperty key="jruby.home" value="${jar-complete-home}"/>
<env key="RUBYOPT" value=""/>
<env key="GEM_HOME" value="${jar-complete-home}/lib/ruby/gems/1.8"/>
<jvmarg line="${java.opts}"/>
<arg line="-S gem install ${complete.jar.gems}"/>
<arg line="--no-ri --no-rdoc --ignore-dependencies --env-shebang"/>
</java>
<delete dir="${jar-complete-home}/lib/ruby/gems/1.8/cache"/>
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpath="${build.lib.dir}/jarjar-1.0.jar"/>
<jarjar destfile="${dest.lib.dir}/${filename}">
<fileset dir="${jruby.classes.dir}"/>
<fileset dir="${build.dir}/jar-complete">
<exclude name="META-INF/jruby.home/lib/ruby/site_ruby/shared/builtin/**"/>
</fileset>
<zipfileset src="${asm.jar}"/>
<zipfileset src="${asm.commons.jar}"/>
<zipfileset src="${asm.util.jar}"/>
<zipfileset src="${asm.analysis.jar}"/>
<zipfileset src="${asm.tree.jar}"/>
<zipfileset src="${build.lib.dir}/bytelist.jar"/>
<zipfileset src="${build.lib.dir}/constantine.jar"/>
<zipfileset src="${build.lib.dir}/jline-${jline.version}.jar"/>
<zipfileset src="${build.lib.dir}/jcodings.jar"/>
<zipfileset src="${build.lib.dir}/joni.jar"/>
<zipfileset src="${build.lib.dir}/jnr-netdb.jar"/>
<zipfileset src="${build.lib.dir}/jnr-posix.jar"/>
<zipfileset src="${build.lib.dir}/jaffl.jar"/>
<zipfileset src="${build.lib.dir}/jffi.jar"/>
<zipfileset src="${build.lib.dir}/jffi-i386-Linux.jar"/>
<zipfileset src="${build.lib.dir}/jffi-x86_64-Linux.jar"/>
<zipfileset src="${build.lib.dir}/jffi-Darwin.jar"/>
<zipfileset src="${build.lib.dir}/jffi-i386-SunOS.jar"/>
<zipfileset src="${build.lib.dir}/jffi-x86_64-SunOS.jar"/>
<zipfileset src="${build.lib.dir}/jffi-ppc-AIX.jar"/>
<zipfileset src="${build.lib.dir}/jffi-ppc-Linux.jar"/>
<zipfileset src="${build.lib.dir}/jffi-ppc64-Linux.jar"/>
<zipfileset src="${build.lib.dir}/jffi-sparc-SunOS.jar"/>
<zipfileset src="${build.lib.dir}/jffi-sparcv9-SunOS.jar"/>
<zipfileset src="${build.lib.dir}/jffi-i386-FreeBSD.jar"/>
<zipfileset src="${build.lib.dir}/jffi-x86_64-FreeBSD.jar"/>
<zipfileset src="${build.lib.dir}/jffi-i386-OpenBSD.jar"/>
<zipfileset src="${build.lib.dir}/jffi-x86_64-OpenBSD.jar"/>
<zipfileset src="${build.lib.dir}/jffi-i386-Windows.jar"/>
<zipfileset src="${build.lib.dir}/jffi-x86_64-Windows.jar"/>
<zipfileset src="${build.lib.dir}/jffi-s390x-Linux.jar"/>
<zipfileset src="${build.lib.dir}/joda-time-${joda.time.version}.jar"/>
<zipfileset src="${build.lib.dir}/snakeyaml-1.9.jar"/>
<zipfileset src="${build.lib.dir}/yecht.jar"/>
<zipfileset src="${build.lib.dir}/yydebug.jar"/>
<zipfileset src="${build.lib.dir}/nailgun-0.7.1.jar"/>
<zipfileset src="${build.lib.dir}/jzlib-1.1.0.jar"/>
<metainf dir="spi">
<include name="services/**"/>
</metainf>
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-Class" value="${mainclass}"/>
</manifest>
<rule pattern="org.objectweb.asm.**" result="org.jruby.org.objectweb.asm.@1"/>
</jarjar>
<antcall target="_osgify-jar_">
<param name="bndfile" value="jruby-complete.bnd" />
<param name="jar.wrap" value="${dest.lib.dir}/${filename}" />
<param name="bar.wrap" value="${dest.lib.dir}/${bilename}" />
</antcall>
<property name="jar-jruby-complete.hasrun" value="true" />
</target>
<target name="test-jar-complete" depends="init,unzip-native-libs,jar-jruby-complete"
description="Do some sanity checks on the complete jar.">
<java jar="lib/jruby-complete.jar" fork="true" failonerror="true">
<arg line="-v test/test_jar_complete.rb"/>
</java>
</target>
<target name="dist-jar-complete" depends="jar-jruby-complete">
<mkdir dir="${dist.dir}"/>
<move file="${dest.lib.dir}/jruby-complete.jar" tofile="${dist.dir}/jruby-complete-${version.jruby}.jar"/>
<checksum file="${dist.dir}/jruby-complete-${version.jruby}.jar" algorithm="md5"/>
<checksum file="${dist.dir}/jruby-complete-${version.jruby}.jar" algorithm="sha1"/>
</target>
<target name="jar-console" depends="compile" description="Create the jruby graphical console jar">
<antcall target="jar-jruby-complete">
<param name="mainclass" value="org.jruby.demo.IRBConsole"/>
<param name="filename" value="jruby-console.jar"/>
</antcall>
</target>
<target name="jar" depends="init" description="Create the jruby.jar file. Used during dev.">
<antcall target="jar-jruby" inheritall="true"/>
</target>
<target name="jar-core" depends="init" description="Create the jruby-core.jar file for distribution. This version uses JarJar to rewrite some packages.">
<antcall target="jar-jruby-core" inheritall="true"/>
</target>
<target name="jar-dist" depends="init" description="Create the jruby.jar file for distribution. This version uses JarJar to rewrite some packages.">
<antcall target="jar-jruby-dist" inheritall="true"/>
</target>
<target name="jar-stdlib" depends="init" description="Create the jruby-stdlib.jar file.">
<antcall target="jar-jruby-stdlib" inheritall="true"/>
</target>
<target name="jar-complete" depends="init" description="Create the jruby-complete.jar file. This version uses JarJar to rewrite some packages.">
<antcall target="jar-jruby-complete" inheritall="true"/>
</target>
<target name="compile-test" depends="jar" description="Compile the unit tests">
<javac destdir="${test.classes.dir}" deprecation="true" encoding="UTF-8" debug="true"
source="${javac.version}" target="${javac.version}" includeantruntime="false">
<classpath>
<path refid="jruby.execute.classpath"/>
<pathelement path="${lib.dir}/jruby.jar"/>
</classpath>
<src path="${test.dir}"/>
<src path="${spec.dir}"/>
<patternset refid="java.src.pattern"/>
</javac>
</target>
<target name="copy-test-files" depends="compile-test"
description="Make tests fails available as resources">
<copy todir="${test.classes.dir}">
<fileset dir="${test.dir}" includes="org/**/*.rb"/>
</copy>
</target>
<target name="compile-stdlib" unless="test">
<copy todir="${build.dir}/stdlib">
<fileset dir="lib/ruby/1.8">
<include name="**/*.rb"/>
</fileset>
</copy>
<java classname="org.jruby.Main" fork="true" maxmemory="${jruby.launch.memory}" failonerror="true" dir="${build.dir}/stdlib">
<classpath refid="jruby.execute.classpath"/>
<sysproperty key="jruby.home" value="${basedir}"/>
<jvmarg line="-ea ${java.opts}"/>
<arg line="-I bin/ -S jrubyc ."/>
</java>
</target>
<target name="coverage" description="Enable code coverage reporting for built artifacts.">
<property name="coverage.enabled" value="true"/>
</target>
<target name="emma" description="Turns on EMMA instrumentation/reporting; use with 'jar' to create an instrumented jar." >
<available property="emma.present"
classname="com.vladium.app.IAppVersion"
classpathref="emma.classpath"/>
<taskdef resource="emma_ant.properties" classpathref="emma.classpath" />
<property name="emma.enabled" value="true" />
<path id="classes_to_instrument" >
<pathelement location="${jruby.classes.dir}" />
</path>
</target>
<target name="instrument" depends="emma" if="coverage.enabled">
<emma enabled="${emma.enabled}" >
<instr instrpathref="classes_to_instrument"
mode="overwrite"
metadatafile="${test.results.dir}/metadata.emma"
merge="false">
<filter excludes="*INVOKER*"/>
</instr>
</emma>
</target>
<target name="coverage-report" description="Generate a coverage report based on aggregated runs." depends="emma">
<emma enabled="${emma.enabled}" >
<report sourcepath="${src.dir}" >
<fileset dir="${test.results.dir}" >
<include name="*.emma" />
</fileset>
<html outfile="${html.test.coverage.results.dir}/coverage.html" />
</report>
</emma>
</target>
<target name="install-gems" depends="install-dev-gems,install-jruby-launcher-gem"/>
<condition property="dev.gems.installed">
<uptodate>
<srcfiles dir="${basedir}" includes="${dev.gems}"/>
<chainedmapper>
<flattenmapper/>
<globmapper from="*.gem" to="lib/ruby/gems/1.8/specifications/*.gemspec"/>
</chainedmapper>
</uptodate>
</condition>
<target name="install-dev-gems" depends="jar" unless="dev.gems.installed">
<java classname="org.jruby.Main" fork="true" maxmemory="${jruby.launch.memory}" failonerror="false">
<classpath refid="build.classpath"/>
<classpath path="${jruby.classes.dir}"/>
<sysproperty key="jruby.home" value="${basedir}"/>
<env key="GEM_PATH" value=""/> <!-- to ignore any gems installed in ~/.gem -->
<arg line="-S gem uninstall --all ${dev.gem.names}"/>
</java>
<java classname="org.jruby.Main" fork="true" maxmemory="${jruby.launch.memory}" failonerror="true">
<classpath refid="build.classpath"/>
<classpath path="${jruby.classes.dir}"/>
<sysproperty key="jruby.home" value="${basedir}"/>
<env key="GEM_PATH" value=""/> <!-- to ignore any gems installed in ~/.gem -->
<arg line="-S gem install -n ${basedir}/bin ${dev.gems}"/>
</java>
</target>
<condition property="jruby-launcher.gem.installed">
<or>
<os family="windows"/> <!-- windows doesn't need the launcher -->
<uptodate>
<srcfiles dir="${basedir}" includes="${jruby.launcher.gem}"/>
<chainedmapper>
<flattenmapper/>
<globmapper from="*.gem" to="lib/ruby/gems/1.8/specifications/*.gemspec"/>
</chainedmapper>
</uptodate>
</or>
</condition>
<target name="install-jruby-launcher-gem" depends="jar" unless="jruby-launcher.gem.installed">
<java classname="org.jruby.Main" fork="true" maxmemory="${jruby.launch.memory}" failonerror="false">
<classpath refid="build.classpath"/>
<classpath path="${jruby.classes.dir}"/>
<sysproperty key="jruby.home" value="${basedir}"/>
<env key="GEM_PATH" value=""/> <!-- to ignore any gems installed in ~/.gem -->
<arg line="-S gem uninstall --all jruby-launcher"/>
</java>
<java classname="org.jruby.Main" fork="true" maxmemory="${jruby.launch.memory}" failonerror="true">
<classpath refid="build.classpath"/>
<classpath path="${jruby.classes.dir}"/>
<sysproperty key="jruby.home" value="${basedir}"/>
<env key="GEM_PATH" value=""/> <!-- to ignore any gems installed in ~/.gem -->
<arg line="-S gem install ${jruby.launcher.gem}"/>
</java>
</target>
<target name="test" depends="
copy-test-files,
install-gems,
run-junit-interpreted-short,
test-rake-targets"
description="Runs unit tests.">
</target>
<target name="test-indy" depends="
copy-test-files,
install-gems,
run-junit-indy-short,
test-rake-targets"
description="Runs unit tests.">
</target>
<target name="test-extended" depends="
copy-test-files,
install-gems,
run-junit-compiled,
run-junit-embed,
test-rake-targets"
description="Runs unit tests.">
</target>
<target name="test-compiled" depends="copy-test-files,run-junit-compiled,run-junit-precompiled"/>
<target name="test-precompiled" depends="copy-test-files,run-junit-precompiled"/>
<target name="test-compiled-1.9" depends="copy-test-files,run-junit-compiled-1.9,run-junit-precompiled-1.9"/>
<target name="test-interpreted" depends="copy-test-files,run-junit-interpreted,test-interpreted-1.9"/>
<target name="test-interpreted-1.9" depends="copy-test-files,run-junit-interpreted-1.9"/>
<target name="test-reflected" depends="copy-test-files,run-junit-reflected-compiled,run-junit-reflected-precompiled,run-junit-reflected-interpreted"/>
<target name="test-threadpool" depends="copy-test-files,run-junit-compiled-threadpool,run-junit-precompiled-threadpool,run-junit-interpreted-threadpool"/>
<target name="test-1.9" depends="test-interpreted-1.9, test-compiled-1.9"
description="Runs unit tests compatible with ruby 1.9"/>
<target name="test-all" depends="
copy-test-files,
install-gems,
test-security-manager,
run-junit-interpreted,
run-junit-compiled,
run-junit-precompiled,
run-junit-interpreted-1.9,
run-junit-reflected-precompiled,
run-junit-interpreted-threadpool,
compile-stdlib"
description="Runs unit tests in all modes."/>
<!-- All junit permutations for 1.8 and 1.9 support -->
<target name="run-junit-interpreted"><run-junit-1.8/></target>
<target name="run-junit-interpreted-1.9"><run-junit-1.9/></target>
<target name="run-junit-reflected-interpreted"><run-junit-1.8 reflection="true"/></target>
<target name="run-junit-reflected-interpreted-1.9"><run-junit-1.9 reflection="true"/></target>
<target name="run-junit-compiled"><run-junit-1.8 compile.mode="JIT" jit.threshold="0"/></target>
<target name="run-junit-compiled-short"><run-junit-1.8-short compile.mode="JIT" jit.threshold="0"/></target>
<target name="run-junit-interpreted-short"><run-junit-1.8-short/></target>
<target name="run-junit-indy-short"><run-junit-1.8-indy-short/></target>
<!-- temporarily disabled during compiler work -->
<target name="run-junit-compiled-1.9"><run-junit-1.9 compile.mode="JIT" jit.threshold="0"/></target>
<target name="run-junit-reflected-compiled"><run-junit-1.8 compile.mode="JIT" jit.threshold="0" reflection="true"/></target>
<target name="run-junit-reflected-compiled-1.9"><run-junit-1.9 compile.mode="JIT" jit.threshold="0" reflection="true"/></target>
<target name="run-junit-precompiled"><run-junit-1.8 compile.mode="FORCE" jit.threshold="0"/></target>
<target name="run-junit-precompiled-1.9"><run-junit-1.9 compile.mode="FORCE" jit.threshold="0"/></target>
<target name="run-junit-reflected-precompiled"><run-junit-1.8 compile.mode="FORCE" jit.threshold="0" reflection="true"/></target>
<target name="run-junit-reflected-precompiled-1.9"><run-junit-1.9 compile.mode="FORCE" jit.threshold="0" reflection="true"/></target>
<target name="run-junit-threadpool" depends="run-junit-interpreted-threadpool,run-junit-compiled-threadpool"/>
<target name="run-junit-interpreted-threadpool"><run-junit-1.8 thread.pooling="true"/></target>
<target name="run-junit-compiled-threadpool"><run-junit-1.8 compile.mode="JIT" jit.threshold="0" thread.pooling="true"/></target>
<target name="run-junit-precompiled-threadpool"><run-junit-1.8 compile.mode="FORCE" jit.threshold="0" thread.pooling="true"/></target>
<target name="run-junit-embed" depends="copy-test-files" description="Runs unit embedding API tests."><run-junit-embed-all/></target>
<path id="test.class.path">
<pathelement path="${build.lib.dir}/junit.jar"/>
<pathelement path="${build.lib.dir}/livetribe-jsr223-2.0.6.jar"/>
<pathelement path="${build.lib.dir}/bsf.jar"/>
<pathelement path="${build.lib.dir}/commons-logging-1.1.1.jar"/>
<pathelement path="${java.class.path}"/>
<pathelement path="${lib.dir}/jruby.jar"/>
<pathelement location="${test.classes.dir}"/>
<pathelement path="${test.dir}/requireTest.jar"/>
<pathelement location="${test.dir}"/>
</path>
<macrodef name="run-junit-indy">
<attribute name="jruby.version" default="ruby1_8"/>
<attribute name="compile.mode" default="-X+O"/>
<attribute name="jit.threshold" default="0"/>
<attribute name="jit.maxsize" default="1000000000"/>
<attribute name="jit.max" default="-1"/>
<attribute name="objectspace.enabled" default="true"/>
<attribute name="thread.pooling" default="false"/>
<attribute name="reflection" default="false"/>
<element name="junit-tests"/>
<sequential>
<echo message="compile=@{compile.mode}, jit.threshold=@{jit.threshold}, jit.maxsize=@{jit.maxsize}, jit.max=@{jit.max}, objectspace=@{objectspace.enabled} threadpool=@{thread.pooling} reflection=@{reflection} version=@{jruby.version}"/>
<taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask" classpath="${build.lib.dir}/junit.jar"/>
<junit jvm="${jruby.test.jvm}" fork="yes" forkMode="once" haltonfailure="true" dir="${basedir}" maxmemory="${jruby.test.memory}" showoutput="true" timeout="1800000">
<classpath refid="test.class.path"/>
<sysproperty key="jruby.compile.invokedynamic" value="true"/>
<sysproperty key="java.awt.headless" value="true"/>
<sysproperty key="jruby.home" value="${basedir}"/>
<sysproperty key="jruby.lib" value="${lib.dir}"/>
<sysproperty key="jruby.compile.mode" value="@{compile.mode}"/>
<sysproperty key="jruby.jit.threshold" value="@{jit.threshold}"/>
<sysproperty key="jruby.jit.maxsize" value="@{jit.maxsize}"/>
<sysproperty key="jruby.jit.max" value="@{jit.max}"/>
<sysproperty key="jruby.compat.version" value="@{jruby.version}"/>
<sysproperty key="jruby.objectspace.enabled" value="@{objectspace.enabled}"/>
<sysproperty key="jruby.thread.pool.enabled" value="@{thread.pooling}"/>
<sysproperty key="jruby.reflection" value="@{reflection}"/>
<sysproperty key="jruby.jit.logging.verbose" value="true"/>
<sysproperty key="jruby.compile.lazyHandles" value="true"/>
<!-- emma coverage tool properties -->
<sysproperty key="emma.coverage.out.file" value="${test.results.dir}/coverage.emma" />
<sysproperty key="emma.coverage.out.merge" value="true" />
<sysproperty key="emma.verbosity.level" value="silent" />
<syspropertyset refid="test.sysproperties"/>
<!-- force client VM to improve test run times AND -->
<!-- set a larger max permgen, since the tests load a lot of bytecode -->
<jvmarg line="-ea ${java.opts} -client -XX:MaxPermSize=256M -XX:+UnlockExperimentalVMOptions -XX:+EnableMethodHandles -XX:+EnableInvokeDynamic"/>
<formatter type="xml"/>
<formatter type="brief" usefile="false" />
<junit-tests/>
</junit>
<junitreport todir="${test.results.dir}">
<fileset dir="${test.results.dir}" includes="TEST-*.xml"/>
<report format="frames" todir="${html.test.results.dir}"/>
</junitreport>
</sequential>
</macrodef>
<macrodef name="run-junit">
<attribute name="jruby.version" default="ruby1_8"/>
<attribute name="compile.mode" default="OFF"/>
<attribute name="jit.threshold" default="20"/>
<attribute name="jit.maxsize" default="20"/>
<attribute name="jit.max" default="-1"/>
<attribute name="objectspace.enabled" default="false"/>
<attribute name="thread.pooling" default="false"/>
<attribute name="reflection" default="false"/>
<element name="junit-tests"/>
<sequential>
<echo message="compile=@{compile.mode}, jit.threshold=@{jit.threshold}, jit.maxsize=@{jit.maxsize}, jit.max=@{jit.max}, objectspace=@{objectspace.enabled} threadpool=@{thread.pooling} reflection=@{reflection} version=@{jruby.version}"/>
<taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask" classpath="${build.lib.dir}/junit.jar"/>
<junit jvm="${jruby.test.jvm}" fork="yes" forkMode="once" haltonfailure="true" dir="${basedir}" maxmemory="${jruby.test.memory}" showoutput="true" timeout="1800000">
<env key="RUBYOPT" value=""/>
<env key="JRUBY_OPTS" value=""/>
<classpath refid="test.class.path"/>
<sysproperty key="java.awt.headless" value="true"/>
<sysproperty key="jruby.home" value="${basedir}"/>
<sysproperty key="jruby.lib" value="${lib.dir}"/>
<sysproperty key="jruby.compile.mode" value="@{compile.mode}"/>
<sysproperty key="jruby.jit.threshold" value="@{jit.threshold}"/>
<sysproperty key="jruby.jit.maxsize" value="@{jit.maxsize}"/>
<sysproperty key="jruby.jit.max" value="@{jit.max}"/>
<sysproperty key="jruby.compat.version" value="@{jruby.version}"/>
<sysproperty key="jruby.objectspace.enabled" value="@{objectspace.enabled}"/>
<sysproperty key="jruby.thread.pool.enabled" value="@{thread.pooling}"/>
<sysproperty key="jruby.reflection" value="@{reflection}"/>
<sysproperty key="jruby.jit.logging.verbose" value="true"/>
<sysproperty key="jruby.compile.lazyHandles" value="true"/>
<!-- emma coverage tool properties -->
<sysproperty key="emma.coverage.out.file" value="${test.results.dir}/coverage.emma" />
<sysproperty key="emma.coverage.out.merge" value="true" />
<sysproperty key="emma.verbosity.level" value="silent" />
<syspropertyset refid="test.sysproperties"/>
<!-- force client VM to improve test run times AND -->
<!-- set a larger max permgen, since the tests load a lot of bytecode -->
<jvmarg line="-ea ${java.opts} -client -XX:MaxPermSize=256M"/>
<formatter type="xml"/>
<formatter type="brief" usefile="false" />
<junit-tests/>
</junit>
<junitreport todir="${test.results.dir}">
<fileset dir="${test.results.dir}" includes="TEST-*.xml"/>
<report format="frames" todir="${html.test.results.dir}"/>
</junitreport>
</sequential>
</macrodef>
<!-- runs junit tests for 1.8 functionality -->
<macrodef name="run-junit-1.8-short">
<attribute name="compile.mode" default="OFF"/>
<attribute name="jit.threshold" default="20"/>
<attribute name="jit.maxsize" default="1000000000"/>
<attribute name="reflection" default="false"/>
<attribute name="thread.pooling" default="false"/>
<sequential>
<run-junit compile.mode="@{compile.mode}" jit.threshold="@{jit.threshold}"
reflection="@{reflection}" thread.pooling="@{thread.pooling}"
jit.maxsize="@{jit.maxsize}">
<junit-tests>
<test name="${test}" if="test"/>
<test name="org.jruby.test.ScriptTestSuite" todir="${test.results.dir}" unless="test"/>
<test name="org.jruby.test.JRubyTestSuite" todir="${test.results.dir}" unless="test"/>
<test name="org.jruby.test.MRITestSuite" todir="${test.results.dir}" unless="test"/>
<test name="org.jruby.test.MainTestSuite" todir="${test.results.dir}" unless="test"/>
</junit-tests>
</run-junit>
</sequential>
</macrodef>
<!-- runs junit tests for 1.8 functionality -->
<macrodef name="run-junit-1.8-indy-short">
<sequential>
<run-junit-indy>
<junit-tests>
<test name="${test}" if="test"/>
<test name="org.jruby.test.ScriptTestSuite" todir="${test.results.dir}" unless="test"/>
<test name="org.jruby.test.JRubyTestSuite" todir="${test.results.dir}" unless="test"/>
<test name="org.jruby.test.MRITestSuite" todir="${test.results.dir}" unless="test"/>
<test name="org.jruby.test.MainTestSuite" todir="${test.results.dir}" unless="test"/>
</junit-tests>
</run-junit-indy>
</sequential>
</macrodef>
<!-- runs junit tests for 1.8 functionality -->
<macrodef name="run-junit-1.8">
<attribute name="compile.mode" default="OFF"/>
<attribute name="jit.threshold" default="20"/>
<attribute name="jit.maxsize" default="1000000000"/>
<attribute name="reflection" default="false"/>
<attribute name="thread.pooling" default="false"/>
<attribute name="objectspace.enabled" default="true"/>
<sequential>
<run-junit compile.mode="@{compile.mode}" jit.threshold="@{jit.threshold}"
reflection="@{reflection}" thread.pooling="@{thread.pooling}"
jit.maxsize="@{jit.maxsize}" objectspace.enabled="@{objectspace.enabled}">
<junit-tests>
<test name="${test}" if="test"/>
<test name="org.jruby.test.ScriptTestSuite" todir="${test.results.dir}" unless="test"/>
<test name="org.jruby.test.JRubyTestSuite" todir="${test.results.dir}" unless="test"/>
<test name="org.jruby.test.MRITestSuite" todir="${test.results.dir}" unless="test"/>
<test name="org.jruby.test.RubiconTestSuite" todir="${test.results.dir}" unless="test"/>
<test name="org.jruby.test.RubyTestTestSuite" todir="${test.results.dir}" unless="test"/>
<test name="org.jruby.test.ObjectSpaceTestSuite" todir="${test.results.dir}" unless="test"/>
<test name="org.jruby.test.MainTestSuite" todir="${test.results.dir}" unless="test"/>
</junit-tests>
</run-junit>
</sequential>
</macrodef>
<macrodef name="run-junit-1.9">
<attribute name="compile.mode" default="OFF"/>
<attribute name="jit.threshold" default="20"/>
<attribute name="jit.maxsize" default="1000000000"/>
<attribute name="reflection" default="false"/>
<attribute name="thread.pooling" default="false"/>
<attribute name="objectspace.enabled" default="true"/>
<sequential>
<run-junit objectspace.enabled="false" jruby.version="ruby1_9"
compile.mode="@{compile.mode}" jit.threshold="@{jit.threshold}"
reflection="@{reflection}" thread.pooling="@{thread.pooling}"
jit.maxsize="@{jit.maxsize}">
<junit-tests>
<test name="${test}" if="test"/>
<test name="org.jruby.test.Ruby1_9TestSuite" todir="${test.results.dir}" unless="test"/>
</junit-tests>
</run-junit>
</sequential>
</macrodef>
<macrodef name="run-junit-embed-all">
<sequential>
<taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask" classpath="${build.lib.dir}/junit.jar"/>
<junit jvm="${jruby.test.jvm}" fork="yes" forkMode="once" haltonfailure="true" dir="${basedir}" maxmemory="${jruby.test.memory}" showoutput="true" timeout="1800000">
<classpath refid="test.class.path"/>
<syspropertyset refid="test.sysproperties"/>
<sysproperty key="jruby.home" value="${basedir}"/>
<formatter type="xml"/>
<formatter type="brief" usefile="false" />
<batchtest fork="yes" todir="${test.results.dir}">
<fileset dir="${test.dir}">
<include name="org/jruby/embed/**/*Test*.java"/>
</fileset>
</batchtest>
</junit>
</sequential>
</macrodef>
<target name="test-security-manager" depends="jar-jruby, -test-security-18, -test-security-19"/>
<target name="-test-security-18">
<java classname="org.jruby.Main" fork="true" failonerror="true">
<classpath refid="test.class.path"/>
<sysproperty key="java.security.manager" value=""/>
<!-- Note the extra '=' in the value, it *is* intentional -->
<sysproperty key="java.security.policy" value="=file:test/restricted.policy"/>
<sysproperty key="java.awt.headless" value="true"/>
<jvmarg line="${java.opts}"/>
<arg line="--1.8"/>
<arg line="-ve"/>
<arg value="puts 'Restricted policy looks ok'"/>
</java>
</target>
<target name="-test-security-19">
<java classname="org.jruby.Main" fork="true" failonerror="true">
<classpath refid="test.class.path"/>
<sysproperty key="java.security.manager" value=""/>
<!-- Note the extra '=' in the value, it *is* intentional -->
<sysproperty key="java.security.policy" value="=file:test/restricted.policy"/>
<sysproperty key="java.awt.headless" value="true"/>
<jvmarg line="${java.opts}"/>
<arg line="--1.9"/>
<arg line="-ve"/>
<arg value="puts 'Restricted policy looks ok'"/>
</java>
</target>
<target name="test-rake-targets" depends="init"><rake task="test:rake_targets" objectspace.enabled="false"/></target>
<macrodef name="rake">
<attribute name="compile.mode" default="OFF"/>
<attribute name="jit.threshold" default="20"/>
<attribute name="jit.max" default="-1"/>
<attribute name="objectspace.enabled" default="true"/>
<attribute name="thread.pooling" default="false"/>
<attribute name="reflection" default="false"/>
<attribute name="inproc" default="true"/>
<attribute name="jruby.args" default=""/>
<attribute name="task"/>
<attribute name="dir" default="${basedir}"/>
<attribute name="jvm.args" default="-ea"/>
<sequential>
<echo message="Running rake @{task}"/>
<echo message="compile=@{compile.mode}, threshold=@{jit.threshold}, objectspace=@{objectspace.enabled} threadpool=@{thread.pooling} reflection=@{reflection}"/>
<java classname="org.jruby.Main" fork="true" maxmemory="${jruby.launch.memory}" failonerror="true" dir="@{dir}">
<classpath refid="test.class.path"/>
<jvmarg line="@{jvm.args}"/>
<jvmarg line="${java.opts}"/>
<sysproperty key="jruby.home" value="${basedir}"/>
<sysproperty key="jruby.launch.inproc" value="false"/>
<!-- properties tweaked for individual runs -->
<sysproperty key="jruby.compile.mode" value="@{compile.mode}"/>
<sysproperty key="jruby.jit.threshold" value="@{jit.threshold}"/>
<sysproperty key="jruby.jit.max" value="@{jit.max}"/>
<sysproperty key="jruby.objectspace.enabled" value="@{objectspace.enabled}"/>
<sysproperty key="jruby.thread.pool.enabled" value="@{thread.pooling}"/>
<sysproperty key="jruby.reflection" value="@{reflection}"/>
<sysproperty key="jruby.launch.inproc" value="@{inproc}"/>
<sysproperty key="emma.coverage.out.file" value="${test.results.dir}/coverage.emma" />
<sysproperty key="emma.coverage.out.merge" value="true" />
<sysproperty key="emma.verbosity.level" value="silent" />
<arg line="@{jruby.args} -S rake @{task} ${rake.args}"/>
<env key="JRUBY_OPTS" value=""/>
</java>
</sequential>
</macrodef>
<!-- Utilities to manage rubyspecs/mspec files -->
<target name="fetch-stable-specs" depends="init">
<rake task="spec:fetch_stable_specs"/>
</target>
<target name="fetch-latest-specs" depends="init">
<rake task="spec:fetch_latest_specs"/>
</target>
<!-- Main spec runs (See rakelib/spec.rake for definitions/descriptions) -->
<target name="spec:ci_18" depends="install-gems">
<rake task="spec:ci_18"/>
</target>
<target name="spec:ci_19" depends="install-gems">
<rake task="spec:ci_19"/>
</target>
<target name="spec:ci_interpreted_18_19" depends="install-gems">
<rake task="spec:ci_interpreted_18_19"/>
</target>
<target name="spec:ci_interpreted_18" depends="install-gems">
<rake task="spec:ci_interpreted_18"/>
</target>
<target name="spec:ci_interpreted_19" depends="install-gems">
<rake task="spec:ci_interpreted_19"/>
</target>
<target name="spec:ci_compiled_18" depends="install-gems">
<rake task="spec:ci_compiled_18"/>
</target>
<target name="spec:ci_compiled_19" depends="install-gems">
<rake task="spec:ci_compiled_19"/>
</target>
<target name="spec:ci_precompiled_18" depends="install-gems">
<rake task="spec:ci_precompiled_18"/>
</target>
<target name="spec:ci_precompiled_19" depends="install-gems">
<rake task="spec:ci_precompiled_19"/>
</target>
<target name="spec:ci_all_precompiled_18" depends="install-gems">
<rake task="spec:ci_all_precompiled_18"/>
</target>
<target name="spec:ci_all_precompiled_19" depends="install-gems">
<rake task="spec:ci_all_precompiled_19"/>
</target>
<target name="spec:ci_all_interpreted_18" depends="install-gems">
<rake task="spec:ci_all_interpreted_18"/>
</target>
<target name="spec:ci_all_interpreted_19" depends="install-gems">
<rake task="spec:ci_all_interpreted_19"/>
</target>
<target name="spec:ci_all" depends="install-gems">
<rake task="spec:ci_all"/>
</target>
<target name="spec:ci_latest" depends="install-gems">
<rake task="spec:ci_latest"/>
</target>
<target name="spec:ci_latest_19" depends="install-gems">
<rake task="spec:ci_latest_19"/>
</target>
<target name="spec:ci_cext" depends="install-gems,build-jruby-cext-native">
<rake task="spec:ci_cext"/>
</target>
<!-- Old compatibility targets which call to newer Rake-based ones -->
<target name="spec" depends="spec:ci_18"/>
<target name="spec-ci" depends="spec:ci_18"/>
<target name="spec-short" depends="spec:ci_interpreted_18_19"/>
<target name="spec-ci-1.9" depends="spec:ci_19"/>
<target name="spec-short-1.9" depends="spec:ci_interpreted_19"/>
<target name="spec-all" depends="spec:ci_all_precompiled_18"/>
<target name="spec-all-interpreted" depends="spec:ci_all_interpreted_18"/>
<!-- For CI, because target names become filesystem paths with matrix builds -->
<target name="spec-ci_interpreted_18" depends="spec:ci_interpreted_18"></target>
<target name="spec-ci_interpreted_19" depends="spec:ci_interpreted_19"></target>
<target name="spec-ci_compiled_18" depends="spec:ci_compiled_18"></target>
<target name="spec-ci_compiled_19" depends="spec:ci_compiled_19"></target>
<target name="spec-ci_precompiled_18" depends="spec:ci_precompiled_18"></target>
<target name="spec-ci_precompiled_19" depends="spec:ci_precompiled_19"></target>
<!-- latest, unstable specs -->
<target name="spec-latest-all" depends="spec:ci_all"/>
<target name="spec-latest" depends="spec:ci_latest"/>
<target name="spec-cext" depends="spec:ci_cext"/>
<target name="update-excludes">
<java classname="org.jruby.Main" fork="true" maxmemory="${jruby.launch.memory}" failonerror="false" dir="${spec.dir}">
<classpath refid="jruby.execute.classpath"/>
<sysproperty key="jruby.home" value="${basedir}"/>
<sysproperty key="jruby.launch.inproc" value="false"/>
<arg line="${mspec.dir}/bin/mspec tag"/>
<arg line="--add fails --fail -B ${spec.dir}/default.mspec"/>
</java>
</target>
<target name="spec-show-excludes" depends="prepare"
description="Prints out all currently excluded rubyspecs.">
<spec-show-excludes/>
</target>
<target name="spec-show-excludes-1.9" depends="prepare"
description="Prints out all currently excluded rubyspecs in 1.9 mode.">
<spec-show-excludes spec.mode="1.9"/>
</target>
<macrodef name="spec-show-excludes">
<attribute name="spec.mode" default="1.8"/>
<sequential>
<available property="mspec-available" file="${mspec.dir}/bin/mspec"/>
<fail unless="mspec-available"
message="No rubyspecs found. Download them via 'ant spec'."/>
<java classname="org.jruby.Main" fork="true" maxmemory="${jruby.launch.memory}" failonerror="false" dir="${spec.dir}">
<classpath refid="jruby.execute.classpath"/>
<sysproperty key="jruby.home" value="${basedir}"/>
<sysproperty key="jruby.launch.inproc" value="false"/>
<arg line="${mspec.dir}/bin/mspec"/>
<arg line="-f s -g fails -g critical ${spec.windows.flag} --dry-run"/>
<arg line="-T--@{spec.mode}"/>
<arg line="-B ${spec.dir}/jruby.@{spec.mode}.mspec"/>
<arg value=":ci_files"/>
</java>
</sequential>
</macrodef>
<macrodef name="fixEOLs">
<attribute name="dist-stage-dir" default="${dist.stage.bin.dir}"/>
<sequential>
<fixcrlf srcdir="@{dist-stage-dir}/bin" excludes="*.bat,*.exe,*.dll" eol="lf"/>
<fixcrlf srcdir="@{dist-stage-dir}/bin" includes="*.bat" eol="crlf"/>
</sequential>
</macrodef>
<!-- extract native libraries from the jfii*.jar files to a director -->
<macrodef name="unzip-native-libs">
<attribute name="destination.dir"/>
<sequential>
<mkdir dir="@{destination.dir}"/>
<unzip dest="@{destination.dir}">
<fileset dir="build_lib">
<include name="jffi-*.jar"/>
</fileset>
<patternset>
<include name="**/libjffi-*.so"/>
<include name="**/libjffi-*.a"/>
<include name="**/libjffi-*.jnilib"/>
<include name="**/jffi-*.dll"/>
</patternset>
<mapper>
<filtermapper>
<replacestring from="jni/" to="./"/>
</filtermapper>
</mapper>
</unzip>
</sequential>
</macrodef>
<target name="apidocs" depends="prepare"
description="Creates the Java API docs">
<javadoc destdir="${api.docs.dir}" author="true" version="true" use="true"
windowtitle="JRuby API" source="${javac.version}" useexternalfile="true"
maxmemory="256m">
<fileset dir="${src.dir}">
<include name="**/*.java"/>
</fileset>
<classpath refid="build.classpath"/>
<doctitle><![CDATA[<h1>JRuby</h1>]]></doctitle>
<bottom><![CDATA[<i>Copyright &#169; 2002-2009 JRuby Team. All Rights Reserved.</i>]]></bottom>
</javadoc>
</target>
<patternset id="dist.bindir.files">
<exclude name="bin/jruby"/>
<include name="bin/*jruby*"/>
<include name="bin/*gem*"/>
<include name="bin/*ri*"/>
<include name="bin/*rdoc*"/>
<include name="bin/*irb*"/>
<include name="bin/generate_yaml_index.rb"/>
<include name="bin/testrb"/>
<include name="bin/ast*"/>
<include name="bin/spec.bat"/>
<include name="bin/rake"/>
<include name="bin/rake.bat"/>
</patternset>
<patternset id="dist.lib.files">
<include name="lib/ruby/1.8/**"/>
<include name="lib/ruby/1.9/**"/>
<include name="lib/ruby/site_ruby/**"/>
<include name="lib/ruby/gems/1.8/specifications/sources-0.0.1.gemspec"/>
<include name="lib/ruby/gems/1.8/gems/sources-0.0.1/**"/>
</patternset>
<patternset id="dist.files">
<include name="lib/*"/>
<include name="samples/**"/>
<include name="docs/**"/>
<include name="COPYING*"/>
<include name="LICENSE.RUBY"/>
<include name="README"/>
<exclude name="lib/ruby/**"/>
<exclude name="dist/**"/>
</patternset>
<patternset id="dist.bin.files">
<patternset refid="dist.files"/>
<exclude name="lib/jruby-*.jar"/>
<exclude name="lib/emma.jar"/>
<exclude name="lib/emma_ant.jar"/>
<exclude name="lib/junit.jar"/>
<exclude name="lib/jarjar-1.0.jar"/>
<exclude name="docs/rdocs.tar.gz"/>
<exclude name="bench/**"/>
<include name="share/**"/>
</patternset>
<patternset id="dist.src.files">
<patternset refid="dist.files"/>
<exclude name="share/**"/>
<include name="bench/**"/>
<include name="cext/**"/>
<include name="src/**"/>
<include name="test/**"/>
<exclude name="test/testapp/testapp"/>
<exclude name="test/testapp/testapp.exe"/>
<include name="spec/**"/>
<exclude name="spec/mspec"/>
<exclude name="spec/ruby"/>
<include name="tool/**"/>
<exclude name="tool/nailgun/**"/>
<include name="build_lib/**"/>
<include name="Rakefile"/>
<include name="build.xml"/>
<include name="ivy/**"/>
<include name="rakelib/**"/>
<include name="nbproject/*"/>
<include name=".project"/>
<include name=".classpath"/>
<include name="default.build.properties"/>
<include name="jruby.bnd.template"/>
<include name="pom.xml"/>
<include name="maven/**"/>
<include name="gem/**"/>
<exclude name="gem/pkg/**"/>
<exclude name="gem/lib/jruby*.jar"/>
<exclude name="gem/lib/jruby-jars/**"/>
<exclude name="lib/jruby*.jar"/>
</patternset>
<!-- note: tool/nailgun/configure must be added separately -->
<patternset id="dist.nailgun.files">
<include name="tool/nailgun/Makefile.in"/>
<include name="tool/nailgun/README.txt"/>
<include name="tool/nailgun/ng.exe"/>
<include name="tool/nailgun/src/**"/>
</patternset>
<patternset id="dist.jruby-cext-native.files">
<include name="**/libjruby-cext.so"/>
<include name="**/libjruby-cext.a"/>
<include name="**/libjruby-cext.jnilib"/>
<include name="**/jruby-cext.dll"/>
<include name="**/native/include/**"/>
</patternset>
<target name="dist-bin" depends="install-dev-gems,build-jruby-cext-native">
<mkdir dir="${dist.stage.bin.dir}"/>
<copy todir="${dist.stage.bin.dir}">
<fileset dir="${basedir}">
<patternset refid="dist.bindir.files"/>
<patternset refid="dist.lib.files"/>
</fileset>
</copy>
<!-- dist-bin by default does not come w/ unix native launcher, so -->
<!-- move ${dist.stage.bin.dir}/jruby.bash to ${dist.stage.bin.dir}/jruby -->
<move file="${dist.stage.bin.dir}/bin/jruby.bash" tofile="${dist.stage.bin.dir}/bin/jruby"/>
<mkdir dir="${dist.stage.bin.dir}/lib/native"/>
<copy todir="${dist.stage.bin.dir}">
<fileset dir="${basedir}">
<!-- So repeated ant dists won't include extra cext copies -->
<exclude name="dist/**"/>
<exclude name="build/**"/>
<exclude name="gem/**"/>
<patternset refid="dist.jruby-cext-native.files"/>
</fileset>
</copy>
<unzip-native-libs destination.dir="${dist.stage.bin.dir}/lib/native"/>
<fixEOLs dist-stage-dir="${dist.stage.bin.dir}"/>
<rake task="install_dist_gems"/>
<!-- wipe out jar and run jar-dist here to ensure it's the last thing before tarring
see JRUBY-5429. -->
<delete file="lib/jruby.jar"/>
<antcall target="jar-dist"/>
<tar destfile="${dist.dir}/jruby-bin-${version.jruby}.tar.gz" compression="gzip">
<tarfileset dir="${dist.stage.bin.dir}" mode="755" prefix="jruby-${version.jruby}">
<include name="bin/**"/>
</tarfileset>
<tarfileset dir="${dist.stage.bin.dir}" prefix="jruby-${version.jruby}">
<include name="lib/**"/>
</tarfileset>
<tarfileset dir="${basedir}" prefix="jruby-${version.jruby}">
<patternset refid="dist.bin.files"/>
</tarfileset>
<tarfileset dir="${basedir}" prefix="jruby-${version.jruby}">
<patternset refid="dist.nailgun.files"/>
</tarfileset>
<tarfileset dir="${basedir}" mode="755" prefix="jruby-${version.jruby}">
<include name="tool/nailgun/configure"/>
</tarfileset>
</tar>
<zip destfile="${dist.dir}/jruby-bin-${version.jruby}.zip">
<zipfileset dir="${dist.stage.bin.dir}" filemode="755" prefix="jruby-${version.jruby}">
<include name="bin/**"/>
</zipfileset>
<zipfileset dir="${dist.stage.bin.dir}" prefix="jruby-${version.jruby}">
<include name="lib/**"/>
</zipfileset>
<zipfileset dir="${basedir}" prefix="jruby-${version.jruby}">
<patternset refid="dist.bin.files"/>
</zipfileset>
<zipfileset dir="${basedir}" prefix="jruby-${version.jruby}">
<patternset refid="dist.nailgun.files"/>
</zipfileset>
<zipfileset dir="${basedir}" filemode="755" prefix="jruby-${version.jruby}">
<include name="tool/nailgun/configure"/>
</zipfileset>
</zip>
<checksum file="${dist.dir}/jruby-bin-${version.jruby}.zip" algorithm="md5"/>
<checksum file="${dist.dir}/jruby-bin-${version.jruby}.zip" algorithm="sha1"/>
<checksum file="${dist.dir}/jruby-bin-${version.jruby}.tar.gz" algorithm="md5"/>
<checksum file="${dist.dir}/jruby-bin-${version.jruby}.tar.gz" algorithm="sha1"/>
</target>
<target name="dist-src" depends="jar-dist">
<mkdir dir="${dist.stage.src.dir}"/>
<copy todir="${dist.stage.src.dir}">
<fileset dir="${basedir}">
<patternset refid="dist.bindir.files"/>
<patternset refid="dist.lib.files"/>
</fileset>
</copy>
<rake task="install_dist_gems['${dist.stage.src.dir}']"/>
<fixEOLs dist-stage-dir="${dist.stage.src.dir}"/>
<tar destfile="${dist.dir}/jruby-src-${version.jruby}.tar.gz" compression="gzip">
<tarfileset dir="${dist.stage.src.dir}" mode="755" prefix="jruby-${version.jruby}">
<include name="bin/**"/>
</tarfileset>
<tarfileset dir="${dist.stage.src.dir}" prefix="jruby-${version.jruby}">
<include name="lib/**"/>
</tarfileset>
<tarfileset dir="${basedir}" prefix="jruby-${version.jruby}">
<patternset refid="dist.src.files"/>
<patternset refid="dist.nailgun.files"/>
<include name="spi/**"/>
</tarfileset>
<tarfileset dir="${basedir}" mode="755" prefix="jruby-${version.jruby}">
<include name="tool/nailgun/configure"/>
<include name="test/testapp/testapp"/>
<include name="test/testapp/testapp.exe"/>
<include name="test/org/jruby/util/shell_launcher_test*"/>
</tarfileset>
</tar>
<zip destfile="${dist.dir}/jruby-src-${version.jruby}.zip">
<zipfileset dir="${dist.stage.src.dir}" filemode="755" prefix="jruby-${version.jruby}">
<include name="bin/**"/>
</zipfileset>
<zipfileset dir="${dist.stage.src.dir}" prefix="jruby-${version.jruby}">
<include name="lib/**"/>
</zipfileset>
<zipfileset dir="${basedir}" prefix="jruby-${version.jruby}">
<patternset refid="dist.src.files"/>
<patternset refid="dist.nailgun.files"/>
<include name="spi/**"/>
</zipfileset>
<zipfileset dir="${basedir}" filemode="755" prefix="jruby-${version.jruby}">
<include name="tool/nailgun/configure"/>
<include name="test/testapp/testapp"/>
<include name="test/testapp/testapp.exe"/>
<include name="test/org/jruby/util/shell_launcher_test*"/>
</zipfileset>
</zip>
<checksum file="${dist.dir}/jruby-src-${version.jruby}.zip" algorithm="md5"/>
<checksum file="${dist.dir}/jruby-src-${version.jruby}.zip" algorithm="sha1"/>
<checksum file="${dist.dir}/jruby-src-${version.jruby}.tar.gz" algorithm="md5"/>
<checksum file="${dist.dir}/jruby-src-${version.jruby}.tar.gz" algorithm="sha1"/>
</target>
<target name="dist-snapshot" depends="jar-dist">
<jar destfile="${lib.dir}/jruby.jar" update="true">
<fileset dir="${jruby.classes.dir}">
<include name="org/jruby/jruby.properties"/>
</fileset>
</jar>
<property name="jar-up-to-date" value="true"/>
<antcall target="dist-bin">
<param file="${jruby.classes.dir}/org/jruby/jruby.properties"/>
</antcall>
</target>
<target name="dist-snapshot-install-stuff">
<unzip dest="${snapshot.install.dir}" src="${dist.dir}/jruby-bin-${version.jruby}.zip"/>
<chmod perm="755" file="${snapshot.install.dir}/jruby-${version.jruby}/bin/jruby"/>
<exec executable="${snapshot.install.dir}/jruby-${version.jruby}/bin/jruby"
dir="${snapshot.install.dir}/jruby-${version.jruby}">
<arg value="-v"/>
<arg value="-e"/>
<arg value="system('rm -f ${snapshot.install.dir}/current &amp;&amp; ln -s ${snapshot.install.dir}/jruby-${version.jruby} ${snapshot.install.dir}/current'); puts 'Successfully installed snapshot'"/>
</exec>
</target>
<target name="dist-snapshot-install" depends="dist-snapshot" if="snapshot.install.dir">
<antcall target="dist-snapshot-install-stuff">
<param file="${jruby.classes.dir}/org/jruby/jruby.properties"/>
</antcall>
</target>
<target name="dist" depends="install-dev-gems,dist-bin,dist-src,dist-jar-complete">
<rake task="gem"/>
<rake task="installer"/>
</target>
<target name="dist-clean">
<delete dir="${dist.dir}"/>
<delete dir="gem/pkg"/>
</target>
<target name="gem" depends="dist-jar-complete"><rake task="gem"/></target>
<target name="installer"><rake task="installer"/></target>
<target name="clean" depends="init" description="Cleans almost everything, leaves downloaded specs">
<delete dir="${build.dir}"/>
<delete dir="${dist.dir}"/>
<delete quiet="false">
<fileset dir="${lib.dir}" includes="jruby*.jar"/>
</delete>
<delete dir="${api.docs.dir}"/>
<delete dir="src_gen"/>
<antcall target="clean-ng"/>
<antcall target="clean-tzdata" />
</target>
<!-- FIXME: Cannot run Rake on clean until minijruby so keep this target -->
<target name="clear-specs">
<delete dir="${rubyspec.dir}"/>
<delete dir="${mspec.dir}"/>
<delete file="${rubyspec.tar.file}"/>
<delete file="${mspec.tar.file}"/>
<delete file="${spec.dir}/rubyspecs.current.revision"/>
</target>
<target name="clean-all" depends="clean, dist-clean, clear-specs" description="Cleans everything, including dist files and specs">
<delete dir="build.eclipse"/>
<delete dir="lib/native"/>
</target>
<property name="nailgun.home" value="tool/nailgun"/>
<target name="need-ng">
<condition property="should.build.ng">
<and>
<os family="unix"/>
<not><available file="${nailgun.home}/ng"/></not>
</and>
</condition>
</target>
<target name="build-ng" depends="need-ng" if="should.build.ng">
<echo message="Configuring ng client in ${nailgun.home}"/>
<exec executable="./configure" osfamily="unix" dir="${nailgun.home}" failonerror="true" output="${dev.null}"/>
<echo message="Building ng client in ${nailgun.home}"/>
<exec executable="${make.cmd}" osfamily="unix" dir="${nailgun.home}" output="${dev.null}"/>
</target>
<target name="need-clean-ng">
<condition property="should-clean-ng">
<and>
<os family="unix"/>
<available file="${nailgun.home}/Makefile"/>
<available file="${nailgun.home}/ng"/>
</and>
</condition>
</target>
<target name="clean-ng" depends="need-clean-ng" if="should-clean-ng">
<exec executable="${make.cmd}" dir="${nailgun.home}" osfamily="unix" failifexecutionfails="false" output="${dev.null}">
<arg value="clean"/>
</exec>
</target>
<target name="jruby-nailgun" depends="compile, build-ng"
description="Set up JRuby to be run with Nailgun (jruby-ng, jruby-ng-server)">
<mkdir dir="${build.dir}/nailmain"/>
</target>
<property name="jruby-cext-native.home" value="cext/src/"/>
<target name="build-jruby-cext-native" depends="jar"
description="Build JRuby cext support">
<exec osfamily="unix" executable="${make.cmd}" dir="${jruby-cext-native.home}" failonerror="true"/>
<exec osfamily="windows" executable="cmd" dir="${jruby-cext-native.home}" failonerror="true">
<arg line='/c sh -c "${make.cmd} CC=gcc"'/>
</exec>
</target>
<target name="clean-jruby-cext-native" depends="compile"
description="Build JRuby cext support">
<exec osfamily="unix" executable="${make.cmd}" dir="${jruby-cext-native.home}" failonerror="true">
<arg value="dist-clean"/>
</exec>
<exec osfamily="windows" executable="cmd" dir="${jruby-cext-native.home}" failonerror="true">
<arg line='/c sh -c "${make.cmd} dist-clean"'/>
</exec>
</target>
<target name="cext" depends="build-jruby-cext-native"/>
<target name="test-rails-stable" depends="jar"><rake task="test:rails"/></target>
<target name="test-prawn" depends="jar"><rake task="test:prawn"/></target>
<target name="bench-language" depends="jar"><rake task="bench:language"/></target>
<target name="fetch-tzdata" description="Fetch tzdata into build/tzdata">
<available property="tzdata.present" filepath="${tzdata.builddir}/src" file="tzdata${tzdata.latest.version}.tar.gz" />
<mkdir dir="${tzdata.builddir}/src" />
<ftp server="${tzdata.ftpserver}"
action="get"
verbose="yes"
passive="yes"
userid="anonymous"
password="${tzdata.ftp.anonymous.userid}"
remotedir="/pub"
newer="yes">
<fileset dir="${tzdata.builddir}/src">
<include name="tzdata${tzdata.latest.version}.tar.gz" />
</fileset>
</ftp>
</target>
<target name="expand-tzdata" depends="fetch-tzdata" description="Expand tzdata into build/tzdata">
<untar src="${tzdata.builddir}/src/tzdata${tzdata.latest.version}.tar.gz"
compression="gzip"
dest="${tzdata.builddir}/src"
/>
</target>
<!-- basically a copy of joda-time's compile.zoneinfo task -->
<target name="compile-tzdata" depends="prepare, expand-tzdata" description="Compile tzdata in build/tzdata">
<mkdir dir="${tzdata.builddir}/build" />
<mkdir dir="${tzdata.builddir}/build/org/joda/time/tz/data" />
<echo message="Compiling tzdata version ${tzdata.latest.version}" />
<java classname="org.joda.time.tz.ZoneInfoCompiler"
fork="true"
output="${dev.null}"
failonerror="false">
<classpath path="${build.lib.dir}/joda-time-${joda.time.version}.jar" />
<!-- Override default provider since data directory doesn't exist yet -->
<sysproperty key="org.joda.time.DateTimeZone.Provider"
value="org.joda.time.tz.UTCProvider" />
<!-- Specify source and destination directories -->
<arg line="-src ${tzdata.builddir}/src -dst ${tzdata.builddir}/build/org/joda/time/tz/data" />
<!-- Specify all the data files to compile -->
<arg value="africa" />
<arg value="antarctica" />
<arg value="asia" />
<arg value="australasia" />
<arg value="europe" />
<arg value="northamerica" />
<arg value="southamerica" />
<arg value="pacificnew" />
<arg value="etcetera" />
<arg value="backward" />
<arg value="systemv" />
</java>
<update-constants tzdata-version="${tzdata.latest.version}"/>
<property name="constants.java.is.same" value="true"/>
</target>
<target name="update-tzdata" depends="compile-tzdata" description="Update joda-time's zone info with one we compiled">
<jar update="yes" destfile="${build.lib.dir}/joda-time-${joda.time.version}.jar" basedir="${tzdata.builddir}/build" />
</target>
<target name="clean-tzdata" description="Remove files used for updating time zone information">
<delete dir="${tzdata.builddir}" failonerror="no" />
<echo message="Reset joda-time jar" />
<exec executable="git" failonerror="false" failifexecutionfails="false">
<arg line="checkout -- ${build.lib.dir}/joda-time-${joda.time.version}.jar"/>
</exec>
</target>
<target name="ci-matrix" depends="clean,jar" description="Run a matrix configuration job from Hudson.">
<property name="testtype" value="test"/>
<echo>Running ${testtype} build with JDK ${jdk}</echo>
<antcall target="${testtype}"/>
</target>
</project>
Jump to Line
Something went wrong with that request. Please try again.