#!/usr/bin/python
# -*- Mode: Python -*-
# Copyright (C) 2015 Mathieu Duponchelle
#
# 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.
#

import sys, os, traceback
import pkgutil, importlib
import cPickle as pickle

from hotdoc.core.doc_tool import DocTool

def load_extensions(dirname):
    package = importlib.import_module(dirname)
    prefix = package.__name__ + '.'
    for importer, modname, ispkg in pkgutil.iter_modules(package.__path__,
            prefix):
        if modname in sys.modules:
            continue
        try:
            module = importlib.import_module(modname)
        except Exception as e:
            print "Extension %s disabled : %s" % (modname, e)

def load_all_extensions():
    extension_paths = os.environ.get('HOTDOC_EXTENSION_PATH')
    if extension_paths:
        extension_paths = extension_paths.split(':')
    else:
        extension_paths = []

    extension_paths.append('hotdoc.extensions')
    for path in extension_paths:
        load_extensions(path)

if __name__=="__main__":
    load_all_extensions()

    doc_tool = DocTool()

    try:
        doc_tool.setup(sys.argv[1:])
        doc_tool.format()
        doc_tool.persist()
        doc_tool.finalize()
    except Exception as e:
        if os.environ.get ("DOC_DEBUG"):
            traceback.print_exc (e)
        else:
            print '\033[91m' + e.message + '\033[0m'
        sys.exit (1)
    sys.exit(0)
