]> OCCT Git - occt.git/commitdiff
Configuration - Add vcpkg layout support (#618)
authorPasukhin Dmitry <dpasukhi@opencascade.com>
Tue, 22 Jul 2025 20:12:11 +0000 (21:12 +0100)
committerGitHub <noreply@github.com>
Tue, 22 Jul 2025 20:12:11 +0000 (21:12 +0100)
- Addition of vcpkg layout configuration with CMake file placement in share/ directory for vcpkg compliance
- Introduction of OCCT_PROJECT_NAME parameter (defaults to "opencascade") for customizing directory structure in vcpkg layout
- Updated environment scripts and build templates to support vcpkg directory structure while maintaining backward compatibility

CMakeLists.txt
adm/cmake/occt_macros.cmake
adm/cmake/occt_toolkit.cmake
adm/cmake/vardescr.cmake
adm/templates/OpenCASCADEConfig.cmake.in
adm/templates/custom.build.bat.in
adm/templates/custom.build.sh.in
adm/templates/custom.install.bat.in
adm/templates/custom.install.sh.in
adm/templates/env.bat.in
adm/templates/env.install.sh.in

index fcdc8cea7774cabfa4d2f4c01081ca82b50b05be..3dbc4159357165f88e4efc9cfbcc14b7c0d966b7 100644 (file)
@@ -260,7 +260,30 @@ if (NOT INSTALL_DIR_LAYOUT)
   else()
     set (INSTALL_DIR_LAYOUT "Unix" CACHE STRING "${INSTALL_DIR_LAYOUT_DESCR}" FORCE)
   endif()
-  SET_PROPERTY(CACHE INSTALL_DIR_LAYOUT PROPERTY STRINGS Windows Unix)
+  SET_PROPERTY(CACHE INSTALL_DIR_LAYOUT PROPERTY STRINGS Windows Unix Vcpkg)
+endif()
+
+# Define layout boolean variables for optimization
+set(LAYOUT_IS_WINDOWS FALSE)
+set(LAYOUT_IS_UNIX FALSE) 
+set(LAYOUT_IS_VCPKG FALSE)
+
+if ("${INSTALL_DIR_LAYOUT}" STREQUAL "Windows")
+  set(LAYOUT_IS_WINDOWS TRUE)
+elseif ("${INSTALL_DIR_LAYOUT}" STREQUAL "Unix")
+  set(LAYOUT_IS_UNIX TRUE)
+elseif ("${INSTALL_DIR_LAYOUT}" STREQUAL "Vcpkg")
+  set(LAYOUT_IS_VCPKG TRUE)
+endif()
+
+# set project name for install directories (only used for vcpkg layout)
+if (LAYOUT_IS_VCPKG)
+  if (NOT DEFINED OCCT_PROJECT_NAME)
+    set (OCCT_PROJECT_NAME "opencascade" CACHE STRING "${OCCT_PROJECT_NAME_DESCR}")
+  endif()
+else()
+  # unset the variable if it was previously set for vcpkg but layout changed
+  OCCT_CHECK_AND_UNSET (OCCT_PROJECT_NAME)
 endif()
 
 # check INSTALL_DIR_LAYOUT changes and update INSTALL_DIR_* paths if necessary
@@ -271,6 +294,16 @@ elseif (NOT "${INSTALL_DIR_LAYOUT_PREV}" STREQUAL "${INSTALL_DIR_LAYOUT}")
   # The structure of install folder should be reset due to changed layout
   OCCT_CHECK_AND_UNSET_INSTALL_DIR_SUBDIRS ()
 
+  # Manage OCCT_PROJECT_NAME based on layout
+  if (LAYOUT_IS_VCPKG)
+    if (NOT DEFINED OCCT_PROJECT_NAME)
+      set (OCCT_PROJECT_NAME "opencascade" CACHE STRING "${OCCT_PROJECT_NAME_DESCR}")
+    endif()
+  else()
+    # unset OCCT_PROJECT_NAME if layout changed from vcpkg to something else
+    OCCT_CHECK_AND_UNSET (OCCT_PROJECT_NAME)
+  endif()
+
   # Unset INSTALL_DIR_WITH_VERSION on windows
   if ("${INSTALL_DIR_LAYOUT}" STREQUAL "Windows")
     OCCT_CHECK_AND_UNSET (INSTALL_DIR_WITH_VERSION)
@@ -306,7 +339,7 @@ elseif (NOT "${INSTALL_DIR_PREV}" STREQUAL "${INSTALL_DIR}")
   set (CMAKE_INSTALL_PREFIX_PREV "${INSTALL_DIR}" CACHE INTERNAL "" FORCE)
 endif()
 
-if ("${INSTALL_DIR_LAYOUT}" STREQUAL "Unix")
+if (LAYOUT_IS_UNIX)
   if (NOT DEFINED INSTALL_DIR_WITH_VERSION_PREV)
     set (INSTALL_DIR_WITH_VERSION_PREV "${INSTALL_DIR_WITH_VERSION}" CACHE INTERNAL "" FORCE)
   elseif (NOT "${INSTALL_DIR_WITH_VERSION_PREV}" STREQUAL "${INSTALL_DIR_WITH_VERSION}")
@@ -321,10 +354,12 @@ endif()
 set (CMAKE_INSTALL_PREFIX "${INSTALL_DIR}" CACHE INTERNAL "" FORCE)
 
 set (BIN_LETTER "")
-if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
-  set (BIN_LETTER "d")
-elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
-  set (BIN_LETTER "i")
+if (NOT LAYOUT_IS_VCPKG)
+  if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
+    set (BIN_LETTER "d")
+  elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
+    set (BIN_LETTER "i")
+  endif()
 endif()
 
 # the list of being built toolkits
@@ -463,12 +498,33 @@ else()
   OCCT_CHECK_AND_UNSET (BUILD_YACCLEX)
 endif()
 
-if (NOT DEFINED 3RDPARTY_DIR)
-  set (3RDPARTY_DIR "" CACHE PATH ${3RDPARTY_DIR_DESCR})
-  get_filename_component (3RDPARTY_DIR "${3RDPARTY_DIR}" ABSOLUTE)
+# Set 3RDPARTY_DIR based on layout
+if (LAYOUT_IS_VCPKG)
+  if (NOT DEFINED 3RDPARTY_DIR)
+    # For vcpkg layout, set 3RDPARTY_DIR to vcpkg installed directory for path replacement
+    if (BUILD_USE_VCPKG AND VCPKG_INSTALLED_DIR AND VCPKG_TARGET_TRIPLET)
+      set (3RDPARTY_DIR "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}" CACHE PATH ${3RDPARTY_DIR_DESCR})
+    else()
+      set (3RDPARTY_DIR "" CACHE PATH ${3RDPARTY_DIR_DESCR})
+    endif()
+  else()
+    file (TO_CMAKE_PATH "${3RDPARTY_DIR}" 3RDPARTY_DIR)
+    set (3RDPARTY_DIR "${3RDPARTY_DIR}" CACHE PATH "${3RDPARTY_DIR_DESCR}" FORCE)
+  endif()
 else()
-  file (TO_CMAKE_PATH "${3RDPARTY_DIR}" 3RDPARTY_DIR)
-  set (3RDPARTY_DIR "${3RDPARTY_DIR}" CACHE PATH "${3RDPARTY_DIR_DESCR}" FORCE)
+  # For non-vcpkg layouts, 3RDPARTY_DIR should be user-defined or empty
+  if (NOT DEFINED 3RDPARTY_DIR)
+    set (3RDPARTY_DIR "" CACHE PATH ${3RDPARTY_DIR_DESCR})
+    # If using vcpkg with Windows layout, set to vcpkg installed directory for proper path replacement
+    if (BUILD_USE_VCPKG AND VCPKG_INSTALLED_DIR AND VCPKG_TARGET_TRIPLET)
+      set (3RDPARTY_DIR "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}" CACHE PATH ${3RDPARTY_DIR_DESCR} FORCE)
+    else()
+      get_filename_component (3RDPARTY_DIR "${3RDPARTY_DIR}" ABSOLUTE)
+    endif()
+  else()
+    file (TO_CMAKE_PATH "${3RDPARTY_DIR}" 3RDPARTY_DIR)
+    set (3RDPARTY_DIR "${3RDPARTY_DIR}" CACHE PATH "${3RDPARTY_DIR_DESCR}" FORCE)
+  endif()
 endif()
 
 # search for CSF variable in EXTERNLIB of each being used toolkit
@@ -804,7 +860,7 @@ OCCT_MAKE_COMPILER_SHORT_NAME()
 # do not define INSTALL_DIR_BIN for win.
 # Leave library structure for win: <prefix>/win64/vc10/bin(d)
 if (NOT DEFINED INSTALL_DIR_BIN)
-  if ("${INSTALL_DIR_LAYOUT}" STREQUAL "Unix")
+  if (LAYOUT_IS_UNIX OR LAYOUT_IS_VCPKG)
     set (INSTALL_DIR_BIN "bin" CACHE PATH "${INSTALL_DIR_BIN_DESCR}")
   else()
     set (INSTALL_DIR_BIN "${OS_WITH_BIT}/${COMPILER}/bin" CACHE PATH "${INSTALL_DIR_BIN_DESCR}")
@@ -813,8 +869,11 @@ endif()
 
 # define folder containing all shell/batch scripts
 if (NOT DEFINED INSTALL_DIR_SCRIPT)
-  if ("${INSTALL_DIR_LAYOUT}" STREQUAL "Unix")
+  if (LAYOUT_IS_UNIX)
     set (INSTALL_DIR_SCRIPT "${INSTALL_DIR_BIN}" CACHE PATH "${INSTALL_DIR_SCRIPT_DESCR}")
+  elseif (LAYOUT_IS_VCPKG)
+    # For vcpkg, scripts should follow same debug/release pattern as binaries
+    set (INSTALL_DIR_SCRIPT "$<IF:$<CONFIG:Debug>,debug/bin,bin>" CACHE PATH "${INSTALL_DIR_SCRIPT_DESCR}")
   else()
     set (INSTALL_DIR_SCRIPT "." CACHE PATH "${INSTALL_DIR_SCRIPT_DESCR}")
   endif()
@@ -822,7 +881,7 @@ endif()
 
 # place the libraries to <prefix>/lib folder for unix and leave old structure for windows
 if (NOT DEFINED INSTALL_DIR_LIB)
-  if ("${INSTALL_DIR_LAYOUT}" STREQUAL "Unix")
+  if (LAYOUT_IS_UNIX OR LAYOUT_IS_VCPKG)
     set (INSTALL_DIR_LIB "lib" CACHE PATH "${INSTALL_DIR_LIB_DESCR}")
   else()
     set (INSTALL_DIR_LIB "${OS_WITH_BIT}/${COMPILER}/lib" CACHE PATH "${INSTALL_DIR_LIB_DESCR}")
@@ -832,11 +891,13 @@ endif()
 # OCCT headers: <prefix>/inc for windows,
 #               <prefix>/include/opencascade-7.0.0 for unix
 if (NOT DEFINED INSTALL_DIR_INCLUDE)
-  if ("${INSTALL_DIR_LAYOUT}" STREQUAL "Unix")
+  if (LAYOUT_IS_UNIX)
     set (INSTALL_DIR_INCLUDE "include/opencascade" CACHE PATH "${INSTALL_DIR_INCLUDE_DESCR}")
     if (INSTALL_DIR_WITH_VERSION)
       set (INSTALL_DIR_INCLUDE "include/opencascade-${OCC_VERSION_STRING_EXT}" CACHE PATH "${INSTALL_DIR_INCLUDE_DESCR}" FORCE)
     endif()
+  elseif (LAYOUT_IS_VCPKG)
+    set (INSTALL_DIR_INCLUDE "include" CACHE PATH "${INSTALL_DIR_INCLUDE_DESCR}")
   else()
     set (INSTALL_DIR_INCLUDE "inc" CACHE PATH "${INSTALL_DIR_INCLUDE_DESCR}")
   endif()
@@ -845,11 +906,13 @@ endif()
 # OCCT resources: <prefix>/src for windows,
 #                 <prefix>/share/opencascade-7.0.0/resources for unix
 if (NOT DEFINED INSTALL_DIR_RESOURCE)
-  if ("${INSTALL_DIR_LAYOUT}" STREQUAL "Unix")
+  if (LAYOUT_IS_UNIX)
     set (INSTALL_DIR_RESOURCE "share/opencascade/resources" CACHE PATH "${INSTALL_DIR_RESOURCE_DESCR}")
     if (INSTALL_DIR_WITH_VERSION)
       set (INSTALL_DIR_RESOURCE "share/opencascade-${OCC_VERSION_STRING_EXT}/resources" CACHE PATH "${INSTALL_DIR_RESOURCE_DESCR}" FORCE)
     endif()
+  elseif (LAYOUT_IS_VCPKG)
+    set (INSTALL_DIR_RESOURCE "share/${OCCT_PROJECT_NAME}" CACHE PATH "${INSTALL_DIR_RESOURCE_DESCR}")
   else()
     set (INSTALL_DIR_RESOURCE "src" CACHE PATH "${INSTALL_DIR_RESOURCE_DESCR}")
   endif()
@@ -857,11 +920,13 @@ endif()
 
 # OCCT data
 if (NOT DEFINED INSTALL_DIR_DATA)
-  if ("${INSTALL_DIR_LAYOUT}" STREQUAL "Unix")
+  if (LAYOUT_IS_UNIX)
     set (INSTALL_DIR_DATA "share/opencascade/data" CACHE PATH "${INSTALL_DIR_DATA_DESCR}")
     if (INSTALL_DIR_WITH_VERSION)
       set (INSTALL_DIR_DATA "share/opencascade-${OCC_VERSION_STRING_EXT}/data" CACHE PATH "${INSTALL_DIR_DATA_DESCR}" FORCE)
     endif()
+  elseif (LAYOUT_IS_VCPKG)
+    set (INSTALL_DIR_DATA "share/${OCCT_PROJECT_NAME}" CACHE PATH "${INSTALL_DIR_DATA_DESCR}")
   else()
     set (INSTALL_DIR_DATA "data" CACHE PATH "${INSTALL_DIR_DATA_DESCR}")
   endif()
@@ -869,11 +934,13 @@ endif()
 
 # OCCT samples
 if (NOT DEFINED INSTALL_DIR_SAMPLES)
-  if ("${INSTALL_DIR_LAYOUT}" STREQUAL "Unix")
+  if (LAYOUT_IS_UNIX)
     set (INSTALL_DIR_SAMPLES "share/opencascade/samples" CACHE PATH "${INSTALL_DIR_SAMPLES_DESCR}")
     if (INSTALL_DIR_WITH_VERSION)
       set (INSTALL_DIR_SAMPLES "share/opencascade-${OCC_VERSION_STRING_EXT}/samples" CACHE PATH "${INSTALL_DIR_SAMPLES_DESCR}" FORCE)
     endif()
+  elseif (LAYOUT_IS_VCPKG)
+    set (INSTALL_DIR_SAMPLES "share/${OCCT_PROJECT_NAME}/samples" CACHE PATH "${INSTALL_DIR_SAMPLES_DESCR}")
   else()
     set (INSTALL_DIR_SAMPLES "samples" CACHE PATH "${INSTALL_DIR_SAMPLES_DESCR}")
   endif()
@@ -881,11 +948,13 @@ endif()
 
 # OCCT tests
 if (NOT DEFINED INSTALL_DIR_TESTS)
-  if ("${INSTALL_DIR_LAYOUT}" STREQUAL "Unix")
+  if (LAYOUT_IS_UNIX)
     set (INSTALL_DIR_TESTS "share/opencascade/tests" CACHE PATH "${INSTALL_DIR_TESTS_DESCR}")
     if (INSTALL_DIR_WITH_VERSION)
       set (INSTALL_DIR_TESTS "share/opencascade-${OCC_VERSION_STRING_EXT}/tests" CACHE PATH "${INSTALL_DIR_TESTS_DESCR}" FORCE)
     endif()
+  elseif (LAYOUT_IS_VCPKG)
+    set (INSTALL_DIR_TESTS "share/${OCCT_PROJECT_NAME}/tests" CACHE PATH "${INSTALL_DIR_TESTS_DESCR}")
   else()
     set (INSTALL_DIR_TESTS "tests" CACHE PATH "${INSTALL_DIR_TESTS_DESCR}")
   endif()
@@ -893,11 +962,13 @@ endif()
 
 # OCCT doc
 if (NOT DEFINED INSTALL_DIR_DOC)
-  if ("${INSTALL_DIR_LAYOUT}" STREQUAL "Unix")
+  if (LAYOUT_IS_UNIX)
     set (INSTALL_DIR_DOC "share/doc/opencascade" CACHE PATH "${INSTALL_DIR_DOC_DESCR}")
     if (INSTALL_DIR_WITH_VERSION)
       set (INSTALL_DIR_DOC "share/doc/opencascade-${OCC_VERSION_STRING_EXT}" CACHE PATH "${INSTALL_DIR_DOC_DESCR}" FORCE)
     endif()
+  elseif (LAYOUT_IS_VCPKG)
+    set (INSTALL_DIR_DOC "share/${OCCT_PROJECT_NAME}/doc" CACHE PATH "${INSTALL_DIR_DOC_DESCR}")
   else()
     set (INSTALL_DIR_DOC "doc" CACHE PATH "${INSTALL_DIR_DOC_DESCR}")
   endif()
@@ -905,12 +976,14 @@ endif()
 
 # define folder containing CMake configuration files
 if (NOT DEFINED INSTALL_DIR_CMAKE)
-  if ("${INSTALL_DIR_LAYOUT}" STREQUAL "Unix")
+  if (LAYOUT_IS_UNIX)
     if (INSTALL_DIR_WITH_VERSION)
       set (INSTALL_DIR_CMAKE "lib/cmake/opencascade-${OCC_VERSION_STRING_EXT}" CACHE PATH "${INSTALL_DIR_CMAKE_DESCR}")
     else()
       set (INSTALL_DIR_CMAKE "lib/cmake/opencascade" CACHE PATH "${INSTALL_DIR_CMAKE_DESCR}")
     endif()
+  elseif (LAYOUT_IS_VCPKG)
+    set (INSTALL_DIR_CMAKE "share/${OCCT_PROJECT_NAME}" CACHE PATH "${INSTALL_DIR_CMAKE_DESCR}")
   else()
     set (INSTALL_DIR_CMAKE "cmake" CACHE PATH "${INSTALL_DIR_CMAKE_DESCR}")
   endif()
@@ -920,7 +993,7 @@ endif()
 OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/occt_resources")
 
 # install LICENSE_LGPL_21.txt and OCCT_LGPL_EXCEPTION.txt files
-if ("${INSTALL_DIR_LAYOUT}" STREQUAL "Unix")
+if (LAYOUT_IS_UNIX OR LAYOUT_IS_VCPKG)
   OCCT_INSTALL_FILE_OR_DIR ("LICENSE_LGPL_21.txt" "${INSTALL_DIR_DOC}")
   OCCT_INSTALL_FILE_OR_DIR ("OCCT_LGPL_EXCEPTION.txt" "${INSTALL_DIR_DOC}")
 else()
@@ -998,34 +1071,63 @@ endif()
 
 # build directories
 if (SINGLE_GENERATOR)
-  set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/lib${BIN_LETTER}")
-  set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bin${BIN_LETTER}")
-  set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/lib${BIN_LETTER}")
-  if (WIN32)
-    set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bin${BIN_LETTER}")
+  if (LAYOUT_IS_VCPKG)
+    set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
+    set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
+    set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
+    if (WIN32)
+      set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
+    endif()
+  else()
+    set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/lib${BIN_LETTER}")
+    set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bin${BIN_LETTER}")
+    set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/lib${BIN_LETTER}")
+    if (WIN32)
+      set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bin${BIN_LETTER}")
+    endif()
   endif()
 endif()
 
-set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/lib")
-set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bin")
-set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/lib")
+if (LAYOUT_IS_VCPKG)
+  set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/lib")
+  set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/bin")
+  set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/lib")
 
-set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/libi")
-set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bini")
-set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/libi")
+  set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/lib")
+  set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/bin")
+  set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/lib")
 
-set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/libd")
-set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bind")
-set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/libd")
+  set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/lib")
+  set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/bin")
+  set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/lib")
 
-if (WIN32)
-  set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE        "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bin")
-  set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bini")
-  set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG          "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bind")
+  if (WIN32)
+    set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE        "${CMAKE_BINARY_DIR}/bin")
+    set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/bin")
+    set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG          "${CMAKE_BINARY_DIR}/bin")
+  endif()
+else()
+  set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/lib")
+  set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bin")
+  set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/lib")
+
+  set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/libi")
+  set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bini")
+  set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/libi")
+
+  set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/libd")
+  set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bind")
+  set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/libd")
+
+  if (WIN32)
+    set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE        "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bin")
+    set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bini")
+    set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG          "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bind")
+  endif()
 endif()
 
 string(TIMESTAMP CURRENT_TIME "%H:%M:%S")
-message (STATUS "\nInfo: \(${CURRENT_TIME}\) Start collecting all OCCT header files into ${CMAKE_BINARY_DIR}/inc ...")
+message (STATUS "\nInfo: \(${CURRENT_TIME}\) Start collecting all OCCT header files into ${CMAKE_BINARY_DIR}/${INSTALL_DIR_INCLUDE} ...")
 
 # collect all the headers to <binary dir>/inc folder
 COLLECT_AND_INSTALL_OCCT_HEADER_FILES ("${CMAKE_BINARY_DIR}" "${BUILD_TOOLKITS}" "src" "${INSTALL_DIR_INCLUDE}")
@@ -1135,8 +1237,98 @@ endforeach()
 
 # write current custom.bat/sh (for install directory)
 set (SUB_CUSTOM_BUILD_NAME "custom_${COMPILER}_${COMPILER_BITNESS}.install.${SCRIPT_EXT}")
+
+# Set custom bin/lib paths variable for template
+if (LAYOUT_IS_VCPKG)
+  # For vcpkg layout, paths need to handle debug/release structure
+  # Debug builds: scripts in debug/bin, need to go ../../ to reach root
+  # Release builds: scripts in bin, need to go ../ to reach root
+  if (WIN32)
+    set (OCCT_CUSTOM_BIN_LIB_PATHS "set \"CSF_OCCTBinPath=%CASROOT%\\bin\"
+    set \"CSF_OCCTLibPath=%CASROOT%\\lib\"
+    if exist \"%SCRIPTROOT%\\..\\..\\include\" (
+      set \"CASCONTENTROOT=%SCRIPTROOT%\\..\\..\"
+    ) else (
+      set \"CASCONTENTROOT=%SCRIPTROOT%\\..\"
+    )
+    set \"CSF_OCCTIncludePath=%CASCONTENTROOT%\\include\"
+    set \"CSF_OCCTResourcePath=%CASCONTENTROOT%\\share\\${OCCT_PROJECT_NAME}\"
+    set \"CSF_OCCTDataPath=%CASCONTENTROOT%\\share\\${OCCT_PROJECT_NAME}\"
+    set \"CSF_OCCTSamplesPath=%CASCONTENTROOT%\\share\\${OCCT_PROJECT_NAME}\\samples\"
+    set \"CSF_OCCTTestsPath=%CASCONTENTROOT%\\share\\${OCCT_PROJECT_NAME}\\tests\"
+    set \"CSF_OCCTDocPath=%CASCONTENTROOT%\\share\\${OCCT_PROJECT_NAME}\\doc\"")
+  else()
+    set (OCCT_CUSTOM_BIN_LIB_PATHS "export CSF_OCCTBinPath=\"\${CASROOT}/bin\"
+    export CSF_OCCTLibPath=\"\${CASROOT}/lib\"
+    if [ -d \"\${aScriptPath}/../../include\" ]; then
+      export CASCONTENTROOT=\$(cd \"\${aScriptPath}/../..\" && pwd)
+    else
+      export CASCONTENTROOT=\$(cd \"\${aScriptPath}/..\" && pwd)
+    fi
+    export CSF_OCCTIncludePath=\"\${CASCONTENTROOT}/include\"
+    export CSF_OCCTResourcePath=\"\${CASCONTENTROOT}/share/${OCCT_PROJECT_NAME}\"
+    export CSF_OCCTDataPath=\"\${CASCONTENTROOT}/share/${OCCT_PROJECT_NAME}\"
+    export CSF_OCCTSamplesPath=\"\${CASCONTENTROOT}/share/${OCCT_PROJECT_NAME}/samples\"
+    export CSF_OCCTTestsPath=\"\${CASCONTENTROOT}/share/${OCCT_PROJECT_NAME}/tests\"
+    export CSF_OCCTDocPath=\"\${CASCONTENTROOT}/share/${OCCT_PROJECT_NAME}/doc\"")
+  endif()
+  
+  # For vcpkg, we handle all paths in the bin/lib paths logic above
+  set (OCCT_CUSTOM_ADDITIONAL_PATHS "")
+else()
+  # For other layouts, use CASROOT with full paths including build-specific suffixes
+  if (WIN32)
+    set (OCCT_CUSTOM_BIN_LIB_PATHS "set \"CSF_OCCTBinPath=%CASROOT%/${INSTALL_DIR_BIN}%3\"
+    set \"CSF_OCCTLibPath=%CASROOT%/${INSTALL_DIR_LIB}%3\"")
+    set (OCCT_CUSTOM_ADDITIONAL_PATHS "set \"CSF_OCCTIncludePath=%CASROOT%/${INSTALL_DIR_INCLUDE}\"
+    set \"CSF_OCCTResourcePath=%CASROOT%/${INSTALL_DIR_RESOURCE}\"
+    set \"CSF_OCCTDataPath=%CASROOT%/${INSTALL_DIR_DATA}\"
+    set \"CSF_OCCTSamplesPath=%CASROOT%/${INSTALL_DIR_SAMPLES}\"
+    set \"CSF_OCCTTestsPath=%CASROOT%/${INSTALL_DIR_TESTS}\"
+    set \"CSF_OCCTDocPath=%CASROOT%/${INSTALL_DIR_DOC}\"")
+  else()
+    set (OCCT_CUSTOM_BIN_LIB_PATHS "export CSF_OCCTBinPath=\"\${CASROOT}/${INSTALL_DIR_BIN}\"
+    export CSF_OCCTLibPath=\"\${CASROOT}/${INSTALL_DIR_LIB}\"")
+    set (OCCT_CUSTOM_ADDITIONAL_PATHS "export CSF_OCCTIncludePath=\"\${CASROOT}/${INSTALL_DIR_INCLUDE}\"
+    export CSF_OCCTResourcePath=\"\${CASROOT}/${INSTALL_DIR_RESOURCE}\"
+    export CSF_OCCTDataPath=\"\${CASROOT}/${INSTALL_DIR_DATA}\"
+    export CSF_OCCTSamplesPath=\"\${CASROOT}/${INSTALL_DIR_SAMPLES}\"
+    export CSF_OCCTTestsPath=\"\${CASROOT}/${INSTALL_DIR_TESTS}\"
+    export CSF_OCCTDocPath=\"\${CASROOT}/${INSTALL_DIR_DOC}\"")
+  endif()
+endif()
+
 OCCT_CONFIGURE_AND_INSTALL ("adm/templates/custom.install.${SCRIPT_EXT}.in" "${SUB_CUSTOM_BUILD_NAME}" "${SUB_CUSTOM_NAME}" "${INSTALL_DIR_SCRIPT}")
 
+# Set build directory paths for custom.build script
+if (LAYOUT_IS_VCPKG)
+  # For vcpkg, use simple bin/lib paths
+  if (WIN32)
+    set (OCCT_CUSTOM_BUILD_BIN_LIB_PATHS "set \"CSF_OCCTBinPath=@CMAKE_RUNTIME_OUTPUT_DIRECTORY@\"
+    set \"CSF_OCCTLibPath=@CMAKE_ARCHIVE_OUTPUT_DIRECTORY@\"
+    if [\"@CMAKE_RUNTIME_OUTPUT_DIRECTORY@\"] == [\"\"] (
+      set \"CSF_OCCTBinPath=@CMAKE_BINARY_DIR@/bin\"
+      set \"CSF_OCCTLibPath=@CMAKE_BINARY_DIR@/lib\"
+    )")
+  else()
+    set (OCCT_CUSTOM_BUILD_BIN_LIB_PATHS "export CSF_OCCTBinPath=\"@CMAKE_RUNTIME_OUTPUT_DIRECTORY@\"
+    export CSF_OCCTLibPath=\"@CMAKE_ARCHIVE_OUTPUT_DIRECTORY@\"")
+  endif()
+else()
+  # For other layouts, use traditional paths with suffixes
+  if (WIN32)
+    set (OCCT_CUSTOM_BUILD_BIN_LIB_PATHS "set \"CSF_OCCTBinPath=@CMAKE_RUNTIME_OUTPUT_DIRECTORY@\"
+    set \"CSF_OCCTLibPath=@CMAKE_ARCHIVE_OUTPUT_DIRECTORY@\"
+    if [\"@CMAKE_RUNTIME_OUTPUT_DIRECTORY@\"] == [\"\"] (
+      set \"CSF_OCCTBinPath=@CMAKE_BINARY_DIR@/win%ARCH%/%VCVER%/bin%3\"
+      set \"CSF_OCCTLibPath=@CMAKE_BINARY_DIR@/win%ARCH%/%VCVER%/lib%3\"
+    )")
+  else()
+    set (OCCT_CUSTOM_BUILD_BIN_LIB_PATHS "export CSF_OCCTBinPath=\"@CMAKE_RUNTIME_OUTPUT_DIRECTORY@\"
+    export CSF_OCCTLibPath=\"@CMAKE_ARCHIVE_OUTPUT_DIRECTORY@\"")
+  endif()
+endif()
+
 # write current custom.bat/sh (for build directory)
 OCCT_CONFIGURE ("adm/templates/custom.build.${SCRIPT_EXT}.in" "${SUB_CUSTOM_NAME}")
 
@@ -1146,6 +1338,16 @@ if (BUILD_SAMPLES_MFC OR BUILD_SAMPLES_QT)
 endif()
 
 if (WIN32)
+  # Set custom script path variable for Windows template
+  if (LAYOUT_IS_VCPKG)
+    # For vcpkg, scripts are in same directory - use existing SCRIPTROOT variable
+    set (OCCT_CUSTOM_SCRIPT_PATH "custom.${SCRIPT_EXT}")
+    set (OCCT_CUSTOM_SCRIPT_PREFIX "%SCRIPTROOT%/")
+  else()
+    # For other layouts, use CASROOT with full path
+    set (OCCT_CUSTOM_SCRIPT_PATH "custom.${SCRIPT_EXT}")
+    set (OCCT_CUSTOM_SCRIPT_PREFIX "%CASROOT%/")
+  endif()
   # env script for draw in building environment
   OCCT_CONFIGURE ("adm/templates/env.${SCRIPT_EXT}.in" "env.${SCRIPT_EXT}")
   # install env script
@@ -1156,6 +1358,20 @@ if (WIN32)
 else()
   set (SUB_ENV_NAME "env.${SCRIPT_EXT}")
   set (SUB_ENV_BUILD_NAME "env.install.${SCRIPT_EXT}")
+  # Set custom script path variable for template
+  if (LAYOUT_IS_VCPKG)
+    # For vcpkg, scripts are in same directory - use existing path variables
+    set (OCCT_CUSTOM_SCRIPT_PATH "custom.${SCRIPT_EXT}")
+    if (WIN32)
+      set (OCCT_CUSTOM_SCRIPT_PREFIX "%SCRIPTROOT%/")
+    else()
+      set (OCCT_CUSTOM_SCRIPT_PREFIX "\${aScriptPath}/")
+    endif()
+  else()
+    # For other layouts, use CASROOT with full path
+    set (OCCT_CUSTOM_SCRIPT_PATH "${INSTALL_DIR_SCRIPT}/custom.${SCRIPT_EXT}")
+    set (OCCT_CUSTOM_SCRIPT_PREFIX "\${CASROOT}/")
+  endif()
   # install env script
   OCCT_CONFIGURE_AND_INSTALL ("adm/templates/env.install.${SCRIPT_EXT}.in" "${SUB_ENV_BUILD_NAME}" "${SUB_ENV_NAME}" "${INSTALL_DIR_SCRIPT}")
   # env script for draw in building environment
index 59e5c2eb37061319e99cb626502db7a4fec4d19c..e618fba2ab2595f598a8cda76a089507a678ee80 100644 (file)
@@ -3,8 +3,8 @@
 if(OCCT_MACROS_ALREADY_INCLUDED)
   return()
 endif()
-set(OCCT_MACROS_ALREADY_INCLUDED 1)
 
+set(OCCT_MACROS_ALREADY_INCLUDED 1)
 
 macro (OCCT_CHECK_AND_UNSET VARNAME)
   if (DEFINED ${VARNAME})
@@ -696,13 +696,17 @@ macro (OCCT_UPDATE_TARGET_FILE)
 endmacro()
 
 macro (OCCT_INSERT_CODE_FOR_TARGET)
-  install(CODE "if (\"\${CMAKE_INSTALL_CONFIG_NAME}\" MATCHES \"^([Rr][Ee][Ll][Ee][Aa][Ss][Ee])$\")
-    set (OCCT_INSTALL_BIN_LETTER \"\")
-  elseif (\"\${CMAKE_INSTALL_CONFIG_NAME}\" MATCHES \"^([Rr][Ee][Ll][Ww][Ii][Tt][Hh][Dd][Ee][Bb][Ii][Nn][Ff][Oo])$\")
-    set (OCCT_INSTALL_BIN_LETTER \"i\")
-  elseif (\"\${CMAKE_INSTALL_CONFIG_NAME}\" MATCHES \"^([Dd][Ee][Bb][Uu][Gg])$\")
-    set (OCCT_INSTALL_BIN_LETTER \"d\")
-  endif()")
+  if (LAYOUT_IS_VCPKG)
+    install(CODE "set (OCCT_INSTALL_BIN_LETTER \"\")")
+  else()
+    install(CODE "if (\"\${CMAKE_INSTALL_CONFIG_NAME}\" MATCHES \"^([Rr][Ee][Ll][Ee][Aa][Ss][Ee])$\")
+      set (OCCT_INSTALL_BIN_LETTER \"\")
+    elseif (\"\${CMAKE_INSTALL_CONFIG_NAME}\" MATCHES \"^([Rr][Ee][Ll][Ww][Ii][Tt][Hh][Dd][Ee][Bb][Ii][Nn][Ff][Oo])$\")
+      set (OCCT_INSTALL_BIN_LETTER \"i\")
+    elseif (\"\${CMAKE_INSTALL_CONFIG_NAME}\" MATCHES \"^([Dd][Ee][Bb][Uu][Gg])$\")
+      set (OCCT_INSTALL_BIN_LETTER \"d\")
+    endif()")
+  endif()
 endmacro()
 
 macro (OCCT_UPDATE_DRAW_DEFAULT_FILE)
index 60516caf6eee89ec395a7c9f63c9b45e08f2e158..68034fe2f585420be2d971920007341555aa4eb0 100644 (file)
@@ -120,8 +120,13 @@ endif (USE_QT)
 if (EXECUTABLE_PROJECT)
   add_executable (${PROJECT_NAME} ${USED_SRCFILES} ${USED_INCFILES} ${USED_RCFILE} ${RESOURCE_FILES} ${${PROJECT_NAME}_MOC_FILES})
 
-  install (TARGETS ${PROJECT_NAME}
-           DESTINATION "${INSTALL_DIR_BIN}\${OCCT_INSTALL_BIN_LETTER}")
+  if (LAYOUT_IS_VCPKG)
+    install (TARGETS ${PROJECT_NAME}
+             DESTINATION "$<IF:$<CONFIG:Debug>,debug/${INSTALL_DIR_BIN},${INSTALL_DIR_BIN}>")
+  else()
+    install (TARGETS ${PROJECT_NAME}
+             DESTINATION "${INSTALL_DIR_BIN}\${OCCT_INSTALL_BIN_LETTER}")
+  endif()
 
   if (EMSCRIPTEN)
     install(FILES ${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bin\${OCCT_INSTALL_BIN_LETTER}/${PROJECT_NAME}.wasm DESTINATION "${INSTALL_DIR_BIN}/${OCCT_INSTALL_BIN_LETTER}")
@@ -151,12 +156,21 @@ else()
     set (CMAKE_SHARED_LIBRARY_SUFFIX "${BUILD_SHARED_LIBRARY_NAME_POSTFIX}${CMAKE_SHARED_LIBRARY_SUFFIX}")
   endif()
 
-  install (TARGETS ${PROJECT_NAME}
-           EXPORT OpenCASCADE${CURRENT_MODULE}Targets
-           RUNTIME DESTINATION "${INSTALL_DIR_BIN}\${OCCT_INSTALL_BIN_LETTER}"
-           ARCHIVE DESTINATION "${INSTALL_DIR_LIB}\${OCCT_INSTALL_BIN_LETTER}"
-           LIBRARY DESTINATION "${INSTALL_DIR_LIB}\${OCCT_INSTALL_BIN_LETTER}"
-           INCLUDES DESTINATION ${INSTALL_DIR_INCLUDE})
+  if (LAYOUT_IS_VCPKG)
+    install (TARGETS ${PROJECT_NAME}
+             EXPORT OpenCASCADE${CURRENT_MODULE}Targets
+             RUNTIME DESTINATION "$<IF:$<CONFIG:Debug>,debug/${INSTALL_DIR_BIN},${INSTALL_DIR_BIN}>"
+             ARCHIVE DESTINATION "$<IF:$<CONFIG:Debug>,debug/${INSTALL_DIR_LIB},${INSTALL_DIR_LIB}>"
+             LIBRARY DESTINATION "$<IF:$<CONFIG:Debug>,debug/${INSTALL_DIR_LIB},${INSTALL_DIR_LIB}>"
+             INCLUDES DESTINATION ${INSTALL_DIR_INCLUDE})
+  else()
+    install (TARGETS ${PROJECT_NAME}
+             EXPORT OpenCASCADE${CURRENT_MODULE}Targets
+             RUNTIME DESTINATION "${INSTALL_DIR_BIN}\${OCCT_INSTALL_BIN_LETTER}"
+             ARCHIVE DESTINATION "${INSTALL_DIR_LIB}\${OCCT_INSTALL_BIN_LETTER}"
+             LIBRARY DESTINATION "${INSTALL_DIR_LIB}\${OCCT_INSTALL_BIN_LETTER}"
+             INCLUDES DESTINATION ${INSTALL_DIR_INCLUDE})
+  endif()
 
   if (NOT WIN32)
     if (BUILD_SHARED_LIBS AND NOT "${BUILD_SHARED_LIBRARY_NAME_POSTFIX}" STREQUAL "")
index 27389d16df9f3e2a6d4ec10e22ad7a47227fba09..f874b18a00c3b21309a01173dee5c077b160f858 100644 (file)
@@ -1,5 +1,9 @@
 # variable description
 
+set (OCCT_PROJECT_NAME_DESCR
+"Project name used in install directory paths for Unix and vcpkg layouts.
+Allows customization of directory structure for different package names.")
+
 set (BUILD_LIBRARY_TYPE_DESCR 
 "Specifies the type of library to be created. 'Shared' libraries
 are linked dynamically and loaded at runtime. 'Static' libraries
@@ -56,7 +60,7 @@ set (INSTALL_DIR_WITH_VERSION_DESCR
 
 set (INSTALL_DIR_LAYOUT_DESCR
 "Defines structure of OCCT files (binaries, resources, headers etc.) for the install directory.
-Two variants are predefined: for Windows (standard OCCT layout) and for Unix operating systems (standard Linux layout).
+Three variants are predefined: for Windows (standard OCCT layout), for Unix operating systems (standard Linux layout), and for vcpkg (standard vcpkg layout without 'd' and 'i' suffixes).
 If needed, layout can be customized with INSTALL_DIR_* variables.")
 
 set (INSTALL_DIR_BIN_DESCR 
index 5079ba63c1b8e1d47d4f9248b2f2790d56a4cbf7..a4796b2dc1c2109404067d07be6edd5d83940b4d 100644 (file)
@@ -17,11 +17,12 @@ set (OpenCASCADE_MAINTENANCE_VERSION "@OCC_VERSION_MAINTENANCE@")
 set (OpenCASCADE_DEVELOPMENT_VERSION "@OCC_VERSION_DEVELOPMENT@")
 
 # Compute the installation prefix from this OpenCASCADEConfig.cmake file 
-# location, by going up one level + one level if "cmake" + one level if "lib".
+# location, by going up one level + one level if "cmake" + one level if "lib" + one level if "share".
 # This is made to support different locations of CMake files:
-# - in UNIX style: $INSTALL_DIR/lib/cmake/opencascade-<version>
+# - in UNIX style: $INSTALL_DIR/lib/cmake/@OCCT_PROJECT_NAME@-<version>
 # - in Windows style: $INSTALL_DIR/cmake
-# - in Android style: $INSTALL_DIR/libs/$CMAKE_ANDROID_ARCH_ABI/cmake/opencascade-<version>
+# - in vcpkg style: $INSTALL_DIR/share/@OCCT_PROJECT_NAME@
+# - in Android style: $INSTALL_DIR/libs/$CMAKE_ANDROID_ARCH_ABI/cmake/@OCCT_PROJECT_NAME@-<version>
 get_filename_component (OpenCASCADE_INSTALL_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
 get_filename_component (OpenCASCADE_INSTALL_PREFIX "${OpenCASCADE_INSTALL_PREFIX}" PATH)
 if (OpenCASCADE_INSTALL_PREFIX MATCHES "/cmake$")
@@ -30,6 +31,9 @@ endif()
 if (OpenCASCADE_INSTALL_PREFIX MATCHES "/lib(32|64)?$")
   get_filename_component (OpenCASCADE_INSTALL_PREFIX "${OpenCASCADE_INSTALL_PREFIX}" PATH)
 endif()
+if (OpenCASCADE_INSTALL_PREFIX MATCHES "/share$")
+  get_filename_component (OpenCASCADE_INSTALL_PREFIX "${OpenCASCADE_INSTALL_PREFIX}" PATH)
+endif()
 if (OpenCASCADE_INSTALL_PREFIX MATCHES "/libs/${CMAKE_ANDROID_ARCH_ABI}$")
   get_filename_component (OpenCASCADE_INSTALL_PREFIX "${OpenCASCADE_INSTALL_PREFIX}" PATH)
   get_filename_component (OpenCASCADE_INSTALL_PREFIX "${OpenCASCADE_INSTALL_PREFIX}" PATH)
index 5e277cf14bda37bac766ec771687eacec2046d0c..3343d30bd18312bef29d17c57d6a369e8e690eb4 100644 (file)
@@ -25,16 +25,9 @@ if /I "%VCVER%" == "@COMPILER@" (
 
     rem CSF_OCCTBinPath and CSF_OCCTLibPath are defined differently for 
     rem multiple and single configuration builds
-    set "CSF_OCCTBinPath=@CMAKE_RUNTIME_OUTPUT_DIRECTORY@"
-    if ["@CMAKE_RUNTIME_OUTPUT_DIRECTORY@"] == [""] (
-      set "CSF_OCCTBinPath=@CMAKE_BINARY_DIR@/win%ARCH%/%VCVER%/bin%3"
-    )
-    set "CSF_OCCTLibPath=@CMAKE_ARCHIVE_OUTPUT_DIRECTORY@"
-    if ["@CMAKE_ARCHIVE_OUTPUT_DIRECTORY@"] == [""] (
-      set "CSF_OCCTLibPath=@CMAKE_BINARY_DIR@/win%ARCH%/%VCVER%/lib%3"
-    )
+    @OCCT_CUSTOM_BUILD_BIN_LIB_PATHS@
 
-    set "CSF_OCCTIncludePath=@CMAKE_BINARY_DIR@/inc"
+    set "CSF_OCCTIncludePath=@CMAKE_BINARY_DIR@/@INSTALL_DIR_INCLUDE@"
     set "CSF_OCCTResourcePath=@CMAKE_SOURCE_DIR@/resources"
     set "CSF_OCCTDataPath=@CMAKE_SOURCE_DIR@/data"
     set "CSF_OCCTSamplesPath=@CMAKE_SOURCE_DIR@/samples"
index 265d79a97fcc4946cfca5b3a177d1989ea738c22..67ee37c2b4dc9b5db21e940b70453fb203fff274 100644 (file)
@@ -21,8 +21,9 @@ if [ "$1" == "@BIN_LETTER@" ]; then
     export TCL_VERSION_WITH_DOT="@3RDPARTY_TCL_LIBRARY_VERSION_WITH_DOT@"
     export TK_VERSION_WITH_DOT="@3RDPARTY_TK_LIBRARY_VERSION_WITH_DOT@"
 
-    export CSF_OCCTBinPath="@CMAKE_RUNTIME_OUTPUT_DIRECTORY@"
-    export CSF_OCCTLibPath="@CMAKE_ARCHIVE_OUTPUT_DIRECTORY@"
+    # CSF_OCCTBinPath and CSF_OCCTLibPath are defined differently for 
+    # multiple and single configuration builds
+    @OCCT_CUSTOM_BUILD_BIN_LIB_PATHS@
     export CSF_OCCTIncludePath="@CMAKE_BINARY_DIR@/@INSTALL_DIR_INCLUDE@"
     export CSF_OCCTResourcePath="@CMAKE_SOURCE_DIR@/resources"
     export CSF_OCCTDataPath="@CMAKE_SOURCE_DIR@/data"
index 2f2af3a5ac1ed89ae9b254411c7fdbed95825bdf..1cf3fe255c9d0989508d8d48badeac5793548e8a 100644 (file)
@@ -25,15 +25,9 @@ if /I "%VCVER%" == "@COMPILER@" (
     set "TCL_VERSION_WITH_DOT=@3RDPARTY_TCL_LIBRARY_VERSION_WITH_DOT@"
     set "TK_VERSION_WITH_DOT=@3RDPARTY_TK_LIBRARY_VERSION_WITH_DOT@"
 
-    set "CSF_OCCTBinPath=%CASROOT%/@INSTALL_DIR_BIN@%3"
-    set "CSF_OCCTLibPath=%CASROOT%/@INSTALL_DIR_LIB@%3"
+    @OCCT_CUSTOM_BIN_LIB_PATHS@
 
-    set "CSF_OCCTIncludePath=%CASROOT%/@INSTALL_DIR_INCLUDE@"
-    set "CSF_OCCTResourcePath=%CASROOT%/@INSTALL_DIR_RESOURCE@"
-    set "CSF_OCCTDataPath=%CASROOT%/@INSTALL_DIR_DATA@"
-    set "CSF_OCCTSamplesPath=%CASROOT%/@INSTALL_DIR_SAMPLES@"
-    set "CSF_OCCTTestsPath=%CASROOT%/@INSTALL_DIR_TESTS@"
-    set "CSF_OCCTDocPath=%CASROOT%/@INSTALL_DIR_DOC@"
+    @OCCT_CUSTOM_ADDITIONAL_PATHS@
   )
 )
 
index dc6552b3428d37e158507f0791f1f4f1eb06c79f..7d9b37e41373aafbf804e12bc2f904fb53d0b677 100644 (file)
@@ -21,14 +21,10 @@ if [ "$1" == "@BIN_LETTER@" ]; then
     export TCL_VERSION_WITH_DOT="@3RDPARTY_TCL_LIBRARY_VERSION_WITH_DOT@"
     export TK_VERSION_WITH_DOT="@3RDPARTY_TK_LIBRARY_VERSION_WITH_DOT@"
 
-    export CSF_OCCTBinPath="${CASROOT}/@INSTALL_DIR_BIN@"
-    export CSF_OCCTLibPath="${CASROOT}/@INSTALL_DIR_LIB@"
-    export CSF_OCCTIncludePath="${CASROOT}/@INSTALL_DIR_INCLUDE@"
-    export CSF_OCCTResourcePath="${CASROOT}/@INSTALL_DIR_RESOURCE@"
-    export CSF_OCCTDataPath="${CASROOT}/@INSTALL_DIR_DATA@"
-    export CSF_OCCTSamplesPath="${CASROOT}/@INSTALL_DIR_SAMPLES@"
-    export CSF_OCCTTestsPath="${CASROOT}/@INSTALL_DIR_TESTS@"
-    export CSF_OCCTDocPath="${CASROOT}/@INSTALL_DIR_DOC@"
+    # Set paths based on layout
+    @OCCT_CUSTOM_BIN_LIB_PATHS@
+    
+    @OCCT_CUSTOM_ADDITIONAL_PATHS@
   fi
 fi
 
index 246ec2a9ab0d543c0994a24da91571316a6ad0b8..5d6eae12df19498660fbf0642c6af167526f55ad 100644 (file)
@@ -141,8 +141,8 @@ if /I ["%1"] == ["vc141"] set "VCVER=vc14"
 if /I ["%1"] == ["vc142"] set "VCVER=vc14"
 if /I ["%1"] == ["vc143"] set "VCVER=vc14"
 
-if exist "%CASROOT%\custom.bat" (
-  call "%CASROOT%\custom.bat" %VCVER% %ARCH% %CASDEB%
+if exist "@OCCT_CUSTOM_SCRIPT_PREFIX@@OCCT_CUSTOM_SCRIPT_PATH@" (
+  call "@OCCT_CUSTOM_SCRIPT_PREFIX@@OCCT_CUSTOM_SCRIPT_PATH@" %VCVER% %ARCH% %CASDEB%
 )
 
 if not ["%QTDIR%"] == [""] (
index 467ca67209526b65c0fd572d1521ac3ca79b0d7f..b9d62cb7ec7674dacf87e59aa2a2f6fff8ae8fbb 100644 (file)
@@ -48,8 +48,8 @@ else
 fi
 
 # ----- Set local settings -----
-if [ -e "${CASROOT}/@INSTALL_DIR_SCRIPT@/custom.sh" ]; then
-  source "${CASROOT}/@INSTALL_DIR_SCRIPT@/custom.sh" "${CASDEB}" "${ARCH}"
+if [ -e "@OCCT_CUSTOM_SCRIPT_PREFIX@@OCCT_CUSTOM_SCRIPT_PATH@" ]; then
+  source "@OCCT_CUSTOM_SCRIPT_PREFIX@@OCCT_CUSTOM_SCRIPT_PATH@" "${CASDEB}" "${ARCH}"
 fi
 
 THRDPARTY_PATH=""