# Configurations for a Debian build server. Does *not* setup any chroot
# environments.  For that you need to use su_debuild::chroot.
#
# Furthermore, sudo...

class su_debuild {

  ### PACKAGES ###
  # Pin some packages to Debian jessie-backports.
  if ($::lsbdistcodename == 'jessie') {
    file {
      '/etc/apt/preferences.d/debian-build':
        ensure => present,
        source => 'puppet:///modules/su_debuild/etc/apt/preferences.d/debian-build.jessie',
        mode   => '0644',
        notify => Exec['apt-get_update_debuild_jessie'];
    }

    # Triggered to refresh local package lists.
    exec { 'apt-get_update_debuild_jessie':
      command     => 'apt-get update',
      refreshonly => true,
    }
  }

  # Packages needed for package building. Add ant here because although we
  # don't need it in general on all development systems, but it's useful
  # for some Debian packages. We don't install reprepro in case it is
  # installed via su_debian_archive.
  $packages_to_install = [
    'alien',
    'ant',
    'apt-file',
    'build-essential',
    'dash',
    'debhelper',
    'debmake',
    'devscripts',
    'devscripts-el',
    'dh-autoreconf',
    'dh-make',
    'diffstat',
    'dkms',
    'dpatch',
    'dpkg-dev-el',
    'dput',
    'fakeroot',
    'gem2deb',
    'git',
    'git-buildpackage',
    'gitk',
    'gnupg',
    'javahelper',
    'libcurl4-openssl-dev',
    'libkrb5-dev',
    'libparse-debcontrol-perl',
    'libremctl-dev',
    'libssl-dev',
    'lintian',
    'manpages-dev',
    'module-assistant',
    'openafs-modules-source',
    'patchutils',
    'php-cli',
    'pinentry-curses',
    'pristine-tar',
    'quilt',
    'reportbug',
    'w3m',
  ]

  package { 'gnupg-agent':
    ensure  => installed,
    require => Package['pinentry-curses'];
  }

  # Distribution-specific packages.
  # maven: maven2 only supported on wheezy and jessie (EOL'ed in 2014)
  case ($::lsbdistcodename) {
    'jessie': {
      package {
        'apache2-dev': ensure => installed;
        'maven2':      ensure => installed;
      }
    }
    'stretch': {
      package {
        'apache2-dev': ensure => installed;
        'maven':       ensure => installed;
      }
    }
    default: {
      crit("unknown distribution ${::lsbdistcodename}")
    }
  }

  ## Install ubuntu-archive-keyring

  # We add the Ubuntu keyring in case we want to build Ubuntu packages.
  package {'ubuntu-archive-keyring': ensure => installed }

  # Additional packages to build kernel modules.
  case $::lsbdistcodename {
    'jessie': {
      package {
        'linux-headers-3.16.0-4-all': ensure => installed;
      }
    }
    'stretch': {
      package {
        'linux-headers-amd64': ensure => installed;
      }
    }
    default: {
      crit("unknown distribution ${::lsbdistcodename}")
    }
  }

  # Configuration and cache directory for Maven.
  if ($::lsbdistcodename == 'jessie') {
    # MAVEN2
    file {
      '/etc/maven2/settings.xml':
        source  => 'puppet:///modules/su_debuild/etc/maven2/settings.xml',
        require => Package['maven2'];
      '/srv/maven':
        ensure  => directory,
        mode    => '02775';
    }
  } else {
    # MAVEN3
    file {
      '/etc/maven/settings.xml':
        source  => 'puppet:///modules/su_debuild/etc/maven/settings.xml',
        require => Package['maven'];
      '/srv/maven':
        ensure  => directory,
        mode    => '02775';
    }
  }

  # Add a deb-src configuration for unstable so that we can easily download
  # packages for inspection and backporting.
  file { '/etc/apt/sources.list.d/src-sid.list':
    source => 'puppet:///modules/su_debuild/etc/apt/sources.list.d/src-sid.list',
  }


  ### PBUILDER ###
  # Basic configuration for pbuilder. Note that pbuild and pbuilder
  # are not useful without chroot environments (see su_debuild::chroots).
  file { '/etc/pbuilderrc':
    source => 'puppet:///modules/su_debuild/etc/pbuilderrc',
  }

  # Cron job to update the apt-file database nightly.
  file { '/etc/cron.daily/apt-file-update':
    source => 'puppet:///modules/su_debuild/etc/cron.daily/apt-file-update',
    mode   => '0755',
  }
}