## -*- python -*-
## feff85exafs build system based on scons
## see HEADERS/license.h for license information

import sys
sys.path.append('..')
from FeffBuild import CompilationEnvironment, InstallEnvironment, FindOtherObjects
from   os.path   import realpath, join

try:
    Import('env')
except:
    env  = CompilationEnvironment()
ienv = InstallEnvironment()

lib_src = Split('istprm.f movrlp.f ovp2mt.f fermi.f sidx.f')

bin_src = Split('ffmod1.f pot.f    scmtmp.f afolp.f broydn.f corval.f coulom.f ff2g.f frnrm.f  \
                 grids.f  inipot.f istval.f moveh.f ovrlp.f  reapot.f rholie.f \
                 scmt.f   sumax.f  wpot.f   wrpot.f')

deps = ('COMMON/wlog', 'COMMON/str', 'COMMON/chopen', 'COMMON/padlib', 'COMMON/xx',
        'PAR/sequential', 'MATH/terp', 'MATH/polint', 'MATH/somm2', 'MATH/dist', 'MATH/lu',
        'EXCH/edp', 'EXCH/vbh')

env.Library('libfeffint', lib_src) # + FindOtherObjects(deps, env))

libs = ['libfeffint.a',
        join('..', 'ATOM',   'libfeffatom.a'),
        join('..', 'FOVRG',  'libfeffpha.a'),
        join('..', 'COMMON', 'libfeffcom.a'),
        join('..', 'PAR',    'libfeffpar.a'),
        join('..', 'MATH',   'libfeffmath.a'),
        join('..', 'JSON',   'libfeffjson.a'),
        join('..', 'EXCH',   'libfeffexch.a'),
        join('..', 'FMS',    'libfefffms.a'),
        join('..', 'json-fortran', 'libjsonfortran.a'),
       ]

env.Program('pot', bin_src + libs)

env.Depends('reapot'+env['SHOBJSUFFIX'], join('..', 'json-fortran', 'libjsonfortran.a'))

env.Alias('install', [ienv['i_bin'],ienv['i_inc']])

env.Install(ienv['i_bin'], 'pot'+env['PROGSUFFIX'])




libpotph_src = ['libpotph.f', 'inipotph.f', 'ffsort_potph.f', 'wlog_potph.f']
reuse = ['pot.f', 'afolp.f', 'inipot.f', 'moveh.f', 'wpot.f', 'ovrlp.f', 'broydn.f', 'ff2g.f',
         'grids.f', 'corval.f', 'wrpot.f', 'scmt.f', 'scmtmp.f', 'sumax.f', 'rholie.f', 'frnrm.f', 'coulom.f']
from_xsph = [join('..', 'XSPH',   'acoef'              + env['SHOBJSUFFIX']),
             join('..', 'XSPH',   'axafs'              + env['SHOBJSUFFIX']),
             join('..', 'XSPH',   'fmssz'              + env['SHOBJSUFFIX']),
             join('..', 'XSPH',   'phase'              + env['SHOBJSUFFIX']),
             join('..', 'XSPH',   'phmesh'             + env['SHOBJSUFFIX']),
             join('..', 'XSPH',   'radint'             + env['SHOBJSUFFIX']),
             join('..', 'XSPH',   'rholsz'             + env['SHOBJSUFFIX']),
             join('..', 'XSPH',   'szlz'               + env['SHOBJSUFFIX']),
             join('..', 'XSPH',   'wphase'             + env['SHOBJSUFFIX']),
             join('..', 'XSPH',   'wrxsph'             + env['SHOBJSUFFIX']),
             join('..', 'XSPH',   'xmult'              + env['SHOBJSUFFIX']),
             join('..', 'XSPH',   'xsect'              + env['SHOBJSUFFIX']),
             join('..', 'XSPH',   'xsph'               + env['SHOBJSUFFIX']),
         ]
from_opconsat = [
             join('..', 'OPCONSAT', 'libfeffloss'      + env['SHOBJSUFFIX']),
             join('..', 'OPCONSAT', 'e2emisc'          + env['SHOBJSUFFIX']),
             join('..', 'OPCONSAT', 'eps'              + env['SHOBJSUFFIX']),
]
misc_feff = [join('..', 'RDINP',  'mkptz'              + env['SHOBJSUFFIX']),

             join('..', 'COMMON', 'chopen'             + env['SHOBJSUFFIX']),
             join('..', 'COMMON', 'fixdsp'             + env['SHOBJSUFFIX']),
             join('..', 'COMMON', 'fixdsx'             + env['SHOBJSUFFIX']),
             join('..', 'COMMON', 'fixvar'             + env['SHOBJSUFFIX']),
             join('..', 'COMMON', 'getorb'             + env['SHOBJSUFFIX']),
             join('..', 'COMMON', 'getxk'              + env['SHOBJSUFFIX']),
             join('..', 'COMMON', 'head'               + env['SHOBJSUFFIX']),
             join('..', 'COMMON', 'padlib'             + env['SHOBJSUFFIX']),
             join('..', 'COMMON', 'setkap'             + env['SHOBJSUFFIX']),
             join('..', 'COMMON', 'rdcmt'              + env['SHOBJSUFFIX']),
             join('..', 'COMMON', 'str'                + env['SHOBJSUFFIX']),
             #join('..', 'COMMON', 'wlog'               + env['SHOBJSUFFIX']),
             join('..', 'COMMON', 'xx'                 + env['SHOBJSUFFIX']),

             join('..', 'ATOM',   'akeato'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'aprdev'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'cofcon'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'bkmrdf'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'dentfa'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'dsordf'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'etotal'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'fdmocc'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'fdrirk'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'inmuat'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'intdir'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'lagdat'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'messer'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'muatco'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'nucdev'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'ortdat'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'potrdf'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'potslw'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'scfdat'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'soldir'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   's02at'              + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'tabrat'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'vlda'               + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'wfirdf'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'yzkteg'             + env['SHOBJSUFFIX']),
             join('..', 'ATOM',   'yzkrdf'             + env['SHOBJSUFFIX']),

             join('..', 'MATH',   'bcoef'              + env['SHOBJSUFFIX']),
             join('..', 'MATH',   'besjh'              + env['SHOBJSUFFIX']),
             join('..', 'MATH',   'besjn'              + env['SHOBJSUFFIX']),
             join('..', 'MATH',   'bjnser'             + env['SHOBJSUFFIX']),
             join('..', 'MATH',   'csomm'              + env['SHOBJSUFFIX']),
             join('..', 'MATH',   'csomm2'             + env['SHOBJSUFFIX']),
             join('..', 'MATH',   'cwig3j'             + env['SHOBJSUFFIX']),
             join('..', 'MATH',   'czeros'             + env['SHOBJSUFFIX']),
             join('..', 'MATH',   'determ'             + env['SHOBJSUFFIX']),
             join('..', 'MATH',   'dist'               + env['SHOBJSUFFIX']),
             join('..', 'MATH',   'exjlnl'             + env['SHOBJSUFFIX']),
             join('..', 'MATH',   'lu'                 + env['SHOBJSUFFIX']),
             join('..', 'MATH',   'phamp'              + env['SHOBJSUFFIX']),
             join('..', 'MATH',   'polint'             + env['SHOBJSUFFIX']),
             join('..', 'MATH',   'rotwig'             + env['SHOBJSUFFIX']),
             join('..', 'MATH',   'somm'               + env['SHOBJSUFFIX']),
             join('..', 'MATH',   'somm2'              + env['SHOBJSUFFIX']),
             join('..', 'MATH',   'terp'               + env['SHOBJSUFFIX']),
             join('..', 'MATH',   'terpc'              + env['SHOBJSUFFIX']),

             join('..', 'FMS',    'fmspack'            + env['SHOBJSUFFIX']),
             join('..', 'FMS',    'fmsie'              + env['SHOBJSUFFIX']),
             join('..', 'FMS',    'gglu'               + env['SHOBJSUFFIX']),
             join('..', 'FMS',    'ggbi'               + env['SHOBJSUFFIX']),
             join('..', 'FMS',    'ggrm'               + env['SHOBJSUFFIX']),
             join('..', 'FMS',    'gggm'               + env['SHOBJSUFFIX']),
             join('..', 'FMS',    'ggtf'               + env['SHOBJSUFFIX']),
             join('..', 'FMS',    'yprep'              + env['SHOBJSUFFIX']),
             join('..', 'FMS',    'xstaff'             + env['SHOBJSUFFIX']),

             join('..', 'FF2X',   'xscorr'             + env['SHOBJSUFFIX']),

             join('..', 'EXCH',   'cubic'              + env['SHOBJSUFFIX']),
             join('..', 'EXCH',   'csigma'             + env['SHOBJSUFFIX']),
             join('..', 'EXCH',   'csigz'              + env['SHOBJSUFFIX']),
             join('..', 'EXCH',   'edp'                + env['SHOBJSUFFIX']),
             join('..', 'EXCH',   'ffq'                + env['SHOBJSUFFIX']),
             join('..', 'EXCH',   'fndsng'             + env['SHOBJSUFFIX']),
             join('..', 'EXCH',   'imhl'               + env['SHOBJSUFFIX']),
             join('..', 'EXCH',   'qsorti'             + env['SHOBJSUFFIX']),
             join('..', 'EXCH',   'quinn'              + env['SHOBJSUFFIX']),
             join('..', 'EXCH',   'rhl'                + env['SHOBJSUFFIX']),
             join('..', 'EXCH',   'rhlbp'              + env['SHOBJSUFFIX']),
             join('..', 'EXCH',   'vbh'                + env['SHOBJSUFFIX']),
             join('..', 'EXCH',   'xcpot'              + env['SHOBJSUFFIX']),

             join('..', 'FOVRG',  'dfovrg'             + env['SHOBJSUFFIX']),
             join('..', 'FOVRG',  'inmuac'             + env['SHOBJSUFFIX']),
             join('..', 'FOVRG',  'diff'               + env['SHOBJSUFFIX']),
             join('..', 'FOVRG',  'wfirdc'             + env['SHOBJSUFFIX']),
             join('..', 'FOVRG',  'potex'              + env['SHOBJSUFFIX']),
             join('..', 'FOVRG',  'solin'              + env['SHOBJSUFFIX']),
             join('..', 'FOVRG',  'solout'             + env['SHOBJSUFFIX']),
             join('..', 'FOVRG',  'muatcc'             + env['SHOBJSUFFIX']),
             join('..', 'FOVRG',  'nucdec'             + env['SHOBJSUFFIX']),
             join('..', 'FOVRG',  'potdvp'             + env['SHOBJSUFFIX']),
             join('..', 'FOVRG',  'yzkrdc'             + env['SHOBJSUFFIX']),
             join('..', 'FOVRG',  'yzktec'             + env['SHOBJSUFFIX']),
             join('..', 'FOVRG',  'aprdep'             + env['SHOBJSUFFIX']),
             join('..', 'FOVRG',  'aprdec'             + env['SHOBJSUFFIX']),
             join('..', 'FOVRG',  'intout'             + env['SHOBJSUFFIX']),

             join('..', 'PAR',    'sequential'         + env['SHOBJSUFFIX']),]

json = [ join('..', 'JSON',   'json_read_libpotph' + env['SHOBJSUFFIX']),
         join('..', 'JSON',   'json_xsect'         + env['SHOBJSUFFIX']),
         join('..', 'JSON',   'bailout'            + env['SHOBJSUFFIX'])]


libs = [join('..', 'json-fortran', 'libjsonfortran.a'),]

## ------------------------------------------------------------------------------------------------------
## build the libpotph Fortran library
env.SharedLibrary('libpotph', libpotph_src + misc_feff + from_xsph + from_opconsat + reuse + lib_src + json)


## ------------------------------------------------------------------------------------------------------
## build the libphases C wrapper around libpotph
env.SharedLibrary('libfeffphases', ['feffphases.c'] + libpotph_src + ['libpotph_xsect.f'] + misc_feff + from_xsph + reuse + lib_src)


## ------------------------------------------------------------------------------------------------------
## installation
env.Install(ienv['i_lib'], ['libpotph' + env['SHLIBSUFFIX'], #  Fortran wrapper around the potentials and phases library
                            'libfeffphases' + env['SHLIBSUFFIX']]) #  C wrapper around the potentials and phases library

env.Install(ienv['i_inc'], 'feffphases.h')
