#!/usr/bin/python3
#
# This file is part of Plinth.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#

"""
Plinth setup file
"""

from distutils import log
from distutils.command.install_data import install_data
import glob
import os
import setuptools
import shutil
import subprocess

from plinth import __version__


DIRECTORIES_TO_CREATE = [
    '/var/lib/plinth',
    '/var/lib/plinth/sessions',
    '/var/log/plinth',
]

DIRECTORIES_TO_COPY = [
    ('/usr/share/plinth/static', 'static'),
    ('/usr/share/doc/plinth', 'doc'),
]


class CustomInstallData(install_data):
    """Override install command to allow directory creation and copy"""
    def run(self):
        """Execute install command"""
        subprocess.check_call(['make', '-C', 'doc'])

        install_data.run(self)  # Old style base class

        # Create empty directories
        for directory in DIRECTORIES_TO_CREATE:
            if not os.path.exists(directory):
                log.info("creating directory '%s'", directory)
                os.makedirs(directory)

        # Recursively copy directories
        for target, source in DIRECTORIES_TO_COPY:
            if not os.path.exists(target):
                log.info("recursive copy '%s' to '%s'", source, target)
                shutil.copytree(source, target, symlinks=True)


find_packages = setuptools.PEP420PackageFinder.find
setuptools.setup(
    name='Plinth',
    version=__version__,
    description='A web front end for administering FreedomBox',
    author='Plinth Authors',
    author_email='freedombox-discuss@lists.alioth.debian.org',
    url='http://freedomboxfoundation.org',
    packages=find_packages(include=['plinth', 'plinth.*'],
                           exclude=['*.templates']),
    scripts=['bin/plinth'],
    test_suite='plinth.tests.TEST_SUITE',
    license='COPYING',
    classifiers=[
        'Development Status :: 3 - Alpha',
        'Environment :: Web Environment',
        'Framework :: Django',
        'Intended Audience :: End Users/Desktop',
        'License :: DFSG approved',
        'License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)',
        'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)',
        'Natural Language :: English',
        'Operating System :: POSIX :: Linux',
        'Programming Language :: Python',
        'Programming Language :: Python :: 3',
        'Programming Language :: Unix Shell',
        'Topic :: Internet :: WWW/HTTP :: WSGI :: Application',
        'Topic :: System :: Systems Administration',
    ],
    setup_requires=['setuptools-git'],
    install_requires=[
        'cherrypy >= 3.0',
        'django >= 1.7.0',
        'django-bootstrap-form'
    ],
    include_package_data=True,
    package_data={'plinth': ['templates/*',
                             'modules/*/templates/*']},
    data_files=[('/etc/init.d', ['data/etc/init.d/plinth']),
                ('/usr/lib/freedombox/setup.d/',
                 ['data/usr/lib/freedombox/setup.d/86_plinth']),
                ('/usr/lib/freedombox/first-run.d',
                 ['data/usr/lib/freedombox/first-run.d/90_firewall']),
                ('/etc/apache2/sites-available',
                 ['data/etc/apache2/sites-available/plinth.conf',
                  'data/etc/apache2/sites-available/plinth-ssl.conf']),
                ('/etc/sudoers.d', ['data/etc/sudoers.d/plinth']),
                ('/usr/share/plinth/actions',
                 glob.glob(os.path.join('actions', '*'))),
                ('/usr/share/man/man1', ['doc/plinth.1']),
                ('/etc/plinth', ['data/etc/plinth/plinth.config']),
                ('/etc/plinth/modules-enabled',
                 glob.glob(os.path.join('data/etc/plinth/modules-enabled',
                                        '*')))],
    cmdclass={'install_data': CustomInstallData},
)

@@ -814,16 +814,55 @@
 ll_data%0A
+from distutils.util import change_root%0A
 import g
@@ -1537,16 +1537,105 @@
 CREATE:%0A
+            if self.root:%0A                directory = change_root(self.root, directory)%0A%0A
         
@@ -1865,16 +1865,99 @@
 O_COPY:%0A
+            if self.root:%0A                target = change_root(self.root, target)%0A%0A
         

Fix issue with installing to a different root with --root=