summaryrefslogtreecommitdiff
path: root/buildscripts/phing/pear
diff options
context:
space:
mode:
Diffstat (limited to 'buildscripts/phing/pear')
-rw-r--r--buildscripts/phing/pear/BuildPhingPEARPackageTask.php270
-rw-r--r--buildscripts/phing/pear/build.xml156
2 files changed, 426 insertions, 0 deletions
diff --git a/buildscripts/phing/pear/BuildPhingPEARPackageTask.php b/buildscripts/phing/pear/BuildPhingPEARPackageTask.php
new file mode 100644
index 00000000..6ac6ad51
--- /dev/null
+++ b/buildscripts/phing/pear/BuildPhingPEARPackageTask.php
@@ -0,0 +1,270 @@
+<?php
+/*
+ * $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information please see
+ * <http://phing.info>.
+ */
+
+require_once 'phing/tasks/system/MatchingTask.php';
+include_once 'phing/types/FileSet.php';
+include_once 'phing/tasks/ext/pearpackage/Fileset.php';
+
+/**
+ *
+ * @author Hans Lellelid <hans@xmpl.org>
+ * @package phing.tasks.ext
+ * @version $Revision$
+ */
+class BuildPhingPEARPackageTask extends MatchingTask {
+
+ /** Base directory for reading files. */
+ private $dir;
+
+ private $version;
+ private $state = 'stable';
+ private $notes;
+
+ private $filesets = array();
+
+ /** Package file */
+ private $packageFile;
+
+ public function init() {
+ include_once 'PEAR/PackageFileManager2.php';
+ if (!class_exists('PEAR_PackageFileManager2')) {
+ throw new BuildException("You must have installed PEAR_PackageFileManager2 (PEAR_PackageFileManager >= 1.6.0) in order to create a PEAR package.xml file.");
+ }
+ }
+
+ private function setOptions($pkg){
+
+ $options['baseinstalldir'] = 'phing';
+ $options['packagedirectory'] = $this->dir->getAbsolutePath();
+
+ if (empty($this->filesets)) {
+ throw new BuildException("You must use a <fileset> tag to specify the files to include in the package.xml");
+ }
+
+ $options['filelistgenerator'] = 'Fileset';
+
+ // Some PHING-specific options needed by our Fileset reader
+ $options['phing_project'] = $this->getProject();
+ $options['phing_filesets'] = $this->filesets;
+
+ if ($this->packageFile !== null) {
+ // create one w/ full path
+ $f = new PhingFile($this->packageFile->getAbsolutePath());
+ $options['packagefile'] = $f->getName();
+ // must end in trailing slash
+ $options['outputdirectory'] = $f->getParent() . DIRECTORY_SEPARATOR;
+ $this->log("Creating package file: " . $f->getPath(), PROJECT_MSG_INFO);
+ } else {
+ $this->log("Creating [default] package.xml file in base directory.", PROJECT_MSG_INFO);
+ }
+
+ // add install exceptions
+ $options['installexceptions'] = array( 'bin/phing.php' => '/',
+ 'bin/pear-phing' => '/',
+ 'bin/pear-phing.bat' => '/',
+ );
+
+ $options['dir_roles'] = array( 'phing_guide' => 'doc',
+ 'etc' => 'data',
+ 'example' => 'doc');
+
+ $options['exceptions'] = array( 'bin/pear-phing.bat' => 'script',
+ 'bin/pear-phing' => 'script',
+ 'CREDITS' => 'doc',
+ 'CHANGELOG' => 'doc',
+ 'README' => 'doc',
+ 'TODO' => 'doc');
+
+ $pkg->setOptions($options);
+
+ }
+
+ /**
+ * Main entry point.
+ * @return void
+ */
+ public function main() {
+
+ if ($this->dir === null) {
+ throw new BuildException("You must specify the \"dir\" attribute for PEAR package task.");
+ }
+
+ if ($this->version === null) {
+ throw new BuildException("You must specify the \"version\" attribute for PEAR package task.");
+ }
+
+ $package = new PEAR_PackageFileManager2();
+
+ $this->setOptions($package);
+
+ // the hard-coded stuff
+ $package->setPackage('phing');
+ $package->setSummary('PHP5 project build system based on Apache Ant');
+ $package->setDescription('PHing Is Not GNU make; it\'s a project build system based on Apache Ant.
+You can do anything with it that you could do with a traditional build system like GNU make, and its use of
+simple XML build files and extensible PHP "task" classes make it an easy-to-use and highly flexible build framework.
+Features include file transformations (e.g. token replacement, XSLT transformation, Smarty template transformations,
+etc.), file system operations, interactive build support, SQL execution, and much more.');
+ $package->setChannel('pear.phing.info');
+ $package->setPackageType('php');
+
+ $package->setReleaseVersion($this->version);
+ $package->setAPIVersion($this->version);
+
+ $package->setReleaseStability($this->state);
+ $package->setAPIStability($this->state);
+
+ $package->setNotes($this->notes);
+
+ $package->setLicense('LGPL', 'http://www.gnu.org/licenses/lgpl.html');
+
+ // Add package maintainers
+ $package->addMaintainer('lead', 'hans', 'Hans Lellelid', 'hans@xmpl.org');
+ $package->addMaintainer('lead', 'mrook', 'Michiel Rook', 'michiel@trendserver.nl');
+
+
+
+ // (wow ... this is a poor design ...)
+ //
+ // note that the order of the method calls below is creating
+ // sub-"release" sections which have specific rules. This replaces
+ // the platformexceptions system in the older version of PEAR's package.xml
+ //
+ // Programmatically, I feel the need to re-iterate that this API for PEAR_PackageFileManager
+ // seems really wrong. Sub-sections should be encapsulated in objects instead of having
+ // a "flat" API that does not represent the structure being created....
+
+
+ // creating a sub-section for 'windows'
+ $package->addRelease();
+ $package->setOSInstallCondition('windows');
+ $package->addInstallAs('bin/phing.php', 'phing.php');
+ $package->addInstallAs('bin/pear-phing.bat', 'phing.bat');
+ $package->addIgnoreToRelease('bin/pear-phing');
+
+ // creating a sub-section for non-windows
+ $package->addRelease();
+ //$package->setOSInstallCondition('(*ix|*ux|darwin*|*BSD|SunOS*)');
+ $package->addInstallAs('bin/phing.php', 'phing.php');
+ $package->addInstallAs('bin/pear-phing', 'phing');
+ $package->addIgnoreToRelease('bin/pear-phing.bat');
+
+
+ // "core" dependencies
+ $package->setPhpDep('5.0.0');
+ $package->setPearinstallerDep('1.4.0');
+
+ // "package" dependencies
+ $package->addPackageDepWithChannel( 'optional', 'VersionControl_SVN', 'pear.php.net', '0.3.0alpha1');
+ $package->addPackageDepWithChannel( 'optional', 'PHPUnit2', 'pear.php.net', '2.3.0');
+ $package->addPackageDepWithChannel( 'optional', 'PhpDocumentor', 'pear.php.net', '1.3.0RC3');
+ $package->addPackageDepWithChannel( 'optional', 'Xdebug', 'pear.php.net', '2.0.0beta2');
+ $package->addPackageDepWithChannel( 'optional', 'Archive_Tar', 'pear.php.net', '1.3.0');
+ $package->addPackageDepWithChannel( 'optional', 'PEAR_PackageFileManager', 'pear.php.net', '1.5.2');
+
+ // now add the replacements ....
+ $package->addReplacement('Phing.php', 'pear-config', '@DATA-DIR@', 'data_dir');
+ $package->addReplacement('bin/pear-phing.bat', 'pear-config', '@PHP-BIN@', 'php_bin');
+ $package->addReplacement('bin/pear-phing.bat', 'pear-config', '@BIN-DIR@', 'bin_dir');
+ $package->addReplacement('bin/pear-phing.bat', 'pear-config', '@PEAR-DIR@', 'php_dir');
+ $package->addReplacement('bin/pear-phing', 'pear-config', '@PHP-BIN@', 'php_bin');
+ $package->addReplacement('bin/pear-phing', 'pear-config', '@BIN-DIR@', 'bin_dir');
+ $package->addReplacement('bin/pear-phing', 'pear-config', '@PEAR-DIR@', 'php_dir');
+
+ // now we run this weird generateContents() method that apparently
+ // is necessary before we can add replacements ... ?
+ $package->generateContents();
+
+ $e = $package->writePackageFile();
+
+ if (PEAR::isError($e)) {
+ throw new BuildException("Unable to write package file.", new Exception($e->getMessage()));
+ }
+
+ }
+
+ /**
+ * Used by the PEAR_PackageFileManager_PhingFileSet lister.
+ * @return array FileSet[]
+ */
+ public function getFileSets() {
+ return $this->filesets;
+ }
+
+ // -------------------------------
+ // Set properties from XML
+ // -------------------------------
+
+ /**
+ * Nested creator, creates a FileSet for this task
+ *
+ * @return FileSet The created fileset object
+ */
+ function createFileSet() {
+ $num = array_push($this->filesets, new FileSet());
+ return $this->filesets[$num-1];
+ }
+
+ /**
+ * Set the version we are building.
+ * @param string $v
+ * @return void
+ */
+ public function setVersion($v){
+ $this->version = $v;
+ }
+
+ /**
+ * Set the state we are building.
+ * @param string $v
+ * @return void
+ */
+ public function setState($v) {
+ $this->state = $v;
+ }
+
+ /**
+ * Sets release notes field.
+ * @param string $v
+ * @return void
+ */
+ public function setNotes($v) {
+ $this->notes = $v;
+ }
+ /**
+ * Sets "dir" property from XML.
+ * @param PhingFile $f
+ * @return void
+ */
+ public function setDir(PhingFile $f) {
+ $this->dir = $f;
+ }
+
+ /**
+ * Sets the file to use for generated package.xml
+ */
+ public function setDestFile(PhingFile $f) {
+ $this->packageFile = $f;
+ }
+
+}
+
+
diff --git a/buildscripts/phing/pear/build.xml b/buildscripts/phing/pear/build.xml
new file mode 100644
index 00000000..128dcd03
--- /dev/null
+++ b/buildscripts/phing/pear/build.xml
@@ -0,0 +1,156 @@
+<?xml version="1.0"?>
+<!--
+ This build file packages the phing files, builds a package.xml (version 2) for installation
+ using PEAR and creates the TAR and TGZ files.
+-->
+<project name="phing" basedir="." default="main">
+
+ <property name="phing.home" value=".."/>
+ <property name="build.base.dir" value="build"/>
+ <property name="pkgname" value="phing-${version}"/>
+ <property name="build.src.dir" value="${build.base.dir}/${pkgname}"/>
+
+ <!-- some default properties -->
+ <property name="notes">This is the latest release of Phing.</property>
+ <property name="state" value="stable"/>
+
+ <taskdef
+ name="pear-package"
+ classname="BuildPhingPEARPackageTask" classpath="."/>
+
+ <fileset dir="${phing.home}/classes/phing" id="classes">
+ <include name="**"/>
+ </fileset>
+
+ <fileset dir="${phing.home}/docs" id="docs">
+ <include name="example/**"/>
+ <include name="phing_guide/book/**"/>
+ </fileset>
+
+ <fileset dir="${phing.home}" id="etc">
+ <include name="etc/**"/>
+ <exclude name="etc/VERSION.TXT"/>
+ </fileset>
+
+ <fileset dir="${phing.home}" id="scripts">
+ <include name="bin/pear-*"/>
+ <include name="bin/phing.php"/>
+ </fileset>
+
+ <fileset dir="${phing.home}" id="misc">
+ <include name="CHANGELOG"/>
+ <include name="CREDITS"/>
+ <include name="README"/>
+ <include name="TODO"/>
+ <exclude name="INSTALL*"/>
+ </fileset>
+
+ <!--
+ ==============================================
+ Main entry point
+ ==============================================
+ -->
+ <target name="main" if="version" depends="versioncheck,copy-files,create-package-xml,tar"/>
+
+ <!--
+ ===================================================================
+ Target: checks if language was given, otherwise fail
+ ===================================================================
+ -->
+ <target name="versioncheck" unless="version">
+ <echo message="====================================================="/>
+ <echo message="Version not specified. You must enter a version. In"/>
+ <echo message="the future you can add this to build.properties or"/>
+ <echo message="enter it on the command line: "/>
+ <echo message=" "/>
+ <echo message="-Dversion=2.0.0b1"/>
+ <echo message="====================================================="/>
+ <input propertyname="version" promptChar=":">Phing version for package</input>
+
+ <property name="pkgname" value="phing-${version}" override="true"/>
+ <property name="build.src.dir" value="${build.base.dir}/${pkgname}" override="true"/>
+
+ </target>
+
+ <!--
+ ==============================================
+ Copy the desired files into the build/ dir
+ making sure to put them in the directory
+ structure that will be needed for PEAR install
+ ==============================================
+ -->
+ <target name="copy-files">
+
+ <echo>-----------------------------</echo>
+ <echo>| Creating directory layout |</echo>
+ <echo>-----------------------------</echo>
+
+ <delete dir="${build.base.dir}"/>
+
+ <copy todir="${build.src.dir}">
+ <fileset refid="classes"/>
+ <fileset refid="docs"/>
+ <fileset refid="etc"/>
+ <fileset refid="scripts"/>
+ <fileset refid="misc"/>
+ </copy>
+
+ <append destFile="${build.src.dir}/etc/VERSION.TXT">Phing version ${version}</append>
+
+ <chmod file="${build.src.dir}/bin/pear-phing" mode="755"/>
+
+ </target>
+
+ <!--
+ ==============================================
+ Create a PEAR package.xml which will guide the
+ installation.
+ ==============================================
+ -->
+ <target name="create-package-xml" depends="versioncheck" if="version">
+
+ <echo>-----------------------------</echo>
+ <echo>| Creating PEAR package.xml |</echo>
+ <echo>-----------------------------</echo>
+ <echo></echo>
+ <echo>... (This step may take some time) ...</echo>
+
+ <delete file="${tarfile}"/>
+ <pear-package dir="${build.src.dir}" destFile="${build.base.dir}/package.xml" version="${version}" state="${state}" notes="${notes}">
+
+ <fileset refid="classes"/>
+ <fileset refid="docs"/>
+ <fileset refid="etc"/>
+ <fileset refid="misc"/>
+ <fileset refid="scripts"/>
+
+ <fileset dir="${build.src.dir}">
+ <include name="etc/VERSION.TXT"/>
+ </fileset>
+
+ </pear-package>
+
+ </target>
+
+ <!--
+ ==============================================
+ Create a tar.gz of the files, which will be
+ installed by pear package manager.
+ ==============================================
+ -->
+ <target name="tar">
+ <echo>-----------------------------</echo>
+ <echo>| Creating TAR packages |</echo>
+ <echo>-----------------------------</echo>
+
+ <property name="tgzfile" value="${build.base.dir}/${pkgname}.tgz"/>
+ <delete file="${tgzfile}"/>
+ <tar compression="gzip" destFile="${tgzfile}" basedir="${build.base.dir}" />
+
+ <property name="tarfile" value="${build.base.dir}/${pkgname}.tar"/>
+ <delete file="${tarfile}"/>
+ <tar compression="none" destFile="${tarfile}" basedir="${build.base.dir}" />
+
+ </target>
+
+</project> \ No newline at end of file