<!--
! CDDL HEADER START
!
! The contents of this file are subject to the terms of the
! Common Development and Distribution License, Version 1.0 only
! (the "License"). You may not use this file except in compliance
! with the License.
!
! You can obtain a copy of the license at
! trunk/opends/resource/legal-notices/OpenDS.LICENSE
! or https://OpenDS.dev.java.net/OpenDS.LICENSE.
! See the License for the specific language governing permissions
! and limitations under the License.
!
! When distributing Covered Code, include this CDDL HEADER in each
! file and include the License file at
! trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
! add the following below this CDDL HEADER, with the fields enclosed
! by brackets "[]" replaced with your own identifying information:
! Portions Copyright [yyyy] [name of copyright owner]
!
! CDDL HEADER END
!
!
! Copyright 2008-2010 Sun Microsystems, Inc.
! -->
<project name="Directory Server Extension" basedir="." default="package">
<description>
This is the build script for an OpenDS Directory Server extension.
</description>
<!-- Import extra tasks from ant-contrib (for, if-then-else, ...) -->
<taskdef resource="net/sf/antcontrib/antlib.xml"/>
<!-- CONFIGURE: The name of the extension's Jar file. -->
<property name="pkg.name" value="example-plugin" />
<!-- CONFIGURE: The description of this extension - used in the Javadoc title. -->
<property name="pkg.description" value="Example Plugin" />
<!-- CONFIGURE: The path of the OpenDS installation. -->
<property name="opends.install.dir" location=".." />
<!-- CONFIGURE: The path of Xalan-Java distribution. -->
<property name="xalan.directory" location="ext/xalan-j" />
<!-- General properties - should not need changing. -->
<property name="build.dir" location="build" />
<property name="src.dir" location="src" />
<property name="src.gen.dir" location="src-generated" />
<!-- alias variable as needed by the ant task that generates messages -->
<property name="msg.javagen.dir" location="${src.gen.dir}" />
<property name="lib.dir" location="lib" />
<property name="ext.dir" location="ext" />
<property name="resource.dir" location="resource" />
<property name="admin.dir" location="${resource.dir}/admin" />
<property name="config.dir" location="${resource.dir}/config" />
<property name="schema.dir" location="${resource.dir}/schema" />
<property name="msg.dir" location="${resource.dir}/messages" />
<property name="classes.dir" location="${build.dir}/classes" />
<property name="javadoc.dir" location="${build.dir}/javadoc" />
<property name="package.dir" location="${build.dir}/package" />
<property name="message.dir" location="${build.dir}/message" />
<property name="jar.file" value="${pkg.name}.jar" />
<!-- Location of OpenDS components - should not need changing. -->
<property name="opends.lib.dir" location="${opends.install.dir}/lib" />
<property name="opends.config.dir" location="${opends.install.dir}/config" />
<property name="opends.schema.dir" location="${opends.config.dir}/schema" />
<property name="opends.extensions.dir" location="${opends.lib.dir}/extensions" />
<!-- Display help information. -->
<target name="help">
<echo message="Ant options to control the build:" />
<echo message="" />
<echo message=" -Dopends.install.dir=path" />
<echo message=" The path of the OpenDS installation [default: ${opends.install.dir}]." />
<echo message="" />
<echo message=" -Dpkg.name=name" />
<echo message=" The name of the extension's Jar file [default: ${pkg.name}]." />
<echo message="" />
<echo message=" -Dpkg.description=description" />
<echo message=" The description of this extension - used in the Javadoc title [default: ${pkg.description}]." />
<echo message="" />
<echo message=" -Dxalan.directory=path" />
<echo message=" The path of a Xalan-Java distribution [default: ${xalan.directory}]." />
<echo message="" />
</target>
<!-- Clean up any files generated during the build process. -->
<target name="clean" description="Clean up any files generated during the build process.">
<delete dir="${build.dir}" />
<delete includeemptydirs="true">
<fileset dir="${src.gen.dir}" includes="**/*" />
</delete>
</target>
<!-- Compile the Directory Server extension source files. -->
<target name="compile" depends="init,compileadmin,generate-messages" description="Compile the Directory Server extension source files.">
<mkdir dir="${classes.dir}" />
<javac srcdir="${src.dir}:${src.gen.dir}" destdir="${classes.dir}" optimize="true" excludes="**/package-info.java" debug="on" debuglevel="lines,source" source="1.6" target="1.6" deprecation="true" fork="true" memoryInitialSize="${MEM}" memoryMaximumSize="${MEM}">
<compilerarg value="-Xlint:all" />
<classpath>
<fileset dir="${lib.dir}">
<include name="*.jar" />
</fileset>
<fileset dir="${opends.lib.dir}">
<include name="*.jar" />
</fileset>
</classpath>
</javac>
</target>
<!-- Generate JavaDoc documentation from the source files. -->
<target name="javadoc" depends="init,compile" description="Generate JavaDoc documentation.">
<mkdir dir="${javadoc.dir}" />
<javadoc destdir="${javadoc.dir}" source="1.6" additionalparam="-quiet" linksource="yes" windowtitle="${pkg.description} API Documentation" maxmemory="${MEM}">
<classpath>
<fileset dir="${lib.dir}">
<include name="*.jar" />
</fileset>
<fileset dir="${opends.lib.dir}">
<include name="*.jar" />
</fileset>
<dirset dir="${classes.dir}" />
</classpath>
<packageset dir="${src.dir}" />
<packageset dir="${src.gen.dir}" />
</javadoc>
</target>
<!-- Package the Directory Server extension for distribution. -->
<target name="package" depends="clean,compile" description="Package the Directory Server extension for distribution.">
<mkdir dir="${package.dir}" />
<jar jarfile="${package.dir}/${jar.file}" basedir="${classes.dir}" compress="true" index="true" />
</target>
<!-- Install the Directory Server extension in an existing OpenDS installation. -->
<target name="install" depends="package" description="Install the Directory Server extension in an existing OpenDS installation.">
<mkdir dir="${opends.lib.dir}" />
<copy todir="${opends.lib.dir}">
<fileset file="${lib.dir}/*.jar" />
</copy>
<mkdir dir="${opends.extensions.dir}" />
<copy todir="${opends.extensions.dir}">
<fileset file="${package.dir}/*.jar" />
</copy>
<copy todir="${opends.config.dir}">
<fileset file="${config.dir}/*.ldif" />
</copy>
<copy todir="${opends.schema.dir}">
<fileset file="${schema.dir}/*.ldif" />
</copy>
</target>
<!-- Perform common initialization common to several targets. -->
<target name="init">
<tstamp>
<format property="timestamp" pattern="yyyyMMddHHmmss" />
</tstamp>
<condition property="DEBUG_BUILD" value="false">
<not>
<isset property="DEBUG_BUILD" />
</not>
</condition>
<condition property="MEM" value="128M">
<not>
<isset property="MEM" />
</not>
</condition>
</target>
<!-- Perform verification for Xalan dependency -->
<target name="ensurexalan" description="Verify that the Xalan-Java jar files are accessibles.">
<if>
<not>
<available property="xalan.directory.exists" file="${xalan.directory}" />
</not>
<then>
<echo message="Please use -Dxalan.directory to point to a directory " />
<echo message="that contains an unzipped delivery of Xalan-Java." />
<echo message="You can download Xalan-Java from the Apache website :" />
<echo message=" http://xml.apache.org/xalan-j/" />
<echo message="" />
<fail />
</then>
</if>
<!-- Xalan-J Class Path : refer to it explicitly from each XSLT task. -->
<path id="xalan.class.path">
<fileset dir="${xalan.directory}">
<include name="*.jar" />
</fileset>
</path>
<!-- Verify that all required Xalan jars are present -->
<property name="xalan.jar.files" value="serializer.jar,xalan.jar,xercesImpl.jar,xml-apis.jar" />
<fail message="Missing at least one Xalan-Java jar files in directory ${xalan.directory} (expecting : ${xalan.jar.files}).">
<condition>
<not>
<resourcecount count="4">
<fileset dir="${xalan.directory}" includes="${xalan.jar.files}" />
</resourcecount>
</not>
</condition>
</fail>
</target>
<!-- Compile the Directory Server extension configuration definition files. -->
<target name="compileadmin" depends="ensurexalan,validateadmin" description="Compile the Directory Server extension configuration definition files.">
<echo message="classpath = ${xalan.class.path}" />
<!-- Compile the Directory Server extension configuration meta classes. -->
<xslt basedir="${src.dir}" destdir="${src.gen.dir}" style="${admin.dir}/metaMO.xsl">
<include name="**/*Configuration.xml" />
<exclude name="org/opends/server/admin/std/*.xml" />
<regexpmapper handledirsep="true" from="^(.*)/([^/]+)Configuration\.xml$$" to="\1/meta/\2CfgDefn.java" />
<param name="base-dir" expression="${src.dir}" />
<classpath refid="xalan.class.path" />
</xslt>
<xslt basedir="${src.dir}" destdir="${src.gen.dir}" style="${admin.dir}/package-info.xsl">
<include name="**/Package.xml" />
<exclude name="org/opends/server/admin/std/*.xml" />
<regexpmapper handledirsep="true" from="^(.*)/([^/]+)\.xml$$" to="\1/meta/package-info.java" />
<param name="type" expression="meta" />
<classpath refid="xalan.class.path" />
</xslt>
<!-- Compile the Directory Server extension configuration client classes. -->
<xslt basedir="${src.dir}" destdir="${src.gen.dir}" style="${admin.dir}/clientMO.xsl">
<include name="**/*Configuration.xml" />
<exclude name="org/opends/server/admin/std/*.xml" />
<regexpmapper handledirsep="true" from="^(.*)/([^/]+)Configuration\.xml$$" to="\1/client/\2CfgClient.java" />
<param name="base-dir" expression="${src.dir}" />
<classpath refid="xalan.class.path" />
</xslt>
<xslt basedir="${src.dir}" destdir="${src.gen.dir}" style="${admin.dir}/package-info.xsl">
<include name="**/Package.xml" />
<exclude name="org/opends/server/admin/std/*.xml" />
<regexpmapper handledirsep="true" from="^(.*)/([^/]+)\.xml$$" to="\1/client/package-info.java" />
<param name="type" expression="client" />
<classpath refid="xalan.class.path" />
</xslt>
<!-- Compile the Directory Server extension configuration server classes. -->
<xslt basedir="${src.dir}" destdir="${src.gen.dir}" style="${admin.dir}/serverMO.xsl">
<include name="**/*Configuration.xml" />
<exclude name="org/opends/server/admin/std/*.xml" />
<regexpmapper handledirsep="true" from="^(.*)/([^/]+)Configuration\.xml$$" to="\1/server/\2Cfg.java" />
<param name="base-dir" expression="${src.dir}" />
<classpath refid="xalan.class.path" />
</xslt>
<xslt basedir="${src.dir}" destdir="${src.gen.dir}" style="${admin.dir}/package-info.xsl">
<include name="**/Package.xml" />
<exclude name="org/opends/server/admin/std/*.xml" />
<regexpmapper handledirsep="true" from="^(.*)/([^/]+)\.xml$$" to="\1/server/package-info.java" />
<param name="type" expression="server" />
<classpath refid="xalan.class.path" />
</xslt>
<!-- Compile the Directory Server extension configuration ldap profile property files. -->
<xslt basedir="${src.dir}" destdir="${classes.dir}/admin/profiles/ldap" style="${admin.dir}/ldapMOProfile.xsl">
<include name="**/*Configuration.xml" />
<exclude name="org/opends/server/admin/std/*.xml" />
<regexpmapper handledirsep="true" from="^(.*)/([^/]+)Configuration\.xml$$" to="\1/meta/\2CfgDefn.properties" />
<param name="base-dir" expression="${src.dir}" />
<classpath refid="xalan.class.path" />
</xslt>
<!-- Compile the Directory Server extension configuration cli profile property files. -->
<xslt basedir="${src.dir}" destdir="${classes.dir}/admin/profiles/cli" style="${admin.dir}/cliMOProfile.xsl">
<include name="**/*Configuration.xml" />
<exclude name="org/opends/server/admin/std/*.xml" />
<regexpmapper handledirsep="true" from="^(.*)/([^/]+)Configuration\.xml$$" to="\1/meta/\2CfgDefn.properties" />
<param name="base-dir" expression="${src.dir}" />
<classpath refid="xalan.class.path" />
</xslt>
<!-- Compile the Directory Server extension configuration I18N message files. -->
<xslt basedir="${src.dir}" destdir="${classes.dir}/admin/messages" style="${admin.dir}/messagesMO.xsl">
<include name="**/*Configuration.xml" />
<exclude name="org/opends/server/admin/std/*.xml" />
<regexpmapper handledirsep="true" from="^(.*)/([^/]+)Configuration\.xml$$" to="\1/meta/\2CfgDefn.properties" />
<param name="base-dir" expression="${src.dir}" />
<classpath refid="xalan.class.path" />
</xslt>
<!-- Compile the Directory Server extension configuration manifest file. -->
<tempfile property="admin.temp.dir" destDir="${classes.dir}" />
<mkdir dir="${admin.temp.dir}" />
<xslt basedir="${src.dir}" destdir="${admin.temp.dir}" extension=".manifest" style="${admin.dir}/manifestMO.xsl">
<include name="**/*Configuration.xml" />
<exclude name="org/opends/server/admin/std/*.xml" />
<classpath refid="xalan.class.path" />
</xslt>
<concat destfile="${classes.dir}/admin/extension.manifest">
<fileset dir="${admin.temp.dir}" includes="**/*.manifest" />
</concat>
<delete dir="${admin.temp.dir}" />
</target>
<!-- Validate the Directory Server extension configuration definitions. -->
<target name="validateadmin" description="Validate the Directory Server extension configuration definitions.">
<schemavalidate>
<fileset dir="${src.dir}" includes="**/*.xml" />
<schema namespace="http://www.opends.org/admin" file="${admin.dir}/admin.xsd" />
<schema namespace="http://www.opends.org/admin-ldap" file="${admin.dir}/admin-ldap.xsd" />
<schema namespace="http://www.opends.org/admin-cli" file="${admin.dir}/admin-cli.xsd" />
</schemavalidate>
</target>
<!-- Generate messages from all .properties files located in the message directory and declared in a package-->
<target name="generate-messages" description="Generate messages for extension.">
<if>
<available file="${msg.dir}" type="dir" property="message.dir.is-present"/>
<then>
<!-- list of files properties -->
<path id="messages.properties">
<!-- Note: a package is required and properties file at the root of the
! message directory will be ignored
! -->
<fileset dir="${msg.dir}" includes="*/**/*.properties" />
</path>
<property name="msg.dir.list" refid="messages.properties" />
<!-- includes lib/*.jar into classpath (actually build-tools.jar) -->
<path id="msg.classpath">
<fileset dir="${lib.dir}">
<include name="*.jar" />
</fileset>
</path>
<property name="build-tools.jar" refid="msg.classpath" />
<typedef name="genmsg"
classname="org.opends.build.tools.GenerateMessageFile"
classpathref="msg.classpath">
</typedef>
<!-- set property if the list is not empty -->
<if>
<length string="${msg.dir.list}" when="greater" length="0" />
<then>
<!-- Generate the message catalogs for all messages located
! in the messages directory
! -->
<mkdir dir="${classes.dir}/messages" />
<for param="file" delimiter="${path.separator}" list="${msg.dir.list}">
<sequential>
<genmsg sourceProps="@{file}" />
<copy file="@{file}" todir="${classes.dir}/messages"/>
</sequential>
</for>
</then>
<else>
<echo message="No messages found: ${message.dir} is empty" />
</else>
</if>
</then>
<else>
<echo message="No messages found: ${msg.dir} is missing" />
</else>
</if>
</target>
</project>