blob: a49280e51a16b5fcca77def6544ad1a5355c6bbf [file] [log] [blame]
<?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>