diff --git a/CMakeLists.txt b/CMakeLists.txt
index c1e127469..6e80a8612 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -15,9 +15,84 @@
##You should have received a copy of the GNU Lesser General Public License
##along with pythonOCC. If not, see .
-cmake_minimum_required(VERSION 3.18)
+# 基本設定(ファイル先頭付近)
+cmake_minimum_required(VERSION 3.16)
+project(pythonocc-core)
+
+# OpenCASCADEの基本パス設定
+set(OCCT_ROOT "C:/OpenCASCADE-7.9.0" CACHE PATH "OpenCASCADE root directory")
+get_filename_component(OCCT_ROOT "${OCCT_ROOT}" ABSOLUTE)
+set(OpenCASCADE_DIR "${OCCT_ROOT}/occt-vc144-64/cmake" CACHE PATH "OpenCASCADE CMake directory")
+
+# サードパーティライブラリのパス
+set(THIRD_PARTY_DIR "${OCCT_ROOT}/3rdparty-vc14-64" CACHE PATH "Third party libraries directory")
+
+# Visual Studio設定
+if(MSVC)
+ # プロジェクト設定
+ set(CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE "x64")
+
+ # スタートアッププロジェクトの設定
+ add_library(pythonocc-core INTERFACE)
+ set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ PROPERTY VS_STARTUP_PROJECT "Tesselator")
+
+ # リンカー設定
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
+endif()
-project(PYTHONOCC)
+# ライブラリパスの設定と修正関数
+function(setup_opencascade_paths)
+ # ライブラリディレクトリの設定
+ set(_lib_dirs
+ "${THIRD_PARTY_DIR}/jemalloc-vc14-64/lib"
+ "${THIRD_PARTY_DIR}/draco-vc14-64/lib"
+ "${THIRD_PARTY_DIR}/tbb-2021.13.0-x64/lib"
+ )
+
+ foreach(_dir ${_lib_dirs})
+ if(EXISTS "${_dir}")
+ # パスを追加
+ list(APPEND CMAKE_PREFIX_PATH "${_dir}")
+ list(APPEND CMAKE_LIBRARY_PATH "${_dir}")
+
+ if(MSVC)
+ # MSVCのリンカーフラグを設定
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LIBPATH:\"${_dir}\"" PARENT_SCOPE)
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LIBPATH:\"${_dir}\"" PARENT_SCOPE)
+ endif()
+ endif()
+ endforeach()
+
+ # 親スコープに変数を伝播
+ set(CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH}" PARENT_SCOPE)
+ set(CMAKE_LIBRARY_PATH "${CMAKE_LIBRARY_PATH}" PARENT_SCOPE)
+endfunction()
+
+# OpenCASCADEのパス修正関数
+function(fix_opencascade_paths)
+ foreach(_lib ${OpenCASCADE_LIBRARIES})
+ if(TARGET ${_lib})
+ get_target_property(_loc ${_lib} IMPORTED_LOCATION)
+ if(_loc)
+ string(REPLACE "C:/work/occt" "${OCCT_ROOT}" _fixed_loc "${_loc}")
+ set_target_properties(${_lib} PROPERTIES
+ IMPORTED_LOCATION "${_fixed_loc}"
+ IMPORTED_LOCATION_RELEASE "${_fixed_loc}"
+ IMPORTED_LOCATION_DEBUG "${_fixed_loc}")
+ endif()
+ endif()
+ endforeach()
+endfunction()
+
+# パス設定を適用
+find_package(OpenCASCADE REQUIRED)
+if(OpenCASCADE_FOUND)
+ message(STATUS "OpenCASCADE version found: ${OpenCASCADE_VERSION}")
+ setup_opencascade_paths()
+ fix_opencascade_paths()
+endif()
# set pythonOCC version
set(PYTHONOCC_VERSION_MAJOR 7)
@@ -110,7 +185,12 @@ message(STATUS "Python library release: ${Python3_LIBRARY_RELEASE}")
########
# SWIG #
########
-find_package(SWIG 4.2.1...4.3.0 REQUIRED)
+find_package(SWIG REQUIRED)
+if(${SWIG_VERSION} VERSION_GREATER_EQUAL "4.3.1")
+ message(STATUS "Using SWIG version ${SWIG_VERSION}")
+else()
+ message(FATAL_ERROR "SWIG version ${SWIG_VERSION} is too old. Need 4.3.1 or higher")
+endif()
message(STATUS "SWIG version found: ${SWIG_VERSION}")
include(${SWIG_USE_FILE})
set(SWIG_FILES_PATH src/SWIG_files/wrapper)
@@ -184,6 +264,71 @@ if(NOT OCCT_GP_PNT_HEADER_LOCATION)
message(FATAL_ERROR "gp_Pnt.hxx can not be found.")
endif()
+# パスのリマップを実行
+fix_opencascade_paths()
+
+# ライブラリの検索パス設定
+set(CMAKE_LIBRARY_PATH
+ "${OCCT_ROOT}/occt-vc144-64/lib"
+ "${THIRD_PARTY_DIR}/jemalloc-vc14-64/lib"
+ "${THIRD_PARTY_DIR}/draco-vc14-64/lib"
+ "${THIRD_PARTY_DIR}/tbb-2021.13.0-x64/lib"
+ ${CMAKE_LIBRARY_PATH}
+)
+
+# ライブラリパスの修正を実行
+setup_opencascade_paths()
+
+# リンカー設定を修正
+if(MSVC)
+ # プロジェクトの基本設定
+ set(CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE "x64")
+
+ # VC++のディレクトリ設定を修正
+ set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${PROJECT_NAME})
+
+ # リンカーの追加のライブラリディレクトリを設定
+ set(_lib_dirs
+ "${THIRD_PARTY_DIR}/jemalloc-vc14-64/lib"
+ "${THIRD_PARTY_DIR}/draco-vc14-64/lib"
+ "${THIRD_PARTY_DIR}/tbb-2021.13.0-x64/lib"
+ )
+
+ # リンカーフラグを設定
+ foreach(_dir ${_lib_dirs})
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LIBPATH:\"${_dir}\"")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LIBPATH:\"${_dir}\"")
+ endforeach()
+
+ # プロジェクトごとのリンカー設定を追加
+ function(set_project_lib_dirs target)
+ get_target_property(_type ${target} TYPE)
+ if(_type STREQUAL "SHARED_LIBRARY" OR _type STREQUAL "EXECUTABLE")
+ foreach(_dir ${_lib_dirs})
+ target_link_directories(${target} PRIVATE ${_dir})
+ endforeach()
+ endif()
+ endfunction()
+
+ # swig_add_library呼び出し後に適用するフック
+ macro(post_swig_target_setup target)
+ set_project_lib_dirs(${target})
+ endmacro()
+endif()
+
+# サードパーティライブラリのパス設定(修正版)
+set(THIRD_PARTY_LIBS
+ "${THIRD_PARTY_DIR}/jemalloc-vc14-64/lib"
+ "${THIRD_PARTY_DIR}/draco-vc14-64/lib"
+ "${THIRD_PARTY_DIR}/tbb-2021.13.0-x64/lib"
+)
+
+# リンクディレクトリの設定を修正
+link_directories(
+ "${OCCT_ROOT}/occt-vc144-64/lib"
+ ${THIRD_PARTY_LIBS}
+)
+
##############################################
# Installation directory #
# by default, installed to site-packages/OCC #
@@ -288,11 +433,27 @@ set(CMAKE_SWIG_OUTDIR ${LIBRARY_OUTPUT_PATH})
# MODEL Toolkits #
##################
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${SWIG_FILES_PATH})
+set(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} "-I${THIRD_PARTY_DIR}/include")
+set(OCCT_TOOLKIT_MODEL
+ FSD
+ Message
+ NCollection
+ OSD
+ Plugin
+ Quantity
+ Resource
+ Standard
+ StdFail
+ Storage
+ TColStd # ← ここにTColStdが含まれているか確認
+ # ...他のモジュール...
+)
foreach(OCCT_MODULE ${OCCT_TOOLKIT_MODEL})
set(FILE ${SWIG_FILES_PATH}/${OCCT_MODULE}.i)
set_source_files_properties(${FILE} PROPERTIES CPLUSPLUS ON)
swig_add_library (${OCCT_MODULE} LANGUAGE python SOURCES ${FILE} TYPE MODULE)
swig_link_libraries(${OCCT_MODULE} ${OCCT_MODEL_LIBRARIES} Python3::Module)
+ post_swig_target_setup(${OCCT_MODULE})
endforeach(OCCT_MODULE)
###############
@@ -307,6 +468,7 @@ set(TESSELATOR_SOURCE_FILES
swig_add_library(Tesselator LANGUAGE python SOURCES ${TESSELATOR_SOURCE_FILES} TYPE MODULE)
swig_link_libraries(Tesselator ${OCCT_MODEL_LIBRARIES} Python3::Module)
+post_swig_target_setup(Tesselator)
#################
# Visualisation #
@@ -323,6 +485,7 @@ if(PYTHONOCC_WRAP_VISU)
set_source_files_properties(${FILE} PROPERTIES CPLUSPLUS ON)
swig_add_library (${OCCT_MODULE} LANGUAGE python SOURCES ${FILE} TYPE MODULE)
swig_link_libraries(${OCCT_MODULE} ${OCCT_MODEL_LIBRARIES} ${OCCT_VISUALIZATION_LIBRARIES} Python3::Module)
+ post_swig_target_setup(${OCCT_MODULE})
endforeach(OCCT_MODULE)
# Build third part modules
@@ -336,6 +499,7 @@ if(PYTHONOCC_WRAP_VISU)
swig_add_library(Visualization LANGUAGE python SOURCES ${VISUALIZATION_SOURCE_FILES} TYPE MODULE)
swig_link_libraries(Visualization ${OCCT_MODEL_LIBRARIES} ${OCCT_VISUALIZATION_LIBRARIES} Python3::Module)
+ post_swig_target_setup(Visualization)
if(APPLE)
# on OSX, always add /System/Library/Frameworks/Cocoa.framework, even
@@ -356,6 +520,7 @@ if(PYTHONOCC_WRAP_VISU)
swig_add_library(MeshDS LANGUAGE python SOURCES ${MESHDATASOURCE_SOURCE_FILES} TYPE MODULE)
swig_link_libraries(MeshDS ${OCCT_MODEL_LIBRARIES} ${OCCT_VISUALIZATION_LIBRARIES} Python3::Module)
+ post_swig_target_setup(MeshDS)
endif(PYTHONOCC_WRAP_VISU)
@@ -368,6 +533,7 @@ if(PYTHONOCC_WRAP_DATAEXCHANGE)
set_source_files_properties(${FILE} PROPERTIES CPLUSPLUS ON)
swig_add_library(${OCCT_MODULE} LANGUAGE python SOURCES ${FILE} TYPE MODULE)
swig_link_libraries(${OCCT_MODULE} ${OCCT_MODEL_LIBRARIES} ${OCCT_DATAEXCHANGE_LIBRARIES} Python3::Module)
+ post_swig_target_setup(${OCCT_MODULE})
endforeach(OCCT_MODULE)
endif(PYTHONOCC_WRAP_DATAEXCHANGE)
@@ -380,6 +546,7 @@ if(PYTHONOCC_WRAP_OCAF)
set_source_files_properties(${FILE} PROPERTIES CPLUSPLUS ON)
swig_add_library(${OCCT_MODULE} LANGUAGE python SOURCES ${FILE} TYPE MODULE)
swig_link_libraries(${OCCT_MODULE} ${OCCT_MODEL_LIBRARIES} ${OCCT_OCAF_LIBRARIES} Python3::Module)
+ post_swig_target_setup(${OCCT_MODULE})
endforeach(OCCT_MODULE)
endif(PYTHONOCC_WRAP_OCAF)
@@ -399,6 +566,7 @@ ${CMAKE_CURRENT_SOURCE_DIR}/src/Addons/Font3d.cpp
swig_add_library(Addons LANGUAGE python SOURCES ${ADDONS_SOURCE_FILES} TYPE MODULE)
swig_link_libraries(Addons ${OCCT_MODEL_LIBRARIES} ${OCCT_VISUALIZATION_LIBRARIES} Python3::Module)
+post_swig_target_setup(Addons)
################
# Installation #
diff --git a/CMakeLists_3rd_party.txt b/CMakeLists_3rd_party.txt
new file mode 100644
index 000000000..fdaf3e4f2
--- /dev/null
+++ b/CMakeLists_3rd_party.txt
@@ -0,0 +1,670 @@
+##Copyright (c) 2011-2025 Thomas Paviot (tpaviot@gmail.com)
+##
+##This file is part of pythonOCC.
+##
+##pythonOCC is free software: you can redistribute it and/or modify
+##it under the terms of the GNU Lesser General Public License as published by
+##the Free Software Foundation, either version 3 of the License, or
+##(at your option) any later version.
+##
+##pythonOCC is distributed in the hope that it will be useful,
+##but WITHOUT ANY WARRANTY; without even the implied warranty of
+##MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+##GNU Lesser General Public License for more details.
+##
+##You should have received a copy of the GNU Lesser General Public License
+##along with pythonOCC. If not, see .
+
+# 基本設定(ファイル先頭付近)
+cmake_minimum_required(VERSION 3.16)
+project(pythonocc-core)
+
+# OpenCASCADEの基本パス設定
+set(OCCT_ROOT "C:/OpenCASCADE-7.9.0" CACHE PATH "OpenCASCADE root directory")
+get_filename_component(OCCT_ROOT "${OCCT_ROOT}" ABSOLUTE)
+
+# サードパーティライブラリのパス
+set(THIRD_PARTY_DIR "${OCCT_ROOT}/3rdparty-vc14-64" CACHE PATH "Third party libraries directory")
+
+# Visual Studio設定
+if(MSVC)
+ # プロジェクト設定
+ set(CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE "x64")
+
+ # サードパーティライブラリのパスを確認
+ set(_lib_paths
+ "${THIRD_PARTY_DIR}/jemalloc-vc14-64/lib/jemalloc.lib"
+ "${THIRD_PARTY_DIR}/draco-vc14-64/lib/draco.lib"
+ "${THIRD_PARTY_DIR}/tbb-2021.13.0-x64/lib/tbb12.lib"
+ )
+
+ # 存在するライブラリのみリンク
+ foreach(_lib ${_lib_paths})
+ if(EXISTS "${_lib}")
+ message(STATUS "Found library: ${_lib}")
+ list(APPEND ADDITIONAL_LIBS "${_lib}")
+ else()
+ message(WARNING "Library not found: ${_lib}")
+ endif()
+ endforeach()
+
+ # リンカー設定の関数
+ function(setup_target_libs target)
+ if(TARGET ${target})
+ # リンカーフラグを設定
+ foreach(_lib ${ADDITIONAL_LIBS})
+ target_link_libraries(${target} PRIVATE "${_lib}")
+ endforeach()
+
+ # インクルードパスを設定
+ target_include_directories(${target} PRIVATE
+ "${OCCT_ROOT}/occt-vc144-64/inc"
+ "${THIRD_PARTY_DIR}/include"
+ )
+ endif()
+ endfunction()
+
+ # swig_add_libraryのフック
+ macro(post_swig_target_setup target)
+ setup_target_libs(${target})
+ endmacro()
+endif()
+
+# ライブラリパスの設定と修正関数
+function(setup_opencascade_paths)
+ # ライブラリディレクトリの設定
+ set(_lib_dirs
+ "${THIRD_PARTY_DIR}/jemalloc-vc14-64/lib"
+ "${THIRD_PARTY_DIR}/draco-vc14-64/lib"
+ "${THIRD_PARTY_DIR}/tbb-2021.13.0-x64/lib"
+ )
+
+ foreach(_dir ${_lib_dirs})
+ if(EXISTS "${_dir}")
+ # パスを追加
+ list(APPEND CMAKE_PREFIX_PATH "${_dir}")
+ list(APPEND CMAKE_LIBRARY_PATH "${_dir}")
+
+ if(MSVC)
+ # MSVCのリンカーフラグを設定
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LIBPATH:\"${_dir}\"" PARENT_SCOPE)
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LIBPATH:\"${_dir}\"" PARENT_SCOPE)
+ endif()
+ endif()
+ endforeach()
+
+ # 親スコープに変数を伝播
+ set(CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH}" PARENT_SCOPE)
+ set(CMAKE_LIBRARY_PATH "${CMAKE_LIBRARY_PATH}" PARENT_SCOPE)
+endfunction()
+
+# OpenCASCADEのパス修正関数
+function(fix_opencascade_paths)
+ foreach(_lib ${OpenCASCADE_LIBRARIES})
+ if(TARGET ${_lib})
+ get_target_property(_loc ${_lib} IMPORTED_LOCATION)
+ if(_loc)
+ string(REPLACE "C:/work/occt" "${OCCT_ROOT}" _fixed_loc "${_loc}")
+ set_target_properties(${_lib} PROPERTIES
+ IMPORTED_LOCATION "${_fixed_loc}"
+ IMPORTED_LOCATION_RELEASE "${_fixed_loc}"
+ IMPORTED_LOCATION_DEBUG "${_fixed_loc}")
+ endif()
+ endif()
+ endforeach()
+endfunction()
+
+# パス設定を適用
+find_package(OpenCASCADE REQUIRED)
+if(OpenCASCADE_FOUND)
+ message(STATUS "OpenCASCADE version found: ${OpenCASCADE_VERSION}")
+ setup_opencascade_paths()
+ fix_opencascade_paths()
+endif()
+
+# set pythonOCC version
+set(PYTHONOCC_VERSION_MAJOR 7)
+set(PYTHONOCC_VERSION_MINOR 9)
+set(PYTHONOCC_VERSION_PATCH 0)
+
+# Empty for official releases, set to -dev, -rc1, etc for development releases
+set(PYTHONOCC_VERSION_DEVEL)
+
+# set OCCT version
+set(OCCT_VERSION_MAJOR 7)
+set(OCCT_VERSION_MINOR 9)
+set(OCCT_VERSION_PATCH 0)
+
+set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
+
+## cmake policies
+# CMP0078: UseSWIG generates standard target names.
+if (POLICY CMP0078)
+ cmake_policy(SET CMP0078 NEW)
+endif(POLICY CMP0078)
+
+# CMP0086: UseSWIG honors SWIG_MODULE_NAME via -module
+if (POLICY CMP0086)
+ cmake_policy(SET CMP0086 NEW)
+endif(POLICY CMP0086)
+
+# Force C++ 11
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+set(BUILD_SHARED_LIBS ON)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+if(APPLE)
+ set(CMAKE_MACOSX_RPATH ON)
+ set(CMAKE_SKIP_BUILD_RPATH FALSE)
+ set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
+ set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib;@loader_path/../../../")
+ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+endif(APPLE)
+
+#############################
+# Option_With_Default macro #
+#############################
+macro(option_with_default OPTION_NAME OPTION_STRING OPTION_DEFAULT)
+ option(${OPTION_NAME} ${OPTION_STRING} ${OPTION_DEFAULT})
+endmacro(option_with_default OPTION_NAME OPTION_STRING OPTION_DEFAULT)
+
+#####################################################################
+# OpenGL. If available, enable compilation for Visualization module #
+#####################################################################
+find_package(OpenGL)
+include_directories(OPENGL_INCLUDE_DIR)
+
+#################
+# Build options #
+#################
+include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/OCCT_Modules.cmake)
+# add an option to choose toolkits to compile
+if(OPENGL_FOUND)
+ option_with_default(PYTHONOCC_WRAP_VISU "Compile Visualisation" ON)
+else(OPENGL_FOUND)
+ message(WARNING "OpenGL library not found, Visualization compilation is turned OFF")
+ set(PYTHONOCC_WRAP_VISU "Compile Visualisation" OFF)
+endif(OPENGL_FOUND)
+option_with_default(PYTHONOCC_WRAP_DATAEXCHANGE "Compile DataExchange wrapper" ON)
+option_with_default(PYTHONOCC_WRAP_OCAF "Compile OCCT Application Framework wrapper" ON)
+option_with_default(SWIG_HIDE_WARNINGS "Check this option if you want a less verbose swig output." ON)
+option_with_default(OCCT_HIDE_DEPRECATED "Check this option to disable deprecation warnings for OCCT." ON)
+option_with_default(PYTHONOCC_MESHDS_NUMPY "Enable using numpy to speed up mesh data source arrays (requires numpy dev libraries and headers)." OFF)
+
+############
+# Python 3 #
+############
+set(Python3_FIND_STRATEGY LOCATION)
+set(Python3_FIND_FRAMEWORK NEVER)
+if(PYTHONOCC_MESHDS_NUMPY)
+ find_package(Python3 3.9 COMPONENTS Interpreter Development NumPy REQUIRED)
+ include_directories(${Python3_NumPy_INCLUDE_DIRS})
+ message(STATUS "Numpy include directory: ${Python3_NumPy_INCLUDE_DIRS}")
+ set(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DBUILD_MESHDS_NUMPY)
+else(PYTHONOCC_MESHDS_NUMPY)
+ find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
+endif(PYTHONOCC_MESHDS_NUMPY)
+message(STATUS "Python3 interpreter:" ${Python3_EXECUTABLE})
+message(STATUS "Python include directory: ${Python3_INCLUDE_DIRS}")
+message(STATUS "Python library release: ${Python3_LIBRARY_RELEASE}")
+
+########
+# SWIG #
+########
+find_package(SWIG REQUIRED)
+if(${SWIG_VERSION} VERSION_GREATER_EQUAL "4.3.1")
+ message(STATUS "Using SWIG version ${SWIG_VERSION}")
+else()
+ message(FATAL_ERROR "SWIG version ${SWIG_VERSION} is too old. Need 4.3.1 or higher")
+endif()
+message(STATUS "SWIG version found: ${SWIG_VERSION}")
+include(${SWIG_USE_FILE})
+set(SWIG_FILES_PATH src/SWIG_files/wrapper)
+set(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -fvirtual)
+if(SWIG_HIDE_WARNINGS)
+ message(STATUS "Disabled SWIG warnings")
+ set(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -w302,401,402,412,314,509,512,504,325,503,520,350,351,383,389,394,395,404)
+endif()
+
+if(CMAKE_BUILD_TYPE STREQUAL "Release")
+ add_definitions(-DSWIG_PYTHON_SILENT_MEMLEAK)
+endif(CMAKE_BUILD_TYPE STREQUAL "Release")
+
+#########################
+# On Windows, see #1347 #
+#########################
+if(WIN32 AND OCCT_ESSENTIALS_ROOT)
+ # Générer le fichier config.py.in
+ file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/config.py.in
+ "# Configuration file generated by CMake
+
+OCCT_ESSENTIALS_ROOT = \"@OCCT_ESSENTIALS_ROOT@\"
+ ")
+ configure_file(
+ ${CMAKE_CURRENT_BINARY_DIR}/config.py.in
+ ${CMAKE_CURRENT_BINARY_DIR}/config.py
+ @ONLY
+ )
+ set(OCCT_ESSENTIALS_PATH ${OCCT_ESSENTIALS_ROOT})
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/config.py
+ DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}
+ )
+endif()
+
+################################
+# OCE include and lib location #
+################################
+if(OCCT_HIDE_DEPRECATED)
+ message(STATUS "Disabled deprecation warnings for OpenCASCADE")
+ add_definitions(-DOCCT_NO_DEPRECATED)
+endif(OCCT_HIDE_DEPRECATED)
+
+if(DEFINED OCCT_INCLUDE_DIR)
+ if(NOT DEFINED OCCT_LIBRARY_DIR)
+ message(FATAL_ERROR "OCCT_LIBRARY_DIR must be defined")
+ endif(NOT DEFINED OCCT_LIBRARY_DIR)
+ set(OCCT_INCLUDE_DIR ${OCCT_INCLUDE_DIR} CACHE PATH "OCCT include path")
+ set(OCCT_LIBRARY_DIR ${OCCT_LIBRARY_DIR} CACHE PATH "OCCT library path")
+ include_directories(${OCCT_INCLUDE_DIR})
+ link_directories(${OCCT_LIBRARY_DIR})
+# if OCCT_INCLUDE_DIR is not passed at command line,
+# find OCE automatically
+else(OCCT_INCLUDE_DIR)
+ find_package(OpenCASCADE ${OCCT_VERSION_MAJOR}.${OCCT_VERSION_MINOR}.${OCCT_VERSION_PATCH} EXACT REQUIRED)
+ if(OpenCASCADE_FOUND)
+ message(STATUS "OpenCASCADE version found: " ${OpenCASCADE_MAJOR_VERSION} "." ${OpenCASCADE_MINOR_VERSION} "." ${OpenCASCADE_MAINTENANCE_VERSION})
+ message(STATUS "OpenCASCADE include directory: " ${OpenCASCADE_INCLUDE_DIR})
+ message(STATUS "OpenCASCADE binary directory: " ${OpenCASCADE_BINARY_DIR})
+ include_directories(${OpenCASCADE_INCLUDE_DIR})
+ else(OpenCASCADE_FOUND) # set default paths
+ set(OCCT_INCLUDE_DIR /usr/local/include/opencascade CACHE PATH "OpenCASCADE include path")
+ set(OCCT_LIBRARY_DIR /usr/local/lib CACHE PATH "OpenCASCADE lib path")
+ include_directories(${OCCT_INCLUDE_DIR})
+ link_directories(${OCCT_LIBRARY_DIR})
+ endif(OpenCASCADE_FOUND)
+endif(DEFINED OCCT_INCLUDE_DIR)
+
+# After the OCC paths are properly set up,
+find_file(OCCT_GP_PNT_HEADER_LOCATION "gp_Pnt.hxx" PATHS ${OpenCASCADE_INCLUDE_DIR} ${OCCT_INCLUDE_DIR})
+if(NOT OCCT_GP_PNT_HEADER_LOCATION)
+ message(FATAL_ERROR "gp_Pnt.hxx can not be found.")
+endif()
+
+# パスのリマップを実行
+fix_opencascade_paths()
+
+# ライブラリの検索パス設定
+set(CMAKE_LIBRARY_PATH
+ "${OCCT_ROOT}/occt-vc144-64/lib"
+ "${THIRD_PARTY_DIR}/jemalloc-vc14-64/lib"
+ "${THIRD_PARTY_DIR}/draco-vc14-64/lib"
+ "${THIRD_PARTY_DIR}/tbb-2021.13.0-x64/lib"
+ ${CMAKE_LIBRARY_PATH}
+)
+
+# ライブラリパスの修正を実行
+setup_opencascade_paths()
+
+# リンカー設定を修正
+if(MSVC)
+ # プロジェクトの基本設定
+ set(CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE "x64")
+
+ # VC++のディレクトリ設定を修正
+ set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${PROJECT_NAME})
+
+ # リンカーの追加のライブラリディレクトリを設定
+ set(_lib_dirs
+ "${THIRD_PARTY_DIR}/jemalloc-vc14-64/lib"
+ "${THIRD_PARTY_DIR}/draco-vc14-64/lib"
+ "${THIRD_PARTY_DIR}/tbb-2021.13.0-x64/lib"
+ )
+
+ # リンカーフラグを設定
+ foreach(_dir ${_lib_dirs})
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LIBPATH:\"${_dir}\"")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LIBPATH:\"${_dir}\"")
+ endforeach()
+
+ # プロジェクトごとのリンカー設定を追加
+ function(set_project_lib_dirs target)
+ get_target_property(_type ${target} TYPE)
+ if(_type STREQUAL "SHARED_LIBRARY" OR _type STREQUAL "EXECUTABLE")
+ foreach(_dir ${_lib_dirs})
+ target_link_directories(${target} PRIVATE ${_dir})
+ endforeach()
+ endif()
+ endfunction()
+
+ # swig_add_library呼び出し後に適用するフック
+ macro(post_swig_target_setup target)
+ set_project_lib_dirs(${target})
+ endmacro()
+endif()
+
+# サードパーティライブラリのパス設定(修正版)
+set(THIRD_PARTY_LIBS
+ "${THIRD_PARTY_DIR}/jemalloc-vc14-64/lib"
+ "${THIRD_PARTY_DIR}/draco-vc14-64/lib"
+ "${THIRD_PARTY_DIR}/tbb-2021.13.0-x64/lib"
+)
+
+# リンクディレクトリの設定を修正
+link_directories(
+ "${OCCT_ROOT}/occt-vc144-64/lib"
+ ${THIRD_PARTY_LIBS}
+)
+
+##############################################
+# Installation directory #
+# by default, installed to site-packages/OCC #
+##############################################
+if(NOT DEFINED PYTHONOCC_INSTALL_DIRECTORY)
+ if(DEFINED ENV{SP_DIR} AND WIN32)
+ # TODO: following hack is azure specific, a recent update in azure
+ # prevent cmake to find correct paths of python3 on windows
+ # this should be removed as soon as possible
+ message(STATUS "conda-build running, using $ENV{SP_DIR} as install dir")
+ set(PYTHONOCC_INSTALL_DIRECTORY $ENV{SP_DIR}/OCC CACHE PATH "pythonocc install directory")
+ else(DEFINED ENV{SP_DIR} AND WIN32)
+ execute_process(COMMAND ${Python3_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; from os.path import relpath; print(relpath(get_python_lib(1,prefix='${CMAKE_INSTALL_PREFIX}'),'${CMAKE_INSTALL_PREFIX}'))" OUTPUT_VARIABLE python_lib OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set(PYTHONOCC_INSTALL_DIRECTORY ${python_lib}/OCC CACHE PATH "pythonocc install directory")
+ endif(DEFINED ENV{SP_DIR} AND WIN32)
+endif(NOT DEFINED PYTHONOCC_INSTALL_DIRECTORY)
+
+message(STATUS "pythonocc modules will be installed to: ${PYTHONOCC_INSTALL_DIRECTORY}")
+
+#############################################
+# List of OCE shared libraries to link with #
+#############################################
+set(OCCT_MODEL_LIBRARIES TKernel TKMath TKBRep TKG2d TKG3d TKGeomBase TKBO
+ TKBool TKFeat TKFillet TKGeomAlgo TKHLR TKMesh TKOffset
+ TKPrim TKShHealing TKTopAlgo TKXMesh)
+set(OCCT_VISUALIZATION_LIBRARIES TKService TKV3d TKOpenGl TKMeshVS)
+set(OCCT_DATAEXCHANGE_LIBRARIES TKDE TKXSBase TKDESTEP TKDEIGES TKDESTL TKDEVRML TKDECascade TKDEOBJ TKDEGLTF TKDEPLY TKCDF TKLCAF TKXCAF TKVCAF TKXmlXCAF TKBinXCAF TKRWMesh TKService TKV3d)
+set(OCCT_OCAF_LIBRARIES TKCDF TKLCAF TKCAF TKBinL TKXmlL TKBin TKXml TKStdL
+ TKStd TKTObj TKBinTObj TKXmlTObj TKVCAF TKService TKV3d)
+
+################
+# Headers path #
+################
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/SWIG_files/headers)
+
+######################################################
+# Configure Build settings according to the platform #
+######################################################
+
+# Mingw64 needs MS_WIN64 to be defined (otherwise link failures)
+if(MINGW)
+ message(STATUS "MinGW:")
+ if(${CMAKE_SIZEOF_VOID_P} MATCHES "8") # 64 bit check
+ add_definitions(-DMS_WIN64)
+ endif(${CMAKE_SIZEOF_VOID_P} MATCHES "8")
+endif(MINGW)
+
+# MACOSX_DEPLOYEMENT_TARGET
+# explicit link to libc++ for recent osx versions
+if(APPLE)
+ message(STATUS "Explicitly link to libc++ on modern osx versions")
+ add_definitions(-stdlib=libc++)
+endif(APPLE)
+
+if(UNIX)
+ if(APPLE)
+ ######### MacOSX ###########
+ set(PLATFORM Darwin)
+ else(APPLE)
+ ######### Unix/Linux ###########
+ set(PLATFORM Unix)
+ endif(APPLE)
+ set(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DCSFDB -DHAVE_CONFIG_H -DSWIG_PYTHON_SILENT_MEMLEAK)
+ add_definitions(-DHAVE_CONFIG_H -DCSFDB)
+else(UNIX)
+ if(WIN32)
+ ######### Windows ###########
+ add_definitions(-DWNT -DWIN32 -D_WINDOWS -DCSFDB -DHAVE_CONFIG_H)
+ set(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DCSFDB -DWIN32 -D_WINDOWS -DSWIG_PYTHON_SILENT_MEMLEAK)
+ set(PLATFORM win)
+ else(WIN32)
+ message(STATUS "Unknown platform")
+ endif(WIN32)
+endif(UNIX)
+
+################################################
+# Define output path for generated libraries: #
+# platform/compiler-build_type-bits #
+# for instance: #
+# ./win32/bin/vc7.1-release-64 #
+# ./win32/bin/vc9-debug-32 #
+# ./Unix/i386-debug-64 #
+################################################
+if(WIN32)
+ if(MSVC) # The compiler used is MSVC
+ message(STATUS "Found MSVC compiler: ${MSVC} ${MSVC_VERSION}")
+ set(LIBRARY_OUTPUT_PATH bin/)
+ # prevent bigobj fatal error C1148 issue, and remove C4244 verbose warning
+ add_definitions("/bigobj /wd4244 /wd4251 /wd4275 /wd4290")
+ elseif (BORLAND) # The compiler used is BORLAND
+ set(LIBRARY_OUTPUT_PATH win${BIT}/bin/${CMAKE_BUILD_TYPE})
+ else()
+ set(LIBRARY_OUTPUT_PATH win${BIT}/bin/${CMAKE_BUILD_TYPE})
+ endif()
+ set(EXECUTABLE_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH})
+else(WIN32)
+ set(LIBRARY_OUTPUT_PATH ${PLATFORM}/${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_BUILD_TYPE}-${BIT})
+endif(WIN32)
+set(CMAKE_SWIG_OUTDIR ${LIBRARY_OUTPUT_PATH})
+
+##################
+# MODEL Toolkits #
+##################
+file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${SWIG_FILES_PATH})
+set(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} "-I${THIRD_PARTY_DIR}/include")
+foreach(OCCT_MODULE ${OCCT_TOOLKIT_MODEL})
+ set(FILE ${SWIG_FILES_PATH}/${OCCT_MODULE}.i)
+ set_source_files_properties(${FILE} PROPERTIES CPLUSPLUS ON)
+ swig_add_library (${OCCT_MODULE} LANGUAGE python SOURCES ${FILE} TYPE MODULE)
+ swig_link_libraries(${OCCT_MODULE} ${OCCT_MODEL_LIBRARIES} Python3::Module)
+ post_swig_target_setup(${OCCT_MODULE})
+endforeach(OCCT_MODULE)
+
+###############
+# Tessellator #
+###############
+execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory src/Tesselator)
+set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/src/Tesselator/Tesselator.i PROPERTIES CPLUSPLUS ON)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/Tesselator)
+set(TESSELATOR_SOURCE_FILES
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/Tesselator/Tesselator.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/Tesselator/ShapeTesselator.cpp)
+
+swig_add_library(Tesselator LANGUAGE python SOURCES ${TESSELATOR_SOURCE_FILES} TYPE MODULE)
+swig_link_libraries(Tesselator ${OCCT_MODEL_LIBRARIES} Python3::Module)
+post_swig_target_setup(Tesselator)
+
+#################
+# Visualisation #
+#################
+if(PYTHONOCC_WRAP_VISU)
+ find_package(OpenGL REQUIRED)
+ if(OPENGL_FOUND)
+ message(STATUS "OpenGL found; Visualization support enabled")
+ endif()
+ include_directories(OPENGL_INCLUDE_DIR)
+
+ foreach(OCCT_MODULE ${OCCT_TOOLKIT_VISUALIZATION})
+ set(FILE ${SWIG_FILES_PATH}/${OCCT_MODULE}.i)
+ set_source_files_properties(${FILE} PROPERTIES CPLUSPLUS ON)
+ swig_add_library (${OCCT_MODULE} LANGUAGE python SOURCES ${FILE} TYPE MODULE)
+ swig_link_libraries(${OCCT_MODULE} ${OCCT_MODEL_LIBRARIES} ${OCCT_VISUALIZATION_LIBRARIES} Python3::Module)
+ post_swig_target_setup(${OCCT_MODULE})
+ endforeach(OCCT_MODULE)
+
+ # Build third part modules
+ # TODO : the following line is strange but necessary
+ execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory src/Visualization)
+ set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/src/Visualization/Visualization.i PROPERTIES CPLUSPLUS ON)
+ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/Visualization)
+ set(VISUALIZATION_SOURCE_FILES
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/Visualization/Visualization.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/Visualization/Display3d.cpp)
+
+ swig_add_library(Visualization LANGUAGE python SOURCES ${VISUALIZATION_SOURCE_FILES} TYPE MODULE)
+ swig_link_libraries(Visualization ${OCCT_MODEL_LIBRARIES} ${OCCT_VISUALIZATION_LIBRARIES} Python3::Module)
+ post_swig_target_setup(Visualization)
+
+ if(APPLE)
+ # on OSX, always add /System/Library/Frameworks/Cocoa.framework, even
+ # if GLX is enabled
+ swig_link_libraries(Visualization /System/Library/Frameworks/Cocoa.framework)
+ endif(APPLE)
+
+ ##########################
+ # MeshDS module addition #
+ ##########################
+ execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory src/MeshDataSource)
+ set(FILE ${SWIG_FILES_PATH}/MeshDS.i)
+ set_source_files_properties(${FILE} PROPERTIES CPLUSPLUS ON)
+ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/MeshDataSource)
+ set(MESHDATASOURCE_SOURCE_FILES
+ ${FILE}
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/MeshDataSource/MeshDataSource.cpp)
+
+ swig_add_library(MeshDS LANGUAGE python SOURCES ${MESHDATASOURCE_SOURCE_FILES} TYPE MODULE)
+ swig_link_libraries(MeshDS ${OCCT_MODEL_LIBRARIES} ${OCCT_VISUALIZATION_LIBRARIES} Python3::Module)
+ post_swig_target_setup(MeshDS)
+
+endif(PYTHONOCC_WRAP_VISU)
+
+################
+# DataExchange #
+################
+if(PYTHONOCC_WRAP_DATAEXCHANGE)
+ foreach(OCCT_MODULE ${OCCT_TOOLKIT_DATAEXCHANGE})
+ set(FILE ${SWIG_FILES_PATH}/${OCCT_MODULE}.i)
+ set_source_files_properties(${FILE} PROPERTIES CPLUSPLUS ON)
+ swig_add_library(${OCCT_MODULE} LANGUAGE python SOURCES ${FILE} TYPE MODULE)
+ swig_link_libraries(${OCCT_MODULE} ${OCCT_MODEL_LIBRARIES} ${OCCT_DATAEXCHANGE_LIBRARIES} Python3::Module)
+ post_swig_target_setup(${OCCT_MODULE})
+ endforeach(OCCT_MODULE)
+endif(PYTHONOCC_WRAP_DATAEXCHANGE)
+
+########
+# OCAF #
+########
+if(PYTHONOCC_WRAP_OCAF)
+ foreach(OCCT_MODULE ${OCCT_TOOLKIT_OCAF})
+ set(FILE ${SWIG_FILES_PATH}/${OCCT_MODULE}.i)
+ set_source_files_properties(${FILE} PROPERTIES CPLUSPLUS ON)
+ swig_add_library(${OCCT_MODULE} LANGUAGE python SOURCES ${FILE} TYPE MODULE)
+ swig_link_libraries(${OCCT_MODULE} ${OCCT_MODEL_LIBRARIES} ${OCCT_OCAF_LIBRARIES} Python3::Module)
+ post_swig_target_setup(${OCCT_MODULE})
+ endforeach(OCCT_MODULE)
+endif(PYTHONOCC_WRAP_OCAF)
+
+##########
+# Addons #
+##########
+execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory src/Addons)
+set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/src/Addons/Addons.i PROPERTIES CPLUSPLUS ON)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/Addons)
+set(ADDONS_SOURCE_FILES
+${CMAKE_CURRENT_SOURCE_DIR}/src/Addons/Addons.i
+${CMAKE_CURRENT_SOURCE_DIR}/src/Addons/Font3d.cpp
+#${CMAKE_CURRENT_SOURCE_DIR}/src/Addons/TextItem.cpp
+#${CMAKE_CURRENT_SOURCE_DIR}/src/Addons/LineItem.cpp
+#${CMAKE_CURRENT_SOURCE_DIR}/src/Addons/TextureItem.cpp
+)
+
+swig_add_library(Addons LANGUAGE python SOURCES ${ADDONS_SOURCE_FILES} TYPE MODULE)
+swig_link_libraries(Addons ${OCCT_MODEL_LIBRARIES} ${OCCT_VISUALIZATION_LIBRARIES} Python3::Module)
+post_swig_target_setup(Addons)
+
+################
+# Installation #
+################
+if(WIN32)
+ set(EXTENSION "pyd")
+else(WIN32)
+ set(EXTENSION "so")
+endif(WIN32)
+set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/${LIBRARY_OUTPUT_PATH})
+
+# install pythonOCC modules
+foreach(OCCT_MODULE ${OCCT_TOOLKIT_MODEL})
+ install(FILES ${BUILD_DIR}/${OCCT_MODULE}.py DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+ install(TARGETS ${OCCT_MODULE} DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/SWIG_files/wrapper/${OCCT_MODULE}.pyi DESTINATION
+ ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+endforeach(OCCT_MODULE)
+
+# install tesselator
+install(FILES ${BUILD_DIR}/Tesselator.py DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+install(TARGETS Tesselator DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+
+if(PYTHONOCC_WRAP_VISU)
+ foreach(OCCT_MODULE ${OCCT_TOOLKIT_VISUALIZATION})
+ install(FILES ${BUILD_DIR}/${OCCT_MODULE}.py DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+ install(TARGETS ${OCCT_MODULE} DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/SWIG_files/wrapper/${OCCT_MODULE}.pyi DESTINATION
+ ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+ endforeach(OCCT_MODULE)
+
+ # install MeshDataSource
+ install(FILES ${BUILD_DIR}/MeshDS.py DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+ install(TARGETS MeshDS DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+endif(PYTHONOCC_WRAP_VISU)
+
+if(PYTHONOCC_WRAP_DATAEXCHANGE)
+ foreach(OCCT_MODULE ${OCCT_TOOLKIT_DATAEXCHANGE})
+ install(FILES ${BUILD_DIR}/${OCCT_MODULE}.py DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+ install(TARGETS ${OCCT_MODULE} DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/SWIG_files/wrapper/${OCCT_MODULE}.pyi DESTINATION
+ ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+ endforeach(OCCT_MODULE)
+endif(PYTHONOCC_WRAP_DATAEXCHANGE)
+
+if(PYTHONOCC_WRAP_OCAF)
+ foreach(OCCT_MODULE ${OCCT_TOOLKIT_OCAF})
+ # install the python interface file (python module)
+ install(FILES ${BUILD_DIR}/${OCCT_MODULE}.py DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+ install(TARGETS ${OCCT_MODULE} DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/SWIG_files/wrapper/${OCCT_MODULE}.pyi DESTINATION
+ ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+ endforeach(OCCT_MODULE)
+endif(PYTHONOCC_WRAP_OCAF)
+
+# install third part modules
+if(PYTHONOCC_WRAP_VISU)
+ install(FILES ${BUILD_DIR}/Visualization.py DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+ install(TARGETS Visualization DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+endif(PYTHONOCC_WRAP_VISU)
+
+# install addons
+install(FILES ${BUILD_DIR}/Addons.py DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core )
+install(TARGETS Addons DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core )
+
+# install Display
+install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/Display DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY})
+
+# install LICENSE file
+install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY})
+
+# install AUTHORS file
+install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/AUTHORS DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY})
+
+# install Exception.py, __init__ and py.typed
+# install __init__.py file
+install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/PkgBase/__init__.py DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY})
+install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/PkgBase/__init__.py DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/PkgBase/Exception.py DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+# following file is necessary to mypy to use .pyi stub files
+install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/PkgBase/py.typed DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core)
+
+# install Extend
+install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/Extend DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY})
+
+# install Wrapper utils
+install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/Wrapper DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY})
diff --git a/custom_occt.cmake b/custom_occt.cmake
new file mode 100644
index 000000000..d4b1ec4b7
--- /dev/null
+++ b/custom_occt.cmake
@@ -0,0 +1,4 @@
+set(OpenCASCADE_INCLUDE_DIR "${OCCT_ROOT}/occt-vc144-64/inc")
+set(OpenCASCADE_LIBRARY_DIR "${OCCT_ROOT}/occt-vc144-64/lib")
+set(THIRD_PARTY_INCLUDE_DIR "${OCCT_ROOT}/3rdparty-vc14-64/include")
+set(THIRD_PARTY_LIBRARY_DIR "${OCCT_ROOT}/3rdparty-vc14-64/lib")
\ No newline at end of file