Skip to content
This repository was archived by the owner on May 21, 2019. It is now read-only.

Commit 8e114ff

Browse files
committed
Compute Python library suffix in CMakeLists.txt
Introduce LLDB_PY_LIB_SUFFIX and use it in various places in the build. This lets the x.py-based build work properly without having to set LLVM_LIBDIR_SUFFIX. See https://bugs.llvm.org/show_bug.cgi?id=18957 for some discussion.
1 parent a0fc10c commit 8e114ff

File tree

5 files changed

+46
-6
lines changed

5 files changed

+46
-6
lines changed

CMakeLists.txt

+8-1
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ if(LLDB_BUILD_FRAMEWORK)
6464
include(LLDBFramework)
6565
endif()
6666

67+
if (NOT LLDB_DISABLE_PYTHON)
68+
execute_process(
69+
COMMAND
70+
${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/scripts/get_libdir_suffix.py
71+
OUTPUT_VARIABLE LLDB_PY_LIB_SUFFIX)
72+
endif ()
73+
6774
add_subdirectory(docs)
6875
if (NOT LLDB_DISABLE_PYTHON)
6976
if(LLDB_USE_SYSTEM_SIX)
@@ -181,7 +188,7 @@ if (NOT LLDB_DISABLE_PYTHON)
181188
--cfgBldDir=${LLDB_PYTHON_TARGET_DIR}
182189
--prefix=${CMAKE_BINARY_DIR}
183190
--cmakeBuildConfiguration=${CMAKE_CFG_INTDIR}
184-
--lldbLibDir=lib${LLVM_LIBDIR_SUFFIX}
191+
--lldbLibDir=lib${LLDB_PY_LIB_SUFFIX}
185192
${SIX_EXTRA_ARGS}
186193
${FINISH_EXTRA_ARGS}
187194
VERBATIM

docs/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ if(EPYDOC_EXECUTABLE)
3535
--url "http://lldb.llvm.org"
3636
${EPYDOC_OPTIONS}
3737
DEPENDS swig_wrapper liblldb
38-
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../../../lib${LLVM_LIBDIR_SUFFIX}/python2.7/site-packages
38+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../../../lib${LLDB_PY_LIB_SUFFIX}/python2.7/site-packages
3939
COMMENT "Generating LLDB Python API reference with epydoc" VERBATIM
4040
)
4141
endif(EPYDOC_EXECUTABLE)

scripts/CMakeLists.txt

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ include(FindPythonInterp)
1313

1414
if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
1515
set(SWIG_PYTHON_DIR
16-
${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR})
16+
${CMAKE_BINARY_DIR}/lib${LLDB_PY_LIB_SUFFIX}/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR})
1717
else()
18-
set(SWIG_PYTHON_DIR ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/site-packages)
18+
set(SWIG_PYTHON_DIR ${CMAKE_BINARY_DIR}/lib${LLDB_PY_LIB_SUFFIX}/site-packages)
1919
endif()
2020

21-
set(SWIG_INSTALL_DIR lib${LLVM_LIBDIR_SUFFIX})
21+
set(SWIG_INSTALL_DIR lib${LLDB_PY_LIB_SUFFIX})
2222

2323
# Generating the LLDB framework correctly is a bit complicated because the
2424
# framework depends on the swig output.

scripts/Python/modules/readline/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ set_target_properties(readline PROPERTIES
2424
LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/${PYTHON_DIRECTORY})
2525

2626
# Install the readline module.
27-
install(TARGETS readline LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib${LLVM_LIBDIR_SUFFIX}/${PYTHON_DIRECTORY})
27+
install(TARGETS readline LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib${LLDB_PY_LIB_SUFFIX}/${PYTHON_DIRECTORY})

scripts/get_libdir_suffix.py

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import distutils.sysconfig
2+
import os
3+
import platform
4+
import re
5+
import sys
6+
7+
8+
def get_python_libdir_suffix():
9+
"""Returns the appropropriate python libdir suffix.
10+
11+
@return the python libdir suffix, normally either "" or "64".
12+
"""
13+
if platform.system() != 'Linux':
14+
return ""
15+
16+
# We currently have a bug in lldb -P that does not account for
17+
# architecture variants in python paths for
18+
# architecture-specific modules. Handle the lookup here.
19+
# When that bug is fixed, we should just ask lldb for the
20+
# right answer always.
21+
arch_specific_libdir = distutils.sysconfig.get_python_lib(True, False)
22+
split_libdir = arch_specific_libdir.split(os.sep)
23+
lib_re = re.compile(r"^lib.+$")
24+
25+
for i in range(len(split_libdir)):
26+
match = lib_re.match(split_libdir[i])
27+
if match is not None:
28+
return split_libdir[i][3:]
29+
return ""
30+
31+
if __name__ == '__main__':
32+
sys.stdout.write(get_python_libdir_suffix())
33+
sys.exit(0)

0 commit comments

Comments
 (0)