File: GenerateCompatibilityVersionFile.cmake

package info (click to toggle)
freespace2 24.0.2%2Brepack-1
  • links: PTS, VCS
  • area: non-free
  • in suites: trixie
  • size: 43,188 kB
  • sloc: cpp: 583,107; ansic: 21,729; python: 1,174; sh: 464; makefile: 248; xml: 181
file content (83 lines) | stat: -rw-r--r-- 3,039 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#.rst:
# .. command:: generate_compatibility_version_file
#
#  Create a version file for a project::
#
#    generate_compatibility_version_file(<filename>
#      [VERSION <major.minor.patch>]
#      COMPATIBILITY <AnyNewerVersion|SameMajorVersion|ExactVersion>
#      [C_ABI]
#      [CXX_LAYOUT]
#      [CXX_ABI])

#=============================================================================
# Copyright 2015 Sensics, Inc. <ryan@sensics.com>
# Copyright 2012 Alexander Neundorf <neundorf@kde.org>
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
#  License text for the above reference.)


include(CMakeParseArguments)
include(CMakePackageConfigHelpers)

set(GCVF_DIR "${CMAKE_CURRENT_LIST_DIR}" CACHE INTERNAL "" FORCE)

function(generate_compatibility_version_file _filename)

    set(options C_ABI CXX_LAYOUT CXX_ABI)
    set(oneValueArgs VERSION COMPATIBILITY )
    set(multiValueArgs )
    cmake_parse_arguments(GCVF "${options}" "${oneValueArgs}" "${multiValueArgs}"  ${ARGN})

    if(GCVF_UNPARSED_ARGUMENTS)
        message(FATAL_ERROR "Unknown keywords given to generate_compatibility_version_file(): ${GCVF_UNPARSED_ARGUMENTS}")
    endif()
    set(versionTemplateFile "${CMAKE_ROOT}/Modules/BasicConfigVersion-${GCVF_COMPATIBILITY}.cmake.in")
    if(NOT EXISTS "${versionTemplateFile}")
        message(FATAL_ERROR "Bad COMPATIBILITY value used for generate_compatibility_version_file(): \"${GCVF_COMPATIBILITY}\"")
    endif()

    if(GCVF_CXX_ABI)
        set(GCVF_CXX_LAYOUT TRUE)
    endif()
    if(GCVF_CXX_LAYOUT)
        set(GCVF_C_ABI TRUE)
    endif()

    if("${GCVF_VERSION}" STREQUAL "")
        if("${PROJECT_VERSION}" STREQUAL "")
            message(FATAL_ERROR "No VERSION specified for generate_compatibility_version_file()")
        else()
            set(GCVF_VERSION ${PROJECT_VERSION})
        endif()
    endif()

    set(GCVF_WIN_CXXLAYOUT)
    if(MSVC)
        set(GCVF_WIN_CXXLAYOUT "MSVC")
    elseif(MINGW)
        set(GCVF_WIN_CXXLAYOUT "MinGW")
    elseif(WIN32)
        set(GCVF_WIN_CXXLAYOUT "other")
    endif()

    set(PREV_FILE "${_filename}.cmakeversion")
    write_basic_package_version_file("${PREV_FILE}" VERSION ${GCVF_VERSION} COMPATIBILITY ${GCVF_COMPATIBILITY})
    set(GCVF_BASIC TRUE)
    foreach(level BASIC C_ABI CXX_LAYOUT CXX_ABI)
        if(GCVF_${level})
            file(READ "${PREV_FILE}" GCVF_PREVIOUS_FILE)
            set(PREV_FILE "${_filename}.${level}")
            configure_file("${GCVF_DIR}/CompatibilityVersionFile-${level}.cmake.in" "${PREV_FILE}" @ONLY)
        endif()
    endforeach()
    configure_file("${PREV_FILE}" "${_filename}" COPYONLY)
endfunction()