case "/publicsign":
return true;
-
+
+ case "/deterministic":
+ return true;
+
+ case "/runtimemetadataversion":
+ return true;
+
case "/-getresourcestrings":
return true;
}
public VsCsproj Csproj;
+ void AppendResource (StringBuilder resources, string source, string logical)
+ {
+ resources.AppendFormat (" <EmbeddedResource Include=\"{0}\">" + NewLine, source);
+ resources.AppendFormat (" <LogicalName>{0}</LogicalName>" + NewLine, logical);
+ resources.AppendFormat (" </EmbeddedResource>" + NewLine);
+ }
+
public VsCsproj Generate (string library_output, Dictionary<string,MsbuildGenerator> projects, bool showWarnings = false)
{
var generatedProjFile = NativeName (Csproj.csProjFilename);
//Console.WriteLine ("Generating: {0}", generatedProjFile);
- string boot, flags, output_name, built_sources, response, profile;
+ string boot, flags, output_name, built_sources, response, profile, reskey;
boot = xproject.Element ("boot").Value;
flags = xproject.Element ("flags").Value;
Target = Target.Exe;
built_sources = xproject.Element ("built_sources").Value;
response = xproject.Element ("response").Value;
+ reskey = xproject.Element ("resources").Value;
profile = xproject.Element ("profile").Value;
if (string.IsNullOrEmpty (response)) {
var refs = new StringBuilder ();
- bool is_test = response.Contains ("_test_");
- if (is_test) {
- // F:\src\mono\mcs\class\lib\net_2_0\nunit.framework.dll
- // F:\src\mono\mcs\class\SomeProject\SomeProject_test_-net_2_0.csproj
- var nunitLibPath = string.Format (@"..\lib\{0}\nunit.framework.dll", profile);
- refs.Append (string.Format (" <Reference Include=\"{0}\" />" + NewLine, nunitLibPath));
+ if (response.Contains ("_test")) {
+ refs.Append ($@" <Reference Include=""..\lib\{profile}\nunitlite.dll"" />{NewLine}");
}
+ //
+ // Generate resource referenced from the command line
+ //
var resources = new StringBuilder ();
if (embedded_resources.Count > 0) {
- resources.AppendFormat (" <ItemGroup>" + NewLine);
foreach (var dk in embedded_resources) {
var source = dk.Key;
if (source.EndsWith (".resources"))
source = source.Replace (".resources", ".resx");
- resources.AppendFormat (" <EmbeddedResource Include=\"{0}\">" + NewLine, source);
- resources.AppendFormat (" <LogicalName>{0}</LogicalName>" + NewLine, dk.Value);
- resources.AppendFormat (" </EmbeddedResource>" + NewLine);
+
+ // try to find a pre-built resource, and use that instead of trying to build it
+ if (source.EndsWith (".resx")) {
+ var probe_prebuilt = Path.Combine (base_dir, source.Replace (".resx", ".resources.prebuilt"));
+ if (File.Exists (probe_prebuilt)) {
+
+ source = GetRelativePath (base_dir + "/", probe_prebuilt);
+ }
+ }
+ AppendResource (resources, source, dk.Value);
}
+ }
+ //
+ // Generate resources that were part of the explicit <resource> node
+ //
+ if (reskey != null && reskey != ""){
+ var pairs = reskey.Split (' ', '\n', '\t');
+ foreach (var pair in pairs){
+ var p = pair.IndexOf (",");
+ if (p == -1){
+ Console.Error.WriteLine ($"Found a resource without a filename: {pairs} for {Csproj.csProjFilename}");
+ Environment.Exit (1);
+ }
+ AppendResource (resources, pair.Substring (p+1), pair.Substring (0, p) + ".resources");
+ }
+ }
+ if (resources.Length > 0){
+ resources.Insert (0, " <ItemGroup>" + NewLine);
resources.AppendFormat (" </ItemGroup>" + NewLine);
}
-
if (references.Count > 0 || reference_aliases.Count > 0) {
// -r:mscorlib.dll -r:System.dll
else
build_output_dir = "bin\\Debug\\" + library;
+ if (build_output_dir.Contains ("-linux") || build_output_dir.Contains ("-darwin") || build_output_dir.Contains ("-win32"))
+ build_output_dir = build_output_dir
+ .Replace ("-linux", "-$(HostPlatform)")
+ .Replace ("-darwin", "-$(HostPlatform)")
+ .Replace ("-win32", "-$(HostPlatform)");
+
bool basic_or_build = (library.Contains ("-basic") || library.Contains ("-build"));
//
string strongNameSection = "";
if (StrongNameKeyFile != null){
strongNameSection = String.Format (
- " <PropertyGroup>" + NewLine +
" <SignAssembly>true</SignAssembly>" + NewLine +
"{1}" +
- " </PropertyGroup>" + NewLine +
- " <PropertyGroup>" + NewLine +
- " <AssemblyOriginatorKeyFile>{0}</AssemblyOriginatorKeyFile>" + NewLine +
- " </PropertyGroup>", StrongNameKeyFile, StrongNameDelaySign ? " <DelaySign>true</DelaySign>" + NewLine : "");
+ " <AssemblyOriginatorKeyFile>{0}</AssemblyOriginatorKeyFile>",
+ StrongNameKeyFile, StrongNameDelaySign ? " <DelaySign>true</DelaySign>" + NewLine : "");
}
Csproj.output = template.
Replace ("@OUTPUTTYPE@", Target == Target.Library ? "Library" : "Exe").
int q = library.IndexOf ("-");
if (q != -1)
target = target + Load (library.Substring (0, q) + suffix);
-
+
if (target.IndexOf ("@MONO@") != -1){
target_unix = target.Replace ("@MONO@", "mono").Replace ("@CAT@", "cat");
target_windows = target.Replace ("@MONO@", "").Replace ("@CAT@", "type");
target_unix = target.Replace ("jay.exe", "jay");
target_windows = target;
}
+ target_unix = target_unix.Replace ("@COPY@", "cp");
+ target_windows = target_unix.Replace ("@COPY@", "copy");
+
+ target_unix = target_unix.Replace ("\r", "");
const string condition_unix = "Condition=\" '$(OS)' != 'Windows_NT' \"";
const string condition_windows = "Condition=\" '$(OS)' == 'Windows_NT' \"";
var result =
public class Driver {
- static IEnumerable<XElement> GetProjects (bool full = false)
+ static IEnumerable<XElement> GetProjects (bool withTests = false)
{
XDocument doc = XDocument.Load ("order.xml");
foreach (XElement project in doc.Root.Elements ()) {
//
if (!(dir.StartsWith ("class") || dir.StartsWith ("mcs") || dir.StartsWith ("basic")))
continue;
-
- if (full){
- if (!library.Contains ("tests"))
- yield return project;
- continue;
- }
#endif
//
// Do not do 2.1, it is not working yet
if (dir.Contains ("nunit20"))
continue;
-#if true
- if (profile != "net_4_x" || library.Contains ("tests"))
+ if (library.Contains ("tests") && !withTests)
continue;
-#endif
- //Console.WriteLine ("Going to handle {0}", library);
+
+ if (profile != "net_4_x")
+ continue;
+
yield return project;
}
}
if (args.Length == 1 && args [0].ToLower ().Contains ("-h")) {
Console.WriteLine ("Usage:");
- Console.WriteLine ("genproj.exe [visual_studio_release] [output_full_solutions]");
+ Console.WriteLine ("genproj.exe [visual_studio_release] [output_full_solutions] [with_tests]");
Console.WriteLine ("If output_full_solutions is false, only the main System*.dll");
Console.WriteLine (" assemblies (and dependencies) is included in the solution.");
Console.WriteLine ("Example:");
- Console.WriteLine ("genproj.exe 2012 false");
- Console.WriteLine ("genproj.exe with no arguments is equivalent to 'genproj.exe 2012 true'\n\n");
+ Console.WriteLine ("genproj.exe 2012 false false");
+ Console.WriteLine ("genproj.exe with no arguments is equivalent to 'genproj.exe 2012 true false'\n\n");
Console.WriteLine ("genproj.exe deps");
Console.WriteLine ("Generates a Makefile dependency file from the projects input");
Environment.Exit (0);
var slnVersion = (args.Length > 0) ? args [0] : "2012";
bool fullSolutions = (args.Length > 1) ? bool.Parse (args [1]) : true;
+ bool withTests = (args.Length > 2) ? bool.Parse (args [2]) : false;
// To generate makefile depenedencies
var makefileDeps = (args.Length > 0 && args [0] == "deps");
var projects = new Dictionary<string,MsbuildGenerator> ();
var duplicates = new List<string> ();
- foreach (var project in GetProjects (makefileDeps)) {
+ foreach (var project in GetProjects (withTests)) {
var library_output = project.Element ("library_output").Value;
projects [library_output] = new MsbuildGenerator (project);
}
- foreach (var project in GetProjects (makefileDeps)){
+ foreach (var project in GetProjects (withTests)){
var library_output = project.Element ("library_output").Value;
//Console.WriteLine ("=== {0} ===", library_output);
var gen = projects [library_output];