# frozen_string_literal: true
require 'rubygems/package'
require 'digest'
require 'tmpdir'
require 'fileutils'

# Local compatibility build, not an upstream release or a global installation.
source, output = ARGV
abort 'usage: ruby build_patched_gem.rb original-ruby-fann-2.0.2.gem output-directory' unless source && output
source=File.expand_path(source); output=File.expand_path(output)
expected='e5948903ad3a339bbc579d5e6fd0468e524f3788386ba45b97278a8b906b1f8e'
abort 'unexpected gem SHA256' unless Digest::SHA256.file(source).hexdigest == expected
FileUtils.mkdir_p(output)
Dir.mktmpdir('fann-build') do |directory|
  package=Gem::Package.new(source); package.extract_files(directory)
  path=File.join(directory,'ext/ruby_fann/ruby_fann.c'); text=File.read(path)
  patches={
    'fann_set_user_data(ann, self);'=>'fann_set_user_data(ann, (void *)self);',
    'static VALUE get_neurons(VALUE self, VALUE layer)'=>'static VALUE get_neurons(VALUE self)'
  }
  patches.each do |before,after|
    abort "patch context mismatch: #{before}" unless text.scan(before).length == 1
    text=text.sub(before,after)
  end
  File.write(path,text)
  Dir.chdir(directory) do
    spec=package.spec
    spec.version='2.0.2.oneruby1'
    filename=Gem::Package.build(spec)
    FileUtils.cp(filename,output)
  end
end
