xref: /freebsd/contrib/libpcap/cmake/Modules/FindFseeko.cmake (revision b00ab7548b418624b6719ab8a2e8aaeade767a70)
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