blob: 7c4e5859b70f715a91644e9fbbf6fb48e23ee85b (
plain)
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
|
# A Macro to simplify creating a pkg-config file
# install_pkg_config_file(<package-name>
# [VERSION <version>]
# [DESCRIPTION <description>]
# [CFLAGS <cflag> ...]
# [LIBS <lflag> ...]
# [REQUIRES <required-package-name> ...])
#
# Create and install a pkg-config .pc file to CMAKE_INSTALL_PREFIX/lib/pkgconfig
# assuming the following install layout:
# libraries: CMAKE_INSTALL_PREFIX/lib
# headers : CMAKE_INSTALL_PREFIX/include
#
# example:
# add_library(mylib mylib.c)
# install_pkg_config_file(mylib
# DESCRIPTION My Library
# CFLAGS
# LIBS -lmylib
# REQUIRES glib-2.0 lcm
# VERSION 0.0.1)
#
#
function(install_pkg_config_file)
list(GET ARGV 0 pc_name)
# TODO error check
set(pc_version 0.0.1)
set(pc_description ${pc_name})
set(pc_requires "")
set(pc_libs "")
set(pc_cflags "")
set(pc_fname "${CMAKE_BINARY_DIR}/lib/pkgconfig/${pc_name}.pc")
set(modewords LIBS CFLAGS REQUIRES VERSION DESCRIPTION)
set(curmode "")
# parse function arguments and populate pkg-config parameters
list(REMOVE_AT ARGV 0)
foreach(word ${ARGV})
list(FIND modewords ${word} mode_index)
if(${mode_index} GREATER -1)
set(curmode ${word})
elseif(curmode STREQUAL LIBS)
set(pc_libs "${pc_libs} ${word}")
elseif(curmode STREQUAL CFLAGS)
set(pc_cflags "${pc_cflags} ${word}")
elseif(curmode STREQUAL REQUIRES)
set(pc_requires "${pc_requires} ${word}")
elseif(curmode STREQUAL VERSION)
set(pc_version ${word})
set(curmode "")
elseif(curmode STREQUAL DESCRIPTION)
set(pc_description "${word}")
set(curmode "")
else(${mode_index} GREATER -1)
message("WARNING incorrect use of install_pkg_config_file (${word})")
break()
endif(${mode_index} GREATER -1)
endforeach(word)
# write the .pc file out
file(WRITE ${pc_fname}
"prefix=${CMAKE_INSTALL_PREFIX}\n"
"libdir=\${prefix}/lib\n"
"includedir=\${prefix}/include\n"
"\n"
"Name: ${pc_name}\n"
"Description: ${pc_description}\n"
"Requires: ${pc_requires}\n"
"Version: ${pc_version}\n"
"Libs: -L\${libdir} ${pc_libs}\n"
"Cflags: -I\${includedir} ${pc_cflags}\n")
# mark the .pc file for installation to the lib/pkgconfig directory
install(FILES ${pc_fname} DESTINATION lib/pkgconfig)
endfunction(install_pkg_config_file)
|