# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/chrome_build.gni")
import("//build/config/features.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//build/config/sysroot.gni")
import("//build/util/process_version.gni")
import("//build/util/version.gni")
import("//chrome/process_version_rc_template.gni")  # For branding_file_path.

if (current_cpu == "x86" || current_cpu == "x64") {
  import("//media/cdm/ppapi/cdm_paths.gni")
}

assert(is_linux)

# This target builds all "normal" Linux installers.
#
# The bot setup is to build stable, unstable, and beta packages for the current
# build. Then a later step picks up the package corresponding to what the
# current build is supposed to be. This is wasteful since one build will only
# be one of these. This build file also has targets for trunk and possibly asan
# installers.
#
# TODO it would be much nicer to have a build variable so the bot can tell us
# what the current build should be, so we only have to make one .deb/.rpm pair.
#
#
# TO BUILD LINUX INSTALLER PACKAGES
#
# The packages list the exact versions of each library used. The versions used
# on the bots are likely different than those on your workstation, so you'll
# get a stream of errors like:
#   < libasound2 (>= 1.0.23)
#   ---
#   > libasound2 (>= 1.0.16)
#
# To avoid these warnings for testing purposes, do:
#
#   export IGNORE_DEPS_CHANGES=1
#
# before you build.
group("linux") {
  deps = [
    ":beta",
    ":stable",
    ":unstable",
  ]
}

# This target is provided for compatibility w/ GYP. Users should always
# depend directly on :linux instead of this target (we set visibility
# to the empty list to prevent unwanted callers).
# TODO(GYP_GONE): Delete this target after we've migrated away from GYP and
# updated the bots to build :linux instead.
group("linux_packages_all") {
  visibility = []
  deps = [
    ":linux",
  ]
}

branding_dir = "//chrome/app/theme/$branding_path_component"
branding_dir_100 =
    "//chrome/app/theme/default_100_percent/$branding_path_component"

copy("common_packaging_files") {
  visibility = [ ":*" ]
  sources = [
    "common/apt.include",
    "common/default-app-block.template",
    "common/default-app.template",
    "common/desktop.template",
    "common/installer.include",
    "common/postinst.include",
    "common/prerm.include",
    "common/repo.cron",
    "common/rpm.include",
    "common/rpmrepo.cron",
    "common/symlinks.include",
    "common/variables.include",
    "common/wrapper",
  ]

  if (is_chrome_branded) {
    sources += [ "common/google-chrome/google-chrome.info" ]
  } else {
    sources += [ "common/chromium-browser/chromium-browser.info" ]
  }

  if (current_cpu == "x86") {
    sources += [ "//build/linux/bin/eu-strip" ]
  } else if (current_cpu == "x64") {
    sources += [ "/usr/bin/eu-strip" ]
  }

  outputs = [
    "$root_out_dir/installer/common/{{source_file_part}}",
  ]
}

copy("deb_packaging_files") {
  visibility = [ ":*" ]
  sources = [
    "debian/build.sh",
    "debian/changelog.template",
    "debian/control.template",
    "debian/debian.menu",
    "debian/expected_deps_ia32_jessie",
    "debian/expected_deps_ia32_wheezy",
    "debian/expected_deps_x64_jessie",
    "debian/expected_deps_x64_wheezy",
    "debian/postinst",
    "debian/postrm",
    "debian/prerm",
  ]
  outputs = [
    "$root_out_dir/installer/debian/{{source_file_part}}",
  ]
}

copy("theme_files") {
  visibility = [ ":*" ]
  sources = [
    "$branding_dir/BRANDING",
    "$branding_dir/linux/product_logo_32.xpm",
    "$branding_dir/product_logo_128.png",
    "$branding_dir/product_logo_22.png",
    "$branding_dir/product_logo_24.png",
    "$branding_dir/product_logo_256.png",
    "$branding_dir/product_logo_48.png",
    "$branding_dir/product_logo_64.png",
    "$branding_dir_100/product_logo_16.png",
    "$branding_dir_100/product_logo_32.png",
  ]
  outputs = [
    "$root_out_dir/installer/theme/{{source_file_part}}",
  ]
}

if (!is_chromeos) {
  copy("rpm_packaging_files") {
    visibility = [ ":*" ]
    sources = [
      "rpm/build.sh",
      "rpm/chrome.spec.template",
      "rpm/expected_deps_i386",
      "rpm/expected_deps_x86_64",
    ]
    outputs = [
      "$root_out_dir/installer/rpm/{{source_file_part}}",
    ]
  }
}

process_version("save_build_info") {
  # Just output the default version info variables (no template).
  process_only = true
  sources = [
    "//build/util/LASTCHANGE",
    "//chrome/VERSION",
    branding_file_path,
  ]
  output = "$root_out_dir/installer/version.txt"
}

# Dependencies for all Linux installer targets.
group("installer_deps") {
  # Though many of these things appear in data_deps further down the
  # dependency chain, they must appear here as public_deps so that they can
  # be listed as inputs to the actions that depend on ":installer_deps"
  # and are guaranteed to have been built before those actions run.

  public_deps = [
    ":common_packaging_files",
    ":deb_packaging_files",
    ":save_build_info",
    ":theme_files",
    "//chrome",
    "//chrome:packed_resources",
    "//sandbox/linux:chrome_sandbox",
  ]
  if (enable_nacl) {
    public_deps += [
      "//components/nacl/loader:nacl_helper",

      # These are data_deps of nacl_helper, but that is not enough,
      # as explained above.
      "//native_client/src/trusted/service_runtime/linux:bootstrap",
      "//ppapi/native_client:irt",
    ]
  }
  if (current_cpu == "x86" || current_cpu == "x64") {
    public_deps += [
      "//third_party/widevine/cdm:widevine_signature_scripts",
      "//third_party/widevine/cdm:widevinecdm",
      "//third_party/widevine/cdm:widevinecdmadapter",
    ]
  }
  if (!is_chromeos) {
    public_deps += [ ":rpm_packaging_files" ]
  }
  if (use_custom_libcxx) {
    public_deps += [ "//buildtools/third_party/libc++" ]
  }
}

# Creates .deb and .rpm (RPM for non-ChromeOS only) installer packages.
#
# channel:
#   Name of the channel.
template("linux_package") {
  assert(defined(invoker.channel))
  channel = invoker.channel

  if (current_cpu == "x86") {
    # The shell scripts use "ia32" instead of "x86".
    build_script_arch = "ia32"
  } else {
    build_script_arch = current_cpu
  }

  packaging_files_binaries = [
    # TODO(mmoss) Any convenient way to get all the relevant build
    # files? (e.g. all locales, resources, etc.)
    "$root_out_dir/chrome",
    "$root_out_dir/chrome_sandbox",
    "$root_out_dir/xdg-mime",
    "$root_out_dir/xdg-settings",
    "$root_out_dir/locales/en-US.pak",

    "$root_out_dir/nacl_helper",
    "$root_out_dir/nacl_helper_bootstrap",
  ]

  if (current_cpu == "x86") {
    packaging_files_binaries += [ "$root_out_dir/nacl_irt_x86_32.nexe" ]
  } else if (current_cpu == "x64") {
    packaging_files_binaries += [ "$root_out_dir/nacl_irt_x86_64.nexe" ]
  } else if (current_cpu == "arm") {
    packaging_files_binaries += [ "$root_out_dir/nacl_irt_arm.nexe" ]
  }

  # The widevine BUILD.gn only produces shared libraries for x86 and x64
  if (is_chrome_branded && (current_cpu == "x86" || current_cpu == "x64")) {
    packaging_files_binaries += [
      "$root_out_dir/$widevine_cdm_path/libwidevinecdmadapter.so",
      "$root_out_dir/$widevine_cdm_path/libwidevinecdm.so",
    ]
  }

  if (use_custom_libcxx) {
    packaging_files_binaries += [ "$root_out_dir/libc++.so" ]
  }

  deb_target_name = "${target_name}_deb"
  action(deb_target_name) {
    visibility = [ ":*" ]
    script = "flock_make_package.py"

    if (current_cpu == "x86") {
      deb_arch = "i386"
    } else if (current_cpu == "x64") {
      deb_arch = "amd64"
    } else if (current_cpu == "arm") {
      deb_arch = "arm"
    } else {
      assert(false, "Linux installer not configured for this architecture.")
    }

    inputs = packaging_files_binaries
    outputs = [
      "$root_out_dir/google-chrome-${channel}_${chrome_version_full}-1_${deb_arch}.deb",
    ]

    args = [
      rebase_path("$root_out_dir/linux_package.lock", root_build_dir),
      rebase_path("$root_out_dir/installer/debian/build.sh", root_build_dir),
      "-o",
      rebase_path(root_out_dir, root_build_dir),
      "-b",
      rebase_path(root_out_dir, root_build_dir),
      "-a",
      build_script_arch,
      "-c",
      invoker.channel,
      "-d",
      branding_path_component,
      "-s",
      rebase_path(sysroot),
    ]
    deps = [
      ":installer_deps",
    ]
  }

  if (!is_chromeos) {
    rpm_target_name = "${target_name}_rpm"
    action(rpm_target_name) {
      visibility = [ ":*" ]
      script = "flock_make_package.py"

      if (current_cpu == "x86") {
        rpm_arch = "i386"
      } else if (current_cpu == "x64") {
        rpm_arch = "x86_64"
      } else if (current_cpu == "arm") {
        rpm_arch = "arm"
      } else {
        assert(false, "Linux installer not configured for this architecture.")
      }

      inputs = packaging_files_binaries
      outputs = [
        "$root_out_dir/google-chrome-${channel}_${chrome_version_full}-1.${rpm_arch}.rpm",
      ]

      args = [
        rebase_path("$root_out_dir/linux_package.lock", root_build_dir),
        rebase_path("$root_out_dir/installer/rpm/build.sh", root_build_dir),
        "-o",
        rebase_path(root_out_dir, root_build_dir),
        "-b",
        rebase_path(root_out_dir, root_build_dir),
        "-a",
        build_script_arch,
        "-c",
        invoker.channel,
        "-d",
        branding_path_component,
      ]
      deps = [
        ":installer_deps",
      ]
    }
  }

  group(target_name) {
    deps = [
      ":$deb_target_name",
    ]
    if (!is_chromeos) {
      deps += [ ":$rpm_target_name" ]
    }
  }
}

# Standard packages.
linux_package("stable") {
  channel = "stable"
}
linux_package("beta") {
  channel = "beta"
}
linux_package("unstable") {
  channel = "unstable"
}

# Other packages that we support that aren't included in the default "linux"
# target.
linux_package("trunk") {
  channel = "trunk"
}
if (is_asan) {
  linux_package("asan") {
    channel = "asan"
  }
}
