#!/usr/bin/env python # Copyright 2013 Ben Longbons # # 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 . 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: require_version(0, 6) 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.make import Make from attoconf.types import enum, filepath yesno = enum('yes', 'no') @add_slots class Configuration(Cxx, Flex, Bison, Install, ConfigHash, Make): 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') 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) proj.set_package('tmwa', 'The Mana World (Athena server)') proj.jiggle() build = proj.build('.') build.configure(sys.argv[1:], os.environ) if __name__ == '__main__': main()