diff --git a/cmake/Find7z.cmake b/cmake/Find7z.cmake new file mode 100644 index 000000000..258e3e48f --- /dev/null +++ b/cmake/Find7z.cmake @@ -0,0 +1,47 @@ +# Finds 7z. +# +# 7z_FOUND - True if 7z is found. +# 7z_EXECUTABLE - Path to executable + +#============================================================================= +# Copyright 2019 Friedrich W. H. Kossebau +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================= + +find_program(7z_EXECUTABLE NAMES 7z.exe 7za.exe) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(7z + FOUND_VAR + 7z_FOUND + REQUIRED_VARS + 7z_EXECUTABLE +) +mark_as_advanced(7z_EXECUTABLE) + +set_package_properties(7z PROPERTIES + URL "https://www.7-zip.org/" + DESCRIPTION "Data (de)compression program" +) diff --git a/src/desktoptheme/CMakeLists.txt b/src/desktoptheme/CMakeLists.txt index ba2f36106..874f48f92 100644 --- a/src/desktoptheme/CMakeLists.txt +++ b/src/desktoptheme/CMakeLists.txt @@ -1,85 +1,105 @@ option(GZIP_DESKTOPTHEME_SVG "Install Desktop Theme SVG files as .svgz." ON) if (GZIP_DESKTOPTHEME_SVG) - find_package(gzip) - set_package_properties(gzip PROPERTIES - TYPE REQUIRED - ) + if(WIN32) + find_package(7z) + set_package_properties(7z PROPERTIES + TYPE REQUIRED + ) + else() + find_package(gzip) + set_package_properties(gzip PROPERTIES + TYPE REQUIRED + ) + endif() endif() # Helper function, private for now # Once it has matured and proven, add to public macros function(PLASMA_INSTALL_DESKTOPTHEME_SVGS theme_name) set(options ) set(oneValueArgs SUBPATH ) set(multiValueArgs FILES ) cmake_parse_arguments(PIDS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if(NOT DEFINED PIDS_SUBPATH) message(FATAL_ERROR "SUBPATH needs to be defined when calling plasma_install_desktoptheme_svgs.") endif() if(NOT PIDS_FILES) message(FATAL_ERROR "No files passed when calling plasma_install_desktoptheme_svgs.") endif() set(_target_name "${theme_name}_desktoptheme_graphics_${PIDS_SUBPATH}") string(REPLACE "/" "_" _target_name "${_target_name}") set(desktoptheme_COMPONENTDIR "${theme_name}/${PIDS_SUBPATH}") set(desktoptheme_INSTALLDIR ${PLASMA_DATA_INSTALL_DIR}/desktoptheme/${desktoptheme_COMPONENTDIR}) if (GZIP_DESKTOPTHEME_SVG) set(desktoptheme_GZIPDIR "${theme_name}.gzipped/${PIDS_SUBPATH}") file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${desktoptheme_GZIPDIR}") endif() set(_install_files) foreach(_src_file ${PIDS_FILES}) if (NOT IS_ABSOLUTE ${_src_file}) set(_src_file "${CMAKE_CURRENT_SOURCE_DIR}/${_src_file}") endif() if (NOT EXISTS ${_src_file}) message(FATAL_ERROR "No such file found: ${_src_file}") endif() get_filename_component(_fileName "${_src_file}" NAME) if (GZIP_DESKTOPTHEME_SVG) set(_gzipped_file_displayname "${desktoptheme_COMPONENTDIR}/${_fileName}z") set(_gzipped_file "${CMAKE_CURRENT_BINARY_DIR}/${desktoptheme_GZIPDIR}/${_fileName}z") - add_custom_command( - OUTPUT ${_gzipped_file} - COMMAND ${gzip_EXECUTABLE} - ARGS - -9 - -c - ${_src_file} > ${_gzipped_file} - DEPENDS ${_src_file} - COMMENT "Gzipping ${_gzipped_file_displayname}" - ) + if(WIN32) + add_custom_command( + OUTPUT ${_gzipped_file} + COMMAND ${7z_EXECUTABLE} + ARGS + a + -tgzip + ${_gzipped_file} ${_src_file} + DEPENDS ${_src_file} + COMMENT "Gzipping ${_gzipped_file_displayname}" + ) + else() + add_custom_command( + OUTPUT ${_gzipped_file} + COMMAND ${gzip_EXECUTABLE} + ARGS + -9 + -c + ${_src_file} > ${_gzipped_file} + DEPENDS ${_src_file} + COMMENT "Gzipping ${_gzipped_file_displayname}" + ) + endif() else() set(_gzipped_file "${_src_file}") endif() list(APPEND _install_files "${_gzipped_file}") endforeach() add_custom_target(${_target_name} ALL DEPENDS ${_install_files}) install(FILES ${_install_files} DESTINATION "${desktoptheme_INSTALLDIR}" ) endfunction() add_subdirectory( oxygen ) add_subdirectory( air ) add_subdirectory( breeze ) add_subdirectory( breeze-dark ) add_subdirectory( breeze-light )