1# CMake support for fseeko 2# 3# Based on FindLFS.cmake by 4# Copyright (C) 2016 Julian Andres Klode <jak@debian.org>. 5# 6# Permission is hereby granted, free of charge, to any person 7# obtaining a copy of this software and associated documentation files 8# (the "Software"), to deal in the Software without restriction, 9# including without limitation the rights to use, copy, modify, merge, 10# publish, distribute, sublicense, and/or sell copies of the Software, 11# and to permit persons to whom the Software is furnished to do so, 12# subject to the following conditions: 13# 14# The above copyright notice and this permission notice shall be 15# included in all copies or substantial portions of the Software. 16# 17# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 20# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 21# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 22# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 23# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24# SOFTWARE. 25# 26# This defines the following variables 27# 28# FSEEKO_DEFINITIONS - List of definitions to pass to add_definitions() 29# FSEEKO_COMPILE_OPTIONS - List of definitions to pass to add_compile_options() 30# FSEEKO_LIBRARIES - List of libraries and linker flags 31# FSEEKO_FOUND - If there is Large files support 32# 33 34include(CheckCSourceCompiles) 35include(FindPackageHandleStandardArgs) 36include(CMakePushCheckState) 37 38# Check for the availability of fseeko() 39# The cases handled are: 40# 41# * Native fseeko() 42# * Preprocessor flag -D_LARGEFILE_SOURCE 43# 44function(_fseeko_check) 45 set(_fseeko_cppflags) 46 cmake_push_check_state() 47 set(CMAKE_REQUIRED_QUIET 1) 48 set(CMAKE_REQUIRED_DEFINITIONS ${LFS_DEFINITIONS}) 49 message(STATUS "Looking for native fseeko support") 50 check_symbol_exists(fseeko stdio.h fseeko_native) 51 cmake_pop_check_state() 52 if (fseeko_native) 53 message(STATUS "Looking for native fseeko support - found") 54 set(FSEEKO_FOUND TRUE) 55 else() 56 message(STATUS "Looking for native fseeko support - not found") 57 endif() 58 59 if (NOT FSEEKO_FOUND) 60 # See if it's available with _LARGEFILE_SOURCE. 61 cmake_push_check_state() 62 set(CMAKE_REQUIRED_QUIET 1) 63 set(CMAKE_REQUIRED_DEFINITIONS ${LFS_DEFINITIONS} "-D_LARGEFILE_SOURCE") 64 check_symbol_exists(fseeko stdio.h fseeko_need_largefile_source) 65 cmake_pop_check_state() 66 if (fseeko_need_largefile_source) 67 message(STATUS "Looking for fseeko support with _LARGEFILE_SOURCE - found") 68 set(FSEEKO_FOUND TRUE) 69 set(_fseeko_cppflags "-D_LARGEFILE_SOURCE") 70 else() 71 message(STATUS "Looking for fseeko support with _LARGEFILE_SOURCE - not found") 72 endif() 73 endif() 74 75 set(FSEEKO_DEFINITIONS ${_fseeko_cppflags} CACHE STRING "Extra definitions for fseeko support") 76 set(FSEEKO_COMPILE_OPTIONS "" CACHE STRING "Extra compiler options for fseeko support") 77 set(FSEEKO_LIBRARIES "" CACHE STRING "Extra definitions for fseeko support") 78 set(FSEEKO_FOUND ${FSEEKO_FOUND} CACHE INTERNAL "Found fseeko") 79endfunction() 80 81if (NOT FSEEKO_FOUND) 82 _fseeko_check() 83endif() 84 85find_package_handle_standard_args(FSEEKO "Could not find fseeko. Set FSEEKO_DEFINITIONS, FSEEKO_COMPILE_OPTIONS, FSEEKO_LIBRARIES." FSEEKO_FOUND) 86