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

<!DOCTYPE project [
<!ENTITY build-properties SYSTEM "file:../build/build-properties.xml">
]>
<project name="build-docs" default="dist" basedir=".">

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

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

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

    &build-properties;

    <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="binary.pattern" 
               value="**/*.gif,**/*.png,**/*.doc,**/*.pdf,**/*.jpg,**/*.JPG"/>
      <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"
      description="finish products by copying dist files">
        <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>
    </target>

    <target name="api" depends="init"
       description="javadoc for AspectJ lang, lang.reflect and org.aspectj.weaver.tools">
        <delete dir="${docs.dist.dir}/doc/api"/>
        <mkdir dir="${docs.dist.dir}/doc/api"/>
        <javadoc sourcepath="${aspectj.modules.dir}/runtime/src;${aspectj.modules.dir}/weaver/src"
                    destdir="${docs.dist.dir}/doc/api"
                windowtitle="AspectJ(tm) runtime API"
                       link="http://java.sun.com/j2se/1.4.2/docs/api"
                       classpath="${aspectj.modules.dir}/asm/bin;${aspectj.modules.dir}/bridge/bin;${aspectj.modules.dir}/util/bin;${aspectj.modules.dir}/lib/bcel/bcel.jar"
               packagenames="org.aspectj.lang,org.aspectj.lang.reflect,org.aspectj.weaver.tools" />
               <!-- note: link ineffective at avoiding see tag warning -->
    </target>

    <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"/>
        </antcall>
    </target>

    <!-- experimental targets collapse guide-making (lose individual targets) -->
    <target name="progguide" depends="init">
      <antcall target="build-guide">
        <param name="guide.dir" value="progGuideDB"/>
        <param name="guide.name" value="progguide"/>
      </antcall>
    </target>

   <target name="adk15guide" depends="init">
	      <antcall target="build-guide">
	        <param name="guide.dir" value="adk15ProgGuideDB"/>
	        <param name="guide.name" value="adk15notebook"/>
	      </antcall>
	</target>

	
    <target name="devguide" depends="init">
    
<!-- GCH -->
<echo message="**** docs: just inside devguide target"/>
    
      <copy todir="${docs.src.dir}/devGuideDB" filtering="off" >
         <fileset dir="${devguide.icons.dir}"
             includes="${include.devguide.icons}" />
        </copy>
        
<!-- GCH -->
<echo message="**** docs: about to make call to build-guide target"/>
        
      <antcall target="build-guide">
        <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>
      <delete quiet="on"> <!-- clean icons for build-in-place -->
        <fileset dir="${docs.src.dir}/devGuideDB" 
           includes="${include.devguide.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 - enable when it works 
        <antcall target="xml-pdf">
            <param name="xml-source-dir" 
                  value="${docs.src.dir}/doc/${guide.dir}"/>
            <param name="xml-source-root" value="${guide.name}.xml"/>
            <param name="xml-target-file" 
                  value="${docs.dist.dir}/doc/${guide.name}.pdf"/>
        </antcall>
        -->
    </target>
    <!-- end of experimental targets -->

   <!-- XML conversion stuff -->

   <!-- todo xml-pdf broken; when fixed, see xml-html for example -->
    <target name="xml-pdf">
        <delete file="${xml-target-file}"/>
        <touch file="${xml-target-file}"/>
        <java classname="com.icl.saxon.StyleSheet"
              fork="yes">
            <classpath>
                <pathelement location="${saxon.dir}/saxon.jar"/>
            </classpath>
            <arg value="-o"/>
            <arg value="${xml-source-dir}/index.fo"/>
            <arg value="${xml-source-dir}/${xml-source-root}"/>
            <arg value="${docbook.dir}/docbook-xsl/fo/docbook.xsl"/>
        </java>            
    </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">

     <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"/>
        </java>            
    </target>

  <target name="info" 
     description="misc info for writing and building docbook">
<echo>
---- misc info for writing and building docbook
- link tag linkend attribute takes an id 
  - xsl converts as needed during output
  - do NOT use ulink; this will be converted to ""
    (but see param citerefentry-link: might enable this)

- to use sensible names for the files produced, 
  - use an xsl wrapper to add/modify features
  - set flag to use the id of the top-level element in the output
    file as the filename.  
    xsl:param name="use.id.as.filename" select="1"
  - fyi, other related parameters: html-ext, root-filename
  - In this example, the top-level element in the output file
    is the refentry, so set ids which become the basename of the file:
    refentry id="aspectj-mode"          # in aspectj-mode.xml, produces aspecj-mode.html
    refentry id="ajdee"                 # in ajdee.xml, produces ajdee.html

-- fyi
- related parameters: 
  html-ext, root-filename
- these tags did not work for me:
 dbhtml filename="foo.htm"
 dbhtml prefix="foo-"

- resources 
  - the dtd reference for docbook
    http://www.oreilly.com/catalog/docbook/chapter/book/docbook.html
  - the stylesheet reference for docbook xsl
    http://docbook.sourceforge.net/projects/dsssl/doc/html.html
- todo
  - fyi, generate.reference.titlepage appears not to be respected.
    tried to add if statement to html/refentry.xsl, but file still gen'd
</echo>
  </target>

</project>