#! /usr/bin/env python # encoding: utf-8 # mittorn, 2018 from waflib import Logs import os top = '.' VGUI_SUPPORTED_OS = ['win32', 'darwin', 'linux'] def options(opt): grp = opt.add_option_group('VGUI options') grp.add_option('--vgui', action = 'store', dest = 'VGUI_DEV', default='vgui-dev', help = 'path to vgui-dev repo [default: %default]') grp.add_option('--disable-vgui', action = 'store_true', dest = 'NO_VGUI', default = False, help = 'disable vgui_support [default: %default]') grp.add_option('--skip-vgui-sanity-check', action = 'store_false', dest = 'VGUI_SANITY_CHECK', default=False, help = 'skip checking VGUI sanity [default: %default]' ) return def configure(conf): conf.env.NO_VGUI = conf.options.NO_VGUI if conf.options.NO_VGUI: return conf.start_msg('Does this architecture support VGUI?') if conf.env.DEST_CPU != 'x86' and not (conf.env.DEST_CPU == 'x86_64' and not conf.options.ALLOW64): conf.end_msg('no') Logs.warn('vgui is not supported on this CPU: ' + str(conf.env.DEST_CPU)) conf.env.NO_VGUI = True return else: conf.end_msg('yes') conf.start_msg('Does this OS support VGUI?') if conf.env.DEST_OS not in VGUI_SUPPORTED_OS: conf.end_msg('no') Logs.warn('vgui is not supported on this OS: ' + str(conf.env.DEST_OS)) conf.env.NO_VGUI = True return else: conf.end_msg('yes') conf.start_msg('Does this toolchain able to link VGUI?') if conf.env.DEST_OS == 'win32' and conf.env.COMPILER_CXX == 'g++': conf.end_msg('no') # we have ABI incompatibility ONLY on MinGW Logs.warn('vgui_support can\'t be built with MinGW') conf.env.NO_VGUI = True return else: conf.end_msg('yes') if conf.env.NO_VGUI: return if conf.options.VGUI_DEV: conf.start_msg('Configuring VGUI by provided path') conf.env.VGUI_DEV = conf.options.VGUI_DEV else: conf.start_msg('Configuring VGUI by default path') conf.env.VGUI_DEV = 'vgui-dev' if conf.env.DEST_OS == 'win32': conf.env.LIB_VGUI = ['vgui'] conf.env.LIBPATH_VGUI = [os.path.abspath(os.path.join(conf.env.VGUI_DEV, 'lib/win32_vc6/'))] else: libpath = os.path.abspath(os.path.join(conf.env.VGUI_DEV, 'lib')) if conf.env.DEST_OS == 'linux': conf.env.LIB_VGUI = [':vgui.so'] conf.env.LIBPATH_VGUI = [libpath] elif conf.env.DEST_OS == 'darwin': conf.env.LDFLAGS_VGUI = [os.path.join(libpath, 'vgui.dylib')] else: conf.fatal('vgui is not supported on this OS: ' + conf.env.DEST_OS) conf.env.INCLUDES_VGUI = [os.path.abspath(os.path.join(conf.env.VGUI_DEV, 'include'))] conf.env.HAVE_VGUI = 1 conf.end_msg('yes: {0}, {1}, {2}'.format(conf.env.LIB_VGUI, conf.env.LIBPATH_VGUI, conf.env.INCLUDES_VGUI)) if conf.env.HAVE_VGUI and conf.options.VGUI_SANITY_CHECK: try: conf.check_cxx( fragment=''' #include int main( int argc, char **argv ) { return 0; }''', msg = 'Checking for library VGUI sanity', use = 'VGUI', execute = False) except conf.errors.ConfigurationError: conf.fatal("Can't compile simple program. Check your path to vgui-dev repository.") def build(bld): if bld.env.NO_VGUI: return libs = [] # basic build: dedicated only, no dependencies if bld.env.DEST_OS != 'win32': libs += ['DL','M'] libs.append('VGUI') source = bld.path.ant_glob(['*.cpp']) includes = [ '.', '../common', '../engine', '../public' ] bld.shlib( source = source, target = 'vgui_support', features = 'cxx', includes = includes, use = libs, rpath = '.', install_path = bld.env.LIBDIR, subsystem = bld.env.MSVC_SUBSYSTEM )