From 9cbb51434b31d03cb60caa69c8b76a1b751e5c72 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 26 Aug 2019 10:11:51 +0000 Subject: [PATCH] [cmake] Build Tcl/Tk 8.6.9 on MacOS --- cmake/external_projects/tcltk.cmake | 163 ++++++++++++++++++---------- 1 file changed, 107 insertions(+), 56 deletions(-) diff --git a/cmake/external_projects/tcltk.cmake b/cmake/external_projects/tcltk.cmake index b071e495..49bc58eb 100644 --- a/cmake/external_projects/tcltk.cmake +++ b/cmake/external_projects/tcltk.cmake @@ -1,61 +1,112 @@ if(APPLE) - # use system tcl/tk - if((${PYTHON_VERSION_STRING} VERSION_EQUAL "3.7") OR (${PYTHON_VERSION_STRING} VERSION_GREATER "3.7")) - # fetch tcl/tk sources to match the one used in Python 3.7 - ExternalProject_Add(project_tcl - URL "https://prdownloads.sourceforge.net/tcl/tcl8.6.8-src.tar.gz" - URL_MD5 81656d3367af032e0ae6157eff134f89 - DOWNLOAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external_dependencies - UPDATE_COMMAND "" # Disable update - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - ) - ExternalProject_Add(project_tk - URL "https://prdownloads.sourceforge.net/tcl/tk8.6.8-src.tar.gz" - URL_MD5 5e0faecba458ee1386078fb228d008ba - DOWNLOAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external_dependencies - UPDATE_COMMAND "" # Disable update - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - ) - - get_filename_component(PYTHON_LIB_DIR ${PYTHON_LIBRARY} DIRECTORY) - find_library(TCL_LIBRARY libtcl8.6.dylib PATHS ${PYTHON_LIB_DIR} NO_DEFAULT_PATH) - find_library(TK_LIBRARY libtk8.6.dylib PATHS ${PYTHON_LIB_DIR} NO_DEFAULT_PATH) - - set(TCL_DIR ${CMAKE_CURRENT_BINARY_DIR}/dependencies/src/project_tcl) - set(TK_DIR ${CMAKE_CURRENT_BINARY_DIR}/dependencies/src/project_tk) - set(TCL_INCLUDE_PATH "${TCL_DIR}/generic;${TCL_DIR}/macosx") - set(TK_INCLUDE_PATH "${TK_DIR}/generic;${TK_DIR}/macosx;${TK_DIR}/xlib") - string(REPLACE ";" "$" TCL_INC "${TCL_INCLUDE_PATH}") - string(REPLACE ";" "$" TK_INC "${TK_INCLUDE_PATH}") - - ExternalProject_Add(project_tkdnd - URL "http://sourceforge.net/projects/tkdnd/files/TkDND/TkDND%202.8/tkdnd2.8-src.tar.gz" - URL_MD5 a6d47a996ea957416469b12965d4db91 - DEPENDS project_tcl project_tk - DOWNLOAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external_dependencies - PATCH_COMMAND patch < ${CMAKE_CURRENT_LIST_DIR}/tkdnd_macosx.patch - UPDATE_COMMAND "" # Disable update - BUILD_IN_SOURCE 1 - CMAKE_ARGS - -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/Contents/MacOS - -DTCL_INCLUDE_PATH=${TCL_INC} - -DTK_INCLUDE_PATH=${TK_INC} - -DTK_LIBRARY=${TK_LIBRARY} - -DTCL_LIBRARY=${TCL_LIBRARY} - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 - LOG_INSTALL 1 + set(tcl_prefix ${CMAKE_INSTALL_PREFIX}) + ExternalProject_Add(project_tcl + URL "http://sourceforge.net/projects/tcl/files/Tcl/8.6.9/tcl8.6.9-src.tar.gz" + URL_MD5 aa0a121d95a0e7b73a036f26028538d4 + DOWNLOAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external_dependencies + UPDATE_COMMAND "" # Disable update + CONFIGURE_COMMAND ../project_tcl/macosx/configure --enable-threads --enable-framework --prefix=${tcl_prefix} --libdir=${tcl_prefix}/Contents/Frameworks --bindir=${tcl_prefix}/Contents/Frameworks/Tcl.framework/bin + BUILD_COMMAND make -j4 binaries libraries + INSTALL_COMMAND make install-binaries install-headers install-libraries install-private-headers + LOG_DOWNLOAD 1 + LOG_BUILD 1 + LOG_CONFIGURE 1 + LOG_INSTALL 1 ) - -list(APPEND NETGEN_DEPENDENCIES project_tkdnd) - else() - find_package(TCL 8.5 REQUIRED) - endif() + + ExternalProject_Add(project_tk + DEPENDS project_tcl + URL "http://sourceforge.net/projects/tcl/files/Tcl/8.6.9/tk8.6.9.1-src.tar.gz" + URL_MD5 9efe3976468352dc894dae0c4e785a8e + DOWNLOAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external_dependencies + UPDATE_COMMAND "" # Disable update + CONFIGURE_COMMAND ../project_tk/macosx/configure --enable-aqua=yes --enable-threads --enable-framework --prefix=${tcl_prefix} --libdir=${tcl_prefix}/Contents/Frameworks --bindir=${tcl_prefix}/Contents/Frameworks/Tcl.framework/bin --with-tcl=${tcl_prefix}/Contents/Frameworks/Tcl.framework + BUILD_COMMAND make -j4 binaries libraries + INSTALL_COMMAND make install-binaries install-headers install-libraries install-private-headers + LOG_DOWNLOAD 1 + LOG_BUILD 1 + LOG_CONFIGURE 1 + LOG_INSTALL 1 + ) + + ExternalProject_Add(project_tkdnd + URL "https://sourceforge.net/projects/tkdnd/files/OS%20X%20Binaries/TkDND%202.8/tkdnd2.8-OSX-MountainLion.tar.gz" + URL_MD5 2dbb471b1d66c5f391f3c3c5b71548fb + DOWNLOAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external_dependencies + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory . ${CMAKE_INSTALL_PREFIX}/../MacOS + LOG_DOWNLOAD 1 + LOG_CONFIGURE 1 + LOG_BUILD 1 + LOG_INSTALL 1 + ) + + list(APPEND NETGEN_DEPENDENCIES project_tcl project_tk project_tkdnd) + list(APPEND CMAKE_PREFIX_PATH ${CMAKE_INSTALL_PREFIX}/Contents/Frameworks) + set(TCL_INCLUDE_PATH ${CMAKE_INSTALL_PREFIX}/Contents/Frameworks/Tcl.framework/Headers) + set(TCL_LIBRARY ${CMAKE_INSTALL_PREFIX}/Contents/Frameworks/Tcl.framework) + set(TK_LIBRARY ${CMAKE_INSTALL_PREFIX}/Contents/Frameworks/Tk.framework) + set(TK_INCLUDE_PATH ${CMAKE_INSTALL_PREFIX}/Contents/Frameworks/Tk.framework/Headers) + +# # use system tcl/tk +# if((${PYTHON_VERSION_STRING} VERSION_EQUAL "3.7") OR (${PYTHON_VERSION_STRING} VERSION_GREATER "3.7")) +# # fetch tcl/tk sources to match the one used in Python 3.7 +# ExternalProject_Add(project_tcl +# URL "https://prdownloads.sourceforge.net/tcl/tcl8.6.8-src.tar.gz" +# URL_MD5 81656d3367af032e0ae6157eff134f89 +# DOWNLOAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external_dependencies +# UPDATE_COMMAND "" # Disable update +# CONFIGURE_COMMAND "" +# BUILD_COMMAND "" +# INSTALL_COMMAND "" +# ) +# ExternalProject_Add(project_tk +# URL "https://prdownloads.sourceforge.net/tcl/tk8.6.8-src.tar.gz" +# URL_MD5 5e0faecba458ee1386078fb228d008ba +# DOWNLOAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external_dependencies +# UPDATE_COMMAND "" # Disable update +# CONFIGURE_COMMAND "" +# BUILD_COMMAND "" +# INSTALL_COMMAND "" +# ) +# +# get_filename_component(PYTHON_LIB_DIR ${PYTHON_LIBRARY} DIRECTORY) +# find_library(TCL_LIBRARY libtcl8.6.dylib PATHS ${PYTHON_LIB_DIR} NO_DEFAULT_PATH) +# find_library(TK_LIBRARY libtk8.6.dylib PATHS ${PYTHON_LIB_DIR} NO_DEFAULT_PATH) +# +# set(TCL_DIR ${CMAKE_CURRENT_BINARY_DIR}/dependencies/src/project_tcl) +# set(TK_DIR ${CMAKE_CURRENT_BINARY_DIR}/dependencies/src/project_tk) +# set(TCL_INCLUDE_PATH "${TCL_DIR}/generic;${TCL_DIR}/macosx") +# set(TK_INCLUDE_PATH "${TK_DIR}/generic;${TK_DIR}/macosx;${TK_DIR}/xlib") +# string(REPLACE ";" "$" TCL_INC "${TCL_INCLUDE_PATH}") +# string(REPLACE ";" "$" TK_INC "${TK_INCLUDE_PATH}") +# +# ExternalProject_Add(project_tkdnd +# URL "http://sourceforge.net/projects/tkdnd/files/TkDND/TkDND%202.8/tkdnd2.8-src.tar.gz" +# URL_MD5 a6d47a996ea957416469b12965d4db91 +# DEPENDS project_tcl project_tk +# DOWNLOAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external_dependencies +# PATCH_COMMAND patch < ${CMAKE_CURRENT_LIST_DIR}/tkdnd_macosx.patch +# UPDATE_COMMAND "" # Disable update +# BUILD_IN_SOURCE 1 +# CMAKE_ARGS +# -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/Contents/MacOS +# -DTCL_INCLUDE_PATH=${TCL_INC} +# -DTK_INCLUDE_PATH=${TK_INC} +# -DTK_LIBRARY=${TK_LIBRARY} +# -DTCL_LIBRARY=${TCL_LIBRARY} +# LOG_DOWNLOAD 1 +# LOG_CONFIGURE 1 +# LOG_BUILD 1 +# LOG_INSTALL 1 +# ) +# +# list(APPEND NETGEN_DEPENDENCIES project_tkdnd) +# else() +# find_package(TCL 8.5 REQUIRED) +# endif() elseif(WIN32)