File: InstallPackageConfigFile.cmake

package info (click to toggle)
broccoli-python 0.62-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 460 kB
  • ctags: 105
  • sloc: python: 407; sh: 202; makefile: 21
file content (63 lines) | stat: -rw-r--r-- 2,747 bytes parent folder | download | duplicates (25)
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
include(InstallClobberImmune)

# This macro can be used to install configuration files which
# users are expected to modify after installation.  It will:
#
#   - If binary packaging is enabled:
#     Install the file in the typical CMake fashion, but append to the
#     INSTALLED_CONFIG_FILES cache variable for use with the Mac package's
#     pre/post install scripts
#
#   - If binary packaging is not enabled:
#     Install the script in a way such that it will check at `make install`
#     time whether the file does not exist.  See InstallClobberImmune.cmake
#
#   - Always create a target "install-example-configs" which installs an
#     example version of the config file.
#
#   _srcfile: the absolute path to the file to install
#   _dstdir: absolute path to the directory in which to install the file
#   _dstfilename: how to (re)name the file inside _dstdir

macro(InstallPackageConfigFile _srcfile _dstdir _dstfilename)
    set(_dstfile ${_dstdir}/${_dstfilename})

    if (BINARY_PACKAGING_MODE)
        # If packaging mode is enabled, always install the distribution's
        # version of the file.  The Mac package's pre/post install scripts
        # or native functionality of RPMs will take care of not clobbering it.
        install(FILES ${_srcfile} DESTINATION ${_dstdir} RENAME ${_dstfilename})
        # This cache variable is what the Mac package pre/post install scripts
        # use to avoid clobbering user-modified config files
        set(INSTALLED_CONFIG_FILES
            "${INSTALLED_CONFIG_FILES} ${_dstfile}" CACHE STRING "" FORCE)

        # Additionally, the Mac PackageMaker packages don't have any automatic
        # handling of configuration file conflicts so install an example file
        # that the post install script will cleanup in the case it's extraneous
        if (APPLE)
            install(FILES ${_srcfile} DESTINATION ${_dstdir}
                    RENAME ${_dstfilename}.example)
        endif ()
    else ()
        # Have `make install` check at run time whether the file does not exist
        InstallClobberImmune(${_srcfile} ${_dstfile})
    endif ()

    if (NOT TARGET install-example-configs)
        add_custom_target(install-example-configs
                          COMMENT "Installed example configuration files")
    endif ()

    # '/' is invalid in target names, so replace w/ '.'
    string(REGEX REPLACE "/" "." _flatsrc ${_srcfile})

    set(_example ${_dstfile}.example)

    add_custom_target(install-example-config-${_flatsrc}
        COMMAND "${CMAKE_COMMAND}" -E copy ${_srcfile} \${DESTDIR}${_example}
        COMMENT "Installing ${_example}")

    add_dependencies(install-example-configs install-example-config-${_flatsrc})

endmacro(InstallPackageConfigFile)