<?xml version="1.0" encoding="UTF-8"?>
<!--
 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.
-->
<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1 http://maven.apache.org/xsd/assembly-1.1.1.xsd">
	<id>src</id>
	<formats>
		<format>zip</format>
		<format>tar.gz</format>
	</formats>
	<baseDirectory>apache-log4php-${project.version}</baseDirectory>
	<includeSiteDirectory>false</includeSiteDirectory>
	<fileSets>
		<fileSet>
			<includes>
				<include>LICENSE</include>
				<include>NOTICE</include>
				<include>README</include>
				<include>INSTALL</include>
				<include>CHANGELOG</include>
				<include>pom.xml</include>
				<include>build.xml</include>
				<include>package-config.php</include>
				<include>package.php</include>
				<include>src/**</include>
			</includes>
		</fileSet>
		<fileSet>
			<directory>target/site/apidocs</directory>
			<outputDirectory>apidocs</outputDirectory>
		</fileSet>
	</fileSets>
</assembly>
