#! /usr/bin/env ruby

def create_binary src, dest
  to_load = []
  loaded = {}
  open(dest, "w", 0755) do |wfd|
    wfd.puts(<<'EOS')
#! /usr/bin/env ruby

if !$load_self
  $load_self = true
  load(__FILE__)
  main
  exit(0)
end

EOS

    open(src, "r") do |rfd|
      rfd.each_line { |l|
        if l =~ /^\s*require\s+['"]yaggo\/(\w+)['"]\s*$/
          to_load << $1
        else
          wfd.print(l)
        end
      }
    end

    to_load.each { |f|
      next if loaded[f]
      wfd.puts("", "# Loading yaggo/#{f}", "")
      open(File.join("lib", "yaggo", f + ".rb"), "r") { |nfd|
        nfd.each_line { |l|
          wfd.print(l) unless l =~ /^\s*require\s+['"]yaggo\/(\w+)['"]\s*$/
        }
      }
      loaded[f] = true
    }
  end
end

if __FILE__ == $0
  dest = ARGV.shift || "yaggo"
  create_binary("lib/yaggo/main.rb", dest)
end
