File zstd.patch of Package ovito

#######################################################################################
#
#  Copyright 2026 OVITO GmbH, Germany
#
#  This file is part of OVITO (Open Visualization Tool).
#
#  OVITO is free software; you can redistribute it and/or modify it either under the
#  terms of the GNU General Public License version 3 as published by the Free Software
#  Foundation (the "GPL") or, at your option, under the terms of the MIT License.
#  If you do not alter this notice, a recipient may use your version of this
#  file under either the GPL or the MIT License.
#
#  You should have received a copy of the GPL along with this program in a
#  file LICENSE.GPL.txt.  You should have received a copy of the MIT License along
#  with this program in a file LICENSE.MIT.txt
#
#  This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND,
#  either express or implied. See the GPL or the MIT License for the specific language
#  governing rights and limitations.
#
#######################################################################################

# CMake configuration for 3rdparty libraries used by OVITO.

# Build zstd compression library from source for static linking.
IF(NOT OVITO_BUILD_CONDA)
FIND_PACKAGE(zstd CONFIG)
    
    # 如果找不到 CONFIG 模式(某些发行版没有提供 zstdConfig.cmake),则尝试通用查找
    IF(NOT zstd_FOUND)
        FIND_PACKAGE(PkgConfig REQUIRED)
        PKG_CHECK_MODULES(ZSTD REQUIRED libzstd)
        
        # 创建一个别名目标以保持与 OVITO 后续代码的兼容性
        IF(NOT TARGET zstd::libzstd_static)
            ADD_LIBRARY(zstd::libzstd_static INTERFACE IMPORTED)
            TARGET_LINK_LIBRARIES(zstd::libzstd_static INTERFACE ${ZSTD_LIBRARIES})
            TARGET_INCLUDE_DIRECTORIES(zstd::libzstd_static INTERFACE ${ZSTD_INCLUDE_DIRS})
        ENDIF()
        SET(zstd_VERSION ${ZSTD_VERSION})
    ELSE()
        # 如果通过 CONFIG 模式找到了,确保别名一致
        IF(NOT TARGET zstd::libzstd_static)
            # 根据系统提供的具体 target 名称起别名,通常是 zstd::libzstd_shared 或 zstd::libzstd_static
            IF(TARGET zstd::libzstd)
                ADD_LIBRARY(zstd::libzstd_static ALIAS zstd::libzstd)
            ENDIF()
        ENDIF()
        # 获取版本号(用于下方的 SBOM)
        SET(zstd_VERSION ${zstd_VERSION})
    ENDIF()
    # Register zstd package in SBOM.
    OVITO_REGISTER_PACKAGE_FOR_SBOM("zstd" "${zstd_VERSION_MAJOR}.${zstd_VERSION_MINOR}.${zstd_VERSION_PATCH}")
ENDIF()

ADD_SUBDIRECTORY(function2)
IF(OVITO_BUILD_APP)
    ADD_SUBDIRECTORY(qwt)
ENDIF()
IF(OVITO_BUILD_PLUGIN_STDOBJ OR OVITO_BUILD_PLUGIN_PARTICLES)
    ADD_SUBDIRECTORY(muparser)
ENDIF()
IF(OVITO_BUILD_PLUGIN_PARTICLES)
    ADD_SUBDIRECTORY(voro++)
    ADD_SUBDIRECTORY(ptm)
    ADD_SUBDIRECTORY(mwm_csp)
    ADD_SUBDIRECTORY(xdrfile)
    ADD_SUBDIRECTORY(gsd)

    # Build gemmi from source.
    ADD_LIBRARY(gemmi STATIC
                gemmi/src/align.cpp gemmi/src/assembly.cpp gemmi/src/calculate.cpp gemmi/src/ccp4.cpp
                gemmi/src/crd.cpp gemmi/src/ddl.cpp gemmi/src/eig3.cpp gemmi/src/fprime.cpp # gemmi/src/gz.cpp
                gemmi/src/intensit.cpp gemmi/src/json.cpp gemmi/src/mmcif.cpp # gemmi/src/mmread_gz.cpp
                gemmi/src/monlib.cpp gemmi/src/mtz.cpp gemmi/src/mtz2cif.cpp
                gemmi/src/pdb.cpp gemmi/src/polyheur.cpp gemmi/src/read_cif.cpp
                gemmi/src/resinfo.cpp gemmi/src/riding_h.cpp
                gemmi/src/select.cpp gemmi/src/sprintf.cpp gemmi/src/dssp.cpp gemmi/src/symmetry.cpp
                gemmi/src/to_json.cpp gemmi/src/to_mmcif.cpp gemmi/src/to_pdb.cpp gemmi/src/topo.cpp
                gemmi/src/xds_ascii.cpp)
    SET_PROPERTY(TARGET gemmi PROPERTY POSITION_INDEPENDENT_CODE ON)
    TARGET_COMPILE_DEFINITIONS(gemmi PRIVATE GEMMI_BUILD)
    TARGET_INCLUDE_DIRECTORIES(gemmi PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/gemmi/include")
    TARGET_INCLUDE_DIRECTORIES(gemmi PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/gemmi/third_party")
    IF(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
        TARGET_COMPILE_OPTIONS(gemmi PRIVATE /wd4267) # conversion from 'size_t' to 'unsigned int', possible loss of data
        TARGET_COMPILE_DEFINITIONS(gemmi PRIVATE _CRT_SECURE_NO_WARNINGS)
    ENDIF()
ENDIF()
IF(OVITO_BUILD_PLUGIN_PARTICLES)
    ADD_SUBDIRECTORY(geogram)
ENDIF()
IF(OVITO_BUILD_PLUGIN_NETCDFPLUGIN)
    ADD_SUBDIRECTORY(netcdf_integration)
ENDIF()
IF(OVITO_BUILD_PLUGIN_CORRELATION)
    ADD_SUBDIRECTORY(kissfft)
ENDIF()
openSUSE Build Service is sponsored by