Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
pkg-scripts/perl-5.34.0-0.build.sh
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
executable file
600 lines (544 sloc)
16.2 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /bin/bash | |
PKG=perl | |
VERSION=5.34.0 | |
BUILD=0 | |
PREFIX=/pkg/$PKG-$VERSION-$BUILD | |
if [ -n "$TESTING" ]; then PREFIX=/dev/shm/$PKG-$VERSION-$BUILD ; fi | |
PATH=/bin:/usr/bin:/usr/sbin:/usr/local/bin | |
set -xe | |
umask 022 | |
BUILD_TMPDIR=/dev/shm/$PKG-$VERSION-$BUILD.$USER.build.tmp | |
test -d $BUILD_TMPDIR && rm -rf $BUILD_TMPDIR | |
mkdir -p $BUILD_TMPDIR/home | |
export TMPDIR=$BUILD_TMPDIR | |
export HOME=$BUILD_TMPDIR/home | |
exec </dev/null | |
if [ -n "$REMOVE_BUILD_RELICTS" -a -d "$PREFIX" ]; 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 | |
if [ -d $PREFIX/.compatlibs ]; then export LD_LIBRARY_PATH=$PREFIX/.compatlibs\${LD_LIBRARY_PATH:+:\$LD_LIBRARY_PATH} ; fi | |
EOF | |
. $PREFIX/profile | |
# Tk test needs display | |
# | |
if [ -z "$DISPLAY" ]; then | |
echo "DISPLAY not set. Required for Tk tests." >&2 | |
exit 1 | |
fi | |
# 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. | |
# | |
# Just uncomment and move the "fi" line to where | |
# you want to restart. | |
# | |
#if false; then ######################################################### DEBUG | |
#fi ######################################################### DEBUG | |
export MAKEFLAGS="-j $(nproc)" | |
BUILDDIR=$PREFIX/build | |
mkdir -p $BUILDDIR | |
cd $BUILDDIR | |
# | |
# BerkeleyDB has left the Mariux(tm) core. Perl itself can do without, but some | |
# good old modules won't (BioPerl and maybe some more). | |
# | |
BEEHIVE=https://beehive.molgen.mpg.de/de18e52d5ec52489621cbab083858484/db-4.8.30.tar.xz | |
test -e db-4.8.30.tar.xz || wget -nv $BEEHIVE | |
test -d db-4.8.30 || tar xf db-4.8.30.tar.xz | |
cd db-4.8.30 | |
mkdir build-dir | |
cd build-dir | |
CFLAGS="-O2 -fPIC" ../dist/configure --prefix=$PREFIX --enable-shared=yes --enable-compat185 | |
make -j$(nproc) | |
make install_include install_lib # skiping: install_utilities install_doc | |
cd $BUILDDIR | |
# 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 | |
# orig: http://www.cpan.org/src/5.0/perl-$VERSION.tar.gz | |
BEEHIVE=https://beehive.molgen.mpg.de/2acf2ef147e41730e572251ed079bc1a/perl-5.34.0.tar.gz | |
test -e perl-$VERSION.tar.gz || wget -nv $BEEHIVE | |
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) | |
# | |
# -Dlocincpth, -Dloclibpth, -Aldflags : the usual args to make a build aware of 'non-standard' locations | |
# | |
# If after all this time you still don't trust threads, remove | |
# -Dusethreads, -Duseithreads | |
# | |
./Configure \ | |
-des \ | |
-Dprefix=$PREFIX \ | |
-Duseithreads \ | |
-Duseshrplib \ | |
-Dusethreads \ | |
-Dlocincpth=$PREFIX/include \ | |
-Dloclibpth=$PREFIX/lib \ | |
-Aldflags="-Wl,-rpath=$PREFIX/lib" | |
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 | |
# also make cpan.metacpan.org known, access to 'BackPAN' likes to have this one | |
perl -MCPAN <<'_EOF_' | |
CPAN::HandleConfig->load(); | |
CPAN::Shell->o('conf','recommends_policy',0); | |
CPAN::Shell->o('conf','urllist','push','https://cpan.metacpan.org/'); | |
CPAN::Shell->o('conf','commit'); | |
_EOF_ | |
# A test in 'Math::BigInt' goes dreaming (in the current version)... | |
cpan -T bignum | |
cpan -u # update everything we already have | |
# 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 | |
cpan Log::Log4perl # many module tests request this. | |
# 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 | |
# Cache::Memcached has some strange timing tests which fail from time to time | |
# | |
cpan -T 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 -T Crypt::SSLeay | |
cpan DBD::SQLite | |
cpan DBD::mysql | |
cpan DBI | |
cpan File::Flock # required by Daemon::Generic | |
cpan Daemon::Generic | |
cpan Data::ObjectDriver | |
cpan Data::OptList | |
cpan Data::Stag | |
cpan Date::Calendar | |
cpan Date::Parse | |
PERL5LIB=".${PERL5LIB:+:$PERL5LIB}" cpan Test::utf8 # required by Test::File::ShareDir::Dist | |
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 | |
cpan GD::Graph | |
cpan GD::Graph::histogram | |
cpan GD::SVG | |
cpan GD::Text | |
cpan Glib | |
cpan Graph | |
cpan Graphics::ColorNames | |
cpan Graphics::ColorNames::HTML | |
cpan Graphics::ColorNames::Windows | |
cpan Graphics::ColorNames::Netscape | |
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::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 | |
# HTTP::Headers::Fast t/lazy_load_for_storable.t want to verify that | |
# Storable is not loaded right away, but it is pulled in from Test::More | |
# | |
cpan -T HTTP::Headers::Fast; # required by JSON::RPC | |
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 # unmaintained! BZAJAC/Math-Interpolate-1.06.tar.gz MakeMaker FATAL: MIN_PERL_VERSION (5.004_01) is not in a recognized format. | |
# 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 | |
# PDL: fallback to an installable version. | |
# changelog: 2.048 2021-05-24 -> 'drop SKIP_KNOWN_PROBLEMS support', | |
# 'drop POGL_VERSION, USE_POGL, WITH_3D config; just try building' | |
# MAKEFLAGS= cpan PDL # fails due to an unbuildable OpenGL dependency | |
# "My way, or the highway." :) | |
cpan ETJ/PDL-2.021.tar.gz | |
cpan ETJ/PDL-Stats-0.76.tar.gz | |
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 # dies because of too much new Astro-dependencies ... | |
cpan Statistics::Basic # HD 2021-09-02: J. Handzlik | |
( # to find R -- sigh! | |
PATH=$PATH:/usr/local/package/bin | |
cpan Statistics::R # -- " -- | |
) | |
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 Time::Date | |
cpan Time::Period | |
cpan Tk | |
cpan Tie::Watch | |
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 Date::Manip | |
( | |
cd $PREFIX/build | |
test -e Donald-1.05.tar.gz || wget -nv 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 . | |
) | |
# fi ######################################################### DEBUG | |
( | |
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 -nv 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 . | |
) | |
( | |
cd $PREFIX/build | |
test -e net-snmp-5.9.1.tar.gz || wget -nv https://downloads.sourceforge.net/project/net-snmp/net-snmp/5.9.1/net-snmp-5.9.1.tar.gz | |
test -d net-snmp-5.9.1 || tar xvf net-snmp-5.9.1.tar.gz | |
cd net-snmp-5.9.1 | |
# patch -N -p1 < /src/mariux/patches/net-snmp-0001-Fix-incompatible-definitions-of-U64-type.patch || true # xxx | |
./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 | |
#Apache::SOAP # depends on Apache | |
# 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 | |
cpan Excel::Writer::XLSX # klages 20.03.2018, helpdesk | |
# defeat "Can't locate Makefile.PL in @INC", when Build.PL is used | |
PERL5LIB=".${PERL5LIB:+:$PERL5LIB}" cpan Convert::Morse # serious fun, kreitler | |
cpan Math::Amoeba # Multidimensional Function Minimisation (oldie but goldie:), kreitler | |
cpan Crypt::OpenSSL::PBKDF2 # some more crypto stuff, kreitler | |
cpan Crypt::OpenSSL::AES | |
cpan Crypt::Blowfish | |
cpan Crypt::Blowfish_PP | |
cpan Crypt::CAST5 | |
cpan Crypt::DES | |
cpan Crypt::TripleDES | |
cpan Crypt::TripleDES::CBC | |
cpan Crypt::IDEA | |
cpan Crypt::Rijndael | |
cpan Crypt::CBC | |
cpan Crypt::MCrypt | |
cpan Digest::MD4 | |
cpan OpenOffice::OODoc # The Open OpenDocument Connector | |
cpan Hash::Merge # These are wanted by the GA-Braker pipeline | |
cpan MCE::Mutex # HD: G. Wang 2021-04-12 | |
cpan Math::Utils | |
cpan Module::Load::Conditional | |
cpan Parallel::ForkManager | |
cpan Scalar::Util::Numeric | |
cpan threads | |
cpan App::cpanminus # mean and lean installer, simpler to use by casual users | |
cpan Data::Grove # from xml-perl. Has some dependency issues, put at end | |
exit |