mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 16:58:40 -04:00
Improvements and fixes to installer generation on Linux
This commit is contained in:
parent
9c137426e3
commit
fef66d1fdd
@ -91,19 +91,54 @@ def WriteKeysFile(fname, info):
|
||||
fhandle.write("\n")
|
||||
fhandle.close()
|
||||
|
||||
def GetLibDir():
|
||||
# This one's a bit tricky. Some systems require us to install
|
||||
# 64-bits libraries into /usr/lib64, some into /usr/lib.
|
||||
# Debian forbids installing to lib64 nowadays, and the only distros
|
||||
# I know of that use lib64 are all RPM-based. So, the 'solution'
|
||||
# seems to be to use the rpm command to give us the libdir for now.
|
||||
def GetDebLibDir():
|
||||
""" Returns the lib dir according to the debian system. """
|
||||
# We're on Debian or Ubuntu, which use multiarch directories.
|
||||
# Call dpkg-architecture to get the multiarch libdir.
|
||||
handle = os.popen("dpkg-architecture -qDEB_HOST_MULTIARCH")
|
||||
multiarch = handle.read().strip()
|
||||
if handle.close():
|
||||
# It failed. Old Debian/Ubuntu version?
|
||||
pass
|
||||
elif len(multiarch) > 0:
|
||||
return "lib/" + multiarch
|
||||
|
||||
return "lib"
|
||||
|
||||
def GetRPMLibDir():
|
||||
""" Returns the lib dir according to the rpm system. """
|
||||
handle = os.popen("rpm -E '%_lib'")
|
||||
result = handle.read().strip()
|
||||
handle.close()
|
||||
if len(result) > 0:
|
||||
assert result == "lib64" or result == "lib"
|
||||
return result
|
||||
else:
|
||||
return "lib"
|
||||
|
||||
def GetLibDir():
|
||||
""" Returns the directory to install architecture-dependent
|
||||
libraries in, relative to the prefix directory. This may be
|
||||
something like "lib" or "lib64" or in some cases, something
|
||||
similar to "lib/x86_64-linux-gnu". """
|
||||
|
||||
# This one's a bit tricky. Some systems require us to install
|
||||
# 64-bits libraries into /usr/lib64, some into /usr/lib.
|
||||
# Debian forbids installing to lib64 nowadays, and the only distros
|
||||
# I know of that use lib64 are all RPM-based. So, the 'solution'
|
||||
# seems to be to use the rpm command to give us the libdir for now,
|
||||
# unless we know we're on debian, since rpm may be installed on
|
||||
# Debian and will give the wrong result. Ugh.
|
||||
|
||||
if os.environ.get("DEB_HOST_MULTIARCH"):
|
||||
# We're building inside the Debian build environment.
|
||||
return "lib/" + os.environ["DEB_HOST_MULTIARCH"]
|
||||
|
||||
if os.path.isfile('/etc/debian_version'):
|
||||
return GetDebLibDir()
|
||||
else:
|
||||
# Okay, maybe we're on an RPM-based system?
|
||||
return GetRPMLibDir()
|
||||
|
||||
# If Python is installed into /usr/lib64, it's probably safe
|
||||
# to assume that we should install there as well.
|
||||
@ -114,14 +149,19 @@ def GetLibDir():
|
||||
|
||||
return "lib"
|
||||
|
||||
def InstallPanda(destdir="", prefix="/usr", outputdir="built"):
|
||||
if (not prefix.startswith("/")): prefix = "/" + prefix
|
||||
libdir = prefix + "/" + GetLibDir()
|
||||
def InstallPanda(destdir="", prefix="/usr", outputdir="built", libdir=GetLibDir()):
|
||||
if (not prefix.startswith("/")):
|
||||
prefix = "/" + prefix
|
||||
libdir = prefix + "/" + libdir
|
||||
|
||||
# Determine the location of the Python executable and site-packages dir.
|
||||
PPATH = get_python_lib(1)
|
||||
if os.path.islink(sys.executable):
|
||||
PEXEC = os.path.join(os.path.dirname(sys.executable), os.readlink(sys.executable))
|
||||
else:
|
||||
PEXEC = sys.executable
|
||||
|
||||
# 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+"/share/panda3d")
|
||||
@ -131,11 +171,14 @@ def InstallPanda(destdir="", prefix="/usr", outputdir="built"):
|
||||
oscmd("mkdir -m 0755 -p "+destdir+prefix+"/share/applications")
|
||||
oscmd("mkdir -m 0755 -p "+destdir+libdir+"/panda3d")
|
||||
oscmd("mkdir -m 0755 -p "+destdir+PPATH)
|
||||
|
||||
if (sys.platform.startswith("freebsd")):
|
||||
oscmd("mkdir -m 0755 -p "+destdir+prefix+"/etc")
|
||||
oscmd("mkdir -m 0755 -p "+destdir+"/usr/local/libdata/ldconfig")
|
||||
else:
|
||||
oscmd("mkdir -m 0755 -p "+destdir+"/etc/ld.so.conf.d")
|
||||
|
||||
# Write the Config.prc file.
|
||||
Configrc = ReadFile(outputdir+"/etc/Config.prc")
|
||||
Configrc = Configrc.replace("model-path $THIS_PRC_DIR/..", "model-path "+prefix+"/share/panda3d")
|
||||
if (sys.platform.startswith("freebsd")):
|
||||
@ -144,14 +187,16 @@ def InstallPanda(destdir="", prefix="/usr", outputdir="built"):
|
||||
else:
|
||||
WriteFile(destdir+"/etc/Config.prc", Configrc)
|
||||
oscmd("cp "+outputdir+"/etc/Confauto.prc "+destdir+"/etc/Confauto.prc")
|
||||
|
||||
oscmd("cp -R "+outputdir+"/include "+destdir+prefix+"/include/panda3d")
|
||||
oscmd("cp -R "+outputdir+"/direct "+destdir+prefix+"/share/panda3d/")
|
||||
oscmd("cp -R "+outputdir+"/pandac "+destdir+prefix+"/share/panda3d/")
|
||||
oscmd("cp -R "+outputdir+"/panda3d "+destdir+PPATH+"/")
|
||||
oscmd("cp -R "+outputdir+"/models "+destdir+prefix+"/share/panda3d/")
|
||||
if os.path.isdir("samples"): oscmd("cp -R samples "+destdir+prefix+"/share/panda3d/")
|
||||
if os.path.isdir(outputdir+"/direct"): oscmd("cp -R "+outputdir+"/direct "+destdir+prefix+"/share/panda3d/")
|
||||
if os.path.isdir(outputdir+"/Pmw"): oscmd("cp -R "+outputdir+"/Pmw "+destdir+prefix+"/share/panda3d/")
|
||||
if os.path.isdir(outputdir+"/plugins"): oscmd("cp -R "+outputdir+"/plugins "+destdir+prefix+"/share/panda3d/")
|
||||
|
||||
WriteMimeFile(destdir+prefix+"/share/mime-info/panda3d.mime", MIME_INFO)
|
||||
WriteKeysFile(destdir+prefix+"/share/mime-info/panda3d.keys", MIME_INFO)
|
||||
WriteMimeXMLFile(destdir+prefix+"/share/mime/packages/panda3d.xml", MIME_INFO)
|
||||
@ -167,7 +212,6 @@ def InstallPanda(destdir="", prefix="/usr", outputdir="built"):
|
||||
else:
|
||||
oscmd("echo '"+libdir+"/panda3d'> "+destdir+"/etc/ld.so.conf.d/panda3d.conf")
|
||||
oscmd("chmod +x "+destdir+"/etc/ld.so.conf.d/panda3d.conf")
|
||||
oscmd("ln -f -s "+PEXEC+" "+destdir+prefix+"/bin/ppython")
|
||||
oscmd("cp "+outputdir+"/bin/* "+destdir+prefix+"/bin/")
|
||||
for base in os.listdir(outputdir+"/lib"):
|
||||
if (not base.endswith(".a")) or base == "libp3pystub.a":
|
||||
@ -190,9 +234,11 @@ def InstallPanda(destdir="", prefix="/usr", outputdir="built"):
|
||||
if (os.path.isfile(destdir+prefix+"/share/panda3d/direct/leveleditor/copyfiles.pl")):
|
||||
os.remove(destdir+prefix+"/share/panda3d/direct/leveleditor/copyfiles.pl")
|
||||
|
||||
def InstallRuntime(destdir="", prefix="/usr", outputdir="built"):
|
||||
if (not prefix.startswith("/")): prefix = "/" + prefix
|
||||
libdir = prefix + "/" + GetLibDir()
|
||||
def InstallRuntime(destdir="", prefix="/usr", outputdir="built", libdir=GetLibDir()):
|
||||
if (not prefix.startswith("/")):
|
||||
prefix = "/" + prefix
|
||||
libdir = prefix + "/" + libdir
|
||||
|
||||
oscmd("mkdir -m 0755 -p "+destdir+prefix+"/bin")
|
||||
oscmd("mkdir -m 0755 -p "+destdir+prefix+"/share/mime-info")
|
||||
oscmd("mkdir -m 0755 -p "+destdir+prefix+"/share/mime/packages")
|
||||
@ -245,7 +291,7 @@ if (__name__ == "__main__"):
|
||||
print("Installing Panda3D Runtime into " + destdir + options.prefix)
|
||||
InstallRuntime(destdir = destdir, prefix = options.prefix, outputdir = options.outputdir)
|
||||
else:
|
||||
print("Installing Panda3D into " + destdir + options.prefix)
|
||||
print("Installing Panda3D SDK into " + destdir + options.prefix)
|
||||
InstallPanda(destdir = destdir, prefix = options.prefix, outputdir = options.outputdir)
|
||||
print("Installation finished!")
|
||||
|
||||
|
@ -240,7 +240,13 @@ def parseopts(args):
|
||||
except:
|
||||
usage(0)
|
||||
print("Exception while parsing commandline:", sys.exc_info()[0])
|
||||
if (anything==0): usage(0)
|
||||
|
||||
if not anything:
|
||||
if RUNTIME:
|
||||
PkgEnableAll()
|
||||
else:
|
||||
usage("You should specify a list of packages to use or --everything to enable all packages.")
|
||||
|
||||
if (RTDIST and RUNTIME):
|
||||
usage("Options --runtime and --rtdist cannot be specified at the same time!")
|
||||
if (optimize=="" and (RTDIST or RUNTIME)): optimize = "4"
|
||||
@ -374,8 +380,8 @@ if (GetHost() == 'windows'):
|
||||
if (INSTALLER and RTDIST):
|
||||
exit("Cannot build an installer for the rtdist build!")
|
||||
|
||||
if (INSTALLER) and (PkgSkip("PYTHON")) and (not RUNTIME):
|
||||
exit("Cannot build installer without python")
|
||||
if (INSTALLER) and (PkgSkip("PYTHON")) and (not RUNTIME) and GetTarget() == 'windows':
|
||||
exit("Cannot build installer on Windows without python")
|
||||
|
||||
if (RTDIST) and (PkgSkip("JPEG")):
|
||||
exit("Cannot build rtdist without jpeg")
|
||||
@ -6145,7 +6151,8 @@ Priority: optional
|
||||
Architecture: ARCH
|
||||
Essential: no
|
||||
Depends: DEPENDS
|
||||
Recommends: panda3d-runtime, python-wxversion, python-profiler (>= PV), python-tk (>= PV), RECOMMENDS
|
||||
Recommends: RECOMMENDS
|
||||
Suggests: panda3d-runtime
|
||||
Provides: panda3d
|
||||
Conflicts: panda3d
|
||||
Replaces: panda3d
|
||||
@ -6207,7 +6214,6 @@ This package contains the SDK for development with Panda3D, install panda3d-runt
|
||||
/usr/share/application-registry/panda3d.applications
|
||||
/usr/share/applications/*.desktop
|
||||
/etc/ld.so.conf.d/panda3d.conf
|
||||
/usr/bin
|
||||
/usr/%_lib/panda3d
|
||||
%{python_sitearch}
|
||||
/usr/include/panda3d
|
||||
@ -6267,48 +6273,31 @@ WWW: http://www.panda3d.org/
|
||||
"""
|
||||
|
||||
def MakeInstallerLinux():
|
||||
if RUNTIME: # No worries, it won't be used
|
||||
PYTHONV = "python"
|
||||
else:
|
||||
if not RUNTIME and not PkgSkip("PYTHON"):
|
||||
PYTHONV = SDK["PYTHONVERSION"]
|
||||
else:
|
||||
PYTHONV = "python"
|
||||
PV = PYTHONV.replace("python", "")
|
||||
if (os.path.isdir("targetroot")): oscmd("chmod -R 755 targetroot")
|
||||
|
||||
# Clean and set up a directory to install Panda3D into
|
||||
oscmd("rm -rf targetroot data.tar.gz control.tar.gz panda3d.spec")
|
||||
oscmd("mkdir --mode=0755 targetroot")
|
||||
|
||||
if os.path.exists("/usr/bin/dpkg-deb"):
|
||||
# Invoke installpanda.py to install it into a temporary dir
|
||||
if RUNTIME:
|
||||
InstallRuntime(destdir = "targetroot", prefix = "/usr", outputdir = GetOutputDir())
|
||||
InstallRuntime(destdir="targetroot", prefix="/usr", outputdir=GetOutputDir(), libdir=GetDebLibDir())
|
||||
else:
|
||||
InstallPanda(destdir = "targetroot", prefix = "/usr", outputdir = GetOutputDir())
|
||||
InstallPanda(destdir="targetroot", prefix="/usr", outputdir=GetOutputDir(), libdir=GetDebLibDir())
|
||||
oscmd("chmod -R 755 targetroot/usr/share/panda3d")
|
||||
|
||||
if (os.path.exists("/usr/bin/rpmbuild") and not os.path.exists("/usr/bin/dpkg-deb")):
|
||||
oscmd("rm -rf targetroot/DEBIAN")
|
||||
oscmd("rpm -E '%_target_cpu' > "+GetOutputDir()+"/tmp/architecture.txt")
|
||||
ARCH = ReadFile(GetOutputDir()+"/tmp/architecture.txt").strip()
|
||||
pandasource = os.path.abspath(os.getcwd())
|
||||
if (RUNTIME):
|
||||
txt = RUNTIME_INSTALLER_SPEC_FILE[1:]
|
||||
else:
|
||||
txt = INSTALLER_SPEC_FILE[1:]
|
||||
txt = txt.replace("VERSION", VERSION).replace("RPMRELEASE", RPMRELEASE).replace("PANDASOURCE", pandasource).replace("PV", PV)
|
||||
WriteFile("panda3d.spec", txt)
|
||||
oscmd("fakeroot rpmbuild --define '_rpmdir "+pandasource+"' --buildroot '"+os.path.abspath("targetroot")+"' -bb panda3d.spec")
|
||||
if (RUNTIME):
|
||||
oscmd("mv "+ARCH+"/panda3d-runtime-"+VERSION+"-"+RPMRELEASE+"."+ARCH+".rpm .")
|
||||
else:
|
||||
oscmd("mv "+ARCH+"/panda3d-"+VERSION+"-"+RPMRELEASE+"."+ARCH+".rpm .")
|
||||
oscmd("rm -rf "+ARCH, True)
|
||||
|
||||
if (os.path.exists("/usr/bin/dpkg-deb")):
|
||||
oscmd("dpkg --print-architecture > "+GetOutputDir()+"/tmp/architecture.txt")
|
||||
ARCH = ReadFile(GetOutputDir()+"/tmp/architecture.txt").strip()
|
||||
pkg_arch = ReadFile(GetOutputDir()+"/tmp/architecture.txt").strip()
|
||||
if (RUNTIME):
|
||||
txt = RUNTIME_INSTALLER_DEB_FILE[1:]
|
||||
else:
|
||||
txt = INSTALLER_DEB_FILE[1:]
|
||||
txt = txt.replace("VERSION", DEBVERSION).replace("ARCH", ARCH).replace("PV", PV).replace("MAJOR", MAJOR_VERSION)
|
||||
txt = txt.replace("VERSION", DEBVERSION).replace("ARCH", pkg_arch).replace("PV", PV).replace("MAJOR", MAJOR_VERSION)
|
||||
txt = txt.replace("INSTSIZE", str(GetDirectorySize("targetroot") / 1024))
|
||||
oscmd("mkdir --mode=0755 -p targetroot/DEBIAN")
|
||||
oscmd("cd targetroot ; (find usr -type f -exec md5sum {} \;) > DEBIAN/md5sums")
|
||||
@ -6317,44 +6306,105 @@ def MakeInstallerLinux():
|
||||
WriteFile("targetroot/DEBIAN/conffiles","/etc/Config.prc\n")
|
||||
WriteFile("targetroot/DEBIAN/postinst","#!/bin/sh\necho running ldconfig\nldconfig\n")
|
||||
oscmd("cp targetroot/DEBIAN/postinst targetroot/DEBIAN/postrm")
|
||||
oscmd("mkdir targetroot/debian")
|
||||
WriteFile("targetroot/debian/control", "")
|
||||
if (RUNTIME):
|
||||
oscmd("ln -s .. targetroot/debian/panda3d-runtime")
|
||||
oscmd("cd targetroot ; dpkg-shlibdeps -xpanda3d-runtime debian/panda3d-runtime/usr/lib/*.so* debian/panda3d-runtime/usr/lib64/*.so* debian/panda3d-runtime/usr/bin/*")
|
||||
depends = ReadFile("targetroot/debian/substvars").replace("shlibs:Depends=", "").strip()
|
||||
WriteFile("targetroot/DEBIAN/control", txt.replace("DEPENDS", depends))
|
||||
|
||||
# Determine the package name and the locations that
|
||||
# dpkg-shlibdeps should look in for executables.
|
||||
lib_dir = GetLibDir()
|
||||
pkg_version = DEBVERSION
|
||||
if RUNTIME:
|
||||
pkg_name = "panda3d-runtime"
|
||||
lib_pattern = "debian/%s/usr/%s/*.so" % (pkg_name, lib_dir)
|
||||
else:
|
||||
oscmd("ln -s .. targetroot/debian/panda3d" + MAJOR_VERSION)
|
||||
oscmd("cd targetroot ; dpkg-gensymbols -v%s -ppanda3d%s -eusr/lib/panda3d/lib*.so* -eusr/lib64/panda3d/lib*.so* -ODEBIAN/symbols >/dev/null" % (DEBVERSION, MAJOR_VERSION))
|
||||
# Library dependencies are required, binary dependencies are recommended. Dunno why -xlibphysx-extras is needed, prolly a bug in their package
|
||||
oscmd("cd targetroot ; LD_LIBRARY_PATH=usr/lib/panda3d dpkg-shlibdeps --ignore-missing-info --warnings=2 -xpanda3d%s -xlibphysx-extras -Tdebian/substvars_dep debian/panda3d%s/usr/lib/panda3d/lib*.so* debian/panda3d%s/usr/lib64/panda3d/lib*.so*" % (MAJOR_VERSION, MAJOR_VERSION, MAJOR_VERSION))
|
||||
oscmd("cd targetroot ; LD_LIBRARY_PATH=usr/lib/panda3d dpkg-shlibdeps --ignore-missing-info --warnings=2 -xpanda3d%s -Tdebian/substvars_rec debian/panda3d%s/usr/bin/*" % (MAJOR_VERSION, MAJOR_VERSION))
|
||||
pkg_name = "panda3d" + MAJOR_VERSION
|
||||
lib_pattern = "debian/%s/usr/%s/panda3d/*.so*" % (pkg_name, lib_dir)
|
||||
bin_pattern = "debian/%s/usr/bin/*" % (pkg_name)
|
||||
|
||||
# dpkg-shlibdeps looks in the debian/{pkg_name}/DEBIAN/shlibs directory
|
||||
# and also expects a debian/control file, so we create this dummy set-up.
|
||||
oscmd("mkdir targetroot/debian")
|
||||
oscmd("ln -s .. targetroot/debian/" + pkg_name)
|
||||
WriteFile("targetroot/debian/control", "")
|
||||
|
||||
dpkg_shlibdeps = "dpkg-shlibdeps"
|
||||
if GetVerbose():
|
||||
dpkg_shlibdeps += " -v"
|
||||
|
||||
if RUNTIME:
|
||||
# The runtime doesn't export any useful symbols, so just query the dependencies.
|
||||
oscmd("cd targetroot; %(dpkg_shlibdeps)s -x%(pkg_name)s %(lib_pattern)s %(bin_pattern)s*" % locals())
|
||||
depends = ReadFile("targetroot/debian/substvars").replace("shlibs:Depends=", "").strip()
|
||||
recommends = ""
|
||||
else:
|
||||
pkg_name = "panda3d" + MAJOR_VERSION
|
||||
pkg_dir = "debian/panda3d" + MAJOR_VERSION
|
||||
|
||||
# Generate a symbols file so that other packages can know which symbols we export.
|
||||
oscmd("cd targetroot; dpkg-gensymbols -q -ODEBIAN/symbols -v%(pkg_version)s -p%(pkg_name)s -e%(lib_pattern)s" % locals())
|
||||
|
||||
# Library dependencies are required, binary dependencies are recommended.
|
||||
# We explicitly exclude libphysx-extras since we don't want to depend on PhysX.
|
||||
oscmd("cd targetroot; LD_LIBRARY_PATH=usr/%(lib_dir)s/panda3d %(dpkg_shlibdeps)s -Tdebian/substvars_dep --ignore-missing-info -x%(pkg_name)s -xlibphysx-extras %(lib_pattern)s" % locals())
|
||||
oscmd("cd targetroot; LD_LIBRARY_PATH=usr/%(lib_dir)s/panda3d %(dpkg_shlibdeps)s -Tdebian/substvars_rec --ignore-missing-info -x%(pkg_name)s %(bin_pattern)s" % locals())
|
||||
|
||||
# Parse the substvars files generated by dpkg-shlibdeps.
|
||||
depends = ReadFile("targetroot/debian/substvars_dep").replace("shlibs:Depends=", "").strip()
|
||||
recommends = ReadFile("targetroot/debian/substvars_rec").replace("shlibs:Depends=", "").strip()
|
||||
if PkgSkip("PYTHON")==0:
|
||||
depends += ", " + PYTHONV + ", python-pmw"
|
||||
recommends += ", python-wxversion, python-profiler (>= " + PV + "), python-tk (>= " + PV + ")"
|
||||
if PkgSkip("NVIDIACG")==0:
|
||||
depends += ", nvidia-cg-toolkit"
|
||||
if depends.startswith(', '):
|
||||
depends = depends[2:]
|
||||
WriteFile("targetroot/DEBIAN/control", txt.replace("DEPENDS", depends).replace("RECOMMENDS", recommends))
|
||||
|
||||
# Write back the dependencies, and delete the dummy set-up.
|
||||
txt = txt.replace("DEPENDS", depends.strip(', '))
|
||||
txt = txt.replace("RECOMMENDS", recommends.strip(', '))
|
||||
WriteFile("targetroot/DEBIAN/control", txt)
|
||||
oscmd("rm -rf targetroot/debian")
|
||||
|
||||
# Package it all up into a .deb file.
|
||||
oscmd("chmod -R 755 targetroot/DEBIAN")
|
||||
if (RUNTIME):
|
||||
oscmd("cd targetroot/DEBIAN ; chmod 644 control md5sums")
|
||||
oscmd("fakeroot dpkg-deb -b targetroot panda3d-runtime_"+DEBVERSION+"_"+ARCH+".deb")
|
||||
oscmd("chmod 644 targetroot/DEBIAN/control targetroot/DEBIAN/md5sums")
|
||||
if not RUNTIME:
|
||||
oscmd("chmod 644 targetroot/DEBIAN/conffiles targetroot/DEBIAN/symbols")
|
||||
oscmd("fakeroot dpkg-deb -b targetroot %s_%s_%s.deb" % (pkg_name, pkg_version, pkg_arch))
|
||||
|
||||
elif os.path.exists("/usr/bin/rpmbuild"):
|
||||
# Invoke installpanda.py to install it into a temporary dir
|
||||
if RUNTIME:
|
||||
InstallRuntime(destdir="targetroot", prefix="/usr", outputdir=GetOutputDir(), libdir=GetRPMLibDir())
|
||||
else:
|
||||
oscmd("cd targetroot/DEBIAN ; chmod 644 control md5sums conffiles symbols")
|
||||
oscmd("fakeroot dpkg-deb -b targetroot panda3d"+MAJOR_VERSION+"_"+DEBVERSION+"_"+ARCH+".deb")
|
||||
oscmd("chmod -R 755 targetroot")
|
||||
InstallPanda(destdir="targetroot", prefix="/usr", outputdir=GetOutputDir(), libdir=GetRPMLibDir())
|
||||
oscmd("chmod -R 755 targetroot/usr/share/panda3d")
|
||||
|
||||
if not (os.path.exists("/usr/bin/rpmbuild") or os.path.exists("/usr/bin/dpkg-deb")):
|
||||
oscmd("rpm -E '%_target_cpu' > "+GetOutputDir()+"/tmp/architecture.txt")
|
||||
ARCH = ReadFile(GetOutputDir()+"/tmp/architecture.txt").strip()
|
||||
pandasource = os.path.abspath(os.getcwd())
|
||||
|
||||
if RUNTIME:
|
||||
txt = RUNTIME_INSTALLER_SPEC_FILE[1:]
|
||||
else:
|
||||
txt = INSTALLER_SPEC_FILE[1:]
|
||||
# Add the binaries in /usr/bin explicitly to the spec file
|
||||
for base in os.listdir(GetOutputDir() + "/bin"):
|
||||
txt += "/usr/bin/%s\n" % (base)
|
||||
|
||||
# Write out the spec file.
|
||||
txt = txt.replace("VERSION", VERSION)
|
||||
txt = txt.replace("RPMRELEASE", RPMRELEASE)
|
||||
txt = txt.replace("PANDASOURCE", pandasource)
|
||||
txt = txt.replace("PV", PV)
|
||||
WriteFile("panda3d.spec", txt)
|
||||
|
||||
oscmd("fakeroot rpmbuild --define '_rpmdir "+pandasource+"' --buildroot '"+os.path.abspath("targetroot")+"' -bb panda3d.spec")
|
||||
if (RUNTIME):
|
||||
oscmd("mv "+ARCH+"/panda3d-runtime-"+VERSION+"-"+RPMRELEASE+"."+ARCH+".rpm .")
|
||||
else:
|
||||
oscmd("mv "+ARCH+"/panda3d-"+VERSION+"-"+RPMRELEASE+"."+ARCH+".rpm .")
|
||||
oscmd("rm -rf "+ARCH, True)
|
||||
|
||||
else:
|
||||
exit("To build an installer, either rpmbuild or dpkg-deb must be present on your system!")
|
||||
|
||||
# oscmd("chmod -R 755 targetroot")
|
||||
# oscmd("rm -rf targetroot data.tar.gz control.tar.gz panda3d.spec "+ARCH)
|
||||
|
||||
def MakeInstallerOSX():
|
||||
if (RUNTIME):
|
||||
# Invoke the make_installer script.
|
||||
@ -6589,7 +6639,8 @@ def MakeInstallerFreeBSD():
|
||||
cmd += " -d pkg-descr -f pkg-plist panda3d-%s" % VERSION
|
||||
oscmd(cmd)
|
||||
|
||||
if (INSTALLER != 0):
|
||||
try:
|
||||
if INSTALLER:
|
||||
ProgressOutput(100.0, "Building installer")
|
||||
target = GetTarget()
|
||||
if (target == 'windows'):
|
||||
@ -6613,6 +6664,8 @@ if (INSTALLER != 0):
|
||||
MakeInstallerFreeBSD()
|
||||
else:
|
||||
exit("Do not know how to make an installer for this platform")
|
||||
finally:
|
||||
SaveDependencyCache()
|
||||
|
||||
##########################################################################################
|
||||
#
|
||||
@ -6620,8 +6673,6 @@ if (INSTALLER != 0):
|
||||
#
|
||||
##########################################################################################
|
||||
|
||||
SaveDependencyCache()
|
||||
|
||||
WARNINGS.append("Elapsed Time: "+PrettyTime(time.time() - STARTTIME))
|
||||
|
||||
printStatus("Makepanda Final Status Report", WARNINGS)
|
||||
|
Loading…
x
Reference in New Issue
Block a user