
	<!--
		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/apache-log4php-2.0.0-incubating/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" />      
                                    </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" />
				                </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/bin.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>
      		<!-- 
      		<plugin>
	        	<artifactId>maven-gpg-plugin</artifactId>
	            <configuration>
	            	<passphrase>${gpg.passphrase}</passphrase>
	            </configuration>
	            <executions>
	            	<execution>
	                	<id>sign-artifacts</id>
	                	<phase>verify</phase>
	                	<goals>
							<goal>sign</goal>
						</goals>
					</execution>
				</executions>
			</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>
