From eef55f19d866ad9e87698cb209dd49c19869da3c Mon Sep 17 00:00:00 2001 From: Mitchell Stokes Date: Tue, 26 May 2020 22:31:36 -0700 Subject: [PATCH] makepanda: Add pyenv support Only tested on Linux with Clang Closes #943 --- makepanda/makepanda.py | 4 ++++ makepanda/makepandacore.py | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/makepanda/makepanda.py b/makepanda/makepanda.py index 8f04251970..2931353895 100755 --- a/makepanda/makepanda.py +++ b/makepanda/makepanda.py @@ -1972,6 +1972,10 @@ def CompileLink(dll, obj, opts): if GetOrigExt(x) != ".dat": cmd += ' ' + x + pyenv_prefix = GetPyenvPrefix() + if pyenv_prefix is not None: + cmd += ' -L' + os.path.join(pyenv_prefix, 'lib') + if (GetOrigExt(dll) == ".exe" and GetTarget() == 'windows' and "NOICON" not in opts): cmd += " " + GetOutputDir() + "/tmp/pandaIcon.res" diff --git a/makepanda/makepandacore.py b/makepanda/makepandacore.py index d26bbeed9d..589c69af5b 100644 --- a/makepanda/makepandacore.py +++ b/makepanda/makepandacore.py @@ -548,6 +548,24 @@ def GetFlex(): return FLEX +def GetPyenvPrefix(): + pyenv_prefix = None + try: + pyenv_prefix = subprocess.check_output(['pyenv', 'virtualenv-prefix']) + except subprocess.CalledProcessError: + pass + + try: + if pyenv_prefix is None: + pyenv_prefix = subprocess.check_output(['pyenv', 'prefix']) + except subprocess.CalledProcessError: + pass + + if pyenv_prefix is not None: + pyenv_prefix = pyenv_prefix.decode('utf8').strip() + return pyenv_prefix + + ######################################################################## ## ## LocateBinary @@ -3065,6 +3083,12 @@ def SetupBuildEnvironment(compiler): for dir in SYS_INC_DIRS: print(" " + dir) + # Check to see if pyenv is being used and update SYS dirs accordingly + pyenv_prefix = GetPyenvPrefix() + if pyenv_prefix is not None: + SYS_LIB_DIRS.insert(0, os.path.join(pyenv_prefix, 'lib')) + SYS_INC_DIRS.insert(0, os.path.join(pyenv_prefix, 'include')) + # If we're cross-compiling, no point in putting our output dirs on the path. if CrossCompiling(): return