From 7e65590a55ba575d0086bdfc25addaf1051d799b Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Sat, 11 Sep 2010 01:13:08 +0100 Subject: [PATCH] Update Prebuild.exe with Prebuild r323 + an existing OpenSim specific nant hack to correctly clean up chosen OpenSim exes and dlls in bin/ on a "nant clean" Source code is included for reference. This can go away again once Prebuild is updated with a more general mechanism for cleaning up files. The Prebuild source code here can be built with nant, or regnerated for other tools using the prebuild at {root}/bin/Prebuild.exe --- Prebuild/AUTHORS | 10 + Prebuild/COPYING | 65 + Prebuild/ChangeLog | 461 +++++++ Prebuild/INSTALL | 236 ++++ Prebuild/NEWS | 200 +++ Prebuild/README | 274 +++++ Prebuild/THANKS | 18 + Prebuild/TODO | 43 + Prebuild/clean.bat | 1 + Prebuild/clean.sh | 1 + Prebuild/doc/.svn/all-wcprops | 35 + Prebuild/doc/.svn/dir-prop-base | 5 + Prebuild/doc/.svn/entries | 198 +++ .../prop-base/prebuild-example1.xml.svn-base | 9 + .../prop-base/prebuild-example2.xml.svn-base | 9 + .../prop-base/prebuild-example3.xml.svn-base | 9 + .../prop-base/prebuild-example4.xml.svn-base | 9 + .../text-base/prebuild-example1.xml.svn-base | 300 +++++ .../text-base/prebuild-example2.xml.svn-base | 72 ++ .../text-base/prebuild-example3.xml.svn-base | 113 ++ .../text-base/prebuild-example4.xml.svn-base | 715 +++++++++++ .../text-base/prebuild-example5.xml.svn-base | 187 +++ 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 | 2 + Prebuild/prebuild.xml | 73 ++ Prebuild/scripts/.svn/all-wcprops | 125 ++ Prebuild/scripts/.svn/dir-prop-base | 6 + Prebuild/scripts/.svn/entries | 708 +++++++++++ .../scripts/.svn/prop-base/Clean.bat.svn-base | 13 + .../scripts/.svn/prop-base/Clean.sh.svn-base | 9 + .../scripts/.svn/prop-base/Help.bat.svn-base | 13 + .../.svn/prop-base/MonoDevelop.sh.svn-base | 13 + .../.svn/prop-base/Prebuild.nsi.svn-base | 9 + .../.svn/prop-base/SharpDevelop.bat.svn-base | 13 + .../.svn/prop-base/SharpDevelop2.bat.svn-base | 5 + .../.svn/prop-base/VS2002.bat.svn-base | 13 + .../.svn/prop-base/VS2003.bat.svn-base | 13 + .../.svn/prop-base/VS2005.bat.svn-base | 13 + .../.svn/prop-base/VS2008.bat.svn-base | 5 + .../.svn/prop-base/autotools.bat.svn-base | 5 + .../.svn/prop-base/autotools.sh.svn-base | 5 + .../.svn/prop-base/makefile.bat.svn-base | 9 + .../.svn/prop-base/makefile.sh.svn-base | 9 + .../scripts/.svn/prop-base/nant.bat.svn-base | 13 + .../scripts/.svn/prop-base/nant.sh.svn-base | 13 + .../scripts/.svn/prop-base/xcode.bat.svn-base | 9 + .../scripts/.svn/prop-base/xcode.sh.svn-base | 9 + .../scripts/.svn/text-base/Clean.bat.svn-base | 2 + .../scripts/.svn/text-base/Clean.sh.svn-base | 4 + .../scripts/.svn/text-base/Help.bat.svn-base | 2 + .../.svn/text-base/MonoDevelop.sh.svn-base | 2 + .../.svn/text-base/Prebuild.nsi.svn-base | 231 ++++ .../.svn/text-base/SharpDevelop.bat.svn-base | 4 + .../.svn/text-base/SharpDevelop2.bat.svn-base | 4 + .../.svn/text-base/VS2002.bat.svn-base | 4 + .../.svn/text-base/VS2003.bat.svn-base | 4 + .../.svn/text-base/VS2005.bat.svn-base | 4 + .../.svn/text-base/VS2008.bat.svn-base | 4 + .../.svn/text-base/VS2010.bat.svn-base | 4 + .../.svn/text-base/autotools.bat.svn-base | 4 + .../.svn/text-base/autotools.sh.svn-base | 5 + .../.svn/text-base/makefile.bat.svn-base | 4 + .../.svn/text-base/makefile.sh.svn-base | 10 + .../scripts/.svn/text-base/nant.bat.svn-base | 4 + .../scripts/.svn/text-base/nant.sh.svn-base | 2 + .../scripts/.svn/text-base/xcode.bat.svn-base | 4 + .../scripts/.svn/text-base/xcode.sh.svn-base | 2 + 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/VS2010.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/.svn/all-wcprops | 23 + Prebuild/src/.svn/dir-prop-base | 16 + Prebuild/src/.svn/entries | 139 +++ Prebuild/src/.svn/prop-base/App.ico.svn-base | 5 + .../src/.svn/prop-base/Prebuild.cs.svn-base | 9 + .../src/.svn/prop-base/Prebuild.snk.svn-base | 5 + Prebuild/src/.svn/text-base/App.ico.svn-base | Bin 0 -> 4286 bytes .../src/.svn/text-base/Prebuild.cs.svn-base | 165 +++ .../src/.svn/text-base/Prebuild.snk.svn-base | Bin 0 -> 596 bytes Prebuild/src/App.ico | Bin 0 -> 4286 bytes Prebuild/src/Core/.svn/all-wcprops | 29 + Prebuild/src/Core/.svn/dir-prop-base | 5 + Prebuild/src/Core/.svn/entries | 182 +++ .../.svn/prop-base/FatalException.cs.svn-base | 9 + .../Core/.svn/prop-base/Kernel.cs.svn-base | 9 + .../UnknownLanguageException.cs.svn-base | 9 + .../prop-base/WarningException.cs.svn-base | 9 + .../.svn/text-base/FatalException.cs.svn-base | 85 ++ .../Core/.svn/text-base/Kernel.cs.svn-base | 832 +++++++++++++ .../UnknownLanguageException.cs.svn-base | 63 + .../text-base/WarningException.cs.svn-base | 84 ++ Prebuild/src/Core/Attributes/.svn/all-wcprops | 23 + .../src/Core/Attributes/.svn/dir-prop-base | 5 + Prebuild/src/Core/Attributes/.svn/entries | 130 ++ .../prop-base/DataNodeAttribute.cs.svn-base | 9 + .../prop-base/OptionNodeAttribute.cs.svn-base | 9 + .../prop-base/TargetAttribute.cs.svn-base | 9 + .../text-base/DataNodeAttribute.cs.svn-base | 72 ++ .../text-base/OptionNodeAttribute.cs.svn-base | 71 ++ .../text-base/TargetAttribute.cs.svn-base | 71 ++ .../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/.svn/all-wcprops | 17 + .../src/Core/Interfaces/.svn/dir-prop-base | 5 + Prebuild/src/Core/Interfaces/.svn/entries | 96 ++ .../.svn/prop-base/IDataNode.cs.svn-base | 9 + .../.svn/prop-base/ITarget.cs.svn-base | 9 + .../.svn/text-base/IDataNode.cs.svn-base | 47 + .../.svn/text-base/ITarget.cs.svn-base | 51 + Prebuild/src/Core/Interfaces/IDataNode.cs | 47 + Prebuild/src/Core/Interfaces/ITarget.cs | 51 + Prebuild/src/Core/Kernel.cs | 832 +++++++++++++ Prebuild/src/Core/Nodes/.svn/all-wcprops | 119 ++ Prebuild/src/Core/Nodes/.svn/dir-prop-base | 5 + Prebuild/src/Core/Nodes/.svn/entries | 674 +++++++++++ .../prop-base/ConfigurationNode.cs.svn-base | 9 + .../Nodes/.svn/prop-base/DataNode.cs.svn-base | 9 + .../.svn/prop-base/ExcludeNode.cs.svn-base | 9 + .../Nodes/.svn/prop-base/FileNode.cs.svn-base | 9 + .../.svn/prop-base/FilesNode.cs.svn-base | 9 + .../.svn/prop-base/MatchNode.cs.svn-base | 9 + .../.svn/prop-base/OptionsNode.cs.svn-base | 9 + .../.svn/prop-base/ProcessNode.cs.svn-base | 9 + .../.svn/prop-base/ProjectNode.cs.svn-base | 9 + .../.svn/prop-base/ReferenceNode.cs.svn-base | 9 + .../prop-base/ReferencePathNode.cs.svn-base | 9 + .../.svn/prop-base/SolutionNode.cs.svn-base | 9 + .../.svn/text-base/AuthorNode.cs.svn-base | 87 ++ .../.svn/text-base/CleanFilesNode.cs.svn-base | 80 ++ .../.svn/text-base/CleanupNode.cs.svn-base | 85 ++ .../text-base/ConfigurationNode.cs.svn-base | 225 ++++ .../ConfigurationNodeCollection.cs.svn-base | 71 ++ .../Nodes/.svn/text-base/DataNode.cs.svn-base | 117 ++ .../text-base/DatabaseProjectNode.cs.svn-base | 93 ++ .../DatabaseReferenceNode.cs.svn-base | 63 + .../text-base/DescriptionNode.cs.svn-base | 87 ++ .../.svn/text-base/ExcludeNode.cs.svn-base | 89 ++ .../Nodes/.svn/text-base/FileNode.cs.svn-base | 285 +++++ .../.svn/text-base/FilesNode.cs.svn-base | 204 ++++ .../.svn/text-base/MatchNode.cs.svn-base | 367 ++++++ .../.svn/text-base/OptionsNode.cs.svn-base | 634 ++++++++++ .../.svn/text-base/ProcessNode.cs.svn-base | 108 ++ .../.svn/text-base/ProjectNode.cs.svn-base | 579 +++++++++ .../.svn/text-base/ReferenceNode.cs.svn-base | 144 +++ .../text-base/ReferencePathNode.cs.svn-base | 97 ++ .../.svn/text-base/SolutionNode.cs.svn-base | 382 ++++++ Prebuild/src/Core/Nodes/AuthorNode.cs | 87 ++ Prebuild/src/Core/Nodes/CleanFilesNode.cs | 80 ++ Prebuild/src/Core/Nodes/CleanupNode.cs | 85 ++ Prebuild/src/Core/Nodes/ConfigurationNode.cs | 225 ++++ .../Core/Nodes/ConfigurationNodeCollection.cs | 71 ++ Prebuild/src/Core/Nodes/DataNode.cs | 117 ++ .../src/Core/Nodes/DatabaseProjectNode.cs | 93 ++ .../src/Core/Nodes/DatabaseReferenceNode.cs | 63 + Prebuild/src/Core/Nodes/DescriptionNode.cs | 87 ++ Prebuild/src/Core/Nodes/ExcludeNode.cs | 89 ++ Prebuild/src/Core/Nodes/FileNode.cs | 285 +++++ Prebuild/src/Core/Nodes/FilesNode.cs | 204 ++++ Prebuild/src/Core/Nodes/MatchNode.cs | 367 ++++++ Prebuild/src/Core/Nodes/OptionsNode.cs | 634 ++++++++++ Prebuild/src/Core/Nodes/ProcessNode.cs | 108 ++ Prebuild/src/Core/Nodes/ProjectNode.cs | 579 +++++++++ Prebuild/src/Core/Nodes/ReferenceNode.cs | 144 +++ Prebuild/src/Core/Nodes/ReferencePathNode.cs | 97 ++ Prebuild/src/Core/Nodes/SolutionNode.cs | 382 ++++++ Prebuild/src/Core/Parse/.svn/all-wcprops | 17 + Prebuild/src/Core/Parse/.svn/dir-prop-base | 5 + Prebuild/src/Core/Parse/.svn/entries | 96 ++ .../.svn/prop-base/IfContext.cs.svn-base | 9 + .../.svn/prop-base/Preprocessor.cs.svn-base | 9 + .../.svn/text-base/IfContext.cs.svn-base | 154 +++ .../.svn/text-base/Preprocessor.cs.svn-base | 652 ++++++++++ Prebuild/src/Core/Parse/IfContext.cs | 154 +++ Prebuild/src/Core/Parse/Preprocessor.cs | 652 ++++++++++ Prebuild/src/Core/Targets/.NAntTarget.cs.swp | Bin 0 -> 49152 bytes Prebuild/src/Core/Targets/.svn/all-wcprops | 101 ++ Prebuild/src/Core/Targets/.svn/dir-prop-base | 5 + Prebuild/src/Core/Targets/.svn/entries | 572 +++++++++ .../.svn/prop-base/DebugTarget.cs.svn-base | 9 + .../.svn/prop-base/MakefileTarget.cs.svn-base | 9 + .../prop-base/MonoDevelopTarget.cs.svn-base | 9 + .../.svn/prop-base/NAntTarget.cs.svn-base | 9 + .../prop-base/SharpDevelopTarget.cs.svn-base | 9 + .../.svn/prop-base/VS2002Target.cs.svn-base | 9 + .../.svn/prop-base/VS2003Target.cs.svn-base | 9 + .../.svn/prop-base/VS2005Target.cs.svn-base | 9 + .../.svn/prop-base/XcodeTarget.cs.svn-base | 9 + .../text-base/AutotoolsTarget.cs.svn-base | 1070 +++++++++++++++++ .../.svn/text-base/DebugTarget.cs.svn-base | 102 ++ .../.svn/text-base/MakefileTarget.cs.svn-base | 469 ++++++++ .../text-base/MonoDevelopTarget.cs.svn-base | 515 ++++++++ .../.svn/text-base/NAntTarget.cs.svn-base | 776 ++++++++++++ .../text-base/SharpDevelop2Target.cs.svn-base | 82 ++ .../text-base/SharpDevelopTarget.cs.svn-base | 425 +++++++ .../.svn/text-base/ToolInfo.cs.svn-base | 197 +++ .../.svn/text-base/VS2002Target.cs.svn-base | 87 ++ .../.svn/text-base/VS2003Target.cs.svn-base | 593 +++++++++ .../.svn/text-base/VS2005Target.cs.svn-base | 147 +++ .../.svn/text-base/VS2008Target.cs.svn-base | 127 ++ .../.svn/text-base/VS2010Target.cs.svn-base | 138 +++ .../text-base/VSGenericTarget.cs.svn-base | 922 ++++++++++++++ .../.svn/text-base/VSVersion.cs.svn-base | 54 + .../.svn/text-base/XcodeTarget.cs.svn-base | 594 +++++++++ Prebuild/src/Core/Targets/AutotoolsTarget.cs | 1070 +++++++++++++++++ Prebuild/src/Core/Targets/DebugTarget.cs | 102 ++ Prebuild/src/Core/Targets/MakefileTarget.cs | 469 ++++++++ .../src/Core/Targets/MonoDevelopTarget.cs | 515 ++++++++ Prebuild/src/Core/Targets/NAntTarget.cs | 792 ++++++++++++ .../src/Core/Targets/SharpDevelop2Target.cs | 82 ++ .../src/Core/Targets/SharpDevelopTarget.cs | 425 +++++++ Prebuild/src/Core/Targets/ToolInfo.cs | 197 +++ Prebuild/src/Core/Targets/VS2002Target.cs | 87 ++ Prebuild/src/Core/Targets/VS2003Target.cs | 593 +++++++++ Prebuild/src/Core/Targets/VS2005Target.cs | 147 +++ Prebuild/src/Core/Targets/VS2008Target.cs | 127 ++ Prebuild/src/Core/Targets/VS2010Target.cs | 138 +++ Prebuild/src/Core/Targets/VSGenericTarget.cs | 922 ++++++++++++++ Prebuild/src/Core/Targets/VSVersion.cs | 54 + Prebuild/src/Core/Targets/XcodeTarget.cs | 594 +++++++++ Prebuild/src/Core/UnknownLanguageException.cs | 63 + Prebuild/src/Core/Utilities/.svn/all-wcprops | 29 + .../src/Core/Utilities/.svn/dir-prop-base | 5 + Prebuild/src/Core/Utilities/.svn/entries | 164 +++ .../CommandLineCollection.cs.svn-base | 9 + .../prop-base/CurrentDirectory.cs.svn-base | 9 + .../.svn/prop-base/Helper.cs.svn-base | 9 + .../Utilities/.svn/prop-base/Log.cs.svn-base | 9 + .../CommandLineCollection.cs.svn-base | 152 +++ .../text-base/CurrentDirectory.cs.svn-base | 68 ++ .../.svn/text-base/Helper.cs.svn-base | 575 +++++++++ .../Utilities/.svn/text-base/Log.cs.svn-base | 276 +++++ .../Core/Utilities/CommandLineCollection.cs | 152 +++ .../src/Core/Utilities/CurrentDirectory.cs | 68 ++ Prebuild/src/Core/Utilities/Helper.cs | 575 +++++++++ Prebuild/src/Core/Utilities/Log.cs | 276 +++++ Prebuild/src/Core/WarningException.cs | 84 ++ Prebuild/src/Prebuild.cs | 165 +++ Prebuild/src/Prebuild.snk | Bin 0 -> 596 bytes Prebuild/src/Properties/.svn/all-wcprops | 11 + Prebuild/src/Properties/.svn/entries | 62 + .../.svn/prop-base/AssemblyInfo.cs.svn-base | 9 + .../.svn/text-base/AssemblyInfo.cs.svn-base | 113 ++ Prebuild/src/Properties/AssemblyInfo.cs | 113 ++ Prebuild/src/data/.svn/all-wcprops | 71 ++ Prebuild/src/data/.svn/dir-prop-base | 6 + Prebuild/src/data/.svn/entries | 402 +++++++ .../data/.svn/prop-base/dnpb-1.0.xsd.svn-base | 9 + .../data/.svn/prop-base/dnpb-1.1.xsd.svn-base | 9 + .../data/.svn/prop-base/dnpb-1.2.xsd.svn-base | 9 + .../data/.svn/prop-base/dnpb-1.3.xsd.svn-base | 9 + .../data/.svn/prop-base/dnpb-1.4.xsd.svn-base | 9 + .../data/.svn/prop-base/dnpb-1.5.xsd.svn-base | 9 + .../.svn/prop-base/prebuild-1.6.xsd.svn-base | 9 + .../.svn/text-base/autotools.xml.svn-base | 790 ++++++++++++ .../data/.svn/text-base/dnpb-1.0.xsd.svn-base | 183 +++ .../data/.svn/text-base/dnpb-1.1.xsd.svn-base | 184 +++ .../data/.svn/text-base/dnpb-1.2.xsd.svn-base | 198 +++ .../data/.svn/text-base/dnpb-1.3.xsd.svn-base | 206 ++++ .../data/.svn/text-base/dnpb-1.4.xsd.svn-base | 212 ++++ .../data/.svn/text-base/dnpb-1.5.xsd.svn-base | 215 ++++ .../.svn/text-base/prebuild-1.6.xsd.svn-base | 231 ++++ .../.svn/text-base/prebuild-1.7.xsd.svn-base | 350 ++++++ .../.svn/text-base/prebuild-1.8.xsd.svn-base | 331 +++++ .../.svn/text-base/prebuild-1.9.xsd.svn-base | 336 ++++++ 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 | 350 ++++++ Prebuild/src/data/prebuild-1.8.xsd | 331 +++++ Prebuild/src/data/prebuild-1.9.xsd | 336 ++++++ Prebuild/tests/.svn/all-wcprops | 59 + Prebuild/tests/.svn/entries | 334 +++++ .../tests/.svn/text-base/Makefile.svn-base | 24 + .../tests/.svn/text-base/README.txt.svn-base | 5 + .../text-base/include-001.expected.svn-base | 46 + .../text-base/include-001.include.svn-base | 33 + .../text-base/include-001.prebuild.svn-base | 22 + .../text-base/include-002-2.include.svn-base | 8 + .../text-base/include-002.expected.svn-base | 26 + .../text-base/include-002.include.svn-base | 14 + .../text-base/include-002.prebuild.svn-base | 7 + 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 227840 -> 228352 bytes 319 files changed, 44002 insertions(+) create mode 100644 Prebuild/AUTHORS create mode 100644 Prebuild/COPYING create mode 100644 Prebuild/ChangeLog create mode 100644 Prebuild/INSTALL create mode 100644 Prebuild/NEWS create mode 100644 Prebuild/README create mode 100644 Prebuild/THANKS create mode 100644 Prebuild/TODO create mode 100755 Prebuild/clean.bat create mode 100755 Prebuild/clean.sh create mode 100644 Prebuild/doc/.svn/all-wcprops create mode 100644 Prebuild/doc/.svn/dir-prop-base create mode 100644 Prebuild/doc/.svn/entries create mode 100644 Prebuild/doc/.svn/prop-base/prebuild-example1.xml.svn-base create mode 100644 Prebuild/doc/.svn/prop-base/prebuild-example2.xml.svn-base create mode 100644 Prebuild/doc/.svn/prop-base/prebuild-example3.xml.svn-base create mode 100644 Prebuild/doc/.svn/prop-base/prebuild-example4.xml.svn-base create mode 100644 Prebuild/doc/.svn/text-base/prebuild-example1.xml.svn-base create mode 100644 Prebuild/doc/.svn/text-base/prebuild-example2.xml.svn-base create mode 100644 Prebuild/doc/.svn/text-base/prebuild-example3.xml.svn-base create mode 100644 Prebuild/doc/.svn/text-base/prebuild-example4.xml.svn-base create mode 100644 Prebuild/doc/.svn/text-base/prebuild-example5.xml.svn-base create mode 100644 Prebuild/doc/prebuild-example1.xml create mode 100644 Prebuild/doc/prebuild-example2.xml create mode 100644 Prebuild/doc/prebuild-example3.xml create mode 100644 Prebuild/doc/prebuild-example4.xml create mode 100644 Prebuild/doc/prebuild-example5.xml create mode 100755 Prebuild/prebuild create mode 100644 Prebuild/prebuild.xml create mode 100644 Prebuild/scripts/.svn/all-wcprops create mode 100644 Prebuild/scripts/.svn/dir-prop-base create mode 100644 Prebuild/scripts/.svn/entries create mode 100644 Prebuild/scripts/.svn/prop-base/Clean.bat.svn-base create mode 100644 Prebuild/scripts/.svn/prop-base/Clean.sh.svn-base create mode 100644 Prebuild/scripts/.svn/prop-base/Help.bat.svn-base create mode 100644 Prebuild/scripts/.svn/prop-base/MonoDevelop.sh.svn-base create mode 100644 Prebuild/scripts/.svn/prop-base/Prebuild.nsi.svn-base create mode 100644 Prebuild/scripts/.svn/prop-base/SharpDevelop.bat.svn-base create mode 100644 Prebuild/scripts/.svn/prop-base/SharpDevelop2.bat.svn-base create mode 100644 Prebuild/scripts/.svn/prop-base/VS2002.bat.svn-base create mode 100644 Prebuild/scripts/.svn/prop-base/VS2003.bat.svn-base create mode 100644 Prebuild/scripts/.svn/prop-base/VS2005.bat.svn-base create mode 100644 Prebuild/scripts/.svn/prop-base/VS2008.bat.svn-base create mode 100644 Prebuild/scripts/.svn/prop-base/autotools.bat.svn-base create mode 100644 Prebuild/scripts/.svn/prop-base/autotools.sh.svn-base create mode 100644 Prebuild/scripts/.svn/prop-base/makefile.bat.svn-base create mode 100644 Prebuild/scripts/.svn/prop-base/makefile.sh.svn-base create mode 100644 Prebuild/scripts/.svn/prop-base/nant.bat.svn-base create mode 100644 Prebuild/scripts/.svn/prop-base/nant.sh.svn-base create mode 100644 Prebuild/scripts/.svn/prop-base/xcode.bat.svn-base create mode 100644 Prebuild/scripts/.svn/prop-base/xcode.sh.svn-base create mode 100644 Prebuild/scripts/.svn/text-base/Clean.bat.svn-base create mode 100644 Prebuild/scripts/.svn/text-base/Clean.sh.svn-base create mode 100644 Prebuild/scripts/.svn/text-base/Help.bat.svn-base create mode 100644 Prebuild/scripts/.svn/text-base/MonoDevelop.sh.svn-base create mode 100644 Prebuild/scripts/.svn/text-base/Prebuild.nsi.svn-base create mode 100644 Prebuild/scripts/.svn/text-base/SharpDevelop.bat.svn-base create mode 100644 Prebuild/scripts/.svn/text-base/SharpDevelop2.bat.svn-base create mode 100644 Prebuild/scripts/.svn/text-base/VS2002.bat.svn-base create mode 100644 Prebuild/scripts/.svn/text-base/VS2003.bat.svn-base create mode 100644 Prebuild/scripts/.svn/text-base/VS2005.bat.svn-base create mode 100644 Prebuild/scripts/.svn/text-base/VS2008.bat.svn-base create mode 100644 Prebuild/scripts/.svn/text-base/VS2010.bat.svn-base create mode 100644 Prebuild/scripts/.svn/text-base/autotools.bat.svn-base create mode 100644 Prebuild/scripts/.svn/text-base/autotools.sh.svn-base create mode 100644 Prebuild/scripts/.svn/text-base/makefile.bat.svn-base create mode 100644 Prebuild/scripts/.svn/text-base/makefile.sh.svn-base create mode 100644 Prebuild/scripts/.svn/text-base/nant.bat.svn-base create mode 100644 Prebuild/scripts/.svn/text-base/nant.sh.svn-base create mode 100644 Prebuild/scripts/.svn/text-base/xcode.bat.svn-base create mode 100644 Prebuild/scripts/.svn/text-base/xcode.sh.svn-base create mode 100755 Prebuild/scripts/Clean.bat create mode 100755 Prebuild/scripts/Clean.sh create mode 100755 Prebuild/scripts/Help.bat create mode 100755 Prebuild/scripts/MonoDevelop.sh create mode 100644 Prebuild/scripts/Prebuild.nsi create mode 100755 Prebuild/scripts/SharpDevelop.bat create mode 100755 Prebuild/scripts/SharpDevelop2.bat create mode 100755 Prebuild/scripts/VS2002.bat create mode 100755 Prebuild/scripts/VS2003.bat create mode 100755 Prebuild/scripts/VS2005.bat create mode 100755 Prebuild/scripts/VS2008.bat create mode 100644 Prebuild/scripts/VS2010.bat create mode 100755 Prebuild/scripts/autotools.bat create mode 100755 Prebuild/scripts/autotools.sh create mode 100755 Prebuild/scripts/makefile.bat create mode 100755 Prebuild/scripts/makefile.sh create mode 100755 Prebuild/scripts/nant.bat create mode 100755 Prebuild/scripts/nant.sh create mode 100755 Prebuild/scripts/xcode.bat create mode 100755 Prebuild/scripts/xcode.sh create mode 100644 Prebuild/src/.svn/all-wcprops create mode 100644 Prebuild/src/.svn/dir-prop-base create mode 100644 Prebuild/src/.svn/entries create mode 100644 Prebuild/src/.svn/prop-base/App.ico.svn-base create mode 100644 Prebuild/src/.svn/prop-base/Prebuild.cs.svn-base create mode 100644 Prebuild/src/.svn/prop-base/Prebuild.snk.svn-base create mode 100644 Prebuild/src/.svn/text-base/App.ico.svn-base create mode 100644 Prebuild/src/.svn/text-base/Prebuild.cs.svn-base create mode 100644 Prebuild/src/.svn/text-base/Prebuild.snk.svn-base create mode 100644 Prebuild/src/App.ico create mode 100644 Prebuild/src/Core/.svn/all-wcprops create mode 100644 Prebuild/src/Core/.svn/dir-prop-base create mode 100644 Prebuild/src/Core/.svn/entries create mode 100644 Prebuild/src/Core/.svn/prop-base/FatalException.cs.svn-base create mode 100644 Prebuild/src/Core/.svn/prop-base/Kernel.cs.svn-base create mode 100644 Prebuild/src/Core/.svn/prop-base/UnknownLanguageException.cs.svn-base create mode 100644 Prebuild/src/Core/.svn/prop-base/WarningException.cs.svn-base create mode 100644 Prebuild/src/Core/.svn/text-base/FatalException.cs.svn-base create mode 100644 Prebuild/src/Core/.svn/text-base/Kernel.cs.svn-base create mode 100644 Prebuild/src/Core/.svn/text-base/UnknownLanguageException.cs.svn-base create mode 100644 Prebuild/src/Core/.svn/text-base/WarningException.cs.svn-base create mode 100644 Prebuild/src/Core/Attributes/.svn/all-wcprops create mode 100644 Prebuild/src/Core/Attributes/.svn/dir-prop-base create mode 100644 Prebuild/src/Core/Attributes/.svn/entries create mode 100644 Prebuild/src/Core/Attributes/.svn/prop-base/DataNodeAttribute.cs.svn-base create mode 100644 Prebuild/src/Core/Attributes/.svn/prop-base/OptionNodeAttribute.cs.svn-base create mode 100644 Prebuild/src/Core/Attributes/.svn/prop-base/TargetAttribute.cs.svn-base create mode 100644 Prebuild/src/Core/Attributes/.svn/text-base/DataNodeAttribute.cs.svn-base create mode 100644 Prebuild/src/Core/Attributes/.svn/text-base/OptionNodeAttribute.cs.svn-base create mode 100644 Prebuild/src/Core/Attributes/.svn/text-base/TargetAttribute.cs.svn-base create mode 100644 Prebuild/src/Core/Attributes/DataNodeAttribute.cs create mode 100644 Prebuild/src/Core/Attributes/OptionNodeAttribute.cs create mode 100644 Prebuild/src/Core/Attributes/TargetAttribute.cs create mode 100644 Prebuild/src/Core/FatalException.cs create mode 100644 Prebuild/src/Core/Interfaces/.svn/all-wcprops create mode 100644 Prebuild/src/Core/Interfaces/.svn/dir-prop-base create mode 100644 Prebuild/src/Core/Interfaces/.svn/entries create mode 100644 Prebuild/src/Core/Interfaces/.svn/prop-base/IDataNode.cs.svn-base create mode 100644 Prebuild/src/Core/Interfaces/.svn/prop-base/ITarget.cs.svn-base create mode 100644 Prebuild/src/Core/Interfaces/.svn/text-base/IDataNode.cs.svn-base create mode 100644 Prebuild/src/Core/Interfaces/.svn/text-base/ITarget.cs.svn-base create mode 100644 Prebuild/src/Core/Interfaces/IDataNode.cs create mode 100644 Prebuild/src/Core/Interfaces/ITarget.cs create mode 100644 Prebuild/src/Core/Kernel.cs create mode 100644 Prebuild/src/Core/Nodes/.svn/all-wcprops create mode 100644 Prebuild/src/Core/Nodes/.svn/dir-prop-base create mode 100644 Prebuild/src/Core/Nodes/.svn/entries create mode 100644 Prebuild/src/Core/Nodes/.svn/prop-base/ConfigurationNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/prop-base/DataNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/prop-base/ExcludeNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/prop-base/FileNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/prop-base/FilesNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/prop-base/MatchNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/prop-base/OptionsNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/prop-base/ProcessNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/prop-base/ProjectNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/prop-base/ReferenceNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/prop-base/ReferencePathNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/prop-base/SolutionNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/text-base/AuthorNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/text-base/CleanFilesNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/text-base/CleanupNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/text-base/ConfigurationNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/text-base/ConfigurationNodeCollection.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/text-base/DataNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/text-base/DatabaseProjectNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/text-base/DatabaseReferenceNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/text-base/DescriptionNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/text-base/ExcludeNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/text-base/FileNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/text-base/FilesNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/text-base/MatchNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/text-base/OptionsNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/text-base/ProcessNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/text-base/ProjectNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/text-base/ReferenceNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/text-base/ReferencePathNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/.svn/text-base/SolutionNode.cs.svn-base create mode 100644 Prebuild/src/Core/Nodes/AuthorNode.cs create mode 100644 Prebuild/src/Core/Nodes/CleanFilesNode.cs create mode 100644 Prebuild/src/Core/Nodes/CleanupNode.cs create mode 100644 Prebuild/src/Core/Nodes/ConfigurationNode.cs create mode 100644 Prebuild/src/Core/Nodes/ConfigurationNodeCollection.cs create mode 100644 Prebuild/src/Core/Nodes/DataNode.cs create mode 100644 Prebuild/src/Core/Nodes/DatabaseProjectNode.cs create mode 100644 Prebuild/src/Core/Nodes/DatabaseReferenceNode.cs create mode 100644 Prebuild/src/Core/Nodes/DescriptionNode.cs create mode 100644 Prebuild/src/Core/Nodes/ExcludeNode.cs create mode 100644 Prebuild/src/Core/Nodes/FileNode.cs create mode 100644 Prebuild/src/Core/Nodes/FilesNode.cs create mode 100644 Prebuild/src/Core/Nodes/MatchNode.cs create mode 100644 Prebuild/src/Core/Nodes/OptionsNode.cs create mode 100644 Prebuild/src/Core/Nodes/ProcessNode.cs create mode 100644 Prebuild/src/Core/Nodes/ProjectNode.cs create mode 100644 Prebuild/src/Core/Nodes/ReferenceNode.cs create mode 100644 Prebuild/src/Core/Nodes/ReferencePathNode.cs create mode 100644 Prebuild/src/Core/Nodes/SolutionNode.cs create mode 100644 Prebuild/src/Core/Parse/.svn/all-wcprops create mode 100644 Prebuild/src/Core/Parse/.svn/dir-prop-base create mode 100644 Prebuild/src/Core/Parse/.svn/entries create mode 100644 Prebuild/src/Core/Parse/.svn/prop-base/IfContext.cs.svn-base create mode 100644 Prebuild/src/Core/Parse/.svn/prop-base/Preprocessor.cs.svn-base create mode 100644 Prebuild/src/Core/Parse/.svn/text-base/IfContext.cs.svn-base create mode 100644 Prebuild/src/Core/Parse/.svn/text-base/Preprocessor.cs.svn-base create mode 100644 Prebuild/src/Core/Parse/IfContext.cs create mode 100644 Prebuild/src/Core/Parse/Preprocessor.cs create mode 100644 Prebuild/src/Core/Targets/.NAntTarget.cs.swp create mode 100644 Prebuild/src/Core/Targets/.svn/all-wcprops create mode 100644 Prebuild/src/Core/Targets/.svn/dir-prop-base create mode 100644 Prebuild/src/Core/Targets/.svn/entries create mode 100644 Prebuild/src/Core/Targets/.svn/prop-base/DebugTarget.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/prop-base/MakefileTarget.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/prop-base/MonoDevelopTarget.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/prop-base/NAntTarget.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/prop-base/SharpDevelopTarget.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/prop-base/VS2002Target.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/prop-base/VS2003Target.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/prop-base/VS2005Target.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/prop-base/XcodeTarget.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/text-base/AutotoolsTarget.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/text-base/DebugTarget.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/text-base/MakefileTarget.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/text-base/MonoDevelopTarget.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/text-base/NAntTarget.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/text-base/SharpDevelop2Target.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/text-base/SharpDevelopTarget.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/text-base/ToolInfo.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/text-base/VS2002Target.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/text-base/VS2003Target.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/text-base/VS2005Target.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/text-base/VS2008Target.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/text-base/VS2010Target.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/text-base/VSGenericTarget.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/text-base/VSVersion.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/.svn/text-base/XcodeTarget.cs.svn-base create mode 100644 Prebuild/src/Core/Targets/AutotoolsTarget.cs create mode 100644 Prebuild/src/Core/Targets/DebugTarget.cs create mode 100644 Prebuild/src/Core/Targets/MakefileTarget.cs create mode 100644 Prebuild/src/Core/Targets/MonoDevelopTarget.cs create mode 100644 Prebuild/src/Core/Targets/NAntTarget.cs create mode 100644 Prebuild/src/Core/Targets/SharpDevelop2Target.cs create mode 100644 Prebuild/src/Core/Targets/SharpDevelopTarget.cs create mode 100644 Prebuild/src/Core/Targets/ToolInfo.cs create mode 100644 Prebuild/src/Core/Targets/VS2002Target.cs create mode 100644 Prebuild/src/Core/Targets/VS2003Target.cs create mode 100644 Prebuild/src/Core/Targets/VS2005Target.cs create mode 100644 Prebuild/src/Core/Targets/VS2008Target.cs create mode 100644 Prebuild/src/Core/Targets/VS2010Target.cs create mode 100644 Prebuild/src/Core/Targets/VSGenericTarget.cs create mode 100644 Prebuild/src/Core/Targets/VSVersion.cs create mode 100644 Prebuild/src/Core/Targets/XcodeTarget.cs create mode 100644 Prebuild/src/Core/UnknownLanguageException.cs create mode 100644 Prebuild/src/Core/Utilities/.svn/all-wcprops create mode 100644 Prebuild/src/Core/Utilities/.svn/dir-prop-base create mode 100644 Prebuild/src/Core/Utilities/.svn/entries create mode 100644 Prebuild/src/Core/Utilities/.svn/prop-base/CommandLineCollection.cs.svn-base create mode 100644 Prebuild/src/Core/Utilities/.svn/prop-base/CurrentDirectory.cs.svn-base create mode 100644 Prebuild/src/Core/Utilities/.svn/prop-base/Helper.cs.svn-base create mode 100644 Prebuild/src/Core/Utilities/.svn/prop-base/Log.cs.svn-base create mode 100644 Prebuild/src/Core/Utilities/.svn/text-base/CommandLineCollection.cs.svn-base create mode 100644 Prebuild/src/Core/Utilities/.svn/text-base/CurrentDirectory.cs.svn-base create mode 100644 Prebuild/src/Core/Utilities/.svn/text-base/Helper.cs.svn-base create mode 100644 Prebuild/src/Core/Utilities/.svn/text-base/Log.cs.svn-base create mode 100644 Prebuild/src/Core/Utilities/CommandLineCollection.cs create mode 100644 Prebuild/src/Core/Utilities/CurrentDirectory.cs create mode 100644 Prebuild/src/Core/Utilities/Helper.cs create mode 100644 Prebuild/src/Core/Utilities/Log.cs create mode 100644 Prebuild/src/Core/WarningException.cs create mode 100644 Prebuild/src/Prebuild.cs create mode 100644 Prebuild/src/Prebuild.snk create mode 100644 Prebuild/src/Properties/.svn/all-wcprops create mode 100644 Prebuild/src/Properties/.svn/entries create mode 100644 Prebuild/src/Properties/.svn/prop-base/AssemblyInfo.cs.svn-base create mode 100644 Prebuild/src/Properties/.svn/text-base/AssemblyInfo.cs.svn-base create mode 100644 Prebuild/src/Properties/AssemblyInfo.cs create mode 100644 Prebuild/src/data/.svn/all-wcprops create mode 100644 Prebuild/src/data/.svn/dir-prop-base create mode 100644 Prebuild/src/data/.svn/entries create mode 100644 Prebuild/src/data/.svn/prop-base/dnpb-1.0.xsd.svn-base create mode 100644 Prebuild/src/data/.svn/prop-base/dnpb-1.1.xsd.svn-base create mode 100644 Prebuild/src/data/.svn/prop-base/dnpb-1.2.xsd.svn-base create mode 100644 Prebuild/src/data/.svn/prop-base/dnpb-1.3.xsd.svn-base create mode 100644 Prebuild/src/data/.svn/prop-base/dnpb-1.4.xsd.svn-base create mode 100644 Prebuild/src/data/.svn/prop-base/dnpb-1.5.xsd.svn-base create mode 100644 Prebuild/src/data/.svn/prop-base/prebuild-1.6.xsd.svn-base create mode 100644 Prebuild/src/data/.svn/text-base/autotools.xml.svn-base create mode 100644 Prebuild/src/data/.svn/text-base/dnpb-1.0.xsd.svn-base create mode 100644 Prebuild/src/data/.svn/text-base/dnpb-1.1.xsd.svn-base create mode 100644 Prebuild/src/data/.svn/text-base/dnpb-1.2.xsd.svn-base create mode 100644 Prebuild/src/data/.svn/text-base/dnpb-1.3.xsd.svn-base create mode 100644 Prebuild/src/data/.svn/text-base/dnpb-1.4.xsd.svn-base create mode 100644 Prebuild/src/data/.svn/text-base/dnpb-1.5.xsd.svn-base create mode 100644 Prebuild/src/data/.svn/text-base/prebuild-1.6.xsd.svn-base create mode 100644 Prebuild/src/data/.svn/text-base/prebuild-1.7.xsd.svn-base create mode 100644 Prebuild/src/data/.svn/text-base/prebuild-1.8.xsd.svn-base create mode 100644 Prebuild/src/data/.svn/text-base/prebuild-1.9.xsd.svn-base create mode 100644 Prebuild/src/data/autotools.xml create mode 100644 Prebuild/src/data/dnpb-1.0.xsd create mode 100644 Prebuild/src/data/dnpb-1.1.xsd create mode 100644 Prebuild/src/data/dnpb-1.2.xsd create mode 100644 Prebuild/src/data/dnpb-1.3.xsd create mode 100644 Prebuild/src/data/dnpb-1.4.xsd create mode 100644 Prebuild/src/data/dnpb-1.5.xsd create mode 100644 Prebuild/src/data/prebuild-1.6.xsd create mode 100644 Prebuild/src/data/prebuild-1.7.xsd create mode 100644 Prebuild/src/data/prebuild-1.8.xsd create mode 100644 Prebuild/src/data/prebuild-1.9.xsd create mode 100644 Prebuild/tests/.svn/all-wcprops create mode 100644 Prebuild/tests/.svn/entries create mode 100644 Prebuild/tests/.svn/text-base/Makefile.svn-base create mode 100644 Prebuild/tests/.svn/text-base/README.txt.svn-base create mode 100644 Prebuild/tests/.svn/text-base/include-001.expected.svn-base create mode 100644 Prebuild/tests/.svn/text-base/include-001.include.svn-base create mode 100644 Prebuild/tests/.svn/text-base/include-001.prebuild.svn-base create mode 100644 Prebuild/tests/.svn/text-base/include-002-2.include.svn-base create mode 100644 Prebuild/tests/.svn/text-base/include-002.expected.svn-base create mode 100644 Prebuild/tests/.svn/text-base/include-002.include.svn-base create mode 100644 Prebuild/tests/.svn/text-base/include-002.prebuild.svn-base create mode 100644 Prebuild/tests/Makefile create mode 100644 Prebuild/tests/README.txt create mode 100644 Prebuild/tests/include-001.expected create mode 100644 Prebuild/tests/include-001.include create mode 100644 Prebuild/tests/include-001.prebuild create mode 100644 Prebuild/tests/include-002-2.include create mode 100644 Prebuild/tests/include-002.expected create mode 100644 Prebuild/tests/include-002.include create mode 100644 Prebuild/tests/include-002.prebuild diff --git a/Prebuild/AUTHORS b/Prebuild/AUTHORS new file mode 100644 index 0000000000..9e86ac018f --- /dev/null +++ b/Prebuild/AUTHORS @@ -0,0 +1,10 @@ +Dave Hudson (jendave@yahoo.com), +Matthew Holmes (matthew@wildfiregames.com) +Dan Moorehead (dan05a@gmail.com) +Rob Loach (http://www.robloach.net) +C.J. Adams-Collier (cjac@colliertech.org) + +Patch Contributers +lbsa71 +chi11ken +sdague diff --git a/Prebuild/COPYING b/Prebuild/COPYING new file mode 100644 index 0000000000..d3cdf7e38e --- /dev/null +++ b/Prebuild/COPYING @@ -0,0 +1,65 @@ +BSD License +Copyright (c)2004-2008 + +See AUTHORS file for list of copyright holders + +Dave Hudson (jendave@yahoo.com), +Matthew Holmes (matthew@wildfiregames.com) +Dan Moorehead (dan05a@gmail.com) +Rob Loach (http://www.robloach.net) +C.J. Adams-Collier (cjac@colliertech.org) + +http://dnpb.sourceforge.net +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +2. 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. + +3. The names of the authors may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "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 + COPYRIGHT OWNER OR CONTRIBUTORS 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. + +--- + +Portions of src/Core/Targets/AutotoolsTarget.cs +// 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. diff --git a/Prebuild/ChangeLog b/Prebuild/ChangeLog new file mode 100644 index 0000000000..bb8e7b09d8 --- /dev/null +++ b/Prebuild/ChangeLog @@ -0,0 +1,461 @@ +2008-12-09T02:15 D. Moonfire + * src/Core/Kernel.cs + - Added a /ppi target to get the results of processing but before + processing the actual results. + * src/Core/Preprocessor.cs + - Applied the patch from kanato with formatting changes. + - Uses the format. + * tests/ + - Added some lightweight tests to test the functionality of the + include patch. + +2008-06-19T09:37 John Anderson + * src/Core/Kernel.cs + - Only Loop through targets that are not abstract. + * src/Core/Targets/VSGenericTarget.cs + - Marked abstract and removed the Target attribute. + +2008-06-16T17:37 John Anderson + * src/Core/Nodes/ProjectNode.cs,data/prebuild-1.7.xsd + - Added the ability to hardcode guid's in the projects + +2008-05-21T0737 C.J. Adams-Collier + * src/Core/Targets/AutotoolsTarget.cs + - catch exception when unable to compile AssemblyInfo.cs + +2008-05-07T17:29 John Anderson + * src/Core/Targets/VSGenericTarget.cs + - Generate asp.net output in bin\ folder (asp.net requires it there) + +2008-04-30T17:29 John Anderson + * src/Core/Nodes/DatabaseReferenceNode.cs, + src/Core/Nodes/Datanode.cs, + src/Core/Nodes/FileNode.cs, + src/Core/Nodes/FileNodes.cs, + src/Core/Nodes/MatchNode.cs, + src/Core/Targets/VS2008Target.cs, + src/data/prebuild-1.7.xsd + - Refactored the project generation code to handle web projects and more + logically handle embedded resources and designer files. + +2008-04-30T17:29 Joseph Lombrozo + * src/Core/Nodes/SolutionNode.cs + - Had solutions inherit Configurations in the same way that Projects do. + +2008-04-29T06:35 Joseph Lombrozo + * src/Core/Targets/VS2008Target.cs, + src/Core/Nodes/DatabaseProjectNode.cs, + src/Core/Nodes/DatabaseReferenceNode.cs, + src/data/prebuild-1.7.xsd + - Added database references to database projects. + - Prevented nested solutions from being written to disk. + +2008-04-29T05:43 Joseph Lombrozo + * src/Core/Targets/VS2008Target.cs + - Enabled embedded solutions to contain Files. + +2008-04-29T04:13 Joseph Lombrozo + * src/Core/VSVersion.cs + - Fixed spelling mistake in enum comment. + * src/Core/Attributes/DataNodeAttribute.cs + - Allowed the DataNodeAttribute to be attached to a single class + more than once, allowing one class to be used to parse more than + one node at a time. + * src/Core/Kernel.cs + - Changed CacheNodeTypes() to allow for multiple DataNodeAttribute + instances in one class. Refactored ProcessFile(...) to return Solutions, + rather than adding them to the Kernel. + * src/Core/Nodes/SolutionNode.cs + - Added Guid (for embedded folders) + - Added DatabaseProjects, Solutions and Processes to the SolutionNode + when parsing. + * src/Core/Nodes/ProjectNode.cs + - Added FrameworkVersion property to allow for 2.0/3.0/3.5 differentiation. + * src/Core/Targets/VS2008Target.cs, src/data/prebuild-1.7.xsd + - Added ability to have embedded solutions, and externally referenced + prebuild scripts. + +2008-04-24T04:33 John M. Anderson + * src/Core/Targets/VS2003Target.cs, src/Core/Targets/VSVersion.cs + - Moved the VSVersion enum into its own file. + * src/Core/Targets/VS2008Target.cs + - added support for VS2008 + * src/Core/Nodes/ProjectNode.cs + - Added initial support for ASP.NET projects + * src/Core/Nodes/DatabaseProjectNode.cs + - Added support for Visual Studio database projects + +2008-02-19T07:08 C.J. Adams-Collier + * TODO + - added some tasks from Sam Hocevar + * src/Core/Targets/AutotoolsTarget.cs + - added a missing end paren + * COPYING + - Removed Randy Ridge's name from the copyright. Looks to me like + his name was present only because the file was nabbed from Tao + +2008-02-09T20:29 C.J. Adams-Collier + * COPYING + - added MIT/X11 license due to inclusion of code from Monodevelop + * THANKS + - added Lluis Sanchez Gual and Todd Berman - I yoinked code from + their pkg-config .pc file parser to build AutotoolsTarget.cs. + Sorry it took me so long to remember to add mention of you guys! + * src/Core/Targets/AutotoolsTarget.cs + - added MIT/X11 license. see above. + +2008-02-07T08:27 C.J. Adams-Collier + * AUTHORS + - consolidated names and contact info found laying around the + source + * src/Core/Kernel.cs + - updated copyright date + - re-formatted license for 80-column editor + - updated log banner to indicate new date, new authors + * src/Core/Targets/AutotoolsTarget.cs + - clarified reasoning behind use of constants in + AutotoolsTarget.ParsePCFile + - reduced length of some long lines using newline/indent + - added log messages for parsing .pc files, emitting solutions, + projects + - robustified the inter-package dependency resolution target + - log warning when we can't find assembly for + - clarified code for case of inability to find embedded + autotools.xml + * src/data/autotools.xml + - adding system lookup of resgen2 to configure.ac + - fixed .resource -> .resources typo + - added a rule to create .response file containing all sources + - using @.response on $(CSC) command line instead of listing + all source files + * src/Properties/AssemblyInfo.cs + - re-formatted license for an 80-column editor + - added more authors to the AssemblyCopyright attribute + - bumped version to 2.0.3 + * prebuild.xml + - bumped version to 2.0.3 + * scripts/autotools.sh + - if 'mono' is in the path, run Prebuild.exe with it + - using dirname to capture correct path to prebuild.xml &c + +2008-02-06T17:18 C.J. Adams-Collier + * src/Core/Targets/NAntTarget.cs + - re-formatted the license for an 80-column editor + - added myself to the copyright + - added a fix submitted by Gryc Ueusp + * src/Core/Targets/AutotoolsTarget.cs + - updated copyright to include 2008 + * THANKS + - created file, added Gryc Ueusp + +2008-01-01T14:50 C.J. Adams-Collier + * src/data/autotools.xml + - fixed .resx -> .resource compilation + - fixed failing edge case where Project is an unsigned Library + - added $(RESOURCE_SRC) to list of extra dist files + * src/Core/Targets/AutotoolsTarget.cs + - removed embeddedResources from extraDistFiles list + +2007-04-18T07:49 C.J. Adams-Collier + * src/data/prebuild-1.7.xsd + - removed default version from references + +2007-04-06T12:42 C.J. Adams-Collier + * src/data/autotools.xml + - added support for /doc: output when XmlDocFile is not empty + - not printing \t \\n on lines that have no content + - gacutil now installs the root assembly instead of the one under + bin/Debug or whatever + +2007-04-04T22:12 C.J. Adams-Collier + * src/Core/Targets/AutotoolsTarget.cs + - removed debugging Console.WriteLine() + * src/data/autotools.xml + - ensuring that install-sh and missing get distributed + - explicitly stating that the sources, snk, resources and binary + references live under $(srcdir) + - corrected uninstall target + - verified distcheck completes successfully + +2007-04-03T21:56 C.J. Adams-Collier + * src/Core/Targets/AutotoolsTarget.cs + - added a using for System.Diagnostics + - added enum ClrVersion for use with the pkg-config parser + - added class SystemPackage for use with the pkg-config parser + - removed explicit "private" property of members since it is implied + - flushing the stream-writer before it's closed + - removed excess braces around an if statement + ! NormalizeAsmName(), AddAssembly(), GetAssembliesWithLibInfo(), + GetAssembliesWithoutLibInfo(), ProcessPiece(), + GetVariableFromPkgConfig(), ParsePCFile(), + RegisterSystemAssemblies(), RunInitialization() + - pulled the above from MonoDevelop to parse the system pkgconfig + files and determine /pkg: arguments. Original sources are here: + http://svn.myrealbox.com/source/trunk/monodevelop/Core/src/MonoDevelop.Core/MonoDevelop.Core/SystemAssemblyService.cs + http://svn.myrealbox.com/source/trunk/monodevelop/Core/src/MonoDevelop.Core/MonoDevelop.Core/ClrVersion.cs + ! WriteProject() + - now gathering project version from AssemblyInfo.cs if it is part + of the project + - changed the declaration of the ArrayList's in the method + - now copying assembly .config files to the project, distributing, + installing + - making sure all needed files live under the Project directory + - copying strongname keys to project directory + - parsing AssemblyInfo.cs to determine assembly version + - removing all references to ".." + - removed superfluous if(project.References.Count > 0) around + for(int refNum = 0; refNum < project.References.Count; refNum++) + - removed use of runtimeLibs + - adding hook to copy sibling project's generated assemblies to + this project during Make time + - added extra dist target to ensure all files required to build + get distributed during "make dist" + - added new xslt processing args: + -- assemblyName + -- extraDistFiles + -- pkgLibs (/pkg:foo) + -- localCopyTargets (to copy sibling assemblies at Make time) + -- projectVersion (if determined from AssemblyInfo.cs) + -- hasAssemblyConfig (if there's a assembly.exe.config present) + ! Write() + - calling RunInitialization() to gather pkg-config data + * src/data/autotools.xml + - accepting new args passed from AutotoolsTarget.cs + - modernized configure.ac a bit + - using a version of tar that allows >99-char filenames + - added ASSEMBLY_NAME variable + - using assembly name rather than project name for gac installation + - generated assembly is now assembly name and not project name + - accepting /pkg: flags gathered from AutotoolsTarget.cs + - adding Makefile targets to copy sibling project assemblies to . + - fixed Debug, Release targets + - adding support for strongname key signing + - adding /unsafe support + - adding a clean make target + - only running gacutil /u if the assembly being uninstalled is in gac + - added some templates to determine each Configuration's .snk + - added explanation as to why .exe assemblies live in $prefix/lib + * src/Properties/AssemblyInfo.cs + - bumped assembly version + * prebuild.xml + - bumped assembly version + +2007-03-29T18:03 C.J. Adams-Collier + * src/Core/Targets/AutotoolsTarget.cs + ! WriteProject() + - re-named incorrectly-named variable gacLibs to systemLibs + - added another reference list, runtimeLibs which contains the + libs we will need at runtime. we use this to build a MONO_PATH + - added monoPath to the xslt args list + * src/data/autotools.xml + ! + - renamed gacLibs to systemLibs + - added the sources to the dist list + - added logic to install libs that aren't strongnamed + ! + - accepting a param to update the MONO_PATH + +2007-03-28T19:46 C.J. Adams-Collier + * src/Core/Targets/MonoDevelopTarget.cs + ! CleanProject() + - using Assembly.LoadWithPartialName to locate the assembly + * src/Core/Targets/AutotoolsTarget.cs + ! WriteCombine() + - no longer using $PWD to determine a project's source dir; this + doesn't work with elements + - passing the solution name to all templates - fixes + multi-solution prebuild systems + ! WriteProject() + - no longer using $PWD to determine a project's source dir; this + doesn't work with elements + - passing the solution name to all templates - fixes + multi-solution prebuild systems + - copying strongname key to the autotools directory + - using Assembly.LoadWithPartialName to locate assemblies + * src/data/autotools.xml + ! + - fixed the .pc AC_CONFIG_FILES macro + ! + - added solution name param + - wrapping if type=exe check around script install macro + - added type=lib check and .pc file install macro + - added support for Configuration-specific builds (Debug, Release, etc) + - added strongname keyfile code + - TODO: support non-strongnamed library installation + ! + - added space preservation attribute to stylesheet element + - added a lower-case project name variable + - added solution name param + - made for-each template more specific + ! + - added solution name param + ! + - added solution name param + ! + - added solution name param + ! + - added solution name param + +2007-03-27T09:33 C.J. Adams-Collier + * src/Core/Targets/AutotoolsTarget.cs + - now processing the wrapper script if type is "Exe" or "WinExe" + * src/data/autotools.xml + ! + - being more exact about where text escaping is used + - using the correct variable name for the GACUTIL_FLAGS template + - using correct test="" for the AC_CONFIG_FILES macros + ! + - uncommented the bin_SCRIPTS section now that the script is being + generated correctly + ! + - fixed whitespace at beginning of file, before #! + - using lower-case packageName to indicate installation location + +2007-03-27T09:33 C.J. Adams-Collier + * src/data/autotools.xml + ! + * added a lcProjectName which is $projectName lower-cased + * moved autoconf template specifier near AC_OUTPUT + * AC_OUTPUT with args is deprecated. now using AC_CONFIG_FILES + * placed AC_CONFIG_FILES() calls for wrapper script or pkg-config + file in xslt project type checks + ! + * commented out bin_SCRIPTS + * added a lcProjectName which is $projectName lower-cased + * using $lcProjectName instead of the longer version + +2007-03-27T08:39 C.J. Adams-Collier + * src/data/autotools.xml + ! + - added whitespace-preservation + - added the missing projectName param + - replaced bin_SCRIPTS with something that worked + +2007-03-27T07:56 C.J. Adams-Collier + * src/data/autotools.xml + ! + - cleaned up duplicate checks + - placed initialization macros above system check macros + - added some more messages about what's going on + - added GACUTIL_FLAGS variable including /package option + ! + - added an incomplete bin_SCRIPTS + - RCS check says "building" instead of "compiling" + ! + - removed macros that are useful only for projects + ! + - created this element on this revision + - this is a wrapper shell script that lives in the $PATH and runs + the CIL assembly + +2007-03-26T20:18 C.J. Adams-Collier + * src/Core/Targets/AutotoolsTarget.cs + - creating new template arguments to contain the list of libs to + reference: source, binary & GAC + - source libs are included as part of this solution (untested) + - binary libs are distributed with the source (untested) + - GAC libs are assumed to be in the GAC or other lib path (tested) + * src/data/autotools.xml + - created new params through which to accept reference info + - created a working $(CSC) line + - added a TODO item for ordering project dependency for + AC_CONFIG_SUBDIRS code + +2007-03-26T08:41 C.J. Adams-Collier + * src/Core/Targets/AutotoolsTarget.cs + - now creating list of source files in managed code and passing + them to the template via s + * src/data/prebuild-1.7.xsd + - updated the header comment to 2007 + * src/data/autotools.xml + ! + - copied checks from Solution-level configure.ac + - copied solution-level config status + ! + - added elements for file list to be passed through + - made a temporary target for the assembly we're building + - added this target to the deps of "all:" + ! + - changed status header/footer from "- - -" to "===" + +2007-03-23T08:33 C.J. Adams-Collier + Added version attribute handling code for Property element + Added description element handling code + * prebuild.xml + - added /Prebuild/Solution/Property/@version attribute + - added /Prebuild/Solution/Property/Description element + * src/Core/Nodes/ProjectNode.cs + - added some docs where they were missing and obvious + - added code to handle @version + * src/Core/Nodes/DescriptionNode.cs + - new file. Used to handle /Prebuild/Solution/Property/Description + * src/Core/Targets/AutotoolsTarget.cs + - added mkdirDashP(), a recursive directory creation method + - WriteProject() now copies the files to autotools/ + * src/data/prebuild-1.7.xsd + - added /Prebuild/Solution/Property/Description element + - added /Prebuild/Solution/Property/@version attribute + * src/data/autotools.xml + - removed excess + - explicitly using dnpb: prefix + +2007-03-23T04:31 C.J. Adams-Collier + Merged code from my stripped-down test + Adding support for the /Prebuild/Solution/Project/Author element + * prebuild.xml + - added Author elements + - cleaned up the really long Project element + * src/Core/Nodes/ProjectNode.cs + - added Author tag processing code + * src/Core/Nodes/AuthorNode.cs + - Created to process Author elements + - based off of ReferencePathNode.cs + * src/Core/Targets/AutotoolsTarget.cs + - merged code from https://svn.colliertech.org/mono/dnpbAutotools/dnpbAutotools/test.cs + - renamed old WriteCombine to WriteCombineOld + - renamed old WriteProject to WriteProjectOld + * src/data/prebuild-1.7.xsd + - added Author element to Project + * src/data/autotools.xml + - lower-cased utf + + +2007-03-22T13:58 C.J. Adams-Collier + Exposing an XmlDocument that represents the prebuild.xml file + passed to the program + + * src/Core/Kernel.cs + - created an object member called XmlDocument m_CurrentDoc + - created a property to access its value + - using m_CurrentDoc to load up the prebuild.xml file rather than + a local variable called "doc" + +2007-03-22 C.J. Adams-Collier + * prebuild.xml + - added autotools.xml created at https://svn.colliertech.org/mono/dnpbAutotools/dnpbAutotools/autotools.xml + * src/data/autotools.xml + - the same + * src/Core/Targets/MonoDevelopTarget.cs + - fixed bug introduced in r206 + +2007-03-07 C.J. Adams-Collier + * src/data/prebuild-1.7.xsd + - added version attribute to Solution and Project elements + +2006-11-04T00:38 C.J. Adams-Collier + * placing AssemblyInfo.cs into Properties/ + * Fixed double-mention of the package name + +2006-11-03T15:23 C.J. Adams-Collier + * corrected a problem in the Include.am generation code + * created the new .exe + * copied it to the root of the build + +2006-11-03T14:57 C.J. Adams-Collier + * Updated the .exe file + +2006-11-03 C.J. Adams-Collier + * Added a TODO file + * Added a ChangeLog file + * applied some fixes for autotools gac and pkg-config installation + problems diff --git a/Prebuild/INSTALL b/Prebuild/INSTALL new file mode 100644 index 0000000000..23e5f25d0e --- /dev/null +++ b/Prebuild/INSTALL @@ -0,0 +1,236 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free +Software Foundation, Inc. + +This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + +These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. (Caching is +disabled by default to prevent problems with accidental use of stale +cache files.) + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You only need +`configure.ac' if you want to change it or regenerate `configure' using +a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + +Some systems require unusual options for compilation or linking that the +`configure' script does not know about. Run `./configure --help' for +details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + +You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have to compile the package for one architecture at a +time in the source code directory. After you have installed the +package for one architecture, use `make distclean' before reconfiguring +for another architecture. + +Installation Names +================== + +By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + +Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + +There may be some features `configure' cannot figure out automatically, +but needs to determine by the type of machine the package will run on. +Usually, assuming the package is built to be run on the _same_ +architectures, `configure' can figure that out, but if it prints a +message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + +If you want to set default values for `configure' scripts to share, you +can create a site shell script called `config.site' that gives default +values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + +Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). Here is a another example: + + /bin/bash ./configure CONFIG_SHELL=/bin/bash + +Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent +configuration-related scripts to be executed by `/bin/bash'. + +`configure' Invocation +====================== + +`configure' recognizes the following options to control how it operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/Prebuild/NEWS b/Prebuild/NEWS new file mode 100644 index 0000000000..bea28dac26 --- /dev/null +++ b/Prebuild/NEWS @@ -0,0 +1,200 @@ +Prebuild 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 2005, Visual Studio 2003, Visual Studio 2002, SharpDevelop, MonoDevelop, and NAnt. + +Documentation and downloads are available at http://dnpb.sourceforge.net. + +Prebuild is licensed under the BSD license. + +[ XXXXXXX XX, XXX - 1.3.2 ] + + Added Keyfile signing to NAnt target and VS2005 target + + Updated XSD file to 1.7 + + Boo and VisualBasic Language support in VS2005 target + + Added basic Autotools target. It creates a non-recursive Autotools system. + ! Multiple files can be excluded from the Match node + ! VS2005 now handles .resx files correctly. + ! NAnt and Autotools now handle defines + ! NAnt and Autotools now handle resources + + Conditional XML variables can be passed through the command line. + + Added /install and /remove command line flags to install and remove assemblies from the GAC + + Many fixes to VS2005 target + +[ July 21, 2006 - 1.3.1 ] + ! VS2005 fixes from Rob Loach + ! NAnt fixes from Rob Loach and David Hudson + ! XML doc fixes from Rob Loach + + Added SharpDevelop2 target (really just uses VS2005 target) + ! Fixed bug with BuildEvents in Monodevelop target + + Passing /yes will default to answering yes to any warnings + +[ February 28, 2006 - 1.3 ] + + Added MonoDevelop target. + + Added NAnt target. + + Lots of fixes to all targets. + * Cleaned up the code using FXCop. + * Updated schema to 1.6 to fix a typo and add a new parameter. + * jendave is now the maintainer of the project. RobLoach has been added as a developer. + * Removed references to 'dnpb'. + + Added rudimentary support for pre- and post- build scripts + * Updated examples. + +[ August 5, 2004 - 1.2 ] + + Added Visual Studio Express (vs2005express) target contributed by Borrillis and modified for use with different languages + + Added the allowedgroups command line option followed by a pipe-delimited list of project group filter flags (eg. Group1|Group2) allow optional filtering of all projects that dont have at least one of these flags + + Added the filterGroups XML attribute to the project node and updated the scheme to v1.5 for this addition, it is used to specified the delimited list of filter groups to which a project belongs + * Modified the removedir command line option to allow for a pipe-delimited list of directory names + ! Modified the resource loading code to search for resourced without the prepended namespace (as Visual Studio .NET does it) to allow for it to be compiled with SharpDevelop as well + + Added the GenerateXmlDocFile boolean option to the Options XML element + * Changed the behavior of the XmlDocFile option so that if not specified it uses the assemblyName (without file extension) + .xml for the file name instead of just not generating the file since the new GenerateXmlDocFile takes care of this + +[ January 3, 2004 - 1.1 ] + ! Replaced regex use for more efficient manual parsing to allow use on non-windows platforms with Mono which has Regex problems + + Added the checkOsVars attribute to the root element for enabling interpolation for Enviroment variables in the form ${var}, otherwise no checking is performed for efficiency-sake + * Make the version attribute on the root element optional as it isn't used and not needed since the schema url contains the version + +[ December 30, 2004 - 1.1 ] + ! Applied Leed's fix for SharpDevelop references + + Rewrote much of the processing for better validation and without the use of a temp file + + Added support for configurations at the project level which are named All. They now apply changes to all Solution level defined configs + * Changed all spaces into tabs + + Added support for the None build action + * Replaced all sequence's in the XML schema for all's because the order doesn't matter since the xml file is loaded into an XmlDocument + +[ December 25, 2004 - 1.0 ] + + Added the /removedir option for cleaning directories like obj before file releases + + Changed WriteTempXml() and the new DeleteTempXml() methods to be compiled only in DEBUG builds + * Made path optional for Match elements (defaults to current directory) and updates schema for it + ! Fixed XML example in the readme.txt + + Added example xml files to docs directory + * Updated license.txt to add Dan Moorehead and update copyright years + + Updated prebuild.xml to take advantage of the default path attribute for match elements + + Updated Clean to delete the obj directories + +[ December 25, 2004 - 0.13 ] + + Added dnpb.exe so that it can be used to generate the project files + + Added dnpb.ico + * Added parameterless Write statement to Log for writing a single line + * Changed scehema to version 1.3 for support of icon attribute + * Added support for All configuration name under a Project node signifying common settings for all configurations + ! Fixed the SupressWarnings by adding the corresponding field to OptionsNode + * Wrote documentation in docs/readme.txt + * Added Dan Moorehead to copyrights and extended date from 2004 to 2004-2005 + * Updated prebuild.xml + * Optimized Log class + * Updated OutputUsage() + * /clean targets all by default + * No log file is used by default, /log without value specified uses default file name + + Added support for the /pause which pauses the utility after execution to observe output + + +[ September 27, 2004 - 0.12.2a ] + ! Fixed a nasty bug when trying to delete our temp file for pre-processing. + +[ September 15, 2004 - 0.12.2 ] + + Expanded platform identification, thanks to the NAnt guys for shedding some + light on how to properly check for UNIX platforms! Thanks guys! + * POSIX OS identifier changed to UNIX. Valid OS names are now "Win32", "UNIX", + and "Unknown". + ! Fixed SharpDevelop target to properly use the 'rootNamespace' attribute of + the Project tag. + + New command-line switch, /ppo, forces DNPB to pre-process the file and write + the pre-processed file. This allows you to test/debug your pre-processor + macros. No other processing will be done. You can specify a target file as + a paramter for the /ppo switch, or DNPB will write the file 'preprocessed.xml' + if you do not specify a file. + + The Match tag now has a 'buildAction' attribute which functions exactly like + the attribute of the same name for the File tag. + +[ August 5, 2004 - 0.12.1 ] + + Added environment variable expansion for all values. Environment variables + should be listed in the form ${VAR}. + +[ July 30, 2004 - 0.12.0 ] + + Added preprocessing via XML processing information tags. Available tags + are: ?>, ?>, and . The + current expression parser is very basic, but will be replaced with a more + capable parser over time. Current operators available are: =, !=, <, >, + <=, >=. Current test variables available: OS, RuntimeVersion, RuntimeMajor, + RuntimeMinor, RuntimeRevision. + +[ July 27, 2004 - 0.11.4 ] + + Added 'useRegex' attribute to the Match tag. Matches can now use regular + expressions to match filenames. + + Added the 'assemblyName' attribute to the Project tag. Projects can now + set their output assembly name. + ! Fixed several bugs in the way that Project tags inheirt their parent + Solutions configuration options. This operation should now work fully as + intended. + ! Due to some wierdness, Project Guid's are now stored as part of the Project + node and created at parse time. + +[ May 11, 2004 - 0.11.3 ] + ! Fixed a bug where I was writing the wrong property name for a projects root + namespace. + ! Removed a DEBUG statement I had left in the code in 0.11.2. + ! Fixed a bug in the VS2002 writer which caused the version variables to not + be overriden correctly. + + Added the rootNamespace property to the element, allowing you to + specify the root namespace. + * /target and /clean are now mutually exclusive command line switches, and + they both now take the all option. In the case of /target all, all build + file for all targets will be created. In the case of /clean all, the user + will be prompted to make sure they want to do it, and if so, will clean + all build files for all targets. + +[ April 22, 2004 - 0.11.2 ] + ! Fixed a bug with the /file command-line operator. Was using the unresolved + file path rather then the resolved one, was making the attempt to open the + dnpb file fail. + ! Fixed a bug in the schema that required at least 1 solution and 1 reference + path. We can do just fine with 0 of either of these. Some files may be all + statements and not have any tags. + ! Fixed a bug that caused the project references not to be written with the + SharpDevelop target. + * Changed the schema to version 1.2, allowing for Configuration nodes to exist + under project nodes. The inheritance of values is hierarchical. Meaning, if + you define a configuration named Debug at the Soltion level, and one by the + same name at the Project level, the one at the Project level will first + inherit the options of the Solution level configuration, then set it's own + options. If you define a configuration at the Project level and it does not + exist at the Solution level, it will be created at the Solution level. + * Project references should now work correctly across the board. Note that due + to a restriction in Visual Studio, you can only reference projects in the same + solution. + +[ April 21, 2004 - 0.11.1 ] + ! Fixed a problem with resolving paths in various targets. Was not properly + setting the CWD. + * Schema updated to 1.1, moving the ReferencePath element from the Options + element to the Project element. This makes more logical sense, given that + reference paths are resolved relative to the project path. Any prebuild.xml + file referecning verison 1.0 will fail! Please update to the 1.1 schema. + +[ April 19, 2004 - 0.11.0 ] + * Added several attributes across the code to make FxCop happy + ! Fixed bugs in reference paths being written in the VS targets. + ! Fixed a bug in ProjectNode which was doing two CWDStack.Push() calls instead of + a Push/Pop pair. Was wreaking havoc with tags. + ! Fixed some bugs in the path tracking, both the Project and Solution nodes now + have a FullPath property, which is the full path to the file resolved at load + time. This should fix all path relativity problems. + + Added new /clean switch, allowing the target to clean up any files it generated. + in accordance, the ITarget interface has been updated to support a new Clean() + method. + + Completed addition of the tag, to allow the referencing of external + prebuild.xml files. + + Added the runtime attribute to the Project element. This allows the developer + to specify which runtime a project should target (Mono or Microsoft). This is + of course ignored in certain targets like the Visual Studio targets. + + Added the SharpDevelop target. + +[ April 13, 2004 - 0.10.1a ] + + Added the buildAction attribute to the File node. This is needed for dnpb + to even be able to bootstrap itself (dnpb-1.0.xsd must be an embedded resource) + +[ April 13, 2004 - 0.10.1 ] + * First Release + +[ Key ] +* = Change or information ++ = Addition +! = Bug Fix + diff --git a/Prebuild/README b/Prebuild/README new file mode 100644 index 0000000000..2b05fb598d --- /dev/null +++ b/Prebuild/README @@ -0,0 +1,274 @@ +Prebuild Instructions + +Prebuild 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 2005, Visual Studio 2003, Visual Studio 2002, SharpDevelop, SharpDevelop2, MonoDevelop, and NAnt. + +_______________________________________________________________________________ +Overview + +Prebuild can be either be run from the command line to generate the +project and make files or you can execute the included batch (*.bat) +and Unix Shell script (*.sh) files. + +_______________________________________________________________________________ +The currently supported developement tools and their associated batch +and shell script files. + +Visual Studio .NET 2005 (VS2005.bat) +Visual Studio .NET 2003 (VS2003.bat) +Visual Studio .NET 2002 (VS2002.bat) +SharpDevelop (SharpDevelop.bat) - http://www.icsharpcode.net/OpenSource/SD/ +SharpDevelop2 (SharpDevelop.bat) - http://www.icsharpcode.net/OpenSource/SD/ +MonoDevelop (MonoDevelop.sh) - http://www.monodevelop.com/ +NAnt (nant.sh and nant.bat) - http://nant.sourceforge.net/ +Autotools (autotools.bat and autotools.sh) - http://en.wikipedia.org/wiki/GNU_build_system + +Notes: + +A Unix Shell script is provided for MonoDevelop, as it does not run on +Windows at this time. + +Visual Studio .NET 2005 and the Visual Express IDE's can import +solutions from older versions of Visual Studio .NET. + +Makefiles are not currently supported. + +_______________________________________________________________________________ +Command Line Syntax: + +Example: +> Prebuild /target vs2003 + +This will generate the project files for Visual Studio.NET 2003 and +place the redirect the log to a file named PrebuildLog.txt in the +parent directory + + +The syntax structure is as below, where commandParameter is optional +depending on the command and you can provide several option-value +pairs. + +Note: The '> ' signifies the command prompt, do not enter this literally + +> Prebuild /"); + } + #endregion + + #region User File + + ps = new StreamWriter(projectFile + ".user"); + using (ps) + { + // Get the first configuration from the project. + ConfigurationNode firstConfiguration = null; + + if (project.Configurations.Count > 0) + { + firstConfiguration = project.Configurations[0]; + } + + ps.WriteLine(""); + //ps.WriteLine( "" ); + //ps.WriteLine(" <{0}>", toolInfo.XMLTag); + //ps.WriteLine(" "); + ps.WriteLine(" "); + //ps.WriteLine(" ", MakeRefPath(project)); + + if (firstConfiguration != null) + { + ps.WriteLine(" {0}", firstConfiguration.Name); + ps.WriteLine(" {0}", firstConfiguration.Platform); + } + + ps.WriteLine(" {0}", MakeRefPath(project)); + ps.WriteLine(" {0}", 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", 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}", 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} = {0}", conf.NameAndPlatform); + } + 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(TextWriter 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(TextWriter 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(TextWriter writer, SolutionNode solution, Guid projectGuid) + { + WriteNestedFolder(writer, solution.Guid, projectGuid); + } + + private static void WriteNestedFolder(TextWriter writer, Guid parentGuid, Guid childGuid) + { + writer.WriteLine("\t\t{0} = {1}", + childGuid.ToString("B").ToUpper(), + parentGuid.ToString("B").ToUpper()); + } + + private static void WriteConfigurationLines(IEnumerable configurations, SolutionNode solution, TextWriter ss) + { + foreach (ProjectNode project in solution.Projects) + { + foreach (ConfigurationNode conf in configurations) + { + ss.WriteLine("\t\t{0}.{1}.ActiveCfg = {1}", + project.Guid.ToString("B").ToUpper(), + conf.NameAndPlatform); + + ss.WriteLine("\t\t{0}.{1}.Build.0 = {1}", + project.Guid.ToString("B").ToUpper(), + conf.NameAndPlatform); + } + } + + foreach (SolutionNode child in solution.Solutions) + { + WriteConfigurationLines(configurations, child, ss); + } + } + + private void WriteSolutionFiles(SolutionNode solution, TextWriter ss) + { + if(solution.Files != null && solution.Files.Count > 0) + WriteProject(ss, "Folder", solution.Guid, "Solution Files", "Solution Files", solution.Files); + } + + private void WriteEmbeddedSolution(TextWriter writer, SolutionNode embeddedSolution) + { + WriteProject(writer, "Folder", embeddedSolution.Guid, embeddedSolution.Name, embeddedSolution.Name, embeddedSolution.Files); + } + + private void WriteProject(SolutionNode solution, TextWriter ss, ProjectNode project) + { + WriteProject(ss, solution, project.Language, project.Guid, project.Name, project.FullPath); + } + + private void WriteProject(SolutionNode solution, TextWriter ss, DatabaseProjectNode dbProject) + { + if (solution.Files != null && solution.Files.Count > 0) + WriteProject(ss, solution, "Database", dbProject.Guid, dbProject.Name, dbProject.FullPath); + } + + const string ProjectDeclarationBeginFormat = "Project(\"{0}\") = \"{1}\", \"{2}\", \"{3}\""; + const string ProjectDeclarationEndFormat = "EndProject"; + + private void WriteProject(TextWriter ss, SolutionNode solution, string language, Guid guid, string name, string projectFullPath) + { + if (!tools.ContainsKey(language)) + throw new UnknownLanguageException("Unknown .NET language: " + language); + + 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(TextWriter writer, string language, Guid projectGuid, string name, string location) + { + WriteProject(writer, language, projectGuid, name, location, null); + } + + private void WriteProject(TextWriter writer, string language, Guid projectGuid, string name, string location, FilesNode files) + { + if (!tools.ContainsKey(language)) + throw new UnknownLanguageException("Unknown .NET language: " + language); + + 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 static bool ContainsSqlFiles(string folder) + { + if(Directory.GetFiles(folder, "*.sql").Length > 0) + 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 static 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 = 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", 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/.svn/text-base/VSVersion.cs.svn-base b/Prebuild/src/Core/Targets/.svn/text-base/VSVersion.cs.svn-base new file mode 100644 index 0000000000..699b5ca019 --- /dev/null +++ b/Prebuild/src/Core/Targets/.svn/text-base/VSVersion.cs.svn-base @@ -0,0 +1,54 @@ +#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/.svn/text-base/XcodeTarget.cs.svn-base b/Prebuild/src/Core/Targets/.svn/text-base/XcodeTarget.cs.svn-base new file mode 100644 index 0000000000..5393cec05f --- /dev/null +++ b/Prebuild/src/Core/Targets/.svn/text-base/XcodeTarget.cs.svn-base @@ -0,0 +1,594 @@ +#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.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/Targets/AutotoolsTarget.cs b/Prebuild/src/Core/Targets/AutotoolsTarget.cs new file mode 100644 index 0000000000..e46b5a5f36 --- /dev/null +++ b/Prebuild/src/Core/Targets/AutotoolsTarget.cs @@ -0,0 +1,1070 @@ +#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.Generic; +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.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; + readonly Dictionary assemblyPathToPackage = new Dictionary(); + readonly Dictionary assemblyFullNameToPath = new Dictionary(); + readonly Dictionary packagesHash = new Dictionary(); + readonly List packages = new List(); + + #endregion + + #region Private Methods + + private static 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 static 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); + } + + static string NormalizeAsmName(string name) + { + int i = name.IndexOf(", PublicKeyToken=null"); + if (i != -1) + return name.Substring(0, i).Trim(); + 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 static 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 static 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 static 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 static 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.ContainsKey(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 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); + } + + } + + // 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 = project.References[refNum]; + Assembly refAssembly = Assembly.LoadWithPartialName(refr.Name); + + /* Determine which pkg-config (.pc) file refers to + this assembly */ + + SystemPackage package = null; + + if (packagesHash.ContainsKey(refr.Name)) + { + package = packagesHash[refr.Name]; + + } + else + { + string assemblyFullName = string.Empty; + if (refAssembly != null) + assemblyFullName = refAssembly.FullName; + + string assemblyFileName = string.Empty; + if (assemblyFullName != string.Empty && + assemblyFullNameToPath.ContainsKey(assemblyFullName) + ) + assemblyFileName = + assemblyFullNameToPath[assemblyFullName]; + + if (assemblyFileName != string.Empty && + assemblyPathToPackage.ContainsKey(assemblyFileName) + ) + package = 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 = + ((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 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(); + + const 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"); + //if (pwd.Length != 0) + //{ + string 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 new file mode 100644 index 0000000000..650007ecc6 --- /dev/null +++ b/Prebuild/src/Core/Targets/DebugTarget.cs @@ -0,0 +1,102 @@ +#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 08:42:51 +0100 (Wed, 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 new file mode 100644 index 0000000000..54046dd9bb --- /dev/null +++ b/Prebuild/src/Core/Targets/MakefileTarget.cs @@ -0,0 +1,469 @@ +#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.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.ContainsKey(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.ContainsKey(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.ContainsKey(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.ContainsKey(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 new file mode 100644 index 0000000000..ea6d2c2233 --- /dev/null +++ b/Prebuild/src/Core/Targets/MonoDevelopTarget.cs @@ -0,0 +1,515 @@ +#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.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; + string dependson = ""; + string resource_id = ""; + string copyToOutput = ""; + + 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; + } + + if (project.Files.GetCopyToOutput(file) != CopyToOutput.Never) + buildAction = "FileCopy"; + + // Sort of a hack, we try and resolve the path and make it relative, if we can. + string extension = Path.GetExtension(file); + string designer_format = string.Format(".Designer{0}", extension); + + if (file.EndsWith(designer_format)) + { + string basename = file.Substring(0, file.LastIndexOf(designer_format)); + string[] extensions = new string[] { ".cs", ".resx", ".settings" }; + + foreach(string ext in extensions) + { + if (project.Files.Contains(basename + ext)) + { + dependson = string.Format(" dependson=\"{0}{1}\"", basename, ext); + break; + } + } + } + if (extension == ".resx") + { + buildAction = "EmbedAsResource"; + string basename = file.Substring(0, file.LastIndexOf(".resx")); + + // Visual Studio type resx + form dependency + if (project.Files.Contains(basename + ".cs")) + { + dependson = string.Format(" dependson=\"{0}{1}\"", basename, ".cs"); + } + + // We need to specify a resources file name to avoid MissingManifestResourceExceptions + // in libraries that are built. + resource_id = string.Format(" resource_id=\"{0}.{1}.resources\"", + project.AssemblyName, basename.Replace("/", ".")); + } + + switch(project.Files.GetCopyToOutput(file)) + { + case CopyToOutput.Always: + copyToOutput = string.Format(" copyToOutputDirectory=\"Always\""); + break; + case CopyToOutput.PreserveNewest: + copyToOutput = string.Format(" copyToOutputDirectory=\"PreserveNewest\""); + 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, dependson, resource_id, copyToOutput); + } + 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 new file mode 100644 index 0000000000..d4a33f8d3b --- /dev/null +++ b/Prebuild/src/Core/Targets/NAntTarget.cs @@ -0,0 +1,792 @@ +#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.Generic; +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("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)), '/'); + if (refr.Path != null) { + if (ExtensionSpecified(refr.Name)) + { + ss.WriteLine (" "); + } + else + { + ss.WriteLine (" "); + } + } + else + { + 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(" "); + + // Use the active configuration, which is the first configuration name in the prebuild file. + Dictionary emittedConfigurations = new Dictionary(); + + ss.WriteLine(" ", solution.ActiveConfig); + ss.WriteLine(); + + foreach (ConfigurationNode conf in solution.Configurations) + { + // If the name isn't in the emitted configurations, we give a high level target to the + // platform specific on. This lets "Debug" point to "Debug-AnyCPU". + if (!emittedConfigurations.ContainsKey(conf.Name)) + { + // Add it to the dictionary so we only emit one. + emittedConfigurations.Add(conf.Name, conf.Platform); + + // Write out the target block. + ss.WriteLine(" ", conf.Name, conf.Platform); + ss.WriteLine(" "); + ss.WriteLine(); + } + + // Write out the target for the configuration. + ss.WriteLine(" ", conf.Name, conf.Platform); + ss.WriteLine(" ", conf.Name); + ss.WriteLine(" ", conf.Options["DebugInformation"].ToString().ToLower()); + ss.WriteLine("\t\t ", conf.Platform); + 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(item.FullName) != + System.Text.RegularExpressions.Match.Empty) + { + Console.WriteLine("Including file: " + item.FullName); + + using (FileStream fs = new FileStream(item.FullName, + FileMode.Open, + FileAccess.Read, + FileShare.None)) + { + using (StreamReader sr = new StreamReader(fs)) + { + ss.WriteLine("", (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(" "); + + // justincc: FIXME FIXME FIXME - A temporary OpenSim hack to clean up files when "nant clean" is executed. + // Should be replaced with extreme prejudice once anybody finds out if the CleanFiles stuff works or there is + // another working mechanism for specifying this stuff + ss.WriteLine(" "); + ss.WriteLine(" "); + ss.WriteLine(" "); + ss.WriteLine(" "); + ss.WriteLine(" "); + ss.WriteLine(" "); + ss.WriteLine(" "); + ss.WriteLine(" "); + ss.WriteLine(" "); + ss.WriteLine(" "); + + if (solution.Cleanup != null && solution.Cleanup.CleanFiles.Count > 0) + { + foreach (CleanFilesNode cleanFile in solution.Cleanup.CleanFiles) + { + ss.WriteLine(" "); + ss.WriteLine(" "); + ss.WriteLine(" ", cleanFile.Pattern); + ss.WriteLine(" ", cleanFile.Pattern); + 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 new file mode 100644 index 0000000000..66dd1bc6f6 --- /dev/null +++ b/Prebuild/src/Core/Targets/SharpDevelop2Target.cs @@ -0,0 +1,82 @@ +#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 new file mode 100644 index 0000000000..8e3205025f --- /dev/null +++ b/Prebuild/src/Core/Targets/SharpDevelopTarget.cs @@ -0,0 +1,425 @@ +#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.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("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 new file mode 100644 index 0000000000..935c6744db --- /dev/null +++ b/Prebuild/src/Core/Targets/ToolInfo.cs @@ -0,0 +1,197 @@ +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 new file mode 100644 index 0000000000..2292624473 --- /dev/null +++ b/Prebuild/src/Core/Targets/VS2002Target.cs @@ -0,0 +1,87 @@ +#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 new file mode 100644 index 0000000000..10e2dc4a71 --- /dev/null +++ b/Prebuild/src/Core/Targets/VS2003Target.cs @@ -0,0 +1,593 @@ +#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.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; + + readonly Dictionary m_Tools = new Dictionary(); + Kernel m_Kernel; + + /// + /// Gets or sets the solution version. + /// + /// The solution version. + protected string SolutionVersion + { + get + { + return solutionVersion; + } + set + { + solutionVersion = value; + } + } + /// + /// Gets or sets the product version. + /// + /// The product version. + protected string ProductVersion + { + get + { + return productVersion; + } + set + { + productVersion = value; + } + } + /// + /// Gets or sets the schema version. + /// + /// The schema version. + protected string SchemaVersion + { + get + { + return schemaVersion; + } + set + { + schemaVersion = value; + } + } + /// + /// Gets or sets the name of the version. + /// + /// The name of the version. + protected string VersionName + { + get + { + return versionName; + } + set + { + versionName = value; + } + } + /// + /// Gets or sets the version. + /// + /// The version. + protected VSVersion Version + { + get + { + return version; + } + set + { + version = value; + } + } + + #endregion + + #region Constructors + + /// + /// Initializes a new instance of the class. + /// + public VS2003Target() + { + 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 = 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)); + + using(ps) + { + ps.WriteLine(""); + ps.WriteLine(" <{0}", toolInfo.XmlTag); + ps.WriteLine("\t\t\t\tProjectType = \"Local\""); + ps.WriteLine("\t\t\t\tProductVersion = \"{0}\"", ProductVersion); + ps.WriteLine("\t\t\t\tSchemaVersion = \"{0}\"", 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", 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}", SolutionVersion); + foreach(ProjectNode project in solution.Projects) + { + if(!m_Tools.ContainsKey(project.Language)) + { + throw new UnknownLanguageException("Unknown .NET language: " + project.Language); + } + + 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 = project.References[i]; + if(solution.ProjectsTable.ContainsKey(refr.Name)) + { + ProjectNode refProject = 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 = 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", 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 new file mode 100644 index 0000000000..9c70e26a37 --- /dev/null +++ b/Prebuild/src/Core/Targets/VS2005Target.cs @@ -0,0 +1,147 @@ +#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.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 new file mode 100644 index 0000000000..fee4f7f27f --- /dev/null +++ b/Prebuild/src/Core/Targets/VS2008Target.cs @@ -0,0 +1,127 @@ +using System; +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; + + /// + /// 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 new file mode 100644 index 0000000000..ea9f736475 --- /dev/null +++ b/Prebuild/src/Core/Targets/VS2010Target.cs @@ -0,0 +1,138 @@ +using System; +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.30729"; + string schemaVersion = "2.0"; + string versionName = "Visual Studio 2010"; + string name = "vs2010"; + VSVersion version = VSVersion.VS10; + + #endregion + + #region Properties + + /// + /// 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: + case FrameworkVersion.v3_5: + return "ToolsVersion=\"4.0\""; + 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 new file mode 100644 index 0000000000..6969dd7323 --- /dev/null +++ b/Prebuild/src/Core/Targets/VSGenericTarget.cs @@ -0,0 +1,922 @@ +#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.Generic; +using System.IO; +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 Dictionary tools = new Dictionary(); + 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() + { + tools["C#"] = new ToolInfo("C#", "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}", "csproj", "CSHARP", "$(MSBuildBinPath)\\Microsoft.CSHARP.Targets"); + tools["Database"] = new ToolInfo("Database", "{4F174C21-8C12-11D0-8340-0000F80270F8}", "dbp", "UNKNOWN"); + tools["Boo"] = new ToolInfo("Boo", "{45CEA7DC-C2ED-48A6-ACE0-E16144C02365}", "booproj", "Boo", "$(BooBinPath)\\Boo.Microsoft.Build.targets"); + tools["VisualBasic"] = new ToolInfo("VisualBasic", "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}", "vbproj", "VisualBasic", "$(MSBuildBinPath)\\Microsoft.VisualBasic.Targets"); + 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) + { + 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 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 = 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("", GetToolsVersionXml(project.FrameworkVersion)); + ps.WriteLine(" "); + ps.WriteLine(" Local"); + ps.WriteLine(" {0}", ProductVersion); + ps.WriteLine(" {0}", 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(" {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, conf.Platform); + 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(" {0}", conf.Platform); + ps.WriteLine(" "); + } + + //ps.WriteLine(" "); + + Dictionary projectReferences = new Dictionary(); + 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(refr, projectNode); + } + // Assembly References + ps.WriteLine(" "); + + foreach (ReferenceNode refr in otherReferences) + { + ps.Write(" "); + ps.Write(" "); + ps.Write(refr.Name); + ps.WriteLine(""); + + if(!String.IsNullOrEmpty(refr.Path)) + { + // Use absolute path to assembly (for determining assembly type) + string absolutePath = Path.Combine(project.FullPath, refr.Path); + if(File.Exists(Helper.MakeFilePath(absolutePath, refr.Name, "exe"))) { + // Assembly is an executable (exe) + ps.WriteLine(" {0}", Helper.MakeFilePath(refr.Path, refr.Name, "exe")); + } else if(File.Exists(Helper.MakeFilePath(absolutePath, refr.Name, "dll"))) { + // Assembly is an library (dll) + ps.WriteLine(" {0}", Helper.MakeFilePath(refr.Path, refr.Name, "dll")); + } else { + string referencePath = Helper.MakeFilePath(refr.Path, refr.Name, "dll"); + kernel.Log.Write(LogType.Warning, "Reference \"{0}\": The specified file doesn't exist.", referencePath); + ps.WriteLine(" {0}", Helper.MakeFilePath(refr.Path, refr.Name, "dll")); + } + } + + ps.WriteLine(" {0}", refr.LocalCopy); + ps.WriteLine(" "); + } + ps.WriteLine(" "); + + //Project References + ps.WriteLine(" "); + foreach (KeyValuePair pair in projectReferences) + { + ToolInfo tool = tools[pair.Value.Language]; + if (tools == null) + throw new UnknownLanguageException(); + + string path = + Helper.MakePathRelativeTo(project.FullPath, + Helper.MakeFilePath(pair.Value.FullPath, pair.Value.Name, tool.FileExtension)); + ps.WriteLine(" ", path); + + // TODO: Allow reference to visual basic projects + ps.WriteLine(" {0}", pair.Value.Name); + ps.WriteLine(" {0}", pair.Value.Guid.ToString("B").ToUpper()); + ps.WriteLine(" {0}", tool.Guid.ToUpper()); + + //This is the Copy Local flag in VS + ps.WriteLine(" {0}", pair.Key.LocalCopy); + + 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 filePath 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(filePath); + + // Visual Studio chokes on file names if forward slash is used as a path separator + // instead of backslash. So we must make sure that all file paths written to the + // project file use \ as a path separator. + string file = filePath.Replace(@"/", @"\"); + + 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); + + string autogen_name = file.Substring(0, file.LastIndexOf('.')) + ".Designer.cs"; + string dependent_name = filePath.Substring(0, file.LastIndexOf('.')) + ".cs"; + + // Check for a parent .cs file with the same name as this designer file + if (File.Exists(Helper.NormalizePath(dependent_name))) + { + ps.WriteLine(" {0}", Path.GetFileName(dependent_name)); + } + else + { + ps.WriteLine(" ResXFileCodeGenerator"); + ps.WriteLine(" {0}", Path.GetFileName(autogen_name)); + ps.WriteLine(" " + subType + ""); + } + + ps.WriteLine(" "); + if (File.Exists(Helper.NormalizePath(autogen_name))) + { + ps.WriteLine(" ", autogen_name); + //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(" True"); + ps.WriteLine(" {0}", Path.GetFileName(filePath)); + } + + ps.WriteLine(" "); + } + list.Add(autogen_name); + } + if (subType == SubType.Settings) + { + ps.Write(" <{0} ", project.Files.GetBuildAction(filePath)); + ps.WriteLine("Include=\"{0}\">", file); + string fileName = Path.GetFileName(filePath); + if (project.Files.GetBuildAction(filePath) == 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(filePath)); + } + else if (subType != SubType.Designer) + { + string path = Helper.NormalizePath(file); + string path_lower = path.ToLower(); + + if (!list.Contains(filePath)) + { + ps.Write(" <{0} ", project.Files.GetBuildAction(filePath)); + + int startPos = 0; + if (project.Files.GetPreservePath(filePath)) + { + while ((@"./\").IndexOf(file.Substring(startPos, 1)) != -1) + startPos++; + + } + else + { + startPos = file.LastIndexOf(Path.GetFileName(path)); + } + + // be sure to write out the path with backslashes so VS recognizes + // the file properly. + ps.WriteLine("Include=\"{0}\">", file); + + int last_period_index = file.LastIndexOf('.'); + string short_file_name = file.Substring(0, last_period_index); + string extension = Path.GetExtension(path); + // make this upper case, so that when File.Exists tests for the + // existence of a designer file on a case-sensitive platform, + // it is correctly identified. + string designer_format = string.Format(".Designer{0}", extension); + + if (path_lower.EndsWith(designer_format.ToLowerInvariant())) + { + int designer_index = path.IndexOf(designer_format); + string file_name = path.Substring(0, designer_index); + + // There are two corrections to the next lines: + // 1. Fix the connection between a designer file and a form + // or usercontrol that don't have an associated resx file. + // 2. Connect settings files to associated designer files. + if (File.Exists(file_name + extension)) + ps.WriteLine(" {0}", Path.GetFileName(file_name + extension)); + else if (File.Exists(file_name + ".resx")) + ps.WriteLine(" {0}", Path.GetFileName(file_name + ".resx")); + else if (File.Exists(file_name + ".settings")) + { + ps.WriteLine(" {0}", Path.GetFileName(file_name + ".settings")); + ps.WriteLine(" True"); + ps.WriteLine(" True"); + } + } + else if (subType == SubType.CodeBehind) + { + ps.WriteLine(" {0}", Path.GetFileName(short_file_name)); + } + if (project.Files.GetIsLink(filePath)) + { + string alias = project.Files.GetLinkPath(filePath); + alias += file.Substring(startPos); + alias = Helper.NormalizePath(alias); + ps.WriteLine(" {0}", alias); + } + else if (project.Files.GetBuildAction(filePath) != BuildAction.None) + { + if (project.Files.GetBuildAction(filePath) != BuildAction.EmbeddedResource) + { + ps.WriteLine(" {0}", subType); + } + } + + if (project.Files.GetCopyToOutput(filePath) != CopyToOutput.Never) + { + ps.WriteLine(" {0}", project.Files.GetCopyToOutput(filePath)); + } + + ps.WriteLine(" ", project.Files.GetBuildAction(filePath)); + } + } + } + + 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) + { + // Get the first configuration from the project. + ConfigurationNode firstConfiguration = null; + + if (project.Configurations.Count > 0) + { + firstConfiguration = project.Configurations[0]; + } + + ps.WriteLine(""); + //ps.WriteLine( "" ); + //ps.WriteLine(" <{0}>", toolInfo.XMLTag); + //ps.WriteLine(" "); + ps.WriteLine(" "); + //ps.WriteLine(" ", MakeRefPath(project)); + + if (firstConfiguration != null) + { + ps.WriteLine(" {0}", firstConfiguration.Name); + ps.WriteLine(" {0}", firstConfiguration.Platform); + } + + ps.WriteLine(" {0}", MakeRefPath(project)); + ps.WriteLine(" {0}", 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", 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}", 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} = {0}", conf.NameAndPlatform); + } + 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(TextWriter 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(TextWriter 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(TextWriter writer, SolutionNode solution, Guid projectGuid) + { + WriteNestedFolder(writer, solution.Guid, projectGuid); + } + + private static void WriteNestedFolder(TextWriter writer, Guid parentGuid, Guid childGuid) + { + writer.WriteLine("\t\t{0} = {1}", + childGuid.ToString("B").ToUpper(), + parentGuid.ToString("B").ToUpper()); + } + + private static void WriteConfigurationLines(IEnumerable configurations, SolutionNode solution, TextWriter ss) + { + foreach (ProjectNode project in solution.Projects) + { + foreach (ConfigurationNode conf in configurations) + { + ss.WriteLine("\t\t{0}.{1}.ActiveCfg = {1}", + project.Guid.ToString("B").ToUpper(), + conf.NameAndPlatform); + + ss.WriteLine("\t\t{0}.{1}.Build.0 = {1}", + project.Guid.ToString("B").ToUpper(), + conf.NameAndPlatform); + } + } + + foreach (SolutionNode child in solution.Solutions) + { + WriteConfigurationLines(configurations, child, ss); + } + } + + private void WriteSolutionFiles(SolutionNode solution, TextWriter ss) + { + if(solution.Files != null && solution.Files.Count > 0) + WriteProject(ss, "Folder", solution.Guid, "Solution Files", "Solution Files", solution.Files); + } + + private void WriteEmbeddedSolution(TextWriter writer, SolutionNode embeddedSolution) + { + WriteProject(writer, "Folder", embeddedSolution.Guid, embeddedSolution.Name, embeddedSolution.Name, embeddedSolution.Files); + } + + private void WriteProject(SolutionNode solution, TextWriter ss, ProjectNode project) + { + WriteProject(ss, solution, project.Language, project.Guid, project.Name, project.FullPath); + } + + private void WriteProject(SolutionNode solution, TextWriter ss, DatabaseProjectNode dbProject) + { + if (solution.Files != null && solution.Files.Count > 0) + WriteProject(ss, solution, "Database", dbProject.Guid, dbProject.Name, dbProject.FullPath); + } + + const string ProjectDeclarationBeginFormat = "Project(\"{0}\") = \"{1}\", \"{2}\", \"{3}\""; + const string ProjectDeclarationEndFormat = "EndProject"; + + private void WriteProject(TextWriter ss, SolutionNode solution, string language, Guid guid, string name, string projectFullPath) + { + if (!tools.ContainsKey(language)) + throw new UnknownLanguageException("Unknown .NET language: " + language); + + 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(TextWriter writer, string language, Guid projectGuid, string name, string location) + { + WriteProject(writer, language, projectGuid, name, location, null); + } + + private void WriteProject(TextWriter writer, string language, Guid projectGuid, string name, string location, FilesNode files) + { + if (!tools.ContainsKey(language)) + throw new UnknownLanguageException("Unknown .NET language: " + language); + + 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 static bool ContainsSqlFiles(string folder) + { + if(Directory.GetFiles(folder, "*.sql").Length > 0) + 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 static 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 = 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", 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 new file mode 100644 index 0000000000..699b5ca019 --- /dev/null +++ b/Prebuild/src/Core/Targets/VSVersion.cs @@ -0,0 +1,54 @@ +#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 new file mode 100644 index 0000000000..5393cec05f --- /dev/null +++ b/Prebuild/src/Core/Targets/XcodeTarget.cs @@ -0,0 +1,594 @@ +#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.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 new file mode 100644 index 0000000000..607b66c022 --- /dev/null +++ b/Prebuild/src/Core/UnknownLanguageException.cs @@ -0,0 +1,63 @@ +/* + * $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/.svn/all-wcprops b/Prebuild/src/Core/Utilities/.svn/all-wcprops new file mode 100644 index 0000000000..7418c29534 --- /dev/null +++ b/Prebuild/src/Core/Utilities/.svn/all-wcprops @@ -0,0 +1,29 @@ +K 25 +svn:wc:ra_dav:version-url +V 60 +/svnroot/dnpb/!svn/ver/309/trunk/Prebuild/src/Core/Utilities +END +Helper.cs +K 25 +svn:wc:ra_dav:version-url +V 70 +/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Utilities/Helper.cs +END +Log.cs +K 25 +svn:wc:ra_dav:version-url +V 67 +/svnroot/dnpb/!svn/ver/309/trunk/Prebuild/src/Core/Utilities/Log.cs +END +CommandLineCollection.cs +K 25 +svn:wc:ra_dav:version-url +V 85 +/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Utilities/CommandLineCollection.cs +END +CurrentDirectory.cs +K 25 +svn:wc:ra_dav:version-url +V 80 +/svnroot/dnpb/!svn/ver/307/trunk/Prebuild/src/Core/Utilities/CurrentDirectory.cs +END diff --git a/Prebuild/src/Core/Utilities/.svn/dir-prop-base b/Prebuild/src/Core/Utilities/.svn/dir-prop-base new file mode 100644 index 0000000000..a1989a0b6d --- /dev/null +++ b/Prebuild/src/Core/Utilities/.svn/dir-prop-base @@ -0,0 +1,5 @@ +K 10 +svn:ignore +V 5 +*.swp +END diff --git a/Prebuild/src/Core/Utilities/.svn/entries b/Prebuild/src/Core/Utilities/.svn/entries new file mode 100644 index 0000000000..cc148d7550 --- /dev/null +++ b/Prebuild/src/Core/Utilities/.svn/entries @@ -0,0 +1,164 @@ +10 + +dir +323 +https://dnpb.svn.sourceforge.net/svnroot/dnpb/trunk/Prebuild/src/Core/Utilities +https://dnpb.svn.sourceforge.net/svnroot/dnpb + + + +2009-04-15T01:40:10.014568Z +309 +kunnis +has-props + + + + + + + + + + + + + +3355ff64-970d-0410-bbe8-d0fbd18be4fb + +Helper.cs +file + + + + +2010-09-10T22:51:44.000000Z +7a0749dec0ce5453fc73dd11f89ce613 +2009-04-15T01:28:16.827957Z +307 +kunnis +has-props + + + + + + + + + + + + + + + + + + + + +14966 + +Log.cs +file + + + + +2010-09-10T22:51:44.000000Z +d91804d20a90778d74744cd14bb2fa4c +2009-04-15T01:40:10.014568Z +309 +kunnis +has-props + + + + + + + + + + + + + + + + + + + + +6100 + +CommandLineCollection.cs +file + + + + +2010-09-10T22:51:44.000000Z +2a00bed45ea425e5e8a21a5ff6a68d69 +2009-04-15T01:28:16.827957Z +307 +kunnis +has-props + + + + + + + + + + + + + + + + + + + + +4032 + +CurrentDirectory.cs +file + + + + +2010-09-10T22:51:44.000000Z +e710723e685cc628a3761209001c8767 +2009-04-15T01:28:16.827957Z +307 +kunnis +has-props + + + + + + + + + + + + + + + + + + + + +2124 + diff --git a/Prebuild/src/Core/Utilities/.svn/prop-base/CommandLineCollection.cs.svn-base b/Prebuild/src/Core/Utilities/.svn/prop-base/CommandLineCollection.cs.svn-base new file mode 100644 index 0000000000..7b57b302a4 --- /dev/null +++ b/Prebuild/src/Core/Utilities/.svn/prop-base/CommandLineCollection.cs.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/Prebuild/src/Core/Utilities/.svn/prop-base/CurrentDirectory.cs.svn-base b/Prebuild/src/Core/Utilities/.svn/prop-base/CurrentDirectory.cs.svn-base new file mode 100644 index 0000000000..7b57b302a4 --- /dev/null +++ b/Prebuild/src/Core/Utilities/.svn/prop-base/CurrentDirectory.cs.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/Prebuild/src/Core/Utilities/.svn/prop-base/Helper.cs.svn-base b/Prebuild/src/Core/Utilities/.svn/prop-base/Helper.cs.svn-base new file mode 100644 index 0000000000..7b57b302a4 --- /dev/null +++ b/Prebuild/src/Core/Utilities/.svn/prop-base/Helper.cs.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/Prebuild/src/Core/Utilities/.svn/prop-base/Log.cs.svn-base b/Prebuild/src/Core/Utilities/.svn/prop-base/Log.cs.svn-base new file mode 100644 index 0000000000..7b57b302a4 --- /dev/null +++ b/Prebuild/src/Core/Utilities/.svn/prop-base/Log.cs.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/Prebuild/src/Core/Utilities/.svn/text-base/CommandLineCollection.cs.svn-base b/Prebuild/src/Core/Utilities/.svn/text-base/CommandLineCollection.cs.svn-base new file mode 100644 index 0000000000..786fa1e49d --- /dev/null +++ b/Prebuild/src/Core/Utilities/.svn/text-base/CommandLineCollection.cs.svn-base @@ -0,0 +1,152 @@ +#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.Collections; +using System.Collections.Generic; + +namespace Prebuild.Core.Utilities +{ + /// + /// The CommandLine class parses and interprets the command-line arguments passed to + /// prebuild. + /// + public class CommandLineCollection : IEnumerable> + { + #region Fields + + // The raw OS arguments + private readonly string[] m_RawArgs; + + // Command-line argument storage + private readonly Dictionary m_Arguments = new Dictionary(); + + #endregion + + #region Constructors + + /// + /// Create a new CommandLine instance and set some internal variables. + /// + public CommandLineCollection(string[] args) + { + m_RawArgs = args; + + Parse(); + } + + #endregion + + #region Private Methods + + private void Parse() + { + if(m_RawArgs.Length < 1) + return; + + int idx = 0; + string 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 (m_Arguments[index]); + } + 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 IEnumerator> GetEnumerator() + { + return m_Arguments.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + #endregion + } +} diff --git a/Prebuild/src/Core/Utilities/.svn/text-base/CurrentDirectory.cs.svn-base b/Prebuild/src/Core/Utilities/.svn/text-base/CurrentDirectory.cs.svn-base new file mode 100644 index 0000000000..9624c35ed5 --- /dev/null +++ b/Prebuild/src/Core/Utilities/.svn/text-base/CurrentDirectory.cs.svn-base @@ -0,0 +1,68 @@ +#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; + +namespace Prebuild.Core.Utilities +{ + /// + /// + /// + public class CurrentDirectory + { + #region Fields + + private readonly Stack 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 = m_Stack.Pop(); + Helper.SetCurrentDir(cwd); + } + + #endregion + } +} diff --git a/Prebuild/src/Core/Utilities/.svn/text-base/Helper.cs.svn-base b/Prebuild/src/Core/Utilities/.svn/text-base/Helper.cs.svn-base new file mode 100644 index 0000000000..8c3e9680c5 --- /dev/null +++ b/Prebuild/src/Core/Utilities/.svn/text-base/Helper.cs.svn-base @@ -0,0 +1,575 @@ +#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.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 + + static bool checkForOSVariables; + + /// + /// + /// + public static bool CheckForOSVariables + { + get + { + return checkForOSVariables; + } + set + { + checkForOSVariables = value; + } + } + + #endregion + + #region Public Methods + + #region String Parsing + + public delegate string StringLookup(string key); + + /// + /// 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]; + } + + /// + /// 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/.svn/text-base/Log.cs.svn-base b/Prebuild/src/Core/Utilities/.svn/text-base/Log.cs.svn-base new file mode 100644 index 0000000000..4df3defdd0 --- /dev/null +++ b/Prebuild/src/Core/Utilities/.svn/text-base/Log.cs.svn-base @@ -0,0 +1,276 @@ +#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 TextWriter 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); + } + else if ((m_Target & LogTargets.Console) != 0) + { + // Prevents null reference exceptions when outputing to the log file. + // This seems to only happen when running on a network drive. + m_Writer = Console.Out; + } + } + + #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/Utilities/CommandLineCollection.cs b/Prebuild/src/Core/Utilities/CommandLineCollection.cs new file mode 100644 index 0000000000..786fa1e49d --- /dev/null +++ b/Prebuild/src/Core/Utilities/CommandLineCollection.cs @@ -0,0 +1,152 @@ +#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.Collections; +using System.Collections.Generic; + +namespace Prebuild.Core.Utilities +{ + /// + /// The CommandLine class parses and interprets the command-line arguments passed to + /// prebuild. + /// + public class CommandLineCollection : IEnumerable> + { + #region Fields + + // The raw OS arguments + private readonly string[] m_RawArgs; + + // Command-line argument storage + private readonly Dictionary m_Arguments = new Dictionary(); + + #endregion + + #region Constructors + + /// + /// Create a new CommandLine instance and set some internal variables. + /// + public CommandLineCollection(string[] args) + { + m_RawArgs = args; + + Parse(); + } + + #endregion + + #region Private Methods + + private void Parse() + { + if(m_RawArgs.Length < 1) + return; + + int idx = 0; + string 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 (m_Arguments[index]); + } + 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 IEnumerator> GetEnumerator() + { + return m_Arguments.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + #endregion + } +} diff --git a/Prebuild/src/Core/Utilities/CurrentDirectory.cs b/Prebuild/src/Core/Utilities/CurrentDirectory.cs new file mode 100644 index 0000000000..9624c35ed5 --- /dev/null +++ b/Prebuild/src/Core/Utilities/CurrentDirectory.cs @@ -0,0 +1,68 @@ +#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; + +namespace Prebuild.Core.Utilities +{ + /// + /// + /// + public class CurrentDirectory + { + #region Fields + + private readonly Stack 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 = m_Stack.Pop(); + Helper.SetCurrentDir(cwd); + } + + #endregion + } +} diff --git a/Prebuild/src/Core/Utilities/Helper.cs b/Prebuild/src/Core/Utilities/Helper.cs new file mode 100644 index 0000000000..8c3e9680c5 --- /dev/null +++ b/Prebuild/src/Core/Utilities/Helper.cs @@ -0,0 +1,575 @@ +#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.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 + + static bool checkForOSVariables; + + /// + /// + /// + public static bool CheckForOSVariables + { + get + { + return checkForOSVariables; + } + set + { + checkForOSVariables = value; + } + } + + #endregion + + #region Public Methods + + #region String Parsing + + public delegate string StringLookup(string key); + + /// + /// 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]; + } + + /// + /// 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 new file mode 100644 index 0000000000..4df3defdd0 --- /dev/null +++ b/Prebuild/src/Core/Utilities/Log.cs @@ -0,0 +1,276 @@ +#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 TextWriter 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); + } + else if ((m_Target & LogTargets.Console) != 0) + { + // Prevents null reference exceptions when outputing to the log file. + // This seems to only happen when running on a network drive. + m_Writer = Console.Out; + } + } + + #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 new file mode 100644 index 0000000000..b7c3668cce --- /dev/null +++ b/Prebuild/src/Core/WarningException.cs @@ -0,0 +1,84 @@ +#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 new file mode 100644 index 0000000000..081c89c404 --- /dev/null +++ b/Prebuild/src/Prebuild.cs @@ -0,0 +1,165 @@ +#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: kunnis $ + * $Date: 2009-04-15 02:33:14 +0100 (Wed, 15 Apr 2009) $ + * $Revision: 308 $ + */ +#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(); + } + } +#if !DEBUG + catch (Exception ex) + { + Console.WriteLine("Unhandled error: {0}", ex.Message); + Console.WriteLine("{0}", ex.StackTrace); + } +#endif + finally + { + if(kernel != null && 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 new file mode 100644 index 0000000000000000000000000000000000000000..f9dce054ffae7c79dce7d3ba0b790904bdb36831 GIT binary patch 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/Properties/AssemblyInfo.cs b/Prebuild/src/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..f3ac30f39d --- /dev/null +++ b/Prebuild/src/Properties/AssemblyInfo.cs @@ -0,0 +1,113 @@ +#region BSD License +/* + +Copyright (c) 2004 - 2008 +Matthew Holmes (matthew@wildfiregames.com), +Dan Moorehead (dan05a@gmail.com), +Dave Hudson (jendave@yahoo.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.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Security.Permissions; +using System.Resources; + + +// FxCop recommended attributes +[assembly: ComVisible(false)] +[assembly: FileIOPermission(SecurityAction.RequestMinimum, Unrestricted=true)] +[assembly: CLSCompliant(true)] + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle(".NET Prebuild")] +[assembly: AssemblyDescription("A .NET project file build tool")] +[assembly: AssemblyConfiguration(".NET CLR")] +[assembly: AssemblyCompany("The Prebuild Project")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("Copyright 2004-2010 " + + "Matthew Holmes, " + + "Dan Moorehead, " + + "C.J. Adams-Collier, " + + "Rob Loach, " + + "David Hudson," + + "John Hurliman")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguageAttribute("en-US")] +[assembly: AssemblyVersion("2.0.5.*")] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\. 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/.svn/all-wcprops b/Prebuild/src/data/.svn/all-wcprops new file mode 100644 index 0000000000..3af3c24715 --- /dev/null +++ b/Prebuild/src/data/.svn/all-wcprops @@ -0,0 +1,71 @@ +K 25 +svn:wc:ra_dav:version-url +V 50 +/svnroot/dnpb/!svn/ver/316/trunk/Prebuild/src/data +END +dnpb-1.3.xsd +K 25 +svn:wc:ra_dav:version-url +V 62 +/svnroot/dnpb/!svn/ver/96/trunk/Prebuild/src/data/dnpb-1.3.xsd +END +dnpb-1.4.xsd +K 25 +svn:wc:ra_dav:version-url +V 62 +/svnroot/dnpb/!svn/ver/96/trunk/Prebuild/src/data/dnpb-1.4.xsd +END +dnpb-1.5.xsd +K 25 +svn:wc:ra_dav:version-url +V 62 +/svnroot/dnpb/!svn/ver/96/trunk/Prebuild/src/data/dnpb-1.5.xsd +END +prebuild-1.6.xsd +K 25 +svn:wc:ra_dav:version-url +V 66 +/svnroot/dnpb/!svn/ver/96/trunk/Prebuild/src/data/prebuild-1.6.xsd +END +prebuild-1.7.xsd +K 25 +svn:wc:ra_dav:version-url +V 67 +/svnroot/dnpb/!svn/ver/299/trunk/Prebuild/src/data/prebuild-1.7.xsd +END +prebuild-1.8.xsd +K 25 +svn:wc:ra_dav:version-url +V 67 +/svnroot/dnpb/!svn/ver/314/trunk/Prebuild/src/data/prebuild-1.8.xsd +END +autotools.xml +K 25 +svn:wc:ra_dav:version-url +V 64 +/svnroot/dnpb/!svn/ver/256/trunk/Prebuild/src/data/autotools.xml +END +prebuild-1.9.xsd +K 25 +svn:wc:ra_dav:version-url +V 67 +/svnroot/dnpb/!svn/ver/316/trunk/Prebuild/src/data/prebuild-1.9.xsd +END +dnpb-1.0.xsd +K 25 +svn:wc:ra_dav:version-url +V 62 +/svnroot/dnpb/!svn/ver/96/trunk/Prebuild/src/data/dnpb-1.0.xsd +END +dnpb-1.1.xsd +K 25 +svn:wc:ra_dav:version-url +V 62 +/svnroot/dnpb/!svn/ver/96/trunk/Prebuild/src/data/dnpb-1.1.xsd +END +dnpb-1.2.xsd +K 25 +svn:wc:ra_dav:version-url +V 62 +/svnroot/dnpb/!svn/ver/96/trunk/Prebuild/src/data/dnpb-1.2.xsd +END diff --git a/Prebuild/src/data/.svn/dir-prop-base b/Prebuild/src/data/.svn/dir-prop-base new file mode 100644 index 0000000000..29ffe333a0 --- /dev/null +++ b/Prebuild/src/data/.svn/dir-prop-base @@ -0,0 +1,6 @@ +K 10 +svn:ignore +V 11 +*.swp +*.xsx +END diff --git a/Prebuild/src/data/.svn/entries b/Prebuild/src/data/.svn/entries new file mode 100644 index 0000000000..935b447cff --- /dev/null +++ b/Prebuild/src/data/.svn/entries @@ -0,0 +1,402 @@ +10 + +dir +323 +https://dnpb.svn.sourceforge.net/svnroot/dnpb/trunk/Prebuild/src/data +https://dnpb.svn.sourceforge.net/svnroot/dnpb + + + +2010-05-08T05:43:01.449559Z +316 +jhurliman +has-props + + + + + + + + + + + + + +3355ff64-970d-0410-bbe8-d0fbd18be4fb + +dnpb-1.3.xsd +file + + + + +2010-09-10T22:51:45.000000Z +636ed9edea90e5104ad1879c96552b91 +2004-12-29T02:08:06.000000Z +35 +xeonx +has-props + + + + + + + + + + + + + + + + + + + + +7995 + +dnpb-1.4.xsd +file + + + + +2010-09-10T22:51:45.000000Z +3e883fc616c786e3835ba3386ede4269 +2005-12-23T06:05:38.000000Z +39 +jendave +has-props + + + + + + + + + + + + + + + + + + + + +8197 + +dnpb-1.5.xsd +file + + + + +2010-09-10T22:51:45.000000Z +c692bbcd63f10ca4c93da1c19f5b107e +2006-01-23T23:19:16.000000Z +55 +jendave +has-props + + + + + + + + + + + + + + + + + + + + +8420 + +prebuild-1.6.xsd +file + + + + +2010-09-10T22:51:45.000000Z +61f6e6f13f64ae842b1324cf145934ad +2006-02-28T18:13:10.884431Z +95 +jendave +has-props + + + + + + + + + + + + + + + + + + + + +9770 + +prebuild-1.7.xsd +file + + + + +2010-09-10T22:51:45.000000Z +edf1193fad8922061845cf48cc8eb851 +2009-02-21T05:36:29.327384Z +299 +kunnis + + + + + + + + + + + + + + + + + + + + + +16083 + +prebuild-1.8.xsd +file + + + + +2010-09-10T22:51:45.000000Z +6eb078509319faa7ae4cdc55af184ac1 +2009-06-06T19:43:44.493200Z +314 +dmoonfire + + + + + + + + + + + + + + + + + + + + + +15296 + +autotools.xml +file + + + + +2010-09-10T22:51:45.000000Z +e119a174539f100e18d2ee73c5660318 +2008-02-07T16:31:29.630257Z +256 +cjcollier + + + + + + + + + + + + + + + + + + + + + +27653 + +prebuild-1.9.xsd +file + + + + +2010-09-10T22:51:45.000000Z +8988b0f7fc4462d76183a4c0b72121e9 +2010-05-08T05:43:01.449559Z +316 +jhurliman + + + + + + + + + + + + + + + + + + + + + +14622 + +dnpb-1.0.xsd +file + + + + +2010-09-10T22:51:45.000000Z +080c1e8ce73ec5aff528c2a62b355c38 +2004-04-19T07:06:45.000000Z +17 +calefaction +has-props + + + + + + + + + + + + + + + + + + + + +6878 + +dnpb-1.1.xsd +file + + + + +2010-09-10T22:51:45.000000Z +b00a1d973849b76554afb17f8a21978c +2004-04-22T00:51:14.000000Z +18 +calefaction +has-props + + + + + + + + + + + + + + + + + + + + +6883 + +dnpb-1.2.xsd +file + + + + +2010-09-10T22:51:45.000000Z +7ebd6286a2df12ef5e21e835342b1daa +2004-09-15T19:40:37.000000Z +29 +calefaction +has-props + + + + + + + + + + + + + + + + + + + + +7639 + diff --git a/Prebuild/src/data/.svn/prop-base/dnpb-1.0.xsd.svn-base b/Prebuild/src/data/.svn/prop-base/dnpb-1.0.xsd.svn-base new file mode 100644 index 0000000000..7b57b302a4 --- /dev/null +++ b/Prebuild/src/data/.svn/prop-base/dnpb-1.0.xsd.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/Prebuild/src/data/.svn/prop-base/dnpb-1.1.xsd.svn-base b/Prebuild/src/data/.svn/prop-base/dnpb-1.1.xsd.svn-base new file mode 100644 index 0000000000..7b57b302a4 --- /dev/null +++ b/Prebuild/src/data/.svn/prop-base/dnpb-1.1.xsd.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/Prebuild/src/data/.svn/prop-base/dnpb-1.2.xsd.svn-base b/Prebuild/src/data/.svn/prop-base/dnpb-1.2.xsd.svn-base new file mode 100644 index 0000000000..7b57b302a4 --- /dev/null +++ b/Prebuild/src/data/.svn/prop-base/dnpb-1.2.xsd.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/Prebuild/src/data/.svn/prop-base/dnpb-1.3.xsd.svn-base b/Prebuild/src/data/.svn/prop-base/dnpb-1.3.xsd.svn-base new file mode 100644 index 0000000000..7b57b302a4 --- /dev/null +++ b/Prebuild/src/data/.svn/prop-base/dnpb-1.3.xsd.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/Prebuild/src/data/.svn/prop-base/dnpb-1.4.xsd.svn-base b/Prebuild/src/data/.svn/prop-base/dnpb-1.4.xsd.svn-base new file mode 100644 index 0000000000..7b57b302a4 --- /dev/null +++ b/Prebuild/src/data/.svn/prop-base/dnpb-1.4.xsd.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/Prebuild/src/data/.svn/prop-base/dnpb-1.5.xsd.svn-base b/Prebuild/src/data/.svn/prop-base/dnpb-1.5.xsd.svn-base new file mode 100644 index 0000000000..7b57b302a4 --- /dev/null +++ b/Prebuild/src/data/.svn/prop-base/dnpb-1.5.xsd.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/Prebuild/src/data/.svn/prop-base/prebuild-1.6.xsd.svn-base b/Prebuild/src/data/.svn/prop-base/prebuild-1.6.xsd.svn-base new file mode 100644 index 0000000000..7b57b302a4 --- /dev/null +++ b/Prebuild/src/data/.svn/prop-base/prebuild-1.6.xsd.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/Prebuild/src/data/.svn/text-base/autotools.xml.svn-base b/Prebuild/src/data/.svn/text-base/autotools.xml.svn-base new file mode 100644 index 0000000000..ee4b0643dc --- /dev/null +++ b/Prebuild/src/data/.svn/text-base/autotools.xml.svn-base @@ -0,0 +1,790 @@ + + + + + #!/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/.svn/text-base/dnpb-1.0.xsd.svn-base b/Prebuild/src/data/.svn/text-base/dnpb-1.0.xsd.svn-base new file mode 100644 index 0000000000..b9e0e4eaf5 --- /dev/null +++ b/Prebuild/src/data/.svn/text-base/dnpb-1.0.xsd.svn-base @@ -0,0 +1,183 @@ + + + + + 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/.svn/text-base/dnpb-1.1.xsd.svn-base b/Prebuild/src/data/.svn/text-base/dnpb-1.1.xsd.svn-base new file mode 100644 index 0000000000..2c065a3297 --- /dev/null +++ b/Prebuild/src/data/.svn/text-base/dnpb-1.1.xsd.svn-base @@ -0,0 +1,184 @@ + + + + + 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/.svn/text-base/dnpb-1.2.xsd.svn-base b/Prebuild/src/data/.svn/text-base/dnpb-1.2.xsd.svn-base new file mode 100644 index 0000000000..d694ab43d7 --- /dev/null +++ b/Prebuild/src/data/.svn/text-base/dnpb-1.2.xsd.svn-base @@ -0,0 +1,198 @@ + + + + + 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/.svn/text-base/dnpb-1.3.xsd.svn-base b/Prebuild/src/data/.svn/text-base/dnpb-1.3.xsd.svn-base new file mode 100644 index 0000000000..8f31a544ab --- /dev/null +++ b/Prebuild/src/data/.svn/text-base/dnpb-1.3.xsd.svn-base @@ -0,0 +1,206 @@ + + + + + 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/.svn/text-base/dnpb-1.4.xsd.svn-base b/Prebuild/src/data/.svn/text-base/dnpb-1.4.xsd.svn-base new file mode 100644 index 0000000000..1da50fcc7a --- /dev/null +++ b/Prebuild/src/data/.svn/text-base/dnpb-1.4.xsd.svn-base @@ -0,0 +1,212 @@ + + + + + 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/.svn/text-base/dnpb-1.5.xsd.svn-base b/Prebuild/src/data/.svn/text-base/dnpb-1.5.xsd.svn-base new file mode 100644 index 0000000000..e2b21f0c69 --- /dev/null +++ b/Prebuild/src/data/.svn/text-base/dnpb-1.5.xsd.svn-base @@ -0,0 +1,215 @@ + + + + + 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/.svn/text-base/prebuild-1.6.xsd.svn-base b/Prebuild/src/data/.svn/text-base/prebuild-1.6.xsd.svn-base new file mode 100644 index 0000000000..57ebd2eb9d --- /dev/null +++ b/Prebuild/src/data/.svn/text-base/prebuild-1.6.xsd.svn-base @@ -0,0 +1,231 @@ + + + + + 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/.svn/text-base/prebuild-1.7.xsd.svn-base b/Prebuild/src/data/.svn/text-base/prebuild-1.7.xsd.svn-base new file mode 100644 index 0000000000..a7f5c88d09 --- /dev/null +++ b/Prebuild/src/data/.svn/text-base/prebuild-1.7.xsd.svn-base @@ -0,0 +1,350 @@ + + + + + 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/src/data/.svn/text-base/prebuild-1.8.xsd.svn-base b/Prebuild/src/data/.svn/text-base/prebuild-1.8.xsd.svn-base new file mode 100644 index 0000000000..8f5c1a4566 --- /dev/null +++ b/Prebuild/src/data/.svn/text-base/prebuild-1.8.xsd.svn-base @@ -0,0 +1,331 @@ + + + + + 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/src/data/.svn/text-base/prebuild-1.9.xsd.svn-base b/Prebuild/src/data/.svn/text-base/prebuild-1.9.xsd.svn-base new file mode 100644 index 0000000000..d647e087ae --- /dev/null +++ b/Prebuild/src/data/.svn/text-base/prebuild-1.9.xsd.svn-base @@ -0,0 +1,336 @@ + + + + + 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/src/data/autotools.xml b/Prebuild/src/data/autotools.xml new file mode 100644 index 0000000000..ee4b0643dc --- /dev/null +++ b/Prebuild/src/data/autotools.xml @@ -0,0 +1,790 @@ + + + + + #!/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 new file mode 100644 index 0000000000..b9e0e4eaf5 --- /dev/null +++ b/Prebuild/src/data/dnpb-1.0.xsd @@ -0,0 +1,183 @@ + + + + + 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 new file mode 100644 index 0000000000..2c065a3297 --- /dev/null +++ b/Prebuild/src/data/dnpb-1.1.xsd @@ -0,0 +1,184 @@ + + + + + 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 new file mode 100644 index 0000000000..d694ab43d7 --- /dev/null +++ b/Prebuild/src/data/dnpb-1.2.xsd @@ -0,0 +1,198 @@ + + + + + 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 new file mode 100644 index 0000000000..8f31a544ab --- /dev/null +++ b/Prebuild/src/data/dnpb-1.3.xsd @@ -0,0 +1,206 @@ + + + + + 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 new file mode 100644 index 0000000000..1da50fcc7a --- /dev/null +++ b/Prebuild/src/data/dnpb-1.4.xsd @@ -0,0 +1,212 @@ + + + + + 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 new file mode 100644 index 0000000000..e2b21f0c69 --- /dev/null +++ b/Prebuild/src/data/dnpb-1.5.xsd @@ -0,0 +1,215 @@ + + + + + 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 new file mode 100644 index 0000000000..57ebd2eb9d --- /dev/null +++ b/Prebuild/src/data/prebuild-1.6.xsd @@ -0,0 +1,231 @@ + + + + + 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 new file mode 100644 index 0000000000..a7f5c88d09 --- /dev/null +++ b/Prebuild/src/data/prebuild-1.7.xsd @@ -0,0 +1,350 @@ + + + + + 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/src/data/prebuild-1.8.xsd b/Prebuild/src/data/prebuild-1.8.xsd new file mode 100644 index 0000000000..8f5c1a4566 --- /dev/null +++ b/Prebuild/src/data/prebuild-1.8.xsd @@ -0,0 +1,331 @@ + + + + + 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/src/data/prebuild-1.9.xsd b/Prebuild/src/data/prebuild-1.9.xsd new file mode 100644 index 0000000000..d647e087ae --- /dev/null +++ b/Prebuild/src/data/prebuild-1.9.xsd @@ -0,0 +1,336 @@ + + + + + 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/.svn/all-wcprops b/Prebuild/tests/.svn/all-wcprops new file mode 100644 index 0000000000..0668acba54 --- /dev/null +++ b/Prebuild/tests/.svn/all-wcprops @@ -0,0 +1,59 @@ +K 25 +svn:wc:ra_dav:version-url +V 47 +/svnroot/dnpb/!svn/ver/280/trunk/Prebuild/tests +END +include-001.expected +K 25 +svn:wc:ra_dav:version-url +V 68 +/svnroot/dnpb/!svn/ver/279/trunk/Prebuild/tests/include-001.expected +END +include-002.expected +K 25 +svn:wc:ra_dav:version-url +V 68 +/svnroot/dnpb/!svn/ver/280/trunk/Prebuild/tests/include-002.expected +END +include-001.include +K 25 +svn:wc:ra_dav:version-url +V 67 +/svnroot/dnpb/!svn/ver/279/trunk/Prebuild/tests/include-001.include +END +include-002-2.include +K 25 +svn:wc:ra_dav:version-url +V 69 +/svnroot/dnpb/!svn/ver/280/trunk/Prebuild/tests/include-002-2.include +END +include-002.include +K 25 +svn:wc:ra_dav:version-url +V 67 +/svnroot/dnpb/!svn/ver/280/trunk/Prebuild/tests/include-002.include +END +include-001.prebuild +K 25 +svn:wc:ra_dav:version-url +V 68 +/svnroot/dnpb/!svn/ver/279/trunk/Prebuild/tests/include-001.prebuild +END +include-002.prebuild +K 25 +svn:wc:ra_dav:version-url +V 68 +/svnroot/dnpb/!svn/ver/280/trunk/Prebuild/tests/include-002.prebuild +END +README.txt +K 25 +svn:wc:ra_dav:version-url +V 58 +/svnroot/dnpb/!svn/ver/279/trunk/Prebuild/tests/README.txt +END +Makefile +K 25 +svn:wc:ra_dav:version-url +V 56 +/svnroot/dnpb/!svn/ver/279/trunk/Prebuild/tests/Makefile +END diff --git a/Prebuild/tests/.svn/entries b/Prebuild/tests/.svn/entries new file mode 100644 index 0000000000..2a70cf9a67 --- /dev/null +++ b/Prebuild/tests/.svn/entries @@ -0,0 +1,334 @@ +10 + +dir +323 +https://dnpb.svn.sourceforge.net/svnroot/dnpb/trunk/Prebuild/tests +https://dnpb.svn.sourceforge.net/svnroot/dnpb + + + +2008-12-10T02:26:03.443834Z +280 +dmoonfire + + + + + + + + + + + + + + +3355ff64-970d-0410-bbe8-d0fbd18be4fb + +include-001.expected +file + + + + +2010-09-10T22:51:45.000000Z +d65010a81975867917d4468950ec7ccc +2008-12-10T02:04:22.474237Z +279 +dmoonfire + + + + + + + + + + + + + + + + + + + + + +1784 + +include-002.expected +file + + + + +2010-09-10T22:51:45.000000Z +dcef68172b57f9e1b2228f1dba535934 +2008-12-10T02:26:03.443834Z +280 +dmoonfire + + + + + + + + + + + + + + + + + + + + + +1150 + +include-001.include +file + + + + +2010-09-10T22:51:45.000000Z +92601282deffe7c461f80b407525446d +2008-12-10T02:04:22.474237Z +279 +dmoonfire + + + + + + + + + + + + + + + + + + + + + +983 + +include-002-2.include +file + + + + +2010-09-10T22:51:45.000000Z +d9f24dc85d95d7310516187910433c8c +2008-12-10T02:26:03.443834Z +280 +dmoonfire + + + + + + + + + + + + + + + + + + + + + +307 + +include-002.include +file + + + + +2010-09-10T22:51:45.000000Z +44815ffa6c2dc32d4df9977b5fe49ca4 +2008-12-10T02:26:03.443834Z +280 +dmoonfire + + + + + + + + + + + + + + + + + + + + + +332 + +include-001.prebuild +file + + + + +2010-09-10T22:51:45.000000Z +d01a5391189ada3dcd7d3becf254f151 +2008-12-10T02:04:22.474237Z +279 +dmoonfire + + + + + + + + + + + + + + + + + + + + + +742 + +include-002.prebuild +file + + + + +2010-09-10T22:51:45.000000Z +22ad11b07dd489b41ec998e03c83a397 +2008-12-10T02:26:03.443834Z +280 +dmoonfire + + + + + + + + + + + + + + + + + + + + + +289 + +README.txt +file + + + + +2010-09-10T22:51:45.000000Z +6b111c08a76e929cb94b77c99774ef78 +2008-12-10T02:04:22.474237Z +279 +dmoonfire + + + + + + + + + + + + + + + + + + + + + +326 + +Makefile +file + + + + +2010-09-10T22:51:45.000000Z +eed6712c3f5e4478d92137f6657aba56 +2008-12-10T02:04:22.474237Z +279 +dmoonfire + + + + + + + + + + + + + + + + + + + + + +456 + diff --git a/Prebuild/tests/.svn/text-base/Makefile.svn-base b/Prebuild/tests/.svn/text-base/Makefile.svn-base new file mode 100644 index 0000000000..4a8ddf459d --- /dev/null +++ b/Prebuild/tests/.svn/text-base/Makefile.svn-base @@ -0,0 +1,24 @@ +# +# 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/.svn/text-base/README.txt.svn-base b/Prebuild/tests/.svn/text-base/README.txt.svn-base new file mode 100644 index 0000000000..2c2de3bc50 --- /dev/null +++ b/Prebuild/tests/.svn/text-base/README.txt.svn-base @@ -0,0 +1,5 @@ +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/.svn/text-base/include-001.expected.svn-base b/Prebuild/tests/.svn/text-base/include-001.expected.svn-base new file mode 100644 index 0000000000..26374b5bc7 --- /dev/null +++ b/Prebuild/tests/.svn/text-base/include-001.expected.svn-base @@ -0,0 +1,46 @@ + + + + + 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/.svn/text-base/include-001.include.svn-base b/Prebuild/tests/.svn/text-base/include-001.include.svn-base new file mode 100644 index 0000000000..7f75962a7a --- /dev/null +++ b/Prebuild/tests/.svn/text-base/include-001.include.svn-base @@ -0,0 +1,33 @@ + + + + DEBUG;TRACE + false + bin/Debug + true + Prebuild.snk + 1595 + + + + + TRACE + bin/Release + true + false + Prebuild.snk + 1595 + + + + + + + diff --git a/Prebuild/tests/.svn/text-base/include-001.prebuild.svn-base b/Prebuild/tests/.svn/text-base/include-001.prebuild.svn-base new file mode 100644 index 0000000000..8047008951 --- /dev/null +++ b/Prebuild/tests/.svn/text-base/include-001.prebuild.svn-base @@ -0,0 +1,22 @@ + + + + + + DEBUG;TRACE + false + bin/Debug + true + + + + + TRACE + bin/Release + true + false + + + + + diff --git a/Prebuild/tests/.svn/text-base/include-002-2.include.svn-base b/Prebuild/tests/.svn/text-base/include-002-2.include.svn-base new file mode 100644 index 0000000000..661b7f3b06 --- /dev/null +++ b/Prebuild/tests/.svn/text-base/include-002-2.include.svn-base @@ -0,0 +1,8 @@ + + + DEBUG;TRACE + false + bin/Debug + true + + diff --git a/Prebuild/tests/.svn/text-base/include-002.expected.svn-base b/Prebuild/tests/.svn/text-base/include-002.expected.svn-base new file mode 100644 index 0000000000..9849658b1e --- /dev/null +++ b/Prebuild/tests/.svn/text-base/include-002.expected.svn-base @@ -0,0 +1,26 @@ + + + + + DEBUG;TRACE + false + bin/Debug + true + + + + + + DEBUG;TRACE + false + bin/Debug + true + + + + + + + + + diff --git a/Prebuild/tests/.svn/text-base/include-002.include.svn-base b/Prebuild/tests/.svn/text-base/include-002.include.svn-base new file mode 100644 index 0000000000..64f4058dc0 --- /dev/null +++ b/Prebuild/tests/.svn/text-base/include-002.include.svn-base @@ -0,0 +1,14 @@ + + + + + + + diff --git a/Prebuild/tests/.svn/text-base/include-002.prebuild.svn-base b/Prebuild/tests/.svn/text-base/include-002.prebuild.svn-base new file mode 100644 index 0000000000..9e85f20f54 --- /dev/null +++ b/Prebuild/tests/.svn/text-base/include-002.prebuild.svn-base @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Prebuild/tests/Makefile b/Prebuild/tests/Makefile new file mode 100644 index 0000000000..4a8ddf459d --- /dev/null +++ b/Prebuild/tests/Makefile @@ -0,0 +1,24 @@ +# +# 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 new file mode 100644 index 0000000000..2c2de3bc50 --- /dev/null +++ b/Prebuild/tests/README.txt @@ -0,0 +1,5 @@ +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 new file mode 100644 index 0000000000..26374b5bc7 --- /dev/null +++ b/Prebuild/tests/include-001.expected @@ -0,0 +1,46 @@ + + + + + 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 new file mode 100644 index 0000000000..7f75962a7a --- /dev/null +++ b/Prebuild/tests/include-001.include @@ -0,0 +1,33 @@ + + + + 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 new file mode 100644 index 0000000000..8047008951 --- /dev/null +++ b/Prebuild/tests/include-001.prebuild @@ -0,0 +1,22 @@ + + + + + + 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 new file mode 100644 index 0000000000..661b7f3b06 --- /dev/null +++ b/Prebuild/tests/include-002-2.include @@ -0,0 +1,8 @@ + + + DEBUG;TRACE + false + bin/Debug + true + + diff --git a/Prebuild/tests/include-002.expected b/Prebuild/tests/include-002.expected new file mode 100644 index 0000000000..9849658b1e --- /dev/null +++ b/Prebuild/tests/include-002.expected @@ -0,0 +1,26 @@ + + + + + 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 new file mode 100644 index 0000000000..64f4058dc0 --- /dev/null +++ b/Prebuild/tests/include-002.include @@ -0,0 +1,14 @@ + + + + + + + diff --git a/Prebuild/tests/include-002.prebuild b/Prebuild/tests/include-002.prebuild new file mode 100644 index 0000000000..9e85f20f54 --- /dev/null +++ b/Prebuild/tests/include-002.prebuild @@ -0,0 +1,7 @@ + + + + + + + diff --git a/bin/Prebuild.exe b/bin/Prebuild.exe index ad84b98edf60ebbf4fec7fec73c36ebc14c07071..d79227c6da38b67408fee08669bbe96f6dd73aff 100755 GIT binary patch delta 74855 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 z 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 delta 74617 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