Я сейчас пытаюсь установить NIST sclite
, который является частью SCTK 2.4.0 ( github или более новая версия ).Я пытаюсь установить на Cygwin
в bash
.Установка выполняется с использованием make
.
Я прошел этапы make configure
и make all
установки.Это не произошло без особых усилий (см. Сообщения SO по проблемам first (file not recognized
) и second (template / scoping)).Когда я добираюсь до make check
части установки, многие проверки / тесты проходят, но затем я получаю следующую ошибку:
Testing acomp.pl
No tests defined for acomp.pl
make[2]: Leaving directory '/cygdrive/c/David/programs/sctk2.4.0/sctk/src/acomp'
(cd def_art; make check)
make[2]: Entering directory '/cygdrive/c/David/programs/sctk2.4.0/sctk/src/def_art'
Testing def_art.pl
def_art.pl passed without tests
make[2]: Leaving directory '/cygdrive/c/David/programs/sctk2.4.0/sctk/src/def_art'
(cd hubscr; make check)
make[2]: Entering directory '/cygdrive/c/David/programs/sctk2.4.0/sctk/src/hubscr'
Testing hubscr.pl
./RunTests.pl
Running test 'test1-sastt', operation 'test', options '-G -f rttm -F rttm -a', directory 'test1-sastt.test'
Executing command
Error: unable to get the version for program def_art.pl with the command 'def_art.pl' at ../hubscr.pl line 419.
Error: Execution failed at ./RunTests.pl line 30.
make[2]: *** [makefile:20: check] Error 2
make[2]: Leaving directory '/cygdrive/c/David/programs/sctk2.4.0/sctk/src/hubscr'
make[1]: *** [makefile:68: checkFast] Error 2
make[1]: Leaving directory '/cygdrive/c/David/programs/sctk2.4.0/sctk/src'
make: *** [makefile:52: check] Error 2
Я провел некоторое исследование (описано ниже),и я смог обойти эту проблему.Однако это включало некоторые устаревшие perl
модули (Perl4).
Мой первый вопрос был о том, как исправить эту ошибку или как пропустить эту часть теста.Я смог исправить ошибку, и если люди думают, что это безопасно, я отвечу.Обратите внимание, что есть еще одна проблема с make check
после того, как эта проблема исправлена, но я упоминаю, как обойти это в конце.
Мне интересно, если использовать старый Perl (Perl4::CoreLibs
) является безопасной и / или хорошей практикой программирования.Было бы лучше изменить исходный код для использования Perl5?
Есть ли вообще лучший способ?
Одна вещь, которую я хочуубедитесь, что ниже линии make check
нет критических тестов, которые могут дать сбой.
Сведения о системе
$ uname -a
CYGWIN_NT-6.1 CAP-D-ENG-INT3 2.10.0(0.325/5/3) 2018-02-02 15:16 x86_64 Cygwin
$ bash --version
GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin) ...
$ gcc --version
gcc (GCC) 6.4.0 ...
$ g++ --version
g++ (GCC) 6.4.0 ...
$ make --version
GNU Make 4.2.1
Built for x86_64-unknown-cygwin ...
$ systeminfo | sed -n 's/^OS\ *//p'
Name: Microsoft Windows 7 Enterprise
Version: 6.1.7601 Service Pack 1 Build 7601
Manufacturer: Microsoft Corporation
Configuration: Member Workstation
Build Type: Multiprocessor Free
Мои попытки / исследования
Исходя из вышеприведенного вывода, мы имеем def_art.pl
прохождение проверки, потому что нет проверок - "def_art.pl passed without tests
".Однако следующая проверенная вещь, hubscr.pl
, не удалась.Ошибка исходит от def_art.pl
.
Казалось, очевидно, что нужно запустить def_art.pl
, что я и сделал.
$ ./src/def_art/def_art.pl
Can't locate getopts.pl in @INC
(@INC contains: /usr/local/lib/perl5/site_perl/5.26/x86_64-cygwin-threads /usr/local/share/perl5/site_perl/5.26 /usr/lib/perl5/vendor_perl/5.26/x86_64-cygwin-threads /usr/share/perl5/vendor_perl/5.26 /usr/lib/perl5/5.26/x86_64-cygwin-threads /usr/share/perl5/5.26)
at ./src/def_art/def_art.pl line 40.
Так что мне кажется, что этоустарел файл perl
(или модуль, или что-то еще).
Я выкопал немного дальше и нашел это обсуждение на обсуждении kaldi
2014 года. (kaldi
- речь-признание инструментария, который использует систему скоринга SCTK).Есть 3 раздела обсуждения, которые я считаю особенно актуальными, на которые я буду ссылаться ( первый , второй , третий ).Я вставлю детали здесь:
def_art.pl
ищет getopts.pl
, которые я не могу найти на моей машине!
... [T] они наследиепакеты, которые больше не поддерживаются в последних версиях Perl 5. Я не думаю, что мы должны принимать зависимость от них.Они устарели с начала Perl 5. Вместо 'require' getopt.pl '' мы должны делать use Getopt::Std
(примечание: современный код perl
не должен вызывать "require
" для системных пакетов).Существует похожая проблема с * flush.pl
в скриптах Perl.Я не знаю, как называется пакет Perl 5.... Есть несколько мест, где это происходит.
Я наконец-то обнаружил, что getopts.pl
и flush.pl
доступны с Perl4::CoreLibs
.URL, который я использую для wget
, был указан на этом сайте.Очевидно, что в других дистрибутивах *NIX
можно использовать менеджер пакетов, например,
apt-get install libperl4-corelibs-perl
или
yum install perl-Perl4-CoreLibs
, но я не смог найти установку через apt-cyg
.Я смог установить их из архива, как описано в разделе Что я делаю .
Еще раз, я задам свой главный вопрос: Это безопасно?/ хорошая практика программирования?Есть ли лучшее решение?
Если есть лучшее решение (использующее Perl 5), похоже, что эта ссылка может привести к нему.
Некоторые другие ссылки, которые могут быть связаны: link_ {n} и link {n + 1} about flush.pl
, link_ {n + 2} & link_ {n + 3} о getopts.pl
и Perl4::CoreLibs
.
Что я делаю
$ mkdir perl_added
$ cd perl_added
$ wget http://search.cpan.org/CPAN/authors/id/Z/ZE/ZEFRAM/Perl4-CoreLibs-0.004.tar.gz
$ tar -xzf Perl4-CoreLibs-0.004.tar.gz
$ cd Perl4-CoreLibs-0.004
Вместо добавления подкаталога lib
этого каталога в переменную среды PERLLIB
с помощью одноразовой командной строки, добавление переменной среды, ясделал следующее.
Создайте новый каталог в каталоге /usr/lib
, переместите туда файлы
$ stat /usr/lib/libperl4-corelibs-perl
stat: cannot stat '/usr/lib/libperl4-corelibs-perl': No such file or directory
# Checked that the directory didn't already exist. It didn't exist.
$ mkdir /usr/lib/libperl4-corelibs-perl
# Make each file executable, then move it into the new directory
# I'd like to come back and explain this.
$ find ./lib -type f -name "*.pl" -print0 | xargs -I'{}' -0 \
bash -c 'new_dir=/usr/lib/libperl4-corelibs-perl/; chmod +x {}; \
mv {} ${new_dir}'
Наконец, я сделал так, чтобы этот каталог становился частью пути поиска perl
каждый раз, когда я использую терминал, добавив следующую строку в мой ~/.bashrc
Эта команда добавляет путь к переменной окружения PERLLIB
. Разные версии Linux имеют разный синтаксис для добавления в переменные окружения, обязательно узнайте, какой у вас!
export PERLLIB="/usr/bin/libperl4-corelibs-perl:$PERLLIB"
Команды, которые я запускал для этого, были
$ echo -e "\n\n## Allow Perl to use the files in Perl4::CoreLibs" >> $HOME/.bashrc
$ echo -e "export PERLLIB=\"/usr/lib/libperl4_corelibs_perl:$PERLLIB\"" >> $HOME/.bashrc
$ source $HOME/.bashrc
(Спасибо @melpomene за то, что отметили, что текущая версия - 0,004, а не 0,003.)
После этого я вернулся в базовую папку установки и запустил make clean
, make config
, make all
и make check
.
Это действительно помогло мне продвинуться в make check
, но не намного.
Мне интересно, является ли использование старого Perl (Perl4 :: CoreLibs) безопасным и / или хорошей практикой программирования. Было бы лучше изменить исходный код для использования Perl5?
P.S. После всего этого вы, вероятно, захотите вернуться назад и удалить папку, в которой все выкопали. В моем случае:
rm -rf /path/to/where/I/started/perl_added
<Ч />
Результат / Следующие шаги
Куча тестов, которые прошли, а затем
(cd hubscr; make check)
make[2]: Entering directory '/cygdrive/c/David/programs/sctk2.4.0/sctk/src/hubscr'
Testing hubscr.pl
./RunTests.pl
Running test 'test1-sastt', operation 'test', options '-G -f rttm -F rttm -a', directory 'test1-sastt.test'
Executing command
Unescaped left brace in regex is illegal here in regex; marked by <-- HERE in m/{_recursive_/_recur_{ <-- HERE _sive_/_si_ve_}_}/ at ../../md-eval/md-eval.pl line 1099, <DATA> line 12.
Error: MDEVAL failed
Command: md-eval.pl -nafcs -c 0.25 -o -r sastt-case1.ref.rttm.filt -s sastt-case1.sys.rttm.filt -M sastt-case1.sys.rttm.filt.mdeval.spkrmap 1> sastt-case1.sys.rttm.filt.mdeval at ../hubscr.pl line 679.
Error: Execution failed at ./RunTests.pl line 30.
make[2]: *** [makefile:20: check] Error 255
make[2]: Leaving directory '/cygdrive/c/David/programs/sctk2.4.0/sctk/src/hubscr'
make[1]: *** [makefile:68: checkFast] Error 2
make[1]: Leaving directory '/cygdrive/c/David/programs/sctk2.4.0/sctk/src'
make: *** [makefile:52: check] Error 2
Может быть это будет полезно. Я опубликую отдельный вопрос для этой проблемы или, если решение будет быстрым, я добавлю решение в этот пост.