toxcore/cmake/InstallPkgConfigFile.cmake

79 lines
2.6 KiB
CMake
Raw Normal View History

# 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)