From 600ca88e8725a2765d5ec46e2b2a76221deeabf0 Mon Sep 17 00:00:00 2001 From: Daan Leijen Date: Thu, 9 Jan 2025 19:31:05 -0800 Subject: [PATCH] fix library name for pkg config files (and to avoid extra patches in vcpkg) --- CMakeLists.txt | 33 +++++++++++++++++++-------------- mimalloc.pc.in | 8 ++++---- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b5a0742d..cf4bdfde 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -580,7 +580,15 @@ endif() # static library if (MI_BUILD_STATIC) + if(WIN32) + # When building both static and shared libraries on Windows, a static library should use a + # different output name to avoid the conflict with the import library of a shared one. + string(REPLACE "mimalloc" "mimalloc-static" mi_static_libname ${mi_basename}) + else() + set(mi_static_libname "${mi_basename}") + endif() add_library(mimalloc-static STATIC ${mi_sources}) + set_target_properties(mimalloc-static PROPERTIES OUTPUT_NAME ${mi_static_libname}) set_property(TARGET mimalloc-static PROPERTY POSITION_INDEPENDENT_CODE ON) target_compile_definitions(mimalloc-static PRIVATE ${mi_defines} MI_STATIC_LIB) target_compile_options(mimalloc-static PRIVATE ${mi_cflags} ${mi_cflags_static}) @@ -589,15 +597,6 @@ if (MI_BUILD_STATIC) $ $ ) - if(WIN32) - # When building both static and shared libraries on Windows, a static library should use a - # different output name to avoid the conflict with the import library of a shared one. - string(REPLACE "mimalloc" "mimalloc-static" mi_output_name ${mi_basename}) - set_target_properties(mimalloc-static PROPERTIES OUTPUT_NAME ${mi_output_name}) - else() - set_target_properties(mimalloc-static PROPERTIES OUTPUT_NAME ${mi_basename}) - endif() - install(TARGETS mimalloc-static EXPORT mimalloc DESTINATION ${mi_install_objdir} LIBRARY) install(EXPORT mimalloc DESTINATION ${mi_install_cmakedir}) endif() @@ -640,18 +639,24 @@ if (MI_BUILD_OBJECT) endif() # pkg-config file support -set(pc_libraries "") +set(mi_pc_libraries "") foreach(item IN LISTS mi_libraries) if(item MATCHES " *[-].*") - set(pc_libraries "${pc_libraries} ${item}") + set(mi_pc_libraries "${mi_pc_libraries} ${item}") else() - set(pc_libraries "${pc_libraries} -l${item}") + set(mi_pc_libraries "${mi_pc_libraries} -l${item}") endif() endforeach() +if(MI_BUILD_STATIC) # prefer static linking with pkg-config + set(mi_pc_libname "${mi_static_libname}") +else() + set(mi_pc_libname "${mi_basename}") +endif() + include("cmake/JoinPaths.cmake") -join_paths(includedir_for_pc_file "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}") -join_paths(libdir_for_pc_file "\${prefix}" "${CMAKE_INSTALL_LIBDIR}") +join_paths(mi_pc_includedir "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}") +join_paths(mi_pc_libdir "\${prefix}" "${CMAKE_INSTALL_LIBDIR}") configure_file(mimalloc.pc.in mimalloc.pc @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/mimalloc.pc" diff --git a/mimalloc.pc.in b/mimalloc.pc.in index 36da2038..7c9e8a37 100644 --- a/mimalloc.pc.in +++ b/mimalloc.pc.in @@ -1,11 +1,11 @@ prefix=@CMAKE_INSTALL_PREFIX@ -libdir=@libdir_for_pc_file@ -includedir=@includedir_for_pc_file@ +libdir=@mi_pc_libdir@ +includedir=@mi_pc_includedir@ Name: @PROJECT_NAME@ Description: A compact general purpose allocator with excellent performance Version: @PACKAGE_VERSION@ URL: https://github.com/microsoft/mimalloc/ -Libs: -L${libdir} -lmimalloc -Libs.private: @pc_libraries@ +Libs: -L${libdir} -l@mi_pc_libname@ +Libs.private: @mi_pc_libraries@ Cflags: -I${includedir}