Author: maartenc
Date: Tue May  8 14:50:22 2007
New Revision: 536344

URL: http://svn.apache.org/viewvc?view=rev&rev=536344
Log:
bootstrap Ivy (instead of downloading a previous version) to resolve our own 
dependencies...

Added:
    incubator/ivy/core/trunk/ant.patterns
    incubator/ivy/core/trunk/optional.patterns
Modified:
    incubator/ivy/core/trunk/build.properties
    incubator/ivy/core/trunk/build.xml
    
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java
    
incubator/ivy/core/trunk/src/java/org/apache/ivy/util/url/URLHandlerRegistry.java

Added: incubator/ivy/core/trunk/ant.patterns
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/ant.patterns?view=auto&rev=536344
==============================================================================
--- incubator/ivy/core/trunk/ant.patterns (added)
+++ incubator/ivy/core/trunk/ant.patterns Tue May  8 14:50:22 2007
@@ -0,0 +1,2 @@
+#This file defines the sources to compile for ivy-ant.jar
+org/apache/ivy/ant/**/*.java
\ No newline at end of file

Modified: incubator/ivy/core/trunk/build.properties
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/build.properties?view=diff&rev=536344&r1=536343&r2=536344
==============================================================================
--- incubator/ivy/core/trunk/build.properties (original)
+++ incubator/ivy/core/trunk/build.properties Tue May  8 14:50:22 2007
@@ -21,6 +21,9 @@
 test.dir=${basedir}/test/java
 build.dir=${basedir}/build
 classes.build.dir=${basedir}/build/classes
+core.classes.build.dir=${classes.build.dir}/core
+ant.classes.build.dir=${classes.build.dir}/ant
+optional.classes.build.dir=${classes.build.dir}/optional
 test.build.dir=${basedir}/build/test
 artifacts.build.dir=${basedir}/build/artifact
 distrib.dir=${basedir}/build/distrib

Modified: incubator/ivy/core/trunk/build.xml
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/build.xml?view=diff&rev=536344&r1=536343&r2=536344
==============================================================================
--- incubator/ivy/core/trunk/build.xml (original)
+++ incubator/ivy/core/trunk/build.xml Tue May  8 14:50:22 2007
@@ -16,18 +16,11 @@
    specific language governing permissions and limitations
    under the License.    
 -->
-<project name="ivy" default="coverage-report" 
xmlns:ivy="antlib:fr.jayasoft.ivy.ant">
+<project name="ivy" default="coverage-report" 
xmlns:ivy="antlib:org.apache.ivy.ant">
        <property environment="env"/>
        <property file="version.properties"/>
        <property file="build.properties"/>
 
-    <!-- =================================================================
-               IVY AUTO INSTALL
-               Ivy eats its own dog food, and thus require Ivy jar to
-               be built. This section will download Ivy from
-               internet and use it for ivy tasks of this build.
-         ================================================================= -->
-       
        <property name="final.name" value="ivy.jar" />
        <property name="final.core.name" value="ivy-core.jar" />
        
@@ -42,39 +35,19 @@
                <property name="ivy.home" value="${basedir}/.ivy" />
        </target>
        
-       <target name="init-ivy-jar">
-               <property name="ivy.jar.dir" value="${ivy.home}/jars" />
-               <property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar" />
-       </target>
-       
-       <target name="init-ivy-home" depends="init-ivy-user-home, 
init-ivy-local-home, init-ivy-jar" />
+       <target name="init-ivy-home" depends="init-ivy-user-home, 
init-ivy-local-home" />
 
-       <target name="download-ivy" depends="init-ivy-home" unless="offline">
-       <mkdir dir="${ivy.jar.dir}"/>
-               <!-- download Ivy from web site so that it can be used even 
without any special installation -->
-               <!-- use a non standard location during migration to apache -->
-       <get 
src="http://people.apache.org/~antoine/ivy/ivy-${ivy.install.version}.jar";
-                dest="${ivy.jar.file}" usetimestamp="true"/>
-       </target>
-       
-       <target name="check-ivy-available" depends="init-ivy-home">
-       <path id="ivy.lib.path">
-           <fileset dir="${ivy.jar.dir}" includes="*.jar"/>
-       </path>
-               <available property="ivy.available" 
resource="fr/jayasoft/ivy/ant/antlib.xml"
-                                       classpathref="ivy.lib.path" />
-       </target>
-       
-       <target name="init-ivy" depends="download-ivy,check-ivy-available" 
if="ivy.available">
-       <!-- try to load ivy here from local ivy dir, 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. -->
-       <taskdef resource="fr/jayasoft/ivy/ant/antlib.xml"
-                 uri="antlib:fr.jayasoft.ivy.ant" classpathref="ivy.lib.path"/>
-               <ivy:configure file="${basedir}/ivysettings.xml" /> <!-- not 
necessary with Ivy 2.0+ -->
+       <target name="init-ivy" depends="compile-ant">
+       <taskdef resource="org/apache/ivy/ant/antlib.xml"
+                uri="antlib:org.apache.ivy.ant">
+                       <classpath>
+                               <pathelement 
location="${core.classes.build.dir}"/>
+                               <pathelement 
location="${ant.classes.build.dir}"/>
+                       </classpath>
+       </taskdef>
+               
+               <ivy:configure />
     </target>
-
        
        <target name="install" depends="jar" description="build Ivy and install 
it in Ivy home for consecutive builds">
                <copy file="${artifacts.build.dir}/${final.name}" 
tofile="${ivy.jar.file}"/>
@@ -91,7 +64,9 @@
                </path>
                <path id="run.classpath">
                        <path refid="build.classpath"/>
-                       <pathelement location="${classes.build.dir}"/>
+                       <pathelement location="${core.classes.build.dir}"/>
+                       <pathelement location="${ant.classes.build.dir}"/>
+                       <pathelement location="${optional.classes.build.dir}"/>
                </path>
         <path id="test.classpath">
             <path refid="run.classpath"/>
@@ -101,6 +76,9 @@
        
        <target name="prepare" depends="init">
           <mkdir dir="${classes.build.dir}"/>
+          <mkdir dir="${core.classes.build.dir}"/>
+          <mkdir dir="${ant.classes.build.dir}"/>
+          <mkdir dir="${optional.classes.build.dir}"/>
           <mkdir dir="${test.build.dir}"/>
           <mkdir dir="${artifacts.build.dir}"/>
           <mkdir dir="${test.report.dir}"/>
@@ -130,8 +108,6 @@
        
        <target name="clean-examples" description="clean all examples">
                <subant target="clean" failonerror="false">
-                       <!-- use current ivy jar dir for nested calls, to avoid 
downloading ivy several times -->
-                       <property name="ivy.jar.dir" value="${ivy.jar.dir}"/>
                <fileset dir="src/example" includes="**/build.xml"/>
         </subant>              
        </target>
@@ -170,51 +146,100 @@
     <!-- =================================================================
                DEPENDENCY MNGT, COMPILATION AND JAR
          ================================================================= -->
-       <target name="resolve" depends="init-ivy, prepare" unless="no.resolve" 
if="ivy.available">
+       <target name="resolve" depends="init-ivy" unless="no.resolve">
                <ivy:retrieve conf="default,test" />
        </target>
 
-       <target name="build" depends="resolve">
-               <javac  srcdir="${src.dir}"
-                       destdir="${classes.build.dir}"
-                       classpathref="build.classpath"
+       <target name="compile-core" depends="prepare">
+               <javac  srcdir="${src.dir}"
+                       destdir="${core.classes.build.dir}"
+                               sourcepath="" 
                                source="${ivy.minimum.javaversion}"
                                target="${ivy.minimum.javaversion}"
-                       debug="${debug.mode}"
-                               includeantruntime="no"/>
+                   debug="${debug.mode}"
+                               includeantruntime="no">
+                       <excludesfile name="ant.patterns" />
+                       <excludesfile name="optional.patterns" />
+               </javac>
+               <copy todir="${core.classes.build.dir}" 
includeEmptyDirs="false">
+               <fileset dir="${src.dir}">
+                       <include name="org/apache/ivy/core/**" />
+                       <exclude name="**/*.java"/>
+               </fileset>
+               </copy>
+               
+               <!-- copy settings files for backward compatibility with 
ivyconf naming -->
+               <copy 
file="${core.classes.build.dir}/org/apache/ivy/core/settings/ivysettings-local.xml"
+                       
tofile="${core.classes.build.dir}/org/apache/ivy/core/settings/ivyconf-local.xml"
 />
+               <copy 
file="${core.classes.build.dir}/org/apache/ivy/core/settings/ivysettings-default-chain.xml"
+                       
tofile="${core.classes.build.dir}/org/apache/ivy/core/settings/ivyconf-default-chain.xml"
 />
+               <copy 
file="${core.classes.build.dir}/org/apache/ivy/core/settings/ivysettings-main-chain.xml"
+                       
tofile="${core.classes.build.dir}/org/apache/ivy/core/settings/ivyconf-main-chain.xml"
 />
+               <copy 
file="${core.classes.build.dir}/org/apache/ivy/core/settings/ivysettings-public.xml"
+                       
tofile="${core.classes.build.dir}/org/apache/ivy/core/settings/ivyconf-public.xml"
 />
+               <copy 
file="${core.classes.build.dir}/org/apache/ivy/core/settings/ivysettings-shared.xml"
+                       
tofile="${core.classes.build.dir}/org/apache/ivy/core/settings/ivyconf-shared.xml"
 />
+               <copy 
file="${core.classes.build.dir}/org/apache/ivy/core/settings/ivysettings.xml"
+                       
tofile="${core.classes.build.dir}/org/apache/ivy/core/settings/ivyconf.xml" />
        </target>
 
-       <target name="jar" depends="build, default-version">
-               <!--  copy resources -->
-               <copy todir="${classes.build.dir}">
+       <target name="compile-ant" depends="compile-core">
+               <javac  srcdir="${src.dir}"
+                       destdir="${ant.classes.build.dir}"
+                               sourcepath="" 
+                               source="${ivy.minimum.javaversion}"
+                               target="${ivy.minimum.javaversion}"
+                   debug="${debug.mode}"
+                               includeantruntime="yes">
+                       <classpath>
+                               <pathelement 
location="${core.classes.build.dir}"/>
+                       </classpath>
+                       <includesfile name="ant.patterns" />
+               </javac>
+               <copy todir="${ant.classes.build.dir}" includeEmptyDirs="false">
                <fileset dir="${src.dir}">
+                       <include name="org/apache/ivy/ant/**" />
                        <exclude name="**/*.java"/>
                </fileset>
                </copy>
-               <!-- copy antlib for backward compatibility with 
fr.jayasoft.ivy package -->
-               <copy file="${src.dir}/org/apache/ivy/ant/antlib.xml" 
-                         todir="${classes.build.dir}/fr/jayasoft/ivy/ant"/>
-               <!-- copy settings files for backward compatibility with 
ivyconf naming -->
-               <copy 
file="${classes.build.dir}/org/apache/ivy/core/settings/ivysettings-local.xml"
-                       
tofile="${classes.build.dir}/org/apache/ivy/core/settings/ivyconf-local.xml" />
-               <copy 
file="${classes.build.dir}/org/apache/ivy/core/settings/ivysettings-default-chain.xml"
-                       
tofile="${classes.build.dir}/org/apache/ivy/core/settings/ivyconf-default-chain.xml"
 />
-               <copy 
file="${classes.build.dir}/org/apache/ivy/core/settings/ivysettings-main-chain.xml"
-                       
tofile="${classes.build.dir}/org/apache/ivy/core/settings/ivyconf-main-chain.xml"
 />
-               <copy 
file="${classes.build.dir}/org/apache/ivy/core/settings/ivysettings-public.xml"
-                       
tofile="${classes.build.dir}/org/apache/ivy/core/settings/ivyconf-public.xml" />
-               <copy 
file="${classes.build.dir}/org/apache/ivy/core/settings/ivysettings-shared.xml"
-                       
tofile="${classes.build.dir}/org/apache/ivy/core/settings/ivyconf-shared.xml" />
-               <copy 
file="${classes.build.dir}/org/apache/ivy/core/settings/ivysettings.xml"
-                       
tofile="${classes.build.dir}/org/apache/ivy/core/settings/ivyconf.xml" />
                
+               <!-- copy antlib for backward compatibility with 
fr.jayasoft.ivy package -->
+               <copy 
file="${ant.classes.build.dir}/org/apache/ivy/ant/antlib.xml" 
+                         todir="${ant.classes.build.dir}/fr/jayasoft/ivy/ant"/>
+       </target>
+       
+       <target name="compile-optional" depends="compile-ant, resolve">
+               <javac  srcdir="${src.dir}"
+                       destdir="${optional.classes.build.dir}"
+                               sourcepath="" 
+                               source="${ivy.minimum.javaversion}"
+                               target="${ivy.minimum.javaversion}"
+                   debug="${debug.mode}"
+                               includeantruntime="no">
+                       <classpath>
+                               <pathelement 
location="${core.classes.build.dir}"/>
+                               <fileset dir="${lib.dir}">
+                               <include name="**/*.jar"/>
+                           </fileset>
+                       </classpath>
+                       <includesfile name="optional.patterns" />
+               </javac>
+               <copy todir="${core.classes.build.dir}" 
includeEmptyDirs="false">
+               <fileset dir="${src.dir}">
+                       <exclude name="org/apache/ivy/core/**" />
+                       <exclude name="org/apache/ivy/ant/**" />
+                       <exclude name="**/*.java"/>
+               </fileset>
+               </copy>
+       </target>
+
+       <target name="jar" depends="compile-optional, default-version">
                <!-- identify compiled ivy version -->
-               <echo message="version=${build.version}${line.separator}" 
file="${classes.build.dir}/module.properties" append="true"/>
-               <echo message="date=${pubdate}${line.separator}" 
file="${classes.build.dir}/module.properties" append="true"/>
+               <echo message="version=${build.version}${line.separator}" 
file="${core.classes.build.dir}/module.properties" append="true"/>
+               <echo message="date=${pubdate}${line.separator}" 
file="${core.classes.build.dir}/module.properties" append="true"/>
 
                <!-- package the two ivy jars -->
                <jar    destfile="${artifacts.build.dir}/${final.name}"
-                               basedir="${classes.build.dir}"
                                manifest="${basedir}/MANIFEST.MF">
                        <metainf dir="${basedir}" 
includes="LICENSE,DISCLAIMER,NOTICE" />
                        <manifest>
@@ -230,17 +255,20 @@
                                        <attribute name="Implementation-Vendor" 
value="Apache Software Foundation" />
                                </section>
                        </manifest>
+                       <fileset dir="${core.classes.build.dir}" />
+                       <fileset dir="${ant.classes.build.dir}" />
+                       <fileset dir="${optional.classes.build.dir}" />
                </jar>
-               <jar    destfile="${artifacts.build.dir}/${final.core.name}"
-                               basedir="${classes.build.dir}"
-                               excludes="org/apache/ivy/ant/*">
+               <jar    destfile="${artifacts.build.dir}/${final.core.name}">
                        <metainf dir="${basedir}" 
includes="LICENSE,DISCLAIMER,NOTICE" />
                        <manifest>
                                <attribute name="Build-Version" 
value="${build.version}"/>
                        </manifest>
+                       <fileset dir="${core.classes.build.dir}" />
+                       <fileset dir="${optional.classes.build.dir}" />
                </jar>
                <!-- clean generated module properties file -->
-               <delete file="${classes.build.dir}/module.properties"/>
+               <delete file="${core.classes.build.dir}/module.properties"/>
        </target>
        
 
@@ -288,7 +316,7 @@
        
        <target name="init-tests" depends="init-tests-offline, 
init-tests-online" />
        
-       <target name="emma" depends="jar" unless="skip.test" if="ivy.available">
+       <target name="emma" depends="jar" unless="skip.test">
                <ivy:cachepath organisation="emma" module="emma" 
revision="2.0.5312" 
                                   inline="true" conf="ant" 
pathid="emma.classpath"/> 
                <taskdef resource="emma_ant.properties" 
classpathref="emma.classpath" />
@@ -296,10 +324,14 @@
                <property name="coverage.dir" value="${build.dir}/coverage" />
                <mkdir dir="${coverage.dir}" />
            <emma enabled="${emma.enabled}" >
-             <instr instrpath="${classes.build.dir}"
-                    mode="overwrite"
-                    metadatafile="${coverage.dir}/metadata.emma"
-             />
+             <instr mode="overwrite"
+                    metadatafile="${coverage.dir}/metadata.emma">
+               <instrpath>
+                               <pathelement 
location="${core.classes.build.dir}"/>
+                               <pathelement 
location="${ant.classes.build.dir}"/>
+                               <pathelement 
location="${optional.classes.build.dir}"/>
+               </instrpath>
+             </instr>
            </emma>
                <delete file="${coverage.dir}/coverage.emma" />
                <!-- add emma path to test path, because emma jars need to be 
available when running 

Added: incubator/ivy/core/trunk/optional.patterns
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/optional.patterns?view=auto&rev=536344
==============================================================================
--- incubator/ivy/core/trunk/optional.patterns (added)
+++ incubator/ivy/core/trunk/optional.patterns Tue May  8 14:50:22 2007
@@ -0,0 +1,13 @@
+#This file defines the sources to compile for ivy-optional.jar
+org/apache/ivy/Main.java
+org/apache/ivy/plugins/matcher/GlobPatternMatcher.java
+org/apache/ivy/plugins/repository/sftp/**/*.java
+org/apache/ivy/plugins/repository/ssh/**/*.java
+org/apache/ivy/plugins/repository/vfs/**/*.java
+org/apache/ivy/plugins/repository/vsftp/**/*.java
+org/apache/ivy/plugins/resolver/AbstractSshBasedResolver.java
+org/apache/ivy/plugins/resolver/SFTPResolver.java
+org/apache/ivy/plugins/resolver/SshResolver.java
+org/apache/ivy/plugins/resolver/VfsResolver.java
+org/apache/ivy/plugins/resolver/VsftpResolver.java
+org/apache/ivy/util/url/HttpClientHandler.java
\ No newline at end of file

Modified: 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java?view=diff&rev=536344&r1=536343&r2=536344
==============================================================================
--- 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java 
(original)
+++ 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java 
Tue May  8 14:50:22 2007
@@ -22,6 +22,7 @@
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.lang.reflect.Field;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
@@ -55,7 +56,6 @@
 import org.apache.ivy.plugins.latest.LatestTimeStrategy;
 import org.apache.ivy.plugins.matcher.ExactOrRegexpPatternMatcher;
 import org.apache.ivy.plugins.matcher.ExactPatternMatcher;
-import org.apache.ivy.plugins.matcher.GlobPatternMatcher;
 import org.apache.ivy.plugins.matcher.ModuleIdMatcher;
 import org.apache.ivy.plugins.matcher.PatternMatcher;
 import org.apache.ivy.plugins.matcher.RegexpPatternMatcher;
@@ -179,7 +179,15 @@
         addMatcher(ExactPatternMatcher.INSTANCE);
         addMatcher(RegexpPatternMatcher.INSTANCE);
         addMatcher(ExactOrRegexpPatternMatcher.INSTANCE);
-        addMatcher(GlobPatternMatcher.INSTANCE);
+        
+        try {
+            // GlobPatternMatcher is optional. Only add it when available.
+                       Class globClazz = 
IvySettings.class.getClassLoader().loadClass("org.apache.ivy.plugins.matcher.GlobPatternMatcher");
+                       Field instanceField = globClazz.getField("INSTANCE");
+                       addMatcher((PatternMatcher) instanceField.get(null));
+               } catch (Exception e) {
+                       // ignore: the matcher isn't on the classpath
+               }
         
         addReportOutputter(new XmlReportOutputter());
         addReportOutputter(new LogReportOutputter());

Modified: 
incubator/ivy/core/trunk/src/java/org/apache/ivy/util/url/URLHandlerRegistry.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/util/url/URLHandlerRegistry.java?view=diff&rev=536344&r1=536343&r2=536344
==============================================================================
--- 
incubator/ivy/core/trunk/src/java/org/apache/ivy/util/url/URLHandlerRegistry.java
 (original)
+++ 
incubator/ivy/core/trunk/src/java/org/apache/ivy/util/url/URLHandlerRegistry.java
 Tue May  8 14:50:22 2007
@@ -44,12 +44,19 @@
     public static URLHandler getHttp() {
         try {
             Class.forName("org.apache.commons.httpclient.HttpClient");
+            Class handler = 
Class.forName("org.apache.ivy.util.url.HttpClientHandler");
             Message.verbose("jakarta commons httpclient detected: using it for 
http downloading");
-            return new HttpClientHandler(); 
+            return (URLHandler) handler.newInstance(); 
         } catch (ClassNotFoundException e) {
-             Message.verbose("jakarta commons httpclient not found: using jdk 
url handling");
+            Message.verbose("jakarta commons httpclient not found: using jdk 
url handling");
             return new BasicURLHandler();
-        }
+        } catch (InstantiationException e) {
+            Message.verbose("couldn't instantiate HttpClientHandler: using jdk 
url handling");
+            return new BasicURLHandler();
+               } catch (IllegalAccessException e) {
+            Message.verbose("couldn't instantiate HttpClientHandler: using jdk 
url handling");
+            return new BasicURLHandler();
+               }
     }
 
 }


Reply via email to