Файл INSTALL
в источнике ncurses сообщает то, что вам нужно знать:
--disable-database
Use only built-in data. The ncurses libraries normally read terminfo
and termcap data from disk. You can configure ncurses to have a
built-in database, aka "fallback" entries. Embedded applications may
have no need for an external database. Some, but not all of the
programs are useful in this configuration, e.g., reset and tput versus
infocmp and tic.
--with-fallbacks=XXX
Specify a list of fallback terminal descriptions which will be
compiled into the ncurses library. See CONFIGURING FALLBACK ENTRIES.
Команда, показанная в вопросе, не перечисляет никакихрезервные описания терминалов (например, vt100 ).
Команда должна перечислить описания, которые вы хотите встроить в библиотеку, например,
./configure command - ./configure --host arm64-linux-gnu --prefix=/sw/nic/third-party/ncurses-6.1/arm64/ -with-termlib --enable-termcap --with-caps --disable-database --with-fallbacks=vt100 --without-xterm-new
Поскольку вы отключилив базе данных нет смысла копировать /usr/share/terminfo/*
, и поскольку здесь используется статическая библиотека (по умолчанию), нет необходимости копировать libncursesw.a во встроенную систему (за исключением редкого случая, когда вы фактически используете компилятор/ linker toolset работает на машине arm64).
... в ответ на продолжение 18 ноября: поддержка отката в библиотеке ncurses используется только вслучай, когда вызывается setupterm
(или его вызывающие абоненты newterm
, initscr
) - см. исходный код .Например, программы, такие как clear
, будут работать, но не infocmp
.
При быстрой проверке я запустил это для создания тестовой копии, включив функцию трассировки ncurses:
#!/bin/sh
unset TERM
unset TERMINFO
unset TERMINFO_DIRS
./configure \
--prefix=/tmp/FOO \
--enable-termcap \
--with-trace \
--without-debug \
--without-ada \
--with-fallbacks=vt100,vt102,screen
make
, а затем в ./progs
#!/bin/sh
export TERM=vt100
unset TERMINFO
unset TERMINFO_DIRS
rm -f trace
export NCURSES_TRACE=0xffff
./clear
(делая unset
, чтобы избежать обнаружения моего окружения).Файл трассировки не сообщает откуда берется полученное описание.Это сделано до вызова set_curterm
.Если бы это было прочитано из файла, это показывалось бы.Но команда clear
работает.Вот полная трассировка, показывающая неудачные вызовы для файла -доступов и, наконец, вызов tputs
с ожидаемыми данными:
TRACING NCURSES version 6.1.20181117 (tracelevel=0xffff)
called {setupterm("vt100",0,(nil))
your terminal name is vt100
using 2048 for getstr limit
+ called {_nc_first_db
duplicate /tmp/FOO/share/terminfo
not found /users/tom/.terminfo
not found /tmp/FOO/share/terminfo
not found /etc/termcap
not found /usr/share/misc/termcap
+ return }
+ called {set_curterm(0x242a2a0)
+ return }(nil)
+ called {def_shell_mode((nil)) ->term 0x242a2a0
_nc_get_tty_mode(0): iflags: {BRKINT, IXON} cflags: {CREAD} CS8 lflags: {ISIG}
+ return }0
+ called {def_prog_mode((nil)) ->term 0x242a2a0
_nc_get_tty_mode(0): iflags: {BRKINT, IXON} cflags: {CREAD} CS8 lflags: {ISIG}
+ return }0
+ called {baudrate((nil))
+ return }38400
screen size: terminfo lines = 24 columns = 80
SYS screen size: environment LINES = 40 COLUMNS = 80
screen size is 40x80
TABSIZE = 8
return }0
tputs( = "\e[H\e[J$<50>", 40, 0x403630) called
called {delay_output(0x7ffca32a2f50,50)
return }0
called {tigetstr((nil), E3)
return }(cancelled)
tputs((cancelled), 40, 0x403630) called
Выполнение strings
на clear
показывает это:
vt100|vt100-am|dec vt100 (w/advanced video)
, что является полной строкой из исходного файла terminfo.