From 3ba68b25d4a5033d10efbb576db2326df970995d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20B=C3=BChler?= Date: Wed, 25 Oct 2017 14:48:01 +0200 Subject: [scons] parse config programs output in a generic way --- SConstruct | 75 ++++++++++++++++++++++++++------------------------------------ 1 file changed, 31 insertions(+), 44 deletions(-) (limited to 'SConstruct') diff --git a/SConstruct b/SConstruct index 927af1e2..dfb2e496 100644 --- a/SConstruct +++ b/SConstruct @@ -130,6 +130,22 @@ class Autoconf: if self.conf.CheckType(type, '#include '): self.conf.env.Append(CPPFLAGS = [ '-DHAVE_' + underscorify(type) ]) + def CheckParseConfig(self, *args, **kw): + try: + self.conf.env.ParseConfig(*args, **kw) + return True + except Exception as e: + print(e.message, file=sys.stderr) + return False + + def CheckParseConfigForLib(self, lib, *args, **kw): + with self.restoreEnvLibs(): + self.env['LIBS'] = [] + if not self.CheckParseConfig(*args, **kw): + return False + self.env.Append(**{lib: self.env['LIBS']}) + return True + @staticmethod def __checkGmtOffInStructTm(context): source = """ @@ -524,24 +540,11 @@ if 1: ) if env['with_lua']: - def TryLua(autoconf, name): - with autoconf.restoreEnvLibs(): - autoconf.env['LIBS'] = [] - try: - print("Searching for lua: " + name + " >= 5.0") - autoconf.env.ParseConfig("pkg-config '" + name + " >= 5.0' --cflags --libs") - except Exception as e: - print("Failed: ", e, file = sys.stderr) - return False - autoconf.env.Append( - LIBLUA = autoconf.env['LIBS'], - CPPFLAGS = [ '-DHAVE_LUA_H' ], - ) - return True - found_lua = False for lua_name in ['lua5.3', 'lua-5.3', 'lua5.2', 'lua-5.2', 'lua5.1', 'lua-5.1', 'lua']: - if TryLua(autoconf, lua_name): + print("Searching for lua: " + lua_name + " >= 5.0") + if autoconf.CheckParseConfigForLib('LIBLUA', "pkg-config '" + lua_name + " >= 5.0' --cflags --libs"): + autoconf.env.Append(CPPFLAGS = [ '-DHAVE_LUA_H' ]) found_lua = True break if not found_lua: @@ -557,13 +560,9 @@ if 1: if env['with_mysql']: mysql_config = autoconf.checkProgram('mysql', 'mysql_config') - with autoconf.restoreEnvLibs(): - autoconf.env['LIBS'] = [] - autoconf.env.ParseConfig(mysql_config + ' --cflags --libs') - autoconf.env.Append( - CPPFLAGS = [ '-DHAVE_MYSQL_H', '-DHAVE_LIBMYSQL' ], - LIBMYSQL = 'mysqlclient', - ) + if not autoconf.CheckParseConfigForLib('LIBMYSQL', mysql_config + ' --cflags --libs'): + fail("Couldn't find mysql") + autoconf.env.Append(CPPFLAGS = [ '-DHAVE_MYSQL_H', '-DHAVE_LIBMYSQL' ]) if env['with_openssl']: if not autoconf.CheckLibWithHeader('ssl', 'openssl/ssl.h', 'C'): @@ -576,22 +575,14 @@ if 1: if env['with_pcre']: pcre_config = autoconf.checkProgram('pcre', 'pcre-config') - with autoconf.restoreEnvLibs(): - autoconf.env['LIBS'] = [] - autoconf.env.ParseConfig(pcre_config + ' --cflags --libs') - autoconf.env.Append( - CPPFLAGS = [ '-DHAVE_PCRE_H', '-DHAVE_LIBPCRE' ], - LIBPCRE = autoconf.env['LIBS'], - ) + if not autoconf.CheckParseConfigForLib('LIBPCRE', pcre_config + ' --cflags --libs'): + fail("Couldn't find pcre") + autoconf.env.Append(CPPFLAGS = [ '-DHAVE_PCRE_H', '-DHAVE_LIBPCRE' ]) if env['with_pgsql']: - with autoconf.restoreEnvLibs(): - autoconf.env['LIBS'] = [] - autoconf.env.ParseConfig('pkg-config libpq --cflags --libs') - autoconf.env.Append( - CPPFLAGS = [ '-DHAVE_PGSQL_H', '-DHAVE_LIBPGSQL' ], - LIBPGSQL = 'pq', - ) + if not autoconf.CheckParseConfigForLib('LIBPGSQL', 'pkg-config libpq --cflags --libs'): + fail("Couldn't find libpq") + autoconf.env.Append(CPPFLAGS = [ '-DHAVE_PGSQL_H', '-DHAVE_LIBPGSQL' ]) if env['with_sqlite3']: if not autoconf.CheckLibWithHeader('sqlite3', 'sqlite3.h', 'C'): @@ -611,13 +602,9 @@ if 1: if env['with_xml']: xml2_config = autoconf.checkProgram('xml', 'xml2-config') - with autoconf.restoreEnvLibs(): - autoconf.env['LIBS'] = [] - autoconf.env.ParseConfig(xml2_config + ' --cflags --libs') - autoconf.env.Append( - CPPFLAGS = [ '-DHAVE_LIBXML_H', '-DHAVE_LIBXML2' ], - LIBXML2 = autoconf.env['LIBS'], - ) + if not autoconf.CheckParseConfigForLib('LIBXML2', xml2_config + ' --cflags --libs'): + fail("Couldn't find xml2") + autoconf.env.Append(CPPFLAGS = [ '-DHAVE_LIBXML_H', '-DHAVE_LIBXML2' ]) if env['with_zlib']: if not autoconf.CheckLibWithHeader('z', 'zlib.h', 'C'): -- cgit v1.2.1