diff --git a/Build/PharStub.php b/Build/PharStub.php new file mode 100644 index 0000000..570b9db --- /dev/null +++ b/Build/PharStub.php @@ -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(); \ No newline at end of file diff --git a/Build/build-phar.php b/Build/build-phar.php deleted file mode 100644 index d2e5063..0000000 --- a/Build/build-phar.php +++ /dev/null @@ -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(); diff --git a/Build/build-release-phar.bat b/Build/build-release-phar.bat new file mode 100644 index 0000000..985945d --- /dev/null +++ b/Build/build-release-phar.bat @@ -0,0 +1,2 @@ +@ECHO OFF +phing -f build.xml release-phar \ No newline at end of file diff --git a/Build/build.xml b/Build/build.xml index 8bca9f8..1c9bfb7 100644 --- a/Build/build.xml +++ b/Build/build.xml @@ -1,249 +1,211 @@ <?xml version="1.0"?> <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" - promptText="Enter PHPExcel version number" /> - <propertyprompt propertyName="releaseDate" defaultValue="2010-01-01" - promptText="Enter PHPExcel release date" /> - <propertyprompt propertyName="documentFormat" defaultValue="doc" - promptText="Enter Document Format" /> + <target name="gather"> + <if> + <isfalse value="${packageVersion}"/> + <then> + <propertyprompt propertyName="packageVersion" defaultValue="1.0.0" + promptText="Enter PHPExcel version number"/> + </then> + </if> - <adhoc-task name="phpzip"> - <![CDATA[ - class PhpZipTask extends Task { - private $destinationFile; - private $filesets = array(); + <if> + <isfalse value="${releaseDate}"/> + <then> + <propertyprompt propertyName="releaseDate" defaultValue="2010-01-01" + promptText="Enter PHPExcel release date"/> + </then> + </if> - function setDestfile(PhingFile $f) { - $this->destinationFile = $f; - } + <if> + <isfalse value="${documentFormat}"/> + <then> + <propertyprompt propertyName="documentFormat" defaultValue="doc" + promptText="Enter Document Format"/> + </then> + </if> + </target> - function createFileSet() { - $num = array_push($this->filesets, new FileSet()); - return $this->filesets[$num-1]; - } + <target name="prepare" depends="gather"> + <echo msg="Creating build directory: ./build"/> + <mkdir dir="${phing.dir}/build"/> + </target> - function main() { - if ($this->destinationFile === null || empty($this->filesets)) { - throw new BuildException("You must specify a file or fileset(s) for the <phpzip> task."); - } + <target name="build" depends="prepare"> + <echo msg="Copying source files to build directory..."/> - // compile a list of all files to add to the file, both file attrib and fileset elements - // can be used. - $files = array(); - if (!empty($this->filesets)) { - $filenames = array(); - 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); - } - } - } + <copy todir="${phing.dir}/build/Classes" overwrite="true"> + <fileset dir="${phing.dir}/../Classes"> + <include name="**/*"/> + </fileset> + </copy> - $objZip = new ZipArchive(); - if ($objZip->open($this->destinationFile, ZIPARCHIVE::OVERWRITE) !== true) { - throw new Exeption("Could not open " . $strResultingFile . " for writing!"); - } + <copy todir="${phing.dir}/build/Documentation" overwrite="true"> + <fileset dir="${phing.dir}/../Documentation"> + <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) { - $this->log("Processing file " . $this->_cleanFileName($file) . " ..."); - $contents = file_get_contents($file); - $objZip->addFromString( $this->_cleanFileName($file), $contents ); - } + <copy todir="${phing.dir}/build/unitTests" overwrite="true"> + <fileset dir="${phing.dir}/../unitTests"> + <include name="**/*"/> + </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> - /** - * Cleanup a filename - * - * @param string $strFile Filename - * @return string Filename - */ - protected function _cleanFileName($strFile) { - $strFile = str_replace('../', '', $strFile); - $strFile = str_replace('.\\build\\', '', $strFile); - $strFile = str_replace('WINDOWS', '', $strFile); + <reflexive> + <fileset dir="${phing.dir}/build"> + <include pattern="**/changelog.txt"/> + </fileset> + <filterchain> + <replaceregexp> + <regexp pattern="Fixed in SVN" replace="${releaseDate} (v${packageVersion})"/> + </replaceregexp> + </filterchain> + </reflexive> + </target> - while (preg_match('/\/\//i', $strFile)) { - $strFile = str_replace('//', '/', $strFile); - } + <target name="apidocs" depends="versionNumber"> + <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; - } - } - ]]> - </adhoc-task> + <target name="release-standard" depends="apidocs"> + <mkdir dir="${phing.dir}/release"/> - <target name="prepare"> - <echo msg="Creating build directory: ./build" /> - <mkdir dir="./build" /> - </target> + <echo msg="Creating release package (v${packageVersion} with ${documentFormat} documents)..."/> + <zip destfile="${phing.dir}/release/PHPExcel_${packageVersion}_${documentFormat}.zip"> + <fileset dir="${phing.dir}/build"> + <include name="**/*"/> + </fileset> + </zip> - <target name="build" depends="prepare"> - <echo msg="Copying source files to build directory..." /> + <echo msg="Cleaning build directory: ./build"/> + <delete dir="${phing.dir}/build"/> + </target> - <copy todir="./build/Classes" overwrite="true"> - <fileset dir="../Classes"> - <include name="**/*" /> - <exclude name="**/.svn" /> - </fileset> - </copy> + <target name="release-phar" depends="versionNumber"> + <mkdir dir="${phing.dir}/release"/> - <copy todir="./build/Documentation" overwrite="true"> - <fileset dir="../Documentation"> - <include name="*.${documentFormat}" /> - <include name="*.txt" /> - <exclude name="**/.svn" /> - </fileset> - </copy> - <mkdir dir="./build/Documentation/API" /> + <echo msg="Creating PHAR release package (v${packageVersion})..."/> + <pharpackage destfile="${phing.dir}/release/PHPExcel_${packageVersion}.phar" basedir="${phing.dir}/build/Classes" compression="gzip" stub="${phing.dir}/PharStub.php"> + <fileset dir="${phing.dir}/build/Classes"> + <include name="**/**" /> + </fileset> + <metadata> + <element name="version" value="${packageVersion}" /> + <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"> - <fileset dir="../Documentation/Examples"> - <include name="**/*" /> - <exclude name="assets" /> - <exclude name="**/.svn" /> - </fileset> - </copy> + <echo msg="Cleaning build directory: ./build"/> + <delete dir="${phing.dir}/build"/> + </target> - <copy todir="./build/Tests" overwrite="true"> - <fileset dir="../Tests"> - <include name="**/*" /> - <exclude name="**/.svn" /> - </fileset> - </copy> + <target name="release-pear" depends="versionNumber"> + <mkdir dir="${phing.dir}/release"/> - <copy file="../changelog.txt" tofile="./build/changelog.txt" overwrite="true" /> - <copy file="../license.md" tofile="./build/license.txt" overwrite="true" /> - <copy file="../install.txt" tofile="./build/install.txt" overwrite="true" /> - </target> + <echo msg="Creating PEAR release package (v${packageVersion})..."/> - <target name="versionNumber" depends="build"> - <reflexive> - <fileset dir="./build"> - <include pattern="**/*" /> - </fileset> - <filterchain> - <replaceregexp> - <regexp pattern="##VERSION##" replace="${packageVersion}"/> - <regexp pattern="##DATE##" replace="${releaseDate}"/> - </replaceregexp> - </filterchain> - </reflexive> + <d51pearpkg2 dir="${phing.dir}/build/Classes" baseinstalldir="PHPExcel"> + <name>PHPExcel</name> + <summary>PHP Excel classes</summary> + <channel>pear.php.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> - <reflexive> - <fileset dir="./build"> - <include pattern="**/changelog.txt" /> - </fileset> - <filterchain> - <replaceregexp> - <regexp pattern="Fixed in SVN" replace="${releaseDate} (v${packageVersion})"/> - </replaceregexp> - </filterchain> - </reflexive> - </target> + <exec command="pear package ${phing.dir}/build/Classes/package.xml"/> + <move file="PHPExcel-${packageVersion}.tgz" tofile="${phing.dir}/release/PHPExcel-${packageVersion}.tgz" overwrite="true"/> - <target name="apidocs" depends="versionNumber"> - <echo msg="Generating API documentation..." /> - <phpdoc title="PHPExcel classes" - 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> + <echo msg="Cleaning build directory: ./build"/> + <delete dir="${phing.dir}/build"/> + </target> - <target name="release-standard" depends="apidocs"> - <mkdir dir="./release" /> + <target name="release-documentation"> + <mkdir dir="${phing.dir}/release"/> - <echo msg="Creating release package (v${packageVersion} with ${documentFormat} documents)..." /> - <phpzip destfile="./release/PHPExcel_${packageVersion}_${documentFormat}.zip"> - <fileset dir="./build"> - <include name="**/*" /> - </fileset> - </phpzip> + <echo msg="Creating documentation release (v${packageVersion} with ${documentFormat} documents)..."/> + <copy todir="${phing.dir}/build" overwrite="true"> + <fileset dir="${phing.dir}/../Documentation"> + <include name="*.${documentFormat}"/> + <include name="*.txt"/> + </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" /> - <delete dir="./build" /> - </target> + <echo msg="Creating documentation release package (v${packageVersion} with ${documentFormat} documents)..."/> + <zip destfile="${phing.dir}/release/PHPExcel_${packageVersion}-documentation_${documentFormat}.zip"> + <fileset dir="${phing.dir}/build"> + <include name="**/*"/> + </fileset> + </zip> - <target name="release-pear" depends="versionNumber"> - <mkdir dir="./release" /> - - <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> + <echo msg="Cleaning build directory: ./build"/> + <delete dir="${phing.dir}/build"/> + </target> </project> \ No newline at end of file