![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Man pages
З огидою гортавши man-сторінку mpv(1), я вирішив порівняти її гаргантюажний розмір з іншими пакетами.
20 найтовстіших man сторінок на 32й федорі:
man/man3/Image::ExifTool::TagNames.3pm 609
man/man1/ffmpeg-all.1 482
man/man1/cabal.1 403
man/man1/ffprobe-all.1 389
man/man1/ffplay-all.1 385
man/man1/gcc.1 347
man/man1/g++.1 347
man/man1/perltoc.1 307
man/man1/ffmpeg-filters.1 273
man/man7/cmake-modules.7 249
man/man1/mpv.1 219
man/man1/hg.1 213
man/man1/perlapi.1 153
man/man3/Net::SSLeay.3pm 152
man/man7/systemd.directives.7 149
man/man1/gm.1 149
man/man1/mplayer.1 147
man/man1/mencoder.1 147
man/man5/smb.conf.5 146
man/man1/perluniprops.1 134
Колонка сліва означає кількість постскрíптових letter-size сторінок.
У списку є відсутній пакет lapack, який завойовував б призові місця (сотні однакових файлів по 535 сторінок), але додав б нічого, крім сміття. Мені здається що людина, яка їх генерувала, зловісно посміхалася у процесі. Таких man pages я ще не бачив:
Надрукувати свій список для лайнаксу або bsd можна взявши цього
мейкфайлу та сказавши make en=1 n=20
$ cat Makefile
en :=
n := 50
d := /usr/share/man /usr/local/share/man
out := _out
all: $(out)/man-stat.txt
sort -n -k2 -r $< $(if $(en),| grep man/) | head -$(n) | column -t
$(out)/man-stat.txt:
@mkdir -p $(dir $@)
find $(d) -type f | sed 's/$$/._/g' | grep -iv lapack | xargs $(MAKE) --no-print-directory > $@
$(out)/man-stat.sh: Makefile; @echo "$$man_stat" > $@
%._: $(out)/man-stat.sh; @sh $< $*
export define man_stat :=
[ -r "$$1" ] || exit 1
pages() {
local o=-Tps; [ `uname` != "Linux" ] && o=-t # bsd
man $$o "$$1" 2>/dev/null | awk '/^%%Pages/ {m=$$2} END {print m}';
}
name() { echo "$$1" | awk -F/ '{n = split($$0, r, "/"); sub("\\.gz$$", "", r[n]); printf "%s/%s/%s", $$(NF-2), $$(NF-1), r[n]}'; }
[ -z "$$MAKELEVEL" ] || echo $$1 1>&2
echo `name "$$1"` `pages "$$1"`
endef
Спочатку воно має порахувати (та запам'ятати) кількість ps-сторінок для кожної man page, тому перший запуск буде довгий.
Роздивляючись результат під fbsd 12, я помітив, що fbsd використовує не стандартний лайнаксний man-db, а mandoc, у якого тече пам'ять при генеруванні ps/pdf для man-сторінки objdump (~700MB).
mandoc--то є цікавий німецький проекта, який ув 2020 використовує
cvs. 1 з їх мейнтейнерів мене суворо попередив, щоб я більше не смів
слати патчі, де замість табс були спейсес, а на мою ремарку про
openbsd'шний сіскол pledge
почав слати мені ютубні презентації Тео
де Раадта.
Наразі, транк mandoc'а продовжує мати витік пам'яті, і якщо ви побачите онлайнівські man page viewers, де можна отримати pdf, то... (Ну, ви понялі.)
Я, звичайно, миттєво побіг робити це з онлайновим fbsd в'ювером, але, на жаль, їм щось відомо, так як для генерації pdf вони використовують groff.