=begin
create_setup_ini.rb: Create setup.ini of Cygwin Setup 
                     for installation of Dennou Ruby Product binary packages

Time-stamp: <2007-06-01 01:33:52 koshiro>

Copyright (C) 2004-2007  GFD Dennou Club      <http://www.gfd-dennou.org>
                         Dennou Ruby Project  <http://ruby.gfd-dennou.org>
=end

module NumRu
   module Cygwin
      class Package
         @@cyg_dir = Dir.pwd

         def self.cygwin_dir=(cyg_dir)
            @@cyg_dir = cyg_dir
         end

         attr_reader :name, :sdesc, :req, :categ, :fname, :ver, :install

         def initialize(name, sdesc="", req="")
            @name  = name
            @sdesc = (sdesc == "") ? "" : "\"" + sdesc + " \""
            @sdesc = "\"" + sdesc + " \""
            @req   = req
            if /^Removed package/ =~ sdesc
               @categ = "_obsolete"
               rel_dir = "release/_obsolete"
            else
               @categ = "Dennou-Ruby"
               rel_dir = "release"
            end

            dirname = File.join(@@cyg_dir, "#{rel_dir}/#{@name}")
            fnames  = Dir.glob(File.join(dirname, "#{@name}-*.tar.bz2"))
            vers    = []
            fnames.each{|fn| 
               ver = File.basename(fn.sub("#{rel_dir}/#{@name}/#{@name}-",""),".tar.bz2").split("-")
               ver[0] = ver[0].split(".")
               fnbase = fn.sub(@@cyg_dir+"/","")
               if vers[0]
                  latest = 0
                  vers.each{|v|
                     for i in 0...(v[0].length)
                        if !ver[0][i]
                           latest = -1
                           puts fnbase + "," + "!ver[0][i]"
                           break
                        elsif (ver[0][i].to_i)<(v[0][i].to_i)
                           latest = -1
                           puts fnbase + "," + ver[0][i] + "," + v[0][i] + "," + "(ver[0][i].to_i)<(v[0][i].to_i)"
                           break
                        elsif (ver[0][i].to_i)>(v[0][i].to_i)
                           latest = 1
                           break
                        end
                     end
                     if latest == 0 
                        if v[0].length < ver[0].length
                           latest = 1
                        end
                     end
                     if latest == 0 
                        if ((ver[1].to_i)<(v[1].to_i))
                           latest = -1
                           puts fnbase + "," + ver[1] + "," + v[1] + "," + "ver[1]<v[1]"
                        else
                           latest = 1
                        end
                     end
                     break unless latest == 1
                  }
                  vers.push(ver)
                  if latest == 1
                     @fname = fn.sub(@@cyg_dir+"/","")
                     @ver   = File.basename(@fname.sub("#{rel_dir}/#{@name}/#{@name}-",""), ".tar.bz2")
                     puts fnbase + "," + ver.to_s + "," + "latest"
                  end
               else
                  puts fnbase + "," + ver.to_s + "," + "first"
                  vers.push(ver)
                  @fname = fn.sub(@@cyg_dir+"/","")
                  @ver   = File.basename(@fname.sub("#{rel_dir}/#{@name}/#{@name}-",""), ".tar.bz2")
               end
            }
            # @fname  = Dir.glob(File.join(dirname, "#{@name}-*.tar.bz2")).max.sub(@@cyg_dir+"/","")
            # @ver    = File.basename(@fname.sub("#{rel_dir}/#{@name}/#{@name}-",""), ".tar.bz2")
            fsize  = File.size(File.join(@@cyg_dir,@fname))
            md5sum = `md5sum #{File.join(@@cyg_dir,@fname)}`.split.shift
            @install = "#{@fname} #{fsize} #{md5sum}"
         end
      end
   end
end

if __FILE__ == $0
   include NumRu::Cygwin

   dcl_gtk2 = Package.new("dcl-gtk2",
                            "GFD-Dennou Club Library (Fortran version)",
                            "gcc-g77 atk atk-devel atk-runtime glib2 glib2-devel glib2-runtime gtk2-x11 gtk2-x11-devel gtk2-x11-runtime pango pango-devel pango-runtime")
   dcl_C_gtk2 = Package.new("dcl-C-gtk2",
                            "GFD-Dennou Club Library (C version)",
                            "gcc atk atk-devel atk-runtime glib2 glib2-devel glib2-runtime gtk2-x11 gtk2-x11-devel gtk2-x11-runtime pango pango-devel pango-runtime")
   netcdf = Package.new("netcdf",
                        "NetCDF file handling libs & commands")
   ruby_gnome2 = Package.new("ruby-gnome2",
                             "Ruby bindings for GNOME2",
                             "ruby atk atk-devel atk-runtime glib2 glib2-devel glib2-runtime gtk2-x11 gtk2-x11-devel gtk2-x11-runtime pango pango-devel pango-runtime GConf2 libgnome2 libgnomeui2 libgnomecanvas2 libgnomeprint22 libgnomeprintui22 gnome-vfs2 libart_lgpl libglade2")
   ruby_narray = Package.new("ruby-narray",
                             "Multi-dimensional numeric array",
                             "ruby")
   ruby_narray_miss = Package.new("ruby-narray_miss",
                                  "Data missing handling for NArray",
                                  "ruby-narray")
   ruby_dcl_gtk2 = Package.new("ruby-dcl-gtk2",
                               "Ruby wrapper of DCL",
                               "dcl-C-gtk2 ruby-narray_miss ruby-gnome2")
   ruby_netcdf = Package.new("ruby-netcdf",
                             "Ruby wrapper of NetCDF",
                             "netcdf ruby-narray_miss")
   ruby_fftw3 = Package.new("ruby-fftw3",
                            "Ruby wrapper of FFTW ver.3",
                            "fftw3 fftw3-dev ruby-narray")
   numru_units = Package.new("numru-units",
                             "Class of units of physical quantities",
                             "ruby")
   numru_misc = Package.new("numru-misc",
                            "Miscellaneous functions and classes",
                            "ruby-narray")
   gphys = Package.new("gphys",
                       "Class for Gridded Physical quantities",
                       "ruby-dcl-gtk2 ruby-netcdf ruby-fftw3 numru-units numru-misc")
   gave = Package.new("gave",
                      "Ruby/GTK+ grid data analyser/viewer",
                      "gphys")

   numru_met = Package.new("numru-met",
                           "Meteorological functions and classes",
                           "ruby-dcl-gtk2 numru-misc")

   ruby_multibitnums = Package.new("ruby-multibitnums",
                                   "Class of multiple multi-bit data",
                                   "ruby")
   gpv = Package.new("gpv",
                     "handling tool of GPV data made by JMA",
                     "ruby-netcdf ruby-multibitnums")

   rb_gsl = Package.new("rb-gsl",
                        "a ruby interface to the GSL (GNU Scientific Library)",
                        "gsl libplot2 libplotter2 libxmi0 plotutils plotutils-devel ruby-narray")

   fftw = Package.new("fftw",
                      "Removed package, install fftw3 instead",
                      "fftw3 fftw3-dev")

   fftw2 = Package.new("fftw2",
                       "Removed package")

   packages = [
      dcl_gtk2, dcl_C_gtk2, netcdf, ruby_gnome2,
      ruby_narray, ruby_narray_miss,
      ruby_dcl_gtk2, ruby_netcdf, ruby_fftw3,
      numru_units, numru_misc, gphys, gave,
      numru_met,
      ruby_multibitnums, gpv,
      rb_gsl,
      fftw, fftw2
   ]

   setup_ini = "setup.ini"

   File::open(setup_ini, "w") do |file|
      file.puts "setup-timestamp: " + `date +%s`.chomp
      file.print "\n"
      packages.each do |pkg|
         file.puts "@ " + pkg.name
         file.puts "sdesc: " + pkg.sdesc
         file.puts "category: " + pkg.categ
         file.puts "requires: " + pkg.req if pkg.req != ""
         file.puts "version: " + pkg.ver
         file.puts "install: " + pkg.install
         file.print "\n"
      end
   end
end
