mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-28 03:05:33 +00:00
Merge branch 'v0.8.0' into ifcmax/initial-refresh
# Conflicts: # src/ifcmax/CMakeLists.txt
This commit is contained in:
+11
@@ -0,0 +1,11 @@
|
||||
# yaml-language-server: $schema=https://raw.githubusercontent.com/BlankSpruce/gersemi/0.24.0/gersemi/configuration.schema.json
|
||||
|
||||
# Needed for gersemi to detect custom functions and macros.
|
||||
definitions: ["./cmake"]
|
||||
disable_formatting: false
|
||||
extensions: []
|
||||
indent: 4
|
||||
line_length: 120
|
||||
list_expansion: favour-inlining
|
||||
unsafe: false
|
||||
warn_about_unknown_commands: true
|
||||
@@ -6,3 +6,7 @@ updates:
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
- package-ecosystem: "pip"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
|
||||
+108
-68
@@ -18,16 +18,16 @@
|
||||
################################################################################
|
||||
|
||||
cmake_minimum_required(VERSION 3.21)
|
||||
if (NOT DEFINED CMAKE_CXX_STANDARD)
|
||||
if(NOT DEFINED CMAKE_CXX_STANDARD)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
endif()
|
||||
if (CMAKE_CXX_STANDARD LESS 17)
|
||||
if(CMAKE_CXX_STANDARD LESS 17)
|
||||
message(FATAL_ERROR "C++17 or newer is required.")
|
||||
endif()
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON) # not necessary, but encouraged
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
if (VERSION_OVERRIDE)
|
||||
if(VERSION_OVERRIDE)
|
||||
file(READ "../VERSION" "RELEASE_VERSION_")
|
||||
string(STRIP "${RELEASE_VERSION_}" RELEASE_VERSION)
|
||||
message(STATUS "Detected version '${RELEASE_VERSION}'")
|
||||
@@ -35,12 +35,11 @@ else()
|
||||
set(RELEASE_VERSION "0.8.0")
|
||||
endif()
|
||||
|
||||
project(IfcOpenShell VERSION ${RELEASE_VERSION})
|
||||
|
||||
add_definitions(-D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR)
|
||||
|
||||
if(POLICY CMP0141) # 3.25+
|
||||
cmake_policy(SET CMP0141 NEW) # Support for `CMAKE_MSVC_DEBUG_INFORMATION_FORMAT`.
|
||||
# Has to be set before `project` to take effect.
|
||||
cmake_policy(SET CMP0141 NEW) # Support for `CMAKE_MSVC_DEBUG_INFORMATION_FORMAT`.
|
||||
endif()
|
||||
if(POLICY CMP0144) # 3.27
|
||||
cmake_policy(SET CMP0144 NEW) # find_package() uses upper-case <PACKAGENAME>_ROOT variables.
|
||||
@@ -49,6 +48,8 @@ if(POLICY CMP0167) # 3.30
|
||||
cmake_policy(SET CMP0167 OLD)
|
||||
endif()
|
||||
|
||||
project(IfcOpenShell VERSION ${RELEASE_VERSION})
|
||||
|
||||
if(NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE "Release")
|
||||
endif()
|
||||
@@ -64,7 +65,11 @@ endif()
|
||||
option(MINIMAL_BUILD "The build is to make a minimal version of IFC converter from OCCT into IFC." OFF)
|
||||
option(WASM_BUILD "Build a WebAssembly binary." OFF)
|
||||
|
||||
option(ENABLE_BUILD_OPTIMIZATIONS "Enable certain compiler and linker optimizations on RelWithDebInfo and Release builds." OFF)
|
||||
option(
|
||||
ENABLE_BUILD_OPTIMIZATIONS
|
||||
"Enable certain compiler and linker optimizations on RelWithDebInfo and Release builds."
|
||||
OFF
|
||||
)
|
||||
option(BUILD_SHARED_LIBS "Build IfcParse and IfcGeom as shared libs (SO/DLL)." OFF)
|
||||
option(MSVC_PARALLEL_BUILD "Multi-threaded compilation in Microsoft Visual Studio (/MP)" OFF)
|
||||
option(USE_VLD "Use Visual Leak Detector for debugging memory leaks, MSVC-only." OFF)
|
||||
@@ -83,9 +88,11 @@ option(BUILD_PACKAGE "" OFF)
|
||||
# Most users probably need just common schemas,
|
||||
# but we're keeping it `OFF` by default to avoid disruption
|
||||
# (e.g. all Python distribution would need to adapt this option to be set).
|
||||
option(BUILD_ONLY_COMMON_SCHEMAS
|
||||
option(
|
||||
BUILD_ONLY_COMMON_SCHEMAS
|
||||
"Build only common IFC schemas (2x3, 4, 4x3_add2). By default all schemas will be built."
|
||||
OFF)
|
||||
OFF
|
||||
)
|
||||
option(SCHEMA_VERSIONS "Explicitly specify schemas to build." "")
|
||||
|
||||
option(WITH_OPENCASCADE "Enable geometry interpretation using Open CASCADE" ON)
|
||||
@@ -103,12 +110,16 @@ option(WITH_ZSTD "Use Zstd compression in RocksDB writes" OFF)
|
||||
option(USERSPACE_PYTHON_PREFIX "Installs IfcPython for the current user only instead of system-wide." OFF)
|
||||
option(USE_DEBUG_PYTHON "Use debug binaries when building Debug IfcPython on Windows." OFF)
|
||||
option(ADD_COMMIT_SHA "Add commit sha and branch in version number, requires git" OFF)
|
||||
option(VERSION_OVERRIDE "Override the version defined in buildinfo.cpp with the file VERSION in the repository root" OFF)
|
||||
option(
|
||||
VERSION_OVERRIDE
|
||||
"Override the version defined in buildinfo.cpp with the file VERSION in the repository root"
|
||||
OFF
|
||||
)
|
||||
option(USE_CCACHE "Enable use of ccache if it's available from PATH." ON)
|
||||
|
||||
set(
|
||||
PYTHON_MODULE_INSTALL_DIR
|
||||
"" CACHE PATH
|
||||
set(PYTHON_MODULE_INSTALL_DIR
|
||||
""
|
||||
CACHE PATH
|
||||
"Directory to install IfcPython package to. By default package is installed in found Python's site-packages."
|
||||
)
|
||||
|
||||
@@ -127,7 +138,7 @@ if(MINIMAL_BUILD)
|
||||
set(USD_SUPPORT OFF)
|
||||
endif()
|
||||
|
||||
if((BUILD_CONVERT OR BUILD_GEOMSERVER OR BUILD_IFCPYTHON) AND(NOT BUILD_IFCGEOM))
|
||||
if((BUILD_CONVERT OR BUILD_GEOMSERVER OR BUILD_IFCPYTHON) AND (NOT BUILD_IFCGEOM))
|
||||
message(STATUS "'IfcGeom' is required with current outputs")
|
||||
set(BUILD_IFCGEOM ON)
|
||||
endif()
|
||||
@@ -142,14 +153,8 @@ if(USE_CCACHE AND CCACHE_FOUND)
|
||||
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<$<CONFIG:Debug,RelWithDebInfo>:Embedded>")
|
||||
# Not needed for Ninja.
|
||||
if(CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||
file(COPY_FILE
|
||||
${CCACHE_FOUND} ${CMAKE_BINARY_DIR}/cl.exe
|
||||
ONLY_IF_DIFFERENT)
|
||||
set(CMAKE_VS_GLOBALS
|
||||
"CLToolExe=cl.exe"
|
||||
"CLToolPath=${CMAKE_BINARY_DIR}"
|
||||
"UseMultiToolTask=true"
|
||||
)
|
||||
file(COPY_FILE ${CCACHE_FOUND} ${CMAKE_BINARY_DIR}/cl.exe ONLY_IF_DIFFERENT)
|
||||
set(CMAKE_VS_GLOBALS "CLToolExe=cl.exe" "CLToolPath=${CMAKE_BINARY_DIR}" "UseMultiToolTask=true")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
@@ -183,7 +188,10 @@ endif()
|
||||
if(BUILD_SHARED_LIBS)
|
||||
add_definitions(-DIFC_SHARED_BUILD)
|
||||
if(MSVC)
|
||||
message(WARNING "Building DLLs against the static VC run-time. This is not recommended if the DLLs are to be redistributed.")
|
||||
message(
|
||||
WARNING
|
||||
"Building DLLs against the static VC run-time. This is not recommended if the DLLs are to be redistributed."
|
||||
)
|
||||
# C4521: 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2'
|
||||
# There will be couple hundreds of these so suppress them away, https://msdn.microsoft.com/en-us/library/esew7y1w.aspx
|
||||
add_definitions(-wd4251)
|
||||
@@ -206,7 +214,6 @@ foreach(option_flag IN LISTS option_flags)
|
||||
convert_env_var_to_bool("${option_flag}")
|
||||
endforeach()
|
||||
|
||||
|
||||
if(BUILD_IFCGEOM AND WITH_OPENCASCADE)
|
||||
find_package(OpenCASCADE REQUIRED)
|
||||
add_definitions(-DIFOPSH_WITH_OPENCASCADE)
|
||||
@@ -230,7 +237,7 @@ if(USD_SUPPORT)
|
||||
endif(USD_SUPPORT)
|
||||
|
||||
set(ROCKSDB_LIBRARIES "")
|
||||
if (WITH_ROCKSDB)
|
||||
if(WITH_ROCKSDB)
|
||||
# Temporaily mess with CMAKE_FIND_PACKAGE_PREFER_CONFIG to help RocksDB
|
||||
# find it's zstd dependency on Windows.
|
||||
# Only do it on Windows, otherwise it might create problems as
|
||||
@@ -250,9 +257,12 @@ if (WITH_ROCKSDB)
|
||||
set(ROCKSDB_LIBRARIES "IFCOPENSHELL_RocksDB")
|
||||
target_compile_definitions(IFCOPENSHELL_RocksDB INTERFACE IFOPSH_WITH_ROCKSDB)
|
||||
set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_ROCKSDB)
|
||||
target_link_libraries(IFCOPENSHELL_RocksDB INTERFACE $<IF:$<TARGET_EXISTS:RocksDB::rocksdb-shared>,RocksDB::rocksdb-shared,RocksDB::rocksdb>)
|
||||
target_link_libraries(
|
||||
IFCOPENSHELL_RocksDB
|
||||
INTERFACE $<IF:$<TARGET_EXISTS:RocksDB::rocksdb-shared>,RocksDB::rocksdb-shared,RocksDB::rocksdb>
|
||||
)
|
||||
|
||||
if (WITH_ZSTD)
|
||||
if(WITH_ZSTD)
|
||||
# @todo do we actually need the zstd include dir or rather just pass
|
||||
# the libzstd.a along with the rocksdb library when needed and feature
|
||||
# detect based on rocksdb API?
|
||||
@@ -262,8 +272,7 @@ if (WITH_ROCKSDB)
|
||||
target_link_libraries(IFCOPENSHELL_RocksDB INTERFACE zstd::libzstd_static)
|
||||
endif()
|
||||
|
||||
install(TARGETS IFCOPENSHELL_RocksDB
|
||||
EXPORT ${IFCOPENSHELL_EXPORT_TARGETS})
|
||||
install(TARGETS IFCOPENSHELL_RocksDB EXPORT ${IFCOPENSHELL_EXPORT_TARGETS})
|
||||
endif()
|
||||
|
||||
# Find Boost: On win32 the (hardcoded) default is to use static libraries and
|
||||
@@ -299,7 +308,14 @@ if(WASM_BUILD)
|
||||
else()
|
||||
# @todo review this, shouldn't this be all possible header-only now?
|
||||
# ... or rewritten using C++17 features?
|
||||
set(BOOST_COMPONENTS system program_options regex thread date_time iostreams)
|
||||
set(BOOST_COMPONENTS
|
||||
system
|
||||
program_options
|
||||
regex
|
||||
thread
|
||||
date_time
|
||||
iostreams
|
||||
)
|
||||
endif()
|
||||
|
||||
if(USE_MMAP)
|
||||
@@ -405,7 +421,7 @@ if(MSVC)
|
||||
endif()
|
||||
|
||||
# Enforce standards-conformance on VS > 2015, older Boost versions fail to compile with this
|
||||
if(MSVC_VERSION GREATER 1900 AND(Boost_MAJOR_VERSION GREATER 1 OR Boost_MINOR_VERSION GREATER 66))
|
||||
if(MSVC_VERSION GREATER 1900 AND (Boost_MAJOR_VERSION GREATER 1 OR Boost_MINOR_VERSION GREATER 66))
|
||||
add_definitions(-permissive-)
|
||||
endif()
|
||||
|
||||
@@ -424,11 +440,11 @@ if(MSVC)
|
||||
# endforeach()
|
||||
# endif()
|
||||
|
||||
add_definitions(-D_ENABLE_EXTENDED_ALIGNED_STORAGE)
|
||||
# See #5158.
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.40)
|
||||
add_definitions(-D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR)
|
||||
endif()
|
||||
add_definitions(-D_ENABLE_EXTENDED_ALIGNED_STORAGE)
|
||||
# See #5158.
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.40)
|
||||
add_definitions(-D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR)
|
||||
endif()
|
||||
else()
|
||||
add_definitions(-Wall -Wextra)
|
||||
|
||||
@@ -438,7 +454,10 @@ else()
|
||||
add_definitions(-Wno-maybe-uninitialized)
|
||||
endif()
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 9.0 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 9.0))
|
||||
if(
|
||||
CMAKE_CXX_COMPILER_ID MATCHES "GNU"
|
||||
AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 9.0 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 9.0)
|
||||
)
|
||||
# OpenCascade spews a lot of deprecated-copy warnings
|
||||
add_definitions(-Wno-deprecated-copy)
|
||||
endif()
|
||||
@@ -449,16 +468,23 @@ else()
|
||||
endif()
|
||||
endif(MSVC)
|
||||
|
||||
include_directories(${OPENCOLLADA_INCLUDE_DIRS}
|
||||
${Boost_INCLUDE_DIRS} ${HDF5_INCLUDE_DIR}
|
||||
)
|
||||
include_directories(${OPENCOLLADA_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${HDF5_INCLUDE_DIR})
|
||||
|
||||
if(NOT SCHEMA_VERSIONS)
|
||||
# `WASM_BUILD` - super arbitrarily try to keep size down at least a little bit
|
||||
if(BUILD_ONLY_COMMON_SCHEMAS OR WASM_BUILD)
|
||||
set(SCHEMA_VERSIONS "2x3" "4" "4x3_add2")
|
||||
else()
|
||||
set(SCHEMA_VERSIONS "2x3" "4" "4x1" "4x2" "4x3" "4x3_tc1" "4x3_add1" "4x3_add2")
|
||||
set(SCHEMA_VERSIONS
|
||||
"2x3"
|
||||
"4"
|
||||
"4x1"
|
||||
"4x2"
|
||||
"4x3"
|
||||
"4x3_tc1"
|
||||
"4x3_add1"
|
||||
"4x3_add2"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -477,7 +503,10 @@ if(COMPILE_SCHEMA)
|
||||
find_package(PythonInterp)
|
||||
|
||||
if(NOT PYTHONINTERP_FOUND)
|
||||
message(FATAL_ERROR "A Python interpreter is necessary when COMPILE_SCHEMA is enabled. Disable COMPILE_SCHEMA or fix Python paths to proceed.")
|
||||
message(
|
||||
FATAL_ERROR
|
||||
"A Python interpreter is necessary when COMPILE_SCHEMA is enabled. Disable COMPILE_SCHEMA or fix Python paths to proceed."
|
||||
)
|
||||
endif()
|
||||
|
||||
set(IFC_RELEASE_NOT_USED ${SCHEMA_VERSIONS})
|
||||
@@ -497,7 +526,10 @@ if(COMPILE_SCHEMA)
|
||||
|
||||
if("${PYPARSING_FOUND}" STREQUAL "-1")
|
||||
message(STATUS "Installing pyparsing")
|
||||
execute_process(COMMAND ${PYTHON_EXECUTABLE} -m pip "install" --user pyparsing RESULT_VARIABLE SUCCESS)
|
||||
execute_process(
|
||||
COMMAND ${PYTHON_EXECUTABLE} -m pip "install" --user pyparsing
|
||||
RESULT_VARIABLE SUCCESS
|
||||
)
|
||||
|
||||
if(NOT "${SUCCESS}" STREQUAL "0")
|
||||
execute_process(COMMAND pip "install" --user pyparsing RESULT_VARIABLE SUCCESS)
|
||||
@@ -512,19 +544,23 @@ if(COMPILE_SCHEMA)
|
||||
|
||||
# Bootstrap the parser
|
||||
message(STATUS "Compiling schema, this will take a while...")
|
||||
execute_process(COMMAND ${PYTHON_EXECUTABLE} bootstrap.py express.bnf
|
||||
execute_process(
|
||||
COMMAND ${PYTHON_EXECUTABLE} bootstrap.py express.bnf
|
||||
WORKING_DIRECTORY ../src/ifcexpressparser
|
||||
OUTPUT_FILE express_parser.py
|
||||
RESULT_VARIABLE SUCCESS)
|
||||
RESULT_VARIABLE SUCCESS
|
||||
)
|
||||
|
||||
if(NOT "${SUCCESS}" STREQUAL "0")
|
||||
message(FATAL_ERROR "Failed to bootstrap parser. Make sure pyparsing is installed")
|
||||
endif()
|
||||
|
||||
# Generate code
|
||||
execute_process(COMMAND ${PYTHON_EXECUTABLE} ../ifcexpressparser/express_parser.py ../../${COMPILE_SCHEMA}
|
||||
execute_process(
|
||||
COMMAND ${PYTHON_EXECUTABLE} ../ifcexpressparser/express_parser.py ../../${COMPILE_SCHEMA}
|
||||
WORKING_DIRECTORY ../src/ifcparse
|
||||
OUTPUT_VARIABLE COMPILED_SCHEMA_NAME)
|
||||
OUTPUT_VARIABLE COMPILED_SCHEMA_NAME
|
||||
)
|
||||
|
||||
# Prevent the schema that had just been compiled from being excluded
|
||||
foreach(schema ${SCHEMA_VERSIONS})
|
||||
@@ -568,8 +604,8 @@ if(ADD_COMMIT_SHA)
|
||||
endif()
|
||||
|
||||
if(GIT_FOUND)
|
||||
if (VERSION_OVERRIDE)
|
||||
set (git_branch ${RELEASE_VERSION})
|
||||
if(VERSION_OVERRIDE)
|
||||
set(git_branch ${RELEASE_VERSION})
|
||||
else()
|
||||
message("git found: ${GIT_EXECUTABLE} with version ${GIT_VERSION_STRING}")
|
||||
execute_process(
|
||||
@@ -581,8 +617,8 @@ if(ADD_COMMIT_SHA)
|
||||
string(REPLACE "\n" ";" git_branch_list "${git_branches}")
|
||||
|
||||
foreach(git_branch_candidate IN ITEMS ${git_branch_list})
|
||||
string(REPLACE "*" "" git_branch_candidate_temp "${git_branch_candidate}")
|
||||
string(STRIP "${git_branch_candidate_temp}" git_branch_candidate_2)
|
||||
string(REPLACE "*" "" git_branch_candidate_temp "${git_branch_candidate}")
|
||||
string(STRIP "${git_branch_candidate_temp}" git_branch_candidate_2)
|
||||
if(NOT git_branch_candidate_2 MATCHES "^HEAD$")
|
||||
string(REPLACE "/" ";" git_branch_candidate_2_list "${git_branch_candidate_2}")
|
||||
list(GET git_branch_candidate_2_list -1 git_branch)
|
||||
@@ -600,13 +636,13 @@ if(ADD_COMMIT_SHA)
|
||||
message(STATUS "IfcOpenShell branch: \"${git_branch}\"")
|
||||
message(STATUS "IfcOpenShell commit: \"${git_sha}\"")
|
||||
|
||||
if ("${git_branch}" STREQUAL "" OR "${git_sha}" STREQUAL "")
|
||||
if("${git_branch}" STREQUAL "" OR "${git_sha}" STREQUAL "")
|
||||
message(FATAL_ERROR "Unable to determine commit sha and/or branch")
|
||||
endif()
|
||||
|
||||
target_compile_definitions(IfcParse PRIVATE
|
||||
-DIFCOPENSHELL_BRANCH=${git_branch}
|
||||
-DIFCOPENSHELL_COMMIT=${git_sha}
|
||||
target_compile_definitions(
|
||||
IfcParse
|
||||
PRIVATE -DIFCOPENSHELL_BRANCH=${git_branch} -DIFCOPENSHELL_COMMIT=${git_sha}
|
||||
)
|
||||
endif()
|
||||
endif(ADD_COMMIT_SHA)
|
||||
@@ -649,23 +685,23 @@ if(NOT TARGET uninstall)
|
||||
configure_file(
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
||||
IMMEDIATE @ONLY)
|
||||
IMMEDIATE
|
||||
@ONLY
|
||||
)
|
||||
|
||||
add_custom_target(uninstall
|
||||
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
|
||||
add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
|
||||
endif()
|
||||
|
||||
# Packaging
|
||||
list(APPEND CPACK_SOURCE_IGNORE_FILES
|
||||
"/\\\\.git"
|
||||
"/build/"
|
||||
"/.pytest_cache/"
|
||||
"/__pycache__/"
|
||||
)
|
||||
list(APPEND CPACK_SOURCE_IGNORE_FILES "/\\\\.git" "/build/" "/.pytest_cache/" "/__pycache__/")
|
||||
set(CPACK_SOURCE_INSTALLED_DIRECTORIES "${CMAKE_SOURCE_DIR}/..;/")
|
||||
set(CPACK_PACKAGE_NAME "${PROJECT_NAME}-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}${EXTRA_VERSION}")
|
||||
set(CPACK_PACKAGE_NAME
|
||||
"${PROJECT_NAME}-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}${EXTRA_VERSION}"
|
||||
)
|
||||
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}${EXTRA_VERSION}")
|
||||
SET(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}${EXTRA_VERSION}-${CMAKE_SYSTEM_NAME}")
|
||||
set(CPACK_PACKAGE_FILE_NAME
|
||||
"${PROJECT_NAME}-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}${EXTRA_VERSION}-${CMAKE_SYSTEM_NAME}"
|
||||
)
|
||||
set(CPACK_PACKAGE_DIRECTORY "${PROJECT_BINARY_DIR}/assets")
|
||||
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "IfcOpenShell")
|
||||
set(CPACK_PACKAGE_DESCRIPTION "IfcOpenShell.")
|
||||
@@ -686,12 +722,16 @@ endforeach(COMPONENT)
|
||||
|
||||
set(CPACK_DEBIAN_PACKAGE_NAME "${PROJECT_NAME}")
|
||||
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "${CPACK_PACKAGE_CONTACT}")
|
||||
set(CPACK_DEBIAN_PACKAGE_DEPENDS "python3, libxml2, libocct-foundation-dev, libocct-modeling-algorithms-dev, libocct-modeling-data-dev, libocct-ocaf-dev, libocct-visualization-dev, libocct-data-exchange-dev, libhdf5-serial-dev, libpython3-dev, python3-pytest ${BOOST_DEPS}")
|
||||
set(CPACK_DEBIAN_PACKAGE_DEPENDS
|
||||
"python3, libxml2, libocct-foundation-dev, libocct-modeling-algorithms-dev, libocct-modeling-data-dev, libocct-ocaf-dev, libocct-visualization-dev, libocct-data-exchange-dev, libhdf5-serial-dev, libpython3-dev, python3-pytest ${BOOST_DEPS}"
|
||||
)
|
||||
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION_SUMMARY "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}")
|
||||
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION}")
|
||||
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
|
||||
set(CPACK_DEBIAN_PACKAGE_SECTION "science")
|
||||
set(CPACK_DEBIAN_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}${EXTRA_VERSION}")
|
||||
set(CPACK_DEBIAN_PACKAGE_VERSION
|
||||
"${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}${EXTRA_VERSION}"
|
||||
)
|
||||
set(CPACK_DEBIAN_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}")
|
||||
# set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/cmake/debian/postinst")
|
||||
|
||||
|
||||
@@ -65,5 +65,4 @@ add_library(IFCOPENSHELL_CGAL INTERFACE)
|
||||
target_link_libraries(IFCOPENSHELL_CGAL INTERFACE CGAL::CGAL)
|
||||
target_compile_definitions(IFCOPENSHELL_CGAL INTERFACE IFOPSH_WITH_CGAL)
|
||||
set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_CGAL)
|
||||
install(TARGETS IFCOPENSHELL_CGAL
|
||||
EXPORT ${IFCOPENSHELL_EXPORT_TARGETS})
|
||||
install(TARGETS IFCOPENSHELL_CGAL EXPORT ${IFCOPENSHELL_EXPORT_TARGETS})
|
||||
|
||||
@@ -55,7 +55,6 @@ if(HDF5_LIBRARY_DIR)
|
||||
"${HDF5_LIBRARY_DIR}/libsz${debug_postfix}.${lib_ext}"
|
||||
"${HDF5_LIBRARY_DIR}/libaec${debug_postfix}.${lib_ext}"
|
||||
)
|
||||
|
||||
else()
|
||||
message(STATUS "Packaging hdf5 and zlib for conda distribution")
|
||||
|
||||
|
||||
@@ -33,15 +33,15 @@ else()
|
||||
set_property(TARGET LibXml2::LibXml2 PROPERTY IMPORTED_LOCATION)
|
||||
get_release_variant(LIBXML2_RELEASE_LIB "${LIBXML2_LIBRARIES}" "d")
|
||||
get_debug_variant(LIBXML2_DEBUG_LIB "${LIBXML2_LIBRARIES}" "d")
|
||||
set_target_properties(LibXml2::LibXml2
|
||||
set_target_properties(
|
||||
LibXml2::LibXml2
|
||||
PROPERTIES
|
||||
IMPORTED_CONFIGURATIONS "Release;Debug"
|
||||
IMPORTED_LOCATION_RELEASE "${LIBXML2_RELEASE_LIB}"
|
||||
IMPORTED_LOCATION_DEBUG "${LIBXML2_DEBUG_LIB}"
|
||||
IMPORTED_CONFIGURATIONS "Release;Debug"
|
||||
IMPORTED_LOCATION_RELEASE "${LIBXML2_RELEASE_LIB}"
|
||||
IMPORTED_LOCATION_DEBUG "${LIBXML2_DEBUG_LIB}"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
# Restore module path.
|
||||
list(PREPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR})
|
||||
|
||||
+46
-27
@@ -22,7 +22,6 @@ if(OCC_LIBRARY_DIR)
|
||||
message(STATUS "Looking for Open CASCADE library files in: ${OCC_LIBRARY_DIR}")
|
||||
endif()
|
||||
|
||||
|
||||
if(NOT OCC_INCLUDE_DIR AND NOT OCC_LIBRARY_DIR)
|
||||
# OCE is not supported for find_package, because it's using a different name (`oce`)
|
||||
# and also has an odd directory structure (install/lib/oce-0.18/*.cmake).
|
||||
@@ -41,9 +40,7 @@ if(NOT OCC_INCLUDE_DIR AND NOT OCC_LIBRARY_DIR)
|
||||
|
||||
if(OpenCASCADE_VERSION VERSION_LESS "7.7.0")
|
||||
# cmake configs < 7.7.0 were not adding include directories to targets automatically.
|
||||
set_target_properties(TKernel PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${OpenCASCADE_INCLUDE_DIR}"
|
||||
)
|
||||
set_target_properties(TKernel PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${OpenCASCADE_INCLUDE_DIR}")
|
||||
endif()
|
||||
|
||||
if(OpenCASCADE_VERSION VERSION_LESS "7.9.0" AND WIN32)
|
||||
@@ -62,17 +59,11 @@ if(OCC_INCLUDE_DIR AND OCC_LIBRARY_DIR)
|
||||
"and OCC_LIBRARY_DIR ('${OCC_LIBRARY_DIR}')."
|
||||
)
|
||||
# Parse OCC_VERSION_STRING.
|
||||
file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAJOR
|
||||
REGEX "#define OCC_VERSION_MAJOR.*"
|
||||
)
|
||||
file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAJOR REGEX "#define OCC_VERSION_MAJOR.*")
|
||||
string(REGEX MATCH "[0-9]+" OCC_MAJOR ${OCC_MAJOR})
|
||||
file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MINOR
|
||||
REGEX "#define OCC_VERSION_MINOR.*"
|
||||
)
|
||||
file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MINOR REGEX "#define OCC_VERSION_MINOR.*")
|
||||
string(REGEX MATCH "[0-9]+" OCC_MINOR ${OCC_MINOR})
|
||||
file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAINT
|
||||
REGEX "#define OCC_VERSION_MAINTENANCE.*"
|
||||
)
|
||||
file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAINT REGEX "#define OCC_VERSION_MAINTENANCE.*")
|
||||
string(REGEX MATCH "[0-9]+" OCC_MAINT ${OCC_MAINT})
|
||||
set(OCC_VERSION_STRING "${OCC_MAJOR}.${OCC_MINOR}.${OCC_MAINT}")
|
||||
else()
|
||||
@@ -86,17 +77,37 @@ else()
|
||||
)
|
||||
endif()
|
||||
|
||||
set(
|
||||
OpenCASCADE_LIBRARIES
|
||||
TKernel TKMath TKBRep TKGeomBase TKGeomAlgo TKG3d TKG2d TKShHealing TKTopAlgo TKMesh TKPrim TKBool TKBO
|
||||
TKFillet TKXSBase TKOffset TKHLR
|
||||
|
||||
set(OpenCASCADE_LIBRARIES
|
||||
TKernel
|
||||
TKMath
|
||||
TKBRep
|
||||
TKGeomBase
|
||||
TKGeomAlgo
|
||||
TKG3d
|
||||
TKG2d
|
||||
TKShHealing
|
||||
TKTopAlgo
|
||||
TKMesh
|
||||
TKPrim
|
||||
TKBool
|
||||
TKBO
|
||||
TKFillet
|
||||
TKXSBase
|
||||
TKOffset
|
||||
TKHLR
|
||||
# @todo investigate the exact conditions when this is necessary
|
||||
TKBin
|
||||
)
|
||||
|
||||
if(OCC_VERSION_STRING VERSION_LESS 7.8.0)
|
||||
list(APPEND OpenCASCADE_LIBRARIES TKIGES TKSTEPBase TKSTEPAttr TKSTEP209 TKSTEP)
|
||||
list(
|
||||
APPEND OpenCASCADE_LIBRARIES
|
||||
TKIGES
|
||||
TKSTEPBase
|
||||
TKSTEPAttr
|
||||
TKSTEP209
|
||||
TKSTEP
|
||||
)
|
||||
else(OCC_VERSION_STRING VERSION_LESS 7.8.0)
|
||||
list(APPEND OpenCASCADE_LIBRARIES TKDESTEP TKDEIGES)
|
||||
endif(OCC_VERSION_STRING VERSION_LESS 7.8.0)
|
||||
@@ -106,10 +117,7 @@ find_library(libTKernel NAMES TKernel TKerneld PATHS ${OCC_LIBRARY_DIR} NO_DEFAU
|
||||
if(libTKernel)
|
||||
message(STATUS "Required Open Cascade Library files found")
|
||||
else()
|
||||
message(
|
||||
FATAL_ERROR
|
||||
"Unable to find Open Cascade library files in OCC_LIBRARY_DIR ('${OCC_LIBRARY_DIR}'), aborting"
|
||||
)
|
||||
message(FATAL_ERROR "Unable to find Open Cascade library files in OCC_LIBRARY_DIR ('${OCC_LIBRARY_DIR}'), aborting")
|
||||
endif()
|
||||
|
||||
if(MSVC)
|
||||
@@ -138,9 +146,21 @@ if(OCCT_STATIC)
|
||||
# OpenCASCADE_LIBRARIES repeated N times below in order to fix cyclic dependencies
|
||||
# tfk: --start-group ... --end-group didn't work on the apple linker when last tested
|
||||
if(APPLE)
|
||||
set(OpenCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES} ${OpenCASCADE_LIBRARIES} ${OpenCASCADE_LIBRARIES} ${OpenCASCADE_LIBRARIES} ${OpenCASCADE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
|
||||
set(OpenCASCADE_LIBRARIES
|
||||
${OpenCASCADE_LIBRARIES}
|
||||
${OpenCASCADE_LIBRARIES}
|
||||
${OpenCASCADE_LIBRARIES}
|
||||
${OpenCASCADE_LIBRARIES}
|
||||
${OpenCASCADE_LIBRARIES}
|
||||
${CMAKE_THREAD_LIBS_INIT}
|
||||
)
|
||||
else()
|
||||
set(OpenCASCADE_LIBRARIES -Wl,--start-group ${OpenCASCADE_LIBRARIES} -Wl,--end-group ${CMAKE_THREAD_LIBS_INIT})
|
||||
set(OpenCASCADE_LIBRARIES
|
||||
-Wl,--start-group
|
||||
${OpenCASCADE_LIBRARIES}
|
||||
-Wl,--end-group
|
||||
${CMAKE_THREAD_LIBS_INIT}
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -157,5 +177,4 @@ target_include_directories(OpenCASCADE_INTERFACE INTERFACE "${OCC_INCLUDE_DIR}")
|
||||
target_link_libraries(OpenCASCADE_INTERFACE INTERFACE ${OpenCASCADE_LIBRARIES})
|
||||
target_link_directories(OpenCASCADE_INTERFACE INTERFACE "${OCC_LIBRARY_DIR}")
|
||||
set(OpenCASCADE_LIBRARIES OpenCASCADE_INTERFACE)
|
||||
install(TARGETS OpenCASCADE_INTERFACE
|
||||
EXPORT ${IFCOPENSHELL_EXPORT_TARGETS})
|
||||
install(TARGETS OpenCASCADE_INTERFACE EXPORT ${IFCOPENSHELL_EXPORT_TARGETS})
|
||||
|
||||
+39
-13
@@ -1,4 +1,3 @@
|
||||
|
||||
#
|
||||
# Input variables:
|
||||
# - `OPENCOLLADA_INCLUDE_DIR`
|
||||
@@ -41,23 +40,37 @@ if(NOT OpenCOLLADA_DIR)
|
||||
|
||||
if("${OPENCOLLADA_LIBRARY_DIR}" STREQUAL "")
|
||||
message(STATUS "No OpenCOLLADA library directory specified")
|
||||
find_library(OPENCOLLADA_FRAMEWORK_LIB NAMES OpenCOLLADAFramework
|
||||
PATHS /usr/lib64/opencollada /usr/lib/opencollada /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib)
|
||||
find_library(
|
||||
OPENCOLLADA_FRAMEWORK_LIB
|
||||
NAMES OpenCOLLADAFramework
|
||||
PATHS /usr/lib64/opencollada /usr/lib/opencollada /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib
|
||||
)
|
||||
get_filename_component(OPENCOLLADA_LIBRARY_DIR ${OPENCOLLADA_FRAMEWORK_LIB} PATH)
|
||||
endif()
|
||||
|
||||
find_library(OpenCOLLADAFramework NAMES OpenCOLLADAFramework OpenCOLLADAFrameworkd PATHS ${OPENCOLLADA_LIBRARY_DIR} NO_DEFAULT_PATH)
|
||||
find_library(
|
||||
OpenCOLLADAFramework
|
||||
NAMES OpenCOLLADAFramework OpenCOLLADAFrameworkd
|
||||
PATHS ${OPENCOLLADA_LIBRARY_DIR}
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
if(OpenCOLLADAFramework)
|
||||
message(STATUS "OpenCOLLADA library files found")
|
||||
else()
|
||||
message(FATAL_ERROR "COLLADA_SUPPORT enabled, but unable to find OpenCOLLADA libraries. "
|
||||
"Disable COLLADA_SUPPORT or fix OpenCOLLADA paths to proceed.")
|
||||
message(
|
||||
FATAL_ERROR
|
||||
"COLLADA_SUPPORT enabled, but unable to find OpenCOLLADA libraries. "
|
||||
"Disable COLLADA_SUPPORT or fix OpenCOLLADA paths to proceed."
|
||||
)
|
||||
endif()
|
||||
|
||||
set(OPENCOLLADA_LIBRARY_DIR "${OPENCOLLADA_LIBRARY_DIR}" CACHE FILEPATH "OpenCOLLADA library files")
|
||||
|
||||
set(OPENCOLLADA_INCLUDE_DIRS "${OPENCOLLADA_INCLUDE_DIR}/COLLADABaseUtils" "${OPENCOLLADA_INCLUDE_DIR}/COLLADAStreamWriter")
|
||||
set(OPENCOLLADA_INCLUDE_DIRS
|
||||
"${OPENCOLLADA_INCLUDE_DIR}/COLLADABaseUtils"
|
||||
"${OPENCOLLADA_INCLUDE_DIR}/COLLADAStreamWriter"
|
||||
)
|
||||
|
||||
find_file(COLLADASWStreamWriter_h "COLLADASWStreamWriter.h" ${OPENCOLLADA_INCLUDE_DIRS})
|
||||
|
||||
@@ -66,8 +79,15 @@ if(NOT OpenCOLLADA_DIR)
|
||||
set(OPENCOLLADA_FOUND TRUE)
|
||||
|
||||
set(OPENCOLLADA_LIBRARY_NAMES
|
||||
GeneratedSaxParser MathMLSolver OpenCOLLADABaseUtils OpenCOLLADAFramework OpenCOLLADASaxFrameworkLoader
|
||||
OpenCOLLADAStreamWriter UTF buffer ftoa
|
||||
GeneratedSaxParser
|
||||
MathMLSolver
|
||||
OpenCOLLADABaseUtils
|
||||
OpenCOLLADAFramework
|
||||
OpenCOLLADASaxFrameworkLoader
|
||||
OpenCOLLADAStreamWriter
|
||||
UTF
|
||||
buffer
|
||||
ftoa
|
||||
)
|
||||
|
||||
# Use the found OpenCOLLADAFramework as a template for all other OpenCOLLADA libraries
|
||||
@@ -100,16 +120,22 @@ if(NOT OpenCOLLADA_DIR)
|
||||
list(APPEND OPENCOLLADA_LIBRARIES "${pcre_library}")
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR "COLLADA_SUPPORT enabled, but unable to find PCRE. "
|
||||
"Disable COLLADA_SUPPORT or fix PCRE_LIBRARY_DIR path to proceed.")
|
||||
message(
|
||||
FATAL_ERROR
|
||||
"COLLADA_SUPPORT enabled, but unable to find PCRE. "
|
||||
"Disable COLLADA_SUPPORT or fix PCRE_LIBRARY_DIR path to proceed."
|
||||
)
|
||||
endif()
|
||||
|
||||
if(MSVC)
|
||||
add_debug_variants(OPENCOLLADA_LIBRARIES "${OPENCOLLADA_LIBRARIES}" d)
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR "COLLADA_SUPPORT enabled, but unable to find OpenCOLLADA headers. "
|
||||
"Disable COLLADA_SUPPORT or fix OpenCOLLADA paths to proceed.")
|
||||
message(
|
||||
FATAL_ERROR
|
||||
"COLLADA_SUPPORT enabled, but unable to find OpenCOLLADA headers. "
|
||||
"Disable COLLADA_SUPPORT or fix OpenCOLLADA paths to proceed."
|
||||
)
|
||||
endif()
|
||||
endif(NOT OpenCOLLADA_DIR)
|
||||
|
||||
|
||||
+3
-11
@@ -19,20 +19,14 @@ if((NOT PROJ_INCLUDE_DIR AND NOT PROJ_LIBRARIES))
|
||||
find_package(PROJ QUIET CONFIG)
|
||||
|
||||
if(NOT PROJ_FOUND)
|
||||
find_path(PROJ_INCLUDE_DIR proj.h
|
||||
PATHS
|
||||
/usr/include/proj
|
||||
REQUIRED
|
||||
)
|
||||
find_path(PROJ_INCLUDE_DIR proj.h PATHS /usr/include/proj REQUIRED)
|
||||
if(PROJ_INCLUDE_DIR)
|
||||
message(STATUS "Found PROJ include files in: ${PROJ_INCLUDE_DIR}")
|
||||
else()
|
||||
message(FATAL_ERROR "Unable to find PROJ include directory, specify PROJ_INCLUDE_DIR manually.")
|
||||
endif()
|
||||
|
||||
find_library(PROJ_LIBRARY
|
||||
NAMES proj
|
||||
PATHS /usr/lib/x86_64-linux-gnu)
|
||||
find_library(PROJ_LIBRARY NAMES proj PATHS /usr/lib/x86_64-linux-gnu)
|
||||
if(PROJ_LIBRARY)
|
||||
message(STATUS "PROJ libraries ${PROJ_LIBRARY} found in: ${PROJ_LIBRARY_DIR}")
|
||||
set(PROJ_LIBRARIES ${PROJ_LIBRARY})
|
||||
@@ -46,9 +40,7 @@ if((NOT PROJ_INCLUDE_DIR AND NOT PROJ_LIBRARIES))
|
||||
target_link_directories(PROJ::proj INTERFACE "${PROJ_LIBRARY}")
|
||||
endif()
|
||||
else()
|
||||
find_library(PROJ_LIBRARY
|
||||
NAMES proj
|
||||
PATHS ${PROJ_LIBRARY_DIR})
|
||||
find_library(PROJ_LIBRARY NAMES proj PATHS ${PROJ_LIBRARY_DIR})
|
||||
if(PROJ_LIBRARY)
|
||||
message(STATUS "PROJ libraries ${PROJ_LIBRARY} found in: ${PROJ_LIBRARY_DIR}")
|
||||
set(PROJ_LIBRARIES ${PROJ_LIBRARY})
|
||||
|
||||
+27
-50
@@ -16,7 +16,6 @@ UNIFY_ENVVARS_AND_CACHE(USD_LIBRARY_DIR)
|
||||
UNIFY_ENVVARS_AND_CACHE(TBB_INCLUDE_DIR)
|
||||
UNIFY_ENVVARS_AND_CACHE(TBB_LIBRARY_DIR)
|
||||
|
||||
|
||||
if(NOT USD_LIBRARY_DIR AND NOT USD_INCLUDE_DIR)
|
||||
find_package(pxr CONFIG)
|
||||
if(pxr_FOUND)
|
||||
@@ -29,12 +28,7 @@ if(NOT USD_LIBRARY_DIR AND NOT USD_INCLUDE_DIR)
|
||||
endif()
|
||||
|
||||
if(NOT USD_INCLUDE_DIR)
|
||||
find_path(USD_INCLUDE_DIR pxr.h
|
||||
PATHS
|
||||
/usr/include/pxr
|
||||
/usr/local/include/pxr
|
||||
REQUIRED
|
||||
)
|
||||
find_path(USD_INCLUDE_DIR pxr.h PATHS /usr/include/pxr /usr/local/include/pxr REQUIRED)
|
||||
if(USD_INCLUDE_DIR)
|
||||
message(STATUS "Found USD include files in: ${USD_INCLUDE_DIR}")
|
||||
else()
|
||||
@@ -46,30 +40,28 @@ else()
|
||||
endif()
|
||||
|
||||
set(USD_LIBRARIES
|
||||
usd_usd
|
||||
usd_usdGeom
|
||||
usd_usdShade
|
||||
usd_usdLux
|
||||
usd_vt
|
||||
usd_sdf
|
||||
usd_tf
|
||||
usd_gf
|
||||
usd_kind
|
||||
usd_pcp
|
||||
usd_arch
|
||||
usd_ar
|
||||
usd_plug
|
||||
usd_js
|
||||
usd_sdr
|
||||
usd_work
|
||||
usd_trace
|
||||
usd_ndr
|
||||
usd_ts
|
||||
)
|
||||
usd_usd
|
||||
usd_usdGeom
|
||||
usd_usdShade
|
||||
usd_usdLux
|
||||
usd_vt
|
||||
usd_sdf
|
||||
usd_tf
|
||||
usd_gf
|
||||
usd_kind
|
||||
usd_pcp
|
||||
usd_arch
|
||||
usd_ar
|
||||
usd_plug
|
||||
usd_js
|
||||
usd_sdr
|
||||
usd_work
|
||||
usd_trace
|
||||
usd_ndr
|
||||
usd_ts
|
||||
)
|
||||
|
||||
find_library(USD_LIBRARY
|
||||
NAMES ${USD_LIBRARIES}
|
||||
PATHS ${USD_LIBRARY_DIR})
|
||||
find_library(USD_LIBRARY NAMES ${USD_LIBRARIES} PATHS ${USD_LIBRARY_DIR})
|
||||
if(USD_LIBRARY)
|
||||
message(STATUS "USD libraries ${USD_LIBRARIES} found in: ${USD_LIBRARY_DIR}")
|
||||
link_directories(${USD_LIBRARY_DIR})
|
||||
@@ -78,32 +70,17 @@ else()
|
||||
endif()
|
||||
|
||||
add_library(pxr::USD INTERFACE IMPORTED)
|
||||
target_link_directories(pxr::USD
|
||||
INTERFACE
|
||||
${USD_LIBRARY_DIR} ${TBB_LIBRARY_DIR}
|
||||
)
|
||||
target_include_directories(pxr::USD
|
||||
INTERFACE
|
||||
${USD_INCLUDE_DIR} ${TBB_INCLUDE_DIR}
|
||||
)
|
||||
target_link_directories(pxr::USD INTERFACE ${USD_LIBRARY_DIR} ${TBB_LIBRARY_DIR})
|
||||
target_include_directories(pxr::USD INTERFACE ${USD_INCLUDE_DIR} ${TBB_INCLUDE_DIR})
|
||||
|
||||
# We don't link TBB libraries - on Windows they're provided using `pragma(lib)`.
|
||||
# On Unix there's no `pragma(lib)`, so in theory it will break.
|
||||
target_link_libraries(pxr::USD
|
||||
INTERFACE
|
||||
${USD_LIBRARIES}
|
||||
)
|
||||
target_link_libraries(pxr::USD INTERFACE ${USD_LIBRARIES})
|
||||
|
||||
if(MSVC)
|
||||
target_link_libraries(pxr::USD
|
||||
INTERFACE
|
||||
debug DbgHelp.lib
|
||||
)
|
||||
target_link_libraries(pxr::USD INTERFACE debug DbgHelp.lib)
|
||||
endif()
|
||||
|
||||
target_compile_definitions(pxr::USD
|
||||
INTERFACE
|
||||
PXR_STATIC WITH_USD
|
||||
)
|
||||
target_compile_definitions(pxr::USD INTERFACE PXR_STATIC WITH_USD)
|
||||
|
||||
set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_USD)
|
||||
|
||||
@@ -6,30 +6,17 @@ set(CONFIG_PACKAGE_INPUT "${PROJECT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in")
|
||||
set(CONFIG_PACKAGE_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake")
|
||||
|
||||
# Allow linking against build directory.
|
||||
export(
|
||||
EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}
|
||||
FILE ${CONFIG_TARGETS_FILENAME}
|
||||
NAMESPACE ${CONFIG_NAMESPACE}::
|
||||
)
|
||||
|
||||
install(
|
||||
EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}
|
||||
NAMESPACE ${CONFIG_NAMESPACE}::
|
||||
DESTINATION "${CONFIG_PACKAGE_LOCATION}"
|
||||
)
|
||||
export(EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} FILE ${CONFIG_TARGETS_FILENAME} NAMESPACE ${CONFIG_NAMESPACE}::)
|
||||
|
||||
install(EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} NAMESPACE ${CONFIG_NAMESPACE}:: DESTINATION "${CONFIG_PACKAGE_LOCATION}")
|
||||
|
||||
include(CMakePackageConfigHelpers)
|
||||
write_basic_package_version_file(${CONFIG_VERSION_OUTPUT}
|
||||
COMPATIBILITY ExactVersion)
|
||||
write_basic_package_version_file(${CONFIG_VERSION_OUTPUT} COMPATIBILITY ExactVersion)
|
||||
|
||||
configure_package_config_file(${CONFIG_PACKAGE_INPUT}
|
||||
configure_package_config_file(
|
||||
${CONFIG_PACKAGE_INPUT}
|
||||
${CONFIG_PACKAGE_OUTPUT}
|
||||
INSTALL_DESTINATION ${CONFIG_PACKAGE_LOCATION}
|
||||
)
|
||||
|
||||
install(FILES
|
||||
"${CONFIG_PACKAGE_OUTPUT}"
|
||||
"${CONFIG_VERSION_OUTPUT}"
|
||||
DESTINATION ${CONFIG_PACKAGE_LOCATION}
|
||||
)
|
||||
install(FILES "${CONFIG_PACKAGE_OUTPUT}" "${CONFIG_VERSION_OUTPUT}" DESTINATION ${CONFIG_PACKAGE_LOCATION})
|
||||
|
||||
+1
-14
@@ -349,14 +349,13 @@ dependency_tree: "dict[str, tuple[str, ...]]" = {
|
||||
"boost": (),
|
||||
"libxml2": (),
|
||||
"python": (),
|
||||
"occ": ("freetype",),
|
||||
"occ": (),
|
||||
"pcre": (),
|
||||
"pcre2": (),
|
||||
"json": (),
|
||||
"hdf5": (),
|
||||
"cgal": (),
|
||||
"eigen": (),
|
||||
"freetype": (),
|
||||
"rocksdb": ("zstd",),
|
||||
"zstd": (),
|
||||
# 'usd': ('boost', 'oneTBB')
|
||||
@@ -951,17 +950,6 @@ if "swig" in targets:
|
||||
revision=f"v{SWIG_VERSION}",
|
||||
)
|
||||
|
||||
if "freetype" in targets:
|
||||
build_dependency(
|
||||
name=f"freetype",
|
||||
mode="cmake",
|
||||
build_tool_args=[f"-DCMAKE_INSTALL_PREFIX={DEPS_DIR}/install/freetype"],
|
||||
download_url="https://github.com/freetype/freetype",
|
||||
download_name="freetype2",
|
||||
download_tool=download_tool_git,
|
||||
revision="VER-2-14-0",
|
||||
)
|
||||
|
||||
if USE_OCCT and "occ" in targets:
|
||||
patches = []
|
||||
if OCCT_VERSION < "7.4":
|
||||
@@ -996,7 +984,6 @@ if USE_OCCT and "occ" in targets:
|
||||
f"-DUSE_FREETYPE=OFF",
|
||||
f"-DUSE_OPENGL=OFF",
|
||||
f"-DUSE_GLES2=OFF",
|
||||
f"-D3RDPARTY_FREETYPE_DIR={DEPS_DIR}/install/freetype",
|
||||
f"-DCMAKE_POLICY_VERSION_MINIMUM=3.5",
|
||||
*MAC_CROSS_COMPILE_INTEL_ARGS,
|
||||
],
|
||||
|
||||
@@ -1,3 +1,13 @@
|
||||
[project]
|
||||
name = "IfcOpenShell"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"black==25.12",
|
||||
"ruff==0.14.10",
|
||||
"poethepoet",
|
||||
"gersemi==0.24",
|
||||
]
|
||||
|
||||
[tool.black]
|
||||
line-length = 120
|
||||
include = '''
|
||||
@@ -71,3 +81,5 @@ ruff.sequence = ["ruff-main", "ruff-old"]
|
||||
black = "black ."
|
||||
|
||||
format.sequence = ["black", "ruff-main", "ruff-old"]
|
||||
|
||||
cmake-format = "gersemi cmake src --in-place"
|
||||
|
||||
@@ -1062,10 +1062,15 @@ class LoadProject(bpy.types.Operator, IFCFileSelector, ImportHelper):
|
||||
and not self.is_advanced
|
||||
):
|
||||
filepath = self.get_filepath()
|
||||
metadata_path = Path(str(filepath) + ".metadata.blend")
|
||||
suffix = tool.Blender.get_addon_preferences().metadata_blend_file_suffix
|
||||
if str(filepath).lower().endswith(".ifc"):
|
||||
metadata_path = Path(str(filepath)[:-4] + suffix)
|
||||
else:
|
||||
metadata_path = Path(str(filepath) + suffix)
|
||||
if metadata_path.exists() and metadata_path.is_file():
|
||||
try:
|
||||
bpy.ops.bim.load_blend_metadata_and_ifc(filepath=filepath)
|
||||
self.report({"INFO"}, f"Loaded metadata file: {metadata_path.name}")
|
||||
return {"FINISHED"}
|
||||
except Exception as e:
|
||||
self.report({"WARNING"}, f"Failed to load metadata file, using regular load: {e}")
|
||||
@@ -1763,7 +1768,11 @@ class ExportIFC(bpy.types.Operator, ExportHelper):
|
||||
if tool.Blender.get_addon_preferences().save_metadata_blend_file:
|
||||
try:
|
||||
bpy.ops.bim.save_blend_metadata_file()
|
||||
blendmetadata_path = output_file + ".metadata.blend"
|
||||
suffix = tool.Blender.get_addon_preferences().metadata_blend_file_suffix
|
||||
if output_file.lower().endswith(".ifc"):
|
||||
blendmetadata_path = output_file[:-4] + suffix
|
||||
else:
|
||||
blendmetadata_path = output_file + suffix
|
||||
self.report(
|
||||
{"INFO"},
|
||||
f'IFC Project "{os.path.basename(output_file)}" And Metadata File Saved to: {os.path.basename(blendmetadata_path)}',
|
||||
|
||||
@@ -332,10 +332,14 @@ class BIM_PT_project(Panel):
|
||||
row.operator("bim.select_ifc_file", icon="FILE_FOLDER", text="")
|
||||
|
||||
if tool.Blender.get_addon_preferences().save_metadata_blend_file:
|
||||
suffix = tool.Blender.get_addon_preferences().metadata_blend_file_suffix
|
||||
if props.ifc_file.lower().endswith(".ifc"):
|
||||
metadata_filename = os.path.basename(props.ifc_file)[:-4] + suffix
|
||||
else:
|
||||
metadata_filename = os.path.basename(props.ifc_file) + suffix
|
||||
row = self.layout.row(align=True)
|
||||
col = row.column()
|
||||
col.enabled = False
|
||||
metadata_filename = os.path.basename(props.ifc_file) + ".metadata.blend"
|
||||
col.label(text=f"Saving session data to: {metadata_filename}")
|
||||
|
||||
|
||||
|
||||
@@ -260,10 +260,14 @@ class SaveBlendMetadataFile(bpy.types.Operator):
|
||||
self.report({"WARNING"}, "No IFC file path set.")
|
||||
return {"CANCELLED"}
|
||||
|
||||
blendmetadata_path = ifc_file + ".metadata.blend"
|
||||
suffix = tool.Blender.get_addon_preferences().metadata_blend_file_suffix
|
||||
if ifc_file.lower().endswith(".ifc"):
|
||||
blendmetadata_path = ifc_file[:-4] + suffix
|
||||
else:
|
||||
blendmetadata_path = ifc_file + suffix
|
||||
|
||||
# Save a temporary copy of the current blend file
|
||||
temp_path = bpy.path.abspath("//__temp_blendmetadata.blend")
|
||||
ifc_dir = os.path.dirname(ifc_file)
|
||||
temp_path = os.path.join(ifc_dir, "__temp_blendmetadata.blend")
|
||||
bpy.ops.wm.save_as_mainfile(filepath=temp_path, copy=True)
|
||||
|
||||
cleanup_script = f"""
|
||||
@@ -331,12 +335,14 @@ except Exception:
|
||||
bpy.ops.wm.save_as_mainfile(filepath=r'{blendmetadata_path}')
|
||||
"""
|
||||
import tempfile
|
||||
|
||||
with tempfile.NamedTemporaryFile("w", suffix=".py", delete=False) as script_file:
|
||||
script_file.write(cleanup_script)
|
||||
script_path = script_file.name
|
||||
|
||||
blender_exe = bpy.app.binary_path
|
||||
import subprocess
|
||||
|
||||
result = subprocess.run(
|
||||
[blender_exe, temp_path, "--background", "--python", script_path], capture_output=True, text=True
|
||||
)
|
||||
@@ -374,7 +380,11 @@ class LoadBlendMetadataAndIFC(bpy.types.Operator):
|
||||
self.report({"WARNING"}, "No IFC file path set.")
|
||||
return {"CANCELLED"}
|
||||
|
||||
metadata_path = ifc_file + ".metadata.blend"
|
||||
suffix = tool.Blender.get_addon_preferences().metadata_blend_file_suffix
|
||||
if ifc_file.lower().endswith(".ifc"):
|
||||
metadata_path = ifc_file[:-4] + suffix
|
||||
else:
|
||||
metadata_path = ifc_file + suffix
|
||||
# Open the metadata blend file
|
||||
bpy.ops.wm.open_mainfile(filepath=metadata_path)
|
||||
# After loading metadata, clear blend warning (no geometry loaded yet)
|
||||
|
||||
@@ -715,13 +715,18 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences):
|
||||
)
|
||||
|
||||
save_metadata_blend_file: BoolProperty(
|
||||
name="Save non ifc data to .metadata.blend File",
|
||||
description="Save session data (window layout, settings) to a .metadata.blend file alongside the IFC file. This file is automatically loaded when opening the project.",
|
||||
name="Save non ifc data to metadata blend File",
|
||||
description="Save session data (window layout, settings) to a metadata blend file alongside the IFC file. This file is automatically loaded when opening the project.",
|
||||
default=False,
|
||||
)
|
||||
metadata_blend_file_suffix: StringProperty(
|
||||
name="Metadata File Suffix",
|
||||
description="Custom suffix for the metadata blend file. Will be appended to the filename (without .ifc).",
|
||||
default=".ifc.metadata.blend",
|
||||
)
|
||||
user_ui_customization: BoolProperty(
|
||||
name="User UI Customization",
|
||||
description="Enable user interface customization features (hide/show tabs and panels, bookmark panels) and save the session settings as part of the .metadata.blend file",
|
||||
description="Enable user interface customization features (hide/show tabs and panels, bookmark panels) and save the session settings as part of the metadata blend file",
|
||||
default=False,
|
||||
)
|
||||
|
||||
@@ -958,6 +963,9 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences):
|
||||
row.operator("bim.open_uri", text="", icon="HELP").uri = "https://community.osarch.org/discussion/comment/27030"
|
||||
layout.prop(self, "save_metadata_blend_file")
|
||||
if self.save_metadata_blend_file:
|
||||
row = layout.row()
|
||||
row.separator()
|
||||
row.prop(self, "metadata_blend_file_suffix")
|
||||
row = layout.row()
|
||||
row.separator()
|
||||
row.prop(self, "user_ui_customization")
|
||||
@@ -1633,6 +1641,8 @@ class BIM_PT_tab_representations(Panel):
|
||||
def poll(cls, context):
|
||||
if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context):
|
||||
return False
|
||||
if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get():
|
||||
return True
|
||||
return tool.Blender.is_tab(context, "BOOKMARK")
|
||||
|
||||
def draw(self, context):
|
||||
@@ -1675,6 +1685,8 @@ class BIM_PT_tab_parametric_geometry(Panel):
|
||||
def poll(cls, context):
|
||||
if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context):
|
||||
return False
|
||||
if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get():
|
||||
return True
|
||||
return tool.Blender.is_tab(context, "BOOKMARK")
|
||||
|
||||
def draw(self, context):
|
||||
@@ -1694,6 +1706,8 @@ class BIM_PT_tab_object_materials(Panel):
|
||||
def poll(cls, context):
|
||||
if not should_show_panel(cls.bl_idname, cls.bim_tab_name, context):
|
||||
return False
|
||||
if tool.Blender.is_tab(context, cls.bim_tab_name) and tool.Ifc.get():
|
||||
return True
|
||||
return tool.Blender.is_tab(context, "BOOKMARK")
|
||||
|
||||
def draw(self, context):
|
||||
|
||||
@@ -488,28 +488,28 @@ def sync_references(
|
||||
|
||||
for element in potential_reference_elements:
|
||||
# Skip spatial elements - their IFC placement is the source of truth
|
||||
if element.is_a("IfcSpatialElement"):
|
||||
if element.is_a("IfcSpatialElement"):
|
||||
continue
|
||||
|
||||
|
||||
# Skip grids - their IFC placement is the source of truth
|
||||
if element.is_a("IfcGrid") or element.is_a("IfcGridAxis"):
|
||||
continue
|
||||
|
||||
|
||||
if (obj := ifc.get_object(element)) and ifc.is_moved(obj):
|
||||
drawing_tool.sync_object_placement(obj)
|
||||
|
||||
for element in drawing_tool.get_group_elements(group):
|
||||
if not drawing_tool.is_auto_annotation(element):
|
||||
continue
|
||||
|
||||
|
||||
# Skip spatial elements - should never sync their placement
|
||||
if element.is_a("IfcSpatialElement"):
|
||||
continue
|
||||
|
||||
|
||||
# Skip grids
|
||||
if element.is_a("IfcGrid") or element.is_a("IfcGridAxis"):
|
||||
continue
|
||||
|
||||
continue
|
||||
|
||||
if (obj := ifc.get_object(element)) and ifc.is_moved(obj):
|
||||
drawing_tool.sync_object_placement(obj)
|
||||
if not (reference_element := drawing_tool.get_assigned_product(element)):
|
||||
|
||||
@@ -387,6 +387,12 @@ class Blender(bonsai.core.tool.Blender):
|
||||
@classmethod
|
||||
def copy_node_graph(cls, material_to: bpy.types.Material, material_from: bpy.types.Material) -> None:
|
||||
temp_override = cls.get_shader_editor_context()
|
||||
if (
|
||||
not temp_override
|
||||
or any(k not in temp_override for k in ("area", "space", "screen"))
|
||||
or temp_override.get("window") is None
|
||||
):
|
||||
return
|
||||
shader_editor = temp_override["space"]
|
||||
|
||||
# remove all nodes from the current material
|
||||
|
||||
@@ -52,7 +52,7 @@ if(SCHEMA_VERSIONS MATCHES "2x3")
|
||||
add_executable(IfcAdvancedHouse IfcAdvancedHouse.cpp)
|
||||
add_library(IfcHouseInterface INTERFACE)
|
||||
|
||||
if (STANDALONE_PROJECT)
|
||||
if(STANDALONE_PROJECT)
|
||||
target_link_libraries(IfcHouseInterface INTERFACE IfcOpenShell::IfcParse IfcOpenShell::geometry_serializer)
|
||||
else()
|
||||
target_link_libraries(IfcHouseInterface INTERFACE IfcParse geometry_serializer)
|
||||
|
||||
@@ -9,13 +9,18 @@ endif()
|
||||
set(IFCCONVERT_FILES ${IFCCONVERT_CPP_FILES} ${IFCCONVERT_H_FILES})
|
||||
add_executable(IfcConvert ${IFCCONVERT_FILES})
|
||||
|
||||
target_link_libraries(IfcConvert
|
||||
target_link_libraries(
|
||||
IfcConvert
|
||||
PRIVATE
|
||||
IfcGeom IfcParse Serializers
|
||||
${OpenCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${HDF5_LIBRARIES} ${USD_LIBRARIES}
|
||||
${CGAL_LIBRARIES} ${GLTF_LIBRARIES}
|
||||
IfcGeom
|
||||
IfcParse
|
||||
Serializers
|
||||
${OpenCASCADE_LIBRARIES}
|
||||
${Boost_LIBRARIES}
|
||||
${HDF5_LIBRARIES}
|
||||
${USD_LIBRARIES}
|
||||
${CGAL_LIBRARIES}
|
||||
${GLTF_LIBRARIES}
|
||||
)
|
||||
|
||||
install(TARGETS IfcConvert
|
||||
EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}
|
||||
)
|
||||
install(TARGETS IfcConvert EXPORT ${IFCOPENSHELL_EXPORT_TARGETS})
|
||||
|
||||
@@ -14,12 +14,13 @@ file(GLOB SCHEMA_AGNOSTIC_CPP_FILES *.cpp)
|
||||
set(SCHEMA_AGNOSTIC_FILES ${SCHEMA_AGNOSTIC_H_FILES} ${SCHEMA_AGNOSTIC_CPP_FILES})
|
||||
|
||||
add_library(IfcGeom ${SCHEMA_AGNOSTIC_FILES})
|
||||
set_target_properties(IfcGeom
|
||||
set_target_properties(
|
||||
IfcGeom
|
||||
PROPERTIES
|
||||
COMPILE_FLAGS -DIFC_GEOM_EXPORTS
|
||||
VERSION "${PROJECT_VERSION}"
|
||||
SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}"
|
||||
PUBLIC_HEADER "${SCHEMA_AGNOSTIC_H_FILES}"
|
||||
COMPILE_FLAGS -DIFC_GEOM_EXPORTS
|
||||
VERSION "${PROJECT_VERSION}"
|
||||
SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}"
|
||||
PUBLIC_HEADER "${SCHEMA_AGNOSTIC_H_FILES}"
|
||||
)
|
||||
|
||||
if(UNIX)
|
||||
@@ -28,16 +29,20 @@ endif()
|
||||
|
||||
find_package(Eigen3 REQUIRED)
|
||||
|
||||
target_link_libraries(IfcGeom
|
||||
${kernel_libraries} ${mapping_libraries}
|
||||
${CMAKE_THREAD_LIBS_INIT} "Eigen3::Eigen"
|
||||
target_link_libraries(
|
||||
IfcGeom
|
||||
${kernel_libraries}
|
||||
${mapping_libraries}
|
||||
${CMAKE_THREAD_LIBS_INIT}
|
||||
"Eigen3::Eigen"
|
||||
${CGAL_LIBRARIES}
|
||||
)
|
||||
if(NOT WASM_BUILD)
|
||||
target_link_libraries(IfcGeom IfcParse)
|
||||
endif()
|
||||
|
||||
install(TARGETS IfcGeom
|
||||
install(
|
||||
TARGETS IfcGeom
|
||||
EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}
|
||||
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ifcgeom"
|
||||
)
|
||||
|
||||
@@ -3,15 +3,16 @@ add_subdirectory(schema)
|
||||
add_library(geometry_serializer STATIC Serialization.cpp)
|
||||
file(GLOB IFCGEOM_SERIALIZATION_H_FILE *.h)
|
||||
|
||||
set_target_properties(geometry_serializer PROPERTIES
|
||||
COMPILE_FLAGS "-DIFC_GEOMSERIALIZATION_EXPORTS"
|
||||
PUBLIC_HEADER "${IFCGEOM_SERIALIZATION_H_FILE}"
|
||||
set_target_properties(
|
||||
geometry_serializer
|
||||
PROPERTIES COMPILE_FLAGS "-DIFC_GEOMSERIALIZATION_EXPORTS" PUBLIC_HEADER "${IFCGEOM_SERIALIZATION_H_FILE}"
|
||||
)
|
||||
target_link_libraries(geometry_serializer ${geometry_serializer_libraries} IfcParse)
|
||||
set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} "geometry_serializer" ${geometry_serializer_libraries})
|
||||
set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} PARENT_SCOPE)
|
||||
|
||||
install(TARGETS geometry_serializer ${geometry_serializer_libraries}
|
||||
install(
|
||||
TARGETS geometry_serializer ${geometry_serializer_libraries}
|
||||
EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}
|
||||
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ifcgeom/Serialization"
|
||||
)
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
foreach(schema ${SCHEMA_VERSIONS})
|
||||
add_library(geometry_serializer_ifc${schema} STATIC Serialization.cpp)
|
||||
target_link_libraries(geometry_serializer_ifc${schema} ${OpenCASCADE_LIBRARIES})
|
||||
set_target_properties(geometry_serializer_ifc${schema} PROPERTIES COMPILE_FLAGS "-DIFC_GEOMSERIALIZATION_EXPORTS -DIfcSchema=Ifc${schema}")
|
||||
set_target_properties(
|
||||
geometry_serializer_ifc${schema}
|
||||
PROPERTIES COMPILE_FLAGS "-DIFC_GEOMSERIALIZATION_EXPORTS -DIfcSchema=Ifc${schema}"
|
||||
)
|
||||
list(APPEND geometry_serializer_libraries geometry_serializer_ifc${schema})
|
||||
endforeach()
|
||||
set(geometry_serializer_libraries ${geometry_serializer_libraries} PARENT_SCOPE)
|
||||
set(geometry_serializer_libraries ${geometry_serializer_libraries} PARENT_SCOPE)
|
||||
|
||||
@@ -9,13 +9,14 @@ foreach(kernel ${GEOMETRY_KERNELS})
|
||||
set(KERNEL_TARGET "geometry_kernel_${kernel}")
|
||||
|
||||
add_library(${KERNEL_TARGET} OBJECT ${IFCGEOM_FILES})
|
||||
set_target_properties(${KERNEL_TARGET} PROPERTIES
|
||||
COMPILE_FLAGS "-DIFC_GEOM_EXPORTS"
|
||||
PUBLIC_HEADER "${IFCGEOM_H_FILES}"
|
||||
set_target_properties(
|
||||
${KERNEL_TARGET}
|
||||
PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS" PUBLIC_HEADER "${IFCGEOM_H_FILES}"
|
||||
)
|
||||
list(APPEND kernel_libraries ${KERNEL_TARGET})
|
||||
target_link_libraries(${KERNEL_TARGET} ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen)
|
||||
install(TARGETS ${KERNEL_TARGET}
|
||||
install(
|
||||
TARGETS ${KERNEL_TARGET}
|
||||
EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}
|
||||
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ifcgeom/kernels/${kernel}"
|
||||
)
|
||||
@@ -27,13 +28,14 @@ foreach(kernel ${GEOMETRY_KERNELS})
|
||||
|
||||
set(KERNEL_TARGET_SIMPLE "${KERNEL_TARGET}_simple")
|
||||
add_library(${KERNEL_TARGET_SIMPLE} OBJECT ${IFCGEOM_FILES})
|
||||
set_target_properties(${KERNEL_TARGET_SIMPLE} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIFOPSH_SIMPLE_KERNEL -DCGAL_HAS_THREADS")
|
||||
set_target_properties(
|
||||
${KERNEL_TARGET_SIMPLE}
|
||||
PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIFOPSH_SIMPLE_KERNEL -DCGAL_HAS_THREADS"
|
||||
)
|
||||
list(APPEND kernel_libraries ${KERNEL_TARGET_SIMPLE})
|
||||
target_link_libraries(${KERNEL_TARGET_SIMPLE} ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen)
|
||||
target_link_libraries(${KERNEL_TARGET_SIMPLE} IFCOPENSHELL_CGAL)
|
||||
install(TARGETS ${KERNEL_TARGET_SIMPLE}
|
||||
EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}
|
||||
)
|
||||
install(TARGETS ${KERNEL_TARGET_SIMPLE} EXPORT ${IFCOPENSHELL_EXPORT_TARGETS})
|
||||
elseif(${kernel} STREQUAL "opencascade")
|
||||
target_link_libraries(${KERNEL_TARGET} ${OpenCASCADE_LIBRARIES})
|
||||
endif()
|
||||
|
||||
@@ -7,13 +7,14 @@ foreach(schema ${SCHEMA_VERSIONS})
|
||||
set(IFCGEOM_FILES ${IFCGEOM_CPP_FILES} ${IFCGEOM_H_FILES} ${IFCGEOM_I_FILES})
|
||||
|
||||
add_library(geometry_mapping_ifc${schema} OBJECT ${IFCGEOM_FILES})
|
||||
set_target_properties(geometry_mapping_ifc${schema} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIfcSchema=Ifc${schema}")
|
||||
target_link_libraries(geometry_mapping_ifc${schema} IfcParse Eigen3::Eigen)
|
||||
set_target_properties(
|
||||
geometry_mapping_ifc${schema}
|
||||
PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIfcSchema=Ifc${schema}"
|
||||
)
|
||||
target_link_libraries(geometry_mapping_ifc${schema} IfcParse Eigen3::Eigen)
|
||||
|
||||
list(APPEND mapping_libraries geometry_mapping_ifc${schema})
|
||||
install(TARGETS geometry_mapping_ifc${schema}
|
||||
EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}
|
||||
)
|
||||
install(TARGETS geometry_mapping_ifc${schema} EXPORT ${IFCOPENSHELL_EXPORT_TARGETS})
|
||||
endforeach()
|
||||
|
||||
set(mapping_libraries ${mapping_libraries} PARENT_SCOPE)
|
||||
|
||||
@@ -5,6 +5,4 @@ set(SOURCE_FILES ${CPP_FILES})
|
||||
add_executable(IfcGeomServer ${SOURCE_FILES})
|
||||
target_link_libraries(IfcGeomServer IfcGeom ${kernel_libraries} ${OpenCASCADE_LIBRARIES})
|
||||
|
||||
install(TARGETS IfcGeomServer
|
||||
EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}
|
||||
)
|
||||
install(TARGETS IfcGeomServer EXPORT ${IFCOPENSHELL_EXPORT_TARGETS})
|
||||
|
||||
+30
-90
@@ -18,20 +18,9 @@
|
||||
################################################################################
|
||||
|
||||
# check for 3ds Max SDK
|
||||
set(valid_max_years 2027 2026 2025 2024 2023 2022 2021 2020 2019 2018 2017)
|
||||
|
||||
# might be dangerous to use tools 143 for all max versions
|
||||
set(max_toolset_versions_143 "2017" "2018" "2019" "2020" "2021" "2022" "2023" "2024" "2025" "2026" "2027" )
|
||||
# set(max_toolset_versions_143 "2025" "2026" "2027" )
|
||||
# set(max_toolset_versions_142 "2022" "2023" "2024" )
|
||||
# set(max_toolset_versions_141 "2020" "2021" )
|
||||
# set(max_toolset_versions_140 "2017" "2018" "2019" )
|
||||
# set(max_toolset_versions_110 "2015" "2016" )
|
||||
# set(max_toolset_versions_100 "2013" "2014" )
|
||||
# set(max_toolset_versions_90 "2010" "2011" "2012" )
|
||||
|
||||
foreach(max_year ${valid_max_years})
|
||||
foreach(max_year RANGE 2014 2030)
|
||||
set(max_sdk "$ENV{ADSK_3DSMAX_SDK_${max_year}}")
|
||||
|
||||
if(NOT "${max_sdk}" STREQUAL "")
|
||||
message(STATUS "Autodesk 3ds Max SDK ${max_year} found at ${max_sdk}")
|
||||
list(APPEND FOUND_MAX_YEARS ${max_year})
|
||||
@@ -40,44 +29,35 @@ foreach(max_year ${valid_max_years})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
message(STATUS)
|
||||
|
||||
if(HAS_MAX)
|
||||
# set depenency include and link directoris outside of MaxSDK loop
|
||||
include_directories(${INCLUDE_DIRECTORIES} ${OCC_INCLUDE_DIR} ${OPENCOLLADA_INCLUDE_DIRS} ${ICU_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} )
|
||||
link_directories(${LINK_DIRECTORIES} ${IfcOpenShell_BINARY_DIR} ${OCC_LIBRARY_DIR} ${OPENCOLLADA_LIBRARY_DIR} ${ICU_LIBRARY_DIR} ${Boost_LIBRARY_DIRS} )
|
||||
|
||||
# Specify individual source files
|
||||
set(MAX_SOURCES
|
||||
IfcMax.h
|
||||
IfcMax.cpp
|
||||
IfcMax.rc
|
||||
resource.h
|
||||
# IfcHelper.h
|
||||
# IfcHelper.cpp
|
||||
# MaxUtils.h
|
||||
# MaxUtils.cpp
|
||||
)
|
||||
|
||||
# build library for each found 3ds Max SDK
|
||||
# build libraray for each found 3ds Max SDK
|
||||
foreach(max_year max_sdk IN ZIP_LISTS FOUND_MAX_YEARS FOUND_MAX_SDKS)
|
||||
message(STATUS "Building IFCMax library for Autodesk 3ds Max SDK ${max_year}")
|
||||
|
||||
# skip 3ds Max versions that do not match the vs toolset
|
||||
if( NOT ${max_year} IN_LIST max_toolset_versions_${MSVC_TOOLSET_VERSION} )
|
||||
continue()
|
||||
endif()
|
||||
include_directories(
|
||||
${INCLUDE_DIRECTORIES}
|
||||
${OPENCOLLADA_INCLUDE_DIRS}
|
||||
${ICU_INCLUDE_DIR}
|
||||
${Boost_INCLUDE_DIRS}
|
||||
${max_sdk}/include
|
||||
)
|
||||
|
||||
message(STATUS "Adding build target: IFCMax for 3ds Max SDK ${max_year}, Tier: ${BUILD_TIER_NAME}")
|
||||
# All recent versions of 3ds Max (2014 and newer) are 64-bit only so assume lib/x64 directory
|
||||
link_directories(
|
||||
${LINK_DIRECTORIES}
|
||||
${IfcOpenShell_BINARY_DIR}
|
||||
${OPENCOLLADA_LIBRARY_DIR}
|
||||
${ICU_LIBRARY_DIR}
|
||||
${Boost_LIBRARY_DIRS}
|
||||
${max_sdk}/lib/x64/Release
|
||||
)
|
||||
|
||||
add_library(IfcMax_${max_year} SHARED ${MAX_SOURCES})
|
||||
|
||||
target_include_directories(IfcMax_${max_year} PRIVATE ${max_sdk}/include)
|
||||
|
||||
# All recent versions of 3ds Max (2014 and newer) are 64-bit only so assume lib/x64 directory
|
||||
target_link_directories(IfcMax_${max_year} PRIVATE ${max_sdk}/lib/x64/Release)
|
||||
add_library(IfcMax_${max_year} SHARED IfcMax.h IfcMax.cpp)
|
||||
|
||||
# TODO: find the minimal subset of 3dsmax libraries to reference
|
||||
target_link_libraries(IfcMax_${max_year} ${IFCOPENSHELL_LIBRARIES}
|
||||
target_link_libraries(
|
||||
IfcMax_${max_year}
|
||||
${IFCOPENSHELL_LIBRARIES}
|
||||
bmm.lib
|
||||
Comctl32.lib
|
||||
core.lib
|
||||
@@ -93,6 +73,8 @@ if(HAS_MAX)
|
||||
maxnet.lib
|
||||
Maxscrpt.lib
|
||||
maxutil.lib
|
||||
MenuMan.lib
|
||||
menus.lib
|
||||
mesh.lib
|
||||
MNMath.lib
|
||||
Paramblk2.lib
|
||||
@@ -101,56 +83,14 @@ if(HAS_MAX)
|
||||
RenderUtil.lib
|
||||
tessint.lib
|
||||
viewfile.lib
|
||||
${OPENCASCADE_LIBRARIES}
|
||||
)
|
||||
|
||||
# Note: libraries build by same major vs toolset versions are binary compatible. so v14x builds can be intermixed
|
||||
# Older Max versions using v110 or older require dependencies being build using the according toolset version ( most likely )
|
||||
if( ${max_year} IN_LIST max_toolset_versions_143 )
|
||||
set_target_properties( IfcMax_${max_year} PROPERTIES VS_PLATFORM_TOOLSET v143)
|
||||
elseif( ${max_year} IN_LIST max_toolset_versions_142 )
|
||||
set_target_properties( IfcMax_${max_year} PROPERTIES VS_PLATFORM_TOOLSET v142)
|
||||
elseif( ${max_year} IN_LIST max_toolset_versions_141 )
|
||||
set_target_properties( IfcMax_${max_year} PROPERTIES VS_PLATFORM_TOOLSET v141)
|
||||
elseif( ${max_year} IN_LIST max_toolset_versions_140 )
|
||||
set_target_properties( IfcMax_${max_year} PROPERTIES VS_PLATFORM_TOOLSET v140)
|
||||
elseif( ${max_year} IN_LIST max_toolset_versions_110 )
|
||||
set_target_properties( IfcMax_${max_year} PROPERTIES VS_PLATFORM_TOOLSET v110)
|
||||
elseif( ${max_year} IN_LIST max_toolset_versions_100 )
|
||||
set_target_properties( IfcMax_${max_year} PROPERTIES VS_PLATFORM_TOOLSET v100)
|
||||
elseif( ${max_year} IN_LIST max_toolset_versions_90 )
|
||||
set_target_properties( IfcMax_${max_year} PROPERTIES VS_PLATFORM_TOOLSET v90)
|
||||
endif()
|
||||
zlibdll.lib
|
||||
${OpenCASCADE_LIBRARIES}
|
||||
)
|
||||
|
||||
# prevent minmax macro clashes occuring with ifcOpenShell v0.8
|
||||
target_compile_definitions(IfcMax_${max_year} PRIVATE NOMINMAX)
|
||||
|
||||
# fix 3ds Max 2020 SDK's "/permissive-" flag incompatibility / disables C++ language conformance mode
|
||||
if( ${max_year} EQUAL 2020 )
|
||||
set_source_files_properties( "IfcMax.cpp" PROPERTIES COMPILE_FLAGS "/permissive")
|
||||
endif()
|
||||
|
||||
# C++17 required for 3ds Max SDK 2025 and higher
|
||||
if( ${max_year} GREATER_EQUAL 2025 )
|
||||
set_target_properties(IfcMax_${max_year} PROPERTIES CXX_STANDARD 17)
|
||||
endif()
|
||||
|
||||
set_target_properties(IfcMax_${max_year} PROPERTIES SUFFIX ".dli")
|
||||
|
||||
if(BUILD_TIER_NAME)
|
||||
target_compile_definitions(IfcMax_${max_year} PRIVATE BUILD_${BUILD_TIER_NAME}_TIER)
|
||||
|
||||
string(TOLOWER "${BUILD_TIER_NAME}" BUILD_TIER_lower)
|
||||
if(BUILD_TIER_lower STREQUAL "free")
|
||||
set_target_properties(IfcMax_${max_year} PROPERTIES OUTPUT_NAME "IfcMax_Free_${max_year}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
install(TARGETS IfcMax_${max_year} RUNTIME DESTINATION ${BINDIR})
|
||||
|
||||
install(TARGETS IfcMax_${max_year})
|
||||
endforeach()
|
||||
message(STATUS)
|
||||
else()
|
||||
message(STATUS "Autodesk 3ds Max SDK not found, is required to build IFCMax.")
|
||||
endif()
|
||||
|
||||
|
||||
@@ -738,7 +738,7 @@ class AttributeGetattrTransformer(ast.NodeTransformer):
|
||||
while n := getattr(n, "parent", 0):
|
||||
parents.append(n)
|
||||
|
||||
custom_funcs = "is_entity", "usedin", "express_len", "express_getitem", "typeof"
|
||||
custom_funcs = "is_entity", "usedin", "express_len", "express_getitem", "typeof", "express_getattr"
|
||||
function_defs = [p.name for p in parents if isinstance(p, ast.FunctionDef)]
|
||||
if any(fn in function_defs for fn in custom_funcs):
|
||||
return node
|
||||
@@ -755,7 +755,7 @@ class AttributeGetattrTransformer(ast.NodeTransformer):
|
||||
# Replace the Attribute node with a call to the built-in `getattr` function
|
||||
return ast.copy_location(
|
||||
ast.Call(
|
||||
func=ast.Name(id="getattr", ctx=ast.Load()),
|
||||
func=ast.Name(id="express_getattr", ctx=ast.Load()),
|
||||
args=[
|
||||
new_value,
|
||||
ast.Str(s=node.attr),
|
||||
@@ -772,7 +772,7 @@ class AttributeGetattrTransformer(ast.NodeTransformer):
|
||||
while n := getattr(n, "parent", 0):
|
||||
parents.append(n)
|
||||
|
||||
custom_funcs = "is_entity", "usedin", "express_len", "express_getitem", "typeof"
|
||||
custom_funcs = "is_entity", "usedin", "express_len", "express_getitem", "typeof", "express_getattr"
|
||||
function_defs = [p.name for p in parents if isinstance(p, ast.FunctionDef)]
|
||||
if any(fn in function_defs for fn in custom_funcs):
|
||||
return node
|
||||
@@ -937,6 +937,14 @@ def express_getitem(aggr, idx, default):
|
||||
except IndexError as e: return None
|
||||
|
||||
|
||||
def express_getattr(aggr, name, default):
|
||||
v = getattr(aggr, name, default)
|
||||
if v is None:
|
||||
return default
|
||||
else:
|
||||
return v
|
||||
|
||||
|
||||
EXPRESS_ONE_BASED_INDEXING = 1
|
||||
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ from codegen import indent
|
||||
|
||||
|
||||
def reverse_compile(s):
|
||||
return re.sub(
|
||||
return re.sub(r'\bself\b', 'SELF', re.sub(
|
||||
r"\s*\-\s*EXPRESS_ONE_BASED_INDEXING",
|
||||
"",
|
||||
re.sub(
|
||||
@@ -22,11 +22,11 @@ def reverse_compile(s):
|
||||
.replace("len(", "SIZEOF(")
|
||||
.replace("assert ", "")
|
||||
.replace(" is not False", "")
|
||||
.replace("getattr(", "")
|
||||
.replace("express_getattr(", "")
|
||||
.replace("express_getitem(", ""),
|
||||
)[::-1],
|
||||
)[::-1],
|
||||
)
|
||||
))
|
||||
|
||||
|
||||
@dataclass
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Vendored
+10
@@ -0,0 +1,10 @@
|
||||
ISO-10303-21;
|
||||
HEADER;
|
||||
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
|
||||
FILE_NAME('','2025-12-24T14:25:45',(''),(''),'IfcOpenShell 0.8.0','IfcOpenShell 0.8.0','');
|
||||
FILE_SCHEMA(('IFC4X3_ADD2'));
|
||||
ENDSEC;
|
||||
DATA;
|
||||
#1=IFCPROPERTYLISTVALUE('Test',$,(IFCLABEL('test1'),IFCINTEGER(2)),$);
|
||||
ENDSEC;
|
||||
END-ISO-10303-21;
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
ISO-10303-21;
|
||||
HEADER;
|
||||
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
|
||||
FILE_NAME('','2025-12-24T14:25:45',(''),(''),'IfcOpenShell 0.8.0','IfcOpenShell 0.8.0','');
|
||||
FILE_SCHEMA(('IFC4X3_ADD2'));
|
||||
ENDSEC;
|
||||
DATA;
|
||||
#1=IFCPROPERTYLISTVALUE('Test',$,(IFCLABEL('test1'),IFCLABEL('test2')),$);
|
||||
ENDSEC;
|
||||
END-ISO-10303-21;
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
ISO-10303-21;
|
||||
HEADER;
|
||||
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
|
||||
FILE_NAME('','2025-12-24T14:25:45',(''),(''),'IfcOpenShell 0.8.0','IfcOpenShell 0.8.0','');
|
||||
FILE_SCHEMA(('IFC4X3_ADD2'));
|
||||
ENDSEC;
|
||||
DATA;
|
||||
#1=IFCPROPERTYLISTVALUE('Test',$,$,$);
|
||||
ENDSEC;
|
||||
END-ISO-10303-21;
|
||||
+10
-14
@@ -18,26 +18,21 @@ foreach(file ${IFCPARSE_CPP_FILES_ALL})
|
||||
endforeach()
|
||||
|
||||
foreach(schema ${SCHEMA_VERSIONS})
|
||||
list(APPEND IFCPARSE_H_FILES
|
||||
Ifc${schema}.h
|
||||
Ifc${schema}-definitions.h
|
||||
)
|
||||
list(APPEND IFCPARSE_CPP_FILES
|
||||
Ifc${schema}.cpp
|
||||
Ifc${schema}-schema.cpp
|
||||
)
|
||||
list(APPEND IFCPARSE_H_FILES Ifc${schema}.h Ifc${schema}-definitions.h)
|
||||
list(APPEND IFCPARSE_CPP_FILES Ifc${schema}.cpp Ifc${schema}-schema.cpp)
|
||||
endforeach()
|
||||
|
||||
set(IFCPARSE_FILES ${IFCPARSE_CPP_FILES} ${IFCPARSE_H_FILES})
|
||||
|
||||
add_library(IfcParse ${IFCPARSE_FILES})
|
||||
target_compile_definitions(IfcParse PUBLIC ${SCHEMA_DEFINITIONS})
|
||||
set_target_properties(IfcParse
|
||||
set_target_properties(
|
||||
IfcParse
|
||||
PROPERTIES
|
||||
COMPILE_FLAGS -DIFC_PARSE_EXPORTS
|
||||
VERSION "${PROJECT_VERSION}"
|
||||
SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}"
|
||||
PUBLIC_HEADER "${IFCPARSE_H_FILES}"
|
||||
COMPILE_FLAGS -DIFC_PARSE_EXPORTS
|
||||
VERSION "${PROJECT_VERSION}"
|
||||
SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}"
|
||||
PUBLIC_HEADER "${IFCPARSE_H_FILES}"
|
||||
)
|
||||
|
||||
if(IFCXML_SUPPORT)
|
||||
@@ -56,7 +51,8 @@ endif()
|
||||
|
||||
target_link_libraries(IfcParse ${ROCKSDB_LIBRARIES})
|
||||
|
||||
install(TARGETS IfcParse
|
||||
install(
|
||||
TARGETS IfcParse
|
||||
EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}
|
||||
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ifcparse"
|
||||
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
||||
|
||||
+70
-83
@@ -24,27 +24,27 @@ if(POLICY CMP0177) # 3.31
|
||||
cmake_policy(SET CMP0177 OLD)
|
||||
endif()
|
||||
|
||||
FIND_PACKAGE(SWIG)
|
||||
IF(NOT SWIG_FOUND)
|
||||
MESSAGE(
|
||||
find_package(SWIG)
|
||||
if(NOT SWIG_FOUND)
|
||||
message(
|
||||
FATAL_ERROR
|
||||
"BUILD_IFCPYTHON enabled, but unable to find SWIG. Disable BUILD_IFCPYTHON or fix SWIG paths to proceed. "
|
||||
"Likely SWIG_EXECUTABLE is missing (current value - '${SWIG_EXECUTABLE}')."
|
||||
)
|
||||
ENDIF()
|
||||
endif()
|
||||
include(GNUInstallDirs)
|
||||
INCLUDE(${SWIG_USE_FILE})
|
||||
include(${SWIG_USE_FILE})
|
||||
|
||||
IF(NOT "${PYTHON_INCLUDE_DIR}" STREQUAL "")
|
||||
if(NOT "${PYTHON_INCLUDE_DIR}" STREQUAL "")
|
||||
# Hint for FindPython where to find Python_INCLUDE_DIRS.
|
||||
set(Python_INCLUDE_DIR "${PYTHON_INCLUDE_DIR}")
|
||||
MESSAGE(STATUS "Looking for Python header files in: ${Python_INCLUDE_DIR}")
|
||||
ENDIF()
|
||||
IF(NOT "${PYTHON_LIBRARY}" STREQUAL "")
|
||||
message(STATUS "Looking for Python header files in: ${Python_INCLUDE_DIR}")
|
||||
endif()
|
||||
if(NOT "${PYTHON_LIBRARY}" STREQUAL "")
|
||||
# Hint for FindPython where to find Python_LIBRARIES.
|
||||
set(Python_LIBRARY "${PYTHON_LIBRARY}")
|
||||
MESSAGE(STATUS "Looking for Python library file in: ${Python_LIBRARY}")
|
||||
ENDIF()
|
||||
message(STATUS "Looking for Python library file in: ${Python_LIBRARY}")
|
||||
endif()
|
||||
|
||||
# Development.Module = headers on Unix, headers+libraries on Windows.
|
||||
# Required variables:
|
||||
@@ -53,31 +53,29 @@ ENDIF()
|
||||
# Unfortunately all paths must be always provided explicitly, not by prefixing PATH.
|
||||
# Otherwise FindPython will break on newer Python versions (list of supported versions is hardcoded).
|
||||
find_package(Python COMPONENTS Development.Module)
|
||||
IF(NOT Python_Development.Module_FOUND)
|
||||
MESSAGE(FATAL_ERROR "BUILD_IFCPYTHON enabled, but unable to find Python lib or header. Disable BUILD_IFCPYTHON or fix Python paths to proceed.")
|
||||
ENDIF()
|
||||
if(NOT Python_Development.Module_FOUND)
|
||||
message(
|
||||
FATAL_ERROR
|
||||
"BUILD_IFCPYTHON enabled, but unable to find Python lib or header. Disable BUILD_IFCPYTHON or fix Python paths to proceed."
|
||||
)
|
||||
endif()
|
||||
|
||||
# Ensure version is saved here, from wasm libraries,
|
||||
# not from Python interpreter that might be unrelated to pyodide Python version.
|
||||
set(_python_libs_version "${Python_VERSION_MAJOR}${Python_VERSION_MINOR}")
|
||||
INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
SET(CMAKE_SWIG_FLAGS ${SWIG_DEFINES})
|
||||
set(CMAKE_SWIG_FLAGS ${SWIG_DEFINES})
|
||||
|
||||
if (WITH_CGAL)
|
||||
if(WITH_CGAL)
|
||||
set(LIBSVGFILL svgfill)
|
||||
endif()
|
||||
|
||||
SET_SOURCE_FILES_PROPERTIES(IfcPython.i PROPERTIES CPLUSPLUS ON)
|
||||
set_source_files_properties(IfcPython.i PROPERTIES CPLUSPLUS ON)
|
||||
# Rebuild on changes in other .i files.
|
||||
SET_PROPERTY(
|
||||
SOURCE IfcPython.i
|
||||
PROPERTY DEPENDS
|
||||
IfcGeomWrapper.i
|
||||
IfcParseWrapper.i
|
||||
utils/type_conversion.i
|
||||
utils/typemaps_in.i
|
||||
utils/typemaps_out.i
|
||||
set_property(
|
||||
SOURCE IfcPython.i
|
||||
PROPERTY DEPENDS IfcGeomWrapper.i IfcParseWrapper.i utils/type_conversion.i utils/typemaps_in.i utils/typemaps_out.i
|
||||
)
|
||||
|
||||
# On Windows there is '_d' prefix for debug builds - e.g. `_d.cp311-win_amd64.pyd`.
|
||||
@@ -92,20 +90,18 @@ endif()
|
||||
# But debug mode is still might be needed - e.g. Blender's Python is using it, if you're running debug build.
|
||||
if(NOT USE_DEBUG_PYTHON)
|
||||
set(Python_DEBUG_POSTFIX "")
|
||||
add_compile_definitions(SWIG_PYTHON_INTERPRETER_NO_DEBUG)
|
||||
add_compile_definitions(SWIG_PYTHON_INTERPRETER_NO_DEBUG)
|
||||
if(Python_LIBRARY_DEBUG)
|
||||
# If debug libraries were found, then override them with release ones.
|
||||
get_target_property(IMPORTED_IMPLIB Python::Module IMPORTED_IMPLIB_RELEASE)
|
||||
get_target_property(IMPORTED_LOCATION Python::Module IMPORTED_LOCATION_RELEASE)
|
||||
set_target_properties(
|
||||
Python::Module
|
||||
PROPERTIES
|
||||
IMPORTED_IMPLIB_DEBUG "${IMPORTED_IMPLIB}"
|
||||
IMPORTED_LOCATION_DEBUG "${IMPORTED_LOCATION}"
|
||||
PROPERTIES IMPORTED_IMPLIB_DEBUG "${IMPORTED_IMPLIB}" IMPORTED_LOCATION_DEBUG "${IMPORTED_LOCATION}"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
if (CMAKE_VERSION VERSION_GREATER_EQUAL "4.2")
|
||||
if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.2")
|
||||
# `DEBUG_POSTFIX` argument was added in 4.2.
|
||||
swig_add_library(ifcopenshell_wrapper LANGUAGE python SOURCES IfcPython.i DEBUG_POSTFIX "${Python_DEBUG_POSTFIX}")
|
||||
else()
|
||||
@@ -113,15 +109,12 @@ else()
|
||||
# swig py wrapper will try to import `_ifcopenshell_wrapper_d` module and would fail.
|
||||
set(SWIG_MODULE_ifcopenshell_wrapper_EXTRA_FLAGS "-interface" "_ifcopenshell_wrapper")
|
||||
swig_add_library(ifcopenshell_wrapper LANGUAGE python SOURCES IfcPython.i)
|
||||
set_target_properties(
|
||||
ifcopenshell_wrapper PROPERTIES
|
||||
DEBUG_POSTFIX "${Python_DEBUG_POSTFIX}"
|
||||
)
|
||||
set_target_properties(ifcopenshell_wrapper PROPERTIES DEBUG_POSTFIX "${Python_DEBUG_POSTFIX}")
|
||||
endif()
|
||||
|
||||
target_link_libraries(ifcopenshell_wrapper PRIVATE Python::Module)
|
||||
SET_PROPERTY(TARGET ifcopenshell_wrapper PROPERTY SWIG_DEPENDS ${IFCOPENSHELL_LIBRARIES})
|
||||
if (WASM_BUILD)
|
||||
set_property(TARGET ifcopenshell_wrapper PROPERTY SWIG_DEPENDS ${IFCOPENSHELL_LIBRARIES})
|
||||
if(WASM_BUILD)
|
||||
# SIDE_MODULE=1 - add to .so all symbols from linked archives (default used by pyodide).
|
||||
# Since currently libIfcGeom.a seems to be linked twice it results in duplicated symbols and compilation errors.
|
||||
# Possibly in the future we can clean up linked libs and try `=1`.
|
||||
@@ -130,11 +123,7 @@ if (WASM_BUILD)
|
||||
if(CMAKE_GENERATOR MATCHES "Makefile" AND CMAKE_VERSION VERSION_LESS "4.2")
|
||||
# Accomodate bug in cmake makefile generator (fixed in 4.2+).
|
||||
# https://gitlab.kitware.com/cmake/cmake/-/issues/27326
|
||||
string(
|
||||
REPLACE "SIDE_MODULE=1" "SIDE_MODULE=2"
|
||||
CMAKE_MODULE_LINKER_FLAGS
|
||||
"${CMAKE_MODULE_LINKER_FLAGS}"
|
||||
)
|
||||
string(REPLACE "SIDE_MODULE=1" "SIDE_MODULE=2" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}")
|
||||
endif()
|
||||
target_link_options(
|
||||
ifcopenshell_wrapper
|
||||
@@ -142,13 +131,16 @@ if (WASM_BUILD)
|
||||
)
|
||||
endif()
|
||||
if("$ENV{LDFLAGS}" MATCHES ".undefined.suppress")
|
||||
# On osx there is some state in the python dylib. With `-Wl,undefined,suppress` we can ignore the missing symbols at compile time.
|
||||
target_link_libraries(ifcopenshell_wrapper PRIVATE ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${LIBSVGFILL})
|
||||
# On osx there is some state in the python dylib. With `-Wl,undefined,suppress` we can ignore the missing symbols at compile time.
|
||||
target_link_libraries(
|
||||
ifcopenshell_wrapper
|
||||
PRIVATE ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${LIBSVGFILL}
|
||||
)
|
||||
else()
|
||||
target_link_libraries(ifcopenshell_wrapper PRIVATE ${IFCOPENSHELL_LIBRARIES} ${LIBSVGFILL})
|
||||
target_link_libraries(ifcopenshell_wrapper PRIVATE ${IFCOPENSHELL_LIBRARIES} ${LIBSVGFILL})
|
||||
endif()
|
||||
target_link_libraries(ifcopenshell_wrapper PRIVATE ${CGAL_LIBRARIES})
|
||||
if ((NOT WIN32) AND BUILD_SHARED_LIBS)
|
||||
if((NOT WIN32) AND BUILD_SHARED_LIBS)
|
||||
SET_INSTALL_RPATHS(ifcopenshell_wrapper "${IFCDIRS};${OCC_LIBRARY_DIR}")
|
||||
endif()
|
||||
|
||||
@@ -156,10 +148,10 @@ endif()
|
||||
# directory in which the wrapper can be installed.
|
||||
if(NOT ${PYTHON_EXECUTABLE} STREQUAL "")
|
||||
set(Python_EXECUTABLE "${PYTHON_EXECUTABLE}")
|
||||
MESSAGE(STATUS "Looking for Python interpreter in: ${PYTHON_EXECUTABLE}")
|
||||
message(STATUS "Looking for Python interpreter in: ${PYTHON_EXECUTABLE}")
|
||||
endif()
|
||||
FIND_PACKAGE(Python COMPONENTS Interpreter)
|
||||
IF(Python_Interpreter_FOUND OR PYTHON_MODULE_INSTALL_DIR)
|
||||
find_package(Python COMPONENTS Interpreter)
|
||||
if(Python_Interpreter_FOUND OR PYTHON_MODULE_INSTALL_DIR)
|
||||
# Python_SOABI example value is 'cp311-win_amd64'.
|
||||
if(WASM_BUILD)
|
||||
# For WASM we usually don't provide interpreter,
|
||||
@@ -172,48 +164,43 @@ IF(Python_Interpreter_FOUND OR PYTHON_MODULE_INSTALL_DIR)
|
||||
else()
|
||||
set(PYTHON_EXTENSION_SUFFIX ".${Python_SOABI}.so")
|
||||
endif()
|
||||
set_target_properties(
|
||||
ifcopenshell_wrapper PROPERTIES
|
||||
SUFFIX ${PYTHON_EXTENSION_SUFFIX}
|
||||
)
|
||||
if (PYTHON_MODULE_INSTALL_DIR)
|
||||
set(python_package_dir "${PYTHON_MODULE_INSTALL_DIR}")
|
||||
set_target_properties(ifcopenshell_wrapper PROPERTIES SUFFIX ${PYTHON_EXTENSION_SUFFIX})
|
||||
if(PYTHON_MODULE_INSTALL_DIR)
|
||||
set(python_package_dir "${PYTHON_MODULE_INSTALL_DIR}")
|
||||
else()
|
||||
IF (USERSPACE_PYTHON_PREFIX)
|
||||
EXECUTE_PROCESS(
|
||||
if(USERSPACE_PYTHON_PREFIX)
|
||||
execute_process(
|
||||
COMMAND ${PYTHON_EXECUTABLE} -c "import sys; import site; sys.stdout.write(site.USER_SITE)"
|
||||
OUTPUT_VARIABLE python_package_dir
|
||||
)
|
||||
ELSE ()
|
||||
else()
|
||||
set(python_package_dir "${Python_SITEARCH}")
|
||||
ENDIF()
|
||||
if (BUILD_PACKAGE)
|
||||
endif()
|
||||
if(BUILD_PACKAGE)
|
||||
set(python_package_dir ${CMAKE_INSTALL_LIBDIR}/python${PYTHON_VERSION_MAJOR}/dist-packages/)
|
||||
endif()
|
||||
endif()
|
||||
IF("${python_package_dir}" STREQUAL "")
|
||||
MESSAGE(WARNING "Unable to locate Python site-package directory, unable to install the Python wrapper")
|
||||
ELSE()
|
||||
if("${python_package_dir}" STREQUAL "")
|
||||
message(WARNING "Unable to locate Python site-package directory, unable to install the Python wrapper")
|
||||
else()
|
||||
message(STATUS "Python wrapper will be installed to '${python_package_dir}'.")
|
||||
FILE(GLOB_RECURSE sourcefiles
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/../ifcopenshell-python/ifcopenshell/*"
|
||||
)
|
||||
FOREACH(file ${sourcefiles})
|
||||
FILE(RELATIVE_PATH relative "${CMAKE_CURRENT_SOURCE_DIR}/../ifcopenshell-python/ifcopenshell/" "${file}")
|
||||
GET_FILENAME_COMPONENT(dir "${relative}" DIRECTORY)
|
||||
file(GLOB_RECURSE sourcefiles "${CMAKE_CURRENT_SOURCE_DIR}/../ifcopenshell-python/ifcopenshell/*")
|
||||
foreach(file ${sourcefiles})
|
||||
file(RELATIVE_PATH relative "${CMAKE_CURRENT_SOURCE_DIR}/../ifcopenshell-python/ifcopenshell/" "${file}")
|
||||
get_filename_component(dir "${relative}" DIRECTORY)
|
||||
if(NOT IS_DIRECTORY "${file}")
|
||||
INSTALL(FILES "${file}"
|
||||
DESTINATION "${python_package_dir}/ifcopenshell/${dir}")
|
||||
install(FILES "${file}" DESTINATION "${python_package_dir}/ifcopenshell/${dir}")
|
||||
endif()
|
||||
ENDFOREACH()
|
||||
INSTALL(FILES "${CMAKE_BINARY_DIR}/ifcwrap/ifcopenshell_wrapper.py"
|
||||
DESTINATION "${python_package_dir}/ifcopenshell")
|
||||
INSTALL(TARGETS ifcopenshell_wrapper
|
||||
DESTINATION "${python_package_dir}/ifcopenshell")
|
||||
if (MSVC)
|
||||
INSTALL(FILES $<TARGET_PDB_FILE:ifcopenshell_wrapper> DESTINATION bin OPTIONAL)
|
||||
endif()
|
||||
ENDIF()
|
||||
ELSE()
|
||||
MESSAGE(WARNING "No Python interpreter found, unable to install the Python wrapper")
|
||||
ENDIF()
|
||||
endforeach()
|
||||
install(
|
||||
FILES "${CMAKE_BINARY_DIR}/ifcwrap/ifcopenshell_wrapper.py"
|
||||
DESTINATION "${python_package_dir}/ifcopenshell"
|
||||
)
|
||||
install(TARGETS ifcopenshell_wrapper DESTINATION "${python_package_dir}/ifcopenshell")
|
||||
if(MSVC)
|
||||
install(FILES $<TARGET_PDB_FILE:ifcopenshell_wrapper> DESTINATION bin OPTIONAL)
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
message(WARNING "No Python interpreter found, unable to install the Python wrapper")
|
||||
endif()
|
||||
|
||||
+19
-18
@@ -21,7 +21,15 @@ message("Running CMakeLists.txt in /src/qtviewer")
|
||||
|
||||
# Specify the Qt version and components to use
|
||||
set(QT_VERSION 6 CACHE STRING "Qt version")
|
||||
set(QT_COMPONENTS Core Gui OpenGL OpenGLWidgets Widgets CACHE STRING "Qt components")
|
||||
set(QT_COMPONENTS
|
||||
Core
|
||||
Gui
|
||||
OpenGL
|
||||
OpenGLWidgets
|
||||
Widgets
|
||||
CACHE STRING
|
||||
"Qt components"
|
||||
)
|
||||
|
||||
find_package(Qt${QT_VERSION} COMPONENTS ${QT_COMPONENTS} REQUIRED PATHS ${QT_DIR})
|
||||
|
||||
@@ -45,10 +53,7 @@ set(targetName "QtViewer")
|
||||
# Scan for .qrc files and add to build process
|
||||
set(CMAKE_AUTORCC ON)
|
||||
|
||||
set(RESOURCE_FILES
|
||||
resources/qt_resources.qrc
|
||||
resources/qt_res.rc
|
||||
)
|
||||
set(RESOURCE_FILES resources/qt_resources.qrc resources/qt_res.rc)
|
||||
|
||||
# The MACOSX_BUNDLE_ICON_FILE variable is added to the Info.plist
|
||||
# generated by CMake. This variable contains the .icns file name,
|
||||
@@ -57,10 +62,10 @@ set(MACOSX_BUNDLE_ICON_FILE ifcosLogo.icns)
|
||||
|
||||
# The following tells CMake where to find and install the file itself.
|
||||
set(app_icon_macos "resources/ifcosLogo.icns")
|
||||
set_source_files_properties(${app_icon_macos} PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION "Resources")
|
||||
set_source_files_properties(${app_icon_macos} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
|
||||
|
||||
add_executable(${targetName}
|
||||
add_executable(
|
||||
${targetName}
|
||||
MessageLogger.h
|
||||
IfcViewerWidget.h
|
||||
IfcViewerWidget.cpp
|
||||
@@ -73,14 +78,13 @@ add_executable(${targetName}
|
||||
${app_icon_macos}
|
||||
)
|
||||
|
||||
set_target_properties(${targetName} PROPERTIES
|
||||
AUTOMOC On
|
||||
WIN32_EXECUTABLE ON
|
||||
MACOSX_BUNDLE ON
|
||||
RESOURCE "${RESOURCE_FILES}"
|
||||
set_target_properties(
|
||||
${targetName}
|
||||
PROPERTIES AUTOMOC On WIN32_EXECUTABLE ON MACOSX_BUNDLE ON RESOURCE "${RESOURCE_FILES}"
|
||||
)
|
||||
|
||||
target_link_libraries(${targetName}
|
||||
target_link_libraries(
|
||||
${targetName}
|
||||
${IFCOPENSHELL_LIBRARIES}
|
||||
${OpenCASCADE_LIBRARIES}
|
||||
${OPENSCENEGRAPH_LIBRARIES}
|
||||
@@ -91,10 +95,7 @@ target_link_libraries(${targetName}
|
||||
Qt${QT_VERSION}::Widgets
|
||||
)
|
||||
|
||||
target_include_directories(${targetName} PUBLIC
|
||||
${QT_DIR}/include
|
||||
${OPENSCENEGRAPH_INCLUDE_DIRS}
|
||||
)
|
||||
target_include_directories(${targetName} PUBLIC ${QT_DIR}/include ${OPENSCENEGRAPH_INCLUDE_DIRS})
|
||||
|
||||
get_target_property(targetIncludeDirs ${targetName} INCLUDE_DIRECTORIES)
|
||||
message(STATUS "target_include_directories: ${targetIncludeDirs}")
|
||||
|
||||
@@ -5,10 +5,12 @@ file(GLOB SERIALIZERS_CPP_FILES *.cpp)
|
||||
set(SERIALIZERS_FILES ${SERIALIZERS_H_FILES} ${SERIALIZERS_CPP_FILES})
|
||||
|
||||
add_library(Serializers ${SERIALIZERS_FILES})
|
||||
set_target_properties(Serializers PROPERTIES
|
||||
COMPILE_FLAGS "-DSERIALIZERS_EXPORTS"
|
||||
VERSION "${PROJECT_VERSION}"
|
||||
SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}"
|
||||
set_target_properties(
|
||||
Serializers
|
||||
PROPERTIES
|
||||
COMPILE_FLAGS "-DSERIALIZERS_EXPORTS"
|
||||
VERSION "${PROJECT_VERSION}"
|
||||
SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}"
|
||||
)
|
||||
set(SERIALIZER_SCHEMA_LIBRARIES Serializers ${SERIALIZER_SCHEMA_LIBRARIES} PARENT_SCOPE)
|
||||
|
||||
@@ -21,18 +23,21 @@ if(WITH_PROJ)
|
||||
target_link_libraries(Serializers PRIVATE PROJ::proj)
|
||||
endif()
|
||||
|
||||
target_link_libraries(Serializers
|
||||
target_link_libraries(
|
||||
Serializers
|
||||
PRIVATE
|
||||
${SERIALIZER_SCHEMA_LIBRARIES} ${OPENCOLLADA_LIBRARIES} ${USD_LIBRARIES} ${GLTF_LIBRARIES}
|
||||
IfcGeom ${OpenCASCADE_LIBRARIES} ${kernel_libraries} IfcParse
|
||||
${SERIALIZER_SCHEMA_LIBRARIES}
|
||||
${OPENCOLLADA_LIBRARIES}
|
||||
${USD_LIBRARIES}
|
||||
${GLTF_LIBRARIES}
|
||||
IfcGeom
|
||||
${OpenCASCADE_LIBRARIES}
|
||||
${kernel_libraries}
|
||||
IfcParse
|
||||
)
|
||||
|
||||
install(TARGETS Serializers)
|
||||
|
||||
# Can't use `PUBLIC_HEADER` since we need two folders.
|
||||
install(FILES ${SERIALIZERS_H_FILES}
|
||||
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/serializers/"
|
||||
)
|
||||
install(FILES ${SERIALIZERS_S_H_FILES}
|
||||
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/serializers/schema_dependent"
|
||||
)
|
||||
install(FILES ${SERIALIZERS_H_FILES} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/serializers/")
|
||||
install(FILES ${SERIALIZERS_S_H_FILES} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/serializers/schema_dependent")
|
||||
|
||||
@@ -5,12 +5,14 @@ set(SERIALIZERS_S_FILES ${SERIALIZERS_S_H_FILES} ${SERIALIZERS_S_CPP_FILES})
|
||||
foreach(schema ${SCHEMA_VERSIONS})
|
||||
add_library(Serializers_ifc${schema} OBJECT ${SERIALIZERS_S_FILES})
|
||||
set(SERIALIZER_SCHEMA_LIBRARIES ${SERIALIZER_SCHEMA_LIBRARIES} Serializers_ifc${schema})
|
||||
set_target_properties(Serializers_ifc${schema} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIfcSchema=Ifc${schema}")
|
||||
set_target_properties(
|
||||
Serializers_ifc${schema}
|
||||
PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIfcSchema=Ifc${schema}"
|
||||
)
|
||||
target_link_libraries(Serializers_ifc${schema} ${HDF5_LIBRARIES} ${GLTF_LIBRARIES})
|
||||
if(NOT WASM_BUILD)
|
||||
target_link_libraries(Serializers_ifc${schema} IfcGeom ${OpenCASCADE_LIBRARIES})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
|
||||
set(SERIALIZER_SCHEMA_LIBRARIES ${SERIALIZER_SCHEMA_LIBRARIES} PARENT_SCOPE)
|
||||
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
disable_formatting: true
|
||||
+18
-23
@@ -1,20 +1,19 @@
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
project (svgfill)
|
||||
project(svgfill)
|
||||
|
||||
if (POLICY CMP0144) # 3.27
|
||||
if(POLICY CMP0144) # 3.27
|
||||
cmake_policy(SET CMP0144 NEW) # find_package() uses upper-case <PACKAGENAME>_ROOT variables.
|
||||
endif()
|
||||
if(POLICY CMP0167) # 3.30 find_package(Boost) to use BoostConfig instead of FindBoost.
|
||||
cmake_policy(SET CMP0167 OLD)
|
||||
endif()
|
||||
|
||||
|
||||
if(WIN32 AND NOT DEFINED ENV{CONDA_BUILD})
|
||||
set(Boost_USE_STATIC_LIBS ON)
|
||||
set(Boost_USE_MULTITHREADED ON)
|
||||
if (USE_STATIC_MSVC_RUNTIME)
|
||||
set(Boost_USE_STATIC_LIBS ON)
|
||||
set(Boost_USE_MULTITHREADED ON)
|
||||
if(USE_STATIC_MSVC_RUNTIME)
|
||||
set(Boost_USE_STATIC_RUNTIME ON)
|
||||
endif()
|
||||
else()
|
||||
@@ -28,8 +27,8 @@ else()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (MSVC)
|
||||
add_definitions(-bigobj)
|
||||
if(MSVC)
|
||||
add_definitions(-bigobj)
|
||||
endif()
|
||||
|
||||
find_package(Boost)
|
||||
@@ -37,35 +36,31 @@ message(STATUS "Boost include files found in ${Boost_INCLUDE_DIRS}")
|
||||
find_package(LibXml2 REQUIRED)
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
|
||||
include_directories(${Boost_INCLUDE_DIRS}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/svgpp/include
|
||||
)
|
||||
include_directories(${Boost_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/svgpp/include)
|
||||
|
||||
file(GLOB LIB_H_FILES src/*.h)
|
||||
file(GLOB LIB_CPP_FILES src/svgfill.cpp src/arrange_polygons.cpp)
|
||||
set(LIB_SRC_FILES ${LIB_H_FILES} ${LIB_CPP_FILES})
|
||||
add_library(svgfill ${LIB_SRC_FILES})
|
||||
target_link_libraries(svgfill ${Boost_LIBRARIES} ${BCRYPT_LIBRARIES} LibXml2::LibXml2 IFCOPENSHELL_CGAL)
|
||||
set_target_properties(svgfill PROPERTIES
|
||||
PUBLIC_HEADER "${LIB_H_FILES}"
|
||||
)
|
||||
set_target_properties(svgfill PROPERTIES PUBLIC_HEADER "${LIB_H_FILES}")
|
||||
|
||||
add_executable(svgfill_exe src/main.cpp)
|
||||
target_link_libraries(svgfill_exe svgfill)
|
||||
set_property(TARGET svgfill_exe PROPERTY OUTPUT_NAME svgfill)
|
||||
if(WIN32)
|
||||
# both the library and the executable now result in a file with basename svgfill,
|
||||
# on linux the the library is prefixed with lib as libsvgfill.a. Windows does not
|
||||
# have this mechanism, so on windows the linker would be created an import library
|
||||
# for the executable, also named svgfill.lib. This naming conflict results in:
|
||||
# LINK : fatal error LNK1149: output filename matches input filename
|
||||
# This flag tells the linker not to generate an import library and therefore no
|
||||
# conflict occurs.
|
||||
# both the library and the executable now result in a file with basename svgfill,
|
||||
# on linux the the library is prefixed with lib as libsvgfill.a. Windows does not
|
||||
# have this mechanism, so on windows the linker would be created an import library
|
||||
# for the executable, also named svgfill.lib. This naming conflict results in:
|
||||
# LINK : fatal error LNK1149: output filename matches input filename
|
||||
# This flag tells the linker not to generate an import library and therefore no
|
||||
# conflict occurs.
|
||||
target_link_options(svgfill_exe PRIVATE "/NOIMPLIB")
|
||||
endif()
|
||||
|
||||
install(TARGETS svgfill_exe svgfill
|
||||
install(
|
||||
TARGETS svgfill_exe svgfill
|
||||
EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}
|
||||
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/svgfill"
|
||||
)
|
||||
|
||||
+56
-113
@@ -98,7 +98,8 @@ IF NOT DEFINED IFCOS_NUM_BUILD_PROCS set IFCOS_NUM_BUILD_PROCS=%NUMBER_OF_PROCES
|
||||
:: For subroutines
|
||||
REM /clp:ErrorsOnly;WarningsOnly
|
||||
:: Note BUILD_TYPE not passed, Clean e.g. wouldn't delete the installed files.
|
||||
set MSBUILD_CMD=MSBuild.exe /nologo /m:%IFCOS_NUM_BUILD_PROCS%
|
||||
set MSBUILD_MULTIPROC=/m /p:CL_MPCount=%IFCOS_NUM_BUILD_PROCS% /p:UseMultiToolTask=true /p:EnforceProcessCountAcrossBuilds=true
|
||||
set MSBUILD_CMD=MSBuild.exe /nologo %MSBUILD_MULTIPROC%
|
||||
|
||||
echo.
|
||||
|
||||
@@ -281,7 +282,7 @@ call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\proj-9.2.1" ^
|
||||
-DBUILD_SHARED_LIBS=Off ^
|
||||
-DBUILD_TESTING=Off
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\PROJ.sln" %BUILD_CFG%
|
||||
call :BuildCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG%
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG%
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
@@ -378,7 +379,7 @@ call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\%HDF5_INSTALL_NAME%" ^
|
||||
-DHDF5_BUILD_TOOLS=OFF -DHDF5_BUILD_EXAMPLES=OFF -DBUILD_SHARED_LIBS=OFF -DHDF5_BUILD_UTILS=OFF ^
|
||||
-DHDF5_BUILD_CPP_LIB=ON
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\HDF5.sln" %DEBUG_OR_RELEASE%
|
||||
call :BuildCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %DEBUG_OR_RELEASE%
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %DEBUG_OR_RELEASE%
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
@@ -465,7 +466,7 @@ call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\%DEPENDENCY_INSTALL_NAME%"
|
||||
-DLIBXML2_LIBRARIES="" -DLIBXML2_INCLUDE_DIR="" -DPCRE_INCLUDE_DIR="" -DPCRE_LIBRARIES=""
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
REM IF NOT EXIST "%DEPS_DIR%\OpenCOLLADA\%BUILD_DIR%\lib\%DEBUG_OR_RELEASE%\OpenCOLLADASaxFrameworkLoader.lib".
|
||||
call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\OPENCOLLADA.sln" %DEBUG_OR_RELEASE%
|
||||
call :BuildCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %DEBUG_OR_RELEASE%
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %DEBUG_OR_RELEASE%
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
@@ -487,25 +488,6 @@ echo OCC_INSTALL_DIR=%DEPENDENCY_INSTALL_DIR%>>"%~dp0\%BUILD_DEPS_CACHE_PATH%"
|
||||
call :CheckInstallation
|
||||
if %ERRORLEVEL%==200 GOTO %NEXT_DEPENDENCY_LABEL%
|
||||
|
||||
:: OCCT has many dependencies but FreeType is the only mandatory
|
||||
set DEPENDENCY_NAME=FreeType
|
||||
set DEPENDENCY_DIR=%DEPS_DIR%\freetype-2.7.1
|
||||
set FREETYPE_ZIP=VER-2-7-1.zip
|
||||
cd "%DEPS_DIR%"
|
||||
call :DownloadFile https://github.com/freetype/freetype/archive/refs/tags/%FREETYPE_ZIP% "%DEPS_DIR%" %FREETYPE_ZIP%
|
||||
if not %ERRORLEVEL%==0 goto :Error
|
||||
call :ExtractArchive %FREETYPE_ZIP% "%DEPS_DIR%" "%DEPENDENCY_DIR%"
|
||||
if not %ERRORLEVEL%==0 goto :Error
|
||||
if exist "%DEPS_DIR%\freetype-VER-2-7-1" ren "%DEPS_DIR%\freetype-VER-2-7-1" "freetype-2.7.1"
|
||||
cd "%DEPENDENCY_DIR%"
|
||||
:: NOTE FreeType is built as a static library by default
|
||||
call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\freetype"
|
||||
if not %ERRORLEVEL%==0 goto :Error
|
||||
call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\freetype.sln" %BUILD_CFG%
|
||||
if not %ERRORLEVEL%==0 goto :Error
|
||||
call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG%
|
||||
if not %ERRORLEVEL%==0 goto :Error
|
||||
|
||||
set DEPENDENCY_NAME=Open CASCADE %OCCT_VERSION%
|
||||
set DEPENDENCY_DIR=%DEPS_DIR%\occt_git
|
||||
set DEPENDENCY_INSTALL_NAME=%OCCT_DEPENDENCY_INSTALL_NAME%
|
||||
@@ -528,7 +510,7 @@ cd "%DEPENDENCY_DIR%"
|
||||
:: Temporarily explicitly set `CMAKE_DEBUG_POSTFIX` to empty to override it's perviously being set to `d`.
|
||||
:: OCCT don't need it, since it's layout is separating debug and release build by different folders.
|
||||
call :RunCMake -DINSTALL_DIR="%DEPENDENCY_INSTALL_DIR%" -DBUILD_LIBRARY_TYPE="Static" -DCMAKE_DEBUG_POSTFIX="" ^
|
||||
-DBUILD_MODULE_Draw=0 -D3RDPARTY_FREETYPE_DIR="%INSTALL_DIR%\freetype" ^
|
||||
-DBUILD_MODULE_Draw=0 -DUSE_FREETYPE=OFF ^
|
||||
-DBUILD_USE_PCH=ON
|
||||
if not %ERRORLEVEL%==0 goto :Error
|
||||
|
||||
@@ -539,7 +521,7 @@ IF %ARCH_BITS%==32 (
|
||||
)
|
||||
)
|
||||
|
||||
call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\OCCT.sln" %BUILD_CFG%
|
||||
call :BuildCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG%
|
||||
if not %ERRORLEVEL%==0 goto :Error
|
||||
|
||||
:: If `inc` is present in installation folder, then installation takes much longer
|
||||
@@ -626,7 +608,7 @@ call :RunCMake -DCMAKE_INSTALL_PREFIX="%DEPENDENCY_INSTALL_DIR%" ^
|
||||
-DWITH_PCRE=OFF ^
|
||||
-DBISON_EXECUTABLE="%DEPS_DIR%\%WIN_FLEX_BISON%\win_bison.exe"
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\swig.sln" Release
|
||||
call :BuildCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" Release
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" Release
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
@@ -649,7 +631,7 @@ git apply --ignore-whitespace "%~dp0patches\cgal_no_zlib.patch"
|
||||
call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\cgal" ^
|
||||
-DCGAL_HEADER_ONLY=On
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\CGAL.sln" %BUILD_CFG%
|
||||
call :BuildCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG%
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG%
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
@@ -685,7 +667,7 @@ IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
cd "%DEPENDENCY_DIR%"\build\cmake
|
||||
call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\zstd" -DZSTD_BUILD_STATIC=ON -DZSTD_BUILD_SHARED=OFF
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
call :BuildSolution "%DEPENDENCY_DIR%\build\cmake\%BUILD_DIR%\zstd.sln" %BUILD_CFG%
|
||||
call :BuildCMakeProject "%DEPENDENCY_DIR%\build\cmake\%BUILD_DIR%" %BUILD_CFG%
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
call :InstallCMakeProject "%DEPENDENCY_DIR%\build\cmake\%BUILD_DIR%" %BUILD_CFG%
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
@@ -726,7 +708,7 @@ call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\%DEPENDENCY_INSTALL_NAME%"
|
||||
-DPORTABLE=1 ^
|
||||
-DCMAKE_DEBUG_POSTFIX="_d"
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\rocksdb.sln" %BUILD_CFG%
|
||||
call :BuildCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG%
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG%
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
@@ -741,7 +723,7 @@ call :MarkInstallation
|
||||
:: call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\tbb" ^
|
||||
:: -DBUILD_SHARED_LIBS=Off
|
||||
:: IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
:: call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\TBB.sln" %BUILD_CFG%
|
||||
:: call :BuildCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG%
|
||||
:: IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
:: call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG%
|
||||
:: IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
@@ -765,7 +747,7 @@ call :MarkInstallation
|
||||
:: -DPXR_BUILD_TESTS=FALSE ^
|
||||
:: -DBUILD_SHARED_LIBS=Off ^
|
||||
:: IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
:: call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\USD.sln" %BUILD_CFG%
|
||||
:: call :BuildCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG%
|
||||
:: IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
:: call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG%
|
||||
:: IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
@@ -811,76 +793,31 @@ exit %IFCOS_SCRIPT_RET%
|
||||
|
||||
:: DownloadFile - Downloads a file using PowerShell
|
||||
:: Params: %1 url, %2 destinationDir, %3 filename
|
||||
:: Required vars:
|
||||
:: - DEPENDENCY_NAME
|
||||
:DownloadFile
|
||||
mkdir "%2"
|
||||
pushd "%2"
|
||||
if not exist "%~3". (
|
||||
call cecho.cmd 0 13 "Downloading %DEPENDENCY_NAME% into %~2."
|
||||
powershell -Command "[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12; $webClient = new-object System.Net.WebClient; $webClient.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials; $webClient.DownloadFile('%1', '%3')"
|
||||
REM Old wget version in case someone has problem with PowerShell: wget --no-check-certificate %1
|
||||
) else (
|
||||
call cecho.cmd 0 13 "%DEPENDENCY_NAME% already downloaded. Skipping."
|
||||
)
|
||||
set RET=%ERRORLEVEL%
|
||||
set LAST_ACTION=DownloadFile '%DEPENDENCY_NAME%'.
|
||||
popd
|
||||
exit /b %RET%
|
||||
%PWSH_TOOLS% download_file "%DEPENDENCY_NAME%" "%1" "%2" "%3"
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
exit /b 0
|
||||
|
||||
:: ExtractArchive - Extracts an archive file using 7-zip
|
||||
:: Params: %1 filename, %2 destinationDir, %3 dirAfterExtraction
|
||||
:: Required vars:
|
||||
:: - DEPENDENCY_NAME
|
||||
:ExtractArchive
|
||||
if not exist "%~3". (
|
||||
call cecho.cmd 0 13 "Extracting %DEPENDENCY_NAME% into %~2 from %1"
|
||||
7za x %1 -y -o%2 > nul
|
||||
) else (
|
||||
call cecho.cmd 0 13 "%DEPENDENCY_NAME% already extracted into %~3. Skipping."
|
||||
)
|
||||
set RET=%ERRORLEVEL%
|
||||
set LAST_ACTION=ExtractArchive '%DEPENDENCY_NAME%'.
|
||||
exit /b %RET%
|
||||
|
||||
:: GitCloneOrPullRepository - Clones or pulls (if repository already cloned) a Git repository
|
||||
:: Params: %1 gitUrl, %2 destDir
|
||||
:: F.ex. call :GitCloneRepository https://github.com/KhronosGroup/OpenCOLLADA.git "%DEPS_DIR%\OpenCOLLADA\"
|
||||
:GitCloneOrPullRepository
|
||||
if not exist "%~2". (
|
||||
call cecho.cmd 0 13 "Cloning %DEPENDENCY_NAME% into %~2."
|
||||
pushd "%DEPS_DIR%"
|
||||
call git clone %1 %2
|
||||
set RET=!ERRORLEVEL!
|
||||
) else (
|
||||
call cecho.cmd 0 13 "%DEPENDENCY_NAME% already cloned. Pulling latest changes."
|
||||
git reset --hard
|
||||
pushd %2
|
||||
call git pull
|
||||
set RET=0
|
||||
)
|
||||
popd
|
||||
exit /b %RET%
|
||||
%PWSH_TOOLS% extract_file "%DEPENDENCY_NAME%" "%1" "%2" "%3"
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
exit /b 0
|
||||
|
||||
:: GitCloneAndCheckoutRevision - Clones a Git repository and checks out a specific revision or tag
|
||||
:: Params: %1 gitUrl, %2 destDir, %3 revision
|
||||
:: F.ex. call :GitCloneAndCheckoutRevision https://github.com/KhronosGroup/OpenCOLLADA.git "%DEPENDENCY_DIR%" 064a60b65c2c31b94f013820856bc84fb1937cc6
|
||||
:: Required vars:
|
||||
:: - DEPENDENCY_NAME
|
||||
:GitCloneAndCheckoutRevision
|
||||
if not exist "%~2". (
|
||||
call cecho.cmd 0 13 "Cloning %DEPENDENCY_NAME% into %~2."
|
||||
pushd "%DEPS_DIR%"
|
||||
call git clone %1 %2
|
||||
set RET=!ERRORLEVEL!
|
||||
if not "!RET!"=="0" exit /b !RET!
|
||||
popd
|
||||
) else (
|
||||
call cecho.cmd 0 13 "%DEPENDENCY_NAME% already cloned."
|
||||
set RET=0
|
||||
)
|
||||
pushd "%2"
|
||||
call git fetch
|
||||
call cecho.cmd 0 13 "Checking out %DEPENDENCY_NAME% revision %3."
|
||||
call git reset --hard
|
||||
call git checkout %3
|
||||
set RET=%ERRORLEVEL%
|
||||
popd
|
||||
exit /b %RET%
|
||||
%PWSH_TOOLS% git_clone_and_checkout_revision "%DEPENDENCY_NAME%" "%1" "%2" "%3"
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
exit /b 0
|
||||
|
||||
:: RunCMake - Runs CMake for a CMake-based project
|
||||
:: Params: %* cmakeOptions
|
||||
@@ -894,20 +831,36 @@ pushd %BUILD_DIR%
|
||||
:: cache always e.g. when we've had new changes in the repository.
|
||||
IF %BUILD_TYPE%==Rebuild IF EXIST CMakeCache.txt. del CMakeCache.txt
|
||||
|
||||
set VS_TOOLSET_CMAKE_ARG=
|
||||
IF NOT "%VS_TOOLSET_HOST%"=="" (
|
||||
cmake .. -G %GENERATOR% -A %VS_PLATFORM% -T %VS_TOOLSET_HOST% %*
|
||||
) ELSE (
|
||||
cmake .. -G %GENERATOR% -A %VS_PLATFORM% %*
|
||||
set VS_TOOLSET_CMAKE_ARG=-T %VS_TOOLSET_HOST%
|
||||
)
|
||||
|
||||
set COMMAND=cmake .. -G %GENERATOR% -A %VS_PLATFORM% %VS_TOOLSET_CMAKE_ARG% %*
|
||||
echo %COMMAND%
|
||||
%COMMAND%
|
||||
set RET=%ERRORLEVEL%
|
||||
popd
|
||||
exit /b %RET%
|
||||
|
||||
:: TODO add BuildCMakeProject which utilizes cmake --build
|
||||
:: Params: %1 buildDir, %2 configuration
|
||||
:: Required vars:
|
||||
:: - DEPENDENCY_NAME
|
||||
:BuildCMakeProject
|
||||
pushd %1
|
||||
call cecho.cmd 0 13 "Building %DEPENDENCY_NAME%. Please be patient, this will take a while."
|
||||
set COMPILE_WITH_WPO_SETTING=
|
||||
IF NOT %COMPILE_WITH_WPO%==FALSE (
|
||||
set COMPILE_WITH_WPO_SETTING=;WholeProgramOptimization=TRUE
|
||||
)
|
||||
set COMMAND=cmake --build . --config %2 -- %MSBUILD_MULTIPROC%
|
||||
echo %COMMAND%
|
||||
%COMMAND%
|
||||
set RET=%ERRORLEVEL%
|
||||
popd
|
||||
exit /b %RET%
|
||||
|
||||
:: BuildSolution - Builds/Rebuilds/Cleans a solution using MSBuild
|
||||
:: Params: %1 solutioName, %2 configuration
|
||||
:: Params: %1 solutionName, %2 configuration
|
||||
:BuildSolution
|
||||
IF [%~3]==[] (
|
||||
set TARGET=%BUILD_TYPE%
|
||||
@@ -929,23 +882,13 @@ IF NOT %COMPILE_WITH_WPO%==FALSE (
|
||||
%MSBUILD_CMD% %1 /p:configuration=%2;platform=%VS_PLATFORM%%COMPILE_WITH_WPO_SETTING% /t:"%TARGET%"
|
||||
exit /b %ERRORLEVEL%
|
||||
|
||||
:: InstallCMakeProject - Builds the INSTALL project of CMake-based project
|
||||
:: Params: %1 buildDir, %2 == configuration
|
||||
:: NOTE the actual install dir is set during cmake run.
|
||||
:: TODO Utilize cmake --build --target INSTALL
|
||||
:: Params: %1 buildDir, %2 configuration
|
||||
:: Required vars:
|
||||
:: - DEPENDENCY_NAME
|
||||
:InstallCMakeProject
|
||||
pushd %1
|
||||
call cecho.cmd 0 13 "Installing %2 %DEPENDENCY_NAME%. Please be patient, this will take a while."
|
||||
|
||||
:: whole program optimization avoids Visual C++ hanging when compiling 32-bit release OCCT up to version 7.4.0
|
||||
set COMPILE_WITH_WPO_SETTING=
|
||||
IF NOT %COMPILE_WITH_WPO%==FALSE (
|
||||
set COMPILE_WITH_WPO_SETTING=;WholeProgramOptimization=TRUE
|
||||
)
|
||||
%MSBUILD_CMD% INSTALL.%VCPROJ_FILE_EXT% /p:configuration=%2;platform=%VS_PLATFORM%%COMPILE_WITH_WPO_SETTING%
|
||||
set RET=%ERRORLEVEL%
|
||||
popd
|
||||
exit /b %RET%
|
||||
%PWSH_TOOLS% install_cmake_project "%DEPENDENCY_NAME%" "%1" "%2"
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
exit /b 0
|
||||
|
||||
:: Checks whether a dependency is already installed for the specified config
|
||||
:: Doesn't work for dependencies, only for those that need separate Debug/Release installs.
|
||||
|
||||
@@ -58,7 +58,8 @@ call cecho.cmd 0 13 "* IFCOS_NUM_BUILD_PROCS`t= %IFCOS_NUM_BUILD_PROCS%"
|
||||
echo.
|
||||
|
||||
call cecho.cmd 0 13 "Installing %VS_PLATFORM% %BUILD_CFG% %PROJECT_NAME%"
|
||||
cmake --build ..\%BUILD_DIR% --target INSTALL -- /nologo /m:%IFCOS_NUM_BUILD_PROCS% /p:Platform=%VS_PLATFORM% ^
|
||||
set MSBUILD_MULTIPROC=/m /p:CL_MPCount=%IFCOS_NUM_BUILD_PROCS% /p:UseMultiToolTask=true /p:EnforceProcessCountAcrossBuilds=true
|
||||
cmake --build ..\%BUILD_DIR% --target INSTALL -- /nologo %MSBUILD_MULTIPROC% /p:Platform=%VS_PLATFORM% ^
|
||||
/p:Configuration=%BUILD_CFG% %3 %4 %5 %6 %7 %8 %9
|
||||
IF NOT %ERRORLEVEL%==0 GOTO :Error
|
||||
|
||||
|
||||
+98
-2
@@ -18,7 +18,7 @@ function mark {
|
||||
if (Test-Path -Path $marker_filepath) {
|
||||
return
|
||||
}
|
||||
echo "Marking installation in '$installation_dir' with '$ENV:MARKER_FILE'."
|
||||
cecho.cmd 0 13 "Marking installation in '$installation_dir' with '$ENV:MARKER_FILE'."
|
||||
New-Item -Path $marker_filepath -ItemType File | Out-Null
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@ function mark_based_on_artifacts {
|
||||
if (Test-Path -Path $marker_filepath) {
|
||||
return
|
||||
}
|
||||
echo "Found artifact '$artifact' for dependency '$dependency_name' $env:BUILD_CFG."
|
||||
cecho.cmd 0 13 "Found artifact '$artifact' for dependency '$dependency_name' $env:BUILD_CFG."
|
||||
& mark $installation_dir
|
||||
}
|
||||
|
||||
@@ -125,6 +125,102 @@ function setup_build_cfg {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function extract_file {
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$dependency_name,
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$filename,
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$destination_dir,
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$dir_after_extraction
|
||||
)
|
||||
if (Test-Path -Path "$dir_after_extraction") {
|
||||
cecho.cmd 0 13 "$dependency_name already extracted into '$dir_after_extraction'. Skipping."
|
||||
exit 0
|
||||
}
|
||||
cecho.cmd 0 13 "Extracting $dependency_name into '$destination_dir' from '$filename'."
|
||||
7za x "$filename" -o"$destination_dir"
|
||||
exit 0
|
||||
}
|
||||
|
||||
|
||||
function download_file {
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$dependency_name,
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$url,
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$destination_dir,
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$filename
|
||||
)
|
||||
mkdir "$destination_dir" -Force | Out-Null
|
||||
pushd "$destination_dir"
|
||||
if (Test-Path -Path "$filename") {
|
||||
cecho.cmd 0 13 "$dependency_name already downloaded. Skipping."
|
||||
exit 0
|
||||
}
|
||||
|
||||
cecho.cmd 0 13 "Downloading $dependency_name into '$destination_dir'"
|
||||
Invoke-WebRequest $url -OutFile $filename
|
||||
exit 0
|
||||
}
|
||||
|
||||
|
||||
# Required env variables:
|
||||
# - DEPS_DIR
|
||||
function git_clone_and_checkout_revision {
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$dependency_name,
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$git_url,
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$dest_dir,
|
||||
[Parameter(Mandatory = $false)]
|
||||
[string]$revision
|
||||
)
|
||||
if (Test-Path -Path "$dest_dir") {
|
||||
cecho.cmd 0 13 "Cloning $dependency_name is already cloned."
|
||||
exit 0
|
||||
}
|
||||
cecho.cmd 0 13 "Cloning $dependency_name into '$dest_dir'."
|
||||
pushd "$env:DEPS_DIR"
|
||||
git clone $git_url $dest_dir
|
||||
popd
|
||||
|
||||
pushd "$dest_dir"
|
||||
git fetch
|
||||
cecho.cmd 0 13 "Checking out $dependency_name revision $revision."
|
||||
git reset --hard
|
||||
git checkout $revision
|
||||
popd
|
||||
exit 0
|
||||
}
|
||||
|
||||
function install_cmake_project {
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$dependency_name,
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$build_dir,
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$configuration
|
||||
)
|
||||
pushd "$build_dir"
|
||||
cecho.cmd 0 13 "Installing $dependency_name ($configuration). Please be patient, this may take a while."
|
||||
$command = "cmake --install . --config $configuration"
|
||||
cecho.cmd 0 13 "$command"
|
||||
Invoke-Expression $command
|
||||
popd
|
||||
exit 0
|
||||
}
|
||||
|
||||
|
||||
function main {
|
||||
& setup_build_cfg
|
||||
# Dispatch command.
|
||||
|
||||
Reference in New Issue
Block a user