[m-rev.] for review: format C# file names according to which C# compiler we are using

Julien Fischer juliensf at csse.unimelb.edu.au
Wed Jan 11 02:57:08 AEDT 2012


Hi Pete,

On Tue, 10 Jan 2012, Peter Ross wrote:

> Estimated hours taken: 4
> Branches: main, 11.07
>
> The Microsoft C# compiler only accepts paths in the Windows format, so
> add code to format file names depending on which host environment we are
> compiling and which C# compiler we are using.
>
> compiler/compile_target_code.m:
> 	Convert to file names to use windows paths when required.
>
> compiler/globals.m:
> compiler/handle_options.m:
> compiler/mercury_compile.m:
> compiler/options.m:
> m4/mercury.m4:
> scripts/Mercury.config.in:
> 	Add code to determine the C# compiler type and pass it to the compiler.
>
> doc/user_guide.texi:
> 	Document the --output-csharp-compiler-type option.
>
> Index: compiler/compile_target_code.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/compiler/compile_target_code.m,v
> retrieving revision 1.181
> diff -u -r1.181 compile_target_code.m
> --- compiler/compile_target_code.m	16 Dec 2011 03:38:20 -0000	1.181
> +++ compiler/compile_target_code.m	10 Jan 2012 02:43:25 -0000
> @@ -2735,7 +2735,14 @@
>     bool::out, io::di, io::uo) is det.
>
> create_csharp_exe_or_lib(Globals, ErrorStream, LinkTargetType, MainModuleName,
> -        OutputFileName, SourceList, Succeeded, !IO) :-
> +        OutputFileName0, SourceList0, Succeeded, !IO) :-
> +
> +    get_host_env_type(Globals, EnvType),
> +    get_csharp_compiler_type(Globals, CSharpCompilerType),
> +
> +    OutputFileName = csharp_file_name(EnvType, CSharpCompilerType, OutputFileName0),
> +    SourceList = list.map(csharp_file_name(EnvType, CSharpCompilerType), SourceList0),
> +
>     globals.lookup_string_option(Globals, csharp_compiler, CSharpCompiler),
>     globals.lookup_bool_option(Globals, highlevel_data, HighLevelData),
>     (
> @@ -2820,6 +2827,32 @@
>         Succeeded = Succeeded0
>     ).
>
> +    % Converts the given filename into a format acceptable to the C# compiler.

You should explain why this is necessary, e.g. because the MS C#
compiler only accepts paths that use "\" as a the directory separator.

> +    % Note we expect the given file name to be using "/" for the directory separator.

What do you mean by that?  It's entirely possible to be given something like:

     C:\foo\bar\baz/Mercury/css/somefile.cs

> +:- func csharp_file_name(env_type, csharp_compiler_type, file_name) = file_name.
> +
> +csharp_file_name(env_type_posix, csharp_microsoft, Filename) = convert_to_windows_path_format(Filename).

This combination should never occur.  You should just check for
--host-env-type=posix --csharp-compiler-type=microsoft in
compiler/handle_options.m and emit an error message there.
You can just call unexpected/2 here.

> +csharp_file_name(env_type_posix, csharp_mono, Filename) = Filename.
> +csharp_file_name(env_type_posix, csharp_unknown, Filename) = Filename.
> +
> +csharp_file_name(env_type_cygwin, csharp_microsoft, Filename) = convert_to_windows_path_format(Filename).
> +csharp_file_name(env_type_cygwin, csharp_mono, Filename) = Filename.
> +csharp_file_name(env_type_cygwin, csharp_unknown, Filename) = Filename.
> +
> +    % MSYS converts the path for us to the windows format.
> +csharp_file_name(env_type_msys, csharp_microsoft, Filename) = Filename.
> +csharp_file_name(env_type_msys, csharp_mono, Filename) = Filename.
> +csharp_file_name(env_type_msys, csharp_unknown, Filename) = Filename.
> +
> +csharp_file_name(env_type_win_cmd, csharp_microsoft, Filename) = convert_to_windows_path_format(Filename).
> +csharp_file_name(env_type_win_cmd, csharp_mono, Filename) = Filename.
> +csharp_file_name(env_type_win_cmd, csharp_unknown, Filename) = convert_to_windows_path_format(Filename).

The rest looks okay.  Please wait until the end of the week before
committing the remainder of this.

Julien.
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to:       mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions:          mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------



More information about the reviews mailing list