Perl Tcl Tclkit ссылка на конкретную установку - PullRequest
0 голосов
/ 31 октября 2018

Как связать модуль tcl.pm с Tclkit, например, доступным здесь в macOS?

В качестве альтернативы я также был бы рад связать Tcl.pm с обычной установкой Tcl / Tk. Как указано в Tcl.pod, это должно быть сделано при компиляции модуля. Они пишут:

perl Makefile.PL --library=-l/path/to/tcl(stub).a         \
   --include=-I/path/to/tcl/include                       \
   --define="-DLIB_RUNTIME_DIR=... -DTCL_LIB_FILE=..."

Итак, чтобы попробовать, я взял предустановленные фреймворки Tcl / Tk, доступные в моей macOS, переместил их в другой каталог и затем попытался создать Makefile.pl со следующими параметрами:

perl Makefile.PL \
   --library="-L/xxx/Tcl.framework/Versions/8.5 -ltclstub8.5" \
   --include=-I/xxx/Tcl.framework/Versions/8.5/Headers        \
   --define="-DUSE_TCL_STUBS -DTCLSH_PATH=\\\"/usr/bin\\\" -DLIB_RUNTIME_DIR=\\\"/xxx/Tcl.framework\\\" -DTCL_LIB_FILE=\\\"Tcl\\\""

Затем я продолжаю нормальную сборку, проверяю и устанавливаю. Я не получаю никакой ошибки, которая может указывать на решение. Я сравнил make-файл, созданный Makefile.pl без параметров и моего, и не нашел никаких отличий: путь (очевидно), и что мой make-файл пропустил строку:

#     dynamic_lib => { OTHERLDFLAGS=>q[-framework Carbon] }

Независимо от того, что я пытаюсь, мои скрипты запускаются со стандартным Tcl / Tk ... Я понятия не имею, что я могу попробовать дальше

1 Ответ

0 голосов
/ 01 ноября 2018

Модуль Tcl не требует, чтобы вы устанавливали различные детали (--library, --include, --define) самостоятельно, но вы можете обратиться к установленным tclsh или tclConfig.sh для их загрузки автоматически.

См. --tclconfig и --tclsh при работе:

% perl Makefile.PL --help

Это просто сработало для меня, и с использованием установки Tcl, полученной через MacPorts (sudo port install tcl; 8.6.8), и установки, начинающейся с проверки ископаемых Tcl (core-8-6-branch).

% tar -xzf Tcl-1.27.tar.gz
% cd Tcl-1.27/
% perl Makefile.PL --tclconfig /opt/local/lib/tclConfig.sh
% make
% make test

Это дает мне:

$ make test
"/opt/local/bin/perl5.26" -MExtUtils::Command::MM -e 'cp_nonempty' -- Tcl.bs blib/arch/auto/Tcl/Tcl.bs 644
PERL_DL_NONLAZY=1 "/opt/local/bin/perl5.26" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/call.t ............. ok     
t/constants.t ........ ok   
t/createcmd.t ........ ok   
t/disposal-subs-a.t .. skipped: because: not installed use Devel::Refcount qw( refcount )
t/disposal-subs-b.t .. ok   
t/disposal-subs-c.t .. ok   
t/disposal-subs-d.t .. ok   
t/disposal-subs-e.t .. ok   
t/disposal-subs-f.t .. ok   
t/disposal-subs.t .... 1/2 [[::perl::CODE(0x7fe3e3802a68) ::perl::Eval; ]]
t/disposal-subs.t .... ok   
t/eval.t ............. ok   
t/export_to_tcl.t .... ok   
t/info.t ............. ok   
t/memleak-a.t ........ skipped: because: not installed use Devel::Refcount qw( refcount )
t/result.t ........... ok   
t/set-callback.t ..... ok   
t/subclass.t ......... ok   
t/trace.t ............ ok   
t/unicode.t .......... ok   
t/var.t .............. ok   
All tests successful.

Test Summary Report
-------------------
t/info.t           (Wstat: 0 Tests: 6 Failed: 0)
  TODO passed:   2
Files=20, Tests=101, 15 wallclock secs ( 0.08 usr  0.03 sys +  0.99 cusr  0.32 csys =  1.42 CPU)
Result: PASS
...