#!/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.mkdir_p 'dist' build_base = 'build' project_name = 'BSDSocket-Extension' build_dir = File.join(build_base, project_name) FileUtils.rm_rf build_dir 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 [ "src", "examples" ].each do |dir| FileUtils.cp_r dir, "#{build_dir}/#{dir}" 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