# Copyright 2017 The Bazel Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""package_names.bzl contains definitions of functions that return lists of package names.

This includes all package names for a given distro (i.e., def
<distro>_package_names) as well as private defs defining all packages for a
given tool (a tool requires several packages to be installed). This file also
contains a struct with the names of all tools. Lastly, this file defines a map
from tools to package names for each distro (i.e., def <distro>_tools()).
"""

tool_names = struct(
    bazel = "bazel",
    binutils = "binutils",
    curl = "curl",
    ed = "ed",
    file = "file",
    gcc = "gcc",
    git = "git",
    java = "java",
    java_no_ca_certs = "java_no_ca_certs",
    lib_cpp = "lib_cpp",
    openssh_client = "openssh_client",
    python3_dev = "python3_dev",
    python3_numpy = "python3_numpy",
    python3_pip = "python3_pip",
    python_dev = "python_dev",
    python_numpy = "python_numpy",
    python_pip = "python_pip",
    wget = "wget",
    zip = "zip",
)

def jessie_tools():
  return {
      tool_names.binutils: _jessie_binutils_package_names(),
      tool_names.curl: _jessie_curl_package_names(),
      tool_names.ed: _jessie_ed_package_names(),
      tool_names.file: _jessie_file_package_names(),
      tool_names.gcc: _jessie_gcc_package_names(),
      tool_names.git: _jessie_git_package_names(),
      tool_names.java: _jessie_java_package_names(),
      tool_names.java_no_ca_certs: _jessie_java_no_ca_certs_package_names(),
      tool_names.lib_cpp: _jessie_lib_cpp_package_names(),
      tool_names.openssh_client: _jessie_openssh_client_package_names(),
      tool_names.python_dev: _jessie_python_dev_package_names(),
      tool_names.python_numpy: _jessie_python_numpy_package_names(),
      tool_names.python_pip: _jessie_python_pip_package_names(),
      tool_names.python3_dev: _jessie_python3_dev_package_names(),
      tool_names.python3_numpy: _jessie_python3_numpy_package_names(),
      tool_names.python3_pip: _jessie_python3_pip_package_names(),
      tool_names.wget: _jessie_wget_package_names(),
      tool_names.zip: _zip_package_names(),
  }

def jessie_package_names():
  return _package_names(jessie_tools)

def _package_names(tools):
  packages = []
  for tool in tools().values():
    packages.extend(tool)
  return depset(packages).to_list()

def _jessie_binutils_package_names():
  return [
      "binutils",
  ]

def _jessie_curl_package_names():
  return [
      "curl",
      "libcurl3",
      "libffi6",
      "libgmp10",
      "libgnutls-deb0-28",
      "libgssapi-krb5-2",
      "libhogweed2",
      "libidn11",
      "libk5crypto3",
      "libkeyutils1",
      "libkrb5-3",
      "libkrb5support0",
      "libldap-2.4-2",
      "libnettle4",
      "libp11-kit0",
      "librtmp1",
      "libsasl2-2",
      "libsasl2-modules-db",
      "libssh2-1",
      "libtasn1-6",
  ]

def _jessie_gcc_package_names():
  return [
      "binutils",
      "cpp",
      "cpp-4.9",
      "g++",
      "g++-4.9",
      "gcc",
      "gcc-4.9",
      "libasan1",
      "libatomic1",
      "libc-dev-bin",
      "libc6-dev",
      "libcilkrts5",
      "libcloog-isl4",
      "libgcc-4.9-dev",
      "libgmp10",
      "libgomp1",
      "libisl10",
      "libitm1",
      "liblsan0",
      "libmpc3",
      "libmpfr4",
      "libquadmath0",
      "libstdc++-4.9-dev",
      "libtsan0",
      "libubsan0",
      "linux-libc-dev",
  ]

def _jessie_ed_package_names():
  return [
      "ed",
  ]

def _jessie_file_package_names():
  return [
      "file",
      "libmagic1",
  ]

def _jessie_git_package_names():
  return [
      "git",
      "git-man",
      "libcurl3-gnutls",
      "liberror-perl",
      "libexpat1",
      "libffi6",
      "libgdbm3",
      "libgmp10",
      "libgnutls-deb0-28",
      "libgssapi-krb5-2",
      "libhogweed2",
      "libidn11",
      "libk5crypto3",
      "libkeyutils1",
      "libkrb5-3",
      "libkrb5support0",
      "libldap-2.4-2",
      "libnettle4",
      "libp11-kit0",
      "librtmp1",
      "libsasl2-2",
      "libsasl2-modules-db",
      "libssh2-1",
      "libtasn1-6",
      "perl",
      "perl-modules",
      # Though not strictly required, we get a 'Problem with the SSL CA cert'
      # errror w/o these packages
      "ca-certificates",
      "libssl1.0.0",
      "openssl",
  ]

def _jessie_java_no_ca_certs_package_names():
  return [
      "fontconfig-config",
      "fonts-dejavu-core",
      "java-common",
      "libavahi-client3",
      "libavahi-common-data",
      "libavahi-common3",
      "libcups2",
      "libdbus-1-3",
      "libexpat1",
      "libffi6",
      "libfontconfig1",
      "libfreetype6",
      "libgmp10",
      "libgnutls-deb0-28",
      "libgssapi-krb5-2",
      "libhogweed2",
      "libjpeg62-turbo",
      "libk5crypto3",
      "libkeyutils1",
      "libkrb5-3",
      "libkrb5support0",
      "liblcms2-2",
      "libnettle4",
      "libnspr4",
      "libnss3",
      "libp11-kit0",
      "libpcsclite1",
      "libpng12-0",
      "libsqlite3-0",
      "libtasn1-6",
      "libx11-6",
      "libx11-data",
      "libxau6",
      "libxcb1",
      "libxdmcp6",
      "libxext6",
      "libxi6",
      "libxrender1",
      "libxtst6",
      "openjdk-8-jdk-headless",
      "openjdk-8-jre-headless",
      "ucf",
      "x11-common",
      "zlib1g",
  ]

def _jessie_java_package_names():
  return _jessie_java_no_ca_certs_package_names() + ["ca-certificates-java"]

def _jessie_lib_cpp_package_names():
  return [
      "libasan1",
      "libatomic1",
      "libc-dev-bin",
      "libc6-dev",
      "libcilkrts5",
      "libgcc-4.9-dev",
      "libgomp1",
      "libitm1",
      "liblsan0",
      "libquadmath0",
      "libstdc++-4.9-dev",
      "libtsan0",
      "libubsan0",
      "linux-libc-dev",
  ]

def _jessie_openssh_client_package_names():
  return [
      "libbsd0",
      "libedit2",
      "libgssapi-krb5-2",
      "libk5crypto3",
      "libkeyutils1",
      "libkrb5-3",
      "libkrb5support0",
      "openssh-client",
  ]

def _jessie_python3_dev_package_names():
  return [
      "dh-python",
      "libc-dev-bin",
      "libc6-dev",
      "libexpat1",
      "libexpat1-dev",
      "libffi6",
      "libmpdec2",
      "libpython3-dev",
      "libpython3-stdlib",
      "libpython3.4",
      "libpython3.4-dev",
      "libpython3.4-minimal",
      "libpython3.4-stdlib",
      "libsqlite3-0",
      "linux-libc-dev",
      "mime-support",
      "python3",
      "python3-dev",
      "python3-minimal",
      "python3.4",
      "python3.4-dev",
      "python3.4-minimal",
  ]

def _jessie_python3_numpy_package_names():
  return [
      "dh-python",
      "libblas-common",
      "libblas3",
      "libexpat1",
      "libffi6",
      "libgfortran3",
      "liblapack3",
      "libmpdec2",
      "libpython3-stdlib",
      "libpython3.4-minimal",
      "libpython3.4-stdlib",
      "libquadmath0",
      "libsqlite3-0",
      "mime-support",
      "python3",
      "python3-minimal",
      "python3-numpy",
      "python3.4",
      "python3.4-minimal",
  ]

def _jessie_python3_pip_package_names():
  return [
      "dh-python",
      "libexpat1",
      "libffi6",
      "libmpdec2",
      "libpython3-stdlib",
      "libpython3.4-minimal",
      "libpython3.4-stdlib",
      "libsqlite3-0",
      "mime-support",
      "python3",
      "python3-chardet",
      "python3-colorama",
      "python3-distlib",
      "python3-html5lib",
      "python3-minimal",
      "python3-pip",
      "python3-pkg-resources",
      "python3-requests",
      "python3-setuptools",
      "python3-six",
      "python3-urllib3",
      "python3.4",
      "python3.4-minimal",
  ]

def _jessie_python_dev_package_names():
  return [
      "libc-dev-bin",
      "libc6-dev",
      "libexpat1",
      "libexpat1-dev",
      "libffi6",
      "libpython-dev",
      "libpython-stdlib",
      "libpython2.7",
      "libpython2.7-dev",
      "libpython2.7-minimal",
      "libpython2.7-stdlib",
      "libsqlite3-0",
      "linux-libc-dev",
      "mime-support",
      "python",
      "python-dev",
      "python-minimal",
      "python2.7",
      "python2.7-dev",
      "python2.7-minimal",
  ]

def _jessie_python_pip_package_names():
  return [
      "libexpat1",
      "libffi6",
      "libpython-stdlib",
      "libpython2.7-minimal",
      "libpython2.7-stdlib",
      "libsqlite3-0",
      "mime-support",
      "python",
      "python-chardet",
      "python-colorama",
      "python-distlib",
      "python-html5lib",
      "python-minimal",
      "python-pip",
      "python-pkg-resources",
      "python-requests",
      "python-setuptools",
      "python-six",
      "python-urllib3",
      "python2.7",
      "python2.7-minimal",
  ]

def _jessie_python_numpy_package_names():
  return [
      "libblas-common",
      "libblas3",
      "libexpat1",
      "libffi6",
      "libgfortran3",
      "liblapack3",
      "libpython-stdlib",
      "libpython2.7-minimal",
      "libpython2.7-stdlib",
      "libquadmath0",
      "libsqlite3-0",
      "mime-support",
      "python",
      "python-minimal",
      "python-numpy",
      "python2.7",
      "python2.7-minimal",
  ]

def _jessie_wget_package_names():
  return [
      "libffi6",
      "libgmp10",
      "libgnutls-deb0-28",
      "libhogweed2",
      "libicu52",
      "libidn11",
      "libnettle4",
      "libp11-kit0",
      "libpsl0",
      "libtasn1-6",
      "wget",
      # Needed for cert validation done by wget
      "ca-certificates",
      "libssl1.0.0",
      "openssl",
  ]

def _zip_package_names():
  return [
      "zip",
      "unzip",
  ]
