#!/usr/bin/env ruby require 'fileutils' require 'open3' require 'erb' source = File.read('src/BSDSocket.s') aminet_template = ERB.new(File.read('aminet.readme.erb')) capture_version = false version = nil source.lines.each do |line| if capture_version version = line[/dc\.b "([^"]+)"/, 1] break end if line[/^Version.*MACRO/] # the version is on the next line capture_version = true end end FileUtils.cp 'src/AMOSPro_BSDSocket.Lib', 'AMOSPro_BSDSocket.Lib' strings = [] Open3.popen2e('strings', 'AMOSPro_BSDSocket.Lib') do |stdin, stdout_and_stderr, wait_thr| stdin.close stdout_and_stderr.each { |l| strings << l } wait_thr.join end unless strings.any? { |s| s[version] } puts "Extension build doesn't match source version! Did you rebuild it yet on the Amiga?" exit 1 end FileUtils.mkdir_p 'dist' build_base = 'build' project_name = 'BSDSocket-Extension' build_dir = File.join(build_base, project_name) FileUtils.rm_rf build_dir FileUtils.rm_rf 'aminet' FileUtils.mkdir_p build_dir FileUtils.mkdir_p 'aminet' hackerbun_target = File.expand_path("dist/AMOSPro_BSDSocket_#{version}.lha") [ 'AMOSPro_BSDSocket.Lib', 'README.md', 'API.md', 'LICENSE' ].each do |file| target = "#{build_dir}/#{file}" FileUtils.mkdir_p File.dirname(target) FileUtils.cp file, target end gitignores = File.readlines('.gitignore').map(&:strip) %w[ src examples ].each do |dir| FileUtils.cp_r dir, "#{build_dir}/#{dir}" Dir["#{build_dir}/#{dir}/**/*"].each do |file| FileUtils.rm file if gitignores.any? { |gi| File.fnmatch(gi, file) } FileUtils.rm file if [/\.fd$/, /\.i$/].any? { |p| file[p] } end end Dir['icons/**/*.info'].each do |info| target = info.gsub('icons/', build_base + '/') FileUtils.mkdir_p File.dirname(target) FileUtils.cp info, target end Dir.chdir build_base do Open3.popen2e( 'jlha', 'c', hackerbun_target, *(Dir['*']) ) do |stdin, stdout_and_stderr, wait_thr| Thread.new do stdout_and_stderr.each { |l| puts l } end stdin.close wait_thr.value end end FileUtils.cp hackerbun_target, 'aminet/BSDSocket-Extension.lha' File.open('aminet/BSDSocket-Extension.readme', 'w') do |fh| fh.puts aminet_template.result(binding) end