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