<?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.
-->
<package version="2.0" 
	xmlns="http://pear.php.net/dtd/package-2.0" 
	xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
	<name>skywalking_agent</name>
	<channel>pecl.php.net</channel>
	<summary>Apache SkyWalking PHP Agent.</summary>
	<description>The PHP Agent for Apache SkyWalking, which provides the native tracing abilities for PHP project.</description>
	<lead>
		<name>Apache SkyWalking</name>
		<user>skywalking</user>
		<email>dev@skywalking.apache.org</email>
		<active>yes</active>
	</lead>
	<!-- SkyWalking committers could be listed here as core maintainers. -->
	<developer>
		<name>jmjoy</name>
		<user>jmjoy</user>
		<email>jmjoy@apache.org</email>
		<active>yes</active>
	</developer>
	<developer>
		<name>Yanlong He</name>
		<user>yanlong</user>
		<email>yanlong@php.net</email>
		<active>yes</active>
	</developer>
	<date>{{ date }}</date>
	<version>
		<release>{{ version }}</release>
		<api>{{ version }}</api>
	</version>
	<stability>
		<release>stable</release>
		<api>stable</api>
	</stability>
	<license uri="http://www.apache.org/licenses/LICENSE-2.0.html">Apache-2.0</license>
	<notes>
		{{ notes }}
	</notes>
	<contents>
		<dir name="/">
			{% for file in files %}<file name="{{ file.name }}" role="{{ file.role }}" />
			{% endfor %}
		</dir>
	</contents>
	<dependencies>
		<required>
			<php>
				<min>7.2.0</min>
			</php>
			<pearinstaller>
				<min>1.4.0</min>
			</pearinstaller>
		</required>
	</dependencies>
	<providesextension>skywalking_agent</providesextension>
	<extsrcrelease>
		<configureoption default="no" name="enable-cargo-debug" prompt="enable cargo debug?" />
	</extsrcrelease>
</package>
