#!/usr/bin/python3

"""
This is fll, it links all the fll modules together.

Author:    Kel Modderman
Copyright: Copyright (C) 2011 Kel Modderman <kel@otaku42.de>
License:   GPL-2
"""

import os
import sys
sys.path[0] = '.'

from fll.aptlib import AptLib, AptLibError
from fll.chroot import Chroot, ChrootError
from fll.config import Config, ConfigError
from fll.distro import Distro, DistroError
from fll.fscomp import FsComp, FsCompError
from fll.pkgmod import PkgMod, PkgModError


def error(msg):
    print >>sys.stderr, 'E: fll - %s' % msg
    sys.exit(1)

def main():
    try:
        conf = Config()
    except (ConfigError, IOError), e:
        error(e)

    for arch in conf.config['archs']:
        rootdir = os.path.join(conf.config['dir'], arch)

        try:
            with Chroot(rootdir=rootdir, architecture=arch,
                        config=conf.config['chroot']) as chroot:
                chroot.bootstrap()
                chroot.init()

                apt = AptLib(chroot=chroot, config=conf.config['apt'])

                pm = PkgMod(aptlib=apt, architecture=arch,
                            config=conf.config['profile'])
                fscomp = FsComp(chroot=chroot,config=conf.config['fscomp'])
                pm.pkgs.update(fscomp.depends)

                apt.install(pm.pkgs, commit=False)
                for change in apt.changes():
                    print change
                apt.commit()

                dist = Distro(chroot=chroot, config=conf.config['distro'])
                dist.init()

                apt.deinit()
                chroot.deinit()
                fscomp.compress()
        except (AptLibError, ChrootError), e:
            error(e)


if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        print >>sys.stderr, 'E: fll was interrupted'
        sys.exit(1)
