#! /bin/sh set -xe PKG=perl VERSION=5.26.1 BUILD=3 PREFIX=/pkg/$PKG-$VERSION-$BUILD #PREFIX=/dev/shm/$PKG-$VERSION-$BUILD if false; then # force complete rebuild, but keep downloads cd $PREFIX # sanity check before we go berserk test -e build/perl-$VERSION.tar.gz || exit 1 find . -maxdepth 1 -not -name . -not -name build -exec rm -rf {} \; find build -maxdepth 1 -not -name build -not -name "*.tar*" -exec rm -rf {} \; fi mkdir -p $PREFIX cat >$PREFIX/profile <<-EOF PATH=$PREFIX/bin:\$PATH EOF . $PREFIX/profile # Some cpan mopdule tests fail when build directory is on # nfs, because they try to remove directories with unlinked # but opened files in it. # Additionally we want a clean envirnoment and a local cpan scratch # HOME=/dev/shm/$PKG-$VERSION-$BUILD.build.home.tmp mkdir -p $HOME exec </dev/null # to many cpan modules might ask something # If you hit errors and want to rerun from where you failed, # use "if false","fi" to avoid rebuilding everything before # the error. # # A good point to place the "if false" is here. # # #DEBUG#if false; then #################################################### #DEBUG#fi ################################################################ mkdir -p $PREFIX/build cd $PREFIX/build # The problem with a git checkout is, that the perl build system does many things # differentily when is sees .git - e.g. run additional developer checks. #test -d perl || git clone https://perl5.git.perl.org/perl.git #cd perl #git checkout "v$VERSION" ; git reset --hard test -e perl-$VERSION.tar.gz || wget http://www.cpan.org/src/5.0/perl-$VERSION.tar.gz test -d perl-$VERSION || tar xf perl-$VERSION.tar.gz cd perl-$VERSION # -d : use defaults for all answers. # -e : go on without questioning past the production of config.sh. # -s : silent mode, only echoes questions and essential information. # -Dusedevel : allow devel (uneven minor) versions. Prevents bin/perl->bin/perlVERSION symlink # -Duseshrplib : build shared perl library (required when perl is to be included in a shared library) # -DEBUGGING : add debugging code (perl -D) # ./Configure -des -Duseshrplib -Dprefix=$PREFIX make -j$(nproc) # Note: If you get a failure in porting/utils test here, it might be, that we are # running cpan somewhere else which leads to an extra and unexpected "\n" being # emitted by CPAN.pm BEGIN and a failure of the test (which does "perl -c CPAN.pm") # make test make install cd $PREFIX; test -e $HOME/.cpan/CPAN/MyConfig.pm && rm $HOME/.cpan/CPAN/MyConfig.pm cpan</dev/null # Too many modules "recommend" stupid things like mod_perl # do not auto install recommended modules perl -MCPAN <<'_EOF_' CPAN::HandleConfig->load(); CPAN::Shell->o('conf','recommends_policy',0); CPAN::Shell->o('conf','commit'); _EOF_ cpan -u # update everything we already have # After the update we have a new ExtUtils::MakeMaker. # Patch this version to avoid stomping on a perl bug # We've got this when building net-snmp (down below). # Errors: # "panic: attempt to copy freed scalar" # "Bizarre copy of HASH in list assignment# # this is from perl bug: # https://rt.perl.org/Public/Bug/Display.html?id=77706 # triggered by ExtUtils::MakeMaker. # This patch prevents this # (cd lib/site_perl/$VERSION/ExtUtils; patch -N -p1 < /src/mariux/patches/MakeMaker-0001-MakeMaker.pm-Avoid-triggering-perl-bug.patch) || true # These two with -T (without test), because the tests are interactive and access /dev/tty # Do these first, because they are required by Bundle::CPAN # cpan -T Term::ReadLine::Perl cpan -T Term::ReadLine::Gnu # Now the rest of Bundle::CPAN first, so that we use latest code for the following # installations # cpan Bundle::CPAN # mod_perl (Apache::*, Bundle::Apache, mod_perl, modPerl_hooks) is broken. # Usually it wants Apache httpd source to compile and keeps asking for it forever if it # doesn't find it. # we could install it without Access to sources # perl -MCPAN <<'_EOF_' # CPAN::HandleConfig->load; # $CPAN::Config->{'makepl_arg'}='NO_HTTPD=1'; # CPAN::Shell->install('Apache'); # _EOF_ # but its broken anyway (needs a patch to compile against # current perl) and the version 1.* branch has not been updated # for a long time. leave it out and everything which depends on it #cpan Bundle::Apache # Tests for GD fail # The seventh image in den GD.t test looks slightly # different. Maybe small difference in TrueType font. # # Do it first, otherwise we are pulled by Chart::Base # cpan -T GD # Now modules (from autobundle of /usr/local/ installation and manual cleanup and some deduplication) # cpan AE cpan Algorithm::Diff cpan Algorithm::DiffOld cpan AnyEvent cpan AppConfig cpan Archive::Extract cpan Archive::Zip cpan Attribute::Params::Validate cpan Authen::SASL cpan B::Keywords cpan BerkeleyDB cpan Bit::Vector cpan CGI cpan CGI::Fast cpan CPAN::Admin cpan CPANPLUS cpan Cache::Memcached cpan Capture::Tiny cpan Carp::Clan cpan Chart::Base cpan Class::Accessor cpan Class::Data::Inheritable cpan Class::ISA cpan Class::Inspector cpan Class::Load cpan Class::Singleton cpan Class::Tiny PERL5LIB=".${PERL5LIB:+:$PERL5LIB}" cpan Class::Trigger cpan Clone cpan Config::General cpan Config::Tiny cpan Crypt::OpenSSL::RSA cpan Crypt::OpenSSL::Random cpan Crypt::RC4 PERL5LIB=".${PERL5LIB:+:$PERL5LIB}" cpan Crypt::SSLeay cpan DBD::SQLite cpan DBD::mysql cpan DBI cpan File::Flock # required by Daemon::Generic cpan Daemon::Generic cpan Data::Grove cpan Data::ObjectDriver cpan Data::OptList cpan Data::Stag cpan Date::Calendar cpan Date::Parse cpan Test::File::ShareDir::Dist # required by DateTime::Locale cpan DateTime::Locale # required by DateTime cpan DateTime cpan DateTime::Locale cpan DateTime::TimeZone cpan Devel::CheckLib cpan Devel::GlobalDestruction cpan Devel::InnerPackage cpan Devel::SelfStubber cpan Devel::StackTrace cpan Devel::StackTrace::AsHTML cpan Devel::Symdump cpan Device::SerialPort cpan Digest::HMAC cpan Digest::Perl::MD5 cpan Digest::SHA1 cpan Dist::CheckConflicts cpan Email::Abstract cpan Email::Address cpan Email::Date::Format cpan Email::FolderType cpan Email::LocalDelivery cpan Email::MIME cpan Email::MIME::Attachment::Stripper cpan Email::MIME::ContentType cpan Email::MIME::Encodings cpan Email::MessageID cpan Email::Outlook::Message cpan Email::Reply cpan Email::Send cpan Email::Simple cpan Encode::Detect cpan Encode::Locale cpan Eval::LineNumbers cpan Event cpan Exception::Class cpan ExtUtils::PkgConfig cpan FCGI cpan File::CheckTree cpan File::Copy::Recursive cpan -f IO::Event # for File::Flock cpan File::Flock cpan File::FnMatch cpan File::HomeDir cpan File::Listing cpan File::Path::Expand cpan File::Remove cpan File::ShareDir cpan File::Slurp cpan File::Which cpan Filesys::Notify::Simple cpan Filter::Util::Exec cpan Font::AFM cpan Font::TTF cpan GD::Graph cpan GD::Graph::histogram cpan GD::SVG cpan GD::Text cpan Glib cpan Graph cpan Graphics::ColorNames cpan Graphics::ColorObject cpan HTML::Tree cpan HTML::Parser cpan HTML::Form cpan HTML::Formatter cpan HTML::Scrubber cpan HTML::TableParser cpan HTML::Tagset cpan HTML::TreeBuilder cpan HTTP::Body cpan HTTP::Cookies cpan HTTP::DAV # note: tests fail if cpan build dir is on nfs cpan HTTP::Daemon cpan HTTP::Date cpan HTTP::Message cpan HTTP::Negotiate cpan HTTP::Server::Simple cpan Hash::MultiValue cpan Hook::LexWrap cpan IO::All cpan IO::CaptureOutput cpan IO::Multiplex cpan IO::Pty cpan IO::Socket::SSL cpan IO::String cpan IO::Stringy cpan IPC::Run cpan IPC::Run3 cpan Inline cpan Inline::C cpan JSON cpan JSON::PP::Compat5006 PERL5LIB=".${PERL5LIB:+:$PERL5LIB}" cpan Class::Accessor::Lite # required by JSON::RPC cpan JSON::RPC cpan JSON::XS cpan LWP cpan Lingua::EN::Inflect cpan Linux::Inotify2 PERL5LIB=".${PERL5LIB:+:$PERL5LIB}" cpan Linux::USBKeyboard cpan List::MoreUtils cpan Log::Message cpan Log::Log4perl cpan MIME::Tools cpan MRO::Compat cpan Mail::Box cpan Mail::Box::IMAP4 cpan Mail::Box::POP3 cpan Mail::DKIM cpan Mail::Util cpan Mail::IMAPClient cpan Mail::Identity cpan Mail::Message cpan Mail::Transport cpan Math::Bezier cpan Math::Calc::Units cpan Math::Interpolate cpan Math::IntervalSearch cpan Math::Random::ISAAC cpan Math::Random::ISAAC::PP cpan Math::Round cpan Math::VecStat cpan Module::Build cpan Module::Implementation cpan Module::Pluggable cpan Module::Runtime cpan Mojo cpan Mozilla::CA cpan Net::DNS cpan Net::HTTP cpan Net::IMAP::Client cpan Net::IMAP::Simple cpan Net::SNMP cpan Net::SSL cpan Net::SSLeay cpan Net::Server cpan NetAddr::IP cpan OLE::Storage_Lite cpan Object::Accessor cpan Object::Realize::Later cpan PDF::API2 cpan PDL cpan PPITerm::UI PERL5LIB=".${PERL5LIB:+:$PERL5LIB}" cpan PPI::Document # required by PPIx::Regexp PERL5LIB=".${PERL5LIB:+:$PERL5LIB}" cpan Task::Weaken # required by PPIx::Regexp cpan PPIx::Regexp cpan Package::Constants cpan Package::DeprecationManager cpan Package::Stash cpan Package::Stash::XS cpan Params::Util cpan Params::Validate cpan Parse::RecDescent cpan PatchReader cpan Path::FindDev cpan Path::FindDev::Object cpan Path::IsDev cpan Path::Tiny cpan Pegex cpan Perl::Critic cpan Perl::Tidy cpan Plack cpan Pod::Coverage cpan Pod::LaTeX cpan Pod::Plainer cpan Pod::Spell cpan Probe::Perl cpan Readonly cpan Regexp::Common cpan Return::Value cpan Role::Tiny cpan Router::Simple cpan SVG cpan Set::IntSpan cpan Shell cpan Spreadsheet::ParseExcel cpan Starlink::AST cpan Statistics::Descriptive cpan Statistics::Distributions cpan Stream::Buffered cpan String::CRC32 cpan String::Format cpan Sub::Exporter cpan Sub::Exporter::Progressive cpan Sub::Install cpan Sub::Uplevel cpan Switch cpan Task::Weaken cpan Template cpan Template::Plugin::GD cpan Term::UI cpan Test::Deep cpan Test::Differences cpan Test::Exception cpan Test::Fatal cpan Test::Inter cpan Test::Most cpan Test::NoWarnings cpan Test::Number::Delta cpan Test::Object cpan Test::Output cpan Test::Pod cpan Test::Pod::Coverage cpan Test::Requires cpan Test::Script cpan Test::SharedFork cpan Test::SubCalls cpan Test::TCP cpan -f Test::Taint # test sometimes fail, because Test::More sets untainted environment variable TEST_ACTIVE cpan Test::Warn cpan Test::YAML cpan Text::CSV cpan Text::Diff cpan Text::Format cpan Text::Soundex cpan TheSchwartz cpan Tie::DBI cpan Tie::RDBM cpan Tie::Watch cpan Time::Date cpan Time::Period cpan Tk cpan Tree::DAG_Node cpan Try::Tiny cpan URI cpan Unix::Syslog cpan User::Identity cpan Version::Requirements cpan WWW::Dict::Leo::Org cpan WWW::Mechanize cpan WWW::RobotRules cpan XML::DOM cpan XML::LibXML cpan XML::LibXSLT cpan XML::NamespaceSupport cpan XML::Parser cpan XML::Parser::Lite cpan XML::Quote cpan XML::RegExp cpan XML::SAX cpan XML::SAX::Base cpan XML::SAX::Expat cpan XML::Simple cpan XML::Twig cpan XML::XPath cpan YAML cpan YAML::LibYAML cpan common::sense cpan inc::latest cpan install cpan local::lib cpan Apache::SOAP cpan Date::Manip ( cd $PREFIX/build test -e Donald-1.05.tar.gz || wget https://github.molgen.mpg.de/donald/Donald/archive/1.05.tar.gz -O Donald-1.05.tar.gz test -d Donald-1.05 || tar xf Donald-1.05.tar.gz cd Donald-1.05 cpan . ) cpan PDL::Stats ( cd $PREFIX/build test -e Pcap-0.02.tar.gz || cp /home/buczek/build/Pcap/Pcap-0.02.tar.gz . test -d Pcap-0.02 || tar xf Pcap-0.02.tar.gz cd Pcap-0.02 cpan . ) ( cd $PREFIX/build test -e rrdtool-1.6.0.tar.gz || wget https://oss.oetiker.ch/rrdtool/pub/rrdtool-1.6.0.tar.gz test -d rrdtool-1.6.0 || tar xf rrdtool-1.6.0.tar.gz cd rrdtool-1.6.0 ./configure --prefix $PREFIX make -j $(nproc) cd bindings/perl-shared/ cpan . cd ../perl-piped cpan . ) # http://net-snmp.sourceforge.net/ (Net-SNMP : SNMP.pm, NetSNMP::*) # should match exact version of net-snmp packages # install everything here to avoid dependency. # # cpan has 5.0404 of Net-SNMP so use latest version from its home. # # If you get errors # "panic: attempt to copy freed scalar" # "Bizarre copy of HASH in list assignment# # this is from perl bug: # https://rt.perl.org/Public/Bug/Display.html?id=77706 # triggered by ExtUtils::MakeMaker. The patch # /src/mariux/patches/0001-Carp.pm-continue-with-screwed-up-perl-stack.patch # at the top of this file is there to prevent this. # ( cd $PREFIX/build test -e net-snmp-5.7.3.tar.gz || wget https://downloads.sourceforge.net/project/net-snmp/net-snmp/5.7.3/net-snmp-5.7.3.tar.gz test -d net-snmp-5.7.3 || tar xvf net-snmp-5.7.3.tar.gz cd net-snmp-5.7.3 patch -N -p1 < /src/mariux/patches/net-snmp-0001-Fix-incompatible-definitions-of-U64-type.patch || true ./configure --prefix $PREFIX # make -j sometimes fails "ranlib: .libs/libnetsnmpmibs.a: Malformed archive" make make install ) # Do bioperl last, because it doesn't declare all dependencies correctly # cpan Bio::Perl # cpan -T Bio::Biblio # "ERROR 11 Unable to connect to database [medline" instead of xml file from net cpan Bio::Coordinate #cpan Bio::Graphics::Browser2 # GBrowse - requires Bio::DB::Sam #cpan Bio::DB::Sam # Bio-SamTools 'Please enter the location of the bam.h and compiled libbam.a files' cpan -f XML::DOM::XPath # test fails , install anyway for Bio::FeatureIO cpan Bio::FeatureIO cpan Bio::Tools::EUtilities #cpan Bio::Tools::Run::StandAloneBlast # several tests fail - tools not available in required version #cpan Bio::Network::IO # tests fail (whatever) #still missing (found by: /home/buczek/libcheck/perlcompare.pl) # #Alien::SVN # Alien-SVN: wants SVN install, assumed obsolete #Apache::XMLRPC::Lite # SOAP-Lite-1.01 : obsolete #B::Lint* # B-Lint-1.20-0 : I dont think we need this #CGI::Apache # mod_perl - requires Apache source and asks for it endlessly #UDDI::Lite # 17 years old junk #XMLRPC* # XMLRPC-Lite: dont think we still need that # Devel::IPerl -> Markdown::Pod -> Markdent # Markdown::Pod (0.006) does not work with Markdent 0.27 or 0.28 because of this change: # https://github.com/houseabsolute/Markdent/commit/b570af7820aa2358263b5eaf403ec96674edfe58 # PERL5LIB=".${PERL5LIB:+:$PERL5LIB}" cpan ZMQ::Constants # for Devel::IPerl PERL5LIB=".${PERL5LIB:+:$PERL5LIB}" cpan ZMQ::LibZMQ3 # for Devel::IPerl cpan DROLSKY/Markdent-0.26.tar.gz # required by Devel::IPerl - Markdown::Pod -> Markdent. cpan ZMUGHAL/Devel-IPerl-0.008.tar.gz # Devel::IPerl 0.009 requires ZMUGHAL/Net-Async-ZMQ which blocks during test #cpan Devel::IPerl cpan Text::NSP # galonska 29.01.2018 -> helpdesk exit