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