asdf-erlang icon indicating copy to clipboard operation
asdf-erlang copied to clipboard

erl -man <module name> doesn't work

Open jrfondren opened this issue 1 year ago • 3 comments

Previously reported and fixed in #22

$ asdf install erlang 26.2.5
asdf_26.2.5 is not a kerl-managed Erlang/OTP installation
No build named asdf_26.2.5
Downloading 26.2.5 to /home/jrfondren/.asdf/downloads/erlang/26.2.5...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  101M  100  101M    0     0  19.3M      0  0:00:05  0:00:05 --:--:-- 21.1M
Extracting source code
Building Erlang/OTP 26.2.5 (asdf_26.2.5), please wait...
[packages] Unknown Linux distro rocky; not checking build packages.
Building docs...
Erlang/OTP 26.2.5 (asdf_26.2.5) has been successfully built
Cleaning up compilation products for asdf_26.2.5
Cleaned up compilation products for asdf_26.2.5 under /home/jrfondren/.asdf/plugins/erlang/kerl-home/builds
$ which erl
~/.asdf/shims/erl
$ erl -s init stop
Erlang/OTP 26 [erts-14.2.5] [source] [64-bit] [smp:16:16] [ds:16:16:10] [async-threads:1] [jit:ns]

$ erl -man erl
No manual entry for erl
$ fop |head -3
FOP Version SVN

USAGE

A strace of erl -man erl shows it trying

15:41:19 openat(AT_FDCWD, "/home/jrfondren/.asdf/installs/erlang/26.2.5/man", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (No such file or directory)
15:41:19 newfstatat(AT_FDCWD, "/home/jrfondren/.asdf/installs/erlang/26.2.5/man", 0x7ffc52e1d130, 0) = -1 ENOENT (No such file or directory)

The only 'man' directory under ~/.asdf that I have is empty, ~/.asdf/installs/erlang/26.2.5/erts-14.2.5/man

workaround

Open module documentation with xdg-open https://www.erlang.org/doc/man/$module instead. I.e.,

$ function erlman() { xdg-open https://www.erlang.org/doc/man/$1; }
$ erlman erl  # opens the 'erl' manpage in another tab of the default browser

Manpages have many advantages that this misses, such as always being for the correct version of Erlang.

post-build fix

$ function getman() { wget https://github.com/erlang/otp/releases/download/OTP-$1/otp_doc_man_$1.tar.gz && tar -C ~/.asdf/installs/erlang/$1/ -zxvf otp_doc_man_$1.tar.gz && rm -fv otp_doc_man_$1.tar.gz; }
$ getman 26.2.5
$ getman 27.0-rc3

jrfondren avatar May 09 '24 20:05 jrfondren

There's a very recent upstream fix in kerl/kerl#520 for this, currently only on the main branch.

You can recompile with

$ export ASDF_KERL_VERSION=master
export KERL_BUILD_DOCS=yes
export KERL_DOC_TARGETS="chunks man"
export KERL_INSTALL_MANPAGES=yes

$ asdf install erlang 26.2.5     
Downloading kerl...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 82416  100 82416    0     0  1787k      0 --:--:-- --:--:-- --:--:-- 1829k
ERROR: 'asdf_26.2.5' is not a kerl-managed Erlang/OTP installation.
ERROR: no build named 'asdf_26.2.5'!
Downloading (from GitHub) Erlang/OTP 26.2.5 to /home/juan/.asdf/downloads/erlang/26.2.5...
Extracting source code for normal build...
Building (normal) Erlang/OTP 26.2.5 (asdf_26.2.5); please wait...
Initializing (build) log file at /home/juan/.asdf/plugins/erlang/kerl-home/builds/asdf_26.2.5/otp_build_26.2.5.log.
Building docs...
Erlang/OTP 26.2.5 (asdf_26.2.5) has been successfully built.
Cleaning up compilation products for 'asdf_26.2.5' under:
  - /home/juan/.asdf/plugins/erlang/kerl-home/builds...
  - /home/juan/.asdf/downloads/erlang/26.2.5...
... done.

$ asdf global erlang 26.2.5
$ erl -man erl
erl(1)                                     User Commands                                    erl(1)

NAME
       erl - The Erlang emulator.

03juan avatar May 10 '24 07:05 03juan

Once a new version of kerl is tagged I'll get this fix into asdf-erlang.

Stratus3D avatar May 10 '24 12:05 Stratus3D

This seems to be fixed in 4468afe892d41ab8963de2e064048027d9dff9e3 by pulling in kerl 4.1.1.

hrubi avatar Jul 10 '24 09:07 hrubi

Closing this issue since this is already fixed with kerl.

If you already have asdf-erlang installed, then please delete your kerl install by running this command:

rm $HOME/.asdf/plugins/erlang/kerl

The next time you run erlang install, it should install a new version of kerl. You can use the env vars that @03juan mentioned to install erlang with docs.

HashNuke avatar Mar 16 '25 15:03 HashNuke