]> git.lyx.org Git - lyx.git/blobdiff - development/scons/scons_utils.py
Scons: handle LYX_DATE in src/version.C
[lyx.git] / development / scons / scons_utils.py
index 5030f07221497460c5beb3eb120a4a8d02f696a7..e6c6aded651f66c28acd2c1f8dd6f890e5e30434 100644 (file)
@@ -58,19 +58,6 @@ def env_subst(target, source, env):
     #st = os.stat(str(source[0]))
     #os.chmod(str(target[0]), stat.S_IMODE(st[stat.ST_MODE]) | stat.S_IWRITE)
 
-
-#
-# glob filenames
-#
-def globSource(dir, pattern, build_dir = None, exclude = [], include = []):
-    ''' glob files, in dir and use build_dir as returned path name '''
-    # exclude 'exclude+include' to avoid duplicate items in files
-    files = include + filter(lambda x: x not in exclude + include, glob.glob1(dir, pattern))
-    if build_dir is None:
-        return files
-    else:
-        return ['%s/%s' % (build_dir, x) for x in files]
-
 #
 # autoconf tests
 #
@@ -153,11 +140,12 @@ int main()
     return ('int', 'int *', 'struct timeval *')
 
 
-def checkBoostLibraries(conf, libs, lib_paths, inc_paths, isDebug):
+def checkBoostLibraries(conf, libs, lib_paths, inc_paths, version, isDebug):
     ''' look for boost libraries
       libs: library names
       lib_paths: try these paths for boost libraries
       inc_paths: try these paths for boost headers
+      version:   required boost version
       isDebug:   if true, use debug libraries
     '''
     conf.Message('Checking for boost library %s... ' % ', '.join(libs))
@@ -180,17 +168,20 @@ def checkBoostLibraries(conf, libs, lib_paths, inc_paths, isDebug):
             files = glob.glob(os.path.join(path, 'libboost_%s-*.a' % lib))
             # check things like libboost_iostreams-gcc-mt-d-1_33_1.a
             if len(files) > 0:
+                # runtime code includes s,g,y,d,p,n, where we should look for
+                # d,g,y for debug, s,p,n for release
                 if isDebug:
-                    files = filter(lambda x: re.search('libboost_%s-\w+-mt-d-[\d-]+' % lib, x), files)
+                    lib_files = filter(lambda x: re.search('libboost_%s-\w+-mt-[^spn]+-%s.a' % (lib, version), x), files)
                 else:
-                    files = filter(lambda x: re.search('libboost_%s-\w+-mt-[\d-]+' % lib, x), files)
-                if len(files) == 0:
-                    print 'Warning: %s directory seems to have the boost libraries, but ' % path
-                    print 'I can not find one that has the form lib%s-xxx-mt[-d]-x_xx_x.a' % lib
-                    print 'Check your boost installation, or change select criteria in scons_util.py'
-            if len(files) > 0:
-                # get xxx-gcc-1_33_1 from /usr/local/lib/libboost_xxx-gcc-1_33_1.a
-                lib_names.append(files[0].split(os.sep)[-1][3:-2])
+                    lib_files = filter(lambda x: re.search('libboost_%s-\w+-mt-([^dgy]+-)*%s.a' % (lib, version), x), files)
+                if len(lib_files) == 0:
+                    print 'Warning: Can not find an appropriate boost library in %s.' % path
+                    lib_files = filter(lambda x: re.search('libboost_%s-[\w-]+%s.a' % (lib, version), x), files)
+                    if len(lib_files) > 0:
+                        print 'Use library %s' % lib_files[0]
+                if len(lib_files) > 0:
+                    # get xxx-gcc-1_33_1 from /usr/local/lib/libboost_xxx-gcc-1_33_1.a
+                    lib_names.append(lib_files[0].split(os.sep)[-1][3:-2])
         if len(lib_names) == len(libs):
             found_lib = True
             lib_path = path
@@ -198,15 +189,19 @@ def checkBoostLibraries(conf, libs, lib_paths, inc_paths, isDebug):
     if not found_lib:
         conf.Result('no')
         return (None, None, None)
+    # check version number in boost/version.hpp
+    def isValidBoostDir(dir):
+        file = os.path.join(dir, 'boost', 'version.hpp')
+        version_string = '#define BOOST_LIB_VERSION "%s"' % version
+        return os.path.isfile(file) and version_string in open(file).read()
     # check for boost header file
     for path in inc_paths:
-        # check path/boost/regex.h
-        if os.path.isfile(os.path.join(path, 'boost', 'regex.h')):
+        if isValidBoostDir(path):
             inc_path = path
             found_inc = True
-        else: # check path/boost_1_xx_x/boost
+        else:   # check path/boost_1_xx_x/boost
             dirs = glob.glob(os.path.join(path, 'boost-*'))
-            if len(dirs) > 0 and os.path.isfile(os.path.join(dirs[0], 'boost', 'regex.h')):
+            if len(dirs) > 0 and isValidBoostDir(dirs[0]):
                 inc_path = dirs[0]
                 found_inc = True
     # return result
@@ -246,23 +241,12 @@ int main()
 def checkIconvConst(conf):
     ''' check the declaration of iconv '''
     check_iconv_const = '''
-#include <stdlib.h>
 #include <iconv.h>
-extern
-#ifdef __cplusplus
-"C"
-#endif
-#if defined(__STDC__) || defined(__cplusplus)
-#ifndef LIBICONV_DLL_EXPORTED
-size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
-#endif
-#else
-size_t iconv();
-#endif
-
-int main()
-{
-    return 1;
+// this declaration will fail when there already exists a non const char** 
+// version which returns size_t
+double iconv(iconv_t cd,  char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft);
+int main() {
+    return 0; 
 }
 '''
     conf.Message('Check if the declaration of iconv needs const... ')