[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