#!/usr/bin/ruby

#prefix = "/home/xtakei/cvs/emacsen-common/apel-sample"
 prefix ="/"


if $DEBUG
  ENV["PRIORITY"]="20"
  def system(string)
    print string
    print "\n"
  end
end



# variables

#   installed emacs
flavors = ARGV[0]

#   installed elisp package  
elpackages = Array.new

lib_dir = prefix+"/usr/lib/emacsen-common"
var_dir = prefix+"/var/lib/emacsen-common"


$action = "install"

if $0 =~ /remove/
then  
 $action = "remove" 
end

#print "actionscript:"+actionscript+"\n"


def getflavors(var_dir = "/")
   return open(var_dir+"/installed-flavors").readlines
end
def getelisp(var_dir = "/")
   return open(var_dir+"/installed-elisp").readlines
end

def install_alternatives(flavor)

  if flavor =~/^xemacs/
    comand_options="/sbin/update-alternatives --install /usr/b\in/xemacs xemacs /usr/bin/#{flavor} #{ENV['PRIORITY'].to_i} ;"
  else
    comand_options=""
  end
  

  comand_options=comand_options+"/sbin/update-alternatives --install /usr/bin/emacs emacs /usr/bin/#{flavor} #{ENV['PRIORITY'].to_i} "
    

  open("/var/lib/emacs/alternative-filelist","r").each{  |src|
    unless src =~/\/usr\/bin\/emacs$/ then
      src.chomp!
      file=src.dup
#      if src =~/\/man\/man[0-9]/ then
#         file.gsub!(/([^\/^\.]+)\.([0-9])\.gz/){
#         "#{$1}.#{flavor.to_s}.#{$2}"
#         }
#      else 
        file+="."+flavor
#      end
      comand_options=comand_options+" --slave "+src+" "+File.basename(src) +" "+file
    end

  }
  
  system(comand_options)
end


def change_flavor(flavors) 
  @number = ""
  alternatives_config = open("|/sbin/update-alternatives --config emacs")
  alternatives_config.each{ |line|
    if line=~/.#{flavor}/ then
      line.scan(/^[\*\+ ]+([1-9]+)/){
	@number = $1.to_s
      }
      break
    end 
    
  }
  alternatives.close
  system("echo #{@number} | /sbin/update-alternatives --config emacs")
end
def reverse_flavor
  system("/sbin/update-alternatives --auto emacs")
end
def remove_flavor(flavor)
  system("/sbin/update-alternatives --remove emacs /usr/bin/#{flavor}")
  if flavor =~/xemacs/
    system("/sbin/update-alternatives --remove xemacs /usr/bin/#{flavor} ")
  end

end 
def update_flavor(flavor)
  system("/sbin/update-alternatives --auto emacs ")
    if flavor =~/xemacs/
     system("/sbin/update-alternatives --auto xemacs ")
   end
end




elisp = getelisp(var_dir)

if $action =~/remove/
then
  elisp.reverse!
  remove_flavor(flavors)
else
  install_alternatives(flavors)
  
end
update_flavor(flavors)

#system2("#{lib_dir}/change-temporary-flavor #{flavors}")

#change_flavor(flavors) 

elisp.each{ |el|
  el.chomp!
  actionscript = lib_dir+"/packages/"+$action+"/"+el
  _eprefix=ENV["EPREFIX"]
  ENV["EPREFIX"]=prefix
  system("#{actionscript} #{flavors}\n")
  ENV["EPREFIX"]=_eprefix
}
#system2("#{lib_dir}/reverse-default-flavor")
#reverse_flavor
