<!-- -*- Mode: SGML; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- -->
<!-- ========================================================================= -->
<!-- Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC),        -->
<!--               2004-2005 Contributors.                                     -->
<!-- All rights reserved.                                                      -->
<!-- This program and the accompanying materials are made available            -->
<!-- under the terms of the Eclipse Public License v1.0                         -->
<!-- which accompanies this distribution and is available at                   -->
<!-- http://www.eclipse.org/legal/epl-v10.html                                 -->
<!--                                                                           -->
<!-- Contributors:                                                             -->
<!--     Xerox/PARC     initial implementation                                 -->
<!-- ========================================================================= -->

<project name="docs" default="dist" basedir=".">

    <property name="project.name" value="build-docs" />

    <target name="product" depends="local-dist" />
    <target name="clean"
            depends="clean-doc-directories"
    />

    <!-- ===================================================================== -->
    <!-- Init                                                                  -->
    <!-- ===================================================================== -->

    <import file="${basedir}/../build/build-properties.xml"/>

    <target name="init" depends="init-properties,init-directories">

        <property name="docs.src.pattern"
                  value="**/*.xml,**/*.html,**/*.doc,**/*.gif,**/*.java,**/*.lst,**/*.pdf"
        />
        <property name="docs.src.dir"
                  location="${aspectj.modules.docs.dir}"
        />

        <property name="docs.dist.dir"
                  location="${aj.dist.dir}/docs"
        />
        <property name="docs.temp.dir"
                  location="${aj.temp.dir}/doc"
        />
        <property name="web.doc.dir"
                  location="${aj.webDeploy.dir}/documentation/dist"
        />

        <property name="docs.product.name"
                  value="aspectj-docs-${build.version}"
        />

        <property name="docs.product.zip"
                  location="${aj.dist.dir}/${docs.product.name}.zip"
        />
        <!-- must specify (not *.gif) to not delete other gifs during build-in-place -->
        <!-- to find refs: gp ax imagedata | sed -n 's|.*\=\"\(..*\)\".*|\1|p' -->
        <property name="devguide.icons.dir"
                  location="${aspectj.modules.dir}/ajde/src/org/aspectj/ajde/resources/actions"
        />
        <property name="include.devguide.icons"
                  value="build.gif,openConfig.gif,browseroptions.gif"
        />

        <!-- callers of xml-html use these by default -->
        <property name="chunk.xsl.source"
                  location="${aspectj.modules.lib.dir}/docbook/docbook-xsl/html/chunk.xsl"
        />
        <property name="nochunk.xsl.source"
                  location="${aspectj.modules.lib.dir}/docbook/docbook-xsl/html/docbook.xsl"
        />
        <!-- default xml-html nochunking file (0-length dummy created when chunking) -->
        <property name="xml-target-file"
                  location="${docs.temp.dir}/xml-target-file.dummy"
        />
        <!-- default value for xml-html copying (copy all graphics) -->
        <property name="xml-html-copy" value="*.gif,*.png" />
        <property name="xml-html-stylesheet" value="aspectj-docs.css" />
        <property name="binary.pattern"
                  value="**/*.gif,**/*.png,**/*.doc,**/*.pdf,**/*.jpg,**/*.JPG,**/*.css"
        />
        <uptodate property="local.dist.uptodate"
                  targetfile="${docs.dist.dir}/doc/faq.html"
        >
            <!-- use faq as tag file -->
            <srcfiles dir="${docs.src.dir}"
                      includes="${docs.src.pattern}"
            />
        </uptodate>
        <uptodate property="dist.uptodate"
                  targetfile="${docs.product.zip}"
        >
            <!-- use zip as tag file -->
            <srcfiles dir="${docs.src.dir}"
                      includes="${docs.src.pattern}"
            />
            <srcfiles dir="${docs.dist.dir}"
                      includes="${docs.src.pattern}"
            />
        </uptodate>

    </target>

    <target name="clean-doc-directories"
            depends="init"
            description="clean build dirs (including local deploy dir)"
    >
        <delete quiet="on">
            <fileset dir="${docs.dist.dir}" />
            <fileset dir="${docs.jar.dir}" />
            <fileset dir="${docs.temp.dir}" />
        </delete>
    </target>

    <target name="dist"
            depends="init,local-dist"
            description="create unused doc zip - see ../build/build.xml for installer"
            unless="dist.uptodate"
    >
        <delete file="${docs.product.zip}" />
        <zip zipfile="${docs.product.zip}"
             basedir="${docs.dist.dir}"
        />

        <echo message="find doc zip in ${docs.product.zip}" />
    </target>

    <target name="web.deploy.faqonly"
            depends="init,faq"
            description="deploy docs.dist.dir faq to web.doc.dir"
    >
        <copy todir="${web.doc.dir}" filtering="on">
            <fileset dir="${docs.dist.dir}/doc" includes="faq.html" />
        </copy>
        <stripnonbodyhtml srcdir="${web.doc.dir}"
                          includes="faq.html"
        />
        <echo message="do link check on index and faq before release"
        />
    </target>

    <target name="web.deploy.faqindex"
            depends="init,dist"
            description="deploy built faq and index to web.doc.dir"
    >
        <copy todir="${web.doc.dir}" filtering="on">
            <fileset dir="${docs.dist.dir}/doc"
                     includes="faq.html,index.html"
            />
        </copy>
        <stripnonbodyhtml srcdir="${web.doc.dir}"
                          includes="faq.html,index.html"
        />
        <echo message="do link check on index and faq before release"
        />
    </target>

    <target name="web.deploy" depends="web.deploy.README-11" />

    <target name="web.deploy.README-11"
            depends="init"
            description="deploy README-11.html to the web site"
    >
        <property name="readme11.dir"
                  location="${web.doc.dir}/documentation/readme11"
        />
        <mkdir dir="${readme11.dir}" />
        <delete file="${readme11.dir}/index.html" />
        <mkdir dir="${readme11.dir}" />
        <copy tofile="${readme11.dir}/index.html"
              file="${aspectj.products.dir}/tools/dist/README-11.html"
              filtering="on"
        />
        <stripnonbodyhtml srcdir="${readme11.dir}"
                          includes="index.html"
        />
    </target>

    <target name="web.deploy.old"
            depends="init"
            description="deploy built docs to the web site"
    >
        <mkdir dir="${web.doc.dir}" />
        <delete dir="${web.doc.dir}" />
        <mkdir dir="${web.doc.dir}" />
        <copy todir="${web.doc.dir}">
            <fileset dir="${docs.dist.dir}/doc" />
        </copy>
        <stripnonbodyhtml srcdir="${web.doc.dir}"
                          includes="**/*.html"
        />
    </target>

    <!-- ============================================================ -->
    <!-- build all doc products                                       -->
    <!-- ============================================================ -->
    <target name="local-dist"
            depends="init"
            unless="local.dist.uptodate"
            description="avoid local-dist antecedants if uptodate"
    >
        <antcall target="do-local-dist" />
    </target>

    <target name="do-local-dist"
            depends="init,init-filters,api,faq,devguide,progguide, adk15guide, pdguide"
            description="finish products by copying dist files and library sources"
    >

        <copy todir="${docs.dist.dir}" filtering="on">
            <fileset dir="${docs.src.dir}/dist"
                     excludes="${binary.pattern}"
            />
        </copy>
        <copy todir="${docs.dist.dir}" filtering="off">
            <fileset dir="${docs.src.dir}/dist"
                     includes="${binary.pattern}"
            />
        </copy>
        <available file="${docs.src.dir}/../org.aspectj.lib/build-aspectjlib.xml"
                   property="org.aspectj.lib.available"
        />
        <!--fail unless="org.aspectj.lib.available"
              message="unable to find org.aspectj.lib"
        />
        <mkdir dir="${docs.dist.dir}/doc/aspectjlib" />
        <copy todir="${docs.dist.dir}/doc/aspectjlib" filtering="off">
            <fileset dir="${docs.src.dir}/../org.aspectj.lib"
                     includes="build-aspectjlib.xml,src/**"
                	excludes="CVS"
                  />
        </copy>
        -->
    </target>

    <target name="api"
            depends="init"
            description="javadoc for AspectJ runtime and weaver"
    >
        <property file="${docs.src.dir}/docs.build.properties" />
        <delete quiet="on">
            <fileset dir="${docs.dist.dir}/doc" includes="*api/*" />
        </delete>
        <aspectj-javadoc module="runtime" />
        <aspectj-javadoc module="aspectj5rt"/>
        <aspectj-javadoc module="weaver" />
    </target>

    <macrodef name="aspectj-javadoc">
        <attribute name="module" />
        <sequential>
            <mkdir dir="${docs.dist.dir}/doc/@{module}-api" />
            <javadoc sourcepath="${@{module}.sourcepath}"
                     destdir="${docs.dist.dir}/doc/@{module}-api"
                     windowtitle="AspectJ(tm) @{module} API"
                     classpath="${@{module}.classpath}"
                     packagenames="${@{module}.packagenames}"
            >
                <link offline="true"
                      href="http://java.sun.com/j2se/1.5/docs/api"
                      packagelistLoc="${docs.src.dir}/jdk15-packages.txt"
                />
            </javadoc>
        </sequential>
    </macrodef>

    <target name="faq" depends="init">
        <antcall target="xml-html">
            <param name="xml-source-dir"
                   value="${docs.src.dir}/faq"
            />
            <param name="xml-source-root" value="faq.xml" />
            <param name="xsl-source-file"
                   value="${nochunk.xsl.source}"
            />
            <param name="xml-target-dir" value="${docs.dist.dir}" />
            <param name="xml-target-file"
                   value="${docs.dist.dir}/doc/faq.html"
            />
            <param name="xml-html-stylesheet" value="aspectj-faq.css" />
        </antcall>
    </target>

    <target name="progguide" depends="init">
        <antcall target="build-guide">
            <param name="guide.dir" value="progGuideDB" />
            <param name="guide.name" value="progguide" />
            <param name="xml-html-copy"
          	            value="dd_arrow.gif,aspects.gif,figureUML.gif,overview.gif,telecom.gif,aspectj-docs.css"/>
        </antcall>
    </target>

    <target name="adk15guide" depends="init">
        <antcall target="build-guide">
            <param name="guide.dir" value="adk15ProgGuideDB" />
            <param name="guide.name" value="adk15notebook" />
            <param name="xml-html-copy"
    	            value="dd_arrow.gif,aspectj-docs.css"/>
        </antcall>
    </target>


    <target name="devguide" depends="init">

        <copy todir="${docs.src.dir}/devGuideDB" filtering="off">
            <fileset dir="${devguide.icons.dir}"
                     includes="${include.devguide.icons}"
            />
        </copy>

        <antcall target="build-guide">
            <param name="xml-html-copy"
                   value="dd_arrow.gif,aspectj-docs.css,ajbrowser-building.gif,ajbrowser-options.gif,${include.devguide.icons}"
            />
            <param name="guide.dir" value="devGuideDB" />
            <param name="guide.name" value="devguide" />
        </antcall>
        <delete quiet="on">
            <fileset dir="${docs.src.dir}/devGuideDB"
                     includes="${include.devguide.icons}"
            />
        </delete>
    </target>

    <target name="pdguide" depends="init">

        <copy todir="${docs.src.dir}/pdGuideDB" filtering="off">
            <fileset dir="${devguide.icons.dir}"
                     includes="${include.pdguide.icons}"
            />
        </copy>

        <antcall target="build-guide">
            <param name="xml-html-copy"
                   value="dd_arrow.gif,aspectj-docs.css,ajbrowser-building.gif,ajbrowser-options.gif,${include.pdguide.icons}"
            />
            <param name="guide.dir" value="pdGuideDB" />
            <param name="guide.name" value="pdguide" />
        </antcall>
        <delete quiet="on">
            <fileset dir="${docs.src.dir}/pdGuideDB"
                     includes="${include.pdguide.icons}"
            />
        </delete>
    </target>

    <target name="build-guide"
            depends="init"
            description="build prog or dev guide, using guide.dir and guide.name"
    >
        <!-- chunked -->
        <antcall target="xml-html">
            <param name="xml-source-dir"
                   value="${docs.src.dir}/${guide.dir}"
            />
            <param name="xml-source-root" value="${guide.name}.xml" />
            <param name="xsl-source-file"
                   value="${chunk.xsl.source}"
            />
            <param name="xml-target-dir"
                   value="${docs.dist.dir}/doc/${guide.name}"
            />
        </antcall>
        <!-- single -->
        <antcall target="xml-html">
            <param name="xml-source-dir"
                   value="${docs.src.dir}/${guide.dir}"
            />
            <param name="xml-source-root" value="${guide.name}.xml" />
            <param name="xsl-source-file"
                   value="${nochunk.xsl.source}"
            />
            <param name="xml-target-dir"
                   value="${docs.dist.dir}/doc/${guide.name}"
            />
            <param name="xml-target-file"
                   value="${docs.dist.dir}/doc/${guide.name}/printable.html"
            />
        </antcall>
        <!-- pdf TODO pdf rendering completes, result is awful
		<antcall target="xml-pdf">
			<param name="xml-source-dir" 
                  value="${docs.src.dir}/${guide.dir}"/>
			<param name="xml-source-root" value="${guide.name}.xml"/>
			<param name="pdf-target-file" 
                  value="${docs.dist.dir}/doc/${guide.name}.pdf"/>
		</antcall>
		-->

    </target>

    <target name="test-pdf"
            depends="init"
            description="test pdf build of [prog|dev|adk]guide"
    >
        <!-- NPE in fop task when building programming guide.
        see patch at https://bugs.eclipse.org/bugs/show_bug.cgi?id=81654
        <antcall target="build-pdf">
            <param name="guide.dir" value="progGuideDB" />
            <param name="guide.name" value="progguide" />
        </antcall>
		-->
        <antcall target="build-pdf">
            <param name="guide.dir" value="adk15ProgGuideDB" />
            <param name="guide.name" value="adk15notebook" />
        </antcall>
        <copy todir="${docs.src.dir}/devGuideDB" filtering="off">
            <fileset dir="${devguide.icons.dir}"
                     includes="${include.devguide.icons}"
            />
        </copy>

        <antcall target="build-pdf">
            <param name="xml-html-copy"
                   value="ajbrowser-building.gif,ajbrowser-options.gif,${include.devguide.icons}"
            />
            <param name="guide.dir" value="devGuideDB" />
            <param name="guide.name" value="devguide" />
        </antcall>
    </target>

    <target name="build-pdf"
            depends="init"
            description="build prog or dev guide, using guide.dir and guide.name"
    >
        <antcall target="xml-pdf">
            <param name="xml-source-dir"
                   value="${docs.src.dir}/${guide.dir}"
            />
            <param name="xml-source-root" value="${guide.name}.xml" />
            <param name="pdf-target-file"
                   value="${docs.dist.dir}/doc/${guide.name}.pdf"
            />
        </antcall>
    </target>

    <!-- XML conversion stuff -->

    <!-- xml-pdf -->
    <target name="xml-pdf">
        <delete file="${pdf-target-file}" />
        <touch file="${pdf-target-file}" />
        <delete file="${xml-source-dir}/index.fo" />

        <!-- produce index.fo from docbook sources -->
        <java classname="com.icl.saxon.StyleSheet" fork="yes">
            <classpath>
                <pathelement location="${aspectj.modules.lib.dir}/saxon/saxon.jar"
                />
            </classpath>
            <arg value="-o" />
            <arg value="${xml-source-dir}/index.fo" />
            <arg value="${xml-source-dir}/${xml-source-root}" />
            <arg value="${aspectj.modules.lib.dir}/docbook/docbook-xsl/fo/docbook.xsl"
            />
        </java>

        <!-- index.fo to pdf (TODO if formatting fixed, to init-taskdefs) -->
        <taskdef name="fop"
                 classname="org.apache.fop.tools.anttasks.Fop"
        >
            <classpath>
                <fileset dir="${aspectj.modules.lib.dir}/docbook/fop">
                    <include name="fop.jar" />
                    <include name="batik.jar" />
                    <include name="avalon.jar" />
                </fileset>
                <fileset dir="${aspectj.modules.lib.dir}/ant">
                    <include name="xalan.jar" />
                    <include name="xercesImpl.jar" />
                    <include name="xml-apis.jar" />
                </fileset>
            </classpath>
        </taskdef>
        <!-- TODO messagelevel="info" -->
        <fop format="application/pdf"
             messagelevel="verbose"
             basedir="${guide.dir}"
             fofile="${guide.dir}/index.fo"
             outfile="${pdf-target-file}"
        >
        </fop>
        <delete quiet="on" file="${guide.dir}/index.fo" />
    </target>

    <target name="xml-html"
            description="antcall(xml-source-dir, xml-source-root, xml-target-dir, xml-target-file)
     convert xml to html using docbook. parameters: 
     xml-source-dir  # base directory of source 
     xml-source-root # base file of source (relative to xml-source-dir)
     xsl-source-file # xsl transform to apply (use chunk.xsl.source by default) 
     xml-target-dir  # target directory for output (used as xsl param base.dir)
     xml-target-file # full path to output file in xml-source-dir, ignored when chunking
     xml-html-copy   # copy files to target (defaults to *.gif,*.png)
     xml-html-stylesheet   # style sheet to use (defaults to ${xml-html-stylesheet})"
    >

        <mkdir dir="${xml-target-dir}" />
        <copy todir="${xml-target-dir}">
            <fileset dir="${xml-source-dir}"
                     includes="${xml-html-copy}"
            />
        </copy>
        <java classname="com.icl.saxon.StyleSheet"
              classpath="${aspectj.modules.lib.dir}/saxon/saxon.jar"
              fork="yes"
              failonerror="yes"
        >
            <!-- todo: establish failure policy -->
            <arg value="-o" />
            <arg value="${xml-target-file}" />
            <arg value="${xml-source-dir}/${xml-source-root}" />
            <arg value="${xsl-source-file}" />
            <arg value="base.dir=${xml-target-dir}/" />
            <arg value="use.id.as.filename=1" />
            <arg value="html.stylesheet=${xml-html-stylesheet}" />
        </java>
    </target>

</project>
