#!/usr/bin/env ruby

require 'yaml'
require 'tmpdir'


def php_modules_from(version:, url:)
  Dir.mktmpdir do |dir|
    Dir.chdir(dir) do
      `wget --no-verbose #{url} && tar xzf #{File.basename(url)}`
      Dir['php/lib/php/extensions/no-debug-non-zts-*/*.so'].collect do |file|
        File.basename(file, '.so')
      end.sort.reject do |m|
        %w(odbc gnupg).include?(m)
      end
    end
  end
end

manifest = YAML.load_file('manifest.yml')
dependencies = manifest['dependencies'].map do |dependency|
  if dependency.fetch('name') == 'php'
    dependency['modules'] = php_modules_from(version: dependency.fetch('version'), url: dependency.fetch('uri'))
  end
  dependency
end


manifest['dependencies'] = dependencies
diff = ''
manifest_tmp = 'manifest-with-updated-modules.yml'
File.write(manifest_tmp, manifest.to_yaml)
diff = `diff -u manifest.yml #{manifest_tmp}`

unless diff.empty?
  puts "=" * 80
  puts "Modules in PHP binary dependencies does not match modules declared in manifest.yml!"
  puts "The following diff shows what was expected. Please review and update manifest.yml"

  puts diff

  exit 1
end
