[gobject-introspection] MSVC builds: Enhance and simplify build-related scripts



commit 3fa6934ac6d4ccc77fffc378861727fe322c95f1
Author: Chun-wei Fan <fanchunwei src gnome org>
Date:   Fri Mar 11 17:01:46 2016 +0800

    MSVC builds: Enhance and simplify build-related scripts
    
    This updates the replace.py script to support replacing multiple items in
    a file from GLib's build/win32, which allows us to simplify the script
    that is used to create cairo-1.0.gir for Visual Studio builds.

 build/win32/gen-win32-cairo-gir.py |   15 +++++----------
 build/win32/replace.py             |   13 ++++++++++---
 2 files changed, 15 insertions(+), 13 deletions(-)
---
diff --git a/build/win32/gen-win32-cairo-gir.py b/build/win32/gen-win32-cairo-gir.py
index 464d984..09a5a50 100644
--- a/build/win32/gen-win32-cairo-gir.py
+++ b/build/win32/gen-win32-cairo-gir.py
@@ -29,16 +29,11 @@ def main(argv):
     preset_gir_path = os.path.join(srcroot, 'gir')
 
     # Set up variables in cairo-1.0.gir.in to produce cairo-1.0.gir
-    replace.replace(os.path.join(preset_gir_path, 'cairo-1.0.gir.in'),
-                    'cairo-1.0.gir.tmp',
-                    '%CAIRO_GIR_PACKAGE%',
-                    'cairo-gobject')
-
-    replace.replace('cairo-1.0.gir.tmp',
-                    'cairo-1.0.gir',
-                    '%CAIRO_SHARED_LIBRARY%',
-                    args.dllname)
-    os.unlink('cairo-1.0.gir.tmp')
+    cairo_replace_items = {'%CAIRO_GIR_PACKAGE%': 'cairo-gobject',
+                           '%CAIRO_SHARED_LIBRARY%': args.dllname}
+    replace.replace_multi(os.path.join(preset_gir_path, 'cairo-1.0.gir.in'),
+                          'cairo-1.0.gir',
+                          cairo_replace_items)
 
 if __name__ == '__main__':
     sys.exit(main(sys.argv))
diff --git a/build/win32/replace.py b/build/win32/replace.py
index 69ef417..a81bab9 100644
--- a/build/win32/replace.py
+++ b/build/win32/replace.py
@@ -21,12 +21,19 @@ valid_actions = ['remove-prefix',
                  'replace-str',
                  'remove-str']
 
-def replace(src, dest, instring, outstring):
+def replace_multi(src, dest, replace_items):
     with open(src, 'r') as s:
         with open(dest, 'w') as d:
             for line in s:
-                i = line.replace(instring, outstring)
-                d.write(i)
+                replace_dict = dict((re.escape(key), value) \
+                               for key, value in replace_items.items())
+                replace_pattern = re.compile("|".join(replace_dict.keys()))
+                d.write(replace_pattern.sub(lambda m: \
+                        replace_dict[re.escape(m.group(0))], line))
+
+def replace(src, dest, instring, outstring):
+    replace_item = {instring: outstring}
+    replace_multi(src, dest, replace_item)
 
 def check_required_args(args, params):
     for param in params:


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]