From 0b087ecf92b5f59a8e32a5968a44c4dd3997d049 Mon Sep 17 00:00:00 2001 From: rdb Date: Wed, 23 Jan 2019 23:18:51 +0100 Subject: [PATCH] installpanda: create intermediate directories with mode 0755 too Fixes #541 --- makepanda/installpanda.py | 32 ++++++++++++++++++-------------- makepanda/makepandacore.py | 16 +++++++++++++--- 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/makepanda/installpanda.py b/makepanda/installpanda.py index 0b82fa11bd..ef8ddeab7e 100644 --- a/makepanda/installpanda.py +++ b/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") diff --git a/makepanda/makepandacore.py b/makepanda/makepandacore.py index 144d26f11a..74ce108adf 100644 --- a/makepanda/makepandacore.py +++ b/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: