macOS build: simplify python install for new 10.9 libraries.

We stop using the .zip file and just have all files now in
lib/darwin/python/lib, along with numpy, numpy headers and requests.
This makes it consistent with Linux and simplifies code.

For old libraries the .zip stays, code for that gets removed when we
fully switch to new libraries.
This commit is contained in:
Brecht Van Lommel
2017-08-15 15:47:48 +02:00
parent 477ee3a9de
commit 535e83687d
6 changed files with 88 additions and 66 deletions

View File

@@ -208,7 +208,9 @@ function(harvest from to)
FILES_MATCHING PATTERN ${pattern} FILES_MATCHING PATTERN ${pattern}
PATTERN "pkgconfig" EXCLUDE PATTERN "pkgconfig" EXCLUDE
PATTERN "cmake" EXCLUDE PATTERN "cmake" EXCLUDE
PATTERN "clang" EXCLUDE) PATTERN "clang" EXCLUDE
PATTERN "__pycache__" EXCLUDE
PATTERN "tests" EXCLUDE)
endif() endif()
endfunction() endfunction()
@@ -267,17 +269,7 @@ harvest(png/include png/include "*.h")
harvest(png/lib png/lib "*.a") harvest(png/lib png/lib "*.a")
harvest(python/bin python/bin "python${PYTHON_SHORT_VERSION}m") harvest(python/bin python/bin "python${PYTHON_SHORT_VERSION}m")
harvest(python/include python/include "*h") harvest(python/include python/include "*h")
if(UNIX AND NOT APPLE) harvest(python/lib python/lib "*")
harvest(python/lib/libpython${PYTHON_SHORT_VERSION}m.a python/lib/libpython${PYTHON_SHORT_VERSION}m.a)
harvest(python/lib/python${PYTHON_SHORT_VERSION} python/lib/python${PYTHON_SHORT_VERSION} "*")
harvest(requests python/lib/python${PYTHON_SHORT_VERSION}/site-packages/requests "*")
harvest(numpy python/lib/python${PYTHON_SHORT_VERSION}/site-packages/numpy "*")
else()
harvest(python/lib/libpython${PYTHON_SHORT_VERSION}m.a python/lib/python${PYTHON_SHORT_VERSION}/libpython${PYTHON_SHORT_VERSION}m.a)
harvest(python/release release "*")
harvest(requests release/site-packages/requests "*")
harvest(numpy release/site-packages/numpy "*")
endif()
harvest(schroedinger/lib/libschroedinger-1.0.a ffmpeg/lib/libschroedinger.a) harvest(schroedinger/lib/libschroedinger-1.0.a ffmpeg/lib/libschroedinger.a)
harvest(sdl/include/SDL2 sdl/include "*.h") harvest(sdl/include/SDL2 sdl/include "*.h")
harvest(sdl/lib sdl/lib "libSDL2.a") harvest(sdl/lib sdl/lib "libSDL2.a")

View File

@@ -37,9 +37,7 @@ if(WIN32)
${CMAKE_COMMAND} -E tar "cfvz" "${LIBDIR}/python35_numpy_${NUMPY_SHORT_VERSION}${NUMPY_ARCHIVE_POSTFIX}.tar.gz" "." ${CMAKE_COMMAND} -E tar "cfvz" "${LIBDIR}/python35_numpy_${NUMPY_SHORT_VERSION}${NUMPY_ARCHIVE_POSTFIX}.tar.gz" "."
) )
else() else()
set(NUMPY_INSTALL set(NUMPY_INSTALL echo .)
${CMAKE_COMMAND} -E copy_directory "${BUILD_DIR}/numpy/src/external_numpy/build/lib.${PYTHON_ARCH2}-3.5/numpy/" "${LIBDIR}/numpy/"
)
endif() endif()
ExternalProject_Add(external_numpy ExternalProject_Add(external_numpy

View File

@@ -82,13 +82,7 @@ else()
INSTALL_COMMAND ${PYTHON_CONFIGURE_ENV} && cd ${BUILD_DIR}/python/src/external_python/ && make install INSTALL_COMMAND ${PYTHON_CONFIGURE_ENV} && cd ${BUILD_DIR}/python/src/external_python/ && make install
INSTALL_DIR ${LIBDIR}/python) INSTALL_DIR ${LIBDIR}/python)
add_custom_command( add_custom_target(Make_Python_Environment ALL DEPENDS external_python)
OUTPUT ${LIBDIR}/python/release/python_x86_64.zip
WORKING_DIRECTORY ${LIBDIR}/python
COMMAND mkdir -p release
COMMAND zip -r release/python_x86_64.zip lib/python${PYTHON_SHORT_VERSION} lib/pkgconfig --exclude *__pycache__*)
add_custom_target(Package_Python ALL DEPENDS external_python ${LIBDIR}/python/release/python_x86_64.zip)
add_custom_target(Make_Python_Environment ALL DEPENDS Package_Python)
endif() endif()
if(MSVC) if(MSVC)

View File

@@ -17,6 +17,12 @@
# ***** END GPL LICENSE BLOCK ***** # ***** END GPL LICENSE BLOCK *****
if(BUILD_MODE STREQUAL Release) if(BUILD_MODE STREQUAL Release)
if(WIN32)
set(REQUESTS_INSTALL_DIR ${LIBDIR}/requests)
else()
set(REQUESTS_INSTALL_DIR ${LIBDIR}/python/lib/python${PYTHON_SHORT_VERSION}/site-packages/requests)
endif()
ExternalProject_Add(external_requests ExternalProject_Add(external_requests
URL ${REQUESTS_URI} URL ${REQUESTS_URI}
DOWNLOAD_DIR ${DOWNLOAD_DIR} DOWNLOAD_DIR ${DOWNLOAD_DIR}
@@ -24,6 +30,8 @@ if(BUILD_MODE STREQUAL Release)
PREFIX ${BUILD_DIR}/requests PREFIX ${BUILD_DIR}/requests
CONFIGURE_COMMAND "" CONFIGURE_COMMAND ""
BUILD_COMMAND "" BUILD_COMMAND ""
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory ${BUILD_DIR}/requests/src/external_requests/requests ${LIBDIR}/requests INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory ${BUILD_DIR}/requests/src/external_requests/requests ${REQUESTS_INSTALL_DIR}
) )
add_dependencies(external_requests Make_Python_Environment)
endif(BUILD_MODE STREQUAL Release) endif(BUILD_MODE STREQUAL Release)

View File

@@ -93,7 +93,11 @@ if(WITH_PYTHON)
# normally cached but not since we include them with blender # normally cached but not since we include them with blender
set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}m") set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}m")
set(PYTHON_EXECUTABLE "${LIBDIR}/python/bin/python${PYTHON_VERSION}m") set(PYTHON_EXECUTABLE "${LIBDIR}/python/bin/python${PYTHON_VERSION}m")
set(PYTHON_LIBRARY python${PYTHON_VERSION}m) if(WITH_CXX11)
set(PYTHON_LIBRARY ${LIBDIR}/python/lib/libpython${PYTHON_VERSION}m.a)
else()
set(PYTHON_LIBRARY python${PYTHON_VERSION}m)
endif()
set(PYTHON_LIBPATH "${LIBDIR}/python/lib/python${PYTHON_VERSION}") set(PYTHON_LIBPATH "${LIBDIR}/python/lib/python${PYTHON_VERSION}")
# set(PYTHON_LINKFLAGS "-u _PyMac_Error") # won't build with this enabled # set(PYTHON_LINKFLAGS "-u _PyMac_Error") # won't build with this enabled
else() else()
@@ -113,6 +117,9 @@ if(WITH_PYTHON)
set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}") set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
set(PYTHON_LIBRARIES "${PYTHON_LIBRARY}") set(PYTHON_LIBRARIES "${PYTHON_LIBRARY}")
# needed for Audaspace, numpy is installed into python site-packages
set(NUMPY_INCLUDE_DIRS "${PYTHON_LIBPATH}/site-packages/numpy/core/include")
if(NOT EXISTS "${PYTHON_EXECUTABLE}") if(NOT EXISTS "${PYTHON_EXECUTABLE}")
message(FATAL_ERROR "Python executable missing: ${PYTHON_EXECUTABLE}") message(FATAL_ERROR "Python executable missing: ${PYTHON_EXECUTABLE}")
endif() endif()

View File

@@ -845,6 +845,13 @@ elseif(APPLE)
PATTERN "__MACOSX" EXCLUDE PATTERN "__MACOSX" EXCLUDE
PATTERN ".DS_Store" EXCLUDE PATTERN ".DS_Store" EXCLUDE
PATTERN "config-${PYTHON_VERSION}m/*.a" EXCLUDE # static lib PATTERN "config-${PYTHON_VERSION}m/*.a" EXCLUDE # static lib
PATTERN "lib2to3" EXCLUDE # ./lib2to3
PATTERN "tkinter" EXCLUDE # ./tkinter
PATTERN "lib-dynload/_tkinter.*" EXCLUDE # ./lib-dynload/_tkinter.co
PATTERN "idlelib" EXCLUDE # ./idlelib
PATTERN "test" EXCLUDE # ./test
PATTERN "turtledemo" EXCLUDE # ./turtledemo
PATTERN "turtle.py" EXCLUDE # ./turtle.py
) )
endmacro() endmacro()
@@ -908,41 +915,49 @@ elseif(APPLE)
# python # python
if(WITH_PYTHON AND NOT WITH_PYTHON_MODULE AND NOT WITH_PYTHON_FRAMEWORK) if(WITH_PYTHON AND NOT WITH_PYTHON_MODULE AND NOT WITH_PYTHON_FRAMEWORK)
# the python zip is first extracted as part of the build process, if(WITH_CXX11)
# and then later installed as part of make install. this is much # Copy the python libs into the install directory
# quicker, and means we can easily exclude files on copy install_dir(
# Not needed for PYTHON_MODULE or WEB_PLUGIN due uses Pyhon framework ${PYTHON_LIBPATH}
# use a hash of the .zip path to handle switching between different ${TARGETDIR_VER}/python/lib
# lib directories without needing a clean build )
string(SHA1 PYTHON_ZIP_HASH ${LIBDIR}/release/${PYTHON_ZIP}) else()
set(PYTHON_EXTRACT_DIR ${CMAKE_CURRENT_BINARY_DIR}/${PYTHON_ZIP_HASH}/python) # the python zip is first extracted as part of the build process,
# and then later installed as part of make install. this is much
# quicker, and means we can easily exclude files on copy
# Not needed for PYTHON_MODULE or WEB_PLUGIN due uses Pyhon framework
# use a hash of the .zip path to handle switching between different
# lib directories without needing a clean build
string(SHA1 PYTHON_ZIP_HASH ${LIBDIR}/release/${PYTHON_ZIP})
set(PYTHON_EXTRACT_DIR ${CMAKE_CURRENT_BINARY_DIR}/${PYTHON_ZIP_HASH}/python)
add_custom_target( add_custom_target(
extractpyzip extractpyzip
DEPENDS ${PYTHON_EXTRACT_DIR}) DEPENDS ${PYTHON_EXTRACT_DIR})
set(PYTHON_ZIP "python_${CMAKE_OSX_ARCHITECTURES}.zip") set(PYTHON_ZIP "python_${CMAKE_OSX_ARCHITECTURES}.zip")
add_custom_command( add_custom_command(
OUTPUT ${PYTHON_EXTRACT_DIR} OUTPUT ${PYTHON_EXTRACT_DIR}
COMMAND ${CMAKE_COMMAND} -E remove_directory "${PYTHON_EXTRACT_DIR}/" COMMAND ${CMAKE_COMMAND} -E remove_directory "${PYTHON_EXTRACT_DIR}/"
COMMAND ${CMAKE_COMMAND} -E make_directory "${PYTHON_EXTRACT_DIR}/" COMMAND ${CMAKE_COMMAND} -E make_directory "${PYTHON_EXTRACT_DIR}/"
COMMAND ${CMAKE_COMMAND} -E chdir "${PYTHON_EXTRACT_DIR}/" COMMAND ${CMAKE_COMMAND} -E chdir "${PYTHON_EXTRACT_DIR}/"
${CMAKE_COMMAND} -E tar xzfv "${LIBDIR}/release/${PYTHON_ZIP}" ${CMAKE_COMMAND} -E tar xzfv "${LIBDIR}/release/${PYTHON_ZIP}"
DEPENDS ${LIBDIR}/release/${PYTHON_ZIP}) DEPENDS ${LIBDIR}/release/${PYTHON_ZIP})
add_dependencies(blender extractpyzip) add_dependencies(blender extractpyzip)
# copy extracted python files # copy extracted python files
install_dir( install_dir(
${PYTHON_EXTRACT_DIR} ${PYTHON_EXTRACT_DIR}
\${TARGETDIR_VER} \${TARGETDIR_VER}
) )
# copy site-packages files # copy site-packages files
install_dir( install_dir(
${LIBDIR}/release/site-packages ${LIBDIR}/release/site-packages
\${TARGETDIR_VER}/python/lib/python${PYTHON_VERSION} \${TARGETDIR_VER}/python/lib/python${PYTHON_VERSION}
) )
endif()
install(DIRECTORY ${LIBDIR}/python/bin install(DIRECTORY ${LIBDIR}/python/bin
DESTINATION ${TARGETDIR_VER}/python DESTINATION ${TARGETDIR_VER}/python
@@ -997,19 +1012,27 @@ elseif(APPLE)
# python # python
if(WITH_PYTHON AND NOT WITH_PYTHON_FRAMEWORK) if(WITH_PYTHON AND NOT WITH_PYTHON_FRAMEWORK)
add_custom_command( if(WITH_CXX11)
OUTPUT ${PYTHON_EXTRACT_DIR} # Copy the python libs into the install directory
COMMAND ${CMAKE_COMMAND} -E remove_directory "${PYTHON_EXTRACT_DIR}/" install_dir(
COMMAND ${CMAKE_COMMAND} -E make_directory "${PYTHON_EXTRACT_DIR}/" ${PYTHON_LIBPATH}
COMMAND ${CMAKE_COMMAND} -E chdir "${PYTHON_EXTRACT_DIR}/" ${PLAYER_TARGETDIR_VER}/python/lib
${CMAKE_COMMAND} -E tar xzfv "${LIBDIR}/release/${PYTHON_ZIP}" )
DEPENDS ${LIBDIR}/release/${PYTHON_ZIP}) else()
add_custom_command(
OUTPUT ${PYTHON_EXTRACT_DIR}
COMMAND ${CMAKE_COMMAND} -E remove_directory "${PYTHON_EXTRACT_DIR}/"
COMMAND ${CMAKE_COMMAND} -E make_directory "${PYTHON_EXTRACT_DIR}/"
COMMAND ${CMAKE_COMMAND} -E chdir "${PYTHON_EXTRACT_DIR}/"
${CMAKE_COMMAND} -E tar xzfv "${LIBDIR}/release/${PYTHON_ZIP}"
DEPENDS ${LIBDIR}/release/${PYTHON_ZIP})
# copy extracted python files # copy extracted python files
install_dir( install_dir(
${PYTHON_EXTRACT_DIR} ${PYTHON_EXTRACT_DIR}
\${PLAYER_TARGETDIR_VER} \${PLAYER_TARGETDIR_VER}
) )
endif()
endif() endif()
endif() endif()