mirror of https://github.com/stenzek/duckstation
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			187 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			CMake
		
	
			
		
		
	
	
			187 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			CMake
		
	
| # Copyright (C) 2020 Dieter Baron and Thomas Klausner
 | |
| #
 | |
| # The authors can be contacted at <info@libzip.org>
 | |
| #
 | |
| # Redistribution and use in source and binary forms, with or without
 | |
| # modification, are permitted provided that the following conditions
 | |
| # are met:
 | |
| #
 | |
| # 1. Redistributions of source code must retain the above copyright
 | |
| #   notice, this list of conditions and the following disclaimer.
 | |
| #
 | |
| # 2. Redistributions in binary form must reproduce the above copyright
 | |
| #   notice, this list of conditions and the following disclaimer in
 | |
| #   the documentation and/or other materials provided with the
 | |
| #   distribution.
 | |
| #
 | |
| # 3. The names of the authors may not be used to endorse or promote
 | |
| #   products derived from this software without specific prior
 | |
| #   written permission.
 | |
| #
 | |
| # THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
 | |
| # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | |
| # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | |
| # ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
 | |
| # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | |
| # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 | |
| # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | |
| # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
 | |
| # IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 | |
| # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
 | |
| # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | |
| 
 | |
| #[=======================================================================[.rst:
 | |
| Findzstd
 | |
| -------
 | |
| 
 | |
| Finds the Zstandard (zstd) library.
 | |
| 
 | |
| Imported Targets
 | |
| ^^^^^^^^^^^^^^^^
 | |
| 
 | |
| This module provides the following imported targets, if found:
 | |
| 
 | |
| ``zstd::libzstd_shared``
 | |
|   The shared Zstandard library
 | |
| ``zstd::libzstd_static``
 | |
|   The shared Zstandard library
 | |
| 
 | |
| Result Variables
 | |
| ^^^^^^^^^^^^^^^^
 | |
| 
 | |
| This will define the following variables:
 | |
| 
 | |
| ``zstd_FOUND``
 | |
|   True if the system has the Zstandard library.
 | |
| ``zstd_VERSION``
 | |
|   The version of the Zstandard library which was found.
 | |
| 
 | |
| Cache Variables
 | |
| ^^^^^^^^^^^^^^^
 | |
| 
 | |
| The following cache variables may also be set:
 | |
| 
 | |
| ``zstd_INCLUDE_DIR``
 | |
|   The directory containing ``zstd.h``.
 | |
| ``zstd_STATIC_LIBRARY``
 | |
|   The path to the Zstandard static library.
 | |
| ``zstd_SHARED_LIBRARY``
 | |
|   The path to the Zstandard shared library.
 | |
| ``zstd_DLL``
 | |
|   The path to the Zstandard DLL.
 | |
| 
 | |
| #]=======================================================================]
 | |
| 
 | |
| find_package(PkgConfig)
 | |
| pkg_check_modules(PC_zstd QUIET libzstd)
 | |
| 
 | |
| find_path(zstd_INCLUDE_DIR
 | |
|   NAMES zstd.h
 | |
|   HINTS ${PC_zstd_INCLUDE_DIRS}
 | |
| )
 | |
| 
 | |
| find_file(zstd_DLL
 | |
|   NAMES libzstd.dll zstd.dll
 | |
|   PATH_SUFFIXES bin
 | |
|   HINTS ${PC_zstd_PREFIX}
 | |
| )
 | |
| 
 | |
| # On Windows, we manually define the library names to avoid mistaking the
 | |
| # implib for the static library
 | |
| if(zstd_DLL)
 | |
|   set(_zstd_win_static_name zstd-static)
 | |
|   set(_zstd_win_shared_name zstd)
 | |
| else()
 | |
|   # vcpkg removes the -static suffix in static builds
 | |
|   set(_zstd_win_static_name zstd zstd_static)
 | |
|   set(_zstd_win_shared_name)
 | |
| endif()
 | |
| 
 | |
| set(_previous_suffixes ${CMAKE_FIND_LIBRARY_SUFFIXES})
 | |
| set(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".dylib" ".dll.a" ".lib")
 | |
| find_library(zstd_SHARED_LIBRARY
 | |
|   NAMES zstd ${_zstd_win_shared_name}
 | |
|   HINTS ${PC_zstd_LIBDIR}
 | |
| )
 | |
| 
 | |
| set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".lib")
 | |
| find_library(zstd_STATIC_LIBRARY
 | |
|   NAMES zstd ${_zstd_win_static_name}
 | |
|   HINTS ${PC_zstd_LIBDIR}
 | |
| )
 | |
| set(CMAKE_FIND_LIBRARY_SUFFIXES ${_previous_suffixes})
 | |
| 
 | |
| # Set zstd_LIBRARY to the shared library or fall back to the static library
 | |
| if(zstd_SHARED_LIBRARY)
 | |
|   set(_zstd_LIBRARY ${zstd_SHARED_LIBRARY})
 | |
| else()
 | |
|   set(_zstd_LIBRARY ${zstd_STATIC_LIBRARY})
 | |
| endif()
 | |
| 
 | |
| # Extract version information from the header file
 | |
| if(zstd_INCLUDE_DIR)
 | |
|   file(STRINGS ${zstd_INCLUDE_DIR}/zstd.h _ver_major_line
 | |
|     REGEX "^#define ZSTD_VERSION_MAJOR  *[0-9]+"
 | |
|     LIMIT_COUNT 1)
 | |
|   string(REGEX MATCH "[0-9]+"
 | |
|     zstd_MAJOR_VERSION "${_ver_major_line}")
 | |
|   file(STRINGS ${zstd_INCLUDE_DIR}/zstd.h _ver_minor_line
 | |
|     REGEX "^#define ZSTD_VERSION_MINOR  *[0-9]+"
 | |
|     LIMIT_COUNT 1)
 | |
|   string(REGEX MATCH "[0-9]+"
 | |
|     zstd_MINOR_VERSION "${_ver_minor_line}")
 | |
|   file(STRINGS ${zstd_INCLUDE_DIR}/zstd.h _ver_release_line
 | |
|     REGEX "^#define ZSTD_VERSION_RELEASE  *[0-9]+"
 | |
|     LIMIT_COUNT 1)
 | |
|   string(REGEX MATCH "[0-9]+"
 | |
|     zstd_RELEASE_VERSION "${_ver_release_line}")
 | |
|   set(Zstd_VERSION "${zstd_MAJOR_VERSION}.${zstd_MINOR_VERSION}.${zstd_RELEASE_VERSION}")
 | |
|   unset(_ver_major_line)
 | |
|   unset(_ver_minor_line)
 | |
|   unset(_ver_release_line)
 | |
| endif()
 | |
| 
 | |
| include(FindPackageHandleStandardArgs)
 | |
| find_package_handle_standard_args(zstd
 | |
|   FOUND_VAR zstd_FOUND
 | |
|   REQUIRED_VARS
 | |
|     _zstd_LIBRARY
 | |
|     zstd_INCLUDE_DIR
 | |
|   VERSION_VAR zstd_VERSION
 | |
| )
 | |
| 
 | |
| if(zstd_FOUND AND zstd_SHARED_LIBRARY AND NOT TARGET zstd::libzstd_shared)
 | |
|   add_library(zstd::libzstd_shared SHARED IMPORTED)
 | |
|   if(WIN32)
 | |
|     set_target_properties(zstd::libzstd_shared PROPERTIES
 | |
|       IMPORTED_LOCATION "${zstd_DLL}"
 | |
|       IMPORTED_IMPLIB "${zstd_SHARED_LIBRARY}"
 | |
|     )
 | |
|   else()
 | |
|     set_target_properties(zstd::libzstd_shared PROPERTIES
 | |
|       IMPORTED_LOCATION "${zstd_SHARED_LIBRARY}"
 | |
|     )
 | |
|   endif()
 | |
| 
 | |
|   set_target_properties(zstd::libzstd_shared PROPERTIES
 | |
|     INTERFACE_COMPILE_OPTIONS "${PC_zstd_CFLAGS_OTHER}"
 | |
|     INTERFACE_INCLUDE_DIRECTORIES "${zstd_INCLUDE_DIR}"
 | |
|   )
 | |
| endif()
 | |
| 
 | |
| if(zstd_FOUND AND zstd_STATIC_LIBRARY AND NOT TARGET zstd::libzstd_static)
 | |
|   add_library(zstd::libzstd_static STATIC IMPORTED)
 | |
|   set_target_properties(zstd::libzstd_static PROPERTIES
 | |
|     IMPORTED_LOCATION "${zstd_STATIC_LIBRARY}"
 | |
|     INTERFACE_COMPILE_OPTIONS "${PC_zstd_CFLAGS_OTHER}"
 | |
|     INTERFACE_INCLUDE_DIRECTORIES "${zstd_INCLUDE_DIR}"
 | |
|   )
 | |
| endif()
 | |
| 
 | |
| mark_as_advanced(
 | |
|   zstd_INCLUDE_DIR
 | |
|   zstd_DLL
 | |
|   zstd_SHARED_LIBRARY
 | |
|   zstd_STATIC_LIBRARY
 | |
| )
 |