ARG DEBIAN_RELEASE
FROM sdvharbor.slub-dresden.de/replication/debian:${DEBIAN_RELEASE}-slim

# Do NOT delete "ARG DEBIAN_RELEASE" line, it's needed because of 
# https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact
ARG DEBIAN_RELEASE
ARG GITDIR
ENV DEBIAN_FRONTEND=noninteractive
ENV EXTDPKG="extdpkg"
ENV EXTLIB="/usr/local/perl5/"
ENV PERL5LIB="$EXTLIB/lib/perl5/:lib"
ENV PATH="$PATH:$EXTLIB/bin"
ENV PERL_CPANM_HOME="/cpanm/"

RUN apt-get update; \
    apt-get -y upgrade; \
    apt-get install -y --no-install-recommends gnupg wget; \
    wget -O - http://sdvdebianrepo.slub-dresden.de/deb-repository/pub.gpg.key | apt-key add - ; \
    echo "deb http://sdvdebianrepo.slub-dresden.de/deb-repository "${DEBIAN_RELEASE}" main" > /etc/apt/sources.list.d/slub.list;

RUN if [ -f /etc/apt/sources.list ]; then \
      sed -i -e "s/^\(\(deb\|Components\).*main\( contrib\)\?\)$/\1 non-free/g" /etc/apt/sources.list; \
      cat /etc/apt/sources.list; \
    fi
RUN find /etc/apt/sources.list.d/ -type f -exec sed -i -e "s/^\(\(deb\|Components\).*main\( contrib\)\?\)$/\1 non-free/g" \{\} \; ; \
    find /etc/apt/sources.list.d/ -type f -exec cat \{\} \; ;


RUN apt-get update; \
    apt-get install -y --no-install-recommends \
      apt-file \
      apt-utils \
      asciidoc-base \
      asciidoctor \
      bash \
      build-essential \
      coreutils \
      cpanminus \
      dh-make-perl\
      git \
      libc-dev-bin \
      libc6-dev \
      libperl-prereqscanner-perl \
      libperl-version-perl \
      libsoap-lite-perl \
      libsys-cpu-perl \
      && rm -rf /var/lib/apt/lists/* \
    ;
# dh-make-perl löst über apt-file Datenbank das Perl-Modul auf
# RUN apt-file update;

RUN mkdir -p "$EXTLIB"
RUN mkdir -p "$PERL_CPANM_HOME"
RUN cpanm -L "$EXTLIB" --notest --verbose --no-interactive \
      Pod::Autopod \
      Test::Retry \
      Perl::Critic::Policy::Compatibility::PerlMinimumVersionAndWhy \
      Perl::Critic::Policy::Miscellanea::RequireRcsKeywords \
      Perl::Critic::Policy::Subroutines::ProhibitCallsToUndeclaredSubs \
      Perl::Critic::Policy::Subroutines::ProhibitCallsToUnexportedSubs \
      Perl::Critic::Policy::ValuesAndExpressions::ProhibitFiletest_f \
      Perl::Critic::Policy::Bangs::ProhibitDebuggingModules \
      Perl::Critic::Policy::Bangs::ProhibitNumberedNames \
      Perl::Critic::Policy::CognitiveComplexity::ProhibitExcessCognitiveComplexity \
      Perl::Critic::Policy::Compatibility::PodMinimumVersion \
      Perl::Critic::Policy::CompileTime \
      Perl::Critic::Policy::Modules::RequireExplicitInclusion \
      Perl::Critic::Policy::Moose::ProhibitDESTROYMethod \
      Perl::Critic::Policy::Moose::ProhibitLazyBuild \
      Perl::Critic::Policy::Moose::ProhibitMultipleWiths \
      Perl::Critic::Policy::Moose::ProhibitNewMethod \
      Perl::Critic::Policy::Moose::RequireCleanNamespace \
      Perl::Critic::Policy::Moose::RequireMakeImmutable \
      Perl::Critic::Policy::Perlsecret \
      Perl::Critic::Policy::TooMuchCode::ProhibitDuplicateLiteral \
      Perl::Critic::Policy::TooMuchCode::ProhibitLargeBlock \
      Perl::Critic::Policy::TooMuchCode::ProhibitUnnecessaryUTF8Pragma \
      Perl::Critic::Policy::TooMuchCode::ProhibitUnusedImport \
      Perl::Critic::Policy::ValuesAndExpressions::RestrictLongStrings \
      Perl::Critic::Policy::Variables::ProhibitLoopOnHash \
      Perl::Critic::Policy::Compatibility::PerlMinimumVersionAndWhy \
      Perl::Critic::Policy::Miscellanea::RequireRcsKeywords \
      Perl::Critic::Policy::Subroutines::ProhibitCallsToUndeclaredSubs \
      Perl::Critic::Policy::Subroutines::ProhibitCallsToUnexportedSubs \
      Perl::Critic::Policy::ValuesAndExpressions::ProhibitFiletest_f \
      Perl::Critic::Policy::Bangs::ProhibitDebuggingModules \
      Perl::Critic::Policy::Bangs::ProhibitNumberedNames \
      Perl::Critic::Policy::CognitiveComplexity::ProhibitExcessCognitiveComplexity \
      Perl::Critic::Policy::Compatibility::PodMinimumVersion \
      Perl::Critic::Policy::CompileTime \
      Perl::Critic::Policy::Modules::RequireExplicitInclusion \
      Perl::Critic::Policy::Moose::ProhibitDESTROYMethod \
      Perl::Critic::Policy::Moose::ProhibitLazyBuild \
      Perl::Critic::Policy::Moose::ProhibitMultipleWiths \
      Perl::Critic::Policy::Moose::ProhibitNewMethod \
      Perl::Critic::Policy::Moose::RequireCleanNamespace \
      Perl::Critic::Policy::Moose::RequireMakeImmutable \
      Perl::Critic::Policy::Perlsecret \
      Perl::Critic::Policy::TooMuchCode::ProhibitDuplicateLiteral \
      Perl::Critic::Policy::TooMuchCode::ProhibitLargeBlock \
      Perl::Critic::Policy::TooMuchCode::ProhibitUnnecessaryUTF8Pragma \
      Perl::Critic::Policy::TooMuchCode::ProhibitUnusedImport \
      Perl::Critic::Policy::ValuesAndExpressions::RestrictLongStrings \
      Perl::Critic::Policy::Variables::ProhibitLoopOnHash \
      Perl::Critic::Policy::Compatibility::PerlMinimumVersionAndWhy \
      Perl::Critic::Policy::Miscellanea::RequireRcsKeywords \
      Perl::Critic::Policy::Subroutines::ProhibitCallsToUndeclaredSubs \
      Perl::Critic::Policy::Subroutines::ProhibitCallsToUnexportedSubs \
      Perl::Critic::Policy::ValuesAndExpressions::ProhibitFiletest_f \
      Perl::Critic::Policy::Bangs::ProhibitDebuggingModules \
      Perl::Critic::Policy::Bangs::ProhibitNumberedNames \
      Perl::Critic::Policy::CognitiveComplexity::ProhibitExcessCognitiveComplexity \
      Perl::Critic::Policy::Compatibility::PodMinimumVersion \
      Perl::Critic::Policy::CompileTime \
      Perl::Critic::Policy::Modules::RequireExplicitInclusion \
      Perl::Critic::Policy::Moose::ProhibitDESTROYMethod \
      Perl::Critic::Policy::Moose::ProhibitLazyBuild \
      Perl::Critic::Policy::Moose::ProhibitMultipleWiths \
      Perl::Critic::Policy::Moose::ProhibitNewMethod \
      Perl::Critic::Policy::Moose::RequireCleanNamespace \
      Perl::Critic::Policy::Moose::RequireMakeImmutable \
      Perl::Critic::Policy::Perlsecret \
      Perl::Critic::Policy::TooMuchCode::ProhibitDuplicateLiteral \
      Perl::Critic::Policy::TooMuchCode::ProhibitLargeBlock \
      Perl::Critic::Policy::TooMuchCode::ProhibitUnnecessaryUTF8Pragma \
      Perl::Critic::Policy::TooMuchCode::ProhibitUnusedImport \
      Perl::Critic::Policy::ValuesAndExpressions::RestrictLongStrings \
      Perl::Critic::Policy::Variables::ProhibitLoopOnHash \
      Perl::Critic::Policy::Compatibility::PerlMinimumVersionAndWhy \
      Perl::Critic::Policy::Miscellanea::RequireRcsKeywords \
      Perl::Critic::Policy::Subroutines::ProhibitCallsToUndeclaredSubs \
      Perl::Critic::Policy::Subroutines::ProhibitCallsToUnexportedSubs \
      Perl::Critic::Policy::ValuesAndExpressions::ProhibitFiletest_f \
      Perl::Critic::Policy::Bangs::ProhibitDebuggingModules \
      Perl::Critic::Policy::Bangs::ProhibitNumberedNames \
      Perl::Critic::Policy::CognitiveComplexity::ProhibitExcessCognitiveComplexity \
      Perl::Critic::Policy::Compatibility::PodMinimumVersion \
      Perl::Critic::Policy::CompileTime \
      Perl::Critic::Policy::Modules::RequireExplicitInclusion \
      Perl::Critic::Policy::Moose::ProhibitDESTROYMethod \
      Perl::Critic::Policy::Moose::ProhibitLazyBuild \
      Perl::Critic::Policy::Moose::ProhibitMultipleWiths \
      Perl::Critic::Policy::Moose::ProhibitNewMethod \
      Perl::Critic::Policy::Moose::RequireCleanNamespace \
      Perl::Critic::Policy::Moose::RequireMakeImmutable \
      Perl::Critic::Policy::Perlsecret \
      Perl::Critic::Policy::TooMuchCode::ProhibitDuplicateLiteral \
      Perl::Critic::Policy::TooMuchCode::ProhibitLargeBlock \
      Perl::Critic::Policy::TooMuchCode::ProhibitUnnecessaryUTF8Pragma \
      Perl::Critic::Policy::TooMuchCode::ProhibitUnusedImport \
      Perl::Critic::Policy::ValuesAndExpressions::RestrictLongStrings \
      Perl::Critic::Policy::Variables::ProhibitLoopOnHash \
      && rm -Rf $PERL_CPANM_HOME/work/* \
    ;

WORKDIR ${GITDIR}
