Skip to content

Commit e2c095f

Browse files
committed
fix installation directories on unix to use /lib, /include, /share; fix issues #399, #223, and #89
1 parent 3417291 commit e2c095f

File tree

3 files changed

+33
-19
lines changed

3 files changed

+33
-19
lines changed

CMakeLists.txt

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -208,11 +208,13 @@ endif()
208208
# -----------------------------------------------------------------------------
209209

210210
if (MI_INSTALL_TOPLEVEL)
211-
set(mi_install_dir "")
212-
set(mi_install_libdir "lib")
211+
set(mi_install_libdir "lib")
212+
set(mi_install_incdir "include")
213+
set(mi_install_cmakedir "cmake")
213214
else()
214-
set(mi_install_dir "lib/mimalloc-${mi_version}")
215-
set(mi_install_libdir "${mi_install_dir}")
215+
set(mi_install_libdir "lib/mimalloc-${mi_version}")
216+
set(mi_install_incdir "include/mimalloc-${mi_version}")
217+
set(mi_install_cmakedir "share/mimalloc-${mi_version}/cmake")
216218
endif()
217219

218220
if(MI_SECURE)
@@ -246,7 +248,7 @@ if(MI_USE_CXX)
246248
else()
247249
message(STATUS "Compiler : ${CMAKE_C_COMPILER}")
248250
endif()
249-
message(STATUS "Install directory: ${mi_install_dir}")
251+
message(STATUS "Version : ${mi_version}")
250252
message(STATUS "Build targets : ${mi_build_targets}")
251253
message(STATUS "")
252254

@@ -263,7 +265,7 @@ if(MI_BUILD_SHARED)
263265
target_link_libraries(mimalloc PUBLIC ${mi_libraries})
264266
target_include_directories(mimalloc PUBLIC
265267
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
266-
$<INSTALL_INTERFACE:${mi_install_dir}/include>
268+
$<INSTALL_INTERFACE:${mi_install_incdir}>
267269
)
268270
if(WIN32)
269271
# On windows copy the mimalloc redirection dll too.
@@ -280,7 +282,7 @@ if(MI_BUILD_SHARED)
280282
endif()
281283

282284
install(TARGETS mimalloc EXPORT mimalloc DESTINATION ${mi_install_libdir} LIBRARY)
283-
install(EXPORT mimalloc DESTINATION ${mi_install_dir}/cmake)
285+
install(EXPORT mimalloc DESTINATION ${mi_install_cmakedir})
284286
endif()
285287

286288
# static library
@@ -292,7 +294,7 @@ if (MI_BUILD_STATIC)
292294
target_link_libraries(mimalloc-static PUBLIC ${mi_libraries})
293295
target_include_directories(mimalloc-static PUBLIC
294296
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
295-
$<INSTALL_INTERFACE:${mi_install_dir}/include>
297+
$<INSTALL_INTERFACE:${mi_install_incdir}>
296298
)
297299
if(WIN32)
298300
# When building both static and shared libraries on Windows, a static library should use a
@@ -307,18 +309,21 @@ if (MI_BUILD_STATIC)
307309
endif()
308310

309311
# install include files
310-
install(FILES include/mimalloc.h DESTINATION ${mi_install_dir}/include)
311-
install(FILES include/mimalloc-override.h DESTINATION ${mi_install_dir}/include)
312-
install(FILES include/mimalloc-new-delete.h DESTINATION ${mi_install_dir}/include)
313-
install(FILES cmake/mimalloc-config.cmake DESTINATION ${mi_install_dir}/cmake)
314-
install(FILES cmake/mimalloc-config-version.cmake DESTINATION ${mi_install_dir}/cmake)
312+
install(FILES include/mimalloc.h DESTINATION ${mi_install_incdir})
313+
install(FILES include/mimalloc-override.h DESTINATION ${mi_install_incdir})
314+
install(FILES include/mimalloc-new-delete.h DESTINATION ${mi_install_incdir})
315+
install(FILES cmake/mimalloc-config.cmake DESTINATION ${mi_install_cmakedir})
316+
install(FILES cmake/mimalloc-config-version.cmake DESTINATION ${mi_install_cmakedir})
315317

316318
if(NOT WIN32 AND MI_BUILD_SHARED AND NOT MI_INSTALL_TOPLEVEL)
317319
# install a symlink in the /usr/local/lib to the versioned library
320+
# note: use delayed prefix expansion as \${CMAKE_INSTALL_PREFIX}
318321
set(mi_symlink "${CMAKE_SHARED_MODULE_PREFIX}${mi_basename}${CMAKE_SHARED_LIBRARY_SUFFIX}")
319322
set(mi_soname "mimalloc-${mi_version}/${mi_symlink}.${mi_version}")
320323
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${mi_soname} ${mi_symlink} WORKING_DIRECTORY \${CMAKE_INSTALL_PREFIX}/lib)")
321324
install(CODE "MESSAGE(\"-- Symbolic link: \${CMAKE_INSTALL_PREFIX}/lib/${mi_symlink} -> ${mi_soname}\")")
325+
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${mi_soname} ${mi_symlink}.${mi_version} WORKING_DIRECTORY \${CMAKE_INSTALL_PREFIX}/lib)")
326+
install(CODE "MESSAGE(\"-- Symbolic link: \${CMAKE_INSTALL_PREFIX}/lib/${mi_symlink}.${mi_version} -> ${mi_soname}\")")
322327
endif()
323328

324329
# single object file for more predictable static overriding
@@ -329,11 +334,11 @@ if (MI_BUILD_OBJECT)
329334
target_compile_options(mimalloc-obj PRIVATE ${mi_cflags})
330335
target_include_directories(mimalloc-obj PUBLIC
331336
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
332-
$<INSTALL_INTERFACE:${mi_install_dir}/include>
337+
$<INSTALL_INTERFACE:${mi_install_incdir}>
333338
)
334339

335340
# the following seems to lead to cmake warnings/errors on some systems, disable for now :-(
336-
# install(TARGETS mimalloc-obj EXPORT mimalloc DESTINATION ${mi_install_dir})
341+
# install(TARGETS mimalloc-obj EXPORT mimalloc DESTINATION ${mi_install_libdir})
337342

338343
# the FILES expression can also be: $<TARGET_OBJECTS:mimalloc-obj>
339344
# but that fails cmake versions less than 3.10 so we leave it as is for now

cmake/mimalloc-config.cmake

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,11 @@
11
include(${CMAKE_CURRENT_LIST_DIR}/mimalloc.cmake)
2-
get_filename_component(MIMALLOC_TARGET_DIR "${CMAKE_CURRENT_LIST_DIR}" PATH)
2+
get_filename_component(MIMALLOC_SHARE_DIR "${CMAKE_CURRENT_LIST_DIR}" PATH) # one up from the cmake dir, e.g. /usr/local/share/mimalloc-2.0
3+
if (MIMALLOC_SHARE_DIR MATCHES "/share/")
4+
string(REPLACE "/share/" "/lib/" MIMALLOC_LIBRARY_DIR ${MIMALLOC_SHARE_DIR})
5+
string(REPLACE "/share/" "/include/" MIMALLOC_INCLUDE_DIR ${MIMALLOC_SHARE_DIR})
6+
else()
7+
# if MI_INSTALL_TOPLEVEL==ON
8+
set(MIMALLOC_LIBRARY_DIR "${MIMALLOC_SHARE_DIR}/lib")
9+
set(MIMALLOC_INCLUDE_DIR "${MIMALLOC_SHARE_DIR}/include")
10+
endif()
11+
set(MIMALLOC_TARGET_DIR "${MIMALLOC_LIBRARY_DIR}") # legacy

test/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ endif()
1414

1515
# Import mimalloc (if installed)
1616
find_package(mimalloc 1.7 REQUIRED NO_SYSTEM_ENVIRONMENT_PATH)
17-
message(STATUS "Found mimalloc installed at: ${MIMALLOC_TARGET_DIR}")
17+
message(STATUS "Found mimalloc installed at: ${MIMALLOC_LIBRARY_DIR}")
1818

1919
# overriding with a dynamic library
2020
add_executable(dynamic-override main-override.c)
@@ -26,8 +26,8 @@ target_link_libraries(dynamic-override-cxx PUBLIC mimalloc)
2626

2727
# overriding with a static object file works reliable as the symbols in the
2828
# object file have priority over those in library files
29-
add_executable(static-override-obj main-override.c ${MIMALLOC_TARGET_DIR}/mimalloc.o)
30-
target_include_directories(static-override-obj PUBLIC ${MIMALLOC_TARGET_DIR}/include)
29+
add_executable(static-override-obj main-override.c ${MIMALLOC_LIBRARY_DIR}/mimalloc.o)
30+
target_include_directories(static-override-obj PUBLIC ${MIMALLOC_INCLUDE_DIR})
3131
target_link_libraries(static-override-obj PUBLIC pthread)
3232

3333

0 commit comments

Comments
 (0)