Skip to content

Add pkgconfig files #190

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ else()
project("mbed TLS" C)
endif()

# Add CMake modules to the path
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")

# Set the project root directory.
set(MBEDTLS_DIR ${CMAKE_CURRENT_SOURCE_DIR})

Expand Down
95 changes: 95 additions & 0 deletions cmake/PkgBuildConfig.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
# pkg-config file generation
#
# Uses the following globals:
# - PKG_BUILD_PREFIX: the build location (aka prefix). Defaults to CMAKE_INSTALL_PREFIX
# - PKG_BUILD_LIBDIR: the libdir location. Defaults to ${prefix}/lib.
# - PKG_BUILD_INCLUDEDIR: the includedir location. Defaults to ${prefix}/include.
#
function(pkg_build_config)
set(options)
set(oneValueArgs NAME DESCRIPTION VERSION FILENAME)
set(multiValueArgs LIBS PRIVATE_LIBS REQUIRES CFLAGS)

cmake_parse_arguments(PKGCONFIG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

if (NOT DEFINED PKGCONFIG_FILENAME AND DEFINED PKGCONFIG_NAME)
set(PKGCONFIG_FILENAME ${PKGCONFIG_NAME})
endif()
if (NOT DEFINED PKGCONFIG_FILENAME)
message(FATAL_ERROR "Missing FILENAME argument")
endif()
set(PKGCONFIG_FILE "${PROJECT_BINARY_DIR}/${PKGCONFIG_FILENAME}.pc")

if (NOT DEFINED PKGCONFIG_DESCRIPTION)
message(FATAL_ERROR "Missing DESCRIPTION argument")
endif()

if (NOT DEFINED PKGCONFIG_VERSION)
message(FATAL_ERROR "Missing VERSION argument")
endif()

if (DEFINED PKG_BUILD_PREFIX)
set(PKGCONFIG_PREFIX ${PKG_BUILD_PREFIX})
else()
set(PKGCONFIG_PREFIX ${CMAKE_INSTALL_PREFIX})
endif()

if(DEFINED PKG_BUILD_LIBDIR)
if (IS_ABSOLUTE ${PKG_BUILD_LIBDIR})
set(PKGCONFIG_LIBDIR ${PKG_BUILD_LIBDIR})
else()
set(PKGCONFIG_LIBDIR "\${prefix}/${PKG_BUILD_LIBDIR}")
endif()
else()
set(PKGCONFIG_LIBDIR "\${prefix}/lib")
endif()

if(DEFINED PKG_BUILD_INCLUDEDIR)
if (IS_ABSOLUTE ${PKG_BUILD_INCLUDEDIR})
set(PKGCONFIG_INCLUDEDIR ${PKG_BUILD_INCLUDEDIR})
else()
set(PKGCONFIG_INCLUDEDIR "\${prefix}/${PKG_BUILD_INCLUDEDIR}")
endif()
else()
set(PKGCONFIG_INCLUDEDIR "\${prefix}/include")
endif()

file(WRITE "${PKGCONFIG_FILE}"
"prefix=${PKGCONFIG_PREFIX}\n"
"libdir=${PKGCONFIG_LIBDIR}\n"
"includedir=${PKGCONFIG_INCLUDEDIR}\n"
"\n"
"Name: ${PKGCONFIG_NAME}\n"
"Description: ${PKGCONFIG_DESCRIPTION}\n"
"Version: ${PKGCONFIG_VERSION}\n"
)

if(NOT DEFINED PKGCONFIG_LIBS)
set(PKGCONFIG_LIBS "-l${PKGCONFIG_NAME}")
else()
list(INSERT PKGCONFIG_LIBS 0 "-l${PKGCONFIG_NAME}")
endif()
list(REMOVE_DUPLICATES PKGCONFIG_LIBS)
string(REPLACE ";" " " PKGCONFIG_LIBS "${PKGCONFIG_LIBS}")
file(APPEND "${PKGCONFIG_FILE}" "Libs: -L\${libdir} ${PKGCONFIG_LIBS}\n")

if(DEFINED PKGCONFIG_PRIVATE_LIBS)
string(REPLACE ";" " " PKGCONFIG_PRIVATE_LIBS "${PKGCONFIG_PRIVATE_LIBS}")
file(APPEND "${PKGCONFIG_FILE}" "Libs.private: ${PKGCONFIG_PRIVATE_LIBS}\n")
endif()
if(DEFINED PKGCONFIG_REQUIRES)
list(REMOVE_DUPLICATES PKGCONFIG_REQUIRES)
string(REPLACE ";" " " PKGCONFIG_REQUIRES "${PKGCONFIG_REQUIRES}")
file(APPEND "${PKGCONFIG_FILE}" "Requires.private: ${PKGCONFIG_REQUIRES}\n")
endif()
if(DEFINED PKGCONFIG_CFLAGS)
string(REPLACE ";" " " PKGCONFIG_CFLAGS "${PKGCONFIG_CFLAGS}")
else()
set(PKGCONFIG_CFLAGS "")
endif()
file(APPEND "${PKGCONFIG_FILE}" "Cflags: -I\${includedir} ${PKGCONFIG_CFLAGS}\n")

install(FILES "${PKGCONFIG_FILE}"
DESTINATION "${PKGCONFIG_PREFIX}/${PKGCONFIG_LIBDIR}/pkgconfig"
)
endfunction()
19 changes: 18 additions & 1 deletion library/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,10 @@ endif()

list(APPEND src_crypto ${thirdparty_src})

# Extract version from include/mbedtls/version.h
file(STRINGS "${MBEDTLS_DIR}/include/mbedtls/version.h" MBEDTLS_VERSION_H REGEX "^#define *MBEDTLS_VERSION_STRING *\"[^\"]*\"$")
string(REGEX REPLACE "^.*MBEDTLS_VERSION_STRING +\"([0-9.]*)\"$" "\\1" MBEDTLS_VERSION_STRING ${MBEDTLS_VERSION_H})

if(CMAKE_COMPILER_IS_GNUCC)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-declarations -Wmissing-prototypes")
endif(CMAKE_COMPILER_IS_GNUCC)
Expand Down Expand Up @@ -126,6 +130,7 @@ endif(HAIKU)

if(LINK_WITH_PTHREAD)
set(libs ${libs} pthread)
list(APPEND mbedcrypto_PKGCONFIG_PRIVATE_LIBS -lpthread)
endif()

if(LINK_WITH_TRUSTED_STORAGE)
Expand Down Expand Up @@ -157,7 +162,7 @@ endif(USE_STATIC_MBEDTLS_LIBRARY)

if(USE_SHARED_MBEDTLS_LIBRARY)
add_library(mbedcrypto SHARED ${src_crypto})
set_target_properties(mbedcrypto PROPERTIES VERSION 2.17.0 SOVERSION 3)
set_target_properties(mbedcrypto PROPERTIES VERSION ${MBEDTLS_VERSION_STRING} SOVERSION 3)
target_link_libraries(mbedcrypto ${libs})
target_include_directories(mbedcrypto
PUBLIC ${MBEDTLS_DIR}/include/
Expand All @@ -179,3 +184,15 @@ else()
add_dependencies(lib mbedcrypto_static)
endif()
endif()

include(PkgBuildConfig)

set(PKG_BUILD_LIBDIR ${LIB_INSTALL_DIR})
set(PKG_BUILD_INCLUDEDIR ${INCLUDE_INSTALL_DIR})
pkg_build_config(NAME mbedcrypto
VERSION ${MBEDTLS_VERSION_STRING}
DESCRIPTION "The mbedTLS crypto library"
LIBS ${mbedcrypto_PKGCONFIG_LIBS}
PRIVATE_LIBS ${mbedcrypto_PKGCONFIG_PRIVATE_LIBS}
REQUIRES ${mbedcrypto_PKGCONFIG_REQUIRES}
)