コード例 #1
0
def findLibWithHeader(env, libs, header, paths, lang='c++', try_link=True):
    from SCons.Script.SConscript import Configure
    inc_path = ''
    lib_path = ''
    # 'paths' may be a prefix, so look for lib and include subdirectories
    if type(paths) == str:
        # find the header file first
        for i in 'include', 'include64', 'include32', 'inc':
            inc = os.path.join(paths, i)
            if os.path.isfile(os.path.join(inc, header)):
                inc_path = inc
                break
        if inc_path == '':
            raise RuntimeError('%s not found under %s' % (header, paths))

        # now try to find a lib directory
        for l in 'lib', 'lib64', 'lib32':
            lp = os.path.join(paths, l)
            if os.path.isdir(lp):
                lib_path = lp
                break
        if lib_path == '':
            raise RuntimeError('No lib directory found under %s' % paths)
    else:
        if os.path.isfile(os.path.join(paths[0], header)):
            inc_path = paths[0]
        else:
            raise RuntimeError('%s not found under %s' % (header, paths[0]))
        if os.path.isdir(paths[1]):
            lib_path = paths[1]
        else:
            raise RuntimeError('%s is not a valid path.' % paths[1])

    if try_link:
        # now try the library
        conf = Configure(env.Clone())
        conf.env.AppendUnique(CPPPATH=[inc_path])
        conf.env.AppendUnique(LIBPATH=[lib_path])
        if type(libs) == str: libs = [libs]
        if len(libs) == 0: libs = ['']
        # we can't check for each library by itself since they may depend on
        # each other, so we add all libraries to the link line and check only
        # for one
        conf.env.AppendUnique(LIBS=libs)
        if not conf.CheckLibWithHeader(libs[0], header, lang):
            conf.Finish()
            raise RuntimeError('Unable to link against %s (paths: %s, %s)' %
                               (libs, inc_path, lib_path))

        conf.Finish()
    return inc_path, lib_path
コード例 #2
0
def checkCompiler(env):
    conf = Configure(env.Clone(), custom_tests = {'CheckComplexAcos': CheckComplexAcos})
    if 'CheckCXX' in dir(conf): # exists since scons 1.1.0
        if not conf.CheckCXX():
            print("Cannot run C++ compiler '%s' (check config.log)" % (env['CXX']))
            env.Exit(1)
    else:
        if not conf.CheckFunc('printf', language='c++'):
            print("Cannot run C++ compiler '%s' (check config.log)" % (env['CXX']))
            env.Exit(1)

    conf.env['buildvars']['cxx']=conf.env['CXX']

    if conf.CheckFunc('gethostname', language='c++'):
        conf.env.Append(CPPDEFINES = ['HAVE_GETHOSTNAME'])

    if conf.CheckCXXHeader('byteswap.h'):
        checkhdr="""#include <byteswap.h>
#define SCbswap32() {int x=0;bswap_32(x);}"""
        if conf.CheckFunc('SCbswap32', header=checkhdr, language='c++'):
            conf.env.Append(CPPDEFINES = ['HAVE_BYTESWAP_H'])
    if conf.CheckCXXHeader('sys/endian.h'):
        conf.env.Append(CPPDEFINES = ['HAVE_SYS_ENDIAN_H'])
    if conf.CheckCXXHeader('libkern/OSByteOrder.h'):
        conf.env.Append(CPPDEFINES = ['HAVE_OSBYTEORDER_H'])

    if not conf.CheckComplexAcos():
        conf.env.Append(CPPDEFINES = ['ESYS_USE_BOOST_ACOS'])
    
    return conf.Finish()
コード例 #3
0
def checkNumpy(env):
    if not detectModule(env, 'numpy'):
        print(
            "Cannot import numpy. If it is installed try setting your PYTHONPATH and probably %s"
            % env['LD_LIBRARY_PATH_KEY'])
        env.Exit(1)

    ## check for numpy header (optional)
    conf = Configure(env.Clone())
    numpy_h = False
    if conf.CheckCXXHeader(['Python.h', 'numpy/ndarrayobject.h']):
        numpy_h = True
    else:
        conda_prefix = os.environ.get('CONDA_PREFIX')
        if conda_prefix:
            # make a copy of CPPPATH so it can be restored if header check fails
            cpp_path_old = conf.env.get('CPPPATH', []).copy()
            conf.env.Append(CPPPATH=[
                conda_prefix + '/Lib/site-packages/numpy/core/include'
            ])
            if conf.CheckCXXHeader(['Python.h', 'numpy/ndarrayobject.h']):
                numpy_h = True
            else:
                conf.env['CPPPATH'] = cpp_path_old

    conf.env['numpy_h'] = numpy_h
    if numpy_h:
        conf.env.Append(CPPDEFINES=['ESYS_HAVE_NUMPY_H'])

    return conf.Finish()
コード例 #4
0
def checkPython(env):
    # First we check to see if the config file has specified
    # where to find the file. Ideally, this should be automatic
    # but we need to deal with the case where python is not in its INSTALL
    # directory.
    # Use the python scons is running
    if env['pythoncmd'] == sys.executable:
        if env['IS_WINDOWS']:
            python_inc_path=sysconfig.get_python_inc()
            python_lib_path=os.path.join(sysconfig.get_config_var('prefix'), 'libs')
            python_libs=['python%s%s'%(sys.version_info[0], sys.version_info[1])]
            verstring=".".join([str(i) for i in sys.version_info[:3]])
        else:
            (python_lib_path, python_libs,verstring, python_inc_path)=call_python_config()

    # if we want to use a python other than the one scons is running
    # Note: we assume scons is running python 2 in the following.
    else:
        (python_lib_path, python_libs,verstring, python_inc_path)=call_python_config(env['pythoncmd'])
    env['python_version'] = verstring
    ispython3 = (verstring[0] == '3')
    if ispython3:
        env.Append(CPPDEFINES=['ESPYTHON3'])
    env['buildvars']['python_version'] = verstring
    env['buildvars']['python'] = env['pythoncmd']
    # Check for an override from the config file.
    # Ideally, this should be automatic but we need to deal with the case
    # where python is not in its INSTALL directory
    if env['pythonlibpath'] != '':
        python_lib_path = env['pythonlibpath']

    if env['pythonincpath'] != '':
        python_inc_path = env['pythonincpath']

    if env['pythonlibname'] != '':
        python_libs = env['pythonlibname']

    conf = Configure(env.Clone())

    if env['sysheaderopt'] == '':
        conf.env.AppendUnique(CPPPATH = [python_inc_path])
    else:
        conf.env.Append(CCFLAGS = [env['sysheaderopt'], python_inc_path])

    conf.env.AppendUnique(LIBPATH = [python_lib_path])
    conf.env.AppendUnique(LIBS = python_libs)
    # The wrapper script needs to find the libs
    conf.env.PrependENVPath(env['LD_LIBRARY_PATH_KEY'], python_lib_path)

    if not conf.CheckCXXHeader('Python.h'):
        print("Cannot find python include files (tried 'Python.h' in directory %s)" % (python_inc_path))
        env.Exit(1)
    if not conf.CheckFunc('Py_Exit', language='c++'):
        print("Cannot find python library method Py_Exit (tried %s in directory %s)" % (python_libs, python_lib_path))
        env.Exit(1)

    return conf.Finish()
コード例 #5
0
ファイル: linux.py プロジェクト: Qiee996/osgedit
def checkDependencies(env):
    conf = Configure(env)
    checkPkgConfig(env, 'gtkmm-2.4')
    checkPkgConfig(env, 'libxml++-2.6')
    checkPkgConfig(env, 'gtkglext-1.0')
    checkPkgConfig(env, 'libgtksourceviewmm-1.0')
    if not conf.CheckCXXHeader('osg/Node'):
        raise Exception(
            'ERROR: You have to install OSG development package before compiling osgedit'
        )
    return conf.Finish()
コード例 #6
0
def checkNumpy(env):
    if not detectModule(env, 'numpy'):
        print("Cannot import numpy. If it is installed try setting your PYTHONPATH and probably %s"%env['LD_LIBRARY_PATH_KEY'])
        env.Exit(1)

    ## check for numpy header (optional)
    conf = Configure(env.Clone())
    if conf.CheckCXXHeader(['Python.h','numpy/ndarrayobject.h']):
        conf.env.Append(CPPDEFINES = ['ESYS_HAVE_NUMPY_H'])
        conf.env['numpy_h']=True
    else:
        conf.env['numpy_h']=False

    return conf.Finish()
コード例 #7
0
ファイル: FindPackages.py プロジェクト: dmoody256/BuildUtils
        def compileTest(self, env):
            env.Append(LIBS=['cairo'])
            conf = Configure(env,
                             conf_dir=self.conf_dir + "/findcairo",
                             log_file=self.conf_dir + "/findcairo/conf.log")

            result = conf.TryLink(
                """
            #include <cairo.h>
            int main()
            {
                const char* version = cairo_version_string();
                return 0;
            }
            """, '.c')
            conf.Finish()
            return result
コード例 #8
0
ファイル: FindPackages.py プロジェクト: dmoody256/BuildUtils
        def compileTest(self, env):
            env.Append(LIBS=['freetype'])
            conf = Configure(env,
                             conf_dir=self.conf_dir + "/findfreetype",
                             log_file=self.conf_dir + "/findfreetype/conf.log")

            result = conf.TryLink(
                """
            #include <ft2build.h>
            #include FT_FREETYPE_H
            int main()
            {
                FT_Library  library;
                FT_Init_FreeType( &library );
                return 0;
            }
            """, '.c')
            conf.Finish()
            return result
コード例 #9
0
ファイル: FindPackages.py プロジェクト: dmoody256/BuildUtils
        def compileTest(self, env):
            env.Append(LIB=['graphite2'])
            conf = Configure(env,
                             conf_dir=self.conf_dir + "/findgraphite2",
                             log_file=self.conf_dir +
                             "/findgraphite2/conf.log")

            result = conf.TryLink(
                """
            #include <graphite2/Font.h>
            int main()
            {
                int nMajor, nMinor, nBugFix;
                gr_engine_version(&nMajor, &nMinor, &nBugFix);
                return 0;
            }
            """, '.c')

            conf.Finish()
            return result
コード例 #10
0
ファイル: FindPackages.py プロジェクト: dmoody256/BuildUtils
        def compileTest(self, env):
            env.Append(LIBS=['glib-2.0'])
            conf = Configure(env,
                             conf_dir=self.conf_dir + "/findglib2",
                             log_file=self.conf_dir + "/findglib2/conf.log")

            result = conf.TryLink(
                """
            #include <glib.h>
            int main()
            {
                const gchar* check = glib_check_version (
                    GLIB_MAJOR_VERSION,
                    GLIB_MINOR_VERSION,
                    GLIB_MICRO_VERSION);
             
                return (int)check;
            }
            """, '.c')
            conf.Finish()
            return result
コード例 #11
0
ファイル: FindPackages.py プロジェクト: dmoody256/BuildUtils
        def compileTest(self, env):
            env.Append(LIB=['icuuc', 'icudata'])
            conf = Configure(env,
                             conf_dir=self.conf_dir + "/findicu",
                             log_file=self.conf_dir + "/findicu/conf.log")

            result = conf.TryLink(
                """
            #include <unicode/ucnv.h>
            int main()
            {
                UErrorCode status = U_ZERO_ERROR;
                UConverter *defConv;
                defConv = u_getDefaultConverter(&status);
                if (U_FAILURE(status)) {
                    return 1;
                }
                return 0;
            }
            """, '.c')

            conf.Finish()
            return result
コード例 #12
0
def checkPython(env):
    # First we check to see if the config file has specified
    # where to find the file. Ideally, this should be automatic
    # but we need to deal with the case where python is not in its INSTALL
    # directory.
    # Use the python scons is running
    if env['pythoncmd'] == sys.executable:
        if env['IS_WINDOWS']:
            python_inc_path = sysconfig.get_python_inc()
            python_lib_path = os.path.join(sysconfig.get_config_var('prefix'),
                                           'libs')
            python_libs = [
                'python%s%s' % (sys.version_info[0], sys.version_info[1])
            ]
            verstring = ".".join([str(i) for i in sys.version_info[:3]])
        else:
            (python_lib_path, python_libs, verstring,
             python_inc_path) = call_python_config(env['pythoncmd'])

    # if we want to use a python other than the one scons is running
    # Note: we assume scons is running python 2 in the following.
    else:
        if env['IS_WINDOWS']:
            cmd = "import os, sys\n"
            cmd += "from distutils import sysconfig\n"
            cmd += "print(sysconfig.get_python_inc())\n"
            cmd += "print(os.path.join(sysconfig.get_config_var('prefix'), 'libs'))\n"
            cmd += "print('python%s%s'%(sys.version_info[0], sys.version_info[1]))\n"
            cmd += "print('.'.join([str(i) for i in sys.version_info[:3]]))"
            pout = subprocess.Popen([env['pythoncmd'], '-c', cmd],
                                    stdout=subprocess.PIPE).stdout.read()
            if isinstance(pout, bytes):
                pout = pout.decode(sys.stdout.encoding)
            lines = pout.split('\n')
            python_inc_path = lines[0].strip()
            python_lib_path = lines[1].strip()
            python_libs = [lines[2].strip()]
            verstring = lines[3].strip()
        else:
            (python_lib_path, python_libs, verstring,
             python_inc_path) = call_python_config(env['pythoncmd'])

    if sys.version_info[0] == 3:
        if isinstance(verstring, str) is False:
            verstring = str(verstring, 'utf-8')
    else:
        if isinstance(verstring, basestring) is False:
            verstring = str(verstring, 'utf-8')

    env['python_version'] = verstring
    try:
        ispython3 = (verstring[0] == '3')
    except:
        ispython3 = sys.version_info[0] == 3
    if ispython3:
        env.Append(CPPDEFINES=['ESPYTHON3'])
    env['buildvars']['python_version'] = verstring
    env['buildvars']['python'] = env['pythoncmd']
    # Check for an override from the config file.
    # Ideally, this should be automatic but we need to deal with the case
    # where python is not in its INSTALL directory
    if env['pythonlibpath'] != '':
        python_lib_path = env['pythonlibpath']

    if env['pythonincpath'] != '':
        python_inc_path = env['pythonincpath']

    if env['pythonlibname'] != '':
        python_libs = env['pythonlibname']

    conf = Configure(env.Clone())

    if env['sysheaderopt'] == '':
        conf.env.AppendUnique(CPPPATH=[python_inc_path])
    else:
        conf.env.Append(CCFLAGS=[env['sysheaderopt'], python_inc_path])

    conf.env.AppendUnique(LIBPATH=[python_lib_path])
    conf.env.AppendUnique(LIBS=python_libs)
    # The wrapper script needs to find the libs
    conf.env.PrependENVPath(env['LD_LIBRARY_PATH_KEY'], python_lib_path)

    if not conf.CheckCXXHeader('Python.h'):
        print(
            "Cannot find python include files (tried 'Python.h' in directory %s)"
            % (python_inc_path))
        env.Exit(1)
    if not conf.CheckFunc('Py_Exit', language='c++'):
        print(
            "Cannot find python library method Py_Exit (tried %s in directory %s)"
            % (python_libs, python_lib_path))
        env.Exit(1)

    return conf.Finish()