#!/usr/local/bin/ruby
# encoding: UTF-8

require 'fileutils'
require_relative '.utils'

def safe_system(*args)
  raise "Command failed: #{args.join(' ').inspect}" if not system(*args)
end

Dir.chdir(File.join(STEAM_ROOT_PATH, 'ubuntu12_32')) do

  runtime_md5 = File.exist?('steam-runtime/checksum')        ? File.read('steam-runtime/checksum').split(' ').first        : nil
  archive_md5 = File.exist?('steam-runtime.tar.xz.checksum') ? File.read('steam-runtime.tar.xz.checksum').split(' ').first : nil

  if archive_md5 && runtime_md5 != archive_md5

    if `/sbin/md5 -q steam-runtime.tar.xz`.chomp != archive_md5
      raise 'steam-runtime.tar.xz failed integrity check'
    end

    version_txt = `/usr/bin/tar -xf steam-runtime.tar.xz --to-stdout steam-runtime/version.txt`
    version_txt =~ /_([\d\.]+)$/
    version = $1

    raise if not version

    if not File.exist?("steam-runtime_#{version}")
      pwarn 'Extracting steam-runtime...'

      FileUtils.mkdir('steam-runtime_' + version)
      safe_system("tar -C steam-runtime_#{version} -xf steam-runtime.tar.xz --strip-components 1")

      FileUtils.cp('steam-runtime.tar.xz.checksum', "steam-runtime_#{version}/checksum")
    end

    FileUtils.rm_r('steam-runtime') if File.exist?('steam-runtime')
    FileUtils.ln_s("steam-runtime_#{version}", 'steam-runtime')
  end

  if not (File.exist?('steam-runtime/pinned_libs_32') && File.exist?('steam-runtime/pinned_libs_64'))
    EMUL_PATH = File.realdirpath(`sysctl -qn compat.linux.emul_path`).chomp
    safe_system(File.join(EMUL_PATH, 'bin/bash'), '-c', 'PATH="$SYSTEM_PATH" env -u LD_PRELOAD -u LD_LIBRARY_PATH ./steam-runtime/setup.sh')
  end

  # keep previous 2 versions just in case
  symlink_target = File.symlink?("steam-runtime") ? File.readlink("steam-runtime") : nil
  for dir in Dir['steam-runtime_*'].sort[0..-3] - [symlink_target]
    FileUtils.rm_r(dir)
  end
end
