]> git.proxmox.com Git - libgit2.git/blob - cmake/Modules/PkgBuildConfig.cmake
Prep for unstable release
[libgit2.git] / cmake / Modules / PkgBuildConfig.cmake
1 # pkg-config file generation
2 #
3 # Uses the following globals:
4 # - PKG_BUILD_PREFIX: the build location (aka prefix). Defaults to CMAKE_INSTALL_PREFIX
5 # - PKG_BUILD_LIBDIR: the libdir location. Defaults to ${prefix}/lib.
6 # - PKG_BUILD_INCLUDEDIR: the includedir location. Defaults to ${prefix}/include.
7 #
8
9 function(pkg_build_config)
10 set(options)
11 set(oneValueArgs NAME DESCRIPTION VERSION FILENAME LIBS_SELF)
12 set(multiValueArgs LIBS PRIVATE_LIBS REQUIRES CFLAGS)
13
14 cmake_parse_arguments(PKGCONFIG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
15
16 if (NOT DEFINED PKGCONFIG_FILENAME AND DEFINED PKGCONFIG_NAME)
17 set(PKGCONFIG_FILENAME ${PKGCONFIG_NAME})
18 endif()
19 if (NOT DEFINED PKGCONFIG_FILENAME)
20 message(FATAL_ERROR "Missing FILENAME argument")
21 endif()
22 set(PKGCONFIG_FILE "${PROJECT_BINARY_DIR}/${PKGCONFIG_FILENAME}.pc")
23
24 if (NOT DEFINED PKGCONFIG_DESCRIPTION)
25 message(FATAL_ERROR "Missing DESCRIPTION argument")
26 endif()
27
28 if (NOT DEFINED PKGCONFIG_VERSION)
29 message(FATAL_ERROR "Missing VERSION argument")
30 endif()
31
32 if (DEFINED PKG_BUILD_PREFIX)
33 set(PKGCONFIG_PREFIX "${PKG_BUILD_PREFIX}")
34 else()
35 set(PKGCONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}")
36 endif()
37
38 if(DEFINED PKG_BUILD_LIBDIR)
39 if (IS_ABSOLUTE ${PKG_BUILD_LIBDIR})
40 set(PKGCONFIG_LIBDIR ${PKG_BUILD_LIBDIR})
41 else()
42 set(PKGCONFIG_LIBDIR "\${prefix}/${PKG_BUILD_LIBDIR}")
43 endif()
44 else()
45 set(PKGCONFIG_LIBDIR "\${prefix}/lib")
46 endif()
47
48 if(DEFINED PKG_BUILD_INCLUDEDIR)
49 if (IS_ABSOLUTE ${PKG_BUILD_INCLUDEDIR})
50 set(PKGCONFIG_INCLUDEDIR ${PKG_BUILD_INCLUDEDIR})
51 else()
52 set(PKGCONFIG_INCLUDEDIR "\${prefix}/${PKG_BUILD_INCLUDEDIR}")
53 endif()
54 else()
55 set(PKGCONFIG_INCLUDEDIR "\${prefix}/include")
56 endif()
57
58 # Write .pc "header"
59 file(WRITE "${PKGCONFIG_FILE}"
60 "prefix=\"${PKGCONFIG_PREFIX}\"\n"
61 "libdir=\"${PKGCONFIG_LIBDIR}\"\n"
62 "includedir=\"${PKGCONFIG_INCLUDEDIR}\"\n"
63 "\n"
64 "Name: ${PKGCONFIG_NAME}\n"
65 "Description: ${PKGCONFIG_DESCRIPTION}\n"
66 "Version: ${PKGCONFIG_VERSION}\n"
67 )
68
69 # Prepare Libs
70 if(NOT DEFINED PKGCONFIG_LIBS_SELF)
71 set(PKGCONFIG_LIBS_SELF "${PKGCONFIG_FILE}")
72 endif()
73
74 if(NOT DEFINED PKGCONFIG_LIBS)
75 set(PKGCONFIG_LIBS "-l${PKGCONFIG_LIBS_SELF}")
76 else()
77 list(INSERT PKGCONFIG_LIBS 0 "-l${PKGCONFIG_LIBS_SELF}")
78 endif()
79
80 list(REMOVE_DUPLICATES PKGCONFIG_LIBS)
81 string(REPLACE ";" " " PKGCONFIG_LIBS "${PKGCONFIG_LIBS}")
82 file(APPEND "${PKGCONFIG_FILE}" "Libs: -L\${libdir} ${PKGCONFIG_LIBS}\n")
83
84 # Prepare Libs.private
85 if(DEFINED PKGCONFIG_PRIVATE_LIBS)
86 list(REMOVE_DUPLICATES PKGCONFIG_PRIVATE_LIBS)
87 string(REPLACE ";" " " PKGCONFIG_PRIVATE_LIBS "${PKGCONFIG_PRIVATE_LIBS}")
88 file(APPEND "${PKGCONFIG_FILE}" "Libs.private: ${PKGCONFIG_PRIVATE_LIBS}\n")
89 endif()
90
91 # Prepare Requires.private
92 if(DEFINED PKGCONFIG_REQUIRES)
93 list(REMOVE_DUPLICATES PKGCONFIG_REQUIRES)
94 string(REPLACE ";" " " PKGCONFIG_REQUIRES "${PKGCONFIG_REQUIRES}")
95 file(APPEND "${PKGCONFIG_FILE}" "Requires.private: ${PKGCONFIG_REQUIRES}\n")
96 endif()
97
98 # Prepare Cflags
99 if(DEFINED PKGCONFIG_CFLAGS)
100 string(REPLACE ";" " " PKGCONFIG_CFLAGS "${PKGCONFIG_CFLAGS}")
101 else()
102 set(PKGCONFIG_CFLAGS "")
103 endif()
104 file(APPEND "${PKGCONFIG_FILE}" "Cflags: -I\${includedir} ${PKGCONFIG_CFLAGS}\n")
105
106 # Install .pc file
107 install(FILES "${PKGCONFIG_FILE}"
108 DESTINATION "${PKGCONFIG_PREFIX}/${PKGCONFIG_LIBDIR}/pkgconfig"
109 )
110 endfunction()