summaryrefslogblamecommitdiff
path: root/configure
blob: 584f965edef5450e6bf347152d8e8c9d58224e7f (plain) (tree)





















                                                                        

          




                                                                          




                                                      





                                        
                                               
                                            
                                         

 

                         
          
                                                                      




                                                              

                                                                                 





                                                                       
                                                                                                       

                                                                                   








                                                                   


                                                                      















                                                                                                                                                        



                                         





                                                          






                                             
#!/usr/bin/env python

#   Copyright 2013 Ben Longbons <b.r.longbons@gmail.com>
#
#   This file is part of The Mana World (Athena server)
#
#   attoconf 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 3 of the License, or
#   (at your option) any later version.
#
#   attoconf 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 attoconf.  If not, see <http://www.gnu.org/licenses/>.

from __future__ import print_function, division, absolute_import

import os
import sys

try:
    from attoconf.version import require_version
except ImportError:
    sys.exit('attoconf missing - please run: git submodule update --init')
else:
    try:
        require_version(0, 8)
    except SystemExit as e:
        e.code += '\nPlease run: git submodule update'
        raise

from attoconf.classy import add_slots
from attoconf.lib.c import Cxx
from attoconf.lib.lex import Flex
from attoconf.lib.yacc import Bison
from attoconf.lib.install import Install
from attoconf.lib.config_hash import ConfigHash
from attoconf.lib.templates import Templates
from attoconf.types import enum, filepath


yesno = enum('yes', 'no')

@add_slots
class Configuration(Cxx, Flex, Bison, Install, ConfigHash, Templates):
    def general(self):
        super(Configuration, self).general()
        home = os.path.expanduser('~')
        self.add_alias('--user', ['--prefix=%s' % home],
                help='alias for --prefix=$HOME', hidden=False)
        self.add_alias('--dev', ['--user', '--enable-warnings', '--enable-abi6'],
                help=None, hidden=False)

    def features(self):
        super(Configuration, self).features()
        # TODO: check VERSION_CONTROL environment variable?
        # not really important: this option is only to make Frost happy
        self.add_option('--enable-backups-during-install', init='none',
                type=enum('none', 'numbered', 'existing', 'simple'), check=lambda build, CONTROL: None,
                help='Back up existing files during \'make install\'', hidden=True,
                help_var='CONTROL')
        self.add_bool_feature('warnings', init='no',
                check=lambda build, ENABLE_WARNINGS: None,
                help='Enable warnings (for development)')
        self.add_bool_feature('abi6', init='no',
                check=lambda build, ENABLE_ABI6: None,
                help='Force a nonbuggy gcc ABI (for development)')
        self.add_bool_feature('cygwin-hacks', init='no',
                check=lambda build, ENABLE_CYGWIN_HACKS: None,
                help='Work around bugs in certain cygwin versions')
        self.add_bool_feature('compat-symlinks', init='yes',
                check=lambda build, ENABLE_COMPAT_SYMLINKS: None,
                help='Install symlinks to avoid breaking old scripts')

    def vars(self):
        super(Configuration, self).vars()
        self.add_option('GTEST_DIR', init='/usr/src/gtest',
                # http://code.google.com/p/googletest/wiki/FAQ#Why_is_it_not_recommended_to_install_a_pre-compiled_copy_of_Goog
                type=filepath, check=lambda build, GTEST_DIR: None,
                help='Location of Google Test sources, must contain src/gtest-all.cc (linking to a precompiled library is NOT supported)', hidden=False)

    def add_bool_feature(self, arg, hidden=False, **kwargs):
        positive = '--enable-' + arg
        negative = '--disable-' + arg
        self.add_option(positive, type=yesno, hidden=hidden, **kwargs)
        # TODO: instead reveal one of the aliases and hide the main
        # this requires messing with help slightly
        self.add_alias(positive, [positive + '=yes'], help=None, hidden=True)
        self.add_alias(negative, [positive + '=no'], help=None, hidden=True)


def main():
    srcdir = os.path.dirname(sys.argv[0])
    proj = Configuration(
            srcdir=srcdir,
            package='tmwa',
            package_name='The Mana World (Athena server)',
            template_files=['Makefile'],
    )
    proj.jiggle()
    build = proj.build('.')
    build.configure(sys.argv[1:], os.environ)


if __name__ == '__main__':
    main()