[nem-en] fix to MSBuildTask.n

Kamil Skalski kamil.skalski at gmail.com
Mon Jan 16 20:00:41 CET 2006


06-01-15, NoiseEHC <NoiseEHC at freemail.hu> napisał(a):
> Hmmm, sohehow I could not send it 2 times...

Hm, but we received your very first mail. I already applied your
changes, is there something more? (and it would be must better to send
a patch in such a situation)

>
>
> This change is needed to get normal error reporting in VS.
>
> I have changed to report full paths.
>
> ps:
> I do not know how to make a patch diff... :)
>
>
>
>
>
> /*
>  * Copyright (c) 2005 Kamil Skalski <nazgul at nemerle.org>
>  * Copyright (c) 2005 The University of Wroclaw.
>  * 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 name of the University may not be used to endorse or promote
>  *       products derived from this software without specific prior
>  *       written permission.
>  *
>  * THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY ``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 UNIVERSITY 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.
>  */
>
>
> using System;
> using System.IO;
> using System.Collections;
> using System.Reflection;
>
> using Microsoft.Build.Framework;
> using Microsoft.Build.Tasks;
> using Microsoft.Build.Utilities;
>
> using Nemerle.Utility;
>
> namespace Nemerle.Tools.MSBuildTask
> {
>   public class Ncc : ManagedCompiler
>   {
>     protected override ToolName : string
>     {
>       get { "ncc.exe"; }
>     }
>
>     protected override GenerateFullPathToTool () : string {
>       def my_file = typeof(Ncc).Assembly.Location;
>       def ncc_file = Path.Combine (Path.GetDirectoryName(my_file), ToolName);
>       ncc_file
>     }
>
>     protected override AddResponseFileCommands(commandLine : CommandLineBuilderExtension) : void
>     {
>       commandLine.AppendSwitch ("/no-color");
>       commandLine.AppendSwitchIfNotNull("/lib:", base.AdditionalLibPaths, ",");
>       commandLine.AppendSwitchIfNotNull("/nowarn:", this.DisabledWarnings, ",");
>       when (NoStandardLib)
>         commandLine.AppendSwitch("/nostdlib");
>       when (WarningLevel != 4)
>         commandLine.AppendSwitchIfNotNull("/warn:", WarningLevel.ToString());
>       commandLine.AppendSwitchIfNotNull("/doc:", this.DocumentationFile);
>       commandLine.AppendSwitchUnquotedIfNotNull("/define:", base.DefineConstants);
>
>       Bag ["Optimize"] = null; // prevent standard handling by ManagedCompiler
>
>       base.AddResponseFileCommands(commandLine);
>
>       when (base.ResponseFiles != null)
>       {
>         def items = base.ResponseFiles;
>         foreach (it in items)
>           commandLine.AppendSwitchIfNotNull("/fromfile:", it.ItemSpec);
>       }
>
>       when (base.References != null)
>       {
>         def items = base.References;
>         foreach (it in items)
>           commandLine.AppendSwitchIfNotNull("/ref:", it.ItemSpec);
>       }
>
>     }
>
>     protected override LogEventsFromTextOutput(singleLine : string, messageImportance : MessageImportance) : void
>     {
>       def get_location (before) {
>         def str = singleLine.Substring (0, singleLine.IndexOf (before));
>         if (string.IsNullOrEmpty (str)) (null, 0,0,0,0)
>         else {
>           def parts = Nemerle.Collections.List.FromArray (str.Split (':'));
>           match (parts) {
>             | [file, _] => (Path.GetFullPath(file), 0, 0, 0, 0)
>             | [file, line, col, _] => (Path.GetFullPath(file), int.Parse (line), int.Parse (col), int.Parse (line), int.Parse (col))
>             | [file, line1, col1, line2, col2, _] => (Path.GetFullPath(file), int.Parse (line1), int.Parse (col1), int.Parse (line2), int.Parse (col2))
>             | _ => (null, 0,0,0,0)
>           }
>         }
>       }
>
>       if (singleLine.IndexOf ("error:") != -1) {
>         def (file, l1, c1, l2, c2) = get_location ("error:");
>         Log.LogError (null, null, null, file, l1, c1, l2, c2, singleLine.Substring (singleLine.IndexOf ("error:") + 7));
>       }
>       else if (singleLine.IndexOf ("warning:") != -1) {
>         def (file, l1, c1, l2, c2) = get_location ("warning:");
>         Log.LogWarning (null, null, null, file, l1, c1, l2, c2, singleLine.Substring (singleLine.IndexOf ("warning:") + 9));
>       }
>       else if (singleLine.IndexOf ("debug:") != -1) {
>         def (file, l1, c1, l2, c2) = get_location ("debug:");
>         Log.LogMessage (null, null, null, file, l1, c1, l2, c2, singleLine.Substring (singleLine.IndexOf ("debug:") + 7));
>       }
>       else _ = Log.LogMessageFromText(singleLine, messageImportance);
>     }
>
>     protected override GetResponseFileSwitch(responseFilePath : string) : string
>     {
>       "/from-file:\"" + responseFilePath + "\"";
>     }
>
>     [Accessor (flags = WantSetter)]
>     mutable _disabled_warnings : array [string];
>
>     [Accessor (flags = WantSetter)]
>     mutable _documentation_file : string;
>
>     [Accessor (flags = WantSetter)]
>     mutable _no_standard_lib : bool = false;
>
>     [Accessor (flags = WantSetter)]
>     mutable _warning_level : int = 4;
>
>     [Accessor (flags = WantSetter)]
>     mutable _warnings_as_errors : bool;
>   }
> }
>
>
>
> _______________________________________________
> https://nemerle.org/mailman/listinfo/devel-en
>
>
>


--
Kamil Skalski
http://nazgul.omega.pl


More information about the devel-en mailing list