1 find_package(Sanitizers)
3 if(NOT COMMAND add_sanitizers)
4 message(WARNING "Sanitizers CMake module not found, sanitizer support is not available")
5 # defining a no-op function to avoid CMake errors
6 function(add_sanitizers ...)
11 # allow setting different path for mksquashfs after installation
12 set(AUXILIARY_FILES_DESTINATION "lib/appimagekit" CACHE STRING "Target install directory for mksquashfs")
15 # the runtime build configuration is quite long, therefore it's managed in a separate CMake script
16 include(build-runtime.cmake)
19 add_executable(appimagetool
25 target_include_directories(appimagetool
26 PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/>
27 INTERFACE $<INSTALL_INTERFACE:include/>
30 # trick: list libraries on which imported static ones depend on in the PUBLIC section
31 # CMake then adds them after the PRIVATE ones in the linker command
32 target_link_libraries(appimagetool
42 target_compile_definitions(appimagetool
43 PRIVATE -D_FILE_OFFSET_BITS=64
44 PRIVATE -DGIT_COMMIT="${GIT_COMMIT}"
45 PRIVATE -DBUILD_NUMBER="${BUILD_NUMBER}"
46 PRIVATE -DBUILD_DATE="${DATE}"
47 PRIVATE -DENABLE_BINRELOC
50 target_include_directories(appimagetool
51 PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/>
52 INTERFACE $<INSTALL_INTERFACE:include/>
55 if(AUXILIARY_FILES_DESTINATION)
56 message(STATUS "Installing auxiliary files in path: ${AUXILIARY_FILES_DESTINATION}")
57 target_compile_definitions(appimagetool
58 PRIVATE -DAUXILIARY_FILES_DESTINATION="${AUXILIARY_FILES_DESTINATION}"
62 add_sanitizers(appimagetool)
65 add_executable(AppRun AppRun.c)
67 target_compile_definitions(AppRun
68 PRIVATE -D_FILE_OFFSET_BITS=64
69 PRIVATE -DGIT_COMMIT="${GIT_COMMIT}"
70 PRIVATE -DENABLE_BINRELOC
73 add_sanitizers(AppRun)
76 if (NOT TARGET libssl)
77 message(WARNING "Could not find suitable libssl, skipping build of validate and digest")
79 add_executable(validate validate.c)
81 target_link_libraries(validate
87 target_include_directories(validate
88 PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/>
89 INTERFACE $<INSTALL_INTERFACE:include/
93 add_executable(digest digest.c)
95 target_link_libraries(digest
100 add_sanitizers(digest)
104 # digest_md5 demo application
105 # can be used to verify AppImages' MD5 digest
106 add_executable(digest_md5 EXCLUDE_FROM_ALL digest_md5.c)
108 target_include_directories(digest_md5
109 PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/>
110 INTERFACE $<INSTALL_INTERFACE:include/>
113 target_link_libraries(digest_md5
115 PRIVATE libappimage_shared
120 if(AUXILIARY_FILES_DESTINATION)
122 PROGRAMS ${mksquashfs_INSTALL_DIR}/mksquashfs ${CMAKE_CURRENT_BINARY_DIR}/runtime
123 DESTINATION ${AUXILIARY_FILES_DESTINATION}
124 COMPONENT applications
128 PROGRAMS ${mksquashfs_INSTALL_DIR}/mksquashfs ${CMAKE_CURRENT_BINARY_DIR}/runtime
130 COMPONENT applications
134 set(optional_targets "")
135 foreach(target validate digest)
137 list(APPEND optional_targets ${target})
142 TARGETS AppRun appimagetool ${optional_targets}
143 RUNTIME DESTINATION bin COMPONENT applications
144 LIBRARY DESTINATION lib COMPONENT applications
145 ARCHIVE DESTINATION lib/static COMPONENT applications
146 INCLUDES DESTINATION include COMPONENT applications
149 # Configure appimagetool component
151 TARGETS appimagetool AppRun
152 RUNTIME DESTINATION bin COMPONENT appimagetool EXCLUDE_FROM_ALL
155 install(FILES "${PROJECT_SOURCE_DIR}/resources/appimagetool.desktop" DESTINATION share/applications COMPONENT appimagetool EXCLUDE_FROM_ALL)
156 install(FILES "${PROJECT_SOURCE_DIR}/resources/appimagetool.svg" DESTINATION share/icons/hicolor/scalable/apps COMPONENT appimagetool EXCLUDE_FROM_ALL)
157 install(FILES "${PROJECT_SOURCE_DIR}/resources/usr/share/metainfo/appimagetool.appdata.xml" DESTINATION share/metainfo COMPONENT appimagetool EXCLUDE_FROM_ALL)