Added parser method that takes a URL to fix metadatatool.
[java-idp.git] / build.xml
1 <!-- Main build configutaion for Shibboleth java components - Walter Hoehn 06/04/2002 -->
2
3 <project name="Shibboleth" default="install" basedir=".">
4
5     <!-- Set global properties for this build -->
6     <property name="distnameWayf" value="shibboleth-wayf" />
7     <property name="root" value="." />
8     <property name="src" value="${root}/src/" />
9     <property name="tests" value="${root}/tests/" />
10     <property name="approot" value="${root}/webApplication/" />
11     <property name="appconfig" value="${src}/conf/" />
12     <property name="configroot" value="${root}/webAppConfig/" />
13     <property name="build" value="${approot}/WEB-INF/classes/" />
14     <property name="libdir" value="${approot}/WEB-INF/lib/" />
15     <property name="buildlibs" value="${root}/lib/" />
16     <property name="endorsed" value="${root}/endorsed/" />
17     <property name="distlibs" value="${root}/lib/" />
18     <property name="custom" value="${root}/custom/" />
19     <property name="dist" value="${root}/dist/" />
20     <property name="docs" value="${root}/doc/" />
21     <property name="javadocs" value="${docs}/api/" />
22
23     <property name="year" value="2002-2005"/>
24     <property name="copyright" value="Copyright &#169; ${year} UCAID. All Rights Reserved."/>
25
26
27     <!-- antcontrib tasks -->
28     <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="${buildlibs}/ant-contrib.jar"/>
29
30
31     <!-- Construct the CLASSPATH -->
32     <path id="build.path">
33         <pathelement path="${classpath}" />
34         <pathelement location="${build}" />
35         <fileset dir="${custom}">
36             <include name="**/*.jar" />
37         </fileset>
38         <fileset dir="${endorsed}">
39             <include name="**/*.jar" />
40         </fileset>
41         <fileset dir="${libdir}">
42             <include name="**/*.jar" />
43         </fileset>
44         <fileset dir="${buildlibs}">
45             <include name="**/*.jar" />
46         </fileset>
47     </path>
48
49
50     <!-- Prepare directory structure for project build-->
51     <target name="init">
52         <mkdir dir="${build}" />
53         <mkdir dir="${dist}" />
54
55         <if>
56             <not> <available file="build.properties" /> </not>
57             <then>
58                 <copy file="conf/default.build.properties" tofile="build.properties" />
59             </then>
60         </if>
61
62         <property file="build.properties" />
63     </target>
64
65
66     <!-- This target should be run before checking code into the repository -->
67     <target name="pre-checkin" depends="compile, test-all, clean-all" />
68
69
70     <!-- Compile classes and move them to ${build} -->
71     <target name="compile" depends="init"
72         description="Compile source files">
73                 <!-- Compile the shib code into the build path -->
74         <javac srcdir="${src}" destdir="${build}" includes="**/*.java" debug="on" source="1.4">
75             <classpath refid="build.path" />
76         </javac>
77                 <!-- Compile site-specific code into the build path -->
78         <javac srcdir="${custom}" destdir="${build}" includes="**/*.java" debug="on" source="1.4">
79             <classpath refid="build.path" />
80         </javac>
81                 <!-- Copy xml schemas to the build path -->
82         <copy todir="${build}/schemas">
83             <fileset dir="${src}/schemas"/>
84         </copy>
85                 <!-- Copy any site-specific jars to the build path -->
86                 <copy todir="${libdir}">
87                 <fileset dir="${custom}" includes="**/*.jar" />
88         </copy>
89     </target>
90
91
92         <!-- Generate API docs -->
93         <target name="javadocs">
94                 <mkdir dir="${docs}" />
95                 <mkdir dir="${javadocs}" />
96                 <javadoc packagenames='edu.internet2.middleware.*'
97                         sourcepath='${src}' destdir='${javadocs}'
98                         author='true' version='true'
99                         windowtitle='Shibboleth Java API' doctitle='Shibboleth Java API'
100                         bottom='${copyright}'>
101                 <classpath refid="build.path" />
102         </javadoc>
103         </target>
104
105
106     <!-- Build command-line utilities -->
107     <target name="build-util" depends="compile">
108         <jar jarfile="${distlibs}/shib-util.jar" basedir="${build}" />
109     </target>
110
111     <!-- Cleanup after the build, test, and distribution processes -->
112     <target name="clean" depends="clean-all" />
113     <target name="clean-all" depends="clean-build, clean-dist, clean-test, clean-javadocs, clean-util" />
114     <target name="clean-build">
115         <delete dir="${build}" />
116     </target>
117     <target name="clean-test">
118         <delete>
119             <fileset dir="${root}">
120                 <include name="**/TEST*.txt" />
121             </fileset>
122         </delete>
123     </target>
124     <target name="clean-dist">
125         <delete dir="${dist}" />
126     </target>
127         <target name="clean-javadocs">
128                 <delete dir="${javadocs}" />
129         </target>
130     <target name="clean-util">
131         <delete>
132             <fileset dir="${buildlibs}">
133                 <include name="shib-util.jar" />
134             </fileset>
135         </delete>
136     </target>
137         <!-- For IDE development, run this target first to delete all
138                  directories generated by the install process before
139                  recreating and reinstalling everything. -->
140         <target name="clean-install" depends="init" 
141                 description="Delete old configuration and Tomcat webapp directories.">
142                 <delete dir="${shib.home}" />
143                 <delete dir="${shibsp.home}" />
144                 <delete dir="${tomcat.home}/webapps/${shib.webapp.name}" />
145                 <delete dir="${tomcat.home}/webapps/${shibsp.webapp.name}" />
146         </target>
147
148
149         <!-- Add to the classpath for unit tests -->
150    <path id="test.path">
151       <path refid="build.path"/>
152       <pathelement location="${tests}"/>
153     </path>
154
155         <!-- Compile classes needed for unit testing -->
156     <target name="compile-tests" depends="compile">
157         <javac srcdir="${tests}" destdir="${build}" includes="**/*.java" debug="on" source="1.4">
158             <classpath refid="build.path" />
159         </javac>
160     </target>
161
162     <!-- Run automated tests on compiled code -->
163     <target name="test-all" depends="test-IdP, test-SP" />
164
165     <target name="test-IdP" depends="compile-tests">
166         <junit printsummary="no" fork="yes" haltonfailure="yes" haltonerror="yes" dir="${root}">
167                         <jvmarg value="-Djava.endorsed.dirs=${endorsed}" />
168             <classpath refid="test.path" />
169             <formatter type="plain" />
170             <test name="edu.internet2.middleware.shibboleth.aa.arp.ArpTests" />
171                         <test name="edu.internet2.middleware.shibboleth.aa.attrresolv.ResolverTests" />
172                         <test name="edu.internet2.middleware.shibboleth.common.CredentialsTests" />
173                         <test name="edu.internet2.middleware.shibboleth.common.provider.NameMapperTests" />
174                         <test name="edu.internet2.middleware.shibboleth.common.TrustTests" />
175                         <test name="edu.internet2.middleware.shibboleth.idp.provider.DNHostNameExtractionTests" />
176                         <test name="edu.internet2.middleware.shibboleth.metadata.MetadataTests" />
177         </junit>
178     </target>
179
180     <target name="test-SP" depends="compile-tests">
181         <junit printsummary="no" fork="yes" haltonfailure="yes" haltonerror="yes" dir="${root}">
182                         <jvmarg value="-Djava.endorsed.dirs=${endorsed}" />
183             <classpath refid="test.path" />
184             <formatter type="plain" />
185             <test name="edu.internet2.middleware.shibboleth.aap.AAPTests" />
186         </junit>
187     </target>
188
189
190     <!-- Tomcat Management -->
191     <target name="setupTomcatTasks">
192         <path id="tomcat.classpath">
193                     <fileset dir="${tomcat.home}/server/lib" includes="catalina-ant.jar"/>
194             </path>
195
196         <taskdef name="tomcatStart" classname="org.apache.catalina.ant.StartTask" classpathref="tomcat.classpath"/>
197         <taskdef name="tomcatStop" classname="org.apache.catalina.ant.StopTask" classpathref="tomcat.classpath"/>
198             <taskdef name="tomcatDeploy" classname="org.apache.catalina.ant.DeployTask" classpathref="tomcat.classpath"/>
199         <taskdef name="tomcatUndeploy" classname="org.apache.catalina.ant.UndeployTask" classpathref="tomcat.classpath"/>
200         </target>
201     
202     <target name="tomcat.start" depends="setupTomcatTasks" description="Start a deployed webapp using Tomcat manager">
203         <tomcatStart url="${tomcat.url}" username="${tomcat.username}" password="${tomcat.password}" path="/${shib.webapp.name}"/>
204     </target>
205
206     <target name="tomcat.stop" depends="setupTomcatTasks" description="Stop a deployed webapp using Tomcat manager">
207         <tomcatStop url="${tomcat.url}" username="${tomcat.username}" password="${tomcat.password}" path="/${shib.webapp.name}"/>
208     </target>
209
210     <target name="tomcat.deploy" depends="setupTomcatTasks" description="Upload and deploy using Tomcat manager">
211         <tomcatDeploy url="${tomcat.url}" username="${tomcat.username}" password="${tomcat.password}" path="/${shib.webapp.name}"
212                 war="file:${basedir}/${dist}/${shib.webapp.name}.war"/>
213     </target>
214
215     <target name="tomcat.undeploy" depends="setupTomcatTasks" description="Undeploy using Tomcat manager">
216         <tomcatUndeploy url="${tomcat.url}" username="${tomcat.username}" password="${tomcat.password}" path="/${shib.webapp.name}"/>
217     </target>
218         
219     
220     <!-- Automated key generation for crypto handles -->
221         <target name="genSecret" depends="compile">
222         <taskdef name="genSecret" classname="edu.internet2.middleware.shibboleth.utils.HandleRepositorySecretGenerator" classpathref="build.path"/>
223                 <genSecret keyStorePath="${appconfig}/handle.jks" keyStorePassword="shibhs" keyStoreKeyAlias="handleKey" keyStoreKeyPassword="shibhs" />
224         </target>
225
226
227         <!-- Generate salt for use with targetted id -->
228     <target name="genSalt" depends="compile">
229         <taskdef name="genSalt" classname="edu.internet2.middleware.shibboleth.utils.HandleRepositorySecretGenerator" classpathref="build.path"/>
230         <genSalt keyStorePath="${appconfig}/persistent.jks" keyStorePassword="shibhs" keyStoreKeyAlias="handleKey" keyStoreKeyPassword="shibhs" />
231     </target>
232         
233         <target name="exampleCertificates">
234                 <!--
235                 This target provides an example of the generation of
236                 self-signed Certificates for the IdP and SP. You may
237                 change the cn= and use it to generate new identities
238                 when you want to replace "example.org" with your real
239                 organization dns. However,the generated key and 
240                 certificate also have to be defined to the Credentials
241                 of the IdP and SP config files and added to the Metadata.
242                 -->
243                 <genkey alias="tomcat" storepass="exampleorg"
244                         keystore="${tomcat.home}/conf/idp-example.jks"
245                         keyalg="RSA" validity="365"
246                         dname="cn=idp.example.org, o=example.org, c=US"
247                 />
248                 <genkey alias="tomcat" storepass="exampleorg"
249                         keystore="${tomcat.home}/conf/sp-example.jks"
250                         keyalg="RSA" validity="365"
251                         dname="cn=sp.example.org, o=example.org, c=US"
252                 />
253         </target>
254
255
256     <!-- Install Shibboleth -->
257     <target name="install.init">
258         <taskdef name="xinput" classname="edu.internet2.middleware.shibboleth.utils.ant.XInput" classpath="${build}" />
259         <typedef name="xoption" classname="edu.internet2.middleware.shibboleth.utils.ant.XInputOption" classpath="${build}" />
260     </target>
261
262     <target name="install.url">
263                 <taskdef name="urlconvert" classname="edu.internet2.middleware.shibboleth.utils.ant.URLConvert" classpath="${build}"/>
264                 <urlconvert path="${shib.home}" addProperty="shib.home.url"/>
265                 <urlconvert path="${shibsp.home}" addProperty="shibsp.home.url"/>
266     </target>
267
268     <target name="install" depends="init, install.init" description="Install Shibboleth">
269         <if>
270             <xinput type="confirm" defaultvalue="y">Do you want to install the Shibboleth Identity Provider?</xinput>
271             <then>
272                 <input message="What name do you want to use for the Identity Provider web application? [default: ${shib.webapp.name}]" 
273                     addproperty="shib.webapp.name.input" defaultValue="${shib.webapp.name}" />
274                 <var name="shib.webapp.name" value="${shib.webapp.name.input}" />
275
276                 <antcall target="install.idp" />
277             </then>
278         </if>
279     </target>
280
281         <target name="install.idp" depends="init, install.init">
282         <xinput message="Deploying the java web application.  Do you want to install it directly onto the filesystem or use the tomcat manager application?" 
283             addproperty="idp.install-type.input" type="menu" casesensitive="no" defaultValue="${idp.install-type}">
284             <xoption value="filesystem.prompt">filesystem</xoption>
285             <xoption>manager</xoption>
286         </xinput>
287         <var name="idp.install-type" value="${idp.install-type.input}" />
288         
289         <antcall target="install.idp.${idp.install-type}" />
290     </target>
291
292     <!-- Prompt user for filesystem installation options and save them to build.properties -->
293     <target name="install.idp.filesystem.prompt" depends="init, install.init">
294         <input message="Select an installation base for the Shibboleth Identity Provider [default: ${shib.home}]"
295             addproperty="shib.home.input" defaultvalue="${shib.home}" />
296         <var name="shib.home" value="${shib.home.input}" />
297         <input message="Enter tomcat home directory [default: ${tomcat.home}]"
298             addproperty="tomcat.home.input" defaultvalue="${tomcat.home}" />
299         <var name="tomcat.home" value="${tomcat.home.input}" />
300         
301         <if>
302                         <available file="${shib.home}/etc" />
303             <then>
304                 <xinput type="confirm" addproperty="copy-idp-conf">WARNING!! The directory `${shib.home}/etc` already exists.  Do you want to overwrite the existing configuration?</xinput>
305             </then>
306             <else>
307                 <property name="copy-idp-conf" value="y" />
308             </else>
309         </if>
310
311         <antcall target="install.idp.filesystem" />
312         <antcall target="savePropertyFile" />
313     </target>
314
315     <!-- Install Shibboleth IdP to filesystem using the properties in build.properties -->
316     <target name="install.idp.filesystem" depends="init, install.init, build-util, install.url" 
317         description="Install Shibboleth IdP to filesystem using the properties in build.properties">
318
319         <!-- copy values to deployment descriptor and create war -->
320         <copy file="${configroot}/dist.idp.xml" tofile="${configroot}/idp.xml" overwrite="true" />
321         <replace file="${configroot}/idp.xml" token="$SHIB_HOME$" value="${shib.home.url}" />
322         <war warfile="${dist}/${shib.webapp.name}.war" webxml="${configroot}/idp.xml" basedir="${approot}" update="no" />
323                 <delete file="${configroot}/idp.xml"/>
324         <copy file="${dist}/${shib.webapp.name}.war" tofile="${tomcat.home}/webapps/${shib.webapp.name}.war" />
325
326         <!-- copy IdP jars and utilities -->
327         <copy todir="${shib.home}/lib">
328             <fileset dir="lib" includesfile="conf/idp-lib.include" />
329         </copy>
330
331         <copy todir="${shib.home}/bin">
332             <fileset dir="bin"/>
333         </copy>
334                 <chmod dir="${shib.home}/bin" perm="ug+rx" includes="**/*"/>
335
336         <mkdir dir="${shib.home}/logs" />
337
338         <!-- copy IdP configuration -->
339         <if>
340             <or>
341                 <equals arg1="${copy-idp-conf}" arg2="y" />
342                 <not> <available file="${shib.home}/etc" /> </not>
343             </or>
344             <then>
345                 <delete dir="${shib.home}/etc" />
346                 <antcall target="install.idp.filesystem.config" />
347             </then>
348         </if>
349     </target>
350
351     <!-- Install Shibboleth SP to filesystem using the properties in build.properties -->
352     <target name="install.sp.filesystem" depends="init, install.init, build-util, install.url" 
353         description="Install Shibboleth SP to filesystem using the properties in build.properties">
354
355         <!-- copy values to deployment descriptor and create war -->
356         <copy file="${configroot}/dist.sp.xml" tofile="${configroot}/sp.xml" overwrite="true" />
357         <replace file="${configroot}/sp.xml" token="$SHIB_HOME$" value="${shibsp.home.url}" />
358         <war warfile="${dist}/${shibsp.webapp.name}.war" webxml="${configroot}/sp.xml" basedir="${approot}" update="no" />
359                 <delete file="${configroot}/sp.xml"/>
360         <copy file="${dist}/${shibsp.webapp.name}.war" tofile="${tomcat.home}/webapps/${shibsp.webapp.name}.war" />
361
362         <!-- copy sp jars and utilities -->
363         <copy todir="${shibsp.home}/lib">
364             <fileset dir="lib" includesfile="conf/idp-lib.include" />
365         </copy>
366
367         <copy todir="${shibsp.home}/bin">
368             <fileset dir="bin"/>
369         </copy>
370                 <chmod dir="${shibsp.home}/bin" perm="ug+rx" includes="**/*"/>
371
372         <mkdir dir="${shibsp.home}/logs" />
373
374         <!-- copy sp configuration -->
375         <if>
376             <or>
377                 <equals arg1="${copy-sp-conf}" arg2="y" />
378                 <not> <available file="${shibsp.home}/etc" /> </not>
379             </or>
380             <then>
381                 <delete dir="${shibsp.home}/etc" />
382                 <antcall target="install.sp.filesystem.config" />
383             </then>
384         </if>
385     </target>
386         
387         
388     <!-- copy shibboleth configuration to $SHIB_HOME/etc, overwriting any existing configuration -->
389         <target name="install.idp.filesystem.config" depends="init, install.init, install.url">
390         <mkdir dir="${shib.home}/etc" />
391         <copy todir="${shib.home}/etc" overwrite="true">
392             <fileset dir="${src}/conf" includesfile="conf/idp-conf.include"/>
393         </copy>
394                 <move file="${shib.home}/etc/dist.idp.xml" tofile="${shib.home}/etc/idp.xml" overwrite="true" />
395         <replace file="${shib.home}/etc/idp.xml" token="$SHIB_HOME$" value="${shib.home.url}" />
396     </target>
397         
398     <!-- copy SP configuration to $SHIB_HOME$/etc, overwriting any existing configuration -->
399         <target name="install.sp.filesystem.config" depends="init, install.init">
400         <mkdir dir="${shibsp.home}/etc" />
401         <copy todir="${shibsp.home}/etc" overwrite="true">
402             <fileset dir="${src}/conf" includesfile="conf/sp-conf.include"/>
403         </copy>
404                 <move file="${shibsp.home}/etc/dist.sp.xml" tofile="${shibsp.home}/etc/sp.xml" overwrite="true" />
405         <replace file="${shibsp.home}/etc/sp.xml" token="$SHIB_HOME$" value="${shibsp.home.url}" />
406     </target>
407
408     <!-- install Shibboleth-IdP war using tomcat's manager app -->
409         <target name="install.idp.manager" depends="init, install.init">
410         <antcall target="setupTomcatTasks" />
411         
412         <input message="Enter local tomcat directory [default: ${tomcat.home}]" addproperty="tomcat.home.input" defaultValue="${tomcat.home}" />
413         <var name="tomcat.home" value="${tomcat.home.input}" />
414         
415         <input message="Enter tomcat url [default: ${tomcat.url}]" addproperty="tomcat.url.input" defaultValue="${tomcat.url}" />
416         <var name="tomcat.url" value="${tomcat.url.input}" />
417         
418         <input message="Enter tomcat username [default: ${tomcat.username}]" addproperty="tomcat.username.input" defaultValue="${tomcat.username}" />
419         <var name="tomcat.username" value="${tomcat.username.input}" />
420         
421         <input message="Enter tomcat password [default: ${tomcat.password}]" addproperty="tomcat.password.input" defaultValue="${tomcat.password}" />
422         <var name="tomcat.password" value="${tomcat.password.input}" />
423         
424         <antcall target="tomcat.deploy" />
425         <antcall target="savePropertyFile" />
426     </target>
427
428     <!-- save configuration to build.properties -->
429     <target name="savePropertyFile">
430         <propertyfile file="build.properties">
431             <entry key="shib.home" value="${shib.home}" />
432             <entry key="shibsp.home" value="${shibsp.home}" />
433             <entry key="shib.webapp.name" value="${shib.webapp.name}" />
434             <entry key="shibsp.webapp.name" value="${shibsp.webapp.name}" />
435             <entry key="idp.install-type" value="${idp.install-type}" />
436             <entry key="tomcat.home" value="${tomcat.home}" />
437             <entry key="tomcat.url" value="${tomcat.url}" />
438             <entry key="tomcat.username" value="${tomcat.username}" />
439             <entry key="tomcat.password" value="${tomcat.password}" />
440         </propertyfile>
441     </target>
442
443     <!-- Create WAYF and move it to ${dist} -->
444     <target name="package-wayf" depends="compile">
445         <war warfile="${dist}/${distnameWayf}.war" webxml="${configroot}/wayf.xml" basedir="${approot}" update="no" />
446     </target>
447     
448 </project>