From 1e44ec84bd90ec9078027d1d9d78e83c7d305f2a Mon Sep 17 00:00:00 2001 From: BlueWall Date: Tue, 31 Aug 2010 17:02:36 -0400 Subject: [PATCH] Build system upgrade: Upgrading Prebuild.exe to correctly construct build solutions for crossplatform tools such as xbuild, monodevelop and nant. NOTE: Module prebuild files will need modification to work, as the prebuild must correctly define the reference path for all assemblies shipped in the OpenSimulator ./bin directory. These include assemblies such as XMLRPC.dll, OpenMetaverse.dll, Nini.dll, etc. . The entries should follow the form: See the distributed prebuild.xml for further examples. Crossplatform tools: xbuild and monodevelop use the vs2008 OpenSim.sln and the .csproj files in each namespace. Changes to the Prebuild.exe are against svn 322 and are included in a patch attached to the mantis. And the dnpb source are available@ svn co https://dnpb.svn.sourceforge.net/svnroot/dnpb dnpb The patches are pending application by the dnpb team. After which, the un-modified upstream Prebuild.exe will work as expected. --- Prebuild/clean.bat | 1 - Prebuild/clean.sh | 1 - Prebuild/doc/prebuild-example1.xml | 300 --- Prebuild/doc/prebuild-example2.xml | 72 - Prebuild/doc/prebuild-example3.xml | 113 -- Prebuild/doc/prebuild-example4.xml | 715 ------- Prebuild/doc/prebuild-example5.xml | 187 -- Prebuild/prebuild.xml | 73 - Prebuild/scripts/Clean.bat | 2 - Prebuild/scripts/Clean.sh | 4 - Prebuild/scripts/Help.bat | 2 - Prebuild/scripts/MonoDevelop.sh | 2 - Prebuild/scripts/Prebuild.nsi | 231 --- Prebuild/scripts/SharpDevelop.bat | 4 - Prebuild/scripts/SharpDevelop2.bat | 4 - Prebuild/scripts/VS2002.bat | 4 - Prebuild/scripts/VS2003.bat | 4 - Prebuild/scripts/VS2005.bat | 4 - Prebuild/scripts/VS2008.bat | 4 - Prebuild/scripts/autotools.bat | 4 - Prebuild/scripts/autotools.sh | 5 - Prebuild/scripts/makefile.bat | 4 - Prebuild/scripts/makefile.sh | 10 - Prebuild/scripts/nant.bat | 4 - Prebuild/scripts/nant.sh | 2 - Prebuild/scripts/xcode.bat | 4 - Prebuild/scripts/xcode.sh | 2 - Prebuild/src/App.ico | Bin 4286 -> 0 bytes .../src/Core/Attributes/DataNodeAttribute.cs | 72 - .../Core/Attributes/OptionNodeAttribute.cs | 71 - .../src/Core/Attributes/TargetAttribute.cs | 71 - Prebuild/src/Core/FatalException.cs | 85 - Prebuild/src/Core/Interfaces/IDataNode.cs | 47 - Prebuild/src/Core/Interfaces/ITarget.cs | 51 - Prebuild/src/Core/Kernel.cs | 831 -------- Prebuild/src/Core/Nodes/AuthorNode.cs | 89 - Prebuild/src/Core/Nodes/ConfigurationNode.cs | 178 -- Prebuild/src/Core/Nodes/DataNode.cs | 117 -- .../src/Core/Nodes/DatabaseProjectNode.cs | 94 - .../src/Core/Nodes/DatabaseReferenceNode.cs | 63 - Prebuild/src/Core/Nodes/DescriptionNode.cs | 89 - Prebuild/src/Core/Nodes/ExcludeNode.cs | 89 - Prebuild/src/Core/Nodes/FileNode.cs | 271 --- Prebuild/src/Core/Nodes/FilesNode.cs | 247 --- Prebuild/src/Core/Nodes/MatchNode.cs | 330 --- Prebuild/src/Core/Nodes/OptionsNode.cs | 644 ------ Prebuild/src/Core/Nodes/ProcessNode.cs | 110 - Prebuild/src/Core/Nodes/ProjectNode.cs | 580 ------ Prebuild/src/Core/Nodes/ReferenceNode.cs | 144 -- Prebuild/src/Core/Nodes/ReferencePathNode.cs | 99 - Prebuild/src/Core/Nodes/SolutionNode.cs | 358 ---- Prebuild/src/Core/Parse/IfContext.cs | 154 -- Prebuild/src/Core/Parse/Preprocessor.cs | 663 ------ Prebuild/src/Core/Targets/AutotoolsTarget.cs | 1782 ----------------- Prebuild/src/Core/Targets/DebugTarget.cs | 102 - Prebuild/src/Core/Targets/MakefileTarget.cs | 471 ----- .../src/Core/Targets/MonoDevelopTarget.cs | 464 ----- Prebuild/src/Core/Targets/NAntTarget.cs | 738 ------- .../src/Core/Targets/SharpDevelop2Target.cs | 82 - .../src/Core/Targets/SharpDevelopTarget.cs | 428 ---- Prebuild/src/Core/Targets/ToolInfo.cs | 197 -- Prebuild/src/Core/Targets/VS2002Target.cs | 87 - Prebuild/src/Core/Targets/VS2003Target.cs | 602 ------ Prebuild/src/Core/Targets/VS2005Target.cs | 149 -- Prebuild/src/Core/Targets/VS2008Target.cs | 132 -- Prebuild/src/Core/Targets/VS2010Target.cs | 134 -- Prebuild/src/Core/Targets/VSGenericTarget.cs | 887 -------- Prebuild/src/Core/Targets/VSVersion.cs | 54 - Prebuild/src/Core/Targets/XcodeTarget.cs | 596 ------ Prebuild/src/Core/UnknownLanguageException.cs | 63 - .../Core/Utilities/CommandLineCollection.cs | 153 -- .../src/Core/Utilities/CurrentDirectory.cs | 80 - Prebuild/src/Core/Utilities/Helper.cs | 654 ------ Prebuild/src/Core/Utilities/Log.cs | 270 --- Prebuild/src/Core/WarningException.cs | 84 - Prebuild/src/Prebuild.cs | 165 -- Prebuild/src/Prebuild.snk | Bin 596 -> 0 bytes Prebuild/src/Properties/AssemblyInfo.cs | 112 -- Prebuild/src/data/autotools.xml | 790 -------- Prebuild/src/data/dnpb-1.0.xsd | 183 -- Prebuild/src/data/dnpb-1.1.xsd | 184 -- Prebuild/src/data/dnpb-1.2.xsd | 198 -- Prebuild/src/data/dnpb-1.3.xsd | 206 -- Prebuild/src/data/dnpb-1.4.xsd | 212 -- Prebuild/src/data/dnpb-1.5.xsd | 215 -- Prebuild/src/data/prebuild-1.6.xsd | 231 --- Prebuild/src/data/prebuild-1.7.xsd | 331 --- Prebuild/tests/Makefile | 24 - Prebuild/tests/README.txt | 5 - Prebuild/tests/include-001.expected | 46 - Prebuild/tests/include-001.include | 33 - Prebuild/tests/include-001.prebuild | 22 - Prebuild/tests/include-002-2.include | 8 - Prebuild/tests/include-002.expected | 26 - Prebuild/tests/include-002.include | 14 - Prebuild/tests/include-002.prebuild | 7 - bin/Prebuild.exe | Bin 237568 -> 227840 bytes prebuild.xml | 1176 ++++++----- runprebuild.sh | 3 - 99 files changed, 560 insertions(+), 19149 deletions(-) delete mode 100755 Prebuild/clean.bat delete mode 100755 Prebuild/clean.sh delete mode 100644 Prebuild/doc/prebuild-example1.xml delete mode 100644 Prebuild/doc/prebuild-example2.xml delete mode 100644 Prebuild/doc/prebuild-example3.xml delete mode 100644 Prebuild/doc/prebuild-example4.xml delete mode 100644 Prebuild/doc/prebuild-example5.xml delete mode 100644 Prebuild/prebuild.xml delete mode 100755 Prebuild/scripts/Clean.bat delete mode 100755 Prebuild/scripts/Clean.sh delete mode 100755 Prebuild/scripts/Help.bat delete mode 100755 Prebuild/scripts/MonoDevelop.sh delete mode 100644 Prebuild/scripts/Prebuild.nsi delete mode 100755 Prebuild/scripts/SharpDevelop.bat delete mode 100755 Prebuild/scripts/SharpDevelop2.bat delete mode 100755 Prebuild/scripts/VS2002.bat delete mode 100755 Prebuild/scripts/VS2003.bat delete mode 100755 Prebuild/scripts/VS2005.bat delete mode 100755 Prebuild/scripts/VS2008.bat delete mode 100755 Prebuild/scripts/autotools.bat delete mode 100755 Prebuild/scripts/autotools.sh delete mode 100755 Prebuild/scripts/makefile.bat delete mode 100755 Prebuild/scripts/makefile.sh delete mode 100755 Prebuild/scripts/nant.bat delete mode 100755 Prebuild/scripts/nant.sh delete mode 100755 Prebuild/scripts/xcode.bat delete mode 100755 Prebuild/scripts/xcode.sh delete mode 100644 Prebuild/src/App.ico delete mode 100644 Prebuild/src/Core/Attributes/DataNodeAttribute.cs delete mode 100644 Prebuild/src/Core/Attributes/OptionNodeAttribute.cs delete mode 100644 Prebuild/src/Core/Attributes/TargetAttribute.cs delete mode 100644 Prebuild/src/Core/FatalException.cs delete mode 100644 Prebuild/src/Core/Interfaces/IDataNode.cs delete mode 100644 Prebuild/src/Core/Interfaces/ITarget.cs delete mode 100644 Prebuild/src/Core/Kernel.cs delete mode 100644 Prebuild/src/Core/Nodes/AuthorNode.cs delete mode 100644 Prebuild/src/Core/Nodes/ConfigurationNode.cs delete mode 100644 Prebuild/src/Core/Nodes/DataNode.cs delete mode 100644 Prebuild/src/Core/Nodes/DatabaseProjectNode.cs delete mode 100644 Prebuild/src/Core/Nodes/DatabaseReferenceNode.cs delete mode 100644 Prebuild/src/Core/Nodes/DescriptionNode.cs delete mode 100644 Prebuild/src/Core/Nodes/ExcludeNode.cs delete mode 100644 Prebuild/src/Core/Nodes/FileNode.cs delete mode 100644 Prebuild/src/Core/Nodes/FilesNode.cs delete mode 100644 Prebuild/src/Core/Nodes/MatchNode.cs delete mode 100644 Prebuild/src/Core/Nodes/OptionsNode.cs delete mode 100644 Prebuild/src/Core/Nodes/ProcessNode.cs delete mode 100644 Prebuild/src/Core/Nodes/ProjectNode.cs delete mode 100644 Prebuild/src/Core/Nodes/ReferenceNode.cs delete mode 100644 Prebuild/src/Core/Nodes/ReferencePathNode.cs delete mode 100644 Prebuild/src/Core/Nodes/SolutionNode.cs delete mode 100644 Prebuild/src/Core/Parse/IfContext.cs delete mode 100644 Prebuild/src/Core/Parse/Preprocessor.cs delete mode 100644 Prebuild/src/Core/Targets/AutotoolsTarget.cs delete mode 100644 Prebuild/src/Core/Targets/DebugTarget.cs delete mode 100644 Prebuild/src/Core/Targets/MakefileTarget.cs delete mode 100644 Prebuild/src/Core/Targets/MonoDevelopTarget.cs delete mode 100644 Prebuild/src/Core/Targets/NAntTarget.cs delete mode 100644 Prebuild/src/Core/Targets/SharpDevelop2Target.cs delete mode 100644 Prebuild/src/Core/Targets/SharpDevelopTarget.cs delete mode 100644 Prebuild/src/Core/Targets/ToolInfo.cs delete mode 100644 Prebuild/src/Core/Targets/VS2002Target.cs delete mode 100644 Prebuild/src/Core/Targets/VS2003Target.cs delete mode 100644 Prebuild/src/Core/Targets/VS2005Target.cs delete mode 100644 Prebuild/src/Core/Targets/VS2008Target.cs delete mode 100644 Prebuild/src/Core/Targets/VS2010Target.cs delete mode 100644 Prebuild/src/Core/Targets/VSGenericTarget.cs delete mode 100644 Prebuild/src/Core/Targets/VSVersion.cs delete mode 100644 Prebuild/src/Core/Targets/XcodeTarget.cs delete mode 100644 Prebuild/src/Core/UnknownLanguageException.cs delete mode 100644 Prebuild/src/Core/Utilities/CommandLineCollection.cs delete mode 100644 Prebuild/src/Core/Utilities/CurrentDirectory.cs delete mode 100644 Prebuild/src/Core/Utilities/Helper.cs delete mode 100644 Prebuild/src/Core/Utilities/Log.cs delete mode 100644 Prebuild/src/Core/WarningException.cs delete mode 100644 Prebuild/src/Prebuild.cs delete mode 100644 Prebuild/src/Prebuild.snk delete mode 100644 Prebuild/src/Properties/AssemblyInfo.cs delete mode 100644 Prebuild/src/data/autotools.xml delete mode 100644 Prebuild/src/data/dnpb-1.0.xsd delete mode 100644 Prebuild/src/data/dnpb-1.1.xsd delete mode 100644 Prebuild/src/data/dnpb-1.2.xsd delete mode 100644 Prebuild/src/data/dnpb-1.3.xsd delete mode 100644 Prebuild/src/data/dnpb-1.4.xsd delete mode 100644 Prebuild/src/data/dnpb-1.5.xsd delete mode 100644 Prebuild/src/data/prebuild-1.6.xsd delete mode 100644 Prebuild/src/data/prebuild-1.7.xsd delete mode 100644 Prebuild/tests/Makefile delete mode 100644 Prebuild/tests/README.txt delete mode 100644 Prebuild/tests/include-001.expected delete mode 100644 Prebuild/tests/include-001.include delete mode 100644 Prebuild/tests/include-001.prebuild delete mode 100644 Prebuild/tests/include-002-2.include delete mode 100644 Prebuild/tests/include-002.expected delete mode 100644 Prebuild/tests/include-002.include delete mode 100644 Prebuild/tests/include-002.prebuild diff --git a/Prebuild/clean.bat b/Prebuild/clean.bat deleted file mode 100755 index 1d71cbffe5..0000000000 --- a/Prebuild/clean.bat +++ /dev/null @@ -1 +0,0 @@ -NAnt.exe clean \ No newline at end of file diff --git a/Prebuild/clean.sh b/Prebuild/clean.sh deleted file mode 100755 index 900b6edd2d..0000000000 --- a/Prebuild/clean.sh +++ /dev/null @@ -1 +0,0 @@ -nant clean diff --git a/Prebuild/doc/prebuild-example1.xml b/Prebuild/doc/prebuild-example1.xml deleted file mode 100644 index a2cee42cd3..0000000000 --- a/Prebuild/doc/prebuild-example1.xml +++ /dev/null @@ -1,300 +0,0 @@ - - - - - - TRACE;DEBUG - false - false - false - 4 - false - 1591;219;1573;1572;168 - ..\bin - true - false - true - 285212672 - 4096 - false - Docs.xml - - - - - TRACE - true - false - false - 4 - false - 1591;219;1573;1572;168 - ..\bin - false - false - true - 285212672 - 4096 - false - Docs.xml - - - - - - - ..\bin\lib\Utility - RealmForge.Utility.xml - - - - - ..\bin\lib\Utility - RealmForge.Utility.xml - - - ../bin - - - - - - - - - - - - - - - ..\bin\lib\Framework - RealmForge.Framework.xml - - - - - ..\bin\lib\Framework - RealmForge.Framework.xml - - - ../bin - - - - - - - - - - - - - - - - - - - - - ..\bin\lib\Genres - RealmForge.Genres.xml - - - - - ..\bin\lib\Genres - RealmForge.Genres.xml - - - ../bin - - - - - - - - - - - - - - - - - ..\bin\lib\Forms - RealmForge.UI.Forms.xml - true - - - - - ..\bin\lib\Forms - RealmForge.UI.Forms.xml - true - - - ../bin - - - - - - - - - - - - IDE\Resources\ImagesCaptionIDE.bmp - IDE\Resources\ImagesCaptionPlain.bmp - IDE\Resources\ImagesMenuControl.bmp - IDE\Resources\ImagesPopupMenu.bmp - IDE\Resources\ImagesTabbedGroups.bmp - IDE\Resources\ImagesTabControl.bmp - IDE\Resources\LibraryIcon.ico - IDE\Resources\TabbedInvalid.cur - IDE\Resources\TabbedValid.cur - IDE\Resources\WizardPicture.bmp - Controls\Trees\tv_minus.bmp - Controls\Trees\tv_plus.bmp - Controls\Trees\treeview.bmp - Controls\Trees\listview.bmp - IDE\Menus\MenuControl.bmp - IDE\Controls\InertButton.bmp - IDE\Controls\TabbedGroups.bmp - IDE\Controls\TabCOntrol.bmp - IDE\Controls\WizardControl.bmp - Forms\IDETest.resx - Forms\IDEWindow.resx - Forms\Launcher.resx - Forms\MainRenderFrame.resx - - - - - - - - ..\bin\lib\RAGE - RealmForge.RAGE.xml - - - - - ..\bin\lib\RAGE - RealmForge.RAGE.xml - - - ../bin - ../bin - - - - - - - - - - - - - - - - - - - - - - - - - - - ..\bin\ScriptLibrary - RealmForge.ScriptLibrary.xml - - - - - ..\bin\ScriptLibrary - RealmForge.ScriptLibrary.xml - - - ../bin - - - - - - - - - - - - - - - - - - - - ..\bin\lib\Updater - Updater.xml - - - - - ..\bin\lib\Updater - Updater.xml - - - ../bin - - - - - - - - - - - - - - ..\bin - DemoGame.xml - - - - - ..\bin - DemoGame.xml - - - ../bin - - - - - - - - - - - - - - - diff --git a/Prebuild/doc/prebuild-example2.xml b/Prebuild/doc/prebuild-example2.xml deleted file mode 100644 index bd23c4fab2..0000000000 --- a/Prebuild/doc/prebuild-example2.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - DEBUG;TRACE;WIN32;NET - - DEBUG;TRACE;POSIX - - false - bin\Debug - true - 1595 - - - - - - TRACE;WIN32;NET - - TRACE;POSIX - - bin\Release - true - false - 1595 - - - - prebuild.xml - - - - - - - DEBUG;TRACE;WIN32;NET - - DEBUG;TRACE;POSIX - - false - bin\Debug - true - Prebuild.xml - 1595 - - - - - - TRACE;WIN32;NET - - TRACE;POSIX - - bin\Release - true - false - Prebuild.xml - 1595 - - - - - - - - - - - - diff --git a/Prebuild/doc/prebuild-example3.xml b/Prebuild/doc/prebuild-example3.xml deleted file mode 100644 index 0111562fd7..0000000000 --- a/Prebuild/doc/prebuild-example3.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - DEBUG;TRACE;WIN32 - - DEBUG;TRACE;POSIX - - false - false - false - 4 - - - false - 1591;219;1573;1572;168 - - - ..\bin - true - false - true - 285212672 - 4096 - false - Docs.xml - - - - - TRACE - true - false - false - 4 - false - 1591;219;1573;1572;168 - ..\bin - false - false - true - 285212672 - 4096 - false - Docs.xml - - - - - - - - ..\bin\lib\Utility - RealmForge.Utility.xml - - - - - ..\bin\lib\Utility - RealmForge.Utility.xml - - - ../bin - - - - - - - - - - - - - - - - - - - ..\bin - DemoGame.xml - - - - - ..\bin - DemoGame.xml - - - ../bin - - - - - - - - - - - - - - - - diff --git a/Prebuild/doc/prebuild-example4.xml b/Prebuild/doc/prebuild-example4.xml deleted file mode 100644 index e5861b89a4..0000000000 --- a/Prebuild/doc/prebuild-example4.xml +++ /dev/null @@ -1,715 +0,0 @@ - - - - - - DEBUG;TRACE - false - false - bin\Debug - true - 4 - 1595 - - - - - TRACE - true - false - bin\Release - false - 1 - 1595 - - - - SdlDotNet.build - prebuild.xml - - - - - DEBUG;TRACE - false - false - bin\Debug - true - SdlDotNet.xml - 4 - 1595 - - - - - TRACE - true - false - bin\Release - SdlDotNet.xml - false - 1 - 1595 - - - - - - - - - - - - - - - - - - DEBUG;TRACE - false - false - bin\Debug - true - Rectangles.xml - 4 - 1595 - - - - - TRACE - true - false - bin\Release - false - Rectangles.xml - 1 - 1595 - - - - - - - App.ico - - - - - - - DEBUG;TRACE - false - false - bin\Debug - true - Gears.xml - 4 - 1595 - - - - - TRACE - true - false - bin\Release - false - Gears.xml - 1 - 1595 - - - - - - - - App.ico - - - - - - - DEBUG;TRACE - false - false - bin\Debug - true - CDPlayer.xml - 4 - 1595 - - - - - TRACE - true - false - bin\Release - false - CDPlayer.xml - 1 - 1595 - - - - - - - - App.ico - CDPlayer.cs - - - - - - - - - DEBUG;TRACE - false - false - bin\Debug - true - MoviePlayer.xml - 4 - 1595 - - - - - TRACE - true - false - bin\Release - false - MoviePlayer.xml - 1 - 1595 - - - - - - - App.ico - - - - - - - DEBUG;TRACE - false - false - bin\Debug - true - SimpleGame.xml - 4 - 1595 - - - - - TRACE - true - false - bin\Release - false - SimpleGame.xml - 1 - 1595 - - - - - - - App.ico - - - - - - - DEBUG;TRACE - false - false - bin\Debug - true - BombRun.xml - 4 - 1595 - - - - - TRACE - true - false - bin\Release - false - BombRun.xml - 1 - 1595 - - - - - - - App.ico - - - - - - - DEBUG;TRACE - false - false - bin\Debug - true - SnowDemo.xml - 4 - 1595 - - - - - TRACE - true - false - bin\Release - false - SnowDemo.xml - 1 - 1595 - - - - - - - App.ico - - - - - - - DEBUG;TRACE - false - false - bin\Debug - true - BounceSprites.xml - 4 - 1595 - - - - - TRACE - true - false - bin\Release - false - BounceSprites.xml - 1 - 1595 - - - - - - - App.ico - - - - - - - DEBUG;TRACE - false - false - bin\Debug - true - Triad.xml - 4 - 1595 - - - - - TRACE - true - false - bin\Release - false - Triad.xml - 1 - 1595 - - - - - - - - App.ico - - - - - - - DEBUG;TRACE - false - false - bin\Debug - true - GuiExample.xml - 4 - 1595 - - - - - TRACE - true - false - bin\Release - false - GuiExample.xml - 1 - 1595 - - - - - - - - - - - - - DEBUG;TRACE - false - false - bin\Debug - true - SpriteGuiDemos.xml - 4 - 1595 - - - - - TRACE - true - false - bin\Release - false - SpriteGuiDemos.xml - 1 - 1595 - - - - - - - - App.ico - - - - - - - DEBUG;TRACE - false - false - bin\Debug - true - SdlDotNet.Tests.xml - 4 - 1595 - - - - - TRACE - true - false - bin\Release - false - SdlDotNet.Tests.xml - 1 - 1595 - - - - - - - - - - - - - - - - DEBUG;TRACE - false - false - bin\Debug - true - AudioExample.xml - 4 - 1595 - - - - - TRACE - true - false - bin\Release - false - AudioExample.xml - 1 - 1595 - - - - - - - App.ico - - - - - - - DEBUG;TRACE - false - false - bin\Debug - true - SdlDotNet.Particles.xml - 4 - 1595 - - - - - TRACE - true - false - bin\Release - false - SdlDotNet.Particles.xml - 1 - 1595 - - - - - - - - - - - - - DEBUG;TRACE - false - false - bin\Debug - true - ParticlesExample.xml - 4 - 1595 - - - - - TRACE - true - false - bin\Release - false - ParticlesExample.xml - 1 - 1595 - - - - - - - - App.ico - - - - - - - - DEBUG;TRACE - false - false - bin\Debug - true - NeHe.xml - 4 - 1595 - - - - - TRACE - true - false - bin\Release - false - NeHe.xml - 1 - 1595 - - - - - - - - - - - App.ico - NeHe.cs - - - - - - - - - DEBUG;TRACE - false - false - bin\Debug - true - RedBook.xml - 4 - 1595 - - - - - TRACE - true - false - bin\Release - false - RedBook.xml - 1 - 1595 - - - - - - - - - - - App.ico - RedBook.cs - - - - - - - - - DEBUG;TRACE - false - false - bin\Debug - true - PhysFsTest.xml - 4 - 1595 - - - - - TRACE - true - false - bin\Release - false - PhysFsTest.xml - 1 - 1595 - - - - - - - - App.ico - - - - - diff --git a/Prebuild/doc/prebuild-example5.xml b/Prebuild/doc/prebuild-example5.xml deleted file mode 100644 index 52215477eb..0000000000 --- a/Prebuild/doc/prebuild-example5.xml +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - DEBUG;TRACE;WIN32 - false - true - bin\Debug - Tao.Sdl.xml - true - - - - - TRACE;WIN32 - true - true - bin\Release - Tao.Sdl.xml - false - - - - Tao.Sdl.License.txt - Tao.Sdl.Readme.txt - Tao.Sdl.snk - Tao.Sdl.dll.config - - - - - AssemblyInfo.cs - Sdl.cs - SdlImage.cs - SdlMixer.cs - SdlTtf.cs - SdlNet.cs - SdlGfx.cs - Smpeg.cs - DelegateCallingConventionCdeclAttribute.cs - - - - - - DEBUG;TRACE;WIN32 - false - false - bin\Debug - Tao.Sdl.Tests.xml - true - - - - - TRACE;WIN32 - true - false - bin\Release - Tao.Sdl.Tests.xml - false - - - - - - - AssemblyInfo.cs - SdlTest.cs - SdlTestVideo.cs - SdlTestImage.cs - SdlTestTtf.cs - SdlTestMixer.cs - SdlTestGfx.cs - SmpegTest.cs - - - - - - DEBUG;TRACE;WIN32 - false - false - bin\Debug - true - - - - - TRACE;WIN32 - true - false - bin\Release - false - - - - - - AssemblyInfo.cs - Rectangles.cs - - - - - - DEBUG;TRACE;WIN32 - false - false - bin\Debug - true - - - - - TRACE;WIN32 - true - false - bin\Release - false - - - - - - AssemblyInfo.cs - SmpegPlayer.cs - - - - - - DEBUG;TRACE;WIN32 - false - false - bin\Debug - true - - - - - TRACE;WIN32 - true - false - bin\Release - false - - - - - - AssemblyInfo.cs - GfxPrimitives.cs - - - - - - DEBUG;TRACE;WIN32 - false - false - bin\Debug - true - - - - - TRACE;WIN32 - true - false - bin\Release - false - - - - - AssemblyInfo.cs - AppMain.cs - BuildProcessor.cs - Options.cs - ReleaseBuildProcessor.cs - UsageHelp.cs - - - - diff --git a/Prebuild/prebuild.xml b/Prebuild/prebuild.xml deleted file mode 100644 index 1f81086835..0000000000 --- a/Prebuild/prebuild.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - DEBUG;TRACE - false - bin/Debug - true - 1595 - - - - - TRACE - bin/Release - true - false - 1595 - - - - prebuild.xml - prebuild - - - Matthew Holmes (matthew@wildfiregames.com) - Dan Moorehead (dan05a@gmail.com) - Dave Hudson (jendave@yahoo.com) - Rob Loach (http://robloach.net) - C.J. Adams-Collier (cjac@colliertech.org) - The Prebuild project generator - - - DEBUG;TRACE - false - bin/Debug - true - Prebuild.snk - 1595 - - - - - TRACE - bin/Release - true - false - Prebuild.snk - 1595 - - - - - - - - - - - - - - diff --git a/Prebuild/scripts/Clean.bat b/Prebuild/scripts/Clean.bat deleted file mode 100755 index 806bbe8bd6..0000000000 --- a/Prebuild/scripts/Clean.bat +++ /dev/null @@ -1,2 +0,0 @@ -cd .. -Prebuild.exe /clean /yes /removedir obj /file prebuild.xml /build NET_2_0 /pause diff --git a/Prebuild/scripts/Clean.sh b/Prebuild/scripts/Clean.sh deleted file mode 100755 index b0a6530d80..0000000000 --- a/Prebuild/scripts/Clean.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -./prebuild /clean /removedir obj /file ../prebuild.xml /pause -rm -rf ../Makefile diff --git a/Prebuild/scripts/Help.bat b/Prebuild/scripts/Help.bat deleted file mode 100755 index 7c843c46f8..0000000000 --- a/Prebuild/scripts/Help.bat +++ /dev/null @@ -1,2 +0,0 @@ -cd .. -Prebuild.exe /usage /pause \ No newline at end of file diff --git a/Prebuild/scripts/MonoDevelop.sh b/Prebuild/scripts/MonoDevelop.sh deleted file mode 100755 index fbd7669659..0000000000 --- a/Prebuild/scripts/MonoDevelop.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -prebuild /target monodev /file ../prebuild.xml /build NET_1_1 /pause diff --git a/Prebuild/scripts/Prebuild.nsi b/Prebuild/scripts/Prebuild.nsi deleted file mode 100644 index 8f9854e0ea..0000000000 --- a/Prebuild/scripts/Prebuild.nsi +++ /dev/null @@ -1,231 +0,0 @@ -!verbose 3 - -!define PRODUCT_NAME "Prebuild" -!define PRODUCT_VERSION "1.3.1" -!define PRODUCT_PUBLISHER "Prebuild" -!define PRODUCT_PACKAGE "prebuild" -!define PRODUCT_WEB_SITE "http://dnpb.sourceforge.net" -!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\Prebuild" -!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\Prebuild" -!define PRODUCT_UNINST_ROOT_KEY "HKLM" -!define PRODUCT_PATH ".." - -;!define MUI_WELCOMEFINISHPAGE_BITMAP "PrebuildLogo.bmp" -;!define MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH -;!define MUI_UNWELCOMEFINISHPAGE_BITMAP "PrebuildLogo.bmp" -;!define MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH - -BrandingText "© 2003-2006 David Hudson, http://dnpb.sourceforge.net/" -SetCompressor lzma -CRCCheck on - -; File Association defines -;!include "fileassoc.nsh" - -; MUI 1.67 compatible ------ -!include "MUI.nsh" - -; MUI Settings -!define MUI_ABORTWARNING -!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico" -!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" - -;-------------------------------- -;Variables - -;-------------------------------- -;Installer Pages - -; Welcome page -!insertmacro MUI_PAGE_WELCOME -; License page -!insertmacro MUI_PAGE_LICENSE "..\doc\license.txt" -; Directory page -!insertmacro MUI_PAGE_DIRECTORY - -; Instfiles page -!insertmacro MUI_PAGE_INSTFILES - -; Finish page -!insertmacro MUI_PAGE_FINISH - -;------------------------------------ -; Uninstaller pages -!insertmacro MUI_UNPAGE_CONFIRM -!insertmacro MUI_UNPAGE_INSTFILES -!insertmacro MUI_UNPAGE_FINISH -;------------------------------------ - -; Language files -!insertmacro MUI_LANGUAGE "English" - -; Reserve files -!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS - -; MUI end ------ - -Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" -OutFile "..\${PRODUCT_PACKAGE}-${PRODUCT_VERSION}-setup.exe" -InstallDir "$PROGRAMFILES\Prebuild" -InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" -ShowInstDetails show -ShowUnInstDetails show - -; .NET Framework check -; http://msdn.microsoft.com/netframework/default.aspx?pull=/library/en-us/dnnetdep/html/redistdeploy1_1.asp -; Section "Detecting that the .NET Framework 1.1 is installed" -Function .onInit - ReadRegDWORD $R0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322" Install - StrCmp $R0 "" 0 CheckPreviousVersion - MessageBox MB_OK "Microsoft .NET Framework 1.1 was not found on this system.$\r$\n$\r$\nUnable to continue this installation." - Abort - - CheckPreviousVersion: - ReadRegStr $R0 ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" - StrCmp $R0 "" CheckOSVersion 0 - MessageBox MB_OK "An old version of Prebuild is installed on this computer, please uninstall first.$\r$\n$\r$\nUnable to continue this installation." - Abort - - CheckOSVersion: - Call IsSupportedWindowsVersion - Pop $R0 - StrCmp $R0 "False" NoAbort 0 - MessageBox MB_OK "The operating system you are using is not supported by Prebuild (95/98/ME/NT3.x/NT4.x)." - Abort - - NoAbort: -FunctionEnd - -Section "Source" SecSource - SetOverwrite ifnewer - SetOutPath "$INSTDIR\src" - File /r /x *.swp /x .svn /x *.xml /x *.csproj /x *.user /x *.build /x *.prjx /x *.mdp /x bin /x obj /x *.nsi ${PRODUCT_PATH}\src\*.* - - ;Store installation folder - WriteRegStr HKCU "Software\Prebuild" "" $INSTDIR - -SectionEnd - -Section "Runtime" SecRuntime - SetOverwrite ifnewer - SetOutPath "$INSTDIR" - File /r /x *.swp /x .svn /x *.nsi /x src /x *.sln /x *.cmbx /x *.mds ${PRODUCT_PATH}\Prebuild.exe ${PRODUCT_PATH}\prebuild.xml - - ;Store installation folder - WriteRegStr HKCU "Software\Prebuild" "" $INSTDIR - -SectionEnd - -Section "Documentation" SecDocs - SetOverwrite ifnewer - SetOutPath "$INSTDIR\doc" - File /r /x *.swp /x .svn /x *.exe ${PRODUCT_PATH}\doc\*.* - - ;Store installation folder - WriteRegStr HKCU "Software\Prebuild" "" $INSTDIR -SectionEnd - -Section "Scripts" SecScripts - SetOverwrite ifnewer - SetOutPath "$INSTDIR\scripts" - File /r /x *.swp /x .svn /x *.nsi /x *.exe ${PRODUCT_PATH}\scripts\*.* - - ;Store installation folder - WriteRegStr HKCU "Software\Prebuild" "" $INSTDIR -SectionEnd - -;Language strings - -Section -AdditionalIcons - WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" -SectionEnd - -Section -Post - WriteUninstaller "$INSTDIR\uninst.exe" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" -SectionEnd - -Section Uninstall - - DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" - DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" - RMDir /r "$INSTDIR" - -SectionEnd - -; GetWindowsVersion, taken from NSIS help, modified for our purposes -Function IsSupportedWindowsVersion - - Push $R0 - Push $R1 - - ReadRegStr $R0 HKLM \ - "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion - - IfErrors 0 lbl_winnt - - ; we are not NT - ReadRegStr $R0 HKLM \ - "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber - - StrCpy $R1 $R0 1 - StrCmp $R1 '4' 0 lbl_error - - StrCpy $R1 $R0 3 - - StrCmp $R1 '4.0' lbl_win32_95 - StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98 - - lbl_win32_95: - StrCpy $R0 'False' - Goto lbl_done - - lbl_win32_98: - StrCpy $R0 'False' - Goto lbl_done - - lbl_win32_ME: - StrCpy $R0 'False' - Goto lbl_done - - lbl_winnt: - - StrCpy $R1 $R0 1 - - StrCmp $R1 '3' lbl_winnt_x - StrCmp $R1 '4' lbl_winnt_x - - StrCpy $R1 $R0 3 - - StrCmp $R1 '5.0' lbl_winnt_2000 - StrCmp $R1 '5.1' lbl_winnt_XP - StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error - - lbl_winnt_x: - StrCpy $R0 'False' - Goto lbl_done - - lbl_winnt_2000: - Strcpy $R0 'True' - Goto lbl_done - - lbl_winnt_XP: - Strcpy $R0 'True' - Goto lbl_done - - lbl_winnt_2003: - Strcpy $R0 'True' - Goto lbl_done - - lbl_error: - Strcpy $R0 'False' - lbl_done: - - Pop $R1 - Exch $R0 - -FunctionEnd diff --git a/Prebuild/scripts/SharpDevelop.bat b/Prebuild/scripts/SharpDevelop.bat deleted file mode 100755 index 08fea0bd16..0000000000 --- a/Prebuild/scripts/SharpDevelop.bat +++ /dev/null @@ -1,4 +0,0 @@ -@rem Generates a combine (.cmbx) and a set of project files (.prjx) -@rem for SharpDevelop (http://icsharpcode.net/OpenSource/SD/Default.aspx) -cd .. -Prebuild.exe /target sharpdev /file prebuild.xml /build NET_1_1 /pause diff --git a/Prebuild/scripts/SharpDevelop2.bat b/Prebuild/scripts/SharpDevelop2.bat deleted file mode 100755 index 49120abb7a..0000000000 --- a/Prebuild/scripts/SharpDevelop2.bat +++ /dev/null @@ -1,4 +0,0 @@ -@rem Generates a combine (.cmbx) and a set of project files (.prjx) -@rem for SharpDevelop (http://icsharpcode.net/OpenSource/SD/Default.aspx) -cd .. -Prebuild.exe /target sharpdev2 /file prebuild.xml /pause diff --git a/Prebuild/scripts/VS2002.bat b/Prebuild/scripts/VS2002.bat deleted file mode 100755 index dc5b6a7cfd..0000000000 --- a/Prebuild/scripts/VS2002.bat +++ /dev/null @@ -1,4 +0,0 @@ -@rem Generates a solution (.sln) and a set of project files (.csproj) -@rem for Microsoft Visual Studio .NET 2002 -cd .. -Prebuild.exe /target vs2002 /file prebuild.xml /build NET_1_1 /pause diff --git a/Prebuild/scripts/VS2003.bat b/Prebuild/scripts/VS2003.bat deleted file mode 100755 index 929a480a16..0000000000 --- a/Prebuild/scripts/VS2003.bat +++ /dev/null @@ -1,4 +0,0 @@ -@rem Generates a solution (.sln) and a set of project files (.csproj) -@rem for Microsoft Visual Studio .NET 2002 -cd .. -Prebuild.exe /target vs2003 /file prebuild.xml /build NET_1_1 /pause diff --git a/Prebuild/scripts/VS2005.bat b/Prebuild/scripts/VS2005.bat deleted file mode 100755 index 7a7af1dafd..0000000000 --- a/Prebuild/scripts/VS2005.bat +++ /dev/null @@ -1,4 +0,0 @@ -@rem Generates a solution (.sln) and a set of project files (.csproj, .vbproj, etc.) -@rem for Microsoft Visual Studio .NET 2005 -cd .. -Prebuild.exe /target vs2005 /file prebuild.xml /build NET_2_0 /pause diff --git a/Prebuild/scripts/VS2008.bat b/Prebuild/scripts/VS2008.bat deleted file mode 100755 index eb51a820cb..0000000000 --- a/Prebuild/scripts/VS2008.bat +++ /dev/null @@ -1,4 +0,0 @@ -@rem Generates a solution (.sln) and a set of project files (.csproj, .vbproj, etc.) -@rem for Microsoft Visual Studio .NET 2008 -cd .. -Prebuild.exe /target vs2008 /file prebuild.xml /pause diff --git a/Prebuild/scripts/autotools.bat b/Prebuild/scripts/autotools.bat deleted file mode 100755 index 43f9a74647..0000000000 --- a/Prebuild/scripts/autotools.bat +++ /dev/null @@ -1,4 +0,0 @@ -@rem Generates Makefiles -@rem for autotools -cd .. -Prebuild.exe /target autotools /file prebuild.xml /pause diff --git a/Prebuild/scripts/autotools.sh b/Prebuild/scripts/autotools.sh deleted file mode 100755 index 4d140cebcf..0000000000 --- a/Prebuild/scripts/autotools.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -RUNTIME=`which mono` - -SCRIPTDIR=`dirname $0` -${RUNTIME} ${SCRIPTDIR}/../Prebuild.exe /target autotools /file ${SCRIPTDIR}/../prebuild.xml /build NET_2_0 diff --git a/Prebuild/scripts/makefile.bat b/Prebuild/scripts/makefile.bat deleted file mode 100755 index eef9a69443..0000000000 --- a/Prebuild/scripts/makefile.bat +++ /dev/null @@ -1,4 +0,0 @@ -@rem Generates makefiles -@rem for make -cd .. -Prebuild.exe /target makefile /file prebuild.xml /pause diff --git a/Prebuild/scripts/makefile.sh b/Prebuild/scripts/makefile.sh deleted file mode 100755 index 2e656cba7b..0000000000 --- a/Prebuild/scripts/makefile.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -./prebuild /target makefile /file ../prebuild.xml /pause - -if [ -f ../Makefile ] -then - rm -rf ../Makefile -fi - -mv ../Prebuild.make ../Makefile diff --git a/Prebuild/scripts/nant.bat b/Prebuild/scripts/nant.bat deleted file mode 100755 index 925467d687..0000000000 --- a/Prebuild/scripts/nant.bat +++ /dev/null @@ -1,4 +0,0 @@ -@rem Generates a .build files -@rem for NAnt -cd .. -Prebuild.exe /target nant /file prebuild.xml /pause diff --git a/Prebuild/scripts/nant.sh b/Prebuild/scripts/nant.sh deleted file mode 100755 index 0311971421..0000000000 --- a/Prebuild/scripts/nant.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -prebuild /target nant /file ../prebuild.xml /pause diff --git a/Prebuild/scripts/xcode.bat b/Prebuild/scripts/xcode.bat deleted file mode 100755 index 9883edf0a1..0000000000 --- a/Prebuild/scripts/xcode.bat +++ /dev/null @@ -1,4 +0,0 @@ -@rem Generates a Xcode files -@rem for NAnt -cd .. -Prebuild.exe /target xcode /file prebuild.xml /pause diff --git a/Prebuild/scripts/xcode.sh b/Prebuild/scripts/xcode.sh deleted file mode 100755 index e9b58f99d1..0000000000 --- a/Prebuild/scripts/xcode.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -prebuild /target xcode /file ../prebuild.xml /pause diff --git a/Prebuild/src/App.ico b/Prebuild/src/App.ico deleted file mode 100644 index ac4ea6f3c0b8554e84fb478312ec0e294a30aea0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 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 - /// - /// - [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple=true)] - public sealed class DataNodeAttribute : Attribute - { - #region Fields - - private string m_Name = "unknown"; - - #endregion - - #region Constructors - - /// - /// Initializes a new instance of the class. - /// - /// The name. - public DataNodeAttribute(string name) - { - m_Name = name; - } - - #endregion - - #region Properties - - /// - /// Gets the name. - /// - /// The name. - public string Name - { - get - { - return m_Name; - } - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Attributes/OptionNodeAttribute.cs b/Prebuild/src/Core/Attributes/OptionNodeAttribute.cs deleted file mode 100644 index 2d6a6a7bfc..0000000000 --- a/Prebuild/src/Core/Attributes/OptionNodeAttribute.cs +++ /dev/null @@ -1,71 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; - -namespace Prebuild.Core.Attributes -{ - /// - /// - /// - [AttributeUsage(AttributeTargets.Field)] - public sealed class OptionNodeAttribute : Attribute - { - #region Fields - - private string m_NodeName; - - #endregion - - #region Constructors - - /// - /// Initializes a new instance of the class. - /// - /// Name of the node. - public OptionNodeAttribute(string nodeName) - { - m_NodeName = nodeName; - } - - #endregion - - #region Properties - - /// - /// Gets the name of the node. - /// - /// The name of the node. - public string NodeName - { - get - { - return m_NodeName; - } - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Attributes/TargetAttribute.cs b/Prebuild/src/Core/Attributes/TargetAttribute.cs deleted file mode 100644 index 5ad62ee033..0000000000 --- a/Prebuild/src/Core/Attributes/TargetAttribute.cs +++ /dev/null @@ -1,71 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; - -namespace Prebuild.Core.Attributes -{ - /// - /// - /// - [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)] - public sealed class TargetAttribute : Attribute - { - #region Fields - - private string m_Name; - - #endregion - - #region Constructors - - /// - /// Initializes a new instance of the class. - /// - /// The name. - public TargetAttribute(string name) - { - m_Name = name; - } - - #endregion - - #region Properties - - /// - /// Gets the name. - /// - /// The name. - public string Name - { - get - { - return m_Name; - } - } - - #endregion - } -} diff --git a/Prebuild/src/Core/FatalException.cs b/Prebuild/src/Core/FatalException.cs deleted file mode 100644 index 348790568f..0000000000 --- a/Prebuild/src/Core/FatalException.cs +++ /dev/null @@ -1,85 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Runtime.Serialization; - -namespace Prebuild.Core -{ - /// - /// - /// - [Serializable()] - public class FatalException : Exception - { - #region Constructors - - - /// - /// Initializes a new instance of the class. - /// - public FatalException() - { - } - - /// - /// Initializes a new instance of the class. - /// - /// The format. - /// The args. - public FatalException(string format, params object[] args) - : base(String.Format(format, args)) - { - } - - /// - /// Exception with specified string - /// - /// Exception message - public FatalException(string message): base(message) - { - } - - /// - /// - /// - /// - /// - public FatalException(string message, Exception exception) : base(message, exception) - { - } - - /// - /// - /// - /// - /// - protected FatalException(SerializationInfo info, StreamingContext context) : base( info, context ) - { - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Interfaces/IDataNode.cs b/Prebuild/src/Core/Interfaces/IDataNode.cs deleted file mode 100644 index 986dd2de8c..0000000000 --- a/Prebuild/src/Core/Interfaces/IDataNode.cs +++ /dev/null @@ -1,47 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Xml; - -namespace Prebuild.Core.Interfaces -{ - /// - /// - /// - public interface IDataNode - { - /// - /// Gets or sets the parent. - /// - /// The parent. - IDataNode Parent { get; set; } - /// - /// Parses the specified node. - /// - /// The node. - void Parse(XmlNode node); - } -} diff --git a/Prebuild/src/Core/Interfaces/ITarget.cs b/Prebuild/src/Core/Interfaces/ITarget.cs deleted file mode 100644 index 47115c658b..0000000000 --- a/Prebuild/src/Core/Interfaces/ITarget.cs +++ /dev/null @@ -1,51 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; - -namespace Prebuild.Core.Interfaces -{ - /// - /// - /// - public interface ITarget - { - /// - /// Writes the specified kern. - /// - /// The kern. - void Write(Kernel kern); - /// - /// Cleans the specified kern. - /// - /// The kern. - void Clean(Kernel kern); - /// - /// Gets the name. - /// - /// The name. - string Name { get; } - } -} \ No newline at end of file diff --git a/Prebuild/src/Core/Kernel.cs b/Prebuild/src/Core/Kernel.cs deleted file mode 100644 index 95ef04ee5c..0000000000 --- a/Prebuild/src/Core/Kernel.cs +++ /dev/null @@ -1,831 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2008 -Matthew Holmes (matthew@wildfiregames.com), -Dan Moorehead (dan05a@gmail.com), -Rob Loach (http://www.robloach.net), -C.J. Adams-Collier (cjac@colliertech.org) - -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 of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. - -*/ -#endregion - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Collections; -using System.Collections.Specialized; -using System.IO; -using System.Reflection; -using System.Xml; -using System.Xml.Schema; -using System.Text; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Nodes; -using Prebuild.Core.Parse; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core -{ - /// - /// - /// - public class Kernel : IDisposable - { - #region Inner Classes - - private struct NodeEntry - { - public Type Type; - public DataNodeAttribute Attribute; - } - - #endregion - - #region Fields - - private static readonly Kernel m_Instance = new Kernel(); - - /// - /// This must match the version of the schema that is embeeded - /// - private const string m_SchemaVersion = "1.7"; - private const string m_Schema = "prebuild-" + m_SchemaVersion + ".xsd"; - private const string m_SchemaURI = "http://dnpb.sourceforge.net/schemas/" + m_Schema; - bool disposed; - private Version m_Version; - private const string m_Revision = ""; - private CommandLineCollection m_CommandLine; - private Log m_Log; - private CurrentDirectory m_CurrentWorkingDirectory; - private XmlSchemaCollection m_Schemas; - - private Hashtable m_Targets; - private Hashtable m_Nodes; - - readonly List m_Solutions = new List(); - string m_Target; - string m_Clean; - string[] m_RemoveDirectories; - XmlDocument m_CurrentDoc; - bool m_PauseAfterFinish; - string[] m_ProjectGroups; - - #endregion - - #region Constructors - - private Kernel() - { - } - - #endregion - - #region Properties - - /// - /// Gets a value indicating whether [pause after finish]. - /// - /// true if [pause after finish]; otherwise, false. - public bool PauseAfterFinish - { - get - { - return m_PauseAfterFinish; - } - } - - /// - /// Gets the instance. - /// - /// The instance. - public static Kernel Instance - { - get - { - return m_Instance; - } - } - - /// - /// Gets the version. - /// - /// The version. - public string Version - { - get - { - return String.Format("{0}.{1}.{2}{3}", m_Version.Major, m_Version.Minor, m_Version.Build, m_Revision); - } - } - - /// - /// Gets the command line. - /// - /// The command line. - public CommandLineCollection CommandLine - { - get - { - return m_CommandLine; - } - } - - /// - /// Gets the targets. - /// - /// The targets. - public Hashtable Targets - { - get - { - return m_Targets; - } - } - - /// - /// Gets the log. - /// - /// The log. - public Log Log - { - get - { - return m_Log; - } - } - - /// - /// Gets the current working directory. - /// - /// The current working directory. - public CurrentDirectory CurrentWorkingDirectory - { - get - { - return m_CurrentWorkingDirectory; - } - } - - /// - /// Gets the solutions. - /// - /// The solutions. - public List Solutions - { - get - { - return m_Solutions; - } - } - - /// - /// Gets the XmlDocument object representing the prebuild.xml - /// being processed - /// - /// The XmlDocument object - public XmlDocument CurrentDoc - { - get - { - return m_CurrentDoc; - } - } - - #endregion - - #region Private Methods - - private static void RemoveDirectories(string rootDir, string[] dirNames) - { - foreach(string dir in Directory.GetDirectories(rootDir)) - { - string simpleName = Path.GetFileName(dir); - - if(Array.IndexOf(dirNames, simpleName) != -1) - { - //delete if the name matches one of the directory names to delete - string fullDirPath = Path.GetFullPath(dir); - Directory.Delete(fullDirPath,true); - } - else//not a match, so check children - { - RemoveDirectories(dir,dirNames); - //recurse, checking children for them - } - } - } - -// private void RemoveDirectoryMatches(string rootDir, string dirPattern) -// { -// foreach(string dir in Directory.GetDirectories(rootDir)) -// { -// foreach(string match in Directory.GetDirectories(dir)) -// {//delete all child directories that match -// Directory.Delete(Path.GetFullPath(match),true); -// } -// //recure through the rest checking for nested matches to delete -// RemoveDirectoryMatches(dir,dirPattern); -// } -// } - - private void LoadSchema() - { - Assembly assembly = this.GetType().Assembly; - Stream stream = assembly.GetManifestResourceStream("Prebuild.data." + m_Schema); - if(stream == null) - { - //try without the default namespace prepending to it in case was compiled with SharpDevelop or MonoDevelop instead of Visual Studio .NET - stream = assembly.GetManifestResourceStream(m_Schema); - if(stream == null) - { - throw new System.Reflection.TargetException(string.Format("Could not find the scheme embedded resource file '{0}'.", m_Schema)); - } - } - XmlReader schema = new XmlTextReader(stream); - - m_Schemas = new XmlSchemaCollection(); - m_Schemas.Add(m_SchemaURI, schema); - } - - private void CacheVersion() - { - m_Version = Assembly.GetEntryAssembly().GetName().Version; - } - - private void CacheTargets(Assembly assm) - { - foreach(Type t in assm.GetTypes()) - { - TargetAttribute ta = (TargetAttribute)Helper.CheckType(t, typeof(TargetAttribute), typeof(ITarget)); - - if(ta == null) - continue; - - if (t.IsAbstract) - continue; - - ITarget target = (ITarget)assm.CreateInstance(t.FullName); - if (target == null) - { - throw new MissingMethodException("Could not create ITarget instance"); - } - - m_Targets[ta.Name] = target; - } - } - - private void CacheNodeTypes(Assembly assm) - { - foreach(Type t in assm.GetTypes()) - { - foreach (DataNodeAttribute dna in t.GetCustomAttributes(typeof(DataNodeAttribute), true)) - { - NodeEntry ne = new NodeEntry(); - ne.Type = t; - ne.Attribute = dna; - m_Nodes[dna.Name] = ne; - } - } - } - - private void LogBanner() - { - m_Log.Write("Prebuild v" + this.Version); - m_Log.Write("Copyright (c) 2004-2008"); - m_Log.Write("Matthew Holmes (matthew@wildfiregames.com),"); - m_Log.Write("Dan Moorehead (dan05a@gmail.com),"); - m_Log.Write("David Hudson (jendave@yahoo.com),"); - m_Log.Write("Rob Loach (http://www.robloach.net),"); - m_Log.Write("C.J. Adams-Collier (cjac@colliertech.org),"); - - m_Log.Write("See 'prebuild /usage' for help"); - m_Log.Write(); - } - - - - private void ProcessFile(string file) - { - ProcessFile(file, this.m_Solutions); - } - - public void ProcessFile(ProcessNode node, SolutionNode parent) - { - if (node.IsValid) - { - List list = new List(); - ProcessFile(node.Path, list); - - foreach (SolutionNode solution in list) - parent.SolutionsTable[solution.Name] = solution; - } - } - - /// - /// - /// - /// - /// - /// - public void ProcessFile(string file, IList solutions) - { - m_CurrentWorkingDirectory.Push(); - - string path = file; - try - { - try - { - path = Helper.ResolvePath(path); - } - catch(ArgumentException) - { - m_Log.Write("Could not open Prebuild file: " + path); - m_CurrentWorkingDirectory.Pop(); - return; - } - - Helper.SetCurrentDir(Path.GetDirectoryName(path)); - - XmlTextReader reader = new XmlTextReader(path); - - Core.Parse.Preprocessor pre = new Core.Parse.Preprocessor(); - - //register command line arguments as XML variables - IDictionaryEnumerator dict = m_CommandLine.GetEnumerator(); - while (dict.MoveNext()) - { - string name = dict.Key.ToString().Trim(); - if (name.Length > 0) - pre.RegisterVariable(name, dict.Value.ToString()); - } - - string xml = pre.Process(reader);//remove script and evaulate pre-proccessing to get schema-conforming XML - - // See if the user put into a pseudo target of "prebuild:preprocessed-input" to indicate they want to see the - // output before the system processes it. - if (m_CommandLine.WasPassed("ppi")) - { - // Get the filename if there is one, otherwise use a default. - string ppiFile = m_CommandLine["ppi"]; - if (ppiFile == null || ppiFile.Trim().Length == 0) - { - ppiFile = "preprocessed-input.xml"; - } - - // Write out the string to the given stream. - try - { - using (StreamWriter ppiWriter = new StreamWriter(ppiFile)) - { - ppiWriter.WriteLine(xml); - } - } - catch(IOException ex) - { - Console.WriteLine("Could not write PPI file '{0}': {1}", ppiFile, ex.Message); - } - - // Finish processing this special tag. - return; - } - - m_CurrentDoc = new XmlDocument(); - try - { - XmlValidatingReader validator = new XmlValidatingReader(new XmlTextReader(new StringReader(xml))); - - //validate while reading from string into XmlDocument DOM structure in memory - foreach(XmlSchema schema in m_Schemas) - { - validator.Schemas.Add(schema); - } - m_CurrentDoc.Load(validator); - } - catch(XmlException e) - { - throw new XmlException(e.ToString()); - } - - //is there a purpose to writing it? An syntax/schema problem would have been found during pre.Process() and reported with details - if(m_CommandLine.WasPassed("ppo")) - { - string ppoFile = m_CommandLine["ppo"]; - if(ppoFile == null || ppoFile.Trim().Length < 1) - { - ppoFile = "preprocessed.xml"; - } - - StreamWriter writer = null; - try - { - writer = new StreamWriter(ppoFile); - writer.Write(xml); - } - catch(IOException ex) - { - Console.WriteLine("Could not write PPO file '{0}': {1}", ppoFile, ex.Message); - } - finally - { - if(writer != null) - { - writer.Close(); - } - } - return; - } - //start reading the xml config file - XmlElement rootNode = m_CurrentDoc.DocumentElement; - //string suggestedVersion = Helper.AttributeValue(rootNode,"version","1.0"); - Helper.CheckForOSVariables = Helper.ParseBoolean(rootNode,"checkOsVars",false); - - foreach(XmlNode node in rootNode.ChildNodes)//solutions or if pre-proc instructions - { - IDataNode dataNode = ParseNode(node, null); - if(dataNode is ProcessNode) - { - ProcessNode proc = (ProcessNode)dataNode; - if(proc.IsValid) - { - ProcessFile(proc.Path); - } - } - else if(dataNode is SolutionNode) - { - solutions.Add((SolutionNode)dataNode); - } - } - } - catch(XmlSchemaException xse) - { - m_Log.Write("XML validation error at line {0} in {1}:\n\n{2}", - xse.LineNumber, path, xse.Message); - } - finally - { - m_CurrentWorkingDirectory.Pop(); - } - } - - #endregion - - #region Public Methods - - /// - /// Allows the project. - /// - /// The project groups flags. - /// - public bool AllowProject(string projectGroupsFlags) - { - if(m_ProjectGroups != null && m_ProjectGroups.Length > 0) - { - if(projectGroupsFlags != null && projectGroupsFlags.Length == 0) - { - foreach(string group in projectGroupsFlags.Split('|')) - { - if(Array.IndexOf(m_ProjectGroups, group) != -1) //if included in the filter list - { - return true; - } - } - } - return false;//not included in the list or no groups specified for the project - } - return true;//no filter specified in the command line args - } - - /// - /// Gets the type of the node. - /// - /// The node. - /// - public Type GetNodeType(XmlNode node) - { - if( node == null ) - { - throw new ArgumentNullException("node"); - } - if(!m_Nodes.ContainsKey(node.Name)) - { - return null; - } - - NodeEntry ne = (NodeEntry)m_Nodes[node.Name]; - return ne.Type; - } - - /// - /// - /// - /// - /// - /// - public IDataNode ParseNode(XmlNode node, IDataNode parent) - { - return ParseNode(node, parent, null); - } - - //Create an instance of the data node type that is mapped to the name of the xml DOM node - /// - /// Parses the node. - /// - /// The node. - /// The parent. - /// The pre node. - /// - public IDataNode ParseNode(XmlNode node, IDataNode parent, IDataNode preNode) - { - IDataNode dataNode; - - try - { - if( node == null ) - { - throw new ArgumentNullException("node"); - } - if(preNode == null) - { - if(!m_Nodes.ContainsKey(node.Name)) - { - //throw new XmlException("Unknown XML node: " + node.Name); - return null; - } - - NodeEntry ne = (NodeEntry)m_Nodes[node.Name]; - Type type = ne.Type; - //DataNodeAttribute dna = ne.Attribute; - - dataNode = (IDataNode)type.Assembly.CreateInstance(type.FullName); - if(dataNode == null) - { - throw new System.Reflection.TargetException("Could not create new parser instance: " + type.FullName); - } - } - else - dataNode = preNode; - - dataNode.Parent = parent; - dataNode.Parse(node); - } - catch(WarningException wex) - { - m_Log.Write(LogType.Warning, wex.Message); - return null; - } - catch(FatalException fex) - { - m_Log.WriteException(LogType.Error, fex); - throw; - } - catch(Exception ex) - { - m_Log.WriteException(LogType.Error, ex); - throw; - } - - return dataNode; - } - - /// - /// Initializes the specified target. - /// - /// The target. - /// The args. - public void Initialize(LogTargets target, string[] args) - { - m_Targets = new Hashtable(); - CacheTargets(this.GetType().Assembly); - m_Nodes = new Hashtable(); - CacheNodeTypes(this.GetType().Assembly); - CacheVersion(); - - m_CommandLine = new CommandLineCollection(args); - - string logFile = null; - if(m_CommandLine.WasPassed("log")) - { - logFile = m_CommandLine["log"]; - - if(logFile != null && logFile.Length == 0) - { - logFile = "Prebuild.log"; - } - } - else - { - target = target & ~LogTargets.File; //dont output to a file - } - - m_Log = new Log(target, logFile); - LogBanner(); - - m_CurrentWorkingDirectory = new CurrentDirectory(); - - m_Target = m_CommandLine["target"]; - m_Clean = m_CommandLine["clean"]; - string removeDirs = m_CommandLine["removedir"]; - if(removeDirs != null && removeDirs.Length == 0) - { - m_RemoveDirectories = removeDirs.Split('|'); - } - - string flags = m_CommandLine["allowedgroups"];//allows filtering by specifying a pipe-delimited list of groups to include - if(flags != null && flags.Length == 0) - { - m_ProjectGroups = flags.Split('|'); - } - m_PauseAfterFinish = m_CommandLine.WasPassed("pause"); - - LoadSchema(); - } - - /// - /// Processes this instance. - /// - public void Process() - { - bool perfomedOtherTask = false; - if(m_RemoveDirectories != null && m_RemoveDirectories.Length > 0) - { - try - { - RemoveDirectories(".",m_RemoveDirectories); - } - catch(IOException e) - { - m_Log.Write("Failed to remove directories named {0}",m_RemoveDirectories); - m_Log.WriteException(LogType.Error,e); - } - catch(UnauthorizedAccessException e) - { - m_Log.Write("Failed to remove directories named {0}",m_RemoveDirectories); - m_Log.WriteException(LogType.Error,e); - } - perfomedOtherTask = true; - } - - if(m_Target != null && m_Clean != null) - { - m_Log.Write(LogType.Error, "The options /target and /clean cannot be passed together"); - return; - } - - if(m_Target == null && m_Clean == null) - { - if(perfomedOtherTask) //finished - { - return; - } - m_Log.Write(LogType.Error, "Must pass either /target or /clean to process a Prebuild file"); - return; - } - - string file = "./prebuild.xml"; - if(m_CommandLine.WasPassed("file")) - { - file = m_CommandLine["file"]; - } - - ProcessFile(file); - - string target = (m_Target != null ? m_Target.ToLower() : m_Clean.ToLower()); - bool clean = (m_Target == null); - if(clean && target != null && target.Length == 0) - { - target = "all"; - } - if(clean && target == "all")//default to all if no target was specified for clean - { - //check if they passed yes - if (!m_CommandLine.WasPassed("yes")) - { - Console.WriteLine("WARNING: This operation will clean ALL project files for all targets, are you sure? (y/n):"); - string ret = Console.ReadLine(); - if(ret == null) - { - return; - } - ret = ret.Trim().ToLower(); - if((ret.ToLower() != "y" && ret.ToLower() != "yes")) - { - return; - } - } - //clean all targets (just cleaning vs2002 target didn't clean nant) - foreach(ITarget targ in m_Targets.Values) - { - targ.Clean(this); - } - } - else - { - if (!m_Targets.Contains(target)) { - m_Log.Write(LogType.Error, "Unknown Target \"{0}\"", target); - return; - } - ITarget targ = (ITarget)m_Targets[target]; - - if(clean) - { - targ.Clean(this); - } - else - { - targ.Write(this); - } - } - - m_Log.Flush(); - } - - #endregion - - #region IDisposable Members - - /// - /// - /// - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - /// - /// Dispose objects - /// - /// - /// If true, it will dispose close the handle - /// - /// - /// Will dispose managed and unmanaged resources. - /// - protected virtual void Dispose(bool disposing) - { - if (!this.disposed) - { - if (disposing) - { - if (this.m_Log != null) - { - this.m_Log.Close(); - this.m_Log = null; - } - } - } - this.disposed = true; - } - - /// - /// - /// - ~Kernel() - { - this.Dispose(false); - } - - /// - /// Closes and destroys this object - /// - /// - /// Same as Dispose(true) - /// - public void Close() - { - Dispose(); - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Nodes/AuthorNode.cs b/Prebuild/src/Core/Nodes/AuthorNode.cs deleted file mode 100644 index 20e72c01f1..0000000000 --- a/Prebuild/src/Core/Nodes/AuthorNode.cs +++ /dev/null @@ -1,89 +0,0 @@ -#region BSD License -/* -Copyright (c) 2007 C.J. Adams-Collier (cjac@colliertech.org) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Collections; -using System.Collections.Specialized; -using System.Xml; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core.Nodes -{ - /// - /// - /// - [DataNode("Author")] - public class AuthorNode : DataNode - { - #region Fields - - private string m_Signature; - - #endregion - - #region Properties - - /// - /// Gets the signature. - /// - /// The signature. - public string Signature - { - get - { - return m_Signature; - } - } - - #endregion - - #region Public Methods - - /// - /// Parses the specified node. - /// - /// The node. - public override void Parse(XmlNode node) - { - if( node == null ) - { - throw new ArgumentNullException("node"); - } - - m_Signature = Helper.InterpolateForEnvironmentVariables(node.InnerText); - if(m_Signature == null) - { - m_Signature = ""; - } - - m_Signature = m_Signature.Trim(); - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Nodes/ConfigurationNode.cs b/Prebuild/src/Core/Nodes/ConfigurationNode.cs deleted file mode 100644 index 67d78d55fd..0000000000 --- a/Prebuild/src/Core/Nodes/ConfigurationNode.cs +++ /dev/null @@ -1,178 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Xml; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core.Nodes -{ - /// - /// - /// - [DataNode("Configuration")] - public class ConfigurationNode : DataNode, ICloneable, IComparable - { - #region Fields - - private string m_Name = "unknown"; - private OptionsNode m_Options; - - #endregion - - #region Constructors - - /// - /// Initializes a new instance of the class. - /// - public ConfigurationNode() - { - m_Options = new OptionsNode(); - } - - #endregion - - #region Properties - - /// - /// Gets or sets the parent. - /// - /// The parent. - public override IDataNode Parent - { - get - { - return base.Parent; - } - set - { - base.Parent = value; - if(base.Parent is SolutionNode) - { - SolutionNode node = (SolutionNode)base.Parent; - if(node != null && node.Options != null) - { - node.Options.CopyTo(m_Options); - } - } - } - } - - /// - /// Gets the name. - /// - /// The name. - public string Name - { - get - { - return m_Name; - } - } - - /// - /// Gets or sets the options. - /// - /// The options. - public OptionsNode Options - { - get - { - return m_Options; - } - set - { - m_Options = value; - } - } - - #endregion - - #region Public Methods - - /// - /// Parses the specified node. - /// - /// The node. - public override void Parse(XmlNode node) - { - m_Name = Helper.AttributeValue(node, "name", m_Name); - if( node == null ) - { - throw new ArgumentNullException("node"); - } - foreach(XmlNode child in node.ChildNodes) - { - IDataNode dataNode = Kernel.Instance.ParseNode(child, this); - if(dataNode is OptionsNode) - { - ((OptionsNode)dataNode).CopyTo(m_Options); - } - } - } - - /// - /// Copies to. - /// - /// The conf. - public void CopyTo(ConfigurationNode conf) - { - m_Options.CopyTo(conf.m_Options); - } - - #endregion - - #region ICloneable Members - - /// - /// Creates a new object that is a copy of the current instance. - /// - /// - /// A new object that is a copy of this instance. - /// - public object Clone() - { - ConfigurationNode ret = new ConfigurationNode(); - ret.m_Name = m_Name; - m_Options.CopyTo(ret.m_Options); - return ret; - } - - #endregion - - #region IComparable Members - - public int CompareTo(object obj) - { - ConfigurationNode that = (ConfigurationNode) obj; - return this.m_Name.CompareTo(that.m_Name); - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Nodes/DataNode.cs b/Prebuild/src/Core/Nodes/DataNode.cs deleted file mode 100644 index 763e6c3831..0000000000 --- a/Prebuild/src/Core/Nodes/DataNode.cs +++ /dev/null @@ -1,117 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Xml; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using System.IO; - -namespace Prebuild.Core.Nodes -{ - /// - /// - /// - public abstract class DataNode : IDataNode - { - #region Fields - - private IDataNode parent; - string[] m_WebTypes = new string[] { "aspx", "ascx", "master", "ashx", "asmx" }; - - #endregion - - #region IDataNode Members - - /// - /// Gets or sets the parent. - /// - /// The parent. - public virtual IDataNode Parent - { - get - { - return parent; - } - set - { - parent = value; - } - } - public string[] WebTypes - { - get { return m_WebTypes; } - } - /// - /// Parses the specified node. - /// - /// The node. - public virtual void Parse(XmlNode node) - { - } - public BuildAction GetBuildActionByFileName(string fileName) - { - string extension = Path.GetExtension(fileName).ToLower(); - foreach (string type in WebTypes) - { - if (extension == type) - return BuildAction.Content; - } - return BuildAction.Compile; - } - /// - /// Parses the file type to figure out what type it is - /// - /// - public SubType GetSubTypeByFileName(string fileName) - { - string extension = System.IO.Path.GetExtension(fileName).ToLower(); - string designer = String.Format(".designer{0}", extension); - string path = fileName.ToLower(); - if (extension == ".resx") - { - return SubType.Designer; - } - else if (path.EndsWith(".settings")) - { - return SubType.Settings; - } - else - { - - foreach (string type in WebTypes) - { - if (path.EndsWith(string.Format("{0}{1}", type, extension))) - { - return SubType.CodeBehind; - } - } - } - return SubType.Code; - } - #endregion - } -} diff --git a/Prebuild/src/Core/Nodes/DatabaseProjectNode.cs b/Prebuild/src/Core/Nodes/DatabaseProjectNode.cs deleted file mode 100644 index 27c205162a..0000000000 --- a/Prebuild/src/Core/Nodes/DatabaseProjectNode.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.Xml; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core.Nodes -{ - [DataNode("DatabaseProject")] - public class DatabaseProjectNode : DataNode - { - string name; - string path; - string fullpath; - Guid guid = Guid.NewGuid(); - readonly List authors = new List(); - readonly List references = new List(); - - public Guid Guid - { - get { return guid; } - } - - public string Name - { - get { return name; } - } - - public string Path - { - get { return path; } - } - - public string FullPath - { - get { return fullpath; } - } - - public IEnumerable References - { - get { return references; } - } - - public override void Parse(XmlNode node) - { - name = Helper.AttributeValue(node, "name", name); - path = Helper.AttributeValue(node, "path", name); - - try - { - fullpath = Helper.ResolvePath(path); - } - catch - { - throw new WarningException("Could not resolve Solution path: {0}", path); - } - - Kernel.Instance.CurrentWorkingDirectory.Push(); - - try - { - Helper.SetCurrentDir(fullpath); - - if (node == null) - { - throw new ArgumentNullException("node"); - } - - foreach (XmlNode child in node.ChildNodes) - { - IDataNode dataNode = Kernel.Instance.ParseNode(child, this); - - if (dataNode == null) - continue; - - if (dataNode is AuthorNode) - authors.Add((AuthorNode)dataNode); - else if (dataNode is DatabaseReferenceNode) - references.Add((DatabaseReferenceNode)dataNode); - } - } - finally - { - Kernel.Instance.CurrentWorkingDirectory.Pop(); - } - - base.Parse(node); - } - } -} diff --git a/Prebuild/src/Core/Nodes/DatabaseReferenceNode.cs b/Prebuild/src/Core/Nodes/DatabaseReferenceNode.cs deleted file mode 100644 index 845db24b12..0000000000 --- a/Prebuild/src/Core/Nodes/DatabaseReferenceNode.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System; -using Prebuild.Core.Attributes; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core.Nodes -{ - [DataNode("DatabaseReference")] - public class DatabaseReferenceNode : DataNode - { - string name; - Guid providerId; - string connectionString; - - public string Name - { - get { return name; } - } - - public Guid ProviderId - { - get { return providerId; } - } - - public string ConnectionString - { - get { return connectionString; } - } - - public override void Parse(System.Xml.XmlNode node) - { - name = Helper.AttributeValue(node, "name", name); - - string providerName = Helper.AttributeValue(node, "providerName", string.Empty); - if (providerName != null) - { - switch (providerName) - { - // digitaljeebus: pulled from HKLM\SOFTWARE\Microsoft\VisualStudio\9.0\DataProviders\* - // Not sure if these will help other operating systems, or if there's a better way. - case "Microsoft.SqlServerCe.Client.3.5": - providerId = new Guid("7C602B5B-ACCB-4acd-9DC0-CA66388C1533"); break; - case "System.Data.OleDb": - providerId = new Guid("7F041D59-D76A-44ed-9AA2-FBF6B0548B80"); break; - case "System.Data.OracleClient": - providerId = new Guid("8F5C5018-AE09-42cf-B2CC-2CCCC7CFC2BB"); break; - case "System.Data.SqlClient": - providerId = new Guid("91510608-8809-4020-8897-FBA057E22D54"); break; - case "System.Data.Odbc": - providerId = new Guid("C3D4F4CE-2C48-4381-B4D6-34FA50C51C86"); break; - - default: - throw new ArgumentOutOfRangeException("providerName", providerName, "Could not provider name to an id."); - } - } - else - providerId = new Guid(Helper.AttributeValue(node, "providerId", Guid.Empty.ToString("B"))); - - connectionString = Helper.AttributeValue(node, "connectionString", connectionString); - - base.Parse(node); - } - } -} diff --git a/Prebuild/src/Core/Nodes/DescriptionNode.cs b/Prebuild/src/Core/Nodes/DescriptionNode.cs deleted file mode 100644 index 353a5aec07..0000000000 --- a/Prebuild/src/Core/Nodes/DescriptionNode.cs +++ /dev/null @@ -1,89 +0,0 @@ -#region BSD License -/* -Copyright (c) 2007 C.J. Adams-Collier (cjac@colliertech.org) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Collections; -using System.Collections.Specialized; -using System.Xml; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core.Nodes -{ - /// - /// The object representing the /Prebuild/Solution/Project/Description element - /// - [DataNode("Description")] - public class DescriptionNode : DataNode - { - #region Fields - - private string m_Value; - - #endregion - - #region Properties - - /// - /// Gets the description Value. - /// - /// The description Value. - public string Value - { - get - { - return m_Value; - } - } - - #endregion - - #region Public Methods - - /// - /// Parses the specified node. - /// - /// The node. - public override void Parse(XmlNode node) - { - if( node == null ) - { - throw new ArgumentNullException("node"); - } - - m_Value = Helper.InterpolateForEnvironmentVariables(node.InnerText); - if(m_Value == null) - { - m_Value = ""; - } - - m_Value = m_Value.Trim(); - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Nodes/ExcludeNode.cs b/Prebuild/src/Core/Nodes/ExcludeNode.cs deleted file mode 100644 index 7f04cba72f..0000000000 --- a/Prebuild/src/Core/Nodes/ExcludeNode.cs +++ /dev/null @@ -1,89 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Xml; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core.Nodes -{ - /// - /// - /// - [DataNode("Exclude")] - public class ExcludeNode : DataNode - { - #region Fields - - private string m_Pattern = ""; - - #endregion - - #region Properties - - /// - /// Gets the name. - /// - /// The name. - public string Name - { - get - { - return m_Pattern; - } - } - - /// - /// Gets the pattern. - /// - /// The pattern. - public string Pattern - { - get - { - return m_Pattern; - } - } - - #endregion - - #region Public Methods - - /// - /// Parses the specified node. - /// - /// The node. - public override void Parse(XmlNode node) - { - m_Pattern = Helper.AttributeValue( node, "name", m_Pattern ); - m_Pattern = Helper.AttributeValue(node, "pattern", m_Pattern ); - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Nodes/FileNode.cs b/Prebuild/src/Core/Nodes/FileNode.cs deleted file mode 100644 index 1520fcb789..0000000000 --- a/Prebuild/src/Core/Nodes/FileNode.cs +++ /dev/null @@ -1,271 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.IO; -using System.Xml; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Utilities; -using Prebuild.Core.Targets; - -namespace Prebuild.Core.Nodes -{ - /// - /// - /// - public enum BuildAction - { - /// - /// - /// - None, - /// - /// - /// - Compile, - /// - /// - /// - Content, - /// - /// - /// - EmbeddedResource - } - - /// - /// - /// - public enum SubType - { - /// - /// - /// - Code, - /// - /// - /// - Component, - /// - /// - /// - Designer, - /// - /// - /// - Form, - /// - /// - /// - Settings, - /// - /// - /// - UserControl, - /// - /// - /// - CodeBehind, - } - - public enum CopyToOutput - { - Never, - Always, - PreserveNewest - } - - /// - /// - /// - [DataNode("File")] - public class FileNode : DataNode - { - #region Fields - - private string m_Path; - private string m_ResourceName = ""; - private BuildAction? m_BuildAction; - private bool m_Valid; - private SubType? m_SubType; - private CopyToOutput m_CopyToOutput = CopyToOutput.Never; - private bool m_Link = false; - private string m_LinkPath = string.Empty; - private bool m_PreservePath = false; - - - #endregion - - #region Properties - - /// - /// - /// - public string Path - { - get - { - return m_Path; - } - } - - /// - /// - /// - public string ResourceName - { - get - { - return m_ResourceName; - } - } - - /// - /// - /// - public BuildAction BuildAction - { - get - { - if (m_BuildAction != null) - return m_BuildAction.Value; - else - return GetBuildActionByFileName(this.Path); - - } - } - - public CopyToOutput CopyToOutput - { - get - { - return this.m_CopyToOutput; - } - } - - public bool IsLink - { - get - { - return this.m_Link; - } - } - - public string LinkPath - { - get - { - return this.m_LinkPath; - } - } - /// - /// - /// - public SubType SubType - { - get - { - if (m_SubType != null) - return m_SubType.Value; - else - return GetSubTypeByFileName(this.Path); - } - } - - /// - /// - /// - public bool IsValid - { - get - { - return m_Valid; - } - } - - /// - /// - /// - /// - /// - public bool PreservePath - { - get - { - return m_PreservePath; - } - } - - #endregion - - #region Public Methods - - /// - /// - /// - /// - public override void Parse(XmlNode node) - { - string buildAction = Helper.AttributeValue(node, "buildAction", String.Empty); - if (buildAction != string.Empty) - m_BuildAction = (BuildAction)Enum.Parse(typeof(BuildAction), buildAction); - string subType = Helper.AttributeValue(node, "subType", string.Empty); - if (subType != String.Empty) - m_SubType = (SubType)Enum.Parse(typeof(SubType), subType); - - m_ResourceName = Helper.AttributeValue(node, "resourceName", m_ResourceName.ToString()); - this.m_Link = bool.Parse(Helper.AttributeValue(node, "link", bool.FalseString)); - if ( this.m_Link == true ) - { - this.m_LinkPath = Helper.AttributeValue( node, "linkPath", string.Empty ); - } - this.m_CopyToOutput = (CopyToOutput) Enum.Parse(typeof(CopyToOutput), Helper.AttributeValue(node, "copyToOutput", this.m_CopyToOutput.ToString())); - this.m_PreservePath = bool.Parse( Helper.AttributeValue( node, "preservePath", bool.FalseString ) ); - - if( node == null ) - { - throw new ArgumentNullException("node"); - } - - m_Path = Helper.InterpolateForEnvironmentVariables(node.InnerText); - if(m_Path == null) - { - m_Path = ""; - } - - m_Path = m_Path.Trim(); - m_Valid = true; - if(!File.Exists(m_Path)) - { - m_Valid = false; - Kernel.Instance.Log.Write(LogType.Warning, "File does not exist: {0}", m_Path); - } - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Nodes/FilesNode.cs b/Prebuild/src/Core/Nodes/FilesNode.cs deleted file mode 100644 index dc306c2252..0000000000 --- a/Prebuild/src/Core/Nodes/FilesNode.cs +++ /dev/null @@ -1,247 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Collections; -using System.Collections.Specialized; -using System.Xml; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using System.IO; - -namespace Prebuild.Core.Nodes -{ - /// - /// - /// - [DataNode("Files")] - public class FilesNode : DataNode - { - #region Fields - - private StringCollection m_Files; - private Hashtable m_BuildActions; - private Hashtable m_SubTypes; - private Hashtable m_ResourceNames; - private Hashtable m_CopyToOutputs; - private Hashtable m_Links; - private Hashtable m_LinkPaths; - private Hashtable m_PreservePaths; - - #endregion - - #region Constructors - - /// - /// - /// - public FilesNode() - { - m_Files = new StringCollection(); - m_BuildActions = new Hashtable(); - m_SubTypes = new Hashtable(); - m_ResourceNames = new Hashtable(); - m_CopyToOutputs = new Hashtable(); - m_Links = new Hashtable(); - m_LinkPaths = new Hashtable(); - m_PreservePaths = new Hashtable(); - } - - #endregion - - #region Properties - - /// - /// - /// - public int Count - { - get - { - return m_Files.Count; - } - } - - #endregion - - #region Public Methods - - /// - /// - /// - /// - /// - public BuildAction GetBuildAction(string file) - { - if(!m_BuildActions.ContainsKey(file)) - { - return BuildAction.Compile; - } - - return (BuildAction)m_BuildActions[file]; - } - - public CopyToOutput GetCopyToOutput(string file) - { - if (!this.m_CopyToOutputs.ContainsKey(file)) - { - return CopyToOutput.Never; - } - return (CopyToOutput) this.m_CopyToOutputs[file]; - } - - public bool GetIsLink(string file) - { - if (!this.m_Links.ContainsKey(file)) - { - return false; - } - return (bool) this.m_Links[file]; - } - - public string GetLinkPath( string file ) - { - if ( !this.m_LinkPaths.ContainsKey( file ) ) - { - return string.Empty; - } - return (string)this.m_LinkPaths[ file ]; - } - - /// - /// - /// - /// - /// - public SubType GetSubType(string file) - { - if(!m_SubTypes.ContainsKey(file)) - { - return SubType.Code; - } - - return (SubType)m_SubTypes[file]; - } - - /// - /// - /// - /// - /// - public string GetResourceName(string file) - { - if(!m_ResourceNames.ContainsKey(file)) - { - return ""; - } - - return (string)m_ResourceNames[file]; - } - - /// - /// - /// - /// - /// - public bool GetPreservePath( string file ) - { - if ( !m_PreservePaths.ContainsKey( file ) ) - { - return false; - } - - return (bool)m_PreservePaths[ file ]; - } - - /// - /// - /// - /// - public override void Parse(XmlNode node) - { - if( node == null ) - { - throw new ArgumentNullException("node"); - } - foreach(XmlNode child in node.ChildNodes) - { - IDataNode dataNode = Kernel.Instance.ParseNode(child, this); - if(dataNode is FileNode) - { - FileNode fileNode = (FileNode)dataNode; - if(fileNode.IsValid) - { - if (!m_Files.Contains(fileNode.Path)) - { - m_Files.Add(fileNode.Path); - m_BuildActions[fileNode.Path] = fileNode.BuildAction; - m_SubTypes[fileNode.Path] = fileNode.SubType; - m_ResourceNames[fileNode.Path] = fileNode.ResourceName; - this.m_PreservePaths[ fileNode.Path ] = fileNode.PreservePath; - this.m_Links[ fileNode.Path ] = fileNode.IsLink; - this.m_LinkPaths[ fileNode.Path ] = fileNode.LinkPath; - this.m_CopyToOutputs[ fileNode.Path ] = fileNode.CopyToOutput; - - } - } - } - else if(dataNode is MatchNode) - { - foreach(string file in ((MatchNode)dataNode).Files) - { - MatchNode matchNode = (MatchNode)dataNode; - if (!m_Files.Contains(file)) - { - m_Files.Add(file); - m_BuildActions[ file ] = matchNode.BuildAction == null ? GetBuildActionByFileName(file) : matchNode.BuildAction; - m_SubTypes[file] = matchNode.SubType == null ? GetSubTypeByFileName(file) : matchNode.SubType.Value; - m_ResourceNames[ file ] = matchNode.ResourceName; - this.m_PreservePaths[ file ] = matchNode.PreservePath; - this.m_Links[ file ] = matchNode.IsLink; - this.m_LinkPaths[ file ] = matchNode.LinkPath; - this.m_CopyToOutputs[ file ] = matchNode.CopyToOutput; - - } - } - } - } - } - - // TODO: Check in to why StringCollection's enumerator doesn't implement - // IEnumerator? - /// - /// - /// - /// - public StringEnumerator GetEnumerator() - { - return m_Files.GetEnumerator(); - } - - #endregion - - } -} diff --git a/Prebuild/src/Core/Nodes/MatchNode.cs b/Prebuild/src/Core/Nodes/MatchNode.cs deleted file mode 100644 index 656d7d0718..0000000000 --- a/Prebuild/src/Core/Nodes/MatchNode.cs +++ /dev/null @@ -1,330 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.IO; -using System.Text.RegularExpressions; -using System.Xml; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Utilities; -using System.Collections; - -namespace Prebuild.Core.Nodes -{ - /// - /// - /// - [DataNode("Match")] - public class MatchNode : DataNode - { - #region Fields - - private readonly StringCollection m_Files = new StringCollection(); - private Regex m_Regex; - private BuildAction? m_BuildAction; - private SubType? m_SubType; - string m_ResourceName = ""; - private CopyToOutput m_CopyToOutput; - private bool m_Link; - private string m_LinkPath; - private bool m_PreservePath; - private readonly List m_Exclusions = new List(); - - #endregion - - #region Properties - - /// - /// - /// - public StringCollection Files - { - get - { - return m_Files; - } - } - - /// - /// - /// - public BuildAction? BuildAction - { - get - { - return m_BuildAction; - } - } - - /// - /// - /// - public SubType? SubType - { - get - { - return m_SubType; - } - } - - public CopyToOutput CopyToOutput - { - get - { - return this.m_CopyToOutput; - } - } - - public bool IsLink - { - get - { - return this.m_Link; - } - } - - public string LinkPath - { - get - { - return this.m_LinkPath; - } - } - /// - /// - /// - public string ResourceName - { - get - { - return m_ResourceName; - } - } - - public bool PreservePath - { - get - { - return m_PreservePath; - } - } - - #endregion - - #region Private Methods - - /// - /// Recurses the directories. - /// - /// The path. - /// The pattern. - /// if set to true [recurse]. - /// if set to true [use regex]. - private void RecurseDirectories(string path, string pattern, bool recurse, bool useRegex, List exclusions) - { - Match match; - Boolean excludeFile; - try - { - string[] files; - - if(!useRegex) - { - files = Directory.GetFiles(path, pattern); - if(files != null) - { - string fileTemp; - foreach (string file in files) - { - excludeFile = false; - if (file.Substring(0,2) == "./" || file.Substring(0,2) == ".\\") - { - fileTemp = file.Substring(2); - } - else - { - fileTemp = file; - } - - // Check all excludions and set flag if there are any hits. - foreach ( ExcludeNode exclude in exclusions ) - { - Regex exRegEx = new Regex( exclude.Pattern ); - match = exRegEx.Match( file ); - excludeFile |= match.Success; - } - - if ( !excludeFile ) - { - m_Files.Add( fileTemp ); - } - - } - } - else - { - return; - } - } - else - { - files = Directory.GetFiles(path); - foreach(string file in files) - { - excludeFile = false; - - match = m_Regex.Match(file); - if(match.Success) - { - // Check all excludions and set flag if there are any hits. - foreach ( ExcludeNode exclude in exclusions ) - { - Regex exRegEx = new Regex( exclude.Pattern ); - match = exRegEx.Match( file ); - excludeFile |= !match.Success; - } - - if ( !excludeFile ) - { - m_Files.Add( file ); - } - } - } - } - - if(recurse) - { - string[] dirs = Directory.GetDirectories(path); - if(dirs != null && dirs.Length > 0) - { - foreach(string str in dirs) - { - RecurseDirectories(Helper.NormalizePath(str), pattern, recurse, useRegex, exclusions); - } - } - } - } - catch(DirectoryNotFoundException) - { - return; - } - catch(ArgumentException) - { - return; - } - } - - #endregion - - #region Public Methods - - /// - /// - /// - /// - public override void Parse(XmlNode node) - { - if( node == null ) - { - throw new ArgumentNullException("node"); - } - string path = Helper.AttributeValue(node, "path", "."); - string pattern = Helper.AttributeValue(node, "pattern", "*"); - bool recurse = (bool)Helper.TranslateValue(typeof(bool), Helper.AttributeValue(node, "recurse", "false")); - bool useRegex = (bool)Helper.TranslateValue(typeof(bool), Helper.AttributeValue(node, "useRegex", "false")); - string buildAction = Helper.AttributeValue(node, "buildAction", String.Empty); - if (buildAction != string.Empty) - m_BuildAction = (BuildAction)Enum.Parse(typeof(BuildAction), buildAction); - - //TODO: Figure out where the subtype node is being assigned - //string subType = Helper.AttributeValue(node, "subType", string.Empty); - //if (subType != String.Empty) - // m_SubType = (SubType)Enum.Parse(typeof(SubType), subType); - m_ResourceName = Helper.AttributeValue(node, "resourceName", m_ResourceName.ToString()); - this.m_CopyToOutput = (CopyToOutput) Enum.Parse(typeof(CopyToOutput), Helper.AttributeValue(node, "copyToOutput", this.m_CopyToOutput.ToString())); - this.m_Link = bool.Parse(Helper.AttributeValue(node, "link", bool.FalseString)); - if ( this.m_Link == true ) - { - this.m_LinkPath = Helper.AttributeValue( node, "linkPath", string.Empty ); - } - this.m_PreservePath = bool.Parse( Helper.AttributeValue( node, "preservePath", bool.FalseString ) ); - - - if(path != null && path.Length == 0) - { - path = ".";//use current directory - } - //throw new WarningException("Match must have a 'path' attribute"); - - if(pattern == null) - { - throw new WarningException("Match must have a 'pattern' attribute"); - } - - path = Helper.NormalizePath(path); - if(!Directory.Exists(path)) - { - throw new WarningException("Match path does not exist: {0}", path); - } - - try - { - if(useRegex) - { - m_Regex = new Regex(pattern); - } - } - catch(ArgumentException ex) - { - throw new WarningException("Could not compile regex pattern: {0}", ex.Message); - } - - - foreach(XmlNode child in node.ChildNodes) - { - IDataNode dataNode = Kernel.Instance.ParseNode(child, this); - if(dataNode is ExcludeNode) - { - ExcludeNode excludeNode = (ExcludeNode)dataNode; - m_Exclusions.Add( excludeNode ); - } - } - - RecurseDirectories( path, pattern, recurse, useRegex, m_Exclusions ); - - if(m_Files.Count < 1) - { - throw new WarningException("Match returned no files: {0}{1}", Helper.EndPath(path), pattern); - } - m_Regex = null; - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Nodes/OptionsNode.cs b/Prebuild/src/Core/Nodes/OptionsNode.cs deleted file mode 100644 index b63034bfe8..0000000000 --- a/Prebuild/src/Core/Nodes/OptionsNode.cs +++ /dev/null @@ -1,644 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Collections; -using System.Collections.Specialized; -using System.Reflection; -using System.Xml; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core.Nodes -{ - /// - /// - /// - [DataNode("Options")] - public class OptionsNode : DataNode - { - #region Fields - - private static Hashtable m_OptionFields; - - [OptionNode("CompilerDefines")] - private string m_CompilerDefines = ""; - - /// - /// - /// - public string CompilerDefines - { - get - { - return m_CompilerDefines; - } - set - { - m_CompilerDefines = value; - } - } - - [OptionNode("OptimizeCode")] - private bool m_OptimizeCode; - - /// - /// - /// - public bool OptimizeCode - { - get - { - return m_OptimizeCode; - } - set - { - m_OptimizeCode = value; - } - } - - [OptionNode("CheckUnderflowOverflow")] - private bool m_CheckUnderflowOverflow; - - /// - /// - /// - public bool CheckUnderflowOverflow - { - get - { - return m_CheckUnderflowOverflow; - } - set - { - m_CheckUnderflowOverflow = value; - } - } - - [OptionNode("AllowUnsafe")] - private bool m_AllowUnsafe; - - /// - /// - /// - public bool AllowUnsafe - { - get - { - return m_AllowUnsafe; - } - set - { - m_AllowUnsafe = value; - } - } - - [OptionNode("PreBuildEvent")] - private string m_PreBuildEvent; - - /// - /// - /// - public string PreBuildEvent - { - get - { - return m_PreBuildEvent; - } - set - { - m_PreBuildEvent = value; - } - } - - [OptionNode("PostBuildEvent")] - private string m_PostBuildEvent; - - /// - /// - /// - public string PostBuildEvent - { - get - { - return m_PostBuildEvent; - } - set - { - m_PostBuildEvent = value; - } - } - - [OptionNode("PreBuildEventArgs")] - private string m_PreBuildEventArgs; - - /// - /// - /// - public string PreBuildEventArgs - { - get - { - return m_PreBuildEventArgs; - } - set - { - m_PreBuildEventArgs = value; - } - } - - [OptionNode("PostBuildEventArgs")] - private string m_PostBuildEventArgs; - - /// - /// - /// - public string PostBuildEventArgs - { - get - { - return m_PostBuildEventArgs; - } - set - { - m_PostBuildEventArgs = value; - } - } - - [OptionNode("RunPostBuildEvent")] - private string m_RunPostBuildEvent; - - /// - /// - /// - public string RunPostBuildEvent - { - get - { - return m_RunPostBuildEvent; - } - set - { - m_RunPostBuildEvent = value; - } - } - - [OptionNode("RunScript")] - private string m_RunScript; - - /// - /// - /// - public string RunScript - { - get - { - return m_RunScript; - } - set - { - m_RunScript = value; - } - } - - [OptionNode("WarningLevel")] - private int m_WarningLevel = 4; - - /// - /// - /// - public int WarningLevel - { - get - { - return m_WarningLevel; - } - set - { - m_WarningLevel = value; - } - } - - [OptionNode("WarningsAsErrors")] - private bool m_WarningsAsErrors; - - /// - /// - /// - public bool WarningsAsErrors - { - get - { - return m_WarningsAsErrors; - } - set - { - m_WarningsAsErrors = value; - } - } - - [OptionNode("SuppressWarnings")] - private string m_SuppressWarnings = ""; - - /// - /// - /// - public string SuppressWarnings - { - get - { - return m_SuppressWarnings; - } - set - { - m_SuppressWarnings = value; - } - } - - [OptionNode("OutputPath")] - private string m_OutputPath = "bin/"; - - /// - /// - /// - public string OutputPath - { - get - { - return m_OutputPath; - } - set - { - m_OutputPath = value; - } - } - - [OptionNode("GenerateDocumentation")] - private bool m_GenerateDocumentation; - - /// - /// - /// - public bool GenerateDocumentation - { - get - { - return m_GenerateDocumentation; - } - set - { - m_GenerateDocumentation = value; - } - } - - [OptionNode("GenerateXmlDocFile")] - private bool m_GenerateXmlDocFile; - - /// - /// - /// - public bool GenerateXmlDocFile - { - get - { - return m_GenerateXmlDocFile; - } - set - { - m_GenerateXmlDocFile = value; - } - } - - [OptionNode("XmlDocFile")] - private string m_XmlDocFile = ""; - - /// - /// - /// - public string XmlDocFile - { - get - { - return m_XmlDocFile; - } - set - { - m_XmlDocFile = value; - } - } - - [OptionNode("KeyFile")] - private string m_KeyFile = ""; - - /// - /// - /// - public string KeyFile - { - get - { - return m_KeyFile; - } - set - { - m_KeyFile = value; - } - } - - [OptionNode("DebugInformation")] - private bool m_DebugInformation; - - /// - /// - /// - public bool DebugInformation - { - get - { - return m_DebugInformation; - } - set - { - m_DebugInformation = value; - } - } - - [OptionNode("RegisterComInterop")] - private bool m_RegisterComInterop; - - /// - /// - /// - public bool RegisterComInterop - { - get - { - return m_RegisterComInterop; - } - set - { - m_RegisterComInterop = value; - } - } - - [OptionNode("RemoveIntegerChecks")] - private bool m_RemoveIntegerChecks; - - /// - /// - /// - public bool RemoveIntegerChecks - { - get - { - return m_RemoveIntegerChecks; - } - set - { - m_RemoveIntegerChecks = value; - } - } - - [OptionNode("IncrementalBuild")] - private bool m_IncrementalBuild; - - /// - /// - /// - public bool IncrementalBuild - { - get - { - return m_IncrementalBuild; - } - set - { - m_IncrementalBuild = value; - } - } - - [OptionNode("BaseAddress")] - private string m_BaseAddress = "285212672"; - - /// - /// - /// - public string BaseAddress - { - get - { - return m_BaseAddress; - } - set - { - m_BaseAddress = value; - } - } - - [OptionNode("FileAlignment")] - private int m_FileAlignment = 4096; - - /// - /// - /// - public int FileAlignment - { - get - { - return m_FileAlignment; - } - set - { - m_FileAlignment = value; - } - } - - [OptionNode("NoStdLib")] - private bool m_NoStdLib; - - /// - /// - /// - public bool NoStdLib - { - get - { - return m_NoStdLib; - } - set - { - m_NoStdLib = value; - } - } - - private StringCollection m_FieldsDefined; - - #endregion - - #region Constructors - - /// - /// Initializes the class. - /// - static OptionsNode() - { - Type t = typeof(OptionsNode); - - m_OptionFields = new Hashtable(); - foreach(FieldInfo f in t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance)) - { - object[] attrs = f.GetCustomAttributes(typeof(OptionNodeAttribute), false); - if(attrs == null || attrs.Length < 1) - { - continue; - } - - OptionNodeAttribute ona = (OptionNodeAttribute)attrs[0]; - m_OptionFields[ona.NodeName] = f; - } - } - - /// - /// Initializes a new instance of the class. - /// - public OptionsNode() - { - m_FieldsDefined = new StringCollection(); - } - - #endregion - - #region Properties - - /// - /// Gets the at the specified index. - /// - /// - public object this[string index] - { - get - { - if(!m_OptionFields.ContainsKey(index)) - { - return null; - } - - FieldInfo f = (FieldInfo)m_OptionFields[index]; - return f.GetValue(this); - } - } - - /// - /// Gets the at the specified index. - /// - /// - public object this[string index, object defaultValue] - { - get - { - object valueObject = this[index]; - if(valueObject != null && valueObject is string && ((string)valueObject).Length == 0) - { - return defaultValue; - } - return valueObject; - } - } - - - #endregion - - #region Private Methods - - private void FlagDefined(string name) - { - if(!m_FieldsDefined.Contains(name)) - { - m_FieldsDefined.Add(name); - } - } - - private void SetOption(string nodeName, string val) - { - lock(m_OptionFields) - { - if(!m_OptionFields.ContainsKey(nodeName)) - { - return; - } - - FieldInfo f = (FieldInfo)m_OptionFields[nodeName]; - f.SetValue(this, Helper.TranslateValue(f.FieldType, val)); - FlagDefined(f.Name); - } - } - - #endregion - - #region Public Methods - - /// - /// Parses the specified node. - /// - /// The node. - public override void Parse(XmlNode node) - { - if( node == null ) - { - throw new ArgumentNullException("node"); - } - - foreach(XmlNode child in node.ChildNodes) - { - SetOption(child.Name, Helper.InterpolateForEnvironmentVariables(child.InnerText)); - } - } - - /// - /// Copies to. - /// - /// The opt. - public void CopyTo(OptionsNode opt) - { - if(opt == null) - { - return; - } - - foreach(FieldInfo f in m_OptionFields.Values) - { - if(m_FieldsDefined.Contains(f.Name)) - { - f.SetValue(opt, f.GetValue(this)); - opt.m_FieldsDefined.Add(f.Name); - } - } - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Nodes/ProcessNode.cs b/Prebuild/src/Core/Nodes/ProcessNode.cs deleted file mode 100644 index 6bfbe16be3..0000000000 --- a/Prebuild/src/Core/Nodes/ProcessNode.cs +++ /dev/null @@ -1,110 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Collections; -using System.Collections.Specialized; -using System.Xml; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core.Nodes -{ - /// - /// - /// - [DataNode("Process")] - public class ProcessNode : DataNode - { - #region Fields - - private string m_Path; - private bool m_IsValid = true; - - #endregion - - #region Properties - - /// - /// Gets the path. - /// - /// The path. - public string Path - { - get - { - return m_Path; - } - } - - /// - /// Gets a value indicating whether this instance is valid. - /// - /// true if this instance is valid; otherwise, false. - public bool IsValid - { - get - { - return m_IsValid; - } - } - - #endregion - - #region Public Methods - - /// - /// Parses the specified node. - /// - /// The node. - public override void Parse(XmlNode node) - { - if( node == null ) - { - throw new ArgumentNullException("node"); - } - - m_Path = Helper.InterpolateForEnvironmentVariables(node.InnerText); - if(m_Path == null) - { - m_Path = ""; - } - - try - { - m_Path = Helper.ResolvePath(m_Path); - } - catch(ArgumentException) - { - Kernel.Instance.Log.Write(LogType.Warning, "Could not find prebuild file for processing: {0}", m_Path); - m_IsValid = false; - } - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Nodes/ProjectNode.cs b/Prebuild/src/Core/Nodes/ProjectNode.cs deleted file mode 100644 index 04af7a3582..0000000000 --- a/Prebuild/src/Core/Nodes/ProjectNode.cs +++ /dev/null @@ -1,580 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Xml; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core.Nodes -{ - /// - /// A set of values that the Project's type can be - /// - public enum ProjectType - { - /// - /// The project is a console executable - /// - Exe, - /// - /// The project is a windows executable - /// - WinExe, - /// - /// The project is a library - /// - Library, - /// - /// The project is a website - /// - Web, - } - - /// - /// - /// - public enum ClrRuntime - { - /// - /// - /// - Microsoft, - /// - /// - /// - Mono - } - /// - /// The version of the .NET framework to use (Required for VS2008) - /// We don't need .NET 1.1 in here, it'll default when using vs2003. - /// - public enum FrameworkVersion - { - /// - /// .NET 2.0 - /// - v2_0, - /// - /// .NET 3.0 - /// - v3_0, - /// - /// .NET 3.5 - /// - v3_5, - /// - /// .NET 4.0 - /// - v4_0, - } - /// - /// The Node object representing /Prebuild/Solution/Project elements - /// - [DataNode("Project")] - public class ProjectNode : DataNode, IComparable - { - #region Fields - - private string m_Name = "unknown"; - private string m_Path = ""; - private string m_FullPath = ""; - private string m_AssemblyName; - private string m_AppIcon = ""; - private string m_ConfigFile = ""; - private string m_DesignerFolder = ""; - private string m_Language = "C#"; - private ProjectType m_Type = ProjectType.Exe; - private ClrRuntime m_Runtime = ClrRuntime.Microsoft; - private FrameworkVersion m_Framework = FrameworkVersion.v2_0; - private string m_StartupObject = ""; - private string m_RootNamespace; - private string m_FilterGroups = ""; - private string m_Version = ""; - private Guid m_Guid; - private string m_DebugStartParameters; - - private Hashtable m_Configurations = new Hashtable(); - private readonly List m_ReferencePaths = new List(); - private readonly List m_References = new List(); - private readonly List m_Authors = new List(); - private FilesNode m_Files; - - #endregion - - #region Properties - - /// - /// Gets the name. - /// - /// The name. - public string Name - { - get - { - return m_Name; - } - } - /// - /// The version of the .NET Framework to compile under - /// - public FrameworkVersion FrameworkVersion - { - get - { - return this.m_Framework; - } - } - /// - /// Gets the path. - /// - /// The path. - public string Path - { - get - { - return m_Path; - } - } - - /// - /// Gets the filter groups. - /// - /// The filter groups. - public string FilterGroups - { - get - { - return m_FilterGroups; - } - } - - /// - /// Gets the project's version - /// - /// The project's version. - public string Version - { - get - { - return m_Version; - } - } - - /// - /// Gets the full path. - /// - /// The full path. - public string FullPath - { - get - { - return m_FullPath; - } - } - - /// - /// Gets the name of the assembly. - /// - /// The name of the assembly. - public string AssemblyName - { - get - { - return m_AssemblyName; - } - } - - /// - /// Gets the app icon. - /// - /// The app icon. - public string AppIcon - { - get - { - return m_AppIcon; - } - } - - /// - /// Gets the app icon. - /// - /// The app icon. - public string ConfigFile - { - get - { - return m_ConfigFile; - } - } - - /// - /// - /// - public string DesignerFolder - { - get - { - return m_DesignerFolder; - } - } - - /// - /// Gets the language. - /// - /// The language. - public string Language - { - get - { - return m_Language; - } - } - - /// - /// Gets the type. - /// - /// The type. - public ProjectType Type - { - get - { - return m_Type; - } - } - - /// - /// Gets the runtime. - /// - /// The runtime. - public ClrRuntime Runtime - { - get - { - return m_Runtime; - } - } - - private bool m_GenerateAssemblyInfoFile = false; - - /// - /// - /// - public bool GenerateAssemblyInfoFile - { - get - { - return m_GenerateAssemblyInfoFile; - } - set - { - m_GenerateAssemblyInfoFile = value; - } - } - - /// - /// Gets the startup object. - /// - /// The startup object. - public string StartupObject - { - get - { - return m_StartupObject; - } - } - - /// - /// Gets the root namespace. - /// - /// The root namespace. - public string RootNamespace - { - get - { - return m_RootNamespace; - } - } - - /// - /// Gets the configurations. - /// - /// The configurations. - public IList Configurations - { - get - { - ArrayList tmp = new ArrayList(ConfigurationsTable.Values); - tmp.Sort(); - return tmp; - } - } - - /// - /// Gets the configurations table. - /// - /// The configurations table. - public Hashtable ConfigurationsTable - { - get - { - return m_Configurations; - } - } - - /// - /// Gets the reference paths. - /// - /// The reference paths. - public List ReferencePaths - { - get - { - List tmp = new List(m_ReferencePaths); - tmp.Sort(); - return tmp; - } - } - - /// - /// Gets the references. - /// - /// The references. - public List References - { - get - { - List tmp = new List(m_References); - tmp.Sort(); - return tmp; - } - } - - /// - /// Gets the Authors list. - /// - /// The list of the project's authors. - public List Authors - { - get - { - return m_Authors; - } - } - - /// - /// Gets the files. - /// - /// The files. - public FilesNode Files - { - get - { - return m_Files; - } - } - - /// - /// Gets or sets the parent. - /// - /// The parent. - public override IDataNode Parent - { - get - { - return base.Parent; - } - set - { - base.Parent = value; - if(base.Parent is SolutionNode && m_Configurations.Count < 1) - { - SolutionNode parent = (SolutionNode)base.Parent; - foreach(ConfigurationNode conf in parent.Configurations) - { - m_Configurations[conf.Name] = conf.Clone(); - } - } - } - } - - /// - /// Gets the GUID. - /// - /// The GUID. - public Guid Guid - { - get - { - return m_Guid; - } - } - - public string DebugStartParameters - { - get - { - return m_DebugStartParameters; - } - } - - #endregion - - #region Private Methods - - private void HandleConfiguration(ConfigurationNode conf) - { - if(String.Compare(conf.Name, "all", true) == 0) //apply changes to all, this may not always be applied first, - //so it *may* override changes to the same properties for configurations defines at the project level - { - foreach(ConfigurationNode confNode in this.m_Configurations.Values) - { - conf.CopyTo(confNode);//update the config templates defines at the project level with the overrides - } - } - if(m_Configurations.ContainsKey(conf.Name)) - { - ConfigurationNode parentConf = (ConfigurationNode)m_Configurations[conf.Name]; - conf.CopyTo(parentConf);//update the config templates defines at the project level with the overrides - } - else - { - m_Configurations[conf.Name] = conf; - } - } - - #endregion - - #region Public Methods - - /// - /// Parses the specified node. - /// - /// The node. - public override void Parse(XmlNode node) - { - m_Name = Helper.AttributeValue(node, "name", m_Name); - m_Path = Helper.AttributeValue(node, "path", m_Path); - m_FilterGroups = Helper.AttributeValue(node, "filterGroups", m_FilterGroups); - m_Version = Helper.AttributeValue(node, "version", m_Version); - m_AppIcon = Helper.AttributeValue(node, "icon", m_AppIcon); - m_ConfigFile = Helper.AttributeValue(node, "configFile", m_ConfigFile); - m_DesignerFolder = Helper.AttributeValue(node, "designerFolder", m_DesignerFolder); - m_AssemblyName = Helper.AttributeValue(node, "assemblyName", m_AssemblyName); - m_Language = Helper.AttributeValue(node, "language", m_Language); - m_Type = (ProjectType)Helper.EnumAttributeValue(node, "type", typeof(ProjectType), m_Type); - m_Runtime = (ClrRuntime)Helper.EnumAttributeValue(node, "runtime", typeof(ClrRuntime), m_Runtime); - m_Framework = (FrameworkVersion)Helper.EnumAttributeValue(node, "frameworkVersion", typeof(FrameworkVersion), m_Framework); - m_StartupObject = Helper.AttributeValue(node, "startupObject", m_StartupObject); - m_RootNamespace = Helper.AttributeValue(node, "rootNamespace", m_RootNamespace); - - int hash = m_Name.GetHashCode(); - Guid guidByHash = new Guid(hash, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); - string guid = Helper.AttributeValue(node, "guid", guidByHash.ToString()); - m_Guid = new Guid(guid); - - m_GenerateAssemblyInfoFile = Helper.ParseBoolean(node, "generateAssemblyInfoFile", false); - m_DebugStartParameters = Helper.AttributeValue(node, "debugStartParameters", string.Empty); - - if(m_AssemblyName == null || m_AssemblyName.Length < 1) - { - m_AssemblyName = m_Name; - } - - if(m_RootNamespace == null || m_RootNamespace.Length < 1) - { - m_RootNamespace = m_Name; - } - - m_FullPath = m_Path; - try - { - m_FullPath = Helper.ResolvePath(m_FullPath); - } - catch - { - throw new WarningException("Could not resolve Solution path: {0}", m_Path); - } - - Kernel.Instance.CurrentWorkingDirectory.Push(); - try - { - Helper.SetCurrentDir(m_FullPath); - - if( node == null ) - { - throw new ArgumentNullException("node"); - } - - foreach(XmlNode child in node.ChildNodes) - { - IDataNode dataNode = Kernel.Instance.ParseNode(child, this); - if(dataNode is ConfigurationNode) - { - HandleConfiguration((ConfigurationNode)dataNode); - } - else if(dataNode is ReferencePathNode) - { - m_ReferencePaths.Add((ReferencePathNode)dataNode); - } - else if(dataNode is ReferenceNode) - { - m_References.Add((ReferenceNode)dataNode); - } - else if(dataNode is AuthorNode) - { - m_Authors.Add((AuthorNode)dataNode); - } - else if(dataNode is FilesNode) - { - m_Files = (FilesNode)dataNode; - } - } - } - finally - { - Kernel.Instance.CurrentWorkingDirectory.Pop(); - } - } - - #endregion - - #region IComparable Members - - public int CompareTo(object obj) - { - ProjectNode that = (ProjectNode)obj; - return this.m_Name.CompareTo(that.m_Name); - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Nodes/ReferenceNode.cs b/Prebuild/src/Core/Nodes/ReferenceNode.cs deleted file mode 100644 index 9c5d1a3491..0000000000 --- a/Prebuild/src/Core/Nodes/ReferenceNode.cs +++ /dev/null @@ -1,144 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Xml; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core.Nodes -{ - /// - /// - /// - [DataNode("Reference")] - public class ReferenceNode : DataNode, IComparable - { - #region Fields - - private string m_Name = "unknown"; - private string m_Path; - private string m_LocalCopy; - private string m_Version; - - #endregion - - #region Properties - - /// - /// Gets the name. - /// - /// The name. - public string Name - { - get - { - return m_Name; - } - } - - /// - /// Gets the path. - /// - /// The path. - public string Path - { - get - { - return m_Path; - } - } - - /// - /// Gets a value indicating whether [local copy specified]. - /// - /// true if [local copy specified]; otherwise, false. - public bool LocalCopySpecified - { - get - { - return ( m_LocalCopy != null && m_LocalCopy.Length == 0); - } - } - - /// - /// Gets a value indicating whether [local copy]. - /// - /// true if [local copy]; otherwise, false. - public bool LocalCopy - { - get - { - if( m_LocalCopy == null) - { - return false; - } - return bool.Parse(m_LocalCopy); - } - } - - /// - /// Gets the version. - /// - /// The version. - public string Version - { - get - { - return m_Version; - } - } - - #endregion - - #region Public Methods - - /// - /// Parses the specified node. - /// - /// The node. - public override void Parse(XmlNode node) - { - m_Name = Helper.AttributeValue(node, "name", m_Name); - m_Path = Helper.AttributeValue(node, "path", m_Path); - m_LocalCopy = Helper.AttributeValue(node, "localCopy", m_LocalCopy); - m_Version = Helper.AttributeValue(node, "version", m_Version); - } - - #endregion - - #region IComparable Members - - public int CompareTo(object obj) - { - ReferenceNode that = (ReferenceNode)obj; - return this.m_Name.CompareTo(that.m_Name); - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Nodes/ReferencePathNode.cs b/Prebuild/src/Core/Nodes/ReferencePathNode.cs deleted file mode 100644 index f0543c267e..0000000000 --- a/Prebuild/src/Core/Nodes/ReferencePathNode.cs +++ /dev/null @@ -1,99 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Collections; -using System.Collections.Specialized; -using System.Xml; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core.Nodes -{ - /// - /// - /// - [DataNode("ReferencePath")] - public class ReferencePathNode : DataNode, IComparable - { - #region Fields - - private string m_Path; - - #endregion - - #region Properties - - /// - /// Gets the path. - /// - /// The path. - public string Path - { - get - { - return m_Path; - } - } - - #endregion - - #region Public Methods - - /// - /// Parses the specified node. - /// - /// The node. - public override void Parse(XmlNode node) - { - if( node == null ) - { - throw new ArgumentNullException("node"); - } - - m_Path = Helper.InterpolateForEnvironmentVariables(node.InnerText); - if(m_Path == null) - { - m_Path = ""; - } - - m_Path = m_Path.Trim(); - } - - #endregion - - #region IComparable Members - - public int CompareTo(object obj) - { - ReferencePathNode that = (ReferencePathNode)obj; - return this.m_Path.CompareTo(that.m_Path); - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Nodes/SolutionNode.cs b/Prebuild/src/Core/Nodes/SolutionNode.cs deleted file mode 100644 index 2a1b8e2c55..0000000000 --- a/Prebuild/src/Core/Nodes/SolutionNode.cs +++ /dev/null @@ -1,358 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Xml; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core.Nodes -{ - /// - /// - /// - [DataNode("Solution")] - [DataNode("EmbeddedSolution")] - [DebuggerDisplay("{Name}")] - public class SolutionNode : DataNode - { - #region Fields - - private Guid m_Guid = Guid.NewGuid(); - private string m_Name = "unknown"; - private string m_Path = ""; - private string m_FullPath = ""; - private string m_ActiveConfig = "Debug"; - private string m_Version = "1.0.0"; - - private OptionsNode m_Options; - private FilesNode m_Files; - private readonly Hashtable m_Configurations = new Hashtable(); - private readonly Hashtable m_Projects = new Hashtable(); - private readonly Hashtable m_DatabaseProjects = new Hashtable(); - private readonly List m_ProjectsOrder = new List(); - private readonly Hashtable m_Solutions = new Hashtable(); - - #endregion - - #region Properties - public override IDataNode Parent - { - get - { - return base.Parent; - } - set - { - if (value is SolutionNode) - { - SolutionNode solution = (SolutionNode)value; - foreach (ConfigurationNode conf in solution.Configurations) - { - m_Configurations[conf.Name] = conf.Clone(); - } - } - - base.Parent = value; - } - } - - public Guid Guid - { - get - { - return m_Guid; - } - set - { - m_Guid = value; - } - } - /// - /// Gets or sets the active config. - /// - /// The active config. - public string ActiveConfig - { - get - { - return m_ActiveConfig; - } - set - { - m_ActiveConfig = value; - } - } - - /// - /// Gets the name. - /// - /// The name. - public string Name - { - get - { - return m_Name; - } - } - - /// - /// Gets the path. - /// - /// The path. - public string Path - { - get - { - return m_Path; - } - } - - /// - /// Gets the full path. - /// - /// The full path. - public string FullPath - { - get - { - return m_FullPath; - } - } - - /// - /// Gets the version. - /// - /// The version. - public string Version - { - get - { - return m_Version; - } - } - - /// - /// Gets the options. - /// - /// The options. - public OptionsNode Options - { - get - { - return m_Options; - } - } - - /// - /// Gets the files. - /// - /// The files. - public FilesNode Files - { - get - { - return m_Files; - } - } - - /// - /// Gets the configurations. - /// - /// The configurations. - public ICollection Configurations - { - get - { - ArrayList tmp = new ArrayList(ConfigurationsTable.Values); - tmp.Sort(); - return tmp; - } - } - - /// - /// Gets the configurations table. - /// - /// The configurations table. - public Hashtable ConfigurationsTable - { - get - { - return m_Configurations; - } - } - /// - /// Gets the database projects. - /// - public ICollection DatabaseProjects - { - get - { - return m_DatabaseProjects.Values; - } - } - /// - /// Gets the nested solutions. - /// - public ICollection Solutions - { - get - { - return m_Solutions.Values; - } - } - /// - /// Gets the nested solutions hash table. - /// - public Hashtable SolutionsTable - { - get - { - return this.m_Solutions; - } - } - /// - /// Gets the projects. - /// - /// The projects. - public ICollection Projects - { - get - { - ArrayList tmp = new ArrayList(m_Projects.Values); - tmp.Sort(); - return tmp; - } - } - - /// - /// Gets the projects table. - /// - /// The projects table. - public Hashtable ProjectsTable - { - get - { - return m_Projects; - } - } - - /// - /// Gets the projects table. - /// - /// The projects table. - public List ProjectsTableOrder - { - get - { - return m_ProjectsOrder; - } - } - - #endregion - - #region Public Methods - - /// - /// Parses the specified node. - /// - /// The node. - public override void Parse(XmlNode node) - { - m_Name = Helper.AttributeValue(node, "name", m_Name); - m_ActiveConfig = Helper.AttributeValue(node, "activeConfig", m_ActiveConfig); - m_Path = Helper.AttributeValue(node, "path", m_Path); - m_Version = Helper.AttributeValue(node, "version", m_Version); - - m_FullPath = m_Path; - try - { - m_FullPath = Helper.ResolvePath(m_FullPath); - } - catch - { - throw new WarningException("Could not resolve solution path: {0}", m_Path); - } - - Kernel.Instance.CurrentWorkingDirectory.Push(); - try - { - Helper.SetCurrentDir(m_FullPath); - - if( node == null ) - { - throw new ArgumentNullException("node"); - } - - foreach(XmlNode child in node.ChildNodes) - { - IDataNode dataNode = Kernel.Instance.ParseNode(child, this); - if(dataNode is OptionsNode) - { - m_Options = (OptionsNode)dataNode; - } - else if(dataNode is FilesNode) - { - m_Files = (FilesNode)dataNode; - } - else if(dataNode is ConfigurationNode) - { - m_Configurations[((ConfigurationNode)dataNode).Name] = dataNode; - } - else if(dataNode is ProjectNode) - { - m_Projects[((ProjectNode)dataNode).Name] = dataNode; - m_ProjectsOrder.Add((ProjectNode)dataNode); - } - else if(dataNode is SolutionNode) - { - m_Solutions[((SolutionNode)dataNode).Name] = dataNode; - } - else if (dataNode is ProcessNode) - { - ProcessNode p = (ProcessNode)dataNode; - Kernel.Instance.ProcessFile(p, this); - } - else if (dataNode is DatabaseProjectNode) - { - m_DatabaseProjects[((DatabaseProjectNode)dataNode).Name] = dataNode; - } - } - } - finally - { - Kernel.Instance.CurrentWorkingDirectory.Pop(); - } - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Parse/IfContext.cs b/Prebuild/src/Core/Parse/IfContext.cs deleted file mode 100644 index 3c79d38b06..0000000000 --- a/Prebuild/src/Core/Parse/IfContext.cs +++ /dev/null @@ -1,154 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; - -namespace Prebuild.Core.Parse -{ - /// - /// - /// - public enum IfState - { - /// - /// - /// - None, - /// - /// - /// - If, - /// - /// - /// - ElseIf, - /// - /// - /// - Else - } - - /// - /// Summary description for IfContext. - /// - // Inspired by the equivalent WiX class (see www.sourceforge.net/projects/wix/) - public class IfContext - { - #region Properties - - bool m_Active; - bool m_Keep; - bool m_EverKept; - IfState m_State = IfState.None; - - #endregion - - #region Constructors - - /// - /// Initializes a new instance of the class. - /// - /// if set to true [active]. - /// if set to true [keep]. - /// The state. - public IfContext(bool active, bool keep, IfState state) - { - m_Active = active; - m_Keep = keep; - m_EverKept = keep; - m_State = state; - } - - #endregion - - #region Properties - - /// - /// Gets or sets a value indicating whether this is active. - /// - /// true if active; otherwise, false. - public bool Active - { - get - { - return m_Active; - } - set - { - m_Active = value; - } - } - - /// - /// Gets or sets a value indicating whether this is keep. - /// - /// true if keep; otherwise, false. - public bool Keep - { - get - { - return m_Keep; - } - set - { - m_Keep = value; - if(m_Keep) - { - m_EverKept = true; - } - } - } - - /// - /// Gets a value indicating whether [ever kept]. - /// - /// true if [ever kept]; otherwise, false. - public bool EverKept - { - get - { - return m_EverKept; - } - } - - /// - /// Gets or sets the state. - /// - /// The state. - public IfState State - { - get - { - return m_State; - } - set - { - m_State = value; - } - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Parse/Preprocessor.cs b/Prebuild/src/Core/Parse/Preprocessor.cs deleted file mode 100644 index b2306e43db..0000000000 --- a/Prebuild/src/Core/Parse/Preprocessor.cs +++ /dev/null @@ -1,663 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Collections; -using System.IO; -using System.Text.RegularExpressions; -using System.Xml; - -namespace Prebuild.Core.Parse -{ - /// - /// - /// - public enum OperatorSymbol - { - /// - /// - /// - None, - /// - /// - /// - Equal, - /// - /// - /// - NotEqual, - /// - /// - /// - LessThan, - /// - /// - /// - GreaterThan, - /// - /// - /// - LessThanEqual, - /// - /// - /// - GreaterThanEqual - } - - /// - /// - /// - public class Preprocessor - { - #region Constants - - /// - /// Includes the regex to look for file tags in the processing instruction. - /// - private static readonly Regex includeFileRegex = new Regex("file=\"(.+?)\""); - - #endregion - - #region Fields - - XmlDocument m_OutDoc; - Stack m_IfStack; - Hashtable m_Variables; - - #endregion - - #region Constructors - - /// - /// Initializes a new instance of the class. - /// - public Preprocessor() - { - m_OutDoc = new XmlDocument(); - m_IfStack = new Stack(); - m_Variables = new Hashtable(); - - RegisterVariable("OS", GetOS()); - RegisterVariable("RuntimeVersion", Environment.Version.Major); - RegisterVariable("RuntimeMajor", Environment.Version.Major); - RegisterVariable("RuntimeMinor", Environment.Version.Minor); - RegisterVariable("RuntimeRevision", Environment.Version.Revision); - } - - #endregion - - #region Properties - - /// - /// Gets the processed doc. - /// - /// The processed doc. - public XmlDocument ProcessedDoc - { - get - { - return m_OutDoc; - } - } - - #endregion - - #region Private Methods - - /// - /// Parts of this code were taken from NAnt and is subject to the GPL - /// as per NAnt's license. Thanks to the NAnt guys for this little gem. - /// - /// - public static string GetOS() - { - PlatformID platId = Environment.OSVersion.Platform; - if(platId == PlatformID.Win32NT || platId == PlatformID.Win32Windows) - { - return "Win32"; - } - - if (File.Exists("/System/Library/Frameworks/Cocoa.framework/Cocoa")) - { - return "MACOSX"; - } - - /* - * .NET 1.x, under Mono, the UNIX code is 128. Under - * .NET 2.x, Mono or MS, the UNIX code is 4 - */ - if(Environment.Version.Major == 1) - { - if((int)platId == 128) - { - return "UNIX"; - } - } - else if((int)platId == 4) - { - return "UNIX"; - } - - return "Unknown"; - } - - private static bool CompareNum(OperatorSymbol oper, int val1, int val2) - { - switch(oper) - { - case OperatorSymbol.Equal: - return (val1 == val2); - case OperatorSymbol.NotEqual: - return (val1 != val2); - case OperatorSymbol.LessThan: - return (val1 < val2); - case OperatorSymbol.LessThanEqual: - return (val1 <= val2); - case OperatorSymbol.GreaterThan: - return (val1 > val2); - case OperatorSymbol.GreaterThanEqual: - return (val1 >= val2); - } - - throw new WarningException("Unknown operator type"); - } - - private static bool CompareStr(OperatorSymbol oper, string val1, string val2) - { - switch(oper) - { - case OperatorSymbol.Equal: - return (val1 == val2); - case OperatorSymbol.NotEqual: - return (val1 != val2); - case OperatorSymbol.LessThan: - return (val1.CompareTo(val2) < 0); - case OperatorSymbol.LessThanEqual: - return (val1.CompareTo(val2) <= 0); - case OperatorSymbol.GreaterThan: - return (val1.CompareTo(val2) > 0); - case OperatorSymbol.GreaterThanEqual: - return (val1.CompareTo(val2) >= 0); - } - - throw new WarningException("Unknown operator type"); - } - - private static char NextChar(int idx, string str) - { - if((idx + 1) >= str.Length) - { - return Char.MaxValue; - } - - return str[idx + 1]; - } - // Very very simple expression parser. Can only match expressions of the form - // : - // OS = Windows - // OS != Linux - // RuntimeMinor > 0 - private bool ParseExpression(string exp) - { - if(exp == null) - { - throw new ArgumentException("Invalid expression, cannot be null"); - } - - exp = exp.Trim(); - if(exp.Length < 1) - { - throw new ArgumentException("Invalid expression, cannot be 0 length"); - } - - string id = ""; - string str = ""; - OperatorSymbol oper = OperatorSymbol.None; - bool inStr = false; - char c; - - for(int i = 0; i < exp.Length; i++) - { - c = exp[i]; - if(Char.IsWhiteSpace(c)) - { - continue; - } - - if(Char.IsLetterOrDigit(c) || c == '_') - { - if(inStr) - { - str += c; - } - else - { - id += c; - } - } - else if(c == '\"') - { - inStr = !inStr; - if(inStr) - { - str = ""; - } - } - else - { - if(inStr) - { - str += c; - } - else - { - switch(c) - { - case '=': - oper = OperatorSymbol.Equal; - break; - - case '!': - if(NextChar(i, exp) == '=') - { - oper = OperatorSymbol.NotEqual; - } - - break; - - case '<': - if(NextChar(i, exp) == '=') - { - oper = OperatorSymbol.LessThanEqual; - } - else - { - oper = OperatorSymbol.LessThan; - } - - break; - - case '>': - if(NextChar(i, exp) == '=') - { - oper = OperatorSymbol.GreaterThanEqual; - } - else - { - oper = OperatorSymbol.GreaterThan; - } - - break; - } - } - } - } - - - if(inStr) - { - throw new WarningException("Expected end of string in expression"); - } - - if(oper == OperatorSymbol.None) - { - throw new WarningException("Expected operator in expression"); - } - else if(id.Length < 1) - { - throw new WarningException("Expected identifier in expression"); - } - else if(str.Length < 1) - { - throw new WarningException("Expected value in expression"); - } - - bool ret = false; - try - { - object val = m_Variables[id.ToLower()]; - if(val == null) - { - throw new WarningException("Unknown identifier '{0}'", id); - } - - int numVal, numVal2; - string strVal, strVal2; - Type t = val.GetType(); - if(t.IsAssignableFrom(typeof(int))) - { - numVal = (int)val; - numVal2 = Int32.Parse(str); - ret = CompareNum(oper, numVal, numVal2); - } - else - { - strVal = val.ToString(); - strVal2 = str; - ret = CompareStr(oper, strVal, strVal2); - } - } - catch(ArgumentException ex) - { - ex.ToString(); - throw new WarningException("Invalid value type for system variable '{0}', expected int", id); - } - - return ret; - } - - #endregion - - #region Public Methods - - /// - /// - /// - /// - /// - public void RegisterVariable(string name, object variableValue) - { - if(name == null || variableValue == null) - { - return; - } - - m_Variables[name.ToLower()] = variableValue; - } - - /// - /// Performs validation on the xml source as well as evaluates conditional and flow expresions - /// - /// For invalid use of conditional expressions or for invalid XML syntax. If a XmlValidatingReader is passed, then will also throw exceptions for non-schema-conforming xml - /// - /// the output xml - public string Process(XmlReader initialReader) - { - if(initialReader == null) - { - throw new ArgumentException("Invalid XML reader to pre-process"); - } - - IfContext context = new IfContext(true, true, IfState.None); - StringWriter xmlText = new StringWriter(); - XmlTextWriter writer = new XmlTextWriter(xmlText); - writer.Formatting = Formatting.Indented; - - // Create a queue of XML readers and add the initial - // reader to it. Then we process until we run out of - // readers which lets the operation add more - // readers to generate a multi-file parser and not require - // XML fragments that a recursive version would use. - Stack readerStack = new Stack(); - readerStack.Push(initialReader); - - while(readerStack.Count > 0) - { - // Pop off the next reader. - XmlReader reader = (XmlReader) readerStack.Pop(); - - // Process through this XML reader until it is - // completed (or it is replaced by the include - // operation). - while(reader.Read()) - { - // The prebuild file has a series of processing - // instructions which allow for specific - // inclusions based on operating system or to - // include additional files. - if(reader.NodeType == XmlNodeType.ProcessingInstruction) - { - bool ignore = false; - - switch(reader.LocalName) - { - case "include": - // use regular expressions to parse out the attributes. - MatchCollection matches = includeFileRegex.Matches(reader.Value); - - // make sure there is only one file attribute. - if(matches.Count > 1) - { - throw new WarningException("An node was found, but it specified more than one file."); - } - - if(matches.Count == 0) - { - throw new WarningException("An node was found, but it did not specify the file attribute."); - } - - // Push current reader back onto the stack. - readerStack.Push(reader); - - // Pull the file out from the regex and make sure it is a valid file before using it. - string filename = matches[0].Groups[1].Value; - - filename = String.Join(Path.DirectorySeparatorChar.ToString(), filename.Split(new char[] { '/', '\\' })); - - if (!filename.Contains("*")) - { - FileInfo includeFile = new FileInfo(filename); - - if (!includeFile.Exists) - { - throw new WarningException("Cannot include file: " + includeFile.FullName); - } - - // Create a new reader object for this file, and push it onto the stack - XmlReader newReader = new XmlTextReader(includeFile.Open(FileMode.Open, FileAccess.Read, FileShare.Read)); - readerStack.Push(newReader); - } - else - { - WildCardInclude(readerStack, filename); - } - - // continue reading with whatever reader is on the top of the stack - reader = (XmlReader)readerStack.Pop(); - ignore = true; - - break; - - case "if": - m_IfStack.Push(context); - context = new IfContext(context.Keep & context.Active, ParseExpression(reader.Value), IfState.If); - ignore = true; - break; - - case "elseif": - if(m_IfStack.Count == 0) - { - throw new WarningException("Unexpected 'elseif' outside of 'if'"); - } - else if(context.State != IfState.If && context.State != IfState.ElseIf) - { - throw new WarningException("Unexpected 'elseif' outside of 'if'"); - } - - context.State = IfState.ElseIf; - if(!context.EverKept) - { - context.Keep = ParseExpression(reader.Value); - } - else - { - context.Keep = false; - } - - ignore = true; - break; - - case "else": - if(m_IfStack.Count == 0) - { - throw new WarningException("Unexpected 'else' outside of 'if'"); - } - else if(context.State != IfState.If && context.State != IfState.ElseIf) - { - throw new WarningException("Unexpected 'else' outside of 'if'"); - } - - context.State = IfState.Else; - context.Keep = !context.EverKept; - ignore = true; - break; - - case "endif": - if(m_IfStack.Count == 0) - { - throw new WarningException("Unexpected 'endif' outside of 'if'"); - } - - context = (IfContext)m_IfStack.Pop(); - ignore = true; - break; - } - - if(ignore) - { - continue; - } - }//end pre-proc instruction - - if(!context.Active || !context.Keep) - { - continue; - } - - switch(reader.NodeType) - { - case XmlNodeType.Element: - bool empty = reader.IsEmptyElement; - writer.WriteStartElement(reader.Name); - - while (reader.MoveToNextAttribute()) - { - writer.WriteAttributeString(reader.Name, reader.Value); - } - - if(empty) - { - writer.WriteEndElement(); - } - - break; - - case XmlNodeType.EndElement: - writer.WriteEndElement(); - break; - - case XmlNodeType.Text: - writer.WriteString(reader.Value); - break; - - case XmlNodeType.CDATA: - writer.WriteCData(reader.Value); - break; - - default: - break; - } - } - - if(m_IfStack.Count != 0) - { - throw new WarningException("Mismatched 'if', 'endif' pair"); - } - } - - return xmlText.ToString(); - } - - private static void WildCardInclude(Stack readerStack, string include) - { - if (!include.Contains("*")) - { - return; - } - -// Console.WriteLine("Processing {0}", include); - - // Break up the include into pre and post wildcard sections - string preWildcard = include.Substring(0, include.IndexOf("*")); - string postWildcard = include.Substring(include.IndexOf("*") + 2); - - // If preWildcard is a directory, recurse - if (Directory.Exists(preWildcard)) - { - string[] directories = Directory.GetDirectories(preWildcard); - Array.Sort(directories); - Array.Reverse(directories); - foreach (string dirPath in directories ) - { - Console.WriteLine("Scanning : {0}", dirPath); - - string includeFile = Path.Combine(dirPath, postWildcard); - if (includeFile.Contains("*")) - { - // postWildcard included another wildcard, recurse. - WildCardInclude(readerStack, includeFile); - } - else - { - FileInfo file = new FileInfo(includeFile); - if (file.Exists) - { - Console.WriteLine("Including File: {0}", includeFile); - XmlReader newReader = new XmlTextReader(file.Open(FileMode.Open, FileAccess.Read, FileShare.Read)); - readerStack.Push(newReader); - } - } - } - } - else - { - // preWildcard is not a path to a directory, so the wildcard is in the filename - string searchFilename = Path.GetFileName(preWildcard.Substring(preWildcard.IndexOf("/") + 1) + "*" + postWildcard); - // Console.WriteLine("searchFilename: {0}", searchFilename); - - string searchDirectory = Path.GetDirectoryName(preWildcard); - // Console.WriteLine("searchDirectory: {0}", searchDirectory); - - string[] files = Directory.GetFiles(searchDirectory, searchFilename); - Array.Sort(files); - Array.Reverse(files); - foreach (string includeFile in files) - { - FileInfo file = new FileInfo(includeFile); - if (file.Exists) - { - Console.WriteLine("Including File: {0}", includeFile); - XmlReader newReader = new XmlTextReader(file.Open(FileMode.Open, FileAccess.Read, FileShare.Read)); - readerStack.Push(newReader); - } - } - } - - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Targets/AutotoolsTarget.cs b/Prebuild/src/Core/Targets/AutotoolsTarget.cs deleted file mode 100644 index 5dcbb38269..0000000000 --- a/Prebuild/src/Core/Targets/AutotoolsTarget.cs +++ /dev/null @@ -1,1782 +0,0 @@ -#region BSD License -/* - -Copyright (c) 2004 - 2008 -Matthew Holmes (matthew@wildfiregames.com), -Dan Moorehead (dan05a@gmail.com), -Dave Hudson (jendave@yahoo.com), -C.J. Adams-Collier (cjac@colliertech.org), - -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 of the author may not be used to endorse or promote -products derived from this software without specific prior written -permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. - -*/ -#endregion - -#region MIT X11 license - -/* - Portions of this file authored by Lluis Sanchez Gual - - Copyright (C) 2006 Novell, Inc (http://www.novell.com) - - 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. - */ - -#endregion -using System; -using System.Collections; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.IO; -using System.Reflection; -using System.Text; -using System.Text.RegularExpressions; -using System.Xml; -using System.Xml.Xsl; -using System.Net; -using System.Diagnostics; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Nodes; -using Prebuild.Core.Parse; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core.Targets -{ - public enum ClrVersion - { - Default, - Net_1_1, - Net_2_0 - } - - public class SystemPackage - { - string name; - string version; - string description; - string[] assemblies; - bool isInternal; - ClrVersion targetVersion; - - public void Initialize(string name, - string version, - string description, - string[] assemblies, - ClrVersion targetVersion, - bool isInternal) - { - this.isInternal = isInternal; - this.name = name; - this.version = version; - this.assemblies = assemblies; - this.description = description; - this.targetVersion = targetVersion; - } - - public string Name - { - get { return name; } - } - - public string Version - { - get { return version; } - } - - public string Description - { - get { return description; } - } - - public ClrVersion TargetVersion - { - get { return targetVersion; } - } - - // The package is part of the mono SDK - public bool IsCorePackage - { - get { return name == "mono"; } - } - - // The package has been registered by an add-in, and is not installed - // in the system. - public bool IsInternalPackage - { - get { return isInternal; } - } - - public string[] Assemblies - { - get { return assemblies; } - } - - } - - - /// - /// - /// - [Target("autotools")] - public class AutotoolsTarget : ITarget - { - #region Fields - - Kernel m_Kernel; - XmlDocument autotoolsDoc; - XmlUrlResolver xr; - System.Security.Policy.Evidence e; - Hashtable assemblyPathToPackage = new Hashtable(); - Hashtable assemblyFullNameToPath = new Hashtable(); - Hashtable packagesHash = new Hashtable(); - readonly List packages = new List(); - - #endregion - - #region Private Methods - - private void mkdirDashP(string dirName) - { - DirectoryInfo di = new DirectoryInfo(dirName); - if (di.Exists) - return; - - string parentDirName = System.IO.Path.GetDirectoryName(dirName); - DirectoryInfo parentDi = new DirectoryInfo(parentDirName); - if (!parentDi.Exists) - mkdirDashP(parentDirName); - - di.Create(); - } - - private void chkMkDir(string dirName) - { - System.IO.DirectoryInfo di = - new System.IO.DirectoryInfo(dirName); - - if (!di.Exists) - di.Create(); - } - - private void transformToFile(string filename, XsltArgumentList argList, string nodeName) - { - // Create an XslTransform for this file - XslTransform templateTransformer = - new XslTransform(); - - // Load up the template - XmlNode templateNode = - autotoolsDoc.SelectSingleNode(nodeName + "/*"); - templateTransformer.Load(templateNode.CreateNavigator(), xr, e); - - // Create a writer for the transformed template - XmlTextWriter templateWriter = - new XmlTextWriter(filename, null); - - // Perform transformation, writing the file - templateTransformer.Transform - (m_Kernel.CurrentDoc, argList, templateWriter, xr); - } - - string NormalizeAsmName(string name) - { - int i = name.IndexOf(", PublicKeyToken=null"); - if (i != -1) - return name.Substring(0, i).Trim(); - else - return name; - } - - private void AddAssembly(string assemblyfile, SystemPackage package) - { - if (!File.Exists(assemblyfile)) - return; - - try - { - System.Reflection.AssemblyName an = System.Reflection.AssemblyName.GetAssemblyName(assemblyfile); - assemblyFullNameToPath[NormalizeAsmName(an.FullName)] = assemblyfile; - assemblyPathToPackage[assemblyfile] = package; - } - catch - { - } - } - - private List GetAssembliesWithLibInfo(string line, string file) - { - List references = new List(); - List libdirs = new List(); - List retval = new List(); - foreach (string piece in line.Split(' ')) - { - if (piece.ToLower().Trim().StartsWith("/r:") || piece.ToLower().Trim().StartsWith("-r:")) - { - references.Add(ProcessPiece(piece.Substring(3).Trim(), file)); - } - else if (piece.ToLower().Trim().StartsWith("/lib:") || piece.ToLower().Trim().StartsWith("-lib:")) - { - libdirs.Add(ProcessPiece(piece.Substring(5).Trim(), file)); - } - } - - foreach (string refrnc in references) - { - foreach (string libdir in libdirs) - { - if (File.Exists(libdir + Path.DirectorySeparatorChar + refrnc)) - { - retval.Add(libdir + Path.DirectorySeparatorChar + refrnc); - } - } - } - - return retval; - } - - private List GetAssembliesWithoutLibInfo(string line, string file) - { - List references = new List(); - foreach (string reference in line.Split(' ')) - { - if (reference.ToLower().Trim().StartsWith("/r:") || reference.ToLower().Trim().StartsWith("-r:")) - { - string final_ref = reference.Substring(3).Trim(); - references.Add(ProcessPiece(final_ref, file)); - } - } - return references; - } - - private string ProcessPiece(string piece, string pcfile) - { - int start = piece.IndexOf("${"); - if (start == -1) - return piece; - - int end = piece.IndexOf("}"); - if (end == -1) - return piece; - - string variable = piece.Substring(start + 2, end - start - 2); - string interp = GetVariableFromPkgConfig(variable, Path.GetFileNameWithoutExtension(pcfile)); - return ProcessPiece(piece.Replace("${" + variable + "}", interp), pcfile); - } - - private string GetVariableFromPkgConfig(string var, string pcfile) - { - ProcessStartInfo psi = new ProcessStartInfo("pkg-config"); - psi.RedirectStandardOutput = true; - psi.UseShellExecute = false; - psi.Arguments = String.Format("--variable={0} {1}", var, pcfile); - Process p = new Process(); - p.StartInfo = psi; - p.Start(); - string ret = p.StandardOutput.ReadToEnd().Trim(); - p.WaitForExit(); - if (String.IsNullOrEmpty(ret)) - return String.Empty; - return ret; - } - - private void ParsePCFile(string pcfile) - { - // Don't register the package twice - string pname = Path.GetFileNameWithoutExtension(pcfile); - if (packagesHash.Contains(pname)) - return; - - List fullassemblies = null; - string version = ""; - string desc = ""; - - SystemPackage package = new SystemPackage(); - - using (StreamReader reader = new StreamReader(pcfile)) - { - string line; - while ((line = reader.ReadLine()) != null) - { - string lowerLine = line.ToLower(); - if (lowerLine.StartsWith("libs:") && lowerLine.IndexOf(".dll") != -1) - { - string choppedLine = line.Substring(5).Trim(); - if (choppedLine.IndexOf("-lib:") != -1 || choppedLine.IndexOf("/lib:") != -1) - { - fullassemblies = GetAssembliesWithLibInfo(choppedLine, pcfile); - } - else - { - fullassemblies = GetAssembliesWithoutLibInfo(choppedLine, pcfile); - } - } - else if (lowerLine.StartsWith("version:")) - { - // "version:".Length == 8 - version = line.Substring(8).Trim(); - } - else if (lowerLine.StartsWith("description:")) - { - // "description:".Length == 12 - desc = line.Substring(12).Trim(); - } - } - } - - if (fullassemblies == null) - return; - - foreach (string assembly in fullassemblies) - { - AddAssembly(assembly, package); - } - - package.Initialize(pname, - version, - desc, - fullassemblies.ToArray(), - ClrVersion.Default, - false); - packages.Add(package); - packagesHash[pname] = package; - } - - void RegisterSystemAssemblies(string prefix, string version, ClrVersion ver) - { - SystemPackage package = new SystemPackage(); - List list = new List(); - - string dir = Path.Combine(prefix, version); - if (!Directory.Exists(dir)) - { - return; - } - - foreach (string assembly in Directory.GetFiles(dir, "*.dll")) - { - AddAssembly(assembly, package); - list.Add(assembly); - } - - package.Initialize("mono", - version, - "The Mono runtime", - list.ToArray(), - ver, - false); - packages.Add(package); - } - - void RunInitialization() - { - string versionDir; - - if (Environment.Version.Major == 1) - { - versionDir = "1.0"; - } - else - { - versionDir = "2.0"; - } - - //Pull up assemblies from the installed mono system. - string prefix = Path.GetDirectoryName(typeof(int).Assembly.Location); - - if (prefix.IndexOf(Path.Combine("mono", versionDir)) == -1) - prefix = Path.Combine(prefix, "mono"); - else - prefix = Path.GetDirectoryName(prefix); - - RegisterSystemAssemblies(prefix, "1.0", ClrVersion.Net_1_1); - RegisterSystemAssemblies(prefix, "2.0", ClrVersion.Net_2_0); - - string search_dirs = Environment.GetEnvironmentVariable("PKG_CONFIG_PATH"); - string libpath = Environment.GetEnvironmentVariable("PKG_CONFIG_LIBPATH"); - - if (String.IsNullOrEmpty(libpath)) - { - string path_dirs = Environment.GetEnvironmentVariable("PATH"); - foreach (string pathdir in path_dirs.Split(Path.PathSeparator)) - { - if (pathdir == null) - continue; - if (File.Exists(pathdir + Path.DirectorySeparatorChar + "pkg-config")) - { - libpath = Path.Combine(pathdir, ".."); - libpath = Path.Combine(libpath, "lib"); - libpath = Path.Combine(libpath, "pkgconfig"); - break; - } - } - } - search_dirs += Path.PathSeparator + libpath; - if (!string.IsNullOrEmpty(search_dirs)) - { - List scanDirs = new List(); - foreach (string potentialDir in search_dirs.Split(Path.PathSeparator)) - { - if (!scanDirs.Contains(potentialDir)) - scanDirs.Add(potentialDir); - } - foreach (string pcdir in scanDirs) - { - if (pcdir == null) - continue; - - if (Directory.Exists(pcdir)) - { - foreach (string pcfile in Directory.GetFiles(pcdir, "*.pc")) - { - ParsePCFile(pcfile); - } - } - } - } - } - - private void WriteCombine(SolutionNode solution) - { - #region "Create Solution directory if it doesn't exist" - string solutionDir = Path.Combine(solution.FullPath, - Path.Combine("autotools", - solution.Name)); - chkMkDir(solutionDir); - #endregion - - #region "Write Solution-level files" - XsltArgumentList argList = new XsltArgumentList(); - argList.AddParam("solutionName", "", solution.Name); - // $solutionDir is $rootDir/$solutionName/ - transformToFile(Path.Combine(solutionDir, "configure.ac"), - argList, "/Autotools/SolutionConfigureAc"); - transformToFile(Path.Combine(solutionDir, "Makefile.am"), - argList, "/Autotools/SolutionMakefileAm"); - transformToFile(Path.Combine(solutionDir, "autogen.sh"), - argList, "/Autotools/SolutionAutogenSh"); - #endregion - - foreach (ProjectNode project in solution.ProjectsTableOrder) - { - m_Kernel.Log.Write(String.Format("Writing project: {0}", - project.Name)); - WriteProject(solution, project); - } - } - private static string PrependPath(string path) - { - string tmpPath = Helper.NormalizePath(path, '/'); - Regex regex = new Regex(@"(\w):/(\w+)"); - Match match = regex.Match(tmpPath); - if (match.Success || tmpPath[0] == '.' || tmpPath[0] == '/') - { - tmpPath = Helper.NormalizePath(tmpPath); - } - else - { - tmpPath = Helper.NormalizePath("./" + tmpPath); - } - - return tmpPath; - } - - private static string BuildReference(SolutionNode solution, - ReferenceNode refr) - { - string ret = ""; - if (solution.ProjectsTable.ContainsKey(refr.Name)) - { - ProjectNode project = - (ProjectNode)solution.ProjectsTable[refr.Name]; - string fileRef = FindFileReference(refr.Name, project); - string finalPath = - Helper.NormalizePath(Helper.MakeFilePath(project.FullPath + - "/$(BUILD_DIR)/$(CONFIG)/", - refr.Name, "dll"), - '/'); - ret += finalPath; - return ret; - } - else - { - ProjectNode project = (ProjectNode)refr.Parent; - string fileRef = FindFileReference(refr.Name, project); - - if (refr.Path != null || fileRef != null) - { - string finalPath = ((refr.Path != null) ? - Helper.NormalizePath(refr.Path + "/" + - refr.Name + ".dll", - '/') : - fileRef - ); - ret += Path.Combine(project.Path, finalPath); - return ret; - } - - try - { - //Assembly assem = Assembly.Load(refr.Name); - //if (assem != null) - //{ - // int index = refr.Name.IndexOf(","); - // if ( index > 0) - // { - // ret += assem.Location; - // //Console.WriteLine("Location1: " + assem.Location); - // } - // else - // { - // ret += (refr.Name + ".dll"); - // //Console.WriteLine("Location2: " + assem.Location); - // } - //} - //else - //{ - int index = refr.Name.IndexOf(","); - if (index > 0) - { - ret += refr.Name.Substring(0, index) + ".dll"; - //Console.WriteLine("Location3: " + assem.Location); - } - else - { - ret += (refr.Name + ".dll"); - //Console.WriteLine("Location4: " + assem.Location); - } - //} - } - catch (System.NullReferenceException e) - { - e.ToString(); - int index = refr.Name.IndexOf(","); - if (index > 0) - { - ret += refr.Name.Substring(0, index) + ".dll"; - //Console.WriteLine("Location5: " + assem.Location); - } - else - { - ret += (refr.Name + ".dll"); - //Console.WriteLine("Location6: " + assem.Location); - } - } - } - return ret; - } - - private static string BuildReferencePath(SolutionNode solution, - ReferenceNode refr) - { - string ret = ""; - if (solution.ProjectsTable.ContainsKey(refr.Name)) - { - ProjectNode project = - (ProjectNode)solution.ProjectsTable[refr.Name]; - string finalPath = - Helper.NormalizePath(Helper.MakeReferencePath(project.FullPath + - "/${build.dir}/"), - '/'); - ret += finalPath; - return ret; - } - else - { - ProjectNode project = (ProjectNode)refr.Parent; - string fileRef = FindFileReference(refr.Name, project); - - if (refr.Path != null || fileRef != null) - { - string finalPath = ((refr.Path != null) ? - Helper.NormalizePath(refr.Path, '/') : - fileRef - ); - ret += finalPath; - return ret; - } - - try - { - Assembly assem = Assembly.Load(refr.Name); - if (assem != null) - { - ret += ""; - } - else - { - ret += ""; - } - } - catch (System.NullReferenceException e) - { - e.ToString(); - ret += ""; - } - } - return ret; - } - - private static string FindFileReference(string refName, - ProjectNode project) - { - foreach (ReferencePathNode refPath in project.ReferencePaths) - { - string fullPath = - Helper.MakeFilePath(refPath.Path, refName, "dll"); - - if (File.Exists(fullPath)) { - return fullPath; - } - } - - return null; - } - - /// - /// Gets the XML doc file. - /// - /// The project. - /// The conf. - /// - public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf) - { - if (conf == null) - { - throw new ArgumentNullException("conf"); - } - if (project == null) - { - throw new ArgumentNullException("project"); - } - string docFile = (string)conf.Options["XmlDocFile"]; - // if(docFile != null && docFile.Length == 0)//default to assembly name if not specified - // { - // return Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml"; - // } - return docFile; - } - - /// - /// Normalizes the path. - /// - /// The path. - /// - public static string NormalizePath(string path) - { - if (path == null) - { - return ""; - } - - StringBuilder tmpPath; - - if (Core.Parse.Preprocessor.GetOS() == "Win32") - { - tmpPath = new StringBuilder(path.Replace('\\', '/')); - tmpPath.Replace("/", @"\\"); - } - else - { - tmpPath = new StringBuilder(path.Replace('\\', '/')); - tmpPath = tmpPath.Replace('/', Path.DirectorySeparatorChar); - } - return tmpPath.ToString(); - } - - private void WriteProject(SolutionNode solution, ProjectNode project) - { - string solutionDir = Path.Combine(solution.FullPath, Path.Combine("autotools", solution.Name)); - string projectDir = Path.Combine(solutionDir, project.Name); - string projectVersion = project.Version; - bool hasAssemblyConfig = false; - chkMkDir(projectDir); - - List - compiledFiles = new List(), - contentFiles = new List(), - embeddedFiles = new List(), - - binaryLibs = new List(), - pkgLibs = new List(), - systemLibs = new List(), - runtimeLibs = new List(), - - extraDistFiles = new List(), - localCopyTargets = new List(); - - // If there exists a .config file for this assembly, copy - // it to the project folder - - // TODO: Support copying .config.osx files - // TODO: support processing the .config file for native library deps - string projectAssemblyName = project.Name; - if (project.AssemblyName != null) - projectAssemblyName = project.AssemblyName; - - if (File.Exists(Path.Combine(project.FullPath, projectAssemblyName) + ".dll.config")) - { - hasAssemblyConfig = true; - System.IO.File.Copy(Path.Combine(project.FullPath, projectAssemblyName + ".dll.config"), Path.Combine(projectDir, projectAssemblyName + ".dll.config"), true); - extraDistFiles.Add(project.AssemblyName + ".dll.config"); - } - - foreach (ConfigurationNode conf in project.Configurations) - { - if (conf.Options.KeyFile != string.Empty) - { - // Copy snk file into the project's directory - // Use the snk from the project directory directly - string source = Path.Combine(project.FullPath, conf.Options.KeyFile); - string keyFile = conf.Options.KeyFile; - Regex re = new Regex(".*/"); - keyFile = re.Replace(keyFile, ""); - - string dest = Path.Combine(projectDir, keyFile); - // Tell the user if there's a problem copying the file - try - { - mkdirDashP(System.IO.Path.GetDirectoryName(dest)); - System.IO.File.Copy(source, dest, true); - } - catch (System.IO.IOException e) - { - Console.WriteLine(e.Message); - } - } - } - - // Copy compiled, embedded and content files into the project's directory - foreach (string filename in project.Files) - { - string source = Path.Combine(project.FullPath, filename); - string dest = Path.Combine(projectDir, filename); - - if (filename.Contains("AssemblyInfo.cs")) - { - // If we've got an AssemblyInfo.cs, pull the version number from it - string[] sources = { source }; - string[] args = { "" }; - Microsoft.CSharp.CSharpCodeProvider cscp = - new Microsoft.CSharp.CSharpCodeProvider(); - - string tempAssemblyFile = Path.Combine(Path.GetTempPath(), project.Name + "-temp.dll"); - System.CodeDom.Compiler.CompilerParameters cparam = - new System.CodeDom.Compiler.CompilerParameters(args, tempAssemblyFile); - - System.CodeDom.Compiler.CompilerResults cr = - cscp.CompileAssemblyFromFile(cparam, sources); - - foreach (System.CodeDom.Compiler.CompilerError error in cr.Errors) - Console.WriteLine("Error! '{0}'", error.ErrorText); - - try { - string projectFullName = cr.CompiledAssembly.FullName; - Regex verRegex = new Regex("Version=([\\d\\.]+)"); - Match verMatch = verRegex.Match(projectFullName); - if (verMatch.Success) - projectVersion = verMatch.Groups[1].Value; - }catch{ - Console.WriteLine("Couldn't compile AssemblyInfo.cs"); - } - - // Clean up the temp file - try - { - if (File.Exists(tempAssemblyFile)) - File.Delete(tempAssemblyFile); - } - catch - { - Console.WriteLine("Error! '{0}'", e.ToString()); - } - - } - - // Tell the user if there's a problem copying the file - try - { - mkdirDashP(System.IO.Path.GetDirectoryName(dest)); - System.IO.File.Copy(source, dest, true); - } - catch (System.IO.IOException e) - { - Console.WriteLine(e.Message); - } - - switch (project.Files.GetBuildAction(filename)) - { - case BuildAction.Compile: - compiledFiles.Add(filename); - break; - case BuildAction.Content: - contentFiles.Add(filename); - extraDistFiles.Add(filename); - break; - case BuildAction.EmbeddedResource: - embeddedFiles.Add(filename); - break; - } - } - - // Set up references - for (int refNum = 0; refNum < project.References.Count; refNum++) - { - ReferenceNode refr = (ReferenceNode)project.References[refNum]; - Assembly refAssembly = Assembly.LoadWithPartialName(refr.Name); - - /* Determine which pkg-config (.pc) file refers to - this assembly */ - - SystemPackage package = null; - - if (packagesHash.Contains(refr.Name)){ - package = (SystemPackage)packagesHash[refr.Name]; - - }else{ - string assemblyFullName = string.Empty; - if (refAssembly != null) - assemblyFullName = refAssembly.FullName; - - string assemblyFileName = string.Empty; - if (assemblyFullName != string.Empty && - assemblyFullNameToPath.Contains(assemblyFullName) - ) - assemblyFileName = - (string)assemblyFullNameToPath[assemblyFullName]; - - if (assemblyFileName != string.Empty && - assemblyPathToPackage.Contains(assemblyFileName) - ) - package = (SystemPackage)assemblyPathToPackage[assemblyFileName]; - - } - - /* If we know the .pc file and it is not "mono" - (already in the path), add a -pkg: argument */ - - if (package != null && - package.Name != "mono" && - !pkgLibs.Contains(package.Name) - ) - pkgLibs.Add(package.Name); - - string fileRef = - FindFileReference(refr.Name, (ProjectNode)refr.Parent); - - if (refr.LocalCopy || - solution.ProjectsTable.ContainsKey(refr.Name) || - fileRef != null || - refr.Path != null - ) - { - - /* Attempt to copy the referenced lib to the - project's directory */ - - string filename = refr.Name + ".dll"; - string source = filename; - if (refr.Path != null) - source = Path.Combine(refr.Path, source); - source = Path.Combine(project.FullPath, source); - string dest = Path.Combine(projectDir, filename); - - /* Since we depend on this binary dll to build, we - * will add a compile- time dependency on the - * copied dll, and add the dll to the list of - * files distributed with this package - */ - - binaryLibs.Add(refr.Name + ".dll"); - extraDistFiles.Add(refr.Name + ".dll"); - - // TODO: Support copying .config.osx files - // TODO: Support for determining native dependencies - if (File.Exists(source + ".config")) - { - System.IO.File.Copy(source + ".config", Path.GetDirectoryName(dest), true); - extraDistFiles.Add(refr.Name + ".dll.config"); - } - - try - { - System.IO.File.Copy(source, dest, true); - } - catch (System.IO.IOException) - { - if (solution.ProjectsTable.ContainsKey(refr.Name)){ - - /* If an assembly is referenced, marked for - * local copy, in the list of projects for - * this solution, but does not exist, put a - * target into the Makefile.am to build the - * assembly and copy it to this project's - * directory - */ - - ProjectNode sourcePrj = - ((ProjectNode)(solution.ProjectsTable[refr.Name])); - - string target = - String.Format("{0}:\n" + - "\t$(MAKE) -C ../{1}\n" + - "\tln ../{2}/$@ $@\n", - filename, - sourcePrj.Name, - sourcePrj.Name ); - - localCopyTargets.Add(target); - } - } - } - else if( !pkgLibs.Contains(refr.Name) ) - { - // Else, let's assume it's in the GAC or the lib path - string assemName = string.Empty; - int index = refr.Name.IndexOf(","); - - if (index > 0) - assemName = refr.Name.Substring(0, index); - else - assemName = refr.Name; - - m_Kernel.Log.Write(String.Format( - "Warning: Couldn't find an appropriate assembly " + - "for reference:\n'{0}'", refr.Name - )); - systemLibs.Add(assemName); - } - } - - const string lineSep = " \\\n\t"; - string compiledFilesString = string.Empty; - if (compiledFiles.Count > 0) - compiledFilesString = - lineSep + string.Join(lineSep, compiledFiles.ToArray()); - - string embeddedFilesString = ""; - if (embeddedFiles.Count > 0) - embeddedFilesString = - lineSep + string.Join(lineSep, embeddedFiles.ToArray()); - - string contentFilesString = ""; - if (contentFiles.Count > 0) - contentFilesString = - lineSep + string.Join(lineSep, contentFiles.ToArray()); - - string extraDistFilesString = ""; - if (extraDistFiles.Count > 0) - extraDistFilesString = - lineSep + string.Join(lineSep, extraDistFiles.ToArray()); - - string pkgLibsString = ""; - if (pkgLibs.Count > 0) - pkgLibsString = - lineSep + string.Join(lineSep, pkgLibs.ToArray()); - - string binaryLibsString = ""; - if (binaryLibs.Count > 0) - binaryLibsString = - lineSep + string.Join(lineSep, binaryLibs.ToArray()); - - string systemLibsString = ""; - if (systemLibs.Count > 0) - systemLibsString = - lineSep + string.Join(lineSep, systemLibs.ToArray()); - - string localCopyTargetsString = ""; - if (localCopyTargets.Count > 0) - localCopyTargetsString = - string.Join("\n", localCopyTargets.ToArray()); - - string monoPath = ""; - foreach (string runtimeLib in runtimeLibs) - { - monoPath += ":`pkg-config --variable=libdir " + runtimeLib + "`"; - } - - // Add the project name to the list of transformation - // parameters - XsltArgumentList argList = new XsltArgumentList(); - argList.AddParam("projectName", "", project.Name); - argList.AddParam("solutionName", "", solution.Name); - argList.AddParam("assemblyName", "", projectAssemblyName); - argList.AddParam("compiledFiles", "", compiledFilesString); - argList.AddParam("embeddedFiles", "", embeddedFilesString); - argList.AddParam("contentFiles", "", contentFilesString); - argList.AddParam("extraDistFiles", "", extraDistFilesString); - argList.AddParam("pkgLibs", "", pkgLibsString); - argList.AddParam("binaryLibs", "", binaryLibsString); - argList.AddParam("systemLibs", "", systemLibsString); - argList.AddParam("monoPath", "", monoPath); - argList.AddParam("localCopyTargets", "", localCopyTargetsString); - argList.AddParam("projectVersion", "", projectVersion); - argList.AddParam("hasAssemblyConfig", "", hasAssemblyConfig ? "true" : ""); - - // Transform the templates - transformToFile(Path.Combine(projectDir, "configure.ac"), argList, "/Autotools/ProjectConfigureAc"); - transformToFile(Path.Combine(projectDir, "Makefile.am"), argList, "/Autotools/ProjectMakefileAm"); - transformToFile(Path.Combine(projectDir, "autogen.sh"), argList, "/Autotools/ProjectAutogenSh"); - - if (project.Type == Core.Nodes.ProjectType.Library) - transformToFile(Path.Combine(projectDir, project.Name + ".pc.in"), argList, "/Autotools/ProjectPcIn"); - if (project.Type == Core.Nodes.ProjectType.Exe || project.Type == Core.Nodes.ProjectType.WinExe) - transformToFile(Path.Combine(projectDir, project.Name.ToLower() + ".in"), argList, "/Autotools/ProjectWrapperScriptIn"); - } - - private void WriteProjectOld(SolutionNode solution, ProjectNode project) - { - string projFile = Helper.MakeFilePath(project.FullPath, "Include", "am"); - StreamWriter ss = new StreamWriter(projFile); - ss.NewLine = "\n"; - - m_Kernel.CurrentWorkingDirectory.Push(); - Helper.SetCurrentDir(Path.GetDirectoryName(projFile)); - - using (ss) - { - ss.WriteLine(Helper.AssemblyFullName(project.AssemblyName, project.Type) + ":"); - ss.WriteLine("\tmkdir -p " + Helper.MakePathRelativeTo(solution.FullPath, project.Path) + "/$(BUILD_DIR)/$(CONFIG)/"); - foreach (string file in project.Files) - { - if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings) - { - ss.Write("\tresgen "); - ss.Write(Helper.NormalizePath(Path.Combine(project.Path, file.Substring(0, file.LastIndexOf('.')) + ".resx "), '/')); - if (project.Files.GetResourceName(file) != "") - { - ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, project.RootNamespace + "." + project.Files.GetResourceName(file) + ".resources"), '/')); - } - else - { - ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, project.RootNamespace + "." + file.Substring(0, file.LastIndexOf('.')) + ".resources"), '/')); - } - } - } - ss.WriteLine("\t$(CSC)\t/out:" + Helper.MakePathRelativeTo(solution.FullPath, project.Path) + "/$(BUILD_DIR)/$(CONFIG)/" + Helper.AssemblyFullName(project.AssemblyName, project.Type) + " \\"); - ss.WriteLine("\t\t/target:" + project.Type.ToString().ToLower() + " \\"); - if (project.References.Count > 0) - { - ss.Write("\t\t/reference:"); - bool firstref = true; - foreach (ReferenceNode refr in project.References) - { - if (firstref) - { - firstref = false; - } - else - { - ss.Write(","); - } - ss.Write("{0}", Helper.NormalizePath(Helper.MakePathRelativeTo(solution.FullPath, BuildReference(solution, refr)), '/')); - } - ss.WriteLine(" \\"); - } - //ss.WriteLine("\t\tProperties/AssemblyInfo.cs \\"); - - foreach (string file in project.Files) - { - switch (project.Files.GetBuildAction(file)) - { - case BuildAction.EmbeddedResource: - ss.Write("\t\t/resource:"); - ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, file), '/') + " \\"); - break; - default: - if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings) - { - ss.Write("\t\t/resource:"); - if (project.Files.GetResourceName(file) != "") - { - ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, project.RootNamespace + "." + project.Files.GetResourceName(file) + ".resources"), '/') + "," + project.RootNamespace + "." + project.Files.GetResourceName(file) + ".resources" + " \\"); - } - else - { - ss.WriteLine(Helper.NormalizePath(Path.Combine(project.Path, project.RootNamespace + "." + file.Substring(0, file.LastIndexOf('.')) + ".resources"), '/') + "," + project.RootNamespace + "." + file.Substring(0, file.LastIndexOf('.')) + ".resources" + " \\"); - } - } - break; - } - } - - foreach (ConfigurationNode conf in project.Configurations) - { - if (conf.Options.KeyFile != "") - { - ss.WriteLine("\t\t/keyfile:" + Helper.NormalizePath(Path.Combine(project.Path, conf.Options.KeyFile), '/') + " \\"); - break; - } - } - foreach (ConfigurationNode conf in project.Configurations) - { - if (conf.Options.AllowUnsafe) - { - ss.WriteLine("\t\t/unsafe \\"); - break; - } - } - if (project.AppIcon != "") - { - ss.WriteLine("\t\t/win32icon:" + Helper.NormalizePath(Path.Combine(project.Path, project.AppIcon), '/') + " \\"); - } - - foreach (ConfigurationNode conf in project.Configurations) - { - ss.WriteLine("\t\t/define:{0}", conf.Options.CompilerDefines.Replace(';', ',') + " \\"); - break; - } - - foreach (ConfigurationNode conf in project.Configurations) - { - if (GetXmlDocFile(project, conf) != "") - { - ss.WriteLine("\t\t/doc:" + Helper.MakePathRelativeTo(solution.FullPath, project.Path) + "/$(BUILD_DIR)/$(CONFIG)/" + project.Name + ".xml \\"); - break; - } - } - foreach (string file in project.Files) - { - switch (project.Files.GetBuildAction(file)) - { - case BuildAction.Compile: - ss.WriteLine("\t\t\\"); - ss.Write("\t\t" + NormalizePath(Path.Combine(Helper.MakePathRelativeTo(solution.FullPath, project.Path), file))); - break; - default: - break; - } - } - ss.WriteLine(); - ss.WriteLine(); - - if (project.Type == ProjectType.Library) - { - ss.WriteLine("install-data-local:"); - ss.WriteLine(" echo \"$(GACUTIL) /i bin/Release/" + project.Name + ".dll /f $(GACUTIL_FLAGS)\"; \\"); - ss.WriteLine(" $(GACUTIL) /i bin/Release/" + project.Name + ".dll /f $(GACUTIL_FLAGS) || exit 1;"); - ss.WriteLine(); - ss.WriteLine("uninstall-local:"); - ss.WriteLine(" echo \"$(GACUTIL) /u " + project.Name + " $(GACUTIL_FLAGS)\"; \\"); - ss.WriteLine(" $(GACUTIL) /u " + project.Name + " $(GACUTIL_FLAGS) || exit 1;"); - ss.WriteLine(); - } - ss.WriteLine("CLEANFILES = $(BUILD_DIR)/$(CONFIG)/" + Helper.AssemblyFullName(project.AssemblyName, project.Type) + " $(BUILD_DIR)/$(CONFIG)/" + project.AssemblyName + ".mdb $(BUILD_DIR)/$(CONFIG)/" + project.AssemblyName + ".pdb " + project.AssemblyName + ".xml"); - ss.WriteLine("EXTRA_DIST = \\"); - ss.Write(" $(FILES)"); - foreach (ConfigurationNode conf in project.Configurations) - { - if (conf.Options.KeyFile != "") - { - ss.Write(" \\"); - ss.WriteLine("\t" + conf.Options.KeyFile); - } - break; - } - } - m_Kernel.CurrentWorkingDirectory.Pop(); - } - bool hasLibrary = false; - - private void WriteCombineOld(SolutionNode solution) - { - - /* TODO: These vars should be pulled from the prebuild.xml file */ - string releaseVersion = "2.0.0"; - string assemblyVersion = "2.1.0.0"; - string description = - "Tao Framework " + solution.Name + " Binding For .NET"; - - hasLibrary = false; - m_Kernel.Log.Write("Creating Autotools make files"); - foreach (ProjectNode project in solution.Projects) - { - if (m_Kernel.AllowProject(project.FilterGroups)) - { - m_Kernel.Log.Write("...Creating makefile: {0}", project.Name); - WriteProject(solution, project); - } - } - - m_Kernel.Log.Write(""); - string combFile = Helper.MakeFilePath(solution.FullPath, "Makefile", "am"); - StreamWriter ss = new StreamWriter(combFile); - ss.NewLine = "\n"; - - m_Kernel.CurrentWorkingDirectory.Push(); - Helper.SetCurrentDir(Path.GetDirectoryName(combFile)); - - using (ss) - { - foreach (ProjectNode project in solution.ProjectsTableOrder) - { - if (project.Type == ProjectType.Library) - { - hasLibrary = true; - break; - } - } - - if (hasLibrary) - { - ss.Write("pkgconfig_in_files = "); - foreach (ProjectNode project in solution.ProjectsTableOrder) - { - if (project.Type == ProjectType.Library) - { - string combFilepc = Helper.MakeFilePath(solution.FullPath, project.Name, "pc.in"); - ss.Write(" " + project.Name + ".pc.in "); - StreamWriter sspc = new StreamWriter(combFilepc); - sspc.NewLine = "\n"; - using (sspc) - { - sspc.WriteLine("prefix=@prefix@"); - sspc.WriteLine("exec_prefix=${prefix}"); - sspc.WriteLine("libdir=${exec_prefix}/lib"); - sspc.WriteLine(); - sspc.WriteLine("Name: @PACKAGE_NAME@"); - sspc.WriteLine("Description: @DESCRIPTION@"); - sspc.WriteLine("Version: @ASSEMBLY_VERSION@"); - sspc.WriteLine("Libs: -r:${libdir}/mono/gac/@PACKAGE_NAME@/@ASSEMBLY_VERSION@__@PUBKEY@/@PACKAGE_NAME@.dll"); - } - } - } - - ss.WriteLine(); - ss.WriteLine("pkgconfigdir=$(prefix)/lib/pkgconfig"); - ss.WriteLine("pkgconfig_DATA=$(pkgconfig_in_files:.pc.in=.pc)"); - } - ss.WriteLine(); - foreach (ProjectNode project in solution.ProjectsTableOrder) - { - string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); - ss.WriteLine("-include x {0}", - Helper.NormalizePath(Helper.MakeFilePath(path, "Include", "am"), '/')); - } - ss.WriteLine(); - ss.WriteLine("all: \\"); - ss.Write("\t"); - foreach (ProjectNode project in solution.ProjectsTableOrder) - { - string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); - ss.Write(Helper.AssemblyFullName(project.AssemblyName, project.Type) + " "); - - } - ss.WriteLine(); - if (hasLibrary) - { - ss.WriteLine("EXTRA_DIST = \\"); - ss.WriteLine("\t$(pkgconfig_in_files)"); - } - else - { - ss.WriteLine("EXTRA_DIST = "); - } - ss.WriteLine(); - ss.WriteLine("DISTCLEANFILES = \\"); - ss.WriteLine("\tconfigure \\"); - ss.WriteLine("\tMakefile.in \\"); - ss.WriteLine("\taclocal.m4"); - } - combFile = Helper.MakeFilePath(solution.FullPath, "configure", "ac"); - StreamWriter ts = new StreamWriter(combFile); - ts.NewLine = "\n"; - using (ts) - { - if (this.hasLibrary) - { - foreach (ProjectNode project in solution.ProjectsTableOrder) - { - if (project.Type == ProjectType.Library) - { - ts.WriteLine("AC_INIT(" + project.Name + ".pc.in)"); - break; - } - } - } - else - { - ts.WriteLine("AC_INIT(Makefile.am)"); - } - ts.WriteLine("AC_PREREQ(2.53)"); - ts.WriteLine("AC_CANONICAL_SYSTEM"); - - ts.WriteLine("PACKAGE_NAME={0}", solution.Name); - ts.WriteLine("PACKAGE_VERSION={0}", releaseVersion); - ts.WriteLine("DESCRIPTION=\"{0}\"", description); - ts.WriteLine("AC_SUBST(DESCRIPTION)"); - ts.WriteLine("AM_INIT_AUTOMAKE([$PACKAGE_NAME],[$PACKAGE_VERSION],[$DESCRIPTION])"); - - ts.WriteLine("ASSEMBLY_VERSION={0}", assemblyVersion); - ts.WriteLine("AC_SUBST(ASSEMBLY_VERSION)"); - - ts.WriteLine("PUBKEY=`sn -t $PACKAGE_NAME.snk | grep 'Public Key Token' | awk -F: '{print $2}' | sed -e 's/^ //'`"); - ts.WriteLine("AC_SUBST(PUBKEY)"); - - ts.WriteLine(); - ts.WriteLine("AM_MAINTAINER_MODE"); - ts.WriteLine(); - ts.WriteLine("dnl AC_PROG_INTLTOOL([0.25])"); - ts.WriteLine(); - ts.WriteLine("AC_PROG_INSTALL"); - ts.WriteLine(); - ts.WriteLine("MONO_REQUIRED_VERSION=1.1"); - ts.WriteLine(); - ts.WriteLine("AC_MSG_CHECKING([whether we're compiling from CVS])"); - ts.WriteLine("if test -f \"$srcdir/.cvs_version\" ; then"); - ts.WriteLine(" from_cvs=yes"); - ts.WriteLine("else"); - ts.WriteLine(" if test -f \"$srcdir/.svn\" ; then"); - ts.WriteLine(" from_cvs=yes"); - ts.WriteLine(" else"); - ts.WriteLine(" from_cvs=no"); - ts.WriteLine(" fi"); - ts.WriteLine("fi"); - ts.WriteLine(); - ts.WriteLine("AC_MSG_RESULT($from_cvs)"); - ts.WriteLine(); - ts.WriteLine("AC_PATH_PROG(MONO, mono)"); - ts.WriteLine("AC_PATH_PROG(GMCS, gmcs)"); - ts.WriteLine("AC_PATH_PROG(GACUTIL, gacutil)"); - ts.WriteLine(); - ts.WriteLine("AC_MSG_CHECKING([for mono])"); - ts.WriteLine("dnl if test \"x$MONO\" = \"x\" ; then"); - ts.WriteLine("dnl AC_MSG_ERROR([Can't find \"mono\" in your PATH])"); - ts.WriteLine("dnl else"); - ts.WriteLine(" AC_MSG_RESULT([found])"); - ts.WriteLine("dnl fi"); - ts.WriteLine(); - ts.WriteLine("AC_MSG_CHECKING([for gmcs])"); - ts.WriteLine("dnl if test \"x$GMCS\" = \"x\" ; then"); - ts.WriteLine("dnl AC_MSG_ERROR([Can't find \"gmcs\" in your PATH])"); - ts.WriteLine("dnl else"); - ts.WriteLine(" AC_MSG_RESULT([found])"); - ts.WriteLine("dnl fi"); - ts.WriteLine(); - //ts.WriteLine("AC_MSG_CHECKING([for gacutil])"); - //ts.WriteLine("if test \"x$GACUTIL\" = \"x\" ; then"); - //ts.WriteLine(" AC_MSG_ERROR([Can't find \"gacutil\" in your PATH])"); - //ts.WriteLine("else"); - //ts.WriteLine(" AC_MSG_RESULT([found])"); - //ts.WriteLine("fi"); - ts.WriteLine(); - ts.WriteLine("AC_SUBST(PATH)"); - ts.WriteLine("AC_SUBST(LD_LIBRARY_PATH)"); - ts.WriteLine(); - ts.WriteLine("dnl CSFLAGS=\"-debug -nowarn:1574\""); - ts.WriteLine("CSFLAGS=\"\""); - ts.WriteLine("AC_SUBST(CSFLAGS)"); - ts.WriteLine(); - // ts.WriteLine("AC_MSG_CHECKING(--disable-sdl argument)"); - // ts.WriteLine("AC_ARG_ENABLE(sdl,"); - // ts.WriteLine(" [ --disable-sdl Disable Sdl interface.],"); - // ts.WriteLine(" [disable_sdl=$disableval],"); - // ts.WriteLine(" [disable_sdl=\"no\"])"); - // ts.WriteLine("AC_MSG_RESULT($disable_sdl)"); - // ts.WriteLine("if test \"$disable_sdl\" = \"yes\"; then"); - // ts.WriteLine(" AC_DEFINE(FEAT_SDL)"); - // ts.WriteLine("fi"); - ts.WriteLine(); - ts.WriteLine("dnl Find pkg-config"); - ts.WriteLine("AC_PATH_PROG(PKGCONFIG, pkg-config, no)"); - ts.WriteLine("if test \"x$PKG_CONFIG\" = \"xno\"; then"); - ts.WriteLine(" AC_MSG_ERROR([You need to install pkg-config])"); - ts.WriteLine("fi"); - ts.WriteLine(); - ts.WriteLine("PKG_CHECK_MODULES(MONO_DEPENDENCY, mono >= $MONO_REQUIRED_VERSION, has_mono=true, has_mono=false)"); - ts.WriteLine("BUILD_DIR=\"bin\""); - ts.WriteLine("AC_SUBST(BUILD_DIR)"); - ts.WriteLine("CONFIG=\"Release\""); - ts.WriteLine("AC_SUBST(CONFIG)"); - ts.WriteLine(); - ts.WriteLine("if test \"x$has_mono\" = \"xtrue\"; then"); - ts.WriteLine(" AC_PATH_PROG(RUNTIME, mono, no)"); - ts.WriteLine(" AC_PATH_PROG(CSC, gmcs, no)"); - ts.WriteLine(" if test `uname -s` = \"Darwin\"; then"); - ts.WriteLine(" LIB_PREFIX="); - ts.WriteLine(" LIB_SUFFIX=.dylib"); - ts.WriteLine(" else"); - ts.WriteLine(" LIB_PREFIX=.so"); - ts.WriteLine(" LIB_SUFFIX="); - ts.WriteLine(" fi"); - ts.WriteLine("else"); - ts.WriteLine(" AC_PATH_PROG(CSC, csc.exe, no)"); - ts.WriteLine(" if test x$CSC = \"xno\"; then"); - ts.WriteLine(" AC_MSG_ERROR([You need to install either mono or .Net])"); - ts.WriteLine(" else"); - ts.WriteLine(" RUNTIME="); - ts.WriteLine(" LIB_PREFIX="); - ts.WriteLine(" LIB_SUFFIX=.dylib"); - ts.WriteLine(" fi"); - ts.WriteLine("fi"); - ts.WriteLine(); - ts.WriteLine("AC_SUBST(LIB_PREFIX)"); - ts.WriteLine("AC_SUBST(LIB_SUFFIX)"); - ts.WriteLine(); - ts.WriteLine("AC_SUBST(BASE_DEPENDENCIES_CFLAGS)"); - ts.WriteLine("AC_SUBST(BASE_DEPENDENCIES_LIBS)"); - ts.WriteLine(); - ts.WriteLine("dnl Find monodoc"); - ts.WriteLine("MONODOC_REQUIRED_VERSION=1.0"); - ts.WriteLine("AC_SUBST(MONODOC_REQUIRED_VERSION)"); - ts.WriteLine("PKG_CHECK_MODULES(MONODOC_DEPENDENCY, monodoc >= $MONODOC_REQUIRED_VERSION, enable_monodoc=yes, enable_monodoc=no)"); - ts.WriteLine(); - ts.WriteLine("if test \"x$enable_monodoc\" = \"xyes\"; then"); - ts.WriteLine(" AC_PATH_PROG(MONODOC, monodoc, no)"); - ts.WriteLine(" if test x$MONODOC = xno; then"); - ts.WriteLine(" enable_monodoc=no"); - ts.WriteLine(" fi"); - ts.WriteLine("else"); - ts.WriteLine(" MONODOC="); - ts.WriteLine("fi"); - ts.WriteLine(); - ts.WriteLine("AC_SUBST(MONODOC)"); - ts.WriteLine("AM_CONDITIONAL(ENABLE_MONODOC, test \"x$enable_monodoc\" = \"xyes\")"); - ts.WriteLine(); - ts.WriteLine("AC_PATH_PROG(GACUTIL, gacutil, no)"); - ts.WriteLine("if test \"x$GACUTIL\" = \"xno\" ; then"); - ts.WriteLine(" AC_MSG_ERROR([No gacutil tool found])"); - ts.WriteLine("fi"); - ts.WriteLine(); - // foreach(ProjectNode project in solution.ProjectsTableOrder) - // { - // if (project.Type == ProjectType.Library) - // { - // } - // } - ts.WriteLine("GACUTIL_FLAGS='/package $(PACKAGE_NAME) /gacdir $(DESTDIR)$(prefix)'"); - ts.WriteLine("AC_SUBST(GACUTIL_FLAGS)"); - ts.WriteLine(); - ts.WriteLine("winbuild=no"); - ts.WriteLine("case \"$host\" in"); - ts.WriteLine(" *-*-mingw*|*-*-cygwin*)"); - ts.WriteLine(" winbuild=yes"); - ts.WriteLine(" ;;"); - ts.WriteLine("esac"); - ts.WriteLine("AM_CONDITIONAL(WINBUILD, test x$winbuild = xyes)"); - ts.WriteLine(); - // ts.WriteLine("dnl Check for SDL"); - // ts.WriteLine(); - // ts.WriteLine("AC_PATH_PROG([SDL_CONFIG], [sdl-config])"); - // ts.WriteLine("have_sdl=no"); - // ts.WriteLine("if test -n \"${SDL_CONFIG}\"; then"); - // ts.WriteLine(" have_sdl=yes"); - // ts.WriteLine(" SDL_CFLAGS=`$SDL_CONFIG --cflags`"); - // ts.WriteLine(" SDL_LIBS=`$SDL_CONFIG --libs`"); - // ts.WriteLine(" #"); - // ts.WriteLine(" # sdl-config sometimes emits an rpath flag pointing at its library"); - // ts.WriteLine(" # installation directory. We don't want this, as it prevents users from"); - // ts.WriteLine(" # linking sdl-viewer against, for example, a locally compiled libGL when a"); - // ts.WriteLine(" # version of the library also exists in SDL's library installation"); - // ts.WriteLine(" # directory, typically /usr/lib."); - // ts.WriteLine(" #"); - // ts.WriteLine(" SDL_LIBS=`echo $SDL_LIBS | sed 's/-Wl,-rpath,[[^ ]]* //'`"); - // ts.WriteLine("fi"); - // ts.WriteLine("AC_SUBST([SDL_CFLAGS])"); - // ts.WriteLine("AC_SUBST([SDL_LIBS])"); - ts.WriteLine(); - ts.WriteLine("AC_OUTPUT(["); - ts.WriteLine("Makefile"); - // TODO: this does not work quite right. - //ts.WriteLine("Properties/AssemblyInfo.cs"); - foreach (ProjectNode project in solution.ProjectsTableOrder) - { - if (project.Type == ProjectType.Library) - { - ts.WriteLine(project.Name + ".pc"); - } - // string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); - // ts.WriteLine(Helper.NormalizePath(Helper.MakeFilePath(path, "Include"),'/')); - } - ts.WriteLine("])"); - ts.WriteLine(); - ts.WriteLine("#po/Makefile.in"); - ts.WriteLine(); - ts.WriteLine("echo \"---\""); - ts.WriteLine("echo \"Configuration summary\""); - ts.WriteLine("echo \"\""); - ts.WriteLine("echo \" * Installation prefix: $prefix\""); - ts.WriteLine("echo \" * compiler: $CSC\""); - ts.WriteLine("echo \" * Documentation: $enable_monodoc ($MONODOC)\""); - ts.WriteLine("echo \" * Package Name: $PACKAGE_NAME\""); - ts.WriteLine("echo \" * Version: $PACKAGE_VERSION\""); - ts.WriteLine("echo \" * Public Key: $PUBKEY\""); - ts.WriteLine("echo \"\""); - ts.WriteLine("echo \"---\""); - ts.WriteLine(); - } - - ts.NewLine = "\n"; - foreach (ProjectNode project in solution.ProjectsTableOrder) - { - if (project.GenerateAssemblyInfoFile) - { - GenerateAssemblyInfoFile(solution, combFile); - } - } - } - - private static void GenerateAssemblyInfoFile(SolutionNode solution, string combFile) - { - System.IO.Directory.CreateDirectory(Helper.MakePathRelativeTo(solution.FullPath, "Properties")); - combFile = Helper.MakeFilePath(solution.FullPath + "/Properties/", "AssemblyInfo.cs", "in"); - StreamWriter ai = new StreamWriter(combFile); - - using (ai) - { - ai.WriteLine("#region License"); - ai.WriteLine("/*"); - ai.WriteLine("MIT License"); - ai.WriteLine("Copyright (c)2003-2006 Tao Framework Team"); - ai.WriteLine("http://www.taoframework.com"); - ai.WriteLine("All rights reserved."); - ai.WriteLine(""); - ai.WriteLine("Permission is hereby granted, free of charge, to any person obtaining a copy"); - ai.WriteLine("of this software and associated documentation files (the \"Software\"), to deal"); - ai.WriteLine("in the Software without restriction, including without limitation the rights"); - ai.WriteLine("to use, copy, modify, merge, publish, distribute, sublicense, and/or sell"); - ai.WriteLine("copies of the Software, and to permit persons to whom the Software is"); - ai.WriteLine("furnished to do so, subject to the following conditions:"); - ai.WriteLine(""); - ai.WriteLine("The above copyright notice and this permission notice shall be included in all"); - ai.WriteLine("copies or substantial portions of the Software."); - ai.WriteLine(""); - ai.WriteLine("THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR"); - ai.WriteLine("IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,"); - ai.WriteLine("FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE"); - ai.WriteLine("AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER"); - ai.WriteLine("LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,"); - ai.WriteLine("OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE"); - ai.WriteLine("SOFTWARE."); - ai.WriteLine("*/"); - ai.WriteLine("#endregion License"); - ai.WriteLine(""); - ai.WriteLine("using System;"); - ai.WriteLine("using System.Reflection;"); - ai.WriteLine("using System.Runtime.InteropServices;"); - ai.WriteLine("using System.Security;"); - ai.WriteLine("using System.Security.Permissions;"); - ai.WriteLine(""); - ai.WriteLine("[assembly: AllowPartiallyTrustedCallers]"); - ai.WriteLine("[assembly: AssemblyCompany(\"Tao Framework -- http://www.taoframework.com\")]"); - ai.WriteLine("[assembly: AssemblyConfiguration(\"Retail\")]"); - ai.WriteLine("[assembly: AssemblyCopyright(\"Copyright (c)2003-2006 Tao Framework Team. All rights reserved.\")]"); - ai.WriteLine("[assembly: AssemblyCulture(\"\")]"); - ai.WriteLine("[assembly: AssemblyDefaultAlias(\"@PACKAGE_NAME@\")]"); - ai.WriteLine("[assembly: AssemblyDelaySign(false)]"); - ai.WriteLine("[assembly: AssemblyDescription(\"@DESCRIPTION@\")]"); - ai.WriteLine("[assembly: AssemblyFileVersion(\"@ASSEMBLY_VERSION@\")]"); - ai.WriteLine("[assembly: AssemblyInformationalVersion(\"@ASSEMBLY_VERSION@\")]"); - ai.WriteLine("[assembly: AssemblyKeyName(\"\")]"); - ai.WriteLine("[assembly: AssemblyProduct(\"@PACKAGE_NAME@.dll\")]"); - ai.WriteLine("[assembly: AssemblyTitle(\"@DESCRIPTION@\")]"); - ai.WriteLine("[assembly: AssemblyTrademark(\"Tao Framework -- http://www.taoframework.com\")]"); - ai.WriteLine("[assembly: AssemblyVersion(\"@ASSEMBLY_VERSION@\")]"); - ai.WriteLine("[assembly: CLSCompliant(true)]"); - ai.WriteLine("[assembly: ComVisible(false)]"); - ai.WriteLine("[assembly: SecurityPermission(SecurityAction.RequestMinimum, Flags = SecurityPermissionFlag.Execution)]"); - ai.WriteLine("[assembly: SecurityPermission(SecurityAction.RequestMinimum, Flags = SecurityPermissionFlag.SkipVerification)]"); - ai.WriteLine("[assembly: SecurityPermission(SecurityAction.RequestMinimum, Flags = SecurityPermissionFlag.UnmanagedCode)]"); - - } - //return combFile; - } - - private void CleanProject(ProjectNode project) - { - m_Kernel.Log.Write("...Cleaning project: {0}", project.Name); - string projectFile = Helper.MakeFilePath(project.FullPath, "Include", "am"); - Helper.DeleteIfExists(projectFile); - } - - private void CleanSolution(SolutionNode solution) - { - m_Kernel.Log.Write("Cleaning Autotools make files for", solution.Name); - - string slnFile = Helper.MakeFilePath(solution.FullPath, "Makefile", "am"); - Helper.DeleteIfExists(slnFile); - - slnFile = Helper.MakeFilePath(solution.FullPath, "Makefile", "in"); - Helper.DeleteIfExists(slnFile); - - slnFile = Helper.MakeFilePath(solution.FullPath, "configure", "ac"); - Helper.DeleteIfExists(slnFile); - - slnFile = Helper.MakeFilePath(solution.FullPath, "configure"); - Helper.DeleteIfExists(slnFile); - - slnFile = Helper.MakeFilePath(solution.FullPath, "Makefile"); - Helper.DeleteIfExists(slnFile); - - foreach (ProjectNode project in solution.Projects) - { - CleanProject(project); - } - - m_Kernel.Log.Write(""); - } - - #endregion - - #region ITarget Members - - /// - /// Writes the specified kern. - /// - /// The kern. - public void Write(Kernel kern) - { - if (kern == null) - { - throw new ArgumentNullException("kern"); - } - m_Kernel = kern; - m_Kernel.Log.Write("Parsing system pkg-config files"); - RunInitialization(); - - string streamName = "autotools.xml"; - string fqStreamName = String.Format("Prebuild.data.{0}", - streamName - ); - - // Retrieve stream for the autotools template XML - Stream autotoolsStream = Assembly.GetExecutingAssembly() - .GetManifestResourceStream(fqStreamName); - - if(autotoolsStream == null) { - - /* - * try without the default namespace prepended, in - * case prebuild.exe assembly was compiled with - * something other than Visual Studio .NET - */ - - autotoolsStream = Assembly.GetExecutingAssembly() - .GetManifestResourceStream(streamName); - if(autotoolsStream == null){ - string errStr = - String.Format("Could not find embedded resource file:\n" + - "'{0}' or '{1}'", - streamName, fqStreamName - ); - - m_Kernel.Log.Write(errStr); - - throw new System.Reflection.TargetException(errStr); - } - } - - // Create an XML URL Resolver with default credentials - xr = new System.Xml.XmlUrlResolver(); - xr.Credentials = CredentialCache.DefaultCredentials; - - // Create a default evidence - no need to limit access - e = new System.Security.Policy.Evidence(); - - // Load the autotools XML - autotoolsDoc = new XmlDocument(); - autotoolsDoc.Load(autotoolsStream); - - /* rootDir is the filesystem location where the Autotools - * build tree will be created - for now we'll make it - * $PWD/autotools - */ - - string pwd = Directory.GetCurrentDirectory(); - //string pwd = System.Environment.GetEnvironmentVariable("PWD"); - string rootDir = ""; - //if (pwd.Length != 0) - //{ - rootDir = Path.Combine(pwd, "autotools"); - //} - //else - //{ - // pwd = Assembly.GetExecutingAssembly() - //} - chkMkDir(rootDir); - - foreach (SolutionNode solution in kern.Solutions) - { - m_Kernel.Log.Write(String.Format("Writing solution: {0}", - solution.Name)); - WriteCombine(solution); - } - m_Kernel = null; - } - - /// - /// Cleans the specified kern. - /// - /// The kern. - public virtual void Clean(Kernel kern) - { - if (kern == null) - { - throw new ArgumentNullException("kern"); - } - m_Kernel = kern; - foreach (SolutionNode sol in kern.Solutions) - { - CleanSolution(sol); - } - m_Kernel = null; - } - - /// - /// Gets the name. - /// - /// The name. - public string Name - { - get - { - return "autotools"; - } - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Targets/DebugTarget.cs b/Prebuild/src/Core/Targets/DebugTarget.cs deleted file mode 100644 index dc4e666ebd..0000000000 --- a/Prebuild/src/Core/Targets/DebugTarget.cs +++ /dev/null @@ -1,102 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -#region CVS Information -/* - * $Source$ - * $Author: jendave $ - * $Date: 2006-09-20 09:42:51 +0200 (on, 20 sep 2006) $ - * $Revision: 164 $ - */ -#endregion - -using System; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Nodes; - -#if (DEBUG && _DEBUG_TARGET) -namespace Prebuild.Core.Targets -{ - [Target("debug")] - public class DebugTarget : ITarget - { -#region Fields - - private Kernel m_Kernel = null; - -#endregion - -#region ITarget Members - - public void Write() - { - foreach(SolutionNode s in m_Kernel.Solutions) - { - Console.WriteLine("Solution [ {0}, {1} ]", s.Name, s.Path); - foreach(string file in s.Files) -{ - Console.WriteLine("\tFile [ {0} ]", file); -} - - foreach(ProjectNode proj in s.Projects) - { - Console.WriteLine("\tProject [ {0}, {1}. {2} ]", proj.Name, proj.Path, proj.Language); - foreach(string file in proj.Files) - Console.WriteLine("\t\tFile [ {0} ]", file); - } - } - } - - public void Clean() - { - Console.WriteLine("Not implemented"); - } - - public string Name - { - get - { - return "debug"; - } - } - - public Kernel Kernel - { - get - { - return m_Kernel; - } - set - { - m_Kernel = value; - } - } - -#endregion - } -} -#endif diff --git a/Prebuild/src/Core/Targets/MakefileTarget.cs b/Prebuild/src/Core/Targets/MakefileTarget.cs deleted file mode 100644 index 86676d08cb..0000000000 --- a/Prebuild/src/Core/Targets/MakefileTarget.cs +++ /dev/null @@ -1,471 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004 Crestez Leonard (cleonard@go.ro) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Collections; -using System.Collections.Specialized; -using System.IO; -using System.Text.RegularExpressions; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Nodes; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core.Targets -{ - [Target("makefile")] - public class MakefileTarget : ITarget - { - #region Fields - - private Kernel m_Kernel = null; - - #endregion - - #region Private Methods - - // This converts a path relative to the path of a project to - // a path relative to the solution path. - private string NicePath(ProjectNode proj, string path) - { - string res; - SolutionNode solution = (SolutionNode)proj.Parent; - res = Path.Combine(Helper.NormalizePath(proj.FullPath, '/'), Helper.NormalizePath(path, '/')); - res = Helper.NormalizePath(res, '/'); - res = res.Replace("/./", "/"); - while (res.IndexOf("/../") >= 0) - { - int a = res.IndexOf("/../"); - int b = res.LastIndexOf("/", a - 1); - res = res.Remove(b, a - b + 3); - } - res = Helper.MakePathRelativeTo(solution.FullPath, res); - if (res.StartsWith("./")) - res = res.Substring(2, res.Length - 2); - res = Helper.NormalizePath(res, '/'); - return res; - } - - private void WriteProjectFiles(StreamWriter f, SolutionNode solution, ProjectNode project) - { - // Write list of source code files - f.WriteLine("SOURCES_{0} = \\", project.Name); - foreach (string file in project.Files) - if (project.Files.GetBuildAction(file) == BuildAction.Compile) - f.WriteLine("\t{0} \\", NicePath(project, file)); - f.WriteLine(); - - // Write list of resource files - f.WriteLine("RESOURCES_{0} = \\", project.Name); - foreach (string file in project.Files) - if (project.Files.GetBuildAction(file) == BuildAction.EmbeddedResource) - { - string path = NicePath(project, file); - f.WriteLine("\t-resource:{0},{1} \\", path, Path.GetFileName(path)); - } - f.WriteLine(); - - // There's also Content and None in BuildAction. - // What am I supposed to do with that? - } - - private string FindFileReference(string refName, ProjectNode project) - { - foreach (ReferencePathNode refPath in project.ReferencePaths) - { - string fullPath = NicePath(project, Helper.MakeFilePath(refPath.Path, refName, "dll")); - if (File.Exists(fullPath)) - return fullPath; - } - return null; - } - - private void WriteProjectReferences(StreamWriter f, SolutionNode solution, ProjectNode project) - { - f.WriteLine("REFERENCES_{0} = \\", project.Name); - foreach (ReferenceNode refr in project.References) - { - string path; - // Project references change with configurations. - if (solution.ProjectsTable.Contains(refr.Name)) - continue; - path = FindFileReference(refr.Name, project); - if (path != null) - f.WriteLine("\t-r:{0} \\", path); - else - f.WriteLine("\t-r:{0} \\", refr.Name); - } - f.WriteLine(); - } - - private void WriteProjectDependencies(StreamWriter f, SolutionNode solution, ProjectNode project) - { - f.WriteLine("DEPENDENCIES_{0} = \\", project.Name); - f.WriteLine("\t$(SOURCES_{0}) \\", project.Name); - foreach (string file in project.Files) - if (project.Files.GetBuildAction(file) == BuildAction.EmbeddedResource) - f.WriteLine("\t{0} \\", NicePath(project, file)); - f.WriteLine(); - } - - private string ProjectTypeToExtension(ProjectType t) - { - if (t == ProjectType.Exe || t == ProjectType.WinExe) - { - return "exe"; - } - else if (t == ProjectType.Library) - { - return "dll"; - } - else - { - throw new FatalException("Bad ProjectType: {0}", t); - } - } - - private string ProjectTypeToTarget(ProjectType t) - { - if (t == ProjectType.Exe) - { - return "exe"; - } - else if (t == ProjectType.WinExe) - { - return "winexe"; - } - else if (t == ProjectType.Library) - { - return "library"; - } - else - { - throw new FatalException("Bad ProjectType: {0}", t); - } - } - - private string ProjectOutput(ProjectNode project, ConfigurationNode config) - { - string filepath; - filepath = Helper.MakeFilePath((string)config.Options["OutputPath"], - project.AssemblyName, ProjectTypeToExtension(project.Type)); - return NicePath(project, filepath); - } - - // Returns true if two configs in one project have the same output. - private bool ProjectClashes(ProjectNode project) - { - foreach (ConfigurationNode conf1 in project.Configurations) - foreach (ConfigurationNode conf2 in project.Configurations) - if (ProjectOutput(project, conf1) == ProjectOutput(project, conf2) && conf1 != conf2) - { - m_Kernel.Log.Write("Warning: Configurations {0} and {1} for project {2} output the same file", - conf1.Name, conf2.Name, project.Name); - m_Kernel.Log.Write("Warning: I'm going to use some timestamps(extra empty files)."); - return true; - } - return false; - } - - private void WriteProject(StreamWriter f, SolutionNode solution, ProjectNode project) - { - f.WriteLine("# This is for project {0}", project.Name); - f.WriteLine(); - - WriteProjectFiles(f, solution, project); - WriteProjectReferences(f, solution, project); - WriteProjectDependencies(f, solution, project); - - bool clash = ProjectClashes(project); - - foreach (ConfigurationNode conf in project.Configurations) - { - string outpath = ProjectOutput(project, conf); - string filesToClean = outpath; - - if (clash) - { - f.WriteLine("{0}-{1}: .{0}-{1}-timestamp", project.Name, conf.Name); - f.WriteLine(); - f.Write(".{0}-{1}-timestamp: $(DEPENDENCIES_{0})", project.Name, conf.Name); - } - else - { - f.WriteLine("{0}-{1}: {2}", project.Name, conf.Name, outpath); - f.WriteLine(); - f.Write("{2}: $(DEPENDENCIES_{0})", project.Name, conf.Name, outpath); - } - // Dependencies on other projects. - foreach (ReferenceNode refr in project.References) - if (solution.ProjectsTable.Contains(refr.Name)) - { - ProjectNode refProj = (ProjectNode)solution.ProjectsTable[refr.Name]; - if (ProjectClashes(refProj)) - f.Write(" .{0}-{1}-timestamp", refProj.Name, conf.Name); - else - f.Write(" {0}", ProjectOutput(refProj, conf)); - } - f.WriteLine(); - - // make directory for output. - if (Path.GetDirectoryName(outpath) != "") - { - f.WriteLine("\tmkdir -p {0}", Path.GetDirectoryName(outpath)); - } - // mcs command line. - f.Write("\tgmcs", project.Name); - f.Write(" -warn:{0}", conf.Options["WarningLevel"]); - if ((bool)conf.Options["DebugInformation"]) - f.Write(" -debug"); - if ((bool)conf.Options["AllowUnsafe"]) - f.Write(" -unsafe"); - if ((bool)conf.Options["CheckUnderflowOverflow"]) - f.Write(" -checked"); - if (project.StartupObject != "") - f.Write(" -main:{0}", project.StartupObject); - if ((string)conf.Options["CompilerDefines"] != "") - { - f.Write(" -define:\"{0}\"", conf.Options["CompilerDefines"]); - } - - f.Write(" -target:{0} -out:{1}", ProjectTypeToTarget(project.Type), outpath); - - // Build references to other projects. Now that sux. - // We have to reference the other project in the same conf. - foreach (ReferenceNode refr in project.References) - if (solution.ProjectsTable.Contains(refr.Name)) - { - ProjectNode refProj; - refProj = (ProjectNode)solution.ProjectsTable[refr.Name]; - f.Write(" -r:{0}", ProjectOutput(refProj, conf)); - } - - f.Write(" $(REFERENCES_{0})", project.Name); - f.Write(" $(RESOURCES_{0})", project.Name); - f.Write(" $(SOURCES_{0})", project.Name); - f.WriteLine(); - - // Copy references with localcopy. - foreach (ReferenceNode refr in project.References) - if (refr.LocalCopy) - { - string outPath, srcPath, destPath; - outPath = Helper.NormalizePath((string)conf.Options["OutputPath"]); - if (solution.ProjectsTable.Contains(refr.Name)) - { - ProjectNode refProj; - refProj = (ProjectNode)solution.ProjectsTable[refr.Name]; - srcPath = ProjectOutput(refProj, conf); - destPath = Path.Combine(outPath, Path.GetFileName(srcPath)); - destPath = NicePath(project, destPath); - if (srcPath != destPath) - { - f.WriteLine("\tcp -f {0} {1}", srcPath, destPath); - filesToClean += " " + destPath; - } - continue; - } - srcPath = FindFileReference(refr.Name, project); - if (srcPath != null) - { - destPath = Path.Combine(outPath, Path.GetFileName(srcPath)); - destPath = NicePath(project, destPath); - f.WriteLine("\tcp -f {0} {1}", srcPath, destPath); - filesToClean += " " + destPath; - } - } - - if (clash) - { - filesToClean += String.Format(" .{0}-{1}-timestamp", project.Name, conf.Name); - f.WriteLine("\ttouch .{0}-{1}-timestamp", project.Name, conf.Name); - f.Write("\trm -rf"); - foreach (ConfigurationNode otherConf in project.Configurations) - if (otherConf != conf) - f.WriteLine(" .{0}-{1}-timestamp", project.Name, otherConf.Name); - f.WriteLine(); - } - f.WriteLine(); - f.WriteLine("{0}-{1}-clean:", project.Name, conf.Name); - f.WriteLine("\trm -rf {0}", filesToClean); - f.WriteLine(); - } - } - - private void WriteIntro(StreamWriter f, SolutionNode solution) - { - f.WriteLine("# Makefile for {0} generated by Prebuild ( http://dnpb.sf.net )", solution.Name); - f.WriteLine("# Do not edit."); - f.WriteLine("#"); - - f.Write("# Configurations:"); - foreach (ConfigurationNode conf in solution.Configurations) - f.Write(" {0}", conf.Name); - f.WriteLine(); - - f.WriteLine("# Projects:"); - foreach (ProjectNode proj in solution.Projects) - f.WriteLine("#\t{0}", proj.Name); - - f.WriteLine("#"); - f.WriteLine("# Building:"); - f.WriteLine("#\t\"make\" to build everything under the default(first) configuration"); - f.WriteLine("#\t\"make CONF\" to build every project under configuration CONF"); - f.WriteLine("#\t\"make PROJ\" to build project PROJ under the default(first) configuration"); - f.WriteLine("#\t\"make PROJ-CONF\" to build project PROJ under configuration CONF"); - f.WriteLine("#"); - f.WriteLine("# Cleaning (removing results of build):"); - f.WriteLine("#\t\"make clean\" to clean everything, that's what you probably want"); - f.WriteLine("#\t\"make CONF\" to clean everything for a configuration"); - f.WriteLine("#\t\"make PROJ\" to clean everything for a project"); - f.WriteLine("#\t\"make PROJ-CONF\" to clea project PROJ under configuration CONF"); - f.WriteLine(); - } - - private void WritePhony(StreamWriter f, SolutionNode solution) - { - string defconf = ""; - foreach (ConfigurationNode conf in solution.Configurations) - { - defconf = conf.Name; - break; - } - - f.Write(".PHONY: all"); - foreach (ProjectNode proj in solution.Projects) - f.Write(" {0} {0}-clean", proj.Name); - foreach (ConfigurationNode conf in solution.Configurations) - f.Write(" {0} {0}-clean", conf.Name); - foreach (ProjectNode proj in solution.Projects) - foreach (ConfigurationNode conf in solution.Configurations) - f.Write(" {0}-{1} {0}-{1}-clean", proj.Name, conf.Name); - f.WriteLine(); - f.WriteLine(); - - f.WriteLine("all: {0}", defconf); - f.WriteLine(); - - f.Write("clean:"); - foreach (ConfigurationNode conf in solution.Configurations) - f.Write(" {0}-clean", conf.Name); - f.WriteLine(); - f.WriteLine(); - - foreach (ConfigurationNode conf in solution.Configurations) - { - f.Write("{0}: ", conf.Name); - foreach (ProjectNode proj in solution.Projects) - f.Write(" {0}-{1}", proj.Name, conf.Name); - f.WriteLine(); - f.WriteLine(); - - f.Write("{0}-clean: ", conf.Name); - foreach (ProjectNode proj in solution.Projects) - f.Write(" {0}-{1}-clean", proj.Name, conf.Name); - f.WriteLine(); - f.WriteLine(); - } - - foreach (ProjectNode proj in solution.Projects) - { - f.WriteLine("{0}: {0}-{1}", proj.Name, defconf); - f.WriteLine(); - - f.Write("{0}-clean:", proj.Name); - foreach (ConfigurationNode conf in proj.Configurations) - f.Write(" {0}-{1}-clean", proj.Name, conf.Name); - f.WriteLine(); - f.WriteLine(); - } - } - - private void WriteSolution(SolutionNode solution) - { - m_Kernel.Log.Write("Creating makefile for {0}", solution.Name); - m_Kernel.CurrentWorkingDirectory.Push(); - - string file = "Makefile";// Helper.MakeFilePath(solution.FullPath, solution.Name, "make"); - StreamWriter f = new StreamWriter(file); - - Helper.SetCurrentDir(Path.GetDirectoryName(file)); - - using (f) - { - WriteIntro(f, solution); - WritePhony(f, solution); - - foreach (ProjectNode project in solution.Projects) - { - m_Kernel.Log.Write("...Creating Project: {0}", project.Name); - WriteProject(f, solution, project); - } - } - - m_Kernel.Log.Write(""); - m_Kernel.CurrentWorkingDirectory.Pop(); - } - - private void CleanSolution(SolutionNode solution) - { - m_Kernel.Log.Write("Cleaning makefile for {0}", solution.Name); - - string file = Helper.MakeFilePath(solution.FullPath, solution.Name, "make"); - Helper.DeleteIfExists(file); - - m_Kernel.Log.Write(""); - } - - #endregion - - #region ITarget Members - - public void Write(Kernel kern) - { - m_Kernel = kern; - foreach (SolutionNode solution in kern.Solutions) - WriteSolution(solution); - m_Kernel = null; - } - - public virtual void Clean(Kernel kern) - { - m_Kernel = kern; - foreach (SolutionNode sol in kern.Solutions) - CleanSolution(sol); - m_Kernel = null; - } - - public string Name - { - get - { - return "makefile"; - } - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Targets/MonoDevelopTarget.cs b/Prebuild/src/Core/Targets/MonoDevelopTarget.cs deleted file mode 100644 index c8401fd42a..0000000000 --- a/Prebuild/src/Core/Targets/MonoDevelopTarget.cs +++ /dev/null @@ -1,464 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Collections; -using System.Collections.Specialized; -using System.IO; -using System.Reflection; -using System.Text.RegularExpressions; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Nodes; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core.Targets -{ - /// - /// - /// - [Target("monodev")] - public class MonoDevelopTarget : ITarget - { - #region Fields - - private Kernel m_Kernel; - - #endregion - - #region Private Methods - - private static string PrependPath(string path) - { - string tmpPath = Helper.NormalizePath(path, '/'); - Regex regex = new Regex(@"(\w):/(\w+)"); - Match match = regex.Match(tmpPath); - if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/') - { - tmpPath = Helper.NormalizePath(tmpPath); - } - else - { - tmpPath = Helper.NormalizePath("./" + tmpPath); - } - - return tmpPath; - } - - private static string BuildReference(SolutionNode solution, ReferenceNode refr) - { - string ret = ""; - } - else - { - ProjectNode project = (ProjectNode)refr.Parent; - string fileRef = FindFileReference(refr.Name, project); - - if(refr.Path != null || fileRef != null) - { - ret += "Assembly\" refto=\""; - - string finalPath = (refr.Path != null) ? Helper.MakeFilePath(refr.Path, refr.Name, "dll") : fileRef; - - ret += finalPath; - ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />"; - return ret; - } - - ret += "Gac\""; - ret += " localcopy=\"" + refr.LocalCopy.ToString() + "\""; - ret += " refto=\""; - try - { - /* - Day changed to 28 Mar 2007 - ... - 08:09 < cj> is there anything that replaces Assembly.LoadFromPartialName() ? - 08:09 < jonp> no - 08:10 < jonp> in their infinite wisdom [sic], microsoft decided that the - ability to load any assembly version by-name was an inherently - bad idea - 08:11 < cj> I'm thinking of a bunch of four-letter words right now... - 08:11 < cj> security through making it difficult for the developer!!! - 08:12 < jonp> just use the Obsolete API - 08:12 < jonp> it should still work - 08:12 < cj> alrighty. - 08:12 < jonp> you just get warnings when using it - */ - Assembly assem = Assembly.LoadWithPartialName(refr.Name); - ret += assem.FullName; - //ret += refr.Name; - } - catch (System.NullReferenceException e) - { - e.ToString(); - ret += refr.Name; - } - ret += "\" />"; - } - - return ret; - } - - private static string FindFileReference(string refName, ProjectNode project) - { - foreach(ReferencePathNode refPath in project.ReferencePaths) - { - string fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll"); - - if(File.Exists(fullPath)) - { - return fullPath; - } - } - - return null; - } - - /// - /// Gets the XML doc file. - /// - /// The project. - /// The conf. - /// - public static string GenerateXmlDocFile(ProjectNode project, ConfigurationNode conf) - { - if( conf == null ) - { - throw new ArgumentNullException("conf"); - } - if( project == null ) - { - throw new ArgumentNullException("project"); - } - string docFile = (string)conf.Options["XmlDocFile"]; - if(docFile != null && docFile.Length == 0)//default to assembly name if not specified - { - return "False"; - } - return "True"; - } - - private void WriteProject(SolutionNode solution, ProjectNode project) - { - string csComp = "Mcs"; - string netRuntime = "Mono"; - if(project.Runtime == ClrRuntime.Microsoft) - { - csComp = "Csc"; - netRuntime = "MsNet"; - } - - string projFile = Helper.MakeFilePath(project.FullPath, project.Name, "mdp"); - StreamWriter ss = new StreamWriter(projFile); - - m_Kernel.CurrentWorkingDirectory.Push(); - Helper.SetCurrentDir(Path.GetDirectoryName(projFile)); - - using(ss) - { - ss.WriteLine( - "", - project.Name, - project.RootNamespace - ); - - int count = 0; - - ss.WriteLine(" ", solution.ActiveConfig); - - foreach(ConfigurationNode conf in project.Configurations) - { - ss.WriteLine(" ", conf.Name); - ss.Write(" "); - - ss.Write(" "); - - ss.Write(" "); - - ss.Write(" "); - ss.WriteLine(" "); - - count++; - } - ss.WriteLine(" "); - - ss.Write(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - - ss.WriteLine(" "); - foreach(string file in project.Files) - { - string buildAction = "Compile"; - switch(project.Files.GetBuildAction(file)) - { - case BuildAction.None: - buildAction = "Nothing"; - break; - - case BuildAction.Content: - buildAction = "Exclude"; - break; - - case BuildAction.EmbeddedResource: - buildAction = "EmbedAsResource"; - break; - - default: - buildAction = "Compile"; - break; - } - - // Sort of a hack, we try and resolve the path and make it relative, if we can. - string filePath = PrependPath(file); - ss.WriteLine(" ", filePath, buildAction); - } - ss.WriteLine(" "); - - ss.WriteLine(" "); - foreach(ReferenceNode refr in project.References) - { - ss.WriteLine(" {0}", BuildReference(solution, refr)); - } - ss.WriteLine(" "); - - - ss.WriteLine(""); - } - - m_Kernel.CurrentWorkingDirectory.Pop(); - } - - private void WriteCombine(SolutionNode solution) - { - m_Kernel.Log.Write("Creating MonoDevelop combine and project files"); - foreach(ProjectNode project in solution.Projects) - { - if(m_Kernel.AllowProject(project.FilterGroups)) - { - m_Kernel.Log.Write("...Creating project: {0}", project.Name); - WriteProject(solution, project); - } - } - - m_Kernel.Log.Write(""); - string combFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "mds"); - StreamWriter ss = new StreamWriter(combFile); - - m_Kernel.CurrentWorkingDirectory.Push(); - Helper.SetCurrentDir(Path.GetDirectoryName(combFile)); - - int count = 0; - - using(ss) - { - ss.WriteLine("", solution.Name); - - count = 0; - foreach(ConfigurationNode conf in solution.Configurations) - { - if(count == 0) - { - ss.WriteLine(" ", conf.Name); - } - - ss.WriteLine(" ", conf.Name); - foreach(ProjectNode project in solution.Projects) - { - ss.WriteLine(" ", project.Name, conf.Name); - } - ss.WriteLine(" "); - - count++; - } - ss.WriteLine(" "); - - count = 0; - - foreach(ProjectNode project in solution.Projects) - { - if(count == 0) - ss.WriteLine(" ", project.Name); - - ss.WriteLine(" ", project.Name); - count++; - } - ss.WriteLine(" "); - - ss.WriteLine(" "); - foreach(ProjectNode project in solution.Projects) - { - string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); - ss.WriteLine(" ", - Helper.MakeFilePath(path, project.Name, "mdp")); - } - ss.WriteLine(" "); - - ss.WriteLine(""); - } - - m_Kernel.CurrentWorkingDirectory.Pop(); - } - - private void CleanProject(ProjectNode project) - { - m_Kernel.Log.Write("...Cleaning project: {0}", project.Name); - string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, "mdp"); - Helper.DeleteIfExists(projectFile); - } - - private void CleanSolution(SolutionNode solution) - { - m_Kernel.Log.Write("Cleaning MonoDevelop combine and project files for", solution.Name); - - string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "mds"); - Helper.DeleteIfExists(slnFile); - - foreach(ProjectNode project in solution.Projects) - { - CleanProject(project); - } - - m_Kernel.Log.Write(""); - } - - #endregion - - #region ITarget Members - - /// - /// Writes the specified kern. - /// - /// The kern. - public void Write(Kernel kern) - { - if( kern == null ) - { - throw new ArgumentNullException("kern"); - } - m_Kernel = kern; - foreach(SolutionNode solution in kern.Solutions) - { - WriteCombine(solution); - } - m_Kernel = null; - } - - /// - /// Cleans the specified kern. - /// - /// The kern. - public virtual void Clean(Kernel kern) - { - if( kern == null ) - { - throw new ArgumentNullException("kern"); - } - m_Kernel = kern; - foreach(SolutionNode sol in kern.Solutions) - { - CleanSolution(sol); - } - m_Kernel = null; - } - - /// - /// Gets the name. - /// - /// The name. - public string Name - { - get - { - return "sharpdev"; - } - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Targets/NAntTarget.cs b/Prebuild/src/Core/Targets/NAntTarget.cs deleted file mode 100644 index 9a6ee17819..0000000000 --- a/Prebuild/src/Core/Targets/NAntTarget.cs +++ /dev/null @@ -1,738 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004 - 2008 -Matthew Holmes (matthew@wildfiregames.com), -Dan Moorehead (dan05a@gmail.com), -C.J. Adams-Collier (cjac@colliertech.org), - -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 of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ - -#endregion - -using System; -using System.Collections; -using System.Collections.Specialized; -using System.IO; -using System.Reflection; -using System.Text.RegularExpressions; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Nodes; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core.Targets -{ - /// - /// - /// - [Target("nant")] - public class NAntTarget : ITarget - { - #region Fields - - private Kernel m_Kernel; - - #endregion - - #region Private Methods - - private static string PrependPath(string path) - { - string tmpPath = Helper.NormalizePath(path, '/'); - Regex regex = new Regex(@"(\w):/(\w+)"); - Match match = regex.Match(tmpPath); - //if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/') - //{ - tmpPath = Helper.NormalizePath(tmpPath); - //} - // else - // { - // tmpPath = Helper.NormalizePath("./" + tmpPath); - // } - - return tmpPath; - } - - private static string BuildReference(SolutionNode solution, ProjectNode currentProject, ReferenceNode refr) - { - - if (!String.IsNullOrEmpty(refr.Path)) - { - return refr.Path; - } - - if (solution.ProjectsTable.ContainsKey(refr.Name)) - { - ProjectNode projectRef = (ProjectNode) solution.ProjectsTable[refr.Name]; - string finalPath = - Helper.NormalizePath(refr.Name + GetProjectExtension(projectRef), '/'); - return finalPath; - } - - ProjectNode project = (ProjectNode) refr.Parent; - - // Do we have an explicit file reference? - string fileRef = FindFileReference(refr.Name, project); - if (fileRef != null) - { - return fileRef; - } - - // Is there an explicit path in the project ref? - if (refr.Path != null) - { - return Helper.NormalizePath(refr.Path + "/" + refr.Name + GetProjectExtension(project), '/'); - } - - // No, it's an extensionless GAC ref, but nant needs the .dll extension anyway - return refr.Name + ".dll"; - } - - public static string GetRefFileName(string refName) - { - if (ExtensionSpecified(refName)) - { - return refName; - } - else - { - return refName + ".dll"; - } - } - - private static bool ExtensionSpecified(string refName) - { - return refName.EndsWith(".dll") || refName.EndsWith(".exe"); - } - - private static string GetProjectExtension(ProjectNode project) - { - string extension = ".dll"; - if (project.Type == ProjectType.Exe || project.Type == ProjectType.WinExe) - { - extension = ".exe"; - } - return extension; - } - - private static string FindFileReference(string refName, ProjectNode project) - { - foreach (ReferencePathNode refPath in project.ReferencePaths) - { - string fullPath = Helper.MakeFilePath(refPath.Path, refName); - - if (File.Exists(fullPath)) - { - return fullPath; - } - - fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll"); - - if (File.Exists(fullPath)) - { - return fullPath; - } - - fullPath = Helper.MakeFilePath(refPath.Path, refName, "exe"); - - if (File.Exists(fullPath)) - { - return fullPath; - } - } - - return null; - } - - /// - /// Gets the XML doc file. - /// - /// The project. - /// The conf. - /// - public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf) - { - if (conf == null) - { - throw new ArgumentNullException("conf"); - } - if (project == null) - { - throw new ArgumentNullException("project"); - } - string docFile = (string)conf.Options["XmlDocFile"]; - // if(docFile != null && docFile.Length == 0)//default to assembly name if not specified - // { - // return Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml"; - // } - return docFile; - } - - private void WriteProject(SolutionNode solution, ProjectNode project) - { - string projFile = Helper.MakeFilePath(project.FullPath, project.Name + GetProjectExtension(project), "build"); - StreamWriter ss = new StreamWriter(projFile); - - m_Kernel.CurrentWorkingDirectory.Push(); - Helper.SetCurrentDir(Path.GetDirectoryName(projFile)); - bool hasDoc = false; - - using (ss) - { - ss.WriteLine(""); - ss.WriteLine("", project.Name); - ss.WriteLine(" ", "build"); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - foreach (ReferenceNode refr in project.References) - { - if (refr.LocalCopy) - { - ss.WriteLine(" ", '/')); - } - } - - ss.WriteLine(" "); - ss.WriteLine(" "); - if (project.ConfigFile != null && project.ConfigFile.Length!=0) - { - ss.Write(" "); - } - - // Add the content files to just be copied - ss.WriteLine(" {0}", ""); - ss.WriteLine(" {0}", ""); - - foreach (string file in project.Files) - { - // Ignore if we aren't content - if (project.Files.GetBuildAction(file) != BuildAction.Content) - continue; - - // Create a include tag - ss.WriteLine(" {0}", ""); - } - - ss.WriteLine(" {0}", ""); - ss.WriteLine(" {0}", ""); - - ss.Write(" "); - ss.WriteLine(" ", project.RootNamespace); - foreach (string file in project.Files) - { - switch (project.Files.GetBuildAction(file)) - { - case BuildAction.EmbeddedResource: - ss.WriteLine(" {0}", ""); - break; - default: - if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings) - { - ss.WriteLine(" ", file.Substring(0, file.LastIndexOf('.')) + ".resx"); - } - break; - } - } - //if (project.Files.GetSubType(file).ToString() != "Code") - //{ - // ps.WriteLine(" ", file.Substring(0, file.LastIndexOf('.')) + ".resx"); - - ss.WriteLine(" "); - ss.WriteLine(" "); - foreach (string file in project.Files) - { - switch (project.Files.GetBuildAction(file)) - { - case BuildAction.Compile: - ss.WriteLine(" "); - break; - default: - break; - } - } - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - foreach(ReferencePathNode refPath in project.ReferencePaths) - { - ss.WriteLine(" "); - } - ss.WriteLine(" "); - foreach (ReferenceNode refr in project.References) - { - string path = Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReference(solution, project, refr)), '/'); - ss.WriteLine(" "); - } - ss.WriteLine(" "); - - ss.WriteLine(" "); - - foreach (ConfigurationNode conf in project.Configurations) - { - if (!String.IsNullOrEmpty(conf.Options.OutputPath)) - { - string targetDir = Helper.NormalizePath(conf.Options.OutputPath, '/'); - - ss.WriteLine(" "); - - ss.WriteLine(" "); - - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - break; - } - } - - ss.WriteLine(" "); - - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - - ss.WriteLine(" "); - if (hasDoc) - { - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.Write(" "); - } - else - { - ss.WriteLine(".exe\" />"); - } - - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - // foreach(ReferenceNode refr in project.References) - // { - // string path = Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReferencePath(solution, refr)), '/'); - // if (path != "") - // { - // ss.WriteLine(" ", path); - // } - // } - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - } - ss.WriteLine(" "); - ss.WriteLine(""); - } - m_Kernel.CurrentWorkingDirectory.Pop(); - } - - private void WriteCombine(SolutionNode solution) - { - m_Kernel.Log.Write("Creating NAnt build files"); - foreach (ProjectNode project in solution.Projects) - { - if (m_Kernel.AllowProject(project.FilterGroups)) - { - m_Kernel.Log.Write("...Creating project: {0}", project.Name); - WriteProject(solution, project); - } - } - - m_Kernel.Log.Write(""); - string combFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "build"); - StreamWriter ss = new StreamWriter(combFile); - - m_Kernel.CurrentWorkingDirectory.Push(); - Helper.SetCurrentDir(Path.GetDirectoryName(combFile)); - - using (ss) - { - ss.WriteLine(""); - ss.WriteLine("", solution.Name); - ss.WriteLine(" "); - ss.WriteLine(); - - //ss.WriteLine(" "); - //ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - - // actually use active config out of prebuild.xml - ss.WriteLine(" ", solution.ActiveConfig); - - foreach (ConfigurationNode conf in solution.Configurations) - { - ss.WriteLine(); - ss.WriteLine(" ", conf.Name); - ss.WriteLine(" ", conf.Name); - ss.WriteLine(" ", conf.Options["DebugInformation"].ToString().ToLower()); - ss.WriteLine(" "); - ss.WriteLine(); - } - - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(); - - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(); - - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(); - - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(); - - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(); - - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(); - - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(); - - - // sdague - ok, this is an ugly hack, but what it lets - // us do is native include of files into the nant - // created files from all .nant/*include files. This - // lets us keep using prebuild, but allows for - // extended nant targets to do build and the like. - - try - { - Regex re = new Regex(".include$"); - DirectoryInfo nantdir = new DirectoryInfo(".nant"); - foreach (FileSystemInfo item in nantdir.GetFileSystemInfos()) - { - if (item is DirectoryInfo) { } - else if (item is FileInfo) - { - if (re.Match(((FileInfo)item).FullName) != - System.Text.RegularExpressions.Match.Empty) - { - Console.WriteLine("Including file: " + ((FileInfo)item).FullName); - - using (FileStream fs = new FileStream(((FileInfo)item).FullName, - FileMode.Open, - FileAccess.Read, - FileShare.None)) - { - using (StreamReader sr = new StreamReader(fs)) - { - ss.WriteLine("", ((FileInfo)item).FullName); - while (sr.Peek() != -1) - { - ss.WriteLine(sr.ReadLine()); - } - ss.WriteLine(); - } - } - } - } - } - } - catch { } - // ss.WriteLine(" "); - // ss.WriteLine(" "); - // ss.WriteLine(" ", solution.Name, solution.Version); - // ss.WriteLine(" "); - - // ss.WriteLine(" "); - // // ss.WriteLine(" "); - // ss.WriteLine(" "); - // ss.WriteLine(" "); - // ss.WriteLine(" "); - // ss.WriteLine(" "); - ss.WriteLine(); - - - ss.WriteLine(" "); - ss.WriteLine(" "); - //ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - foreach (ProjectNode project in solution.Projects) - { - string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); - ss.Write(" "); - } - ss.WriteLine(" "); - ss.WriteLine(); - - ss.WriteLine(" "); - - foreach (ProjectNode project in solution.ProjectsTableOrder) - { - string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); - ss.Write(" "); - } - ss.WriteLine(" "); - ss.WriteLine(); - - ss.WriteLine(" "); - ss.WriteLine(); - ss.WriteLine(" "); - ss.WriteLine(); - //ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(); - - ss.WriteLine(" "); - ss.WriteLine(" "); - foreach (ProjectNode project in solution.Projects) - { - string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); - ss.Write(" "); - } - ss.WriteLine(" "); - ss.WriteLine(); - ss.WriteLine(""); - } - - m_Kernel.CurrentWorkingDirectory.Pop(); - } - - private void CleanProject(ProjectNode project) - { - m_Kernel.Log.Write("...Cleaning project: {0}", project.Name); - string projectFile = Helper.MakeFilePath(project.FullPath, project.Name + GetProjectExtension(project), "build"); - Helper.DeleteIfExists(projectFile); - } - - private void CleanSolution(SolutionNode solution) - { - m_Kernel.Log.Write("Cleaning NAnt build files for", solution.Name); - - string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "build"); - Helper.DeleteIfExists(slnFile); - - foreach (ProjectNode project in solution.Projects) - { - CleanProject(project); - } - - m_Kernel.Log.Write(""); - } - - #endregion - - #region ITarget Members - - /// - /// Writes the specified kern. - /// - /// The kern. - public void Write(Kernel kern) - { - if (kern == null) - { - throw new ArgumentNullException("kern"); - } - m_Kernel = kern; - foreach (SolutionNode solution in kern.Solutions) - { - WriteCombine(solution); - } - m_Kernel = null; - } - - /// - /// Cleans the specified kern. - /// - /// The kern. - public virtual void Clean(Kernel kern) - { - if (kern == null) - { - throw new ArgumentNullException("kern"); - } - m_Kernel = kern; - foreach (SolutionNode sol in kern.Solutions) - { - CleanSolution(sol); - } - m_Kernel = null; - } - - /// - /// Gets the name. - /// - /// The name. - public string Name - { - get - { - return "nant"; - } - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Targets/SharpDevelop2Target.cs b/Prebuild/src/Core/Targets/SharpDevelop2Target.cs deleted file mode 100644 index 66dd1bc6f6..0000000000 --- a/Prebuild/src/Core/Targets/SharpDevelop2Target.cs +++ /dev/null @@ -1,82 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; - -using Prebuild.Core.Attributes; - -namespace Prebuild.Core.Targets -{ - /// - /// - /// - [Target("sharpdev2")] - public class SharpDevelop2Target : VS2005Target - { - #region Properties - public override string VersionName - { - get - { - return "SharpDevelop2"; - } - } - #endregion - - #region Public Methods - - /// - /// Writes the specified kern. - /// - /// The kern. - public override void Write(Kernel kern) - { - base.Write(kern); - } - - /// - /// Cleans the specified kern. - /// - /// The kern. - public override void Clean(Kernel kern) - { - base.Clean(kern); - } - - /// - /// Gets the name. - /// - /// The name. - public override string Name - { - get - { - return "sharpdev2"; - } - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Targets/SharpDevelopTarget.cs b/Prebuild/src/Core/Targets/SharpDevelopTarget.cs deleted file mode 100644 index cf7ce0260b..0000000000 --- a/Prebuild/src/Core/Targets/SharpDevelopTarget.cs +++ /dev/null @@ -1,428 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Collections; -using System.Collections.Specialized; -using System.IO; -using System.Text.RegularExpressions; -using System.Reflection; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Nodes; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core.Targets -{ - /// - /// - /// - [Target("sharpdev")] - public class SharpDevelopTarget : ITarget - { - #region Fields - - private Kernel m_Kernel; - - #endregion - - #region Private Methods - - private static string PrependPath(string path) - { - string tmpPath = Helper.NormalizePath(path, '/'); - Regex regex = new Regex(@"(\w):/(\w+)"); - Match match = regex.Match(tmpPath); - if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/') - { - tmpPath = Helper.NormalizePath(tmpPath); - } - else - { - tmpPath = Helper.NormalizePath("./" + tmpPath); - } - - return tmpPath; - } - - private static string BuildReference(SolutionNode solution, ReferenceNode refr) - { - string ret = ""; - } - else - { - ProjectNode project = (ProjectNode)refr.Parent; - string fileRef = FindFileReference(refr.Name, project); - - if(refr.Path != null || fileRef != null) - { - ret += "Assembly\" refto=\""; - - string finalPath = (refr.Path != null) ? Helper.MakeFilePath(refr.Path, refr.Name, "dll") : fileRef; - - ret += finalPath; - ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />"; - return ret; - } - - ret += "Gac\" refto=\""; - try - { - //Assembly assem = Assembly.Load(refr.Name); - ret += refr.Name;// assem.FullName; - } - catch (System.NullReferenceException e) - { - e.ToString(); - ret += refr.Name; - } - ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />"; - } - - return ret; - } - - private static string FindFileReference(string refName, ProjectNode project) - { - foreach(ReferencePathNode refPath in project.ReferencePaths) - { - string fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll"); - - if(File.Exists(fullPath)) - { - return fullPath; - } - } - - return null; - } - - /// - /// Gets the XML doc file. - /// - /// The project. - /// The conf. - /// - public static string GenerateXmlDocFile(ProjectNode project, ConfigurationNode conf) - { - if( conf == null ) - { - throw new ArgumentNullException("conf"); - } - if( project == null ) - { - throw new ArgumentNullException("project"); - } - string docFile = (string)conf.Options["XmlDocFile"]; - if(docFile != null && docFile.Length == 0)//default to assembly name if not specified - { - return "False"; - } - return "True"; - } - - private void WriteProject(SolutionNode solution, ProjectNode project) - { - string csComp = "Csc"; - string netRuntime = "MsNet"; - if(project.Runtime == ClrRuntime.Mono) - { - csComp = "Mcs"; - netRuntime = "Mono"; - } - - string projFile = Helper.MakeFilePath(project.FullPath, project.Name, "prjx"); - StreamWriter ss = new StreamWriter(projFile); - - m_Kernel.CurrentWorkingDirectory.Push(); - Helper.SetCurrentDir(Path.GetDirectoryName(projFile)); - - using(ss) - { - ss.WriteLine( - "", - project.Name, - project.RootNamespace - ); - - ss.WriteLine(" "); - foreach(string file in project.Files) - { - string buildAction = "Compile"; - switch(project.Files.GetBuildAction(file)) - { - case BuildAction.None: - buildAction = "Nothing"; - break; - - case BuildAction.Content: - buildAction = "Exclude"; - break; - - case BuildAction.EmbeddedResource: - buildAction = "EmbedAsResource"; - break; - - default: - buildAction = "Compile"; - break; - } - - // Sort of a hack, we try and resolve the path and make it relative, if we can. - string filePath = PrependPath(file); - ss.WriteLine(" ", filePath, buildAction); - } - ss.WriteLine(" "); - - ss.WriteLine(" "); - foreach(ReferenceNode refr in project.References) - { - ss.WriteLine(" {0}", BuildReference(solution, refr)); - } - ss.WriteLine(" "); - - ss.Write(" "); - - int count = 0; - - ss.WriteLine(" ", solution.ActiveConfig); - - foreach(ConfigurationNode conf in project.Configurations) - { - ss.Write(" "); - ss.Write(" "); - - ss.Write(" "); - - ss.Write(" "); - ss.WriteLine(" "); - - count++; - } - ss.WriteLine(" "); - ss.WriteLine(""); - } - - m_Kernel.CurrentWorkingDirectory.Pop(); - } - - private void WriteCombine(SolutionNode solution) - { - m_Kernel.Log.Write("Creating SharpDevelop combine and project files"); - foreach(ProjectNode project in solution.Projects) - { - if(m_Kernel.AllowProject(project.FilterGroups)) - { - m_Kernel.Log.Write("...Creating project: {0}", project.Name); - WriteProject(solution, project); - } - } - - m_Kernel.Log.Write(""); - string combFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "cmbx"); - StreamWriter ss = new StreamWriter(combFile); - - m_Kernel.CurrentWorkingDirectory.Push(); - Helper.SetCurrentDir(Path.GetDirectoryName(combFile)); - - using(ss) - { - ss.WriteLine("", solution.Name); - - int count = 0; - foreach(ProjectNode project in solution.Projects) - { - if(count == 0) - ss.WriteLine(" ", project.Name); - - ss.WriteLine(" ", project.Name); - count++; - } - ss.WriteLine(" "); - - ss.WriteLine(" "); - foreach(ProjectNode project in solution.Projects) - { - string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); - ss.WriteLine(" ", - Helper.MakeFilePath(path, project.Name, "prjx")); - } - ss.WriteLine(" "); - - count = 0; - foreach(ConfigurationNode conf in solution.Configurations) - { - if(count == 0) - { - ss.WriteLine(" ", conf.Name); - } - - ss.WriteLine(" ", conf.Name); - foreach(ProjectNode project in solution.Projects) - { - ss.WriteLine(" ", project.Name, conf.Name); - } - ss.WriteLine(" "); - - count++; - } - ss.WriteLine(" "); - ss.WriteLine(""); - } - - m_Kernel.CurrentWorkingDirectory.Pop(); - } - - private void CleanProject(ProjectNode project) - { - m_Kernel.Log.Write("...Cleaning project: {0}", project.Name); - string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, "prjx"); - Helper.DeleteIfExists(projectFile); - } - - private void CleanSolution(SolutionNode solution) - { - m_Kernel.Log.Write("Cleaning SharpDevelop combine and project files for", solution.Name); - - string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "cmbx"); - Helper.DeleteIfExists(slnFile); - - foreach(ProjectNode project in solution.Projects) - { - CleanProject(project); - } - - m_Kernel.Log.Write(""); - } - - #endregion - - #region ITarget Members - - /// - /// Writes the specified kern. - /// - /// The kern. - public void Write(Kernel kern) - { - if( kern == null ) - { - throw new ArgumentNullException("kern"); - } - m_Kernel = kern; - foreach(SolutionNode solution in kern.Solutions) - { - WriteCombine(solution); - } - m_Kernel = null; - } - - /// - /// Cleans the specified kern. - /// - /// The kern. - public virtual void Clean(Kernel kern) - { - if( kern == null ) - { - throw new ArgumentNullException("kern"); - } - m_Kernel = kern; - foreach(SolutionNode sol in kern.Solutions) - { - CleanSolution(sol); - } - m_Kernel = null; - } - - /// - /// Gets the name. - /// - /// The name. - public string Name - { - get - { - return "sharpdev"; - } - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Targets/ToolInfo.cs b/Prebuild/src/Core/Targets/ToolInfo.cs deleted file mode 100644 index 935c6744db..0000000000 --- a/Prebuild/src/Core/Targets/ToolInfo.cs +++ /dev/null @@ -1,197 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Prebuild.Core.Targets -{ - /// - /// - /// - public struct ToolInfo - { - string name; - string guid; - string fileExtension; - string xmlTag; - string importProject; - - /// - /// Gets or sets the name. - /// - /// The name. - public string Name - { - get - { - return name; - } - set - { - name = value; - } - } - - /// - /// Gets or sets the GUID. - /// - /// The GUID. - public string Guid - { - get - { - return guid; - } - set - { - guid = value; - } - } - - /// - /// Gets or sets the file extension. - /// - /// The file extension. - public string FileExtension - { - get - { - return fileExtension; - } - set - { - fileExtension = value; - } - } - public string LanguageExtension - { - get - { - switch (this.Name) - { - case "C#": - return ".cs"; - case "VisualBasic": - return ".vb"; - case "Boo": - return ".boo"; - default: - return ".cs"; - } - } - } - /// - /// Gets or sets the XML tag. - /// - /// The XML tag. - public string XmlTag - { - get - { - return xmlTag; - } - set - { - xmlTag = value; - } - } - - /// - /// Gets or sets the import project property. - /// - /// The ImportProject tag. - public string ImportProject - { - get - { - return importProject; - } - set - { - importProject = value; - } - } - - /// - /// Initializes a new instance of the class. - /// - /// The name. - /// The GUID. - /// The file extension. - /// The XML. - /// The import project. - public ToolInfo(string name, string guid, string fileExtension, string xml, string importProject) - { - this.name = name; - this.guid = guid; - this.fileExtension = fileExtension; - this.xmlTag = xml; - this.importProject = importProject; - } - - /// - /// Initializes a new instance of the class. - /// - /// The name. - /// The GUID. - /// The file extension. - /// The XML. - public ToolInfo(string name, string guid, string fileExtension, string xml) - { - this.name = name; - this.guid = guid; - this.fileExtension = fileExtension; - this.xmlTag = xml; - this.importProject = "$(MSBuildBinPath)\\Microsoft." + xml + ".Targets"; - } - - /// - /// Equals operator - /// - /// ToolInfo to compare - /// true if toolInfos are equal - public override bool Equals(object obj) - { - if (obj == null) - { - throw new ArgumentNullException("obj"); - } - if (obj.GetType() != typeof(ToolInfo)) - return false; - - ToolInfo c = (ToolInfo)obj; - return ((this.name == c.name) && (this.guid == c.guid) && (this.fileExtension == c.fileExtension) && (this.importProject == c.importProject)); - } - - /// - /// Equals operator - /// - /// ToolInfo to compare - /// ToolInfo to compare - /// True if toolInfos are equal - public static bool operator ==(ToolInfo c1, ToolInfo c2) - { - return ((c1.name == c2.name) && (c1.guid == c2.guid) && (c1.fileExtension == c2.fileExtension) && (c1.importProject == c2.importProject) && (c1.xmlTag == c2.xmlTag)); - } - - /// - /// Not equals operator - /// - /// ToolInfo to compare - /// ToolInfo to compare - /// True if toolInfos are not equal - public static bool operator !=(ToolInfo c1, ToolInfo c2) - { - return !(c1 == c2); - } - - /// - /// Hash Code - /// - /// Hash code - public override int GetHashCode() - { - return name.GetHashCode() ^ guid.GetHashCode() ^ this.fileExtension.GetHashCode() ^ this.importProject.GetHashCode() ^ this.xmlTag.GetHashCode(); - - } - } -} diff --git a/Prebuild/src/Core/Targets/VS2002Target.cs b/Prebuild/src/Core/Targets/VS2002Target.cs deleted file mode 100644 index 2292624473..0000000000 --- a/Prebuild/src/Core/Targets/VS2002Target.cs +++ /dev/null @@ -1,87 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; - -using Prebuild.Core.Attributes; - -namespace Prebuild.Core.Targets -{ - /// - /// - /// - [Target("vs2002")] - public class VS2002Target : VS2003Target - { - #region Private Methods - - private void SetVS2002() - { - this.SolutionVersion = "7.00"; - this.ProductVersion = "7.0.9254"; - this.SchemaVersion = "1.0"; - this.VersionName = "2002"; - this.Version = VSVersion.VS70; - } - - #endregion - - #region Public Methods - - /// - /// Writes the specified kern. - /// - /// The kern. - public override void Write(Kernel kern) - { - SetVS2002(); - base.Write(kern); - } - - /// - /// Cleans the specified kern. - /// - /// The kern. - public override void Clean(Kernel kern) - { - SetVS2002(); - base.Clean(kern); - } - - /// - /// Gets the name. - /// - /// The name. - public override string Name - { - get - { - return "vs2002"; - } - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Targets/VS2003Target.cs b/Prebuild/src/Core/Targets/VS2003Target.cs deleted file mode 100644 index 1bcb7dce0d..0000000000 --- a/Prebuild/src/Core/Targets/VS2003Target.cs +++ /dev/null @@ -1,602 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Collections; -using System.Collections.Specialized; -using System.IO; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Nodes; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core.Targets -{ - [Target("vs2003")] - public class VS2003Target : ITarget - { - - #region Fields - - string solutionVersion = "8.00"; - string productVersion = "7.10.3077"; - string schemaVersion = "2.0"; - string versionName = "2003"; - VSVersion version = VSVersion.VS71; - - Hashtable m_Tools; - Kernel m_Kernel; - - /// - /// Gets or sets the solution version. - /// - /// The solution version. - protected string SolutionVersion - { - get - { - return this.solutionVersion; - } - set - { - this.solutionVersion = value; - } - } - /// - /// Gets or sets the product version. - /// - /// The product version. - protected string ProductVersion - { - get - { - return this.productVersion; - } - set - { - this.productVersion = value; - } - } - /// - /// Gets or sets the schema version. - /// - /// The schema version. - protected string SchemaVersion - { - get - { - return this.schemaVersion; - } - set - { - this.schemaVersion = value; - } - } - /// - /// Gets or sets the name of the version. - /// - /// The name of the version. - protected string VersionName - { - get - { - return this.versionName; - } - set - { - this.versionName = value; - } - } - /// - /// Gets or sets the version. - /// - /// The version. - protected VSVersion Version - { - get - { - return this.version; - } - set - { - this.version = value; - } - } - - #endregion - - #region Constructors - - /// - /// Initializes a new instance of the class. - /// - public VS2003Target() - { - m_Tools = new Hashtable(); - - m_Tools["C#"] = new ToolInfo("C#", "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}", "csproj", "CSHARP"); - m_Tools["VB.NET"] = new ToolInfo("VB.NET", "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}", "vbproj", "VisualBasic"); - } - - #endregion - - #region Private Methods - - private string MakeRefPath(ProjectNode project) - { - string ret = ""; - foreach(ReferencePathNode node in project.ReferencePaths) - { - try - { - string fullPath = Helper.ResolvePath(node.Path); - if(ret.Length < 1) - { - ret = fullPath; - } - else - { - ret += ";" + fullPath; - } - } - catch(ArgumentException) - { - m_Kernel.Log.Write(LogType.Warning, "Could not resolve reference path: {0}", node.Path); - } - } - - return ret; - } - - private void WriteProject(SolutionNode solution, ProjectNode project) - { - if(!m_Tools.ContainsKey(project.Language)) - { - throw new UnknownLanguageException("Unknown .NET language: " + project.Language); - } - - ToolInfo toolInfo = (ToolInfo)m_Tools[project.Language]; - string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension); - StreamWriter ps = new StreamWriter(projectFile); - - m_Kernel.CurrentWorkingDirectory.Push(); - Helper.SetCurrentDir(Path.GetDirectoryName(projectFile)); - - IEnumerator enumerator; - //ConfigurationNode scripts; - - using(ps) - { - ps.WriteLine(""); - ps.WriteLine(" <{0}", toolInfo.XmlTag); - ps.WriteLine("\t\t\t\tProjectType = \"Local\""); - ps.WriteLine("\t\t\t\tProductVersion = \"{0}\"", this.ProductVersion); - ps.WriteLine("\t\t\t\tSchemaVersion = \"{0}\"", this.SchemaVersion); - ps.WriteLine("\t\t\t\tProjectGuid = \"{{{0}}}\"", project.Guid.ToString().ToUpper()); - ps.WriteLine("\t\t>"); - - ps.WriteLine("\t\t\t\t"); - ps.WriteLine(" "); - - foreach(ConfigurationNode conf in project.Configurations) - { - ps.WriteLine("\t\t\t\t "); - } - - ps.WriteLine(" "); - - ps.WriteLine(" "); - foreach(ReferenceNode refr in project.References) - { - ps.WriteLine(" "); - } - ps.WriteLine(" "); - - ps.WriteLine(" "); - ps.WriteLine(" "); - - ps.WriteLine(" "); - - foreach(string file in project.Files) - { - string fileName = file.Replace(".\\", ""); - ps.WriteLine(" "); - - if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings) - { - ps.WriteLine(" "); - - } - } - ps.WriteLine(" "); - - ps.WriteLine(" "); - ps.WriteLine(" ", toolInfo.XmlTag); - ps.WriteLine(""); - } - - ps = new StreamWriter(projectFile + ".user"); - using(ps) - { - ps.WriteLine(""); - ps.WriteLine(" <{0}>", toolInfo.XmlTag); - ps.WriteLine(" "); - - ps.WriteLine(" ", MakeRefPath(project)); - foreach(ConfigurationNode conf in project.Configurations) - { - ps.WriteLine(" "); - } - ps.WriteLine(" "); - - ps.WriteLine(" "); - ps.WriteLine(" ", toolInfo.XmlTag); - ps.WriteLine(""); - } - - m_Kernel.CurrentWorkingDirectory.Pop(); - } - - /// - /// Gets the XML doc file. - /// - /// The project. - /// The conf. - /// - public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf) - { - if( conf == null ) - { - throw new ArgumentNullException("conf"); - } - if( project == null ) - { - throw new ArgumentNullException("project"); - } - // if(!(bool)conf.Options["GenerateXmlDocFile"]) //default to none, if the generate option is false - // { - // return string.Empty; - // } - - //default to "AssemblyName.xml" - //string defaultValue = Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml"; - //return (string)conf.Options["XmlDocFile", defaultValue]; - - //default to no XmlDocFile file - return (string)conf.Options["XmlDocFile", ""]; - } - - private void WriteSolution(SolutionNode solution) - { - m_Kernel.Log.Write("Creating Visual Studio {0} solution and project files", this.VersionName); - - foreach(ProjectNode project in solution.Projects) - { - if(m_Kernel.AllowProject(project.FilterGroups)) - { - m_Kernel.Log.Write("...Creating project: {0}", project.Name); - WriteProject(solution, project); - } - } - - m_Kernel.Log.Write(""); - string solutionFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln"); - StreamWriter ss = new StreamWriter(solutionFile); - - m_Kernel.CurrentWorkingDirectory.Push(); - Helper.SetCurrentDir(Path.GetDirectoryName(solutionFile)); - - using(ss) - { - ss.WriteLine("Microsoft Visual Studio Solution File, Format Version {0}", this.SolutionVersion); - foreach(ProjectNode project in solution.Projects) - { - if(!m_Tools.ContainsKey(project.Language)) - { - throw new UnknownLanguageException("Unknown .NET language: " + project.Language); - } - - ToolInfo toolInfo = (ToolInfo)m_Tools[project.Language]; - - string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); - ss.WriteLine("Project(\"{0}\") = \"{1}\", \"{2}\", \"{{{3}}}\"", - toolInfo.Guid, project.Name, Helper.MakeFilePath(path, project.Name, - toolInfo.FileExtension), project.Guid.ToString().ToUpper()); - - ss.WriteLine("\tProjectSection(ProjectDependencies) = postProject"); - ss.WriteLine("\tEndProjectSection"); - - ss.WriteLine("EndProject"); - } - - ss.WriteLine("Global"); - - ss.WriteLine("\tGlobalSection(SolutionConfiguration) = preSolution"); - foreach(ConfigurationNode conf in solution.Configurations) - { - ss.WriteLine("\t\t{0} = {0}", conf.Name); - } - ss.WriteLine("\tEndGlobalSection"); - - ss.WriteLine("\tGlobalSection(ProjectDependencies) = postSolution"); - foreach(ProjectNode project in solution.Projects) - { - for(int i = 0; i < project.References.Count; i++) - { - ReferenceNode refr = (ReferenceNode)project.References[i]; - if(solution.ProjectsTable.ContainsKey(refr.Name)) - { - ProjectNode refProject = (ProjectNode)solution.ProjectsTable[refr.Name]; - ss.WriteLine("\t\t({{{0}}}).{1} = ({{{2}}})", - project.Guid.ToString().ToUpper() - , i, - refProject.Guid.ToString().ToUpper() - ); - } - } - } - ss.WriteLine("\tEndGlobalSection"); - - ss.WriteLine("\tGlobalSection(ProjectConfiguration) = postSolution"); - foreach(ProjectNode project in solution.Projects) - { - foreach(ConfigurationNode conf in solution.Configurations) - { - ss.WriteLine("\t\t{{{0}}}.{1}.ActiveCfg = {1}|.NET", - project.Guid.ToString().ToUpper(), - conf.Name); - - ss.WriteLine("\t\t{{{0}}}.{1}.Build.0 = {1}|.NET", - project.Guid.ToString().ToUpper(), - conf.Name); - } - } - ss.WriteLine("\tEndGlobalSection"); - - if(solution.Files != null) - { - ss.WriteLine("\tGlobalSection(SolutionItems) = postSolution"); - foreach(string file in solution.Files) - { - ss.WriteLine("\t\t{0} = {0}", file); - } - ss.WriteLine("\tEndGlobalSection"); - } - - ss.WriteLine("\tGlobalSection(ExtensibilityGlobals) = postSolution"); - ss.WriteLine("\tEndGlobalSection"); - ss.WriteLine("\tGlobalSection(ExtensibilityAddIns) = postSolution"); - ss.WriteLine("\tEndGlobalSection"); - - ss.WriteLine("EndGlobal"); - } - - m_Kernel.CurrentWorkingDirectory.Pop(); - } - - private void CleanProject(ProjectNode project) - { - m_Kernel.Log.Write("...Cleaning project: {0}", project.Name); - - ToolInfo toolInfo = (ToolInfo)m_Tools[project.Language]; - string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension); - string userFile = projectFile + ".user"; - - Helper.DeleteIfExists(projectFile); - Helper.DeleteIfExists(userFile); - } - - private void CleanSolution(SolutionNode solution) - { - m_Kernel.Log.Write("Cleaning Visual Studio {0} solution and project files", this.VersionName, solution.Name); - - string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln"); - string suoFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "suo"); - - Helper.DeleteIfExists(slnFile); - Helper.DeleteIfExists(suoFile); - - foreach(ProjectNode project in solution.Projects) - { - CleanProject(project); - } - - m_Kernel.Log.Write(""); - } - - #endregion - - #region ITarget Members - - /// - /// Writes the specified kern. - /// - /// The kern. - public virtual void Write(Kernel kern) - { - if( kern == null ) - { - throw new ArgumentNullException("kern"); - } - m_Kernel = kern; - foreach(SolutionNode sol in m_Kernel.Solutions) - { - WriteSolution(sol); - } - m_Kernel = null; - } - - /// - /// Cleans the specified kern. - /// - /// The kern. - public virtual void Clean(Kernel kern) - { - if( kern == null ) - { - throw new ArgumentNullException("kern"); - } - m_Kernel = kern; - foreach(SolutionNode sol in m_Kernel.Solutions) - { - CleanSolution(sol); - } - m_Kernel = null; - } - - /// - /// Gets the name. - /// - /// The name. - public virtual string Name - { - get - { - return "vs2003"; - } - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Targets/VS2005Target.cs b/Prebuild/src/Core/Targets/VS2005Target.cs deleted file mode 100644 index 63461c9fe5..0000000000 --- a/Prebuild/src/Core/Targets/VS2005Target.cs +++ /dev/null @@ -1,149 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004 Matthew Holmes (matthew@wildfiregames.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Collections; -using System.Collections.Specialized; -using System.IO; -using System.Text; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Nodes; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core.Targets -{ - /// - /// - /// - [Target("vs2005")] - public class VS2005Target : VSGenericTarget - { - #region Inner Classes - - #endregion - - #region Fields - - string solutionVersion = "9.00"; - string productVersion = "8.0.50727"; - string schemaVersion = "2.0"; - string versionName = "Visual C# 2005"; - string name = "vs2005"; - - VSVersion version = VSVersion.VS80; - - public override string SolutionTag - { - get { return "# Visual Studio 2005"; } - } - - protected override string GetToolsVersionXml(FrameworkVersion frameworkVersion) - { - return string.Empty; - } - /// - /// Gets or sets the solution version. - /// - /// The solution version. - public override string SolutionVersion - { - get - { - return solutionVersion; - } - } - /// - /// Gets or sets the product version. - /// - /// The product version. - public override string ProductVersion - { - get - { - return productVersion; - } - } - /// - /// Gets or sets the schema version. - /// - /// The schema version. - public override string SchemaVersion - { - get - { - return schemaVersion; - } - } - /// - /// Gets or sets the name of the version. - /// - /// The name of the version. - public override string VersionName - { - get - { - return versionName; - } - } - /// - /// Gets or sets the version. - /// - /// The version. - public override VSVersion Version - { - get - { - return version; - } - } - /// - /// Gets the name. - /// - /// The name. - public override string Name - { - get - { - return name; - } - } - - #endregion - - #region Constructors - - /// - /// Initializes a new instance of the class. - /// - public VS2005Target() - : base() - { - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Targets/VS2008Target.cs b/Prebuild/src/Core/Targets/VS2008Target.cs deleted file mode 100644 index e685962b5a..0000000000 --- a/Prebuild/src/Core/Targets/VS2008Target.cs +++ /dev/null @@ -1,132 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Specialized; -using System.IO; -using System.Text; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Nodes; -using Prebuild.Core.Utilities; -using System.CodeDom.Compiler; - -namespace Prebuild.Core.Targets -{ - - /// - /// - /// - [Target("vs2008")] - public class VS2008Target : VSGenericTarget - { - #region Fields - string solutionVersion = "10.00"; - string productVersion = "9.0.21022"; - string schemaVersion = "2.0"; - string versionName = "Visual Studio 2008"; - string name = "vs2008"; - VSVersion version = VSVersion.VS90; - - Hashtable tools; - Kernel kernel; - - /// - /// Gets or sets the solution version. - /// - /// The solution version. - public override string SolutionVersion - { - get - { - return solutionVersion; - } - } - /// - /// Gets or sets the product version. - /// - /// The product version. - public override string ProductVersion - { - get - { - return productVersion; - } - } - /// - /// Gets or sets the schema version. - /// - /// The schema version. - public override string SchemaVersion - { - get - { - return schemaVersion; - } - } - /// - /// Gets or sets the name of the version. - /// - /// The name of the version. - public override string VersionName - { - get - { - return versionName; - } - } - /// - /// Gets or sets the version. - /// - /// The version. - public override VSVersion Version - { - get - { - return version; - } - } - /// - /// Gets the name. - /// - /// The name. - public override string Name - { - get - { - return name; - } - } - - protected override string GetToolsVersionXml(FrameworkVersion frameworkVersion) - { - switch (frameworkVersion) - { - case FrameworkVersion.v3_5: - return "ToolsVersion=\"3.5\""; - case FrameworkVersion.v3_0: - return "ToolsVersion=\"3.0\""; - default: - return "ToolsVersion=\"2.0\""; - } - } - - public override string SolutionTag - { - get { return "# Visual Studio 2008"; } - } - - #endregion - - #region Constructors - - /// - /// Initializes a new instance of the class. - /// - public VS2008Target() - : base() - { - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Targets/VS2010Target.cs b/Prebuild/src/Core/Targets/VS2010Target.cs deleted file mode 100644 index 8772d18595..0000000000 --- a/Prebuild/src/Core/Targets/VS2010Target.cs +++ /dev/null @@ -1,134 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Specialized; -using System.IO; -using System.Text; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Nodes; -using Prebuild.Core.Utilities; -using System.CodeDom.Compiler; - -namespace Prebuild.Core.Targets -{ - - /// - /// - /// - [Target("vs2010")] - public class VS2010Target : VSGenericTarget - { - #region Fields - string solutionVersion = "11.00"; - string productVersion = "9.0.21022"; - string schemaVersion = "2.0"; - string versionName = "Visual Studio 2010"; - string name = "vs2008"; - VSVersion version = VSVersion.VS10; - - Hashtable tools; - Kernel kernel; - - /// - /// Gets or sets the solution version. - /// - /// The solution version. - public override string SolutionVersion - { - get - { - return solutionVersion; - } - } - /// - /// Gets or sets the product version. - /// - /// The product version. - public override string ProductVersion - { - get - { - return productVersion; - } - } - /// - /// Gets or sets the schema version. - /// - /// The schema version. - public override string SchemaVersion - { - get - { - return schemaVersion; - } - } - /// - /// Gets or sets the name of the version. - /// - /// The name of the version. - public override string VersionName - { - get - { - return versionName; - } - } - /// - /// Gets or sets the version. - /// - /// The version. - public override VSVersion Version - { - get - { - return version; - } - } - /// - /// Gets the name. - /// - /// The name. - public override string Name - { - get - { - return name; - } - } - - protected override string GetToolsVersionXml(FrameworkVersion frameworkVersion) - { - switch (frameworkVersion) - { - case FrameworkVersion.v4_0: - return "ToolsVersion=\"4.0\""; - case FrameworkVersion.v3_5: - return "ToolsVersion=\"3.5\""; - case FrameworkVersion.v3_0: - return "ToolsVersion=\"3.0\""; - default: - return "ToolsVersion=\"2.0\""; - } - } - - public override string SolutionTag - { - get { return "# Visual Studio 2010"; } - } - - #endregion - - #region Constructors - - /// - /// Initializes a new instance of the class. - /// - public VS2010Target() - : base() - { - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Targets/VSGenericTarget.cs b/Prebuild/src/Core/Targets/VSGenericTarget.cs deleted file mode 100644 index fdcc2b909a..0000000000 --- a/Prebuild/src/Core/Targets/VSGenericTarget.cs +++ /dev/null @@ -1,887 +0,0 @@ -#region BSD License -/* -Copyright (c) 2008 Matthew Holmes (matthew@wildfiregames.com), John Anderson (sontek@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.IO; -using System.Text; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Nodes; -using Prebuild.Core.Utilities; -using System.CodeDom.Compiler; - -namespace Prebuild.Core.Targets -{ - - /// - /// - /// - public abstract class VSGenericTarget : ITarget - { - #region Fields - - readonly Hashtable tools = new Hashtable(); - Kernel kernel; - #endregion - - #region Properties - /// - /// Gets or sets the solution version. - /// - /// The solution version. - public abstract string SolutionVersion { get; } - /// - /// Gets or sets the product version. - /// - /// The product version. - public abstract string ProductVersion { get; } - /// - /// Gets or sets the schema version. - /// - /// The schema version. - public abstract string SchemaVersion { get; } - /// - /// Gets or sets the name of the version. - /// - /// The name of the version. - public abstract string VersionName { get; } - /// - /// Gets or sets the version. - /// - /// The version. - public abstract VSVersion Version { get; } - /// - /// Gets the name. - /// - /// The name. - public abstract string Name { get; } - - protected abstract string GetToolsVersionXml(FrameworkVersion version); - public abstract string SolutionTag { get; } - - #endregion - - #region Constructors - - /// - /// Initializes a new instance of the class. - /// - protected VSGenericTarget() - { - this.tools["C#"] = new ToolInfo("C#", "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}", "csproj", "CSHARP", "$(MSBuildBinPath)\\Microsoft.CSHARP.Targets"); - this.tools["Database"] = new ToolInfo("Database", "{4F174C21-8C12-11D0-8340-0000F80270F8}", "dbp", "UNKNOWN"); - this.tools["Boo"] = new ToolInfo("Boo", "{45CEA7DC-C2ED-48A6-ACE0-E16144C02365}", "booproj", "Boo", "$(BooBinPath)\\Boo.Microsoft.Build.targets"); - this.tools["VisualBasic"] = new ToolInfo("VisualBasic", "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}", "vbproj", "VisualBasic", "$(MSBuildBinPath)\\Microsoft.VisualBasic.Targets"); - this.tools["Folder"] = new ToolInfo("Folder", "{2150E333-8FDC-42A3-9474-1A3956D46DE8}", null, null); - } - - #endregion - - #region Private Methods - - private string MakeRefPath(ProjectNode project) - { - string ret = ""; - foreach (ReferencePathNode node in project.ReferencePaths) - { - try - { - string fullPath = Helper.ResolvePath(node.Path); - if (ret.Length < 1) - { - ret = fullPath; - } - else - { - ret += ";" + fullPath; - } - } - catch (ArgumentException) - { - this.kernel.Log.Write(LogType.Warning, "Could not resolve reference path: {0}", node.Path); - } - } - - return ret; - } - - private static ProjectNode FindProjectInSolution(string name, SolutionNode solution) - { - SolutionNode node = solution; - - while (node.Parent is SolutionNode) - node = node.Parent as SolutionNode; - - return FindProjectInSolutionRecursively(name, node); - } - - private static ProjectNode FindProjectInSolutionRecursively(string name, SolutionNode solution) - { - if (solution.ProjectsTable.ContainsKey(name)) - return (ProjectNode)solution.ProjectsTable[name]; - - foreach (SolutionNode child in solution.Solutions) - { - ProjectNode node = FindProjectInSolutionRecursively(name, child); - if (node != null) - return node; - } - - return null; - } - - private void WriteProject(SolutionNode solution, ProjectNode project) - { - if (!tools.ContainsKey(project.Language)) - { - throw new UnknownLanguageException("Unknown .NET language: " + project.Language); - } - - ToolInfo toolInfo = (ToolInfo)tools[project.Language]; - string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension); - StreamWriter ps = new StreamWriter(projectFile); - - kernel.CurrentWorkingDirectory.Push(); - Helper.SetCurrentDir(Path.GetDirectoryName(projectFile)); - - #region Project File - using (ps) - { - ps.WriteLine("", this.Version == VSVersion.VS10 ? "4.0" : "3.5"); - ps.WriteLine(" "); - ps.WriteLine(" Local"); - ps.WriteLine(" {0}", this.ProductVersion); - ps.WriteLine(" {0}", this.SchemaVersion); - ps.WriteLine(" {{{0}}}", project.Guid.ToString().ToUpper()); - - // Visual Studio has a hard coded guid for the project type - if (project.Type == ProjectType.Web) - ps.WriteLine(" {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}"); - ps.WriteLine(" Debug"); - ps.WriteLine(" AnyCPU"); - ps.WriteLine(" {0}", project.AppIcon); - ps.WriteLine(" "); - ps.WriteLine(" "); - ps.WriteLine(" {0}", project.AssemblyName); - foreach (ConfigurationNode conf in project.Configurations) - { - if (conf.Options.KeyFile != "") - { - ps.WriteLine(" {0}", conf.Options.KeyFile); - ps.WriteLine(" true"); - break; - } - } - ps.WriteLine(" JScript"); - ps.WriteLine(" Grid"); - ps.WriteLine(" IE50"); - ps.WriteLine(" false"); - ps.WriteLine(" {0}", project.FrameworkVersion.ToString().Replace("_", ".")); - - ps.WriteLine(" {0}", project.Type == ProjectType.Web ? ProjectType.Library.ToString() : project.Type.ToString()); - ps.WriteLine(" {0}", project.DesignerFolder); - ps.WriteLine(" {0}", project.RootNamespace); - ps.WriteLine(" {0}", project.StartupObject); - if (string.IsNullOrEmpty(project.DebugStartParameters)) - { - ps.WriteLine(" {0}", project.DebugStartParameters); - } - ps.WriteLine(" "); - ps.WriteLine(" "); - - ps.WriteLine(" "); - - foreach (ConfigurationNode conf in project.Configurations) - { - ps.Write(" ", conf.Name); - ps.WriteLine(" {0}", conf.Options["AllowUnsafe"]); - ps.WriteLine(" {0}", conf.Options["BaseAddress"]); - ps.WriteLine(" {0}", conf.Options["CheckUnderflowOverflow"]); - ps.WriteLine(" "); - ps.WriteLine(" "); - ps.WriteLine(" {0}", conf.Options["CompilerDefines"]); - ps.WriteLine(" {0}", Helper.NormalizePath(conf.Options["XmlDocFile"].ToString())); - ps.WriteLine(" {0}", conf.Options["DebugInformation"]); - ps.WriteLine(" {0}", conf.Options["FileAlignment"]); - ps.WriteLine(" {0}", conf.Options["OptimizeCode"]); - if (project.Type != ProjectType.Web) - ps.WriteLine(" {0}", - Helper.EndPath(Helper.NormalizePath(conf.Options["OutputPath"].ToString()))); - else - ps.WriteLine(" {0}", - Helper.EndPath(Helper.NormalizePath("bin\\"))); - - ps.WriteLine(" {0}", conf.Options["RegisterComInterop"]); - ps.WriteLine(" {0}", conf.Options["RemoveIntegerChecks"]); - ps.WriteLine(" {0}", conf.Options["WarningsAsErrors"]); - ps.WriteLine(" {0}", conf.Options["WarningLevel"]); - ps.WriteLine(" {0}", conf.Options["NoStdLib"]); - ps.WriteLine(" {0}", conf.Options["SuppressWarnings"]); - ps.WriteLine(" "); - } - - //ps.WriteLine(" "); - - List projectReferences = new List(); - List otherReferences = new List(); - - foreach (ReferenceNode refr in project.References) - { - ProjectNode projectNode = FindProjectInSolution(refr.Name, solution); - - if (projectNode == null) - otherReferences.Add(refr); - else - projectReferences.Add(projectNode); - } - // Assembly References - ps.WriteLine(" "); - - foreach (ReferenceNode refr in otherReferences) - { - ps.Write(" "); - ps.Write(" "); - ps.Write(refr.Name); - ps.WriteLine(""); - // TODO: Allow reference to *.exe files - ps.WriteLine(" {0}", refr.LocalCopy); - ps.WriteLine(" "); - } - ps.WriteLine(" "); - - //Project References - ps.WriteLine(" "); - foreach (ProjectNode projectReference in projectReferences) - { - ToolInfo tool = (ToolInfo)tools[projectReference.Language]; - if (tools == null) - throw new UnknownLanguageException(); - - string path = - Helper.MakePathRelativeTo(project.FullPath, - Helper.MakeFilePath(projectReference.FullPath, projectReference.Name, tool.FileExtension)); - ps.WriteLine(" ", path); - - // TODO: Allow reference to visual basic projects - ps.WriteLine(" {0}", projectReference.Name); - ps.WriteLine(" {0}", projectReference.Guid.ToString("B").ToUpper()); - ps.WriteLine(" {0}", tool.Guid.ToUpper()); - - ps.WriteLine(" False" ); - - ps.WriteLine(" "); - } - ps.WriteLine(" "); - - // ps.WriteLine(" "); - ps.WriteLine(" "); - - // ps.WriteLine(" "); - List list = new List(); - - foreach (string path in project.Files) - { - string lower = path.ToLower(); - if (lower.EndsWith(".resx")) - { - string codebehind = String.Format("{0}.Designer{1}", path.Substring(0, path.LastIndexOf('.')), toolInfo.LanguageExtension); - if (!list.Contains(codebehind)) - list.Add(codebehind); - } - } - - foreach (string file in project.Files) - { - // if (file == "Properties\\Bind.Designer.cs") - // { - // Console.WriteLine("Wait a minute!"); - // Console.WriteLine(project.Files.GetSubType(file).ToString()); - // } - - SubType subType = project.Files.GetSubType(file); - - if (subType != SubType.Code && subType != SubType.Settings && subType != SubType.Designer - && subType != SubType.CodeBehind) - { - ps.WriteLine(" ", file.Substring(0, file.LastIndexOf('.')) + ".resx"); - ps.WriteLine(" {0}", Path.GetFileName(file)); - ps.WriteLine(" Designer"); - ps.WriteLine(" "); - // - } - - if (subType == SubType.Designer) - { - ps.WriteLine(" ", file); - ps.WriteLine(" " + subType + ""); - ps.WriteLine(" ResXFileCodeGenerator"); - - string autogen_name = file.Substring(0, file.LastIndexOf('.')) + ".Designer.cs"; - string dependent_name = file.Substring(0, file.LastIndexOf('.')) + ".cs"; - - ps.WriteLine(" {0}", autogen_name); - - // Check for a parent .cs file with the same name as this designer file - if (File.Exists(dependent_name)) - ps.WriteLine(" {0}", Path.GetFileName(dependent_name)); - - ps.WriteLine(" "); - if (File.Exists(autogen_name)) - { - ps.WriteLine(" ", autogen_name); - ps.WriteLine(" True"); - ps.WriteLine(" True"); - - // If a parent .cs file exists, link this autogen file to it. Otherwise link - // to the designer file - if (File.Exists(dependent_name)) - ps.WriteLine(" {0}", Path.GetFileName(dependent_name)); - else - ps.WriteLine(" {0}", Path.GetFileName(file)); - - ps.WriteLine(" "); - } - list.Add(autogen_name); - } - if (subType == SubType.Settings) - { - ps.Write(" <{0} ", project.Files.GetBuildAction(file)); - ps.WriteLine("Include=\"{0}\">", file); - string fileName = Path.GetFileName(file); - if (project.Files.GetBuildAction(file) == BuildAction.None) - { - ps.WriteLine(" SettingsSingleFileGenerator"); - ps.WriteLine(" {0}", fileName.Substring(0, fileName.LastIndexOf('.')) + ".Designer.cs"); - } - else - { - ps.WriteLine(" Code"); - ps.WriteLine(" True"); - ps.WriteLine(" True"); - string fileNameShort = fileName.Substring(0, fileName.LastIndexOf('.')); - string fileNameShorter = fileNameShort.Substring(0, fileNameShort.LastIndexOf('.')); - ps.WriteLine(" {0}", Path.GetFileName(fileNameShorter + ".settings")); - } - ps.WriteLine(" ", project.Files.GetBuildAction(file)); - } - else if (subType != SubType.Designer) - { - string path = Helper.NormalizePath(file); - string path_lower = path.ToLower(); - - if (!list.Contains(file)) - { - ps.Write(" <{0} ", project.Files.GetBuildAction(path)); - - int startPos = 0; - if (project.Files.GetPreservePath(file)) - { - while ((@"./\").IndexOf(file.Substring(startPos, 1)) != -1) - startPos++; - - } - else - { - startPos = file.LastIndexOf(Path.GetFileName(path)); - } - - ps.WriteLine("Include=\"{0}\">", path); - - int last_period_index = file.LastIndexOf('.'); - string short_file_name = file.Substring(0, last_period_index); - string extension = Path.GetExtension(path); - string designer_format = string.Format(".designer{0}", extension); - - if (path_lower.EndsWith(designer_format)) - { - int designer_index = path_lower.IndexOf(designer_format); - string file_name = path.Substring(0, designer_index); - - if (File.Exists(file_name)) - ps.WriteLine(" {0}", Path.GetFileName(file_name)); - else if (File.Exists(file_name + ".resx")) - ps.WriteLine(" {0}", Path.GetFileName(file_name + ".resx")); - } - else if (subType == SubType.CodeBehind) - { - ps.WriteLine(" {0}", Path.GetFileName(short_file_name)); - } - if (project.Files.GetIsLink(file)) - { - string alias = project.Files.GetLinkPath(file); - alias += file.Substring(startPos); - alias = Helper.NormalizePath(alias); - ps.WriteLine(" {0}", alias); - } - else if (project.Files.GetBuildAction(file) != BuildAction.None) - { - if (project.Files.GetBuildAction(file) != BuildAction.EmbeddedResource) - { - ps.WriteLine(" {0}", subType); - } - } - - if (project.Files.GetCopyToOutput(file) != CopyToOutput.Never) - { - ps.WriteLine(" {0}", project.Files.GetCopyToOutput(file)); - } - - ps.WriteLine(" ", project.Files.GetBuildAction(file)); - } - } - } - - ps.WriteLine(" "); - ps.WriteLine(" "); - ps.WriteLine(" "); - ps.WriteLine(" "); - ps.WriteLine(" "); - ps.WriteLine(" "); - ps.WriteLine(" "); - ps.WriteLine(" "); - ps.WriteLine(""); - } - #endregion - - #region User File - - ps = new StreamWriter(projectFile + ".user"); - using (ps) - { - ps.WriteLine(""); - //ps.WriteLine( "" ); - //ps.WriteLine(" <{0}>", toolInfo.XMLTag); - //ps.WriteLine(" "); - ps.WriteLine(" "); - //ps.WriteLine(" ", MakeRefPath(project)); - ps.WriteLine(" Debug"); - ps.WriteLine(" AnyCPU"); - ps.WriteLine(" {0}", MakeRefPath(project)); - ps.WriteLine(" {0}", this.ProductVersion); - ps.WriteLine(" ProjectFiles"); - ps.WriteLine(" 0"); - ps.WriteLine(" "); - foreach (ConfigurationNode conf in project.Configurations) - { - ps.Write(" "); - } - ps.WriteLine(""); - } - #endregion - - kernel.CurrentWorkingDirectory.Pop(); - } - - private void WriteSolution(SolutionNode solution, bool writeSolutionToDisk) - { - kernel.Log.Write("Creating {0} solution and project files", this.VersionName); - - foreach (SolutionNode child in solution.Solutions) - { - kernel.Log.Write("...Creating folder: {0}", child.Name); - WriteSolution(child, false); - } - - foreach (ProjectNode project in solution.Projects) - { - kernel.Log.Write("...Creating project: {0}", project.Name); - WriteProject(solution, project); - } - - foreach (DatabaseProjectNode project in solution.DatabaseProjects) - { - kernel.Log.Write("...Creating database project: {0}", project.Name); - WriteDatabaseProject(solution, project); - } - - if (writeSolutionToDisk) // only write main solution - { - kernel.Log.Write(""); - string solutionFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln"); - - using (StreamWriter ss = new StreamWriter(solutionFile)) - { - kernel.CurrentWorkingDirectory.Push(); - Helper.SetCurrentDir(Path.GetDirectoryName(solutionFile)); - - ss.WriteLine("Microsoft Visual Studio Solution File, Format Version {0}", this.SolutionVersion); - ss.WriteLine(SolutionTag); - - WriteProjectDeclarations(ss, solution, solution); - - ss.WriteLine("Global"); - - ss.WriteLine("\tGlobalSection(SolutionConfigurationPlatforms) = preSolution"); - foreach (ConfigurationNode conf in solution.Configurations) - { - ss.WriteLine("\t\t{0}|Any CPU = {0}|Any CPU", conf.Name); - } - ss.WriteLine("\tEndGlobalSection"); - - ss.WriteLine("\tGlobalSection(ProjectConfigurationPlatforms) = postSolution"); - WriteConfigurationLines(solution.Configurations, solution, ss); - ss.WriteLine("\tEndGlobalSection"); - - if (solution.Solutions.Count > 0) - { - ss.WriteLine("\tGlobalSection(NestedProjects) = preSolution"); - foreach (SolutionNode embeddedSolution in solution.Solutions) - { - WriteNestedProjectMap(ss, embeddedSolution); - } - ss.WriteLine("\tEndGlobalSection"); - } - - ss.WriteLine("EndGlobal"); - } - - kernel.CurrentWorkingDirectory.Pop(); - } - } - - private void WriteProjectDeclarations(StreamWriter writer, SolutionNode actualSolution, SolutionNode embeddedSolution) - { - foreach (SolutionNode childSolution in embeddedSolution.Solutions) - { - WriteEmbeddedSolution(writer, childSolution); - WriteProjectDeclarations(writer, actualSolution, childSolution); - } - - foreach (ProjectNode project in embeddedSolution.Projects) - { - WriteProject(actualSolution, writer, project); - } - - foreach (DatabaseProjectNode dbProject in embeddedSolution.DatabaseProjects) - { - WriteProject(actualSolution, writer, dbProject); - } - - if (actualSolution.Guid == embeddedSolution.Guid) - { - WriteSolutionFiles(actualSolution, writer); - } - } - - private static void WriteNestedProjectMap(StreamWriter writer, SolutionNode embeddedSolution) - { - foreach (ProjectNode project in embeddedSolution.Projects) - { - WriteNestedProject(writer, embeddedSolution, project.Guid); - } - - foreach (DatabaseProjectNode dbProject in embeddedSolution.DatabaseProjects) - { - WriteNestedProject(writer, embeddedSolution, dbProject.Guid); - } - - foreach (SolutionNode child in embeddedSolution.Solutions) - { - WriteNestedProject(writer, embeddedSolution, child.Guid); - WriteNestedProjectMap(writer, child); - } - } - - private static void WriteNestedProject(StreamWriter writer, SolutionNode solution, Guid projectGuid) - { - WriteNestedFolder(writer, solution.Guid, projectGuid); - } - - private static void WriteNestedFolder(StreamWriter writer, Guid parentGuid, Guid childGuid) - { - writer.WriteLine("\t\t{0} = {1}", - childGuid.ToString("B").ToUpper(), - parentGuid.ToString("B").ToUpper()); - } - - private static void WriteConfigurationLines(ICollection configurations, SolutionNode solution, StreamWriter ss) - { - foreach (ProjectNode project in solution.Projects) - { - foreach (ConfigurationNode conf in configurations) - { - ss.WriteLine("\t\t{0}.{1}|Any CPU.ActiveCfg = {1}|Any CPU", - project.Guid.ToString("B").ToUpper(), - conf.Name); - - ss.WriteLine("\t\t{0}.{1}|Any CPU.Build.0 = {1}|Any CPU", - project.Guid.ToString("B").ToUpper(), - conf.Name); - } - } - - foreach (SolutionNode child in solution.Solutions) - { - WriteConfigurationLines(configurations, child, ss); - } - } - - private void WriteSolutionFiles(SolutionNode solution, StreamWriter ss) - { - if (solution.Files != null && solution.Files.Count > 0) - { - WriteProject(ss, "Folder", solution.Guid, "Solution Files", "Solution Files", solution.Files); - } - } - - private void WriteEmbeddedSolution(StreamWriter writer, SolutionNode embeddedSolution) - { - WriteProject(writer, "Folder", embeddedSolution.Guid, embeddedSolution.Name, embeddedSolution.Name, embeddedSolution.Files); - } - - private void WriteProject(SolutionNode solution, StreamWriter ss, ProjectNode project) - { - WriteProject(ss, solution, project.Language, project.Guid, project.Name, project.FullPath); - } - - private void WriteProject(SolutionNode solution, StreamWriter ss, DatabaseProjectNode dbProject) - { - if (solution.Files != null && solution.Files.Count > 0) - WriteProject(ss, solution, "Database", dbProject.Guid, dbProject.Name, dbProject.FullPath); - } - - private static bool ExtensionSpecified(string refName) - { - return refName.EndsWith(".dll") || refName.EndsWith(".exe"); - } - - private static string GetProjectExtension(ProjectNode project) - { - string extension = ".dll"; - if (project.Type == ProjectType.Exe) - { - extension = ".exe"; - } - return extension; - } - - const string ProjectDeclarationBeginFormat = "Project(\"{0}\") = \"{1}\", \"{2}\", \"{3}\""; - const string ProjectDeclarationEndFormat = "EndProject"; - - private void WriteProject(StreamWriter ss, SolutionNode solution, string language, Guid guid, string name, string projectFullPath) - { - if (!tools.ContainsKey(language)) - throw new UnknownLanguageException("Unknown .NET language: " + language); - - ToolInfo toolInfo = (ToolInfo)tools[language]; - - string path = Helper.MakePathRelativeTo(solution.FullPath, projectFullPath); - - path = Helper.MakeFilePath(path, name, toolInfo.FileExtension); - - WriteProject(ss, language, guid, name, path); - } - - private void WriteProject(StreamWriter writer, string language, Guid projectGuid, string name, string location) - { - WriteProject(writer, language, projectGuid, name, location, null); - } - - private void WriteProject(StreamWriter writer, string language, Guid projectGuid, string name, string location, FilesNode files) - { - if (!tools.ContainsKey(language)) - throw new UnknownLanguageException("Unknown .NET language: " + language); - - ToolInfo toolInfo = (ToolInfo)tools[language]; - - writer.WriteLine(ProjectDeclarationBeginFormat, - toolInfo.Guid, - name, - location, - projectGuid.ToString("B").ToUpper()); - - if (files != null) - { - writer.WriteLine("\tProjectSection(SolutionItems) = preProject"); - - foreach (string file in files) - writer.WriteLine("\t\t{0} = {0}", file); - - writer.WriteLine("\tEndProjectSection"); - } - - writer.WriteLine(ProjectDeclarationEndFormat); - } - - private void WriteDatabaseProject(SolutionNode solution, DatabaseProjectNode project) - { - string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, "dbp"); - IndentedTextWriter ps = new IndentedTextWriter(new StreamWriter(projectFile), " "); - - kernel.CurrentWorkingDirectory.Push(); - - Helper.SetCurrentDir(Path.GetDirectoryName(projectFile)); - - using (ps) - { - ps.WriteLine("# Microsoft Developer Studio Project File - Database Project"); - ps.WriteLine("Begin DataProject = \"{0}\"", project.Name); - ps.Indent++; - ps.WriteLine("MSDTVersion = \"80\""); - // TODO: Use the project.Files property - if (ContainsSqlFiles(Path.GetDirectoryName(projectFile))) - WriteDatabaseFoldersAndFiles(ps, Path.GetDirectoryName(projectFile)); - - ps.WriteLine("Begin DBRefFolder = \"Database References\""); - ps.Indent++; - foreach (DatabaseReferenceNode reference in project.References) - { - ps.WriteLine("Begin DBRefNode = \"{0}\"", reference.Name); - ps.Indent++; - ps.WriteLine("ConnectStr = \"{0}\"", reference.ConnectionString); - ps.WriteLine("Provider = \"{0}\"", reference.ProviderId.ToString("B").ToUpper()); - //ps.WriteLine("Colorizer = 5"); - ps.Indent--; - ps.WriteLine("End"); - } - ps.Indent--; - ps.WriteLine("End"); - ps.Indent--; - ps.WriteLine("End"); - - ps.Flush(); - } - - kernel.CurrentWorkingDirectory.Pop(); - } - - private bool ContainsSqlFiles(string folder) - { - foreach (string file in Directory.GetFiles(folder, "*.sql")) - { - return true; // if the folder contains 1 .sql file, that's good enough - } - - foreach (string child in Directory.GetDirectories(folder)) - { - if (ContainsSqlFiles(child)) - return true; // if 1 child folder contains a .sql file, still good enough - } - - return false; - } - - private void WriteDatabaseFoldersAndFiles(IndentedTextWriter writer, string folder) - { - foreach (string child in Directory.GetDirectories(folder)) - { - if (ContainsSqlFiles(child)) - { - writer.WriteLine("Begin Folder = \"{0}\"", Path.GetFileName(child)); - writer.Indent++; - WriteDatabaseFoldersAndFiles(writer, child); - writer.Indent--; - writer.WriteLine("End"); - } - } - foreach (string file in Directory.GetFiles(folder, "*.sql")) - { - writer.WriteLine("Script = \"{0}\"", Path.GetFileName(file)); - } - } - - private void CleanProject(ProjectNode project) - { - kernel.Log.Write("...Cleaning project: {0}", project.Name); - - ToolInfo toolInfo = (ToolInfo)tools[project.Language]; - string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension); - string userFile = projectFile + ".user"; - - Helper.DeleteIfExists(projectFile); - Helper.DeleteIfExists(userFile); - } - - private void CleanSolution(SolutionNode solution) - { - kernel.Log.Write("Cleaning {0} solution and project files", this.VersionName, solution.Name); - - string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln"); - string suoFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "suo"); - - Helper.DeleteIfExists(slnFile); - Helper.DeleteIfExists(suoFile); - - foreach (ProjectNode project in solution.Projects) - { - CleanProject(project); - } - - kernel.Log.Write(""); - } - - #endregion - - #region ITarget Members - - /// - /// Writes the specified kern. - /// - /// The kern. - public virtual void Write(Kernel kern) - { - if (kern == null) - { - throw new ArgumentNullException("kern"); - } - kernel = kern; - foreach (SolutionNode sol in kernel.Solutions) - { - WriteSolution(sol, true); - } - kernel = null; - } - - /// - /// Cleans the specified kern. - /// - /// The kern. - public virtual void Clean(Kernel kern) - { - if (kern == null) - { - throw new ArgumentNullException("kern"); - } - kernel = kern; - foreach (SolutionNode sol in kernel.Solutions) - { - CleanSolution(sol); - } - kernel = null; - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Targets/VSVersion.cs b/Prebuild/src/Core/Targets/VSVersion.cs deleted file mode 100644 index 59549b00a9..0000000000 --- a/Prebuild/src/Core/Targets/VSVersion.cs +++ /dev/null @@ -1,54 +0,0 @@ -#region BSD License -/* -Copyright (c) 2008-2009 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com), John Anderson (sontek@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -namespace Prebuild.Core.Targets -{ - /// - /// - /// - public enum VSVersion - { - /// - /// Visual Studio 2002 - /// - VS70, - /// - /// Visual Studio 2003 - /// - VS71, - /// - /// Visual Studio 2005 - /// - VS80, - /// - /// Visual Studio 2008 - /// - VS90, - /// - /// Visual Studio 2010 - /// - VS10 - } -} diff --git a/Prebuild/src/Core/Targets/XcodeTarget.cs b/Prebuild/src/Core/Targets/XcodeTarget.cs deleted file mode 100644 index d96f65b86d..0000000000 --- a/Prebuild/src/Core/Targets/XcodeTarget.cs +++ /dev/null @@ -1,596 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Collections; -using System.Collections.Specialized; -using System.IO; -using System.Reflection; -using System.Text.RegularExpressions; - -using Prebuild.Core.Attributes; -using Prebuild.Core.Interfaces; -using Prebuild.Core.Nodes; -using Prebuild.Core.Utilities; - -namespace Prebuild.Core.Targets -{ - /// - /// - /// - [Target("xcode")] - public class XcodeTarget : ITarget - { - #region Fields - - private Kernel m_Kernel; - - #endregion - - #region Private Methods - - private static string PrependPath(string path) - { - string tmpPath = Helper.NormalizePath(path, '/'); - Regex regex = new Regex(@"(\w):/(\w+)"); - Match match = regex.Match(tmpPath); - //if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/') - //{ - tmpPath = Helper.NormalizePath(tmpPath); - //} - // else - // { - // tmpPath = Helper.NormalizePath("./" + tmpPath); - // } - - return tmpPath; - } - - private static string BuildReference(SolutionNode solution, ReferenceNode refr) - { - string ret = ""; - if (solution.ProjectsTable.ContainsKey(refr.Name)) - { - ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name]; - string fileRef = FindFileReference(refr.Name, project); - string finalPath = Helper.NormalizePath(Helper.MakeFilePath(project.FullPath + "/${build.dir}/", refr.Name, "dll"), '/'); - ret += finalPath; - return ret; - } - else - { - ProjectNode project = (ProjectNode)refr.Parent; - string fileRef = FindFileReference(refr.Name, project); - - if (refr.Path != null || fileRef != null) - { - string finalPath = (refr.Path != null) ? Helper.NormalizePath(refr.Path + "/" + refr.Name + ".dll", '/') : fileRef; - ret += finalPath; - return ret; - } - - try - { - //Assembly assem = Assembly.Load(refr.Name); - //if (assem != null) - //{ - //ret += (refr.Name + ".dll"); - //} - //else - //{ - ret += (refr.Name + ".dll"); - //} - } - catch (System.NullReferenceException e) - { - e.ToString(); - ret += refr.Name + ".dll"; - } - } - return ret; - } - - private static string BuildReferencePath(SolutionNode solution, ReferenceNode refr) - { - string ret = ""; - if (solution.ProjectsTable.ContainsKey(refr.Name)) - { - ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name]; - string fileRef = FindFileReference(refr.Name, project); - string finalPath = Helper.NormalizePath(Helper.MakeReferencePath(project.FullPath + "/${build.dir}/"), '/'); - ret += finalPath; - return ret; - } - else - { - ProjectNode project = (ProjectNode)refr.Parent; - string fileRef = FindFileReference(refr.Name, project); - - if (refr.Path != null || fileRef != null) - { - string finalPath = (refr.Path != null) ? Helper.NormalizePath(refr.Path, '/') : fileRef; - ret += finalPath; - return ret; - } - - try - { - Assembly assem = Assembly.Load(refr.Name); - if (assem != null) - { - ret += ""; - } - else - { - ret += ""; - } - } - catch (System.NullReferenceException e) - { - e.ToString(); - ret += ""; - } - } - return ret; - } - - private static string FindFileReference(string refName, ProjectNode project) - { - foreach (ReferencePathNode refPath in project.ReferencePaths) - { - string fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll"); - - if (File.Exists(fullPath)) - { - return fullPath; - } - } - - return null; - } - - /// - /// Gets the XML doc file. - /// - /// The project. - /// The conf. - /// - public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf) - { - if (conf == null) - { - throw new ArgumentNullException("conf"); - } - if (project == null) - { - throw new ArgumentNullException("project"); - } - string docFile = (string)conf.Options["XmlDocFile"]; - // if(docFile != null && docFile.Length == 0)//default to assembly name if not specified - // { - // return Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml"; - // } - return docFile; - } - - private void WriteProject(SolutionNode solution, ProjectNode project) - { - string projFile = Helper.MakeFilePath(project.FullPath, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build"); - StreamWriter ss = new StreamWriter(projFile); - - m_Kernel.CurrentWorkingDirectory.Push(); - Helper.SetCurrentDir(Path.GetDirectoryName(projFile)); - bool hasDoc = false; - - using (ss) - { - ss.WriteLine(""); - ss.WriteLine("", project.Name); - ss.WriteLine(" ", "build"); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - foreach (ReferenceNode refr in project.References) - { - if (refr.LocalCopy) - { - ss.WriteLine(" ", '/')); - } - } - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.Write(" "); - ss.WriteLine(" ", project.RootNamespace); - foreach (string file in project.Files) - { - switch (project.Files.GetBuildAction(file)) - { - case BuildAction.EmbeddedResource: - ss.WriteLine(" {0}", ""); - break; - default: - if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings) - { - ss.WriteLine(" ", file.Substring(0, file.LastIndexOf('.')) + ".resx"); - } - break; - } - } - //if (project.Files.GetSubType(file).ToString() != "Code") - //{ - // ps.WriteLine(" ", file.Substring(0, file.LastIndexOf('.')) + ".resx"); - - ss.WriteLine(" "); - ss.WriteLine(" "); - foreach (string file in project.Files) - { - switch (project.Files.GetBuildAction(file)) - { - case BuildAction.Compile: - ss.WriteLine(" "); - break; - default: - break; - } - } - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - foreach (ReferenceNode refr in project.References) - { - ss.WriteLine(" ", '/')); - } - ss.WriteLine(" "); - - ss.WriteLine(" "); - ss.WriteLine(" "); - - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - - ss.WriteLine(" "); - if (hasDoc) - { - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.Write(" "); - } - else - { - ss.WriteLine(".exe\" />"); - } - - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - // foreach(ReferenceNode refr in project.References) - // { - // string path = Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReferencePath(solution, refr)), '/'); - // if (path != "") - // { - // ss.WriteLine(" ", path); - // } - // } - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - } - ss.WriteLine(" "); - ss.WriteLine(""); - } - m_Kernel.CurrentWorkingDirectory.Pop(); - } - - private void WriteCombine(SolutionNode solution) - { - m_Kernel.Log.Write("Creating Xcode build files"); - foreach (ProjectNode project in solution.Projects) - { - if (m_Kernel.AllowProject(project.FilterGroups)) - { - m_Kernel.Log.Write("...Creating project: {0}", project.Name); - WriteProject(solution, project); - } - } - - m_Kernel.Log.Write(""); - DirectoryInfo directoryInfo = new DirectoryInfo(Path.Combine(solution.FullPath, solution.Name + ".xcodeproj")); - if (!directoryInfo.Exists) - { - directoryInfo.Create(); - } - string combFile = Helper.MakeFilePath(Path.Combine(solution.FullPath, solution.Name + ".xcodeproj"), "project", "pbxproj"); - StreamWriter ss = new StreamWriter(combFile); - - m_Kernel.CurrentWorkingDirectory.Push(); - Helper.SetCurrentDir(Path.GetDirectoryName(combFile)); - - using (ss) - { - ss.WriteLine(""); - ss.WriteLine("", solution.Name); - ss.WriteLine(" "); - ss.WriteLine(); - - //ss.WriteLine(" "); - //ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - - foreach (ConfigurationNode conf in solution.Configurations) - { - // Set the project.config to a non-debug configuration - if (conf.Options["DebugInformation"].ToString().ToLower() != "true") - { - ss.WriteLine(" ", conf.Name); - } - ss.WriteLine(); - ss.WriteLine(" ", conf.Name); - ss.WriteLine(" ", conf.Name); - ss.WriteLine(" ", conf.Options["DebugInformation"].ToString().ToLower()); - ss.WriteLine(" "); - ss.WriteLine(); - } - - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(); - - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(); - - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(); - - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(); - - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(); - - ss.WriteLine(" "); - ss.WriteLine(" "); - //ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(" "); - //foreach(ProjectNode project in solution.Projects) - //{ - // string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); - // ss.Write(" "); - //} - ss.WriteLine(" "); - ss.WriteLine(); - - ss.WriteLine(" "); - - foreach (ProjectNode project in solution.ProjectsTableOrder) - { - string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); - ss.Write(" "); - } - ss.WriteLine(" "); - ss.WriteLine(); - - ss.WriteLine(" "); - ss.WriteLine(); - ss.WriteLine(" "); - ss.WriteLine(); - //ss.WriteLine(" "); - ss.WriteLine(" "); - ss.WriteLine(); - - ss.WriteLine(" "); - ss.WriteLine(" "); - foreach (ProjectNode project in solution.Projects) - { - string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath); - ss.Write(" "); - } - ss.WriteLine(" "); - ss.WriteLine(); - ss.WriteLine(""); - } - - m_Kernel.CurrentWorkingDirectory.Pop(); - } - - private void CleanProject(ProjectNode project) - { - m_Kernel.Log.Write("...Cleaning project: {0}", project.Name); - string projectFile = Helper.MakeFilePath(project.FullPath, project.Name + (project.Type == ProjectType.Library ? ".dll" : ".exe"), "build"); - Helper.DeleteIfExists(projectFile); - } - - private void CleanSolution(SolutionNode solution) - { - m_Kernel.Log.Write("Cleaning Xcode build files for", solution.Name); - - string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "build"); - Helper.DeleteIfExists(slnFile); - - foreach (ProjectNode project in solution.Projects) - { - CleanProject(project); - } - - m_Kernel.Log.Write(""); - } - - #endregion - - #region ITarget Members - - /// - /// Writes the specified kern. - /// - /// The kern. - public void Write(Kernel kern) - { - if (kern == null) - { - throw new ArgumentNullException("kern"); - } - m_Kernel = kern; - foreach (SolutionNode solution in kern.Solutions) - { - WriteCombine(solution); - } - m_Kernel = null; - } - - /// - /// Cleans the specified kern. - /// - /// The kern. - public virtual void Clean(Kernel kern) - { - if (kern == null) - { - throw new ArgumentNullException("kern"); - } - m_Kernel = kern; - foreach (SolutionNode sol in kern.Solutions) - { - CleanSolution(sol); - } - m_Kernel = null; - } - - /// - /// Gets the name. - /// - /// The name. - public string Name - { - get - { - return "xcode"; - } - } - - #endregion - } -} diff --git a/Prebuild/src/Core/UnknownLanguageException.cs b/Prebuild/src/Core/UnknownLanguageException.cs deleted file mode 100644 index 607b66c022..0000000000 --- a/Prebuild/src/Core/UnknownLanguageException.cs +++ /dev/null @@ -1,63 +0,0 @@ -/* - * $RCSfile$ - * Copyright (C) 2004, 2005 David Hudson (jendave@yahoo.com) - * - * 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 - */ - -using System; -using System.Runtime.Serialization; - -namespace Prebuild.Core -{ - /// - /// - [Serializable()] - public class UnknownLanguageException : Exception - { - /// - /// Basic exception. - /// - public UnknownLanguageException() - { - } - - /// - /// Exception with specified string - /// - /// Exception message - public UnknownLanguageException(string message): base(message) - { - } - - /// - /// - /// - /// - /// - public UnknownLanguageException(string message, Exception exception) : base(message, exception) - { - } - - /// - /// - /// - /// - /// - protected UnknownLanguageException(SerializationInfo info, StreamingContext context) : base( info, context ) - { - } - } -} diff --git a/Prebuild/src/Core/Utilities/CommandLineCollection.cs b/Prebuild/src/Core/Utilities/CommandLineCollection.cs deleted file mode 100644 index 22752aa1e1..0000000000 --- a/Prebuild/src/Core/Utilities/CommandLineCollection.cs +++ /dev/null @@ -1,153 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Collections; -using System.Collections.Specialized; -using System.Diagnostics; - -namespace Prebuild.Core.Utilities -{ - /// - /// The CommandLine class parses and interprets the command-line arguments passed to - /// prebuild. - /// - public class CommandLineCollection - { - #region Fields - - // The raw OS arguments - private string[] m_RawArgs; - - // Command-line argument storage - private Hashtable m_Arguments; - - #endregion - - #region Constructors - - /// - /// Create a new CommandLine instance and set some internal variables. - /// - public CommandLineCollection(string[] args) - { - m_RawArgs = args; - m_Arguments = new Hashtable(); - - Parse(); - } - - #endregion - - #region Private Methods - - private void Parse() - { - if(m_RawArgs.Length < 1) - return; - - int idx = 0; - string arg = null, lastArg = null; - - while(idx 2 && arg[0] == '/') - { - arg = arg.Substring(1); - lastArg = arg; - m_Arguments[arg] = ""; - } - else - { - if(lastArg != null) - { - m_Arguments[lastArg] = arg; - lastArg = null; - } - } - - idx++; - } - } - - #endregion - - #region Public Methods - - /// - /// Wases the passed. - /// - /// The arg. - /// - public bool WasPassed(string arg) - { - return (m_Arguments.ContainsKey(arg)); - } - - #endregion - - #region Properties - - /// - /// Gets the parameter associated with the command line option - /// - /// Returns null if option was not specified, - /// null string if no parameter was specified, and the value if a parameter was specified - public string this[string index] - { - get - { - if(m_Arguments.ContainsKey(index)) - { - return (string)(m_Arguments[index]); - } - else - { - return null; - } - } - } - - #endregion - - #region IEnumerable Members - - /// - /// Returns an enumerator that can iterate through a collection. - /// - /// - /// An - /// that can be used to iterate through the collection. - /// - public IDictionaryEnumerator GetEnumerator() - { - return m_Arguments.GetEnumerator(); - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Utilities/CurrentDirectory.cs b/Prebuild/src/Core/Utilities/CurrentDirectory.cs deleted file mode 100644 index 5fabdf0943..0000000000 --- a/Prebuild/src/Core/Utilities/CurrentDirectory.cs +++ /dev/null @@ -1,80 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Collections; - -namespace Prebuild.Core.Utilities -{ - /// - /// - /// - public class CurrentDirectory - { - #region Fields - - private Stack m_Stack; - - #endregion - - #region Constructors - - /// - /// Initializes a new instance of the class. - /// - public CurrentDirectory() - { - m_Stack = new Stack(); - } - - #endregion - - #region Public Methods - - /// - /// Pushes this instance. - /// - public void Push() - { - m_Stack.Push(Environment.CurrentDirectory); - } - - /// - /// Pops this instance. - /// - public void Pop() - { - if(m_Stack.Count < 1) - { - return; - } - - string cwd = (string)m_Stack.Pop(); - Helper.SetCurrentDir(cwd); - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Utilities/Helper.cs b/Prebuild/src/Core/Utilities/Helper.cs deleted file mode 100644 index 9a0d131c7e..0000000000 --- a/Prebuild/src/Core/Utilities/Helper.cs +++ /dev/null @@ -1,654 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Collections; -using System.Diagnostics; -using System.IO; -using System.Runtime.InteropServices; -using System.Text.RegularExpressions; -using System.Collections.Specialized; -using System.Xml; -using Prebuild.Core.Nodes; - -namespace Prebuild.Core.Utilities -{ - /// - /// - /// - public class Helper - { - #region Fields - - private static Stack dirStack; - private static Regex varRegex; - static bool checkForOSVariables; - - /// - /// - /// - public static bool CheckForOSVariables - { - get - { - return checkForOSVariables; - } - set - { - checkForOSVariables = value; - } - } - - #endregion - - #region Constructors - - /// - /// Initializes the class. - /// - static Helper() - { - dirStack = new Stack(); - //m_VarRegex = new Regex(@"\${(?[\w|_]+)}"); - } - - #endregion - - #region Properties - - /// - /// - /// - public static Stack DirStack - { - get - { - return dirStack; - } - } - - /// - /// - /// - public static Regex VarRegex - { - get - { - return varRegex; - } - set - { - varRegex = value; - } - } - - #endregion - - #region Public Methods - - #region String Parsing - #region Inner Classes and Delegates - /// - /// - /// - public delegate string StringLookup(string key); - - #endregion - - /// - /// Gets a collection of StringLocationPair objects that represent the matches - /// - /// The target. - /// The before group. - /// The after group. - /// if set to true [include delimiters in substrings]. - /// - public static StringCollection FindGroups(string target, string beforeGroup, string afterGroup, bool includeDelimitersInSubstrings) - { - if( beforeGroup == null ) - { - throw new ArgumentNullException("beforeGroup"); - } - if( afterGroup == null ) - { - throw new ArgumentNullException("afterGroup"); - } - StringCollection results = new StringCollection(); - if(target == null || target.Length == 0) - { - return results; - } - - int beforeMod = 0; - int afterMod = 0; - if(includeDelimitersInSubstrings) - { - //be sure to not exlude the delims - beforeMod = beforeGroup.Length; - afterMod = afterGroup.Length; - } - int startIndex = 0; - while((startIndex = target.IndexOf(beforeGroup,startIndex)) != -1) { - int endIndex = target.IndexOf(afterGroup,startIndex);//the index of the char after it - if(endIndex == -1) - { - break; - } - int length = endIndex - startIndex - beforeGroup.Length;//move to the first char in the string - string substring = substring = target.Substring(startIndex + beforeGroup.Length - beforeMod, - length - afterMod); - - results.Add(substring); - //results.Add(new StringLocationPair(substring,startIndex)); - startIndex = endIndex + 1; - //the Interpolate*() methods will not work if expressions are expandded inside expression due to an optimization - //so start after endIndex - - } - return results; - } - - /// - /// Replaces the groups. - /// - /// The target. - /// The before group. - /// The after group. - /// The lookup. - /// - public static string ReplaceGroups(string target, string beforeGroup, string afterGroup, StringLookup lookup) { - if( target == null ) - { - throw new ArgumentNullException("target"); - } - //int targetLength = target.Length; - StringCollection strings = FindGroups(target,beforeGroup,afterGroup,false); - if( lookup == null ) - { - throw new ArgumentNullException("lookup"); - } - foreach(string substring in strings) - { - target = target.Replace(beforeGroup + substring + afterGroup, lookup(substring) ); - } - return target; - } - - /// - /// Replaces ${var} statements in a string with the corresonding values as detirmined by the lookup delegate - /// - /// The target. - /// The lookup. - /// - public static string InterpolateForVariables(string target, StringLookup lookup) - { - return ReplaceGroups(target, "${" , "}" , lookup); - } - - /// - /// Replaces ${var} statements in a string with the corresonding environment variable with name var - /// - /// - /// - public static string InterpolateForEnvironmentVariables(string target) - { - return InterpolateForVariables(target, new StringLookup(Environment.GetEnvironmentVariable)); - } - - #endregion - - /// - /// Translates the value. - /// - /// Type of the translate. - /// The translation item. - /// - public static object TranslateValue(Type translateType, string translationItem) - { - if(translationItem == null) - { - return null; - } - - try - { - string lowerVal = translationItem.ToLower(); - if(translateType == typeof(bool)) - { - return (lowerVal == "true" || lowerVal == "1" || lowerVal == "y" || lowerVal == "yes" || lowerVal == "on"); - } - else if(translateType == typeof(int)) - { - return (Int32.Parse(translationItem)); - } - else - { - return translationItem; - } - } - catch(FormatException) - { - return null; - } - } - - /// - /// Deletes if exists. - /// - /// The file. - /// - public static bool DeleteIfExists(string file) - { - string resFile = null; - try - { - resFile = ResolvePath(file); - } - catch(ArgumentException) - { - return false; - } - - if(!File.Exists(resFile)) - { - return false; - } - - File.Delete(resFile); - return true; - } - - static readonly char seperator = Path.DirectorySeparatorChar; - - // This little gem was taken from the NeL source, thanks guys! - /// - /// Makes a relative path - /// - /// Path to start from - /// Path to end at - /// Path that will get from startPath to endPath - public static string MakePathRelativeTo(string startPath, string endPath) - { - string tmp = NormalizePath(startPath, seperator); - string src = NormalizePath(endPath, seperator); - string prefix = ""; - - while(true) - { - if((String.Compare(tmp, 0, src, 0, tmp.Length) == 0)) - { - string ret; - int size = tmp.Length; - if(size == src.Length) - { - return "./"; - } - if((src.Length > tmp.Length) && src[tmp.Length - 1] != seperator) - { - } - else - { - ret = prefix + endPath.Substring(size, endPath.Length - size); - ret = ret.Trim(); - if(ret[0] == seperator) - { - ret = "." + ret; - } - - return NormalizePath(ret); - } - - } - - if(tmp.Length < 2) - { - break; - } - - int lastPos = tmp.LastIndexOf(seperator, tmp.Length - 2); - int prevPos = tmp.IndexOf(seperator); - - if((lastPos == prevPos) || (lastPos == -1)) - { - break; - } - - tmp = tmp.Substring(0, lastPos + 1); - prefix += ".." + seperator.ToString(); - } - - return endPath; - } - - /// - /// Resolves the path. - /// - /// The path. - /// - public static string ResolvePath(string path) - { - string tmpPath = NormalizePath(path); - if(tmpPath.Length < 1) - { - tmpPath = "."; - } - - tmpPath = Path.GetFullPath(tmpPath); - if(!File.Exists(tmpPath) && !Directory.Exists(tmpPath)) - { - throw new ArgumentException("Path could not be resolved: " + tmpPath); - } - - return tmpPath; - } - - /// - /// Normalizes the path. - /// - /// The path. - /// The separator character. - /// - public static string NormalizePath(string path, char separatorCharacter) - { - if(path == null || path == "" || path.Length < 1) - { - return ""; - } - - string tmpPath = path.Replace('\\', '/'); - tmpPath = tmpPath.Replace('/', separatorCharacter); - return tmpPath; - } - - /// - /// Normalizes the path. - /// - /// The path. - /// - public static string NormalizePath(string path) - { - return NormalizePath(path, Path.DirectorySeparatorChar); - } - - /// - /// Ends the path. - /// - /// The path. - /// The separator character. - /// - public static string EndPath(string path, char separatorCharacter) - { - if(path == null || path == "" || path.Length < 1) - { - return ""; - } - - if(!path.EndsWith(separatorCharacter.ToString())) - { - return (path + separatorCharacter); - } - - return path; - } - - /// - /// Ends the path. - /// - /// The path. - /// - public static string EndPath(string path) - { - return EndPath(path, Path.DirectorySeparatorChar); - } - - /// - /// Makes the file path. - /// - /// The path. - /// The name. - /// The ext. - /// - public static string MakeFilePath(string path, string name, string ext) - { - string ret = EndPath(NormalizePath(path)); - - if( name == null ) - { - throw new ArgumentNullException("name"); - } - - ret += name; - if(!name.EndsWith("." + ext)) - { - ret += "." + ext; - } - - //foreach(char c in Path.GetInvalidPathChars()) - //{ - // ret = ret.Replace(c, '_'); - //} - - return ret; - } - - /// - /// Makes the file path. - /// - /// The path. - /// The name. - /// - public static string MakeFilePath(string path, string name) - { - string ret = EndPath(NormalizePath(path)); - - if( name == null ) - { - throw new ArgumentNullException("name"); - } - - ret += name; - - //foreach (char c in Path.GetInvalidPathChars()) - //{ - // ret = ret.Replace(c, '_'); - //} - - return ret; - } - - /// - /// - /// - /// - /// - public static string MakeReferencePath(string path) - { - string ret = EndPath(NormalizePath(path)); - - //foreach (char c in Path.GetInvalidPathChars()) - //{ - // ret = ret.Replace(c, '_'); - //} - - return ret; - } - - /// - /// Sets the current dir. - /// - /// The path. - public static void SetCurrentDir(string path) - { - if( path == null ) - { - throw new ArgumentNullException("path"); - } - if(path.Length < 1) - { - return; - } - - Environment.CurrentDirectory = path; - } - - /// - /// Checks the type. - /// - /// The type to check. - /// The attr. - /// The inter. - /// - public static object CheckType(Type typeToCheck, Type attr, Type inter) - { - if(typeToCheck == null || attr == null) - { - return null; - } - - object[] attrs = typeToCheck.GetCustomAttributes(attr, false); - if(attrs == null || attrs.Length < 1) - { - return null; - } - if( inter == null ) - { - throw new ArgumentNullException("inter"); - } - - if(typeToCheck.GetInterface(inter.FullName) == null) - { - return null; - } - - return attrs[0]; - } - - /* A bit of overhead for simple group parsing, there are problems with Regex in Mono - public static string ParseValue(string val) - { - if(val == null || val.Length < 1 || !CheckForOSVariables) - return val; - - string tmp = val; - Match m = m_VarRegex.Match(val); - while(m.Success) - { - if(m.Groups["var"] == null) - continue; - - Capture c = m.Groups["var"].Captures[0]; - if(c == null) - continue; - - string var = c.Value; - string envVal = Environment.GetEnvironmentVariable(var); - if(envVal == null) - envVal = ""; - - tmp = tmp.Replace("${" + var + "}", envVal); - m = m.NextMatch(); - } - - return tmp; - }*/ - - /// - /// Attributes the value. - /// - /// The node. - /// The attr. - /// The def. - /// - public static string AttributeValue(XmlNode node, string attr, string def) - { - if( node == null ) - { - throw new ArgumentNullException("node"); - } - if(node.Attributes[attr] == null) - { - return def; - } - string val = node.Attributes[attr].Value; - if(!CheckForOSVariables) - { - return val; - } - - return InterpolateForEnvironmentVariables(val); - } - - /// - /// Parses the boolean. - /// - /// The node. - /// The attr. - /// if set to true [default value]. - /// - public static bool ParseBoolean(XmlNode node, string attr, bool defaultValue) - { - if( node == null ) - { - throw new ArgumentNullException("node"); - } - if(node.Attributes[attr] == null) - { - return defaultValue; - } - return bool.Parse(node.Attributes[attr].Value); - } - - /// - /// Enums the attribute value. - /// - /// The node. - /// The attr. - /// Type of the enum. - /// The def. - /// - public static object EnumAttributeValue(XmlNode node, string attr, Type enumType, object def) - { - if( def == null ) - { - throw new ArgumentNullException("def"); - } - string val = AttributeValue(node, attr, def.ToString()); - return Enum.Parse(enumType, val, true); - } - - /// - /// - /// - /// - /// - /// - public static string AssemblyFullName(string assemblyName, ProjectType projectType) - { - return assemblyName + (projectType == ProjectType.Library ? ".dll" : ".exe"); - } - - #endregion - } -} diff --git a/Prebuild/src/Core/Utilities/Log.cs b/Prebuild/src/Core/Utilities/Log.cs deleted file mode 100644 index 548e987690..0000000000 --- a/Prebuild/src/Core/Utilities/Log.cs +++ /dev/null @@ -1,270 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.IO; - -namespace Prebuild.Core.Utilities -{ - /// - /// - /// - public enum LogType - { - /// - /// - /// - None, - /// - /// - /// - Info, - /// - /// - /// - Warning, - /// - /// - /// - Error - } - - /// - /// - /// - [Flags] - public enum LogTargets - { - /// - /// - /// - None = 0, - /// - /// - /// - Null = 1, - /// - /// - /// - File = 2, - /// - /// - /// - Console = 4 - } - - /// - /// Summary description for Log. - /// - public class Log : IDisposable - { - #region Fields - - private StreamWriter m_Writer; - private LogTargets m_Target = LogTargets.Null; - bool disposed; - - #endregion - - #region Constructors - - /// - /// Initializes a new instance of the class. - /// - /// The target. - /// Name of the file. - public Log(LogTargets target, string fileName) - { - m_Target = target; - - if((m_Target & LogTargets.File) != 0) - { - m_Writer = new StreamWriter(fileName, false); - } - } - - #endregion - - #region Public Methods - - /// - /// Writes this instance. - /// - public void Write() - { - Write(string.Empty); - } - - /// - /// Writes the specified MSG. - /// - /// The MSG. - public void Write(string msg) - { - if((m_Target & LogTargets.Null) != 0) - { - return; - } - - if((m_Target & LogTargets.Console) != 0) - { - Console.WriteLine(msg); - } - if((m_Target & LogTargets.File) != 0 && m_Writer != null) - { - m_Writer.WriteLine(msg); - } - } - - /// - /// Writes the specified format. - /// - /// The format. - /// The args. - public void Write(string format, params object[] args) - { - Write(string.Format(format,args)); - } - - /// - /// Writes the specified type. - /// - /// The type. - /// The format. - /// The args. - public void Write(LogType type, string format, params object[] args) - { - if((m_Target & LogTargets.Null) != 0) - { - return; - } - - string str = ""; - switch(type) - { - case LogType.Info: - str = "[I] "; - break; - case LogType.Warning: - str = "[!] "; - break; - case LogType.Error: - str = "[X] "; - break; - } - - Write(str + format,args); - } - - /// - /// Writes the exception. - /// - /// The type. - /// The ex. - public void WriteException(LogType type, Exception ex) - { - if(ex != null) - { - Write(type, ex.Message); - //#if DEBUG - m_Writer.WriteLine("Exception @{0} stack trace [[", ex.TargetSite.Name); - m_Writer.WriteLine(ex.StackTrace); - m_Writer.WriteLine("]]"); - //#endif - } - } - - /// - /// Flushes this instance. - /// - public void Flush() - { - if(m_Writer != null) - { - m_Writer.Flush(); - } - } - - #endregion - - #region IDisposable Members - - /// - /// Performs application-defined tasks associated with freeing, releasing, or - /// resetting unmanaged resources. - /// - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - /// - /// Dispose objects - /// - /// - /// If true, it will dispose close the handle - /// - /// - /// Will dispose managed and unmanaged resources. - /// - protected virtual void Dispose(bool disposing) - { - if (!this.disposed) - { - if (disposing) - { - if (m_Writer != null) - { - m_Writer.Close(); - m_Writer = null; - } - } - } - this.disposed = true; - } - - /// - /// - /// - ~Log() - { - this.Dispose(false); - } - - /// - /// Closes and destroys this object - /// - /// - /// Same as Dispose(true) - /// - public void Close() - { - Dispose(); - } - - #endregion - } -} diff --git a/Prebuild/src/Core/WarningException.cs b/Prebuild/src/Core/WarningException.cs deleted file mode 100644 index df90dc8d7d..0000000000 --- a/Prebuild/src/Core/WarningException.cs +++ /dev/null @@ -1,84 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -using System; -using System.Runtime.Serialization; - -namespace Prebuild.Core -{ - /// - /// - /// - [Serializable()] - public class WarningException : Exception - { - #region Constructors - - /// - /// - /// - public WarningException() - { - } - - /// - /// - /// - /// - /// - public WarningException(string format, params object[] args) - : base(String.Format(format, args)) - { - } - - /// - /// Exception with specified string - /// - /// Exception message - public WarningException(string message): base(message) - { - } - - /// - /// - /// - /// - /// - public WarningException(string message, Exception exception) : base(message, exception) - { - } - - /// - /// - /// - /// - /// - protected WarningException(SerializationInfo info, StreamingContext context) : base( info, context ) - { - } - - #endregion - } -} diff --git a/Prebuild/src/Prebuild.cs b/Prebuild/src/Prebuild.cs deleted file mode 100644 index 2d12b53066..0000000000 --- a/Prebuild/src/Prebuild.cs +++ /dev/null @@ -1,165 +0,0 @@ -#region BSD License -/* -Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com) - -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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. -*/ -#endregion - -#region CVS Information -/* - * $Source$ - * $Author: jendave $ - * $Date: 2006-09-26 23:43:35 +0200 (ti, 26 sep 2006) $ - * $Revision: 168 $ - */ -#endregion - -using System; -using System.Collections.Specialized; -using System.IO; -using System.Reflection; -using System.Runtime.InteropServices; -using System.EnterpriseServices.Internal; - -using Prebuild.Core; -using Prebuild.Core.Utilities; - -namespace Prebuild -{ - /// - /// - /// - class Prebuild - { - #region Main - - [STAThread] - static void Main(string[] args) - { - Kernel kernel = null; - try - { - kernel = Kernel.Instance; - kernel.Initialize(LogTargets.File | LogTargets.Console, args); - bool exit = false; - - if(kernel.CommandLine.WasPassed("usage")) - { - exit = true; - OutputUsage(); - } - if(kernel.CommandLine.WasPassed("showtargets")) - { - exit = true; - OutputTargets(kernel); - } - if(kernel.CommandLine.WasPassed("install")) - { - exit = true; - InstallAssembly(kernel); - } - if(kernel.CommandLine.WasPassed("remove")) - { - exit = true; - RemoveAssembly(kernel); - } - - if(!exit) - { - kernel.Process(); - } - } - catch(Exception ex) - { - Console.WriteLine("Unhandled error: {0}", ex.Message); - //#if DEBUG - Console.WriteLine("{0}", ex.StackTrace); - //#endif - } - finally - { - if(kernel.PauseAfterFinish) - { - Console.WriteLine("\nPress enter to continue..."); - Console.ReadLine(); - } - } - } - - #endregion - - #region Private Methods - - private static void InstallAssembly(Kernel kernel) - { - Publish publish = new Publish(); - string file = kernel.CommandLine["install"]; - //Console.WriteLine(".."+file+".."); - publish.GacInstall(file); - } - - private static void RemoveAssembly(Kernel kernel) - { - Publish publish = new Publish(); - string file = kernel.CommandLine["remove"]; - publish.GacRemove(file); - } - - private static void OutputUsage() - { - Console.WriteLine("Usage: prebuild /target [options]"); - Console.WriteLine("Available command-line switches:"); - Console.WriteLine(); - Console.WriteLine("/target Target for Prebuild"); - Console.WriteLine("/clean Clean the build files for the given target"); - Console.WriteLine("/file XML file to process"); - Console.WriteLine("/log Log file to write to"); - Console.WriteLine("/ppo Pre-process the file, but perform no other processing"); - Console.WriteLine("/pause Pauses the application after execution to view the output"); - Console.WriteLine("/yes Default to yes to any questions asked"); - Console.WriteLine("/install Install assembly into the GAC"); - Console.WriteLine("/remove Remove assembly from the GAC"); - Console.WriteLine(); - Console.WriteLine("See 'prebuild /showtargets for a list of available targets"); - Console.WriteLine("See readme.txt or check out http://dnpb.sourceforge.net for more information"); - Console.WriteLine(); - } - - private static void OutputTargets(Kernel kern) - { - Console.WriteLine("Targets available in Prebuild:"); - Console.WriteLine(""); - if(kern.Targets.Keys.Count > 0) - { - string[] targs = new string[kern.Targets.Keys.Count]; - kern.Targets.Keys.CopyTo(targs, 0); - Array.Sort(targs); - foreach(string target in targs) - { - Console.WriteLine(target); - } - } - Console.WriteLine(""); - } - - #endregion - } -} diff --git a/Prebuild/src/Prebuild.snk b/Prebuild/src/Prebuild.snk deleted file mode 100644 index f9dce054ffae7c79dce7d3ba0b790904bdb36831..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097%QdipZe+P78+gioe1FL>Pm`A%NYNJjT zvr&utrO*Bz`;(~1&v7SLbo#8h8*Eu!T1$f&*Z!JD(@sjU;6;rE+#4q{`Ci_P6X~Os zsqTl*?$f+z`P@h&-Z=SV9gYc!udqrVAH@hG`xHwT1SMQBX^U%@gPO$V6JX)9KT9Ww>?9GKft(b~3CsqH2^BHX{_&xGMn ztAW9|iLO>;#yB;wrHus##d%AZDeNPu@F_TTzUscSGU=aLSyvelLiSJps^FvCxcYHV z4Y1$J$Wu2ek`e>_>d43PbVJq8mILALAW%&DDsyb=|xUms2{~U~!hI$4*kXem7!Hk=k zc1qQS!>`bZbL}5fr*. For example, if your KeyFile is -// located in the project directory, you would specify the AssemblyKeyFile -// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] -// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework -// documentation for more information on this. -// -[assembly: AssemblyDelaySign(false)] -[assembly: AssemblyKeyName("")] diff --git a/Prebuild/src/data/autotools.xml b/Prebuild/src/data/autotools.xml deleted file mode 100644 index ee4b0643dc..0000000000 --- a/Prebuild/src/data/autotools.xml +++ /dev/null @@ -1,790 +0,0 @@ - - - - - #!/bin/sh -# Run this to generate all the initial makefiles, etc. -# Ripped off from Mono, which ripped off from GNOME macros version - -DIE=0 - -srcdir=`dirname $0` -test -z "$srcdir" && srcdir=. - -if [ -n "$MONO_PATH" ]; then - # from -> /mono/lib:/another/mono/lib - # to -> /mono /another/mono - for i in `echo ${MONO_PATH} | tr ":" " "`; do - i=`dirname ${i}` - if [ -n "{i}" -a -d "${i}/share/aclocal" ]; then - ACLOCAL_FLAGS="-I ${i}/share/aclocal $ACLOCAL_FLAGS" - fi - if [ -n "{i}" -a -d "${i}/bin" ]; then - PATH="${i}/bin:$PATH" - fi - done - export PATH -fi - -(autoconf --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "**Error**: You must have \`autoconf' installed to compile Mono." - echo "Download the appropriate package for your distribution," - echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" - DIE=1 -} - -if [ -z "$LIBTOOL" ]; then - LIBTOOL=`which glibtool 2>/dev/null` - if [ ! -x "$LIBTOOL" ]; then - LIBTOOL=`which libtool` - fi -fi - -(grep "^AM_PROG_LIBTOOL" $srcdir/configure.ac >/dev/null) && { - ($LIBTOOL --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "**Error**: You must have \`libtool' installed to compile Mono." - echo "Get ftp://ftp.gnu.org/pub/gnu/libtool-1.2d.tar.gz" - echo "(or a newer version if it is available)" - DIE=1 - } -} - -grep "^AM_GNU_GETTEXT" $srcdir/configure.ac >/dev/null && { - grep "sed.*POTFILES" $srcdir/configure.ac >/dev/null || \ - (gettext --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "**Error**: You must have \`gettext' installed to compile Mono." - echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz" - echo "(or a newer version if it is available)" - DIE=1 - } -} - -(automake --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "**Error**: You must have \`automake' installed to compile Mono." - echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" - echo "(or a newer version if it is available)" - DIE=1 - NO_AUTOMAKE=yes -} - -# if no automake, don't bother testing for aclocal -test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "**Error**: Missing \`aclocal'. The version of \`automake'" - echo "installed doesn't appear recent enough." - echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" - echo "(or a newer version if it is available)" - DIE=1 -} - -if test "$DIE" -eq 1; then - exit 1 -fi - -if test -z "$NOCONFIGURE"; then - -if test -z "$*"; then - echo "**Warning**: I am going to run \`configure' with no arguments." - echo "If you wish to pass any to it, please specify them on the" - echo \`$0\'" command line." - echo -fi - -fi - -case $CC in -xlc ) - am_opt=--include-deps;; -esac - - -if grep "^AM_PROG_LIBTOOL" configure.ac >/dev/null; then - if test -z "$NO_LIBTOOLIZE" ; then - echo "Running libtoolize..." - ${LIBTOOL}ize --force --copy - fi -fi - -echo "Running aclocal $ACLOCAL_FLAGS ..." -aclocal $ACLOCAL_FLAGS || { - echo - echo "**Error**: aclocal failed. This may mean that you have not" - echo "installed all of the packages you need, or you may need to" - echo "set ACLOCAL_FLAGS to include \"-I \$prefix/share/aclocal\"" - echo "for the prefix where you installed the packages whose" - echo "macros were not found" - exit 1 -} - -if grep "^AM_CONFIG_HEADER" configure.ac >/dev/null; then - echo "Running autoheader..." - autoheader || { echo "**Error**: autoheader failed."; exit 1; } -fi - -echo "Running automake --gnu $am_opt ..." -automake --add-missing --gnu $am_opt || - { echo "**Error**: automake failed."; exit 1; } -echo "Running autoconf ..." -autoconf || { echo "**Error**: autoconf failed."; exit 1; } - -conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c - -if test x$NOCONFIGURE = x; then - echo Running $srcdir/configure $conf_flags "$@" ... - $srcdir/configure $conf_flags "$@" \ - && echo Now type \`make\' to compile $PKG_NAME || exit 1 -else - echo Skipping configure process. -fi - - - - - - - - - - - - - - - - AC_INIT([],[]) - -AC_PREREQ(2.60) -AC_CANONICAL_SYSTEM -AC_CONFIG_AUX_DIR(.) -AM_INIT_AUTOMAKE([1.9 tar-ustar foreign]) -AM_MAINTAINER_MODE -dnl AC_PROG_INTLTOOL([0.25]) -AC_PROG_INSTALL - -ASSEMBLY_NAME= -PROJECT_NAME= -PROJECT_VERSION=$VERSION -PROJECT_DESCRIPTION="" -PROJECT_TYPE="" - -AC_SUBST(ASSEMBLY_NAME) -AC_SUBST(PROJECT_NAME) -AC_SUBST(PROJECT_VERSION) -AC_SUBST(DESCRIPTION) - -AC_MSG_CHECKING([assembly type]) -case $PROJECT_TYPE in - *Exe) - ASSEMBLY_EXTENSION=exe - ;; - *Library) - ASSEMBLY_EXTENSION=dll - ;; - *) - AC_MSG_ERROR([*** Please add support for project type $PROJECT_TYPE to configure.ac checks!]) - ;; -esac -AC_MSG_RESULT([$PROJECT_TYPE]) - -AC_SUBST(ASSEMBLY_EXTENSION) - -AC_MSG_CHECKING([whether we're compiling from an RCS]) -if test -f "$srcdir/.cvs_version" ; then - from_rcs=cvs -else - if test -f "$srcdir/.svn/entries" ; then - from_rcs=svn - else - from_rcs=no - fi -fi - -AC_MSG_RESULT($from_rcs) - -MONO_REQUIRED_VERSION=1.1 - -PKG_CHECK_MODULES(MONO_DEPENDENCY, mono >= $MONO_REQUIRED_VERSION, has_mono=true, has_mono=false) - -if test "x$has_mono" = "xtrue"; then - AC_PATH_PROG(RUNTIME, mono, no) - AC_PATH_PROG(CSC, gmcs, no) - AC_PATH_PROG(RESGEN, resgen2, no) - if test `uname -s` = "Darwin"; then - LIB_PREFIX= - LIB_SUFFIX=.dylib - else - LIB_PREFIX=.so - LIB_SUFFIX= - fi -else - AC_PATH_PROG(CSC, csc.exe, no) - if test x$CSC = "xno"; then - AC_MSG_ERROR([You need to install either mono or .Net]) - else - RUNTIME= - LIB_PREFIX= - LIB_SUFFIX= - fi -fi - -AC_PATH_PROG(GACUTIL, gacutil) -if test "x$GACUTIL" = "xno" ; then - AC_MSG_ERROR([No gacutil tool found]) -fi - -GACUTIL_FLAGS='/package /gacdir $(DESTDIR)$(prefix)/lib' -AC_SUBST(GACUTIL_FLAGS) - -AC_SUBST(PATH) -AC_SUBST(LD_LIBRARY_PATH) - -AC_SUBST(LIB_PREFIX) -AC_SUBST(LIB_SUFFIX) -AC_SUBST(RUNTIME) -AC_SUBST(CSC) -AC_SUBST(RESGEN) -AC_SUBST(GACUTIL) - -AC_SUBST(BASE_DEPENDENCIES_CFLAGS) -AC_SUBST(BASE_DEPENDENCIES_LIBS) - -dnl Find monodoc -MONODOC_REQUIRED_VERSION=1.0 -AC_SUBST(MONODOC_REQUIRED_VERSION) - -PKG_CHECK_MODULES(MONODOC_DEPENDENCY, monodoc >= $MONODOC_REQUIRED_VERSION, enable_monodoc=yes, enable_monodoc=no) - -if test "x$enable_monodoc" = "xyes"; then - AC_PATH_PROG(MONODOC, monodoc, no) - if test x$MONODOC = xno; then - enable_monodoc=no - fi -else - MONODOC= -fi - -AC_SUBST(MONODOC) -AM_CONDITIONAL(ENABLE_MONODOC, test "x$enable_monodoc" = "xyes") - -winbuild=no -case "$host" in - *-*-mingw*|*-*-cygwin*) - winbuild=yes - ;; -esac -AM_CONDITIONAL(WINBUILD, test x$winbuild = xyes) - -AC_CONFIG_FILES() -AC_CONFIG_FILES(.pc) - -AC_CONFIG_FILES(Makefile) -AC_OUTPUT - -echo "===" -echo "" -echo "Project configuration summary" -echo "" -echo " * Installation prefix: $prefix" -echo " * compiler: $CSC" -echo " * Documentation: $enable_monodoc ($MONODOC)" -echo " * Project Name: $PROJECT_NAME" -echo " * Version: $PROJECT_VERSION" -echo "" -echo "===" - - - - - - - - - - - - - - - - - - - - - - - - - - -ASSEMBLY=$(ASSEMBLY_NAME).$(ASSEMBLY_EXTENSION) - - -dir = $(prefix)/lib/ -_DATA = $(ASSEMBLY) $(ASSEMBLY).config - -bin_SCRIPTS= - -pkgconfigdir = $(prefix)/lib/pkgconfig -pkgconfig_DATA = .pc - -dir = $(prefix)/lib/mono/ -_DATA = $(ASSEMBLY).config - -noinst_DATA = $(ASSEMBLY) - - -PACKAGES = -BINARY_LIBS = -SYSTEM_LIBS = -RESOURCES_SRC = -RESOURCES = $(RESOURCES_SRC:.resx=.resources) -SOURCES = - -EXTRA_DIST=$(SOURCES) $(BINARY_LIBS) $(RESOURCES_SRC) install-sh missing - -CLEANFILES=$(ASSEMBLY) - - - - - - - -/$(ASSEMBLY): $(srcdir)/$(ASSEMBLY).response $(RESOURCES) $(SOURCES) $(BINARY_LIBS) - mkdir -p doc && mkdir -p && $(CSC) /out:$@ \ - /target: \ - $(addprefix /resource:$(srcdir)/, $(RESOURCES)) \ - $(addprefix /pkg:, $(PACKAGES)) \ - $(addprefix /r:, $(SYSTEM_LIBS)) \ - $(addprefix /r:$(srcdir)/, $(BINARY_LIBS)) \ - @$(srcdir)/$(ASSEMBLY).response \ - /doc:doc/ \ - /keyfile:$(srcdir)/ \ - /unsafe \ - && rm -f $(ASSEMBLY) \ - && ln $@ $(ASSEMBLY) - -CLEANFILES+=/$(ASSEMBLY) - - -EXTRA_DIST+= - -: /$(ASSEMBLY) - rm -f $(ASSEMBLY) \ - && ln /$(ASSEMBLY) $(ASSEMBLY) - - - - - -_install-data-local: /$(ASSEMBLY) - echo "$(GACUTIL) /i $(ASSEMBLY) /f $(GACUTIL_FLAGS)"; \ - $(GACUTIL) /i $(ASSEMBLY) /f $(GACUTIL_FLAGS) || exit 1; - -_uninstall-local: - if [`gacutil -l | grep "Number" | awk -F= '{print $$2}'` -gt "0" ] ; \ - then \ - echo "$(GACUTIL) /u $(ASSEMBLY_NAME) $(GACUTIL_FLAGS)"; \ - $(GACUTIL) /u $(ASSEMBLY_NAME) $(GACUTIL_FLAGS) || exit 1; \ - fi - - - -noinst__dir = $(prefix)/lib/mono/ -noinst___DATA = /$(ASSEMBLY) - - - - - - -$(ASSEMBLY): - - -$(srcdir)/$(ASSEMBLY).response: $(srcdir)/Makefile - echo "$(addprefix $(srcdir)/, $(SOURCES))" > $@ - - -all: $(ASSEMBLY) - -# rule to compile .resx files to .resources -%.resources: %.resx - $(RESGEN) /useSourcePath /compile $(@:.resources=.resx) - - - - - -install-data-local: _install-data-local - -uninstall-local: _uninstall-local - - - -#dir+=$(noinst__dir) -#_DATA+=$(noinst___DATA) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -prefix=@prefix@ -exec_prefix=${prefix} -libdir=${exec_prefix}/lib/mono/@PROJECT_NAME@ - -Name: -Description: -Version: @PROJECT_VERSION@ -Requires: -Libs: -r:${libdir}/@PROJECT_NAME@.dll - - - - - - - - - - - #!/bin/sh -# Run this to generate all the initial makefiles, etc. -# Ripped off from Mono, which ripped off from GNOME macros version - -DIE=0 - -srcdir=`dirname $0` -test -z "$srcdir" && srcdir=. - -if [ -n "$MONO_PATH" ]; then - # from -> /mono/lib:/another/mono/lib - # to -> /mono /another/mono - for i in `echo ${MONO_PATH} | tr ":" " "`; do - i=`dirname ${i}` - if [ -n "{i}" -a -d "${i}/share/aclocal" ]; then - ACLOCAL_FLAGS="-I ${i}/share/aclocal $ACLOCAL_FLAGS" - fi - if [ -n "{i}" -a -d "${i}/bin" ]; then - PATH="${i}/bin:$PATH" - fi - done - export PATH -fi - -(autoconf --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "**Error**: You must have \`autoconf' installed to compile Mono." - echo "Download the appropriate package for your distribution," - echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" - DIE=1 -} - -if [ -z "$LIBTOOL" ]; then - LIBTOOL=`which glibtool 2>/dev/null` - if [ ! -x "$LIBTOOL" ]; then - LIBTOOL=`which libtool` - fi -fi - -(grep "^AM_PROG_LIBTOOL" $srcdir/configure.ac >/dev/null) && { - ($LIBTOOL --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "**Error**: You must have \`libtool' installed to compile Mono." - echo "Get ftp://ftp.gnu.org/pub/gnu/libtool-1.2d.tar.gz" - echo "(or a newer version if it is available)" - DIE=1 - } -} - -grep "^AM_GNU_GETTEXT" $srcdir/configure.ac >/dev/null && { - grep "sed.*POTFILES" $srcdir/configure.ac >/dev/null || \ - (gettext --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "**Error**: You must have \`gettext' installed to compile Mono." - echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz" - echo "(or a newer version if it is available)" - DIE=1 - } -} - -(automake --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "**Error**: You must have \`automake' installed to compile Mono." - echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" - echo "(or a newer version if it is available)" - DIE=1 - NO_AUTOMAKE=yes -} - - -# if no automake, don't bother testing for aclocal -test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "**Error**: Missing \`aclocal'. The version of \`automake'" - echo "installed doesn't appear recent enough." - echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" - echo "(or a newer version if it is available)" - DIE=1 -} - -if test "$DIE" -eq 1; then - exit 1 -fi - -if test -z "$*"; then - echo "**Warning**: I am going to run \`configure' with no arguments." - echo "If you wish to pass any to it, please specify them on the" - echo \`$0\'" command line." - echo -fi - -case $CC in -xlc ) - am_opt=--include-deps;; -esac - - -if grep "^AM_PROG_LIBTOOL" configure.ac >/dev/null; then - if test -z "$NO_LIBTOOLIZE" ; then - echo "Running libtoolize..." - ${LIBTOOL}ize --force --copy - fi -fi - -echo "Running aclocal $ACLOCAL_FLAGS ..." -aclocal $ACLOCAL_FLAGS || { - echo - echo "**Error**: aclocal failed. This may mean that you have not" - echo "installed all of the packages you need, or you may need to" - echo "set ACLOCAL_FLAGS to include \"-I \$prefix/share/aclocal\"" - echo "for the prefix where you installed the packages whose" - echo "macros were not found" - exit 1 -} - -if grep "^AM_CONFIG_HEADER" configure.ac >/dev/null; then - echo "Running autoheader..." - autoheader || { echo "**Error**: autoheader failed."; exit 1; } -fi - -echo "Running automake --gnu $am_opt ..." -automake --add-missing --gnu $am_opt || - { echo "**Error**: automake failed."; exit 1; } -echo "Running autoconf ..." -autoconf || { echo "**Error**: autoconf failed."; exit 1; } - - -echo Running /autogen.sh ... -(cd $srcdir/ ; NOCONFIGURE=1 /bin/sh ./autogen.sh "$@") -echo Done running /autogen.sh ... - - -conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c - -if test x$NOCONFIGURE = x; then - echo Running $srcdir/configure $conf_flags "$@" ... - $srcdir/configure $conf_flags "$@" \ - && echo Now type \`make\' to compile $PKG_NAME || exit 1 -else - echo Skipping configure process. -fi - - - - - - - - - - -AC_INIT([]-solution,[]) -AC_CONFIG_AUX_DIR(.) -AM_INIT_AUTOMAKE([1.9 tar-ustar foreign]) -EXTRA_DIST="install-sh missing" -SOLUTION_NAME= -SOLUTION_VERSION=$VERSION -SOLUTION_DESCRIPTION="" -AC_SUBST(DESCRIPTION) - -AM_MAINTAINER_MODE - -dnl AC_PROG_INTLTOOL([0.25]) - -AC_PROG_INSTALL - -AC_MSG_CHECKING([whether we're building from an RCS]) -if test -f "$srcdir/.cvs_version" ; then - from_rcs=cvs -else - if test -f "$srcdir/.svn/entries" ; then - from_rcs=svn - else - from_rcs=no - fi -fi - -AC_MSG_RESULT($from_rcs) - -CONFIG="Release" -AC_SUBST(CONFIG) - -AC_CONFIG_SUBDIRS( -) - - -AC_OUTPUT([ -Makefile -]) - -echo "===" -echo "" -echo "Solution configuration summary" -echo "" -echo " * Solution Name: $SOLUTION_NAME" -echo " * Version: $SOLUTION_VERSION" -echo " * Packages:" -echo " - " -echo "" -echo "===" - - - - - - - - - SUBDIRS = - - - - - - - - - - - - -#! /bin/sh - -PACKAGE= -prefix=@prefix@ -exec_prefix=@exec_prefix@ - -# %%$@%$# why oh why isn't it $sharedir/ -# Day changed to 30 Mar 2007 -# ... -# 07:50 < cj> why are we installing .exe assemblies to $prefix/lib/$package/ and -# not $prefix/share/$package ? -# 07:50 < jonp> momentum. -# 07:50 < jonp> and it's hard to say that a .exe isn't platform specific -# 07:50 < jonp> as it can still contain DllImport's which make platform -# assumptions - -packagedir=$prefix/lib/ -export MONO_PATH=$MONO_PATH - -exec @RUNTIME@ $packagedir/$PACKAGE.exe "$@" - - - - - diff --git a/Prebuild/src/data/dnpb-1.0.xsd b/Prebuild/src/data/dnpb-1.0.xsd deleted file mode 100644 index b9e0e4eaf5..0000000000 --- a/Prebuild/src/data/dnpb-1.0.xsd +++ /dev/null @@ -1,183 +0,0 @@ - - - - - Copyright (c) 2004 Matthew Holmes (kerion@houston.rr.com) - - 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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, - BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Prebuild/src/data/dnpb-1.1.xsd b/Prebuild/src/data/dnpb-1.1.xsd deleted file mode 100644 index 2c065a3297..0000000000 --- a/Prebuild/src/data/dnpb-1.1.xsd +++ /dev/null @@ -1,184 +0,0 @@ - - - - - Copyright (c) 2004 Matthew Holmes (kerion@houston.rr.com) - - 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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, - BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Prebuild/src/data/dnpb-1.2.xsd b/Prebuild/src/data/dnpb-1.2.xsd deleted file mode 100644 index d694ab43d7..0000000000 --- a/Prebuild/src/data/dnpb-1.2.xsd +++ /dev/null @@ -1,198 +0,0 @@ - - - - - Copyright (c) 2004 Matthew Holmes (calefaction _at_ houston _._ rr _._ com) - - 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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, - BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Prebuild/src/data/dnpb-1.3.xsd b/Prebuild/src/data/dnpb-1.3.xsd deleted file mode 100644 index 8f31a544ab..0000000000 --- a/Prebuild/src/data/dnpb-1.3.xsd +++ /dev/null @@ -1,206 +0,0 @@ - - - - - Copyright (c) 2004-2005 Matthew Holmes (calefaction at houston . rr . com), Dan Moorehead (dan05a at gmail . com) - - .NET Pre-Build is an XML-driven pre-build tool allowing developers to - easily generate project or make files for major IDE's and .NET - development tools including: Visual Studio 2003, Visual Studio 2002, - SharpDevelop, MonoDevelop, and NAnt. - - BSD License: - - 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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, - BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Prebuild/src/data/dnpb-1.4.xsd b/Prebuild/src/data/dnpb-1.4.xsd deleted file mode 100644 index 1da50fcc7a..0000000000 --- a/Prebuild/src/data/dnpb-1.4.xsd +++ /dev/null @@ -1,212 +0,0 @@ - - - - - Copyright (c) 2004-2005 Matthew Holmes (calefaction at houston . rr . com), Dan Moorehead (dan05a at gmail . com) - - .NET Prebuild is a cross-platform XML-driven pre-build tool which - allows developers to easily generate project or make files for major - IDE's and .NET development tools including: Visual Studio .NET 2002 and - 2003, SharpDevelop, MonoDevelop, and NAnt. - - BSD License: - - 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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, - BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Prebuild/src/data/dnpb-1.5.xsd b/Prebuild/src/data/dnpb-1.5.xsd deleted file mode 100644 index e2b21f0c69..0000000000 --- a/Prebuild/src/data/dnpb-1.5.xsd +++ /dev/null @@ -1,215 +0,0 @@ - - - - - Copyright (c) 2004-2005 Matthew Holmes (calefaction at houston . rr . com), Dan Moorehead (dan05a at gmail . com) - - .NET Prebuild is a cross-platform XML-driven pre-build tool which - allows developers to easily generate project or make files for major - IDE's and .NET development tools including: Visual Studio .NET 2002 and - 2003, SharpDevelop, MonoDevelop, and NAnt. - - BSD License: - - 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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, - BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Prebuild/src/data/prebuild-1.6.xsd b/Prebuild/src/data/prebuild-1.6.xsd deleted file mode 100644 index 57ebd2eb9d..0000000000 --- a/Prebuild/src/data/prebuild-1.6.xsd +++ /dev/null @@ -1,231 +0,0 @@ - - - - - Copyright (c) 2004-2005 Matthew Holmes (calefaction at houston . rr . com), Dan Moorehead (dan05a at gmail . com) - - .NET Prebuild is a cross-platform XML-driven pre-build tool which - allows developers to easily generate project or make files for major - IDE's and .NET development tools including: Visual Studio .NET 2002 and - 2003, SharpDevelop, MonoDevelop, and NAnt. - - BSD License: - - 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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, - BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Prebuild/src/data/prebuild-1.7.xsd b/Prebuild/src/data/prebuild-1.7.xsd deleted file mode 100644 index c3f8d6bb67..0000000000 --- a/Prebuild/src/data/prebuild-1.7.xsd +++ /dev/null @@ -1,331 +0,0 @@ - - - - - Copyright (c) 2004-2007 - Matthew Holmes (calefaction at houston . rr . com), - Dan Moorehead (dan05a at gmail . com), - David Hudson (jendave at yahoo dot com), - C.J. Adams-Collier (cjac at colliertech dot com) - - .NET Prebuild is a cross-platform XML-driven pre-build tool which - allows developers to easily generate project or make files for major - IDE's and .NET development tools including: Visual Studio .NET 2002, - 2003, and 2005, SharpDevelop, MonoDevelop, NAnt, Xcode and the GNU Autotools. - - BSD License: - - 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 of the author may not be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, - BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR 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. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Prebuild/tests/Makefile b/Prebuild/tests/Makefile deleted file mode 100644 index 4a8ddf459d..0000000000 --- a/Prebuild/tests/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -# -# Executable -# - -# Executables -PREBUILD = mono ../src/bin/Release/prebuild.exe /target makefile - -# Files -PREBUILDS = $(wildcard *.prebuild) -RESULTS = $(PREBUILDS:prebuild=results) -TESTS = $(PREBUILDS:prebuild=test) - -all: $(TESTS) - -clean: - rm -f *~ *.log - rm -f $(RESULTS) - -%.test: %.prebuild - $(PREBUILD) /log $*.log /file $*.prebuild /ppi $*.results >& /dev/null - if ! cmp $*.expected $*.results; then \ - echo $*.prebuild failed; \ - false; \ - fi diff --git a/Prebuild/tests/README.txt b/Prebuild/tests/README.txt deleted file mode 100644 index 2c2de3bc50..0000000000 --- a/Prebuild/tests/README.txt +++ /dev/null @@ -1,5 +0,0 @@ -There are some tests that are run via a Makfile in this -directory. They haven't been included in any form of unit tests, but -they are there to help test the functionality in some what. Simply -build prebuild (so there is a src/bin/Release/prebuild.exe) and type -`make` in this directory. Everything should pass without errors. diff --git a/Prebuild/tests/include-001.expected b/Prebuild/tests/include-001.expected deleted file mode 100644 index 26374b5bc7..0000000000 --- a/Prebuild/tests/include-001.expected +++ /dev/null @@ -1,46 +0,0 @@ - - - - - DEBUG;TRACE - false - bin/Debug - true - - - - - TRACE - bin/Release - true - false - - - - - - DEBUG;TRACE - false - bin/Debug - true - Prebuild.snk - 1595 - - - - - TRACE - bin/Release - true - false - Prebuild.snk - 1595 - - - - - - - - - diff --git a/Prebuild/tests/include-001.include b/Prebuild/tests/include-001.include deleted file mode 100644 index 7f75962a7a..0000000000 --- a/Prebuild/tests/include-001.include +++ /dev/null @@ -1,33 +0,0 @@ - - - - DEBUG;TRACE - false - bin/Debug - true - Prebuild.snk - 1595 - - - - - TRACE - bin/Release - true - false - Prebuild.snk - 1595 - - - - - - - diff --git a/Prebuild/tests/include-001.prebuild b/Prebuild/tests/include-001.prebuild deleted file mode 100644 index 8047008951..0000000000 --- a/Prebuild/tests/include-001.prebuild +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - DEBUG;TRACE - false - bin/Debug - true - - - - - TRACE - bin/Release - true - false - - - - - diff --git a/Prebuild/tests/include-002-2.include b/Prebuild/tests/include-002-2.include deleted file mode 100644 index 661b7f3b06..0000000000 --- a/Prebuild/tests/include-002-2.include +++ /dev/null @@ -1,8 +0,0 @@ - - - DEBUG;TRACE - false - bin/Debug - true - - diff --git a/Prebuild/tests/include-002.expected b/Prebuild/tests/include-002.expected deleted file mode 100644 index 9849658b1e..0000000000 --- a/Prebuild/tests/include-002.expected +++ /dev/null @@ -1,26 +0,0 @@ - - - - - DEBUG;TRACE - false - bin/Debug - true - - - - - - DEBUG;TRACE - false - bin/Debug - true - - - - - - - - - diff --git a/Prebuild/tests/include-002.include b/Prebuild/tests/include-002.include deleted file mode 100644 index 64f4058dc0..0000000000 --- a/Prebuild/tests/include-002.include +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - diff --git a/Prebuild/tests/include-002.prebuild b/Prebuild/tests/include-002.prebuild deleted file mode 100644 index 9e85f20f54..0000000000 --- a/Prebuild/tests/include-002.prebuild +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/bin/Prebuild.exe b/bin/Prebuild.exe index eb4c224ac5412c827ee19ee93fa217eb73f0823e..ad84b98edf60ebbf4fec7fec73c36ebc14c07071 100755 GIT binary patch literal 227840 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

cR}U4@l&a-Riq};ZDsPZhfbh@PYoZc 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 z

}3ggtuOAJ&?BSs}#3gt$C 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

>`4 z&TmB9$0!|@^M=G-Vm(8*iJwr1z2aLP=FA)!wokNwT*W*o^Wnt(VyK3wMh8UuCn!vD z-M3;aL#jsKiTW2QOx5TIQLs`$RHGloA`MZE4vDdEP?)OGPhty0szyJH+BZ3jx$YOy zz>uoZFJcx$D`R?R#$zw?N(Bkx-Cx9w8Y133Ebi7ZiFc)Vh#`eViX{vwx=3;2Ta=$_ zKjE15wt}d(VUCD*2vY4A;h4gZs%@0x%?~L|)i%aau~tD;+gQg#8lu`d9TPsLFjd=D zjvWlC+QvER*KruvwzZ>)Au8wh?OQt*S&-<^&ap*7JVthO?9$LxnQ5Y<;|C3$jJdIs zL#!v9SI6|moZ86|r=c4_v(Aq88d`*OogIdTo;EGwo%S4Yz)l>182C%QFWLYv`FpDfN2)tp*HYw!iJWJ2Au%svSB-;wm$aR*IrNl{S5+Ez2 z&D#9ZkcFjf2!tdpX_6*smS56BLzD0;Z5HUiB%%5Jzu$B2+_}qpPqMLTtdHm2+0L9f zbLN~gXXeg5$Lsk&Y~i(2?`WE7&hh$#*u7255jz~jK8L);-gprETjVYF-WfMM*Zs*Z*@52&1Vko69^m_hXOOlsXcs~qc1Ii5~pLlwGw;G>|0rTdb77a$Ro{Gd7Fb6skF-L3Sy+o zD(}W1MoO&mdV(1HzRK$lVw`cSyb+0M>#Mx41bN!RH-eb9@Vy|WEj$^-w1uAqF>T=& zK}=hCL1Nm6Ro;cabp31bS|z5fw|IXX-bL7-J?ecvhz&{X*;vWv zC8n#8qn?3fOC4}o%LRZrHHdY#G$97z$2@bOrM2$0-nWC;$6Btb`(y9$3eEdM%d6_% z?7caNeXr$C^C#Z>gV=9dw)uB>w>E0YOImmN$Gqz(Eu-cS(x z{DrsG-RV6X#_q%^p(ldan_6$HdzW`^v(|eP>fPnF2C=udPWSHi-WO}wv!vE_)JCBotL$UD38e(%CC_O-gtdhZHi zx3B)Ex(B=$gV_C;u@8B3SF?59$9u>-S7N%4_mFp^#$+GwVeefM(|x>$SqZ0eiP=x< zZ0vFGq1BiAe;wpK?mfQx-|PM+jQxMBU#R;cVmNhi8pAI}!e7breQg5bYkTF=XhQo8;MzlyBZ5DcZ+l zk>@D3Itp4w$D-78v{v+4%U`>cIP5@}F}o2K8~5I2EYpuLV{S(1nRLn6_pVTFO&i?Q2?a0<@ru$3DwaN(_Z_RZ@MW@7yOQAz)t zl>DAND;Gtdr(DRo(-A^RM4mNer=%z*H%gh;NO+f|e^8zo`bKF^uETl9M6Rabe2hqv zK*C5FEkAPwA+T1)D9kAQbZ$CjHz0UML&fJ7Nl|F&@-78(DQw;1seO!M8|~Lm1#%R_ zC@vX2v+ko*{g%2sKWutyA3><>4s{*o!TV`6Mc^MC|WE1?C9?Y^i0yw(m6dwV=LKiG~`^c<+Wd0EBee7+m=4h zXlAWT5&EVLVa9Baq(q-tK4ab($^EdD|Fooh2cexQPfLoz*Jp*V&|JEmQ_+;!tB4P4 zS!ib9rawyUGCKT=Dd-RQ*SLwd$395+WS zg_EOc(^=k*ls-p!MlGM(7M4+sqnxAm#zCZK%pW1FFmI7E>GTI8>F(JxXS9;4OA)Hg z%voNmq+e+6283q}PZhGv zDsRkuK69sFvK;hc$@S(Z2$z}vKr744bD0jDRr+1#8oZ^!y44;rul3dj6yAn+C`hG6 zlKz0{uGoc?n=1Yn-t)^>&_l-Z)$p=0)|0lz9Vzc+YAc4 z+Ixlfd_{+Og~zd8W~Nr&?)3?T4v+qtv&@Rhx1x`0D*qH1u0zT)b4}%Y@VpD*bTd+U zuh)fMf6}`VeYpl9ah@)K zPd}dj$?L~6{ORUzEB`OrYVe*z_>Yyp@kXTNh|u{~q28_1;s`ilhCc$D&q2t39rOOR z@(lmAQvS^nzE;xT9ORNp?*=}N{xR=w%xZ-Bic9@>n7LD)!@Ehp!-(7?&-cjlN4)c= zY(wq>yq|NAgcwaw`%_-)loo{NPub;v1Q2H8&6^E)zE4{GxP_sQ(| zxX|k3LaWE*`7wEZLY|+H=ljg&DR1>2mXwDj<$ig-KgeZ&KQ8=szl0A<_=JRyN%(D0 z>?^4onvy=Mi7n@#tWkNV3@|CCQj_&IVtc=&lK`BmYBuX=Y+dBXp`_vfI@^FnRb zx&t$gJ$*_z=UJiZivshA`QelwV)QsiUKBiE6g;2telq1J{;$2MRbTU-@n%+i6z}7l zRrPQF_YFDi*WP(Ze^EH90$ln@Z#ua28ieGixxzVTNqDY=b3O7N`Jp~D0@(t&f%JOx zkIyVqpE*~a=XxTAJmRy=EU#LcxlrJ@3jEdpKKXpEr+iNT|1m&l%aAL`^H)^u^3U=} z=W``oD>$r|aI=K1()SUwxvD<1UT|xbzO0pJmZ{Hd7JSwUCYuG$dU@^=2scVt?LXm< zWwNFZI8^(uulmDGt^dBN*Jg0mx9W|Vr%-0O$$Foyx+9bI9z{s0@{Y`ng832it*W~+ zeejOGKT|FIxeT21512cD@BPMWGf!82D1(zGRja&3KH)6#|GVlrgw0bwmg(^>n)+(* zM!}~8xt_TW;TJR4`Pr#oMJ`i%yrHRQc@LQJso%&vVBUiB+z()O%*6YVADjA*nLeL% z?(^4F{wVWJ@6oAGXKu#x|ILi~ECVS$^_Rd|>G|(dpU)ieDObCs-7XoUt^mGQ{Tv{Z zD{lACu3nCCW%X~-;s&H&=f48}-Rt~5q+jQcA_P82?-2+cKH>KZwj&ZAlb#-vo*whN zArIdzz3cEkS$$eXhxcT4UB$con<^Gou)i1LdB?QYibu?i)7B#-hW!EO^iTT-?`fGA zr1>=!Ps>~wGl!;8n!SD6brs)~w!Z2A&9vQk{(*%5F>Sf|zO?v#zoO>GitqcU)jWrk z^J=;)p7JljJG$TZ*VTAvg&g>lKzPdE32A(v*;>7<%WRwenTom$HOQjOq3JV?mwDZE>RD3h z0qV;Mv652dc~W8=NtTY2%fi_znK1A zvn)eSTa)?C^q*BM%hb;JkBUzTKGbnvfXrDmqaM^=J>x$smYKF0pYo|0e_O#277N45 zbEWV12+Vt=@3qi|UL|v9BYa(jhQF=&RKSh-%z{e7{Ef#lXUp?>2(O;8yz*g4winGY zfBTG;mEZKbXIxyl4ES7L$&va3-jg4g(EnWwnq!$iC`RGjq)SX;t1sGLlr+1 z$WII8&60l1yQcE~%4a40c}ed8Rlio*k)ajA@V6BmnfC(oj?719{FC>hl&tW{KOGtR zQExXlRXkGhFnV;Ta<0(7+J6v~pX*af%$1ow*QYeNPR5H8=07X0%Y4xP4N{I|o~wLC z<_>VhD>CFpO5I-zRsAU}d0u6;KYQi^SXSrFoI0h$>zFxnN;Z?5Id@85hO&a%_RJ}? zd=^isGea|%;obeCGn=N=dc>_(teU6L?(T|bB>W}9<>uECdKG-GmataBItdp^xJ<%k zgu5%&$a5P)yy+(4brNO~X6pOo`DTR6&6tEoB;^6&|CzA!S5KLVH+I${oNiu;a5g;1 zQ^6CDPnn8$Mg9)qSIjpMK4HFt@Ehg_2)}Lq8Q~A5%#%{)X({tFDf6t9`Gu5u-aL(x zFG@+{5n6>uXwQ0t{|iZZUQ%B02;cZjukcxNx;)R8=ea&>E$~_9E0X?%q<=%wzb)y{ zO8PG({dq}$LDFCJiL=QN=ZXyRX~?jZb2DsZY33W~^)E8dAbdWvstRQ)m^-yXaHwFr zvn$x{+zP^JmE21tcdg`JCAn8i`esSrF6mt;-)JtI`Tyz~P5aEsGaAjcGiwlb&O968 z4Kvpv?4G$D;Q=XAn0XVPZ;|JtGrx}KH_7wcCA@p)56-yC+&lB{raWdohA`uOdgiqH z#R$)>Z%4SI{$B4c@1pug5w5HMF~S}78UHSCPyJ&5(V4^b-FUvW{wTs@_4gwDaQ&kQ zAEf9QSXei z7a_dp>^6j(&dwtIgR_qy96b922w!*hBM9Gf_EQM&Kiiw}QSZ^S7a{!4*=-2_?d&W< zZ{ZPywF^Ih@WO?UAY8xjDTG}My_p~NvI`d>JhZS4;T;RJ2tT~=2*ST!_yL4pU-$^Z ze_8m*0`|As5!T02=`&ko4$Mc{^=vr4^Myn^kdV1 zHGS5M#WOCO(J|xt88^-N?2LzJRL#72=B}B~%zRDE?98&g3bj!3l1%KY(Y)k6?I*8`|AekhU?x^_uaY*$f2ot>#y3>AjItx zW(LBU2xlRjjS%m_$y$6q!UbjyZi$$Sx6I~YoqxJnjM#a&JEhT_g;jVx-bp&!>_AQz zat82**)Vbocz^75kjA&;U9mU9KX42lfw!T?+fm~k@B!QjufRL;M%KHqf`2c(1Mf4d zadPk?9O=5)eA--M9)zdh5qJu|XfBr56k>~{ylhpvhopxTJo<1tIZ2ocjtmHhv}bMz%ma@`gbJM^4hM}+I0qN zy>9lh8e`r)yAfgc8SL*(l74J<3sMS_a*Kpp&-@rtzI5iw>8!N|;j!862-9^HvevqD z5nK7tB0~O43BM}gcO?DC68=iUigQ?UzJ$vpY&nN5UUd%ZUMDGgB^;2HqZ0n9qrzHH9ni?QOSwy1Tz!5& zYOR;>>q~CN^RMUKLO4rakMQS9jv;(u$vp_CEd6tYf3}qU`hjpP9SMKBoSdwD{NLnB7 z8!ke)5i->?*Fd8BrURj8Hbb)d=2{82K*IWFD`c#P_sv$|c^g9Pt3k^8cw4Lq&wl_( z>*Jj-hBrXk`sP)TwLW~D7bDz@mVLbIbQ!`P$XXxoAzg`ZKRlk;1qT+`E5)0MKHlcp zgm4I0_>k_`A{;SW5RRfv-yAg8Av|O{5gvxu*2mg$H^Nt=W#8O_mVNVwc=yYPHrRvk zO=#c8iTZAYZ^0W>zWEch?3+8#rjI+&4j?=RZQ?;otlGn7g%7Y0ig#?a~q!TL+F`5$GaZB`7?yL zj|A%k-+UOMXFg_*;`yTpaq0rP%!h7z9iBglq)9Ji#=+o$vZ~hXY zXFh{I`8b*W7Ce6reZqMQgdY3{$MF1lgg8F}UFbv4y&cbg1%2q7hY@=4X}=TCe~l0~ z2cXA3?EH7*`BC)Phd#U;&tF21eOUhQ!Sk2VV;?6;8GZ#l_RUw(SKoXcz4Wmb_;ZBc zLeG4x2tJ1JJLrvX{t^A~&3DlQ-+T|a`|vS;2H_8YFZQ;9sgJe8LkNEa?0oZ2z{@xP z42(SU6map)lM?<5aPe_p(3cTDjh21$uehzqH$O37L-HR;1v*5GFjP^1JYrRT@r+HNf=is&^4=06d@O(N#db?-fd4Ysyc&G zOv1ap%aQV4?@FY+2cd^ESZ#QIA42TFdF^=q07B2)=WW3Ay$C(?XWk|}e@Mbl!k_NL z8+|RpPkUPs-tTQg_!;jygrD^~5q{3wiSYB@ZiElQ`|sn-)C~w9_Fjqbue?17|JutU z{2Q+u;UiuS;iFzJ!pE>T;F~Xb2M|8)4Iuoomq+*&?`DL5>lF|_;f*5vns*4{-+N;S zzwX_F@EhK32*2sQ2I057BM4vcjw1YT?{(-!rT+#zS0KC$Yst@L+91VVgW0?Y)V>6L z9`_#d9`nBI{h0R{`VIaP|4M(8e}kX(`}~{z!~VGcR{x#;d;EL-hy8E)zx03WS7v5p z=4F~Pmt?kQUXjUW`ZB|r2Qyy9w2Ffje^~L|iYF_kR$g1Vqw9GE1#|W^@56V?%{Dy@2evoem7OU4O*Nj_FpBqoByI|i}1#5GVO7* zO^QUzJ&HRP?LR{KgG+F)B%BC*K7i+^JM{UDc&-EvZO{Y@A(bz~e=|_%&JW|WduH3- zn{wSFrgN--Yd1|}_eg%&Y&hJVlM6)+J}I|n3$CEg_T~((hM!+nKZXKwglAFi@D+ei2I_Z9XB%@rxp*uhGJ z*?zMri_cXTMza0#xFa`^KbSLmJ*U}#`%dw)VqZ6JJ&V6aj%dlM*(USjKBsM|M) zIG@&y_VxFmQ^UYNKMX`A9Pg$Fw4U7IZTlo`w7*~S z*W>d8BRSJGHk4z!{I=m+0t0*dL(upfaX>6Vz-3E6SZzyouy0?kFtQ_8kdJI?4^3Bg zxHmWA*d##p`hk9f|6S-hc_BB1ygAK1neV00tMCqUaVk|Q}` zz(KI~mcBv(mQxI+A~81IJ~}*%n}^L7@cC9UPsjSc!ce}D-3#RPQ95BcVNCGsa8ST#;Okvk zT=Kg;+c%6kL9j?NUBi6?64{&^>;>;IUCNnAb<1yVqzVB;%Y+{`9M<3w!?Zr%jm`jH zosz+*MTTA}Xg24wJ*F$Kr8vHhdIHR}_vZ^a$>`4sKw@X1ZwS&*Z)?5>Ql~J&qI{NK zwC~59VXR;}9O9q^3Mq5B<_MSKY3nG*%CzGSXVW><-#3DZ-z$CDiqVgkS6;wu&f+?1 zl9E7V#JlpF^M?Q?KeT7V&7%+!5J-6L7{nLAH6|2xNI9w(%%*nJIXZ;1PXNNZ&7Ftkhn=SnEyxBCI z9~}~uI!C*qISSz*Iovn)<@$SM&aLYk>_Gz?`?I|uE*nOUJZW#XjKf!wI8#a z6+l#I8)-(Wh?MNKCe#$wt#T z1Jnnhy{WooES(^Thy~S}?4Y4!j6}ERhwQu+8WROh+c2^@-0p+Yr@@w*a;9mArG-^nLj)DweM8*WYk{^ub@QBTmlyG7O zlYo-CD^FP+=BROmsT!*oloufF>$4+Sj18n>D9Ht*>kIubqXrASINmZUq*x=;VTVvp zcY?6c_#C6_spGe15BBwnHi@WI$uTN?T>${13hxI;m<Q)*yz=DJ5=(v3B4 z&-eFrkAZ!=^D;Std=WDpkrt_tfYpeVDpkSl^fJ9n9md{O*Eq*N$9|m`W%(*n{i%A>D>XMZ5o7S`J^ zJdC*&n%W|wB#qj@8sO{j^{aRdS5A0}g)(QK)H3#_}Cbwr{i3$qqbNjOBx64wFipJ4oV338g)NIZcMy#nFtVd{B zksDAvE?{(dp$cMqE_VPX(9R)D|EF!6-C#4&}OKF_Y^FxXqc4(o6~}Iwh;IeVmpccPQl|4H2C%y$~xUsM1!# z%7n!*L18D;fELbRlCC2}hxw&aXVg$VuwK{~s9wsGc$(tl%5>OjrbDv~zJ;+rKg?RNuwlND zJqs>6I;79}!F_$bqqIu22~5~TN@TFZM)}NpBDlwK4r8KZ*}nb$lr+$>4@vOz~pT2AGR&3 zG~TXXe&Yb?$4Y_$v){I|QG6F^JuJBX{7{gxwQX=DcofYL~d45)_fh>S*MWNThjX7zvyyVcd4=dKe42AQi%V0Lqw)tO(bn;V@MhXQ%k9^x1-Dc|+R@>+pfV zqm>K&Tz&NIbO&CWfjzo(v|Y4uV;^?z!2M}^LbHAV!nyz}1X8j`mh6zQ1EEV|fI7~S z1?lV~(sZ@I8w`o*?{ti9qJT0M^#L)JnPU0SqQrHZZ(}--(juvul z`(PPhtw}E&l5`RTc64L6xc?}bQ)QVLc9W54uNb%3@|k^lO34^W6a_x*sDrP1ni`mCukQ03f zYaQz3z;V~H%?V~$&!gg3G;RI;`9lHapru3vDh0y@sBKY~&>}X5hE?iyU@5A4*o+9< zLpk6B*$~$70`%y@%eATu1r`CM#OQ^i5giHJ`BMDlsBWhvC@za+nTudG5ZDYdkSFCm zO$34Df#bz4NhEw=DpV)QM|(SXJVoU#OW{2%Fq{u#CftF2v?@cBwPijT$+wy~nbnz|??Ae_Yg{XF97}=B? ziD=DrVTPXOJV)#!h^|&AeWPI{ z)RC}#YIiFj#A1B?Kc6il6JOb-De0SP*Qb^97RPP!>B4FbGhJZrwxhrHdp6O)0U} zt1bgKpc?>zJtTd?=s@NNmJyg18}av$fd_m zr;>JY2i+`%n0~gpdTeVRzJyVDjY5NDC=h?x3}P(<*{{%Z4z?woN|M0mNj6bGfbg?e z0W2^8?Lz(pdhPpj-3NAJ**UxqifkJgmA}Xk#kO;>kln{(=%P?8(FJ` z!l7n~5`!%Oi}L|%MLB^*qjBcPd4nb5DN-iJ3aU`!NhwIeFDYn}nuh2K$DoF#(_BZ$ z=~O~?+!&Mzc$0ZC?qqf>AyUFIY^0P+WXTjCvt%lfB_r(3GLa~AEnmm^odt{MMC(M@ zKUyJ@%+ir4OGTp0wX=p<_L=FaIm7~~M3#g!OHM78Et0II({oOXr_)(JH5*wtmB^CO zNyGvmL=jTEE7&;W`_}&0ni3L>T6WngzE!4%{y}=D!2_S7Hl2rRuhE8uoc{~ z$z5U|M<-@{3MM3OEK}x4ynrO7Cx@FDF|N0AI26$-9*!_eS`dggdWBT69W_4x!}#M`*=pf?7-p>BWdpj1QJ( zd@hM2Cv3?~){N6w;Kr!TlmzM0NnNt;l*)FIr9@?tr6iw=j*XsHi8Vrps3W1}s|ckM zR0=6%iBhu9@&3j+Dux1gdLo|Ug7z`w5$&JtThV@j(Yfg>dtK~&7?YifeSPqv#ggIm z35vS{VG>yqi_C+tafub8STWK!O%}DT=}3}&+%~LpPFxegi39sg=7>IrOX65dEEP+T zfs8xIbsZ4;UK~GIG=jC1Vw}#F6h+k{6l*fo!9-JGGxkB7h{Y6q$3C+G$2@|ckg9mN zHkYIIi`BsJwKyG!NAL>V;8`KNIl%0Kq>uoLo)~?>BU1$i2__Fr3BfU<0GY2(K}{(f z7St>`bAvVhh(2tFjopPW&Eu2+&utCMvrW_@ksM9v8D(8SAm4wtSEZ! z%-}94P#M|Nyr)@yMWaC>aQV}dD|8R{={ZpNQh9QaPUXIWEQNSPQ~j4w(GIy2*5Qb% zJ2G0LqriL?Viaf`U>sN)Py`4WST^P0@6vr2j@aR09EJ@#H%6J& zmA6RPRO)joCg#9vGo;%$1s(>|3-we-m+HlR zV7Ng5O%VDL+Mo&Kv`lNF6qi}0z zfq(QLdPFBE$hHgkf=?7uh)W@sygr8`P&_z8mJF)X*uZg+@C?gHJVTk)rm00te<-OM zKxpp=(*U3#fQdDn4;tN{AB54#qt;52FlLQDw2mvIClKCV(4<(1{5n z`>MvWvz2p0!#KjwJz}GUZk~X)v4bjJrQav11sT81QrwOT~9E z1y&3TrUXz0lSmw!t_L_Fh0l^0BwCL*BMk@JWE_%BIGx1)1r33UW?ynaU>jihfa})h zx^X5{#Kt;!2?ptK$F6NU7bkCmyb&QIrAbh#W6%N?8Iwv?Z!GLZoQ6LXon>8loV7lX znE4?-1uZ;Gs|Uw?!!~&QoBIl3g3R2l@b>2{Mq9E_=xiyL8txx*aTduA7K7Nc!qgSR zvzteqPuH}9hb^pKD_}27%k1jBc%?yr_ar(m;nNxh%_~h@#tA#x z^XfcFhb3zEkhm>i`v)hu!=qpB{6V2HQVH*bM9?#tuRr#4}h_7 zG&iuNcs@+d?gp=Fh%+WtB5<}Q(#e#;8hmeVA8a3qm@N0<^)WEz@Wuwb^hkw0gq;T% zg|fjEoQn)V^y|3@F~NrN*q_XyIfrIEJ#rA)6_JCQtf&Ses$+6Fl_Ay&vt=P|W3UHh zUsB&H>DU(>AEu<>xa`QG1|}0uo)=&gj>uS9RmH6n96XgYkdZT659VSH!BoH`mMp>| zLug%`Y!Aec9ww61&gh{$9N@<=DVCy!C2p{9GHm+fSa*0lN_z@VoZ2z=Ks(RBCCcQG zBp|K*Wv#!^4ijk^%nd17j2FZf3w&foHZep)gTrJdz{ykSH6y@UXQ-n-9EMw9lVeA+ zFhW}6c&}_DVmclL^O~-5s>0plz2A%?aA1gnE7oGGCuJ+BH+=%G!%MM14JzH{h^^HVf z+2n`??;5h1F-cY|8$0)dW9bY?EGoiu20aSHeZBjOWP$m6po@nOxLR9tqu_EmNIE)< zwVc)du0(K(mV7KFKwf>13L}&q`xp7V7;eu=jYkA2I7iW!! zVJzTZ%_!al&*Cj|yt6pJfH&Clcn5q0DR^rGX*g?w3k&+pAby$Jk3Tbmi#ja6@%}n$ zE!&CQ{m8?L7P&a1Wf~9;<1df@m*V~YTX1*DZN^juzZXx#d-sF^u`gxu1x%^YfZse) zx)Cys?T#X+QU1)%ohYxkUW!sf0%I>q^r2n0+9Wty%o}ijXS63*pu`P;JS33WLILmA zo3=Le1NZp>Miy`Ovj>X70Q#uCT7gvJ!W>vAcpd?c`w=gof2JeZZUf52|GEIl;k8dF z(-2U>^}rlz0$gIicHZqx(h6Y)hlcC2ZRA40Aelz+JA@{N1L6!IJ}52Zkw-F-VDV0I=zEPBzmw=> z0i+-}CQ)I0dzer9Te{{7dQf~%SLbF(~A6di?AhpMsS2h8g zs5D5o*^$U+ZBlGNW*6Ha1Z~w)XcOL^Za3zJCXnCBmNe`J+?f>3Ps82^2zj*Ss1?8- z?LyKk`R_>ZK5CO{h1B=e?*|kP>h^0FF*@3hGAWQ(QZQDWKV= zl3PnspxJ>nmq&$?4s*IY9ICXSg3zm1VUBCvOf!T#e^=r67F?DBQGdD4ODC8b(F3-f zMM=)CDEU_aLL;tJX#`CQWU@sQmdLjY6;$kV{%X&OEfs-fE3DaMPLt+TN@PK@agT%z zf=85|q@ERTO9HjE1bCUg6B`Y(mBoOpN&zxK-`k7ztXpc4e(XnwiH@9(ud3%k;R-V^ zN&N;es;Q;&Iw<4Wg0aFK^-XMR2-BW|w-=Nm6_)}Au5?EJO8m9rY8-vSEeE@|$QUYh zDUhy4eVix)R^*?hcp{EA|0+?H93xVd{q9A+mc|8vs5^j`E;OcnJ<`c%Tacz)OG(Vx zLa5}NLEy3)zgGbUTj40BVNg`E&efPhJ-|uD>{5K-8)t3>4o#M;(BrI3_k0{i#}3rk zi~3YiSs6LDA0PWe=+zo=Mr*Ao@Rv?!$iqeZSc>t~QMQqBm_&kj&`t4Ae9fECo-mzVkF4}rNlnm+C zkFUjT6Sp|u$>ePqyImNiVf>mKtRX~M$&pmKW>q%Fm6V}W=Uh;wp{AosOr5W`XP4qC z!D)f)G}V-3luhR1-Qb%YxTLBB|2IJgG~jxuLFfmTI3(j`@vwDdl(rP3cU*c97tURp zGVGCZBF8Q&Lv+m5lrwcndD4iU)5tS3qUz4nIOEmK;e5A?gdWgo*qAeQ0l^-SV|s;B zqre1ot#PK6$w1<6*$DiUCsd--WQoFT00fmP-Jmlm&RIn{gg08yGFu>(W$AHq7v>UW zC;8oKK$cCK?vymF7dOOdwhiJ>^$c~0(oYQ=i=Qr-)P^*-Yysb^vA~|$r49{TEs<_p zxhCGSnn`hfCufzLucp4Sh^7f=NVU~*rYcy_RjDax#y^v0I}(mokCKkeLbkT-&b1JQ z7EKtpZfS!6>=Aa1K_pqp0UfnraTt5CoP!Vb2n5O%=nzV}CV$e^_FGPq_J( z6BXOFU}H|HVasYYR1M5QsW~*)XqJ&;TttA;XOSJ4!a9R!s|_LEMus5V2{C&ZH{4w$ zzZXIIa_vpZ45I!hnA*(hNW`^vgRMVH8U9vaL$iz`MJI!)xZRGJOArH;?h^@**of?6h8osPLGV)k&WZNF^``an?xA13~D<%1i8vEIPz_d*M{ zg7^6l;#Og#ayoOJ&9`oUUj(7E%B%y<>!237vT2v6R>6R(at*L;M=6>FZ76>c z`gjTc+A(UY@!TSiHljo;Qr07F4a%;^?SmJg{0gMDqQ?rU4JoUTwh?V?ME*L|T8;cm z@Wijjn2t-3z8bJsBi4*G;o_@lwcU;eQ-8}XmLSqDgK1V4V8 zhJ7R?Vr?O@*X$G1)}XH9)P}Uxh;2abD(MUO8XVVx=T<;(1^f*`tHhc(ks8f-T8HQL zXln&hShh|2z@9Xtmduo*26K`Nol>Brp(^2=qAKnI|Co8n^1LnHWYFV9-6&1buQE*K zUMFBs-H2OYzFXw9fs$4>npu=rdts`NLApSt*V*|*DaOTHI5Vor>y$~R);?_qepD2u zj_uP#@51jknSH^!UuGKR3}+4JPFSaTBjBlzrU$jGQdH$dKZCAfBeS-W3d1105fXzk zi^~L)Sq^zatm&0dQ^C~GkASUZq?%gwgzUgGRUhQtwYor{>C^yeWfdU3gDOL)xM;ja zB_NGejgzM8qyhBHqp+-`q0*mJkBUk((sBT;Tk5cHin*$DCzT_#sj~)KQk$6?hoM=m z#>t3Kirhk@fCfWU>p7@aI`0K8gQWeORp92;m>wQklwIO%&o2T}Hc> zoOV^5t#?j2)?r~P+i_E>sZ)bMHPR+PrM?xTY?jJoYB|mVQ%wmjPxJJbHG45Hm7=CT zsS`J%G>w1qsHsykNSERL;OTG%fbTgUd(m#-i>@BA^9CG9jm>#Qqs}a%hevhVAwVC- zyxAr2LoCmvj-d6x(HO$4*((b`&P{VBd&ikz+otZPUI653woi#*n#mQa)ybJT$ep+k zs{^^zqhZgNv5(|kykLzQ+B#>X#Z{>b{Xd7MGYv|-&xR+?ZBs)Bh<^KvR8lEI+Oq^( zB9$knrKwvd)Y6;O947zJa#LBzmN+VOlro)h{!#;~N1D`Bu4Zo`H!HWHx2AqaY=jb{ zQ5VnUoVf|G$q&gK@~7l1jOS3o(4q)OIN;bEZd^PEwqPUf^1TwaAgsHZ-6%H*ZNd4| z1niu}&;*;5@`WQZjPxdqo*f;_Np#VW=HzZ#7HM9K=9?K?z!~k}uugM5_-7}$s)J9n z;)^wNK|CI}rPb^Y`F#U<%PlVHwmJ;DbF9dNIumIh7h9BYzeM(Ew!9Q5D*>Hj&KW6M zsAGfRpgK@x8*?e+)Dy}XXEmagm&NclSEeDU3xXq|%eb=j+tc+qW7SgZlbJ$UQx?XW zGz_ITJ>O+(HYdlic-zi(XhxIc5N*khxs%t02*1*4M^5cSX!oTYWO9H~I65lieMq?s zG|Cd{Xx67TwsL9^DU_lS9k47~ZarEfr%?itFUO)K+mn52|&^5wb0T>vkeIlYp_I zGz<uS{&_2ql9U3M2c8D&LNqnRXD=`XbXf1)g@^04Hg3BiuZ}a08xoW$ z&J9MKmV>Q>dW+OHP-i@8Ld%wuD73(;)LJoBt56H;%Z1xPi%qzpo|R!Iax}o=cp0m zjXIY%q0Qtd(^iOEPP7B!^|`(?^J&3w#O-_{RCs1Cn;g_+?Kak(XSq)8POiYP_FFSK zh_)|Ux05xO?UpgNUZE!w^re4_HnR2FnR(X(!+xy7X%$&LVk&RsT5-PR z8r_Pq)G}3#m@&{n3rpF}EKgf_1-Odqfg#6#bsNw=F&H+BWX`Hb3$kW$+_JnJmfsD) zq6hyQagyT#Sb(ODqox}UgP8A>rtDdC)i(i7vl4yj)b{D9uf}(JmSU5t4g9_Vtuv#tDX4oz(Wa3nlTl<*Rr`86S$Cke$E^XC`-NEvq3;WzhN583wkyB3$x6t*m>=J&-7|#XF=_*&55LA^Av8V#X0uDXMTU40?dZ4+Km*K;Tl$Bz|PVNvEL)2YvbQ^O7gl^M}eCUD9sK24cV?P*sb+Pqs2 z@iZt`vu^sCThbVHfXR3stQUi4r<1Nx)ql;UAT0#Ku{N%H5NS0Opz)oO(L+SEow+V^ z6K)w;&$KK?8m(t4A}%wXFh~j@O9^waQe;Iy2@Z&zpf-&*lKMU!R%Y8|N)Z|@mWfyk zc2iv%52d|n*5BiRwPccgfZ?I7nlr0G{{!F%uEuC+(9am;)l_5T1~BEQz?sLzJ%yy5 zKBg`{=9@8IT>D@Rv}iqk)hpY98g}Q?@uZnWh+G$GDKozf^{D6%$$<-U7>y?$o?3w^ zz(W#2%8GVbmGjUZ*RO=ZL#0}Gn_%GLW)ADSBPH~qX>Tad$dzGl7E<&&dvzG2r)v#P zP8t~&V-?3V=OVk?7cf`-&s-0Tgm9To;iW0EH!OYUIyIp5dCD#2L>M?_u`5+d1et|e zreuD7HE6*xUIB{Pk>;=9m4O-AQVmRrukIyHhTF}oYK#D9I)yd7O2H9DH;<_1)su}i z@BDaai-md3Vn9f$ZYQCXR+J_*Mmgr>CiRK#6{(O^y*#bZ0AAtlQnBNl`!M4PiE9G6X9V z7CHx{R9$-xK&imwB+GQ`_r7Q-YkpByH(l$loyo@r^9 zxuUX8C8w3P)~Iv?tPo7Nw&k3P*4z$Q&L`k-U@Mlgc0Nwn3S8kT^-V3EkTkW1M55ya z`TV6=TO5Ma<~s@cEKaxPwFythxt{V7FCpUJcm(5pA0kKM#6L%dQg)$kl@aNwo73wVfkrfLi7 zz!adjMw-b{4d3lyPVm@$3f4n`9v{!7DciM>}bjQF*#o&G797ki+`WVkPJ3A&h9gIg>=kC(A-RaD$Lh6lhBl z@;a2%C0DdYtd08Z7%DPaQHae+h;1SRC|6wh7`zS18pUyF0|XxS;i8|o7h;TH0`Hk? z!}U^YV&=CeTPlXz1npD>G7PfM{jH7k%`8@tuot*;5v*?qu*YsXl3$_=z8F2gFYa$G z{7G))gCkwgxVpWkueI(MgUIblBq#&!QSGljI$UuCZc{f(0xRfCg=?J`F}%>~8g#5-qfTted`k)ee{3PyQG{qL%x zsRFrPJqP|&%ZF=WeXve(SLYQte#4UGOBE>XF=8yY9&PY|eqJb~QmLaTr_icR&Uavj z)TrUWo+A}hp>(xQir&Dc+K4eD-=jnZI7E6y-Qc*^mZRDfYiqUb)#UL7e35TfquO0O z>HRDkAG@9_RYc#!Y_1y(9YWdoTEN?Gb=uBrq*K2bU9jy7d410jg-WT8rXLd z8xA8y9@Y2Y>|2A5b97w*O0}tN7;S$Kp!P(#jBY9#U-lIcI#QYZ`ufM4W~b-@PJF0AAGGv4ksS+~{fcsDVQglW?@s zDB9F9WUVVs4JD#lqtVxcZ^2o9di8~+#N2TcCB`05BAgr?_V^aIG7oe47c7t#YU!p@ z<>#@LxYY>ed}VqmW{r9>j;aPSlT|FbiL9IMw8hiQ=6ym7lDYJvjmo3wqD>YJsChsq z48rKFvtgh>NQ1&5X{)qYZ_Qjl7lON&S` zb;EXb_nqMXNcXBL&hR(S4}+FmDG<4Ov5AqBi_*I4%KxC&xo zq^gR zqF6Y(T5c)MOVVB-uA5*kYP}Gq%pi`b8)3ARYZqlgKN>le+wCWB23a?VzR5;>c*aea zFs8=I9kYT5L)B#9$yrs|j?eYX8pn=@MNP+A%;@M0EX6OJInH^_(Q$1G53i_}(T?9W zQyd!F9sguCeCs-7l=i%If>so#C#^PaE3lDup+MzkKvFl@%|#v`jCbQw_-1tDX9WL0CAXyDoav1*iBSo1lGma+K?nKC+mUywQkq~TrOA}(z!H~H7aZ3ut}=^!nK$- zx@arLE=J_M9m$YAX3>7K3;?_YvWhYq(%s+yn);NOl##tLooVVhVor8a)Yx)3|BPj5 z^8I8xsiSq0Wo{$$K|k`~)L2Lp)(jnDurH%a;#eMbyzK&CMWsD?8Y=||ss+>zi{&lk zL{k?QPtx+BVJyFvTAq5lCpd;keQg)bv65K8=~6eA`pWWrZbi$9h!$z#5ChF_p!5-!JIe=@T^XgITdq?BynSWV*I%8yce2|>%@J~TT5hu#M#>!UrTgupM-XK zQsB7T#a>YHKbo5`j5Ily6RMCSA6Xp*Sb-&k~w;wAk-6+Y=`&F-Gn8K6-}&vT5WwMUCYTW^ew9C2|kO|w);w=E7X`J5t+ z7>$UfrjkTg?RLM7-Vq+l)}y?Aa2M$UQAT@DRF|C$Ja+>doeeUtBg-XTqPmZ==myt= z!Jzk(A5(R5aW{=iw3I~`v%++5PT$+0Riq zCC)7CnJSHm<(goDU+e6W!1h9lm8wBX!d59p5sV1th#M1bdgwLKJRxyPY4)0zn`ZW1 zpFoQ(j`q6=9F^=jXfu8!S}1Mo@h|{4^C%Qf5o=xh(#aHx4|s0*XVpcy{-Eq@(Ne2%$r zC~i6Nes@K*eDNL^(<-+)Ei(R=<7@nC@HpRyz8b{l#j0C@03G{eHU+ogtOj?`leiWkg=l1LX)@$rkAbHR#uM(^PP&z_2PuC* z`Jv_M6rS1HghLYd;1=O|U!runsq z>^V-+pKNuzh<&b=jzjdHgf@ACOYIJx(@OU=Efn5EL{K5VXIy!&Iry9UUEZ! z3QxH*zaX2lJaR-UmL<}c@A1BX2E1R-V@Wi*?6rNt8fK@(sQhe=`)ksJqxnpib^9ct z#=SFXsG5JgP?Zg=&nFF4^FyfPADA2o;vCQ@+Kj_cx}oxBon7sf-iHiP>^?CJqnmhX zG9)(5Fqf70OS}49jna-TEo1M}W~(gg4vNy{qGjysUb2eIPPTPdtDL(ni3R4Xn8Mn_ z@~oa5=i{QHIK(E?N^!Gm!cm%ZFQV|1CjcgFWgIreM9jdQ(GhqBc}T2T#C2(==#;W_ zairyw-6(3rqHqJ&0}UZW44SSpCqvJdA|liDNOw-e+VRk3G6zYIk1iJC?*UybDt6Iy z9Q>je(_6t%+*^Kpbg>YB59nf1v2?*QVWN4&H zUjCijnPicPc2DQhanZ&x+{vPih4_0x8;i^d@r`4;lSLZ~k+gXy894f9PXU+OkUCZT zW04AIB=11z1U5bb3D0lu-ks_)u&>xZJNySB4;Ve zEqu0P9ms{a-FoDWIJcmue3hqEpCi;9ztc8ueZ=g$>abYY z-?g&Va7Pa4WF{H)7+)+_Zp z8F+S|GYNy|N2qHosX@Ygx=geLc`JJUBfj$2Nj$mX3dBDSKga*pV&PYx};gpmWqO%UC2 z7Fpd$4ymM7emg*`&30tVUXEMZ%w-P6& z8~ZdTQF7j48?e9SRl+8W4Hwt;B}vtGR_rSx#ZE;<^_(s3P>U!9oN!OhZPz^^$z|;U ztGie4CUV@eb#4%wEw{jvsviPtg||XKN7jOCSDKN|B@RD4)`BN~R;(4_3goSna{Lt6 z#rVV*?>b$F6uiKJo0sT>*H`My48B``HK6an3%6#cUYp&CvUXCflPSgBD;^kGhI@s$ z#m1XRXb$oHKsVKM}*vt*t=VjFe{N5kI!qg7|9EZx+vS@qlwc!A{alTT0VP z(;JJ@%+WZ0jt&%?UwkK7Ie{OB<0$j9ZXADpUX34FV^3BiMSH>zxiNP&dbJMyTqA$v z7=FNNqj17Op!HkWdTKI`6j0s1bAG+HB+VYPaurU}Ne(bJI($=6? zh9rw(CG(An~{%?N7?oVWjbs#!hTCfwY`REuzTOJb_GIRE^`x+l8sM z9uIxGZ;YYDChJzxQg&CW3*}hj3cNSP(+CulG}TI#GTY*CdO%8^REY1yT@e^g4pOOd z1}Dv^2G&B5IXabwR<4wT6~}&)h{GQA@fP{x+vWUo*jZ}0l4kthEMjqBmSDChw*mPz z_EzwAH@KUhm!mwSyx|wQRUYyxF@BDcA6(>YP-)0AdnM%}l;n)M&0Gd(WV{^8v?A=r zFF(sjec_;SzU@W46`?|7xmKi5UyybAnapBcEQUYcE47{FG%S7}052V69*uHtCi0ow zt{aX^gIpTVoL*L0v(z%#PP`nYS(aOiT)sHth~rSYUGQ$F#jXv!s>hAUsTPY4bd~Ky zxo)D8<}wE}zNdUG$j9%*5+cn4+N7L`Tk%Yv2Jpe@L*-dsrGMPD!sruxO}dmW zV{n*Hu}GHL25dPB#GF*38KS+~h%{Q(aZ1H|Fqzt>!?xWiEe)pdyaMg&F)8+r6{kT zNw-wK9(NCQeB$^;bxBm3T_G3IQ>CU`DqY818Eu8?Z7ihr6%YfI=Ul^Cn8^|bhvgK@ zXdCIR|I!lq`0AO=9=s-J+l(HpwSp$q?(9nxX1P)hmb+0T`K8P#ta7EC-gTwgz?qb_luDc@s*0%HINIgQ@kLan zp_K_cK}mipUcWH65q!hhAg5e#f?Lb-TaGG0%9LJATf|xrC9IJN>=nG>K6>KX=2rNC zmtr=v2hKAb*Fq{`?U@6slcJne?0))nfJrNf=MkeL*M@ZF#BZ~Ymp1K|ih8(|Upwu= zpBlMwc%@31`NeabE@&59lNfRq3}Z1xd(vGpN7J|`mJ;p9iPU!5u(S@hSg0h;g3d2R<*TaQo!h|doNDiiAp*ySTCdPW|*@%>^z84Z!)Ew9ZoE0*YiuZ z(d+u+5KEPDvc+OT9#k1<+&UuS zb@{b~_$N=m7uC9fawBf&vKY|gNUMh9N}g5@=U5NOCyq3gE2k*@ndIbATLr!UhB8E2f(c$p}DCh8C9Q{<{rZp6cJ`%1+jzTrTbc||~%>qE*U%}ShP z4;5O`{sq)04JLPuZj^VArxtrajmbAnIMaBMUtGqCE<`D%0rR5Q+`B8|L6s%8l&(G} zE?4eae85{4g~tuE;uq+nBreR->)Em4H~uE;inl`le`gG7_JO1F@_2R~UzKhX zsNG^QOWITud76{u<12f+mUmbr%cJdUZQE(9pqS-Uu9WjmTba$(5OrZ`pV>quP53fQ zd@gXaj<4ffk(eV^>J>1TtmnltpR40M5OJs~)5+ae1m4He`LxU|dl&QVn6YA`rym8S zJtZw#+g@xLrI))T zzbzO!uE5)|_T*tv?!^V4;=-EQeyZ2iar@hikO{H!^~t`IzjPf48@eOjyQPuUq#bvz zFZH&1@+M>a`s_Kz##$t1c2_4TH4zWm)nJmMag1njC`IGxap-1Vu`;Gg^@bT+49tto zQCfED>7eCAFI94;##?o?;~`vL(7-v$Z$xpGz?F5pylLU5c64vgm5!Iu(Q>PJbDrLQ z(v_O|cG!=(Q?+jN@7M^k}%Acomk~^-H zHk5IspyC;pTBQ9w2(BZPA|*+DbeteW=FYVy$a!j!`+T!s&(iYt~97Y zPKus^%pV0kO!XSz%7X!B&L#5Hh~oh(v7yi7Ql>t7P=`8pG3cUaL002f*g^C%j4fkc zynI|+geA|ks}46$N;;e3`CWzcPc*SM$*#x z>RNMeL9)}%MHD5be#(t@{M}st=o-jM+tLJ~e`ZpjAL3X9NI->AMT%U_=kj%^t6ZWDd@Q_$|q7Fc>xq@(TLS}2zgK15-l~)EDpNc zL5VmC%e1;%ympu+MZR9L5BO0&rD@{6%`k{o=&R6Cw_n>RH!;A1+uSH`zzn5?roBm= zbD$d~b@KZiQ68ksCv`)vx!l1k%{9e&0NA|7*5)t20AevHUZdQXPU6&1%OrY&om6ss z8Ss2>S__=aF%FLpuQ}0!od#F)MRze^o55?uL!-$?8R!V zs?}cSbM&)=NRNGT&(cIWn)Yb)+79)Q69)6kpKo*c=-j5iU;ngj{KVHpC*CZyD8-Ax zvAZI+d`NNed^^nJt#1R}%b!-W@X$W|Hm)D*K_PcWx73L-TRVPk46tHY#bK2@*=6C` zb76qAp)^*}85rd^3#9{+i&h?>gnUWb5}$rZX?L2-)^KOKP$xF7l(3w2szKBkq8E5C zD9o6>T2rm*7#!J?vLh7TlSt0La7@D)L2NnyihElv)?vLhQCgMrzou#~-T{3xh_*_5 zVtML7|A^JZ9i!3TmvLj*$KG)i#WdGjJ2@9PF9s zY-ev|FBm&4u7B~bh;bLp=rx@qh(i5L!O2LtRJGN_K@VEFWrBvPB#V~d! zC)8_Y&;Ib!K=ygEN5X?TF#j~|T z&M!*wiO&qB;NbMJ{zWNHT#B70O4W|d5DUSsDAH$$QuSl9&ere1tl^58rykT6qz}=} zqZE`y6V-6K-L}DBE8*;EkQCgQ9J4i9%bxj2)d+0}TbjT0;B#eU&pM@QZHbmH_Z*d_ zc4r|4t-BnAXdb;RlRE*GYGY3nPPu2cG4Tnd6#Pl|ftK{-&MBqZxUL-D(L6iaoSVHk z&ux8jDTv|9HCj9REbCjWT#Ntd-f7%UgH_jDyfoJ-q;CB556@$n)un3K^kOwlo6Vi* zx1?n@X^JM_F(?T!TqRC~Q{2vXBa^V8H%$b`=5uzrH)S2XzyeOa`ETnbf0L)AQjm@V zqv)xo6dd>;ivN+TO7IC@RgM3#tdq0gq=oT(@|>0K!f9nz94eFT88pBuS=P4UV4F!( zg+1$s6-Ph!e)J|`^Gq5}{4_%f&ZPO!QP1v^&`wCf>$H8I=$D$<`p#4r+Otq8n2RPl ztz=e|YK`Nb8n2?<5gUD+G}J%VSIY$BjBk22O@8e@$H5386yZ8YSG2Ix)=B>I6jNM& z>ihq38ELsC>aPOSl5*L$lCY2ur2TT`yyV(DI+&AttCR52T^E;cC$bMlNyxo0{=o*# zSwDweFT{7O_{Kxjjhy5|p4{X*W?8`7Ja0pLHC~IKYAe0JdOZ8St{v+8EM~^TV}qJx~gYn}^Ar+z5mTcCV9kEweBRv22LzpU&I*6LFuUi4iB-%)Gm zpGBz}_1x+%qV6X)q7+kC;m@2`4qNr|UJ~0)L~N3~i70tq7i0=$Wg)TCOu23EVw<>> zc*DxVvUlIHzq+fj5}s?@U%o8OUDGv_=r1Yb{MZtkRDY#pSsYtsydbx04r3nc{+p>U z_u(`X>a%h;!dQO-^xydBtfI5OHeVeFs7sIWe@i$q7 z?eAKwIS&MTYj%%~T=Q}ubGt>t{{D}Bf_Q_)pw#bVZs6kQX5)YC4|lxHXguA;PU%-! zm$-I{KPgL_37smF>3zs!WftL0;({n(Qu3k#b?;(2m0S$31@)q3xj7fTCeB`yPln|- zX!yPIvgUgnCa3coij#+HINDHgo0wD8o)XeM>60;E7^nx2{BlbJuIeNmxYvWv8l;lmMX>{7@hiJWmOm; zH-uPD-*CY6w3F~gJ`J%4`7EPn0ph%<=NcLV$$lFqNOJPn_Y%py(LJePpMA`>R}M#a zT^DgFez?c2{aAuJCjRvuJ>ko>fABfQJ+@{0JJHpk3b7G%;BH&5P=x)B-<=vVYHCeP zetgNFR~)d|CVx*3_KA-zhBxZk*2s&&M;B8bVP3bWG@3jQ=qVPSR^VyKlz=TKGI@ZK zmGomFcJuQTiOliWSqhZ;omkrJg<$0Rrw1IUv#9vBu~Bo(o?Qt(&=}6>Bo-W(Vg#WC zFNr$!Uh?~dr%dULzdea_GX8QTHarK+>Mzha%JWVwWP#@sK2X7^XNeim6aF8e}7G{Lf3FkxZWmtyBDU$?>-& z5h@j*2+_Ecell~;-Ym!)& zicf@nCw6Akzj$09t1P)}PU109`}AYe#+}q>EXPxRiDYv&K2ftgnEKMba2cLHw@sG% zod^~C&iML-_3h5jaQRHXcOIOim-NQ%=hR8ulP44`o%mu8ZAY$Gc|A|k1}e__ar4a{ z$B9a>drMI*nLZH}izCXN)tCOg%nu}yDHT64B)OHxV%!(|nfF7bO=g7C)|))evcj-0t!Sgf@5g%GOqO{vOhFxNu|>Yh>bO%(b~!Z&T_ajj}gS-Z>38iHT;Fosj@ zFyofh<@bhO)-Q;LA4i&qQ{(Q#^x$ef(`9`yX}IxkiKO9b{_(?Awz2M;G+fOO;f{wE z!9;|xqI{hg?_;-=z+G;%9~a?WtRWOwSnvU#WNtNop*&$I++74UuR_=zvxzE%E%#A(W; zJE;zWaLqIs3fW@>+zcqSZNNiTdYpeU-yyXSA=J|@l>ZqDS(Ji#=C5s-LUt%J?puxXFY4Jz4xsB;9FDwd49ul9li%3wI78psKj}{J)YMjVSXdE z4MVQ7%4n3^g5Mgm;$0E}qkC48+}V_+7u9!2m0tq?`corJL)ndhAImEr9Ep&`=RumW zGzuO5SPkaAr{CWEMf!=+#ypuW4(Vh`5ImFti3JpgeCqD22%O`GUI; zP?zn?#C4^(I>3V996D+%+t)FE4>Kh9(V+&^ibQKL08+r;jFoNA658gt$-YO#xoQ@x z+aR(KaYLhdLo_XTVtw}HHZvfO7BU#jT2yN#c!c5@&ftXeg9s4P55x^jT+4wwem`wL zsvzp21Oq+HES}NL10|?$G(tP}6B^SQp(o=&aVZ+be_X1}TMCi^+9FwGgJdO>}HAMhpV3`V0?)w!Rlb3dcG8C2}y?mSfD zDNdZhPFyJ{aKKdUOBIRH!PqWwad^TeOpX@dQDDa=UU5yq7kKPGWN6kl!W}WP4 zYjSijIebixM}U|ShCphdoyLL5(N*AjmNnsc-l!S*%8vx?1s!R*w~aD__{24wVhb}A@Ibgne6q|*Vv>_~!9iBJbVVQogBfj2>q<6MXAn8=)i zw`oui`VSKiH0mWcwrO-cggCgJE<-Kc4C6TznqH)Ev2W_e}Ip5B4Mue@167X~Dp*22sqhr=n1k{fNp#x|4@=_>2x(*`5k^L_c<{ z6#bZ;DI5uVqGo8`l}->Z&Qzd*fTanB=|GrZPq+niK>Rxk(0{qWj~fW4z@3ZX2P)YE zp=DrYN5vMSXzxpd> za#6Vht-MgcUm@ZGzGaYrnOs!UZ&XEKgyQ=KJU4H6(M=h1`8}4WQO?ugXHXt4_JdZw zX7vne{d+=gJe0X<_@d$x)FF(0Es`gx;KVRrs8}2j9bK1sDeII`KpyAJV+q~AR*Qs}#eK@{nyRWZ% z+H32Pd@v@+_L-0sSYadfQcw2i0F%3M+98SDN|CFK^b9rA zL*fnw7To!YehdBr)K^E^@b)dc8AY_VG4=JX`xX44tj@IwvDY zC>|xfIrm)H`yOOt!C~1dAJ95k&V3cs$XnszG z8a?$M?7@)+E?BI>a}Q@Y5OxH|C+tZ0IH-fu%)3Y%VM;2mDA0PqtW6_vhT@FiIfIz6 zsF6_cVH)YFhgpbxPDb!0)RhGQuPb+{+4`su&@f5kebT8w&fbSZE8g zI}e^((WE1~>f2zv@`1H+HnVAL|oijfGK(72PP z8VmJQw1GJnOpQCqO`d-lFu8tA*wIZ4CEiAFn2>i1Jvd|cV84lf*q4(~k`X@1eiNwo zh(b35ChG16QO(0NfoGm}zD#i{T=wG#cZ4)Gk_z*R5oR)l8*+k(+EttPGoY=xf}gM< zW-8x?C8Y{TA7dc6VW2l<@-BuQu>MVRXp zHlYb3YFB%mpR1oMF@+sxm$avWvwr}KoD;wuI6#QZtC3)_zEjpEA}Sgxy&*TnrIVC~@)VcKQn>k5!TsP$lbGw5 z`4XV?R6#`aS+V%>;;55|D>tPfH$~K9m85XvXBaRoXxj`$k_@5H3w6>0Rs}cfUX$^DFt1K(MNA$ z-=uUShe-}mQ!*!@SS&vOqHl$HzU+8hc0B2XifID&CMR@ ztH6mk`~)1@S|Q6?9)aicL|-%T zv=D-1awCUf^2inra*yaSAw{g=BBWy101wJn48IC2I}H!L8!JRmjg}p;7{!_?by-W9 zvSSRpZBb8f!osv1CmaxJw6a`z^qV2mNH_cx59Y9iwk=Smmtvdf`$DL4_9eQ zW*R07$VM*Ktt@{M#$o`cBgei_{|bmGf;Ncv?_=--0<#~JDg*=j75B`{`XD(T=R~mr znS&Vu!@#2g%D{86KwKK#&rnkSezu&NJYRDcn*dWlXiPbYdzap5GsIsMY#0l z>;=^X+E1XxM2$fV2C*u`>_rIM5(AzXN1RuNW^m!2QWboum{_sd@tPVYYMOuv3B&NX zj8!J{;I4|VhT4DXTWi$>V^nc*z28m<5r92E<@8sV2P_VkwXlE84Rd{Iq}7cNFq)U4zP& zY7(M#oo)d2RMnV9nj-$DZ`nW!WvC3||0AZ2&9R17S`|3G*xE7X;>4XR4wLndFhVpK zm{MsfEV&4%g#JV56hxRrL!WAdRYizfH*f17YAO-v3wPb9{R-iLurB7cu>p4};0@%S z!VG#gsjBv9md0rZSnp#-B2@1<3%z$?C(L5vUsZPlU#^xgjeJ1Sr~qB7cpGAk*i;J* zVs->NV!e+LlUJ=6BkV_D6c{6p;GdoI6{qJ#Qh4So%3#BR;9B%amrr^{-v)qA?o}1K zLRXuyxI*=qd^H#c24nn(={q)NUFe}9Ltt0i)+H;j@Lh!lFqNc2MM3PkViCw_AUx*X z4RyqjBjm#LN{o+FpbC@&CS7J@OjnwWT`d0LWuNHMm#Irr^vw~60B5Jd{qOS z;#;R71OJ_P{Q7+iP!9+(tN>JvOC``y75&-?2o9YIh1XUnQC2Q~00*+i^k_^MCO^R{ z7b(oAE45rh-83b}EGUdK3e?AHlvTiq;Fg$OC|qJlK8o8wdNyxkb94b@D|to*MoGvq zm_aBF0F@h@!)kCFEX-sFCKapYfr6WXK!>3jWAAFC7YccnfU}jWKRY|MtoLLy6Sjs6 zJ6PNnW%W1pWNIt^Ug+#HOdFL|12T>5p=b1pf>OkkNa-|d z*5SvChDU5xH!dvcs(z`U=Wr z$Cp^VVT9p4UPF5GMeD`GJxteN5I1^_I!|$*4a+5eOwe#=LyQ5dd3vLRepaJ~s;m0hXgc!FS0^ILG#QRTPd}*WByrzE7L|Bf?@6y7sch#6(+czUIN!QRZN4 zSa=jeCr3w^`y@pqSmS&p$x9=-TjIJ78zM=aSg4`ecEfF9@%^oFf#bq0@rlvaxS>%t z>(~U%WCQQ~%`aT>_G`*}xcmrBc@oc$?|5TO&gY+l@y9cH8xwx@^=Sd4yiA~MBJuRU z!Stx)g?H(d-<34pm78B6@xo7TgMPE_A3;9>oT}UM1Yxte-;$O;hQRO0@=G)}NX$RC z<-De^yZznyG@YNQ^T`ms@aQuJ8sS$e_$PCG>y|fa<_C>20%9Q2qXf=y=ZC?0wBQI8$K2AB6R+Hdh?R_^Ri5pTZG@Z0-%j94K9n~q6} zKq=#7@=6DAGQxcUohv*_0UjVKf5VYd;OY>7+6Mj0B(IMAAq*f@`c zYXatPiv;oZ8cA*ns^l~H;H0>wMR+Eykvx$-L?}aHeR!BHE;=qU*ph64OKPi;S~+tP z{1XCgHmeO(ICn@=e7wz)kf4?-%{L$^F+M4AU|1ql^^itt+uIUnL33FGtl>$q5XRYZ z%%)m2A~pu4iq6>r8mHL;UbBo>3YlsE{ApxR+-R#Uwh^kqmdNOYM2ih=5fq2e3VZpJ zMru9S5^GJia8@J=xdoie2gQZkEP|gHp;Vv0?AQ;@D7`cC0lHrk1SOZ(JC2%XJc>!ff%#@2=EQlS;Qs zPQa*v5+)?#&ozqU8x^j6>=dKMpY5h}jB(+@vVERh{z7W9_SLVK>~ynqZyDCZ{*l|b z+56W;9C-X6yP}`+Hh(bI6qXwv?Y95WjCY>6`_vL!P51A9TKf0Ov15 zTdXckXKjVFu) z(mE6`%;>ZBtWSE2TfLXO9{lovWk)T$=eBE~HF%wHDgSFPI*Fgwb-`;|Mue?QlD!qe z2!se49b%3m`2ns`CZfVK<4tBsin8mZwOrYG04D}2iR%E0W6IIG8N3tDKjJui^k@{k zM_JtHcgmthN0x2av~5ONb+y}X;Xa#poJIY^j_q5v{5dW%qHKfXb;_Cg5-lBWqOg81 zQTFM)z{W&wSC_X~zi#6sTlC!Bb7n4Bar(?Dbd>-5!hnR&n^gJr z`*bnA59QlD>4W}{(B1=wN2)lBuK&{cv1dN1cYF03Jrr}7I)qeEE7Mf^{)caesxbd; zn3^`Xck<{FRJqYgg>wTb&uXBt{U4_N2M@ii;>^EP+STW&Op-&09N9U%$KzU=lD0x5^+JEFnm;8D8MNf77%a>#t zd5<2BBl3x^Cb|6#`egYh!&EXg_4WT1{b{K)|1lwU6jgi?NqJMAqFkFy3B!8QzQZSm zsJLfOTH|AWW;2=Is-w>1?o;>4wbb66L1}a5zOKSl)!*0EoZa0$@8cH(FW5T=yHFP*lvBHPdxX~)tjGYeO~6HvHl zP{5(|F_wpXH&N@i?oqdo>gb;tb=2mur8IY5x{Lnp;#|#zPr~+mALc>X@5*%iT`!!? z#d+-AX2d6_kKsIl^QZTk)5-Td=+mLl_gk-0>FQB**4~-&$F!#Sem!W}AP+hjZJ@ju zPg*y)4SBX*4Epu-(%gCqUVo3;bY}YVT=ZEF`Duf<3LP!u*tbUtvKYW7n<7G-7^fGGZ@$DBs$Wk_P$F{;i)8m1Yx_ z{X{4CZKQUc7gF1|?o-b>pr2Vs?Vf0=f0n->eem{EAAo-G87jSgnu@+ADsc1nD^AC)ZaPdVef>3q^dWE1x$EDuOPUpOUfys=0Xy{d_wmzx^5&EexdW+t@xJu_h~D)1+>hwy@z3er zgpo^*LacN#lv0A+nLlWGeOQcZO( z?cKJG+*{9}&cm{(YyXWTKbJ{f^3?k84jpv)Kjwq!=R$s_UtGoXuTU{)Re*No-AXE< z3M#8Bq3T~wQR#_YR8w(*4xGrL_rnKL`QiXN6X#B)6JMaD;jhuoO^c}t?N@g_kFFf} zg8KR;Q|RzedM_%J{GJb>fM+7hD$9!=V!G;~(yu7XLwjGO;@Uzgti4JV_sXg2&ULCR zyGRw6Pf+=VAE~~m*mp*>H;b$&!_8G@~Gl` z&Y9Bl$1|#~p0265T}IWl)u4ZO{rST4EqnL!zxHlaG-&Rmu#s=k@S%g~a=|gGF4#?X zFCU?tz3a)55KifHX3>?xVwyQ)8YT68yyln7xo@hpIXnmZ&qM!X8E;(vp6V_fqB{i# zsUq(?s=Rn2v%K(Pi+1Ptlz#;Grm+s*7{zR?#V{`Z@c~hIMO-vUX&JZr!|j(8RdWJ?r5fe7WzL8{olEIf~rgM=z7^1_@FaXhQ640>M*TXxe|S| z46ja0()Zu)IhDC|5xp^FFum&ccbYS624!bwQ+|FvWr9Zkey`D*Wf`=6>y|ZjbvJc) zZdZ3b_R~*4Z~AHr9XN1+&g7lGaru{Dx~EK^`qAuJvoW3JY~ z2JierrT2?z&!H?@yl62UJN{E$_VMh3ty{O#+RxXLebOWf88Muak`kfYLv;AiVJgTk zfQ{Ly=L;{;y3aqazfyPwFOp+E9Ugw{t)T;H;oO;&bLteGzj$d%*6yq!3+FFb#^q<{ z!~eklU#rfitG9lp67=8Et?;K51f&!6{O{>idU z=-Rvu#je_rP1;gD@zwHT6B2Km@#GFZ(B=Sm(Qks zdw0{R+|$Jw85vi$ZQUyDkm={3{}*GdxdOjeQg@9i?^RNDef8$N%V$FWHF;9~zHjzk z*u7_ucyT>D`?wY|9UqsROw*=KqcyOr4I4Jl_U+qg|F;JyC+8#`fY0<)kWVKp<%*n~ov-}0=L$^w?Q=|;O!kS%R0msHz9^lhPM=FrQ87QB%sJVKY4dR|ec0CANl!rk@cr!b;p@sk zyS%QHt{0uEs=9XZ&FrH;$f+r*FK^$pHhRy_O{4Z@e;@Ee&WWIHU+);ccKzBppDbOn zYsu12QVx7~VAyxx?tP~Cmy4R(TNNFCI=uIK7JO2DT^W6y9z$uvA1hm%HleLTS-BR> z8MYy3;$Nuz+GW`OIV!2TNF^1Q==#+H%mqqTHHPJQ-OcJpD{F50-K?#DrnscMXK8uW z%fE(E(?qnK=sp6XYwO2Q?t9G&&rj{{u9kC{H}~}|1qm&wc2hsP^+h1vSn~?qTHA~2 zHU!b#9m6iw?s$Fu-K^nX(e5`k*X|ged3XDuqc<}9P|X*w(#&4cn0& zDq#*U(b*V;ICEohau_YqX`Fe^FgHrV{116J^WK#xpWzYDMf?n4#ECe=^LYmFr#KCK zClNnxd+6%L`FM@D(ed+Vqt_pNU7{aiTTo6yJB;Vbc_N{`NarAZ68T(~Yio~_!*+Cn zPvr5L1K5)SuAz>=HKrpSM_G1kOFA+F{7m;Nr292Z=-<9{Aozr>)7|6mdQ#r|9qIIV z??345NM|Sd(CJB!Qg*bCevB|u&Hi~wjYM}vtFu21D%vvngQD$|$Ny1h@s6qEFRzLm zo4;U4;?%z=?LVGc!1R(d_HG(?oKx(QX0kmM z>7_U&NoW6Xw%-0BHNmqFcOSV=NKFpqK1Y||xc|XmekMs8I7cV7d7zHjtlZ_`J0QPa z&M7!2{0`1^;9LcqrH$@Rl+iG15b3I8cd@k+GFaVDHW074D0@)jKp4=9x1axutbq89(6o`1{9-zsm|HBmva z$t@VXYQU570Dw18c@R?<0mHjgD}O!k&;fS>@kpRK>MHMp|Mu7XB-aBE-d~ybc;-hE z_(mbV^3oP{d*ML_Z)U*!jdy+hig_C<-dk6{Ro3te+y}m}4A{q@t6%e>e({8HnQ>l` zLIK0ymWc$l7(qE6H2JYdBxvE5>2Ktj!86O;L;SRoV?BYbpU@+J4}(8GYnJ*ziWtbj z4^n)Q=I<@X2{`_38$V!S$S^!u;nH5vL|>d{iT5&BwpQsXXvY8xZ+vJIaD!2I6rlJU ziu{|iC>QQzKt-UW4;~CffF?g~!!tXyM+?Zv`!Dcg92-KGv_TWUe*6DvK=GGB`3R7V zsH?Vp0CFGPmy_YtuSq`GG7|0`J`5a6o2p-y!u@KL@HxoFsPs$q|WraLF_jzX+e zK6(l}Q+aFpNR7*tpQt{KR%&Wv0YV=GK(FD8g)uG}Sv$<7^uVto8tcVZ*j9txD7}e) eSJ<$35A$H=%m3@cjNAX9spZc2|BwH58u&limO3Z^ literal 237568 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 C~-i(lxIZ%$p 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 diff --git a/prebuild.xml b/prebuild.xml index fdd024abde..7dec8ba788 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -1,6 +1,6 @@ - - - + + + TRACE;DEBUG @@ -9,7 +9,7 @@ false 4 false - + bin true true @@ -24,7 +24,7 @@ false 4 false - + bin false true @@ -71,23 +71,23 @@ - - - - - + + + + + - + - - - - - - + + + + + + @@ -108,10 +108,10 @@ - - + + - + @@ -158,17 +158,17 @@ - - - - - + + + + + - - - - + + + + @@ -190,9 +190,9 @@ ../../../bin/ - - - + + + @@ -216,9 +216,9 @@ ../../../bin/ - - - + + + @@ -242,16 +242,16 @@ - - - + + + - - + + - + @@ -270,8 +270,8 @@ ../../../../bin/ - - + + @@ -295,13 +295,13 @@ ../../../../bin/ - - + + - + @@ -324,9 +324,9 @@ - - - + + + @@ -347,12 +347,12 @@ ../../../../bin/ - - + + - - + + @@ -373,11 +373,11 @@ ../../../../bin/ - - + + - + @@ -403,11 +403,11 @@ - - - - - + + + + + @@ -429,13 +429,13 @@ ../../../../bin/ - - + + - - - + + + @@ -457,8 +457,8 @@ ../../../../bin/ - - + + @@ -480,8 +480,8 @@ ../../../../bin/ - - + + @@ -503,12 +503,12 @@ ../../../../bin/ - - - + + + - + @@ -529,13 +529,13 @@ ../../../../bin/ - - + + - - + + @@ -558,14 +558,14 @@ ../../../../bin/ - - + + - - - + + + @@ -587,14 +587,14 @@ ../../../../bin/ - - - - + + + + - + @@ -615,14 +615,14 @@ ../../../../bin/ - - + + - - - + + + @@ -643,14 +643,14 @@ ../../../bin/ - - - + + + - - + + @@ -679,16 +679,16 @@ - + - - + + - + @@ -710,26 +710,26 @@ - + - - + + - - - - + + + + - + @@ -752,14 +752,14 @@ - - - + + + - + @@ -767,16 +767,16 @@ - + - - - - + + + + - + @@ -802,13 +802,13 @@ - - + + - - + + @@ -829,13 +829,13 @@ ../../../bin/ - - + + - - + + @@ -857,16 +857,16 @@ ../../../bin/ - - + + - - + + @@ -888,16 +888,16 @@ ../../../bin/ - - + + - - + + @@ -918,11 +918,12 @@ ../../../bin/ + - - - + + + @@ -930,10 +931,10 @@ - - - - + + + + @@ -954,8 +955,8 @@ ../../../bin/ - - + + @@ -963,8 +964,8 @@ - - + + @@ -985,8 +986,8 @@ ../../../bin/ - - + + @@ -994,8 +995,8 @@ - - + + @@ -1016,8 +1017,8 @@ ../../../bin/ - - + + @@ -1025,8 +1026,8 @@ - - + + @@ -1047,8 +1048,8 @@ ../../../bin/ - - + + @@ -1056,8 +1057,8 @@ - - + + @@ -1079,8 +1080,8 @@ ../../../bin/ - - + + @@ -1089,8 +1090,8 @@ - - + + @@ -1111,8 +1112,8 @@ ../../../bin/ - - + + @@ -1120,8 +1121,8 @@ - - + + @@ -1142,8 +1143,8 @@ ../../../bin/ - - + + @@ -1151,8 +1152,8 @@ - - + + @@ -1174,8 +1175,8 @@ ../../../bin/ - - + + @@ -1184,8 +1185,8 @@ - - + + @@ -1215,11 +1216,11 @@ - - - - - + + + + + @@ -1241,8 +1242,8 @@ ../../../bin/ - - + + @@ -1251,8 +1252,8 @@ - - + + @@ -1276,23 +1277,23 @@ - - - + + + - + - - - - + + + + - + @@ -1313,20 +1314,20 @@ ../../bin/ - - - + + + - - + + - + @@ -1346,19 +1347,19 @@ ../../bin/ - - - + + + - - + + - + @@ -1381,21 +1382,21 @@ - - - - - + + + + + - - - - - - - + + + + + + + @@ -1403,24 +1404,24 @@ - + - + - - - + + + - + - + - + - + @@ -1441,40 +1442,40 @@ - - - - + + + + - - - + + + - - - - - - + + + + + + - + - - - + + + - + - + @@ -1493,26 +1494,26 @@ ../../../bin/ - - + + - - - + + + - - - + + + - + - - + + @@ -1531,7 +1532,7 @@ ../../../bin/ - + @@ -1542,9 +1543,9 @@ - - - + + + @@ -1568,9 +1569,9 @@ - - - + + + @@ -1581,12 +1582,12 @@ - - - - - - + + + + + + @@ -1610,11 +1611,11 @@ - + - + @@ -1637,10 +1638,10 @@ ../../../bin/ - - - - + + + + @@ -1652,9 +1653,9 @@ - - - + + + @@ -1674,11 +1675,11 @@ ../../../bin/ - + - - + + @@ -1688,11 +1689,11 @@ - + - + @@ -1709,8 +1710,8 @@ ../../../bin/ - - + + @@ -1718,11 +1719,11 @@ - + - + @@ -1739,14 +1740,14 @@ ../../../bin/ - + - - - - - + + + + + @@ -1757,17 +1758,16 @@ - + - + - + ../../../bin/ @@ -1780,12 +1780,12 @@ ../../../bin/ - + - - - + + + @@ -1795,15 +1795,14 @@ - + - + ../../../../bin/ @@ -1816,12 +1815,12 @@ ../../../../bin/ - + - - - + + + @@ -1832,16 +1831,15 @@ - + - + - + ../../../../bin/ @@ -1854,14 +1852,14 @@ ../../../../bin/ - + - - - - + + + + @@ -1873,11 +1871,11 @@ - + - + @@ -1910,11 +1908,11 @@ - - - - - + + + + + @@ -1934,13 +1932,13 @@ ../../../../bin/ - - + + - - + + @@ -1962,17 +1960,17 @@ ../../../bin/ - - + + - - + + - + @@ -1994,8 +1992,8 @@ ../../../bin/ - - + + @@ -2004,9 +2002,9 @@ - - - + + + @@ -2026,8 +2024,8 @@ ../../../bin/ - - + + @@ -2036,8 +2034,8 @@ - - + + @@ -2057,26 +2055,26 @@ ../../../bin/ - - + + - - + + - + - + - + @@ -2102,21 +2100,21 @@ - - - + + + - - + + - - + + - - - + + + @@ -2141,16 +2139,16 @@ - - - - + + + + - - - + + + @@ -2170,25 +2168,25 @@ - + - - + + - - + + - - + + - - - + + + @@ -2213,20 +2211,20 @@ - - - + + + - - + + - - + + - - - + + + @@ -2249,18 +2247,18 @@ - - + + - - + + - - - - + + + + @@ -2287,18 +2285,18 @@ - - + + - - + + - - - - + + + + @@ -2322,17 +2320,17 @@ - - + + - + - - - - + + + + @@ -2356,22 +2354,22 @@ - - - + + + - - - + + + - - - - + + + + @@ -2392,20 +2390,20 @@ ../../../../../bin/ - - + + - - - - - - + + + + + + - + @@ -2427,22 +2425,22 @@ - - + + - - + + - - - - + + + + @@ -2466,27 +2464,27 @@ - - - + + + - - + + - - - + + + - + - + @@ -2511,13 +2509,13 @@ - - - + + + - - - + + + @@ -2528,15 +2526,15 @@ - + - - - + + + - + @@ -2557,12 +2555,12 @@ ../../../bin/ - - + + - - + + @@ -2583,13 +2581,13 @@ ../../../bin/ - - + + - - + + @@ -2611,8 +2609,8 @@ ../../../bin/ - - + + @@ -2634,13 +2632,13 @@ ../../bin/ - - + + - - + + @@ -2662,13 +2660,13 @@ ../../../../bin/ - - + + - - - - + + + + @@ -2689,13 +2687,13 @@ ../../../../bin/ - - + + - - - - + + + + @@ -2716,13 +2714,13 @@ ../../../../bin/ - - + + - - - - + + + + @@ -2748,11 +2746,11 @@ - - - - - + + + + + @@ -2784,9 +2782,9 @@ ../../bin/ - - - + + + @@ -2810,27 +2808,27 @@ - - + + - - - - + + + + - - + + - + @@ -2851,16 +2849,16 @@ - - - - + + + + - - + + @@ -2880,16 +2878,16 @@ ../../../../bin/ - - - + + + - - + + @@ -2917,9 +2915,9 @@ - - - + + + @@ -2944,8 +2942,8 @@ - - + + @@ -2961,15 +2959,15 @@ - - + + - + - - - + + + - - - - - - - - + + + + + + + + @@ -3007,8 +3005,8 @@ - - + + @@ -3024,15 +3022,15 @@ - - + + - + - - - + + + - + @@ -3062,11 +3060,11 @@ ../../../../../bin/ - - - - - + + + + + @@ -3103,12 +3101,12 @@ - - - + + + - + - - - + + + @@ -3143,14 +3141,14 @@ ../../../../bin/ - - + + - - - + + + @@ -3161,58 +3159,4 @@ - - - - - DEBUG;TRACE - false - bin/Debug - true - 1595 - - - - - TRACE - bin/Release - true - false - 1595 - - - - - - - DEBUG;TRACE - false - ..\..\bin\ - true - Prebuild.snk - 1595 - - - - - TRACE - ..\..\bin\ - true - false - Prebuild.snk - 1595 - - - ../../bin/ - - - - - - - - - - - diff --git a/runprebuild.sh b/runprebuild.sh index 3e1417aaa6..b3b5c9d1d3 100755 --- a/runprebuild.sh +++ b/runprebuild.sh @@ -1,7 +1,4 @@ #!/bin/sh mono bin/Prebuild.exe /target nant -# needed until we break up OpenSim.exe -perl -pi -e 's{OpenSim.dll}{OpenSim.exe}' OpenSim/ApplicationPlugins/LoadRegions/OpenSim.ApplicationPlugins.LoadRegions.dll.build -mono bin/Prebuild.exe /target monodev mono bin/Prebuild.exe /target vs2008