]> git.lyx.org Git - lyx.git/blobdiff - development/scons/scons_utils.py
Scons: create libs directory for res file
[lyx.git] / development / scons / scons_utils.py
index 203a39a513a5a27a84bf51cbe4744215d4f193c7..14c0b101529cd86e383a00cbaae7d0f1cc17e7eb 100644 (file)
@@ -68,7 +68,6 @@ def env_subst(target, source, env):
             # multi-line replacement
             val = val.replace('\n',r'\\n\\\n')
             contents = re.sub('@'+k+'@', val, contents)
-            contents = re.sub('%'+k+'%', val, contents)
         except:
             pass
     target_file.write(contents + "\n")
@@ -76,6 +75,24 @@ 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)
 
+
+def createResFromIcon(env, icon_file, rc_file):
+    ''' create a rc file with icon, and return res file (windows only) '''
+    if os.name == 'nt':
+        rc_name = env.File(rc_file).abspath
+        dir = os.path.split(rc_name)[0]
+        if not os.path.isdir(dir):
+            os.makedirs(dir)
+        rc = open(rc_name, 'w')
+        print >> rc, 'IDI_ICON1  ICON DISCARDABLE "%s"' % \
+            os.path.join(env.Dir('$TOP_SRCDIR').abspath, 'development', 'win32',
+                'packaging', 'icons', icon_file)
+        rc.close()
+        return env.RES(rc_name)
+    else:
+        return []
+
+
 #
 # autoconf tests
 #
@@ -158,73 +175,86 @@ int main()
     return ('int', 'int *', 'struct timeval *')
 
 
-def checkBoostLibraries(conf, libs, lib_paths, inc_paths, version, isDebug):
+def checkBoostLibraries(conf, libs, lib_paths, inc_paths, versions, 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
+      versions:   supported boost versions
       isDebug:   if true, use debug libraries
     '''
     conf.Message('Checking for boost library %s... ' % ', '.join(libs))
+    libprefix = conf.env['LIBPREFIX']
+    libsuffix = '(%s|%s)' % (conf.env['LIBSUFFIX'], conf.env['SHLIBSUFFIX'])
     found_lib = False
     found_inc = False
     lib_names = []
     lib_path = None
     inc_path = None
     for path in lib_paths:
-        # direct form: e.g. libboost_iostreams.a
-        # ignore isDebug
-        if False not in [os.path.isfile(os.path.join(path, 'libboost_%s.a' % lib)) for lib in libs]:
-            conf.Result('yes')
-            found_lib = True
-            lib_path = path
-            lib_names = libs
-            break
+        conf.Log("Looking into %s\n" % path)
         for lib in libs:
             # get all the libs, then filter for the right library
-            files = glob.glob(os.path.join(path, 'libboost_%s-*.a' % lib))
+            files = glob.glob(os.path.join(path, '%sboost_%s-*.*' % (libprefix, lib)))
             # check things like libboost_iostreams-gcc-mt-d-1_33_1.a
             if len(files) > 0:
+                conf.Log("Find boost libraries: %s\n" % files)
                 # runtime code includes s,g,y,d,p,n, where we should look for
                 # d,g,y for debug, s,p,n for release
+                lib_files = []
                 if isDebug:
-                    lib_files = filter(lambda x: re.search('libboost_%s-\w+-mt-[^spn]+-%s.a' % (lib, version), x), files)
+                    for ver in versions:
+                        lib_files += filter(lambda x: re.search('%sboost_%s-\w+-mt-[^spn]+-%s%s' % (libprefix, lib, ver, libsuffix), x), files)
                 else:
-                    lib_files = filter(lambda x: re.search('libboost_%s-\w+-mt-([^dgy]+-)*%s.a' % (lib, version), x), files)
+                    for ver in versions:
+                        lib_files += filter(lambda x: re.search('%sboost_%s-\w+-mt-([^dgy]+-)*%s%s' % (libprefix, lib, ver, libsuffix), 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]
+                    # use alternative libraries
+                    for ver in versions:
+                        lib_files += filter(lambda x: re.search('%sboost_%s-[\w-]+%s%s' % (libprefix, lib, ver, libsuffix), x), files)
                 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])
+                    name = lib_files[0].split(os.sep)[-1][len(libprefix):]
+                    lib_names.append(name.split('.')[0])
+                    conf.Log("Qualified libraries: %s\n" % lib_names)
+                else:
+                    conf.Log("No qualified library is found.\n")
+                    break
         if len(lib_names) == len(libs):
             found_lib = True
             lib_path = path
             break
     if not found_lib:
+        if len(lib_names) == 0:
+            conf.Log("No boost library is found\n")
+        else:
+            conf.Log("Found boost libraries: %s\n" % lib_names)
         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()
+        version_file = os.path.join(dir, 'boost', 'version.hpp')
+        if not os.path.isfile(version_file):
+            return False
+        version_file_content = open(version_file).read()
+        version_strings = ['#define BOOST_LIB_VERSION "%s"' % ver for ver in versions]
+        return True in [x in version_file_content for x in version_strings]
     # check for boost header file
     for path in inc_paths:
+        conf.Log("Checking for inc path: %s\n" % path)
         if isValidBoostDir(path):
             inc_path = path
             found_inc = True
         else:   # check path/boost_1_xx_x/boost
             dirs = glob.glob(os.path.join(path, 'boost-*'))
             if len(dirs) > 0 and isValidBoostDir(dirs[0]):
+                conf.Log("Checing for sub directory: %s\n" % dirs[0])
                 inc_path = dirs[0]
                 found_inc = True
     # return result
     if found_inc:
         conf.Result('yes')
+        conf.Log('Using boost libraries %s\n' % (', '.join(lib_names)))
         return (lib_names, lib_path, inc_path)
     else:
         conf.Result('no')