File: utils.cmake

package info (click to toggle)
postsrsd 2.0.11-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 572 kB
  • sloc: ansic: 4,084; python: 385; sh: 99; makefile: 16
file content (106 lines) | stat: -rw-r--r-- 3,708 bytes parent folder | download
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# Copyright 2022-2023 Timo Röhling <timo@gaussglocke.de>
# SPDX-License-Identifier: FSFAP
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice and
# this notice are preserved. This file is offered as-is, without any warranty.
#
include(CMakeParseArguments)
include(ExternalProject)
include(FetchContent)

function(add_autotools_dependency name)
    cmake_parse_arguments(arg "" "LIBRARY_NAME;EXPORTED_TARGET" "" ${ARGN})
    FetchContent_MakeAvailable(${name})
    if(NOT TARGET ${arg_EXPORTED_TARGET})
        find_program(MAKE_EXECUTABLE NAMES gmake make mingw32-make REQUIRED)
        set(library_file
            "${CMAKE_STATIC_LIBRARY_PREFIX}${arg_LIBRARY_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}"
        )
        string(TOLOWER "${name}" lc_name)
        string(TOUPPER "${CMAKE_BUILD_TYPE}" uc_build_type)
        if(CMAKE_C_COMPILER_AR)
            set(ar_executable "${CMAKE_C_COMPILER_AR}")
        else()
            set(ar_executable "${CMAKE_AR}")
        endif()
        if(CMAKE_C_COMPILER_LAUNCHER)
            set(cc_executable
                "${CMAKE_C_COMPILER_LAUNCHER} ${CMAKE_C_COMPILER}"
            )
        else()
            set(cc_executable "${CMAKE_C_COMPILER}")
        endif()
        ExternalProject_Add(
            Ext${name}
            SOURCE_DIR "${${lc_name}_SOURCE_DIR}"
            UPDATE_DISCONNECTED TRUE
            PATCH_COMMAND
            command -v autoreconf && autoreconf <SOURCE_DIR>
            CONFIGURE_COMMAND
                <SOURCE_DIR>/configure --disable-shared --prefix=<INSTALL_DIR>
                "CC=${cc_executable}" "AR=${ar_executable}"
                "RANLIB=${CMAKE_RANLIB}" "MAKE=${MAKE_EXECUTABLE}"
                "CFLAGS=${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${uc_build_type}}"
            BUILD_COMMAND ${MAKE_EXECUTABLE} -j
            INSTALL_COMMAND ${MAKE_EXECUTABLE} -j install
            TEST_COMMAND ""
            BUILD_BYPRODUCTS <INSTALL_DIR>/lib/${library_file}
        )
        ExternalProject_Get_Property(Ext${name} INSTALL_DIR)
        add_library(${arg_EXPORTED_TARGET} STATIC IMPORTED)
        set_target_properties(
            ${arg_EXPORTED_TARGET}
            PROPERTIES IMPORTED_LOCATION "${INSTALL_DIR}/lib/${library_file}"
                       INTERFACE_INCLUDE_DIRECTORIES "${INSTALL_DIR}/include"
        )
        add_dependencies(${arg_EXPORTED_TARGET} Ext${name})
        file(MAKE_DIRECTORY "${INSTALL_DIR}/include")
    endif()
endfunction()

function(find_systemd_unit_destination var)
    if(CMAKE_INSTALL_PREFIX MATCHES "^/usr/?$")
        find_package(PkgConfig QUIET)
        if(PkgConfig_FOUND)
            pkg_get_variable(unitdir systemd systemdsystemunitdir)
            set(${var}
                "${unitdir}"
                PARENT_SCOPE
            )
        else()
            set(${var}
                "/usr/lib/systemd/system"
                PARENT_SCOPE
            )
        endif()
    else()
        set(${var}
            "/etc/systemd/system"
            PARENT_SCOPE
        )
    endif()
endfunction()

function(find_systemd_sysusers_destination var)
    if(CMAKE_INSTALL_PREFIX MATCHES "^/usr/?$")
        find_package(PkgConfig QUIET)
        if(PkgConfig_FOUND)
            pkg_get_variable(sysusersdir systemd sysusersdir)
            set(${var}
                "${sysusersdir}"
                PARENT_SCOPE
            )
        else()
            set(${var}
                "/usr/lib/sysusers.d"
                PARENT_SCOPE
            )
        endif()
    else()
        set(${var}
            "/etc/sysusers.d"
            PARENT_SCOPE
        )
    endif()
endfunction()