Fcntl.pm is missing in install
Hi, I'm using perl-5.38.2 along with perl-cross-1.5.2 and am getting mixed results. While I can execute successfully
echo 'print "Hello world!\n";' | perl
I cannot do things like perldoc perl:
Can't locate Fcntl.pm in @INC (you may need to install the Fcntl module) (@INC entries checked: /opt/gitlab/bootstrap/lib/perl5/site_perl/5.38.2/x86_64-linux /opt/gitlab/bootstrap/lib64/perl5/site_perl/5.38.2 /opt/gitlab/bootstrap/lib/perl5/5.38.2/x86_64-linux /opt/gitlab/bootstrap/lib64/perl5/5.38.2) at /opt/gitlab/bootstrap/lib64/perl5/5.38.2/Pod/Perldoc.pm line 8.
BEGIN failed--compilation aborted at /opt/gitlab/bootstrap/lib64/perl5/5.38.2/Pod/Perldoc.pm line 8.
Compilation failed in require at /opt/gitlab/bootstrap/bin/perldoc line 12.
BEGIN failed--compilation aborted at /opt/gitlab/bootstrap/bin/perldoc line 12.
whatever I do I can't make Fcntl.pm be part of deployment. I suspect other modules might be missing as well, I just stumbled with this one specifically.
So I see it's been built but I don't see it in DESTDIR
brief version of steps taken:
make crosspatch
make
make modules
make extensions
make static_ext
make nonxs_ext
make DESTDIR=/build/perl-5.38.2+crosstool/build/../dist CC=cc CXX=g++ install
Mon, Apr 07, 2025 at 04:39:11PM -0700, Dmitry Makovey wrote:
whatever I do I can't make Fcntl.pm be part of deployment. I suspect other modules might be missing as well, I just stumbled with this one specifically.
***@***.*** perl-5.38.2]$ find out -name Fcntl.pm
out/usr/lib/perl5/5.38.2/x86_64-linux/Fcntl.pm
Check config.sh, it should be listed in dynamic_ext. If it's not there, check config.log for anything unusual. Or maybe post it here.
Fcntl should be enabled as long as you have Dynaloader.
thanks for the fast response @arsv . This Perl build is atop of mostly static base toolchain, with only glibc being shared library. I'll take a closer look at Dynaloader and report back.
$ grep dynamic_ext config.sh
dynamic_ext=''
fullpath_dynamic_ext=''
disabled_dynamic_ext='ext/Amiga-ARexx ext/Amiga-Exec ext/GDBM_File ext/NDBM_File ext/ODBM_File ext/VMS-DCLsym ext/VMS-Stdio ext/Win32CORE cpan/DB_File cpan/Win32 cpan/Win32API-File'
but I see it under static:
$ grep static_ext config.sh
static_ext='B Devel/Peek Fcntl File/DosGlob File/Glob Hash/Util Hash/Util/FieldHash I18N/Langinfo Opcode POSIX PerlIO/encoding PerlIO/mmap PerlIO/scalar PerlIO/via SDBM_File Sys/Hostname XS/APItest XS/Typemap attributes mro re Compress/Raw/Bzip2 Compress/Raw/Zlib Digest/MD5 Digest/SHA Encode Filter/Util/Call IPC/SysV MIME/Base64 Math/BigInt/FastCalc Scalar/List/Utils Socket Sys/Syslog Time/Piece Unicode/Collate Data/Dumper Devel/PPPort IO PathTools Storable Time/HiRes Unicode/Normalize threads threads/shared'
I did use --all-static option for configure...
removing --all-static brings Fcntl.pm back... Is --all-static not supposed to build shared library into perl binary yet still deploy Fcntl.pm ?