]> git.lyx.org Git - lyx.git/blobdiff - development/scons/scons_utils.py
examples/he: - new splash.lyx
[lyx.git] / development / scons / scons_utils.py
index bd2c7b079a3e05cbe3adb5ae48ef42ae95c4136d..1e3d6acaefabd28b2b9344312acb74bb55018737 100644 (file)
@@ -33,6 +33,27 @@ def getVerFromConfigure(path):
     return 'x.x.x'
 
 
+def relativePath(path, base):
+    '''return relative path from base, which is usually top source dir'''
+    # full pathname of path
+    path1 = os.path.normpath(os.path.realpath(path)).split(os.sep)
+    path2 = os.path.normpath(os.path.realpath(base)).split(os.sep)
+    if path1[:len(path2)] != path2:
+        print "Path %s is not under top source directory" % path
+    if len(path2) == len(path1):
+        return ''
+    path3 = os.path.join(*path1[len(path2):]);
+    # replace all \ by / such that we get the same comments on Windows and *nix
+    path3 = path3.replace('\\', '/')
+    return path3
+
+
+def isSubDir(path, base):
+    '''Whether or not path is a subdirectory of base'''
+    path1 = os.path.normpath(os.path.realpath(path)).split(os.sep)
+    path2 = os.path.normpath(os.path.realpath(base)).split(os.sep)
+    return len(path2) <= len(path1) and path1[:len(path2)] == path2
+
 
 def writeToFile(filename, lines, append = False):
     " utility function: write or append lines to filename "
@@ -102,6 +123,44 @@ def env_nsis(source, target, env, for_signature):
     return ret
 
 
+def env_toc(target, source, env):
+    '''Generate target from source files'''
+    # this is very tricky because we need to use installed lyx2lyx with 
+    # correct lyx2lyx_version.py
+    sys.path.append(env['LYX2LYX_DEST'])
+    sys.path.append(env.Dir('$TOP_SRCDIR/lib/doc').abspath)
+    import doc_toc
+    # build toc
+    doc_toc.build_toc(str(target[0]), [file.abspath for file in source])
+    
+    
+def env_cat(target, source, env):
+    '''Cat source > target. Avoid pipe to increase portability'''
+    output = open(env.File(target[0]).abspath, 'w')
+    for src in source:
+        input = open(env.File(src).abspath)
+        output.write(input.read())
+        input.close()
+    output.close()
+
+
+def env_potfiles(target, source, env):
+    '''Build po/POTFILES.in'''
+    # command 
+    #   grep -l '_(\".*\")' `find src \( -name '*.h' -o -name '*.cpp' -o -name '*.cpp.in' \) -print` | grep -v -e "src/support/Package.cpp$$" | sort | uniq
+    # is used under *nix but windows users have to do these all in python
+    target_file = open(str(target[0]), "w")
+    potfiles = []
+    trans = re.compile('_\(".*"\)', re.M)
+    for file in source:
+        rel_file = relativePath(str(file), env.subst('$TOP_SRCDIR'))
+        if rel_file not in potfiles and trans.search(open(str(file)).read()):
+            potfiles.append(rel_file)
+    potfiles.sort()
+    print >> target_file, '\n'.join(potfiles)
+    target_file.close()
+
+    
 def createResFromIcon(env, icon_file, rc_file):
     ''' create a rc file with icon, and return res file (windows only) '''
     if os.name == 'nt':
@@ -703,7 +762,7 @@ def installCygwinPostinstallScript(path):
     ''' Install lyx.sh '''
     postinstall_script = os.path.join(path, 'lyx.sh')
     script = open(postinstall_script, 'w')
-    script.write('''#!/bin/sh
+    script.write(r'''#!/bin/sh
 
 # Add /usr/share/lyx/fonts to /etc/fonts/local.conf
 # if it is not already there.