[m-rev.] for review: add --install-method option
Julien Fischer
jfischer at opturion.com
Mon Nov 13 19:57:18 AEDT 2023
On Sun, 12 Nov 2023, Zoltan Somogyi wrote:
> On 2023-11-12 16:08 +11:00 AEDT, "Julien Fischer" <jfischer at opturion.com> wrote:
>
>> - % This type specifies the command compiler uses to install files.
>> + % This type specifies how the compiler should install files and
>> + % directories. Values of this type only affect when the compiler does file
>> + % installation (e.g. an install target with mmc --make); they do not affect
>> + % file installation done by mmake.
>
> Is "an install target with mmc --make" just an example?
Yes. The point I was trying to get across there was these settings
do not affect how mmake installs files.
I have changed it to:
+ % This type specifies how the compiler should install files and
+ % directories. Values of this type only affect how the compiler itself does
+ % file installation; they do not affect file installation done by mmake.
> Is there are any other situation, current or foreseeable, in which we
> could use this setting? I suspect the answer is "no", in which case I
> would reword to avoid giving a misleading impression to readers.
File copying inside the compiler (using the value of
--install-file-command) is currently used for the following purposes:
1. Installation targets with mmc --make.
2. Copying files with mmc --make on systems on which symlinks are not
available.
3. Updating interface file.
>> +:- type install_method
>> + ---> install_method_external
>> + % Files and directories should be installed by invoking a command
>> + % (e.g. cp or cp -R) via the shell of the underlying operation
>> + % system. (See the file_install_cmd/0 type below.)
>> +
>> + ; install_method_internal.
>> + % Files and directories should be installed by invoking an OS or
>> + % target language call, or by using predicates implemented using
>> + % standard Mercury file operations.
>
> I would s/install_method_external/install_method_external_cmd/, and
> would look for a similar addition to the function symbol as well (maybe "_code"
> as a suffix) to clarify the distinction.
Done.
>> diff --git a/compiler/handle_options.m b/compiler/handle_options.m
>> index 95759d8..679f82b 100644
>> --- a/compiler/handle_options.m
>> +++ b/compiler/handle_options.m
>> @@ -265,7 +265,7 @@ check_option_values(!OptionTable, Target, WordSize, GC_Method,
>> WordSize = word_size_64, % dummy
>> BitsPerWordStr = string.int_to_string(BitsPerWord),
>> WordSizeSpec =
>> - [words("Invalid argument"), quote(BitsPerWordStr), + [words("Invalid argument"), quote(BitsPerWordStr),
>> words("to the"), quote("--bits-per-word"), words("option;"),
>> words("must be either"), quote("32"), words("or"), quote("64"),
>> suffix("."), nl],
>
> What is this doing?
I deleted some trailing whitespace in passing; ignore it.
>> @@ -846,6 +846,22 @@ convert_options_to_globals(ProgressStream, DefaultOptionTable, OptionTable0,
>> OT_OptFrames0 = OptTuple0 ^ ot_opt_frames,
>> OT_StringBinarySwitchSize0 = OptTuple0 ^ ot_string_binary_switch_size,
>>
>> + lookup_string_option(OptionTable0, install_method, InstallMethodStr),
>> + ( if (InstallMethodStr = "" ; InstallMethodStr = "external") then
>> + InstallMethod = install_method_external
>> + else if InstallMethodStr = "internal" then
>> + InstallMethod = install_method_internal
>> + else
>> + InstallMethodSpec = [words("Error: the value of the"),
>> + quote("--install-method"), words("option is"),
>> + quote(InstallMethodStr), suffix(","),
>> + words("but the only valid values are") ] ++
>> + list_to_quoted_pieces_or(["external", "internal"]) ++
>> + [suffix("."), nl],
>> + add_error(phase_options, InstallMethodSpec, !Specs),
>> + InstallMethod = install_method_external % Dummy value
>> + ),
>
> The "or" in "the only valid values are `external' or `internal'" is wrong;
> that should be an "and". And I think using list_to_quoted_pieces_or here
> just obscures the intended message text.
Done.
Julien.
More information about the reviews
mailing list