Files
MapLibreParticleLab/configure
2014-02-04 11:08:11 -08:00

159 lines
4.4 KiB
Python
Executable File

#!/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)