2022-02-21 21:47:56 +00:00
include ( FetchContent )
2022-08-04 18:37:57 +00:00
if ( IMHEX_STRIP_RELEASE )
set ( CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s" )
set ( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s" )
2022-07-31 15:29:57 +00:00
2022-08-04 18:37:57 +00:00
if ( CMAKE_BUILD_TYPE STREQUAL "Release" )
set ( CPACK_STRIP_FILES TRUE )
endif ( )
2022-07-31 15:29:57 +00:00
endif ( )
2021-01-22 22:27:01 +00:00
macro ( addVersionDefines )
2022-08-03 14:36:21 +00:00
if ( NOT IMHEX_VERSION )
message ( FATAL_ERROR "IMHEX_VERSION is not defined" )
endif ( )
2021-01-22 22:27:01 +00:00
if ( IS_DIRECTORY "${CMAKE_SOURCE_DIR}/.git" )
# Get the current working branch
execute_process (
C O M M A N D g i t r e v - p a r s e - - a b b r e v - r e f H E A D
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ S O U R C E _ D I R }
O U T P U T _ V A R I A B L E G I T _ B R A N C H
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E
)
# Get the latest abbreviated commit hash of the working branch
execute_process (
C O M M A N D g i t l o g - 1 - - f o r m a t = % h
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ S O U R C E _ D I R }
O U T P U T _ V A R I A B L E G I T _ C O M M I T _ H A S H
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E
)
2022-01-23 22:28:56 +00:00
add_compile_definitions ( GIT_COMMIT_HASH= "${GIT_COMMIT_HASH}" GIT_BRANCH= "${GIT_BRANCH}" )
endif ( )
2021-01-22 22:27:01 +00:00
2021-04-12 18:36:16 +00:00
set ( CMAKE_RC_FLAGS "${CMAKE_RC_FLAGS} -DPROJECT_VERSION_MAJOR=${PROJECT_VERSION_MAJOR} -DPROJECT_VERSION_MINOR=${PROJECT_VERSION_MINOR} -DPROJECT_VERSION_PATCH=${PROJECT_VERSION_PATCH} " )
2022-01-23 22:28:56 +00:00
2022-08-07 21:50:49 +00:00
set ( IMHEX_VERSION_STRING ${ IMHEX_VERSION } )
2022-02-17 10:42:56 +00:00
if ( CMAKE_BUILD_TYPE STREQUAL "Release" )
2022-08-07 21:50:49 +00:00
set ( IMHEX_VERSION_STRING ${ IMHEX_VERSION_STRING } )
2022-02-17 10:42:56 +00:00
elseif ( CMAKE_BUILD_TYPE STREQUAL "Debug" )
2022-08-07 21:50:49 +00:00
set ( IMHEX_VERSION_STRING ${ IMHEX_VERSION_STRING } -Debug )
2022-02-19 17:02:10 +00:00
add_compile_definitions ( DEBUG )
2022-02-17 10:42:56 +00:00
elseif ( CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo" )
2022-08-07 21:50:49 +00:00
set ( IMHEX_VERSION_STRING ${ IMHEX_VERSION_STRING } -RelWithDebInfo )
2022-02-17 10:42:56 +00:00
elseif ( CMAKE_BUILD_TYPE STREQUAL "MinSizeRel" )
2022-08-07 21:50:49 +00:00
set ( IMHEX_VERSION_STRING ${ IMHEX_VERSION_STRING } -MinSizeRel )
2022-02-17 10:42:56 +00:00
endif ( )
2022-01-23 22:28:56 +00:00
2022-02-17 10:42:56 +00:00
add_compile_definitions ( IMHEX_VERSION= "${IMHEX_VERSION_STRING}" )
2022-01-23 22:28:56 +00:00
2021-01-22 22:27:01 +00:00
endmacro ( )
2021-12-14 19:16:59 +00:00
macro ( configurePython )
2021-01-22 22:27:01 +00:00
set ( CMAKE_FIND_PACKAGE_SORT_ORDER NATURAL )
set ( CMAKE_FIND_PACKAGE_SORT_DIRECTION DEC )
# Enforce that we use non system Python 3 on macOS.
set ( Python_FIND_FRAMEWORK NEVER )
find_package ( Python COMPONENTS Development REQUIRED )
if ( Python_VERSION LESS 3 )
message ( STATUS ${ PYTHON_VERSION_MAJOR_MINOR } )
message ( FATAL_ERROR "No valid version of Python 3 was found." )
endif ( )
string ( REPLACE "." ";" PYTHON_VERSION_MAJOR_MINOR ${ Python_VERSION } )
2021-02-15 11:44:38 +00:00
list ( LENGTH PYTHON_VERSION_MAJOR_MINOR PYTHON_VERSION_COMPONENT_COUNT )
if ( PYTHON_VERSION_COMPONENT_COUNT EQUAL 3 )
list ( REMOVE_AT PYTHON_VERSION_MAJOR_MINOR 2 )
endif ( )
2021-01-22 22:27:01 +00:00
list ( JOIN PYTHON_VERSION_MAJOR_MINOR "." PYTHON_VERSION_MAJOR_MINOR )
2022-01-23 22:28:56 +00:00
add_compile_definitions ( PYTHON_VERSION_MAJOR_MINOR= "${PYTHON_VERSION_MAJOR_MINOR}" )
2021-01-22 22:27:01 +00:00
endmacro ( )
# Detect current OS / System
macro ( detectOS )
if ( WIN32 )
2022-01-23 22:28:56 +00:00
add_compile_definitions ( OS_WINDOWS )
2021-03-01 07:56:49 +00:00
set ( CMAKE_INSTALL_BINDIR "." )
set ( CMAKE_INSTALL_LIBDIR "." )
set ( PLUGINS_INSTALL_LOCATION "plugins" )
2022-08-25 22:21:17 +00:00
SET ( IMHEX_USE_BUNDLED_CA ON )
2022-01-23 22:28:56 +00:00
elseif ( APPLE )
add_compile_definitions ( OS_MACOS )
2021-03-01 07:56:49 +00:00
set ( CMAKE_INSTALL_BINDIR "." )
set ( CMAKE_INSTALL_LIBDIR "." )
set ( PLUGINS_INSTALL_LOCATION "plugins" )
2022-06-25 10:19:59 +00:00
enable_language ( OBJC )
enable_language ( OBJCXX )
2022-01-23 22:28:56 +00:00
elseif ( UNIX AND NOT APPLE )
add_compile_definitions ( OS_LINUX )
2022-08-04 18:37:57 +00:00
include ( GNUInstallDirs )
if ( IMHEX_PLUGINS_IN_SHARE )
set ( PLUGINS_INSTALL_LOCATION "share/imhex/plugins" )
else ( )
set ( PLUGINS_INSTALL_LOCATION "${CMAKE_INSTALL_LIBDIR}/imhex/plugins" )
# Warning : Do not work with portable versions such as appimage (because the path is hardcoded)
add_compile_definitions ( SYSTEM_PLUGINS_LOCATION= "${CMAKE_INSTALL_FULL_LIBDIR}/imhex" ) # "plugins" will be appended from the app
endif ( )
2022-08-25 22:21:17 +00:00
2022-01-23 22:28:56 +00:00
else ( )
2021-01-22 22:27:01 +00:00
message ( FATAL_ERROR "Unknown / unsupported system!" )
endif ( )
2022-08-25 22:21:17 +00:00
if ( IMHEX_USE_BUNDLED_CA )
add_compile_definitions ( IMHEX_USE_BUNDLED_CA )
endif ( )
2021-01-22 22:27:01 +00:00
endmacro ( )
# Detect 32 vs. 64 bit system
macro ( detectArch )
if ( CMAKE_SIZEOF_VOID_P EQUAL 8 )
2022-01-23 22:28:56 +00:00
add_compile_definitions ( ARCH_64_BIT )
2021-01-22 22:27:01 +00:00
elseif ( CMAKE_SIZEOF_VOID_P EQUAL 4 )
2022-01-23 22:28:56 +00:00
add_compile_definitions ( ARCH_32_BIT )
2021-01-22 22:27:01 +00:00
endif ( )
endmacro ( )
2022-01-14 23:14:12 +00:00
macro ( configurePackingResources )
2021-01-22 22:27:01 +00:00
option ( CREATE_PACKAGE "Create a package with CPack" OFF )
if ( APPLE )
option ( CREATE_BUNDLE "Create a bundle on macOS" OFF )
endif ( )
if ( WIN32 )
2022-02-06 21:29:16 +00:00
set ( APPLICATION_TYPE )
2022-02-08 08:32:38 +00:00
set ( IMHEX_ICON "${IMHEX_BASE_FOLDER}/resources/resource.rc" )
2021-04-18 18:24:42 +00:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--allow-multiple-definition" )
2021-11-28 12:43:44 +00:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-subsystem,windows" )
2021-01-22 22:27:01 +00:00
if ( CREATE_PACKAGE )
set ( CPACK_GENERATOR "WIX" )
2022-08-17 13:50:11 +00:00
set ( CPACK_PACKAGE_NAME "imhex" )
2021-05-24 17:09:32 +00:00
set ( CPACK_PACKAGE_VENDOR "WerWolv" )
2021-01-22 22:27:01 +00:00
set ( CPACK_WIX_UPGRADE_GUID "05000E99-9659-42FD-A1CF-05C554B39285" )
2022-08-10 20:47:21 +00:00
set ( CPACK_WIX_PRODUCT_ICON "${PROJECT_SOURCE_DIR}/resources/dist/windows/icon.ico" )
set ( CPACK_WIX_UI_BANNER "${PROJECT_SOURCE_DIR}/resources/dist/windows/wix_banner.png" )
set ( CPACK_WIX_UI_DIALOG "${PROJECT_SOURCE_DIR}/resources/dist/windows/wix_dialog.png" )
set ( CPACK_WIX_CULTURES "en-US;de-DE;ja-JP;it-IT;pt-BR;zh-CN;zh-TW" )
2021-01-22 22:27:01 +00:00
set ( CPACK_PACKAGE_INSTALL_DIRECTORY "ImHex" )
2022-01-14 23:14:12 +00:00
set_property ( INSTALL "$<TARGET_FILE_NAME:main>"
2021-01-22 22:27:01 +00:00
P R O P E R T Y C P A C K _ S T A R T _ M E N U _ S H O R T C U T S " I m H e x "
)
2022-08-10 20:47:21 +00:00
set ( CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/resources/dist/windows/LICENSE.rtf" )
2021-01-22 22:27:01 +00:00
endif ( )
elseif ( APPLE )
2022-08-10 20:47:21 +00:00
set ( IMHEX_ICON "${IMHEX_BASE_FOLDER}/resources/dist/macos/AppIcon.icns" )
2021-01-22 22:27:01 +00:00
if ( CREATE_BUNDLE )
2022-02-06 21:29:16 +00:00
set ( APPLICATION_TYPE MACOSX_BUNDLE )
set_source_files_properties ( ${ IMHEX_ICON } PROPERTIES MACOSX_PACKAGE_LOCATION "Resources" )
2021-01-22 22:27:01 +00:00
set ( MACOSX_BUNDLE_ICON_FILE "AppIcon.icns" )
set ( MACOSX_BUNDLE_INFO_STRING "WerWolv" )
set ( MACOSX_BUNDLE_BUNDLE_NAME "ImHex" )
2022-08-10 20:47:21 +00:00
set ( MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/resources/dist/macos/Info.plist.in" )
2021-01-22 22:27:01 +00:00
set ( MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}" )
2022-06-23 22:27:35 +00:00
set ( MACOSX_BUNDLE_GUI_IDENTIFIER "net.WerWolv.ImHex" )
2021-01-22 22:27:01 +00:00
set ( MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJECT_VERSION}-${GIT_COMMIT_HASH}" )
set ( MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}" )
2022-08-10 20:47:21 +00:00
string ( TIMESTAMP CURR_YEAR "%Y" )
set ( MACOSX_BUNDLE_COPYRIGHT "Copyright © 2020 - ${CURR_YEAR} WerWolv. All rights reserved." )
2021-01-22 22:27:01 +00:00
if ( "${CMAKE_GENERATOR}" STREQUAL "Xcode" )
2022-08-11 08:50:25 +00:00
set ( IMHEX_BUNDLE_PATH "${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/ImHex.app" )
2021-01-22 22:27:01 +00:00
else ( )
2022-08-11 08:50:25 +00:00
set ( IMHEX_BUNDLE_PATH "${CMAKE_BINARY_DIR}/ImHex.app" )
2021-01-22 22:27:01 +00:00
endif ( )
endif ( )
endif ( )
endmacro ( )
macro ( createPackage )
2022-08-06 22:30:03 +00:00
set ( LIBRARY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE )
2021-01-22 22:27:01 +00:00
file ( MAKE_DIRECTORY "plugins" )
foreach ( plugin IN LISTS PLUGINS )
2021-05-29 21:06:36 +00:00
add_subdirectory ( "plugins/${plugin}" )
2021-05-29 19:52:18 +00:00
if ( TARGET ${ plugin } )
2021-10-16 09:37:29 +00:00
get_target_property ( IS_RUST_PROJECT ${ plugin } RUST_PROJECT )
2022-06-16 13:42:27 +00:00
set_target_properties ( ${ plugin } PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${ CMAKE_BINARY_DIR } /plugins )
set_target_properties ( ${ plugin } PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${ CMAKE_BINARY_DIR } /plugins )
2021-10-16 09:37:29 +00:00
if ( IS_RUST_PROJECT )
set_target_properties ( ${ plugin } PROPERTIES CARGO_BUILD_TARGET_DIR ${ CMAKE_BINARY_DIR } /plugins )
get_target_property ( PLUGIN_LOCATION ${ plugin } LOCATION )
2022-08-06 22:30:03 +00:00
install ( FILES "${PLUGIN_LOCATION}/../${plugin}.hexplug" DESTINATION "${PLUGINS_INSTALL_LOCATION}" PERMISSIONS ${ LIBRARY_PERMISSIONS } )
2021-10-16 09:37:29 +00:00
else ( )
if ( WIN32 )
install ( TARGETS ${ plugin } RUNTIME DESTINATION ${ PLUGINS_INSTALL_LOCATION } )
elseif ( APPLE )
if ( CREATE_BUNDLE )
2022-01-14 23:14:12 +00:00
set_target_properties ( ${ plugin } PROPERTIES LIBRARY_OUTPUT_DIRECTORY $< TARGET_FILE_DIR:main > / ${ PLUGINS_INSTALL_LOCATION } )
2021-10-16 09:37:29 +00:00
else ( )
set_target_properties ( ${ plugin } PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${ CMAKE_BINARY_DIR } /plugins )
endif ( )
2021-10-09 21:07:58 +00:00
else ( )
2021-10-16 09:37:29 +00:00
install ( TARGETS ${ plugin } LIBRARY DESTINATION ${ PLUGINS_INSTALL_LOCATION } )
2021-10-09 21:07:58 +00:00
endif ( )
2021-08-25 11:46:35 +00:00
endif ( )
2022-02-21 12:46:35 +00:00
add_dependencies ( imhex_all ${ plugin } )
2021-05-29 19:52:18 +00:00
endif ( )
2021-01-22 22:27:01 +00:00
endforeach ( )
2021-01-30 21:39:06 +00:00
2021-03-02 09:19:37 +00:00
set_target_properties ( libimhex PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${ CMAKE_BINARY_DIR } )
2021-01-22 22:27:01 +00:00
if ( WIN32 )
# Install binaries directly in the prefix, usually C:\Program Files\ImHex.
set ( CMAKE_INSTALL_BINDIR "." )
# Grab all dynamically linked dependencies.
INSTALL ( CODE "set(CMAKE_INSTALL_BINDIR \" ${ CMAKE_INSTALL_BINDIR } \")")
2021-09-12 12:33:08 +00:00
INSTALL ( CODE "get_filename_component(PY_PARENT \" ${ Python_LIBRARIES } \" DIRECTORY ) " )
2021-01-22 22:27:01 +00:00
INSTALL ( CODE "LIST(APPEND DEP_FOLDERS \${PY_PARENT})" )
install ( CODE [[
file ( GET_RUNTIME_DEPENDENCIES
2022-01-14 23:14:12 +00:00
E X E C U T A B L E S $ < T A R G E T _ F I L E : b u i l t i n > $ < T A R G E T _ F I L E : l i b i m h e x > $ < T A R G E T _ F I L E : m a i n >
2021-01-22 22:27:01 +00:00
R E S O L V E D _ D E P E N D E N C I E S _ V A R _ r _ d e p s
U N R E S O L V E D _ D E P E N D E N C I E S _ V A R _ u _ d e p s
C O N F L I C T I N G _ D E P E N D E N C I E S _ P R E F I X _ c _ d e p s
2021-12-15 18:26:37 +00:00
D I R E C T O R I E S $ { D E P _ F O L D E R S } $ E N V { P A T H }
2021-01-22 22:27:01 +00:00
P O S T _ E X C L U D E _ R E G E X E S " . * s y s t e m 3 2 / . * \ \ . d l l "
)
if ( _u_deps )
2021-12-08 13:25:20 +00:00
message ( WARNING "There were unresolved dependencies for binary: \" ${ _u_deps } \"!")
2021-01-22 22:27:01 +00:00
endif ( )
if ( _c_deps_FILENAMES )
2021-12-08 13:25:20 +00:00
message ( WARNING "There were conflicting dependencies for library: \" ${ _c_deps } \"!")
2021-01-22 22:27:01 +00:00
endif ( )
foreach ( _file ${ _r_deps } )
file ( INSTALL
D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ P R E F I X } / $ { C M A K E _ I N S T A L L _ B I N D I R } "
T Y P E S H A R E D _ L I B R A R Y
F O L L O W _ S Y M L I N K _ C H A I N
F I L E S " $ { _ f i l e } "
)
endforeach ( )
2021-09-20 16:41:22 +00:00
] ] )
2022-06-23 22:27:35 +00:00
2022-08-06 22:30:03 +00:00
install ( FILES "$<TARGET_FILE:libimhex>" DESTINATION "${CMAKE_INSTALL_LIBDIR}" PERMISSIONS ${ LIBRARY_PERMISSIONS } )
2022-06-23 22:27:35 +00:00
downloadImHexPatternsFiles ( "./" )
2021-12-03 12:42:15 +00:00
elseif ( UNIX AND NOT APPLE )
2022-07-31 15:29:57 +00:00
set_target_properties ( libimhex PROPERTIES SOVERSION ${ IMHEX_VERSION } )
2022-08-06 14:03:47 +00:00
configure_file ( ${ CMAKE_CURRENT_SOURCE_DIR } /dist/DEBIAN/control.in ${ CMAKE_BINARY_DIR } /DEBIAN/control )
2022-07-31 15:29:57 +00:00
2022-08-06 14:03:47 +00:00
install ( FILES ${ CMAKE_CURRENT_SOURCE_DIR } /LICENSE DESTINATION ${ CMAKE_INSTALL_PREFIX } /share/licenses/imhex )
install ( FILES ${ CMAKE_CURRENT_SOURCE_DIR } /dist/imhex.desktop DESTINATION ${ CMAKE_INSTALL_PREFIX } /share/applications )
install ( FILES ${ CMAKE_CURRENT_SOURCE_DIR } /resources/icon.png DESTINATION ${ CMAKE_INSTALL_PREFIX } /share/pixmaps RENAME imhex.png )
2022-08-06 22:30:03 +00:00
install ( FILES "$<TARGET_FILE:libimhex>" DESTINATION "${CMAKE_INSTALL_LIBDIR}" PERMISSIONS ${ LIBRARY_PERMISSIONS } )
2022-06-30 13:11:00 +00:00
downloadImHexPatternsFiles ( "./share/imhex" )
2022-09-08 07:31:49 +00:00
# install AppStream file
install ( FILES ${ CMAKE_CURRENT_SOURCE_DIR } /dist/net.werwolv.imhex.metainfo.xml DESTINATION ${ CMAKE_INSTALL_PREFIX } /share/metainfo )
# install symlink for the old standard name
file ( CREATE_LINK net.werwolv.imhex.metainfo.xml ${ CMAKE_CURRENT_BINARY_DIR } /net.werwolv.imhex.appdata.xml SYMBOLIC )
install ( FILES ${ CMAKE_CURRENT_BINARY_DIR } /net.werwolv.imhex.appdata.xml DESTINATION ${ CMAKE_INSTALL_PREFIX } /share/metainfo )
2021-01-22 22:27:01 +00:00
endif ( )
2022-06-29 13:01:08 +00:00
2021-01-22 22:27:01 +00:00
if ( CREATE_BUNDLE )
include ( PostprocessBundle )
2022-07-31 15:29:57 +00:00
set_target_properties ( libimhex PROPERTIES SOVERSION ${ IMHEX_VERSION } )
2022-08-10 18:26:27 +00:00
set_property ( TARGET main PROPERTY MACOSX_BUNDLE_INFO_PLIST ${ MACOSX_BUNDLE_INFO_PLIST } )
2021-01-22 22:27:01 +00:00
# Fix rpath
2022-02-21 12:46:35 +00:00
add_custom_command ( TARGET imhex_all POST_BUILD COMMAND ${ CMAKE_INSTALL_NAME_TOOL } -add_rpath "@executable_path/../Frameworks/" $< TARGET_FILE:main > )
2021-01-22 22:27:01 +00:00
# FIXME: Remove this once we move/integrate the plugins directory.
2022-08-11 08:50:25 +00:00
add_custom_target ( build-time-make-plugins-directory ALL COMMAND ${ CMAKE_COMMAND } -E make_directory "${IMHEX_BUNDLE_PATH}/Contents/MacOS/plugins" )
add_custom_target ( build-time-make-resources-directory ALL COMMAND ${ CMAKE_COMMAND } -E make_directory "${IMHEX_BUNDLE_PATH}/Contents/Resources" )
2022-02-06 21:29:16 +00:00
2022-08-11 08:50:25 +00:00
downloadImHexPatternsFiles ( "${IMHEX_BUNDLE_PATH}/Contents/MacOS" )
2022-06-23 22:27:35 +00:00
2022-08-11 08:50:25 +00:00
install ( FILES ${ IMHEX_ICON } DESTINATION "${IMHEX_BUNDLE_PATH}/Contents/Resources" )
2022-06-23 22:27:35 +00:00
install ( TARGETS main BUNDLE DESTINATION "." )
2022-08-11 08:50:25 +00:00
install ( FILES $< TARGET_FILE:main > DESTINATION "${IMHEX_BUNDLE_PATH}" )
2021-01-22 22:27:01 +00:00
# Update library references to make the bundle portable
2022-02-21 12:46:35 +00:00
postprocess_bundle ( imhex_all main )
2021-01-22 22:27:01 +00:00
# Enforce DragNDrop packaging.
set ( CPACK_GENERATOR "DragNDrop" )
else ( )
2022-01-14 23:14:12 +00:00
install ( TARGETS main RUNTIME DESTINATION ${ CMAKE_INSTALL_BINDIR } )
2021-01-22 22:27:01 +00:00
endif ( )
if ( CREATE_PACKAGE )
2022-08-10 17:18:32 +00:00
set ( CPACK_BUNDLE_NAME "ImHex" )
2022-08-10 20:47:21 +00:00
set ( CPACK_BUNDLE_ICON "${CMAKE_SOURCE_DIR}/resources/dist/macos/AppIcon.icns" )
2022-08-10 17:18:32 +00:00
set ( CPACK_BUNDLE_PLIST "${CMAKE_BINARY_DIR}/ImHex.app/Contents/Info.plist" )
2021-01-22 22:27:01 +00:00
include ( CPack )
endif ( )
endmacro ( )
function ( JOIN OUTPUT GLUE )
set ( _TMP_RESULT "" )
set ( _GLUE "" ) # effective glue is empty at the beginning
foreach ( arg ${ ARGN } )
set ( _TMP_RESULT "${_TMP_RESULT}${_GLUE}${arg}" )
set ( _GLUE "${GLUE}" )
endforeach ( )
set ( ${ OUTPUT } "${_TMP_RESULT}" PARENT_SCOPE )
endfunction ( )
macro ( setDefaultBuiltTypeIfUnset )
if ( NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES )
set ( CMAKE_BUILD_TYPE "Release" CACHE STRING "Using Release build type as it was left unset" FORCE )
set_property ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" )
endif ( )
2021-12-17 07:38:25 +00:00
endmacro ( )
2022-07-27 06:27:38 +00:00
function ( loadVersion version )
2022-09-06 08:43:43 +00:00
set ( VERSION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" )
set_property ( DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${ VERSION_FILE } )
file ( READ "${VERSION_FILE}" read_version )
2022-11-29 08:44:47 +00:00
string ( STRIP ${ read_version } read_version )
2022-07-27 06:27:38 +00:00
set ( ${ version } ${ read_version } PARENT_SCOPE )
endfunction ( )
2022-08-01 12:35:25 +00:00
function ( detectBadClone )
if ( IMHEX_IGNORE_BAD_CLONE )
return ( )
endif ( )
2022-02-01 17:09:40 +00:00
file ( GLOB EXTERNAL_DIRS "lib/external/*" )
2021-12-17 07:38:25 +00:00
foreach ( EXTERNAL_DIR ${ EXTERNAL_DIRS } )
file ( GLOB RESULT "${EXTERNAL_DIR}/*" )
list ( LENGTH RESULT ENTRY_COUNT )
if ( ENTRY_COUNT LESS_EQUAL 1 )
message ( FATAL_ERROR "External dependency ${EXTERNAL_DIR} is empty!\nMake sure to correctly clone ImHex using the --recurse-submodules git option or initialize the submodules manually." )
endif ( )
endforeach ( )
2022-08-01 12:35:25 +00:00
endfunction ( )
2022-02-21 21:47:56 +00:00
2022-08-02 09:59:29 +00:00
function ( verifyCompiler )
if ( IMHEX_IGNORE_BAD_COMPILER )
return ( )
endif ( )
2022-08-07 21:12:10 +00:00
if ( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "12.0.0" )
message ( FATAL_ERROR "ImHex requires GCC 12.0.0 or newer. Please use the latest GCC version." )
elseif ( CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "14.0.0" )
message ( FATAL_ERROR "ImHex requires Clang 14.0.0 or newer. Please use the latest Clang version." )
2022-08-25 22:18:08 +00:00
elseif ( NOT ( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" ) )
2022-08-07 21:12:10 +00:00
message ( FATAL_ERROR "ImHex can only be compiled with GCC or Clang. ${CMAKE_CXX_COMPILER_ID} is not supported." )
2022-08-02 09:59:29 +00:00
endif ( )
endfunction ( )
2022-07-27 06:45:33 +00:00
macro ( setVariableInParent variable value )
get_directory_property ( hasParent PARENT_DIRECTORY )
if ( hasParent )
2022-08-03 14:36:21 +00:00
set ( ${ variable } "${value}" PARENT_SCOPE )
2022-07-27 06:45:33 +00:00
else ( )
set ( ${ variable } "${value}" )
endif ( )
endmacro ( )
2022-02-21 21:47:56 +00:00
2022-06-23 22:27:35 +00:00
function ( downloadImHexPatternsFiles dest )
2022-07-08 12:17:22 +00:00
if ( NOT IMHEX_OFFLINE_BUILD )
2022-07-18 18:02:12 +00:00
if ( IMHEX_PATTERNS_PULL_MASTER )
set ( PATTERNS_BRANCH master )
else ( )
set ( PATTERNS_BRANCH ImHex-v ${ IMHEX_VERSION } )
2022-07-18 18:13:01 +00:00
endif ( )
2022-07-18 18:02:12 +00:00
2022-07-08 12:17:22 +00:00
FetchContent_Declare (
i m h e x _ p a t t e r n s
G I T _ R E P O S I T O R Y h t t p s : / / g i t h u b . c o m / W e r W o l v / I m H e x - P a t t e r n s . g i t
G I T _ T A G m a s t e r
)
2022-02-21 21:47:56 +00:00
2022-11-25 09:37:31 +00:00
message ( STATUS "Downloading ImHex-Patterns repo branch ${PATTERNS_BRANCH}..." )
2022-07-08 12:17:22 +00:00
FetchContent_Populate ( imhex_patterns )
2022-11-25 09:37:31 +00:00
message ( STATUS "Finished downloading ImHex-Patterns" )
2022-02-21 21:47:56 +00:00
2022-09-13 20:34:33 +00:00
else ( )
# Maybe patterns are cloned to a subdirectory
set ( imhex_patterns_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ImHex-Patterns" )
endif ( )
if ( EXISTS ${ imhex_patterns_SOURCE_DIR } )
2022-07-08 12:17:22 +00:00
set ( PATTERNS_FOLDERS_TO_INSTALL constants encodings includes patterns magic )
foreach ( FOLDER ${ PATTERNS_FOLDERS_TO_INSTALL } )
install ( DIRECTORY "${imhex_patterns_SOURCE_DIR}/${FOLDER}" DESTINATION ${ dest } )
endforeach ( )
endif ( )
2022-02-21 21:47:56 +00:00
2022-08-05 06:32:08 +00:00
endfunction ( )
macro ( setupCompilerWarnings target )
2022-08-05 07:16:16 +00:00
set ( IMHEX_COMMON_FLAGS "-Wall -Wextra -Werror" )
2022-10-05 13:09:41 +00:00
set ( IMHEX_C_FLAGS "${IMHEX_COMMON_FLAGS} -Wno-restrict -Wno-stringop-overread -Wno-stringop-overflow" )
2022-08-05 07:00:03 +00:00
2022-08-05 07:16:16 +00:00
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${IMHEX_C_FLAGS}" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${IMHEX_C_FLAGS}" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} ${IMHEX_COMMON_FLAGS}" )
2022-10-14 13:35:45 +00:00
endmacro ( )
# uninstall target
macro ( setUninstallTarget )
if ( NOT TARGET uninstall )
configure_file (
" $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / c m a k e / c m a k e _ u n i n s t a l l . c m a k e . i n "
" $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / c m a k e _ u n i n s t a l l . c m a k e "
I M M E D I A T E @ O N L Y )
add_custom_target ( uninstall
C O M M A N D $ { C M A K E _ C O M M A N D } - P $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / c m a k e _ u n i n s t a l l . c m a k e )
endif ( )
2022-11-25 09:37:31 +00:00
endmacro ( )