فهرست منبع

installpanda: create intermediate directories with mode 0755 too

Fixes #541
rdb 6 سال پیش
والد
کامیت
0b087ecf92
2فایلهای تغییر یافته به همراه31 افزوده شده و 17 حذف شده
  1. 18 14
      makepanda/installpanda.py
  2. 13 3
      makepanda/makepandacore.py

+ 18 - 14
makepanda/installpanda.py

@@ -155,25 +155,29 @@ def InstallPanda(destdir="", prefix="/usr", outputdir="built", libdir=GetLibDir(
     libdir = prefix + "/" + libdir
 
     # Create the directory structure that we will be putting our files in.
-    oscmd("mkdir -m 0755 -p "+destdir+prefix+"/bin")
-    oscmd("mkdir -m 0755 -p "+destdir+prefix+"/include")
-    oscmd("mkdir -m 0755 -p "+destdir+prefix+"/include/panda3d")
-    oscmd("mkdir -m 0755 -p "+destdir+prefix+"/share/panda3d")
-    oscmd("mkdir -m 0755 -p "+destdir+prefix+"/share/mime-info")
-    oscmd("mkdir -m 0755 -p "+destdir+prefix+"/share/mime/packages")
-    oscmd("mkdir -m 0755 -p "+destdir+prefix+"/share/application-registry")
-    oscmd("mkdir -m 0755 -p "+destdir+prefix+"/share/applications")
-    oscmd("mkdir -m 0755 -p "+destdir+libdir+"/panda3d")
+    # Don't use os.makedirs or mkdir -p; neither properly set permissions for
+    # created intermediate directories.
+    MakeDirectory(destdir+prefix+"/bin", mode=0o755, recursive=True)
+    MakeDirectory(destdir+prefix+"/include", mode=0o755)
+    MakeDirectory(destdir+prefix+"/include/panda3d", mode=0o755)
+    MakeDirectory(destdir+prefix+"/share", mode=0o755)
+    MakeDirectory(destdir+prefix+"/share/panda3d", mode=0o755)
+    MakeDirectory(destdir+prefix+"/share/mime-info", mode=0o755)
+    MakeDirectory(destdir+prefix+"/share/mime", mode=0o755)
+    MakeDirectory(destdir+prefix+"/share/mime/packages", mode=0o755)
+    MakeDirectory(destdir+prefix+"/share/application-registry", mode=0o755)
+    MakeDirectory(destdir+prefix+"/share/applications", mode=0o755)
+    MakeDirectory(destdir+libdir+"/panda3d", mode=0o755, recursive=True)
 
     for python_version in python_versions:
-        oscmd("mkdir -m 0755 -p "+destdir+python_version["purelib"])
-        oscmd("mkdir -m 0755 -p "+destdir+python_version["platlib"]+"/panda3d")
+        MakeDirectory(destdir+python_version["purelib"], mode=0o755, recursive=True)
+        MakeDirectory(destdir+python_version["platlib"]+"/panda3d", mode=0o755, recursive=True)
 
     if (sys.platform.startswith("freebsd")):
-        oscmd("mkdir -m 0755 -p "+destdir+prefix+"/etc")
-        oscmd("mkdir -m 0755 -p "+destdir+"/usr/local/libdata/ldconfig")
+        MakeDirectory(destdir+prefix+"/etc", mode=0o755)
+        MakeDirectory(destdir+"/usr/local/libdata/ldconfig", mode=0o755, recursive=True)
     else:
-        oscmd("mkdir -m 0755 -p "+destdir+"/etc/ld.so.conf.d")
+        MakeDirectory(destdir+"/etc/ld.so.conf.d", mode=0o755, recursive=True)
 
     # Write the Config.prc file.
     Configrc = ReadFile(outputdir+"/etc/Config.prc")

+ 13 - 3
makepanda/makepandacore.py

@@ -1104,9 +1104,19 @@ def GetOptimizeOption(opts):
 ##
 ########################################################################
 
-def MakeDirectory(path):
-    if os.path.isdir(path): return 0
-    os.mkdir(path)
+def MakeDirectory(path, mode=None, recursive=False):
+    if os.path.isdir(path):
+        return
+
+    if recursive:
+        parent = os.path.dirname(path)
+        if parent and not os.path.isdir(parent):
+            MakeDirectory(parent, mode=mode, recursive=True)
+
+    if mode is not None:
+        os.mkdir(path, mode)
+    else:
+        os.mkdir(path)
 
 def ReadFile(wfile):
     try: