if (g_pattern_match_simple(pattern, entry))
[appimagekit/gsi.git] / src / CMakeLists.txt
blob85a9c0b39cc312d41c23daccfbfef15cb3970055
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 ...)
7     endfunction()
8 endif()
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
20     appimagetool.c
21     binreloc.c
22     runtime_embed.o
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
33     ${CMAKE_DL_LIBS}
34     libsquashfuse
35     xdg-basedir
36     libappimage_shared
37     libglib
38     libzlib
39     xz
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}"
59     )
60 endif()
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")
78 else()
79     add_executable(validate validate.c)
81     target_link_libraries(validate
82         libappimage_shared
83         libglib
84         libssl
85     )
87     target_include_directories(validate
88         PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/>
89         INTERFACE $<INSTALL_INTERFACE:include/
90     )
93     add_executable(digest digest.c)
95     target_link_libraries(digest
96         libappimage_shared
97         libssl
98     )
100     add_sanitizers(digest)
101 endif()
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
114     PRIVATE libglib
115     PRIVATE libappimage_shared
119 # install binaries
120 if(AUXILIARY_FILES_DESTINATION)
121     install(
122         PROGRAMS ${mksquashfs_INSTALL_DIR}/mksquashfs ${CMAKE_CURRENT_BINARY_DIR}/runtime
123         DESTINATION ${AUXILIARY_FILES_DESTINATION}
124         COMPONENT applications
125     )
126 else()
127     install(
128         PROGRAMS ${mksquashfs_INSTALL_DIR}/mksquashfs ${CMAKE_CURRENT_BINARY_DIR}/runtime
129         DESTINATION bin
130         COMPONENT applications
131     )
132 endif()
134 set(optional_targets "")
135 foreach(target validate digest)
136     if(TARGET ${target})
137         list(APPEND optional_targets ${target})
138     endif()
139 endforeach()
141 install(
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
150 install(
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)