Tools directory for ticket #1

This commit is contained in:
DavidWyand-GG 2012-09-19 11:22:58 -04:00
parent ecfd936095
commit 8337cad7ee
207 changed files with 25761 additions and 0 deletions

View file

@ -0,0 +1,85 @@
//Microsoft Developer Studio generated resource script.
//
#define IDI_ICON1 103
#define IDI_ICON2 107
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 108
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "windows.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON1 ICON DISCARDABLE "torque.ico"
IDI_ICON2 ICON DISCARDABLE "torque.ico"
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""windows.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View file

@ -0,0 +1,85 @@
//Microsoft Developer Studio generated resource script.
//
#define IDI_ICON1 103
#define IDI_ICON2 107
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 108
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "windows.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON1 ICON DISCARDABLE "torque.ico"
IDI_ICON2 ICON DISCARDABLE "torque.ico"
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""windows.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View file

@ -0,0 +1,13 @@
<?php
// Configure tool
Torque3D::$sharedConfig = false;
Torque3D::beginConfig( "win32", "dae2dts" );
addProjectDefine("DAE2DTS_TOOL");
setProjectSubSystem(1); // console app
Torque3D::endConfig();
?>

View file

@ -0,0 +1,12 @@
<?php
// This file is used to add your project specific code to the Torque 3D Game Engine
// by default we add the project's source folders recursively
addSrcDir('../source', true);
// Here is an example of how to include your project specific code
// In this case all the code in the "custom" folder in your project's source directory would be added
// addSrcDir('../source/custom');
?>

View file

@ -0,0 +1 @@
Executable directory

View file

@ -0,0 +1,13 @@
@echo off
SET TORQUEDIR=%2
IF NOT DEFINED TORQUEDIR SET TORQUEDIR=..\..
@%TORQUEDIR%\engine\bin\php\php %TORQUEDIR%\Tools\projectGenerator\projectGenerator.php buildFiles/config/project.conf %TORQUEDIR%
@echo ...
@echo ...
@echo ...
@echo REMEMBER: Restart Visual Studio if you are running it to be sure the new
@echo project file(s) are loaded! See docs for more info!
@IF X%1 == X pause

View file

@ -0,0 +1,226 @@
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
#include <stdio.h>
#include "platform/platform.h"
#include "platform/platformVolume.h"
#include "app/mainLoop.h"
#include "T3D/gameFunctions.h"
#include "core/stream/fileStream.h"
#include "core/resourceManager.h"
#include "ts/tsShape.h"
#include "ts/tsShapeConstruct.h"
#ifdef TORQUE_OS_WIN32
#include "platformWin32/platformWin32.h"
#include "platformWin32/winConsole.h"
#endif
extern TSShape* loadColladaShape( const Torque::Path &path );
/** Print the usage string */
void printUsage()
{
Con::printf(
"DAE-2-DTS Converter v%s (c) GarageGames, LLC.\n\n"
"dae2dts [options] daeFilename\n\n"
"--config cfgFilename Set the conversion configuration filename.\n"
"--output dtsFilename Set the output DTS filename.\n"
"--dsq If set, all sequences in the shape will be saved\n"
" to DSQ files instead of being embedded in the DTS\n"
" file.\n"
"--dsq-only Same as --dsq, but no DTS file will be saved (handy for\n"
" animation only input files).\n"
"--compat If set, write to DTS v24 for compatibility with\n"
" ShowToolPro (no support for vertex colors, 2nd UV\n"
" set, autobillboards etc)\n"
"--diffuse If set, the diffuse texture will be used as the\n"
" material name (instead of the COLLADA <material> name)\n"
"--materials If set, generate a materials.cs script in the output \n"
" folder to define Materials used in the shape.\n"
"--verbose If set, output progress information\n\n"
"Exits with zero on success, non-zero on failure\n\n",
TORQUE_APP_VERSION_STRING );
}
Torque::Path makeFullPath( const char* path )
{
char tempBuf[1024];
Platform::makeFullPathName( path, tempBuf, sizeof(tempBuf), Platform::getCurrentDirectory() );
return Torque::Path( String( tempBuf ) );
}
S32 TorqueMain( S32 argc, const char **argv )
{
S32 failed = 0;
// Initialize the subsystems.
StandardMainLoop::init();
Con::setVariable( "Con::Prompt", "" );
WindowsConsole->enable( true );
// install all drives for now until we have everything using the volume stuff
Platform::FS::InstallFileSystems();
Platform::FS::MountDefaults();
bool compatMode = false;
bool diffuseNames = false;
bool verbose = false;
bool saveDTS = true;
bool saveDSQ = false;
bool genMaterials = false;
Torque::Path cfgPath, srcPath, destPath;
// Parse arguments
S32 i;
for ( i = 1; i < argc-1; i++ )
{
if ( dStrEqual( argv[i], "--config" ) )
cfgPath = makeFullPath( argv[++i] );
else if ( dStrEqual( argv[i], "--output" ) )
destPath = makeFullPath( argv[++i] );
else if ( dStrEqual( argv[i], "--dsq" ) )
saveDSQ = true;
else if ( dStrEqual( argv[i], "--dsq-only" ) )
{
saveDTS = false;
saveDSQ = true;
}
else if ( dStrEqual( argv[i], "--compat" ) )
compatMode = true;
else if ( dStrEqual( argv[i], "--diffuse" ) )
diffuseNames = true;
else if ( dStrEqual( argv[i], "--materials" ) )
genMaterials = true;
else if ( dStrEqual( argv[i], "--verbose" ) )
verbose = true;
}
if ( ( i >= argc ) || ( !dStrEndsWith(argv[i], ".dae") && !dStrEndsWith(argv[i], ".kmz" ) ) )
{
Con::errorf( "Error: no DAE file specified.\n" );
printUsage();
return -1;
}
srcPath = makeFullPath( argv[i] );
if ( destPath.isEmpty() )
{
destPath = srcPath;
destPath.setExtension( "dts" );
}
if ( !cfgPath.isEmpty() )
Con::printf( "Configuration files not yet supported.\n" );
// Define script callbacks
if ( verbose )
Con::evaluate( "function UpdateTSShapeLoadProgress(%progress, %msg) { echo(%msg); }" );
else
Con::evaluate( "function UpdateTSShapeLoadProgress(%progress, %msg) { }" );
if ( verbose )
Con::printf( "Parsing configuration file...\n" );
// Set import options
ColladaUtils::getOptions().reset();
ColladaUtils::getOptions().forceUpdateMaterials = genMaterials;
ColladaUtils::getOptions().useDiffuseNames = diffuseNames;
if ( verbose )
Con::printf( "Reading dae file...\n" );
// Attempt to load the DAE file
Resource<TSShape> shape = ResourceManager::get().load( srcPath );
if ( !shape )
{
Con::errorf( "Failed to convert DAE file: %s\n", srcPath.getFullPath() );
failed = 1;
}
else
{
if ( compatMode && !shape->canWriteOldFormat() )
{
Con::errorf( "Warning: Attempting to save to DTS v24 but the shape "
"contains v26 features. Resulting DTS file may not be valid." );
}
FileStream outStream;
if ( saveDSQ )
{
Torque::Path dsqPath( destPath );
dsqPath.setExtension( "dsq" );
for ( S32 i = 0; i < shape->sequences.size(); i++ )
{
const String& seqName = shape->getName( shape->sequences[i].nameIndex );
if ( verbose )
Con::printf( "Writing DSQ file for sequence '%s'...\n", seqName.c_str() );
dsqPath.setFileName( destPath.getFileName() + "_" + seqName );
if ( outStream.open( dsqPath, Torque::FS::File::Write ) )
{
shape->exportSequence( &outStream, shape->sequences[i], compatMode );
outStream.close();
}
else
{
Con::errorf( "Failed to save sequence to %s\n", dsqPath.getFullPath().c_str() );
failed = 1;
}
}
}
if ( saveDTS )
{
if ( verbose )
Con::printf( "Writing DTS file...\n" );
if ( outStream.open( destPath, Torque::FS::File::Write ) )
{
if ( saveDSQ )
shape->sequences.setSize(0);
shape->write( &outStream, compatMode );
outStream.close();
}
else
{
Con::errorf( "Failed to save shape to %s\n", destPath.getFullPath().c_str() );
failed = 1;
}
}
}
// Clean everything up.
StandardMainLoop::shutdown();
// Do we need to restart?
if( StandardMainLoop::requiresRestart() )
Platform::restartInstance();
return failed;
}

View file

@ -0,0 +1,214 @@
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
#ifndef _TORQUECONFIG_H_
#define _TORQUECONFIG_H_
//-----------------------------------------------------------------------------
//Hi, and welcome to the Torque Config file.
//
//This file is a central reference for the various configuration flags that
//you'll be using when controlling what sort of a Torque build you have. In
//general, the information here is global for your entire codebase, applying
//not only to your game proper, but also to all of your tools.
/// Since we can build different engine "products" out of the same
/// base engine source we need a way to differentiate which product
/// this particular game is using.
///
/// TGE 0001
/// TGEA 0002
/// TGB 0003
/// TGEA 360 0004
/// TGE WII 0005
/// Torque 3D 0006
///
#define TORQUE_ENGINE_PRODUCT 0006
/// What's the name of your application? Used in a variety of places.
#define TORQUE_APP_NAME "dae2dts"
/// What version of the application specific source code is this?
///
/// Version number is major * 1000 + minor * 100 + revision * 10.
#define TORQUE_APP_VERSION 1000
/// Human readable application version string.
#define TORQUE_APP_VERSION_STRING "1.0.0"
/// Define me if you want to enable multithreading support.
#ifndef TORQUE_MULTITHREAD
#define TORQUE_MULTITHREAD
#endif
/// Define me if you want to disable Torque memory manager.
#ifndef TORQUE_DISABLE_MEMORY_MANAGER
#define TORQUE_DISABLE_MEMORY_MANAGER
#endif
/// Define me if you don't want Torque to compile dso's
#define TORQUE_NO_DSO_GENERATION
// Define me if this build is a tools build
#ifndef TORQUE_PLAYER
# define TORQUE_TOOLS
#else
# undef TORQUE_TOOLS
#endif
/// Define me if you want to enable the profiler.
/// See also the TORQUE_SHIPPING block below
//#define TORQUE_ENABLE_PROFILER
/// Define me to enable debug mode; enables a great number of additional
/// sanity checks, as well as making AssertFatal and AssertWarn do something.
/// This is usually defined by the build target.
//#define TORQUE_DEBUG
/// Define me if this is a shipping build; if defined I will instruct Torque
/// to batten down some hatches and generally be more "final game" oriented.
/// Notably this disables a liberal resource manager file searching, and
/// console help strings.
//#define TORQUE_SHIPPING
/// Define me to enable a variety of network debugging aids.
///
/// - NetConnection packet logging.
/// - DebugChecksum guards to detect mismatched pack/unpacks.
/// - Detection of invalid destination ghosts.
///
//#define TORQUE_DEBUG_NET
/// Define me to enable detailed console logging of net moves.
//#define TORQUE_DEBUG_NET_MOVES
/// Enable this define to change the default Net::MaxPacketDataSize
/// Do this at your own risk since it has the potential to cause packets
/// to be split up by old routers and Torque does not have a mechanism to
/// stitch split packets back together. Using this define can be very useful
/// in controlled network hardware environments (like a LAN) or for singleplayer
/// games (like BArricade and its large paths)
//#define MAXPACKETSIZE 1500
/// Modify me to enable metric gathering code in the renderers.
///
/// 0 does nothing; higher numbers enable higher levels of metric gathering.
//#define TORQUE_GATHER_METRICS 0
/// Define me if you want to enable debug guards in the memory manager.
///
/// Debug guards are known values placed before and after every block of
/// allocated memory. They are checked periodically by Memory::validate(),
/// and if they are modified (indicating an access to memory the app doesn't
/// "own"), an error is flagged (ie, you'll see a crash in the memory
/// manager's validate code). Using this and a debugger, you can track down
/// memory corruption issues quickly.
//#define TORQUE_DEBUG_GUARD
/// Define me if you want to enable instanced-static behavior
//#define TORQUE_ENABLE_THREAD_STATICS
/// Define me if you want to gather static-usage metrics
//#define TORQUE_ENABLE_THREAD_STATIC_METRICS
/// Define me if you want to enable debug guards on the FrameAllocator.
///
/// This is similar to the above memory manager guards, but applies only to the
/// fast FrameAllocator temporary pool memory allocations. The guards are only
/// checked when the FrameAllocator frees memory (when it's water mark changes).
/// This is most useful for detecting buffer overruns when using FrameTemp<> .
/// A buffer overrun in the FrameAllocator is unlikely to cause a crash, but may
/// still result in unexpected behavior, if other FrameTemp's are stomped.
//#define FRAMEALLOCATOR_DEBUG_GUARD
/// This #define is used by the FrameAllocator to set the size of the frame.
///
/// It was previously set to 3MB but I've increased it to 16MB due to the
/// FrameAllocator being used as temporary storage for bitmaps in the D3D9
/// texture manager.
#define TORQUE_FRAME_SIZE 16 << 20
// Finally, we define some dependent #defines. This enables some subsidiary
// functionality to get automatically turned on in certain configurations.
#ifdef TORQUE_DEBUG
#define TORQUE_GATHER_METRICS 0
#define TORQUE_ENABLE_PROFILE_PATH
#ifndef TORQUE_DEBUG_GUARD
#define TORQUE_DEBUG_GUARD
#endif
#ifndef TORQUE_NET_STATS
#define TORQUE_NET_STATS
#endif
// Enables the C++ assert macros AssertFatal, AssertWarn, etc.
#define TORQUE_ENABLE_ASSERTS
#endif
#ifdef TORQUE_RELEASE
// If it's not DEBUG, it's a RELEASE build, put appropriate things here.
#endif
#ifdef TORQUE_SHIPPING
// TORQUE_SHIPPING flags here.
#else
// Enable the profiler by default, if we're not doing a shipping build.
#define TORQUE_ENABLE_PROFILER
// Enable the TorqueScript assert() instruction if not shipping.
#define TORQUE_ENABLE_SCRIPTASSERTS
// We also enable GFX debug events for use in Pix and other graphics
// debugging tools.
#define TORQUE_ENABLE_GFXDEBUGEVENTS
#endif
#ifdef TORQUE_TOOLS
# define TORQUE_INSTANCE_EXCLUSION "TorqueToolsTest"
#else
# define TORQUE_INSTANCE_EXCLUSION "TorqueTest"
#endif
// Someday, it might make sense to do some pragma magic here so we error
// on inconsistent flags.
// The Xbox360 has it's own profiling tools, the Torque Profiler should not be used
#ifdef TORQUE_OS_XENON
# ifdef TORQUE_ENABLE_PROFILER
# undef TORQUE_ENABLE_PROFILER
# endif
#
# ifdef TORQUE_ENABLE_PROFILE_PATH
# undef TORQUE_ENABLE_PROFILE_PATH
#endif
#endif
#endif // _TORQUECONFIG_H_

Binary file not shown.

4
Tools/projectGenerator/.gitignore vendored Normal file
View file

@ -0,0 +1,4 @@
#############
## Torque
#############
templates_c/

View file

@ -0,0 +1,217 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
///////////////////////////// VS9 Xenon /////////////////////////////
$c = BuildTarget::add( 'VS9 Xenon', // Name
'buildFiles/VisualStudio 2008 (XDK)', // Solution output directory
'projects/', // Project output directory (relative to solution)
'../../source/', // Base directory
'vc2k8_360_proj.tpl', // App Project Template
'vc2k8_360_proj.tpl', // Shared App Project Template
'vc2k8_360_lib_proj.tpl', // Lib Project Template
'vc2k8_360_dll_proj.tpl', // Shared Lib Project Template
'', // ActiveX Project Template (not supported on 360)
'.vcproj' ); // File ext to write the project to
// Solution template and extension
$c->setSolutionInfo( 'vc2k8_360_sln.tpl', '', '.sln' );
$c->setFileExtensions( 'c', 'cc', 'h', 'cpp', 'inl', 'm', 'mm' );
$c->setPlatforms( "360" );
$c->setDontCompilePatterns( "#/platformPOSIX.*#", "#/platformMac.*#", "#/platformWin32.*#", "#\.mac\.#", "#\.win32\.#", "#/mac/#", "#/win32/#", "#\.mm$#", "#\.m$#" );
///////////////////////////// VS9 PS3 /////////////////////////////
$c = BuildTarget::add( 'VS9 PS3', // Name
'buildFiles/VisualStudio 2008 (PS3)', // Solution output directory
'projects/', // Project output directory (relative to solution)
'../../source/', // Base directory
'vc2k8_ps3_proj.tpl', // App Project Template
'vc2k8_ps3_proj.tpl', // Shared App Project Template
'vc2k8_ps3_lib_proj.tpl', // Lib Project Template
'vc2k8_ps3_dll_proj.tpl', // Shared Lib Project Template
'', // ActiveX Project Template (not supported on ps3)
'.vcproj' ); // File ext to write the project to
// Solution template and extension
$c->setSolutionInfo( 'vc2k8_ps3_sln.tpl', '', '.sln' );
$c->setFileExtensions( 'c', 'cc', 'h', 'cpp', 'inl', 'm', 'mm' );
$c->setPlatforms( "ps3" );
$c->setDontCompilePatterns( "#/platformXbox.*#", "#/platformWin32.*#", "#\.mac\.#", "#\.win\.#", "#\.win32\.#", "#/mac/#", "#/win32/#", "#\.mm$#", "#\.m$#" );
///////////////////////////// VS9 /////////////////////////////
$c = BuildTarget::add( 'VS9', // Name
'buildFiles/VisualStudio 2008', // Solution output directory
'projects/', // Project output directory (relative to solution)
'../../source/', // Base directory
'vc2k8_proj.tpl', // App Project Template
'vc2k8_shared.tpl', // Shared App Project Template
'vc2k8_lib_proj.tpl', // Lib Project Template
'vc2k8_dll_proj.tpl', // Shared Lib Project Template
'vc2k8_activex_proj.tpl', // ActiveX Control
'.vcproj' ); // File ext to write the project to
// Solution template and extension
$c->setSolutionInfo( 'vc2k8_sln.tpl', 'vc2k8_proj_user.tpl', '.sln' );
$c->setFileExtensions( 'c', 'cc', 'h', 'cpp', 'inl', 'asm', 'rc', 'm', 'mm', 'cs' );
$c->setPlatforms( "win", "win32" );
$c->setDotNetInfo('vc2k8_csproj.tpl');
$c->setDontCompilePatterns( "#/platformPOSIX.*#", "#/platformMac.*#", "#\.mac\.#", "#/mac/#", "#\.mm$#", "#\.m$#" );
///////////////////////////// VS2010 /////////////////////////////
$c = BuildTarget::add( 'VS2010', // Name
'buildFiles/VisualStudio 2010', // Solution output directory
'projects/', // Project output directory (relative to solution)
'../../source/', // Base directory
'vc2010_proj.tpl', // App Project Template
'vc2010_shared.tpl', // Shared App Project Template
'vc2010_lib_proj.tpl', // Lib Project Template
'vc2010_dll_proj.tpl', // Shared Lib Project Template
'vc2010_activex_proj.tpl', // ActiveX Control
'.vcxproj' ); // File ext to write the project to
// Solution template and extension
$c->setSolutionInfo( 'vc2010_sln.tpl', '', '.sln', 'vc2010_filter.tpl' );
$c->setFileExtensions( 'c', 'cc', 'h', 'cpp', 'inl', 'asm', 'rc', 'm', 'mm', 'cs' );
$c->setSourceFileExtensions( 'c', 'cc', 'cpp' );
$c->setPlatforms( "win", "win32" );
$c->setDotNetInfo('vc2010_csproj.tpl');
$c->setDontCompilePatterns( "#/platformPOSIX.*#", "#/platformMac.*#", "#\.mac\.#", "#/mac/#", "#\.mm$#", "#\.m$#" );
/////////////////////////// XCode /////////////////////////////
$c = BuildTarget::add( 'Xcode', // Name
'buildFiles/Xcode', // Solution output directory
'', // Project output directory (relative to solution)
'../../source/', // Base directory
'xcode.tpl', // App Project Template
'xcodeSharedApp.tpl', // Shared App Project Template
'xcodeLib.tpl', // Lib Project Template
'xcodeSharedLib.tpl', // Shared Lib Project Template
'xcodeSafariPlugin.tpl', // Safari Plugin
'.xcodeproj/project.pbxproj' ); // File ext to write the project to
$c->setDelimiters( '[', ']' ); // What delimeters does this template use?
$c->setFileExtensions( 'c', 'cc', 'h', 'cpp', 'inl', 'm', 'mm' );
$c->setPlatforms( "mac" );
$c->setDontCompilePatterns( "*\.h*", "*win32*", "*\.win\.*", "#/platformWin32/#", "/D3D.*/", "*dsound*" );
///////////////////////////// Make //////////////////////////////
$c = BuildTarget::add( 'Make', // Name
'buildFiles/Make', // Solution Output directory
'', // Project Output directory (relative to solution)
'../../source/', // Base directory
'makeApp.tpl', // App Project Template
'makeAppShared.tpl', // Shared App Project Template
'makeLib.tpl', // Lib Project Template
'makeSo.tpl', // Shared Lib Project Template
'', // NP Plugin
'' ); // File ext to write the project to
$c->setSolutionInfo( 'makeSolution.tpl', '', '' );
$c->setFileExtensions( 'c', 'cc', 'h', 'cpp', 'inl', 'asm' );
$c->setPlatforms( "linux" );
$c->setDontCompilePatterns( "*\.h*", "*win32*", "*\.win\.*", "/D3D.*/", "*dsound*", "#/mac/#", "#\.mm$#", "#\.m$#", "*\.dedicated\.*" );
///////////////////////////// Make Dedicated ////////////////////
$c = BuildTarget::add( 'Make Dedicated', // Name
'buildFiles/Make_Ded', // Output directory
'', // Project Output directory (relative to solution)
'../../source/', // Base directory
'makeApp.tpl', // App Project Template
'makeAppShared.tpl', // Shared App Project Template
'makeLib.tpl', // Lib Project Template
'makeSo.tpl', // Shared Lib Project Template
'', // NP Plugin
'' ); // File ext to write the project to
$c->setSolutionInfo( 'makeSolution.tpl', '', '' );
$c->setFileExtensions( 'c', 'cc', 'h', 'cpp', 'inl', 'asm' );
$c->setPlatforms( "linux_dedicated" );
$c->setDontCompilePatterns( "*\.h*", "*win32*", "*\.win\.*", "/D3D.*/", "#/gl/#", "#/mac/#", "#\.mm$#", "#\.m$#", "*\.client\.*" );
///////////////////////////// Build /////////////////////////////
// 'buildManifest_'.$name.'_'.Generator::$platform.'.txt',
$c = BuildTarget::add( 'build', // Name
'buildFiles', // Solution output directory
'projects/', // Project output directory (relative to solution)
'../source/', // Base directory
'buildManifest.tpl', // App Project Template
'buildManifest.tpl', // Shared Project Template
'', // Lib Project Template
'', // Shared Lib Project Template
'', // ActiveX Project Template
'.txt' );
$c->setFileExtensions( 'c', 'cc', 'h', 'cpp', 'inl', 'asm', 'm', 'mm' );
// NO PLATFORMS - SO ALL OR NONE?
$c->setPlatforms("");
////////////////////
function generateAppConfigOutputs( $name )
{
return BuildTarget::getInstances();
}
function generateLibConfigOutputs( $name )
{
return BuildTarget::getInstances();
}
?>

View file

@ -0,0 +1,180 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
class ActiveXWebPlugin
{
// GUID
var $REGISTRY_APPID_RESOURCEID = "";
var $WEBGAME_UUID = "";
var $IWEBGAMECTRL_UUID = "";
var $WEBGAMELIB_UUID = "";
var $WEBGAME_PLUGINNAME = "";
var $WEBGAME_CTRLNAME = "";
var $PLUGIN_DLL = "";
var $PLUGIN_VERSION = "";
var $FOLDER = "";
var $GAMEFOLDER = "";
function ActiveXWebPlugin()
{
// Setup our GUID
//$this->REGISTRY_APPID_RESOURCEID = ActiveXWebPlugin::generateUUID();
//$this->WEBGAME_UUID = ActiveXWebPlugin::generateUUID();
//$this->IWEBGAMECTRL_UUID = ActiveXWebPlugin::generateUUID();
//$this->WEBGAMELIB_UUID = ActiveXWebPlugin::generateUUID();
$rootPhpBuildDir = getcwd();
$this->FOLDER = $rootPhpBuildDir."\\web\\source\\activex\\";
$this->GAMEFOLDER = $rootPhpBuildDir."\\game\\";
$this->PLUGIN_DLL = WebDeploymentWindows::$axPluginName.".dll";
$this->PLUGIN_VERSION = WebDeploymentWindows::$version;
$this->REGISTRY_APPID_RESOURCEID = WebDeploymentWindows::$axAppUUID;
$this->WEBGAME_UUID = WebDeploymentWindows::$axWebGameUUID;
$this->IWEBGAMECTRL_UUID = WebDeploymentWindows::$axWebGameCtrlUUID;
$this->WEBGAMELIB_UUID = WebDeploymentWindows::$axWebGameLibUUID;
$this->WEBGAME_PLUGINNAME = str_replace(" ", "", WebDeploymentWindows::$axPluginName);
$this->WEBGAME_CTRLNAME = "IEWebGameCtrl";//str_replace(" ", "", WebDeploymentWindows::$axPluginName)."Ctrl";
}
function process($project)
{
$html = 'file://'.getcwd().'/game/web/sample.html';
$html = str_replace("\\", "/", $html);
// if the someone is clever enough to change the default location of IE, they are assumed to be
// clever enough to edit the debug command :)
$IEExe = "C:\\Program Files\\Internet Explorer\\iexplore.exe";
if (file_exists("C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe"))
$IEExe = "C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe";
$project->commandRelease = $IEExe;
$project->commandDebug = $IEExe;
$project->commandOptimized = $IEExe;
$project->argsRelease = $html;
$project->argsDebug = $html;
$project->argsOptimized = $html;
$this->processTemplates();
}
function readTemplate($filename)
{
$filename = realpath( dirname( $_SERVER[ 'PHP_SELF' ] ) ). "/templates/web/".$filename;
$fh = fopen($filename, 'r');
$data = fread($fh, filesize($filename));
fclose($fh);
return $data;
}
function writeFile($filename, $data)
{
$filename = $this->FOLDER . $filename;
$fh = fopen($filename, 'w');
fwrite($fh, $data);
fclose($fh);
}
function writeGameFile($filename, $data)
{
$filename = $this->GAMEFOLDER . $filename;
$fh = fopen($filename, 'w');
fwrite($fh, $data);
fclose($fh);
}
function processTemplates()
{
// Make sure these come first so timestamp is oldest (for autogeneration)
$gen = $this->readTemplate("activex_IEWebGamePlugin_i_h.tpl");
$this->writeFile("IEWebGamePlugin_i.h", $gen);
$gen = $this->readTemplate("activex_IEWebGamePlugin_i_c.tpl");
$this->writeFile("IEWebGamePlugin_i.c", $gen);
// WebGame.idl
$idl = $this->readTemplate("activex_IEWebGamePlugin_idl.tpl");
$idl = str_replace("__WEBGAME_UUID__", $this->WEBGAME_UUID, $idl);
$idl = str_replace("__IWEBGAMECTRL_UUID__", $this->IWEBGAMECTRL_UUID, $idl);
$idl = str_replace("__WEBGAMELIB_UUID__", $this->WEBGAMELIB_UUID, $idl);
$idl = str_replace("__WEBGAME_PLUGINNAME__", $this->WEBGAME_PLUGINNAME, $idl);
$this->writeFile("IEWebGamePlugin.idl", $idl);
// dllmain.h
$dllmain = $this->readTemplate("activex_dllmain_h.tpl");
$dllmain = str_replace("__WEBGAME_PLUGINNAME__", $this->WEBGAME_PLUGINNAME, $dllmain);
$dllmain = str_replace("__REGISTRY_APPID_RESOURCEID__", $this->REGISTRY_APPID_RESOURCEID, $dllmain);
$this->writeFile("dllmain.h", $dllmain);
//WebGameCtrl.rgs
$regs = $this->readTemplate("activex_IEWebGameCtrl_rgs.tpl");
$regs = str_replace("__WEBGAME_UUID__", $this->WEBGAME_UUID, $regs);
$regs = str_replace("__WEBGAMELIB_UUID__", $this->WEBGAMELIB_UUID, $regs);
$regs = str_replace("__WEBGAME_PLUGINNAME__", $this->WEBGAME_PLUGINNAME, $regs);
$regs = str_replace("__WEBGAME_CTRLNAME__", $this->WEBGAME_CTRLNAME, $regs);
$this->writeFile("IEWebGameCtrl.rgs", $regs);
//WebGamePlugin.rgs
$regs = $this->readTemplate("activex_IEWebGamePlugin_rgs.tpl");
$regs = str_replace("__WEBGAME_PLUGINNAME__", $this->WEBGAME_PLUGINNAME, $regs);
$regs = str_replace("__WEBGAME_CTRLNAME__", $this->WEBGAME_CTRLNAME, $regs);
$this->writeFile("IEWebGamePlugin.rgs", $regs);
//WebGameCtrl.rc
$rc = $this->readTemplate("activex_IEWebGamePlugin_rc.tpl");
$rc = str_replace("__PLUGIN_DLL__", $this->PLUGIN_DLL, $rc);
$rc = str_replace("__WEBGAME_PLUGINNAME__", $this->WEBGAME_PLUGINNAME, $rc);
//versioning
$rc = str_replace("__PLUGIN_VERSION_STRING__", $this->PLUGIN_VERSION, $rc);
$cd = str_replace(".", "," , $this->PLUGIN_VERSION);
$rc = str_replace("__PLUGIN_VERSION_COMMA_DELIMITED__", $cd, $rc);
$this->writeFile("IEWebGamePlugin.rc", $rc);
// handle the sample HTML (and whatever else) that is shared between plugins
WebPlugin::processActiveXPlugin($this);
}
static function generateUUID()
{
$command = realpath( dirname( $_SERVER[ 'PHP_SELF' ] ) )."\\..\\..\\Engine\\bin\\uuidgen\\uuidgen.exe -c";
exec($command, $output);
return $output[0];
}
}
?>

View file

@ -0,0 +1,208 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
class BuildTarget
{
private static $instances = array();
public $name;
public $output_dir;
public $project_dir;
public $project_rel_path;
public $base_dir;
public $template_app;
public $template_shared_app;
public $template_lib;
public $template_shared_lib;
public $template_activex;
public $template_sln;
public $template_user;
public $template_csproj;
public $solution_ext;
public $output_ext;
public $file_exts;
public $reject_patternss;
public $dont_compile_patterns;
public $source_file_exts;
public $platforms;
public $ldelim;
public $rdelim;
static function add( $name, $out, $project, $base, $template_app, $template_shared_app, $template_lib, $template_shared_lib, $template_activex, $out_ext )
{
$c = new BuildTarget( $name, $out, $project, $base, $template_app, $template_shared_app, $template_lib, $template_shared_lib, $template_activex, $out_ext );
self::$instances[ $name ] = $c;
return $c;
}
static function getInstances()
{
return self::$instances;
}
function BuildTarget( $name, $out, $project, $base, $template_app, $template_shared_app, $template_lib, $template_shared_lib, $template_activex, $out_ext )
{
$this->name = $name;
$this->output_dir = $out;
$this->project_dir = $project;
$this->output_ext = $out_ext;
$this->base_dir = $base;
$this->template_app = $template_app;
$this->template_shared_app = $template_shared_app;
$this->template_lib = $template_lib;
$this->template_shared_lib = $template_shared_lib;
$this->template_activex = $template_activex;
$this->template_csproj = "";
$this->template_user = "";
// The template for a filters file used by VS2010.
$this->template_filter = "";
$p = explode( '/', $project );
$o = array();
for( $i = 0; $i < sizeof( $p ); $i++ )
{
// Skip meaningless . or empty terms.
if( $p[ $i ] == '' || $p[ $i ] == '.' )
continue;
array_push( $o, '..' );
}
$this->project_rel_path = implode( '/', $o );
if (strlen($this->project_rel_path) > 0)
$this->project_rel_path = $this->project_rel_path . "/";
}
function setDelimiters( $l, $r )
{
$this->ldelim = $l;
$this->rdelim = $r;
}
function setSolutionInfo( $template_sln, $template_user, $output_ext, $template_filter = "" )
{
$this->template_sln = $template_sln;
$this->solution_ext = $output_ext;
$this->template_user = $template_user;
$this->template_filter = $template_filter;
}
function setDotNetInfo($template_csprog)
{
$this->template_csproj = $template_csprog;
}
function setFileExtensions()
{
$args = func_get_args();
$count = func_num_args();
$this->file_exts = $args;
}
function setSourceFileExtensions()
{
$args = func_get_args();
$count = func_num_args();
$this->source_file_exts = $args;
}
function setRejectPatterns()
{
$args = func_get_args();
$this->reject_patterns = $args;
}
function setDontCompilePatterns()
{
$args = func_get_args();
$this->dont_compile_patterns = $args;
}
function setPlatforms()
{
$args = func_get_args();
$this->platforms = $args;
}
function supportsPlatform( $platform )
{
if( isset( $this->platforms ) )
foreach( $this->platforms as $rule )
if( strcmp( $rule, $platform ) == 0 )
return true;
return false;
}
function ruleReject( $file )
{
if( isset( $this->reject_patterns ) )
foreach( $this->reject_patterns as $rule )
if( preg_match( $rule, $file ) )
return true;
return false;
}
function allowedFileExt( $file )
{
foreach( $this->file_exts as $ext )
{
$ext = ".{$ext}";
$extLen = strlen( $ext );
$possibleMatch = substr( $file, -$extLen, $extLen );
if( $possibleMatch == $ext )
return true;
}
return false;
}
function isSourceFile( $file )
{
foreach( $this->source_file_exts as $ext )
{
$ext = ".{$ext}";
$extLen = strlen( $ext );
$possibleMatch = substr( $file, -$extLen, $extLen );
if( $possibleMatch == $ext )
return true;
}
return false;
}
}
?>

View file

@ -0,0 +1,133 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
class FileUtil
{
// Turn foo/../bar/../baz/ into baz/
static function collapsePath( $p )
{
$p = explode( '/', $p );
$o = array();
for( $i = 0; $i < sizeof( $p ); $i++ )
{
// Skip meaningless . or empty terms.
if( $p[ $i ] == '' || $p[ $i ] == '.' )
continue;
// Consider if we can pop something off the list.
if( $p[ $i ] == '..' && $i > 0 && $o[ sizeof( $o ) - 1 ] != '..' )
{
array_pop( $o );
continue;
}
array_push( $o, $p[ $i ] );
}
return implode( '/', $o );
}
// We apply some cleanup to the file list, specifically to remove
// any groupings with no siblings.
static function trimFileList( &$list )
{
// Consider each child...
foreach( $list as $k => $v )
{
// Only consider folders...
if( !is_array( $v ) )
continue;
// If child has only one child, then collapse it
reset( $v );
if( count( $v ) == 1 && is_array( current( $v ) ) )
{
//echo("Trying to collapse $k\n");
$list[ $k ] = current( $v );
// Reset our walk through the list...
reset( $list );
}
}
// Now recurse on all children.
foreach( $list as $k => $v )
{
// Only consider folders...
if( !is_array( $v ) )
continue;
FileUtil::trimFileList( &$list[ $k ] );
}
}
static function prepareOutputDir( $outdir )
{
if( !file_exists( $outdir ) )
{
echo( " Directory " . $outdir . " doesn't exist, attempting to create it.\n" );
if( !mkdir_r( $outdir, 0777 ) )
{
echo( " Couldn't create directory.\n" );
return false;
}
}
if( !chdir( $outdir ) )
{
echo( "Couldn't change directory\n" );
return false;;
}
return true;
}
static function normalizeSlashes( $path )
{
return str_replace( '\\', '/', $path );
}
static function isAbsolutePath( $path )
{
// This looks complex, but its really fairly simple.
//
// We're detecting existing absolute paths in the include
// by converting it to absolute, normalizing the slashes,
// and comparing the results.
//
// If we get an absolute path we just don't prepend the
// project relative path part.
//
$orgPath = FileUtil::normalizeSlashes( $path );
$absPath = FileUtil::normalizeSlashes( realpath( $path ) );
return strcasecmp( $orgPath, $absPath ) == 0;
}
}
?>

View file

@ -0,0 +1,612 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
///
/// Static Generator class
///
require_once( "FileUtil.php" );
require_once( "Solution.php" );
require_once( "Project.php" );
require_once( "BuildTarget.php" );
require_once( "Torque3D.php");
require_once( "WindowsRegistry.php");
require_once( "WebPlugin.php");
require_once( "ActiveXWebPlugin.php");
require_once( "NPWebPlugin.php");
require_once( "SafariWebPlugin.php");
class Generator
{
public static $app_name;
public static $paths = array();
public static $prefs = array();
public static $config_projects = array();
public static $app_lib_includes = array(); // An accumulative list of includes that are needed by libs and subsequently needed by the application
public static $platform = 'win32';
public static $solutions = array();
public static $libGuard = array(); // protect against libraries included multiple times across modules
public static $absPath = NULL;
public static $gameProjectName = NULL;
public static $toolBuild = true;
public static $watermarkBuild = false;
public static $purchaseScnBuild = false;
public static $demoBuild = false;
public static $objectLimitBuild = false;
public static $timeOutBuild = false;
public static $useDLLRuntime = false;
private static $solution_cur;
private static $project_cur;
private static $module_cur;
static function init( $torqueRoot )
{
// If the torque root is absolute then store and use it.
if ( realpath( $torqueRoot ) == $torqueRoot ||
realpath( $torqueRoot ) == str_replace("/", "\\", $torqueRoot) )
{
self::$absPath = str_replace( "\\", "/", $torqueRoot );
$torqueRoot = self::$absPath;
}
if ( self::$absPath )
{
self::$paths[ 'engineLib' ] = '../../../Engine/lib/';
self::$paths[ 'engineSrc' ] = '../../../Engine/source/';
self::$paths[ 'engineBin' ] = '../../../Engine/bin/';
}
else
{
self::$paths[ 'engineLib' ] = $torqueRoot . '/../Engine/lib/';
self::$paths[ 'engineSrc' ] = $torqueRoot . '/../Engine/source/';
self::$paths[ 'engineBin' ] = $torqueRoot . '/../Engine/bin/';
}
self::$paths[ 'modules' ] = $torqueRoot . '/Tools/projectGenerator/modules/';
self::$paths[ 'libs' ] = $torqueRoot . '/Tools/projectGenerator/libs/';
self::$platform = 'win32';
}
static function setGameProjectName($name)
{
self::$gameProjectName = $name;
}
static function getGameProjectName()
{
return self::$gameProjectName;
}
static function setToolBuild($tb)
{
self::$toolBuild = $tb;
}
static function getToolBuild()
{
return self::$toolBuild;
}
static function setWatermarkBuild($wb)
{
self::$watermarkBuild = $wb;
}
static function getWatermarkBuild()
{
return self::$watermarkBuild;
}
static function setPurchaseScreenBuild($psb)
{
self::$purchaseScnBuild = $psb;
}
static function getPurchaseScreenBuild()
{
return self::$purchaseScnBuild;
}
static function setDemoBuild($db)
{
self::$demoBuild = $db;
}
static function getDemoBuild()
{
return self::$demoBuild;
}
static function setObjectLimitBuild($olb)
{
self::$objectLimitBuild = $olb;
}
static function getObjectLimitBuild()
{
return self::$objectLimitBuild;
}
static function setTimeOutBuild($tob)
{
self::$timeOutBuild = $tob;
}
static function getTimeOutBuild()
{
return self::$timeOutBuild;
}
static function isApp()
{
return self::$project_cur->isApp();
}
static function getGeneratorLibsPath()
{
return self::$paths[ 'libs' ];
}
static function getGeneratorModulesPath()
{
return self::$paths['modules'];
}
static function getEngineSrcDir()
{
return self::$paths['engineSrc'];
}
static function getLibSrcDir()
{
return self::$paths['engineLib'];
}
static function getEngineBinDir()
{
return self::$paths['engineBin'];
}
static function addSrcDirRecursive($basePath, $dirPath)
{
$ignore = array( '.', '..', '.svn', '_svn', 'CVS' );
$absPath = realpath($argv[1])."/buildFiles/";
array_push( self::$project_cur->dir_list, $basePath.'/'.$dirPath );
$dirHandle = opendir( $absPath.$basePath.'/'.$dirPath);
while( $file = readdir( $dirHandle ) )
{
if( !in_array( $file, $ignore ) )
{
if( is_dir( $absPath.$basePath.'/'.$dirPath.'/'.$file ) )
self::addSrcDirRecursive( $basePath, "$dirPath/$file");
}
}
closedir( $dirHandle );
}
static function addSrcDir( $dir, $recurse = false )
{
if (!$recurse)
array_push( self::$project_cur->dir_list, $dir );
else
{
self::addSrcDirRecursive($dir, "");
}
}
static function addSrcFile( $file )
{
array_push( self::$project_cur->dir_list, $file );
}
static function addIncludePath( $path )
{
array_push( self::$project_cur->includes, $path );
}
static function addProjectDefine( $d, $v )
{
if (!$v)
array_push( self::$project_cur->defines, $d );
else
array_push( self::$project_cur->defines, $d."=".$v );
}
static function disableProjectWarning( $warning )
{
array_push( self::$project_cur->disabledWarnings, $warning );
}
static function addProjectDefines( $args_array )
{
self::$project_cur->defines = array_merge( self::$project_cur->defines, $args_array );
}
static function addProjectLibDir( $dir )
{
array_push( self::$project_cur->lib_dirs, $dir );
}
static function addProjectLibInput( $lib )
{
array_push( self::$project_cur->libs, $lib );
}
static function includeLib( $lib )
{
foreach( self::$libGuard as $libName )
if( $libName == $lib )
return;
array_push( self::$libGuard, $lib );
// if currently in a project, delay the include
if (Generator::inProjectConfig())
{
array_push( self::$project_cur->lib_includes, $lib );
return;
}
// otherwise include it immediately
require( Generator::getGeneratorLibsPath() . $lib . '.conf' );
}
static function addProjectDependency( $pd )
{
array_push( self::$project_cur->dependencies, $pd );
}
static function removeProjectDependency( $pd )
{
foreach (self::$project_cur->dependencies as $key => $value)
{
if ($value == $pd)
{
unset(self::$project_cur->dependencies[$key]);
}
}
self::$project_cur->dependencies = array_values(self::$project_cur->dependencies);
}
static function addProjectReference( $refName, $version = "")
{
self::$project_cur->addReference( $refName, $version );
}
static function setProjectGUID( $guid )
{
self::$project_cur->guid = $guid;
}
static function setProjectModuleDefinitionFile ( $mdef )
{
self::$project_cur->moduleDefinitionFile = $mdef;
}
static function beginModule( $name )
{
if( !self::$module_cur )
self::$module_cur = $name;
else
echo( "Generator::beginModule() - already in module!" );
}
static function endModule()
{
if( self::$module_cur )
self::$module_cur = null;
else
trigger_error( "Generator::endModule() - no active module!", E_USER_ERROR );
}
static function inProjectConfig()
{
return self::$project_cur != null;
}
static function setProjectSubSystem( $subSystem )
{
self::$project_cur->setSubSystem( $subSystem );
}
static function beginProjectConfig( $name, $type, $guid, $game_dir, $output_name )
{
if( !self::$project_cur )
{
echo( " - begin project: " . $name . "=" . $guid . "\n" );
self::$project_cur = new Project( $name, $type, $guid, $game_dir, $output_name );
self::$config_projects[ $name ] = self::$project_cur;
}
else
trigger_error( "Generator::beginProjectConfig() - a project is already open!", E_USER_ERROR );
}
static function endProjectConfig( $type )
{
//echo( "PT: " .$type. ":".self::$project_cur->type . "\n");
if( self::$project_cur )
{
if( self::$project_cur->type == $type )
{
echo( " - end project " . self::$project_cur->name . "\n" );
// Set project outputs
self::$project_cur->outputs = BuildTarget::getInstances();
// Allow project to optimize and validate state, etc
self::$project_cur->validate();
// Bit of flummery from original code, not sure what it is supposed to do -- neo
if( $type == Project::$TYPE_LIB )
{
// Merge lib includes to global lib include array
self::$app_lib_includes = array_merge( self::$app_lib_includes, self::$project_cur->includes );
}
else if ( $type == Project::$TYPE_SHARED_LIB )
{
// Merge lib includes into app include list
self::$app_lib_includes = array_merge( self::$app_lib_includes, self::$project_cur->includes );
}
else if ( $type == Project::$TYPE_ACTIVEX )
{
// Merge lib includes into app include list
self::$app_lib_includes = array_merge( self::$app_lib_includes, self::$project_cur->includes );
}
else if ( $type == Project::$TYPE_SAFARI )
{
// Merge lib includes into app include list
self::$app_lib_includes = array_merge( self::$app_lib_includes, self::$project_cur->includes );
}
else if ( $type == Project::$TYPE_SHARED_APP )
{
// Merge lib includes into app include list
self::$app_lib_includes = array_merge( self::$app_lib_includes, self::$project_cur->includes );
}
else if ( $type == Project::$TYPE_APP )
{
// Merge lib includes into app include list
self::$project_cur->addIncludes( self::$app_lib_includes );
}
// Clear out sucker
$p = self::$project_cur;
self::$project_cur = null;
// Now include any libraries included in the modules
foreach( $p->lib_includes as $libName )
require( Generator::getGeneratorLibsPath() . $libName . '.conf' );
}
else
trigger_error( "Generator::endProjectConfig() - closing type mismatch!", E_USER_ERROR );
}
else
trigger_error( "Generator::endProjectConfig() - no currently open project!", E_USER_ERROR );
}
static function beginActiveXConfig( $lib_name, $guid = '', $game_dir = 'game', $output_name = '' )
{
self::beginProjectConfig( $lib_name, Project::$TYPE_ACTIVEX, $guid, $game_dir, $output_name );
// Handle ActiveX specific setup (including ATL template processing, etc)
$activex = new ActiveXWebPlugin();
$activex->process(self::$project_cur);
}
static function endActiveXConfig()
{
self::endProjectConfig( Project::$TYPE_ACTIVEX );
}
static function beginSafariConfig( $lib_name, $guid = '', $game_dir = 'game', $output_name = '' )
{
self::beginProjectConfig( $lib_name, Project::$TYPE_SAFARI, $guid, $game_dir, $output_name );
// Handle Safari specific setup
$safari = new SafariWebPlugin();
$safari->process(self::$project_cur);
}
static function endSafariConfig()
{
self::endProjectConfig( Project::$TYPE_SAFARI );
}
static function beginNPPluginConfig( $lib_name, $guid = '', $game_dir = 'game', $output_name = '' )
{
self::beginProjectConfig( $lib_name, Project::$TYPE_SHARED_LIB, $guid, $game_dir, $output_name );
self::$project_cur->setUniformOutputFile();
// Handle NP specific setup (resource template processing, etc)
$NP = new NPWebPlugin();
$NP->process(self::$project_cur);
}
static function endNPPluginConfig()
{
self::endProjectConfig( Project::$TYPE_SHARED_LIB );
}
static function beginSharedLibConfig( $lib_name, $guid = '', $game_dir = 'game', $output_name = '' )
{
self::beginProjectConfig( $lib_name, Project::$TYPE_SHARED_LIB, $guid, $game_dir, $output_name );
}
static function endSharedLibConfig()
{
self::endProjectConfig( Project::$TYPE_SHARED_LIB );
}
static function beginCSProjectConfig( $lib_name, $guid = '', $game_dir = 'game', $output_name = '' )
{
self::beginProjectConfig( $lib_name, Project::$TYPE_CSPROJECT, $guid, $game_dir, $output_name );
}
static function endCSProjectConfig()
{
self::endProjectConfig( Project::$TYPE_CSPROJECT );
}
static function beginLibConfig( $lib_name, $guid = '', $game_dir = 'game', $output_name = '' )
{
self::beginProjectConfig( $lib_name, Project::$TYPE_LIB, $guid, $game_dir, $output_name );
}
static function endLibConfig()
{
self::endProjectConfig( Project::$TYPE_LIB );
}
static function beginSharedAppConfig( $app_name, $guid = '', $game_dir = 'game', $output_name = '' )
{
self::beginProjectConfig( $app_name, Project::$TYPE_SHARED_APP, $guid, $game_dir, $output_name );
}
static function endSharedAppConfig()
{
self::endProjectConfig( Project::$TYPE_SHARED_APP);
}
static function beginAppConfig( $app_name, $guid = '', $game_dir = 'game', $output_name = '' )
{
self::beginProjectConfig( $app_name, Project::$TYPE_APP, $guid, $game_dir, $output_name );
}
static function endAppConfig()
{
self::endProjectConfig( Project::$TYPE_APP );
}
static function lookupProjectByName( $pname )
{
foreach( self::$config_projects as $projName => $proj )
if( $projName == $pname )
return $proj;
return null;
}
// We encapsulate the meat of the project generator in generateProjects()
// so that more complex .config files can generate more than one run of projects
// without having to run a second instance of php
static function generateProjects( $tpl )
{
// Alright, for each project scan and generate the file list.
$projectFiles = array ();
$rootPhpBuildDir = getcwd();
foreach( self::$config_projects as $projName => $proj )
{
echo( " - Processing project '$projName'...\n" );
$proj->generate( $tpl, self::$platform, $rootPhpBuildDir );
}
echo( "PROJECTS DONE\n\n" );
chdir( $rootPhpBuildDir );
}
/////////////////////// SOLUTIONS /////////////////////////
static function beginSolution( $name, $guid )
{
if( !self::$solution_cur )
{
self::$solution_cur = new Solution( $name, $guid );
self::$solutions[ $name ] = self::$solution_cur;
}
else
trigger_error( "Generator::beginSolution() - tried to start $name but already in the ".self::$solution_cur->name." solution!", E_USER_ERROR );
}
static function addSolutionProjectRef( $pname )
{
if( isset( self::$solution_cur ) )
self::$solution_cur->addProjectRef( $pname );
else
trigger_error( "Generator::addSolutionProjectRef(): no such project - " . $pname . "\n", E_USER_ERROR );
}
static function addSolutionProjectRefExt( $pname, $ppath, $pguid )
{
if( isset( self::$solution_cur ) )
self::$solution_cur->addSolutionProjectRefExt( $pname, $ppath, $pguid );
else
trigger_error( "Generator::addSolutionProjectRefExt(): no such project - " . $pname . "\n", E_USER_ERROR );
}
static function endSolution()
{
if( isset( self::$solution_cur ) )
{
self::$solution_cur->setOutputs( BuildTarget::getInstances() );
self::$solution_cur = null;
}
else
trigger_error( "Generator::endSolution(): no active solution!\n", E_USER_ERROR );
}
static function generateSolutions( $tpl )
{
echo( "GENERATING SOLUTIONS\n\n" );
$rootPhpBuildDir = getcwd();
// Process all solutions
foreach( self::$solutions as $sname => $solution )
{
echo( " - Generating solution: " . $sname . "\n" );
chdir( $rootPhpBuildDir );
$solution->generate( $tpl, self::$platform, $rootPhpBuildDir );
}
chdir( $rootPhpBuildDir );
}
static function setDLLRuntime( $val )
{
self::$useDLLRuntime = $val;
}
}
?>

View file

@ -0,0 +1,182 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
class NPWebPlugin
{
var $FOLDER = "";
var $GAMEFOLDER = "";
var $PLUGINNAME = "";
var $COMPANY = "";
var $COMPANYKEY = "";
var $PLUGIN = "";
var $PRODUCTNAME = "";
var $VERSION = "";
var $MIMETYPE = "";
var $DESCRIPTION = "";
function NPWebPlugin()
{
$rootPhpBuildDir = getcwd();
$this->FOLDER = $rootPhpBuildDir."\\web\\source\\npplugin\\windows\\";
$this->GAMEFOLDER = $rootPhpBuildDir."\\game\\";
$this->PLUGINNAME = WebDeploymentWindows::$npPluginName;
$this->COMPANY = WebDeploymentWindows::$company;
$this->COMPANYKEY = WebDeploymentWindows::$companyKey;
$this->PLUGIN = WebDeploymentWindows::$plugin;
$this->PRODUCTNAME = WebDeploymentWindows::$productName;
$this->VERSION = WebDeploymentWindows::$version;
$this->MIMETYPE = WebDeploymentWindows::$mimeType;
$this->DESCRIPTION = WebDeploymentWindows::$description." ".$this->VERSION;
}
function process($project)
{
$windowsRegistry = new WindowsRegistry();
$MozillaVersion = $windowsRegistry->ReadValue('HKEY_LOCAL_MACHINE\\SOFTWARE\\Mozilla\\Mozilla Firefox', 'CurrentVersion', TRUE);
$MozillaExe = $windowsRegistry->ReadValue('HKEY_LOCAL_MACHINE\\SOFTWARE\\Mozilla\\Mozilla Firefox\\'.$MozillaVersion.'\\Main', 'PathToExe', TRUE);
// FireFox registry settings
$MozillaKey = 'HKEY_LOCAL_MACHINE\\SOFTWARE\\MozillaPlugins\\@';
$html = 'file://'.getcwd().'/game/web/sample.html';
$html = str_replace("\\", "/", $html);
$html = str_replace(" ", "%20", $html);
$project->commandRelease = $MozillaExe;
$project->commandDebug = $MozillaExe;
$project->commandOptimized = $MozillaExe;
$project->argsRelease = $html;
$project->argsDebug = $html;
$project->argsOptimized = $html;
//$windowsRegistry->WriteValue($MozillaKey.$this->COMPANYKEY.'/'.$this->PLUGIN, 'Path', $this->GAMEFOLDER.$this->PLUGINNAME.'.dll');
//$windowsRegistry->WriteValue($MozillaKey.$this->COMPANYKEY.'/'.$this->PLUGIN, 'ProductName', $this->PRODUCTNAME);
//$windowsRegistry->WriteValue($MozillaKey.$this->COMPANYKEY.'/'.$this->PLUGIN, 'Vendor', $this->COMPANY);
//$windowsRegistry->WriteValue($MozillaKey.$this->COMPANYKEY.'/'.$this->PLUGIN, 'Version', $this->VERSION);
//$windowsRegistry->WriteValue($MozillaKey.$this->COMPANYKEY.'/'.$this->PLUGIN.'\\MimeTypes\\application/'.$this->MIMETYPE, 'Description', $this->DESCRIPTION);
unset($windowsRegistry);
$this->processTemplates();
setProjectModuleDefinitionFile('../../../web/source/npplugin/windows/npWebGamePlugin.def');
/// Prefs
addProjectDefine( 'TORQUE_SHADERGEN' );
addProjectDefine( 'TORQUE_SHARED' );
addProjectDefine( 'TORQUE_WEBDEPLOY' );
// Firefox
addProjectDefine( 'FIREFOXPLUGIN_EXPORTS' );
addProjectDefine( 'MOZILLA_STRICT_API' );
addProjectDefine( 'XP_WIN' );
addProjectDefine( 'WIN32' );
addProjectDefine( '_WINDOWS' );
addProjectDefine( '_USRDLL' );
addSrcDir( '../web/source/common' );
addSrcDir( '../web/source/npplugin' );
addSrcDir( '../web/source/npplugin/windows' );
// Additional includes
addIncludePath( "../../web/source/npplugin/windows" );
addProjectLibDir( getAppLibSrcDir() . 'SDL/win32' );
addProjectLibDir( getAppLibSrcDir() . 'unicode' );
// addProjectLibDir( getAppLibSrcDir() . 'mozilla/lib' );
addProjectLibInput('COMCTL32.LIB');
addProjectLibInput('COMDLG32.LIB');
addProjectLibInput('USER32.LIB');
addProjectLibInput('ADVAPI32.LIB');
addProjectLibInput('GDI32.LIB');
addProjectLibInput('WINMM.LIB');
addProjectLibInput('WSOCK32.LIB');
addProjectLibInput('vfw32.lib');
addProjectLibInput('Imm32.lib');
addProjectLibInput('UnicoWS.lib');
addProjectLibInput('opengl32.lib');
addProjectLibInput('glu32.lib');
addProjectLibInput('ole32.lib');
addProjectLibInput('shell32.lib');
addProjectLibInput('oleaut32.lib');
addProjectLibInput('version.lib');
}
function readTemplate($filename)
{
$filename = realpath( dirname( $_SERVER[ 'PHP_SELF' ] ) ). "/templates/web/".$filename;
$fh = fopen($filename, 'r');
$data = fread($fh, filesize($filename));
fclose($fh);
return $data;
}
function writeFile($filename, $data)
{
$filename = $this->FOLDER . $filename;
$fh = fopen($filename, 'w');
fwrite($fh, $data);
fclose($fh);
}
function writeGameFile($filename, $data)
{
$filename = $this->GAMEFOLDER . $filename;
$fh = fopen($filename, 'w');
fwrite($fh, $data);
fclose($fh);
}
function processTemplates()
{
$data = $this->readTemplate("firefox_rc.tpl");
$cd = str_replace(".", "," , $this->VERSION);
$data = str_replace("__PRODUCTVERSION__", $cd, $data);
$data = str_replace("__FILEDESCRIPTION__", $this->DESCRIPTION, $data);
$data = str_replace("__INTERNALNAME__", $this->PRODUCTNAME, $data);
$data = str_replace("__MIMETYPE__", "application/".$this->MIMETYPE, $data);
$data = str_replace("__ORIGINALFILENAME__", $this->PLUGINNAME.'.dll', $data);
$data = str_replace("__PRODUCTNAME__", $this->PRODUCTNAME, $data);
$data = str_replace("__COMPANY__", $this->COMPANY, $data);
$data = str_replace("__COMPANYKEY__", $this->COMPANYKEY, $data);
$data = str_replace("__PLUGIN__", $this->PLUGIN, $data);
$this->writeFile('NPWebGamePlugin.rc', $data);
// handle the sample HTML (and whatever else) that is shared between plugins
WebPlugin::processNPPlugin($this);
}
}
?>

View file

@ -0,0 +1,614 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
///
/// Project info
///
class Project
{
public static $TYPE_APP = 'app';
public static $TYPE_SHARED_APP = 'sharedapp';
public static $TYPE_LIB = 'lib';
public static $TYPE_SHARED_LIB = 'shared';
public static $TYPE_ACTIVEX = 'activex';
public static $TYPE_SAFARI = 'safari';
public static $TYPE_CSPROJECT = 'csproj';
public $name; // Project name
public $guid; // Project GUID
public $type; // Application or Library?
public $dir_list; // What directories are we checking in?
public $outputs; // List of outputs we want to generate.
public $game_dir; // Base product path
public $defines; // Preprocessor directives
public $disabledWarnings; // Additional warnings to disable
public $includes; // Additional include paths
public $libs; // Additional libraries to link against
public $lib_dirs; // Additional library search paths
public $lib_includes; // libs to include (generated by modules)
public $additionalExePath; // Additional section to inject into executable path
public $dependencies; // Projects this project depends on
public $references; // for managed projects, references to required assemblies
public $moduleDefinitionFile; // definition file to control shared library exports on windows
public $projectFileExt;
public $commandDebug = "";
public $commandOptimized = "";
public $commandRelease = "";
public $argsDebug = "";
public $argsOptimized = "";
public $argsRelease = "";
public $projSubSystem = 2; // support for Windows/Console/Assembly linker subsystem (1 - Console, 2 - Windows, 3 - Assembly)
private static $xUID = 1; // used for unique file IDs for Xcode projects
public $uniformOutputFile = 0; // debug/release builds use same filename (necessary for np plugin)
// $additionalExePath, $lib_dirs, $libs, all appear to be unused. [pauls 11/9/2007]
public function Project( $name, $type, $guid = '', $game_dir = 'game', $output_name = '' )
{
if (strlen($output_name) == 0)
$output_name = $name;
$this->name = $name;
$this->outputName = $output_name;
$this->guid = $guid;
$this->type = $type;
$this->game_dir = $game_dir;
$this->dir_list = array();
$this->defines = array();
$this->includes = array();
$this->libs = array();
$this->lib_dirs = array();
$this->lib_includes = array();
$this->outputs = array();
$this->dependencies = array();
$this->disabledWarnings = array();
$this->references = array();
}
public function isApp()
{
return $this->type == self::$TYPE_APP;
}
public function isSharedApp()
{
return $this->type == self::$TYPE_SHARED_APP;
}
public function isLib()
{
return $this->type == self::$TYPE_LIB;
}
public function isSharedLib()
{
return $this->type == self::$TYPE_SHARED_LIB;
}
public function isCSProject()
{
return $this->type == self::$TYPE_CSPROJECT;
}
public function isActiveX()
{
return $this->type == self::$TYPE_ACTIVEX;
}
public function isSafari()
{
return $this->type == self::$TYPE_SAFARI;
}
public function setUniformOutputFile()
{
return $this->uniformOutputFile = 1;
}
public function setSubSystem( $subSystem )
{
$this->projSubSystem = $subSystem;
}
public function validate()
{
// Sort the path list
sort( $this->dir_list );
// Make sure we don't have any duplicate paths
$this->dir_list = array_unique( $this->dir_list );
}
public function addReference($refName, $version = "")
{
$this->references[$refName] = $version;
}
public function addIncludes( $includes )
{
$this->includes = array_merge( $includes, $this->includes );
}
public function validateDependencies()
{
$pguids = array();
foreach( $this->dependencies as $pname )
{
$p = Generator::lookupProjectByName( $pname );
if( $p )
array_push( $pguids, $p->guid );
else
trigger_error( "Project dependency not found: " .$pname, E_USER_ERROR );
}
// todo: change to dependencyGuids
$this->dependencies = $pguids;
}
private function generateXUID()
{
return sprintf( "%023X", Project::$xUID++ );
}
private function createFileEntry( $output, $curPath, $curFile )
{
// See if we need to reject it based on our rules..
if( $output->ruleReject( $curFile ) )
return null;
// Get the extension - is it one of our allowed values?
if( !$output->allowedFileExt( $curFile ) )
return null;
// Cool - note in the list!
$newEntry = new stdClass();
$newEntry->name = $curFile;
$newEntry->path = FileUtil::collapsePath( $curPath . "/" . $curFile );
if ( !FileUtil::isAbsolutePath( $newEntry->path ) )
{
// This could be consolidated into a single OR statement but it is easier to
// read as two separate if's
if ( !Generator::$absPath )
$newEntry->path = $output->project_rel_path . $newEntry->path;
if ( Generator::$absPath && !stristr($newEntry->path, Generator::$absPath) )
$newEntry->path = $output->project_rel_path . $newEntry->path;
}
// Store a project-unique ID here for Xcode projects
// It will be appended by a single char in the templates.
$newEntry->hash = Project::generateXUID();
return $newEntry;
}
function generateFileList( &$projectFiles, $outputName, &$output )
{
$projName = $this->name;
$projectFiles[ $projName ] = array();
foreach( $this->dir_list as $dir )
{
$dir = FileUtil::normalizeSlashes( $dir );
// Build the path.
if ( FileUtil::isAbsolutePath( $dir ) )
$curPath = $dir;
else
$curPath = FileUtil::collapsePath( $output->base_dir . $dir );
$pathWalk = &$projectFiles[ $projName ];
if ( Generator::$absPath )
{
if ( stristr($curPath, getEngineSrcDir()) || stristr($curPath, getLibSrcDir()) )
$curPath = Generator::$absPath . "/". str_replace("../", "", $curPath);
}
// Check if its a file or a directory.
// If its a file just add it directly and build a containng filter/folder structure,
// for it else if a dir add all files in it.
if( is_file( $curPath ) )
{
// Get the file name
$curFile = basename( $curPath );
$curPath = dirname( $curPath );
//echo( "FILE: " . $curFile . " PATH: " . $curPath . "\n" );
}
if( is_dir( $curPath ) )
{
//echo( "DIR: " . $curPath . "\n" );
// Get the array we'll be adding things to...
$pathParts = explode( '/', FileUtil::collapsePath( $dir ) );
foreach( $pathParts as $part )
{
// Skip parts that are relative paths - only want meaningful directories.
if( $part == '..' )
continue;
if( !is_array( $pathWalk[ $part ] ) )
$pathWalk[ $part ] = array();
$pathWalk = &$pathWalk[ $part ];
}
// Open directory.
//echo( "SCANNING: " . $curPath . "\n");
$dirHdl = opendir( $curPath );
if( !$dirHdl )
{
echo( "Path " . $curPath . " not found, giving up.\n" );
return false;
}
// Iterate over all the files in the path if not a single file spec.
if( !$curFile )
{
while( $curFile = readdir( $dirHdl ) )
{
// Skip out if it's an uninteresting dir...
if( $curFile == '.' || $curFile == '..' || $curFile == '.svn' || $curFile == 'CVS' )
continue;
$newEntry = $this->createFileEntry( $output, $curPath, $curFile );
if( $newEntry )
$pathWalk[] = $newEntry;
}
}
else
{
$newEntry = $this->createFileEntry( $output, $curPath, $curFile );
if( $newEntry )
$pathWalk = $newEntry;
$curFile = '';
}
// Clean up after ourselves!
closedir( $dirHdl );
}
}
FileUtil::trimFileList( &$projectFiles );
// Uncomment me to see the structure the file lister is returning.
//print_r($projectFiles);
return true;
}
private function setTemplateParams( $tpl, $output, &$projectFiles )
{
// Set the template delimiters
$tpl->left_delimiter = $output->ldelim ? $output->ldelim : '{';
$tpl->right_delimiter = $output->rdelim ? $output->rdelim : '}';
// Evaluate template into a file.
$tpl->assign_by_ref( 'projSettings', $this );
$tpl->assign_by_ref( 'projOutput', $output );
$tpl->assign_by_ref( 'fileArray', $projectFiles );
$tpl->assign_by_ref( 'projName', $this->name );
$tpl->assign_by_ref( 'projOutName', $this->outputName );
$tpl->assign_by_ref( 'gameFolder', $this->game_dir );
$tpl->assign_by_ref( 'GUID', $this->guid );
$tpl->assign_by_ref( 'projDefines', $this->defines );
$tpl->assign_by_ref( 'projDisabledWarnings', $this->disabledWarnings );
$tpl->assign_by_ref( 'projIncludes', $this->includes );
$tpl->assign_by_ref( 'projLibs', $this->libs );
$tpl->assign_by_ref( 'projLibDirs', $this->lib_dirs );
$tpl->assign_by_ref( 'projDepend', $this->dependencies );
$tpl->assign_by_ref( 'gameProjectName', getGameProjectName() );
$tpl->assign_by_ref( 'projModuleDefinitionFile', $this->moduleDefinitionFile );
$tpl->assign_by_ref( 'projSubSystem', $this->projSubSystem );
if (Generator::$useDLLRuntime)
{
// /MD and /MDd
$tpl->assign( 'projRuntimeRelease', 2 );
$tpl->assign( 'projRuntimeDebug', 3 );
}
else
{
// /MT and /MTd
$tpl->assign( 'projRuntimeRelease', 0 );
$tpl->assign( 'projRuntimeDebug', 1 );
}
if (!$this->commandDebug && ( $this->isSharedLib() || $this->isSharedApp() ))
{
$command = "$(TargetDir)\\".$this->outputName;
$tpl->assign( 'commandDebug' , $command."_DEBUG.exe");
$tpl->assign( 'commandRelease' , $command.".exe");
$tpl->assign( 'commandOptimized' , $command."_OPTIMIZEDDEBUG.exe");
}
else
{
$tpl->assign_by_ref( 'commandDebug' , $this->commandDebug);
$tpl->assign_by_ref( 'commandRelease' , $this->commandRelease);
$tpl->assign_by_ref( 'commandOptimized' , $this->commandOptimized);
}
$tpl->assign_by_ref( 'argsDebug' , $this->argsDebug);
$tpl->assign_by_ref( 'argsRelease' , $this->argsRelease);
$tpl->assign_by_ref( 'argsOptimized' , $this->argsOptimized);
$ptypes = array();
$projectDepends = array();
foreach ($this->dependencies as $pname)
{
$p = Generator::lookupProjectByName( $pname );
$projectDepends[$pname] = $p;
if ( $p )
$ptypes[$pname] = $p->isSharedLib() || $p->isSafari();
}
$tpl->assign_by_ref( 'projTypes', $ptypes );
$tpl->assign_by_ref( 'projectDepends', $projectDepends );
// Assign some handy paths for the template to reference
$tpl->assign( 'projectOffset', $output->project_rel_path );
if ( Generator::$absPath )
$tpl->assign( 'srcDir', Generator::$absPath . "/". str_replace("../", "", getAppEngineSrcDir()) );
else
$tpl->assign( 'srcDir', $output->project_rel_path . getAppEngineSrcDir() );
if ( Generator::$absPath )
$tpl->assign( 'libDir', Generator::$absPath . "/". str_replace("../", "", getAppLibSrcDir()) );
else
$tpl->assign( 'libDir', $output->project_rel_path . getAppLibSrcDir() );
if ( Generator::$absPath )
$tpl->assign( 'binDir', Generator::$absPath . "/". str_replace("../", "", getAppEngineBinDir()) );
else
$tpl->assign( 'binDir', $output->project_rel_path . getAppEngineBinDir() );
$tpl->assign( 'uniformOutputFile', $this->uniformOutputFile);
}
private function conditionDirectories( $output, &$projectFiles )
{
foreach ($this->includes as &$include)
{
if ( !FileUtil::isAbsolutePath( $include ) )
$include = $output->project_rel_path . $include;
}
foreach ($this->lib_dirs as &$libDirs)
{
if ( !FileUtil::isAbsolutePath( $libDirs ) )
$libDirs = $output->project_rel_path . $libDirs;
}
if ( Generator::$absPath )
{
foreach ($this->includes as &$include)
{
if ( stristr($include, getEngineSrcDir()) || stristr($include, getLibSrcDir()) )
$include = Generator::$absPath . "/". str_replace("../", "", $include);
}
foreach ($this->lib_dirs as &$libDirs)
{
if ( stristr($libDirs, getEngineSrcDir()) || stristr($libDirs, getLibSrcDir()) )
$libDirs = Generator::$absPath . "/". str_replace("../", "", $libDirs);
}
}
}
public function generate( $tpl, $platform, $base_dir )
{
// Alright, for each project scan and generate the file list.
$projectFiles = array ();
$rootPhpBuildDir = getcwd();
// Iterate over this project's outputs.
foreach( $this->outputs as $outputName => $output )
{
$saved_includes = $this->includes;
$saved_lib_dirs = $this->lib_dirs;
//print_r( $output );
// Supported platform?
if( !$output->supportsPlatform( $platform ) )
{
//echo( " # Skipping output: '$outputName'.\n" );
continue;
}
// Get to the right working directory (first go back to root, then to relative)
chdir( $base_dir );
//echo( " - Changing CWD to " . $output->output_dir . "\n" );
// echo(" (From: " . getcwd() . ")\n");
if( !FileUtil::prepareOutputDir( $output->output_dir ) )
continue;
//echo( " - Scanning directory for output '.$outputName.'...\n" );
if( !$this->generateFileList( $projectFiles, $outputName, $output ) )
{
echo( "File list generation failed. Giving up on this project.\n" );
continue;
}
// Do any special work on the include/lib directories that we need
$this->conditionDirectories( $output, $projectFiles[ $this->name ] );
$this->projectFileExt = $output->output_ext;
if ( $this->isCSProject() )
$this->projectFileExt = ".csproj"; // always csproj C# project under VS/MonoDevelop
$outfile = $output->project_dir . $this->name . $this->projectFileExt;
echo( " o Writing project file " . $outfile . "\n" );
$this->setTemplateParams( $tpl, $output, $projectFiles[ $this->name ] );
// To put a bandaid on the tools/player output dir problem
// CodeReview: This should be in the template. -- BJG, 3/13/2007
// Moved into templates -- neo
// Write file
$outdir = dirname( $outfile );
if( !file_exists( $outdir ) )
mkdir_r( $outdir, 0777 );
if( $hdl = fopen( $outfile, 'w' ) )
{
if ($this->isApp())
$template = $output->template_app;
else if ($this->isLib())
$template = $output->template_lib;
else if ($this->isSharedLib())
$template = $output->template_shared_lib;
else if ($this->isSharedApp())
$template = $output->template_shared_app;
else if ($this->isActiveX())
$template = $output->template_activex;
else if ($this->isSafari())
$template = $output->template_activex; //rename template?
else if ($this->isCSProject())
$template = $output->template_csproj;
fputs( $hdl, $tpl->fetch( $template ) );
fclose( $hdl );
}
else
trigger_error( "Could not write output file: " . $output->outputFile, E_USER_ERROR );
if ($output->template_user)
{
$outfile = $output->project_dir . $this->name . $this->projectFileExt .'.'.getenv("COMPUTERNAME").'.'.getenv("USERNAME").'.user';
if( !file_exists( $outfile ) )
{
if( $hdl = fopen( $outfile, 'w' ) )
{
$template = $output->template_user;
fputs( $hdl, $tpl->fetch( $template ) );
fclose( $hdl );
}
else
trigger_error( "Could not write output file: " . $outfile, E_USER_ERROR );
}
}
// Build the .filters file used by VS2010.
if ( $output->template_filter )
{
$filterData = new FilterData();
array_walk( $projectFiles[ $this->name ], array($filterData, 'callback'), '' );
$tpl->assign_by_ref('Folders', $filterData->folders);
$tpl->assign_by_ref('SrcFiles', $filterData->srcFiles);
$tpl->assign_by_ref('IncFiles', $filterData->incFiles);
$tpl->assign_by_ref('OtherFiles', $filterData->otherFiles);
$tpl->register_function( 'gen_uuid', 'gen_uuid' );
$outfile = $output->project_dir . $this->name . $this->projectFileExt . '.filters';
if ( $hdl = fopen( $outfile, 'w' ) )
{
fputs( $hdl, $tpl->fetch( $output->template_filter ) );
fclose( $hdl );
}
}
$this->includes = $saved_includes;
$this->lib_dirs = $saved_lib_dirs;
}
}
}
class FilterData
{
public $folders = array();
public $srcFiles = array();
public $incFiles = array();
public $otherFiles = array();
public function callback( $value, $key, $dir )
{
if ( is_array( $value ) )
{
if ( $dir != '' )
$dirpath = $dir . '\\' . $key;
else
$dirpath = $key;
array_push( $this->folders, $dirpath );
array_walk( $value, array($this, 'callback'), $dirpath );
return;
}
$path = str_replace( '/', '\\', $value->path );
$ext = strrchr( $path, '.' );
if ( $ext == FALSE )
return;
if ( strcasecmp( $ext, '.c' ) == 0 ||
strcasecmp( $ext, '.cpp' ) == 0 ||
strcasecmp( $ext, '.cc' ) == 0 )
$this->srcFiles[$path] = $dir;
else if ( strcasecmp( $ext, '.h' ) == 0 ||
strcasecmp( $ext, '.hpp' ) == 0 ||
strcasecmp( $ext, '.inl' ) == 0 )
$this->incFiles[$path] = $dir;
else
$this->otherFiles[$path] = $dir;
}
} // class FilterData
?>

View file

@ -0,0 +1,111 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
class SafariWebPlugin
{
var $FOLDER = "";
var $GAMEFOLDER = "";
var $PLUGINNAME = "";
var $MIMETYPE = "";
var $DESCRIPTION = "";
var $IDENTIFIER = "";
var $BUNDLE = "";
var $VERSION = "";
function SafariWebPlugin()
{
$rootPhpBuildDir = getcwd();
$this->FOLDER = $rootPhpBuildDir."/web/source/npplugin/mac/";
$this->GAMEFOLDER = $rootPhpBuildDir."/game/";
$this->PLUGINNAME = WebDeploymentOSX::$safariPluginName;
$this->MIMETYPE = WebDeploymentOSX::$mimeType;
$this->VERSION = WebDeploymentOSX::$version;
$this->DESCRIPTION = WebDeploymentOSX::$description." ".$this->VERSION ;
$this->BUNDLE = WebDeploymentOSX::$safariPluginName;
$this->IDENTIFIER = WebDeploymentOSX::$identifier;
}
function process($project)
{
$this->processTemplates();
}
function readTemplate($filename)
{
$filename = realpath( dirname( $_SERVER[ 'PHP_SELF' ] ) ). "/templates/web/".$filename;
$fh = fopen($filename, 'r');
$data = fread($fh, filesize($filename));
fclose($fh);
return $data;
}
function writeFile($filename, $data)
{
$filename = $this->FOLDER . $filename;
echo($filename);
$fh = fopen($filename, 'w');
fwrite($fh, $data);
fclose($fh);
}
function writeGameFile($filename, $data)
{
$filename = $this->GAMEFOLDER . $filename;
$fh = fopen($filename, 'w');
fwrite($fh, $data);
fclose($fh);
}
function processTemplates()
{
$data = $this->readTemplate("safari_Info_plist.tpl");
$data = str_replace("__CFBundleExecutable__", $this->BUNDLE, $data);
$data = str_replace("__CFBundleIdentifier__", $this->IDENTIFIER, $data);
$data = str_replace("__WebPluginDescription__", $this->DESCRIPTION, $data);
$data = str_replace("__WebPluginMIMEType__", "application/".$this->MIMETYPE, $data);
$data = str_replace("__WebPluginName__", $this->PLUGINNAME, $data);
$data = str_replace("__GameName__", getGameProjectName(), $data);
//TODO: handled by Toolbox
$data = str_replace("__GameInstallPath__", $this->GAMEFOLDER, $data);
$this->writeFile('Info.plist', $data);
WebPlugin::processNPPlugin($this);
}
}
?>

View file

@ -0,0 +1,159 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
//
// Solution info container
//
class Solution
{
public $name;
public $guid;
public $project_refs = array();
public $project_extRefs = array();
public $outputs = array();
public function Solution( $name, $guid, $outputs = null )
{
$this->name = $name;
$this->guid = $guid;
$this->setOutputs( $outputs );
}
public function addProjectRef( $pname )
{
array_push( $this->project_refs, $pname );
}
public function addSolutionProjectRefExt( $pname, $ppath, $pguid )
{
$v = array();
$v[0] = $ppath;
$v[1] = $pguid;
// This is the project GUID for a C# project
// TODO: Add support for C++ projects if need to add them
// as an external project, to date this hasn't been necessary
$v[2] = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}";
$this->project_extRefs[$pname] = $v;
}
public function setOutputs( $outputs )
{
if( isset( $outputs ) )
$this->outputs = array_merge( $this->outputs, $outputs );
}
public function generate( $tpl, $platform, $root_dir )
{
// Project container for templates
$projects = array();
$refs = array();
// make sure that startup project is the first in the solution
if (getGameProjectName())
array_push( $refs, getGameProjectName() );
foreach( $this->project_refs as $pname )
{
if (getGameProjectName() && $pname == getGameProjectName())
continue;
array_push( $refs, $pname );
}
// Look up each project ref and add its info to the list
foreach( $refs as $pname )
{
$project = Generator::lookupProjectByName( $pname );
if( isset( $project ) )
{
echo( " - project ref: " . $pname . " = " . $project->guid . "\n" );
array_push( $projects, $project );
// Let the project update any dependencies
$project->validateDependencies();
}
else
trigger_error( "Solution::generate() - project ref not found: " . $pname . "\n", E_USER_ERROR );
}
// No use going forward if there were no projects for this solution is there?
// (Would we ever want to generate an empty solution at all?)
if( count( $projects ) == 0 )
{
echo( "Solution::generate() - no project refs found for solution: " . $this->name . "\n" );
continue;
}
//
//sort( $projects );
// Set smarty params that dont change during loop once here
$tpl->assign_by_ref( "solution_guid", $this->guid );
$tpl->assign_by_ref( "projects", $projects );
$tpl->assign_by_ref( "projectExtRefs", $this->project_extRefs );
// Generate a solution file for all outputs for this solution
foreach( $this->outputs as $output )
{
// Supported platform?
if( !$output->supportsPlatform( $platform ) )
{
//echo( " # Skipping output: '$outputName'.\n" );
continue;
}
// Reset to base dir
chdir( $root_dir );
// Then offset
if( !FileUtil::prepareOutputDir( $output->output_dir ) || !$output->template_sln )
continue;
$outfile = $this->name . $output->solution_ext;
echo( " - Writing solution file: " . $output->output_dir . "/" . $outfile );
// Project filenames are <projectname>.<outputext> where ext is set per output.
// The template builds each project output using the project name and this ext.
$tpl->assign_by_ref( "project_ext", $output->output_ext );
if( $f = fopen( $outfile, 'w' ) )
{
fputs( $f, $tpl->fetch( $output->template_sln ) );
fclose( $f );
echo( " - success " . "\n" );
}
else
trigger_error( "\nCould not write output file: " . $outfile, E_USER_ERROR );
}
}
}
?>

View file

@ -0,0 +1,267 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
// This class wraps up some project generator specific stuff for the Torque 3D project itself
// simplifying the per project setup, while still allowing the engine to have modules plugged in
class Torque3D
{
static $sharedConfig = true;
static $projectName = "";
static function includeDefaultLibs()
{
// Libs
includeLib( 'mng' );
includeLib( 'png' );
includeLib( 'ungif' );
includeLib( 'zlib' );
includeLib( 'jpeg' );
includeLib( 'tinyxml' );
includeLib( 'opcode' );
includeLib( 'squish' );
includeLib( 'collada_dom' );
includeLib( 'pcre' );
includeLib( 'convexDecomp' );
// Use FMOD on consoles
if ( Generator::$platform != "360" && Generator::$platform != "ps3" )
{
includeLib( 'libvorbis' );
includeLib( 'libogg' );
includeLib( 'libtheora' );
}
}
static function beginConfig( $platform, $projectName )
{
setPlatform( $platform );
beginProject( $projectName, self::$sharedConfig );
self::includeDefaultLibs();
$ext = "DLL";
if ( Generator::$platform == "mac" )
$ext = "Bundle";
//some platforms will not want a shared config
if ( Generator::$platform == "360" || Generator::$platform == "ps3" )
self::$sharedConfig = false;
//begin either a shared lib config, or a static app config
if ( self::$sharedConfig )
beginSharedLibConfig( getGameProjectName().' '.$ext, '{C0FCDFF9-E125-412E-87BC-2D89DB971CAB}', 'game', getGameProjectName() );
else
beginAppConfig( getGameProjectName(), '{C0FCDFF9-E125-412E-87BC-2D89DB971CAB}', 'game', getGameProjectName() );
/// Prefs
addProjectDefine( 'TORQUE_SHADERGEN' );
addProjectDefine( 'TORQUE_UNICODE' );
if ( self::$sharedConfig )
addProjectDefine( 'TORQUE_SHARED' );
/// For OPCODE
addProjectDefine( 'BAN_OPCODE_AUTOLINK' );
addProjectDefine( 'ICE_NO_DLL' );
addProjectDefine( 'TORQUE_OPCODE' );
// For libTomCrypt
addProjectDefine( 'LTC_NO_PROTOTYPES' );
// Additional includes
addIncludePath( "../../game/shaders" );
addLibIncludePath( "lmng" );
addLibIncludePath( "lpng" );
addLibIncludePath( "ljpeg" );
addLibIncludePath( "lungif" );
addLibIncludePath( "zlib" );
addLibIncludePath( "tinyxml" );
addLibIncludePath( "opcode" );
addLibIncludePath( "squish" );
addLibIncludePath( 'convexDecomp' );
if ( Generator::$platform != "360" && Generator::$platform != "ps3" )
{
addLibIncludePath( "libvorbis/include" );
addLibIncludePath( "libogg/include" );
addLibIncludePath( "libtheora/include" );
}
// Modules
includeModule( 'core' );
includeModule( 'dsound' );
//includeModule( 'fmod'); // FMOD support removed until made as a 3rd party library
includeModule( 'T3D' );
includeModule( 'advancedLighting' );
includeModule( 'basicLighting' );
includeModule( 'collada' );
if ( Generator::$platform != "360" && Generator::$platform != "ps3" )
{
includeModule( 'vorbis' );
includeModule( 'theora' );
}
if(Generator::$platform == "mac" || Generator::$platform == "win32")
includeModule( 'openal' );
// Dependencies
addProjectDependency( 'lmng' );
addProjectDependency( 'lpng' );
addProjectDependency( 'lungif' );
addProjectDependency( 'ljpeg' );
addProjectDependency( 'zlib' );
addProjectDependency( 'tinyxml' );
addProjectDependency( 'opcode' );
addProjectDependency( 'squish' );
addProjectDependency( 'collada_dom' );
addProjectDependency( 'pcre' );
addProjectDependency( 'convexDecomp' );
if ( Generator::$platform != "360" && Generator::$platform != "ps3" )
{
addProjectDependency( 'libvorbis' );
addProjectDependency( 'libogg' );
addProjectDependency( 'libtheora' );
}
if ( Generator::$platform == "mac" )
{
addProjectDefine( '__MACOSX__' );
addProjectDefine( 'LTM_DESC' );
}
if (Generator::$platform == "win32")
{
setProjectModuleDefinitionFile('../../' . getLibSrcDir() . 'Torque3D/msvc/torque3d.def');
addProjectDefine( 'UNICODE' );
addProjectDefine( 'INITGUID' );
addProjectDefine( '_CRT_SECURE_NO_DEPRECATE' );
addProjectLibInput('COMCTL32.LIB');
addProjectLibInput('COMDLG32.LIB');
addProjectLibInput('USER32.LIB');
addProjectLibInput('ADVAPI32.LIB');
addProjectLibInput('GDI32.LIB');
addProjectLibInput('WINMM.LIB');
addProjectLibInput('WSOCK32.LIB');
addProjectLibInput('vfw32.lib');
addProjectLibInput('Imm32.lib');
addProjectLibInput('d3d9.lib');
addProjectLibInput('d3dx9.lib');
addProjectLibInput('DxErr.lib');
addProjectLibInput('ole32.lib');
addProjectLibInput('shell32.lib');
addProjectLibInput('oleaut32.lib');
addProjectLibInput('version.lib');
}
// Include project specific sources in the project/buildFiles/config/projectCode.conf
$projectCode = realpath($argv[1])."/buildFiles/config/projectCode.conf";
echo( "\n - Loading project code configuration from ".$projectCode."\n");
include $projectCode;
}
static function endConfig()
{
//end shared/static config
if ( self::$sharedConfig )
endSharedLibConfig();
else
endAppConfig();
//add the shared application only if this is a shared config
if ( self::$sharedConfig )
{
/////// Application Config
beginSharedAppConfig( getGameProjectName(), '{CDECDFF9-E125-523F-87BC-2D89DB971CAB}' );
addProjectDefine( 'TORQUE_SHARED' );
addEngineSrcDir( 'main' );
if (Generator::$platform == "win32")
{
addProjectDefine( 'WIN32' );
addProjectDependency( getGameProjectName() . ' DLL' );
}
if (Generator::$platform == "mac")
{
addProjectDefine( '__MACOSX__' );
addProjectDependency( getGameProjectName() . ' Bundle' );
addProjectDependency( getGameProjectName() . ' Plugin' );
}
endSharedAppConfig();
}
// Add solution references for Visual Studio projects
if (Generator::$platform == "win32" || Generator::$platform == "360" || Generator::$platform == "ps3")
{
if ( !self::$sharedConfig )
beginSolutionConfig( getGameProjectName(), '{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}' );
addSolutionProjectRef( getGameProjectName() );
if ( self::$sharedConfig )
addSolutionProjectRef( getGameProjectName() . ' DLL' );
addSolutionProjectRef( 'collada_dom' );
addSolutionProjectRef( 'ljpeg' );
addSolutionProjectRef( 'lmng' );
addSolutionProjectRef( 'lpng' );
addSolutionProjectRef( 'lungif' );
addSolutionProjectRef( 'opcode' );
addSolutionProjectRef( 'pcre' );
addSolutionProjectRef( 'squish' );
addSolutionProjectRef( 'tinyxml' );
addSolutionProjectRef( 'zlib' );
addSolutionProjectRef( 'convexDecomp' );
if (Generator::$platform == "win32")
{
addSolutionProjectRef( 'libogg' );
addSolutionProjectRef( 'libvorbis' );
addSolutionProjectRef( 'libtheora' );
}
if ( !self::$sharedConfig )
endSolutionConfig();
}
endProject(self::$sharedConfig);
}
}
?>

View file

@ -0,0 +1,85 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
// settings/logic shared by plugins
class WebPlugin
{
static $SAMPLE_HTML = "";
static $GAME_FOLDER = "";
static function readTemplate()
{
$filename = realpath( dirname( $_SERVER[ 'PHP_SELF' ] ) ). "/templates/web/sample_html.tpl";
$fh = fopen($filename, 'r');
$data = fread($fh, filesize($filename));
fclose($fh);
if (!$data)
trigger_error( "WebPlugin::readTemplate() - cannot read HTML template!", E_USER_ERROR );
self::$SAMPLE_HTML = $data;
}
static function processNPPlugin($np)
{
if (!self::$SAMPLE_HTML)
self::readTemplate();
$rootPhpBuildDir = getcwd();
self::$GAME_FOLDER = $rootPhpBuildDir."/game/";
self::$SAMPLE_HTML = str_replace("__MIMETYPE__", $np->MIMETYPE, self::$SAMPLE_HTML);
}
static function processActiveXPlugin($ax)
{
if (!self::$SAMPLE_HTML)
self::readTemplate();
$rootPhpBuildDir = getcwd();
self::$GAME_FOLDER = $rootPhpBuildDir."/game/";
$projID = $ax->WEBGAME_PLUGINNAME.'.'.$ax->WEBGAME_CTRLNAME.'.'.'1';
self::$SAMPLE_HTML = str_replace("__PROJID__", $projID, self::$SAMPLE_HTML);
self::$SAMPLE_HTML = str_replace("__CLSID__", $ax->WEBGAMELIB_UUID, self::$SAMPLE_HTML);
}
static function writeSampleHtml()
{
// no plugins defined
if (!self::$SAMPLE_HTML)
return;
$filename = self::$GAME_FOLDER . "web/sample.html";
$fh = fopen($filename, 'w');
fwrite($fh, self::$SAMPLE_HTML);
fclose($fh);
}
}
?>

View file

@ -0,0 +1,453 @@
<?php
/*
* b3rtWindowsRegistry 1.0
* ===========
* Class for reading from and writing to the Windows registry
*
* Copyright (c) 2008, H. Poort
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * The name the copyright holder may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY H. Poort "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 H. Poort 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.
*
*/
class WindowsRegistry
{
private $RegistryObject;
const HKEY_CLASSES_ROOT = 0x80000000;
const HKEY_CURRENT_USER = 0x80000001;
const HKEY_LOCAL_MACHINE = 0x80000002;
const HKEY_USERS = 0x80000003;
const HKEY_CURRENT_CONFIG = 0x80000005;
const REG_NONE = 0;
const REG_SZ = 1;
const REG_EXPAND_SZ = 2;
const REG_BINARY = 3;
const REG_DWORD = 4;
const REG_MULTI_SZ = 7;
public function __construct()
{
/*$this->WbemLocator = new COM('WbemScripting.SWbemLocator');
$this->WbemServices = $this->WbemLocator->ConnectServer('.', '/root/default');
$this->WbemServices->Security_->ImpersonationLevel = 0x3;
$this->RegObject = $this->WbemServices->Get('StdRegProv');*/
// Get the WMI StdRegProv class
try
{
$this->RegistryObject = new COM('WINMGMTS:{impersonationLevel=impersonate}!//./root/default:StdRegProv');
}
catch (Exception $ex)
{
$this->RegistryObject = NULL;
throw new Exception('Could not get a connection to the registry.');
}
}
public function __destruct()
{
unset($this->RegistryObject);
}
public function ReadValue($keyPath, $valueName, $asString = FALSE)
{
$hKeyId = 0;
$subKey = '';
if (!$this->SplitKeyPath($keyPath, $hKeyId, $subKey))
return NULL;
$valueType = $this->GetValueType($hKeyId, $subKey, $valueName);
if (-1 == $valueType)
return NULL;
switch ($valueType)
{
case self::REG_NONE: // No support for REG_NONE
return NULL;
case self::REG_SZ:
return $this->GetStringValue($hKeyId, $subKey, $valueName);
case self::REG_EXPAND_SZ:
return $this->GetExpandedStringValue($hKeyId, $subKey, $valueName);
case self::REG_BINARY:
return $this->GetBinaryValue($hKeyId, $subKey, $valueName, $asString);
case self::REG_DWORD:
return $this->GetDWORDValue($hKeyId, $subKey, $valueName, $asString);
case self::REG_MULTI_SZ:
return $this->GetMultiStringValue($hKeyId, $subKey, $valueName, $asString);
}
}
public function WriteValue($keyPath, $valueName, $valueContents, $forceType = -1)
{
$hKeyId = 0;
$subKey = '';
if (!$this->SplitKeyPath($keyPath, $hKeyId, $subKey))
return FALSE;
if (!$this->CreateKey($keyPath))
return FALSE;
if (-1 != $forceType)
$valueType = $forceType;
else
$valueType = $this->GetValueType($hKeyId, $subKey, $valueName);
if (self::REG_NONE == $valueType) // No support for REG_NONE
return FALSE;
if (-1 == $valueType) // valueType unknown
{
if (is_string($valueContents))
$valueType = self::REG_SZ;
else if (is_int($valueContents))
$valueType = self::REG_DWORD;
else if (is_array($valueContents) && count($valueContents))
{
if (is_string($valueContents[0]))
$valueType = self::REG_MULTI_SZ;
else if (is_int($valueContents[0]))
$valueType = self::REG_BINARY;
}
}
if (-1 == $valueType) // valueType still unknown, leave
return FALSE;
$result = -1;
if ((self::REG_SZ == $valueType) || (self::REG_EXPAND_SZ == $valueType))
{
//if (!is_string($valueContents))
// $valueContents = strval($valueContents);
if (self::REG_SZ == $valueType)
$result = $this->RegistryObject->SetStringValue($hKeyId, $subKey, $valueName, $valueContents);
else
$result = $this->RegistryObject->SetExpandedStringValue($hKeyId, $subKey, $valueName, $valueContents);
}
else if (self::REG_DWORD == $valueType)
{
//if (!is_int($valueContents))
// $valueContents = intval($valueContents);
$result = $this->RegistryObject->SetDWORDValue($hKeyId, $subKey, $valueName, $valueContents);
}
else if (self::REG_MULTI_SZ == $valueType)
{
if (!is_array($valueContents) || !is_string($valueContents[0]))
return FALSE;
$result = $this->RegistryObject->SetMultiStringValue($hKeyId, $subKey, $valueName, $valueContents);
}
else if (self::REG_BINARY == $valueType)
{
if (!is_array($valueContents) || !is_int($valueContents[0]))
return FALSE;
$result = $this->RegistryObject->SetBinaryValue($hKeyId, $subKey, $valueName, $valueContents);
}
return (0 == $result);
}
public function DeleteValue($keyPath, $valueName)
{
$hKeyId = 0;
$subKey = '';
if (!$this->SplitKeyPath($keyPath, $hKeyId, $subKey))
return FALSE;
return ($this->RegistryObject->DeleteValue($hKeyId, $subKey, $valueName) == 0);
}
public function GetValueNames($keyPath, $includeTypes = FALSE)
{
$hKeyId = 0;
$subKey = '';
if (!$this->SplitKeyPath($keyPath, $hKeyId, $subKey))
return FALSE;
$valueList = array();
if (!$this->EnumValues($hKeyId, $subKey, $valueList))
return NULL;
if (!$includeTypes)
{
$valueNames = array();
for ($i = 0, $cnt = count($valueList); $i < $cnt; $i++)
$valueNames[] = $valueList[$i][0];
return $valueNames;
}
else
return $valueList;
}
public function CreateKey($keyPath)
{
$hKeyId = 0;
$subKey = '';
if (!$this->SplitKeyPath($keyPath, $hKeyId, $subKey))
return FALSE;
return ($this->RegistryObject->CreateKey($hKeyId, $subKey) == 0);
}
public function DeleteKey($keyPath, $deleteSubkeys = FALSE)
{
$hKeyId = 0;
$subKey = '';
if (!$this->SplitKeyPath($keyPath, $hKeyId, $subKey))
return FALSE;
if (!$deleteSubkeys)
return ($this->RegistryObject->DeleteKey($hKeyId, $subKey) == 0);
else
{
if (!function_exists('deleteSubKeysRecursive'))
{
function deleteSubKeysRecursive(&$thisRef, $hKeyId, $subKey)
{
$mapHkeysToString = array(
WindowsRegistry::HKEY_CLASSES_ROOT => 'HKEY_CLASSES_ROOT',
WindowsRegistry::HKEY_CURRENT_USER => 'HKEY_CURRENT_USER',
WindowsRegistry::HKEY_LOCAL_MACHINE => 'HKEY_LOCAL_MACHINE',
WindowsRegistry::HKEY_USERS => 'HKEY_USERS',
WindowsRegistry::HKEY_CURRENT_CONFIG => 'HKEY_CURRENT_CONFIG');
if (!isset($mapHkeysToString[$hKeyId]))
return FALSE;
$subKeys = $thisRef->GetSubKeys($mapHkeysToString[$hKeyId] . '\\' . $subKey);
if ($subKeys)
{
for ($i = 0, $cnt = count($subKeys); $i < $cnt; $i++)
{
if (!deleteSubKeysRecursive($thisRef, $hKeyId, $subKey . '\\' . $subKeys[$i]))
return FALSE;
}
}
return ($thisRef->DeleteKey($mapHkeysToString[$hKeyId] . '\\' . $subKey));
}
}
return deleteSubKeysRecursive($this, $hKeyId, $subKey);
}
}
public function GetSubKeys($keyPath)
{
$hKeyId = 0;
$subKey = '';
if (!$this->SplitKeyPath($keyPath, $hKeyId, $subKey))
return FALSE;
$keyList = array();
if (!$this->EnumKeys($hKeyId, $subKey, $keyList))
return NULL;
return $keyList;
}
public function KeyExists($keyPath)
{
$hKeyId = 0;
$subKey = '';
if (!$this->SplitKeyPath($keyPath, $hKeyId, $subKey))
return FALSE;
return ($this->RegistryObject->EnumValues($hKeyId, $subKey, new VARIANT(), new VARIANT()) == 0);
}
// PRIVATE FUNCTIONS
// ================================
private function SplitKeyPath($keyPath, &$hKeyIdResult, &$subKeyResult)
{
$hKeyIdResult = 0;
$subKeyResult = 'foo';
$splitPath = explode('\\', $keyPath, 2);
if (FALSE === $splitPath)
return FALSE;
else if (count($splitPath) == 1)
$splitPath[1] = '';
$subKeyResult = $splitPath[1];
switch ($splitPath[0])
{
case 'HKEY_CLASSES_ROOT':
$hKeyIdResult = self::HKEY_CLASSES_ROOT;
break;
case 'HKEY_CURRENT_USER':
$hKeyIdResult = self::HKEY_CURRENT_USER;
break;
case 'HKEY_LOCAL_MACHINE':
$hKeyIdResult = self::HKEY_LOCAL_MACHINE;
break;
case 'HKEY_USERS':
$hKeyIdResult = self::HKEY_USERS;
break;
case 'HKEY_CURRENT_CONFIG':
$hKeyIdResult = self::HKEY_CURRENT_CONFIG;
break;
default:
return FALSE;
}
return TRUE;
}
private function EnumKeys($hKeyId, $subKey, &$keyList)
{
$keyNames = new VARIANT();
if ($this->RegistryObject->EnumKey($hKeyId, $subKey, $keyNames) != 0)
return FALSE;
$keyList = array();
if (variant_get_type($keyNames) == (VT_VARIANT | VT_ARRAY))
{
for ($i = 0, $cnt = count($keyNames); $i < $cnt; $i++)
$keyList[] = strval($keyNames[$i]);
}
return TRUE;
}
private function EnumValues($hKeyId, $subKey, &$valueList)
{
$valueNames = new VARIANT();
$valueTypes = new VARIANT();
if ($this->RegistryObject->EnumValues($hKeyId, $subKey, $valueNames, $valueTypes) != 0)
return FALSE;
$valueList = array();
if (variant_get_type($valueNames) == (VT_VARIANT | VT_ARRAY))
{
for ($i = 0, $cnt = count($valueNames); $i < $cnt; $i++)
$valueList[] = array(strval($valueNames[$i]), intval($valueTypes[$i]));
}
else // Handle a bug in StdRegProv's EnumValues (http://groups.google.com/group/microsoft.public.win32.programmer.wmi/browse_thread/thread/d74c0ca865887e6b)
{
if ($this->GetStringValue($hKeyId, $subKey, '') != NULL)
$valueList[] = array('', self::REG_SZ);
else if ($this->GetDWORDValue($hKeyId, $subKey, '') != NULL)
$valueList[] = array('', self::REG_DWORD);
else if ($this->GetExpandedStringValue($hKeyId, $subKey, '') != NULL)
$valueList[] = array('', self::REG_EXPAND_SZ);
else if ($this->GetBinaryValue($hKeyId, $subKey, '') != NULL)
$valueList[] = array('', self::REG_BINARY);
else if ($this->GetMultiStringValue($hKeyId, $subKey, '') != NULL)
$valueList[] = array('', self::REG_MULTI_SZ);
}
return TRUE;
}
private function GetValueType($hKeyId, $subKey, $valueName)
{
$valueList = array();
if (!$this->EnumValues($hKeyId, $subKey, $valueList))
return -1;
for ($i = 0, $cnt = count($valueList); $i < $cnt; $i++)
{
if ($valueList[$i][0] == $valueName)
return $valueList[$i][1];
}
return -1;
}
private function GetStringValue($hKeyId, $subKey, $valueName)
{
$stringValue = new VARIANT();
return (($this->RegistryObject->GetStringValue($hKeyId, $subKey, $valueName, $stringValue) == 0) ?
strval($stringValue) : NULL);
}
private function GetExpandedStringValue($hKeyId, $subKey, $valueName)
{
$expandStringValue = new VARIANT();
return ((0 == $this->RegistryObject->GetExpandedStringValue($hKeyId, $subKey, $valueName, $expandStringValue)) ?
strval($expandStringValue) : NULL);
}
private function GetBinaryValue($hKeyId, $subKey, $valueName, $asString = FALSE)
{
$binaryValue = new VARIANT();
if ($this->RegistryObject->GetBinaryValue($hKeyId, $subKey, $valueName, $binaryValue) != 0)
return NULL;
if ($asString)
{
$result = '';
for ($i = 0, $cnt = count($binaryValue); $i < $cnt; $i++)
$result .= dechex($binaryValue[$i]) . ((($cnt - 1) != $i) ? ' ' : '');
}
else
{
$result = array();
for ($i = 0, $cnt = count($binaryValue); $i < $cnt; $i++)
$result .= intval($binaryValue[$i]);
}
return $result;
}
private function GetDWORDValue($hKeyId, $subKey, $valueName, $asString = FALSE)
{
$dwordValue = new VARIANT();
return (($this->RegistryObject->GetDWORDValue($hKeyId, $subKey, $valueName, $dwordValue) == 0) ?
($asString ? strval($dwordValue) : intval($dwordValue)) : NULL);
}
private function GetMultiStringValue($hKeyId, $subKey, $valueName, $asString = FALSE)
{
$multiStringValue = new VARIANT();
if ($this->RegistryObject->GetMultiStringValue($hKeyId, $subKey, $valueName, $multiStringValue) != 0)
return NULL;
if ($asString)
{
$result = '';
for ($i = 0, $cnt = count($multiStringValue); $i < $cnt; $i++)
$result .= strval($multiStringValue[$i]) . ((($cnt - 1) != $i) ? "\n" : '');
}
else
{
$result = array();
for ($i = 0, $cnt = count($multiStringValue); $i < $cnt; $i++)
$result[] = strval($multiStringValue[$i]);
}
return $result;
}
}
?>

View file

@ -0,0 +1,895 @@
<?php
/**
* CFPropertyList
* {@link http://developer.apple.com/documentation/Darwin/Reference/ManPages/man5/plist.5.html Property Lists}
* @author Rodney Rehm <rodney.rehm@medialize.de>
* @author Christian Kruse <cjk@wwwtech.de>
* @package plist
* @version $Id$
*/
/**
* Facility for reading and writing binary PropertyLists. Ported from {@link http://www.opensource.apple.com/source/CF/CF-476.15/CFBinaryPList.c CFBinaryPList.c}.
* @author Rodney Rehm <rodney.rehm@medialize.de>
* @author Christian Kruse <cjk@wwwtech.de>
* @package plist
* @example example-read-02.php Read a Binary PropertyList
* @example example-read-03.php Read a PropertyList without knowing the type
*/
abstract class CFBinaryPropertyList {
/**
* Table containing uniqued objects
* @var array
*/
protected $uniqueTable = Array();
/**
* Number of objects in file
* @var integer
*/
protected $countObjects = 0;
/**
* The length of all strings in the file (byte length, not character length)
* @var integer
*/
protected $stringSize = 0;
/**
* The length of all ints in file (byte length)
* @var integer
*/
protected $intSize = 0;
/**
* The length of misc objects (i.e. not integer and not string) in file
* @var integer
*/
protected $miscSize = 0;
/**
* Number of object references in file (needed to calculate reference byte length)
* @var integer
*/
protected $objectRefs = 0;
/**
* Number of objects written during save phase; needed to calculate the size of the object table
* @var integer
*/
protected $writtenObjectCount = 0;
/**
* Table containing all objects in the file
*/
protected $objectTable = Array();
/**
* The size of object references
*/
protected $objectRefSize = 0;
/**
* The „offsets” (i.e. the different entries) in the file
*/
protected $offsets = Array();
/**
* Read a „null type” (filler byte, true, false, 0 byte)
* @param $length The byte itself
* @return the byte value (e.g. CFBoolean(true), CFBoolean(false), 0 or 15)
* @throws PListException on encountering an unknown null type
*/
protected function readBinaryNullType($length) {
switch($length) {
case 0: return 0; // null type
case 8: return new CFBoolean(false);
case 9: return new CFBoolean(true);
case 15: return 15; // fill type
}
throw new PListException("unknown null type: $length");
}
/**
* Create an 64 bit integer using bcmath or gmp
* @param int $hi The higher word
* @param int $lo The lower word
* @return mixed The integer (as int if possible, as string if not possible)
* @throws PListException if neither gmp nor bc available
*/
protected static function make64Int($hi,$lo) {
// on x64, we can just use int
if(PHP_INT_SIZE > 4) return (((int)$hi)<<32) | ((int)$lo);
// lower word has to be unsigned since we don't use bitwise or, we use bcadd/gmp_add
$lo = sprintf("%u", $lo);
// use GMP or bcmath if possible
if(function_exists("gmp_mul")) return gmp_strval(gmp_add(gmp_mul($hi, "4294967296"), $lo));
if(function_exists("bcmul")) return bcadd(bcmul($hi,"4294967296"), $lo);
throw new PListException("either gmp or bc has to be installed!");
}
/**
* Read an integer value
* @param string $fname The filename of the file we're reading from
* @param ressource $fd The file descriptor we're reading from
* @param integer $length The length (in bytes) of the integer value, coded as „set bit $length to 1
* @return CFNumber The integer value
* @throws PListException if integer val is invalid
* @throws IOException if read error occurs
*/
protected function readBinaryInt($fname,$fd,$length) {
if($length > 3) throw new PListException("Integer greater than 8 bytes: $length");
$nbytes = 1 << $length;
$val = null;
if(strlen($buff = fread($fd, $nbytes)) != $nbytes) throw IOException::readError($fname);
switch($length) {
case 0:
$val = unpack("C", $buff);
$val = $val[1];
break;
case 1:
$val = unpack("n", $buff);
$val = $val[1];
break;
case 2:
$val = unpack("N", $buff);
$val = $val[1];
break;
case 3:
$words = unpack("Nhighword/Nlowword",$buff);
//$val = $words['highword'] << 32 | $words['lowword'];
$val = self::make64Int($words['highword'],$words['lowword']);
break;
}
return new CFNumber($val);
}
/**
* Read a real value
* @param string $fname The filename of the file we're reading from
* @param ressource $fd The file descriptor we're reading from
* @param integer $length The length (in bytes) of the integer value, coded as „set bit $length to 1
* @return CFNumber The real value
* @throws PListException if real val is invalid
* @throws IOException if read error occurs
*/
protected function readBinaryReal($fname,$fd,$length) {
if($length > 3) throw new PListException("Real greater than 8 bytes: $length");
$nbytes = 1 << $length;
$val = null;
if(strlen($buff = fread($fd, $nbytes)) != $nbytes) throw IOException::readError($fname);
switch($length) {
case 0: // 1 byte float? must be an error
case 1: // 2 byte float? must be an error
$x = $length + 1;
throw new PListException("got {$x} byte float, must be an error!");
case 2:
$val = unpack("f", strrev($buff));
$val = $val[1];
break;
case 3:
$val = unpack("d", strrev($buff));
$val = $val[1];
break;
}
return new CFNumber($val);
}
/**
* Read a date value
* @param string $fname The filename of the file we're reading from
* @param ressource $fd The file descriptor we're reading from
* @param integer $length The length (in bytes) of the integer value, coded as „set bit $length to 1
* @return CFDate The date value
* @throws PListException if date val is invalid
* @throws IOException if read error occurs
*/
protected function readBinaryDate($fname,$fd,$length) {
if($length > 3) throw new PListException("Date greater than 8 bytes: $length");
$nbytes = 1 << $length;
$val = null;
if(strlen($buff = fread($fd, $nbytes)) != $nbytes) throw IOException::readError($fname);
switch($length) {
case 0: // 1 byte CFDate is an error
case 1: // 2 byte CFDate is an error
$x = $length + 1;
throw new PListException("{$x} byte CFdate, error");
case 2:
$val = unpack("f", strrev($buff));
$val = $val[1];
break;
case 3:
$val = unpack("d", strrev($buff));
$val = $val[1];
break;
}
return new CFDate($val,CFDate::TIMESTAMP_APPLE);
}
/**
* Read a data value
* @param string $fname The filename of the file we're reading from
* @param ressource $fd The file descriptor we're reading from
* @param integer $length The length (in bytes) of the integer value, coded as „set bit $length to 1
* @return CFData The data value
* @throws IOException if read error occurs
*/
protected function readBinaryData($fname,$fd,$length) {
if(strlen($buff = fread($fd, $length)) != $length) throw IOException::readError($fname);
return new CFData($buff,false);
}
/**
* Read a string value, usually coded as utf8
* @param string $fname The filename of the file we're reading from
* @param ressource $fd The file descriptor we're reading from
* @param integer $length The length (in bytes) of the string value
* @return CFString The string value, utf8 encoded
* @throws IOException if read error occurs
*/
protected function readBinaryString($fname,$fd,$length) {
if(strlen($buff = fread($fd, $length)) != $length) throw IOException::readError($fname);
if(!isset($this->uniqueTable[$buff])) $this->uniqueTable[$buff] = true;
return new CFString($buff);
}
/**
* Convert the given string from one charset to another.
* Trying to use MBString, Iconv, Recode - in that particular order.
* @param string $string the string to convert
* @param string $fromCharset the charset the given string is currently encoded in
* @param string $toCharset the charset to convert to, defaults to UTF-8
* @return string the converted string
* @throws PListException on neither MBString, Iconv, Recode being available
*/
public static function convertCharset($string, $fromCharset, $toCharset='UTF-8') {
if(function_exists('mb_convert_encoding')) return mb_convert_encoding($string, $toCharset, $fromCharset);
if(function_exists('iconv')) return iconv($fromCharset, $toCharset, $string);
if(function_exists('recode_string')) return recode_string($fromCharset .'..'. $toCharset, $string);
throw new PListException('neither iconv nor mbstring supported. how are we supposed to work on strings here?');
}
/**
* Count characters considering character set
* Trying to use MBString, Iconv - in that particular order.
* @param string $string the string to convert
* @param string $charset the charset the given string is currently encoded in
* @return integer The number of characters in that string
* @throws PListException on neither MBString, Iconv being available
*/
public static function charsetStrlen($string,$charset="UTF-8") {
if(function_exists('mb_strlen')) return mb_strlen($string, $charset);
if(function_exists('iconv_strlen')) return iconv($string,$charset);
throw new PListException('neither iconv nor mbstring supported. how are we supposed to work on strings here?');
}
/**
* Read a unicode string value, coded as UTF-16BE
* @param string $fname The filename of the file we're reading from
* @param ressource $fd The file descriptor we're reading from
* @param integer $length The length (in bytes) of the string value
* @return CFString The string value, utf8 encoded
* @throws IOException if read error occurs
*/
protected function readBinaryUnicodeString($fname,$fd,$length) {
if(strlen($buff = fread($fd, 2*$length)) != 2*$length) throw IOException::readError($fname);
if(!isset($this->uniqueTable[$buff])) $this->uniqueTable[$buf] = true;
return new CFString(self::convertCharset($buff,"UTF-8", "UTF-16BE"));
}
/**
* Read an array value, including contained objects
* @param string $fname The filename of the file we're reading from
* @param ressource $fd The file descriptor we're reading from
* @param integer $length The number of contained objects
* @return CFArray The array value, including the objects
* @throws IOException if read error occurs
*/
protected function readBinaryArray($fname,$fd,$length) {
$ary = new CFArray();
// first: read object refs
if($length != 0) {
if(strlen($buff = fread($fd, $length * $this->objectRefSize)) != $length * $this->objectRefSize) throw IOException::readError($fname);
$objects = unpack($this->objectRefSize == 1 ? "C*" : "n*", $buff);
// now: read objects
for($i=0;$i<$length;++$i) {
$object = $this->readBinaryObjectAt($fname,$fd,$objects[$i+1]+1,$this->objectRefSize);
$ary->add($object);
}
}
return $ary;
}
/**
* Read a dictionary value, including contained objects
* @param string $fname The filename of the file we're reading from
* @param ressource $fd The file descriptor we're reading from
* @param integer $length The number of contained objects
* @return CFDictionary The dictionary value, including the objects
* @throws IOException if read error occurs
*/
protected function readBinaryDict($fname,$fd,$length) {
$dict = new CFDictionary();
// first: read keys
if($length != 0) {
if(strlen($buff = fread($fd, $length * $this->objectRefSize)) != $length * $this->objectRefSize) throw IOException::readError($fname);
$keys = unpack(($this->objectRefSize == 1 ? "C*" : "n*"), $buff);
// second: read object refs
if(strlen($buff = fread($fd, $length * $this->objectRefSize)) != $length * $this->objectRefSize) throw IOException::readError($fname);
$objects = unpack(($this->objectRefSize == 1 ? "C*" : "n*"), $buff);
// read real keys and objects
for($i=0;$i<$length;++$i) {
$key = $this->readBinaryObjectAt($fname,$fd,$keys[$i+1]+1);
$object = $this->readBinaryObjectAt($fname,$fd,$objects[$i+1]+1);
$dict->add($key->getValue(),$object);
}
}
return $dict;
}
/**
* Read an object type byte, decode it and delegate to the correct reader function
* @param string $fname The filename of the file we're reading from
* @param ressource $fd The file descriptor we're reading from
* @return mixed The value of the delegate reader, so any of the CFType subclasses
* @throws IOException if read error occurs
*/
function readBinaryObject($fname,$fd) {
// first: read the marker byte
if(strlen($buff = fread($fd,1)) != 1) throw IOException::readError($fname);
$object_length = unpack("C*", $buff);
$object_length = $object_length[1] & 0xF;
$buff = unpack("H*", $buff);
$buff = $buff[1];
$object_type = substr($buff, 0, 1);
if($object_type != "0" && $object_length == 15) {
$object_length = $this->readBinaryObject($fname,$fd,$this->objectRefSize);
$object_length = $object_length->getValue();
}
$retval = null;
switch($object_type) {
case '0': // null, false, true, fillbyte
$retval = $this->readBinaryNullType($object_length);
break;
case '1': // integer
$retval = $this->readBinaryInt($fname,$fd,$object_length);
break;
case '2': // real
$retval = $this->readBinaryReal($fname,$fd,$object_length);
break;
case '3': // date
$retval = $this->readBinaryDate($fname,$fd,$object_length);
break;
case '4': // data
$retval = $this->readBinaryData($fname,$fd,$object_length);
break;
case '5': // byte string, usually utf8 encoded
$retval = $this->readBinaryString($fname,$fd,$object_length);
break;
case '6': // unicode string (utf16be)
$retval = $this->readBinaryUnicodeString($fname,$fd,$object_length);
break;
case 'a': // array
$retval = $this->readBinaryArray($fname,$fd,$object_length);
break;
case 'd': // dictionary
$retval = $this->readBinaryDict($fname,$fd,$object_length);
break;
}
return $retval;
}
/**
* Read an object type byte at position $pos, decode it and delegate to the correct reader function
* @param string $fname The filename of the file we're reading from
* @param ressource $fd The file descriptor we're reading from
* @param integer $pos The table position in the offsets table
* @return mixed The value of the delegate reader, so any of the CFType subclasses
*/
function readBinaryObjectAt($fname,$fd,$pos) {
$position = $this->offsets[$pos];
fseek($fd,$position,SEEK_SET);
return $this->readBinaryObject($fname,$fd);
}
/**
* Read a binary plist file
* @param string $file The file to read
* @return void
* @throws IOException if read error occurs
*/
function readBinary($file) {
$this->uniqueTable = Array();
$this->countObjects = 0;
$this->stringSize = 0;
$this->intSize = 0;
$this->miscSize = 0;
$this->objectRefs = 0;
$this->writtenObjectCount = 0;
$this->objectTable = Array();
$this->objectRefSize = 0;
$this->offsets = Array();
$fd = fopen($file,"rb");
// first, we read the trailer: 32 byte from the end
fseek($fd,-32,SEEK_END);
$buff = fread($fd,32);
$infos = unpack("x6/Coffset_size/Cobject_ref_size/x4/Nnumber_of_objects/x4/Ntop_object/x4/Ntable_offset",$buff);
// after that, get the offset table
fseek($fd,$infos['table_offset'], SEEK_SET);
$coded_offset_table = fread($fd,$infos['number_of_objects'] * $infos['offset_size']);
if(strlen($coded_offset_table) != $infos['number_of_objects'] * $infos['offset_size']) throw IOException::readError($file);
$this->countObjects = $infos['number_of_objects'];
// decode offset table
$formats = Array("","C*","n*","(H6)*","N*");
$this->offsets = unpack($formats[$infos['offset_size']],$coded_offset_table);
if($infos['offset_size'] == 3) {
foreach($this->offsets as $k => $v) $this->offsets[$k] = hexdec($v);
}
$this->uniqueTable = Array();
$this->objectRefSize = $infos['object_ref_size'];
$top = $this->readBinaryObjectAt($file,$fd,$infos['top_object']+1);
$this->add($top);
fclose($fd);
}
/**
* calculate the bytes needed for a size integer value
* @param integer $int The integer value to calculate
* @return integer The number of bytes needed
*/
public static function bytesSizeInt($int) {
$nbytes = 0;
if($int > 0xE) $nbytes += 2; // 2 size-bytes
if($int > 0xFF) $nbytes += 1; // 3 size-bytes
if($int > 0xFFFF) $nbytes += 2; // 5 size-bytes
return $nbytes;
}
/**
* Calculate the byte needed for a „normal” integer value
* @param integer $int The integer value
* @return integer The number of bytes needed + 1 (because of the „marker byte”)
*/
public static function bytesInt($int) {
$nbytes = 1;
if($int > 0xFF) $nbytes += 1; // 2 byte integer
if($int > 0xFFFF) $nbytes += 2; // 4 byte integer
if($int > 0xFFFFFFFF) $nbytes += 4; // 8 byte integer
if($int < 0) $nbytes += 7; // 8 byte integer (since it is signed)
return $nbytes + 1; // one „marker” byte
}
/**
* „pack” a value (i.e. write the binary representation as big endian to a string) with the specified size
* @param integer $nbytes The number of bytes to pack
* @param integer $int the integer value to pack
* @return string The packed value as string
*/
public static function packItWithSize($nbytes,$int) {
$formats = Array("C", "n", "N", "N");
$format = $formats[$nbytes-1];
$ret = '';
if($nbytes == 3) return substr(pack($format, $int), -3);
return pack($format, $int);
}
/**
* Calculate the bytes needed to save the number of objects
* @param integer $count_objects The number of objects
* @return integer The number of bytes
*/
public static function bytesNeeded($count_objects) {
$nbytes = 0;
while($count_objects >= 1) {
$nbytes++;
$count_objects /= 256;
}
return $nbytes;
}
/**
* Code an integer to byte representation
* @param integer $int The integer value
* @return string The packed byte value
*/
public static function intBytes($int) {
$intbytes = "";
if($int > 0xFFFF) $intbytes = "\x12".pack("N", $int); // 4 byte integer
elseif($int > 0xFF) $intbytes = "\x11".pack("n", $int); // 2 byte integer
else $intbytes = "\x10".pack("C", $int); // 8 byte integer
return $intbytes;
}
/**
* Code an type byte, consisting of the type marker and the length of the type
* @param string $type The type byte value (i.e. "d" for dictionaries)
* @param integer $type_len The length of the type
* @return string The packed type byte value
*/
public static function typeBytes($type,$type_len) {
$optional_int = "";
if($type_len < 15) $type .= sprintf("%x", $type_len);
else {
$type .= "f";
$optional_int = self::intBytes($type_len);
}
return pack("H*", $type).$optional_int;
}
/**
* Count number of objects and create a unique table for strings
* @param $value The value to count and unique
* @return void
*/
protected function uniqueAndCountValues($value) {
// no uniquing for other types than CFString and CFData
if($value instanceof CFNumber) {
$val = $value->getValue();
if(intval($val) == $val && !is_float($val) && strpos($val,'.') === false) $this->intSize += self::bytesInt($val);
else $this->miscSize += 9; // 9 bytes (8 + marker byte) for real
$this->countObjects++;
return;
}
elseif($value instanceof CFDate) {
$this->miscSize += 9; // since date in plist is real, we need 9 byte (8 + marker byte)
$this->countObjects++;
return;
}
elseif($value instanceof CFBoolean) {
$this->countObjects++;
$this->miscSize += 1;
return;
}
elseif($value instanceof CFArray) {
$cnt = 0;
foreach($value as $v) {
++$cnt;
$this->uniqueAndCountValues($v);
$this->objectRefs++; // each array member is a ref
}
$this->countObjects++;
$this->intSize += self::bytesSizeInt($cnt);
$this->miscSize++; // marker byte for array
return;
}
elseif($value instanceof CFDictionary) {
$cnt = 0;
foreach($value as $k => $v) {
++$cnt;
if(!isset($this->uniqueTable[$k])) {
$this->uniqueTable[$k] = 0;
$this->stringSize += strlen($k) + 1;
$this->intSize += self::bytesSizeInt(strlen($k));
}
$this->objectRefs += 2; // both, key and value, are refs
$this->uniqueTable[$k]++;
$this->uniqueAndCountValues($v);
}
$this->countObjects++;
$this->miscSize++; // marker byte for dict
$this->intSize += self::bytesSizeInt($cnt);
return;
}
elseif($value instanceOf CFData) {
$val = $value->getValue();
$this->intSize += self::bytesSizeInt(strlen($val));
$this->miscSize += strlen($val) + 1;
$this->countObjects++;
return;
}
else $val = $value->getValue();
if(!isset($this->uniqueTable[$val])) {
$this->uniqueTable[$val] = 0;
$this->stringSize += strlen($val) + 1;
$this->intSize += self::bytesSizeInt(strlen($val));
}
$this->uniqueTable[$val]++;
}
/**
* Convert CFPropertyList to binary format; since we have to count our objects we simply unique CFDictionary and CFArray
* @return string The binary plist content
*/
public function toBinary() {
$this->uniqueTable = Array();
$this->countObjects = 0;
$this->stringSize = 0;
$this->intSize = 0;
$this->miscSize = 0;
$this->objectRefs = 0;
$this->writtenObjectCount = 0;
$this->objectTable = Array();
$this->objectRefSize = 0;
$this->offsets = Array();
$binary_str = "bplist00";
$value = $this->getValue();
$this->uniqueAndCountValues($value);
$this->countObjects += count($this->uniqueTable);
$this->objectRefSize = self::bytesNeeded($this->countObjects);
$file_size = $this->stringSize + $this->intSize + $this->miscSize + $this->objectRefs * $this->objectRefSize + 40;
$offset_size = self::bytesNeeded($file_size);
$table_offset = $file_size - 32;
$this->objectTable = Array();
$this->writtenObjectCount = 0;
$this->uniqueTable = Array(); // we needed it to calculate several values
$this->getValue()->toBinary($this);
$object_offset = 8;
$offsets = Array();
for($i=0;$i<count($this->objectTable);++$i) {
$binary_str .= $this->objectTable[$i];
$offsets[$i] = $object_offset;
$object_offset += strlen($this->objectTable[$i]);
}
for($i=0;$i<count($offsets);++$i) {
$binary_str .= self::packItWithSize($offset_size, $offsets[$i]);
}
$binary_str .= pack("x6CC", $offset_size, $this->objectRefSize);
$binary_str .= pack("x4N", $this->countObjects);
$binary_str .= pack("x4N", 0);
$binary_str .= pack("x4N", $table_offset);
return $binary_str;
}
/**
* Uniques and transforms a string value to binary format and adds it to the object table
* @param string $val The string value
* @return integer The position in the object table
*/
public function stringToBinary($val) {
$saved_object_count = -1;
if(!isset($this->uniqueTable[$val])) {
$saved_object_count = $this->writtenObjectCount++;
$this->uniqueTable[$val] = $saved_object_count;
$utf16 = false;
for($i=0;$i<strlen($val);++$i) {
if(ord($val{$i}) > 128) {
$utf16 = true;
break;
}
}
if($utf16) {
$bdata = self::typeBytes("6", mb_strlen($val,'UTF-8')); // 6 is 0110, unicode string (utf16be)
$val = self::convertCharset($val, 'UTF-8', 'UTF-16BE');
$this->objectTable[$saved_object_count] = $bdata.$val;
}
else {
$bdata = self::typeBytes("5", strlen($val)); // 5 is 0101 which is an ASCII string (seems to be ASCII encoded)
$this->objectTable[$saved_object_count] = $bdata.$val;
}
}
else $saved_object_count = $this->uniqueTable[$val];
return $saved_object_count;
}
/**
* Codes an integer to binary format
* @param integer $value The integer value
* @return string the coded integer
*/
protected function intToBinary($value) {
$nbytes = 0;
if($value > 0xFF) $nbytes = 1; // 1 byte integer
if($value > 0xFFFF) $nbytes += 1; // 4 byte integer
if($value > 0xFFFFFFFF) $nbytes += 1; // 8 byte integer
if($value < 0) $nbytes = 3; // 8 byte integer, since signed
$bdata = self::typeBytes("1", $nbytes); // 1 is 0001, type indicator for integer
$buff = "";
if($nbytes < 3) {
if($nbytes == 0) $fmt = "C";
elseif($nbytes == 1) $fmt = "n";
else $fmt = "N";
$buff = pack($fmt, $value);
}
else {
if(PHP_INT_SIZE > 4) {
// 64 bit signed integer; we need the higher and the lower 32 bit of the value
$high_word = $value >> 32;
$low_word = $value & 0xFFFFFFFF;
}
else {
// since PHP can only handle 32bit signed, we can only get 32bit signed values at this point - values above 0x7FFFFFFF are
// floats. So we ignore the existance of 64bit on non-64bit-machines
if($value < 0) $high_word = 0xFFFFFFFF;
else $high_word = 0;
$low_word = $value;
}
$buff = pack("N", $high_word).pack("N", $low_word);
}
return $bdata.$buff;
}
/**
* Codes a real value to binary format
* @param float $val The real value
* @return string The coded real
*/
protected function realToBinary($val) {
$bdata = self::typeBytes("2", 3); // 2 is 0010, type indicator for reals
return $bdata.strrev(pack("d", (float)$val));
}
/**
* Converts a numeric value to binary and adds it to the object table
* @param numeric $value The numeric value
* @return integer The position in the object table
*/
public function numToBinary($value) {
$saved_object_count = $this->writtenObjectCount++;
$val = "";
if(intval($value) == $value && !is_float($value) && strpos($value,'.') === false) $val = $this->intToBinary($value);
else $val = $this->realToBinary($value);
$this->objectTable[$saved_object_count] = $val;
return $saved_object_count;
}
/**
* Convert date value (apple format) to binary and adds it to the object table
* @param integer $value The date value
* @return integer The position of the coded value in the object table
*/
public function dateToBinary($val) {
$saved_object_count = $this->writtenObjectCount++;
$hour = gmdate("H",$val);
$min = gmdate("i",$val);
$sec = gmdate("s",$val);
$mday = gmdate("j",$val);
$mon = gmdate("n",$val);
$year = gmdate("Y",$val);
$val = gmmktime($hour,$min,$sec,$mon,$mday,$year) - CFDate::DATE_DIFF_APPLE_UNIX; // CFDate is a real, number of seconds since 01/01/2001 00:00:00 GMT
$bdata = self::typeBytes("3", 3); // 3 is 0011, type indicator for date
$this->objectTable[$saved_object_count] = $bdata.strrev(pack("d", $val));
return $saved_object_count;
}
/**
* Convert a bool value to binary and add it to the object table
* @param bool $val The boolean value
* @return integer The position in the object table
*/
public function boolToBinary($val) {
$saved_object_count = $this->writtenObjectCount++;
$this->objectTable[$saved_object_count] = $val ? "\x9" : "\x8"; // 0x9 is 1001, type indicator for true; 0x8 is 1000, type indicator for false
return $saved_object_count;
}
/**
* Convert data value to binary format and add it to the object table
* @param string $val The data value
* @return integer The position in the object table
*/
public function dataToBinary($val) {
$saved_object_count = $this->writtenObjectCount++;
$bdata = self::typeBytes("4", strlen($val)); // a is 1000, type indicator for data
$this->objectTable[$saved_object_count] = $bdata.$val;
return $saved_object_count;
}
/**
* Convert array to binary format and add it to the object table
* @param CFArray $val The array to convert
* @return integer The position in the object table
*/
public function arrayToBinary($val) {
$saved_object_count = $this->writtenObjectCount++;
$bdata = self::typeBytes("a", count($val->getValue())); // a is 1010, type indicator for arrays
foreach($val as $v) {
$bval = $v->toBinary($this);
$bdata .= self::packItWithSize($this->objectRefSize, $bval);
}
$this->objectTable[$saved_object_count] = $bdata;
return $saved_object_count;
}
/**
* Convert dictionary to binary format and add it to the object table
* @param CFDictionary $val The dict to convert
* @return integer The position in the object table
*/
public function dictToBinary($val) {
$saved_object_count = $this->writtenObjectCount++;
$bdata = self::typeBytes("d", count($val->getValue())); // d=1101, type indicator for dictionary
foreach($val as $k => $v) {
$str = new CFString($k);
$key = $str->toBinary($this);
$bdata .= self::packItWithSize($this->objectRefSize, $key);
}
foreach($val as $k => $v) {
$bval = $v->toBinary($this);
$bdata .= self::packItWithSize($this->objectRefSize, $bval);
}
$this->objectTable[$saved_object_count] = $bdata;
return $saved_object_count;
}
}
?>

View file

@ -0,0 +1,524 @@
<?php
/**
* CFPropertyList
* {@link http://developer.apple.com/documentation/Darwin/Reference/ManPages/man5/plist.5.html Property Lists}
* @author Rodney Rehm <rodney.rehm@medialize.de>
* @author Christian Kruse <cjk@wwwtech.de>
* @package plist
* @version $Id$
* @example example-read-01.php Read an XML PropertyList
* @example example-read-02.php Read a Binary PropertyList
* @example example-read-03.php Read a PropertyList without knowing the type
* @example example-create-01.php Using the CFPropertyList API
* @example example-create-02.php Using CFPropertyList::guess()
* @example example-create-03.php Using CFPropertyList::guess() with {@link CFDate} and {@link CFData}
*/
/**
* Require IOException, PListException, CFType and CFBinaryPropertyList
*/
$plistDirectory = dirname(__FILE__);
require_once($plistDirectory.'/IOException.php');
require_once($plistDirectory.'/PListException.php');
require_once($plistDirectory.'/CFType.php');
require_once($plistDirectory.'/CFBinaryPropertyList.php');
/**
* Property List
* Interface for handling reading, editing and saving Property Lists as defined by Apple.
* @author Rodney Rehm <rodney.rehm@medialize.de>
* @author Christian Kruse <cjk@wwwtech.de>
* @package plist
* @example example-read-01.php Read an XML PropertyList
* @example example-read-02.php Read a Binary PropertyList
* @example example-read-03.php Read a PropertyList without knowing the type
* @example example-create-01.php Using the CFPropertyList API
* @example example-create-02.php Using CFPropertyList::guess()
* @example example-create-03.php Using CFPropertyList::guess() with {@link CFDate} and {@link CFData}
*/
class CFPropertyList extends CFBinaryPropertyList implements Iterator {
/**
* Format constant for binary format
* @var integer
*/
const FORMAT_BINARY = 1;
/**
* Format constant for xml format
* @var integer
*/
const FORMAT_XML = 2;
/**
* Format constant for automatic format recognizing
* @var integer
*/
const FORMAT_AUTO = 0;
/**
* Path of PropertyList
* @var string
*/
protected $file = null;
/**
* Path of PropertyList
* @var integer
*/
protected $format = null;
/**
* CFType nodes
* @var array
*/
protected $value = array();
/**
* Position of iterator {@link http://php.net/manual/en/class.iterator.php}
* @var integer
*/
protected $iteratorPosition = 0;
/**
* List of Keys for numerical iterator access {@link http://php.net/manual/en/class.iterator.php}
* @var array
*/
protected $iteratorKeys = null;
/**
* List of NodeNames to ClassNames for resolving plist-files
* @var array
*/
protected static $types = array(
'string' => 'CFString',
'real' => 'CFNumber',
'integer' => 'CFNumber',
'date' => 'CFDate',
'true' => 'CFBoolean',
'false' => 'CFBoolean',
'data' => 'CFData',
'array' => 'CFArray',
'dict' => 'CFDictionary'
);
/**
* Create new CFPropertyList.
* If a path to a PropertyList is specified, it is loaded automatically.
* @param string $file Path of PropertyList
* @param integer $format he format of the property list, see {@link FORMAT_XML}, {@link FORMAT_BINARY} and {@link FORMAT_AUTO}, defaults to {@link FORMAT_AUTO}
* @throws IOException if file could not be read by {@link load()}
* @uses $file for storing the current file, if specified
* @uses load() for loading the plist-file
*/
public function __construct($file=null,$format=self::FORMAT_AUTO) {
$this->file = $file;
$this->format = $format;
if($this->file) $this->load();
}
/**
* Load an XML PropertyList.
* @param string $file Path of PropertyList, defaults to {@link $file}
* @return void
* @throws IOException if file could not be read
* @throws DOMException if XML-file could not be read properly
* @uses load() to actually load the file
*/
public function loadXML($file=null) {
$this->load($file,CFPropertyList::FORMAT_XML);
}
/**
* Load an binary PropertyList.
* @param string $file Path of PropertyList, defaults to {@link $file}
* @return void
* @throws IOException if file could not be read
* @throws PListException if binary plist-file could not be read properly
* @uses load() to actually load the file
*/
public function loadBinary($file=null) {
$this->load($file,CFPropertyList::FORMAT_BINARY);
}
/**
* Load a plist file.
* Load and import a plist file.
* @param string $file Path of PropertyList, defaults to {@link $file}
* @param integer $format The format of the property list, see {@link FORMAT_XML}, {@link FORMAT_BINARY} and {@link FORMAT_AUTO}, defaults to {@link $format}
* @return void
* @throws PListException if file format version is not 00
* @throws IOException if file could not be read
* @throws DOMException if plist file could not be parsed properly
* @uses $file if argument $file was not specified
* @uses $value reset to empty array
* @uses import() for importing the values
*/
public function load($file=null,$format=null) {
$file = $file ? $file : $this->file;
$format = $format !== null ? $format : $this->format;
$this->value = array();
if(!is_readable($file)) throw IOException::notReadable($file);
switch($format) {
case CFPropertyList::FORMAT_BINARY:
$this->readBinary($file);
break;
case CFPropertyList::FORMAT_AUTO: // what we now do is ugly, but neccessary to recognize the file format
$fd = fopen($file,"rb");
if(($magic_number = fread($fd,8)) === false) throw IOException::notReadable($file);
fclose($fd);
$filetype = substr($magic_number,0,6);
$version = substr($magic_number,-2);
if($filetype == "bplist") {
if($version != "00") throw new PListException("Wrong file format version! Expected 00, got $version!");
$this->readBinary($file);
break;
}
// else: xml format, break not neccessary
case CFPropertyList::FORMAT_XML:
$doc = new DOMDocument();
if(!$doc->load($file)) throw new DOMException();
$this->import($doc->documentElement, $this);
break;
}
}
/**
* Convert a DOMNode into a CFType.
* @param DOMNode $node Node to import children of
* @param CFDictionary|CFArray|CFPropertyList $parent
* @return void
*/
protected function import(DOMNode $node, $parent) {
// abort if there are no children
if(!$node->childNodes->length) return;
foreach($node->childNodes as $n) {
// skip if we can't handle the element
if(!isset(self::$types[$n->nodeName])) continue;
$class = self::$types[$n->nodeName];
$key = null;
// find previous <key> if possible
$ps = $n->previousSibling;
while($ps && $ps->nodeName == '#text' && $ps->previousSibling) $ps = $ps->previousSibling;
// read <key> if possible
if($ps && $ps->nodeName == 'key') $key = $ps->firstChild->nodeValue;
switch($n->nodeName) {
case 'date':
$value = new $class(CFDate::dateValue($n->nodeValue));
break;
case 'data':
$value = new $class($n->nodeValue,true);
break;
case 'string':
$value = new $class($n->nodeValue);
break;
case 'real':
case 'integer':
$value = new $class($n->nodeName == 'real' ? floatval($n->nodeValue) : intval($n->nodeValue));
break;
case 'true':
case 'false':
$value = new $class($n->nodeName == 'true');
break;
case 'array':
case 'dict':
$value = new $class();
$this->import($n, $value);
break;
}
// Dictionaries need a key
if($parent instanceof CFDictionary) $parent->add($key, $value);
// others don't
else $parent->add($value);
}
}
/**
* Convert CFPropertyList to XML and save to file.
* @param string $file Path of PropertyList, defaults to {@link $file}
* @return void
* @throws IOException if file could not be read
* @uses $file if $file was not specified
*/
public function saveXML($file) {
$this->save($file,CFPropertyList::FORMAT_XML);
}
/**
* Convert CFPropertyList to binary format (bplist00) and save to file.
* @param string $file Path of PropertyList, defaults to {@link $file}
* @return void
* @throws IOException if file could not be read
* @uses $file if $file was not specified
*/
public function saveBinary($file) {
$this->save($file,CFPropertyList::FORMAT_BINARY);
}
/**
* Convert CFPropertyList to XML or binary and save to file.
* @param string $file Path of PropertyList, defaults to {@link $file}
* @param string $format Format of PropertyList, defaults to {@link $format}
* @return void
* @throws IOException if file could not be read
* @throws PListException if evaluated $format is neither {@link FORMAT_XML} nor {@link FORMAL_BINARY}
* @uses $file if $file was not specified
* @uses $format if $format was not specified
*/
public function save($file=null,$format=null) {
$file = $file ? $file : $this->file;
$format = $format ? $format : $this->format;
if( !in_array( $format, array( self::FORMAT_BINARY, self::FORMAT_XML ) ) )
throw new PListException( "format {$format} is not supported, use CFPropertyList::FORMAT_BINARY or CFPropertyList::FORMAT_XML" );
if(!file_exists($file)) {
// dirname("file.xml") == "" and is treated as the current working directory
if(!is_writable(dirname($file))) throw IOException::notWritable($file);
}
else if(!is_writable($file)) throw IOException::notWritable($file);
$content = $format == self::FORMAT_BINARY ? $this->toBinary() : $this->toXML();
$fh = fopen($file, 'wb');
fwrite($fh,$content);
fclose($fh);
}
/**
* Convert CFPropertyList to XML
* @param bool $formatted Print plist formatted (i.e. with newlines and whitespace indention) if true; defaults to false
* @return string The XML content
*/
public function toXML($formatted=false) {
$domimpl = new DOMImplementation();
// <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
$dtd = $domimpl->createDocumentType('plist', '-//Apple Computer//DTD PLIST 1.0//EN', 'http://www.apple.com/DTDs/PropertyList-1.0.dtd');
$doc = $domimpl->createDocument(null, "plist", $dtd);
$doc->encoding = "UTF-8";
// format output
if($formatted) {
$doc->formatOutput = true;
$doc->preserveWhiteSpace = true;
}
// get documentElement and set attribs
$plist = $doc->documentElement;
$plist->setAttribute('version', '1.0');
// add PropertyList's children
$plist->appendChild($this->getValue()->toXML($doc));
return $doc->saveXML();
}
/************************************************************************************************
* M A N I P U L A T I O N
************************************************************************************************/
/**
* Add CFType to collection.
* @param CFType $value CFType to add to collection
* @return void
* @uses $value for adding $value
*/
public function add($value) {
$this->value[] = $value;
}
/**
* Get CFType from collection.
* @param integer $key Key of CFType to retrieve from collection
* @return CFType CFType found at $key, null else
* @uses $value for retrieving CFType of $key
*/
public function get($key) {
if(isset($this->value[$key])) return $this->value[$key];
return null;
}
/**
* Remove CFType from collection.
* @param integer $key Key of CFType to removes from collection
* @return CFType removed CFType, null else
* @uses $value for removing CFType of $key
*/
public function del($key) {
if(isset($this->value[$key])) {
$t = $this->value[$key];
unset($this->value[$key]);
return $t;
}
return null;
}
/**
* Get first (and only) child, or complete collection.
* @return CFType|array CFType or list of CFTypes known to the PropertyList
* @uses $value for retrieving CFTypes
*/
public function getValue() {
if(count($this->value) === 1) return $this->value[0];
return $this->value;
}
/**
* Create CFType-structure from guessing the data-types.
* {@link CFArray}, {@link CFDictionary}, {@link CFBoolean}, {@link CFNumber} and {@link CFString} can be created, {@link CFDate} and {@link CFData} cannot.
* <br /><b>Note:</b>Distinguishing between {@link CFArray} and {@link CFDictionary} is done by examining the keys.
* Keys must be strictly incrementing integers to evaluate to a {@link CFArray}.
* Since PHP does not offer a function to test for associative arrays,
* this test causes the input array to be walked twice and thus work rather slow on large collections.
* If you work with large arrays and can live with all arrays evaluating to {@link CFDictionary},
* feel free to set the appropriate flag.
* <br /><b>Note:</b> If $value is an instance of CFType it is simply returned.
* <br /><b>Note:</b> If $value is neither a CFType, array, numeric, boolean nor string, it is omitted.
* @param mixed $value Value to convert to CFType
* @param boolean $autoDictionary if true {@link CFArray}-detection is bypassed and arrays will be returned as {@link CFDictionary}.
* @return CFType CFType based on guessed type
*/
public static function guess($value, $autoDictionary=false) {
switch(true) {
case $value instanceof CFType:
return $value;
break;
case is_array($value):
// test if $value is simple or associative array
if(!$autoDictionary) {
$numericKeys = true;
$previousKey = null;
foreach($value as $key => $v) {
if(!is_numeric($key) || ($previousKey !== null && $previousKey != $key-1)) {
$numericKeys = false;
break;
}
$previousKey = $key;
}
if($numericKeys) {
$t = new CFArray();
foreach($value as $v) $t->add(self::guess($v, $autoDictionary));
return $t;
}
}
$t = new CFDictionary();
foreach($value as $k => $v) $t->add($k, self::guess($v, $autoDictionary));
return $t;
break;
case is_numeric($value):
return new CFNumber($value);
break;
case is_bool($value):
return new CFBoolean($value);
break;
case is_string($value):
return new CFString($value);
break;
}
}
/************************************************************************************************
* S E R I A L I Z I N G
************************************************************************************************/
/**
* Get PropertyList as array.
* @return mixed primitive value of first (and only) CFType, or array of primitive values of collection
* @uses $value for retrieving CFTypes
*/
public function toArray() {
$a = array();
foreach($this->value as $value) $a[] = $value->toArray();
if(count($a) === 1) return $a[0];
return $a;
}
/************************************************************************************************
* I T E R A T O R I N T E R F A C E
************************************************************************************************/
/**
* Rewind {@link $iteratorPosition} to first position (being 0)
* @link http://php.net/manual/en/iterator.rewind.php
* @return void
* @uses $iteratorPosition set to 0
* @uses $iteratorKeys store keys of {@link $value}
*/
public function rewind() {
$this->iteratorPosition = 0;
$this->iteratorKeys = array_keys($this->value);
}
/**
* Get Iterator's current {@link CFType} identified by {@link $iteratorPosition}
* @link http://php.net/manual/en/iterator.current.php
* @return CFType current Item
* @uses $iteratorPosition identify current key
* @uses $iteratorKeys identify current value
*/
public function current() {
return $this->value[$this->iteratorKeys[$this->iteratorPosition]];
}
/**
* Get Iterator's current key identified by {@link $iteratorPosition}
* @link http://php.net/manual/en/iterator.key.php
* @return string key of the current Item
* @uses $iteratorPosition identify current key
* @uses $iteratorKeys identify current value
*/
public function key() {
return $this->iteratorKeys[$this->iteratorPosition];
}
/**
* Increment {@link $iteratorPosition} to address next {@see CFType}
* @link http://php.net/manual/en/iterator.next.php
* @return void
* @uses $iteratorPosition increment by 1
*/
public function next() {
$this->iteratorPosition++;
}
/**
* Test if {@link $iteratorPosition} addresses a valid element of {@link $value}
* @link http://php.net/manual/en/iterator.valid.php
* @return boolean true if current position is valid, false else
* @uses $iteratorPosition test if within {@link $iteratorKeys}
* @uses $iteratorPosition test if within {@link $value}
*/
public function valid() {
return isset($this->iteratorKeys[$this->iteratorPosition]) && isset($this->value[$this->iteratorKeys[$this->iteratorPosition]]);
}
}
?>

View file

@ -0,0 +1,661 @@
<?php
/**
* Data-Types for CFPropertyList as defined by Apple.
* {@link http://developer.apple.com/documentation/Darwin/Reference/ManPages/man5/plist.5.html Property Lists}
* @author Rodney Rehm <rodney.rehm@medialize.de>
* @author Christian Kruse <cjk@wwwtech.de>
* @package plist
* @subpackage plist.types
* @version $Id$
*/
/**
* Base-Class of all CFTypes used by CFPropertyList
* @author Rodney Rehm <rodney.rehm@medialize.de>
* @author Christian Kruse <cjk@wwwtech.de>
* @package plist
* @subpackage plist.types
* @version $Id$
* @example example-create-01.php Using the CFPropertyList API
* @example example-create-02.php Using CFPropertyList::guess()
* @example example-create-03.php Using CFPropertyList::guess() with {@link CFDate} and {@link CFData}
*/
abstract class CFType {
/**
* CFType nodes
* @var array
*/
protected $value = null;
/**
* Create new CFType.
* @param mixed $value Value of CFType
*/
public function __construct($value=null) {
$this->setValue($value);
}
/************************************************************************************************
* M A G I C P R O P E R T I E S
************************************************************************************************/
/**
* Get the CFType's value
* @return mixed CFType's value
*/
public function getValue() {
return $this->value;
}
/**
* Set the CFType's value
* @return void
*/
public function setValue($value) {
$this->value = $value;
}
/************************************************************************************************
* S E R I A L I Z I N G
************************************************************************************************/
/**
* Get XML-Node.
* @param DOMDocument $doc DOMDocument to create DOMNode in
* @param string $nodeName Name of element to create
* @return DOMNode Node created based on CType
* @uses $value as nodeValue
*/
public function toXML(DOMDocument $doc, $nodeName) {
$text = $doc->createTextNode($this->value);
$node = $doc->createElement($nodeName);
$node->appendChild($text);
return $node;
}
/**
* convert value to binary representation
* @param CFBinaryPropertyList The binary property list object
* @return The offset in the object table
*/
public abstract function toBinary(CFBinaryPropertyList &$bplist);
/**
* Get CFType's value.
* @return mixed primitive value
* @uses $value for retrieving primitive of CFType
*/
public function toArray() {
return $this->getValue();
}
}
/**
* String Type of CFPropertyList
* @author Rodney Rehm <rodney.rehm@medialize.de>
* @author Christian Kruse <cjk@wwwtech.de>
* @package plist
* @subpackage plist.types
*/
class CFString extends CFType {
/**
* Get XML-Node.
* @param DOMDocument $doc DOMDocument to create DOMNode in
* @return DOMNode &lt;string&gt;-Element
*/
public function toXML(DOMDocument $doc) {
return parent::toXML($doc, 'string');
}
/**
* convert value to binary representation
* @param CFBinaryPropertyList The binary property list object
* @return The offset in the object table
*/
public function toBinary(CFBinaryPropertyList &$bplist) {
return $bplist->stringToBinary($this->value);
}
}
/**
* Number Type of CFPropertyList
* @author Rodney Rehm <rodney.rehm@medialize.de>
* @author Christian Kruse <cjk@wwwtech.de>
* @package plist
* @subpackage plist.types
*/
class CFNumber extends CFType {
/**
* Get XML-Node.
* Returns &lt;real&gt; if $value is a float, &lt;integer&gt; if $value is an integer.
* @param DOMDocument $doc DOMDocument to create DOMNode in
* @return DOMNode &lt;real&gt; or &lt;integer&gt;-Element
*/
public function toXML(DOMDocument $doc) {
$ret = 'real';
if(intval($this->value) == $this->value && !is_float($this->value) && strpos($this->value,'.') === false) {
$this->value = intval($this->value);
$ret = 'integer';
}
return parent::toXML($doc, $ret);
}
/**
* convert value to binary representation
* @param CFBinaryPropertyList The binary property list object
* @return The offset in the object table
*/
public function toBinary(CFBinaryPropertyList &$bplist) {
return $bplist->numToBinary($this->value);
}
}
/**
* Date Type of CFPropertyList
* Note: CFDate uses Unix timestamp (epoch) to store dates internally
* @author Rodney Rehm <rodney.rehm@medialize.de>
* @author Christian Kruse <cjk@wwwtech.de>
* @package plist
* @subpackage plist.types
*/
class CFDate extends CFType {
const TIMESTAMP_APPLE = 0;
const TIMESTAMP_UNIX = 1;
const DATE_DIFF_APPLE_UNIX = 978307200;
/**
* Create new Date CFType.
* @param integer $value timestamp to set
* @param integer $format format the timestamp is specified in, use {@link TIMESTAMP_APPLE} or {@link TIMESTAMP_UNIX}, defaults to {@link TIMESTAMP_APPLE}
* @uses setValue() to convert the timestamp
*/
function __construct($value,$format=CFDate::TIMESTAMP_UNIX) {
$this->setValue($value,$format);
}
/**
* Set the Date CFType's value.
* @param integer $value timestamp to set
* @param integer $format format the timestamp is specified in, use {@link TIMESTAMP_APPLE} or {@link TIMESTAMP_UNIX}, defaults to {@link TIMESTAMP_UNIX}
* @return void
* @uses TIMESTAMP_APPLE to determine timestamp type
* @uses TIMESTAMP_UNIX to determine timestamp type
* @uses DATE_DIFF_APPLE_UNIX to convert Apple-timestamp to Unix-timestamp
*/
function setValue($value,$format=CFDate::TIMESTAMP_UNIX) {
if($format == CFDate::TIMESTAMP_UNIX) $this->value = $value;
else $this->value = $value + CFDate::DATE_DIFF_APPLE_UNIX;
}
/**
* Get the Date CFType's value.
* @param integer $format format the timestamp is specified in, use {@link TIMESTAMP_APPLE} or {@link TIMESTAMP_UNIX}, defaults to {@link TIMESTAMP_UNIX}
* @return integer Unix timestamp
* @uses TIMESTAMP_APPLE to determine timestamp type
* @uses TIMESTAMP_UNIX to determine timestamp type
* @uses DATE_DIFF_APPLE_UNIX to convert Unix-timestamp to Apple-timestamp
*/
function getValue($format=CFDate::TIMESTAMP_UNIX) {
if($format == CFDate::TIMESTAMP_UNIX) return $this->value;
else return $this->value - CFDate::DATE_DIFF_APPLE_UNIX;
}
/**
* Get XML-Node.
* @param DOMDocument $doc DOMDocument to create DOMNode in
* @return DOMNode &lt;date&gt;-Element
*/
public function toXML(DOMDocument $doc) {
$text = $doc->createTextNode(gmdate("Y-m-d\TH:i:s\Z",$this->getValue()));
$node = $doc->createElement("date");
$node->appendChild($text);
return $node;
}
/**
* convert value to binary representation
* @param CFBinaryPropertyList The binary property list object
* @return The offset in the object table
*/
public function toBinary(CFBinaryPropertyList &$bplist) {
return $bplist->dateToBinary($this->value);
}
/**
* Create a UNIX timestamp from a PList date string
* @param string $val The date string (e.g. "2009-05-13T20:23:43Z")
* @return integer The UNIX timestamp
* @throws PListException when encountering an unknown date string format
*/
public static function dateValue($val) {
//2009-05-13T20:23:43Z
if(!preg_match('/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z/',$val,$matches)) throw new PListException("Unknown date format: $val");
return gmmktime($matches[4],$matches[5],$matches[6],$matches[2],$matches[3],$matches[1]);
}
}
/**
* Boolean Type of CFPropertyList
* @author Rodney Rehm <rodney.rehm@medialize.de>
* @author Christian Kruse <cjk@wwwtech.de>
* @package plist
* @subpackage plist.types
*/
class CFBoolean extends CFType {
/**
* Get XML-Node.
* Returns &lt;true&gt; if $value is a true, &lt;false&gt; if $value is false.
* @param DOMDocument $doc DOMDocument to create DOMNode in
* @return DOMNode &lt;true&gt; or &lt;false&gt;-Element
*/
public function toXML(DOMDocument $doc) {
return $doc->createElement($this->value ? 'true' : 'false');
}
/**
* convert value to binary representation
* @param CFBinaryPropertyList The binary property list object
* @return The offset in the object table
*/
public function toBinary(CFBinaryPropertyList &$bplist) {
return $bplist->boolToBinary($this->value);
}
}
/**
* Data Type of CFPropertyList
* Note: Binary data is base64-encoded.
* @author Rodney Rehm <rodney.rehm@medialize.de>
* @author Christian Kruse <cjk@wwwtech.de>
* @package plist
* @subpackage plist.types
*/
class CFData extends CFType {
/**
* Create new Data CFType
* @param string $value data to be contained by new object
* @param boolean $already_coded if true $value will not be base64-encoded, defaults to false
*/
public function __construct($value=null,$already_coded=false) {
if($already_coded) $this->value = $value;
else $this->setValue($value);
}
/**
* Set the CFType's value and base64-encode it.
* <b>Note:</b> looks like base64_encode has troubles with UTF-8 encoded strings
* @return void
*/
public function setValue($value) {
//if(function_exists('mb_check_encoding') && mb_check_encoding($value, 'UTF-8')) $value = utf8_decode($value);
$this->value = base64_encode($value);
}
/**
* Get base64 encoded data
* @return string The base64 encoded data value
*/
public function getCodedValue() {
return $this->value;
}
/**
* Get the base64-decoded CFType's value.
* @return mixed CFType's value
*/
public function getValue() {
return base64_decode($this->value);
}
/**
* Get XML-Node.
* @param DOMDocument $doc DOMDocument to create DOMNode in
* @return DOMNode &lt;data&gt;-Element
*/
public function toXML(DOMDocument $doc) {
return parent::toXML($doc, 'data');
}
/**
* convert value to binary representation
* @param CFBinaryPropertyList The binary property list object
* @return The offset in the object table
*/
public function toBinary(CFBinaryPropertyList &$bplist) {
return $bplist->dataToBinary($this->getValue());
}
}
/**
* Array Type of CFPropertyList
* @author Rodney Rehm <rodney.rehm@medialize.de>
* @author Christian Kruse <cjk@wwwtech.de>
* @package plist
* @subpackage plist.types
*/
class CFArray extends CFType implements Iterator {
/**
* Position of iterator {@link http://php.net/manual/en/class.iterator.php}
* @var integer
*/
protected $iteratorPosition = 0;
/**
* Create new CFType.
* @param array $value Value of CFType
*/
public function __construct($value=array()) {
$this->value = $value;
}
/**
* Set the CFType's value
* <b>Note:</b> this dummy does nothing
* @return void
*/
public function setValue($value) {
}
/**
* Add CFType to collection.
* @param CFType $value CFType to add to collection
* @return void
* @uses $value for adding $value
*/
public function add($value) {
$this->value[] = $value;
}
/**
* Get CFType from collection.
* @param integer $key Key of CFType to retrieve from collection
* @return CFType CFType found at $key, null else
* @uses $value for retrieving CFType of $key
*/
public function get($key) {
if(isset($this->value[$key])) return $this->value[$key];
return null;
}
/**
* Remove CFType from collection.
* @param integer $key Key of CFType to removes from collection
* @return CFType removed CFType, null else
* @uses $value for removing CFType of $key
*/
public function del($key) {
if(isset($this->value[$key])) unset($this->value[$key]);
}
/************************************************************************************************
* S E R I A L I Z I N G
************************************************************************************************/
/**
* Get XML-Node.
* @param DOMDocument $doc DOMDocument to create DOMNode in
* @return DOMNode &lt;array&gt;-Element
*/
public function toXML(DOMDocument $doc) {
$node = $doc->createElement('array');
foreach($this->value as $value) $node->appendChild($value->toXML($doc));
return $node;
}
/**
* convert value to binary representation
* @param CFBinaryPropertyList The binary property list object
* @return The offset in the object table
*/
public function toBinary(CFBinaryPropertyList &$bplist) {
return $bplist->arrayToBinary($this);
}
/**
* Get CFType's value.
* @return array primitive value
* @uses $value for retrieving primitive of CFType
*/
public function toArray() {
$a = array();
foreach($this->value as $value) $a[] = $value->toArray();
return $a;
}
/************************************************************************************************
* I T E R A T O R I N T E R F A C E
************************************************************************************************/
/**
* Rewind {@link $iteratorPosition} to first position (being 0)
* @link http://php.net/manual/en/iterator.rewind.php
* @return void
* @uses $iteratorPosition set to 0
*/
public function rewind() {
$this->iteratorPosition = 0;
}
/**
* Get Iterator's current {@link CFType} identified by {@link $iteratorPosition}
* @link http://php.net/manual/en/iterator.current.php
* @return CFType current Item
* @uses $iteratorPosition identify current key
*/
public function current() {
return $this->value[$this->iteratorPosition];
}
/**
* Get Iterator's current key identified by {@link $iteratorPosition}
* @link http://php.net/manual/en/iterator.key.php
* @return string key of the current Item
* @uses $iteratorPosition identify current key
*/
public function key() {
return $this->iteratorPosition;
}
/**
* Increment {@link $iteratorPosition} to address next {@see CFType}
* @link http://php.net/manual/en/iterator.next.php
* @return void
* @uses $iteratorPosition increment by 1
*/
public function next() {
$this->iteratorPosition++;
}
/**
* Test if {@link $iteratorPosition} addresses a valid element of {@link $value}
* @link http://php.net/manual/en/iterator.valid.php
* @return boolean true if current position is valid, false else
* @uses $iteratorPosition test if within {@link $iteratorKeys}
* @uses $iteratorPosition test if within {@link $value}
*/
public function valid() {
return isset($this->value[$this->iteratorPosition]);
}
}
/**
* Array Type of CFPropertyList
* @author Rodney Rehm <rodney.rehm@medialize.de>
* @author Christian Kruse <cjk@wwwtech.de>
* @package plist
* @subpackage plist.types
*/
class CFDictionary extends CFType implements Iterator {
/**
* Position of iterator {@link http://php.net/manual/en/class.iterator.php}
* @var integer
*/
protected $iteratorPosition = 0;
/**
* List of Keys for numerical iterator access {@link http://php.net/manual/en/class.iterator.php}
* @var array
*/
protected $iteratorKeys = null;
/**
* Create new CFType.
* @param array $value Value of CFType
*/
public function __construct($value=array()) {
$this->value = $value;
}
/**
* Set the CFType's value
* <b>Note:</b> this dummy does nothing
* @return void
*/
public function setValue($value) {
}
/**
* Add CFType to collection.
* @param string $key Key to add to collection
* @param CFType $value CFType to add to collection
* @return void
* @uses $value for adding $key $value pair
*/
public function add($key, $value) {
$this->value[$key] = $value;
}
/**
* Get CFType from collection.
* @param string $key Key of CFType to retrieve from collection
* @return CFType CFType found at $key, null else
* @uses $value for retrieving CFType of $key
*/
public function get($key) {
if(isset($this->value[$key])) return $this->value[$key];
return null;
}
/**
* Remove CFType from collection.
* @param string $key Key of CFType to removes from collection
* @return CFType removed CFType, null else
* @uses $value for removing CFType of $key
*/
public function del($key) {
if(isset($this->value[$key])) unset($this->value[$key]);
}
/************************************************************************************************
* S E R I A L I Z I N G
************************************************************************************************/
/**
* Get XML-Node.
* @param DOMDocument $doc DOMDocument to create DOMNode in
* @return DOMNode &lt;dict&gt;-Element
*/
public function toXML(DOMDocument $doc) {
$node = $doc->createElement('dict');
foreach($this->value as $key => $value) {
$node->appendChild($doc->createElement('key', $key));
$node->appendChild($value->toXML($doc));
}
return $node;
}
/**
* convert value to binary representation
* @param CFBinaryPropertyList The binary property list object
* @return The offset in the object table
*/
public function toBinary(CFBinaryPropertyList &$bplist) {
return $bplist->dictToBinary($this);
}
/**
* Get CFType's value.
* @return array primitive value
* @uses $value for retrieving primitive of CFType
*/
public function toArray() {
$a = array();
foreach($this->value as $key => $value) $a[$key] = $value->toArray();
return $a;
}
/************************************************************************************************
* I T E R A T O R I N T E R F A C E
************************************************************************************************/
/**
* Rewind {@link $iteratorPosition} to first position (being 0)
* @link http://php.net/manual/en/iterator.rewind.php
* @return void
* @uses $iteratorPosition set to 0
* @uses $iteratorKeys store keys of {@link $value}
*/
public function rewind() {
$this->iteratorPosition = 0;
$this->iteratorKeys = array_keys($this->value);
}
/**
* Get Iterator's current {@link CFType} identified by {@link $iteratorPosition}
* @link http://php.net/manual/en/iterator.current.php
* @return CFType current Item
* @uses $iteratorPosition identify current key
* @uses $iteratorKeys identify current value
*/
public function current() {
return $this->value[$this->iteratorKeys[$this->iteratorPosition]];
}
/**
* Get Iterator's current key identified by {@link $iteratorPosition}
* @link http://php.net/manual/en/iterator.key.php
* @return string key of the current Item
* @uses $iteratorPosition identify current key
* @uses $iteratorKeys identify current value
*/
public function key() {
return $this->iteratorKeys[$this->iteratorPosition];
}
/**
* Increment {@link $iteratorPosition} to address next {@see CFType}
* @link http://php.net/manual/en/iterator.next.php
* @return void
* @uses $iteratorPosition increment by 1
*/
public function next() {
$this->iteratorPosition++;
}
/**
* Test if {@link $iteratorPosition} addresses a valid element of {@link $value}
* @link http://php.net/manual/en/iterator.valid.php
* @return boolean true if current position is valid, false else
* @uses $iteratorPosition test if within {@link $iteratorKeys}
* @uses $iteratorPosition test if within {@link $value}
*/
public function valid() {
return isset($this->iteratorKeys[$this->iteratorPosition]) && isset($this->value[$this->iteratorKeys[$this->iteratorPosition]]);
}
}
?>

View file

@ -0,0 +1,99 @@
<?php
/**
* CFPropertyList
* {@link http://developer.apple.com/documentation/Darwin/Reference/ManPages/man5/plist.5.html Property Lists}
* @author Rodney Rehm <rodney.rehm@medialize.de>
* @author Christian Kruse <cjk@wwwtech.de>
* @package plist
* @version $Id$
*/
/**
* Basic Input / Output Exception
* @author Rodney Rehm <rodney.rehm@medialize.de>
* @author Christian Kruse <cjk@wwwtech.de>
* @package plist
*/
class IOException extends Exception {
/**
* Flag telling the File could not be found
*/
const NOT_FOUND = 1;
/**
* Flag telling the File is not readable
*/
const NOT_READABLE = 2;
/**
* Flag telling the File is not writable
*/
const NOT_WRITABLE = 3;
/**
* Flag telling there was a read error
*/
const READ_ERROR = 4;
/**
* Flag telling there was a read error
*/
const WRITE_ERROR = 5;
/**
* Create new IOException
* @param string $path Source of the problem
* @param integer $type Type of the problem
*/
public function __construct($path, $type=null) {
parent::__construct( $path, $type );
}
/**
* Create new FileNotFound-Exception
* @param string $path Source of the problem
* @return IOException new FileNotFound-Exception
*/
public static function notFound($path) {
return new IOException( $path, self::NOT_FOUND );
}
/**
* Create new FileNotReadable-Exception
* @param string $path Source of the problem
* @return IOException new FileNotReadable-Exception
*/
public static function notReadable($path) {
return new IOException( $path, self::NOT_READABLE );
}
/**
* Create new FileNotWritable-Exception
* @param string $path Source of the problem
* @return IOException new FileNotWritable-Exception
*/
public static function notWritable($path) {
return new IOException( $path, self::NOT_WRITABLE );
}
/**
* Create new ReadError-Exception
* @param string $path Source of the problem
* @return IOException new ReadError-Exception
*/
public static function readError($path) {
return new IOException( $path, self::READ_ERROR );
}
/**
* Create new WriteError-Exception
* @param string $path Source of the problem
* @return IOException new WriteError-Exception
*/
public static function writeError($path) {
return new IOException( $path, self::WRITE_ERROR );
}
}
?>

View file

@ -0,0 +1,22 @@
The MIT License
Copyright (c) 2009 Christian Kruse, Rodney Rehm
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View file

@ -0,0 +1,22 @@
<?php
/**
* CFPropertyList
* {@link http://developer.apple.com/documentation/Darwin/Reference/ManPages/man5/plist.5.html Property Lists}
* @author Rodney Rehm <rodney.rehm@medialize.de>
* @author Christian Kruse <cjk@wwwtech.de>
* @package plist
* @version $Id$
*/
/**
* Exception for errors with the PList format
* @author Rodney Rehm <rodney.rehm@medialize.de>
* @author Christian Kruse <cjk@wwwtech.de>
* @package plist
*/
class PListException extends Exception {
}
?>

View file

@ -0,0 +1,277 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
// Libs
includeLib( 'mng' );
includeLib( 'png' );
includeLib( 'ungif' );
includeLib( 'zlib' );
includeLib( 'jpeg' );
includeLib( 'tinyxml' );
includeLib( 'opcode' );
includeLib( 'squish' );
includeLib( 'collada_dom' );
includeLib( 'pcre' );
includeLib( 'convexDecomp' );
// Use FMOD on consoles
if ( Generator::$platform != "360" && Generator::$platform != "ps3" )
{
includeLib( 'libvorbis' );
includeLib( 'libogg' );
includeLib( 'libtheora' );
}
$ext = "DLL";
if ( Generator::$platform == "mac" )
$ext = "Bundle";
// We need to pick the right physics engine to include.
global $USE_BULLET_PHYSICS;
global $PHYSX_SDK_PATH;
//some platforms will not want a shared config
$useSharedConfig = true;
if ( Generator::$platform == "360" || Generator::$platform == "ps3" )
$useSharedConfig = false;
//begin either a shared lib config, or a static app config
if ( $useSharedConfig )
beginSharedLibConfig( getGameProjectName().' '.$ext, '{C0FCDFF9-E125-412E-87BC-2D89DB971CAB}', 'game', getGameProjectName() );
else
beginAppConfig( getGameProjectName(), '{C0FCDFF9-E125-412E-87BC-2D89DB971CAB}', 'game', getGameProjectName() );
/// Prefs
addProjectDefine( 'TORQUE_SHADERGEN' );
addProjectDefine( 'TORQUE_UNICODE' );
if ( $useSharedConfig )
addProjectDefine( 'TORQUE_SHARED' );
/// For OPCODE
addProjectDefine( 'BAN_OPCODE_AUTOLINK' );
addProjectDefine( 'ICE_NO_DLL' );
addProjectDefine( 'TORQUE_OPCODE' );
// For libTomCrypt
addProjectDefine( 'LTC_NO_PROTOTYPES' );
// Additional includes
addIncludePath( "../../game/shaders" );
addLibIncludePath( "lmng" );
addLibIncludePath( "lpng" );
addLibIncludePath( "ljpeg" );
addLibIncludePath( "lungif" );
addLibIncludePath( "zlib" );
addLibIncludePath( "tinyxml" );
addLibIncludePath( "opcode" );
addLibIncludePath( "squish" );
addLibIncludePath( "convexDecomp" );
if ( Generator::$platform != "360" && Generator::$platform != "ps3" )
{
addLibIncludePath( "libvorbis/include" );
addLibIncludePath( "libogg/include" );
addLibIncludePath( "libtheora/include" );
}
// Modules
includeModule( 'Torque3D' );
includeModule( 'core' );
includeModule( 'dsound' );
includeModule( 'fmod');
includeModule( 'T3D' );
includeModule( 'advancedLighting' );
includeModule( 'basicLighting' );
includeModule( 'collada' );
if ( Generator::$platform != "360" && Generator::$platform != "ps3" )
{
includeModule( 'vorbis' );
includeModule( 'theora' );
}
if(Generator::$platform == "mac" || Generator::$platform == "win32")
includeModule( 'openal' );
// Demo functionality
if (getDemoBuild())
includeModule( 'demo' );
if (getWatermarkBuild())
includeModule( 'demoWatermark' );
if (getPurchaseScreenBuild())
includeModule( 'demoPurchaseScreen' );
if (getObjectLimitBuild())
includeModule( 'demoObjectLimit' );
if (getTimeOutBuild())
includeModule( 'demoTimeout' );
// Dependencies
addProjectDependency( 'lmng' );
addProjectDependency( 'lpng' );
addProjectDependency( 'lungif' );
addProjectDependency( 'ljpeg' );
addProjectDependency( 'zlib' );
addProjectDependency( 'tinyxml' );
addProjectDependency( 'opcode' );
addProjectDependency( 'squish' );
addProjectDependency( 'collada_dom' );
addProjectDependency( 'pcre' );
addProjectDependency( 'convexDecomp' );
if ( Generator::$platform != "360" && Generator::$platform != "ps3" )
{
addProjectDependency( 'libvorbis' );
addProjectDependency( 'libogg' );
addProjectDependency( 'libtheora' );
}
if ( $USE_BULLET_PHYSICS == true )
{
includeModule( 'bullet' );
addProjectDependency( 'libbullet' );
}
if ( $PHYSX_SDK_PATH != "" )
{
includeModule( 'physx' );
addProjectDependency( 'nxCharacter' );
addProjectDependency( 'nxuStream' );
}
if ( Generator::$platform == "mac" )
{
addProjectDefine( '__MACOSX__' );
addProjectDefine( 'LTM_DESC' );
}
if (Generator::$platform == "win32")
{
setProjectModuleDefinitionFile('../../' . getLibSrcDir() . 'Torque3D/msvc/torque3d.def');
addProjectDefine( 'UNICODE' );
addProjectDefine( 'INITGUID' );
addProjectDefine( '_CRT_SECURE_NO_DEPRECATE' );
addProjectLibInput('COMCTL32.LIB');
addProjectLibInput('COMDLG32.LIB');
addProjectLibInput('USER32.LIB');
addProjectLibInput('ADVAPI32.LIB');
addProjectLibInput('GDI32.LIB');
addProjectLibInput('WINMM.LIB');
addProjectLibInput('WSOCK32.LIB');
addProjectLibInput('vfw32.lib');
addProjectLibInput('Imm32.lib');
addProjectLibInput('d3d9.lib');
addProjectLibInput('d3dx9.lib');
addProjectLibInput('DxErr.lib');
addProjectLibInput('ole32.lib');
addProjectLibInput('shell32.lib');
addProjectLibInput('oleaut32.lib');
addProjectLibInput('version.lib');
}
// Include project specific sources in the project/buildFiles/config/projectCode.conf
$projectCode = realpath($argv[1])."/buildFiles/config/projectCode.conf";
echo( "\n - Loading project code configuration from ".$projectCode."\n");
include $projectCode;
//end shared/static config
if ( $useSharedConfig )
endSharedLibConfig();
else
endAppConfig();
//add the shared application only if this is a shared config
if ( $useSharedConfig )
{
/////// Application Config
beginSharedAppConfig( getGameProjectName(), '{CDECDFF9-E125-523F-87BC-2D89DB971CAB}' );
addProjectDefine( 'TORQUE_SHARED' );
addEngineSrcDir( 'main' );
if (Generator::$platform == "win32")
{
addProjectDefine( 'WIN32' );
addProjectDependency( getGameProjectName() . ' DLL' );
}
if (Generator::$platform == "mac")
{
addProjectDefine( '__MACOSX__' );
addProjectDependency( getGameProjectName() . ' Bundle' );
addProjectDependency( getGameProjectName() . ' Plugin' );
}
endSharedAppConfig();
}
// Add solution references for Visual Studio projects
if (Generator::$platform == "win32" || Generator::$platform == "360" || Generator::$platform == "ps3")
{
if ( !$useSharedConfig )
beginSolutionConfig( getGameProjectName(), '{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}' );
addSolutionProjectRef( getGameProjectName() );
if ( $useSharedConfig )
addSolutionProjectRef( getGameProjectName() . ' DLL' );
addSolutionProjectRef( 'collada_dom' );
addSolutionProjectRef( 'ljpeg' );
addSolutionProjectRef( 'lmng' );
addSolutionProjectRef( 'lpng' );
addSolutionProjectRef( 'lungif' );
addSolutionProjectRef( 'opcode' );
addSolutionProjectRef( 'pcre' );
addSolutionProjectRef( 'squish' );
addSolutionProjectRef( 'tinyxml' );
addSolutionProjectRef( 'zlib' );
addSolutionProjectRef( 'convexDecomp' );
if (Generator::$platform == "win32")
{
addSolutionProjectRef( 'libogg' );
addSolutionProjectRef( 'libvorbis' );
addSolutionProjectRef( 'libtheora' );
}
if ( $USE_BULLET_PHYSICS == true )
addSolutionProjectRef( 'libbullet' );
if ( $PHYSX_SDK_PATH != "" )
{
// For PhysX support.
addSolutionProjectRef( 'nxCharacter' );
addSolutionProjectRef( 'nxuStream' );
}
if ( !$useSharedConfig )
endSolutionConfig();
}
?>

View file

@ -0,0 +1,77 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
if (Generator::$platform == "win32")
{
// Include the web deployment settings
$webDeployConf = realpath($argv[1])."/buildFiles/config/webDeploy.conf";
echo( "\n - Loading web deployment configuration from ".$webDeployConf."\n");
require_once( $webDeployConf);
// The NP plugin MUST begin with NP for Firefox to recognize it
// Also, the plugin uses the filename to locate your game library, so much begin with either "NP " or "IE " and end with " Plugin"
// If you want to change this behavior, you can modify the plugin source code in webCommon.cpp
WebDeploymentWindows::$npPluginName = 'NP ' . getGameProjectName() . ' Plugin';
WebDeploymentWindows::$axPluginName = 'IE ' . getGameProjectName() . ' Plugin';
beginActiveXConfig( WebDeploymentWindows::$axPluginName, '{CDECDFF9-E125-412E-87CD-2D89DB971CAB}' );
addProjectDependency( getGameProjectName() . ' DLL' );
endActiveXConfig();
beginNPPluginConfig( WebDeploymentWindows::$npPluginName, '{CDECDFF9-E125-412E-87BC-2D89DB971CAB}' );
addProjectDependency( getGameProjectName() . ' DLL' );
endNPPluginConfig();
// If not building for web deploy, these can be removed
addSolutionProjectRef( WebDeploymentWindows::$npPluginName );
addSolutionProjectRef( WebDeploymentWindows::$axPluginName );
}
if (Generator::$platform == "mac")
{
// Include the web deployment settings
$webDeployConf = realpath($argv[1])."/buildFiles/config/webDeploy.mac.conf";
echo( "\n - Loading web deployment configuration from ".$webDeployConf."\n");
require_once( $webDeployConf);
WebDeploymentOSX::$safariPluginName = getGameProjectName() . ' Plugin';
beginSafariConfig( getGameProjectName() . ' Plugin', '{CCDEDFF9-E136-412E-87BC-2D89DB971CAB}' );
// Dependencies
addProjectDependency( getGameProjectName() . ' Bundle' );
endSafariConfig();
}
?>

View file

@ -0,0 +1,50 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginLibConfig( 'collada_dom', '{25D580F1-2A2C-48EB-89C6-B54CAF4BDC4E}' );
// Source
addLibSrcDir( 'collada/src/1.4/dom' );
addLibSrcDir( 'collada/src/dae' );
addLibSrcDir( 'collada/src/modules/LIBXMLPlugin' );
addLibSrcDir( 'collada/src/modules/stdErrPlugin' );
addLibSrcDir( 'collada/src/modules/STLDatabase' );
// Additional includes
addLibIncludePath( 'collada/include' );
addLibIncludePath( 'collada/include/1.4' );
addLibIncludePath( "pcre" );
addLibIncludePath( "tinyxml" );
// Defines
addProjectDefine( 'DOM_INCLUDE_TINYXML' );
addProjectDefine( 'PCRE_STATIC' );
// Dependencies
addProjectDependency( 'pcre' );
addProjectDependency( 'tinyxml' );
endLibConfig();
?>

View file

@ -0,0 +1,43 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginLibConfig( 'convexDecomp', '{4EF87A4E-16ED-4E64-BF04-841B2675AEE0}' );
// Source
addLibSrcDir( 'convexDecomp' );
// Additional includes
addLibIncludePath( 'convexDecomp' );
if ( Generator::$platform == "360" )
addProjectDefine( '_XBOX' );
else if ( Generator::$platform == "ps3" )
addProjectDefine( '__CELLOS_LV2__' );
else if ( Generator::$platform == "mac" )
addProjectDefine( '__APPLE__' );
else if ( Generator::$platform == "win32" )
addProjectDefine( 'WIN32' );
endLibConfig();
?>

View file

@ -0,0 +1,30 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginLibConfig( 'd3dx8dll', '{38337D6D-B574-4871-9FF1-0B7B4981AA74}' );
includeModule( 'd3dx8dll' );
endLibConfig();
?>

View file

@ -0,0 +1,30 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginLibConfig( 'ljpeg', '{E2A746EC-8AD3-4D45-AFBB-5A81F705E9BE}' );
includeModule( 'jpeg' );
endLibConfig();
?>

View file

@ -0,0 +1,58 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginLibConfig( 'libbullet', '{4368B65C-F5EF-4D28-B533-B02A04EBE921}' );
// Source
addLibSrcDir( 'bullet/src' );
addLibSrcDir( 'bullet/src/BulletCollision' );
addLibSrcDir( 'bullet/src/BulletCollision/BroadphaseCollision' );
addLibSrcDir( 'bullet/src/BulletCollision/CollisionDispatch' );
addLibSrcDir( 'bullet/src/BulletCollision/CollisionShapes' );
addLibSrcDir( 'bullet/src/BulletCollision/Gimpact' );
addLibSrcDir( 'bullet/src/BulletCollision/NarrowPhaseCollision' );
addLibSrcDir( 'bullet/src/BulletDynamics' );
addLibSrcDir( 'bullet/src/BulletDynamics/Character' );
addLibSrcDir( 'bullet/src/BulletDynamics/ConstraintSolver' );
addLibSrcDir( 'bullet/src/BulletDynamics/Dynamics' );
addLibSrcDir( 'bullet/src/BulletDynamics/Vehicle' );
addLibSrcDir( 'bullet/src/LinearMath' );
// TODO: Can we do multicore on OSX?
if ( Generator::$platform == "win32" ||
Generator::$platform == "360" )
{
addProjectDefine( 'WIN32' );
addLibSrcDir( 'bullet/src/BulletMultiThreaded' );
addLibSrcDir( 'bullet/src/BulletMultiThreaded/MiniCLTask' );
addLibSrcDir( 'bullet/src/BulletMultiThreaded/SpuNarrowPhaseCollisionTask' );
addLibIncludePath( 'bullet/src/BulletMultiThreaded/vectormath/scalar/cpp' );
}
// Additional includes
addLibIncludePath( 'bullet/src' );
endLibConfig();
?>

View file

@ -0,0 +1,30 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginLibConfig( 'libogg', '{719523DB-7C6B-416B-B68D-B2579477239B}' );
includeModule( 'libogg' );
endLibConfig();
?>

View file

@ -0,0 +1,30 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginLibConfig( 'libtheora', '{B0B6B74B-2045-43B0-85BF-A24BF2D25155}' );
includeModule( 'libtheora' );
endLibConfig();
?>

View file

@ -0,0 +1,30 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginLibConfig( 'libvorbis', '{F8240290-BA36-4696-967F-C2611CEE501A}' );
includeModule( 'libvorbis' );
endLibConfig();
?>

View file

@ -0,0 +1,33 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginLibConfig( 'lmng', '{73D9048F-55AA-4EF6-BF33-3A811DC47FCE}' );
// Defines
addProjectDefine( 'MNG_OPTIMIZE_OBJCLEANUP' );
// Modules
includeModule( 'mng' );
endLibConfig();
?>

View file

@ -0,0 +1,30 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginLibConfig( 'nxCharacter', '{CDECDFF9-E125-412E-87CD-2D89DB972DAC}' );
includeModule( 'nxCharacter' );
endLibConfig();
?>

View file

@ -0,0 +1,30 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginLibConfig( 'nxuStream', '{CDECDFF9-E125-412E-87CD-2E97DB971CAB}' );
includeModule( 'nxuStream' );
endLibConfig();
?>

View file

@ -0,0 +1,34 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginLibConfig( 'opcode', '{C0B7BA09-E125-412E-86B0-2D89DB971CAB}' );
// Defines
addProjectDefine( 'TORQUE_OPCODE' );
addProjectDefine( 'ICE_NO_DLL' );
includeModule( 'opcode' );
endLibConfig();
?>

View file

@ -0,0 +1,38 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginLibConfig( 'pcre', '{910A3F94-E18D-4CB9-87DC-382C75F6B941}' );
// Source
addLibSrcDir( 'pcre' );
// Additional includes
addLibIncludePath( 'pcre' );
// Defines
addProjectDefine( 'PCRE_STATIC' );
addProjectDefine( 'HAVE_CONFIG_H' );
endLibConfig();
?>

View file

@ -0,0 +1,30 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginLibConfig( 'lpng', '{63D63B58-3DB8-4844-9648-C5AA04B4C1BC}' );
includeModule( 'png' );
endLibConfig();
?>

View file

@ -0,0 +1,30 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginLibConfig( 'squish', '{3FFDBB50-6E27-4E66-B1EC-750663C9D799}' );
includeModule( 'squish' );
endLibConfig();
?>

View file

@ -0,0 +1,30 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginLibConfig( 'tinyxml', '{470600AC-F51E-4F4E-9406-3B517BF112AC}' );
includeModule( 'tinyxml' );
endLibConfig();
?>

View file

@ -0,0 +1,32 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginLibConfig( 'lungif', '{5C9BE928-8510-451E-B866-5C2ECF3E592F}' );
addProjectDefine( '_GBA_NO_FILEIO' );
includeModule( 'ungif' );
endLibConfig();
?>

View file

@ -0,0 +1,30 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginLibConfig( 'zlib', '{3FFDBB50-6E27-4E66-B1EC-750663C9D784}' );
includeModule( 'zlib' );
endLibConfig();
?>

View file

@ -0,0 +1,92 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
// 3D
addEngineSrcDir('collision');
addEngineSrcDir('interior');
addEngineSrcDir('materials');
addEngineSrcDir('lighting');
addEngineSrcDir('lighting/common');
addEngineSrcDir('renderInstance');
addEngineSrcDir('scene');
addEngineSrcDir('scene/culling');
addEngineSrcDir('scene/zones');
addEngineSrcDir('scene/mixin');
addEngineSrcDir('shaderGen');
addEngineSrcDir('terrain');
addEngineSrcDir('environment');
addEngineSrcDir('forest');
addEngineSrcDir('forest/ts');
addEngineSrcDir('forest/editor');
addEngineSrcDir('ts');
addEngineSrcDir('ts/arch');
addEngineSrcDir('physics');
addEngineSrcDir('gui/3d');
addEngineSrcDir('postFx' );
// 3D game
addEngineSrcDir('T3D');
addEngineSrcDir('T3D/examples');
addEngineSrcDir('T3D/fps');
addEngineSrcDir('T3D/fx');
addEngineSrcDir('T3D/vehicles');
addEngineSrcDir('T3D/physics');
addEngineSrcDir('T3D/decal');
addEngineSrcDir('T3D/sfx');
addEngineSrcDir('T3D/gameBase');
addEngineSrcDir('T3D/turret');
global $TORQUE_HIFI_NET;
if ( $TORQUE_HIFI_NET == true )
{
addProjectDefines( 'TORQUE_HIFI_NET' );
addEngineSrcDir('T3D/gameBase/hifi');
}
else
addEngineSrcDir('T3D/gameBase/std');
// Plstform specific stuff.
switch( Generator::$platform )
{
case "360":
addEngineSrcDir('ts/arch/360');
// Fall through
case "win32":
addEngineSrcDir( 'terrain/hlsl' );
addEngineSrcDir( 'forest/hlsl' );
break;
case "ps3":
addEngineSrcDir('ts/arch/ps3');
// Fall through
case "mac":
addEngineSrcDir( 'terrain/glsl' );
addEngineSrcDir( 'forest/glsl' );
break;
}
?>

View file

@ -0,0 +1,30 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'Torque3D' );
endModule();
?>

View file

@ -0,0 +1,46 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'advancedLighting' );
addProjectDefine( 'TORQUE_ADVANCED_LIGHTING' );
addEngineSrcDir( 'lighting/advanced' );
addEngineSrcDir( 'lighting/shadowMap' );
switch( Generator::$platform )
{
case "win32":
addEngineSrcDir( 'lighting/advanced/hlsl' );
break;
case "360":
addEngineSrcDir( 'lighting/advanced/hlsl' );
break;
case "mac":
addEngineSrcDir( 'lighting/advanced/glsl' );
break;
}
endModule();
?>

View file

@ -0,0 +1,33 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'basicLighting' );
addProjectDefine( 'TORQUE_BASIC_LIGHTING' );
addEngineSrcDir( 'lighting/basic' );
addEngineSrcDir( 'lighting/shadowMap' );
endModule();
?>

View file

@ -0,0 +1,44 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'bullet' );
addProjectDefine( "TORQUE_PHYSICS_BULLET" );
addProjectDefine( "TORQUE_PHYSICS_ENABLED" );
addEngineSrcDir( "T3D/physics/bullet" );
includeLib( 'libbullet' );
addLibIncludePath( "bullet/src" );
if (inProjectConfig())
{
addProjectDependency( 'libbullet' );
if (Generator::$platform != "mac")
addSolutionProjectRef( 'libbullet' );
}
endModule();
?>

View file

@ -0,0 +1,39 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'collada' );
// Collada Loader
addProjectDefine( 'TORQUE_COLLADA' );
addProjectDefine( 'DOM_INCLUDE_TINYXML' );
addProjectDefine( 'PCRE_STATIC' );
addEngineSrcDir( 'ts/collada' );
addEngineSrcDir( 'ts/loader' );
addLibIncludePath( 'collada/include' );
addLibIncludePath( 'collada/include/1.4' );
endModule();
?>

View file

@ -0,0 +1,199 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
addEngineSrcDir('sfx/media');
addEngineSrcDir('sfx/null');
addEngineSrcDir('sfx');
// Components
addEngineSrcDir('component');
addEngineSrcDir('component/interfaces');
// Core
if (Generator::isApp())
addSrcDir( '../source' );
addEngineSrcDir('console');
addEngineSrcDir('core');
addEngineSrcDir('core/stream');
addEngineSrcDir('core/strings');
addEngineSrcDir('core/util');
addEngineSrcDir('core/util/test');
addEngineSrcDir('core/util/journal');
addEngineSrcDir('core/util/journal/test');
addEngineSrcDir('core/util/zip');
addEngineSrcDir('core/util/zip/unitTests');
addEngineSrcDir('core/util/zip/compressors');
addEngineSrcDir('i18n');
addEngineSrcDir('sim');
addEngineSrcDir('unit/tests');
addEngineSrcDir('unit');
addEngineSrcDir('util');
addEngineSrcDir('windowManager');
addEngineSrcDir('windowManager/torque');
addEngineSrcDir('windowManager/test');
addEngineSrcDir('math');
addEngineSrcDir('math/util');
addEngineSrcDir('math/test');
addEngineSrcDir('platform');
addEngineSrcDir('cinterface');
switch( Generator::$platform )
{
case "win32":
case "mac":
case "linux":
addEngineSrcDir('platform/nativeDialogs');
addEngineSrcDir('platform/menus');
addEngineSrcDir('platform/test');
break;
}
addEngineSrcDir('platform/threads');
addEngineSrcDir('platform/async');
addEngineSrcDir('app');
addEngineSrcDir('app/net');
// Moved this here temporarily because PopupMenu uses on it and is currently in core
addEngineSrcDir('util/messaging');
switch( Generator::$platform )
{
case "win32":
addEngineSrcDir('platformWin32');
addEngineSrcDir('platformWin32/nativeDialogs');
addEngineSrcDir('platformWin32/menus');
addEngineSrcDir('platformWin32/threads');
addEngineSrcDir('platformWin32/videoInfo');
addEngineSrcDir('platformWin32/minidump');
addEngineSrcDir('windowManager/win32');
break;
case "mac":
addEngineSrcDir('platformMac');
addEngineSrcDir('platformMac/menus');
addEngineSrcDir('platformPOSIX');
addEngineSrcDir('windowManager/mac');
break;
case "360":
addEngineSrcDir('platformXbox');
addEngineSrcDir('platformXbox/threads');
addEngineSrcDir('windowManager/360');
break;
case "ps3":
addEngineSrcDir('platformPS3');
addEngineSrcDir('platformPS3/threads');
addEngineSrcDir('windowManager/ps3');
break;
case "linux":
case "linux_dedicated":
addEngineSrcDir('platformX86UNIX');
addEngineSrcDir('platformX86UNIX/threads');
addEngineSrcDir('platformPOSIX');
break;
}
// GFX
addEngineSrcDir( 'gfx/Null' );
addEngineSrcDir( 'gfx/test' );
addEngineSrcDir( 'gfx/bitmap' );
addEngineSrcDir( 'gfx/bitmap/loaders' );
addEngineSrcDir( 'gfx/util' );
addEngineSrcDir( 'gfx/video' );
addEngineSrcDir( 'gfx' );
addEngineSrcDir( 'shaderGen' );
switch( Generator::$platform )
{
case "win32":
//addEngineSrcDir( 'gfx/D3D8' );
addEngineSrcDir( 'gfx/D3D' );
addEngineSrcDir( 'gfx/D3D9' );
addEngineSrcDir( 'gfx/D3D9/pc' );
addEngineSrcDir( 'shaderGen/hlsl' );
break;
case "360":
addEngineSrcDir( 'gfx/D3D9' );
addEngineSrcDir( 'gfx/D3D9/360' );
addEngineSrcDir( 'shaderGen/hlsl' );
addEngineSrcDir( 'shaderGen/360' );
break;
case "mac":
addEngineSrcDir( 'gfx/gl/ggl/mac' );
// GFX - GGL
addEngineSrcDir( 'gfx/gl' );
addEngineSrcDir( 'gfx/gl/ggl' );
addEngineSrcDir( 'gfx/gl/ggl/generated' );
addEngineSrcDir( 'shaderGen/glsl' );
break;
case "ps3":
addEngineSrcDir( 'gfx/gl/ggl/ps3' );
// GFX - GGL
addEngineSrcDir( 'gfx/gl' );
addEngineSrcDir( 'gfx/gl/ggl' );
addEngineSrcDir( 'gfx/gl/ggl/generated' );
addEngineSrcDir( 'shaderGen/glsl' );
break;
}
// GFX - Sim dependent
addEngineSrcDir( 'gfx/sim');
// GUI
addEngineSrcDir('gui/buttons');
addEngineSrcDir('gui/containers');
addEngineSrcDir('gui/controls');
addEngineSrcDir('gui/core');
addEngineSrcDir('gui/game');
addEngineSrcDir('gui/shiny');
addEngineSrcDir('gui/utility');
addEngineSrcDir('gui');
// Include tools for non-tool builds (or define player if a tool build)
includeModule( 'tools' );
/////////////////////
// Additional includes
addIncludePath( '../../source' ); // product source (relative to solution output directories)
addIncludePath( getAppEngineSrcDir() ); // main engine source dir relative to app project file
addIncludePath( getAppLibSrcDir() ); // main lib source dir relative to app project file
if ( Generator::$platform == "win32" )
{
addIncludePath( getAppLibSrcDir() . 'directx8' );
addIncludePath( getAppLibSrcDir() . 'openal/win32' );
addProjectLibDir( getAppLibSrcDir() . 'SDL/win32' );
addProjectLibDir( getAppLibSrcDir() . 'unicode' );
addProjectLibDir( getAppLibSrcDir() . 'directx8' );
}
?>

View file

@ -0,0 +1,41 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'd3dx8dll' );
// Source
addLibSrcDir( 'd3dx8dll' );
// Additional includes
addLibIncludePath( 'd3dxdll' );
addLibIncludePath( 'directx8' );
// Libs
addProjectLibDir( 'directx8' );
// Defines
addProjectDefines( '_WINDOWS', '_USRDLL', 'D3DX8DLL_EXPORTS' );
endModule();
?>

View file

@ -0,0 +1,37 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'dsound' );
if ( Generator::$platform == "win32" )
{
addEngineSrcDir('sfx/dsound');
addEngineSrcDir('sfx/xaudio');
addProjectLibInput('x3daudio.lib');
}
else if ( Generator::$platform == "360" )
addEngineSrcDir('sfx/xaudio');
endModule();
?>

View file

@ -0,0 +1,77 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'fmod' );
$allgood = true;
// Additional includes
switch( Generator::$platform )
{
case "win32":
case "mac":
addLibIncludePath( 'fmod/inc' );
break;
case "360":
// Assume 32-bit system
$FMOD_PATH = "C:/Program Files/FMOD SoundSystem/FMOD Programmers API Xbox 360/";
// Ohnoes! Try 64-bit!
if (!file_exists($FMOD_PATH))
$FMOD_PATH = "C:/Program Files (x86)/FMOD SoundSystem/FMOD Programmers API Xbox 360/";
if (!file_exists($FMOD_PATH))
{
$allgood = false;
echo "\n\n FMOD integration failed to find Xbox360 installation!\n";
echo " - FMOD_PATH is set to $FMOD_PATH\n\n";
}
else
{
echo "\n\nFMOD integration for Torque3D on the Xbox360\n";
echo " - FMOD_PATH is set to $FMOD_PATH\n\n";
// Fmod API
addIncludePath($FMOD_PATH . 'api/inc');
addProjectLibDir($FMOD_PATH . 'api/lib');
// Fmod Designer API
addIncludePath($FMOD_PATH . 'fmoddesignerapi/api/inc');
addProjectLibDir($FMOD_PATH . 'fmoddesignerapi/api/lib');
addProjectLibInput('fmodxbox360.lib');
addProjectLibInput('xmahal.lib');
addProjectLibInput('xmic.lib');
// Prior to June 2009 XDK, FMOD requires xaudio.lib
//addProjectLibInput('xaudio.lib');
}
break;
}
// Source
if($allgood)
addEngineSrcDir('sfx/fmod');
endModule();
?>

View file

@ -0,0 +1,37 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'ljpeg' );
// Source
addLibSrcDir( 'ljpeg' );
// Additional includes
addLibIncludePath( 'ljpeg' );
// Defines
if ( Generator::$platform == "360" )
addProjectDefines( 'NO_GETENV;' );
endModule();
?>

View file

@ -0,0 +1,36 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'libode' );
// Source
addLibSrcDir( 'ode' );
// Additional includes
addLibIncludePath( 'opcode' );
addLibIncludePath( 'ode' );
addLibIncludePath( '' );
endModule();
?>

View file

@ -0,0 +1,29 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
addLibSrcDir( 'libogg/src' );
addLibSrcDir( 'libogg/include/ogg' );
addLibIncludePath( 'libogg/include' );
?>

View file

@ -0,0 +1,58 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'libtheora' );
addLibSrcDir( 'libtheora/include/theora' );
addLibSrcDir( 'libtheora/lib' );
addLibSrcDir( 'libtheora/lib/dec' );
switch( Generator::$platform )
{
case "win32":
addLibSrcDir( 'libtheora/lib/dec/x86_vc' );
break;
default:
addLibSrcDir( 'libtheora/lib/dec/x86' );
break;
}
// As we don't use the encoder, disable this for now.
addLibSrcDir( 'libtheora/lib/enc' );
switch( Generator::$platform )
{
case "win32":
addLibSrcDir( 'libtheora/lib/enc/x86_32_vs' );
break;
default:
addLibSrcDir( 'libtheora/lib/enc/x86_32' );
break;
}
addLibIncludePath( 'libtheora/include' );
addLibIncludePath( 'libogg/include' );
endModule();
?>

View file

@ -0,0 +1,48 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
// NOTE: This all the source in the libvorbis library which
// according to the README includes libvorbis, libvorbisfile,
// and libvorbisenc.
//
// We really only need libvorbis and libvorbisfile for loading
// ogg vorbis files, but the source is distrubuted all in one
// folder and the project generator does not allow excluding
// files.
//
// In an effort to make upgrading this library simple the
// the inclusion of the encoder is acceptable. It should
// be filtered out of the build by the linker.
addLibSrcDir( 'libvorbis/lib' );
addLibSrcDir( 'libvorbis/lib/books/coupled' );
addLibSrcDir( 'libvorbis/lib/books/floor' );
addLibSrcDir( 'libvorbis/lib/books/uncoupled' );
addLibSrcDir( 'libvorbis/lib/modes' );
addLibSrcDir( 'libvorbis/include/vorbis' );
addLibIncludePath( 'libvorbis/lib' );
addLibIncludePath( 'libvorbis/include' );
addLibIncludePath( 'libogg/include' );
?>

View file

@ -0,0 +1,35 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'lmng' );
// Source files
addLibSrcDir( 'lmng' );
// Additional includes
addLibIncludePath( 'lmng' );
addLibIncludePath( 'lpng' );
addLibIncludePath( 'zlib' );
addLibIncludePath( 'ljpeg' );
endModule();
?>

View file

@ -0,0 +1,45 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'nxCharacter' );
global $PHYSX_SDK_PATH;
// Defines
addProjectDefines( 'WIN32' );
addProjectDefines( 'NXCHARACTER_STATIC' );
// Source
addSrcDir( $PHYSX_SDK_PATH . '/SDKs/NxCharacter/src' );
addSrcDir( $PHYSX_SDK_PATH . '/SDKs/NxCharacter/include' );
// Additional includes
addIncludePath( $PHYSX_SDK_PATH . '/SDKs/NxCharacter/include' );
addIncludePath( $PHYSX_SDK_PATH . '/SDKs/Physics/include' );
addIncludePath( $PHYSX_SDK_PATH . '/SDKs/Foundation/include' );
addIncludePath( $PHYSX_SDK_PATH . '/SDKs/PhysXLoader/include' );
addIncludePath( $PHYSX_SDK_PATH . '/SDKs/Cooking/include' );
endModule();
?>

View file

@ -0,0 +1,43 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'nxuStream' );
global $PHYSX_SDK_PATH;
// Defines
addProjectDefines( 'WIN32' );
// Source
addSrcDir( $PHYSX_SDK_PATH . '/Tools/NxuStream2' );
// Additional includes
addIncludePath( $PHYSX_SDK_PATH . '/Tools/NxuStream2' );
addIncludePath( $PHYSX_SDK_PATH . '/SDKs/Physics/include' );
addIncludePath( $PHYSX_SDK_PATH . '/SDKs/Foundation/include' );
addIncludePath( $PHYSX_SDK_PATH . '/SDKs/PhysXLoader/include' );
addIncludePath( $PHYSX_SDK_PATH . '/SDKs/Cooking/include' );
endModule();
?>

View file

@ -0,0 +1,39 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'opcode' );
// Defines
addProjectDefine( 'TORQUE_OPCODE' );
addProjectDefine( 'ICE_NO_DLL' );
// Source
addLibSrcDir( 'opcode' );
addLibSrcDir( 'opcode/Ice' );
// Additional includes
addLibIncludePath( 'opcode' );
endModule();
?>

View file

@ -0,0 +1,32 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
// OpenAL
addEngineSrcDir('sfx/openal');
addEngineSrcDir('sfx/openal/mac');
addEngineSrcDir('sfx/openal/win32');
if ( Generator::$platform == "win32" )
addIncludePath( getAppLibSrcDir() . 'openal/win32' );
?>

View file

@ -0,0 +1,30 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
includeModule( 'demo' );
addProjectDefine( 'TORQUE_DEMO_PESTTIMER' );
addEngineSrcDir('demo/pestTimer');
?>

View file

@ -0,0 +1,107 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'physX' );
// Look for the optional global from the project.conf.
global $PHYSX_SDK_PATH;
if (!$PHYSX_SDK_PATH)
{
// First look for an environment var.
$PHYSX_SDK_PATH = getenv( "TORQUE_PHYSX_PATH" );
if (strlen($PHYSX_SDK_PATH) == 0 || !file_exists($PHYSX_SDK_PATH))
{
// Sometimes users get confused and use this var.
$PHYSX_SDK_PATH = getenv( "PHYSX_SDK_PATH" );
if (strlen($PHYSX_SDK_PATH) == 0 || !file_exists($PHYSX_SDK_PATH))
{
// Since neither environment var worked try for
// the default PhysX SDK install location.
$PHYSX_SDK_PATH = getenv("ProgramFiles") . "/NVIDIA Corporation/NVIDIA PhysX SDK/v2.8.4_win";
// Last channce... try the x86 default install path.
if (!file_exists($PHYSX_SDK_PATH))
$PHYSX_SDK_PATH = getenv("ProgramFiles(x86)") . "/NVIDIA Corporation/NVIDIA PhysX SDK/v2.8.4_win";
}
}
// We need forward slashes for paths.
$PHYSX_SDK_PATH = str_replace( "\\", "/", $PHYSX_SDK_PATH);
// Remove trailing slashes.
$PHYSX_SDK_PATH = rtrim($PHYSX_SDK_PATH, " /");
}
// If we still don't have the SDK path then let the user know.
if (!file_exists($PHYSX_SDK_PATH))
{
trigger_error(
"\n*******************************************************************".
"\n".
"\n We were not able to find a valid path to the PhysX SDK!".
"\n".
"\n You must install the latest PhysX SDK and set the path via a".
"\n \$PHYSX_SDK_PATH variable in your buildFiles/project.conf file".
"\n or by setting the TORQUE_PHYSX_PATH system environment variable".
"\n (may require a reboot).".
"\n".
"\n*******************************************************************".
"\n", E_USER_ERROR );
}
addProjectDefine( "TORQUE_PHYSICS_PHYSX" );
addProjectDefine( "TORQUE_PHYSICS_ENABLED" );
// Source
addEngineSrcDir( "T3D/physics/physX" );
// Includes
addIncludePath( $PHYSX_SDK_PATH . "/SDKs/Physics/include" );
addIncludePath( $PHYSX_SDK_PATH . "/SDKs/Foundation/include" );
addIncludePath( $PHYSX_SDK_PATH . "/SDKs/PhysXLoader/include" );
addIncludePath( $PHYSX_SDK_PATH . "/SDKs/Cooking/include" );
addIncludePath( $PHYSX_SDK_PATH . "/SDKs/NxCharacter/include" );
addIncludePath( $PHYSX_SDK_PATH . "/Tools/NxuStream2" );
// Libs
addProjectLibDir( $PHYSX_SDK_PATH . "/SDKs/lib/Win32" );
addProjectLibInput( "PhysXCooking.lib" );
addProjectLibInput( "PhysXLoader.lib" );
// For PhysX support.
includeLib( 'nxCharacter' );
includeLib( 'nxuStream' );
if (inProjectConfig())
{
addProjectDependency( 'nxCharacter' );
addProjectDependency( 'nxuStream' );
addSolutionProjectRef( 'nxCharacter' );
addSolutionProjectRef( 'nxuStream' );
}
endModule();
?>

View file

@ -0,0 +1,37 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'lpng' );
// Source
addLibSrcDir( 'lpng' );
// Additional includes
addLibIncludePath( 'zlib' );
addLibIncludePath( 'lpng' );
// Defines
if ( Generator::$platform == "360" )
addProjectDefines( 'PNG_NO_ASSEMBLER_CODE' );
endModule();
?>

View file

@ -0,0 +1,34 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'squish' );
// Source
addLibSrcDir( 'squish' );
// Additional includes
addLibIncludePath( 'squish' );
endModule();
?>

View file

@ -0,0 +1,31 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
addProjectDefine( 'TORQUE_OGGTHEORA' );
addProjectDefine( 'TORQUE_OGGVORIBS' ); // Currently used by Theora video code.
addEngineSrcDir( 'core/ogg' );
addEngineSrcDir( 'gfx/video' );
addEngineSrcDir( 'gui/theora' );
?>

View file

@ -0,0 +1,28 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
addLibSrcDir( 'tinyxml' );
addLibIncludePath( 'tinyxml' );
?>

View file

@ -0,0 +1,39 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
if (!getToolBuild())
{
addProjectDefine( 'TORQUE_PLAYER' );
}
else
{
// 3D Tools
addEngineSrcDir('gui/worldEditor');
addEngineSrcDir('environment/editors');
addEngineSrcDir('forest/editor');
addEngineSrcDir('gui/editor');
addEngineSrcDir('gui/editor/inspector');
}
?>

View file

@ -0,0 +1,33 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'lungif' );
// Source
addLibSrcDir( 'lungif' );
// Additional includes
addLibIncludePath( 'lungif' );
endModule();
?>

View file

@ -0,0 +1,26 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
addProjectDefine( 'TORQUE_OGGVORBIS' );
?>

View file

@ -0,0 +1,30 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'webDeploy' );
includeLib( 'WebDeploy');
endModule();
?>

View file

@ -0,0 +1,28 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
// XAudio
addEngineSrcDir('sfx/xaudio');
addProjectLibInput('x3daudio.lib');
?>

View file

@ -0,0 +1,34 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
beginModule( 'zlib' );
// Source
addLibSrcDir( 'zlib' );
// Additional includes
addLibIncludePath( 'zlib' );
endModule();
?>

View file

@ -0,0 +1,216 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
// Yes, I still need to comment most of the stuff in here. I tried to do a quick port over of the stuff from the bat and
// skipped laying it out
function copyDir( $source, $target, $exclude = array())
{
if ( is_dir( $source ) )
{
@mkdir( $target, 0777, true );
$dirRef = dir( $source );
while ( FALSE !== ( $entry = $dirRef->read() ) )
{
// Read through exclude list. If the current directory is on it, skip it
$skip = false;
foreach($exclude as $exclFile)
{
if($entry == $exclFile)
{
$skip = true;
continue;
}
}
if ( $entry == '.' || $entry == '..' || $skip )
continue;
$entryFullPath = $source . '/' . $entry;
if ( is_dir( $entryFullPath ) )
{
copyDir( $entryFullPath, $target . '/' . $entry, $exclude );
continue;
}
copy( $entryFullPath, $target . '/' . $entry );
echo("Copying " . $entry . " to " . $target . "/\n");
}
$dirRef->close();
}
else
copy( $source, $target );
}
// Function taken from PHP.net
function rm_recursive($filepath)
{
if (is_dir($filepath) && !is_link($filepath))
{
if ($dirRef = opendir($filepath))
{
while (($curfile = readdir($dirRef)) !== false)
{
if ($curfile == '.' || $curfile == '..')
continue;
if (!rm_recursive($filepath.'/'.$curfile))
throw new Exception($filepath.'/'.$curfile.' could not be deleted.');
}
closedir($dirRef);
}
return rmdir($filepath);
}
return unlink($filepath);
}
// Replaces all instances of the given text string from the given file
function ReplaceTextInFile($file, $string, $replace)
{
$buf = "";
$confg = file($file);
foreach ($confg as $line)
{
$line = str_replace($string, $replace, $line);
$buf .= $line;
}
$confg = fopen($file, "w");
fwrite($confg, $buf);
fclose($confg);
}
// Flag that notes whether a simple (non-fatal) error has occurred
$withError = false;
// Minimum number of passed arguments is 3
if($argc < 4)
exit("\nError! Invalid number of arguments! Correct format is Project_Name Torque_Root Project_Destination_Path (optional -O overwrite existing files)\n");
// If there are 5 args and the last one isn't the override flag, it's a fatal error
else if($argc == 5 && $argv[4] != "-O")
exit("\nInvalid argument of $argv[4]! Should be -O (optional overwrite existing files flag)\n");
// Define our main working paths
$torqueDir = $argv[2];
$newPath = $argv[3] . "/".$argv[1] . "/";
$templPath = $torqueDir . "/Templates/Full/";
// Aesthetics...php doesn't care
$newPath = str_replace("//", "/", $newPath);
$templPath = str_replace("//", "/", $templPath);
// Check if template path exists (ie user didn't do something wrong)
if(is_dir($templPath))
{
// If the destination path doesn't exist, make it
if(!is_dir($argv[3]))
mkdir($argv[3], 0777, true);
// If the project folder exists, check for -O
if(is_dir($newPath))
{
//If there's no -O, we exit out
if($argv[4] != "-O")
exit("\nProject folder already exists! Use -O as 4th argument is you wish to overwrite");
// Otherwise we delete the other .exe and .torsion as they won't otherwise be overwritten
else
{
if(!unlink($newPath . "game/" . $argv[1] . ".exe") ||
!unlink($newPath . "game/" . $argv[1] . ".torsion"))
{
echo("\nError deleting old files " . $argv[1] . ".exe and " . $argv[1] . ".torsion\n");
$withError = true;
}
}
}
// Read directory exclusion list from file (most likely provided by GUI prompt)
$exclude = file($templPath . "exclude.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
// By default exclude .svn, config, and buildFiles
if($exclude == false)
{
$exclude = array(".svn", "Link");
}
else
{
$exclude[] = ".svn";
$exclude[] = "Link";
}
copyDir($templPath, $newPath, $exclude);
}
// If the given template directory does not exist, we exit
else{
exit("\nTemplate directory does not exist at $templPath!");
}
//Replace references to template
ReplaceTextInFile($newPath . "buildFiles/config/project.conf", "Full", $argv[1]);
ReplaceTextInFile($newPath . "buildFiles/config/project.360.conf", "Full", $argv[1]);
ReplaceTextInFile($newPath . "buildFiles/config/project.mac.conf", "Full", $argv[1]);
ReplaceTextInFile($newPath . "game/Template.torsion", "Full", $argv[1]);
ReplaceTextInFile($newPath . "game/main.cs", "Full", $argv[1]);
ReplaceTextInFile($newPath . "source/torqueConfig.h", "Full", $argv[1]);
//Rename the executable and the torsion project file
if(!rename($newPath . "game/Full.exe", $newPath . "game/" . $argv[1] . ".exe"))
{
echo("\n\nCould not rename Full.exe! You may need to rename manually\n");
$withError = true;
}
if(!rename($newPath . "game/Full.torsion", $newPath . "game/" . $argv[1] . ".torsion"))
{
echo("\n\nCould not rename Full.torsion! You may need to rename manually\n");
$withError = true;
}
chdir($newPath);
// Generate the projects and solutions using the generateProjects.bat
// We don't hand in the $torqueDir if our output path is in the Torque folders
// Probably should make this smarter so that it can handle directories that
// are in the the Torque folder but are not at the same level as GameExamples and Projects
if (stristr($newPath, $torqueDir))
passthru("generateProjects.bat noPause");
else
passthru("generateProjects.bat noPause $torqueDir");
// If there wasn't an error, print happy message
if(!$withError)
echo("\nProject creation complete!\nYou can find your new project at $newPath.");
// If there was, print ultra mega sad message
else
echo("\nProject creation completed, however there were some errors. Please verify that your new project is correct.\nYou can find your new project at $newPath.");
?>

View file

@ -0,0 +1,490 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
//--------------------------------------------------------------------------------
//
// This file is now the 'API' which just wraps all the internal stuff nicely.
//
//--------------------------------------------------------------------------------
function beginProject($name, $sharedConfig)
{
// Set the game project name, this is what your game's exe/dll will be called
setGameProjectName($name);
if (Generator::$platform == "win32" && $sharedConfig)
beginSolutionConfig( $name, '{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}' );
}
function endProject($sharedConfig)
{
if (Generator::$platform == "win32" && $sharedConfig)
endSolutionConfig();
}
function beginSolutionConfig( $name, $guid = '' )
{
Generator::beginSolution( $name, $guid );
}
function addSolutionProjectRef( $pname )
{
Generator::addSolutionProjectRef( $pname );
}
// Add a reference to an external project, this is used for WPF projects currently
// as adding all the various designer/xaml/stuff to the project generator is probably overkill
// However, it is nice to not have to add the project to the solution whenever you run the project generator
function addSolutionProjectRefExt( $pname, $ppath, $pguid )
{
Generator::addSolutionProjectRefExt( $pname, $ppath, $pguid );
}
function endSolutionConfig()
{
Generator::endSolution();
}
function setPlatform( $platform )
{
echo(' - Setting platform to: ' . $platform . "\n");
Generator::$platform = $platform;
}
function includeLib( $libName )
{
//echo( "GLP: " . Generator::getGeneratorLibsPath() . $libName . "\n" );
Generator::includeLib( $libName );
}
function includeModule( $modName )
{
require( Generator::getGeneratorModulesPath() . $modName . '.inc' );
}
function beginActiveXConfig( $lib_name, $guid = '', $gameDir = 'game', $output_name = '' )
{
Generator::beginActiveXConfig( $lib_name, $guid, $gameDir, $output_name );
}
function endActiveXConfig()
{
Generator::endActiveXConfig();
}
function beginSafariConfig( $lib_name, $guid = '', $gameDir = 'game', $output_name = '' )
{
Generator::beginSafariConfig( $lib_name, $guid, $gameDir, $output_name );
}
function endSafariConfig()
{
Generator::endSafariConfig();
}
function beginSharedLibConfig( $lib_name, $guid = '', $gameDir = 'game', $output_name = '' )
{
Generator::beginSharedLibConfig( $lib_name, $guid, $gameDir, $output_name );
}
function endSharedLibConfig()
{
Generator::endSharedLibConfig();
}
function beginNPPluginConfig( $lib_name, $guid = '', $gameDir = 'game', $output_name = '' )
{
Generator::beginNPPluginConfig( $lib_name, $guid, $gameDir, $output_name );
}
function endNPPluginConfig()
{
Generator::endNPPluginConfig();
}
function beginLibConfig( $lib_name, $guid = '', $gameDir = 'game', $output_name = '' )
{
Generator::beginLibConfig( $lib_name, $guid, $gameDir, $output_name );
}
function endLibConfig()
{
Generator::endLibConfig();
}
function beginAppConfig( $app_name, $guid = '', $game_dir = 'game', $output_name = '' )
{
Generator::beginAppConfig( $app_name, $guid, $game_dir, $output_name );
}
function endAppConfig()
{
Generator::endAppConfig();
}
function beginSharedAppConfig( $app_name, $guid = '', $game_dir = 'game', $output_name = '' )
{
Generator::beginSharedAppConfig( $app_name, $guid, $game_dir, $output_name );
}
function endSharedAppConfig()
{
Generator::endSharedAppConfig();
}
function beginCSProjectConfig( $app_name, $guid = '', $game_dir = 'game', $output_name = '' )
{
Generator::beginCSProjectConfig( $app_name, $guid, $game_dir, $output_name );
}
function endCSProjectConfig()
{
Generator::endCSProjectConfig();
}
///////////////////////
function beginModule( $name )
{
Generator::beginModule( $name );
}
function endModule()
{
Generator::endModule();
}
function addSrcDir( $dir, $recurse = false )
{
//echo( "ADD SRC DIR: " . $dir . "\n" );
Generator::addSrcDir( $dir, $recurse );
}
function addSrcFile( $file )
{
//echo( "ADD SRC FILE: " . $file . "\n" );
Generator::addSrcFile( $file );
}
function addEngineSrcDir( $dir )
{
//echo( "ADD ENGINE SRC DIR: " . getEngineSrcDir() . $dir . "\n" );
addSrcDir( getEngineSrcDir() . $dir );
}
function addEngineSrcFile( $file )
{
//echo( "ADD SRC FIL: " . getEngineSrcDir() . $file . "\n" );
addSrcFile( getEngineSrcDir() . $file );
}
function addLibSrcDir( $dir )
{
addSrcDir( Generator::getLibSrcDir() . $dir );
}
function addLibSrcFile( $file )
{
addSrcDir( Generator::getLibSrcDir() . $file );
}
function addLibIncludePath( $path )
{
// We need to make the include paths relative to the project file location!
addIncludePath( getAppLibSrcDir() . $path );
}
function getAppLibSrcDir()
{
// We need to make the include paths relative to the project file location!
return "../" . getLibSrcDir();
}
function addAppIncludePath( $path )
{
// We need to make the include paths relative to the project file location!
addIncludePath( getAppEngineSrcDir() . $path );
}
function getAppEngineSrcDir()
{
// We need to make the include paths relative to the project file location!
return "../" . getEngineSrcDir();
}
function getAppEngineBinDir()
{
// We need to make the include paths relative to the project file location!
return "../" . getEngineBinDir();
}
function getEngineSrcDir()
{
return Generator::getEngineSrcDir();
}
function getLibSrcDir()
{
return Generator::getLibSrcDir();
}
function getEngineBinDir()
{
return Generator::getEngineBinDir();
}
function addIncludePath( $path )
{
//echo( "ADD INCLUDE: " . $path . "\n" );
Generator::addIncludePath( $path );
}
/// Add a preprocessor directive/define
function addProjectDefine( $d, $v = null )
{
Generator::addProjectDefine( $d, $v );
}
/// Add a list of defines in one call
function addProjectDefines()
{
$args = func_get_args();
$count = func_num_args();
if( $count > 0 )
Generator::addProjectDefines( $args );
else
echo( "addProjectDefines() - no arguments passed!" );
}
function setProjectGUID( $guid )
{
Generator::setProjectGUID( $guid );
}
function setProjectModuleDefinitionFile( $mdef )
{
Generator::setProjectModuleDefinitionFile( $mdef );
}
function addProjectLibDir( $dir )
{
Generator::addProjectLibDir( $dir );
}
function addProjectLibInput( $lib_name )
{
Generator::addProjectLibInput( $lib_name );
}
function addProjectDependency( $pd )
{
Generator::addProjectDependency( $pd );
}
function removeProjectDependency( $pd )
{
Generator::removeProjectDependency( $pd );
}
function addProjectReference( $refName, $version = "" )
{
Generator::addProjectReference( $refName, $version );
}
// disable a specific project compiler warning
function disableProjectWarning( $warning )
{
Generator::disableProjectWarning( $warning );
}
function setGameProjectName($name)
{
Generator::setGameProjectName($name);
}
function getGameProjectName()
{
return Generator::getGameProjectName();
}
function setToolBuild($tb)
{
Generator::setToolBuild($tb);
}
function getToolBuild()
{
return Generator::getToolBuild();
}
function setWatermarkBuild($wb)
{
Generator::setWatermarkBuild($wb);
}
function getWatermarkBuild()
{
return Generator::getWatermarkBuild();
}
function setPurchaseScreenBuild($psb)
{
Generator::setPurchaseScreenBuild($psb);
}
function getPurchaseScreenBuild()
{
return Generator::getPurchaseScreenBuild();
}
function setDemoBuild($db)
{
Generator::setDemoBuild($db);
}
function getDemoBuild()
{
return Generator::getDemoBuild();
}
function setObjectLimitBuild($olb)
{
Generator::setObjectLimitBuild($olb);
}
function getObjectLimitBuild()
{
return Generator::getObjectLimitBuild();
}
function setTimeOutBuild($tob)
{
Generator::setTimeOutBuild($tob);
}
function getTimeOutBuild()
{
return Generator::getTimeOutBuild();
}
function inProjectConfig()
{
return Generator::inProjectConfig();
}
// On Windows, 1 - Console, 2 - Windows
function setProjectSubSystem( $subSystem )
{
Generator::setProjectSubSystem( $subSystem );
}
// Sets whether to use /MT or /MD code generation/runtime on Windows
// /MD plays better with multiple dynamic libraries in a project (and with certain libraries (like Qt)
// /MD also generates smaller binaries as the runtime isn't included in each module, memory is handled consistently, etc
// You must include or install via the redistributable package the appropriate VS runtime for end users.
function setDLLRuntime ($val)
{
Generator::setDLLRuntime( $val );
}
//-------------------------------------------------------------------------------- UTIL
// Some versions of PHP4 are unable to recusively create directories.
// The version of PHP that is distributed with Mac OS 10.4 suffers from this.
function mkdir_r($path, $mode)
{
if( @mkdir( $path, $mode ) or file_exists( $path ) )
return true;
return ( mkdir_r( dirname( $path ), $mode ) and mkdir( $path, $mode ) );
}
// This is used inside an if statement in the smarty templates
function dontCompile( $string, $output )
{
// Skip marking header files to be excluded from the
// build. It confuses VS2010 and it will not put the
// file into the correct filter folder.
//
if ( preg_match( '#^.*\.(h|hpp|hh|inc)$#i', $string ) )
return false;
if( !is_array( $output->dont_compile_patterns ) )
return false;
foreach( $output->dont_compile_patterns as $pattern )
if( preg_match( $pattern, $string ) )
return true;
return false;
}
/// Generates and returns a randomly generated uuid in the form:
///
/// {xxxxxxxx-xxxx-4xxx-Yxxx-xxxxxxxxxxxx}
///
/// Where Y is either 8, 9, A, or B. This is known as
/// a v4 UUID. See...
///
/// http://en.wikipedia.org/wiki/Universally_Unique_Identifier#Version_4_.28random.29
///
function gen_uuid()
{
return sprintf( '{%04x%04x-%04x-%04x-%04x-%04x%04x%04x}',
// 32 bits for "time_low"
mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
// 16 bits for "time_mid"
mt_rand( 0, 0xffff ),
// 16 bits for "time_hi_and_version",
// four most significant bits holds version number 4
mt_rand( 0, 0x0fff ) | 0x4000,
// 16 bits, 8 bits for "clk_seq_hi_res",
// 8 bits for "clk_seq_low",
// two most significant bits holds zero and one for variant DCE1.1
mt_rand( 0, 0x3fff ) | 0x8000,
// 48 bits for "node"
mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )
);
}
?>

View file

@ -0,0 +1,92 @@
<?php
//-----------------------------------------------------------------------------
// Copyright (c) 2012 GarageGames, LLC
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
//
// Hello, hello...
//
echo( "Welcome to projectGenerator 0.9\n" );
echo( "Copyright (c) 2012 GarageGames, LLC\n" );
echo( "Released under a MIT license.\n" );
echo( "\n" );
//
// Configure error logging
//
error_reporting( E_ALL & ~E_NOTICE );
//
// Requires
//
require_once( "classes/BuildTarget.php" );
require_once( "btargets/targets.inc" );
require_once( "classes/Generator.php" );
require_once( "projectGenUtils.inc" );
require_once( "smarty/Smarty.class.php" );
//
// Initialization
//
$g_cwd = realpath( dirname( $_SERVER[ 'PHP_SELF' ] ) );
echo( " CWD = " . $g_cwd . "\n" );
//
// Load, instantiate, and configure the smarty template engine.
//
echo( " - Loading Smarty...\n" );
$tpl = new Smarty();
$tpl->template_dir = $g_cwd . "/templates";
$tpl->compile_dir = $g_cwd . "/templates_c";
$tpl->clear_all_cache();
// By default we assume that the root of the Torque SDK
// is located two folders up from the CWD. That is unless
// another path is passed in the command line.
$torqueRoot = "../..";
if ( $argc >= 3 )
$torqueRoot = str_replace( "\\", "/", $argv[2] );
// Kick off the generator
Generator::init( $torqueRoot );
// Ready to read our config file.
echo( " - Loading config file " . realpath($argv[1])."\n" );
require( $argv[ 1 ] );
// Generate all projects
Generator::generateProjects( $tpl );
// Now the solutions (if any)
$tpl->clear_all_cache();
Generator::generateSolutions( $tpl );
// finally write out the sample.html for web deployment (if any)
WebPlugin::writeSampleHtml();
exit;
?>

View file

@ -0,0 +1,389 @@
<?php
/**
* Config_File class.
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* @link http://smarty.php.net/
* @version 2.6.18
* @copyright Copyright: 2001-2005 New Digital Group, Inc.
* @author Andrei Zmievski <andrei@php.net>
* @access public
* @package Smarty
*/
/* $Id: Config_File.class.php,v 1.88 2007/03/06 10:40:06 messju Exp $ */
/**
* Config file reading class
* @package Smarty
*/
class Config_File {
/**#@+
* Options
* @var boolean
*/
/**
* Controls whether variables with the same name overwrite each other.
*/
var $overwrite = true;
/**
* Controls whether config values of on/true/yes and off/false/no get
* converted to boolean values automatically.
*/
var $booleanize = true;
/**
* Controls whether hidden config sections/vars are read from the file.
*/
var $read_hidden = true;
/**
* Controls whether or not to fix mac or dos formatted newlines.
* If set to true, \r or \r\n will be changed to \n.
*/
var $fix_newlines = true;
/**#@-*/
/** @access private */
var $_config_path = "";
var $_config_data = array();
/**#@-*/
/**
* Constructs a new config file class.
*
* @param string $config_path (optional) path to the config files
*/
function Config_File($config_path = NULL)
{
if (isset($config_path))
$this->set_path($config_path);
}
/**
* Set the path where configuration files can be found.
*
* @param string $config_path path to the config files
*/
function set_path($config_path)
{
if (!empty($config_path)) {
if (!is_string($config_path) || !file_exists($config_path) || !is_dir($config_path)) {
$this->_trigger_error_msg("Bad config file path '$config_path'");
return;
}
if(substr($config_path, -1) != DIRECTORY_SEPARATOR) {
$config_path .= DIRECTORY_SEPARATOR;
}
$this->_config_path = $config_path;
}
}
/**
* Retrieves config info based on the file, section, and variable name.
*
* @param string $file_name config file to get info for
* @param string $section_name (optional) section to get info for
* @param string $var_name (optional) variable to get info for
* @return string|array a value or array of values
*/
function get($file_name, $section_name = NULL, $var_name = NULL)
{
if (empty($file_name)) {
$this->_trigger_error_msg('Empty config file name');
return;
} else {
$file_name = $this->_config_path . $file_name;
if (!isset($this->_config_data[$file_name]))
$this->load_file($file_name, false);
}
if (!empty($var_name)) {
if (empty($section_name)) {
return $this->_config_data[$file_name]["vars"][$var_name];
} else {
if(isset($this->_config_data[$file_name]["sections"][$section_name]["vars"][$var_name]))
return $this->_config_data[$file_name]["sections"][$section_name]["vars"][$var_name];
else
return array();
}
} else {
if (empty($section_name)) {
return (array)$this->_config_data[$file_name]["vars"];
} else {
if(isset($this->_config_data[$file_name]["sections"][$section_name]["vars"]))
return (array)$this->_config_data[$file_name]["sections"][$section_name]["vars"];
else
return array();
}
}
}
/**
* Retrieves config info based on the key.
*
* @param $file_name string config key (filename/section/var)
* @return string|array same as get()
* @uses get() retrieves information from config file and returns it
*/
function &get_key($config_key)
{
list($file_name, $section_name, $var_name) = explode('/', $config_key, 3);
$result = &$this->get($file_name, $section_name, $var_name);
return $result;
}
/**
* Get all loaded config file names.
*
* @return array an array of loaded config file names
*/
function get_file_names()
{
return array_keys($this->_config_data);
}
/**
* Get all section names from a loaded file.
*
* @param string $file_name config file to get section names from
* @return array an array of section names from the specified file
*/
function get_section_names($file_name)
{
$file_name = $this->_config_path . $file_name;
if (!isset($this->_config_data[$file_name])) {
$this->_trigger_error_msg("Unknown config file '$file_name'");
return;
}
return array_keys($this->_config_data[$file_name]["sections"]);
}
/**
* Get all global or section variable names.
*
* @param string $file_name config file to get info for
* @param string $section_name (optional) section to get info for
* @return array an array of variables names from the specified file/section
*/
function get_var_names($file_name, $section = NULL)
{
if (empty($file_name)) {
$this->_trigger_error_msg('Empty config file name');
return;
} else if (!isset($this->_config_data[$file_name])) {
$this->_trigger_error_msg("Unknown config file '$file_name'");
return;
}
if (empty($section))
return array_keys($this->_config_data[$file_name]["vars"]);
else
return array_keys($this->_config_data[$file_name]["sections"][$section]["vars"]);
}
/**
* Clear loaded config data for a certain file or all files.
*
* @param string $file_name file to clear config data for
*/
function clear($file_name = NULL)
{
if ($file_name === NULL)
$this->_config_data = array();
else if (isset($this->_config_data[$file_name]))
$this->_config_data[$file_name] = array();
}
/**
* Load a configuration file manually.
*
* @param string $file_name file name to load
* @param boolean $prepend_path whether current config path should be
* prepended to the filename
*/
function load_file($file_name, $prepend_path = true)
{
if ($prepend_path && $this->_config_path != "")
$config_file = $this->_config_path . $file_name;
else
$config_file = $file_name;
ini_set('track_errors', true);
$fp = @fopen($config_file, "r");
if (!is_resource($fp)) {
$this->_trigger_error_msg("Could not open config file '$config_file'");
return false;
}
$contents = ($size = filesize($config_file)) ? fread($fp, $size) : '';
fclose($fp);
$this->_config_data[$config_file] = $this->parse_contents($contents);
return true;
}
/**
* Store the contents of a file manually.
*
* @param string $config_file file name of the related contents
* @param string $contents the file-contents to parse
*/
function set_file_contents($config_file, $contents)
{
$this->_config_data[$config_file] = $this->parse_contents($contents);
return true;
}
/**
* parse the source of a configuration file manually.
*
* @param string $contents the file-contents to parse
*/
function parse_contents($contents)
{
if($this->fix_newlines) {
// fix mac/dos formatted newlines
$contents = preg_replace('!\r\n?!', "\n", $contents);
}
$config_data = array();
$config_data['sections'] = array();
$config_data['vars'] = array();
/* reference to fill with data */
$vars =& $config_data['vars'];
/* parse file line by line */
preg_match_all('!^.*\r?\n?!m', $contents, $match);
$lines = $match[0];
for ($i=0, $count=count($lines); $i<$count; $i++) {
$line = $lines[$i];
if (empty($line)) continue;
if ( substr($line, 0, 1) == '[' && preg_match('!^\[(.*?)\]!', $line, $match) ) {
/* section found */
if (substr($match[1], 0, 1) == '.') {
/* hidden section */
if ($this->read_hidden) {
$section_name = substr($match[1], 1);
} else {
/* break reference to $vars to ignore hidden section */
unset($vars);
$vars = array();
continue;
}
} else {
$section_name = $match[1];
}
if (!isset($config_data['sections'][$section_name]))
$config_data['sections'][$section_name] = array('vars' => array());
$vars =& $config_data['sections'][$section_name]['vars'];
continue;
}
if (preg_match('/^\s*(\.?\w+)\s*=\s*(.*)/s', $line, $match)) {
/* variable found */
$var_name = rtrim($match[1]);
if (strpos($match[2], '"""') === 0) {
/* handle multiline-value */
$lines[$i] = substr($match[2], 3);
$var_value = '';
while ($i<$count) {
if (($pos = strpos($lines[$i], '"""')) === false) {
$var_value .= $lines[$i++];
} else {
/* end of multiline-value */
$var_value .= substr($lines[$i], 0, $pos);
break;
}
}
$booleanize = false;
} else {
/* handle simple value */
$var_value = preg_replace('/^([\'"])(.*)\1$/', '\2', rtrim($match[2]));
$booleanize = $this->booleanize;
}
$this->_set_config_var($vars, $var_name, $var_value, $booleanize);
}
/* else unparsable line / means it is a comment / means ignore it */
}
return $config_data;
}
/**#@+ @access private */
/**
* @param array &$container
* @param string $var_name
* @param mixed $var_value
* @param boolean $booleanize determines whether $var_value is converted to
* to true/false
*/
function _set_config_var(&$container, $var_name, $var_value, $booleanize)
{
if (substr($var_name, 0, 1) == '.') {
if (!$this->read_hidden)
return;
else
$var_name = substr($var_name, 1);
}
if (!preg_match("/^[a-zA-Z_]\w*$/", $var_name)) {
$this->_trigger_error_msg("Bad variable name '$var_name'");
return;
}
if ($booleanize) {
if (preg_match("/^(on|true|yes)$/i", $var_value))
$var_value = true;
else if (preg_match("/^(off|false|no)$/i", $var_value))
$var_value = false;
}
if (!isset($container[$var_name]) || $this->overwrite)
$container[$var_name] = $var_value;
else {
settype($container[$var_name], 'array');
$container[$var_name][] = $var_value;
}
}
/**
* @uses trigger_error() creates a PHP warning/error
* @param string $error_msg
* @param integer $error_type one of
*/
function _trigger_error_msg($error_msg, $error_type = E_USER_WARNING)
{
trigger_error("Config_File error: $error_msg", $error_type);
}
/**#@-*/
}
?>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,157 @@
{* Smarty *}
{* debug.tpl, last updated version 2.1.0 *}
{assign_debug_info}
{capture assign=debug_output}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Smarty Debug Console</title>
{literal}
<style type="text/css">
/* <![CDATA[ */
body, h1, h2, td, th, p {
font-family: sans-serif;
font-weight: normal;
font-size: 0.9em;
margin: 1px;
padding: 0;
}
h1 {
margin: 0;
text-align: left;
padding: 2px;
background-color: #f0c040;
color: black;
font-weight: bold;
font-size: 1.2em;
}
h2 {
background-color: #9B410E;
color: white;
text-align: left;
font-weight: bold;
padding: 2px;
border-top: 1px solid black;
}
body {
background: black;
}
p, table, div {
background: #f0ead8;
}
p {
margin: 0;
font-style: italic;
text-align: center;
}
table {
width: 100%;
}
th, td {
font-family: monospace;
vertical-align: top;
text-align: left;
width: 50%;
}
td {
color: green;
}
.odd {
background-color: #eeeeee;
}
.even {
background-color: #fafafa;
}
.exectime {
font-size: 0.8em;
font-style: italic;
}
#table_assigned_vars th {
color: blue;
}
#table_config_vars th {
color: maroon;
}
/* ]]> */
</style>
{/literal}
</head>
<body>
<h1>Smarty Debug Console</h1>
<h2>included templates &amp; config files (load time in seconds)</h2>
<div>
{section name=templates loop=$_debug_tpls}
{section name=indent loop=$_debug_tpls[templates].depth}&nbsp;&nbsp;&nbsp;{/section}
<font color={if $_debug_tpls[templates].type eq "template"}brown{elseif $_debug_tpls[templates].type eq "insert"}black{else}green{/if}>
{$_debug_tpls[templates].filename|escape:html}</font>
{if isset($_debug_tpls[templates].exec_time)}
<span class="exectime">
({$_debug_tpls[templates].exec_time|string_format:"%.5f"})
{if %templates.index% eq 0}(total){/if}
</span>
{/if}
<br />
{sectionelse}
<p>no templates included</p>
{/section}
</div>
<h2>assigned template variables</h2>
<table id="table_assigned_vars">
{section name=vars loop=$_debug_keys}
<tr class="{cycle values="odd,even"}">
<th>{ldelim}${$_debug_keys[vars]|escape:'html'}{rdelim}</th>
<td>{$_debug_vals[vars]|@debug_print_var}</td></tr>
{sectionelse}
<tr><td><p>no template variables assigned</p></td></tr>
{/section}
</table>
<h2>assigned config file variables (outer template scope)</h2>
<table id="table_config_vars">
{section name=config_vars loop=$_debug_config_keys}
<tr class="{cycle values="odd,even"}">
<th>{ldelim}#{$_debug_config_keys[config_vars]|escape:'html'}#{rdelim}</th>
<td>{$_debug_config_vals[config_vars]|@debug_print_var}</td></tr>
{sectionelse}
<tr><td><p>no config vars assigned</p></td></tr>
{/section}
</table>
</body>
</html>
{/capture}
{if isset($_smarty_debug_output) and $_smarty_debug_output eq "html"}
{$debug_output}
{else}
<script type="text/javascript">
// <![CDATA[
if ( self.name == '' ) {ldelim}
var title = 'Console';
{rdelim}
else {ldelim}
var title = 'Console_' + self.name;
{rdelim}
_smarty_console = window.open("",title.value,"width=680,height=600,resizable,scrollbars=yes");
_smarty_console.document.write('{$debug_output|escape:'javascript'}');
_smarty_console.document.close();
// ]]>
</script>
{/if}

View file

@ -0,0 +1,67 @@
<?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/
/**
* assemble filepath of requested plugin
*
* @param string $type
* @param string $name
* @return string|false
*/
function smarty_core_assemble_plugin_filepath($params, &$smarty)
{
static $_filepaths_cache = array();
$_plugin_filename = $params['type'] . '.' . $params['name'] . '.php';
if (isset($_filepaths_cache[$_plugin_filename])) {
return $_filepaths_cache[$_plugin_filename];
}
$_return = false;
foreach ((array)$smarty->plugins_dir as $_plugin_dir) {
$_plugin_filepath = $_plugin_dir . DIRECTORY_SEPARATOR . $_plugin_filename;
// see if path is relative
if (!preg_match("/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/", $_plugin_dir)) {
$_relative_paths[] = $_plugin_dir;
// relative path, see if it is in the SMARTY_DIR
if (@is_readable(SMARTY_DIR . $_plugin_filepath)) {
$_return = SMARTY_DIR . $_plugin_filepath;
break;
}
}
// try relative to cwd (or absolute)
if (@is_readable($_plugin_filepath)) {
$_return = $_plugin_filepath;
break;
}
}
if($_return === false) {
// still not found, try PHP include_path
if(isset($_relative_paths)) {
foreach ((array)$_relative_paths as $_plugin_dir) {
$_plugin_filepath = $_plugin_dir . DIRECTORY_SEPARATOR . $_plugin_filename;
$_params = array('file_path' => $_plugin_filepath);
require_once(SMARTY_CORE_DIR . 'core.get_include_path.php');
if(smarty_core_get_include_path($_params, $smarty)) {
$_return = $_params['new_file_path'];
break;
}
}
}
}
$_filepaths_cache[$_plugin_filename] = $_return;
return $_return;
}
/* vim: set expandtab: */
?>

View file

@ -0,0 +1,43 @@
<?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/
/**
* Smarty assign_smarty_interface core plugin
*
* Type: core<br>
* Name: assign_smarty_interface<br>
* Purpose: assign the $smarty interface variable
* @param array Format: null
* @param Smarty
*/
function smarty_core_assign_smarty_interface($params, &$smarty)
{
if (isset($smarty->_smarty_vars) && isset($smarty->_smarty_vars['request'])) {
return;
}
$_globals_map = array('g' => 'HTTP_GET_VARS',
'p' => 'HTTP_POST_VARS',
'c' => 'HTTP_COOKIE_VARS',
's' => 'HTTP_SERVER_VARS',
'e' => 'HTTP_ENV_VARS');
$_smarty_vars_request = array();
foreach (preg_split('!!', strtolower($smarty->request_vars_order)) as $_c) {
if (isset($_globals_map[$_c])) {
$_smarty_vars_request = array_merge($_smarty_vars_request, $GLOBALS[$_globals_map[$_c]]);
}
}
$_smarty_vars_request = @array_merge($_smarty_vars_request, $GLOBALS['HTTP_SESSION_VARS']);
$smarty->_smarty_vars['request'] = $_smarty_vars_request;
}
/* vim: set expandtab: */
?>

View file

@ -0,0 +1,79 @@
<?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/
/**
* create full directory structure
*
* @param string $dir
*/
// $dir
function smarty_core_create_dir_structure($params, &$smarty)
{
if (!file_exists($params['dir'])) {
$_open_basedir_ini = ini_get('open_basedir');
if (DIRECTORY_SEPARATOR=='/') {
/* unix-style paths */
$_dir = $params['dir'];
$_dir_parts = preg_split('!/+!', $_dir, -1, PREG_SPLIT_NO_EMPTY);
$_new_dir = (substr($_dir, 0, 1)=='/') ? '/' : getcwd().'/';
if($_use_open_basedir = !empty($_open_basedir_ini)) {
$_open_basedirs = explode(':', $_open_basedir_ini);
}
} else {
/* other-style paths */
$_dir = str_replace('\\','/', $params['dir']);
$_dir_parts = preg_split('!/+!', $_dir, -1, PREG_SPLIT_NO_EMPTY);
if (preg_match('!^((//)|([a-zA-Z]:/))!', $_dir, $_root_dir)) {
/* leading "//" for network volume, or "[letter]:/" for full path */
$_new_dir = $_root_dir[1];
/* remove drive-letter from _dir_parts */
if (isset($_root_dir[3])) array_shift($_dir_parts);
} else {
$_new_dir = str_replace('\\', '/', getcwd()).'/';
}
if($_use_open_basedir = !empty($_open_basedir_ini)) {
$_open_basedirs = explode(';', str_replace('\\', '/', $_open_basedir_ini));
}
}
/* all paths use "/" only from here */
foreach ($_dir_parts as $_dir_part) {
$_new_dir .= $_dir_part;
if ($_use_open_basedir) {
// do not attempt to test or make directories outside of open_basedir
$_make_new_dir = false;
foreach ($_open_basedirs as $_open_basedir) {
if (substr($_new_dir, 0, strlen($_open_basedir)) == $_open_basedir) {
$_make_new_dir = true;
break;
}
}
} else {
$_make_new_dir = true;
}
if ($_make_new_dir && !file_exists($_new_dir) && !@mkdir($_new_dir, $smarty->_dir_perms) && !is_dir($_new_dir)) {
$smarty->trigger_error("problem creating directory '" . $_new_dir . "'");
return false;
}
$_new_dir .= '/';
}
}
}
/* vim: set expandtab: */
?>

View file

@ -0,0 +1,61 @@
<?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/
/**
* Smarty debug_console function plugin
*
* Type: core<br>
* Name: display_debug_console<br>
* Purpose: display the javascript debug console window
* @param array Format: null
* @param Smarty
*/
function smarty_core_display_debug_console($params, &$smarty)
{
// we must force compile the debug template in case the environment
// changed between separate applications.
if(empty($smarty->debug_tpl)) {
// set path to debug template from SMARTY_DIR
$smarty->debug_tpl = SMARTY_DIR . 'debug.tpl';
if($smarty->security && is_file($smarty->debug_tpl)) {
$smarty->secure_dir[] = realpath($smarty->debug_tpl);
}
$smarty->debug_tpl = 'file:' . SMARTY_DIR . 'debug.tpl';
}
$_ldelim_orig = $smarty->left_delimiter;
$_rdelim_orig = $smarty->right_delimiter;
$smarty->left_delimiter = '{';
$smarty->right_delimiter = '}';
$_compile_id_orig = $smarty->_compile_id;
$smarty->_compile_id = null;
$_compile_path = $smarty->_get_compile_path($smarty->debug_tpl);
if ($smarty->_compile_resource($smarty->debug_tpl, $_compile_path))
{
ob_start();
$smarty->_include($_compile_path);
$_results = ob_get_contents();
ob_end_clean();
} else {
$_results = '';
}
$smarty->_compile_id = $_compile_id_orig;
$smarty->left_delimiter = $_ldelim_orig;
$smarty->right_delimiter = $_rdelim_orig;
return $_results;
}
/* vim: set expandtab: */
?>

View file

@ -0,0 +1,44 @@
<?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/
/**
* Get path to file from include_path
*
* @param string $file_path
* @param string $new_file_path
* @return boolean
* @staticvar array|null
*/
// $file_path, &$new_file_path
function smarty_core_get_include_path(&$params, &$smarty)
{
static $_path_array = null;
if(!isset($_path_array)) {
$_ini_include_path = ini_get('include_path');
if(strstr($_ini_include_path,';')) {
// windows pathnames
$_path_array = explode(';',$_ini_include_path);
} else {
$_path_array = explode(':',$_ini_include_path);
}
}
foreach ($_path_array as $_include_path) {
if (@is_readable($_include_path . DIRECTORY_SEPARATOR . $params['file_path'])) {
$params['new_file_path'] = $_include_path . DIRECTORY_SEPARATOR . $params['file_path'];
return true;
}
}
return false;
}
/* vim: set expandtab: */
?>

View file

@ -0,0 +1,23 @@
<?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/
/**
* Get seconds and microseconds
* @return double
*/
function smarty_core_get_microtime($params, &$smarty)
{
$mtime = microtime();
$mtime = explode(" ", $mtime);
$mtime = (double)($mtime[1]) + (double)($mtime[0]);
return ($mtime);
}
/* vim: set expandtab: */
?>

View file

@ -0,0 +1,80 @@
<?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/
/**
* Retrieves PHP script resource
*
* sets $php_resource to the returned resource
* @param string $resource
* @param string $resource_type
* @param $php_resource
* @return boolean
*/
function smarty_core_get_php_resource(&$params, &$smarty)
{
$params['resource_base_path'] = $smarty->trusted_dir;
$smarty->_parse_resource_name($params, $smarty);
/*
* Find out if the resource exists.
*/
if ($params['resource_type'] == 'file') {
$_readable = false;
if(file_exists($params['resource_name']) && is_readable($params['resource_name'])) {
$_readable = true;
} else {
// test for file in include_path
$_params = array('file_path' => $params['resource_name']);
require_once(SMARTY_CORE_DIR . 'core.get_include_path.php');
if(smarty_core_get_include_path($_params, $smarty)) {
$_include_path = $_params['new_file_path'];
$_readable = true;
}
}
} else if ($params['resource_type'] != 'file') {
$_template_source = null;
$_readable = is_callable($smarty->_plugins['resource'][$params['resource_type']][0][0])
&& call_user_func_array($smarty->_plugins['resource'][$params['resource_type']][0][0],
array($params['resource_name'], &$_template_source, &$smarty));
}
/*
* Set the error function, depending on which class calls us.
*/
if (method_exists($smarty, '_syntax_error')) {
$_error_funcc = '_syntax_error';
} else {
$_error_funcc = 'trigger_error';
}
if ($_readable) {
if ($smarty->security) {
require_once(SMARTY_CORE_DIR . 'core.is_trusted.php');
if (!smarty_core_is_trusted($params, $smarty)) {
$smarty->$_error_funcc('(secure mode) ' . $params['resource_type'] . ':' . $params['resource_name'] . ' is not trusted');
return false;
}
}
} else {
$smarty->$_error_funcc($params['resource_type'] . ':' . $params['resource_name'] . ' is not readable');
return false;
}
if ($params['resource_type'] == 'file') {
$params['php_resource'] = $params['resource_name'];
} else {
$params['php_resource'] = $_template_source;
}
return true;
}
/* vim: set expandtab: */
?>

View file

@ -0,0 +1,59 @@
<?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/
/**
* determines if a resource is secure or not.
*
* @param string $resource_type
* @param string $resource_name
* @return boolean
*/
// $resource_type, $resource_name
function smarty_core_is_secure($params, &$smarty)
{
if (!$smarty->security || $smarty->security_settings['INCLUDE_ANY']) {
return true;
}
if ($params['resource_type'] == 'file') {
$_rp = realpath($params['resource_name']);
if (isset($params['resource_base_path'])) {
foreach ((array)$params['resource_base_path'] as $curr_dir) {
if ( ($_cd = realpath($curr_dir)) !== false &&
strncmp($_rp, $_cd, strlen($_cd)) == 0 &&
substr($_rp, strlen($_cd), 1) == DIRECTORY_SEPARATOR ) {
return true;
}
}
}
if (!empty($smarty->secure_dir)) {
foreach ((array)$smarty->secure_dir as $curr_dir) {
if ( ($_cd = realpath($curr_dir)) !== false) {
if($_cd == $_rp) {
return true;
} elseif (strncmp($_rp, $_cd, strlen($_cd)) == 0 &&
substr($_rp, strlen($_cd), 1) == DIRECTORY_SEPARATOR) {
return true;
}
}
}
}
} else {
// resource is not on local file system
return call_user_func_array(
$smarty->_plugins['resource'][$params['resource_type']][0][2],
array($params['resource_name'], &$smarty));
}
return false;
}
/* vim: set expandtab: */
?>

View file

@ -0,0 +1,47 @@
<?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/
/**
* determines if a resource is trusted or not
*
* @param string $resource_type
* @param string $resource_name
* @return boolean
*/
// $resource_type, $resource_name
function smarty_core_is_trusted($params, &$smarty)
{
$_smarty_trusted = false;
if ($params['resource_type'] == 'file') {
if (!empty($smarty->trusted_dir)) {
$_rp = realpath($params['resource_name']);
foreach ((array)$smarty->trusted_dir as $curr_dir) {
if (!empty($curr_dir) && is_readable ($curr_dir)) {
$_cd = realpath($curr_dir);
if (strncmp($_rp, $_cd, strlen($_cd)) == 0
&& substr($_rp, strlen($_cd), 1) == DIRECTORY_SEPARATOR ) {
$_smarty_trusted = true;
break;
}
}
}
}
} else {
// resource is not on local file system
$_smarty_trusted = call_user_func_array($smarty->_plugins['resource'][$params['resource_type']][0][3],
array($params['resource_name'], $smarty));
}
return $_smarty_trusted;
}
/* vim: set expandtab: */
?>

View file

@ -0,0 +1,125 @@
<?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/
/**
* Load requested plugins
*
* @param array $plugins
*/
// $plugins
function smarty_core_load_plugins($params, &$smarty)
{
foreach ($params['plugins'] as $_plugin_info) {
list($_type, $_name, $_tpl_file, $_tpl_line, $_delayed_loading) = $_plugin_info;
$_plugin = &$smarty->_plugins[$_type][$_name];
/*
* We do not load plugin more than once for each instance of Smarty.
* The following code checks for that. The plugin can also be
* registered dynamically at runtime, in which case template file
* and line number will be unknown, so we fill them in.
*
* The final element of the info array is a flag that indicates
* whether the dynamically registered plugin function has been
* checked for existence yet or not.
*/
if (isset($_plugin)) {
if (empty($_plugin[3])) {
if (!is_callable($_plugin[0])) {
$smarty->_trigger_fatal_error("[plugin] $_type '$_name' is not implemented", $_tpl_file, $_tpl_line, __FILE__, __LINE__);
} else {
$_plugin[1] = $_tpl_file;
$_plugin[2] = $_tpl_line;
$_plugin[3] = true;
if (!isset($_plugin[4])) $_plugin[4] = true; /* cacheable */
}
}
continue;
} else if ($_type == 'insert') {
/*
* For backwards compatibility, we check for insert functions in
* the symbol table before trying to load them as a plugin.
*/
$_plugin_func = 'insert_' . $_name;
if (function_exists($_plugin_func)) {
$_plugin = array($_plugin_func, $_tpl_file, $_tpl_line, true, false);
continue;
}
}
$_plugin_file = $smarty->_get_plugin_filepath($_type, $_name);
if (! $_found = ($_plugin_file != false)) {
$_message = "could not load plugin file '$_type.$_name.php'\n";
}
/*
* If plugin file is found, it -must- provide the properly named
* plugin function. In case it doesn't, simply output the error and
* do not fall back on any other method.
*/
if ($_found) {
include_once $_plugin_file;
$_plugin_func = 'smarty_' . $_type . '_' . $_name;
if (!function_exists($_plugin_func)) {
$smarty->_trigger_fatal_error("[plugin] function $_plugin_func() not found in $_plugin_file", $_tpl_file, $_tpl_line, __FILE__, __LINE__);
continue;
}
}
/*
* In case of insert plugins, their code may be loaded later via
* 'script' attribute.
*/
else if ($_type == 'insert' && $_delayed_loading) {
$_plugin_func = 'smarty_' . $_type . '_' . $_name;
$_found = true;
}
/*
* Plugin specific processing and error checking.
*/
if (!$_found) {
if ($_type == 'modifier') {
/*
* In case modifier falls back on using PHP functions
* directly, we only allow those specified in the security
* context.
*/
if ($smarty->security && !in_array($_name, $smarty->security_settings['MODIFIER_FUNCS'])) {
$_message = "(secure mode) modifier '$_name' is not allowed";
} else {
if (!function_exists($_name)) {
$_message = "modifier '$_name' is not implemented";
} else {
$_plugin_func = $_name;
$_found = true;
}
}
} else if ($_type == 'function') {
/*
* This is a catch-all situation.
*/
$_message = "unknown tag - '$_name'";
}
}
if ($_found) {
$smarty->_plugins[$_type][$_name] = array($_plugin_func, $_tpl_file, $_tpl_line, true, true);
} else {
// output error
$smarty->_trigger_fatal_error('[plugin] ' . $_message, $_tpl_file, $_tpl_line, __FILE__, __LINE__);
}
}
}
/* vim: set expandtab: */
?>

View file

@ -0,0 +1,74 @@
<?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/
/**
* load a resource plugin
*
* @param string $type
*/
// $type
function smarty_core_load_resource_plugin($params, &$smarty)
{
/*
* Resource plugins are not quite like the other ones, so they are
* handled differently. The first element of plugin info is the array of
* functions provided by the plugin, the second one indicates whether
* all of them exist or not.
*/
$_plugin = &$smarty->_plugins['resource'][$params['type']];
if (isset($_plugin)) {
if (!$_plugin[1] && count($_plugin[0])) {
$_plugin[1] = true;
foreach ($_plugin[0] as $_plugin_func) {
if (!is_callable($_plugin_func)) {
$_plugin[1] = false;
break;
}
}
}
if (!$_plugin[1]) {
$smarty->_trigger_fatal_error("[plugin] resource '" . $params['type'] . "' is not implemented", null, null, __FILE__, __LINE__);
}
return;
}
$_plugin_file = $smarty->_get_plugin_filepath('resource', $params['type']);
$_found = ($_plugin_file != false);
if ($_found) { /*
* If the plugin file is found, it -must- provide the properly named
* plugin functions.
*/
include_once($_plugin_file);
/*
* Locate functions that we require the plugin to provide.
*/
$_resource_ops = array('source', 'timestamp', 'secure', 'trusted');
$_resource_funcs = array();
foreach ($_resource_ops as $_op) {
$_plugin_func = 'smarty_resource_' . $params['type'] . '_' . $_op;
if (!function_exists($_plugin_func)) {
$smarty->_trigger_fatal_error("[plugin] function $_plugin_func() not found in $_plugin_file", null, null, __FILE__, __LINE__);
return;
} else {
$_resource_funcs[] = $_plugin_func;
}
}
$smarty->_plugins['resource'][$params['type']] = array($_resource_funcs, true);
}
}
/* vim: set expandtab: */
?>

Some files were not shown because too many files have changed in this diff Show more