<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p><br>
</p>
<div class="moz-cite-prefix">On 7/2/21 10:14 AM, Fāng-ruì Sòng via
llvm-dev wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CAFP8O3LWROF28_5Tq8194X3mP6XuQ9hJ2sj=8GtBkMPe3YY23w@mail.gmail.com">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<div dir="ltr">llvm/tools/ include some binary utilities used as
replacement for GNU binutils, e.g. llvm-objcopy,
llvm-symbolizer, llvm-nm.<br>
In some old threads people discussed some drawbacks of using
cl::opt for user-facing utilities (I cannot find them now).<br>
Switching to OptTable is an appealing solution. I have prepared
two patches for two binary utilities: llvm-nm and llvm-strings.<br>
<br>
* llvm-strings <a href="https://reviews.llvm.org/D104889"
moz-do-not-send="true">https://reviews.llvm.org/D104889</a><br>
* llvm-nm <a href="https://reviews.llvm.org/D105330"
moz-do-not-send="true">https://reviews.llvm.org/D105330</a><br>
<br>
llvm-symbolizer was switched last year. llvm-objdump was
switched by thakis earlier this year.<br>
<br>
The switch can fix some corners with
lib/Support/CommandLine.cpp. Here is a summary:<br>
<br>
* -t=d is removed (equal sign after a short option). Use -t d
instead.<br>
* --demangle=0 (=0 to disable a boolean option) is removed. Omit
the option or use --no-demangle instead.<br>
</div>
</blockquote>
<p>To me, removing these would make the interface *worse*. This is
purely subjective, but I use the second item regularly when
locally debugging to swap back and forth between two modes
easily. <br>
</p>
<blockquote type="cite"
cite="mid:CAFP8O3LWROF28_5Tq8194X3mP6XuQ9hJ2sj=8GtBkMPe3YY23w@mail.gmail.com">
<div dir="ltr">* To support boolean options (e.g. --demangle
--no-demangle), we don't need to compare their positions (if
(NoDemangle.getPosition() > Demangle.getPosition()) , see
llvm-nm.cpp)<br>
* grouped short options can be specified with one line
`setGroupedShortOptions`, instead of adding cl::Grouping to
every short options.<br>
* We don't need to add cl::cat to every option and call
`HideUnrelatedOptions` to hide unrelated options from --help.
The issue would happen with cl::opt tools if linker garbage
collection is disabled or libLLVM-13git.so is used. (See <a
href="https://reviews.llvm.org/D104363" moz-do-not-send="true">https://reviews.llvm.org/D104363</a>)<br>
* If we decide to support binary utility multiplexting (<a
href="https://reviews.llvm.org/D104686" moz-do-not-send="true">https://reviews.llvm.org/D104686</a>),
we will not get conflicting options. An option may have
different meanings in different utilities (especially for
one-letter options).<br>
<br>
<b>I expect that most users will not observe any difference.</b><br>
<br>
There is a related topic whether we should disallow the
single-dash `-long-option` form.<br>
(Discussed in 2019: <a
href="https://lists.llvm.org/pipermail/llvm-dev/2019-April/131786.html"
moz-do-not-send="true">https://lists.llvm.org/pipermail/llvm-dev/2019-April/131786.html</a>
Accept --long-option but not -long-option for llvm binary
utilities)<br>
<b>I'd like to disallow -long-option but may want to do this in
a separate change.</b><br>
The main point is that (1) grouped short options have syntax
conflict with one-dash long options. (2) the GNU getopt_long
style two-dash long option is much more popular.<br>
<br>
I can think of potential pushback for some Mach-O specific
options, e.g. nm -arch<br>
<a href="http://www.manpagez.com/man/1/nm/osx-10.12.6.php"
moz-do-not-send="true">http://www.manpagez.com/man/1/nm/osx-10.12.6.php</a>
says `-arch` has one dash.<br>
If such options may have problems, we can keep supporting one
dash forms.<br>
With OptTable, allowing one-dash forms for a specific option is
easy.<br>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
</blockquote>
</body>
</html>