summaryrefslogtreecommitdiff
path: root/build.xml
blob: 2230e92a15b63ff6d6f6e37a70e65e3c5c0e86e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
<?xml version="1.0" encoding="UTF-8"?>
<!--
  PRADO 3.0 build file - Copyright (C) 2006 PradoSoft

  Requirements
  ============
  Phing > 2.1.1 (currently cvs HEAD needed)
  xdebug >= 2.0.0beta4
  PhpDocumentor >= 1.3.0RC5
  PEAR >= 1.4.4
  PEAR_PackageFileManager >= 1.6.0a4
-->
<project name="prado" basedir="." default="usage">

  <property name="version" value="3.0.0"/>
  <property name="state" value="stable"/>
  <property name="pkgname" value="${phing.project.name}-${version}"/>
  <property name="pkgname.pear" value="${pkgname}-pear"/>
  <property name="src.dir" value="framework"/>
  <property name="doc.dir" value="docs"/>
  <property name="doc.api.dir" value="${doc.dir}/api"/>
  <property name="build.base.dir" value="build"/>
  <property name="build.src.dir" value="${build.base.dir}/${pkgname}"/>
  <property name="build.pear.dir" value="${build.base.dir}/${pkgname.pear}"/>
  <property name="dist.base.dir" value="dist"/>
  <property name="dist.zipfile" value="${dist.base.dir}/${pkgname}.zip"/>
  <property name="dist.tarfile" value="${dist.base.dir}/${pkgname}.tar.gz"/>
  <property name="dist.pearfile" value="${dist.base.dir}/${pkgname.pear}.tgz"/>
  <property name="tests.dir" value="tests/unit"/>
  <property name="reports.dir" value="reports"/>
  <property name="reports.unit.dir" value="${reports.dir}/unit"/>
  <property name="reports.codecoverage.dir" value="${reports.dir}/codecoverage"/>
  <property name="reports.style.dir" value="buildscripts/phing/style"/>
  <property name="reports.geshi.dir" value="${src.dir}/3rdParty/geshi"/>

  <fileset dir="." id="src">
    <exclude name="${src.dir}/**/.svn"/>
    <include name="${src.dir}/**/*.php"/>
  </fileset>

  <fileset dir="." id="misc">
    <include name="COPYRIGHT"/>
    <include name="HISTORY"/>
    <include name="UPGRADE"/>
    <include name="index.html"/>
    <exclude name="requirements/.svn"/>
    <include name="requirements/*"/>
  </fileset>

  <fileset dir="." id="docs">
    <exclude name="${doc.dir}/**/.svn"/>
    <include name="${doc.dir}/**/*"/>
  </fileset>

  <fileset dir="." id="demos">
    <exclude name="demos/**/.svn"/>
    <include name="demos/**/*"/>
  </fileset>

  <target name="usage">
    <echo message="usage: phing &lt;target&gt;"/>
    <echo message=""/>
    <echo message="Available targets are:"/>
    <echo message=""/>
    <echo message="dist      --> Build a distribution"/>
    <echo message="doc       --> Generate API documentation"/>
    <echo message="test      --> Run unit tests with reports"/>
    <echo message="clean     --> Clean up the mess"/>
  </target>

  <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=3.0"/>
    <echo message="====================================================="/>	
    <input propertyname="version" promptChar=":">PRADO version for package</input>

    <property name="pkgname" value="${phing.project.name}-${version}" override="true"/>
    <property name="build.src.dir" value="${build.base.dir}/${pkgname}" override="true"/>
    <property name="dist.zipfile" value="${build.base.dir}/${pkgname}.zip" override="true"/>
    <property name="dist.tarfile" value="${build.base.dir}/${pkgname}.tar.gz" override="true"/>
    <property name="dist.pearfile" value="${build.base.dir}/${pkgname}-pear.tgz" override="true"/>
  </target>

  <target name="doc" description="Generating API documentation">
    <delete dir="${doc.api.dir}"/>
    <phpdoc title="PRADO ${version} API Documentation" destdir="${doc.api.dir}" sourcepath="${src.dir}" output="HTML:Smarty:PHP"/>
  </target>

  <target name="test">
    <echo>Preparing directory structure</echo>
    <delete dir="${reports.unit.dir}"/>
    <delete dir="${reports.codecoverage.dir}"/>
    <mkdir dir="${reports.unit.dir}"/>
    <mkdir dir="${reports.codecoverage.dir}"/>
    
    <echo>Preparing Code Coverage Database</echo>
    <coverage-setup database="${reports.codecoverage.dir}/coverage.db">
      <fileset dir="${src.dir}">
        <include name="**/*.php"/>
	<exclude name="Web/Javascripts/js/clientscripts.php"/>
	<exclude name="Data/TCache.php"/>
	<exclude name="I18N/core/Gettext/MO.php"/>
	<exclude name="I18N/core/Gettext/PO.php"/>
	<exclude name="I18N/core/util.php"/>
	<exclude name="I18N/TGlobalization.php"/>
	<exclude name="I18N/TGlobalizationAutoDetect.php"/>
	<exclude name="Security/TUserManager.php"/>
	<exclude name="Security/TMembershipManager.php"/>
	<exclude name="core.php"/>
	<exclude name="3rdParty/**/*.php"/>
	<exclude name="pradolite.php"/>
	<exclude name="prado.php"/>
      </fileset>
    </coverage-setup>

    <echo>Running Unit Tests</echo>
    <phpunit2 codecoverage="true" haltonfailure="true" haltonerror="true" printsummary="true">
      <batchtest>
        <fileset dir="${tests.dir}">
	  <include name="**/*Test.php"/>
        </fileset>
      </batchtest>
      <formatter type="xml" todir="${reports.dir}" outfile="logfile.xml"/>
    </phpunit2>

    <echo>Creating Unit Test Report</echo>
    <phpunit2report infile="${reports.dir}/logfile.xml" format="frames" styledir="${reports.style.dir}" todir="${reports.unit.dir}"/>

    <echo>Creating Code Coverage Report</echo>
    <coverage-report outfile="${reports.dir}/coverage.xml" geshipath="${reports.geshi.dir}" geshilanguagespath="${reports.geshi.dir}/geshi">
      <report todir="${reports.codecoverage.dir}" styledir="${reports.style.dir}"/>
    </coverage-report>
  </target>

  <target name="build" depends="versioncheck,doc" description="Creating the main PRADO build">
    <echo>Cleaning up after last build</echo>
    <delete dir="${build.base.dir}"/>
    <echo>Creating directory layout...</echo>
    <copy todir="${build.src.dir}">
      <fileset refid="src"/>
      <fileset refid="docs"/>
      <fileset refid="misc"/>
      <fileset refid="demos"/>
    </copy>
  </target>

  <target name="dist" depends="build" description="Creating the main PRADO distributions">
    <delete dir="${dist.base.dir}"/>
    <mkdir dir="${dist.base.dir}"/>
    <tar compression="gzip" destFile="${dist.tarfile}" basedir="${build.base.dir}" />
    <zip destfile="${dist.zipfile}" basedir="${build.base.dir}"/>
  </target>

  <target name="build-pear" depends="versioncheck">
    <echo>Creating directory layout...</echo>
    <delete dir="${build.base.dir}"/>
    <copy todir="${build.pear.dir}">
      <fileset refid="src"/>
    </copy>
  </target>

  <target name="dist-pear" depends="build-pear">
    <echo>Creating PEAR package.xml...</echo>
    <pearpkg name="${phing.project.name}" dir="${build.pear.dir}" destFile="${build.pear.dir}/package.xml">
      <fileset refid="src"/>
      <fileset refid="docs"/>

      <option name="notes">Features and Changes in v3.0a

Things not availabe in v3.0a yet:
- Active controls
- TWizard
- THtmlArea
- TDatePicker
- TDataGrid and TDataList need more tests
- TAdodb and AdoDB no longer included in release

Component and Control Definition

- component spec file discarded, replaced with
getter and setter for property definitions
- subproperty support (e.g. Font.Size="20pt")
- enhanced event binding syntax besides the
existing one (e.g. $control->Click=$callback;
or $control->Click[0]=$callback;)
- relationship change between controls, now
with parent-child (presentational) and
naming container-containee relationships.
- enhanced control id management and rendering
(the rendered IDs are much shorter now)
- Master/content support to template controls.
- Support for assets (publishing of private files and directories)
- Enhanced collection classes
- All controls are completely rewritten with new
features and new controls.

Template Syntax Enhancement

- new special tags to facilitate template writing
(more details are covered in quickstart demo)
- component can now be specified in a namespace
format (e.g. &lt;com:System.Web.UI.WebControls.TButton .... /&gt;
- Enhanced template parsing error report (now with
line number and error reason.

Pages

- Pages are organized in folders. Each folder can
have a specific configuration file applied to pages
in that folder and below (this replaces the previous
v2 module concept).
- Support for "classless" pages.
- Enhanced page lifecycles (close to asp.net 2.0 page lifecycles)
- Enhanced theme/skin support (now support css, js and image files)
- Output is now XHTML-compliant
- Enhanced JavaScript support

Application

- Introduces a module-based architecture. Modules accomplish
all application functionality. Users can plug in their
own modules.
- Integrated support to pluggable services.
- Generic cache support with TMemCache and TSqliteCache provided
- Generic logging support with TLogRouter and different
TLogRoute implementation.
- Customizable error handling with support for internationalization.
- Complete request, response, session, cookie classes
- Application-level persistent state support
- A new flexible auth framework provided
- Parameters can be components now</option>

      <!-- Set the simple options -->
      <option name="summary">PRADO is a component-based and event-driven framework for rapid Web programming in PHP 5.</option>
      <option name="description">PRADO reconceptualizes Web application development in terms of components, events and properties instead of procedures, URLs and query parameters.

A PRADO component is a combination of a specification file (in XML), an HTML template and a PHP class. PRADO components are combined together to form larger components or complete PRADO pages.

Developing PRADO Web applications mainly involves instantiating prebuilt and application-specific component types, configuring them by setting their properties, responding to their events by writing handler functions, and composing them into application tasks. Event-driven programming

PRADO provides the following benefits for Web application developers:

* reusability - Codes following the PRADO component protocol are highly reusable. Everything in PRADO is a reusable component.
* ease of use - Creating and using components are extremely easy. Usually they simply involve configuring component properties.
* robustness - PRADO frees developers from writing boring, buggy code. They code in terms of objects, methods and properties, instead of URLs and query parameters. The latest PHP5 exception mechanism is exploited that enables line-precise error reporting.
* performance - PRADO uses a cache technique to ensure the performance of applications based on it. The performance is in fact comparable to those based on commonly used template engines.
* team integration - PRADO enables separation of content and presentation. Components, typically pages, have their content (logic) and presentation stored in different files.</option>
      <option name="version" value="${version}"/>
      <option name="extends" value="prado"/>
      <option name="state" value="${state}"/>
      <option name="license" value="BSD"/>

      <!-- Set the complex options -->
      <mapping name="maintainers">
        <element>
          <element key="handle" value="xue"/>
          <element key="name" value="Qiang Xue"/>
	  <element key="email" value="qiang.xue@gmail.com"/>
	  <element key="role" value="lead"/>
	</element>
        <element>
          <element key="handle" value="wei"/>
          <element key="name" value="Xiang Wei Zhuo"/>
	  <element key="email" value="weizhuo@gmail.com"/>
	  <element key="role" value="lead"/>
	</element>
        <element>
          <element key="handle" value="marcus"/>
          <element key="name" value="Marcus Nyeholt"/>
	  <element key="email" value="nyeholt@optushome.com.au"/>
	  <element key="role" value="contributor"/>
	</element>
        <element>
          <element key="handle" value="jrags"/>
          <element key="name" value="Jason Ragsdale"/>
	  <element key="email" value="jrags@jasrags.net"/>
	  <element key="role" value="contributor"/>
	</element>
        <element>
          <element key="handle" value="alex"/>
          <element key="name" value="Alex Flint"/>
	  <element key="email" value="alex@linium.net"/>
	  <element key="role" value="contributor"/>
	</element>
        <element>
          <element key="handle" value="johnteag"/>
          <element key="name" value="John Teague"/>
	  <element key="email" value="johnteag@gmail.com"/>
	  <element key="role" value="contributor"/>
	</element>
        <element>
          <element key="handle" value="brian"/>
          <element key="name" value="Brian Luft"/>
	  <element key="email" value="luftyluft@gmail.com"/>
	  <element key="role" value="contributor"/>
	</element>
        <element>
          <element key="handle" value="gusto"/>
          <element key="name" value="Carl G. Mathisen"/>
	  <element key="email" value="carl@decart.no"/>
	  <element key="role" value="contributor"/>
	</element>
        <element>
          <element key="handle" value="knut"/>
          <element key="name" value="Knut Urdalen"/>
	  <element key="email" value="knut.urdalen@telio.no"/>
	  <element key="role" value="helper"/>
	</element>
      </mapping>

      <mapping name="deps">
        <element>
	  <element key="type" value="php"/>
	  <element key="version" value="5.0.3"/>
	  <element key="rel" value="ge"/>
	</element>
      </mapping>
      
      <mapping name="dir_roles">
        <element key="docs" value="doc"/>
      </mapping>

      <mapping name="exceptions">
        <element key="HISTORY" value="doc"/>
      </mapping>
    </pearpkg>

    <echo>Validating package.xml</echo>
    <exec command="pear package-validate package.xml" dir="${build.base.dir}" passthru="true"/>
    
    <!--<echo>Converting package.xml from v1 to v2</echo>
    <exec command="pear convert" dir="${build.base.dir}" passthru="true"/>-->
    
    <echo>Creating tar.gz package...</echo>
    <mkdir dir="${dist.base.dir}"/>
    <tar compression="gzip" destFile="${dist.pearfile}" basedir="${build.base.dir}"/>
  </target>

  <target name="clean">
    <echo>Cleaning up the mess</echo>
    <delete dir="${build.base.dir}"/>
    <delete dir="${dist.base.dir}"/>
    <delete dir="${doc.api.dir}"/>
    <delete dir="${reports.dir}"/>
  </target>

  <target name="pradolite">
    <echo>Compiling PRADO Lite</echo>
    <delete file="${build.base.dir}/pradolite.php"/>
    <append destFile="${build.base.dir}/pradolite.php">
      <filterchain>
	<stripphpcomments />
	<replaceregexp>
	  <regexp pattern="Prado::using\(.*\);" replace=""/>
	  <regexp pattern="(require|require_once)\s*\(.*?;" replace=""/>
	  <regexp pattern="(include|include_once)\s*\(.*?;" replace=""/>
	  <regexp pattern="Prado::trace\(.*\);" replace=""/>
	</replaceregexp>
      </filterchain>
      <filelist dir="${src.dir}" listfile="buildscripts/phpbuilder/files.txt"/>
    </append>
    <exec command="php -l pradolite.php" dir="${build.base.dir}" passthru="true" checkreturn="true"/>
    <exec command="php -e pradolite.php" dir="${build.base.dir}" passthru="true" checkreturn="true"/>
  </target>

</project>