<?xml version="1.0"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.

-->
<!DOCTYPE project [
<!ENTITY license '
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
'>
<!ENTITY common SYSTEM 'src/ant/common.xml'>
]>

<!--
	This file releases log4cxx using Apache Ant (http://ant.apache.org)
-->
<project name="log4cxx" default="usage">

	&common;

	<property	name="base.dir"
				location="."
	/>
	<property	name="src.dir"
				location="${base.dir}/src/main/cpp"
	/>
	<property	name="resources.dir"
				location="${base.dir}/src/main/resources"
	/>
	<property	name="include.dir"
				location="${base.dir}/src/main/include"
	/>
	<property	name="target.dir"
				location="${base.dir}/target"
	/>
	<property	name="lib.dir"
				location="${target.dir}/lib"
	/>
	<property	name="examples.dir"
				location="${base.dir}/src/examples/cpp"
	/>
	<property	name="tests.dir"
				location="${base.dir}/src/test"
	/>
	<property	name="tests.cpp.dir"
				location="${tests.dir}/cpp"
	/>
	<property	name="tests.resources.dir"
				location="${tests.dir}/resources"
	/>
	<property	name="tests.output.dir"
				location="${tests.resources.dir}/output"
	/>
	<property	name="m2_repo"
				location="${user.home}/.m2/repository"
	/>
	<property	name="log4j.version"
				value="1.2.14"
	/>
	<available	property="log4j.jar"
				value="/usr/share/java/log4j-1.2.jar"
				file="/usr/share/java/log4j-1.2.jar"
	/>
	<property	name="log4j.jar"
				location="${m2_repo}/log4j/log4j/${log4j.version}/log4j-${log4j.version}.jar"
	/>
	<property	name="doxygen.exe"
				value="doxygen"
	/>
	<property	name="lib.name"
				value="${project.groupId}"
	/>
	<property	name="lib.prefix"
				value=""
	/>

	<propertyregex	property="version.major"
					input="${project.version}"
					regexp="^(\d+)"
					select="\1"
	/>
	<propertyregex	property="version.minor"
					input="${project.version}"
					regexp="\.(\d+)\."
					select="\1"
	/>
	<propertyregex	property="version.rev"
					input="${project.version}"
					regexp="(\d+)(?:-.+)?$"
					select="\1"
	/>
	<propertyregex	property="version.hasSuffix"
					input="${project.version}"
					regexp="\d+-.+$"
					select="\0"
	/>

	<property	name="site.svnRepoUrl"
				value="https://svn.apache.org/repos/infra/websites/production/logging/content/log4cxx"
	/>
	<property	name="site.deployDir"
				value="target/site-deploy"
	/>
	<property	name="site.deployDir.curVersion"
				value="${site.deployDir}/${project.version}"
	/>
	<property	name="site.deployDir.curVersionWoSuffix"
				value="${site.deployDir}/${version.major}.${version.minor}.${version.rev}"
	/>

	<target	name="usage"
			description="Describes usage of the release script">
		<echo>
			Ant file for releasing log4cxx

			Common invocations:

			> ant -p

			Displays available targets
		</echo>
	</target>

	<target	name="init"
			depends="common-init">

		<condition	property="force-ant"
					value="1">
			<equals	arg1="${find}"
					arg2="false"
			/>
		</condition>
		<echo>force-ant: ${force-ant}</echo>
	</target>

	<target	name="make-header-check">
		<echo	file="${header}.cpp"
				append="false">
			#include "${header}"
			#include "${header}"
		</echo>
	</target>

	<target	name="header-check"
			description="Checks headers against Effective C++ guidelines">
		<fail unless="is-gcc">Requires GCC compiler</fail>

		<taskdef resource="net/sf/antcontrib/antcontrib.properties" />
		<delete dir="${target.dir}/header-check" />
		<mkdir dir="${target.dir}/header-check" />
		<copy	todir="${target.dir}/header-check"
				overwrite="true">
			<fileset	dir="${include.dir}"
						includes="**/*.h">
				<!-- obsolete header with #error directive to eliminate its use -->
				<exclude name="**/tchar.h" />
				<!--  excluded due to conflict between log4cxx/rfa.h and log4cxx/rolling/rfa.h  -->
				<exclude name="log4cxx/rollingfileappender.h" />
			</fileset>
		</copy>
		<foreach	target="make-header-check"
					param="header">
			<path>
				<fileset	dir="${target.dir}/header-check"
							includes="**/*.h"
				/>
			</path>
		</foreach>
		<cc	objdir="${target.dir}/header-check"
			name="gcc"
			exceptions="true"
			subsystem="gui"
			optimize="${optimize}"
			multithreaded="true"
			relentless="true"
			debug="${debug}"
			projectsOnly="${projectsOnly}">

			<compilerarg	value="-Weffc++"
			/>
			<compilerarg	value="-Wall"
			/>
			<compilerarg	value="${pic-option}"
							if="pic-option"
			/>
			<fileset	dir="${target.dir}/header-check"
						includes="**/*.cpp"
						excludes="log4cxx/private/*.cpp **/aprinitializer.h.cpp"
			/>
			<includepath path="${include.dir}" />
			<project	outfile="${projects.dir}/projects/header-check"
						type="${project.type}"
						if="project.if"
			/>
		</cc>
	</target>

	<target	name="clean-output"
			depends="init">
		<delete>
			<fileset	dir="${tests.dir}"
						includes="output/*"
			/>
		</delete>
	</target>

	<target	name="apidocs"
			description="Build log4cxx manual">
		<copy	file="${base.dir}/src/site/doxy/Doxyfile.in"
				tofile="${target.dir}/Doxyfile"
				overwrite="true"
		/>
		<replace file="${target.dir}/Doxyfile">
			<replacefilter	token="@version@"
							value="${project.version}"
			/>
			<replacefilter	token="@base_dir@"
							value="${base.dir}"
			/>
			<replacefilter	token="@manual_dest@"
							value="${target.dir}/site/apidocs"
			/>
		</replace>

		<!--
			Copying project site index data to apidocs index

			We need some Apache boilerplate and intro in the apidocs index page and the easiest
			solution seems to be to simply copy some of the contents of the project site index.
		 -->
		<xslt	in="${target.dir}/site/index.html"
				out="${target.dir}/mainpage.dox"
				style="${base.dir}/src/site/doxy/mainpage.dox.xsl"
				force="true">
			<xmlcatalog>
				<dtd	publicId="-//W3C//DTD XHTML 1.0 Transitional//EN"
						location="${base.dir}/src/site/doxy/DTDs/xhtml1-transitional.dtd"
				/>
				<dtd	publicId="-//W3C//ENTITIES Latin 1 for XHTML//EN"
						location="${base.dir}/src/site/doxy/DTDs/xhtml-lat1.ent"
				/>
				<dtd	publicId="-//W3C//ENTITIES Symbols for XHTML//EN"
						location="${base.dir}/src/site/doxy/DTDs/xhtml-symbol.ent"
				/>
				<dtd	publicId="-//W3C//ENTITIES Special for XHTML//EN"
						location="${base.dir}/src/site/doxy/DTDs/xhtml-special.ent"
				/>
			</xmlcatalog>
		</xslt>

		<mkdir	dir="${target.dir}/site/apidocs" />
		<exec	executable="${doxygen.exe}"
				dir="${target.dir}"
		/>

		<!--
			Links to the main project site

			We want links to the main project site and adding them after doxygen seems to be the
			only and easiest way.
		 -->
		<replaceregexp	match="(&lt;div (?:id=&quot;projectname&quot;|class=&quot;title&quot;)&gt;)(Apache log4cxx)"
						replace="\1&lt;a href=&quot;http://logging.apache.org/log4cxx&quot;&gt;\2&lt;/a&gt;"
						flags="img">
			<fileset dir="${target.dir}/site/apidocs">
				<include name="*.html" />
			</fileset>
		</replaceregexp>
	</target>

	<target	name="site-text-file-cleanup">
		<fixcrlf	srcDir="${base.dir}/${subDir}"
					tab="asis"
					tablength="4"
					fixlast="false"
					eof="asis"
					eol="unix"
					includes="**/*.css **/*.html"
		/>

		<replaceregexp	flags="mg"
						match="(?: |\t)+$"
						replace="">
			<fileset	dir="${base.dir}/${subDir}"
						includes="**/*.css, **/*.html"
			/>
		</replaceregexp>
	</target>

	<target	name="site"
			depends="apidocs">
		<antcall target="site-text-file-cleanup">
			<param	name="subDir"
					value="target/site"
			/>
		</antcall>
	</target>

	<target	name="prepare-changes"
			description="Prepares changes.xml from a JIRA issues list">
		<xslt	style="src/changes/changes.xslt"
				in="issues.xml"
				out="src/changes/changes.xml"
		/>
	</target>

	<target	name="checkout-site">
		<exec	executable="svn"
				failonerror="true">
			<arg value="co"					/>
			<arg value="${site.svnRepoUrl}"	/>
			<arg value="${site.deployDir}"	/>
		</exec>
	</target>

	<target	name="update-site">
		<exec	executable="svn"
				dir="${site.deployDir}"
				failonerror="true">
			<arg value="update" />
		</exec>
	</target>

	<target	name="post-site"
			depends="checkout-site, update-site"
	/>

	<target	name="svn-mime=css">
		<exec executable="svn">
			<arg value="propset"		/>
			<arg value="svn:mime-type"	/>
			<arg value="text/css"		/>
			<arg value="${src.css}"		/>
		</exec>
	</target>

	<target	name="svn-mime=html">
		<exec executable="svn">
			<arg value="propset"		/>
			<arg value="svn:mime-type"	/>
			<arg value="text/html"		/>
			<arg value="${src.html}"	/>
		</exec>
	</target>

	<!--
		Was unable to get a version w/o any suffix in pom.xml/distributionManagement, guess it's a
		limitation of the property interpolation used. All suggestions found in the net seem to only
		work outside that section, e.g. I was able to make a shorter version available in some
		phases calling ANT targets. Doesn't get me anything... So I'm dealing with the long vs.
		short name here by simply renaming the folder with the long name created by maven.

		This only works for SVN clients using only one ".svn" folder per working copy!

		https://cwiki.apache.org/confluence/display/MAVENOLD/POM+Interpolation+Refactor
		https://stackoverflow.com/a/12002359/2055163
		https://gist.github.com/tux2323/970877#file-pom-xml-L24
	 -->
	<target	name="svn-shorten-dir-name"
			if="version.hasSuffix">
		<delete	dir="${site.deployDir.curVersionWoSuffix}"
		/>
		<move	file="${site.deployDir.curVersion}"
				tofile="${site.deployDir.curVersionWoSuffix}"
		/>
	</target>

	<target	name="site-deploy">
		<antcall	target="svn-shorten-dir-name"				/>
		<delete		file="${site.deployDir}/svn-commit.tmp~"	/>

		<exec	executable="svn"
				failonerror="true">
			<arg value="add"									/>
			<arg value="--force"								/>
			<arg value="--depth=infinity"						/>
			<arg value="${site.deployDir.curVersionWoSuffix}"	/>
		</exec>

		<taskdef	name="foreach"
					classname="net.sf.antcontrib.logic.ForEach"
		/>
		<foreach	target="svn-mime=css"
					param="src.css">
			<path>
				<fileset	dir="${site.deployDir.curVersionWoSuffix}"
							includes="**/*.css"
				/>
			</path>
		</foreach>
		<foreach	target="svn-mime=html"
					param="src.html">
			<path>
				<fileset	dir="${site.deployDir.curVersionWoSuffix}"
							includes="**/*.html"
				/>
			</path>
		</foreach>

		<antcall target="site-text-file-cleanup">
			<param	name="subDir"
					value="${site.deployDir.curVersionWoSuffix}"
			/>
		</antcall>

		<!--
			Is allowed to fail in case of no files to delete:

			[exec] svn: E205001: Try 'svn help delete' for more information
     		[exec] svn: E205001: Not enough arguments provided
		 -->
		<exec	executable="sh"
				failonerror="false">
			<arg value="-c" />
			<arg value="svn st &quot;${site.deployDir.curVersionWoSuffix}&quot; | grep ! | cut -d! -f2 | sed 's/^ *//' | sed 's/^/\&quot;/g' | sed 's/$/\&quot;/g' | xargs svn rm" />
		</exec>

		<!-- Requires that SVN_EDITOR, VISUAL or EDITOR being set to edit commit description. -->
		<exec	executable="sh"
				failonerror="true">
			<arg value="-c" />
			<arg value="svn ci &quot;${site.deployDir.curVersionWoSuffix}&quot; &lt; /dev/tty &gt; /dev/tty 2&gt; /dev/tty" />
		</exec>
	</target>

	<target	name="autogen"
			depends="init"
			if="is-unix">
		<exec executable="sh">
			<arg value="autogen.sh" />
		</exec>
	</target>
</project>

