macOS build: simplify python install for new 10.9 libraries.
authorBrecht Van Lommel <brechtvanlommel@gmail.com>
Tue, 15 Aug 2017 13:47:48 +0000 (15:47 +0200)
committerBrecht Van Lommel <brechtvanlommel@gmail.com>
Tue, 15 Aug 2017 15:40:27 +0000 (17:40 +0200)
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.

build_files/build_environment/cmake/harvest.cmake
build_files/build_environment/cmake/numpy.cmake
build_files/build_environment/cmake/python.cmake
build_files/build_environment/cmake/requests.cmake
build_files/cmake/platform/platform_apple.cmake
source/creator/CMakeLists.txt

index dfdfe50ab493a21b10a97ce6f642e5f389273e9c..fbc9f8687f9a4e1041651cc6eac5dc9deacf65a4 100644 (file)
@@ -208,7 +208,9 @@ function(harvest from to)
                        FILES_MATCHING PATTERN ${pattern}
                        PATTERN "pkgconfig" EXCLUDE
                        PATTERN "cmake" EXCLUDE
-                       PATTERN "clang" EXCLUDE)
+                       PATTERN "clang" EXCLUDE
+                       PATTERN "__pycache__" EXCLUDE
+                       PATTERN "tests" EXCLUDE)
        endif()
 endfunction()
 
@@ -267,17 +269,7 @@ harvest(png/include png/include "*.h")
 harvest(png/lib png/lib "*.a")
 harvest(python/bin python/bin "python${PYTHON_SHORT_VERSION}m")
 harvest(python/include python/include "*h")
-if(UNIX AND NOT APPLE)
-       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(python/lib python/lib "*")
 harvest(schroedinger/lib/libschroedinger-1.0.a ffmpeg/lib/libschroedinger.a)
 harvest(sdl/include/SDL2 sdl/include "*.h")
 harvest(sdl/lib sdl/lib "libSDL2.a")
index ab196dc5eec95edab265013d323d7f4caef3eb8a..b1bf1691a2836d3b9d17f8d6b172207f78b83882 100644 (file)
@@ -37,9 +37,7 @@ if(WIN32)
                ${CMAKE_COMMAND} -E tar "cfvz" "${LIBDIR}/python35_numpy_${NUMPY_SHORT_VERSION}${NUMPY_ARCHIVE_POSTFIX}.tar.gz" "." 
        )
 else()
-       set(NUMPY_INSTALL
-               ${CMAKE_COMMAND} -E copy_directory "${BUILD_DIR}/numpy/src/external_numpy/build/lib.${PYTHON_ARCH2}-3.5/numpy/" "${LIBDIR}/numpy/"
-       )
+       set(NUMPY_INSTALL echo .)
 endif()
 
 ExternalProject_Add(external_numpy
index a24bbbb6aea0fbd8ee23f775beaf99ceb14c455d..c1c7bf7001c2e31cf38eee3fc24e4118135fcf13 100644 (file)
@@ -82,13 +82,7 @@ else()
                INSTALL_COMMAND ${PYTHON_CONFIGURE_ENV} && cd ${BUILD_DIR}/python/src/external_python/ && make install
                INSTALL_DIR ${LIBDIR}/python)
 
-       add_custom_command(
-               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)
+       add_custom_target(Make_Python_Environment ALL DEPENDS external_python)
 endif()
 
 if(MSVC)
index 399bfe4009ff5e122e26163feb4d8d09e776d3f6..f5aa26b0615eb050027e96897ead4c6ed2583835 100644 (file)
 # ***** END GPL LICENSE BLOCK *****
 
 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
                URL ${REQUESTS_URI}
                DOWNLOAD_DIR ${DOWNLOAD_DIR}
@@ -24,6 +30,8 @@ if(BUILD_MODE STREQUAL Release)
                PREFIX ${BUILD_DIR}/requests
                CONFIGURE_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)
index 6105f2e04deda296e687ab51ecd8ddf6c9c57245..00c5772e11c59e9ed254816031ff4903ecd78111 100644 (file)
@@ -93,7 +93,11 @@ if(WITH_PYTHON)
                # normally cached but not since we include them with blender
                set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/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_LINKFLAGS "-u _PyMac_Error")  # won't  build with this enabled
        else()
@@ -113,6 +117,9 @@ if(WITH_PYTHON)
        set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
        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}")
                message(FATAL_ERROR "Python executable missing: ${PYTHON_EXECUTABLE}")
        endif()
index 8f26e2484247da483aa3afdccb65ce5aea0df432..98a5a6ce644bde81369a8fa6b9a87d823a1ad281 100644 (file)
@@ -845,6 +845,13 @@ elseif(APPLE)
                        PATTERN "__MACOSX" EXCLUDE
                        PATTERN ".DS_Store" EXCLUDE
                        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()
 
@@ -908,41 +915,49 @@ elseif(APPLE)
 
        # python
        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,
-               # 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(
-                       extractpyzip
-                       DEPENDS ${PYTHON_EXTRACT_DIR})
-
-               set(PYTHON_ZIP "python_${CMAKE_OSX_ARCHITECTURES}.zip")
-
-               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})
-
-               add_dependencies(blender extractpyzip)
-
-               # copy extracted python files
-               install_dir(
-                       ${PYTHON_EXTRACT_DIR}
-                       \${TARGETDIR_VER}
-               )
-               # copy site-packages files
-               install_dir(
-                       ${LIBDIR}/release/site-packages
-                       \${TARGETDIR_VER}/python/lib/python${PYTHON_VERSION}
-               )
+               if(WITH_CXX11)
+                       # Copy the python libs into the install directory
+                       install_dir(
+                               ${PYTHON_LIBPATH}
+                               ${TARGETDIR_VER}/python/lib
+                       )
+               else()
+                       # 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(
+                               extractpyzip
+                               DEPENDS ${PYTHON_EXTRACT_DIR})
+
+                       set(PYTHON_ZIP "python_${CMAKE_OSX_ARCHITECTURES}.zip")
+
+                       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})
+
+                       add_dependencies(blender extractpyzip)
+
+                       # copy extracted python files
+                       install_dir(
+                               ${PYTHON_EXTRACT_DIR}
+                               \${TARGETDIR_VER}
+                       )
+                       # copy site-packages files
+                       install_dir(
+                               ${LIBDIR}/release/site-packages
+                               \${TARGETDIR_VER}/python/lib/python${PYTHON_VERSION}
+                       )
+               endif()
 
                install(DIRECTORY ${LIBDIR}/python/bin
                        DESTINATION ${TARGETDIR_VER}/python
@@ -997,19 +1012,27 @@ elseif(APPLE)
 
                # python
                if(WITH_PYTHON AND NOT WITH_PYTHON_FRAMEWORK)
-                       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
-                       install_dir(
-                               ${PYTHON_EXTRACT_DIR}
-                               \${PLAYER_TARGETDIR_VER}
-                       )
+                       if(WITH_CXX11)
+                               # Copy the python libs into the install directory
+                               install_dir(
+                                       ${PYTHON_LIBPATH}
+                                       ${PLAYER_TARGETDIR_VER}/python/lib
+                               )
+                       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
+                               install_dir(
+                                       ${PYTHON_EXTRACT_DIR}
+                                       \${PLAYER_TARGETDIR_VER}
+                               )
+                       endif()
                endif()
 
        endif()