Browse Source

Distutils: Create per-platform build directories

Mitchell Stokes 9 years ago
parent
commit
9921cd5a97
1 changed files with 43 additions and 36 deletions
  1. 43 36
      direct/src/showutil/dist.py

+ 43 - 36
direct/src/showutil/dist.py

@@ -1,12 +1,14 @@
 import os
 import os
-import shutil
 import sys
 import sys
 
 
-import distutils.dist
 import distutils.command.build
 import distutils.command.build
 import distutils.core
 import distutils.core
+import distutils.dir_util
+import distutils.dist
+import distutils.file_util
 
 
 from direct.showutil import FreezeTool
 from direct.showutil import FreezeTool
+import panda3d.core as p3d
 
 
 class Distribution(distutils.dist.Distribution):
 class Distribution(distutils.dist.Distribution):
     def __init__(self, attrs):
     def __init__(self, attrs):
@@ -18,40 +20,45 @@ class Distribution(distutils.dist.Distribution):
 class build(distutils.command.build.build):
 class build(distutils.command.build.build):
     def run(self):
     def run(self):
         distutils.command.build.build.run(self)
         distutils.command.build.build.run(self)
-        builddir = self.build_base
-        basename = os.path.abspath(os.path.join(builddir, self.distribution.get_fullname()))
-        gamedir = self.distribution.game_dir
-        startfile = os.path.join(gamedir, self.distribution.mainfile)
-
-        if not os.path.exists(builddir):
-            os.makedirs(builddir)
-
-        freezer = FreezeTool.Freezer()
-        freezer.addModule('__main__', filename=startfile)
-        freezer.excludeModule('panda3d')
-        freezer.done(addStartupModules=True)
-        freezer.generateRuntimeFromStub(basename)
-
-        ignore_copy_list = [
-            '__pycache__',
-            self.distribution.mainfile,
-            *freezer.getAllModuleNames(),
-        ]
-
-        for item in os.listdir(gamedir):
-            src = os.path.join(gamedir, item)
-            dst = os.path.join(builddir, item)
-
-            if item in ignore_copy_list:
-                print("Skip", src)
-                continue
-
-            if os.path.isdir(src):
-                print("Copy dir", src, dst)
-                shutil.copytree(src, dst)
-            else:
-                print("Copy file", src, dst)
-                shutil.copy(src, dst)
+        platforms = [p3d.PandaSystem.get_platform()]
+
+        for platform in platforms:
+            builddir = os.path.join(self.build_base, platform)
+
+            if os.path.exists(builddir):
+                distutils.dir_util.remove_tree(builddir)
+            distutils.dir_util.mkpath(builddir)
+
+            basename = os.path.abspath(os.path.join(builddir, self.distribution.get_fullname()))
+            gamedir = self.distribution.game_dir
+            startfile = os.path.join(gamedir, self.distribution.mainfile)
+
+            freezer = FreezeTool.Freezer()
+            freezer.addModule('__main__', filename=startfile)
+            freezer.excludeModule('panda3d')
+            freezer.done(addStartupModules=True)
+            freezer.generateRuntimeFromStub(basename)
+
+            ignore_copy_list = [
+                '__pycache__',
+                self.distribution.mainfile,
+                *freezer.getAllModuleNames(),
+            ]
+
+            for item in os.listdir(gamedir):
+                src = os.path.join(gamedir, item)
+                dst = os.path.join(builddir, item)
+
+                if item in ignore_copy_list:
+                    print("skipping", src)
+                    continue
+
+                if os.path.isdir(src):
+                    #print("Copy dir", src, dst)
+                    distutils.dir_util.copy_tree(src, dst)
+                else:
+                    #print("Copy file", src, dst)
+                    distutils.file_util.copy_file(src, dst)
 
 
 
 
 def setup(**attrs):
 def setup(**attrs):