#!/usr/bin/env python import optparse import os import pprint import re import shlex import subprocess import sys root_dir = os.path.dirname(__file__) sys.path.insert(0, os.path.join(root_dir, 'deps', 'gyp', 'pylib')) import gyp # parse our options parser = optparse.OptionParser() parser.add_option("--debug", action="store_true", dest="debug", help="Also build debug build") parser.add_option("--boost", action="store", dest="boost_root", help="Path to boost (defaults to /usr/local)") parser.add_option("--glfw3", action="store", dest="glfw3", help="Path to gflw3 (defaults to using pkg-config)") parser.add_option("--png", action="store", dest="png", help="Path to png (defaults to using pkg-config)") parser.add_option("--png-includes", action="store", dest="png_includes", help="Path to png includes") parser.add_option("--png-libpath", action="store", dest="png_libpath", help="Path to png libs") (options, args) = parser.parse_args() def pkg_config(pkg): cmd = os.popen('pkg-config --static --libs %s' % pkg, 'r') libs = cmd.readline().strip() ret = cmd.close() if (ret): return None cmd = os.popen('pkg-config --cflags %s' % pkg, 'r') cflags = cmd.readline().strip() ret = cmd.close() if (ret): return None return (libs, cflags) def configure_llmr(o): if options.boost_root: o['variables']['boost_root'] = options.boost_root else: o['variables']['boost_root'] = '/usr/local' o['target_defaults']['default_configuration'] = 'Debug' if options.debug else 'Release' def configure_glfw3(o): if options.glfw3: libpath = os.path.join(options.glfw3,'lib') if os.path.exists(libpath): o['variables']['glfw3_libraries'] = ['-L'+libpath] o['variables']['glfw3_libraries'] += ['-lglfw3'] incpath = os.path.join(options.glfw3,'include') if os.path.exists(incpath): o['variables']['glfw3_cflags'] = ['-I'+incpath] else: ret = pkg_config('glfw3') if not ret: sys.stderr.write('could not find glfw3 with pkg-config') sys.exit(-1) o['variables']['glfw3_libraries'] = ret[0].split() o['variables']['glfw3_cflags'] = ret[1].split() def configure_png(o): if options.png or options.png_libpath or options.png_includes: libpath = None if options.png_libpath: libpath = options.png_libpath elif options.png: libpath = os.path.join(options.png,'lib') if libpath and os.path.exists(libpath): o['variables']['png_libraries'] = ['-L'+libpath] o['variables']['png_libraries'] += ['-lpng','-lz'] incpath = None if options.png_includes: incpath = options.png_includes elif options.png: incpath = os.path.join(options.png,'include') if incpath and os.path.exists(incpath): o['variables']['png_cflags'] = ['-I'+incpath] else: ret = pkg_config('libpng') if not ret: sys.stderr.write('could not find libpng with pkg-config') sys.exit(-1) o['variables']['png_libraries'] = ret[0].split() o['variables']['png_cflags'] = ret[1].split() def write(filename, data): filename = os.path.join(root_dir, filename) print "creating ", filename f = open(filename, 'w+') f.write(data) output = { 'variables': { 'python': sys.executable }, 'target_defaults' : { 'include_dirs': [], 'libraries': [], 'defines': [], 'cflags': [] } } def run_gyp(args): rc = gyp.main(args) if rc != 0: print 'Error running GYP' sys.exit(rc) if __name__ == '__main__': configure_llmr(output) configure_glfw3(output) configure_png(output) pprint.pprint(output, indent=2) write('config.gypi', "# Do not edit. Generated by the configure script.\n" + pprint.pformat(output, indent=2) + "\n") config = { 'BUILDTYPE': 'Debug' if options.debug else 'Release', 'PYTHON': sys.executable, } config = '\n'.join(map('='.join, config.iteritems())) + '\n' write('config.mk', '# Do not edit. Generated by the configure script.\n' + config) gyp_args = [] gyp_args.extend(['-f', 'make']) gyp_args.append(os.path.join(os.path.abspath(root_dir), 'llmr.gyp')) gyp_args.append('--depth=' + root_dir) output_dir = os.path.join(os.path.abspath(root_dir), 'out') gyp_args.extend(['--generator-output', output_dir]) gyp_args.extend(['-Goutput_dir=' + output_dir]) run_gyp(gyp_args)