import glob, os, os.path

env = Environment()

opts = Options()
opts.Add('libdir', 'Define the basename for library dirs', 'lib')
opts.Add('destdir', 'Define the (installation) prefix; The Directory to install to', '')
opts.Add('prefix', 'Define the (runtime) prefix', '/')

destdir = ARGUMENTS.get('destdir', '')
prefix = ARGUMENTS.get('prefix', '/')
libdir = ARGUMENTS.get('libdir', 'lib')

Help(opts.GenerateHelpText(env))

RuntimeDirEtc = prefix + 'etc/einit'
RuntimeDirLibEinit = prefix + libdir + '/einit'
RuntimeDirModules = prefix + libdir + '/einit/modules'

InstallDirEtc = destdir + RuntimeDirEtc
InstallDirLibEinit = destdir + RuntimeDirLibEinit
InstallDirModules = destdir + RuntimeDirModules

haveFiles = []

try:
 os.stat('/etc/frugalware-release')
 for i in glob.glob('data-frugalware/modules-xml/*.xml'):
  b = os.path.basename(i)
  haveFile += [ b ]

  env.Install (InstallDirLibEinit + '/modules-xml', i)
except:
 print ("not frugalware...")

for i in glob.glob('data/modules-xml/*.xml'):
 b = os.path.basename(i)
 if not b in haveFiles:
  env.Install (InstallDirLibEinit + '/modules-xml', i)

for i in glob.glob('data/conf.d/*.xml'):
 b = os.path.basename(i)
 env.Install (InstallDirLibEinit + '/defaults/conf.d/', i)
 try:
  os.stat(RuntimeDirEtc + '/conf.d/' + b)
  try:
   odata = ""
   ndata = ""
   f = open(RuntimeDirLibEinit + '/defaults/conf.d/' + b, "r")
   if f:
    odata = f.read ()
    f.close()

   f = open(i, "r")
   if f:
    ndata = f.read ()
    f.close()

   if ndata != odata:
    env.InstallAs (InstallDirEtc + '/conf.d/' + b, i)
   else:
    env.InstallAs (InstallDirEtc + '/conf.d/' + b, RuntimeDirEtc + '/conf.d/' + b)
  except:
   env.InstallAs (InstallDirEtc + '/conf.d/' + b, i)
 except:
  env.Install (InstallDirEtc + '/conf.d', i)

menv = env.Clone (SHLIBPREFIX = '', CCFLAGS = '-DEINIT_MODULE')

librt = [ 'rt' ]

uname = "unknown"

f = os.popen ('uname', 'r')
if f:
 uname = f.readline().strip()
 f.close()

if uname == 'Darwin':
 menv.Append (LINKFLAGS = '$LINKFLAGS -Wl,-bundle_loader,src/einit-core')
 librt = []

def buildModule(name, location, e):
 e.Install(InstallDirModules, e.LoadableModule(name, location + '/' + name + '.c'))

Modules = ['module-xml']

for i in Modules:
 buildModule (i, 'src', menv)

env.Alias ('install', [InstallDirEtc + '/conf.d', InstallDirLibEinit + '/modules-xml', InstallDirLibEinit + '/defaults/conf.d', InstallDirModules])
