Updated build scripts

This commit is contained in:
Maarten Balliauw 2012-12-19 11:50:49 +01:00
parent 264fe4260a
commit 593371da62
4 changed files with 196 additions and 303 deletions

14
Build/PharStub.php Normal file
View File

@ -0,0 +1,14 @@
<?php
spl_autoload_register(function ($class) {
include 'phar://PHPExcel/' . str_replace('_', '/', $class) . '.php';
});
try {
Phar::mapPhar();
include 'phar://PHPExcel/PHPExcel.php';
} catch (PharException $e) {
error_log($e->getMessage());
exit(1);
}
__HALT_COMPILER();

View File

@ -1,85 +0,0 @@
<?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2012 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel
* @copyright Copyright (c) 2006 - 2012 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
*/
# required: PHP 5.3+ and zlib extension
// ini option check
if (ini_get('phar.readonly')) {
echo "php.ini: set the 'phar.readonly' option to 0 to enable phar creation\n";
exit(1);
}
// output name
$pharName = 'PHPExcel.phar';
// target folder
$sourceDir = dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'Classes' . DIRECTORY_SEPARATOR;
// default meta information
$metaData = array(
'Author' => 'Mark Baker <mbaker@inviqa.com>',
'Description' => 'A pure PHP library for reading and writing spreadsheet files',
'Copyright' => 'Mark Baker (c) 2006-' . date('Y'),
'Timestamp' => time(),
'Version' => '##VERSION##',
'Date' => '##DATE##'
);
// cleanup
if (file_exists($pharName)) {
echo "Removed: {$pharName}\n";
unlink($pharName);
}
echo "Building...\n";
// the phar object
$phar = new Phar($pharName, null, 'PHPExcel');
$phar->buildFromDirectory($sourceDir);
$phar->setStub(
<<<'EOT'
<?php
spl_autoload_register(function ($class) {
include 'phar://PHPExcel/' . str_replace('_', '/', $class) . '.php';
});
try {
Phar::mapPhar();
include 'phar://PHPExcel/PHPExcel.php';
} catch (PharException $e) {
error_log($e->getMessage());
exit(1);
}
__HALT_COMPILER();
EOT
);
$phar->setMetadata($metaData);
$phar->compressFiles(Phar::GZ);
echo "Complete.\n";
exit();

View File

@ -0,0 +1,2 @@
@ECHO OFF
phing -f build.xml release-phar

View File

@ -1,249 +1,211 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<project name="PHPExcel" default="release-standard" basedir="."> <project name="PHPExcel" default="release-standard" basedir=".">
<taskdef classname="phing.tasks.ext.d51PearPkg2Task" name="d51pearpkg2"/> <taskdef classname="phing.tasks.ext.d51PearPkg2Task" name="d51pearpkg2"/>
<propertyprompt propertyName="packageVersion" defaultValue="1.0.0" <target name="gather">
promptText="Enter PHPExcel version number" /> <if>
<propertyprompt propertyName="releaseDate" defaultValue="2010-01-01" <isfalse value="${packageVersion}"/>
promptText="Enter PHPExcel release date" /> <then>
<propertyprompt propertyName="documentFormat" defaultValue="doc" <propertyprompt propertyName="packageVersion" defaultValue="1.0.0"
promptText="Enter Document Format" /> promptText="Enter PHPExcel version number"/>
</then>
</if>
<adhoc-task name="phpzip"> <if>
<![CDATA[ <isfalse value="${releaseDate}"/>
class PhpZipTask extends Task { <then>
private $destinationFile; <propertyprompt propertyName="releaseDate" defaultValue="2010-01-01"
private $filesets = array(); promptText="Enter PHPExcel release date"/>
</then>
</if>
function setDestfile(PhingFile $f) { <if>
$this->destinationFile = $f; <isfalse value="${documentFormat}"/>
} <then>
<propertyprompt propertyName="documentFormat" defaultValue="doc"
promptText="Enter Document Format"/>
</then>
</if>
</target>
function createFileSet() { <target name="prepare" depends="gather">
$num = array_push($this->filesets, new FileSet()); <echo msg="Creating build directory: ./build"/>
return $this->filesets[$num-1]; <mkdir dir="${phing.dir}/build"/>
} </target>
function main() { <target name="build" depends="prepare">
if ($this->destinationFile === null || empty($this->filesets)) { <echo msg="Copying source files to build directory..."/>
throw new BuildException("You must specify a file or fileset(s) for the <phpzip> task.");
}
// compile a list of all files to add to the file, both file attrib and fileset elements <copy todir="${phing.dir}/build/Classes" overwrite="true">
// can be used. <fileset dir="${phing.dir}/../Classes">
$files = array(); <include name="**/*"/>
if (!empty($this->filesets)) { </fileset>
$filenames = array(); </copy>
foreach($this->filesets as $fs) {
try {
$ds = $fs->getDirectoryScanner($this->project);
$filenames = $ds->getIncludedFiles(); // get included filenames
$dir = $fs->getDir($this->project);
foreach ($filenames as $fname) {
$files[] = new PhingFile($dir, $fname);
}
} catch (BuildException $be) {
$this->log($be->getMessage(), Project::MSG_WARN);
}
}
}
$objZip = new ZipArchive(); <copy todir="${phing.dir}/build/Documentation" overwrite="true">
if ($objZip->open($this->destinationFile, ZIPARCHIVE::OVERWRITE) !== true) { <fileset dir="${phing.dir}/../Documentation">
throw new Exeption("Could not open " . $strResultingFile . " for writing!"); <include name="*.${documentFormat}"/>
} <include name="*.txt"/>
</fileset>
</copy>
<mkdir dir="${phing.dir}/build/Documentation/API"/>
$this->log("Creating ZIP archive of " . count($files) . " files..."); <copy todir="${phing.dir}/build/Documentation/Examples" overwrite="true">
<fileset dir="${phing.dir}/../Documentation/Examples">
<include name="**/*"/>
<exclude name="assets"/>
</fileset>
</copy>
foreach($files as $file) { <copy todir="${phing.dir}/build/unitTests" overwrite="true">
$this->log("Processing file " . $this->_cleanFileName($file) . " ..."); <fileset dir="${phing.dir}/../unitTests">
$contents = file_get_contents($file); <include name="**/*"/>
$objZip->addFromString( $this->_cleanFileName($file), $contents ); </fileset>
} </copy>
$objZip->close(); <copy file="${phing.dir}/../changelog.txt" tofile="${phing.dir}/build/changelog.txt" overwrite="true"/>
<copy file="${phing.dir}/../license.md" tofile="${phing.dir}/build/license.txt" overwrite="true"/>
<copy file="${phing.dir}/../install.txt" tofile="${phing.dir}/build/install.txt" overwrite="true"/>
</target>
$this->log("Created ZIP archive " . $this->destinationFile . '.'); <target name="versionNumber" depends="build">
} <reflexive>
<fileset dir="${phing.dir}/build">
<include pattern="**/*"/>
</fileset>
<filterchain>
<replaceregexp>
<regexp pattern="##VERSION##" replace="${packageVersion}"/>
<regexp pattern="##DATE##" replace="${releaseDate}"/>
</replaceregexp>
</filterchain>
</reflexive>
/** <reflexive>
* Cleanup a filename <fileset dir="${phing.dir}/build">
* <include pattern="**/changelog.txt"/>
* @param string $strFile Filename </fileset>
* @return string Filename <filterchain>
*/ <replaceregexp>
protected function _cleanFileName($strFile) { <regexp pattern="Fixed in SVN" replace="${releaseDate} (v${packageVersion})"/>
$strFile = str_replace('../', '', $strFile); </replaceregexp>
$strFile = str_replace('.\\build\\', '', $strFile); </filterchain>
$strFile = str_replace('WINDOWS', '', $strFile); </reflexive>
</target>
while (preg_match('/\/\//i', $strFile)) { <target name="apidocs" depends="versionNumber">
$strFile = str_replace('//', '/', $strFile); <echo msg="Generating API documentation..."/>
} <phpdoc title="PHPExcel classes"
destdir="${phing.dir}/build/Documentation/API"
sourcecode="true"
output="HTML:Smarty:PHP"
defaultcategoryname="PHPExcel"
defaultpackagename="PHPExcel"
pear="true">
<fileset dir="${phing.dir}/build/Classes">
<include name="**/*.php"/>
</fileset>
</phpdoc>
</target>
return $strFile; <target name="release-standard" depends="apidocs">
} <mkdir dir="${phing.dir}/release"/>
}
]]>
</adhoc-task>
<target name="prepare"> <echo msg="Creating release package (v${packageVersion} with ${documentFormat} documents)..."/>
<echo msg="Creating build directory: ./build" /> <zip destfile="${phing.dir}/release/PHPExcel_${packageVersion}_${documentFormat}.zip">
<mkdir dir="./build" /> <fileset dir="${phing.dir}/build">
</target> <include name="**/*"/>
</fileset>
</zip>
<target name="build" depends="prepare"> <echo msg="Cleaning build directory: ./build"/>
<echo msg="Copying source files to build directory..." /> <delete dir="${phing.dir}/build"/>
</target>
<copy todir="./build/Classes" overwrite="true"> <target name="release-phar" depends="versionNumber">
<fileset dir="../Classes"> <mkdir dir="${phing.dir}/release"/>
<include name="**/*" />
<exclude name="**/.svn" />
</fileset>
</copy>
<copy todir="./build/Documentation" overwrite="true"> <echo msg="Creating PHAR release package (v${packageVersion})..."/>
<fileset dir="../Documentation"> <pharpackage destfile="${phing.dir}/release/PHPExcel_${packageVersion}.phar" basedir="${phing.dir}/build/Classes" compression="gzip" stub="${phing.dir}/PharStub.php">
<include name="*.${documentFormat}" /> <fileset dir="${phing.dir}/build/Classes">
<include name="*.txt" /> <include name="**/**" />
<exclude name="**/.svn" /> </fileset>
</fileset> <metadata>
</copy> <element name="version" value="${packageVersion}" />
<mkdir dir="./build/Documentation/API" /> <element name="date" value="${releaseDate}" />
<element name="description" value="A pure PHP library for reading and writing spreadsheet files" />
<element name="authors">
<element name="Mark Baker">
<element name="e-mail" value="mbaker@inviqa.com" />
</element>
</element>
</metadata>
</pharpackage>
<copy todir="./build/Documentation/Examples" overwrite="true"> <echo msg="Cleaning build directory: ./build"/>
<fileset dir="../Documentation/Examples"> <delete dir="${phing.dir}/build"/>
<include name="**/*" /> </target>
<exclude name="assets" />
<exclude name="**/.svn" />
</fileset>
</copy>
<copy todir="./build/Tests" overwrite="true"> <target name="release-pear" depends="versionNumber">
<fileset dir="../Tests"> <mkdir dir="${phing.dir}/release"/>
<include name="**/*" />
<exclude name="**/.svn" />
</fileset>
</copy>
<copy file="../changelog.txt" tofile="./build/changelog.txt" overwrite="true" /> <echo msg="Creating PEAR release package (v${packageVersion})..."/>
<copy file="../license.md" tofile="./build/license.txt" overwrite="true" />
<copy file="../install.txt" tofile="./build/install.txt" overwrite="true" />
</target>
<target name="versionNumber" depends="build"> <d51pearpkg2 dir="${phing.dir}/build/Classes" baseinstalldir="PHPExcel">
<reflexive> <name>PHPExcel</name>
<fileset dir="./build"> <summary>PHP Excel classes</summary>
<include pattern="**/*" /> <channel>pear.php.net</channel>
</fileset> <description>Project providing a set of classes for the PHP programming language, which allow you to write
<filterchain> to Excel 2007 files and read from Excel 2007 files.
<replaceregexp> </description>
<regexp pattern="##VERSION##" replace="${packageVersion}"/> <notes>This package ONLY contains the class files, not the documentation and example code. Please refer to
<regexp pattern="##DATE##" replace="${releaseDate}"/> http://www.codeplex.com/PHPExcel for those files.
</replaceregexp> </notes>
</filterchain> <lead user="maartenba" name="Maarten Balliauw" email="maarten@phpexcel.net"/>
</reflexive> <license uri="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt">LGPL</license>
<version release="${packageVersion}" api="${packageVersion}"/>
<stability release="stable" api="stable"/>
<dependencies>
<php minimum_version="5.2.0"/>
<pear minimum_version="1.4.0"/>
<extension name="zip" minimum_version="1.8.0"/>
</dependencies>
<dirroles key="PHPExcel/Shared/PDF/fonts">data</dirroles>
<dirroles key="PHPExcel/Shared/PDF/fonts/utils">data</dirroles>
<dirroles key="/PHPExcel/Shared/PDF/fonts/utils">data</dirroles>
</d51pearpkg2>
<reflexive> <exec command="pear package ${phing.dir}/build/Classes/package.xml"/>
<fileset dir="./build"> <move file="PHPExcel-${packageVersion}.tgz" tofile="${phing.dir}/release/PHPExcel-${packageVersion}.tgz" overwrite="true"/>
<include pattern="**/changelog.txt" />
</fileset>
<filterchain>
<replaceregexp>
<regexp pattern="Fixed in SVN" replace="${releaseDate} (v${packageVersion})"/>
</replaceregexp>
</filterchain>
</reflexive>
</target>
<target name="apidocs" depends="versionNumber"> <echo msg="Cleaning build directory: ./build"/>
<echo msg="Generating API documentation..." /> <delete dir="${phing.dir}/build"/>
<phpdoc title="PHPExcel classes" </target>
destdir="./build/Documentation/API"
sourcecode="true"
output="HTML:Smarty:PHP"
defaultcategoryname="PHPExcel"
defaultpackagename="PHPExcel"
pear="true">
<fileset dir="./build/Classes">
<include name="**/*.php" />
</fileset>
</phpdoc>
</target>
<target name="release-standard" depends="apidocs"> <target name="release-documentation">
<mkdir dir="./release" /> <mkdir dir="${phing.dir}/release"/>
<echo msg="Creating release package (v${packageVersion} with ${documentFormat} documents)..." /> <echo msg="Creating documentation release (v${packageVersion} with ${documentFormat} documents)..."/>
<phpzip destfile="./release/PHPExcel_${packageVersion}_${documentFormat}.zip"> <copy todir="${phing.dir}/build" overwrite="true">
<fileset dir="./build"> <fileset dir="${phing.dir}/../Documentation">
<include name="**/*" /> <include name="*.${documentFormat}"/>
</fileset> <include name="*.txt"/>
</phpzip> </fileset>
</copy>
<copy todir="${phing.dir}/build/Examples" overwrite="true">
<fileset dir="${phing.dir}/../Documentation/Examples">
<include name="**/*"/>
</fileset>
</copy>
<echo msg="Cleaning build directory: ./build" /> <echo msg="Creating documentation release package (v${packageVersion} with ${documentFormat} documents)..."/>
<delete dir="./build" /> <zip destfile="${phing.dir}/release/PHPExcel_${packageVersion}-documentation_${documentFormat}.zip">
</target> <fileset dir="${phing.dir}/build">
<include name="**/*"/>
</fileset>
</zip>
<target name="release-pear" depends="versionNumber"> <echo msg="Cleaning build directory: ./build"/>
<mkdir dir="./release" /> <delete dir="${phing.dir}/build"/>
</target>
<echo msg="Creating PEAR release package (v${packageVersion})..." />
<d51pearpkg2 dir="./build/Classes" baseinstalldir="PHPExcel">
<name>PHPExcel</name>
<summary>PHP Excel classes</summary>
<channel>pear.pearplex.net</channel>
<description>Project providing a set of classes for the PHP programming language, which allow you to write to Excel 2007 files and read from Excel 2007 files.</description>
<notes>This package ONLY contains the class files, not the documentation and example code. Please refer to http://www.codeplex.com/PHPExcel for those files.</notes>
<lead user="maartenba" name="Maarten Balliauw" email="maarten@phpexcel.net"/>
<license uri="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt">LGPL</license>
<version release="${packageVersion}" api="${packageVersion}"/>
<stability release="stable" api="stable"/>
<dependencies>
<php minimum_version="5.2.0"/>
<pear minimum_version="1.4.0"/>
<extension name="zip" minimum_version="1.8.0"/>
</dependencies>
<dirroles key="PHPExcel/Shared/PDF/fonts">data</dirroles>
<dirroles key="PHPExcel/Shared/PDF/fonts/utils">data</dirroles>
<dirroles key="/PHPExcel/Shared/PDF/fonts/utils">data</dirroles>
</d51pearpkg2>
<exec command="pear package ./build/Classes/package.xml"/>
<move file="PHPExcel-${packageVersion}.tgz" tofile="release/PHPExcel-${packageVersion}.tgz" overwrite="true"/>
<echo msg="Cleaning build directory: ./build" />
<delete dir="./build" />
</target>
<target name="release-documentation">
<mkdir dir="./release" />
<echo msg="Creating documentation release (v${packageVersion} with ${documentFormat} documents)..." />
<copy todir="./build" overwrite="true">
<fileset dir="../Documentation">
<include name="*.${documentFormat}" />
<include name="*.txt" />
<exclude name="**/.svn" />
</fileset>
</copy>
<copy todir="./build/Examples" overwrite="true">
<fileset dir="../Documentation/Examples">
<include name="**/*" />
<exclude name="**/.svn" />
</fileset>
</copy>
<echo msg="Creating documentation release package (v${packageVersion} with ${documentFormat} documents)..." />
<phpzip destfile="./release/PHPExcel_${packageVersion}-documentation_${documentFormat}.zip">
<fileset dir="./build">
<include name="**/*" />
<exclude name="**/.svn" />
</fileset>
</phpzip>
<echo msg="Cleaning build directory: ./build" />
<delete dir="./build" />
</target>
</project> </project>