From 49cf622023f3ba8178e8c825eaa3e762f2404457 Mon Sep 17 00:00:00 2001 From: blshkv Date: Tue, 1 Aug 2017 22:12:01 +0800 Subject: [PATCH] dff: fix bunch of upstream bugs including https://github.com/arxsys/dff/issues/22 --- app-forensics/dff/dff-1.3.6.ebuild | 21 +- app-forensics/dff/files/fixes.patch | 12 + app-forensics/dff/files/fixes.patch.orig | 878 ----------------------- 3 files changed, 29 insertions(+), 882 deletions(-) delete mode 100644 app-forensics/dff/files/fixes.patch.orig diff --git a/app-forensics/dff/dff-1.3.6.ebuild b/app-forensics/dff/dff-1.3.6.ebuild index d8649ba3a..90125f3c0 100644 --- a/app-forensics/dff/dff-1.3.6.ebuild +++ b/app-forensics/dff/dff-1.3.6.ebuild @@ -46,7 +46,7 @@ RDEPEND="${PYTHON_DEPS} dev-python/tre-python sys-fs/fuse aff? ( >=app-forensics/afflib-3.6.8 ) - ewf? ( >=app-forensics/libewf-20100226 ) + ewf? ( >=app-forensics/libewf-20170701 ) dev-libs/icu " @@ -56,7 +56,7 @@ DEPEND="${RDEPEND} >=dev-lang/swig-1.3.38 app-forensics/reglookup" -CMAKE_IN_SOURCE_BUILD=1 +#CMAKE_IN_SOURCE_BUILD=1 pkg_setup() { python-single-r1_pkg_setup @@ -79,8 +79,13 @@ src_prepare() { cp -r ${WORKDIR}/dff-ui-${UI_COMMIT}/* dff/ui/ cp -r ${WORKDIR}/dff-unsupported-${UNSUPP_COMMIT}/* dff/unsupported/ -# sed -i "s|ICU REQUIRED|ICU|" CMakeLists.txt -#dev-libs/icu-le-hb + sed -i "s|exceptions/breakpad/libbreakpad.a|crashreporter/breakpad/libbreakpad.a|" dff/api/crashreporter/CMakeLists.txt + sed -i "s|exceptions/breakpad/libbreakpad.a|crashreporter/breakpad/libbreakpad.a|" dff/modules/CMakeLists.txt + + sed -i "s|else (WIN32)|elseif (UNIX)|" dff/api/crashreporter/reporter/CMakeLists.txt +#dl "${CMAKE_BINARY_DIR}/dff/api/crashreporter/breakpad/libbreakpad.a" + sed -i "s|dl \"\${CMAKE_BINARY_DIR}/dff/api/crashreporter/breakpad/libbreakpad.a\"|\"\${CMAKE_BINARY_DIR}/dff/api/crashreporter/breakpad/libbreakpad.a\" dl|" dff/api/crashreporter/reporter/CMakeLists.txt + epatch "${FILESDIR}/fixes.patch" eapply_user } @@ -90,6 +95,14 @@ src_prepare() { # cmake-utils_src_configure #} +#src_prepare() { +# sed \ +# -e '/ggo/s:CMAKE_CURRENT_SOURCE_DIR}:CMAKE_BINARY_DIR}/src:g' \ +# -i src/CMakeLists.txt || die +# cmake-utils_src_prepare +#} + + #src_install() { # cmake-utils_src_install #byte-complation fix diff --git a/app-forensics/dff/files/fixes.patch b/app-forensics/dff/files/fixes.patch index fb0fee207..34155ea31 100644 --- a/app-forensics/dff/files/fixes.patch +++ b/app-forensics/dff/files/fixes.patch @@ -864,3 +864,15 @@ diff -aur dff-pristine/cmake_modules/FindICU.cmake dff/cmake_modules/FindICU.cma +endif(${ICU_PUBLIC_VAR_NS}_DEBUG) + +########## ########## +diff -aur dff-pristine/dff/modules/connector/ewf/ewf.cpp dff/dff/modules/connector/ewf/ewf.cpp +--- dff-pristine/dff/modules/connector/ewf/ewf.cpp 2017-01-12 15:43:14.783144000 +0800 ++++ dff/dff/modules/connector/ewf/ewf.cpp 2017-01-12 15:45:36.262211614 +0800 +@@ -248,7 +248,7 @@ + int res = 0; + mutex_lock(&this->__io_mutex); + libewf_error_t* error = NULL; +- res = libewf_handle_read_random(this->ewf_ghandle, buff, size, fi->offset, &error); ++ res = libewf_handle_read_buffer_at_offset(this->ewf_ghandle, buff, size, fi->offset, &error); + if (res > 0) + fi->offset += res; + mutex_unlock(&this->__io_mutex); diff --git a/app-forensics/dff/files/fixes.patch.orig b/app-forensics/dff/files/fixes.patch.orig deleted file mode 100644 index 34155ea31..000000000 --- a/app-forensics/dff/files/fixes.patch.orig +++ /dev/null @@ -1,878 +0,0 @@ -diff -aur dff-pristine/cmake_modules/FindICU.cmake dff/cmake_modules/FindICU.cmake ---- dff-pristine/cmake_modules/FindICU.cmake 2017-01-12 15:43:12.572168000 +0800 -+++ dff/cmake_modules/FindICU.cmake 2017-01-12 15:44:54.855228223 +0800 -@@ -1,18 +1,28 @@ --# This module can find the International Components for Unicode (ICU) Library -+# This module can find the International Components for Unicode (ICU) libraries - # - # Requirements: --# - CMake >= 2.8.3 -+# - CMake >= 2.8.3 (for new version of find_package_handle_standard_args) - # - # The following variables will be defined for your use: --# - ICU_FOUND : were all of your specified components found (include dependencies)? -+# - ICU_FOUND : were all of your specified components found? - # - ICU_INCLUDE_DIRS : ICU include directory - # - ICU_LIBRARIES : ICU libraries - # - ICU_VERSION : complete version of ICU (x.y.z) --# - ICU_MAJOR_VERSION : major version of ICU --# - ICU_MINOR_VERSION : minor version of ICU --# - ICU_PATCH_VERSION : patch version of ICU -+# - ICU_VERSION_MAJOR : major version of ICU -+# - ICU_VERSION_MINOR : minor version of ICU -+# - ICU_VERSION_PATCH : patch version of ICU - # - ICU__FOUND : were found? (FALSE for non specified component if it is not a dependency) - # -+# For windows or non standard installation, define ICU_ROOT_DIR variable to point to the root installation of ICU. Two ways: -+# - run cmake with -DICU_ROOT_DIR= -+# - define an environment variable with the same name before running cmake -+# With cmake-gui, before pressing "Configure": -+# 1) Press "Add Entry" button -+# 2) Add a new entry defined as: -+# - Name: ICU_ROOT_DIR -+# - Type: choose PATH in the selection list -+# - Press "..." button and select the root installation of ICU -+# - # Example Usage: - # - # 1. Copy this file in the root of your project source directory -@@ -24,199 +34,657 @@ - # find_package(ICU 4.4 REQUIRED) - # - # if(ICU_FOUND) --# include_directories(${ICU_INCLUDE_DIRS}) - # add_executable(myapp myapp.c) -+# include_directories(${ICU_INCLUDE_DIRS}) - # target_link_libraries(myapp ${ICU_LIBRARIES}) --# endif() -+# # with CMake >= 3.0.0, the last two lines can be replaced by the following -+# target_link_libraries(myapp ICU::ICU) -+# endif(ICU_FOUND) - --#============================================================================= --# Copyright (c) 2011, julp --# --# Distributed under the OSI-approved BSD License --# --# This software is distributed WITHOUT ANY WARRANTY; without even the --# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. --#============================================================================= -+########## ########## - --find_package(PkgConfig) -+find_package(PkgConfig QUIET) - - ########## Private ########## --function(icudebug _varname) -- if(ICU_DEBUG) -- message("${_varname} = ${${_varname}}") -- endif(ICU_DEBUG) --endfunction(icudebug) -+if(NOT DEFINED ICU_PUBLIC_VAR_NS) -+ set(ICU_PUBLIC_VAR_NS "ICU") # Prefix for all ICU relative public variables -+endif(NOT DEFINED ICU_PUBLIC_VAR_NS) -+if(NOT DEFINED ICU_PRIVATE_VAR_NS) -+ set(ICU_PRIVATE_VAR_NS "_${ICU_PUBLIC_VAR_NS}") # Prefix for all ICU relative internal variables -+endif(NOT DEFINED ICU_PRIVATE_VAR_NS) -+if(NOT DEFINED PC_ICU_PRIVATE_VAR_NS) -+ set(PC_ICU_PRIVATE_VAR_NS "_PC${ICU_PRIVATE_VAR_NS}") # Prefix for all pkg-config relative internal variables -+endif(NOT DEFINED PC_ICU_PRIVATE_VAR_NS) -+ -+set(${ICU_PRIVATE_VAR_NS}_HINTS ) -+# -+# for future removal -+if(DEFINED ENV{ICU_ROOT}) -+ list(APPEND ${ICU_PRIVATE_VAR_NS}_HINTS "$ENV{ICU_ROOT}") -+ message(AUTHOR_WARNING "ENV{ICU_ROOT} is deprecated in favor of ENV{ICU_ROOT_DIR}") -+endif(DEFINED ENV{ICU_ROOT}) -+if (DEFINED ICU_ROOT) -+ list(APPEND ${ICU_PRIVATE_VAR_NS}_HINTS "${ICU_ROOT}") -+ message(AUTHOR_WARNING "ICU_ROOT is deprecated in favor of ICU_ROOT_DIR") -+endif(DEFINED ICU_ROOT) -+# -+if(DEFINED ENV{ICU_ROOT_DIR}) -+ list(APPEND ${ICU_PRIVATE_VAR_NS}_HINTS "$ENV{ICU_ROOT_DIR}") -+endif(DEFINED ENV{ICU_ROOT_DIR}) -+if (DEFINED ICU_ROOT_DIR) -+ list(APPEND ${ICU_PRIVATE_VAR_NS}_HINTS "${ICU_ROOT_DIR}") -+endif(DEFINED ICU_ROOT_DIR) - --set(IcuComponents ) -+set(${ICU_PRIVATE_VAR_NS}_COMPONENTS ) - # ... --macro(declare_icu_component _NAME) -- list(APPEND IcuComponents ${_NAME}) -- set("IcuComponents_${_NAME}" ${ARGN}) --endmacro(declare_icu_component) -- --if (WIN32) -- declare_icu_component(data icudt) -- declare_icu_component(i18n icuin) # Internationalization library --else() -- declare_icu_component(data icudata) -- declare_icu_component(i18n icui18n) # Internationalization library --endif () --declare_icu_component(uc icuuc) # Common and Data libraries --declare_icu_component(io icuio) # Stream and I/O Library --declare_icu_component(le icule) # Layout library --declare_icu_component(lx iculx) # Paragraph Layout library -+macro(_icu_declare_component _NAME) -+ list(APPEND ${ICU_PRIVATE_VAR_NS}_COMPONENTS ${_NAME}) -+ set("${ICU_PRIVATE_VAR_NS}_COMPONENTS_${_NAME}" ${ARGN}) -+endmacro(_icu_declare_component) -+ -+_icu_declare_component(data icudata) -+_icu_declare_component(uc icuuc) # Common and Data libraries -+_icu_declare_component(i18n icui18n icuin) # Internationalization library -+_icu_declare_component(io icuio ustdio) # Stream and I/O Library -+_icu_declare_component(le icule) # Layout library -+_icu_declare_component(lx iculx) # Paragraph Layout library - - ########## Public ########## --set(ICU_FOUND TRUE) --set(ICU_LIBRARIES ) --set(ICU_DYN_LIBRARIES) --set(ICU_INCLUDE_DIRS ) --set(ICU_DEFINITIONS ) --foreach(_icu_component ${IcuComponents}) -- string(TOUPPER "${_icu_component}" _icu_upper_component) -- set("ICU_${_icu_upper_component}_FOUND" FALSE) # may be done in the declare_icu_component macro --endforeach(_icu_component) -+set(${ICU_PUBLIC_VAR_NS}_FOUND FALSE) -+set(${ICU_PUBLIC_VAR_NS}_LIBRARIES ) -+set(${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS ) -+set(${ICU_PUBLIC_VAR_NS}_C_FLAGS "") -+set(${ICU_PUBLIC_VAR_NS}_CXX_FLAGS "") -+set(${ICU_PUBLIC_VAR_NS}_CPP_FLAGS "") -+set(${ICU_PUBLIC_VAR_NS}_C_SHARED_FLAGS "") -+set(${ICU_PUBLIC_VAR_NS}_CXX_SHARED_FLAGS "") -+set(${ICU_PUBLIC_VAR_NS}_CPP_SHARED_FLAGS "") -+ -+foreach(${ICU_PRIVATE_VAR_NS}_COMPONENT ${${ICU_PRIVATE_VAR_NS}_COMPONENTS}) -+ string(TOUPPER "${${ICU_PRIVATE_VAR_NS}_COMPONENT}" ${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT) -+ set("${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_FOUND" FALSE) # may be done in the _icu_declare_component macro -+endforeach(${ICU_PRIVATE_VAR_NS}_COMPONENT) - - # Check components --if(NOT IcuComponents) # uc required at least -- set(IcuComponents uc) --else() -- list(APPEND IcuComponents uc) -- list(REMOVE_DUPLICATES IcuComponents) -- foreach(_icu_component ${IcuComponents}) -- if(NOT DEFINED "IcuComponents_${_icu_component}") -- message(FATAL_ERROR "Unknown ICU component: ${_icu_component}") -- endif() -- endforeach(_icu_component) --endif() -+if(NOT ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS) # uc required at least -+ set(${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS uc) -+else(NOT ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS) -+ list(APPEND ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS uc) -+ list(REMOVE_DUPLICATES ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS) -+ foreach(${ICU_PRIVATE_VAR_NS}_COMPONENT ${${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS}) -+ if(NOT DEFINED ${ICU_PRIVATE_VAR_NS}_COMPONENTS_${${ICU_PRIVATE_VAR_NS}_COMPONENT}) -+ message(FATAL_ERROR "Unknown ICU component: ${${ICU_PRIVATE_VAR_NS}_COMPONENT}") -+ endif(NOT DEFINED ${ICU_PRIVATE_VAR_NS}_COMPONENTS_${${ICU_PRIVATE_VAR_NS}_COMPONENT}) -+ endforeach(${ICU_PRIVATE_VAR_NS}_COMPONENT) -+endif(NOT ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS) -+ -+# if pkg-config is available check components dependencies and append `pkg-config icu- --variable=prefix` to hints -+if(PKG_CONFIG_FOUND) -+ set(${ICU_PRIVATE_VAR_NS}_COMPONENTS_DUP ${${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS}) -+ foreach(${ICU_PRIVATE_VAR_NS}_COMPONENT ${${ICU_PRIVATE_VAR_NS}_COMPONENTS_DUP}) -+ pkg_check_modules(${PC_ICU_PRIVATE_VAR_NS} "icu-${${ICU_PRIVATE_VAR_NS}_COMPONENT}" QUIET) -+ -+ if(${PC_ICU_PRIVATE_VAR_NS}_FOUND) -+ list(APPEND ${ICU_PRIVATE_VAR_NS}_HINTS ${${PC_ICU_PRIVATE_VAR_NS}_PREFIX}) -+ foreach(${PC_ICU_PRIVATE_VAR_NS}_LIBRARY ${${PC_ICU_PRIVATE_VAR_NS}_LIBRARIES}) -+ string(REGEX REPLACE "^icu" "" ${PC_ICU_PRIVATE_VAR_NS}_STRIPPED_LIBRARY ${${PC_ICU_PRIVATE_VAR_NS}_LIBRARY}) -+ if(NOT ${PC_ICU_PRIVATE_VAR_NS}_STRIPPED_LIBRARY STREQUAL "data") -+ list(FIND ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS ${${PC_ICU_PRIVATE_VAR_NS}_STRIPPED_LIBRARY} ${ICU_PRIVATE_VAR_NS}_COMPONENT_INDEX) -+ if(${ICU_PRIVATE_VAR_NS}_COMPONENT_INDEX EQUAL -1) -+ message(WARNING "Missing component dependency: ${${PC_ICU_PRIVATE_VAR_NS}_STRIPPED_LIBRARY}. Add it to your find_package(ICU) line as COMPONENTS to fix this warning.") -+ list(APPEND ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS ${${PC_ICU_PRIVATE_VAR_NS}_STRIPPED_LIBRARY}) -+ endif(${ICU_PRIVATE_VAR_NS}_COMPONENT_INDEX EQUAL -1) -+ endif(NOT ${PC_ICU_PRIVATE_VAR_NS}_STRIPPED_LIBRARY STREQUAL "data") -+ endforeach(${PC_ICU_PRIVATE_VAR_NS}_LIBRARY) -+ endif(${PC_ICU_PRIVATE_VAR_NS}_FOUND) -+ endforeach(${ICU_PRIVATE_VAR_NS}_COMPONENT) -+endif(PKG_CONFIG_FOUND) -+# list(APPEND ${ICU_PRIVATE_VAR_NS}_HINTS ENV ICU_ROOT_DIR) -+# message("${ICU_PRIVATE_VAR_NS}_HINTS = ${${ICU_PRIVATE_VAR_NS}_HINTS}") - - # Includes - find_path( -- ICU_INCLUDE_DIRS -- unicode/utypes.h -- PATHS -- ${ICU_INCLUDE_PATH} -+ ${ICU_PUBLIC_VAR_NS}_INCLUDE_DIR -+ NAMES unicode/utypes.h utypes.h -+ HINTS ${${ICU_PRIVATE_VAR_NS}_HINTS} -+ PATH_SUFFIXES "include" - DOC "Include directories for ICU" - ) - --# Check dependencies --if(PKG_CONFIG_FOUND) -- set(_components_dup ${IcuComponents}) -- foreach(_icu_component ${_components_dup}) -- pkg_check_modules(PC_ICU "icu-${_icu_component}" QUIET) -- -- if(PC_ICU_FOUND) -- foreach(_pc_icu_library ${PC_ICU_LIBRARIES}) -- string(REGEX REPLACE "^icu" "" _pc_stripped_icu_library ${_pc_icu_library}) -- list(APPEND IcuComponents ${_pc_stripped_icu_library}) -- endforeach(_pc_icu_library) -- endif(PC_ICU_FOUND) -- endforeach(_icu_component) -- list(REMOVE_DUPLICATES IcuComponents) --endif(PKG_CONFIG_FOUND) -- --# Check libraries --foreach(_icu_component ${IcuComponents}) -- find_library( -- _icu_lib_${_icu_component} -- NAMES ${IcuComponents_${_icu_component}} -- PATHS -- ${ICU_LIBRARIES_PATH} -- #${DEPENDENCIES_LIBRARIES_DIR} -- DOC "Libraries for ICU" -- ) -- -- string(TOUPPER "${_icu_component}" _icu_upper_component) -- if(_icu_lib STREQUAL _icu_lib-NOTFOUND) -- set("ICU_${_icu_upper_component}_FOUND" FALSE) -- set(ICU_FOUND FALSE) -- else() -- if (WIN32) -- file(GLOB dylib "${ICU_DYNLIB_PATH}/${IcuComponents_${_icu_component}}*.dll") -- list(LENGTH dylib length) -- if (length GREATER 0) -- list(GET dylib 0 dylib) -- list(APPEND ICU_DYN_LIBRARIES ${dylib}) -- set("ICU_${_icu_upper_component}_FOUND" TRUE) -- list(APPEND ICU_LIBRARIES ${_icu_lib_${_icu_component}}) -- SET(ICU_RUNTIME_LIBRARIES ${ICU_RUNTIME_LIBRARIES} ${dylib}) -- else() -- set("ICU_${_icu_upper_component}_FOUND" FALSE) -- set(ICU_FOUND FALSE) -- endif() -+if(${ICU_PUBLIC_VAR_NS}_INCLUDE_DIR) -+ ########## ########## -+ if(EXISTS "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIR}/unicode/uvernum.h") # ICU >= 4.4 -+ file(READ "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIR}/unicode/uvernum.h" ${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS) -+ elseif(EXISTS "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIR}/unicode/uversion.h") # ICU [2;4.4[ -+ file(READ "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIR}/unicode/uversion.h" ${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS) -+ elseif(EXISTS "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIR}/unicode/utypes.h") # ICU [1.4;2[ -+ file(READ "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIR}/unicode/utypes.h" ${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS) -+ elseif(EXISTS "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIR}/utypes.h") # ICU 1.3 -+ file(READ "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIR}/utypes.h" ${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS) - else() -- set("ICU_${_icu_upper_component}_FOUND" TRUE) -- list(APPEND ICU_LIBRARIES ${_icu_lib_${_icu_component}}) -+ message(FATAL_ERROR "ICU version header not found") - endif() -- endif() --endforeach(_icu_component) - --if(ICU_FOUND) -- list(REMOVE_DUPLICATES ICU_LIBRARIES) -- message(STATUS "Found ICU libraries:") -- foreach (item ${ICU_LIBRARIES}) -- message(" ${item}") -- endforeach() -- if (WIN32) -- list(REMOVE_DUPLICATES ICU_DYN_LIBRARIES) -- message(STATUS "Found ICU dynamic libraries:") -- foreach (item ${ICU_DYN_LIBRARIES}) -- message(" ${item}") -- endforeach() -- endif() -- if(EXISTS "${ICU_INCLUDE_DIRS}/unicode/uvernum.h") -- file(READ "${ICU_INCLUDE_DIRS}/unicode/uvernum.h" _icu_contents) -- endif() -- -- string(REGEX REPLACE ".*# *define *U_ICU_VERSION_MAJOR_NUM *([0-9]+).*" "\\1" ICU_MAJOR_VERSION "${_icu_contents}") -- string(REGEX REPLACE ".*# *define *U_ICU_VERSION_MINOR_NUM *([0-9]+).*" "\\1" ICU_MINOR_VERSION "${_icu_contents}") -- string(REGEX REPLACE ".*# *define *U_ICU_VERSION_PATCHLEVEL_NUM *([0-9]+).*" "\\1" ICU_PATCH_VERSION "${_icu_contents}") -- set(ICU_VERSION "${ICU_MAJOR_VERSION}.${ICU_MINOR_VERSION}.${ICU_PATCH_VERSION}") --elseif(ICU_FIND_REQUIRED AND NOT ICU_FIND_QUIETLY) -- message(FATAL_ERROR "ICU libraries not found or missing. Please specify path to libraries or install them") --endif(ICU_FOUND) -- --if(ICU_INCLUDE_DIRS) -- include(FindPackageHandleStandardArgs) -- if(ICU_FIND_REQUIRED AND NOT ICU_FIND_QUIETLY) -- find_package_handle_standard_args(ICU REQUIRED_VARS ICU_LIBRARIES ICU_INCLUDE_DIRS VERSION_VAR ICU_VERSION) -+ if(${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS MATCHES ".*# *define *ICU_VERSION *\"([0-9]+)\".*") # ICU 1.3 -+ # [1.3;1.4[ as #define ICU_VERSION "3" (no patch version, ie all 1.3.X versions will be detected as 1.3.0) -+ set(${ICU_PUBLIC_VAR_NS}_VERSION_MAJOR "1") -+ set(${ICU_PUBLIC_VAR_NS}_VERSION_MINOR "${CMAKE_MATCH_1}") -+ set(${ICU_PUBLIC_VAR_NS}_VERSION_PATCH "0") -+ elseif(${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS MATCHES ".*# *define *U_ICU_VERSION_MAJOR_NUM *([0-9]+).*") -+ # -+ # Since version 4.9.1, ICU release version numbering was totaly changed, see: -+ # - http://site.icu-project.org/download/49 -+ # - http://userguide.icu-project.org/design#TOC-Version-Numbers-in-ICU -+ # -+ set(${ICU_PUBLIC_VAR_NS}_VERSION_MAJOR "${CMAKE_MATCH_1}") -+ string(REGEX REPLACE ".*# *define *U_ICU_VERSION_MINOR_NUM *([0-9]+).*" "\\1" ${ICU_PUBLIC_VAR_NS}_VERSION_MINOR "${${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS}") -+ string(REGEX REPLACE ".*# *define *U_ICU_VERSION_PATCHLEVEL_NUM *([0-9]+).*" "\\1" ${ICU_PUBLIC_VAR_NS}_VERSION_PATCH "${${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS}") -+ elseif(${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS MATCHES ".*# *define *U_ICU_VERSION *\"(([0-9]+)(\\.[0-9]+)*)\".*") # ICU [1.4;1.8[ -+ # [1.4;1.8[ as #define U_ICU_VERSION "1.4.1.2" but it seems that some 1.4.[12](?:\.\d)? have releasing error and appears as 1.4.0 -+ set(${ICU_PRIVATE_VAR_NS}_FULL_VERSION "${CMAKE_MATCH_1}") # copy CMAKE_MATCH_1, no longer valid on the following if -+ if(${ICU_PRIVATE_VAR_NS}_FULL_VERSION MATCHES "^([0-9]+)\\.([0-9]+)$") -+ set(${ICU_PUBLIC_VAR_NS}_VERSION_MAJOR "${CMAKE_MATCH_1}") -+ set(${ICU_PUBLIC_VAR_NS}_VERSION_MINOR "${CMAKE_MATCH_2}") -+ set(${ICU_PUBLIC_VAR_NS}_VERSION_PATCH "0") -+ elseif(${ICU_PRIVATE_VAR_NS}_FULL_VERSION MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+)") -+ set(${ICU_PUBLIC_VAR_NS}_VERSION_MAJOR "${CMAKE_MATCH_1}") -+ set(${ICU_PUBLIC_VAR_NS}_VERSION_MINOR "${CMAKE_MATCH_2}") -+ set(${ICU_PUBLIC_VAR_NS}_VERSION_PATCH "${CMAKE_MATCH_3}") -+ endif() - else() -- find_package_handle_standard_args(ICU "ICU not found" ICU_LIBRARIES ICU_INCLUDE_DIRS) -- endif() --else(ICU_INCLUDE_DIRS) -- if(ICU_FIND_REQUIRED AND NOT ICU_FIND_QUIETLY) -- message(FATAL_ERROR "Could not find ICU include directory") -+ message(FATAL_ERROR "failed to detect ICU version") - endif() --endif(ICU_INCLUDE_DIRS) -+ set(${ICU_PUBLIC_VAR_NS}_VERSION "${${ICU_PUBLIC_VAR_NS}_VERSION_MAJOR}.${${ICU_PUBLIC_VAR_NS}_VERSION_MINOR}.${${ICU_PUBLIC_VAR_NS}_VERSION_PATCH}") -+ ########## ########## -+endif(${ICU_PUBLIC_VAR_NS}_INCLUDE_DIR) -+ -+# Check libraries -+if(MSVC) -+ include(SelectLibraryConfigurations) -+endif(MSVC) -+foreach(${ICU_PRIVATE_VAR_NS}_COMPONENT ${${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS}) -+ string(TOUPPER "${${ICU_PRIVATE_VAR_NS}_COMPONENT}" ${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT) -+ if(MSVC) -+ set(${ICU_PRIVATE_VAR_NS}_POSSIBLE_RELEASE_NAMES ) -+ set(${ICU_PRIVATE_VAR_NS}_POSSIBLE_DEBUG_NAMES ) -+ foreach(${ICU_PRIVATE_VAR_NS}_BASE_NAME ${${ICU_PRIVATE_VAR_NS}_COMPONENTS_${${ICU_PRIVATE_VAR_NS}_COMPONENT}}) -+ list(APPEND ${ICU_PRIVATE_VAR_NS}_POSSIBLE_RELEASE_NAMES "${${ICU_PRIVATE_VAR_NS}_BASE_NAME}") -+ list(APPEND ${ICU_PRIVATE_VAR_NS}_POSSIBLE_DEBUG_NAMES "${${ICU_PRIVATE_VAR_NS}_BASE_NAME}d") -+ list(APPEND ${ICU_PRIVATE_VAR_NS}_POSSIBLE_RELEASE_NAMES "${${ICU_PRIVATE_VAR_NS}_BASE_NAME}${${ICU_PUBLIC_VAR_NS}_VERSION_MAJOR}${${ICU_PUBLIC_VAR_NS}_VERSION_MINOR}") -+ list(APPEND ${ICU_PRIVATE_VAR_NS}_POSSIBLE_DEBUG_NAMES "${${ICU_PRIVATE_VAR_NS}_BASE_NAME}${${ICU_PUBLIC_VAR_NS}_VERSION_MAJOR}${${ICU_PUBLIC_VAR_NS}_VERSION_MINOR}d") -+ endforeach(${ICU_PRIVATE_VAR_NS}_BASE_NAME) -+ -+ find_library( -+ ${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_LIBRARY_RELEASE -+ NAMES ${${ICU_PRIVATE_VAR_NS}_POSSIBLE_RELEASE_NAMES} -+ HINTS ${${ICU_PRIVATE_VAR_NS}_HINTS} -+ DOC "Release library for ICU ${${ICU_PRIVATE_VAR_NS}_COMPONENT} component" -+ ) -+ find_library( -+ ${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_LIBRARY_DEBUG -+ NAMES ${${ICU_PRIVATE_VAR_NS}_POSSIBLE_DEBUG_NAMES} -+ HINTS ${${ICU_PRIVATE_VAR_NS}_HINTS} -+ DOC "Debug library for ICU ${${ICU_PRIVATE_VAR_NS}_COMPONENT} component" -+ ) -+ -+ select_library_configurations("${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}") -+ list(APPEND ${ICU_PUBLIC_VAR_NS}_LIBRARY ${${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_LIBRARY}) -+ else(MSVC) -+ find_library( -+ ${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_LIBRARY -+ NAMES ${${ICU_PRIVATE_VAR_NS}_COMPONENTS_${${ICU_PRIVATE_VAR_NS}_COMPONENT}} -+ PATHS ${${ICU_PRIVATE_VAR_NS}_HINTS} -+ DOC "Library for ICU ${${ICU_PRIVATE_VAR_NS}_COMPONENT} component" -+ ) -+ -+ if(${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_LIBRARY) -+ set("${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_FOUND" TRUE) -+ list(APPEND ${ICU_PUBLIC_VAR_NS}_LIBRARY ${${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_LIBRARY}) -+ endif(${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_LIBRARY) -+ endif(MSVC) -+endforeach(${ICU_PRIVATE_VAR_NS}_COMPONENT) -+ -+# Try to find out compiler flags -+find_program(${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE icu-config HINTS ${${ICU_PRIVATE_VAR_NS}_HINTS}) -+if(${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE) -+ execute_process(COMMAND ${${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE} --cflags OUTPUT_VARIABLE ${ICU_PUBLIC_VAR_NS}_C_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE) -+ execute_process(COMMAND ${${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE} --cxxflags OUTPUT_VARIABLE ${ICU_PUBLIC_VAR_NS}_CXX_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE) -+ execute_process(COMMAND ${${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE} --cppflags OUTPUT_VARIABLE ${ICU_PUBLIC_VAR_NS}_CPP_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE) -+ -+ execute_process(COMMAND ${${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE} --cflags-dynamic OUTPUT_VARIABLE ${ICU_PUBLIC_VAR_NS}_C_SHARED_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE) -+ execute_process(COMMAND ${${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE} --cxxflags-dynamic OUTPUT_VARIABLE ${ICU_PUBLIC_VAR_NS}_CXX_SHARED_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE) -+ execute_process(COMMAND ${${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE} --cppflags-dynamic OUTPUT_VARIABLE ${ICU_PUBLIC_VAR_NS}_CPP_SHARED_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE) -+endif(${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE) -+ -+# Check find_package arguments -+include(FindPackageHandleStandardArgs) -+if(${ICU_PUBLIC_VAR_NS}_FIND_REQUIRED AND NOT ${ICU_PUBLIC_VAR_NS}_FIND_QUIETLY) -+ find_package_handle_standard_args( -+ ${ICU_PUBLIC_VAR_NS} -+ REQUIRED_VARS ${ICU_PUBLIC_VAR_NS}_LIBRARY ${ICU_PUBLIC_VAR_NS}_INCLUDE_DIR -+ VERSION_VAR ${ICU_PUBLIC_VAR_NS}_VERSION -+ ) -+else(${ICU_PUBLIC_VAR_NS}_FIND_REQUIRED AND NOT ${ICU_PUBLIC_VAR_NS}_FIND_QUIETLY) -+ find_package_handle_standard_args(${ICU_PUBLIC_VAR_NS} "Could NOT find ICU" ${ICU_PUBLIC_VAR_NS}_LIBRARY ${ICU_PUBLIC_VAR_NS}_INCLUDE_DIR) -+endif(${ICU_PUBLIC_VAR_NS}_FIND_REQUIRED AND NOT ${ICU_PUBLIC_VAR_NS}_FIND_QUIETLY) -+ -+if(${ICU_PUBLIC_VAR_NS}_FOUND) -+ # -+ # for compatibility with previous versions, alias old ICU_(MAJOR|MINOR|PATCH)_VERSION to ICU_VERSION_$1 -+ set(${ICU_PUBLIC_VAR_NS}_MAJOR_VERSION ${${ICU_PUBLIC_VAR_NS}_VERSION_MAJOR}) -+ set(${ICU_PUBLIC_VAR_NS}_MINOR_VERSION ${${ICU_PUBLIC_VAR_NS}_VERSION_MINOR}) -+ set(${ICU_PUBLIC_VAR_NS}_PATCH_VERSION ${${ICU_PUBLIC_VAR_NS}_VERSION_PATCH}) -+ # -+ set(${ICU_PUBLIC_VAR_NS}_LIBRARIES ${${ICU_PUBLIC_VAR_NS}_LIBRARY}) -+ set(${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS ${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIR}) -+ -+ if(NOT CMAKE_VERSION VERSION_LESS "3.0.0") -+ if(NOT TARGET ICU::ICU) -+ add_library(ICU::ICU INTERFACE IMPORTED) -+ endif(NOT TARGET ICU::ICU) -+ set_target_properties(ICU::ICU PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIR}") -+ foreach(${ICU_PRIVATE_VAR_NS}_COMPONENT ${${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS}) -+ string(TOUPPER "${${ICU_PRIVATE_VAR_NS}_COMPONENT}" ${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT) -+ add_library("ICU::${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}" UNKNOWN IMPORTED) -+ if(${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_LIBRARY_RELEASE) -+ set_property(TARGET "ICU::${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}" APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) -+ set_target_properties("ICU::${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}" PROPERTIES IMPORTED_LOCATION_RELEASE "${${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_LIBRARY_RELEASE}") -+ endif(${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_LIBRARY_RELEASE) -+ if(${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_LIBRARY_DEBUG) -+ set_property(TARGET "ICU::${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}" APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) -+ set_target_properties("ICU::${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}" PROPERTIES IMPORTED_LOCATION_DEBUG "${${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_LIBRARY_DEBUG}") -+ endif(${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_LIBRARY_DEBUG) -+ if(${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_LIBRARY) -+ set_target_properties("ICU::${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}" PROPERTIES IMPORTED_LOCATION "${${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_LIBRARY}") -+ endif(${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_LIBRARY) -+ set_property(TARGET ICU::ICU APPEND PROPERTY INTERFACE_LINK_LIBRARIES "ICU::${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}") -+# set_target_properties("ICU::${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}" PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIR}") -+ endforeach(${ICU_PRIVATE_VAR_NS}_COMPONENT) -+ endif(NOT CMAKE_VERSION VERSION_LESS "3.0.0") -+endif(${ICU_PUBLIC_VAR_NS}_FOUND) - - mark_as_advanced( -- ICU_INCLUDE_DIRS -- ICU_LIBRARIES -- ICU_DEFINITIONS -- ICU_VERSION -- ICU_MAJOR_VERSION -- ICU_MINOR_VERSION -- ICU_PATCH_VERSION -+ ${ICU_PUBLIC_VAR_NS}_INCLUDE_DIR -+ ${ICU_PUBLIC_VAR_NS}_LIBRARY - ) - --# IN (args) --icudebug("IcuComponents") --icudebug("ICU_FIND_REQUIRED") --icudebug("ICU_FIND_QUIETLY") --icudebug("ICU_FIND_VERSION") --# OUT --# Found --icudebug("ICU_FOUND") --icudebug("ICU_UC_FOUND") --icudebug("ICU_I18N_FOUND") --icudebug("ICU_IO_FOUND") --icudebug("ICU_LE_FOUND") --icudebug("ICU_LX_FOUND") --# Linking --icudebug("ICU_INCLUDE_DIRS") --icudebug("ICU_LIBRARIES") --# Version --icudebug("ICU_MAJOR_VERSION") --icudebug("ICU_MINOR_VERSION") --icudebug("ICU_PATCH_VERSION") --icudebug("ICU_VERSION") -\ No newline at end of file -+########## ########## -+ -+########## ########## -+ -+########## Private ########## -+function(_icu_extract_locale_from_rb _BUNDLE_SOURCE _RETURN_VAR_NAME) -+ file(READ "${_BUNDLE_SOURCE}" _BUNDLE_CONTENTS) -+ string(REGEX REPLACE "//[^\n]*\n" "" _BUNDLE_CONTENTS_WITHOUT_COMMENTS ${_BUNDLE_CONTENTS}) -+ string(REGEX REPLACE "[ \t\n]" "" _BUNDLE_CONTENTS_WITHOUT_COMMENTS_AND_SPACES ${_BUNDLE_CONTENTS_WITHOUT_COMMENTS}) -+ string(REGEX MATCH "^([a-zA-Z_-]+)(:table)?{" LOCALE_FOUND ${_BUNDLE_CONTENTS_WITHOUT_COMMENTS_AND_SPACES}) -+ set("${_RETURN_VAR_NAME}" "${CMAKE_MATCH_1}" PARENT_SCOPE) -+endfunction(_icu_extract_locale_from_rb) -+ -+########## Public ########## -+ -+# -+# Prototype: -+# icu_generate_resource_bundle([NAME ] [PACKAGE] [DESTINATION ] [FILES ]) -+# -+# Common arguments: -+# - NAME : name of output package and to create dummy targets -+# - FILES ... : list of resource bundles sources -+# - DEPENDS ... : required to package as library (shared or static), a list of cmake parent targets to link to -+# Note: only (PREVIOUSLY DECLARED) add_executable and add_library as dependencies -+# - DESTINATION : optional, directory where to install final binary file(s) -+# - FORMAT : optional, one of none (ICU4C binary format, default), java (plain java) or xliff (XML), see below -+# -+# Arguments depending on FORMAT: -+# - none (default): -+# * PACKAGE : if present, package all resource bundles together. Default is to stop after building individual *.res files -+# * TYPE : one of : -+# + common or archive (default) : archive all ressource bundles into a single .dat file -+# + library or dll : assemble all ressource bundles into a separate and loadable library (.dll/.so) -+# + static : integrate all ressource bundles to targets designed by DEPENDS parameter (as a static library) -+# * NO_SHARED_FLAGS : only with TYPE in ['library', 'dll', 'static'], do not append ICU_C(XX)_SHARED_FLAGS to targets given as DEPENDS argument -+# - JAVA: -+# * BUNDLE : required, prefix for generated classnames -+# - XLIFF: -+# (none) -+# -+ -+# -+# For an archive, the idea is to generate the following dependencies: -+# -+# root.txt => root.res \ -+# | -+# en.txt => en.res | -+# | => pkglist.txt => application.dat -+# fr.txt => fr.res | -+# | -+# and so on / -+# -+# Lengend: 'A => B' means B depends on A -+# -+# Steps (correspond to arrows): -+# 1) genrb (from .txt to .res) -+# 2) generate a file text (pkglist.txt) with all .res files to put together -+# 3) build final archive (from *.res/pkglist.txt to .dat) -+# -+ -+function(icu_generate_resource_bundle) -+ -+ ##### ##### -+ find_program(${ICU_PUBLIC_VAR_NS}_GENRB_EXECUTABLE genrb HINTS ${${ICU_PRIVATE_VAR_NS}_HINTS}) -+ find_program(${ICU_PUBLIC_VAR_NS}_PKGDATA_EXECUTABLE pkgdata HINTS ${${ICU_PRIVATE_VAR_NS}_HINTS}) -+ -+ if(NOT ${ICU_PUBLIC_VAR_NS}_GENRB_EXECUTABLE) -+ message(FATAL_ERROR "genrb not found") -+ endif(NOT ${ICU_PUBLIC_VAR_NS}_GENRB_EXECUTABLE) -+ if(NOT ${ICU_PUBLIC_VAR_NS}_PKGDATA_EXECUTABLE) -+ message(FATAL_ERROR "pkgdata not found") -+ endif(NOT ${ICU_PUBLIC_VAR_NS}_PKGDATA_EXECUTABLE) -+ ##### ##### -+ -+ ##### ##### -+ set(TARGET_SEPARATOR "+") -+ set(__FUNCTION__ "icu_generate_resource_bundle") -+ set(PACKAGE_TARGET_PREFIX "ICU${TARGET_SEPARATOR}PKG") -+ set(RESOURCE_TARGET_PREFIX "ICU${TARGET_SEPARATOR}RB") -+ ##### ##### -+ -+ ##### ##### -+ # filename extension of built resource bundle (without dot) -+ set(BUNDLES__SUFFIX "res") -+ set(BUNDLES_JAVA_SUFFIX "java") -+ set(BUNDLES_XLIFF_SUFFIX "xlf") -+ # alias: none (default) = common = archive ; dll = library ; static -+ set(PKGDATA__ALIAS "") -+ set(PKGDATA_COMMON_ALIAS "") -+ set(PKGDATA_ARCHIVE_ALIAS "") -+ set(PKGDATA_DLL_ALIAS "LIBRARY") -+ set(PKGDATA_LIBRARY_ALIAS "LIBRARY") -+ set(PKGDATA_STATIC_ALIAS "STATIC") -+ # filename prefix of built package -+ set(PKGDATA__PREFIX "") -+ set(PKGDATA_LIBRARY_PREFIX "${CMAKE_SHARED_LIBRARY_PREFIX}") -+ set(PKGDATA_STATIC_PREFIX "${CMAKE_STATIC_LIBRARY_PREFIX}") -+ # filename extension of built package (with dot) -+ set(PKGDATA__SUFFIX ".dat") -+ set(PKGDATA_LIBRARY_SUFFIX "${CMAKE_SHARED_LIBRARY_SUFFIX}") -+ set(PKGDATA_STATIC_SUFFIX "${CMAKE_STATIC_LIBRARY_SUFFIX}") -+ # pkgdata option mode specific -+ set(PKGDATA__OPTIONS "-m" "common") -+ set(PKGDATA_STATIC_OPTIONS "-m" "static") -+ set(PKGDATA_LIBRARY_OPTIONS "-m" "library") -+ # cmake library type for output package -+ set(PKGDATA_LIBRARY__TYPE "") -+ set(PKGDATA_LIBRARY_STATIC_TYPE STATIC) -+ set(PKGDATA_LIBRARY_LIBRARY_TYPE SHARED) -+ ##### ##### -+ -+ include(CMakeParseArguments) -+ cmake_parse_arguments( -+ PARSED_ARGS # output variable name -+ # options (true/false) (default value: false) -+ "PACKAGE;NO_SHARED_FLAGS" -+ # univalued parameters (default value: "") -+ "NAME;DESTINATION;TYPE;FORMAT;BUNDLE" -+ # multivalued parameters (default value: "") -+ "FILES;DEPENDS" -+ ${ARGN} -+ ) -+ -+ # assert(${PARSED_ARGS_NAME} != "") -+ if(NOT PARSED_ARGS_NAME) -+ message(FATAL_ERROR "${__FUNCTION__}(): no name given, NAME parameter missing") -+ endif(NOT PARSED_ARGS_NAME) -+ -+ # assert(length(PARSED_ARGS_FILES) > 0) -+ list(LENGTH PARSED_ARGS_FILES PARSED_ARGS_FILES_LEN) -+ if(PARSED_ARGS_FILES_LEN LESS 1) -+ message(FATAL_ERROR "${__FUNCTION__}() expects at least 1 resource bundle as FILES argument, 0 given") -+ endif(PARSED_ARGS_FILES_LEN LESS 1) -+ -+ string(TOUPPER "${PARSED_ARGS_FORMAT}" UPPER_FORMAT) -+ # assert(${UPPER_FORMAT} in ['', 'java', 'xlif']) -+ if(NOT DEFINED BUNDLES_${UPPER_FORMAT}_SUFFIX) -+ message(FATAL_ERROR "${__FUNCTION__}(): unknown FORMAT '${PARSED_ARGS_FORMAT}'") -+ endif(NOT DEFINED BUNDLES_${UPPER_FORMAT}_SUFFIX) -+ -+ if(UPPER_FORMAT STREQUAL "JAVA") -+ # assert(${PARSED_ARGS_BUNDLE} != "") -+ if(NOT PARSED_ARGS_BUNDLE) -+ message(FATAL_ERROR "${__FUNCTION__}(): java bundle name expected, BUNDLE parameter missing") -+ endif(NOT PARSED_ARGS_BUNDLE) -+ endif(UPPER_FORMAT STREQUAL "JAVA") -+ -+ if(PARSED_ARGS_PACKAGE) -+ # assert(${PARSED_ARGS_FORMAT} == "") -+ if(PARSED_ARGS_FORMAT) -+ message(FATAL_ERROR "${__FUNCTION__}(): packaging is only supported for binary format, not xlif neither java outputs") -+ endif(PARSED_ARGS_FORMAT) -+ -+ string(TOUPPER "${PARSED_ARGS_TYPE}" UPPER_MODE) -+ # assert(${UPPER_MODE} in ['', 'common', 'archive', 'dll', library']) -+ if(NOT DEFINED PKGDATA_${UPPER_MODE}_ALIAS) -+ message(FATAL_ERROR "${__FUNCTION__}(): unknown TYPE '${PARSED_ARGS_TYPE}'") -+ else(NOT DEFINED PKGDATA_${UPPER_MODE}_ALIAS) -+ set(TYPE "${PKGDATA_${UPPER_MODE}_ALIAS}") -+ endif(NOT DEFINED PKGDATA_${UPPER_MODE}_ALIAS) -+ -+ # Package name: strip file extension if present -+ get_filename_component(PACKAGE_NAME_WE ${PARSED_ARGS_NAME} NAME_WE) -+ # Target name to build package -+ set(PACKAGE_TARGET_NAME "${PACKAGE_TARGET_PREFIX}${TARGET_SEPARATOR}${PACKAGE_NAME_WE}") -+ # Target name to build intermediate list file -+ set(PACKAGE_LIST_TARGET_NAME "${PACKAGE_TARGET_NAME}${TARGET_SEPARATOR}PKGLIST") -+ # Directory (absolute) to set as "current directory" for genrb (does not include package directory, -p) -+ # We make our "cook" there to prevent any conflict -+ if(DEFINED CMAKE_PLATFORM_ROOT_BIN) # CMake < 2.8.10 -+ set(RESOURCE_GENRB_CHDIR_DIR "${CMAKE_PLATFORM_ROOT_BIN}/${PACKAGE_TARGET_NAME}.dir/") -+ else(DEFINED CMAKE_PLATFORM_ROOT_BIN) # CMake >= 2.8.10 -+ set(RESOURCE_GENRB_CHDIR_DIR "${CMAKE_PLATFORM_INFO_DIR}/${PACKAGE_TARGET_NAME}.dir/") -+ endif(DEFINED CMAKE_PLATFORM_ROOT_BIN) -+ # Directory (absolute) where resource bundles are built: concatenation of RESOURCE_GENRB_CHDIR_DIR and package name -+ set(RESOURCE_OUTPUT_DIR "${RESOURCE_GENRB_CHDIR_DIR}/${PACKAGE_NAME_WE}/") -+ # Output (relative) path for built package -+ if(MSVC AND TYPE STREQUAL PKGDATA_LIBRARY_ALIAS) -+ set(PACKAGE_OUTPUT_PATH "${RESOURCE_GENRB_CHDIR_DIR}/${PACKAGE_NAME_WE}/${PKGDATA_${TYPE}_PREFIX}${PACKAGE_NAME_WE}${PKGDATA_${TYPE}_SUFFIX}") -+ else(MSVC AND TYPE STREQUAL PKGDATA_LIBRARY_ALIAS) -+ set(PACKAGE_OUTPUT_PATH "${RESOURCE_GENRB_CHDIR_DIR}/${PKGDATA_${TYPE}_PREFIX}${PACKAGE_NAME_WE}${PKGDATA_${TYPE}_SUFFIX}") -+ endif(MSVC AND TYPE STREQUAL PKGDATA_LIBRARY_ALIAS) -+ # Output (absolute) path for the list file -+ set(PACKAGE_LIST_OUTPUT_PATH "${RESOURCE_GENRB_CHDIR_DIR}/pkglist.txt") -+ -+ file(MAKE_DIRECTORY "${RESOURCE_OUTPUT_DIR}") -+ else(PARSED_ARGS_PACKAGE) -+ set(RESOURCE_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/") -+# set(RESOURCE_GENRB_CHDIR_DIR "UNUSED") -+ endif(PARSED_ARGS_PACKAGE) -+ -+ set(TARGET_RESOURCES ) -+ set(COMPILED_RESOURCES_PATH ) -+ set(COMPILED_RESOURCES_BASENAME ) -+ foreach(RESOURCE_SOURCE ${PARSED_ARGS_FILES}) -+ _icu_extract_locale_from_rb(${RESOURCE_SOURCE} RESOURCE_NAME_WE) -+ get_filename_component(SOURCE_BASENAME ${RESOURCE_SOURCE} NAME) -+ get_filename_component(ABSOLUTE_SOURCE ${RESOURCE_SOURCE} ABSOLUTE) -+ -+ if(UPPER_FORMAT STREQUAL "XLIFF") -+ if(RESOURCE_NAME_WE STREQUAL "root") -+ set(XLIFF_LANGUAGE "en") -+ else(RESOURCE_NAME_WE STREQUAL "root") -+ string(REGEX REPLACE "[^a-z].*$" "" XLIFF_LANGUAGE "${RESOURCE_NAME_WE}") -+ endif(RESOURCE_NAME_WE STREQUAL "root") -+ endif(UPPER_FORMAT STREQUAL "XLIFF") -+ -+ ##### ##### -+ set(RESOURCE_TARGET_NAME "${RESOURCE_TARGET_PREFIX}${TARGET_SEPARATOR}${PARSED_ARGS_NAME}${TARGET_SEPARATOR}${RESOURCE_NAME_WE}") -+ -+ set(RESOURCE_OUTPUT__PATH "${RESOURCE_NAME_WE}.res") -+ if(RESOURCE_NAME_WE STREQUAL "root") -+ set(RESOURCE_OUTPUT_JAVA_PATH "${PARSED_ARGS_BUNDLE}.java") -+ else(RESOURCE_NAME_WE STREQUAL "root") -+ set(RESOURCE_OUTPUT_JAVA_PATH "${PARSED_ARGS_BUNDLE}_${RESOURCE_NAME_WE}.java") -+ endif(RESOURCE_NAME_WE STREQUAL "root") -+ set(RESOURCE_OUTPUT_XLIFF_PATH "${RESOURCE_NAME_WE}.xlf") -+ -+ set(GENRB__OPTIONS "") -+ set(GENRB_JAVA_OPTIONS "-j" "-b" "${PARSED_ARGS_BUNDLE}") -+ set(GENRB_XLIFF_OPTIONS "-x" "-l" "${XLIFF_LANGUAGE}") -+ ##### ##### -+ -+ # build .txt from .res -+ if(PARSED_ARGS_PACKAGE) -+ add_custom_command( -+ OUTPUT "${RESOURCE_OUTPUT_DIR}${RESOURCE_OUTPUT_${UPPER_FORMAT}_PATH}" -+ COMMAND ${CMAKE_COMMAND} -E chdir ${RESOURCE_GENRB_CHDIR_DIR} ${${ICU_PUBLIC_VAR_NS}_GENRB_EXECUTABLE} ${GENRB_${UPPER_FORMAT}_OPTIONS} -d ${PACKAGE_NAME_WE} ${ABSOLUTE_SOURCE} -+ DEPENDS ${RESOURCE_SOURCE} -+ ) -+ else(PARSED_ARGS_PACKAGE) -+ add_custom_command( -+ OUTPUT "${RESOURCE_OUTPUT_DIR}${RESOURCE_OUTPUT_${UPPER_FORMAT}_PATH}" -+ COMMAND ${${ICU_PUBLIC_VAR_NS}_GENRB_EXECUTABLE} ${GENRB_${UPPER_FORMAT}_OPTIONS} -d ${RESOURCE_OUTPUT_DIR} ${ABSOLUTE_SOURCE} -+ DEPENDS ${RESOURCE_SOURCE} -+ ) -+ endif(PARSED_ARGS_PACKAGE) -+ # dummy target (ICU+RB++) for each locale to build the .res file from its .txt by the add_custom_command above -+ add_custom_target( -+ "${RESOURCE_TARGET_NAME}" ALL -+ COMMENT "" -+ DEPENDS "${RESOURCE_OUTPUT_DIR}${RESOURCE_OUTPUT_${UPPER_FORMAT}_PATH}" -+ SOURCES ${RESOURCE_SOURCE} -+ ) -+ -+ if(PARSED_ARGS_DESTINATION AND NOT PARSED_ARGS_PACKAGE) -+ install(FILES "${RESOURCE_OUTPUT_DIR}${RESOURCE_OUTPUT_${UPPER_FORMAT}_PATH}" DESTINATION ${PARSED_ARGS_DESTINATION} PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) -+ endif(PARSED_ARGS_DESTINATION AND NOT PARSED_ARGS_PACKAGE) -+ -+ list(APPEND TARGET_RESOURCES "${RESOURCE_TARGET_NAME}") -+ list(APPEND COMPILED_RESOURCES_PATH "${RESOURCE_OUTPUT_DIR}${RESOURCE_OUTPUT_${UPPER_FORMAT}_PATH}") -+ list(APPEND COMPILED_RESOURCES_BASENAME "${RESOURCE_NAME_WE}.${BUNDLES_${UPPER_FORMAT}_SUFFIX}") -+ endforeach(RESOURCE_SOURCE) -+ # convert semicolon separated list to a space separated list -+ # NOTE: if the pkglist.txt file starts (or ends?) with a whitespace, pkgdata add an undefined symbol (named _) for it -+ string(REPLACE ";" " " COMPILED_RESOURCES_BASENAME "${COMPILED_RESOURCES_BASENAME}") -+ -+ if(PARSED_ARGS_PACKAGE) -+ # create a text file (pkglist.txt) with the list of the *.res to package together -+ add_custom_command( -+ OUTPUT "${PACKAGE_LIST_OUTPUT_PATH}" -+ COMMAND ${CMAKE_COMMAND} -E echo "${COMPILED_RESOURCES_BASENAME}" > "${PACKAGE_LIST_OUTPUT_PATH}" -+ DEPENDS ${COMPILED_RESOURCES_PATH} -+ ) -+ # run pkgdata from pkglist.txt -+ add_custom_command( -+ OUTPUT "${PACKAGE_OUTPUT_PATH}" -+ COMMAND ${CMAKE_COMMAND} -E chdir ${RESOURCE_GENRB_CHDIR_DIR} ${${ICU_PUBLIC_VAR_NS}_PKGDATA_EXECUTABLE} -F ${PKGDATA_${TYPE}_OPTIONS} -s ${PACKAGE_NAME_WE} -p ${PACKAGE_NAME_WE} ${PACKAGE_LIST_OUTPUT_PATH} -+ DEPENDS "${PACKAGE_LIST_OUTPUT_PATH}" -+ VERBATIM -+ ) -+ if(PKGDATA_LIBRARY_${TYPE}_TYPE) -+ # assert(${PARSED_ARGS_DEPENDS} != "") -+ if(NOT PARSED_ARGS_DEPENDS) -+ message(FATAL_ERROR "${__FUNCTION__}(): static and library mode imply a list of targets to link to, DEPENDS parameter missing") -+ endif(NOT PARSED_ARGS_DEPENDS) -+ add_library(${PACKAGE_TARGET_NAME} ${PKGDATA_LIBRARY_${TYPE}_TYPE} IMPORTED) -+ if(MSVC) -+ string(REGEX REPLACE "${PKGDATA_LIBRARY_SUFFIX}\$" "${CMAKE_IMPORT_LIBRARY_SUFFIX}" PACKAGE_OUTPUT_LIB "${PACKAGE_OUTPUT_PATH}") -+ set_target_properties(${PACKAGE_TARGET_NAME} PROPERTIES IMPORTED_LOCATION ${PACKAGE_OUTPUT_PATH} IMPORTED_IMPLIB ${PACKAGE_OUTPUT_LIB}) -+ else(MSVC) -+ set_target_properties(${PACKAGE_TARGET_NAME} PROPERTIES IMPORTED_LOCATION ${PACKAGE_OUTPUT_PATH}) -+ endif(MSVC) -+ foreach(DEPENDENCY ${PARSED_ARGS_DEPENDS}) -+ target_link_libraries(${DEPENDENCY} ${PACKAGE_TARGET_NAME}) -+ if(NOT PARSED_ARGS_NO_SHARED_FLAGS) -+ get_property(ENABLED_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) -+ list(LENGTH "${ENABLED_LANGUAGES}" ENABLED_LANGUAGES_LENGTH) -+ if(ENABLED_LANGUAGES_LENGTH GREATER 1) -+ message(WARNING "Project has more than one language enabled, skip automatic shared flags appending") -+ else(ENABLED_LANGUAGES_LENGTH GREATER 1) -+ set_property(TARGET "${DEPENDENCY}" APPEND PROPERTY COMPILE_FLAGS "${${ICU_PUBLIC_VAR_NS}_${ENABLED_LANGUAGES}_SHARED_FLAGS}") -+ endif(ENABLED_LANGUAGES_LENGTH GREATER 1) -+ endif(NOT PARSED_ARGS_NO_SHARED_FLAGS) -+ endforeach(DEPENDENCY) -+ # http://www.mail-archive.com/cmake-commits@cmake.org/msg01135.html -+ set(PACKAGE_INTERMEDIATE_TARGET_NAME "${PACKAGE_TARGET_NAME}${TARGET_SEPARATOR}DUMMY") -+ # dummy intermediate target (ICU+PKG++DUMMY) to link the package to the produced library by running pkgdata (see add_custom_command above) -+ add_custom_target( -+ ${PACKAGE_INTERMEDIATE_TARGET_NAME} -+ COMMENT "" -+ DEPENDS "${PACKAGE_OUTPUT_PATH}" -+ ) -+ add_dependencies("${PACKAGE_TARGET_NAME}" "${PACKAGE_INTERMEDIATE_TARGET_NAME}") -+ else(PKGDATA_LIBRARY_${TYPE}_TYPE) -+ # dummy target (ICU+PKG+) to run pkgdata (see add_custom_command above) -+ add_custom_target( -+ "${PACKAGE_TARGET_NAME}" ALL -+ COMMENT "" -+ DEPENDS "${PACKAGE_OUTPUT_PATH}" -+ ) -+ endif(PKGDATA_LIBRARY_${TYPE}_TYPE) -+ # dummy target (ICU+PKG++PKGLIST) to build the file pkglist.txt -+ add_custom_target( -+ "${PACKAGE_LIST_TARGET_NAME}" ALL -+ COMMENT "" -+ DEPENDS "${PACKAGE_LIST_OUTPUT_PATH}" -+ ) -+ # package => pkglist.txt -+ add_dependencies("${PACKAGE_TARGET_NAME}" "${PACKAGE_LIST_TARGET_NAME}") -+ # pkglist.txt => *.res -+ add_dependencies("${PACKAGE_LIST_TARGET_NAME}" ${TARGET_RESOURCES}) -+ -+ if(PARSED_ARGS_DESTINATION) -+ install(FILES "${PACKAGE_OUTPUT_PATH}" DESTINATION ${PARSED_ARGS_DESTINATION} PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) -+ endif(PARSED_ARGS_DESTINATION) -+ endif(PARSED_ARGS_PACKAGE) -+ -+endfunction(icu_generate_resource_bundle) -+ -+########## ########## -+ -+########## ########## -+ -+if(${ICU_PUBLIC_VAR_NS}_DEBUG) -+ -+ function(icudebug _VARNAME) -+ if(DEFINED ${ICU_PUBLIC_VAR_NS}_${_VARNAME}) -+ message("${ICU_PUBLIC_VAR_NS}_${_VARNAME} = ${${ICU_PUBLIC_VAR_NS}_${_VARNAME}}") -+ else(DEFINED ${ICU_PUBLIC_VAR_NS}_${_VARNAME}) -+ message("${ICU_PUBLIC_VAR_NS}_${_VARNAME} = ") -+ endif(DEFINED ${ICU_PUBLIC_VAR_NS}_${_VARNAME}) -+ endfunction(icudebug) -+ -+ # IN (args) -+ icudebug("FIND_COMPONENTS") -+ icudebug("FIND_REQUIRED") -+ icudebug("FIND_QUIETLY") -+ icudebug("FIND_VERSION") -+ -+ # OUT -+ # Found -+ icudebug("FOUND") -+ # Flags -+ icudebug("C_FLAGS") -+ icudebug("CPP_FLAGS") -+ icudebug("CXX_FLAGS") -+ icudebug("C_SHARED_FLAGS") -+ icudebug("CPP_SHARED_FLAGS") -+ icudebug("CXX_SHARED_FLAGS") -+ # Linking -+ icudebug("INCLUDE_DIRS") -+ icudebug("LIBRARIES") -+ # Version -+ icudebug("VERSION_MAJOR") -+ icudebug("VERSION_MINOR") -+ icudebug("VERSION_PATCH") -+ icudebug("VERSION") -+ # _(FOUND|LIBRARY) -+ set(${ICU_PRIVATE_VAR_NS}_COMPONENT_VARIABLES "FOUND" "LIBRARY" "LIBRARY_RELEASE" "LIBRARY_DEBUG") -+ foreach(${ICU_PRIVATE_VAR_NS}_COMPONENT ${${ICU_PRIVATE_VAR_NS}_COMPONENTS}) -+ string(TOUPPER "${${ICU_PRIVATE_VAR_NS}_COMPONENT}" ${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT) -+ foreach(${ICU_PRIVATE_VAR_NS}_COMPONENT_VARIABLE ${${ICU_PRIVATE_VAR_NS}_COMPONENT_VARIABLES}) -+ icudebug("${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_${${ICU_PRIVATE_VAR_NS}_COMPONENT_VARIABLE}") -+ endforeach(${ICU_PRIVATE_VAR_NS}_COMPONENT_VARIABLE) -+ endforeach(${ICU_PRIVATE_VAR_NS}_COMPONENT) -+ -+endif(${ICU_PUBLIC_VAR_NS}_DEBUG) -+ -+########## ########## -diff -aur dff-pristine/dff/modules/connector/ewf/ewf.cpp dff/dff/modules/connector/ewf/ewf.cpp ---- dff-pristine/dff/modules/connector/ewf/ewf.cpp 2017-01-12 15:43:14.783144000 +0800 -+++ dff/dff/modules/connector/ewf/ewf.cpp 2017-01-12 15:45:36.262211614 +0800 -@@ -248,7 +248,7 @@ - int res = 0; - mutex_lock(&this->__io_mutex); - libewf_error_t* error = NULL; -- res = libewf_handle_read_random(this->ewf_ghandle, buff, size, fi->offset, &error); -+ res = libewf_handle_read_buffer_at_offset(this->ewf_ghandle, buff, size, fi->offset, &error); - if (res > 0) - fi->offset += res; - mutex_unlock(&this->__io_mutex);