1# A Macro to simplify creating a pkg-config file 2 3# install_pkg_config_file(<package-name> 4# [VERSION <version>] 5# [DESCRIPTION <description>] 6# [CFLAGS <cflag> ...] 7# [LIBS <lflag> ...] 8# [REQUIRES <required-package-name> ...]) 9# 10# Create and install a pkg-config .pc file to CMAKE_INSTALL_LIBDIR/pkgconfig 11# assuming the following install layout: 12# libraries: CMAKE_INSTALL_LIBDIR 13# headers : CMAKE_INSTALL_INCLUDEDIR 14# 15# example: 16# add_library(mylib mylib.c) 17# install_pkg_config_file(mylib 18# DESCRIPTION My Library 19# CFLAGS 20# LIBS -lmylib 21# REQUIRES glib-2.0 lcm 22# VERSION 0.0.1) 23# 24# 25function(install_pkg_config_file) 26 list(GET ARGV 0 pc_name) 27 # TODO error check 28 29 set(pc_version 0.0.1) 30 set(pc_description ${pc_name}) 31 set(pc_requires "") 32 set(pc_libs "") 33 set(pc_cflags "") 34 set(pc_fname "${CMAKE_BINARY_DIR}/lib/pkgconfig/${pc_name}.pc") 35 36 set(modewords LIBS CFLAGS REQUIRES VERSION DESCRIPTION) 37 set(curmode "") 38 39 # parse function arguments and populate pkg-config parameters 40 list(REMOVE_AT ARGV 0) 41 foreach(word ${ARGV}) 42 list(FIND modewords ${word} mode_index) 43 if(${mode_index} GREATER -1) 44 set(curmode ${word}) 45 elseif(curmode STREQUAL LIBS) 46 set(pc_libs "${pc_libs} ${word}") 47 elseif(curmode STREQUAL CFLAGS) 48 set(pc_cflags "${pc_cflags} ${word}") 49 elseif(curmode STREQUAL REQUIRES) 50 set(pc_requires "${pc_requires} ${word}") 51 elseif(curmode STREQUAL VERSION) 52 set(pc_version ${word}) 53 set(curmode "") 54 elseif(curmode STREQUAL DESCRIPTION) 55 set(pc_description "${word}") 56 set(curmode "") 57 else(${mode_index} GREATER -1) 58 message("WARNING incorrect use of install_pkg_config_file (${word})") 59 break() 60 endif(${mode_index} GREATER -1) 61 endforeach(word) 62 63 # write the .pc file out 64 file(WRITE ${pc_fname} 65 "prefix=${CMAKE_INSTALL_PREFIX}\n" 66 "libdir=${CMAKE_INSTALL_FULL_LIBDIR}\n" 67 "includedir=${CMAKE_INSTALL_FULL_INCLUDEDIR}\n" 68 "\n" 69 "Name: ${pc_name}\n" 70 "Description: ${pc_description}\n" 71 "Requires: ${pc_requires}\n" 72 "Version: ${pc_version}\n" 73 "Libs: -L\${libdir} ${pc_libs}\n" 74 "Cflags: -I\${includedir} ${pc_cflags}\n") 75 76 # mark the .pc file for installation to the lib/pkgconfig directory 77 install(FILES ${pc_fname} DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") 78endfunction(install_pkg_config_file) 79