# Copyright 2019-2020, Collabora, Ltd. # Copyright 2019, 2020, Visual Computing Lab, ISTI - Italian National Research Council # SPDX-License-Identifier: BSL-1.0 #function used to add plugins function(add_meshlab_plugin target_name) set(EXCLUDE_ALL_ARG "") if (MESHLAB_BUILD_MINI) set(EXCLUDE_ALL_ARG "EXCLUDE_FROM_ALL") endif() cmake_parse_arguments(ARG "" "" "" ${ARGN}) add_library(${target_name} MODULE ${EXCLUDE_ALL_ARG} ${ARG_UNPARSED_ARGUMENTS}) target_include_directories(${target_name} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries(${target_name} PUBLIC meshlab-common) set_property(TARGET ${target_name} PROPERTY FOLDER Plugins) set_property(TARGET ${target_name} PROPERTY RUNTIME_OUTPUT_DIRECTORY ${MESHLAB_PLUGIN_OUTPUT_DIR}) set_property(TARGET ${target_name} PROPERTY LIBRARY_OUTPUT_DIRECTORY ${MESHLAB_PLUGIN_OUTPUT_DIR}) install( TARGETS ${target_name} DESTINATION ${MESHLAB_PLUGIN_INSTALL_DIR} COMPONENT Plugins) endfunction() # function that dowloads and unzips an archive # params: # - link: download link # - dir: directory where the archive will be extracted # - name: a name used only for log function(download_and_unzip) set(download_and_unzip_SUCCESS FALSE PARENT_SCOPE) set(options) set(oneValueArgs MD5 NAME DIR) set(multiValueArgs LINK) cmake_parse_arguments(DAU "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) list(LENGTH DAU_LINK NUMBER_OF_LINKS) if(NUMBER_OF_LINKS LESS 1) message(FATAL_ERROR "Need to specify at least a download link.") endif() set(ZIP ${CMAKE_CURRENT_LIST_DIR}/tmp.zip) foreach(LINK ${DAU_LINK}) message(STATUS "Downloading ${DAU_NAME} from ${LINK}") file(DOWNLOAD ${LINK} ${ZIP}) file(MD5 ${ZIP} MD5SUM) # no md5 argument given, no checksum needed... if (NOT DEFINED DAU_MD5) set(DAU_MD5 ${MD5SUM}) endif() # manual md5 check, avoid to fail when a download fails if(MD5SUM STREQUAL ${DAU_MD5}) # download successful message(STATUS "${DAU_NAME} downloaded.") message(STATUS "Extracting ${DAU_NAME} archive...") file(ARCHIVE_EXTRACT INPUT ${ZIP} DESTINATION ${DAU_DIR}) message(STATUS "${DAU_NAME} archive extracted.") file(REMOVE ${ZIP}) set(download_and_unzip_SUCCESS TRUE PARENT_SCOPE) break() # done else() file(REMOVE ${ZIP}) message(STATUS "${DAU_NAME} download failed...") # next link in DAU_LINK list... endif() endforeach() endfunction() # make quiet some portions of cmake # usage # # set(MESSAGE_QUIET ON) # #everything here will be quiet # unset(MESSAGE_QUIET) function(message) if (NOT MESSAGE_QUIET) _message(${ARGN}) endif() endfunction() function(add_file_format_info_plist) cmake_parse_arguments(ARG "" "TARGET;FILE;FORMAT" "" ${ARGN}) string(TOUPPER ${ARG_FORMAT} FORMAT_UPPER) string(TOLOWER ${ARG_FORMAT} FORMAT_LOWER) add_custom_command( TARGET ${ARG_TARGET} POST_BUILD COMMAND plutil -insert CFBundleDocumentTypes.0 -xml 'CFBundleTypeName${FORMAT_UPPER} 3D FileCFBundleTypeIconFilemeshlab.icnsCFBundleTypeRoleEditorLSHandlerRankDefault' ${ARG_FILE} COMMAND plutil -insert CFBundleDocumentTypes.0.CFBundleTypeExtensions -xml '' ${ARG_FILE} COMMAND plutil -insert CFBundleDocumentTypes.0.CFBundleTypeExtensions.0 -xml '${FORMAT_LOWER}' ${ARG_FILE} COMMAND plutil -insert CFBundleDocumentTypes.0.CFBundleTypeOSTypes -xml '' ${ARG_FILE} COMMAND plutil -insert CFBundleDocumentTypes.0.CFBundleTypeOSTypes.0 -xml '${FORMAT_UPPER}' ${ARG_FILE} ) endfunction() function(set_additional_settings_info_plist) cmake_parse_arguments(ARG "" "TARGET;FILE" "" ${ARGN}) add_custom_command( TARGET ${ARG_TARGET} POST_BUILD COMMAND plutil -replace NSHighResolutionCapable -bool True ${ARG_FILE} COMMAND plutil -replace CFBundleDocumentTypes -xml '' ${ARG_FILE} COMMAND plutil -replace CFBundleIdentifier -string 'com.vcg.meshlab' ${ARG_FILE} COMMAND plutil -insert NSRequiresAquaSystemAppearance -bool True ${ARG_FILE} || (exit 0) ) add_file_format_info_plist( TARGET ${ARG_TARGET} FILE ${ARG_FILE} FORMAT OBJ) add_file_format_info_plist( TARGET ${ARG_TARGET} FILE ${ARG_FILE} FORMAT STL) add_file_format_info_plist( TARGET ${ARG_TARGET} FILE ${ARG_FILE} FORMAT PLY) endfunction()