
	<!--
		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.
	-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>org.apache.log4php</groupId>
	<artifactId>apache-log4php</artifactId>
	<packaging>jar</packaging>
	<version>2.0.0-incubating</version>
	<name>Apache log4php.</name>
	<description>Logging framework for PHP.</description>
	<url>http://incubator.apache.org:80/log4php</url>
	<issueManagement>
		<system>JIRA</system>
		<url>http://issues.apache.org/jira/browse/LOG4PHP</url>
	</issueManagement>
	<mailingLists>
		<mailingList>
			<name>log4php-user</name>
			<subscribe>log4php-user-subscribe@logging.apache.org</subscribe>
			<unsubscribe>log4php-user-unsubscribe@logging.apache.org</unsubscribe>
			<post>log4php-user@logging.apache.org</post>
			<archive>http://mail-archives.apache.org/mod_mbox/logging-log4php-user/</archive>
			<otherArchives>
				<otherArchive>http://markmail.org/search/list:org.apache.logging.log4php-user</otherArchive>
			</otherArchives>
		</mailingList>
		<mailingList>
			<name>log4php-dev</name>
			<subscribe>log4php-dev-subscribe@logging.apache.org</subscribe>
			<unsubscribe>log4php-dev-unsubscribe@logging.apache.org</unsubscribe>
			<post>log4php-dev@logging.apache.org</post>
			<archive>http://mail-archives.apache.org/mod_mbox/logging-log4php-dev/</archive>
			<otherArchives>
				<otherArchive>http://markmail.org/search/list:org.apache.logging.log4php-dev</otherArchive>
			</otherArchives>
		</mailingList>
	</mailingLists>
	<licenses>
		<license>
			<name>Apache License, Version 2.0</name>
			<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
			<distribution>repo</distribution>
		</license>
	</licenses>
	<scm>
		<connection>scm:svn:http://svn.apache.org/repos/asf/incubator/log4php/tags/apache-log4php-2.0.0-incubating</connection>
		<developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/log4php/tags/apache-log4php-2.0.0-incubating</developerConnection>
		<url>http://svn.apache.org/viewcvs.cgi/incubator/log4php/tags/apache-log4php-2.0.0-incubating</url>
	</scm>
	<organization>
		<name>Apache Software Foundation</name>
		<url>http://www.apache.org</url>
	</organization>
	
  <developers>
    <developer>
      <name>Alvero Carrasco</name>
      <email>alvero at apache.org</email>
    </developer>
    <developer>
      <name>Knut Urdalen</name>
      <email>kurdalen at apache.org</email>
    </developer>
    <developer>
      <name>Christian Grobmeier</name>
      <email>grobmeier at apache.org</email>
    </developer>
    <developer>
      <name>Gavin McDonald </name>
      <email>gmcdonald at apache.org</email>
    </developer>
    <developer>
      <name>Christian Hammers</name>
      <email>chammers at apache.org</email>
    </developer>
  </developers>

  <contributors>
    <contributor>
      <name>Marco Vassura</name>
    </contributor>
    <contributor>
      <name>Sergio Strampelli</name>
    </contributor>
    <contributor>
      <name>Abel Gonzalez</name>
    </contributor>
    <contributor>
      <name>Domenico Lordi</name>
    </contributor>
    <contributor>
      <name>Ilker Kiris</name>
    </contributor>
    <contributor>
      <name>Blake Watters</name>
    </contributor>
    <contributor>
      <name>Simon Wiest</name>
    </contributor>
  </contributors>
	
	<properties>
		<surefire.reports>target/surefire-reports</surefire.reports>
		<coverage.report>target/site/coverage-report</coverage.report>
	</properties>

	<build>
		<plugins>
			<plugin>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<workingDirectory>target</workingDirectory>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-antrun-plugin</artifactId>
				<dependencies>
					<dependency>
						<groupId>org.apache.ant</groupId>
						<artifactId>ant-trax</artifactId>
						<version>1.7.0</version>
					</dependency>
					<dependency>
						<groupId>net.sf.saxon</groupId>
						<artifactId>saxon</artifactId>
						<version>8.7</version>
					</dependency>
				</dependencies>
				<executions>
				    <execution>
                        <id>phplint</id>
                        <phase>process-sources</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <apply executable="php">
                                    <arg value="-l" />
                                    <fileset dir="." includes="src/**/*.php" />
                                </apply>
                            </tasks>        
                        </configuration>
                    </execution>
                     <!-- 
                     To create a pear package you need the following pear artifacts installed
                        [exec]   $ sudo pear upgrade PEAR
     					[exec]   $ sudo pear install XML_Serializer-0.19.2
     					[exec]   $ sudo pear install - -alldeps PEAR_PackageFileManager2
                      -->
                    <execution>
                        <id>pear-package</id>
                        <phase>package</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <delete dir="target/pear" />    
                                <mkdir dir="target/pear/log4php" />      
                                <copy file="package.php" todir="target/pear" />      
                                <copy file="package-config.php" todir="target/pear" />   
                                <copy file="src/changes/changes.xml" todir="target/pear" />      
                                <copy file="CHANGELOG" todir="target/pear" />    
                                <copy file="LICENSE" todir="target/pear" />      
                                <copy file="README" todir="target/pear" />   
                                <copy file="NOTICE" todir="target/pear" />   
                                <copy todir="target/pear">      
                                    <fileset dir="src">     
                                        <include name="examples/**/*" />     
                                    </fileset>      
                                </copy>
                                <copy todir="target/pear/log4php">      
                                    <fileset dir="src/main/php">    
                                        <include name="**/*.php" />
                                        <include name="**/*.dtd" />
                                    </fileset>      
                                </copy>
                                <exec executable="php" dir="target/pear">
                                    <arg line="-d error_reporting=6143" /> <!-- E_ALL & ~E_STRICT -->
                                    <arg line="../../package.php" />
                                </exec>
                                <exec executable="pear" dir="target/pear">
                                    <arg line="package" />
                                </exec>
                                <move tofile="target/Apache_log4php-${version}-pear.tgz">
                                    <fileset dir="target/pear/">
                                      <include name="Apache_log4php-*.tgz" />
                                    </fileset>
                                </move>
                            </tasks>
                        </configuration>
                    </execution>
                     
                     
                    <!--+
                        | PHPDoc must be installed for this execution 
                        +--> 
				    <execution>
						<id>phpdoc</id>
						<phase>pre-site</phase>
						<goals>
							<goal>run</goal>
						</goals>
						<configuration>
					      						
							<tasks>
                                <mkdir dir="target/site/apidocs" />
				                <exec executable="phpdoc" failonerror="true">
				                        <arg value="-d" />
				                        <arg value="src/main/php" />
				                        <arg value="-t" />
				                        <arg value="target/site/apidocs" />
				                        <arg value="-o" />
				                        <arg value="HTML:frames:DOM/default" />
				                        <arg value="--title" />
				                        <arg value="Apache log4php ${version}" />
				                </exec>
				            </tasks>
                            
						</configuration>
					</execution>
					<!--+
                        | PHPUnit (and XDebug for the coverage report) must be installed for this execution 
                        +-->      
					<execution>
                        <id>test</id>
                        <phase>test</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            
                            <tasks>
                                <mkdir dir="${surefire.reports}" />
                                <mkdir dir="${coverage.report}" />
                                <exec executable="phpunit" dir="src/test/php">
                                    <arg line=" --log-junit ../../../${surefire.reports}/phpunit-testresults.xml" />
                                    <arg line=" --coverage-html ../../../${coverage.report}" />
                                </exec>

                                <xslt in="${surefire.reports}/phpunit-testresults.xml" out="${surefire.reports}/xslt.info" style="src/test/config/phpunit_to_surefire.xslt" processor="trax">
                                    <param name="outputDir" expression="${surefire.reports}" />
                                </xslt>
                            </tasks>
                        </configuration>
                    </execution>
				</executions>
			</plugin>

			<plugin>
				<artifactId>maven-assembly-plugin</artifactId>
				<configuration>
					<descriptors>
						<descriptor>src/assembly/src.xml</descriptor>
					</descriptors>
					<appendAssemblyId>true</appendAssemblyId>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.rat</groupId>
				<artifactId>apache-rat-plugin</artifactId>
				<version>0.6</version>
			</plugin>
			<plugin>
        		<groupId>org.apache.maven.plugins</groupId>
        		<artifactId>maven-release-plugin</artifactId>
        		<version>2.0-beta-9</version>
        		<configuration>
        			<goals>site assembly:assembly</goals>
        		</configuration>
      		</plugin>
    	</plugins>
	</build>
	<dependencies>
	</dependencies>
	<reporting>
		<excludeDefaults>true</excludeDefaults>
		<plugins>
			<plugin>
				<artifactId>maven-project-info-reports-plugin</artifactId>
				<reportSets>
					<reportSet>
						<reports>
							<report>scm</report>
							<report>dependencies</report>
							<report>license</report>
							<report>project-team</report>
							<report>issue-tracking</report>
							<report>mailing-list</report>
						</reports>
					</reportSet>
				</reportSets>
			</plugin>
			<plugin>
				<artifactId>maven-changes-plugin</artifactId>
				<reportSets>
					<reportSet>
						<reports>
							<report>changes-report</report>
						</reports>
					</reportSet>
				</reportSets>
				<configuration>
					<issueLinkTemplate>%URL%/browse/%ISSUE%</issueLinkTemplate>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-report-plugin</artifactId>
      </plugin>
      
      <plugin>
        <groupId>org.apache.rat</groupId>
	<artifactId>apache-rat-plugin</artifactId>
	<version>0.6</version>
	<configuration>
		<excludes>
			<exclude>.buildbot-sourcedata</exclude>
		</excludes>
	</configuration>
      </plugin>
    </plugins>
  </reporting>
 <distributionManagement>
    <site>
      <id>logging.site</id>
      <url>file:///${user.dir}/target/site-deploy</url>
    </site>
  </distributionManagement>
</project>
