On commence à mettre les données dans l'exe.
[minwii.git] / setup_win_exe.py
index 2a9b4e7..55050ab 100755 (executable)
@@ -26,16 +26,65 @@ def isSystemDLL(pathname):
     return origIsSystemDLL(pathname)
 py2exe.build_exe.isSystemDLL = isSystemDLL
 
     return origIsSystemDLL(pathname)
 py2exe.build_exe.isSystemDLL = isSystemDLL
 
-
-class pygame2exe(py2exe.build_exe.py2exe): #This hack make sure that pygame default font is copied: no need to modify code for specifying default font
-    def copy_extensions(self, extensions):
-        #Get pygame default font
-        pygamedir = os.path.split(pygame.base.__file__)[0]
-        pygame_default_font = os.path.join(pygamedir, pygame.font.get_default_font())
-
-        #Add font to list of extension to be copied
-        extensions.append(Module("pygame.font", pygame_default_font))
+def findPguThemesDir() :
+    import pgu.gui.theme
+    theme_file = pgu.gui.theme.__file__
+    dnames = []
+    dnames.append(os.path.join(os.path.dirname(theme_file),"..","..","data","themes"))
+    
+    #if the package is installed, and the package is installed
+    #in /usr/lib/python2.3/site-packages/pgu/
+    #or c:\python23\lib\site-packages\pgu\
+    #the data is in ... lib/../share/ ...
+    dnames.append(os.path.join(os.path.dirname(theme_file),"..","..","..","..","share","pgu","themes"))
+    dnames.append(os.path.join(os.path.dirname(theme_file),"..","..","..","..","..","share","pgu","themes"))
+    dnames.append(os.path.join(os.path.dirname(theme_file),"..","..","share","pgu","themes")) 
+    for dname in dnames:
+        if os.path.isdir(dname):
+            return dname
+    raise IOError('pgu themes folder not found')
+    
+
+class MinWii2exe(py2exe.build_exe.py2exe) :
+    def copy_extensions(self, extensions) :
         py2exe.build_exe.py2exe.copy_extensions(self, extensions)
         py2exe.build_exe.py2exe.copy_extensions(self, extensions)
+        
+        self.copyDataFiles('src/minwii/fonts', 'minwii/fonts')
+        self.copyDataFiles('src/minwii/soundfonts', 'minwii/soundfonts')
+        self.copyDataFiles('src/minwii/widgets/data', 'minwii/widgets/data')
+        self.copyDataFiles(findPguThemesDir(), 'data/themes')
+    
+    def copyDataFiles(self, src, dest) :
+        src = src.replace('/', os.path.sep)
+        reldest = dest.replace('/', os.path.sep)
+        dest = os.path.join(self.collect_dir, reldest)
+        
+        if not os.path.exists(dest) :
+            self.mkpath(dest)
+        
+        for path, dirs, files in os.walk(src) :
+            if '.svn' in path : continue
+            relpath = path[len(src)+1:]
+            if not os.path.exists(os.path.join(dest, relpath)) :
+                self.mkpath(os.path.join(dest, relpath))
+
+            for file in files :
+                s = os.path.join(path, file)
+                d = os.path.join(dest, relpath, file)
+                self.copy_file(s, d)
+                print os.path.join(reldest, relpath, file)
+                self.compiled_files.append(os.path.join(reldest, relpath, file))
+        
+
+#class pygame2exe(py2exe.build_exe.py2exe): #This hack make sure that pygame default font is copied: no need to modify code for specifying default font
+#    def copy_extensions(self, extensions):
+#        #Get pygame default font
+#        pygamedir = os.path.split(pygame.base.__file__)[0]
+#        pygame_default_font = os.path.join(pygamedir, pygame.font.get_default_font())
+#
+#        #Add font to list of extension to be copied
+#        extensions.append(Module("pygame.font", pygame_default_font))
+#        py2exe.build_exe.py2exe.copy_extensions(self, extensions)
 
 class BuildExe:
     def __init__(self):
 
 class BuildExe:
     def __init__(self):
@@ -98,7 +147,7 @@ class BuildExe:
 
 
         setup(
 
 
         setup(
-            cmdclass = {'py2exe': pygame2exe},
+            cmdclass = {'py2exe': MinWii2exe},
             version = self.project_version,
             description = self.project_description,
             name = self.project_name,
             version = self.project_version,
             description = self.project_description,
             name = self.project_name,
@@ -116,7 +165,7 @@ class BuildExe:
             console = [self.script],
             options = {'py2exe': {#'optimize': 2,
                                   'bundle_files': 1,
             console = [self.script],
             options = {'py2exe': {#'optimize': 2,
                                   'bundle_files': 1,
-                                  #'compressed': True,
+                                  'compressed': True,
                                   'excludes': self.exclude_modules,
                                   'packages': self.extra_modules,
                                   'dll_excludes': self.exclude_dll}
                                   'excludes': self.exclude_modules,
                                   'packages': self.extra_modules,
                                   'dll_excludes': self.exclude_dll}