From 79186378ab2504340ab2a5c7dbf2bed665f814b9 Mon Sep 17 00:00:00 2001 From: blshkv Date: Tue, 1 Aug 2017 17:06:30 +0800 Subject: [PATCH] app-forensics: libewf bump, adjust dff and sleuthkit to new api --- app-forensics/dff/Manifest | 7 + app-forensics/dff/dff-1.3.6.ebuild | 97 ++ app-forensics/dff/files/fixes.patch | 866 +++++++++++++++++ app-forensics/dff/files/fixes.patch.orig | 878 ++++++++++++++++++ app-forensics/libewf/Manifest | 1 + app-forensics/libewf/libewf-20170703.ebuild | 122 +++ app-forensics/sleuthkit/Manifest | 1 + .../sleuthkit-3.2.3-tools-shared-libs.patch | 55 ++ .../files/sleuthkit-4.0.0-system-sqlite.patch | 34 + .../files/sleuthkit-4.1.0-system-sqlite.patch | 34 + .../sleuthkit-4.1.0-tools-shared-libs.patch | 55 ++ .../sleuthkit/files/sleuthkit-libewf.patch | 11 + app-forensics/sleuthkit/metadata.xml | 15 + .../sleuthkit/sleuthkit-4.1.3.ebuild | 39 + dev-libs/libsmdev/Manifest | 1 + .../libsmdev/libsmdev-20170225_alpha.ebuild | 59 ++ .../package.accept_keywords/app-forensics | 4 + .../base/package.accept_keywords/dev-libs | 1 + 18 files changed, 2280 insertions(+) create mode 100644 app-forensics/dff/dff-1.3.6.ebuild create mode 100644 app-forensics/dff/files/fixes.patch create mode 100644 app-forensics/dff/files/fixes.patch.orig create mode 100644 app-forensics/libewf/Manifest create mode 100644 app-forensics/libewf/libewf-20170703.ebuild create mode 100644 app-forensics/sleuthkit/Manifest create mode 100644 app-forensics/sleuthkit/files/sleuthkit-3.2.3-tools-shared-libs.patch create mode 100644 app-forensics/sleuthkit/files/sleuthkit-4.0.0-system-sqlite.patch create mode 100644 app-forensics/sleuthkit/files/sleuthkit-4.1.0-system-sqlite.patch create mode 100644 app-forensics/sleuthkit/files/sleuthkit-4.1.0-tools-shared-libs.patch create mode 100644 app-forensics/sleuthkit/files/sleuthkit-libewf.patch create mode 100644 app-forensics/sleuthkit/metadata.xml create mode 100644 app-forensics/sleuthkit/sleuthkit-4.1.3.ebuild create mode 100644 dev-libs/libsmdev/Manifest create mode 100644 dev-libs/libsmdev/libsmdev-20170225_alpha.ebuild diff --git a/app-forensics/dff/Manifest b/app-forensics/dff/Manifest index 160c987e2..15b866328 100644 --- a/app-forensics/dff/Manifest +++ b/app-forensics/dff/Manifest @@ -1 +1,8 @@ DIST dff-1.3.0.tar.gz 3905813 SHA256 6ab0a6854ff81bc5ccf891131291dc73a42c21e4382b2c9c3e2fc00376edbc0f SHA512 a77aa517a4b87939cc584b88f3ab60c625ed36eab5ba58ba56a34a4cc426f1bc69465febe76e4f0ea5682f6078ac7c9e5d5a3e27f66f957770b07cd8e800da03 WHIRLPOOL 3c02124ea592bad05ece5ed69c1cc9683f2a4298cdc3a4679c4500446b25551da3be7e1593b2c7a42eab0ae9cf8e3cfab0e78a18b2d6160418b3462a07291e64 +DIST dff-1.3.6.tar.gz 159706 SHA256 c88c60131c3a299ed7b918fc400eb57d6295859cd695a5b93926d6266509f8cb SHA512 8ae3b030c50b9e8f7e1469e30e5317c5d203cdb06056ef1eab01d602251f0988db93ffef8a2bf74fc856a28e55d3db91120d57fd01641710acf02a737ae64631 WHIRLPOOL 2a5b12c91f340bf7ba5719317c5f6ac0994d0781e7d4bda7998198abf31fcb6106716dcde26652acdd9da7b049030412c477b2afda22d235d30ef8a0ff280c92 +DIST dff-api-aafabd74cfb12d2694fc7a68d9d4469f9da7cb8f.zip 1102686 SHA256 f8e04c7193e27ee12e81df0b67fe7c64c53246ead56121075311f274df11002a SHA512 9e44e766fe627ea3ed0bcd4dc04e2b8c1ccba192c1ae80d47d5994fe71e381bf6545b09fbe920d03d964816fab54d039122589cc98c4823b830c668023eaa589 WHIRLPOOL 7ba0f8f08d29712c0d879643dd3933c23a9d44edb826292d57ac9b28918c96cc638fdf8bbc0e82495301b0bc39154d13eb8bdc98ae9712d3e547e1f5217e34f9 +DIST dff-cmake_modules-92aac8b367c42024cdc1c13ded3d4579ded3dab7.zip 57666 SHA256 4b994cdb386641d2492cbdb59c41936f9e1a29dd51f376fa41c35f3703a50bff SHA512 f3b5312d44b1de4d3a2e8c8c3a9f732e6ed1c599c9dcf9b86f0bb67e0ee111425c693f5e82c3b4f1a3f706f93e629a0079556f0178cf5c6526e5640ed33f64ce WHIRLPOOL d77ce6206cf35285b447fba4f9e360f86e8276eabf4e16a2c23191b6c95abda573b8cc3b82795c960026d82c51a3fae7759deb7912b93166afcb1125691dc2f4 +DIST dff-doc-50d549e578718db8971e7949ee3828db7bca6522.zip 9027616 SHA256 832b4fb2bb07403d18ccff7774d47fbe23b73355877b1c6ecc605a6edfce2e4e SHA512 0d6afcb0d085bc08ce5baf6f0f1ae9d981247122599f58c8cc2e2df4170c14acdc7e70b7528452a599292b0d4d5145fd52ea14f6e2c93555c7b691bf5f0103f8 WHIRLPOOL cfb1a7f69447f3f4640409703e5e0f4640da01d30c93a354f2bbc05b8fdc44644c95a168c2e52ae3ac1832fcf72eb7ff115955e17e449b68349081335a1dbcc8 +DIST dff-modules-2031af67221eb28df2f4304c6ac387d034498860.zip 731451 SHA256 b4983efb6885144b707d55709cb5a8928d0a725239df18a00fac794dbed6a776 SHA512 c148b04fff9dd70572729fccd74b0ab0bd0b280e9116bc2ca0694079c7d5106f863886bf5eee76a45eda4c0d94d4189f180d2c80cc2ede4f020ae3f6f4e2f739 WHIRLPOOL 353bb9e0960215b8ecdfb84b2b59b1ae5800d71386dd7aafb37d25e473c896f211abb724ab9fdb3cda3b30011485de139cf7b2aa87f602c8202840623062db8f +DIST dff-ui-709998b9cfb65b7783a6e93d6fed08f871cb47f3.zip 2809312 SHA256 9897fae44c317324570d6b7c07d5c31db4dba381217f6ebf810387ed2f82fc8b SHA512 f5fee9e4893d381dbf0641dba8e5f66e3d867005667e8aeb277dff817ac29117c7b9116ffdb4ddeea2aff60de510d3f4e4a49f0acaf68888a12a88733bb9fa1d WHIRLPOOL 1ac71c53acc486d715d242e2e00025d54a53c04d4ac15eca7a3aafd62651f30fe6e1cd9421567930d44e2b0892ad606a8801549421c6e3a24dce7d72c97bae3a +DIST dff-unsupported-e66a6b0963c5d4da3c48f80cac70518b1eefda52.zip 73354 SHA256 7073e28c17d23c5420856a5d4c92263a6e83f57a63c6e710bc680d2bb97faf37 SHA512 9ae42268c636f472d23eac329f485cd784c1cce46a22425f3e8f6c151b112f22d1d74a0e6d6215e0c6fcd3d0e76f204969b21789198cb9c11c0a774c15ccc5d7 WHIRLPOOL 8446be2133305ac93396d7d4caf76392ce3ebfb1d6225288dac9945f82bf6645133e5a9813a96205096c2ec22c38abb1fcaf685582e7af4a86e45b1808a87863 diff --git a/app-forensics/dff/dff-1.3.6.ebuild b/app-forensics/dff/dff-1.3.6.ebuild new file mode 100644 index 000000000..d8649ba3a --- /dev/null +++ b/app-forensics/dff/dff-1.3.6.ebuild @@ -0,0 +1,97 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +PYTHON_COMPAT=( python2_7 ) + +inherit cmake-utils python-single-r1 multilib + +CMODULES_COMMIT="92aac8b367c42024cdc1c13ded3d4579ded3dab7" +DOC_COMMIT="50d549e578718db8971e7949ee3828db7bca6522" + +API_COMMIT="aafabd74cfb12d2694fc7a68d9d4469f9da7cb8f" +MODULES_COMMIT="2031af67221eb28df2f4304c6ac387d034498860" +UI_COMMIT="709998b9cfb65b7783a6e93d6fed08f871cb47f3" +UNSUPP_COMMIT="e66a6b0963c5d4da3c48f80cac70518b1eefda52" + +DESCRIPTION="A framework which aims to analyze and recover any kind of digital artifact" +HOMEPAGE="https://github.com/arxsys/dff" +SRC_URI="https://github.com/arxsys/dff/archive/${PV}.tar.gz -> ${P}.tar.gz + https://github.com/arxsys/dff-cmake_modules/archive/${CMODULES_COMMIT}.zip -> dff-cmake_modules-${CMODULES_COMMIT}.zip + https://github.com/arxsys/dff-doc/archive/${DOCS_COMMIT}.zip -> dff-doc-${DOC_COMMIT}.zip + + https://github.com/arxsys/dff-api/archive/${API_COMMIT}.zip -> dff-api-${API_COMMIT}.zip + https://github.com/arxsys/dff-modules/archive/${MODULES_COMMIT}.zip -> dff-modules-${MODULES_COMMIT}.zip + https://github.com/arxsys/dff-ui/archive/${UI_COMMIT}.zip -> dff-ui-${UI_COMMIT}.zip + https://github.com/arxsys/dff-unsupported/archive/${UNSUPP_COMMIT}.zip -> dff-unsupported-${UNSUPP_COMMIT}.zip +" + +RESTRICT="mirror" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~amd64 ~x86" +IUSE="ewf +aff +bfio +pff" + +# doc? ( dev-qt/assistant:4 ) + +RDEPEND="${PYTHON_DEPS} + dev-python/sip[${PYTHON_USEDEP}] + >=dev-python/PyQt4-4.4.0[${PYTHON_USEDEP}] + dev-python/python-magic[${PYTHON_USEDEP}] + dev-python/apsw[${PYTHON_USEDEP}] + virtual/udev + virtual/ffmpeg + dev-python/tre-python + sys-fs/fuse + aff? ( >=app-forensics/afflib-3.6.8 ) + ewf? ( >=app-forensics/libewf-20100226 ) + dev-libs/icu + " + +DEPEND="${RDEPEND} + bfio? ( >=app-forensics/libbfio-0.0.20120425 ) + pff? ( >=app-forensics/libpff-0.0.20120802_alpha ) + >=dev-lang/swig-1.3.38 + app-forensics/reglookup" + +CMAKE_IN_SOURCE_BUILD=1 + +pkg_setup() { + python-single-r1_pkg_setup +} + +src_prepare() { + python_fix_shebang . + +# ln -s ${WORKDIR}/dff-cmake_modules-${CMODULES_COMMIT}/* cmake_modules/ +# ln -s ${WORKDIR}/dff-doc-${DOC_COMMIT}/* doc/ +# ln -s ${WORKDIR}/dff-api-${API_COMMIT}/* dff/api/ +# ln -s ${WORKDIR}/dff-modules-${MODULES_COMMIT}/* dff/modules/ +# ln -s ${WORKDIR}/dff-ui-${UI_COMMIT}/* dff/ui/ +# ln -s ${WORKDIR}/dff-unsupported-${UNSUPP_COMMIT}/* dff/unsupported/ + + cp -r ${WORKDIR}/dff-cmake_modules-${CMODULES_COMMIT}/* cmake_modules/ + cp -r ${WORKDIR}/dff-doc-${DOC_COMMIT}/* doc/ + cp -r ${WORKDIR}/dff-api-${API_COMMIT}/* dff/api/ + cp -r ${WORKDIR}/dff-modules-${MODULES_COMMIT}/* dff/modules/ + 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 + epatch "${FILESDIR}/fixes.patch" + eapply_user +} + +#src_configure() { +# mycmakeargs+=( "-DINSTALL:BOOLEAN=ON" ) +# cmake-utils_src_configure +#} + +#src_install() { +# cmake-utils_src_install + #byte-complation fix +# python_optimize +#} diff --git a/app-forensics/dff/files/fixes.patch b/app-forensics/dff/files/fixes.patch new file mode 100644 index 000000000..fb0fee207 --- /dev/null +++ b/app-forensics/dff/files/fixes.patch @@ -0,0 +1,866 @@ +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 --git a/app-forensics/dff/files/fixes.patch.orig b/app-forensics/dff/files/fixes.patch.orig new file mode 100644 index 000000000..34155ea31 --- /dev/null +++ b/app-forensics/dff/files/fixes.patch.orig @@ -0,0 +1,878 @@ +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); diff --git a/app-forensics/libewf/Manifest b/app-forensics/libewf/Manifest new file mode 100644 index 000000000..a68a77e4e --- /dev/null +++ b/app-forensics/libewf/Manifest @@ -0,0 +1 @@ +DIST libewf-experimental-20170703.tar.gz 2230913 SHA256 84fe12389abacf63dea2d921b636220bb7fda3262d1c467f6d445a5e31f53ade SHA512 ae0706f3d087ae094a19f13a9cb393163eefb4aca34283c35f0eedbe3468890e0c23f88f9cccc1fecc7fe48a7bf71c634e916fd0f54d83c559f0a74b3536ee62 WHIRLPOOL 02baa01e08bce0e2ca6a276ecdba771ffbd04183e41b24dba5e8ec624c6d34db695abe1a028adf75c02cd417de0062296fdba6678e45cceacc1a2e1e2d510759 diff --git a/app-forensics/libewf/libewf-20170703.ebuild b/app-forensics/libewf/libewf-20170703.ebuild new file mode 100644 index 000000000..5ee99cc99 --- /dev/null +++ b/app-forensics/libewf/libewf-20170703.ebuild @@ -0,0 +1,122 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +PYTHON_COMPAT=( python2_7 ) + +inherit versionator autotools python-single-r1 + +MY_DATE="$(get_version_component_range 1)" + +DESCRIPTION="Implementation of the EWF (SMART and EnCase) image format" +HOMEPAGE="http://github.com/libyal/libewf/" +SRC_URI="https://github.com/libyal/${PN}/releases/download/${MY_DATE}/${PN}-experimental-${MY_DATE}.tar.gz" + +LICENSE="LGPL-3" +SLOT="0/3" +KEYWORDS="~amd64 ~hppa ~ppc ~x86" +IUSE="debug ewf fuse python nls ssl unicode uuid zlib" +REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )" +RESTRICT="mirror" + +DEPEND=" + sys-libs/zlib + fuse? ( sys-fs/fuse ) + uuid? ( || ( + >=sys-apps/util-linux-2.16 + <=sys-libs/e2fsprogs-libs-1.41.8 + sys-darwin/libsystem + ) ) + ssl? ( dev-libs/openssl ) + zlib? ( sys-libs/zlib ) + nls? ( + virtual/libintl + virtual/libiconv + ) + dev-libs/libuna + app-forensics/libbfio + python? ( ${PYTHON_DEPS} ) + + dev-libs/libcerror + dev-libs/libcthreads + dev-libs/libcdata + dev-libs/libcdatetime + dev-libs/libclocale + dev-libs/libcnotify + dev-libs/libcsplit + dev-libs/libuna + dev-libs/libcfile + dev-libs/libcpath + dev-libs/libfcache + dev-libs/libfdata + dev-libs/libfguid + dev-libs/libfvalue + + dev-libs/libsmdev +" +TOBE_ADDED=" + dev-libs/libbfio + dev-libs/libcaes + dev-libs/libodraw + dev-libs/libsmraw + +" +RDEPEND="${DEPEND}" + +#https://github.com/libyal/libewf/issues/85 +# dev-libs/libcfile must be with libsmdev + +TEST=" + ADLER32 checksum support: zlib + DEFLATE compression support: zlib + BZIP2 compression support: bzip2 + libhmac support: local + MD5 support: libcrypto_evp + SHA1 support: libcrypto_evp + SHA256 support: libcrypto_evp + AES support: libcrypto_evp +" + +AUTOTOOLS_IN_SOURCE_BUILD=1 + +DOCS=( AUTHORS ChangeLog NEWS README ) + +pkg_setup() { + use python && python-single-r1_pkg_setup +} + +src_configure() { + econf $(use_enable debug debug-output) \ + $(use_enable debug verbose-output) \ + $(use_enable ewf v1-api) \ + $(use_enable python) \ + $(use_enable nls) \ + $(use_with nls libiconv-prefix) \ + $(use_with nls libintl-prefix) \ + $(use_enable unicode wide-character-type) \ + $(use_with zlib) \ + $(use_with ssl openssl) \ + $(use_with uuid libuuid) \ + $(use_with fuse libfuse) + +# autotools-utils_src_configure +# econf $(myeconfargs) + +} + +src_compile() { +# autotools-utils_src_compile + if use python; then + emake -C pyewf + fi + default +} + +src_install() { +# autotools-utils_src_install + if use python; then + emake -C pyewf DESTDIR="${D}" install + fi + default +} diff --git a/app-forensics/sleuthkit/Manifest b/app-forensics/sleuthkit/Manifest new file mode 100644 index 000000000..617a8b83d --- /dev/null +++ b/app-forensics/sleuthkit/Manifest @@ -0,0 +1 @@ +DIST sleuthkit-4.1.3.tar.gz 7952733 SHA256 67f9d2a31a8884d58698d6122fc1a1bfa9bf238582bde2b49228ec9b899f0327 SHA512 66f6ac32da5a21b3505390557ed6cf7bbcfcca69f231e20a7086fd48c5de45a3f064a716837d25eb582d0a89bae3b6ba7e89dcf3159e1cacdb4b5d452d0ce9a2 WHIRLPOOL 34d59163812d5e2b135d6d3a05bc9bed2f2739ab47bd77ed25ee3162eaf7389fec40a7b187745ef65b9596877399884d3081f2f4549fc0c4390382ec247174bc diff --git a/app-forensics/sleuthkit/files/sleuthkit-3.2.3-tools-shared-libs.patch b/app-forensics/sleuthkit/files/sleuthkit-3.2.3-tools-shared-libs.patch new file mode 100644 index 000000000..749c67030 --- /dev/null +++ b/app-forensics/sleuthkit/files/sleuthkit-3.2.3-tools-shared-libs.patch @@ -0,0 +1,55 @@ +--- sleuthkit-3.2.3/tools/autotools/Makefile.am ++++ sleuthkit-3.2.3/tools/autotools/Makefile.am +@@ -1,6 +1,5 @@ + AM_CPPFLAGS = -I../.. -I$(srcdir)/../.. -Wall + LDADD = ../../tsk3/libtsk3.la +-LDFLAGS += -static + EXTRA_DIST = .indent.pro + + bin_PROGRAMS = tsk_recover tsk_loaddb tsk_comparedir tsk_gettimes +--- sleuthkit-3.2.3/tools/fstools/Makefile.am ++++ sleuthkit-3.2.3/tools/fstools/Makefile.am +@@ -1,6 +1,5 @@ + AM_CPPFLAGS = -I../.. -I$(srcdir)/../.. -Wall + LDADD = ../../tsk3/libtsk3.la +-LDFLAGS += -static + EXTRA_DIST = .indent.pro fscheck.cpp + + bin_PROGRAMS = blkcalc blkcat blkls blkstat ffind fls fsstat icat ifind ils \ +--- sleuthkit-3.2.3/tools/hashtools/Makefile.am ++++ sleuthkit-3.2.3/tools/hashtools/Makefile.am +@@ -1,6 +1,5 @@ + AM_CPPFLAGS = -I../.. -I$(srcdir)/../.. -Wall + LDADD = ../../tsk3/libtsk3.la +-LDFLAGS += -static + EXTRA_DIST = .indent.pro md5.c sha1.c + + bin_PROGRAMS = hfind +--- sleuthkit-3.2.3/tools/imgtools/Makefile.am ++++ sleuthkit-3.2.3/tools/imgtools/Makefile.am +@@ -1,6 +1,5 @@ + AM_CPPFLAGS = -I../.. -I$(srcdir)/../.. -Wall + LDADD = ../../tsk3/libtsk3.la +-LDFLAGS += -static + EXTRA_DIST = .indent.pro + + bin_PROGRAMS = img_cat img_stat +--- sleuthkit-3.2.3/tools/srchtools/Makefile.am ++++ sleuthkit-3.2.3/tools/srchtools/Makefile.am +@@ -6,7 +6,6 @@ + + sigfind_SOURCES = sigfind.cpp + sigfind_LDADD = ../../tsk3/libtsk3.la +-sigfind_LDFLAGS = -static + + indent: + indent *.c *.cpp +--- sleuthkit-3.2.3/tools/vstools/Makefile.am ++++ sleuthkit-3.2.3/tools/vstools/Makefile.am +@@ -1,6 +1,5 @@ + AM_CPPFLAGS = -I../.. -I$(srcdir)/../.. -Wall + LDADD = ../../tsk3/libtsk3.la +-LDFLAGS += -static + EXTRA_DIST = .indent.pro + + bin_PROGRAMS = mmls mmstat mmcat diff --git a/app-forensics/sleuthkit/files/sleuthkit-4.0.0-system-sqlite.patch b/app-forensics/sleuthkit/files/sleuthkit-4.0.0-system-sqlite.patch new file mode 100644 index 000000000..7b98f4daf --- /dev/null +++ b/app-forensics/sleuthkit/files/sleuthkit-4.0.0-system-sqlite.patch @@ -0,0 +1,34 @@ +--- sleuthkit-4.0.0/tsk3/auto/db_sqlite.cpp ++++ sleuthkit-4.0.0/tsk3/auto/db_sqlite.cpp +@@ -14,7 +14,7 @@ + */ + + #include "tsk_db_sqlite.h" +-#include "sqlite3.h" ++#include + + #include + +--- sleuthkit-4.0.0/tsk3/auto/Makefile.am ++++ sleuthkit-4.0.0/tsk3/auto/Makefile.am +@@ -3,7 +3,8 @@ + + noinst_LTLIBRARIES = libtskauto.la + # Note that the .h files are in the top-level Makefile +-libtskauto_la_SOURCES = auto.cpp tsk_auto_i.h auto_db.cpp sqlite3.c sqlite3.h db_sqlite.cpp tsk_db_sqlite.h case_db.cpp tsk_case_db.h ++libtskauto_la_SOURCES = auto.cpp tsk_auto_i.h auto_db.cpp db_sqlite.cpp tsk_db_sqlite.h case_db.cpp tsk_case_db.h ++libtskauto_la_LIBADD = -lsqlite3 + + indent: + indent *.cpp *.h +--- sleuthkit-4.0.0/tsk3/auto/tsk_db_sqlite.h ++++ sleuthkit-4.0.0/tsk3/auto/tsk_db_sqlite.h +@@ -25,7 +25,7 @@ + #include + + +-#include "sqlite3.h" ++#include + #include "tsk_auto_i.h" + + using std::map; diff --git a/app-forensics/sleuthkit/files/sleuthkit-4.1.0-system-sqlite.patch b/app-forensics/sleuthkit/files/sleuthkit-4.1.0-system-sqlite.patch new file mode 100644 index 000000000..413357fb5 --- /dev/null +++ b/app-forensics/sleuthkit/files/sleuthkit-4.1.0-system-sqlite.patch @@ -0,0 +1,34 @@ +--- sleuthkit-4.1.0/tsk/auto/db_sqlite.cpp ++++ sleuthkit-4.1.0/tsk/auto/db_sqlite.cpp +@@ -14,7 +14,7 @@ + */ + + #include "tsk_db_sqlite.h" +-#include "sqlite3.h" ++#include + + #include + +--- sleuthkit-4.1.0/tsk/auto/Makefile.am ++++ sleuthkit-4.1.0/tsk/auto/Makefile.am +@@ -3,7 +3,8 @@ + + noinst_LTLIBRARIES = libtskauto.la + # Note that the .h files are in the top-level Makefile +-libtskauto_la_SOURCES = auto.cpp tsk_auto_i.h auto_db.cpp sqlite3.c sqlite3.h db_sqlite.cpp tsk_db_sqlite.h case_db.cpp tsk_case_db.h ++libtskauto_la_SOURCES = auto.cpp tsk_auto_i.h auto_db.cpp db_sqlite.cpp tsk_db_sqlite.h case_db.cpp tsk_case_db.h ++libtskauto_la_LIBADD = -lsqlite3 + + indent: + indent *.cpp *.h +--- sleuthkit-4.1.0/tsk/auto/tsk_db_sqlite.h ++++ sleuthkit-4.1.0/tsk/auto/tsk_db_sqlite.h +@@ -25,7 +25,7 @@ + #include + + +-#include "sqlite3.h" ++#include + #include "tsk_auto_i.h" + + using std::map; diff --git a/app-forensics/sleuthkit/files/sleuthkit-4.1.0-tools-shared-libs.patch b/app-forensics/sleuthkit/files/sleuthkit-4.1.0-tools-shared-libs.patch new file mode 100644 index 000000000..efa335068 --- /dev/null +++ b/app-forensics/sleuthkit/files/sleuthkit-4.1.0-tools-shared-libs.patch @@ -0,0 +1,55 @@ +--- sleuthkit-4.1.0/tools/autotools/Makefile.am ++++ sleuthkit-4.1.0/tools/autotools/Makefile.am +@@ -1,6 +1,5 @@ + AM_CPPFLAGS = -I../.. -I$(srcdir)/../.. -Wall + LDADD = ../../tsk/libtsk.la +-LDFLAGS += -static + EXTRA_DIST = .indent.pro + + bin_PROGRAMS = tsk_recover tsk_loaddb tsk_comparedir tsk_gettimes +--- sleuthkit-4.1.0/tools/fstools/Makefile.am ++++ sleuthkit-4.1.0/tools/fstools/Makefile.am +@@ -1,6 +1,5 @@ + AM_CPPFLAGS = -I../.. -I$(srcdir)/../.. -Wall + LDADD = ../../tsk/libtsk.la +-LDFLAGS += -static + EXTRA_DIST = .indent.pro fscheck.cpp + + bin_PROGRAMS = blkcalc blkcat blkls blkstat ffind fls fcat fsstat icat ifind ils \ +--- sleuthkit-4.1.0/tools/hashtools/Makefile.am ++++ sleuthkit-4.1.0/tools/hashtools/Makefile.am +@@ -1,6 +1,5 @@ + AM_CPPFLAGS = -I../.. -I$(srcdir)/../.. -Wall + LDADD = ../../tsk/libtsk.la +-LDFLAGS += -static + EXTRA_DIST = .indent.pro md5.c sha1.c + + bin_PROGRAMS = hfind +--- sleuthkit-4.1.0/tools/imgtools/Makefile.am ++++ sleuthkit-4.1.0/tools/imgtools/Makefile.am +@@ -1,6 +1,5 @@ + AM_CPPFLAGS = -I../.. -I$(srcdir)/../.. -Wall + LDADD = ../../tsk/libtsk.la +-LDFLAGS += -static + EXTRA_DIST = .indent.pro + + bin_PROGRAMS = img_cat img_stat +--- sleuthkit-4.1.0/tools/srchtools/Makefile.am ++++ sleuthkit-4.1.0/tools/srchtools/Makefile.am +@@ -6,7 +6,6 @@ + + sigfind_SOURCES = sigfind.cpp + sigfind_LDADD = ../../tsk/libtsk.la +-sigfind_LDFLAGS = -static + + indent: + indent *.c *.cpp +--- sleuthkit-4.1.0/tools/vstools/Makefile.am ++++ sleuthkit-4.1.0/tools/vstools/Makefile.am +@@ -1,6 +1,5 @@ + AM_CPPFLAGS = -I../.. -I$(srcdir)/../.. -Wall + LDADD = ../../tsk/libtsk.la +-LDFLAGS += -static + EXTRA_DIST = .indent.pro + + bin_PROGRAMS = mmls mmstat mmcat diff --git a/app-forensics/sleuthkit/files/sleuthkit-libewf.patch b/app-forensics/sleuthkit/files/sleuthkit-libewf.patch new file mode 100644 index 000000000..dc130847d --- /dev/null +++ b/app-forensics/sleuthkit/files/sleuthkit-libewf.patch @@ -0,0 +1,11 @@ +--- tsk/img/ewf.c.orig 2014-01-27 11:27:03.000000000 +0800 ++++ tsk/img/ewf.c 2017-08-01 17:02:28.556100549 +0800 +@@ -66,7 +66,7 @@ + + tsk_take_lock(&(ewf_info->read_lock)); + #if defined( HAVE_LIBEWF_V2_API ) +- cnt = libewf_handle_read_random(ewf_info->handle, ++ cnt = libewf_handle_read_buffer_at_offset(ewf_info->handle, + buf, len, offset, &ewf_error); + if (cnt < 0) { + char *errmsg = NULL; diff --git a/app-forensics/sleuthkit/metadata.xml b/app-forensics/sleuthkit/metadata.xml new file mode 100644 index 000000000..70b3b0ddb --- /dev/null +++ b/app-forensics/sleuthkit/metadata.xml @@ -0,0 +1,15 @@ + + + + + forensics@gentoo.org + Gentoo Forensics Project + + + Enable extra aff formats + Enable libewf support + + + sleuthkit + + diff --git a/app-forensics/sleuthkit/sleuthkit-4.1.3.ebuild b/app-forensics/sleuthkit/sleuthkit-4.1.3.ebuild new file mode 100644 index 000000000..ed08a837f --- /dev/null +++ b/app-forensics/sleuthkit/sleuthkit-4.1.3.ebuild @@ -0,0 +1,39 @@ +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=5 +AUTOTOOLS_AUTORECONF=1 +AUTOTOOLS_IN_SOURCE_BUILD=1 + +inherit autotools-utils + +DESCRIPTION="A collection of file system and media management forensic analysis tools" +HOMEPAGE="http://www.sleuthkit.org/sleuthkit/" +SRC_URI="mirror://sourceforge/${PN}/${P}.tar.gz" + +LICENSE="GPL-2 IBM" +SLOT="0/10" # subslot = major soname version +KEYWORDS="~amd64 ~hppa ~ppc ~x86" +IUSE="aff ewf static-libs" + +DEPEND="dev-db/sqlite:3 + ewf? ( app-forensics/libewf ) + aff? ( app-forensics/afflib )" +RDEPEND="${DEPEND} + dev-perl/Date-Manip" + +DOCS=( NEWS.txt README.txt ) + +PATCHES=( + "${FILESDIR}"/${PN}-4.1.0-system-sqlite.patch + "${FILESDIR}"/${PN}-4.1.0-tools-shared-libs.patch + "${FILESDIR}"/${PN}-libewf.patch +) + +src_configure() { + local myeconfargs=( + $(use_with aff afflib) + $(use_with ewf libewf) + ) + autotools-utils_src_configure +} diff --git a/dev-libs/libsmdev/Manifest b/dev-libs/libsmdev/Manifest new file mode 100644 index 000000000..988e3bf51 --- /dev/null +++ b/dev-libs/libsmdev/Manifest @@ -0,0 +1 @@ +DIST libsmdev-alpha-20170225.tar.gz 1185544 SHA256 aa5d1cac3c23b46adc9c69e8bcc9b3782cfbf6cb0c2ab7fbd2c5a39b299fcc04 SHA512 f56f93b5c27fd41fbf3f1932922d0d318430151a79b8253f79fd1bc8c11d1e05d490b9313dfbe598b7fd907e4fdfecc6da068f4d9fa1da895af29aea9e43a232 WHIRLPOOL 331f80eaf81176ff3ac57ac40a36b0e72a391414f2ddcb28ed83a37b5f91a8a8d623aeb601191c0d3e599737cfed4dfa334791388777fd429f950090cdb49a17 diff --git a/dev-libs/libsmdev/libsmdev-20170225_alpha.ebuild b/dev-libs/libsmdev/libsmdev-20170225_alpha.ebuild new file mode 100644 index 000000000..7aea0415e --- /dev/null +++ b/dev-libs/libsmdev/libsmdev-20170225_alpha.ebuild @@ -0,0 +1,59 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +PYTHON_COMPAT=( python{2_7,3_4,3_5} ) + +inherit versionator autotools python-r1 + +MY_PV="$(get_major_version)" +MY_PV2="$(get_after_major_version)" + +DESCRIPTION="Library to access to storage media device" +HOMEPAGE="https://github.com/libyal/${PN}" +SRC_URI="https://github.com/libyal/${PN}/releases/download/${MY_PV}/${PN}-${MY_PV2}-${MY_PV}.tar.gz" + +LICENSE="LGPL-3" +SLOT="0" +KEYWORDS="~amd64 ~hppa ~ppc ~x86" +IUSE="nls unicode python +threads" + +DEPEND="dev-libs/libcdata + dev-libs/libcerror + dev-libs/libcfile + dev-libs/libclocale + dev-libs/libcnotify + dev-libs/libcthreads + dev-libs/libuna + " + +RDEPEND="${DEPEND}" + +S="${WORKDIR}/${PN}-${MY_PV}" + +src_configure() { +# econf $(use_enable nls) \ + local myconf=( + $(use_with nls libiconv-prefix) + $(use_with nls libintl-prefix) + $(use_enable unicode wide-character-type) + $(use_enable threads multi-threading-support) + --with-libcdata --with-libcerror --with-libcfile + --with-libclocale --with-libcnotify + ) + + if use python ; then + #todo: make python2 optional + myconf+=( --enable-python2 ) + prepare_python() { + if python_is_python3; then + myconf+=( --enable-python3 ) + fi + } + python_foreach_impl run_in_build_dir prepare_python + fi + + econf ${myconf[@]} + +} diff --git a/profiles/pentoo/base/package.accept_keywords/app-forensics b/profiles/pentoo/base/package.accept_keywords/app-forensics index 0106edbb1..1cda19086 100644 --- a/profiles/pentoo/base/package.accept_keywords/app-forensics +++ b/profiles/pentoo/base/package.accept_keywords/app-forensics @@ -22,3 +22,7 @@ app-forensics/libvshadow =app-forensics/xmount-0.7* =app-forensics/origami-pdf-2.0* + +~app-forensics/libewf-20170703 + +~app-forensics/sleuthkit-4.1.3 diff --git a/profiles/pentoo/base/package.accept_keywords/dev-libs b/profiles/pentoo/base/package.accept_keywords/dev-libs index 99d06d6ec..1cc850679 100644 --- a/profiles/pentoo/base/package.accept_keywords/dev-libs +++ b/profiles/pentoo/base/package.accept_keywords/dev-libs @@ -39,3 +39,4 @@ dev-libs/libfdata dev-libs/libfvalue dev-libs/libfwnt dev-libs/libfmapi +dev-libs/libsmdev