null

Компилируем 64-х битный perl на Solaris

А зачем, спросите вы? Ведь в Solaris встроен perl 5.8.8, а если хочется, то на всяких там blastwave  можно взять более свежую версию.

А затем, что он везде собран под 32 бита, а у меня, например, openssl собран под 64 бита и понадобились некоторые модули, использующие его. И вообще я придерживаюсь мнения, что гонять 32-х битный код на 64-ом процессоре это не кошерно.

Поэтому традиционно "а мы пойдём другим путём". Качаем с официального сайта исходный код perl 5.10.1, разархивируем его, запускаем:

./Configure -de -Dprefix=/var/perl -Dcc=gcc -Duse64bitall
make

Вроде всё просто и даже по документации. Откидываемся на табуретке и вникаем в великое таинство компиляции... Расслабились? А зря:

[skipped]
cp lib/TAP/Parser/Scheduler/Spinner.pm

../../lib/TAP/Parser/Scheduler/Spinner.pm
./perl -Ilib pod/buildtoc --build-toc -q Can't load
'lib/auto/File/Glob/Glob.so' for module File::Glob: ld.so.1:
perl: fatal: relocation error: R_AMD64_PC32: file
lib/auto/File/Glob/Glob.so: symbol main: value 0x280013f297c does not fit
at lib/XSLoader.pm line 70.
at lib/File/Glob.pm line 96
Compilation failed in require at pod/buildtoc line 171.
BEGIN failed--compilation aborted at pod/buildtoc line 171.
*** Error code 9 make: Fatal error: Command failed for target
`pod/perltoc.pod'

Оказывается мой perlbug 63604 заведённый еще применительно к 5.8.9 до сих пор не исправлен. И не смотря на многочисленные рекомендации в сети по добавлению -fPIC к ключам ld и ldd, после которых собственно компиляция проходит успешно, но зато при выполнении make test получаем большую кучу ошибок, единственный правильный ответ написан в комментариях к этому самому багу. Поэтому для упрощения процедуры удаляем разархивированный каталог, заново разархивируем и в первую очередь слегка подправляем hints/solaris_2.sh:

mv $(PERL)/hints/solaris_2.sh $(PERL)/hints/solaris_2.sh.orig
sed 's/-G/-shared/g' $(PERL)/hints/solaris_2.sh.orig > $(PERL)/hints/solaris_2.sh

Вот теперь можно выполнять

./Configure -de -Dprefix=/var/perl -Dcc=gcc -Duse64bitall&& make && make test

и радоваться результату:

[skipped]

All tests successful.
u=3.60  s=2.59  cu=325.96  cs=55.49  scripts=1611  tests=226604

После такого не грех и make install выполнить.