#!/usr/bin/env python2
#   IRPF90 is a Fortran90 preprocessor written in Python for programming using
#   the Implicit Reference to Parameters (IRP) method.
#   Copyright (C) 2009 Anthony SCEMAMA 
#
#   This program is free software; you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation; either version 2 of the License, or
#   (at your option) any later version.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License along
#   with this program; if not, write to the Free Software Foundation, Inc.,
#   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
#   Anthony Scemama
#   LCPQ - IRSAMC - CNRS
#   Universite Paul Sabatier
#   118, route de Narbonne      
#   31062 Toulouse Cedex 4      
#   scemama@irsamc.ups-tlse.fr



import vim
import os,sys
try:
  wd = os.path.abspath(os.path.dirname(__file__))
  sys.path.insert(0,(wd+"/../src/"))
except:
  pass
sys.setcheckinterval(1000)

from command_line import command_line

def main():

  vim.install()

  if command_line.do_help:
    command_line.usage()

  if command_line.do_version:
    from version import version
    print version

  from init import init
  if command_line.do_init:
    init()

  if command_line.do_preprocess:
    init()
    from preprocessed_text import preprocessed_text
    for filename,text in preprocessed_text:
      if filename in command_line.preprocessed:
        for line in text:
          print line.text


  if command_line.do_touch:
    from variables import variables
    for var in command_line.touched:
      if var not in variables:
        print "%s is not an IRP entity"%(var,)
      else:
        print "Touching %s invalidates the following entities:"%(var,)
        parents = variables[var].parents
        parents.sort()
        for x in parents:
          print "- %s"%(x,)


  if not command_line.do_run:
     return

  init()

  import irp_stack
  irp_stack.create()

  import makefile
  makefile.create()

  if command_line.do_codelet:
     import profile
     profile.build_rdtsc()
     import codelet
     codelet.run()

  from modules import modules, write_module
  for m in modules.keys():
    write_module(modules[m])

  makefile.run()

  import touches
  touches.create()

#  import checkpoint
#  checkpoint.create()

  import create_man
  create_man.run()

  if command_line.do_profile:
    import profile
    profile.run()

  if command_line.do_openmp:
    import locks
    locks.create()

if __name__ == '__main__':
  main()

