Re: bsdinstall TUI utility

From: Alfonso S. Siciliano <alfix86_at_gmail.com>
Date: Sun, 29 May 2022 16:01:46 UTC
Obviously, I made some mistake writing in English.


Currently, I am working to replace dialog(1) and dialog(3) in BASE with
a BSD licensed alternative <https://wiki.freebsd.org/GPLinBase>.
I have almost completed the task
<https://wiki.freebsd.org/RoadmapFromDialogToBSDDialog>.
luckily somebody helped me, I will thank at the end.


The topic of the email is not bsdconfig. It has already a review,
it preserves the $DIALOG variable to handle a multitude of front-end:
bsddialog for the needs in BASE, dialog, Zenity, Xdialog, and so on.
I would continue the discussion for bsdconfig in phabricator;
although I should update it after some recent commit.
<https://reviews.freebsd.org/D34755>.


The topic of this email is bsdinstall. I have to update the last few
scripts to delete LGPL-dialog from BASE. Properly I asked the right way
to handle: $DIALOG, $USE_DIALOG, and `dialog` in last 4 scripts because
the others used only and called directly `dialog` without any
bsdconfig's help.


On 5/29/22 01:02, Devin Teske wrote:
 >
 >
 >> On May 28, 2022, at 2:59 PM, Alfonso S. Siciliano 
<alfix86@gmail.com> wrote:
 >>
 >> Hello,
 >>
 >>
 >> So far I replaced and adapted `dialog` with `bsddialog` in
 >> bsdinstall/scripts.
 >> <https://wiki.freebsd.org/RoadmapFromDialogToBSDDialog>
 >>
 >>
 >> Currently, I am addressing the last 4 scripts: auto, bootconfig, keymap,
 >> and wlanconfig. These scripts use also the $DIALOG variable and some
 >> "if" to handle Xdialog(1).
 >> For example 'auto' uses $DIALOG, $USE_XDIALOG, and `dialog`.
 >>
 >
 > Can we simply add USE_GNU_DIALOG and switch USE_DIALOG to mean bsddialog?
 >

OK.

 >
 >> * $DIALOG: I seem bsdinstall(8) uses only dialog(1) as TUI utility.
 >
 > bsdinstall(8) uses only dialog(1) in the context of $DIALOG


Exactly 1.


 >
 > ASIDE: It also uses dialog(3) and dpv(3)/dpv(1)
 >
 >
 >> * I seem bsdconfig(8) does not "call" these 4 scripts, so, probably,
 >>   Xdialog(1) is not used in this context (that is `bsdconfig -X`).
 >>
 >
 > Correct, bsdconfig does use bsdinstall
 >


Exactly 2.


 >
 >> Is there any objection to delete $DIALOG/LGPL-dialog/Xdialog to
 >> provide only the support for bsddialog(1) in bsdinstall(8)?
 >>
 >
 > I object.
 >
 > I and another developer are adding support for zenity
 >
 > 
https://github.com/FrauBSD/pkgcenter/tree/bsdconfig/zenity/depend/bsdconfig 
<https://github.com/FrauBSD/pkgcenter/tree/bsdconfig/zenity/depend/bsdconfig>
 >
 > There is also work to resolve the namespace issues in bsdinstall
 >
 > 
https://github.com/FrauBSD/pkgcenter/tree/bsdinstall/namespace/depend/bsdconfig 
<https://github.com/FrauBSD/pkgcenter/tree/bsdinstall/namespace/depend/bsdconfig>
 >
 > I am in favor of keeping $DIALOG/LGPL-dialog/Xdialog support where it 
exists until those efforts can be completed.
 >
 > ASIDE: bsdinstall doesn’t use Xdialog


Exactly 3.


Anyway, probably the misunderstanding is at this point. My question is
not for bsdconfig but for 4 scripts in bsdinstall.
Let' s say: "should bsdinstall/scripts/auto have the code to handle
$DIALOG/LGPL-dialog/Xdialog"
```
	if [ "$USE_XDIALOG" ]; then
		yes=ok no=cancel defaultno=default-no
		extra_args="--wrap --left"
		format="$passed_msg"
	else
		yes=yes no=no defaultno=defaultno
		extra_args="--cr-wrap"
		format="$passed_msg"
	fi

	...

	EXTRA_DISTS=$( eval dialog \
		    --backtitle \"$OSNAME Installer\" \

```

Please note, I have not a strong opinion, if you confirm your needs for
$DIALOG, Xdialog, USE_GNU_DIALOG, switch USE_DIALOG, etc. in bsdinstall
I'll add and preserve these features in the 4 scripts.
Please let me know, so I can complete the dialog/bsddialog replacement
soon.


 >
 >
 >> I would prefer this solution because I can avoid: to handle some
 >> dialog/Xdialog/bsddialog command line difference and to hook some
 >> bsdconfig function built on dialog(1) incompatible with bsddialog(1)
 >> (for example autosizing, implemented in bsddialog(3) already).
 >>
 >
 > The differences in command line should be handled through 
conditionals, but can be the default and opt to handle LGPL-dialog 
through a USE_GNU_DIALOG flag
 >
 > bsddialog may support auto-sizing, but so does dialog and Xdialog.
 >
 > However, ...
 >
 > The sizing code in bsdconfig (used indirectly by bsdinstall) was 
written because the auto-sizing that does exist and is available in both 
dialog and Xdialog (as well as Zenity) does not provide a cohesive 
experience when trying to write a program that is in-reality a series of 
bespoke dialogs.
 >
 > The sizing code makes sure that regardless of which utility you are 
using that the experience is uniform in what is presented to the user.
 >
 > Attempting to rely solely on the auto-sizing available from these 
separate utilities (including bsddialog) would change the UI/UX.
 >
 > The problem was solved by:
 >
 > 1. Making the stored text used for dialogs dictate how it will look
 > 2. Painstakingly determining where each utility failed given the text
 > 3. Determining how to make the utility display the text properly
 >
 > For example, stored text will contain newlines instead of attempting 
to rely on line wrapping on a box of given size.
 >
 > I would have to evaluate bsddialog’s auto-sizing to determine if it 
is trust-worthy given not only all the stored texts, but all the 
translations as well (as bsdconfig is i18n compatible). It is actually 
less work to just allow bsdconfig to likely treat bsddialog as it is 
dialog and let it perform the size calculations for you.
 >
 > If bsddialog is top be a drop-in replacement, I’m more than a little 
surprised that it cannot accept the sizes calculated for dialog being 
passed to it.
 >
 >
 >>
 >> Please note these considerations are only for bsdinstall, bsdconfig is
 >> unchanged.
 >>
 >
 > What of dpv? bsdinstall uses dpv(3) to unpack the dists which in-turn 
relies on dlg_gauge_reallocate(3) from LGPL-dialog?



I seem these considerations are for bsdconfig so the discussion can
continue in phabricator. Of course I made some error in English in the
first email.

Here the topic is bsdinstall.

bsdinstall(8) in CURRENT did not use LGPL-dialog(3) since months,
all the components (written in C) were adapted or rewritten to
use bsddialog(3). Example
https://cgit.freebsd.org/src/commit/?id=50e244964e9b06528b84720e09da7bdf8cec6d32

Most bsdinstall scripts "call" just `dialog` using its autosizing
(without any bsdconfig's  help).
So far I replaced `dialog 0 0` with `bsddialog 0 0`. Example
https://cgit.freebsd.org/src/commit/?id=4d1ba6febfa7c7808027fd1ef60b3bffadd17853
The important question was asked above. I would want to understand the
right way to handle $DIALOG/Xdialog/`dialog` in the last 4 bsdinstall
scripts.

I had some problem using the autosizing functions of bsdconfig for
bsddialog, probably bacause dialog(3) and bsddialog(3) implement
different auto text wrapping algorithms, or the utilities have different
command lines. Honestly I am not interested in investigating, I would
like to improve bsddialog instead of wasting time on a LGPL software
almost ready to leave the BASE.
For dpv(3) in distfetch.c, I implemented an "improved mixedgauge" in
bsddialog(3) with colors, a callback and bottom info" depending only on
BSD licensed code.
The complete unicode support is a TODO, although bsddialog provides some
feature already https://bugs.freebsd.org/248968

This is probably another misunderstanding. My goal, after some email and
chat with others, is to provide a BSD licensed alternative to dialog
for the "BASE needs"; similar not equal, otherwise the effort would not
be feasible for a single.
Indeed, also the command lines are quite different. Example
https://cgit.freebsd.org/src/commit/?id=6833ac673d98275ef72a8873372714011c73eb15

So far the replacement process was in phabricator with author(s),
maintainer(s) and 2/3 members of the core team. Anyone interested can
notify me to be added in future reviews.

Alfonso