File ibus-chewing-drop-cmake-fedora.patch of Package ibus-chewing
diff -Nura ibus-chewing-1.6.1/Modules/CmakeFedoraScript.cmake ibus-chewing-1.6.1_new/Modules/CmakeFedoraScript.cmake
--- ibus-chewing-1.6.1/Modules/CmakeFedoraScript.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/CmakeFedoraScript.cmake 2015-12-17 17:43:31.000000000 +0800
@@ -0,0 +1,240 @@
+# - Cmake Fedora Script
+# Scripts to be invoked in command line
+#
+
+MACRO(CMAKE_FEDORA_SCRIPT_PRINT_USAGE)
+ MESSAGE("cmake-fedora utility scripts
+
+cmake -D cmd=configure_file
+ -D inputFile=<inputFile> -D outputFile=<outputFile>
+ [-D atOnly=1]
+ [-D cmake_fedora_module_dir=<dir>]
+ [-D escape_quotes=1]
+ [\"-D <VAR>=<VAULE>\"]
+ -P <CmakeModulePath>/CmakeFedoraScript.cmake
+ Copy a file to another location and modify its contents.
+ This is a wrapper of CONFIGURE_FILE command in cmake.
+
+ Note: Please pass the necessary variables via -Dvar=VALUE,
+ e.g. -DPROJECT_NAME=cmake-fedora
+ Options:
+ inputFile: input file
+ outPutFile: output file
+ atOnly: Replace only the variables surround by '@', like @VAR@.
+ Same as passing '@ONLY' to CONFIGURE_FILE.
+ cmake_fedora_module_dir:
+ Specify this if cmake and cmake-fedora failed to find
+ the location of CMake Fedora modules.
+ escape_quotes: Substituted quotes will be C-style escape.
+ Same as passing 'ESCAPE_QUOTES' to CONFIGURE_FILE.
+
+cmake -D cmd=find_file|find_program -D \"names=<name1;name2>\"
+ [-D cmake_fedora_module_dir=<dir>]
+ [-D paths=\"<path1>;<path2>\"]
+ [-D error_msg=<msg>]
+ [-D verbose_level=<verboseLevel>]
+ [-D no_default_path=1]
+ -P <CmakeModulePath>/CmakeFedoraScript.cmake
+ Find a file or program with name1 or name2,
+ with proper error handling.
+ Options:
+ cmake_fedora_module_dir:
+ Specify this if cmake and cmake-fedora failed to find
+ the location of CMake Fedora modules.
+ paths: Paths that files might be located.
+ error_msg: Error message to be shown if not-found.
+ verbose_level: Verbose level for not-found message.
+ 1: Critical (The 'not found' message is shown as critical)
+ 2: Error (The 'not found' message is shown as error)
+ 3: Warning (The 'not found' message is shown as warning)
+ 4: Off (The 'not found' message is shown as off,
+ that is, turn off certain functionality).
+ 5: Info1
+ 6: Info2
+ 7: Info3
+ Default: 3 (Warning)
+ no_default_path: CMake default paths will not be search.
+ Useful if you only want to search the file list in -Dpaths.
+
+cmake -D cmd=manage_file_cache -D \"run=<command arg1 ...>\"
+ -D cache_file=<cacheFileWithoutDirectory>
+ [-D cmake_fedora_module_dir=<dir>]
+ [-D expiry_seconds=seconds]
+ [-D cache_dir=dir]
+ -P <CmakeModulePath>/CmakeFedoraScript.cmake
+ Output from either cache file or run command.
+ Command is run when 1) cache expired or 2) no cache.
+ Cache will be update after run command.
+ Options:
+ run=<command arg1 ...>: The command that provide output.
+ cache_file=<file>: The path to cache file.
+ cmake_fedora_module_dir=<dir>:
+ Specify this if cmake and cmake-fedora failed to find
+ the location of CMake Fedora modules.
+ expiry_seconds=<seconds>: After <seconds> the cache should expired.
+ cache_dir=<dir>: The directory to put cache.
+
+
+cmake -D cmd=get_variable -Dvar=<varName>
+ [-D noescape_semicolon=1]
+ -P <CmakeModulePath>/CmakeFedoraScript.cmake
+ Get variable value from cmake-fedora.conf.
+ Options:
+ noescape_semicolon=1: Do not escape semicolon,
+ so ';' split strings can be interpreted as list.
+
+")
+ENDMACRO(CMAKE_FEDORA_SCRIPT_PRINT_USAGE)
+
+FUNCTION(CONFIGURE_FILE_SCRIPT)
+ IF(NOT inputFile)
+ CMAKE_FEDORA_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Requires -DinputFile=<file>")
+ ENDIF()
+ IF(NOT EXISTS "${inputFile}")
+ M_MSG(${M_FATAL} "Input file not exists: ${inputFile}")
+ ENDIF()
+ IF(NOT outputFile)
+ CMAKE_FEDORA_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Requires -DoutputFile=<file>")
+ ENDIF()
+ SET(_opts)
+ IF(escape_quotes)
+ LIST(APPEND _opts "ESCAPE_QUOTES")
+ ENDIF()
+ IF(at_only)
+ LIST(APPEND _opts "@ONLY")
+ ENDIF()
+
+ CONFIGURE_FILE("${inputFile}" "${outputFile}" ${_opts})
+ENDFUNCTION(CONFIGURE_FILE_SCRIPT)
+
+MACRO(FIND_FILE_OR_PROGRAM)
+ SET(_args "")
+ IF(error_msg)
+ LIST(APPEND _args "ERROR_MSG" "${error_msg}")
+ ENDIF()
+
+ SET(_verboseLevel "${M_WARN}")
+ IF(DEFINED verbose_level)
+ SET(_verboseLevel "${verbose_level}")
+ ENDIF()
+ LIST(APPEND _args "VERBOSE_LEVEL" "${_verboseLevel}")
+
+ IF(DEFINED no_default_path)
+ LIST(APPEND _args "NO_DEFAULT_PATH")
+ ENDIF()
+
+ LIST(APPEND _args "FIND_ARGS" "NAMES" "${names}")
+
+ IF(paths)
+ LIST(APPEND _args "PATHS" "${paths}")
+ ENDIF()
+
+ IF(cmd STREQUAL "find_file")
+ FIND_FILE_ERROR_HANDLING(_var ${_args})
+ ELSEIF(cmd STREQUAL "find_program")
+ FIND_PROGRAM_ERROR_HANDLING(_var ${_args})
+ ENDIF()
+ IF(_var STREQUAL "_var-NOTFOUND")
+ M_MSG(${_verboseLevel} "${cmd}: '${names}' not found!")
+ ELSE()
+ M_OUT("${_var}")
+ ENDIF()
+ UNSET(_verboseLevel CACHE)
+ENDMACRO(FIND_FILE_OR_PROGRAM)
+
+FUNCTION(MANAGE_FILE_CACHE_SCRIPT)
+ IF(NOT run)
+ CMAKE_FEDORA_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Requires -Drun=<executable>")
+ ENDIF()
+ IF(NOT cache_file)
+ CMAKE_FEDORA_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Requires -Dcache_file=<filenameWithoutDir>")
+ ENDIF()
+
+ SET(_opts "")
+ IF(expiry_seconds)
+ LIST(APPEND _opts EXPIRY_SECONDS "${expiry_seconds}")
+ ENDIF()
+
+ IF(cache_dir)
+ LIST(APPEND _opts CACHE_DIR "${cache_dir}")
+ ENDIF()
+
+ MANAGE_FILE_CACHE(v ${cache_file} ${_opts} COMMAND sh -c "${run}")
+ M_OUT("${v}")
+ENDFUNCTION(MANAGE_FILE_CACHE_SCRIPT)
+
+FUNCTION(CMAKE_FEDORA_GET_VARIABLE_SCRIPT)
+ IF(NOT var)
+ CMAKE_FEDORA_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Requires -Dvar=<variable>")
+ ENDIF(NOT var)
+ SET(opts)
+ IF(noescape_semicolon)
+ LIST(APPEND opts "NOESCAPE_SEMICOLON")
+ ENDIF()
+ CMAKE_FEDORA_CONF_GET_ALL_VARIABLES(${opts})
+ M_OUT("${${var}}")
+ENDFUNCTION(CMAKE_FEDORA_GET_VARIABLE_SCRIPT)
+
+#######################################
+# Init
+#
+SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
+
+##== Determine CMAKE_FEDORA_MODULE_DIR ==
+## It is possible that current dir is in NO_PACK/FedPkg/<prj>
+LIST(INSERT CMAKE_MODULE_PATH 0
+ ${CMAKE_SOURCE_DIR}/Modules ${CMAKE_SOURCE_DIR}/cmake-fedora/Modules
+ ${CMAKE_SOURCE_DIR}/../../../Modules
+ ${CMAKE_SOURCE_DIR}/../../../cmake-fedora/Modules
+ ${CMAKE_SOURCE_DIR}
+ )
+
+IF(CMAKE_SCRIPT_MODE_FILE)
+ GET_FILENAME_COMPONENT(CMAKE_FEDORA_SCRIPT_DIR ${CMAKE_SCRIPT_MODE_FILE}
+ PATH)
+ LIST(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_FEDORA_SCRIPT_DIR}")
+ENDIF()
+
+IF(cmake_fedora_module_dir)
+ LIST(INSERT CMAKE_MODULE_PATH 0 "${cmake_fedora_module_dir}")
+ENDIF()
+
+##== Policies ==
+IF(POLICY CMP0017)
+ CMAKE_POLICY(SET CMP0017 NEW)
+ENDIF()
+
+##== Module Includes ==
+INCLUDE(ManageMessage RESULT_VARIABLE MANAGE_MODULE_PATH)
+IF(NOT MANAGE_MODULE_PATH)
+ MESSAGE(FATAL_ERROR "ManageMessage.cmake cannot be found in ${CMAKE_MODULE_PATH}")
+ENDIF()
+INCLUDE(ManageFile)
+
+#######################################
+# Parse Arguments and Run
+#
+IF(NOT DEFINED cmd)
+ CMAKE_FEDORA_SCRIPT_PRINT_USAGE()
+ELSEIF(cmd STREQUAL "find_file" OR cmd STREQUAL "find_program")
+ IF(NOT names)
+ CMAKE_FEDORA_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Requires -Dnames=\"<name1;name2>\"")
+ ENDIF(NOT names)
+ FIND_FILE_OR_PROGRAM()
+ELSEIF(cmd STREQUAL "configure_file")
+ CONFIGURE_FILE_SCRIPT()
+ELSEIF(cmd STREQUAL "manage_file_cache")
+ MANAGE_FILE_CACHE_SCRIPT()
+ELSEIF(cmd STREQUAL "get_variable")
+ CMAKE_FEDORA_GET_VARIABLE_SCRIPT()
+ELSE()
+ CMAKE_FEDORA_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Invalid cmd ${cmd}")
+ENDIF()
+
diff -Nura ibus-chewing-1.6.1/Modules/CMakeLists.txt ibus-chewing-1.6.1_new/Modules/CMakeLists.txt
--- ibus-chewing-1.6.1/Modules/CMakeLists.txt 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/CMakeLists.txt 2015-12-17 17:43:31.000000000 +0800
@@ -0,0 +1,10 @@
+FILE(GLOB CMAKE_FEDORA_MODULES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "[A-Z]*.cmake")
+
+## Remove Generated Modules
+LIST(REMOVE_ITEM CMAKE_FEDORA_MODULES "CTestTestfile.cmake")
+
+LIST(APPEND CMAKE_FEDORA_MODULES cmake_uninstall.cmake.in)
+INSTALL(FILES ${CMAKE_FEDORA_MODULES}
+ DESTINATION ${DATA_DIR}/cmake/Modules
+ )
+
diff -Nura ibus-chewing-1.6.1/Modules/cmake_uninstall.cmake.in ibus-chewing-1.6.1_new/Modules/cmake_uninstall.cmake.in
--- ibus-chewing-1.6.1/Modules/cmake_uninstall.cmake.in 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/cmake_uninstall.cmake.in 2014-10-28 13:05:31.000000000 +0800
@@ -0,0 +1,21 @@
+IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+ MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
+ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+
+FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
+STRING(REGEX REPLACE "\n" ";" files "${files}")
+FOREACH(file ${files})
+ MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
+ IF(EXISTS "$ENV{DESTDIR}${file}")
+ EXEC_PROGRAM(
+ "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
+ OUTPUT_VARIABLE rm_out
+ RETURN_VALUE rm_retval
+ )
+ IF(NOT "${rm_retval}" STREQUAL 0)
+ MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
+ ENDIF(NOT "${rm_retval}" STREQUAL 0)
+ ELSE(EXISTS "$ENV{DESTDIR}${file}")
+ MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
+ ENDIF(EXISTS "$ENV{DESTDIR}${file}")
+ENDFOREACH(file)
diff -Nura ibus-chewing-1.6.1/Modules/DateTimeFormat.cmake ibus-chewing-1.6.1_new/Modules/DateTimeFormat.cmake
--- ibus-chewing-1.6.1/Modules/DateTimeFormat.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/DateTimeFormat.cmake 2014-10-28 13:05:31.000000000 +0800
@@ -0,0 +1,38 @@
+# - Date/time format module.
+#
+# Define the following variables:
+# - TODAY_CHANGELOG: Today in the format that is used in RPM Changelog.
+# e.g. Wed 08 Aug 2010
+# - TODAY_SHORT: Short presentation of today, e.g. 20100818.
+#
+# Defines the following macros:
+# TODAY(<date_var> <format> [<locale>])
+# - Get date of today in specified format and locale.
+# * Parameters:
+# + date_var: Result date string
+# + format: date format for date(1)
+# + locale: locale of the string.
+# Use current locale setting if locale is not given.
+#
+#
+
+IF(DEFINED _DATE_TIME_FORMAT_CMAKE_)
+ RETURN()
+ENDIF(DEFINED _DATE_TIME_FORMAT_CMAKE_)
+SET(_DATE_TIME_FORMAT_CMAKE_ "DEFINED")
+
+FUNCTION(TODAY date_var format)
+ SET(_locale ${ARGV2})
+ IF(_locale)
+ SET(ENV{LC_ALL} ${_locale})
+ ENDIF(_locale)
+ EXECUTE_PROCESS(COMMAND date -u "${format}"
+ OUTPUT_VARIABLE _ret
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ SET(${date_var} "${_ret}" PARENT_SCOPE)
+ENDFUNCTION(TODAY date_var format)
+
+TODAY(TODAY_CHANGELOG "+%a %b %d %Y" "C")
+TODAY(TODAY_SHORT "+%Y%m%d" "C")
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageAPIDoc.cmake ibus-chewing-1.6.1_new/Modules/ManageAPIDoc.cmake
--- ibus-chewing-1.6.1/Modules/ManageAPIDoc.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageAPIDoc.cmake 2014-10-28 13:05:31.000000000 +0800
@@ -0,0 +1,120 @@
+# - Manage generated API documents
+# This module provide functions for API document generation.
+#
+# Included Modules:
+# - ManageDependency
+# - ManageMessage
+#
+# Defines following functions:
+# MANAGE_APIDOC_DOXYGEN([DOXYGEN <Doxyfile>]
+# [OUTPUT_DIRECTORY <dir>] ...
+# )
+# - Provide Doxygen processing and targets.
+# DOXYGEN options can also be provided here.
+# For example:
+# MANAGE_APIDOC_DOXYGEN(DOXYGEN Doxyfile
+# OUTPUT_DIRECTORY doc
+# CREATE_SUBDIR no
+# )
+# Will write the configure file to Doxyfile, generate documents
+# will be put in doc/, and CREATE_SUBDIR is set as "no".
+#
+# * Parameters:
+# + DOXYGEN Doxyfile: Doxygen file.
+# Default: ${CMAKE_BINARY_DIR}/Doxygn
+# + OUTPUT_DIRECTORYCREATE_SUBDIR dir: Directory for generated
+# documents.
+# + ... : Other Doxygen options.
+# + docSrcdir: Document source directory to be copied from.
+# * Targets:
+# + doxygen: Make doxygen documents.
+# + doxygen_update_doxyfile: Update Doxyfile.
+# Doxyfile configuration options such as PROJECT_NUMBER will be
+# updated according to project information.
+# * Reads following variable:
+# + PRJ_DOC_DIR: Directory for installed documents.
+# Default: /usr/share/doc/${PROJECT_NAME}
+#
+IF(DEFINED _MANAGE_APIDOC_CMAKE_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_APIDOC_CMAKE_)
+SET(_MANAGE_APIDOC_CMAKE_ "DEFINED")
+INCLUDE(ManageMessage)
+INCLUDE(ManageDependency)
+
+FUNCTION(MANAGE_APIDOC_DOXYGEN_ADD_OPTION doxyfile listVar key value)
+ LIST(APPEND ${listVar}
+ "COMMAND" "sed" "-i" "-e"
+ 's|^${key}\\s*=.*|${key}="${value}"|' "${doxyfile}"
+ )
+ SET(${listVar} "${${listVar}}" PARENT_SCOPE)
+ENDFUNCTION(MANAGE_APIDOC_DOXYGEN_ADD_OPTION)
+
+FUNCTION(MANAGE_APIDOC_DOXYGEN)
+ LIST(APPEND SOURCE_ARCHIVE_IGNORE_FILES "/Doxyfile$")
+ SET(_manage_apidoc_doxygen_dependency_missing 0)
+ MANAGE_DEPENDENCY(BUILD_REQUIRES DOXYGEN PROGRAM_NAMES "doxygen")
+ IF(NOT DEFINED DOXYGEN_FOUND)
+ RETURN()
+ ENDIF(NOT DEFINED DOXYGEN_FOUND)
+ IF("${PRJ_DOC_DIR}" STREQUAL "")
+ SET(PRJ_DOC_DIR "/usr/share/doc/${PROJECT_NAME}"
+ CACHE PATH "Project document dir"
+ )
+ ENDIF("${PRJ_DOC_DIR}" STREQUAL "")
+ M_MSG(${M_INFO2} "PRJ_DOC_DIR=${PRJ_DOC_DIR}")
+
+ SET(_stage "key")
+ SET(_key "")
+ SET(_doxygenOptList "")
+ FOREACH(_arg ${ARGN})
+ IF(_stage STREQUAL "key")
+ SET(_key "${_arg}")
+ SET(_stage "value")
+ ELSE(_stage STREQUAL "key")
+ SET(_opt_${_key} "${_arg}")
+ IF(NOT "${_key}" STREQUAL "DOXYGEN")
+ MANAGE_APIDOC_DOXYGEN_ADD_OPTION("${_opt_DOXYGEN}"
+ _doxygenOptList "${_key}" "${_arg}"
+ )
+ ENDIF(NOT "${_key}" STREQUAL "DOXYGEN")
+ SET(_stage "key")
+ ENDIF(_stage STREQUAL "key")
+ ENDFOREACH(_arg)
+
+ IF("${_opt_DOXYGEN}" STREQUAL "")
+ SET(_opt_DOXYGEN "${CMAKE_BINARY_DIR}/Doxyfile")
+ ENDIF("${_opt_DOXYGEN}" STREQUAL "")
+
+ IF("${_opt_OUTPUT_DIRECTORY}" STREQUAL "")
+ SET(_opt_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/doc")
+ ENDIF("${_opt_OUTPUT_DIRECTORY}" STREQUAL "")
+
+ ADD_CUSTOM_TARGET(doxygen
+ COMMAND "${DOXYGEN_EXECUTABLE}" "${opt_DOXYGEN}"
+ DEPENDS ${_opt_DOXYGEN}
+ COMMENT "doxygen: ${opt_DOXYGEN}"
+ )
+
+ MANAGE_APIDOC_DOXYGEN_ADD_OPTION("${_opt_DOXYGEN}"
+ _doxygenOptList "PROJECT_NAME" "${PROJECT_NAME}"
+ )
+ MANAGE_APIDOC_DOXYGEN_ADD_OPTION("${_opt_DOXYGEN}"
+ _doxygenOptList "PROJECT_NUMBER" "${PRJ_VER}"
+ )
+ MANAGE_APIDOC_DOXYGEN_ADD_OPTION("${_opt_DOXYGEN}"
+ _doxygenOptList "PROJECT_BRIEF" "${PRJ_SUMMARY}"
+ )
+
+ ADD_CUSTOM_TARGET_COMMAND(doxygen_update_doxyfile
+ OUTPUT "${_opt_DOXYGEN}"
+ COMMAND "${DOXYGEN_EXECUTABLE}" -g "${_opt_DOXYGEN}"
+ ${_doxygenOptList}
+ COMMENT "doxygen_update_doxyfile: ${_opt_DOXYGEN}"
+ )
+
+ INSTALL(DIRECTORY ${_opt_OUTPUT_DIRECTORY}
+ DESTINATION "${PRJ_DOC_DIR}"
+ )
+ENDFUNCTION(MANAGE_APIDOC_DOXYGEN doxygen_template)
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageArchive.cmake ibus-chewing-1.6.1_new/Modules/ManageArchive.cmake
--- ibus-chewing-1.6.1/Modules/ManageArchive.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageArchive.cmake 2016-01-07 15:39:34.000000000 +0800
@@ -0,0 +1,341 @@
+# - Manage Source Archive and track its content.
+# This module manages source archive by:
+# - Handle the ChangeLog
+# - Build the source archive
+# - Exclude unwanted files, either from ignore files of source version
+# control, or add them to SOURCE_ARCHIVE_IGNORE_FILES
+# - Track the contents in source archive, when it updates, the source
+# Archive should be updated.
+#
+# This module provide a convenient wrapper of CPack.
+# CPack itself, by default, pack everything under the source directory,
+# this is usually undesirable.
+# We avoid this by using the sane default ignore list.
+#
+# Included Modules:
+# - ManageFile
+# - ManageTarget
+# - ManageVersion
+# - CPack
+#
+# Targets:
+# - pack_src_pre: Target that depends on other targets that need to be made
+# before pack_src.
+#
+# Defines following functions:
+# SOURCE_ARCHIVE_CONTENTS_ADD(<filename>)
+# - Add a file to source archive if the file is not in the archive.
+# * Parameters:
+# - filename: Filename to be added.
+#
+# SOURCE_ARCHIVE_CONTENTS_ADD_NO_CHECK(<filename>)
+# - Add a file to source archive without check.
+# * Parameters:
+# - filename: Filename to be added.
+#
+# Defines following macros:
+# PACK_SOURCE_ARCHIVE([<outputDir> | OUTPUT_FILE <file>]
+# [GENERATOR <cpackGenerator>]
+# [GITIGNORE <gitignoreFile>] [INCLUDE <file ...>])
+# )
+# - Pack source archive..
+# * Parameters:
+# + outputDir: Directory to write source archive.
+# + OUTPUT_FILE file: Output file with path.
+# Default: SOURCES/<projectName>-<PRJ_VER>-Source.<packFormat>
+# + GENERATOR cpackGenerator: The CPack generator
+# Default: TGZ (.tar.gz)
+# + GITIGNORE gitignoreFile: Specify path to .gitignore for using .gitignore
+# to exclude the unwanted files.
+# + INCLUDE file ...: Add back those files to source archive.
+# You can add back the files that would otherwise be excluded,
+# e.g. .pot files.
+# otherwise those will be excluded.
+# * Variables to be cached:
+# + SOURCE_ARCHIVE_CONTENTS: List of files to be packed.
+# + SOURCE_ARCHIVE_FILE: Path of source archive (with path).
+# + SOURCE_ARCHIVE_FILE_EXTENSION: File extension of
+# the source package
+# + SOURCE_ARCHIVE_IGNORE_FILES: List of files to be
+# ignored to archive.
+# + SOURCE_ARCHIVE_NAME: Name of source archive (without path).
+# * Targets:
+# + pack_src: Always pack source files in OUTPUT_FILE
+# + pack_src_no_force: Only pack source files in OUTPUT_FILE when necessary.
+# + dist: Alias of pack_src_no_force
+# + clean_pack_src: Remove all source archives.
+# + clean_old_pack_src: Remove all old source package.
+#
+#
+IF(DEFINED _MANAGE_ARCHIVE_CMAKE_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_ARCHIVE_CMAKE_)
+SET (_MANAGE_ARCHIVE_CMAKE_ "DEFINED")
+
+SET(SOURCE_ARCHIVE_IGNORE_FILES_COMMON
+ "/\\\\.svn/" "/CVS/" "/\\\\.git/" "/\\\\.hg/" "NO_PACK")
+
+SET(SOURCE_ARCHIVE_IGNORE_FILES_CMAKE
+ "/CMakeFiles/" "_CPack_Packages/" "/Testing/"
+ "\\\\.directory$" "CMakeCache\\\\.txt$"
+ "/install_manifest.txt$"
+ "/cmake_install\\\\.cmake$" "/cmake_uninstall\\\\.cmake$"
+ "/CPack.*\\\\.cmake$" "/CTestTestfile\\\\.cmake$"
+ "Makefile$" "/${PROJECT_NAME}-${PRJ_VER}-SOURCE/"
+ )
+SET(SOURCE_ARCHIVE_IGNORE_FILES
+ ${SOURCE_ARCHIVE_IGNORE_FILES_CMAKE}
+ ${SOURCE_ARCHIVE_IGNORE_FILES_COMMON}
+ )
+
+INCLUDE(ManageVersion)
+INCLUDE(ManageFile)
+
+ADD_CUSTOM_TARGET(pack_src_pre
+ COMMENT "pack_src_pre: Before pack_src"
+ )
+
+FUNCTION(SOURCE_ARCHIVE_CONTENTS_SET value)
+ SET(SOURCE_ARCHIVE_CONTENTS "${value}" CACHE INTERNAL "Source archive file list")
+ENDFUNCTION(SOURCE_ARCHIVE_CONTENTS_SET)
+SOURCE_ARCHIVE_CONTENTS_SET("")
+
+## Add whatever it's told
+FUNCTION(SOURCE_ARCHIVE_CONTENTS_ADD_FAST value)
+ LIST(APPEND SOURCE_ARCHIVE_CONTENTS "${value}")
+ SOURCE_ARCHIVE_CONTENTS_SET("${SOURCE_ARCHIVE_CONTENTS}")
+ENDFUNCTION(SOURCE_ARCHIVE_CONTENTS_ADD_FAST)
+
+FUNCTION(SOURCE_ARCHIVE_CONTENTS_ADD)
+ FOREACH(filename ${ARGN})
+ GET_FILENAME_COMPONENT(_file "${filename}" ABSOLUTE)
+ FILE(RELATIVE_PATH _f ${CMAKE_SOURCE_DIR} "${_file}")
+ LIST(FIND SOURCE_ARCHIVE_CONTENTS "${_f}" _index)
+ IF(_index LESS 0)
+ SOURCE_ARCHIVE_CONTENTS_ADD_FAST("${_f}")
+ ENDIF(_index LESS 0)
+ ENDFOREACH(filename)
+ENDFUNCTION(SOURCE_ARCHIVE_CONTENTS_ADD)
+
+FUNCTION(SOURCE_ARCHIVE_CONTENTS_ADD_NO_CHECK)
+ FOREACH(filename ${ARGN})
+ GET_FILENAME_COMPONENT(_file "${filename}" ABSOLUTE)
+ FILE(RELATIVE_PATH _f ${CMAKE_SOURCE_DIR} "${_file}")
+ SOURCE_ARCHIVE_CONTENTS_ADD_FAST("${_f}")
+ ENDFOREACH(filename)
+ENDFUNCTION(SOURCE_ARCHIVE_CONTENTS_ADD_NO_CHECK)
+
+# Internal: SOURCE_ARCHIVE_GET_CONTENTS()
+# - Return all source file to be packed.
+# This is called by SOURCE_ARCHIVE(),
+# So no need to call it again.
+FUNCTION(SOURCE_ARCHIVE_GET_CONTENTS )
+ SET(_fileList "")
+ FILE(GLOB_RECURSE _ls FOLLOW_SYMLINKS "*" )
+ STRING(REPLACE "\\\\" "\\" _ignore_files
+ "${SOURCE_ARCHIVE_IGNORE_FILES}")
+
+ FOREACH(_file ${_ls})
+ SET(_matched 0)
+ FOREACH(filePattern ${_ignore_files})
+ M_MSG(${M_INFO3} "_file=${_file} filePattern=${filePattern}")
+
+ IF(_file MATCHES "${filePattern}")
+ SET(_matched 1)
+ BREAK()
+ ENDIF(_file MATCHES "${filePattern}")
+ ENDFOREACH(filePattern ${_ignore_files})
+ IF(NOT _matched)
+ SOURCE_ARCHIVE_CONTENTS_ADD_NO_CHECK("${_file}")
+ ENDIF(NOT _matched)
+ ENDFOREACH(_file ${_ls})
+ M_MSG(${M_INFO2} "SOURCE_ARCHIVE_CONTENTS=${SOURCE_ARCHIVE_CONTENTS}")
+ENDFUNCTION(SOURCE_ARCHIVE_GET_CONTENTS)
+
+MACRO(CMAKE_REGEX_TO_REGEX var cmrgx)
+ STRING(REPLACE "\\\\" "\\" ${var} "${cmrgx}")
+ENDMACRO(CMAKE_REGEX_TO_REGEX var cmrgx)
+
+MACRO(SOURCE_ARCHIVE_GET_IGNORE_LIST _ignoreListVar _includeListVar)
+ IF(${_ignoreListVar})
+ FILE(STRINGS "${${_ignoreListVar}}" _content REGEX "^[^#]")
+ FOREACH(_s ${_content})
+ STRING(STRIP "${_s}" _s)
+ STRING(LENGTH "${_s}" _l)
+ IF(_l GREATER 0)
+ ## Covert the string from glob to cmake regex
+ GIT_GLOB_TO_CMAKE_REGEX(_cmrgx ${_s})
+ LIST(APPEND SOURCE_ARCHIVE_IGNORE_FILES "${_cmrgx}")
+ ENDIF(_l GREATER 0)
+ ENDFOREACH(_s ${_content})
+ ENDIF(${_ignoreListVar})
+
+ ## regex match one of include files
+ ## then remove that line
+ FOREACH(_ignore_pattern ${SOURCE_ARCHIVE_IGNORE_FILES})
+ CMAKE_REGEX_TO_REGEX(_ip "${_ignore_pattern}")
+ FOREACH(_i ${${_includeListVar}})
+ STRING(REGEX MATCH "${_ip}" _ret "${_i}")
+ IF(_ret)
+ LIST(REMOVE_ITEM SOURCE_ARCHIVE_IGNORE_FILES "${_ignore_pattern}")
+ ENDIF(_ret)
+ ENDFOREACH(_i ${${_includeListVar}})
+ ENDFOREACH(_ignore_pattern ${SOURCE_ARCHIVE_IGNORE_FILES})
+ENDMACRO(SOURCE_ARCHIVE_GET_IGNORE_LIST _ignoreListVar _includeListVar)
+
+MACRO(PACK_SOURCE_CPACK var)
+ SET(_valid_options "GENERATOR" "INCLUDE" "GITIGNORE")
+ VARIABLE_PARSE_ARGN(_opt _valid_options ${ARGN})
+ IF(NOT _opt_GENERATOR)
+ SET(_opt_GENERATOR "TGZ")
+ ENDIF(NOT _opt_GENERATOR)
+ SET(CPACK_GENERATOR "${_opt_GENERATOR}")
+ SET(CPACK_SOURCE_GENERATOR ${CPACK_GENERATOR})
+ IF(${CPACK_GENERATOR} STREQUAL "TGZ")
+ SET(SOURCE_ARCHIVE_FILE_EXTENSION "tar.gz")
+ ELSEIF(${CPACK_GENERATOR} STREQUAL "TBZ2")
+ SET(SOURCE_ARCHIVE_FILE_EXTENSION "tar.bz2")
+ ELSEIF(${CPACK_GENERATOR} STREQUAL "ZIP")
+ SET(SOURCE_ARCHIVE_FILE_EXTENSION "zip")
+ ENDIF(${CPACK_GENERATOR} STREQUAL "TGZ")
+ SET(CPACK_PACKAGE_VERSION ${PRJ_VER})
+ IF(PRJ_SUMMARY)
+ SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PRJ_SUMMARY}")
+ ENDIF(PRJ_SUMMARY)
+ IF(EXISTS ${CMAKE_SOURCE_DIR}/COPYING)
+ SET(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/COPYING)
+ ENDIF(EXISTS ${CMAKE_SOURCE_DIR}/COPYING)
+
+ IF(EXISTS ${CMAKE_SOURCE_DIR}/README)
+ SET(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_SOURCE_DIR}/README)
+ ENDIF(EXISTS ${CMAKE_SOURCE_DIR}/README)
+ SET(CPACK_PACKAGE_VENDOR "${VENDOR}")
+
+ SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PRJ_VER}-Source")
+ LIST(APPEND SOURCE_ARCHIVE_IGNORE_FILES "${PROJECT_NAME}-[^/]*-Source")
+ SET(SOURCE_ARCHIVE_NAME
+ "${CPACK_SOURCE_PACKAGE_FILE_NAME}.${SOURCE_ARCHIVE_FILE_EXTENSION}"
+ CACHE STRING "Source archive name" FORCE
+ )
+ SET(${var} "${SOURCE_ARCHIVE_NAME}")
+
+ SOURCE_ARCHIVE_GET_IGNORE_LIST(_opt_GITIGNORE _opt_INCLUDE)
+ LIST(APPEND CPACK_SOURCE_IGNORE_FILES ${SOURCE_ARCHIVE_IGNORE_FILES})
+ INCLUDE(CPack)
+ENDMACRO(PACK_SOURCE_CPACK var)
+
+MACRO(PACK_SOURCE_ARCHIVE)
+ SET(_valid_options "OUTPUT_FILE" "GENERATOR" "INCLUDE" "GITIGNORE")
+ VARIABLE_PARSE_ARGN(_opt _valid_options ${ARGN})
+ IF(PRJ_VER STREQUAL "")
+ M_MSG(${M_FATAL} "PRJ_VER not defined")
+ ENDIF(PRJ_VER STREQUAL "")
+
+ ## PACK_SOURCE_CPACK to pack with default output file
+ VARIABLE_TO_ARGN(_cpack_source_pack_opts _opt _valid_options)
+ PACK_SOURCE_CPACK(_source_archive_file
+ ${_cpack_source_pack_opts})
+
+ ## Does user want his own output file or directory
+ SET(_own 0)
+ SET(_own_dir 0)
+ SET(_own_file 0)
+ IF(_opt)
+ SET(_outputDir "${_opt}")
+ ENDIF(_opt)
+ IF(_opt_OUTPUT_FILE)
+ GET_FILENAME_COMPONENT(_outputDir ${_opt_OUTPUT_FILE} PATH)
+ GET_FILENAME_COMPONENT(_outputFile ${_opt_OUTPUT_FILE} NAME)
+ ENDIF(_opt_OUTPUT_FILE)
+
+ GET_FILENAME_COMPONENT(_currentDir_real "${CMAKE_CURRENT_BINARY_DIR}" REALPATH)
+ IF(_outputDir)
+ GET_FILENAME_COMPONENT(_outputDir_real ${_outputDir} REALPATH)
+ ELSE(_outputDir)
+ SET(_outputDir_real ${_currentDir_real})
+ ENDIF(_outputDir)
+
+ IF(NOT _outputFile)
+ SET(_outputFile "${_source_archive_file}")
+ ENDIF(NOT _outputFile)
+
+ IF(NOT _outputDir_real STREQUAL "${_currentDir_real}")
+ SET(_own_dir 1)
+ SET(_own 1)
+ ENDIF(NOT _outputDir_real STREQUAL "${_currentDir_real}")
+ IF(NOT _outputFile STREQUAL "${_source_archive_file}")
+ SET(_own_file 1)
+ SET(_own 1)
+ ENDIF(NOT _outputFile STREQUAL "${_source_archive_file}")
+ GET_FILENAME_COMPONENT(SOURCE_ARCHIVE_FILE
+ "${_outputDir_real}/${_outputFile}" ABSOLUTE)
+ SET(SOURCE_ARCHIVE_FILE ${SOURCE_ARCHIVE_FILE}
+ CACHE FILEPATH "Source archive file" FORCE)
+ SET(SOURCE_ARCHIVE_NAME "${_outputFile}"
+ CACHE FILEPATH "Source archive name" FORCE)
+
+ SET(SOURCE_ARCHIVE_CONTENTS_ABSOLUTE "")
+ FOREACH(_file ${SOURCE_ARCHIVE_CONTENTS})
+ LIST(APPEND SOURCE_ARCHIVE_CONTENTS_ABSOLUTE
+ "${CMAKE_HOME_DIRECTORY}/${_file}"
+ )
+ ENDFOREACH(_file ${SOURCE_ARCHIVE_CONTENTS})
+
+ SET(_dep_list "${SOURCE_ARCHIVE_CONTENTS_ABSOLUTE}")
+ ## If own directory,
+ IF(_own_dir)
+ ### Need to create it
+ ADD_CUSTOM_COMMAND(OUTPUT ${_outputDir_real}
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${_outputDir_real}
+ COMMENT "Create dir for source archive output."
+ )
+ LIST(APPEND _dep_list ${_outputDir_real})
+ ENDIF(_own_dir)
+
+ ## If own, need to move to it
+ SET(moveCommands "")
+
+ IF(_own)
+ SET(moveCommands
+ COMMAND ${CMAKE_COMMAND} -E copy "${_source_archive_file}" "${SOURCE_ARCHIVE_FILE}"
+ COMMAND ${CMAKE_COMMAND} -E remove "${_source_archive_file}"
+ )
+ ENDIF(_own)
+
+ INCLUDE(ManageTarget)
+ ADD_CUSTOM_TARGET_COMMAND(pack_src
+ NO_FORCE
+ OUTPUT ${SOURCE_ARCHIVE_FILE}
+ COMMAND make pack_src_pre
+ COMMAND make package_source
+ ${moveCommands}
+ DEPENDS ${_dep_list}
+ COMMENT "Packing the source as: ${SOURCE_ARCHIVE_FILE}"
+ VERBATIM
+ )
+
+ ADD_DEPENDENCIES(pack_src changelog)
+ ADD_DEPENDENCIES(pack_src_no_force changelog_no_force)
+
+ ADD_CUSTOM_TARGET(dist
+ )
+
+ ADD_DEPENDENCIES(dist pack_src_no_force)
+
+ ADD_CUSTOM_TARGET(clean_old_pack_src
+ COMMAND find .
+ -name '${PROJECT_NAME}*.${SOURCE_ARCHIVE_FILE_EXTENSION}' ! -name '${PROJECT_NAME}-${PRJ_VER}-*.${SOURCE_ARCHIVE_FILE_EXTENSION}'
+ -print -delete
+ COMMENT "Cleaning old source archives"
+ )
+
+ ADD_DEPENDENCIES(clean_old_pack_src changelog_no_force )
+
+ ADD_CUSTOM_TARGET(clean_pack_src
+ COMMAND find .
+ -name '${PROJECT_NAME}*.${SOURCE_ARCHIVE_FILE_EXTENSION}'
+ -print -delete
+ COMMENT "Cleaning all source archives"
+ )
+ENDMACRO(PACK_SOURCE_ARCHIVE)
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageChangeLogScript.cmake ibus-chewing-1.6.1_new/Modules/ManageChangeLogScript.cmake
--- ibus-chewing-1.6.1/Modules/ManageChangeLogScript.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageChangeLogScript.cmake 2016-01-07 15:39:34.000000000 +0800
@@ -0,0 +1,205 @@
+# - Manage ChangeLog
+#
+# Note that ChangeLog will be updated only when
+#
+# cmake -D cmd=update [Options] -P ManageChangeLogScript.cmake
+#
+# is run. This is triggered by:
+# 1. Target changelog
+# 2. Before source archive being built.
+#
+MACRO(MANAGE_CHANGELOG_SCRIPT_PRINT_USAGE)
+ MESSAGE("Manage ChangeLog script: This script is not recommend for end users.
+
+cmake -D cmd=make
+ -D changelog=<path/ChangeLog>
+ -D release=<path/RELEASE-NOTES.txt>
+ -D prj_info=<path/prj_info.cmake>
+ [-D \"<var>=<value>\"]
+ -P <CmakeModulePath>/ManageChangeLogScript.cmake
+ Always update ChangeLog.
+
+cmake -D cmd=update
+ -D changelog=<path/ChangeLog>
+ -D release=<path/RELEASE-NOTES.txt>
+ -D prj_info=<path/prj_info.cmake>
+ -D cmakecache=<path/CMakeCache.txt>
+ [-D cmake_source_dir=<dir>]
+ [-D \"<var>=<value>\"]
+ -P <CmakeModulePath>/ManageChangeLogScript.cmake
+ This command updates ChangeLog only at one of following condition.
+ 1) ChangeLog does not exists
+ 2) RELEASE-NOTES.txt is newer than CMakeCache.txt
+ 3) RELEASE-NOTES.txt is newer than ChangeLog
+
+cmake -D cmd=extract_current
+ -D release=<path/RELEASE-NOTES.txt>
+ [-D \"<var>=<value>\"]
+ -P <CmakeModulePath>/ManageChangeLogScript.cmake
+ Extract current Changelog items from RELEASE-NOTES.txt
+
+cmake -D cmd=extract_prev
+ -D ver=<ver>
+ -D changelog=<path/ChangeLog>
+ [-D \"<var>=<value>\"]
+ -P <CmakeModulePath>/ManageChangeLogScript.cmake
+ Extract prev Changelog items from ChangeLog.
+
+"
+ )
+ENDMACRO()
+
+MACRO(EXTRACT_CURRENT_FROM_RELEASE strVar release)
+ IF("${release}" STREQUAL "")
+ MANAGE_CHANGELOG_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Requires \"-Drelease=RELEASE-NOTES.txt\"")
+ ENDIF()
+ IF(NOT EXISTS "${release}")
+ M_MSG(${M_FATAL} "File not found:${release}")
+ ENDIF()
+ RELEASE_NOTES_FILE_EXTRACT_CHANGELOG_CURRENT(${strVar} ${release})
+ENDMACRO()
+
+MACRO(EXTRACT_PREV_FROM_CHANGELOG strVar ver changeLogFile)
+ IF("${ver}" STREQUAL "")
+ MANAGE_CHANGELOG_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "EXTRACT_PREV_FROM_CHANGELOG: Requires \"ver\"")
+ ENDIF()
+ IF("${changeLogFile}" STREQUAL "")
+ MANAGE_CHANGELOG_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Requires \"-Dchangelog=ChangeLog\"")
+ ENDIF()
+ IF(NOT EXISTS "${changeLogFile}")
+ M_MSG(${M_FATAL} "File not found:${changeLogFile}")
+ ENDIF()
+
+ SET(_this "")
+ SET(_prev "")
+ SET(_isThis 0)
+ SET(_isPrev 0)
+ EXECUTE_PROCESS(COMMAND cat "${changeLogFile}"
+ OUTPUT_VARIABLE _changeLogFileBuf
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ STRING_SPLIT(_lines "\n" "${_changeLogFileBuf}" ALLOW_EMPTY)
+
+ ## List should not ingore empty elements
+ CMAKE_POLICY(SET CMP0007 NEW)
+ LIST(LENGTH _lines _lineCount)
+ MATH(EXPR _lineCount ${_lineCount}-1)
+ FOREACH(_i RANGE ${_lineCount})
+ LIST(GET _lines ${_i} _line)
+ STRING(REGEX MATCH "^\\* [A-Za-z]+ [A-Za-z]+ [0-9]+ [0-9]+ .*<.+> - (.*)$" _match "${_line}")
+ IF("${_match}" STREQUAL "")
+ # Not a version line
+ IF(_isThis)
+ STRING_APPEND(_this "${_line}" "\n")
+ ELSEIF(_isPrev)
+ STRING_APPEND(_prev "${_line}" "\n")
+ ELSE(_isThis)
+ M_MSG(${M_ERROR} "ChangeLog: Cannot distinguish version for line :${_line}")
+ ENDIF(_isThis)
+ ELSE("${_match}" STREQUAL "")
+ # Is a version line
+ SET(_cV "${CMAKE_MATCH_1}")
+ IF("${_cV}" STREQUAL "${ver}")
+ SET(_isThis 1)
+ SET(_isPrev 0)
+ ELSE("${_cV}" STREQUAL "${ver}")
+ SET(_isThis 0)
+ SET(_isPrev 1)
+ STRING_APPEND(_prev "${_line}" "\n")
+ ENDIF("${_cV}" STREQUAL "${ver}")
+ ENDIF("${_match}" STREQUAL "")
+ ENDFOREACH(_i RANGE _lineCount)
+ SET(${strVar} "${_prev}")
+ENDMACRO()
+
+MACRO(CHANGELOG_MAKE prj_info release changelog)
+ PRJ_INFO_CMAKE_READ("${prj_info}")
+
+ EXTRACT_CURRENT_FROM_RELEASE(currentStr "${release}")
+ IF(EXISTS "${changelog}")
+ EXTRACT_PREV_FROM_CHANGELOG(prevStr "${PRJ_VER}" "${changelog}")
+ ENDIF()
+ FILE(WRITE "${changelog}" "* ${TODAY_CHANGELOG} ${MAINTAINER} - ${PRJ_VER}\n")
+ FILE(APPEND "${changelog}" "${currentStr}\n\n")
+ FILE(APPEND "${changelog}" "${prevStr}")
+ENDMACRO()
+
+SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
+#######################################
+# Determine CMAKE_FEDORA_MODULE_DIR
+#
+
+## It is possible that current dir is in NO_PACK/FedPkg/<prj>
+LIST(INSERT CMAKE_MODULE_PATH 0
+ ${CMAKE_SOURCE_DIR}/Modules ${CMAKE_SOURCE_DIR}/cmake-fedora/Modules
+ ${CMAKE_SOURCE_DIR}/../../../Modules
+ ${CMAKE_SOURCE_DIR}/../../../cmake-fedora/Modules
+ ${CMAKE_SOURCE_DIR}
+ )
+
+IF(CMAKE_SCRIPT_MODE_FILE)
+ GET_FILENAME_COMPONENT(CMAKE_FEDORA_SCRIPT_DIR ${CMAKE_SCRIPT_MODE_FILE}
+ PATH
+ )
+ LIST(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_FEDORA_SCRIPT_DIR}")
+ENDIF()
+
+IF(cmake_fedora_module_dir)
+ LIST(INSERT CMAKE_MODULE_PATH 0 "${cmake_fedora_module_dir}")
+ENDIF()
+
+INCLUDE(ManageMessage RESULT_VARIABLE MANAGE_MODULE_PATH)
+IF(NOT MANAGE_MODULE_PATH)
+ MESSAGE(FATAL_ERROR "ManageMessage.cmake cannot be found in ${CMAKE_MODULE_PATH}")
+ENDIF()
+GET_FILENAME_COMPONENT(CMAKE_FEDORA_MODULE_DIR
+ "${MANAGE_MODULE_PATH}" PATH)
+
+INCLUDE(ManageEnvironmentCommon)
+INCLUDE(DateTimeFormat)
+INCLUDE(ManageVersion)
+IF(NOT DEFINED cmd)
+ MANAGE_CHANGELOG_SCRIPT_PRINT_USAGE()
+ELSE()
+ IF("${cmd}" STREQUAL "make")
+ CHANGELOG_MAKE(${prj_info} ${release} ${changelog})
+ ELSEIF("${cmd}" STREQUAL "update")
+ RELEASE_NOTES_READ_FILE(${release})
+ SET(updateRequired 0)
+ IF(cmake_source_dir STREQUAL "")
+ SET(cmake_source_dir ".")
+ ENDIF()
+ IF(EXISTS "${changelog}")
+ IF(${release} IS_NEWER_THAN ${changelog})
+ EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} ${cmake_source_dir})
+ SET(updateRequired 1)
+ ELSEIF(NOT PRJ_VER EQUAL PRJ_VER_CACHED)
+ EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} ${cmake_source_dir})
+ SET(updateRequired 1)
+ ENDIF()
+ ELSE()
+ SET(updateRequired 1)
+ ENDIF()
+
+ IF(updateRequired)
+ CHANGELOG_MAKE(${prj_info} ${release} ${changelog})
+ ENDIF()
+ ELSEIF("${cmd}" STREQUAL "extract_current")
+ EXTRACT_CURRENT_FROM_RELEASE(outVar ${release})
+ M_OUT("${outVar}")
+ ELSEIF("${cmd}" STREQUAL "extract_prev")
+ IF("${ver}" STREQUAL "")
+ MANAGE_CHANGELOG_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Requires \"-Dver=ver\"")
+ ENDIF()
+ EXTRACT_PREV_FROM_CHANGELOG(outVar ${ver} ${changelog})
+ M_OUT("${outVar}")
+ ELSE()
+ MANAGE_CHANGELOG_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Invalid cmd ${cmd}")
+ ENDIF()
+ENDIF()
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageDependency.cmake ibus-chewing-1.6.1_new/Modules/ManageDependency.cmake
--- ibus-chewing-1.6.1/Modules/ManageDependency.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageDependency.cmake 2016-01-29 16:14:12.000000000 +0800
@@ -0,0 +1,244 @@
+# - Dependency Management Module
+# This module handle dependencies by using pkg-config and/or
+# search the executable.
+#
+# Included Modules:
+# - ManageFile
+# - ManageString
+# - ManageVariable
+#
+# Variable to be read:
+# + MANAGE_DEPENDENCY_PACKAGE_EXISTS_CMD: Command and options that check
+# the existence of a package
+# Default: rpm -q
+#
+# + MANAGE_DEPENDENCY_PACKAGE_INSTALL_CMD: Command and options that install
+# a package
+# Default: yum -y install
+#
+# Defines following functions:
+# MANAGE_DEPENDENCY(<listVar> <var> [VER <ver> [EXACT]] [REQUIRED]
+# [PROGRAM_NAMES <name1> ...] [PROGRAM_SEARCH_PATHS <path1> ...]
+# [PKG_CONFIG <pkgConfigName1> ...]
+# [PACKAGE_NAME <packageName> | DEVEL]
+# )
+# - Add a new dependency to a list.
+# The dependency will also be searched.
+# If found, ${var}_FOUND is set as 1.
+# If not found:
+# + If REQUIRED is specified: a M_ERROR message will be printed. # + If REQUIRED is not specified: a M_OFF message will be printed.
+# See "Variables to cache" for the variable overridden and output.
+# * Parameters:
+# + listVar: List variable store a kind of dependencies.
+# Recognized lists:
+# - BUILD_REQUIRES: Dependencies in build stage
+# - REQUIRES: Dependencies for runtime
+# - REQUIRES_PRE: Dependencies before the package install
+# - REQUIRES_PREUN: Dependencies before the package uninstall
+# - REQUIRES_POST: Dependencies after the package install
+# - REQUIRES_POSTUN:Dependencies after the package uninstall
+# + var: Main variable. Uppercase variable name is recommended,
+# (e.g. GETTEXT)
+# + VER ver [EXACT]: Minimum version.
+# Specify the exact version by providing "EXACT".
+# + REQUIRED: The dependency is required at cmake build time.
+# + PROGRAM_NAMES name1 ...: Executable to be found.
+# name2 and others are aliases to name1.
+# If found, ${var}_EXECUTABLE is defined as the full path
+# to the executable; if not found; the whole dependency is
+# deemed as not found.
+# + PROGRAM_SEARCH_PATHS path1 ...: Additional program search path.
+# It will act as PATHS arguments for FIND_PROGRAM.
+# + PKG_CONFIG pkgConfigName1 ...: List of the pkg-config file
+# exclude the directory and .pc. e.g. "gtk+-2.0"
+# + PACKAGE_NAME packageName: The actual package name in repository.
+# If not specified, use the lowercase of ${var}.
+# For example, use following to specify libchewing as dependency
+# under the name CHEWING:
+# MANAGE_DEPENDENCY(REQUIRES CHEWING PACKAGE_NAME "libchewing")
+# + DEVEL: search lowercase of ${var}-devel.
+# A shortcut to PACKAGE_NAME ${var}-devel.
+# * Variables to cache:
+# + ${listVar}_${listVar}_${var}_PACKAGE_NAME: The actual package name in repository.
+# Override this if your system is different from Fedora.
+# + ${listVar}_${var}_PKG_CONFIG: List of pkg-config files.
+# Override this if your system is different from Fedora.
+# + ${var}_<print_variable>: The pkg-config variables.
+# For example, datadir=/usr/share/chewing will be
+# ${var}_DATADIR, whose value is "/usr/share/chewing"
+#
+IF(DEFINED _MANAGE_DEPENDENCY_CMAKE_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_DEPENDENCY_CMAKE_)
+SET(_MANAGE_DEPENDENCY_CMAKE_ "DEFINED")
+INCLUDE(ManageFile)
+INCLUDE(ManageVariable)
+INCLUDE(ManageString)
+SET(MANAGE_DEPENDENCY_PACKAGE_EXISTS_CMD rpm -q
+ CACHE STRING "Package exist command"
+ )
+
+SET(MANAGE_DEPENDENCY_PACKAGE_INSTALL_CMD yum -y install
+ CACHE STRING "Package exist command"
+ )
+
+## This need to be here, otherwise the variable won't be available
+## the 2nd time called.
+FIND_PACKAGE(PkgConfig)
+
+## This is declared as function, because
+## macro does not play nice if listVar is required in different
+## source dir.
+FUNCTION(MANAGE_DEPENDENCY listVar var)
+ SET(_validOptions "VER" "EXACT" "REQUIRED"
+ "PROGRAM_NAMES" "PROGRAM_SEARCH_PATHS" "PKG_CONFIG" "PACKAGE_NAME" "DEVEL")
+ VARIABLE_PARSE_ARGN(_opt _validOptions ${ARGN})
+ SET(_dirty 0)
+
+ IF("${${listVar}_${var}_PACKAGE_NAME}" STREQUAL "")
+ IF(_opt_PACKAGE_NAME)
+ IF(DEFINED _opt_DEVEL)
+ M_MSG(${M_ERROR} "PACKAGE_NAME cannot use with DEVEL")
+ ENDIF()
+ SET(${listVar}_${var}_PACKAGE_NAME "${_opt_PACKAGE_NAME}")
+ ELSE(_opt_PACKAGE_NAME)
+ STRING(TOLOWER "${var}" ${listVar}_${var}_PACKAGE_NAME)
+ IF(DEFINED _opt_DEVEL)
+ STRING_APPEND(${listVar}_${var}_PACKAGE_NAME "-devel")
+ ENDIF()
+ ENDIF(_opt_PACKAGE_NAME)
+ SET(${listVar}_${var}_PACKAGE_NAME "${${listVar}_${var}_PACKAGE_NAME}"
+ CACHE STRING "${listVar}_${var}_PACKAGE_NAME")
+ ENDIF()
+ SET(pkgName "${${listVar}_${var}_PACKAGE_NAME}")
+
+ IF(DEFINED _opt_REQUIRED)
+ SET(_verbose "${M_ERROR}")
+ SET(_required "REQUIRED")
+ SET(_progNotFoundMsg
+ "Program names ${_opt_PROGRAM_NAMES} not found, install ${pkgName}")
+ ELSE(DEFINED _opt_REQUIRED)
+ SET(_verbose "${M_OFF}")
+ SET(_required "")
+ SET(_progNotFoundMsg
+ "Program names ${_opt_PROGRAM_NAMES} not found, ${var} support disabled")
+ ENDIF(DEFINED _opt_REQUIRED)
+
+ IF(_opt_VER)
+ IF(DEFINED _opt_EXACT)
+ SET(_rel "=")
+ SET(_exact "EXACT")
+ ELSE(DEFINED _opt_EXACT)
+ SET(_rel ">=")
+ SET(_exact "")
+ ENDIF(DEFINED _opt_EXACT)
+ ENDIF(_opt_VER)
+
+ IF(_opt_PROGRAM_NAMES)
+ M_MSG(${M_INFO2} "ManageDependency: Finding program names ${_opt_PROGRAM_NAMES}")
+ SET(_findArgs FIND_ARGS NAMES "${_opt_PROGRAM_NAMES}")
+ IF(_opt_PROGRAM_SEARCH_PATHS)
+ LIST(APPEND _findArgs PATHS ${_opt_PROGRAM_SEARCH_PATHS})
+ ENDIF()
+ FIND_PROGRAM_ERROR_HANDLING(${var}_EXECUTABLE
+ ERROR_VAR _dirty
+ ERROR_MSG "${_progNotFoundMsg}"
+ VERBOSE_LEVEL "${_verbose}"
+ ${_findArgs}
+ )
+ MARK_AS_ADVANCED(${var}_EXECUTABLE)
+ ENDIF(_opt_PROGRAM_NAMES)
+
+ IF("${_opt_VER}" STREQUAL "")
+ SET(_newDep "${pkgName}")
+ ELSE("${_opt_VER}" STREQUAL "")
+ SET(_newDep "${pkgName} ${_rel} ${_opt_VER}")
+ ENDIF("${_opt_VER}" STREQUAL "")
+
+ ## Check package exist
+ SET(pkgExistsCmdMissing 0)
+ LIST(GET MANAGE_DEPENDENCY_PACKAGE_EXISTS_CMD 0 pkgExistsCmd)
+ FIND_PROGRAM_ERROR_HANDLING(PKG_EXISTS_CMD
+ ERROR_VAR pkgExistsCmdMissing
+ ERROR_MSG "ManageDependency: Program ${pkgExistsCmd} not found, dependency check disabled."
+ VERBOSE_LEVEL ${M_OFF}
+ FIND_ARGS ${pkgExistsCmd}
+ )
+
+ IF(NOT pkgExistsCmdMissing)
+ EXECUTE_PROCESS(COMMAND ${MANAGE_DEPENDENCY_PACKAGE_EXISTS_CMD} ${pkgName}
+ RESULT_VARIABLE pkgMissing
+ OUTPUT_QUIET
+ ERROR_QUIET
+ )
+ IF(pkgMissing)
+ ## Dependency not found
+ M_MSG(${_verbose} "Package ${pkgName} is not installed")
+ SET(_dirty 1)
+ ENDIF(pkgMissing)
+ ENDIF()
+
+ ## PKG_CONFIG
+ IF("${${listVar}_${var}_PKG_CONFIG}" STREQUAL "")
+ IF(_opt_PKG_CONFIG)
+ SET(${listVar}_${var}_PKG_CONFIG "${_opt_PKG_CONFIG}"
+ CACHE STRING "${listVar}_${var}_PKG_CONFIG")
+ ENDIF(_opt_PKG_CONFIG)
+ ENDIF()
+ SET(pkgConf "${${listVar}_${var}_PKG_CONFIG}")
+
+ IF(pkgConf)
+ IF(PKG_CONFIG_EXECUTABLE)
+ ## Add pkgconfig itself as dependency
+ SET(PKG_CONFIG_PACKAGE_NAME "pkgconfig"
+ CACHE STRING "PKG_CONFIG_PACKAGE_NAME")
+ LIST(FIND ${listVar} "${PKG_CONFIG_PACKAGE_NAME}" _index)
+ IF(_index EQUAL -1)
+ LIST(APPEND ${listVar} "${PKG_CONFIG_PACKAGE_NAME}")
+ ENDIF(_index EQUAL -1)
+ ELSE(PKG_CONFIG_EXECUTABLE)
+ M_MSG(${M_ERROR} "pkgconfig is required with ${var}")
+ ENDIF(PKG_CONFIG_EXECUTABLE)
+ SET(pCList "")
+ FOREACH(pC ${pkgConf})
+ LIST(APPEND pCList "${pC}${_rel}${_opt_VER}")
+ ## Get all variables
+ EXECUTE_PROCESS(COMMAND ${PKG_CONFIG_EXECUTABLE}
+ --print-variables "${pC}"
+ OUTPUT_VARIABLE _variables
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ RESULT_VARIABLE pkgconfigFailed
+ )
+ IF(NOT pkgconfigFailed)
+ STRING_SPLIT(${var}_VARIABLES "\n" "${_variables}")
+ FOREACH(_v ${${var}_VARIABLES})
+ STRING(TOUPPER "${_v}" _u)
+ EXECUTE_PROCESS(COMMAND ${PKG_CONFIG_EXECUTABLE}
+ --variable "${_v}" "${pC}"
+ OUTPUT_VARIABLE ${var}_${pC}_${_u}
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ SET(${var}_${pC}_${_u} "${${var}_${pC}_${_u}}"
+ CACHE INTERNAL "pkgconfig ${${var}_${pC}_${_u}}")
+
+ MARK_AS_ADVANCED(${${var}_${pC}_${_u}})
+ M_MSG(${M_INFO1} "${var}_${pC}_${_u}=${${var}_${pC}_${_u}}")
+ ENDFOREACH(_v)
+
+ ENDIF(NOT pkgconfigFailed)
+ ENDFOREACH(pC)
+ PKG_CHECK_MODULES(${var} ${_required}
+ ${pCList})
+ ENDIF(pkgConf)
+
+ ## Insert when it's not duplicated
+ IF(NOT _dirty)
+ SET(${var}_FOUND "1" CACHE INTERNAL "Found ${var}")
+ ENDIF(NOT _dirty)
+ LIST(FIND ${listVar} "${_newDep}" _index)
+ IF(_index EQUAL -1)
+ LIST(APPEND ${listVar} "${_newDep}")
+ SET(${listVar} "${${listVar}}" CACHE INTERNAL "${listVar} package list")
+ ENDIF(_index EQUAL -1)
+ENDFUNCTION(MANAGE_DEPENDENCY)
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageEnvironment.cmake ibus-chewing-1.6.1_new/Modules/ManageEnvironment.cmake
--- ibus-chewing-1.6.1/Modules/ManageEnvironment.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageEnvironment.cmake 2016-01-29 15:15:26.000000000 +0800
@@ -0,0 +1,168 @@
+# - Manage environment in build mode after project information is defined.
+#
+# This module manages build mode environment, including variables, compiler
+# flags and CMake policies.
+#
+# The main difference between this module and ManageEnvironmentCommon are:
+# - ManageEnvironmentCommon is called by both script and build mode;
+# while this module is called by only build mode.
+# - ManageEnvironmentCommon should be invoked before project definition;
+# this module should be invoked after project definition.
+# - ManageEnvironmentCommon caches only variables;
+# this module not only caches variables, but also set the compiler flags.
+#
+# Included Modules:
+# - ManageMessage
+#
+# Reads following variables:
+# - CMAKE_INSTALL_PREFIX: Install directory used by install.
+# - PROJECT_NAME: Project name.
+#
+# Set cache for following variables:
+# - PRJ_DATA_DIR: Project data dir
+# Default: ${DATA_DIR}/${PROJECT_NAME}
+# - PRJ_DOC_DIR: Project doc dir
+# Default: ${DOC_DIR}/${PROJECT_NAME}
+#
+# Defines following compile flags: (which use variables with same names)
+# - CMAKE_INSTALL_PREFIX
+# - PROJECT_NAME
+# - BIN_DIR
+# - DATA_DIR
+# - DOC_DIR
+# - SYSCONF_DIR
+# - LIB_DIR
+# - LIBEXEC_DIR
+# - PRJ_DATA_DIR
+# - PRJ_DOC_DIR
+#
+# Note: compile flag PRJ_VER is defined in ManageVersion.
+#
+# Defines following functions:
+# SET_COMPILE_ENV(<var> [<defaultValue>] [ENV_NAME <envName>]
+# [CACHE <type> <docstring> [FORCE]]
+# )
+# - Ensure a variable is set to nonempty value, then set the value
+# to the compile flags with same name.
+#
+# The value is determined by first non-empty value:
+# 1. Value of <var>.
+# 2. Value of environment variable <var>,
+# or if ENV_NAME is specified, value of <envName>.
+# 3. <defaultValue>
+# * Parameters:
+# + var: Variable to be set
+# + defaultValue: Default value of the var
+# + envName: (Optional)The name of environment variable.
+# Only need if different from var.
+# + CACHE type docstring [FORCE]:
+# Same with "SET" command.
+#
+
+IF(DEFINED _MANAGE_ENVIRONMENT_CMAKE_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_ENVIRONMENT_CMAKE_)
+SET(_MANAGE_ENVIRONMENT_CMAKE_ "DEFINED")
+
+FUNCTION(SET_COMPILE_ENV var)
+ SET(_stage "")
+ SET(_env "${var}")
+ SET(_setOpts "")
+ SET(_force 0)
+ SET(_defaultValue "")
+ CMAKE_POLICY(PUSH)
+ IF(POLICY CMP0054)
+ CMAKE_POLICY(SET CMP0054 OLD)
+ ENDIF()
+
+ FOREACH(_arg ${ARGN})
+ IF("${_arg}" STREQUAL "ENV_NAME")
+ SET(_stage "ENV_NAME")
+ ELSEIF("${_arg}" STREQUAL "CACHE")
+ SET(_stage "_CACHE")
+ ELSE()
+ IF("${_stage}" STREQUAL "ENV_NAME")
+ SET(_env "${_arg}")
+ ELSEIF("${_stage}" STREQUAL "_CACHE")
+ LIST(APPEND _setOpts "${_arg}")
+ IF("${_arg}" STREQUAL "FORCE")
+ SET(_force 1)
+ ENDIF()
+ ELSE()
+ SET(_defaultValue "${_arg}")
+ ENDIF()
+ ENDIF()
+ ENDFOREACH(_arg ${ARGN})
+
+ IF("${_setOpts}" STREQUAL "")
+ SET(_setOpts "PARENT_SCOPE")
+ ELSE()
+ LIST(INSERT _setOpts 0 "CACHE")
+ ENDIF()
+
+ # Set the variable
+ IF(NOT "${${var}}" STREQUAL "")
+ SET(${var} "${${var}}" ${_setOpts})
+ ELSEIF(NOT "$ENV{${_env}}" STREQUAL "")
+ SET(${var} "$ENV{${_env}}" ${_setOpts})
+ ELSE()
+ ## Use default value
+ SET(${var} "${_defaultValue}" ${_setOpts})
+ ENDIF()
+
+ # Enforce CMP0005 to new, yet pop after ADD_DEFINITION
+ CMAKE_POLICY(SET CMP0005 NEW)
+ ADD_DEFINITIONS(-D${_env}=${${var}})
+ CMAKE_POLICY(POP)
+ M_MSG(${M_INFO2} "SET_COMPILE_ENV: ${var}=${${var}}")
+ENDFUNCTION(SET_COMPILE_ENV)
+
+MACRO(MANAGE_CMAKE_POLICY policyName defaultValue)
+ IF(POLICY ${policyName})
+ CMAKE_POLICY(GET "${policyName}" _cmake_policy_value)
+ IF(_cmake_policy_value STREQUAL "")
+ # Policy not defined yet
+ CMAKE_POLICY(SET "${policyName}" "${defaultValue}")
+ ENDIF(_cmake_policy_value STREQUAL "")
+ ENDIF(POLICY ${policyName})
+ENDMACRO(MANAGE_CMAKE_POLICY policyName defaultValue)
+
+####################################################################
+# Variables settings
+#
+
+## CMAKE_FEODRA_MODULE_DIR: Directory contains cmake-fedora modules
+INCLUDE(ManageMessage RESULT_VARIABLE MANAGE_ENVIRONMENT_PATH)
+GET_FILENAME_COMPONENT(CMAKE_FEDORA_MODULE_DIR
+ "${MANAGE_ENVIRONMENT_PATH}" PATH CACHE
+ )
+
+FILE(MAKE_DIRECTORY "${CMAKE_FEDORA_TMP_DIR}")
+
+## Print CMake system information
+M_MSG(${M_INFO1} "CMAKE_HOST_SYSTEM=${CMAKE_HOST_SYSTEM}")
+M_MSG(${M_INFO1} "CMAKE_HOST_SYSTEM_PROCESSOR=${CMAKE_HOST_SYSTEM_PROCESSOR}")
+M_MSG(${M_INFO1} "CMAKE_SYSTEM=${CMAKE_SYSTEM}")
+M_MSG(${M_INFO1} "CMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}")
+
+## Set compile flags
+SET_COMPILE_ENV(BIN_DIR)
+SET_COMPILE_ENV(DATA_DIR)
+SET_COMPILE_ENV(DOC_DIR)
+SET_COMPILE_ENV(SYSCONF_DIR)
+SET_COMPILE_ENV(LIB_DIR)
+SET_COMPILE_ENV(LIBEXEC_DIR)
+
+IF(CMAKE_SYSTEM_PROCESSOR MATCHES "64")
+ SET_COMPILE_ENV(IS_64)
+ENDIF(CMAKE_SYSTEM_PROCESSOR MATCHES "64")
+
+SET_COMPILE_ENV(PRJ_DATA_DIR "${DATA_DIR}/${PROJECT_NAME}"
+ CACHE PATH "Project data dir"
+ )
+SET_COMPILE_ENV(PRJ_DOC_DIR "${DOC_DIR}/${PROJECT_NAME}"
+ CACHE PATH "Project doc dir"
+ )
+
+SET_COMPILE_ENV(PROJECT_NAME)
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageEnvironmentCommon.cmake ibus-chewing-1.6.1_new/Modules/ManageEnvironmentCommon.cmake
--- ibus-chewing-1.6.1/Modules/ManageEnvironmentCommon.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageEnvironmentCommon.cmake 2015-12-17 17:43:31.000000000 +0800
@@ -0,0 +1,75 @@
+# - cmake-fedora environment common setting.
+#
+# This module defines the common settings of both normal and script mode.
+# Normally this module should be the first to call.
+#
+# Set cache for following variables:
+# - CMAKE_INSTALL_PREFIX:
+# Default: "/usr"
+# - BIN_DIR: Binary dir
+# Default: "${CMAKE_INSTALL_PREFIX}/bin"
+# - DATA_DIR: Data dir
+# Default: "${CMAKE_INSTALL_PREFIX}/share"
+# - DOC_DIR: Documentation dir
+# Default: "${DATA_DIR}/doc"
+# - SYSCONF_DIR: System configuration dir
+# Default: "/etc"
+# - LIB_DIR: System wide library path.
+# Default: ${CMAKE_INSTALL_PREFIX}/lib for 32 bit,
+# ${CMAKE_INSTALL_PREFIX}/lib64 for 64 bit.
+# - LIBEXEC_DIR: Directory for executables that should not called by
+# end-user directly
+# Default: "${CMAKE_INSTALL_PREFIX}/libexec"
+# - CMAKE_FEDORA_SCRIPT_PATH_HINTS: PATH hints to find cmake-fedora scripts
+# - CMAKE_FEDORA_TMP_DIR: Director that stores cmake-fedora
+# temporary items.
+# Default: ${CMAKE_BINARY_DIR}/NO_PACK
+# - MANAGE_MESSAGE_LEVEL: Message (Verbose) Level
+# Default: 5
+#
+#
+#
+IF(DEFINED _MANAGE_ENVIRONMENT_COMMON_CMAKE_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_ENVIRONMENT_COMMON_CMAKE_)
+SET(_MANAGE_ENVIRONMENT_COMMON_CMAKE_ "DEFINED")
+SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
+
+# Default CMAKE_INSTALL_PREFIX should be set before PROJECT()
+SET(CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "Install dir prefix")
+
+SET(BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Binary dir")
+SET(DATA_DIR "${CMAKE_INSTALL_PREFIX}/share" CACHE PATH "Data dir")
+SET(DOC_DIR "${DATA_DIR}/doc" CACHE PATH "Doc dir")
+SET(LIBEXEC_DIR "${CMAKE_INSTALL_PREFIX}/libexec" CACHE PATH "Libexec dir")
+SET(SYSCONF_DIR "/etc" CACHE PATH
+ "System configuration dir"
+ )
+
+
+## CMAKE_SYSTEM_PROCESSOR does not see to be defined yet
+EXECUTE_PROCESS(COMMAND uname -p
+ OUTPUT_VARIABLE UNAME_P
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+IF("${UNAME_P}" MATCHES "64")
+ SET(IS_64 "64" CACHE STRING "IS_64")
+ENDIF()
+SET(LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib${IS_64}"
+ CACHE PATH "Library dir"
+ )
+
+SET(CMAKE_FEDORA_SCRIPT_PATH_HINTS
+ ${CMAKE_SOURCE_DIR}/scripts ${CMAKE_SOURCE_DIR}/cmake-fedora/scripts
+ ${CMAKE_SOURCE_DIR}/../scripts ${CMAKE_SOURCE_DIR}/../cmake-fedora/scripts
+ ${CMAKE_SOURCE_DIR}/../../scripts ${CMAKE_SOURCE_DIR}/../../cmake-fedora/scripts
+ CACHE INTERNAL "CMAKE_FEDORA_SCRIPT_PATH_HINTS"
+ )
+
+## CMAKE_FEDORA_TMP_DIR: Directory stores temporary files.
+SET(CMAKE_FEDORA_TMP_DIR "${CMAKE_BINARY_DIR}/NO_PACK"
+ CACHE PATH "cmake-fedora tmp dir")
+
+## Message level INFO1 (5)
+SET(MANAGE_MESSAGE_LEVEL 5 CACHE STRING "Message (Verbose) Level")
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageFile.cmake ibus-chewing-1.6.1_new/Modules/ManageFile.cmake
--- ibus-chewing-1.6.1/Modules/ManageFile.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageFile.cmake 2015-12-17 17:43:31.000000000 +0800
@@ -0,0 +1,505 @@
+# - Manage files
+#
+# Included Modules:
+# - ManageMessage
+# - ManageVariable
+#
+# Defines following functions:
+# FIND_FILE_ERROR_HANDLING(<var>
+# [ERROR_MSG <errorMessage>]
+# [ERROR_VAR <errorVar>]
+# [VERBOSE_LEVEL <verboseLevel>]
+# [FIND_ARGS ...]
+# )
+# - Find a file, with proper error handling.
+# It is essentially a wrapper of FIND_FILE
+# * Parameters:
+# + var: The variable that stores the path of the found program.
+# + name: The filename of the command.
+# + verboseLevel: See ManageMessage for semantic of
+# each verbose level.
+# + ERROR_MSG errorMessage: Error message to be append.
+# + ERROR_VAR errorVar: Variable that will be set to 1
+# when not found.
+# + FIND_ARGS: A list of arguments to be passed
+# to FIND_FILE
+#
+# FIND_PROGRAM_ERROR_HANDLING(<var>
+# [ERROR_MSG <errorMessage>]
+# [ERROR_VAR <errorVar>]
+# [VERBOSE_LEVEL <verboseLevel>]
+# [FIND_ARGS ...]
+# )
+# - Find an executable program, with proper error handling.
+# It is essentially a wrapper of FIND_PROGRAM
+# * Parameters:
+# + var: The variable that stores the path of the found program.
+# + name: The filename of the command.
+# + verboseLevel: See ManageMessage for semantic of
+# each verbose level.
+# + ERROR_MSG errorMessage: Error message to be append.
+# + ERROR_VAR errorVar: Variable that will be set to 1
+# when not found.
+# + FIND_ARGS: A list of arguments to be passed
+# to FIND_PROGRAM
+#
+# GIT_GLOB_TO_CMAKE_REGEX(<var> <glob>)
+# - Convert git glob to cmake file regex
+# This macro covert git glob used in gitignore to
+# cmake file regex used in CPACK_SOURCE_IGNORE_FILES
+# * Parameters:
+# + var: Variable that hold the result.
+# + glob: Glob to be converted
+#
+# MANAGE_CMAKE_FEDORA_CONF(<var>
+# [ERROR_MSG <errorMessage>]
+# [ERROR_VAR <errorVar>]
+# [VERBOSE_LEVEL <verboseLevel>]
+# )
+# - Locate cmake-fedora.conf
+# Return the location of cmake-fedora.conf.
+# It search following places:
+# ${CMAKE_SOURCE_DIR}, ${CMAKE_SOURCE_DIR}/cmake-fedora,
+# current dir, ./cmake-fedora and /etc.
+# * Parameters:
+# + var: The variable that returns the path of cmake-fedora.conf
+# + verboseLevel: See ManageMessage for semantic of
+# each verbose level.
+# + ERROR_MSG errorMessage: Error message to be append.
+# + ERROR_VAR errorVar: This variable will be set to 1
+# when cmake-fedora.conf is not found.
+#
+# MANAGE_FILE_COMMON_DIR(<var> <file1> ...>)
+# - Get the longest common path.
+# Note that this function just do string comparison, it does not convert to real path.
+# It is recommended to use all absolute paths or all relative paths.
+# * Parameters:
+# + var: The variable that returns the file expiry status.
+# Valid status: ERROR, NOT_FOUND, EXPIRED, NOT_EXPIRED.
+# + file1 ...: files to compare.
+#
+#
+# MANAGE_FILE_CACHE(<var> <file> [EXPIRY_SECONDS <expirySecond>]
+# [CACHE_DIR <dir>] [ERROR_VAR <errorVar>] [RESULT_VAR resultVar]
+# COMMAND <cmd ...>
+# )
+# - Manage cached program output.
+# If cache is not existed, it runs the command and create the cache;
+# otherwise if cache is not expired, it returns the cached content;
+# otherwise if cache is expired, it run sthe command and update the
+# cache.
+# Then this program returns cache content.
+# * Parameters:
+# + var: The variable the stores the content of the cache file.
+# + file: File to be processed.
+# + EXPIRY_SECONDS expirySecond: (Optional) Seconds
+# before the file expired.
+# If not specified, it will use the value LOCAL_CACHE_EXPIRY
+# in cmake-fedora.conf, or 259200 (3 days).
+# + CACHE_DIR dir: (Optional) Directory of <file>.
+# If not specified, it will use the value
+# LOCAL_CACHE_DIR in cmake-fedora.conf,
+# or $ENV{HOME}/.cache/cmake-fedora .
+# + ERROR_VAR errorVar: This variable will be set to 1
+# when cache cannot be created.
+# + RESULT_VAR resultVar: This variable returns the exit code
+# for <cmd>.
+# + COMMAND <cmd ...>: Command to produceoutput.
+#
+# MANAGE_FILE_EXPIRY(<var> <file> <expirySecond>)
+# - Tell whether a file is expired.
+# A file is deemed as expired if (currenTime - mtime) is greater
+# than specified expiry time in seconds.
+# * Parameters:
+# + var: The variable that returns the file expiry status.
+# Valid status: ERROR, NOT_FOUND, EXPIRED, NOT_EXPIRED.
+# + file: File to be processed.
+# + expirySecond: Seconds before the file expired.
+#
+#
+# Defines following macros:
+# MANAGE_FILE_INSTALL(<fileType>
+# [<files> | FILES <files>] [DEST_SUBDIR <subDir>]
+# [RENAME <newName>] [ARGS <args>]
+# )
+# - (Deprecated) Manage file installation.
+# You can use cmake built-in INSTALL after cmake-fedora-2.0.0
+# * Parameters:
+# + fileType: Type of files. Valid values:
+# BIN, PRJ_DOC, DATA, PRJ_DATA,
+# SYSCONF, SYSCONF_NO_REPLACE,
+# LIB, LIBEXEC, TARGETS
+# + DEST_SUBDIR subDir: Subdir of Destination dir
+# + files: Files to be installed.
+# + RENAME newName: Destination filename.
+# + ARGS args: Arguments for INSTALL.
+#
+
+IF(DEFINED _MANAGE_FILE_CMAKE_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_FILE_CMAKE_)
+SET(_MANAGE_FILE_CMAKE_ "DEFINED")
+SET(FILE_INSTALL_LIST_TYPES
+ "BIN" "PRJ_DOC" "DATA" "PRJ_DATA" "SYSCONF" "SYSCONF_NO_REPLACE"
+ "LIB" "LIBEXEC"
+ )
+INCLUDE(ManageMessage RESULT_VARIABLE MANAGE_MODULE_PATH)
+GET_FILENAME_COMPONENT(CMAKE_FEDORA_MODULE_DIR "${MANAGE_MODULE_PATH}" PATH)
+INCLUDE(ManageVariable)
+INCLUDE(ManageString)
+
+## Common path between two
+FUNCTION(MANAGE_FILE_COMMON_DIR_2 var file1 file2 separator)
+ SET(result "")
+ IF("${file1}" STREQUAL "${file2}")
+ SET(result "${file1}")
+ ELSE()
+ STRING_SPLIT(dirA1 "${separator}" "${file1}")
+ LIST(LENGTH dirA1 dirA1Len)
+ STRING_SPLIT(dirA2 "${separator}" "${file2}")
+ LIST(LENGTH dirA2 dirA2Len)
+ SET(i 0)
+ WHILE(i LESS dirA1Len)
+ IF(NOT i LESS dirA2Len)
+ BREAK()
+ ENDIF()
+ LIST(GET dirA1 ${i} token1)
+ LIST(GET dirA2 ${i} token2)
+ IF(NOT "${token1}" STREQUAL "${token2}")
+ BREAK()
+ ENDIF()
+ STRING_APPEND(result "${token1}" "${separator}")
+ MATH(EXPR i ${i}+1)
+ ENDWHILE()
+ ENDIF()
+ SET(${var} "${result}" PARENT_SCOPE)
+ENDFUNCTION(MANAGE_FILE_COMMON_DIR_2)
+
+FUNCTION(MANAGE_FILE_COMMON_DIR var file1)
+ SET(separator "/")
+ IF(EXISTS "${file1}")
+ IF(IS_DIRECTORY "${file1}")
+ SET(commonDir "${file1}")
+ ELSE()
+ GET_FILENAME_COMPONENT(commonDir "${file1}" PATH)
+ ENDIF()
+ ELSE()
+ SET(commonDir "${file1}")
+ ENDIF()
+
+ FOREACH(f ${ARGN})
+ MANAGE_FILE_COMMON_DIR_2(commonDir "${commonDir}" "${f}" "${separator}")
+ IF("${commonDir}" STREQUAL "")
+ BREAK()
+ ENDIF()
+ ENDFOREACH(f)
+ SET(${var} "${commonDir}" PARENT_SCOPE)
+ENDFUNCTION(MANAGE_FILE_COMMON_DIR)
+
+MACRO(_MANAGE_FILE_SET_FILE_INSTALL_LIST fileType)
+ SET(FILE_INSTALL_${fileType}_LIST "${FILE_INSTALL_${fileType}_LIST}"
+ CACHE INTERNAL "List of files install as ${fileType}" FORCE
+ )
+ENDMACRO(_MANAGE_FILE_SET_FILE_INSTALL_LIST fileType)
+
+FOREACH(_fLT ${FILE_INSTALL_LIST_TYPES})
+ SET(FILE_INSTALL_${_fLT}_LIST "")
+ _MANAGE_FILE_SET_FILE_INSTALL_LIST(${_fLT})
+ENDFOREACH(_fLT ${FILE_INSTALL_LIST_TYPES})
+
+MACRO(_MANAGE_FILE_INSTALL_FILE_OR_DIR fileType)
+ IF(_opt_RENAME)
+ SET(_install_options "RENAME" "${_opt_RENAME}")
+ ELSE(_opt_RENAME)
+ SET(_install_options "")
+ ENDIF (_opt_RENAME)
+ FOREACH(_f ${_fileList})
+ GET_FILENAME_COMPONENT(_a "${_f}" ABSOLUTE)
+ SET(_absolute "")
+ STRING(REGEX MATCH "^/" _absolute "${_f}")
+ IF(IS_DIRECTORY "${_a}")
+ SET(_install_type "DIRECTORY")
+ ELSE(IS_DIRECTORY "${_a}")
+ IF("${fileType}" STREQUAL "BIN")
+ SET(_install_type "PROGRAMS")
+ ELSE("${fileType}" STREQUAL "BIN")
+ SET(_install_type "FILES")
+ ENDIF("${fileType}" STREQUAL "BIN")
+ ENDIF(IS_DIRECTORY "${_a}")
+ INSTALL(${_install_type} ${_f} DESTINATION "${_destDir}"
+ ${_install_options} ${ARGN})
+ IF(_opt_RENAME)
+ SET(_n "${_opt_RENAME}")
+ ELSEIF(_absolute)
+ GET_FILENAME_COMPONENT(_n "${_f}" NAME)
+ ELSE(_opt_RENAME)
+ SET(_n "${_f}")
+ ENDIF(_opt_RENAME)
+
+ IF(_opt_DEST_SUBDIR)
+ LIST(APPEND FILE_INSTALL_${fileType}_LIST
+ "${_opt_DEST_SUBDIR}/${_n}")
+ ELSE(_opt_DEST_SUBDIR)
+ LIST(APPEND FILE_INSTALL_${fileType}_LIST
+ "${_n}")
+ ENDIF(_opt_DEST_SUBDIR)
+ ENDFOREACH(_f ${_fileList})
+ _MANAGE_FILE_SET_FILE_INSTALL_LIST("${fileType}")
+
+ENDMACRO(_MANAGE_FILE_INSTALL_FILE_OR_DIR fileType)
+
+MACRO(_MANAGE_FILE_INSTALL_TARGET)
+ SET(_installValidOptions "RUNTIME" "LIBEXEC" "LIBRARY" "ARCHIVE")
+ VARIABLE_PARSE_ARGN(_oT _installValidOptions ${ARGN})
+ SET(_installOptions "")
+ FOREACH(_f ${_fileList})
+ GET_TARGET_PROPERTY(_tP "${_f}" TYPE)
+ IF(_tP STREQUAL "EXECUTABLE")
+ LIST(APPEND _installOptions RUNTIME)
+ IF(_oT_RUNTIME)
+ LIST(APPEND FILE_INSTALL_BIN_LIST ${_f})
+ _MANAGE_FILE_SET_FILE_INSTALL_LIST("BIN")
+ LIST(APPEND _installOptions "${_oT_RUNTIME}")
+ ELSEIF(_oT_LIBEXEC)
+ LIST(APPEND FILE_INSTALL_LIBEXEC_LIST ${_f})
+ _MANAGE_FILE_SET_FILE_INSTALL_LIST("LIBEXEC")
+ LIST(APPEND _installOptions "${_oT_LIBEXEC}")
+ ELSE(_oT_RUNTIME)
+ M_MSG(${M_ERROR}
+ "MANAGE_FILE_INSTALL_TARGETS: Type ${_tP} is not yet implemented.")
+ ENDIF(_oT_RUNTIME)
+ ELSEIF(_tP STREQUAL "SHARED_LIBRARY")
+ LIST(APPEND FILE_INSTALL_LIB_LIST ${_f})
+ _MANAGE_FILE_SET_FILE_INSTALL_LIST("LIB")
+ LIST(APPEND _installOptions "LIBRARY" "${_oT_LIBRARY}")
+ ELSEIF(_tP STREQUAL "STATIC_LIBRARY")
+ M_MSG(${M_OFF}
+ "MANAGE_FILE_INSTALL_TARGETS: Fedora does not recommend type ${_tP}, excluded from rpm")
+ LIST(APPEND _installOptions "ARCHIVE" "${_oT_ARCHIVE}")
+ ELSE(_tP STREQUAL "EXECUTABLE")
+ M_MSG(${M_ERROR}
+ "MANAGE_FILE_INSTALL_TARGETS: Type ${_tP} is not yet implemented.")
+ ENDIF(_tP STREQUAL "EXECUTABLE")
+ ENDFOREACH(_f ${_fileList})
+ INSTALL(TARGETS ${_fileList} ${_installOptions})
+ENDMACRO(_MANAGE_FILE_INSTALL_TARGET)
+
+MACRO(MANAGE_FILE_INSTALL fileType)
+ SET(_validOptions "DEST_SUBDIR" "FILES" "ARGS" "RENAME")
+ VARIABLE_PARSE_ARGN(_opt _validOptions ${ARGN})
+ SET(_fileList "")
+ LIST(APPEND _fileList ${_opt} ${_opt_FILES})
+
+ IF("${fileType}" STREQUAL "SYSCONF_NO_REPLACE")
+ SET(_destDir "${SYSCONF_DIR}/${_opt_DEST_SUBDIR}")
+ _MANAGE_FILE_INSTALL_FILE_OR_DIR("${fileType}")
+ ELSEIF("${fileType}" STREQUAL "TARGETS")
+ _MANAGE_FILE_INSTALL_TARGET(${_opt_ARGS})
+ ELSE("${fileType}" STREQUAL "SYSCONF_NO_REPLACE")
+ SET(_destDir "${${fileType}_DIR}/${_opt_DEST_SUBDIR}")
+ _MANAGE_FILE_INSTALL_FILE_OR_DIR("${fileType}")
+ ENDIF("${fileType}" STREQUAL "SYSCONF_NO_REPLACE")
+ENDMACRO(MANAGE_FILE_INSTALL fileType)
+
+FUNCTION(FIND_ERROR_HANDLING type vari)
+ SET(_verboseLevel ${M_ERROR})
+ SET(_errorMsg "")
+ SET(_errorVar "")
+ SET(_findFileArgList "")
+ SET(_state "")
+ FOREACH(_arg ${ARGN})
+ IF(_state STREQUAL "ERROR_MSG")
+ SET(_errorMsg "${_arg}")
+ SET(_state "")
+ ELSEIF(_state STREQUAL "ERROR_VAR")
+ SET(_errorVar "${_arg}")
+ SET(_state "")
+ ELSEIF(_state STREQUAL "VERBOSE_LEVEL")
+ SET(_verboseLevel "${_arg}")
+ SET(_state "")
+ ELSEIF(_state STREQUAL "FIND_ARGS")
+ LIST(APPEND _findFileArgList "${_arg}")
+ ELSE(_state STREQUAL "ERROR_MSG")
+ IF(_arg STREQUAL "ERROR_MSG")
+ SET(_state "${_arg}")
+ ELSEIF(_arg STREQUAL "ERROR_VAR")
+ SET(_state "${_arg}")
+ ELSEIF(_arg STREQUAL "VERBOSE_LEVEL")
+ SET(_state "${_arg}")
+ ELSE(_arg STREQUAL "ERROR_MSG")
+ SET(_state "FIND_ARGS")
+ IF(NOT _arg STREQUAL "FIND_ARGS")
+ LIST(APPEND _findFileArgList "${_arg}")
+ ENDIF(NOT _arg STREQUAL "FIND_ARGS")
+ ENDIF(_arg STREQUAL "ERROR_MSG")
+ ENDIF(_state STREQUAL "ERROR_MSG")
+ ENDFOREACH(_arg ${ARGN})
+
+ ## FIND_PROGRAM and FIND_FILE caches the result
+ ## And won't find again until the cache is cleaned
+ IF("${type}" STREQUAL "PROGRAM")
+ SET(_type "Program")
+ FIND_PROGRAM(${vari} ${_findFileArgList})
+ ELSE("${type}" STREQUAL "PROGRAM")
+ SET(_type "File")
+ FIND_FILE(${vari} ${_findFileArgList})
+ ENDIF("${type}" STREQUAL "PROGRAM")
+
+ IF("${${vari}}" STREQUAL "${vari}-NOTFOUND")
+ IF(NOT _errorMsg)
+ SET(_str "")
+ FOREACH(_s ${_findFileArgList})
+ SET(_str "${_str} ${_s}")
+ ENDFOREACH(_s ${_findFileArgList})
+
+ SET(_errorMsg "${_type} cannot be found with following arguments: ${_str}")
+ ENDIF(NOT _errorMsg)
+
+ M_MSG(${_verboseLevel} "${_errorMsg}")
+ IF (NOT _errorVar STREQUAL "")
+ SET(${_errorVar} 1 PARENT_SCOPE)
+ ENDIF(NOT _errorVar STREQUAL "")
+ ENDIF("${${vari}}" STREQUAL "${vari}-NOTFOUND")
+ENDFUNCTION(FIND_ERROR_HANDLING type vari)
+
+FUNCTION(FIND_FILE_ERROR_HANDLING var)
+ FIND_ERROR_HANDLING(FILE ${var} ${ARGN})
+ENDFUNCTION(FIND_FILE_ERROR_HANDLING var)
+
+FUNCTION(FIND_PROGRAM_ERROR_HANDLING var)
+ FIND_ERROR_HANDLING(PROGRAM ${var} ${ARGN})
+ENDFUNCTION(FIND_PROGRAM_ERROR_HANDLING var)
+
+FUNCTION(MANAGE_CMAKE_FEDORA_CONF var)
+ FIND_FILE_ERROR_HANDLING(${var} ${ARGN}
+ FIND_ARGS cmake-fedora.conf
+ PATHS ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/cmake-fedora
+ . cmake-fedora /etc
+ ${CMAKE_FEDORA_MODULE_DIR}/..
+ ${CMAKE_FEDORA_MODULE_DIR}/../cmake-fedora
+ ${CMAKE_SOURCE_DIR}/../../..
+ ${CMAKE_SOURCE_DIR}/../../../cmake-fedora
+ ${CMAKE_SOURCE_DIR}/../..
+ ${CMAKE_SOURCE_DIR}/../../cmake-fedora
+ )
+ SET(${var} "${${var}}" PARENT_SCOPE)
+ENDFUNCTION(MANAGE_CMAKE_FEDORA_CONF var)
+
+FUNCTION(MANAGE_FILE_CACHE var file)
+ SET(_validOptions "CACHE_DIR"
+ "EXPIRY_SECONDS" "ERROR_VAR" "RESULT_VAR" "COMMAND")
+ VARIABLE_PARSE_ARGN(_o _validOptions ${ARGN})
+ IF(NOT DEFINED _o_ERROR_VAR)
+ SET(_o_ERROR_VAR "${var}_ERROR")
+ SET(${var}_ERROR 0)
+ ENDIF(NOT DEFINED _o_ERROR_VAR)
+ SET(_commandOptList "")
+ IF(DEFINED _o_RESULT_VAR)
+ SET(_commandOptList RESULT_VARIABLE ${_o_RESULT_VAR})
+ ENDIF(DEFINED _o_RESULT_VAR)
+
+ CMAKE_FEDORA_CONF_GET_ALL_VARIABLES()
+ SET(_toRun TRUE)
+ IF(NOT DEFINED LOCAL_CACHE)
+ SET(LOCAL_CACHE 1)
+ ENDIF(NOT DEFINED LOCAL_CACHE)
+ IF(LOCAL_CACHE)
+ IF(NOT _o_CACHE_DIR)
+ IF(LOCAL_CACHE_DIR)
+ SET(_o_CACHE_DIR ${LOCAL_CACHE_DIR})
+ ELSE(LOCAL_CACHE_DIR)
+ SET(_o_CACHE_DIR "${HOME}/.cache/cmake-fedora")
+ ENDIF(LOCAL_CACHE_DIR)
+ ENDIF(NOT _o_CACHE_DIR)
+ IF(NOT _o_EXPIRY_SECONDS)
+ IF(LOCAL_CACHE_EXPIRY)
+ SET(_o_EXPIRY_SECONDS ${LOCAL_CACHE_EXPIRY})
+ ELSE(LOCAL_CACHE_EXPIRY)
+ SET(_o_EXPIRY_SECONDS 259200) # 3 days
+ ENDIF(LOCAL_CACHE_EXPIRY)
+ ENDIF(NOT _o_EXPIRY_SECONDS)
+
+ IF(NOT EXISTS ${_o_CACHE_DIR})
+ EXECUTE_PROCESS(COMMAND
+ ${CMAKE_COMMAND} -E make_directory "${_o_CACHE_DIR}"
+ RESULT_VARIABLE ${_o_ERROR_VAR}
+ OUTPUT_QUIET
+ ERROR_QUIET
+ )
+ ENDIF(NOT EXISTS ${_o_CACHE_DIR})
+ IF(NOT ${${_o_ERROR_VAR}} EQUAL 0)
+ ## Error when creating cache dir
+ RETURN()
+ ENDIF(NOT ${${_o_ERROR_VAR}} EQUAL 0)
+
+ SET(_cacheFile "${_o_CACHE_DIR}/${file}")
+ MANAGE_FILE_EXPIRY(_isExpired ${_cacheFile} ${_o_EXPIRY_SECONDS})
+ IF(_isExpired STREQUAL "NOT_EXIST")
+ SET(_toRun TRUE)
+ ELSEIF(_isExpired STREQUAL "NOT_EXPIRED")
+ SET(_toRun FALSE)
+ ELSEIF(_isExpired STREQUAL "EXPIRED")
+ SET(_toRun TRUE)
+ ELSE(_isExpired STREQUAL "NOT_EXIST")
+ M_MSG(${M_ERROR} "Failed on checking file expirary")
+ ENDIF(_isExpired STREQUAL "NOT_EXIST")
+ ELSE(LOCAL_CACHE)
+ SET(_cacheFile "/tmp/cmake_fedora_cache_${cache_file}")
+ ENDIF(LOCAL_CACHE)
+
+ IF(_toRun)
+ EXECUTE_PROCESS(COMMAND ${_o_COMMAND}
+ ${_commandOptList}
+ OUTPUT_FILE ${_cacheFile}
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ ENDIF(_toRun)
+ FILE(READ ${_cacheFile} _value)
+ STRING(STRIP "${_value}" _value)
+ SET(${var} "${_value}" PARENT_SCOPE)
+ENDFUNCTION(MANAGE_FILE_CACHE)
+
+FUNCTION(MANAGE_FILE_EXPIRY var file expirySecond)
+ IF(EXISTS "${file}")
+ EXECUTE_PROCESS(COMMAND stat --format "%Y" "${file}"
+ OUTPUT_VARIABLE _fileTime
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ EXECUTE_PROCESS(COMMAND date "+%s"
+ OUTPUT_VARIABLE _currentTime
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ MATH(EXPR _expireAt "${_fileTime}+${expirySecond}")
+ IF(_currentTime LESS _expireAt)
+ ## Not Expired
+ SET(${var} "NOT_EXPIRED" PARENT_SCOPE)
+ ELSE(_currentTime LESS _expireAt)
+ SET(${var} "EXPIRED" PARENT_SCOPE)
+ ENDIF(_currentTime LESS _expireAt)
+ ELSE(EXISTS "${file}")
+ SET(${var} "NOT_EXIST" PARENT_SCOPE)
+ ENDIF(EXISTS "${file}")
+ENDFUNCTION(MANAGE_FILE_EXPIRY var file expirySecond)
+
+FUNCTION(GIT_GLOB_TO_CMAKE_REGEX var glob)
+ SET(_s "${glob}")
+ STRING(REGEX REPLACE "!" "!e" _s "${_s}")
+ STRING(REGEX REPLACE "[*]{2}" "!d" _s "${_s}")
+ STRING(REGEX REPLACE "[*]" "!s" _s "${_s}")
+ STRING(REGEX REPLACE "[?]" "!q" _s "${_s}")
+ STRING(REGEX REPLACE "[.]" "\\\\\\\\." _s "${_s}")
+ STRING(REGEX REPLACE "!d" ".*" _s "${_s}")
+ STRING(REGEX REPLACE "!s" "[^/]*" _s "${_s}")
+ STRING(REGEX REPLACE "!q" "[^/]" _s "${_s}")
+ STRING(REGEX REPLACE "!e" "!" _s "${_s}")
+ STRING(LENGTH "${_s}" _len)
+ MATH(EXPR _l ${_len}-1)
+ STRING(SUBSTRING "${_s}" ${_l} 1 _t)
+ IF( _t STREQUAL "/")
+ SET(_s "/${_s}")
+ ELSE( _t STREQUAL "/")
+ SET(_s "${_s}\$")
+ ENDIF( _t STREQUAL "/")
+ SET(${var} "${_s}" PARENT_SCOPE)
+ENDFUNCTION(GIT_GLOB_TO_CMAKE_REGEX)
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageGConf.cmake ibus-chewing-1.6.1_new/Modules/ManageGConf.cmake
--- ibus-chewing-1.6.1/Modules/ManageGConf.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageGConf.cmake 2015-12-17 17:43:31.000000000 +0800
@@ -0,0 +1,84 @@
+# - GConf relative targets such as install/unstall schemas.
+# This module finds gconftool-2 or gconftool for GConf manipulation.
+#
+# Defines the following macros:
+# MANAGE_GCONF_SCHEMAS([FILE <schemasFile>]
+# [INSTALL_DIR <dir>] [CONFIG_SOURCE <source>]
+# )
+# - Process schemas file.
+# * Parameters:
+# + FILE <schemasFile>: (Optional) Path to GConf .schema.
+# Default: ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.schemas
+# + INSTALL_DIR <dir>: (Optional) Directory to install GConf .schemas file.
+# Default: ${SYSCONF_DIR}/gconf/schemas
+# + CONFIG_SOURCE <source>: (Optional) Configuration source.
+# Default: "" (Use the system default)
+# * Variables to cache:
+# + GCONF2_PKG_CONFIG: GConf2 pkg-config name
+# Default: gconf-2.0
+# + GCONF2_DEVEL_PACKAGE_NAME: GConf2 devel package name
+# Default: GConf2-devel
+# * Defines following targets:
+# + install_schemas: install schemas.
+# + uninstall_schemas: uninstall schemas.
+#
+
+IF(DEFINED _MANAGE_GCONF_CMAKE_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_GCONF_CMAKE_)
+SET(_MANAGE_GCONF_CMAKE_ DEFINED)
+INCLUDE(ManageDependency)
+SET(GCONF2_PKG_CONFIG "gconf-2.0" CACHE STRING "GConf2 pkg-config name")
+SET(GCONF2_PACKAGE_NAME "GConf2" CACHE STRING "GConf2 package name")
+SET(GCONF2_DEVEL_PACKAGE_NAME "GConf2-devel" CACHE STRING "GConf2 devel package name")
+MANAGE_DEPENDENCY(REQUIRES GCONF2 REQUIRED PACKAGE_NAME "GConf2")
+MANAGE_DEPENDENCY(BUILD_REQUIRES GCONF2 REQUIRED
+ PKG_CONFIG ${GCONF2_PKG_CONFIG} PACKAGE_NAME "${GCONF2_DEVEL_PACKAGE_NAME}"
+ )
+MANAGE_DEPENDENCY(REQUIRES_PRE GCONF2 REQUIRED
+ PACKAGE_NAME "${GCONF2_PACKAGE_NAME}"
+ )
+MANAGE_DEPENDENCY(REQUIRES_PREUN GCONF2 REQUIRED
+ PACKAGE_NAME "${GCONF2_PACKAGE_NAME}"
+ )
+MANAGE_DEPENDENCY(REQUIRES_POST GCONF2 REQUIRED
+ PACKAGE_NAME "${GCONF2_PACKAGE_NAME}"
+ )
+
+SET(MANAGE_GCONF_SCHEMAS_VALID_OPTIONS "FILE" "INSTALL_DIR" "CONFIG_SOURCE")
+FUNCTION(MANAGE_GCONF_SCHEMAS)
+ INCLUDE(ManageVersion)
+ VARIABLE_PARSE_ARGN(_o MANAGE_GCONF_SCHEMAS_VALID_OPTIONS ${ARGN})
+
+ IF(NOT _o_FILE)
+ SET(_o_FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.schemas")
+ ENDIF()
+
+ GET_FILENAME_COMPONENT(schemasBasename ${_o_FILE} NAME)
+
+ IF(NOT _o_INSTALL_DIR)
+ SET(_o_INSTALL_DIR "${SYSCONF_DIR}/gconf/schemas")
+ ENDIF()
+
+
+ ADD_CUSTOM_TARGET(uninstall_schemas
+ COMMAND GCONF_CONFIG_SOURCE=${_o_CONFIG_SOURCE}
+ ${GCONF2_EXECUTABLE} --makefile-uninstall-rule
+ "${_o_INSTALL_DIR}/${schemasBasename}"
+ COMMENT "uninstall_schemas"
+ VERBATIM
+ )
+
+ ADD_CUSTOM_TARGET(install_schemas
+ COMMAND ${CMAKE_COMMAND} -E copy "${_o_FILE}" "${_o_INSTALL_DIR}/${schemasBasename}"
+ COMMAND GCONF_CONFIG_SOURCE=${GCONF_CONFIG_SOURCE}
+ ${GCONF2_EXECUTABLE} --makefile-install-rule
+ "${_o_INSTALL_DIR}/${schemasBasename}"
+ DEPENDS "${_o_FILE}"
+ COMMENT "install_schemas"
+ VERBATIM
+ )
+
+ INSTALL(FILES ${_o_FILE} DESTINATION "${SYSCONF_DIR}/gconf/schemas")
+ENDFUNCTION(MANAGE_GCONF_SCHEMAS)
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageGettextScript.cmake ibus-chewing-1.6.1_new/Modules/ManageGettextScript.cmake
--- ibus-chewing-1.6.1/Modules/ManageGettextScript.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageGettextScript.cmake 2015-12-17 17:43:31.000000000 +0800
@@ -0,0 +1,251 @@
+# Manage Gettext scripts
+MACRO(MANAGE_GETTEXT_SCRIPT_PRINT_USAGE)
+ MESSAGE(
+ "Manage gettext script: This script is not recommend for end users
+
+cmake -D cmd=pot_make
+ -D pot=<path/project.pot>
+ -D \"exec:STRING=<cmd;--opt1;--opt2;value; ...>\"
+ [\"-D<var>=<value>\"]
+ [\"-D <var:TYPE>=<value>\"]
+ -P <CmakeModulePath>/ManageGettextScript.cmake
+ Update or create a POT file.
+ Options:
+ pot: Path to pot file
+ exec:STRING: Command and options to create the POT file.
+ Note that \"STRING\" is needed, as its quite likely to pass the options
+ like: \"--keyword=C_:1c,2;--keyword=NC_:1c,2\" which make cmake failed to
+ set the exec variable.
+
+cmake -D cmd=po_make
+ -D pot=<path/project.pot>
+ [-D \"options:STRING=<--opt1;--opt2;value; ...>\"]
+ [\"-Dlocales=<locale1;locale2...>\" | -Dsystem_locales]
+ [-Dpo_dir=<dir>]
+ [\"-D<var>=<value>\"]
+ [\"-D <var:TYPE>=<value>\"]
+ -P <CmakeModulePath>/ManageGettextScript.cmake
+ Update existing or create new PO files.
+ Specifiy the PO of locales to be managed by either
+ locales or system_locales.
+ If both are not specified, it will find the existing PO files.
+ Options:
+ pot: Path to pot file
+ options: Options to pass to msgmerge
+ Note that \"STRING\" is needed, as its quite likely to pass the options
+ like: \"--keyword=C_:1c,2;--keyword=NC_:1c,2\" which make cmake failed to
+ set the exec variable.
+ locales: Locale to be created
+ system_locales: All locales in system would be created.
+ po_dir: Directory to put po, otherwise it would use the path to pot.
+
+cmake -D cmd=mo_make
+ -D po_dir=<dir>
+ [-D mo_dir=<dir>]
+ [-D \"options=<--opt1;--opt2=value; ...>\"
+ [-D \"locales=<locale1;locale2...>\" | -Dsystem_locales]
+ [-D \"<var>=<value>\"]
+ -P <CmakeModulePath>/ManageGettextScript.cmake
+ Update or create MO files.
+ Options:
+ prj_info: Path to prj_info.cmake
+ po_dir: Directory that contains po.
+ mo_dir: Directory to output mo.
+ options:STRING: Options to pass to msgmerge
+ Note that \"STRING\" is needed, as its quite likely to pass the options
+ like: \"--keyword=C_:1c,2;--keyword=NC_:1c,2\" which make cmake failed to
+ set the exec variable.
+ locales: Locale to be created
+ system_locales: All locales in system would be created.
+
+cmake -D cmd=find_locales
+ [-D po_dir=<dir>]
+ [-Dsystem_locales]
+ [-D \"<var>=<value>\"]
+ -P <CmakeModulePath>/ManageGettextScript.cmake
+ Find locales from local system.
+ Options:
+ po_dir: Base directory that contains po.
+ system_locales: All locales in system would be created.
+ options:STRING: Options to pass to msgmerge
+ Note that \"STRING\" is needed, as its quite likely to pass the options
+ like: \"--keyword=C_:1c,2;--keyword=NC_:1c,2\" which make cmake failed to
+ set the exec variable.
+ "
+ )
+ENDMACRO(MANAGE_GETTEXT_SCRIPT_PRINT_USAGE)
+
+FUNCTION(CMD_TO_LIST listVar cmd)
+ SET(_listNew "")
+ FOREACH(_l ${cmd})
+ IF( "${_l}" MATCHES "^-.+=.+")
+ SETTING_STRING_GET_VARIABLE(_k _v "${_l}")
+ LIST(APPEND _listNew "${_k}" "${_v}")
+ ELSE()
+ LIST(APPEND _listNew "${_l}")
+ ENDIF()
+ ENDFOREACH(_l)
+ SET(${listVar} "${_listNew}" PARENT_SCOPE)
+ENDFUNCTION(CMD_TO_LIST)
+
+FUNCTION(FIND_LOCALES localeListVar)
+ SET(_gettext_locale_opts "")
+ IF(DEFINED system_locales)
+ LIST(APPEND _gettext_locale_opts "SYSTEM_LOCALES")
+ ELSEIF(NOT "${locales}" STREQUAL "")
+ LIST(APPEND _gettext_locale_opts "LOCALES" ${locales})
+ ENDIF()
+ MANAGE_GETTEXT_LOCALES(v WORKING_DIRECTORY "${po_dir}" ${_gettext_locale_opts})
+ SET(${localeListVar} "${v}" PARENT_SCOPE)
+ENDFUNCTION(FIND_LOCALES)
+
+MACRO(FIND_LOCALES_VARIABLE_CHECK)
+ IF("${po_dir}" STREQUAL "")
+ SET(po_dir ".")
+ ENDIF()
+ IF(NOT EXISTS ${po_dir})
+ M_MSG(${M_FATAL} "Failed to find ${po_dir}")
+ ENDIF()
+ FIND_LOCALES(localeList)
+ M_OUT(${localeList})
+ENDMACRO(FIND_LOCALES_VARIABLE_CHECK)
+
+MACRO(POT_MAKE)
+ EXECUTE_PROCESS(COMMAND ${exec}
+ RESULT_VARIABLE _res
+ OUTPUT_VARIABLE _out
+ ERROR_VARIABLE _err
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ IF(NOT _res EQUAL 0)
+ M_MSG(${M_FATAL} "Failed ${exec}: ${_out} | ${_err}")
+ ENDIF()
+ENDMACRO(POT_MAKE)
+
+MACRO(POT_MAKE_VARIABLE_CHECK)
+ IF("${pot}" STREQUAL "")
+ M_MSG(${M_FATAL} "Requires \"-Dpot=<path/project.pot>\"")
+ ENDIF()
+ IF("${exec}" STREQUAL "")
+ M_MSG(${M_FATAL} "Requires \"-Dexec=<cmd;--opt1;...>\"")
+ ENDIF()
+ POT_MAKE()
+ENDMACRO(POT_MAKE_VARIABLE_CHECK)
+
+MACRO(PO_MAKE)
+ FIND_LOCALES(localeList)
+ FOREACH(_l ${localeList})
+ SET(_poFile "${po_dir}/${_l}.po")
+ IF(EXISTS ${_poFile})
+ SET(exec "msgmerge" "--lang=${_l}" ${options} ${pot} ${_poFile})
+ ELSE()
+ ## Po file does not exist, run msginit
+ SET(exec "msginit" "--locale=${_l}.utf8"
+ "--input=${pot}" "--output-file=${_poFile}"
+ "--no-translator"
+ )
+ ENDIF()
+ EXECUTE_PROCESS(COMMAND ${exec}
+ RESULT_VARIABLE _res
+ OUTPUT_VARIABLE _out
+ ERROR_VARIABLE _err
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ IF(NOT _res EQUAL 0)
+ M_MSG(${M_FATAL} "Failed ${exec}: ${_out} | ${_err}")
+ ENDIF()
+ ENDFOREACH(_l)
+ENDMACRO(PO_MAKE)
+
+MACRO(PO_MAKE_VARIABLE_CHECK)
+ IF("${pot}" STREQUAL "")
+ M_MSG(${M_FATAL} "Requires -D \"pot=<path/project.pot>\"")
+ ENDIF()
+ IF(NOT EXISTS ${pot})
+ M_MSG(${M_FATAL} "Failed to find ${pot}")
+ ENDIF()
+ PO_MAKE()
+ENDMACRO(PO_MAKE_VARIABLE_CHECK)
+
+MACRO(MO_MAKE)
+ FIND_LOCALES(localeList)
+ FOREACH(_l ${localeList})
+ SET(exec "msgfmt" "--locale=${_l}" ${options} -o ${mo_dir}/${_l}.gmo ${po_dir}/${_l}.po)
+ EXECUTE_PROCESS(COMMAND ${exec}
+ RESULT_VARIABLE _res
+ OUTPUT_VARIABLE _out
+ ERROR_VARIABLE _err
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ IF(NOT _res EQUAL 0)
+ M_MSG(${M_FATAL} "Failed ${exec}: ${_out} | ${_err}")
+ ENDIF()
+ ENDFOREACH(_l)
+ENDMACRO(MO_MAKE)
+
+MACRO(MO_MAKE_VARIABLE_CHECK)
+ IF("${po_dir}" STREQUAL "")
+ M_MSG(${M_FATAL} "Requires -D \"po_dir=<dir>\"")
+ ENDIF()
+ IF(NOT EXISTS ${po_dir})
+ M_MSG(${M_FATAL} "Failed to find ${po_dir}")
+ ENDIF()
+ MO_MAKE()
+ENDMACRO(MO_MAKE_VARIABLE_CHECK)
+
+SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
+#######################################
+# Determine CMAKE_FEDORA_MODULE_DIR
+#
+
+## It is possible that current dir is in NO_PACK/FedPkg/<prj>
+LIST(INSERT CMAKE_MODULE_PATH 0
+ ${CMAKE_SOURCE_DIR}/Modules ${CMAKE_SOURCE_DIR}/cmake-fedora/Modules
+ ${CMAKE_SOURCE_DIR}/../../../Modules
+ ${CMAKE_SOURCE_DIR}/../../../cmake-fedora/Modules
+ ${CMAKE_SOURCE_DIR}
+ )
+
+IF(CMAKE_SCRIPT_MODE_FILE)
+ GET_FILENAME_COMPONENT(CMAKE_FEDORA_SCRIPT_DIR ${CMAKE_SCRIPT_MODE_FILE}
+ PATH)
+ LIST(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_FEDORA_SCRIPT_DIR}")
+ENDIF()
+
+IF(cmake_fedora_module_dir)
+ LIST(INSERT CMAKE_MODULE_PATH 0 "${cmake_fedora_module_dir}")
+ENDIF()
+
+INCLUDE(ManageMessage RESULT_VARIABLE MANAGE_MODULE_PATH)
+IF(NOT MANAGE_MODULE_PATH)
+ MESSAGE(FATAL_ERROR "ManageMessage.cmake cannot be found in ${CMAKE_MODULE_PATH}")
+ENDIF()
+GET_FILENAME_COMPONENT(CMAKE_FEDORA_MODULE_DIR
+ "${MANAGE_MODULE_PATH}" PATH
+ )
+
+INCLUDE(ManageEnvironmentCommon)
+INCLUDE(ManageString)
+INCLUDE(ManageVariable)
+INCLUDE(ManageFile)
+INCLUDE(ManageTranslation)
+
+IF(NOT DEFINED cmd)
+ MANAGE_GETTEXT_SCRIPT_PRINT_USAGE()
+ELSE()
+ IF("${cmd}" STREQUAL "pot_make")
+ #POT_MAKE_VARIABLE_CHECK()
+ ELSEIF("${cmd}" STREQUAL "po_make")
+ PO_MAKE_VARIABLE_CHECK()
+ ELSEIF("${cmd}" STREQUAL "mo_make")
+ MO_MAKE_VARIABLE_CHECK()
+ ELSEIF("${cmd}" STREQUAL "find_locales")
+ FIND_LOCALES_VARIABLE_CHECK()
+ ELSE()
+ MANAGE_GETTEXT_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Invalid cmd ${cmd}")
+ ENDIF()
+ENDIF()
+
+
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageGitScript.cmake ibus-chewing-1.6.1_new/Modules/ManageGitScript.cmake
--- ibus-chewing-1.6.1/Modules/ManageGitScript.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageGitScript.cmake 2015-12-17 17:43:31.000000000 +0800
@@ -0,0 +1,99 @@
+# - Manage Git Script
+# Scripts to be invoked in command line
+#
+
+MACRO(MANAGE_GIT_SCRIPT_PRINT_USAGE)
+ MESSAGE("cmake-fedora utility scripts
+
+cmake -D cmd=make_tag_file
+ -D ver=<ver> -D output_file=<output_file>
+ [-D \"msg=<message>\"]
+ [-D cmake_fedora_module_dir=<dir>]
+ [\"-D <VAR>=<VAULE>\"]
+ -P <CmakeModulePath>/ManageGitScript.cmake
+ Make a tag file, which indicates the build process is passed and
+ the branch is tagged with <ver>.
+
+ Options:
+ ver: project version
+ outputFile: Tag file
+ msg: message associate with tag
+ cmake_fedora_module_dir:
+ Specify this if cmake and cmake-fedora failed to find
+ the location of CMake Fedora modules.
+
+ ")
+ENDMACRO(MANAGE_GIT_SCRIPT_PRINT_USAGE)
+
+FUNCTION(MAKE_TAG_FILE)
+ EXECUTE_PROCESS(
+ COMMAND git tag -l ${ver}
+ OUTPUT_VARIABLE tagLine
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ IF("${msg}" STREQUAL "")
+ SET(msg "${ver}")
+ ENDIF()
+
+ IF("${tagLine}" STREQUAL "")
+ ## No tag
+ EXECUTE_PROCESS(
+ COMMAND make VERBOSE=1 tag_pre
+ RESULT_VARIABLE tagResult
+ )
+ IF(NOT tagResult EQUAL 0)
+ M_MSG(${M_FATAL} "Failed to build before tagging")
+ ENDIF()
+ EXECUTE_PROCESS(COMMAND git tag -a -m "${msg}" "${ver}" HEAD)
+ ENDIF()
+ FILE(WRITE "${output_file}" "${msg}")
+
+ENDFUNCTION(MAKE_TAG_FILE)
+
+SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
+
+#######################################
+# Determine CMAKE_FEDORA_MODULE_DIR
+#
+
+## It is possible that current dir is in NO_PACK/FedPkg/<prj>
+LIST(INSERT CMAKE_MODULE_PATH 0
+ ${CMAKE_SOURCE_DIR}/Modules ${CMAKE_SOURCE_DIR}/cmake-fedora/Modules
+ ${CMAKE_SOURCE_DIR}/../../../Modules
+ ${CMAKE_SOURCE_DIR}/../../../cmake-fedora/Modules
+ ${CMAKE_SOURCE_DIR}
+ )
+
+IF(CMAKE_SCRIPT_MODE_FILE)
+ GET_FILENAME_COMPONENT(CMAKE_FEDORA_SCRIPT_DIR ${CMAKE_SCRIPT_MODE_FILE}
+ PATH)
+ LIST(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_FEDORA_SCRIPT_DIR}")
+ENDIF()
+
+IF(cmake_fedora_module_dir)
+ LIST(INSERT CMAKE_MODULE_PATH 0 "${cmake_fedora_module_dir}")
+ENDIF()
+
+INCLUDE(ManageMessage RESULT_VARIABLE MANAGE_MODULE_PATH)
+IF(NOT MANAGE_MODULE_PATH)
+ MESSAGE(FATAL_ERROR "ManageMessage.cmake cannot be found in ${CMAKE_MODULE_PATH}")
+ENDIF()
+INCLUDE(ManageFile)
+
+IF(NOT DEFINED cmd)
+ MANAGE_GIT_SCRIPT_PRINT_USAGE()
+ELSEIF(cmd STREQUAL "make_tag_file")
+ IF(NOT ver)
+ MANAGE_GIT_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Requires -D ver=<ver>")
+ ENDIF()
+ IF(NOT output_file)
+ MANAGE_GIT_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Requires -D output_file=<output_file>")
+ ENDIF()
+ MAKE_TAG_FILE()
+ELSE()
+ MANAGE_GIT_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Invalid cmd ${cmd}")
+ENDIF()
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageMessage.cmake ibus-chewing-1.6.1_new/Modules/ManageMessage.cmake
--- ibus-chewing-1.6.1/Modules/ManageMessage.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageMessage.cmake 2014-10-28 13:05:31.000000000 +0800
@@ -0,0 +1,71 @@
+# - Manage the output and debug messages.
+# This module has macros that control how many messages to be shown
+# by defining the desire message level.
+#
+# Defined variables that represent verbose levels:
+# 1: M_FATAL - Critical error,Should stop immediately
+# 2: M_ERROR - Error that will Eventually fail
+# 3: M_WARN - General Warning.
+# 4: M_OFF - Optional functionalities are turned-off because requirement is not met.
+# 5: M_INFO1 - Info/debug message
+# 6: M_INFO2 - Info/debug message
+# 7: M_INFO3 - Info/debug message
+#
+# Read following variable:
+# + MANAGE_MESSAGE_LEVEL: Message level in integer.
+# Messages with greater level will be suppressed.
+# Default is ${M_OFF}
+# + MANAGE_MESSAGE_LABELS: Labels that printed in front of the message for
+# corresponding message level.
+# Default is "[Fatal] ;[Error] ;[Warn] ;[Off] ;[Info1] ;[Info2] ;[Info3] ")
+#
+# Define following functions:
+# M_MSG(<level> <msg>)
+# - Surpress the message if level is higher than MANAGE_MESSAGE_LEVEL
+# Otherwise show the message.
+# * Parameters:
+# + level: level of the message.
+# + msg: Message to show.
+#
+# M_OUT(<msg>)
+# - Output the message to stdout
+# In cmake-2.6.2, MESSAGE(...) output to stderr.
+# This function make it output to stdout instead.
+# * Parameters:
+# + msg: Message to show.
+
+IF(DEFINED _MANAGE_MESSAGE_CMAKE_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_MESSAGE_CMAKE_)
+SET(_MANAGE_MESSAGE_CMAKE_ "DEFINED")
+
+SET(M_FATAL 1)
+SET(M_ERROR 2)
+SET(M_WARN 3)
+SET(M_OFF 4)
+SET(M_INFO1 5)
+SET(M_INFO2 6)
+SET(M_INFO3 7)
+IF(NOT DEFINED MANAGE_MESSAGE_LABELS)
+ SET(MANAGE_MESSAGE_LABELS
+ "[Fatal] ;[Error] ;[Warn] ;[Off] ;[Info1] ;[Info2] ;[Info3] ")
+ENDIF(NOT DEFINED MANAGE_MESSAGE_LABELS)
+
+SET(MANAGE_MESSAGE_LEVEL ${M_OFF} CACHE STRING "Message (Verbose) Level")
+
+MACRO(M_MSG level)
+ IF(NOT ${level} GREATER ${MANAGE_MESSAGE_LEVEL})
+ MATH(EXPR _lvl ${level}-1)
+ LIST(GET MANAGE_MESSAGE_LABELS ${_lvl} _label)
+ IF(${level} EQUAL 1)
+ MESSAGE(FATAL_ERROR "${_label}${ARGN}")
+ ELSE(${level} EQUAL 1)
+ MESSAGE("${_label}${ARGN}")
+ ENDIF(${level} EQUAL 1)
+ ENDIF(NOT ${level} GREATER ${MANAGE_MESSAGE_LEVEL})
+ENDMACRO(M_MSG level)
+
+FUNCTION(M_OUT)
+ EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E echo "${ARGN}")
+ENDFUNCTION(M_OUT)
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageRelease.cmake ibus-chewing-1.6.1_new/Modules/ManageRelease.cmake
--- ibus-chewing-1.6.1/Modules/ManageRelease.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageRelease.cmake 2016-01-07 15:39:34.000000000 +0800
@@ -0,0 +1,60 @@
+# - Manage release by provides release related targets.
+#
+# Included Modules:
+# - ManageMessage
+# - ManageVariable
+#
+# Defines following functions:
+# MANAGE_RELEASE([<releaseTarget ...>] [DEPENDS <dependFile ...>])
+# - Run release targets.
+# This macro skips the missing targets so distro package maintainers
+# do not have to get the irrelevant dependencies.
+# For the "hard" dependency, use cmake command "ADD_DEPENDENCIES".
+# * Parameters:
+# + releaseTarget ...: Targets to be executed before a release.
+# Note that sequence of the targets does not guarantee the
+# sequence of execution.
+# + DEPENDS dependFile ...: Files that target "release" depends on.
+# * Defines following targets:
+# + release: Perform everything required for a release.
+#
+
+IF(DEFINED _MANAGE_RELEASE_CMAKE_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_RELEASE_CMAKE_)
+SET(_MANAGE_RELEASE_CMAKE_ "DEFINED")
+INCLUDE(ManageMessage)
+INCLUDE(ManageVariable)
+
+FUNCTION(MANAGE_RELEASE)
+ SET(_validOptions "DEPENDS")
+ VARIABLE_PARSE_ARGN(_o _validOptions ${ARGN})
+ SET(_releaseDependOptList "")
+
+ IF(NOT "${_o_DEPENDS}" STREQUAL "")
+ SET(_releaseDependOptList DEPENDS ${_o_DEPENDS})
+ ENDIF(NOT "${_o_DEPENDS}" STREQUAL "")
+
+ ADD_CUSTOM_TARGET(release
+ ${_releaseDependOptList}
+ COMMENT "release: ${PROJECT_NAME}-${PRJ_VER}"
+ )
+
+ IF(TARGET tag)
+ ADD_DEPENDENCIES(release tag)
+ ENDIF(TARGET tag)
+
+ ## Add dependent targets that actually exists
+ SET(_releaseTargets "")
+ FOREACH(_target ${_o})
+ IF(TARGET ${_target})
+ LIST(APPEND _releaseTargets "${_target}")
+ ## Release targets should be build after target tag
+ ADD_DEPENDENCIES(${_target} tag)
+ ADD_DEPENDENCIES(release ${_target})
+ ELSE(TARGET ${_target})
+ M_MSG(${M_OFF} "MANAGE_RELEASE: Target ${_target} does not exist, skipped.")
+ ENDIF(TARGET ${_target})
+ ENDFOREACH(_target)
+ENDFUNCTION(MANAGE_RELEASE)
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageReleaseFedora.cmake ibus-chewing-1.6.1_new/Modules/ManageReleaseFedora.cmake
--- ibus-chewing-1.6.1/Modules/ManageReleaseFedora.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageReleaseFedora.cmake 2014-10-28 13:05:31.000000000 +0800
@@ -0,0 +1,253 @@
+# - Manage Fedora and EPEL releases.
+#
+# This module provides convenient targets and functions for Fedora and
+# EPEL releases with fedpkg, koji, and bodhi.
+#
+# In cmake-fedora, this release steps are:
+# 1. Create SRPM and RPMs
+# 2. Whether SRPM and RPMs pass rpmlint
+# 3. Whether SRPM can be build with koji scratch build
+# 4. Tag the release with PRJ_VER
+# 5. Build SRPM with FedPkg
+# 6. Release to Bodhi
+#
+# Consequently, function RELEASE_FEDORA() should be run after
+# PACK_RPM() and source version control functions like
+# MANAGE_SOURCE_VERSION_CONTROL_GIT().
+#
+# If CMAKE_FEDORA_ENABLE_FEDORA=1, this module will proceed;
+# otherwise, this module is skipped.
+#
+# This module check following files for dependencies:
+# - ~/.fedora-upload-ca.cert : Ensure it has certificate file to
+# submit to Fedora.
+# - fedpkg : Required to submit to fedora.
+# - koji : Required to submit to fedora.
+# - bodhi : Required to submit to fedora.
+# If any of above files are missing, this module will be skipped.
+#
+# This module read the supported release information from
+# cmake-fedora.conf, it finds cmake-fedora.conf in following order:
+# 1. Current directory
+# 2. Path as defined CMAKE_SOURCE_DIR
+# 3. /etc/cmake-fedora.conf
+#
+# Included Modules:
+# - ManageFile
+# - ManageMessage
+# - ManageTarget
+# - ManageRPM
+# - ManageVariable
+#
+# Reads following variables:
+# - CMAKE_FEDORA_TMP_DIR
+# - PRJ_SRPM_FILE: Project
+#
+# Defines following variables:
+# - CMAKE_FEDORA_CONF: Path to cmake_fedora.conf
+# - FEDPKG_EXECUTABLE: Path to fedpkg
+# - KOJI_EXECUTABLE: Path to koji
+# - GIT_EXECUTABLE: Path to git
+# - BODHI_EXECUTABLE: Path to bodhi
+# - KOJI_BUILD_SCRATCH_EXECUTABLE: Path to koji-build-scratch
+# - FEDPKG_DIR: Dir for FedPkg checkout.
+# It will use environment variable FEDPKG_DIR, then use
+# ${CMAKE_FEDORA_TMP_DIR}/FedPkg.
+# - FEDORA_KAMA: Fedora Karma. Default:3
+# - FEDORA_UNSTABLE_KARMA: Fedora unstable Karma. Default:3
+#
+# Defines following functions:
+# RELEASE_FEDORA([<scope> ...]
+# [DEPENDS <dependFile> ...]
+# [TARGETS <target> ...]
+# )
+# - Release this project to specified Fedora and EPEL releases.
+# * Parameters:
+# + scope ...: List of Fedora and EPEL release to be build.
+# Valid values:
+# - rawhide: Build rawhide.
+# - fedora: Build actives fedora releases, including Rawhide.
+# - fedora_1: Build the latest supported fedora releases.
+# This is one release eariler than rawhide.
+# - fedora_2: Build the second latest supported fedora releases.
+# This is two releases eariler than rawhide.
+# - f22 f21 ...: Build the specified fedora releases.
+# - epel: Build the currently supported EPEL releases.
+# - epel_1: Build the latest supported EPEL releases.
+# - epel_2: Build the second latest supported EPEL releases.
+# - el7 el6 ... : The EPEL releases to be built.
+# If not specified, "fedora epel" will be used.
+# + DEPENDS dependFile ...: Files that target "release-fedora"
+# depends on.
+# + TARGETS target ...: Targets that target "release-fedora"
+# depends on.
+# Note that if a target does not exist, a M_ERROR message
+# will be shown.
+#
+# * Reads following variables:
+# + PRJ_SRPM_FILE: Project SRPM
+# + FEDPKG_DIR: Directory for fedpkg checkout.
+# * Defines following targets:
+# + fedpkg_build: Build with fedpkg and push to bodhi.
+# This depends on the tag file from source control
+# (i.e. MANAGE_SOURCE_VERSION_CONTROL_TAG_FILE)
+# + koji_build_scratch: Scratch build using koji.
+# This depends on target "rpmlint".
+# Target "tag_pre" should be dependent on this target.
+# A M_ERROR message will shown if target "tag_pre" does not
+# exist.
+# + release_fedora: Releases on fedora and/or EPEL.
+# This depends on target "fedpkg_build".
+# After this target is built, release on Fedora should be
+# completed.
+#
+
+IF(NOT CMAKE_FEDORA_ENABLE_FEDORA_BUILD)
+ RETURN()
+ENDIF(NOT CMAKE_FEDORA_ENABLE_FEDORA_BUILD)
+IF(DEFINED _MANAGE_RELEASE_FEDORA_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_RELEASE_FEDORA_)
+SET(_MANAGE_RELEASE_FEDORA_ "DEFINED")
+INCLUDE(ManageMessage)
+INCLUDE(ManageFile)
+INCLUDE(ManageTarget)
+INCLUDE(ManageRPM)
+INCLUDE(ManageVariable)
+SET(_manage_release_fedora_dependencies_missing 0)
+
+MANAGE_CMAKE_FEDORA_CONF(CMAKE_FEDORA_CONF
+ ERROR_MSG "cmake-fedora.conf not found. Fedora release support disabled."
+ ERROR_VAR _manage_release_fedora_dependencies_missing
+ VERBOSE_LEVEL ${M_OFF}
+ )
+
+MACRO(RELEASE_FEDORA_FIND_FILE_DEPENDENCY var name)
+ FIND_FILE_ERROR_HANDLING(${var}
+ ERROR_MSG "${name} not found, Fedora release support disabled."
+ ERROR_VAR _manage_release_fedora_dependencies_missing
+ VERBOSE_LEVEL ${M_OFF}
+ FIND_ARGS NAMES ${name} ${ARGN}
+ )
+ENDMACRO(RELEASE_FEDORA_FIND_FILE_DEPENDENCY)
+
+MACRO(RELEASE_FEDORA_FIND_DEPENDENCY var name)
+ FIND_PROGRAM_ERROR_HANDLING(${var}
+ ERROR_MSG "${name} not found, Fedora release support disabled."
+ ERROR_VAR _manage_release_fedora_dependencies_missing
+ VERBOSE_LEVEL ${M_OFF}
+ FIND_ARGS NAMES ${name} ${ARGN}
+ )
+ENDMACRO(RELEASE_FEDORA_FIND_DEPENDENCY var)
+
+RELEASE_FEDORA_FIND_FILE_DEPENDENCY(FEDORA_UPLOAD_CA_CERT
+ ".fedora-upload-ca.cert" PATHS $ENV{HOME})
+RELEASE_FEDORA_FIND_DEPENDENCY(FEDPKG_EXECUTABLE fedpkg)
+RELEASE_FEDORA_FIND_DEPENDENCY(KOJI_EXECUTABLE koji)
+RELEASE_FEDORA_FIND_DEPENDENCY(GIT_EXECUTABLE git)
+## Workaround for Bug 1115136 otherwise el7 won't work
+RELEASE_FEDORA_FIND_DEPENDENCY(BODHI-CLIENT_EXECUTABLE bodhi client.py
+ PATHS "/usr/bin/bodhi")
+RELEASE_FEDORA_FIND_DEPENDENCY(CMAKE_FEDORA_KOJI_EXECUTABLE "cmake-fedora-koji"
+ HINTS ${CMAKE_FEDORA_SCRIPT_PATH_HINTS})
+RELEASE_FEDORA_FIND_DEPENDENCY(CMAKE_FEDORA_FEDPKG_EXECUTABLE "cmake-fedora-fedpkg"
+ HINTS ${CMAKE_FEDORA_SCRIPT_PATH_HINTS})
+RELEASE_FEDORA_FIND_DEPENDENCY(KOJI_BUILD_SCRATCH_EXECUTABLE "koji-build-scratch"
+ HINTS ${CMAKE_FEDORA_SCRIPT_PATH_HINTS})
+
+## Set variables
+IF(_manage_release_fedora_dependencies_missing)
+ RETURN()
+ENDIF(_manage_release_fedora_dependencies_missing)
+# Set release tags according to CMAKE_FEDORA_CONF
+SETTING_FILE_GET_ALL_VARIABLES(${CMAKE_FEDORA_CONF})
+
+SET(BODHI_TEMPLATE_FILE "${CMAKE_FEDORA_TMP_DIR}/bodhi.template"
+ CACHE FILEPATH "Bodhi template file"
+ )
+
+GET_ENV(FEDPKG_DIR "${CMAKE_FEDORA_TMP_DIR}/FedPkg" CACHE PATH "FedPkg dir")
+
+## Fedora package variables
+SET(FEDORA_KARMA "3" CACHE STRING "Fedora Karma")
+SET(FEDORA_UNSTABLE_KARMA "-3" CACHE STRING "Fedora unstable Karma")
+
+FUNCTION(RELEASE_FEDORA_KOJI_BUILD_SCRATCH)
+ IF(_manage_release_fedora_dependencies_missing)
+ RETURN()
+ ENDIF(_manage_release_fedora_dependencies_missing)
+ ADD_CUSTOM_TARGET(koji_build_scratch
+ COMMAND ${KOJI_BUILD_SCRATCH_EXECUTABLE} ${PRJ_SRPM_FILE} ${ARGN}
+ DEPENDS "${PRJ_SRPM_FILE}"
+ COMMENT "koji_build_scratch: SRPM=${PRJ_SRPM_FILE}"
+ VERBATIM
+ )
+ ADD_DEPENDENCIES(koji_build_scratch rpmlint)
+ IF(TARGET tag_pre)
+ ADD_DEPENDENCIES(tag_pre koji_build_scratch)
+ ELSE(TARGET tag_pre)
+ M_MSG(${M_ERROR}
+ "RELEASE_FEDORA: Target tag_pre does not exist.")
+ ENDIF(TARGET tag_pre)
+ENDFUNCTION(RELEASE_FEDORA_KOJI_BUILD_SCRATCH)
+
+FUNCTION(RELEASE_FEDORA_FEDPKG)
+ IF(_manage_release_fedora_dependencies_missing)
+ RETURN()
+ ENDIF(_manage_release_fedora_dependencies_missing)
+ SET(_cmdOpts "")
+ IF ("${CHANGE_SUMMARY}" STREQUAL "")
+ SET(CHANGE_SUMMARY "Release ${PROJECT_NAME}-${PRJ_VER}")
+ ENDIF("${CHANGE_SUMMARY}" STREQUAL "")
+
+ IF (NOT "${REDHAT_BUGZILLA}" STREQUAL "")
+ LIST(APPEND _cmdOpts "-b" "${REDHAT_BUGZILLA}")
+ ENDIF(NOT "${REDHAT_BUGZILLA}" STREQUAL "")
+
+ ADD_CUSTOM_TARGET(fedpkg_build
+ COMMAND ${CMAKE_FEDORA_FEDPKG_EXECUTABLE} -d "${FEDPKG_DIR}"
+ -m "${CHANGE_SUMMARY}"
+ ${_cmdOpts} "${PRJ_SRPM_FILE}" ${ARGN}
+ VERBATIM
+ )
+ ADD_DEPENDENCIES(fedpkg_build tag_post)
+ENDFUNCTION(RELEASE_FEDORA_FEDPKG)
+
+FUNCTION(RELEASE_FEDORA)
+ IF(_manage_release_fedora_dependencies_missing)
+ RETURN()
+ ENDIF(_manage_release_fedora_dependencies_missing)
+
+ ## Parse tags
+ SET(_validOptions "DEPENDS" "TARGETS")
+ VARIABLE_PARSE_ARGN(_o _validOptions ${ARGN})
+ SET(_releaseDependOptList "")
+
+ IF(NOT "${_o_DEPENDS}" STREQUAL "")
+ SET(_releaseDependOptList DEPENDS ${_o_DEPENDS})
+ ENDIF(NOT "${_o_DEPENDS}" STREQUAL "")
+
+ SET(_scopeList ${_o})
+ RELEASE_FEDORA_KOJI_BUILD_SCRATCH(${_scopeList})
+ RELEASE_FEDORA_FEDPKG(${_scopeList})
+ ADD_CUSTOM_TARGET(release_fedora
+ ${_releaseDependOptList}
+ COMMENT "release_fedora: ${_scopeList}"
+ )
+ ADD_DEPENDENCIES(release_fedora fedpkg_build)
+
+ ## Add dependent targets that actually exists
+ SET(_releaseTargets "")
+ FOREACH(_target ${_o_TARGETS})
+ IF(TARGET ${_target})
+ LIST(APPEND _releaseTargets "${_target}")
+ ## Release targets should be build after target tag
+ ADD_DEPENDENCIES(${_target} tag)
+ ADD_DEPENDENCIES(release_fedora ${_target})
+ ELSE(TARGET ${_target})
+ M_MSG(${M_ERROR}
+ "RELEASE_FEDORA: Target ${_target} does not exist.")
+ ENDIF(TARGET ${_target})
+ ENDFOREACH(_target)
+ENDFUNCTION(RELEASE_FEDORA)
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageRPM.cmake ibus-chewing-1.6.1_new/Modules/ManageRPM.cmake
--- ibus-chewing-1.6.1/Modules/ManageRPM.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageRPM.cmake 2014-10-28 13:05:31.000000000 +0800
@@ -0,0 +1,483 @@
+# - RPM generation, maintaining (remove old rpm) and verification (rpmlint).
+# This module provides macros that provides various rpm building and
+# verification targets.
+#
+# This module needs variables from ManageArchive, so
+# INCLUDE(ManageArchive)
+# before this module.
+#
+# Included Modules:
+# - ManageFile
+# - ManageTarget
+# - ManageVariable
+#
+# Reads and defines following variables:
+# - RPM_SPEC_CMAKE_FLAGS: cmake flags in RPM spec.
+# - RPM_SPEC_MAKE_FLAGS: "make flags in RPM spec.
+#
+# Reads and defines following variables if dependencies are satisfied:
+# - PRJ_RPM_SPEC_FILE: spec file for rpmbuild.
+# - RPM_SPEC_BUILD_ARCH: (optional) Set "BuildArch:"
+# - RPM_BUILD_ARCH: (optional) Arch that will be built."
+# - RPM_DIST_TAG: (optional) Current distribution tag such as el5, fc10.
+# Default: Distribution tag from rpm --showrc
+#
+# - RPM_BUILD_TOPDIR: (optional) Directory of the rpm topdir.
+# Default: ${CMAKE_BINARY_DIR}
+#
+# - RPM_BUILD_SPECS: (optional) Directory of generated spec files
+# and RPM-ChangeLog.
+# Note this variable is not for locating SPEC template file
+# (i.e. project.spec.in). The SPEC template file should be
+# specified in PACK_RPM()
+# Default: ${RPM_BUILD_TOPDIR}/SPECS
+#
+# - RPM_BUILD_SOURCES: (optional) Directory of source archive files.
+# Default: ${RPM_BUILD_TOPDIR}/SOURCES
+#
+# - RPM_BUILD_SRPMS: (optional) Directory of source rpm files.
+# Default: ${RPM_BUILD_TOPDIR}/SRPMS
+#
+# - RPM_BUILD_RPMS: (optional) Directory of generated rpm files.
+# Default: ${RPM_BUILD_TOPDIR}/RPMS
+#
+# - RPM_BUILD_BUILD: (optional) Directory for RPM build.
+# Default: ${RPM_BUILD_TOPDIR}/BUILD
+#
+# - RPM_BUILD_BUILDROOT: (optional) Directory for RPM buildroot.
+# Default: ${RPM_BUILD_TOPDIR}/BUILDROOT
+#
+# - RPM_RELEASE_NO: (optional) RPM release number.
+# Default: 1
+#
+# Defines following variables:
+# - RPM_IGNORE_FILES: A list of exclude file patterns for PackSource.
+# This value is appended to SOURCE_ARCHIVE_IGNORE_FILES after
+# including this module.
+#
+# Defines following Functions:
+# RPM_SPEC_STRING_ADD(<var> <str> [<position>])
+# - Add a string to SPEC string.
+# * Parameters:
+# + var: Variable that hold results in string format.
+# + str: String to be added.
+# + position: (Optional) position to put the tag.
+# Valid value: FRONT for inserting in the beginning.
+# Default: Append in the end of string.
+# of string.
+#
+# RPM_SPEC_STRING_ADD_DIRECTIVE <var> <directive> <attribute> <content>)
+# - Add a SPEC directive (e.g. %description -l zh_TW) to SPEC string.
+# * Parameters:
+# + var: Variable that hold results in string format.
+# + directive: Directive to be added.
+# + attribute: Attribute of tag. That is, string between '()'
+# + value: Value fot the tag.
+# + position: (Optional) position to put the tag.
+# Valid value: FRONT for inserting in the beginning.
+# Default: Append in the end of string.
+#
+# RPM_SPEC_STRING_ADD_TAG(<var> <tag> <attribute> <value> [<position>])
+# - Add a SPEC tag (e.g. BuildArch: noarch) to SPEC string.
+# * Parameters:
+# + var: Variable that hold results in string format.
+# + tag: Tag to be added.
+# + attribute: Attribute of tag. That is, string between '()'
+# + value: Value fot the tag.
+# + position: (Optional) position to put the tag.
+# Valid value: FRONT for inserting in the beginning.
+# Default: Append in the end of string.
+#
+# Defines following Macros:
+# PACK_RPM([SPEC_IN <specInFile>] [SPEC <specFile>]
+# [CONFIG_REPLACE <file1> ...])
+# - Generate spec and pack rpm according to the spec file.
+# * Parameters:
+# + SPEC_IN specInFile: RPM SPEC template file as .spec.in
+# + SPEC specFile: Output RPM SPEC file
+# Default: ${RPM_BUILD_SPEC}/${PROJECT_NAME}.spec
+# + CONFIG_REPLACE <file1> ...: Configure file that should be
+# replaced after update.
+# Example:
+# CONFIG_REPLACE ${SYSCONF_DIR}/${PROJECT_NAME}.conf
+# * Targets:
+# + srpm: Build srpm (rpmbuild -bs).
+# + rpm: Build binary rpm (rpmbuild -bb)
+# + rpmlint: Run rpmlint to generated RPMs.
+# + install_rpm: Install all RPMs of this version,
+# excepts debug-info.
+# + clean_rpm: Clean all rpm and build files.
+# + clean_pkg": Clean all source packages, rpm and build files.
+# + clean_old_rpm: Remove old rpm and build files.
+# + clean_old_pkg: Remove old source packages and rpms.
+# * Variables defined:
+# + PRJ_RELEASE: Project release with distribution tags.
+# (e.g. 1.fc13)
+# + RPM_RELEASE_NO: Project release number, without
+# distribution tags. (e.g. 1)
+# + PRJ_SRPM_FILE: Path to generated SRPM file, including
+# relative path.
+# + PRJ_RPM_FILES: Binary RPM files to be build.
+#
+# RPM_MOCK_BUILD([MOCK_CONFIG <mockConfig> ...])
+# - Add mock related targets.
+# * Parameters:
+# + MOCK_CONFIG mockConfig ... : Mock config name without .cfg.
+# (e.g. fedora-rawhide-i386, epel-7-x86_64)
+# Default: default
+# * Targets:
+# + rpm_mock_<mockConfig>: Build RPM with <mockConfig>.
+#
+
+IF(DEFINED _MANAGE_RPM_CMAKE_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_RPM_CMAKE_)
+SET (_MANAGE_RPM_CMAKE_ "DEFINED")
+
+INCLUDE(ManageFile)
+INCLUDE(ManageTarget)
+SET(_manage_rpm_dependency_missing 0)
+
+# Variables to be passed for SPEC building
+SET(RPM_SPEC_IN_VARIABLE_LIST
+ "REQUIRES"
+ "REQUIRES_PRE"
+ "REQUIRES_PREUN"
+ "REQUIRES_POST"
+ "REQUIRES_POSTUN"
+ "BUILD_REQUIRES"
+ "RPM_SPEC_BUILD_OUTPUT"
+ "RPM_SPEC_SUB_PACKAGE_OUTPUT"
+ "RPM_SPEC_INSTALL_SECTION_OUTPUT"
+ "RPM_SPEC_SCRIPT_OUTPUT"
+ )
+
+SET(RPM_SPEC_CMAKE_FLAGS "-DCMAKE_FEDORA_ENABLE_FEDORA_BUILD=1"
+ CACHE STRING "CMake flags in RPM SPEC"
+ )
+SET(RPM_SPEC_MAKE_FLAGS "VERBOSE=1 %{?_smp_mflags}"
+ CACHE STRING "Make flags in RPM SPEC"
+ )
+
+SET(RPM_SPEC_BUILD_OUTPUT
+ "%cmake ${RPM_SPEC_CMAKE_FLAGS} .
+make ${RPM_SPEC_MAKE_FLAGS}"
+ )
+
+M_MSG(${M_INFO2} "CMAKE_FEDORA_SCRIPT_PATH_HINTS=${CMAKE_FEDORA_SCRIPT_PATH_HINTS}")
+
+FIND_PROGRAM_ERROR_HANDLING(RPM_EXECUTABLE
+ ERROR_MSG "ManageRPM: rpm not found, rpm build support is disabled."
+ ERROR_VAR _manage_rpm_dependency_missing
+ VERBOSE_LEVEL ${M_OFF}
+ FIND_ARGS NAMES rpm
+ )
+
+FIND_PROGRAM_ERROR_HANDLING(RPMBUILD_CMD
+ ERROR_MSG "ManageRPM: rpmbuild-md5 or rpmbuild not found, rpm build support is disabled."
+ ERROR_VAR _manage_rpm_dependency_missing
+ VERBOSE_LEVEL ${M_OFF}
+ FIND_ARGS NAMES "rpmbuild-md5" "rpmbuild"
+ )
+
+FIND_PROGRAM_ERROR_HANDLING(CMAKE_FEDORA_KOJI_CMD
+ ERROR_MSG "ManageRPM: cmake-fedora-koji not found, rpm build support is disabled."
+ ERROR_VAR _manage_rpm_dependency_missing
+ VERBOSE_LEVEL ${M_OFF}
+ FIND_ARGS NAMES cmake-fedora-koji
+ HINTS ${CMAKE_FEDORA_SCRIPT_PATH_HINTS}
+ )
+
+
+IF(_manage_rpm_dependency_missing)
+ RETURN()
+ENDIF(_manage_rpm_dependency_missing)
+INCLUDE(ManageVariable)
+CMAKE_FEDORA_CONF_GET_ALL_VARIABLES()
+
+
+## arch
+IF(BUILD_ARCH STREQUAL "noarch")
+ SET(RPM_BUILD_ARCH ${BUILD_ARCH})
+ELSE(BUILD_ARCH STREQUAL "noarch")
+ EXECUTE_PROCESS(COMMAND ${RPM_EXECUTABLE} -E "%{_arch}"
+ COMMAND sed -e "s/^\\.//"
+ OUTPUT_VARIABLE RPM_BUILD_ARCH
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ENDIF(BUILD_ARCH STREQUAL "noarch")
+
+## %{dist}
+EXECUTE_PROCESS(COMMAND ${RPM_EXECUTABLE} -E "%{dist}"
+ COMMAND sed -e "s/^\\.//"
+ OUTPUT_VARIABLE _RPM_DIST_TAG
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+SET(RPM_DIST_TAG "${_RPM_DIST_TAG}" CACHE STRING "RPM Dist Tag")
+
+SET(RPM_RELEASE_NO "1" CACHE STRING "RPM Release Number")
+
+SET(RPM_BUILD_TOPDIR "${CMAKE_BINARY_DIR}" CACHE PATH "RPM topdir")
+
+IF(SOURCE_ARCHIVE_DIR)
+ SET(RPM_BUILD_SOURCES "${SOURCE_ARCHIVE_DIR}" CACHE PATH "RPM SOURCE dir")
+ELSE()
+ SET(RPM_BUILD_SOURCES "${RPM_BUILD_TOPDIR}/SOURCES" CACHE PATH "RPM SOURCE dir")
+ENDIF()
+
+SET(RPM_IGNORE_FILES "debug.*s.list")
+FOREACH(_dir "SPECS" "SRPMS" "RPMS" "BUILD" "BUILDROOT")
+ IF(NOT RPM_BUILD_${_dir})
+ SET(RPM_BUILD_${_dir} "${RPM_BUILD_TOPDIR}/${_dir}"
+ CACHE PATH "RPM ${_dir} dir"
+ )
+ MARK_AS_ADVANCED(RPM_BUILD_${_dir})
+ IF(NOT "${_dir}" STREQUAL "SPECS")
+ LIST(APPEND RPM_IGNORE_FILES "/${_dir}/")
+ ENDIF(NOT "${_dir}" STREQUAL "SPECS")
+ FILE(MAKE_DIRECTORY "${RPM_BUILD_${_dir}}")
+ ENDIF(NOT RPM_BUILD_${_dir})
+ENDFOREACH(_dir "SPECS" "SOURCES" "SRPMS" "RPMS" "BUILD" "BUILDROOT")
+
+# Add RPM build directories in ignore file list.
+LIST(APPEND SOURCE_ARCHIVE_IGNORE_FILES ${RPM_IGNORE_FILES})
+
+FUNCTION(RPM_SPEC_STRING_ADD var str)
+ IF("${ARGN}" STREQUAL "FRONT")
+ STRING_PREPEND(${var} "${str}" "\n")
+ SET(pos "${ARGN}")
+ ELSE("${ARGN}" STREQUAL "FRONT")
+ STRING_APPEND(${var} "${str}" "\n")
+ ENDIF("${ARGN}" STREQUAL "FRONT")
+ SET(${var} "${${var}}" PARENT_SCOPE)
+ENDFUNCTION(RPM_SPEC_STRING_ADD var str)
+
+FUNCTION(RPM_SPEC_STRING_ADD_DIRECTIVE var directive attribute content)
+ SET(_str "%${directive}")
+ IF(NOT attribute STREQUAL "")
+ STRING_APPEND(_str " ${attribute}")
+ ENDIF(NOT attribute STREQUAL "")
+
+ IF(NOT content STREQUAL "")
+ STRING_APPEND(_str "\n${content}")
+ ENDIF(NOT content STREQUAL "")
+ STRING_APPEND(_str "\n")
+ RPM_SPEC_STRING_ADD(${var} "${_str}" ${ARGN})
+ SET(${var} "${${var}}" PARENT_SCOPE)
+ENDFUNCTION(RPM_SPEC_STRING_ADD_DIRECTIVE var directive attribute content)
+
+FUNCTION(RPM_SPEC_STRING_ADD_TAG var tag attribute value)
+ IF("${attribute}" STREQUAL "")
+ SET(_str "${tag}:")
+ ELSE("${attribute}" STREQUAL "")
+ SET(_str "${tag}(${attribute}):")
+ ENDIF("${attribute}" STREQUAL "")
+ STRING_PADDING(_str "${_str}" ${RPM_SPEC_TAG_PADDING})
+ STRING_APPEND(_str "${value}")
+ RPM_SPEC_STRING_ADD(${var} "${_str}" ${ARGN})
+ SET(${var} "${${var}}" PARENT_SCOPE)
+ENDFUNCTION(RPM_SPEC_STRING_ADD_TAG var tag attribute value)
+
+MACRO(MANAGE_RPM_SPEC)
+ IF(NOT _opt_SPEC_IN)
+ FIND_FILE_ERROR_HANDLING(_opt_SPEC_IN
+ ERROR_MSG " spec.in is not found"
+ VERBOSE_LEVEL ${M_ERROR}
+ NAMES "project.spec.in" "${PROJECT_NAME}.spec.in"
+ PATHS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/SPECS
+ ${CMAKE_SOURCE_DIR}/SPECS
+ ${CMAKE_CURRENT_SOURCE_DIR}/rpm
+ ${CMAKE_SOURCE_DIR}/rpm
+ ${RPM_BUILD_SPECS}
+ ${CMAKE_ROOT_DIR}/Templates/fedora
+ ${CMAKE_CURRENT_SOURCE_DIR}/cmake-fedora/Templates/fedora
+ )
+ ENDIF(NOT _opt_SPEC_IN)
+
+ IF(NOT _opt_SPEC)
+ SET(_opt_SPEC "${RPM_BUILD_SPECS}/${PROJECT_NAME}.spec")
+ ENDIF(NOT _opt_SPEC)
+
+ SET(INSTALL_MANIFESTS_FILE "${CMAKE_BINARY_DIR}/install_manifest.txt")
+ ADD_CUSTOM_COMMAND(OUTPUT ${INSTALL_MANIFESTS_FILE}
+ COMMAND cmake -Dcmd=make_manifests
+ -Dmanifests=${INSTALL_MANIFESTS_FILE}
+ -Dtmp_dir=${CMAKE_FEDORA_TMP_DIR}
+ -P ${CMAKE_FEDORA_MODULE_DIR}/ManageRPMScript.cmake
+ COMMENT "install_manifest.txt: ${INSTALL_MANIFESTS_FILE}"
+ )
+
+ FOREACH(v ${RPM_SPEC_IN_VARIABLE_LIST})
+ PRJ_INFO_CMAKE_APPEND(${v})
+ ENDFOREACH(v)
+
+ SET(_specInOptList "")
+ IF(_opt_CONFIG_REPLACE)
+ LIST(APPEND _specInOptList "\"-Dconfig_replace=${_opt_CONFIG_REPLACE}\"")
+ ENDIF(_opt_CONFIG_REPLACE)
+
+ ADD_CUSTOM_TARGET_COMMAND(spec OUTPUT ${_opt_SPEC}
+ COMMAND cmake -Dcmd=spec
+ -Dspec=${_opt_SPEC}
+ -Dspec_in=${_opt_SPEC_IN}
+ -Dmanifests=${INSTALL_MANIFESTS_FILE}
+ -Drelease=${RELEASE_NOTES_FILE}
+ -Dprj_info=${PRJ_INFO_CMAKE_FILE}
+ ${_specInOptList}
+ -P ${CMAKE_FEDORA_MODULE_DIR}/ManageRPMScript.cmake
+ DEPENDS ${_opt_SPEC_IN} ${RELEASE_NOTES_FILE}
+ ${INSTALL_MANIFESTS_FILE}
+ ${SOURCE_ARCHIVE_FILE}
+ COMMENT "spec: ${_opt_SPEC}"
+ )
+ENDMACRO(MANAGE_RPM_SPEC)
+
+MACRO(PACK_RPM)
+ IF(_manage_rpm_dependency_missing)
+ RETURN()
+ ENDIF(_manage_rpm_dependency_missing)
+
+ SET(_validOptions "SPEC_IN" "SPEC" "CONFIG_REPLACE")
+ VARIABLE_PARSE_ARGN(_opt _validOptions ${ARGN})
+ MANAGE_RPM_SPEC()
+
+ SET(PRJ_SRPM_FILE "${RPM_BUILD_SRPMS}/${PROJECT_NAME}-${PRJ_VER}-${RPM_RELEASE_NO}.${RPM_DIST_TAG}.src.rpm"
+ CACHE STRING "RPM files" FORCE)
+
+ SET(PRJ_RPM_FILES "${RPM_BUILD_RPMS}/${RPM_BUILD_ARCH}/${PROJECT_NAME}-${PRJ_VER}-${RPM_RELEASE_NO}.${RPM_DIST_TAG}.${RPM_BUILD_ARCH}.rpm"
+ CACHE STRING "Building RPM files" FORCE)
+
+ #-------------------------------------------------------------------
+ # RPM build commands and targets
+
+ ADD_CUSTOM_TARGET_COMMAND(srpm
+ NO_FORCE
+ OUTPUT ${PRJ_SRPM_FILE}
+ COMMAND ${RPMBUILD_CMD} -bs ${_opt_SPEC}
+ --define '_sourcedir ${RPM_BUILD_SOURCES}'
+ --define '_builddir ${RPM_BUILD_BUILD}'
+ --define '_srcrpmdir ${RPM_BUILD_SRPMS}'
+ --define '_specdir ${RPM_BUILD_SPECS}'
+ DEPENDS ${_opt_SPEC} ${SOURCE_ARCHIVE_FILE}
+ COMMENT "srpm: ${PRJ_SRPM_FILE}"
+ )
+ ADD_DEPENDENCIES(srpm_no_force dist)
+ ADD_DEPENDENCIES(srpm dist)
+
+ # Binary RPMs
+ ADD_CUSTOM_TARGET_COMMAND(rpm
+ OUTPUT ${PRJ_RPM_FILES}
+ NO_FORCE
+ COMMAND ${RPMBUILD_CMD} --rebuild ${PRJ_SRPM_FILE}
+ --define '_rpmdir ${RPM_BUILD_RPMS}'
+ --define '_builddir ${RPM_BUILD_BUILD}'
+ --define '_buildrootdir ${RPM_BUILD_BUILDROOT}'
+ DEPENDS ${PRJ_SRPM_FILE}
+ COMMENT "rpm: ${PRJ_RPM_FILES}"
+ )
+ ADD_DEPENDENCIES(rpm_no_force srpm_no_force)
+ ADD_DEPENDENCIES(rpm srpm)
+
+ ADD_CUSTOM_TARGET(install_rpms
+ COMMAND find ${RPM_BUILD_RPMS}/${RPM_BUILD_ARCH}
+ -name '${PROJECT_NAME}*-${PRJ_VER}-${RPM_RELEASE_NO}.*.${RPM_BUILD_ARCH}.rpm' !
+ -name '${PROJECT_NAME}-debuginfo-${RPM_RELEASE_NO}.*.${RPM_BUILD_ARCH}.rpm'
+ -print -exec sudo rpm --upgrade --hash --verbose '{}' '\\;'
+ COMMENT "install_rpm: Install all rpms except debuginfo"
+ )
+ ADD_DEPENDENCIES(install_rpms rpm_no_force)
+
+ ADD_CUSTOM_TARGET(rpmlint
+ COMMAND find .
+ -name '${PROJECT_NAME}*-${PRJ_VER}-${RPM_RELEASE_NO}.*.rpm'
+ | xargs rpmlint -i -v
+ DEPENDS ${PRJ_SRPM_FILE} ${PRJ_RPM_FILES}
+ COMMENT "rpmlint: ${PRJ_SRPM_FILE} ${PRJ_RPM_FILES}"
+ )
+
+ ADD_CUSTOM_TARGET(clean_old_rpm
+ COMMAND find .
+ -name '${PROJECT_NAME}*.rpm' ! -name '${PROJECT_NAME}*-${PRJ_VER}-${RPM_RELEASE_NO}.*.rpm'
+ -print -delete
+ COMMAND find ${RPM_BUILD_BUILD}
+ -path '${PROJECT_NAME}*' ! -path '${RPM_BUILD_BUILD}/${PROJECT_NAME}-${PRJ_VER}-*'
+ -print -delete
+ COMMENT "Cleaning old rpms and build."
+ )
+
+ ADD_CUSTOM_TARGET(clean_old_pkg
+ )
+
+ ADD_DEPENDENCIES(clean_old_pkg clean_old_rpm clean_old_pack_src)
+
+ ADD_CUSTOM_TARGET(clean_rpm
+ COMMAND find . -name '${PROJECT_NAME}-*.rpm' -print -delete
+ COMMENT "Cleaning rpms.."
+ )
+ ADD_CUSTOM_TARGET(clean_pkg
+ )
+
+ ADD_DEPENDENCIES(clean_rpm clean_old_rpm)
+ ADD_DEPENDENCIES(clean_pkg clean_rpm clean_pack_src)
+ENDMACRO(PACK_RPM)
+
+MACRO(RPM_MOCK_BUILD)
+ IF(_manage_rpm_dependency_missing)
+ RETURN()
+ ENDIF(_manage_rpm_dependency_missing)
+
+ SET(_mock_missing 0)
+ FIND_PROGRAM_ERROR_HANDLING(MOCK_CMD
+ ERROR_MSG "mock not found, mock build support is disabled."
+ ERROR_VAR _mock_missing
+ VERBOSE_LEVEL ${M_OFF}
+ FIND_ARGS NAMES mock
+ )
+
+ IF(_manage_rpm_dependency_missing)
+ RETURN()
+ ENDIF(_manage_rpm_dependency_missing)
+
+ IF(_mock_missing)
+ RETURN()
+ ENDIF(_mock_missing)
+
+ SET(_validOptions "MOCK_CONFIG")
+ VARIABLE_PARSE_ARGN(_o _validOptions ${ARGN})
+
+ IF("${_o_MOCK_CONFIG}" STREQUAL "")
+ SET(_o_MOCK_CONFIG "default")
+ ENDIF("${_o_MOCK_CONFIG}" STREQUAL "")
+
+ FOREACH(_mName ${_o_MOCK_CONFIG})
+ ## Filter out mock config that does not exists
+ ## Figure out the actual config file (which has arch)
+ GET_FILENAME_COMPONENT(_mCfg "/etc/mock/${_mName}.cfg" REALPATH)
+ IF(EXISTS "${_mCfg}")
+ IF("${RPM_BUILD_ARCH}" STREQUAL "noarch")
+ SET(_resultDir ${RPM_BUILD_RPMS}/noarch)
+ ELSEIF("${_mCfg}" MATCHES "-x86_64.cfg")
+ SET(_resultDir ${RPM_BUILD_RPMS}/x86_64)
+ ELSEIF("${_mCfg}" MATCHES "-i386.cfg")
+ SET(_resultDir ${RPM_BUILD_RPMS}/i386)
+ ELSE()
+ M_MSG(${M_OFF} "RPM_MOCK_BUILD: ${_mCfg} is not supported yet.")
+ SET(_resultDir "")
+ ENDIF("${RPM_BUILD_ARCH}" STREQUAL "noarch")
+ IF(NOT "${_resultDir}" STREQUAL "")
+ ADD_CUSTOM_TARGET(rpm_mock_${_mName}
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${_resultDir}
+ COMMAND ${MOCK_CMD} -r "${_mName}" --resultdir="${_resultDir}" ${PRJ_SRPM_FILE}
+ DEPENDS ${PRJ_SRPM_FILE}
+ COMMENT "rpm_mock_${_mName}: ${PRJ_SRPM_FILE}"
+ )
+ ENDIF(NOT "${_resultDir}" STREQUAL "")
+ ELSE(EXISTS "${_mCfg}")
+ M_MSG(${M_OFF}
+ "RPM_MOCK_BUILD: mock config ${_mCfg} does not exists"
+ )
+ ENDIF(EXISTS "${_mCfg}")
+ ENDFOREACH(_mName)
+ENDMACRO(RPM_MOCK_BUILD)
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageRPMScript.cmake ibus-chewing-1.6.1_new/Modules/ManageRPMScript.cmake
--- ibus-chewing-1.6.1/Modules/ManageRPMScript.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageRPMScript.cmake 2015-12-17 17:43:31.000000000 +0800
@@ -0,0 +1,405 @@
+# - Manage RPM Script
+# RPM related scripts to be invoked in command line.
+
+MACRO(MANAGE_RPM_SCRIPT_PRINT_USAGE)
+ MESSAGE(
+ "Manage RPM script: This script is not recommend for end users
+
+cmake -Dcmd=spec -Dspec=<project.spec> -Dspec_in=<project.spec.in>
+ -Dmanifests=<path/install_manifests.txt>
+ -Drelease=<path/RELEASE-NOTES.txt>
+ -Dprj_info=<path/prj_info.cmake>
+ [\"-Dconfig_replace=<file1;file2>\"]
+ [\"-D<var>=<value>\"]
+ -P <CmakeModulePath>/ManageRPMScript.cmake
+ Make project spec file according to spec_in and prj_info.cmake
+ Options:
+ -Dconfig_replace: List of configure files that should use
+ %config instead of %config(noreplace)
+ -Dmainfests: Path to install_manifests.txt
+ -Drelease: Path to RELEASE-NOTES.txt
+ Note: Please pass the necessary variables via -Dvar=VALUE,
+ e.g. \"-DPROJECT_NAME=cmake-fedora\"
+
+cmake -Dcmd=spec_manifests
+ -Dmanifests=<path/install_manifests.txt>
+ -Dprj_info=<path/prj_info.cmake>
+ [\"-Dconfig_replace=<file1;file2>\"]
+ [\"-D<var>=<value>\"]
+ -P <CmakeModulePath>/ManageRPMScript.cmake
+ Convert install_manifests.txt to part of a SPEC file.
+ Options:
+ -Dconfig_replace: List of configure files that should use
+ %config instead of %config(noreplace)
+ -Dmainfests: Path to install_manifests.txt
+ Note: Please pass the necessary variables via -Dvar=VALUE,
+ e.g. \"-DPROJECT_NAME=cmake-fedora\"
+
+cmake -Dcmd=spec_changelog
+ -Dmanifests=<path/install_manifests.txt>
+ -Drelease=<path/RELEASE-NOTES.txt>
+ -Dprj_info=<path/prj_info.cmake>
+ [\"-D<var>=<value>\"]
+ -P <CmakeModulePath>/ManageRPMScript.cmake
+ Convert RELEASE-NOTES.txt to ChangeLog a SPEC file.
+ Options:
+ -Dmainfests: Path to install_manifests.txt
+ Note: Please pass the necessary variables via -Dvar=VALUE,
+ e.g. \"-DPROJECT_NAME=cmake-fedora\"
+
+cmake -Dcmd=make_manifests
+ [\"-Dmanifests=<path>/install_manifests.txt>\"]
+ [\"-Dtmp_dir=<dir>\"]
+ Make install_manifests.txt.
+ Options:
+ -Dmainfests: Path to install_manifests.txt
+ -Dtmp_dir: Directory for tempory files.
+ Default is CMAKE_FEDORA_TMP_DIR
+
+"
+)
+ENDMACRO(MANAGE_RPM_SCRIPT_PRINT_USAGE)
+
+MACRO(MANIFEST_TO_STRING strVar hasTransVar manifestsFile)
+ SET(${hasTransVar} 0)
+
+ FILE(STRINGS ${manifestsFile} _filesInManifests)
+ SET(_docList "")
+ SET(_fileList "")
+ FOREACH(_file ${_filesInManifests})
+ SET(_addToFileList 1)
+ SET(_config_replace_detected 0)
+ IF(config_replace)
+ FOREACH(_mF ${config_replace})
+ IF("${_file}" STREQUAL "${_mF}")
+ SET(_config_replace_detected 1)
+ BREAK()
+ ENDIF()
+ ENDFOREACH()
+ ENDIF()
+ STRING(REPLACE "${PROJECT_NAME}" "%{name}" _file "${_file}")
+ IF("${_file}" MATCHES "^/usr/bin/")
+ STRING(REGEX REPLACE "^/usr/bin/" "%{_bindir}/" _file ${_file})
+ ELSEIF("${_file}" MATCHES "^/usr/sbin/")
+ STRING(REGEX REPLACE "^/usr/sbin/" "%{_sbindir}/" _file ${_file})
+ ELSEIF("${_file}" MATCHES "^/usr/libexec/")
+ STRING(REGEX REPLACE "^/usr/libexec/" "%{_libexecdir}/" _file ${_file})
+ ELSEIF("${_file}" MATCHES "^/usr/lib")
+ STRING(REGEX REPLACE "^/usr/lib(64)?/" "%{_libdir}/" _file ${_file})
+ ELSEIF("${_file}" MATCHES "^/usr/include/")
+ STRING(REGEX REPLACE "^/usr/include/" "%{_includedir}/" _file ${_file})
+ ELSEIF("${_file}" MATCHES "^/etc/rc.d/init.d/")
+ STRING(REGEX REPLACE "^/etc/rc.d/init.d/" "%{_initrddir}/" _f "${_file}")
+ ELSEIF("${_file}" MATCHES "^/etc/")
+ STRING(REGEX REPLACE "^/etc/" "%config(noreplace) %{_sysconfdir}/" _file "${_file}")
+ ELSEIF("${_file}" MATCHES "^/usr/share/info/")
+ STRING(REGEX REPLACE "^/usr/share/info/" "%{_infodir}/" _file ${_file})
+ ELSEIF("${_file}" MATCHES "^/usr/share/doc/")
+ SET(_addToFileList 0)
+ STRING(REGEX REPLACE "^/usr/share/doc/%{name}[^/]*/" "" _file ${_file})
+ LIST(APPEND _docList ${_file})
+ ELSEIF("${_file}" MATCHES "^/usr/share/man/")
+ STRING(REGEX REPLACE "^/usr/share/man/" "%{_mandir}/" _file ${_file})
+ ELSEIF("${_file}" MATCHES "^/usr/share/")
+ IF(_file MATCHES "^/usr/share/locale/")
+ SET(_addToFileList 0)
+ SET(${hasTransVar} 1)
+ ENDIF()
+ STRING(REGEX REPLACE "^/usr/share/" "%{_datadir}/" _file ${_file})
+ ELSEIF("${_file}" MATCHES "^/var/lib/")
+ STRING(REGEX REPLACE "^/var/lib/" "%{_sharedstatedir}/" _file ${_file})
+ ELSEIF("${_file}" MATCHES "^/var/")
+ STRING(REGEX REPLACE "^/var/" "%{_localstatedir}/" _file ${_file})
+ ELSE()
+ M_MSG(${M_ERROR} "ManageRPMScript: Unhandled file: ${_file}")
+ ENDIF()
+ IF(_config_replace_detected)
+ IF("${_file}" MATCHES "%config\\(noreplace\\)")
+ STRING(REPLACE "%config(noreplace)" "%config"
+ _file ${_file})
+ ELSE()
+ STRING(REGEX REPLACE "^%" "%config %" _file ${_file})
+ ENDIF()
+ ENDIF()
+
+ IF(_addToFileList)
+ LIST(APPEND _fileList "${_file}")
+ ENDIF(_addToFileList)
+ ENDFOREACH(_file ${_filesInManifests})
+ IF(${hasTransVar} EQUAL 1)
+ STRING_APPEND(${strVar} "%files -f %{name}.lang" "\n")
+ ELSE()
+ STRING_APPEND(${strVar} "%files" "\n")
+ ENDIF()
+ STRING_APPEND(${strVar} "%defattr(-, root, root, -)" "\n")
+ # Append %doc
+ STRING_JOIN(_docStr " " ${_docList})
+ STRING_APPEND(${strVar} "%doc ${_docStr}" "\n")
+
+ # Append rest of files
+ LIST(SORT _fileList)
+ FOREACH(_f ${_fileList})
+ STRING_APPEND(${strVar} "${_f}" "\n")
+ ENDFOREACH(_f ${_fileList})
+ENDMACRO(MANIFEST_TO_STRING)
+
+FUNCTION(SPEC_MANIFESTS)
+ IF(NOT manifests)
+ MANAGE_RPM_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Requires \"-Dmanifests=<install_manifests.txt>\"")
+ ENDIF()
+ SET(RPM_FAKE_INSTALL_DIR "/tmp/cmake-fedora-fake-install")
+ EXECUTE_PROCESS(COMMAND make DESTDIR=${RPM_FAKE_INSTALL_DIR} install)
+ MANIFEST_TO_STRING(mStr hasTrans ${manifests})
+ M_OUT("${mStr}")
+ENDFUNCTION(SPEC_MANIFESTS)
+
+MACRO(CHANGELOG_TO_STRING strVar)
+ EXECUTE_PROCESS(
+ COMMAND ${CMAKE_COMMAND}
+ -Dcmd=extract_current
+ -Drelease=${release}
+ -P ${CMAKE_FEDORA_MODULE_DIR}/ManageChangeLogScript.cmake
+ OUTPUT_VARIABLE _changeLogThis
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+
+ FIND_PROGRAM_ERROR_HANDLING(CMAKE_FEDORA_KOJI_CMD
+ FIND_ARGS NAMES cmake-fedora-koji
+ PATHS ${CMAKE_FEDORA_SCRIPT_PATH_HINTS}
+ )
+
+ SET(CMAKE_FEDORA_TMP_DIR "/tmp")
+ SET(RPM_CHANGELOG_TMP_FILE "${CMAKE_FEDORA_TMP_DIR}/${PROJECT_NAME}.changelog")
+
+ EXECUTE_PROCESS(
+ COMMAND ${CMAKE_FEDORA_KOJI_CMD} newest-changelog "${PROJECT_NAME}" | tail -n +2
+ OUTPUT_VARIABLE _changeLogPrev
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+
+ SET(${strVar} "%changelog")
+ STRING_APPEND(${strVar} "* ${TODAY_CHANGELOG} ${MAINTAINER} - ${PRJ_VER}-${RPM_RELEASE_NO}" "\n")
+ STRING_APPEND(${strVar} "${_changeLogThis}\n" "\n")
+ STRING_APPEND(${strVar} "${_changeLogPrev}" "\n")
+ENDMACRO(CHANGELOG_TO_STRING strVar)
+
+FUNCTION(SPEC_CHANGELOG)
+ IF(NOT release)
+ MANAGE_RPM_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Requires \"-Drelease=<RELEASE-NOTES.txt>\"")
+ ENDIF()
+ PRJ_INFO_CMAKE_READ(${prj_info})
+ CHANGELOG_TO_STRING(_changeLogStr)
+ M_OUT("${_changeLogStr}")
+ENDFUNCTION(SPEC_CHANGELOG)
+
+# Not exactly a header, but the first half
+MACRO(SPEC_WRITE_HEADER)
+ ## Summary
+ RPM_SPEC_STRING_ADD_TAG(RPM_SPEC_SUMMARY_OUTPUT
+ "Summary" "" "${PRJ_SUMMARY}"
+ )
+ SET(_lang "")
+ FOREACH(_sT ${SUMMARY_TRANSLATIONS})
+ IF(_lang STREQUAL "")
+ SET(_lang "${_sT}")
+ ELSE(_lang STREQUAL "")
+ RPM_SPEC_STRING_ADD_TAG(RPM_SPEC_SUMMARY_OUTPUT
+ "Summary" "${_lang}" "${_sT}"
+ )
+ SET(_lang "")
+ ENDIF(_lang STREQUAL "")
+ ENDFOREACH(_sT ${SUMMARY_TRANSLATIONS})
+
+ ## Url
+ SET(RPM_SPEC_URL_OUTPUT "${RPM_SPEC_URL}")
+
+ ## Source
+ SET(_buf "")
+ SET(_i 0)
+ FOREACH(_s ${RPM_SPEC_SOURCES})
+ RPM_SPEC_STRING_ADD_TAG(_buf "Source${_i}" "" "${_s}")
+ MATH(EXPR _i ${_i}+1)
+ ENDFOREACH(_s ${RPM_SPEC_SOURCES})
+ RPM_SPEC_STRING_ADD(RPM_SPEC_SOURCE_OUTPUT "${_buf}" FRONT)
+
+ ## Requires and BuildRequires
+ SET(_buf "")
+ FOREACH(_s ${BUILD_REQUIRES})
+ RPM_SPEC_STRING_ADD_TAG(_buf "BuildRequires" "" "${_s}")
+ ENDFOREACH(_s)
+
+ FOREACH(_s ${REQUIRES})
+ RPM_SPEC_STRING_ADD_TAG(_buf "Requires" "" "${_s}")
+ ENDFOREACH(_s)
+ FOREACH(_s ${REQUIRES_PRE})
+ RPM_SPEC_STRING_ADD_TAG(_buf "Requires" "pre" "${_s}")
+ ENDFOREACH(_s)
+ FOREACH(_s ${REQUIRES_PREUN})
+ RPM_SPEC_STRING_ADD_TAG(_buf "Requires" "preun" "${_s}")
+ ENDFOREACH(_s)
+ FOREACH(_s ${REQUIRES_POST})
+ RPM_SPEC_STRING_ADD_TAG(_buf "Requires" "post" "${_s}")
+ ENDFOREACH(_s)
+ FOREACH(_s ${REQUIRES_POSTUN})
+ RPM_SPEC_STRING_ADD_TAG(_buf "Requires" "postun" "${_s}")
+ ENDFOREACH(_s)
+ RPM_SPEC_STRING_ADD(RPM_SPEC_REQUIRES_OUTPUT "${_buf}" FRONT)
+
+ ## Description
+ RPM_SPEC_STRING_ADD_DIRECTIVE(RPM_SPEC_DESCRIPTION_OUTPUT
+ "description" "" "${PRJ_DESCRIPTION}"
+ )
+ SET(_lang "")
+ FOREACH(_sT ${DESCRIPTION_TRANSLATIONS})
+ IF(_lang STREQUAL "")
+ SET(_lang "${_sT}")
+ ELSE(_lang STREQUAL "")
+ RPM_SPEC_STRING_ADD_DIRECTIVE(RPM_SPEC_DESCRIPTION_OUTPUT
+ "description" "-l ${_lang}" "${_sT}" "\n"
+ )
+ SET(_lang "")
+ ENDIF(_lang STREQUAL "")
+ ENDFOREACH(_sT ${DESCRIPTION_TRANSLATIONS})
+
+ ## Header
+ ## %{_build_arch}
+ IF("${BUILD_ARCH}" STREQUAL "")
+ EXECUTE_PROCESS(COMMAND ${RPM_CMD} -E "%{_build_arch}"
+ OUTPUT_VARIABLE _RPM_BUILD_ARCH
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ SET(RPM_BUILD_ARCH "${_RPM_BUILD_ARCH}"
+ CACHE STRING "RPM Arch")
+ ELSE("${BUILD_ARCH}" STREQUAL "")
+ SET(RPM_BUILD_ARCH "${BUILD_ARCH}"
+ CACHE STRING "RPM Arch")
+ RPM_SPEC_STRING_ADD_TAG(RPM_SPEC_HEADER_OUTPUT
+ "BuildArch" "" "${BUILD_ARCH}"
+ )
+ ENDIF("${BUILD_ARCH}" STREQUAL "")
+
+ ## Install
+ RPM_SPEC_STRING_ADD_DIRECTIVE(RPM_SPEC_INSTALL_SECTION_OUTPUT
+ "install" "" "rm -rf %{buildroot}
+make install DESTDIR=%{buildroot}"
+ )
+
+ RPM_SPEC_STRING_ADD(RPM_SPEC_INSTALL_SECTION_OUTPUT
+ "# We install document using doc
+rm -fr %{buildroot}%{_docdir}/*")
+
+ENDMACRO(SPEC_WRITE_HEADER)
+
+FUNCTION(SPEC_MAKE)
+ IF(NOT manifests)
+ MANAGE_RPM_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Requires \"-Dmanifests=<install_manifests.txt>\"")
+ ENDIF()
+ IF(NOT release)
+ MANAGE_RPM_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Requires \"-Drelease=<RELEASE-NOTES.txt>\"")
+ ENDIF()
+ IF(NOT prj_info)
+ MANAGE_RPM_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Requires -Dprj_info=<prj_info.cmake>")
+ ENDIF()
+ PRJ_INFO_CMAKE_READ(${prj_info})
+ SPEC_WRITE_HEADER()
+ MANIFEST_TO_STRING(RPM_SPEC_FILES_SECTION_OUTPUT hasTrans ${manifests})
+ IF(hasTrans)
+ RPM_SPEC_STRING_ADD(RPM_SPEC_INSTALL_SECTION_OUTPUT
+ "\n%find_lang %{name}\n")
+ ENDIF()
+ CHANGELOG_TO_STRING(RPM_SPEC_CHANGELOG_SECTION_OUTPUT)
+ CONFIGURE_FILE(${spec_in} ${spec} @ONLY)
+ENDFUNCTION(SPEC_MAKE)
+
+FUNCTION(MAKE_MANIFESTS)
+ IF(NOT tmp_dir)
+ SET(tmp_dir "${CMAKE_FEDORA_TMP_DIR}")
+ ENDIF(NOT tmp_dir)
+ SET(_opts "")
+ IF(manifests)
+ GET_FILENAME_COMPONENT(manifestsDir "${manifests}" PATH)
+ SET(_opts "WORKING_DIRECTORY" "${manifestsDir}")
+ ENDIF()
+
+ EXECUTE_PROCESS(COMMAND make install DESTDIR=${tmp_dir}
+ ${_opts})
+ENDFUNCTION(MAKE_MANIFESTS)
+
+SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
+#######################################
+# Determine CMAKE_FEDORA_MODULE_DIR
+#
+
+## It is possible that current dir is in NO_PACK/FedPkg/<prj>
+LIST(INSERT CMAKE_MODULE_PATH 0
+ ${CMAKE_SOURCE_DIR}/Modules ${CMAKE_SOURCE_DIR}/cmake-fedora/Modules
+ ${CMAKE_SOURCE_DIR}/../../../Modules
+ ${CMAKE_SOURCE_DIR}/../../../cmake-fedora/Modules
+ ${CMAKE_SOURCE_DIR}
+ )
+
+IF(CMAKE_SCRIPT_MODE_FILE)
+ GET_FILENAME_COMPONENT(CMAKE_FEDORA_SCRIPT_DIR ${CMAKE_SCRIPT_MODE_FILE}
+ PATH)
+ LIST(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_FEDORA_SCRIPT_DIR}")
+ENDIF()
+
+IF(cmake_fedora_module_dir)
+ LIST(INSERT CMAKE_MODULE_PATH 0 "${cmake_fedora_module_dir}")
+ENDIF()
+
+INCLUDE(ManageMessage RESULT_VARIABLE MANAGE_MODULE_PATH)
+IF(NOT MANAGE_MODULE_PATH)
+ MESSAGE(FATAL_ERROR "ManageMessage.cmake cannot be found in ${CMAKE_MODULE_PATH}")
+ENDIF()
+GET_FILENAME_COMPONENT(CMAKE_FEDORA_MODULE_DIR
+ "${MANAGE_MODULE_PATH}" PATH)
+
+INCLUDE(ManageEnvironmentCommon)
+INCLUDE(ManageString)
+INCLUDE(ManageVariable)
+CMAKE_FEDORA_CONF_GET_ALL_VARIABLES()
+INCLUDE(DateTimeFormat)
+INCLUDE(ManageVersion)
+INCLUDE(ManageRPM)
+
+IF(NOT DEFINED cmd)
+ MANAGE_RPM_SCRIPT_PRINT_USAGE()
+ELSE()
+ ## Append FILE_INSTALL_SYSCONF_LIST as config_replace
+ FOREACH(_f ${FILE_INSTALL_SYSCONF_LIST})
+ LIST(APPEND _config_replace "/etc/${_f}")
+ ENDFOREACH(_f ${FILE_INSTALL_SYSCONF_LIST})
+ FOREACH(_f ${FILE_INSTALL_PRJ_SYSCONF_LIST})
+ LIST(APPEND _config_replace "/etc/${PROJECT_NAME}/${_f}")
+ ENDFOREACH(_f ${FILE_INSTALL_PRJ_SYSCONF_LIST})
+ IF (POLICY CMP0054)
+ CMAKE_POLICY(PUSH)
+ CMAKE_POLICY(SET CMP0054 "NEW")
+ ENDIF()
+ IF("${cmd}" STREQUAL "spec")
+ IF(NOT spec)
+ MANAGE_RPM_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Requires -Dspec=<file.spec>")
+ ENDIF(NOT spec)
+ SPEC_MAKE()
+ ELSEIF("${cmd}" STREQUAL "spec_manifests")
+ SPEC_MANIFESTS()
+ ELSEIF("${cmd}" STREQUAL "spec_changelog")
+ SPEC_CHANGELOG()
+ ELSEIF("${cmd}" STREQUAL "make_manifests")
+ MAKE_MANIFESTS()
+ ELSE()
+ MANAGE_RPM_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Invalid cmd ${cmd}")
+ ENDIF()
+ IF (POLICY CMP0054)
+ CMAKE_POLICY(POP)
+ ENDIF()
+ENDIF()
+
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageSourceVersionControl.cmake ibus-chewing-1.6.1_new/Modules/ManageSourceVersionControl.cmake
--- ibus-chewing-1.6.1/Modules/ManageSourceVersionControl.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageSourceVersionControl.cmake 2016-01-07 15:39:34.000000000 +0800
@@ -0,0 +1,192 @@
+# - Module for manipulate source version control systems.
+# This module provides an universal interface for supported
+# source version control systems, namely:
+# Git, Mercurial and SVN.
+#
+# Following targets are defined for each source version control
+# (in Git terminology):
+# - tag: Tag the working tree with ${PRJ_VER} and ${CHANGE_SUMMARY}.
+# This target also ensure there is nothing uncommitted.
+# - tag_pre: Target that will be executed before target "tag".
+# So use ADD_DEPENDENCIES(tag_pre <target> ...) for the targets
+# that need to be done before target <tag>.
+# - tag_post: Target that will be executed after target "tag".
+# This target will push the tagged commit to server.
+# This target depends (directly or indirectly) on target "tag".
+# So use ADD_DEPENDENCIES(tag_post <target> ...) for the targets
+# that need to be done after target <tag>.
+#
+#
+# Included Modoule:
+# - ManageTarget
+# - ManageVariable
+#
+# Define following functions:
+# MANAGE_SOURCE_VERSION_CONTROL_GIT(
+# [PRE_TARGETS <target> ...] [POST_TARGETS <target> ...]
+# )
+# - Use Git as source version control.
+# * Parameters:
+# + PRE_TARGETS target ...: Targets before target "tag".
+# + POST_TARGETS target ... : Target after target "tag".
+# * Targets:
+# + tag: Tag the commit with ${PRJ_VER}
+# + tag_pre: Target hook for action before target "tag".
+# + tag_post: Target hook for action after target "tag".
+# + tag_push: Push tag and commit to server
+#
+# MANAGE_SOURCE_VERSION_CONTROL_HG(
+# [PRE_TARGETS <target> ...] [POST_TARGETS <target> ...]
+# )
+# - (Experimental) Use Mercurial (HG) as source version control.
+# * Parameters:
+# + PRE_TARGETS target ...: Targets before target "tag".
+# + POST_TARGETS target ... : Target after target "tag".
+# * Targets:
+# + tag: Tag the commit with ${PRJ_VER}
+# + tag_pre: Target hook for action before target "tag".
+# + tag_post: Target hook for action after target "tag".
+# + tag_push: Push tag and commit to server
+#
+# MANAGE_SOURCE_VERSION_CONTROL_SVN(
+# SVN_URL <svnUrl>
+# [PRE_TARGETS <target> ...] [POST_TARGETS <target> ...]
+# )
+# - (Experimental) Use Subversion (SVN) as source version control.
+# * Parameters:
+# + SVN_URL url: URL to svn repostory.
+# (e.g. http://server.com/repo/project)
+# + PRE_TARGETS target ...: Targets before target "tag".
+# + POST_TARGETS target ... : Target after target "tag".
+# * Targets:
+# + tag: Tag the commit with ${PRJ_VER}
+# + tag_pre: Target hook for action before target "tag".
+# + tag_post: Target hook for action after target "tag".
+#
+
+IF(DEFINED _MANAGE_SOURCE_VERSION_CONTROL_CMAKE_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_SOURCE_VERSION_CONTROL_CMAKE_)
+SET(_MANAGE_SOURCE_VERSION_CONTROL_CMAKE_ "DEFINED")
+INCLUDE(ManageTarget)
+INCLUDE(ManageVariable)
+
+FUNCTION(MANAGE_SOURCE_VERSION_CONTROL_COMMON)
+ SET(_valid_options "PRE_TARGETS" "POST_TARGETS")
+ VARIABLE_PARSE_ARGN(_o _valid_options ${ARGN})
+
+ ADD_CUSTOM_TARGET(tag_pre
+ COMMENT "tag_pre: ${_o} Pre-tagging check "
+ )
+
+ ## Source Archive should be created before tag
+ ADD_DEPENDENCIES(tag_pre pack_src_no_force)
+
+ ADD_CUSTOM_TARGET(tag_post
+ COMMENT "tag_pre: ${_o} Post-tagging actions "
+ )
+
+ ## Set the pre and post targets from argn
+ IF(NOT "${_o_PRE_TARGETS}" STREQUAL "")
+ ADD_DEPENDENCIES(tag_pre ${_o_PRE_TARGETS})
+ ENDIF(NOT "${_o_PRE_TARGETS}" STREQUAL "")
+ IF(NOT "${_o_POST_TARGETS}" STREQUAL "")
+ ADD_DEPENDENCIES(tag_pre ${_o_POST_TARGETS})
+ ENDIF(NOT "${_o_POST_TARGETS}" STREQUAL "")
+ENDFUNCTION(MANAGE_SOURCE_VERSION_CONTROL_COMMON)
+
+FUNCTION(MANAGE_SOURCE_VERSION_CONTROL_GIT)
+ MANAGE_SOURCE_VERSION_CONTROL_COMMON(git ${ARGN})
+ SET(MANAGE_SOURCE_VERSION_CONTROL_TAG_FILE
+ ${CMAKE_FEDORA_TMP_DIR}/target-tag-${PRJ_VER}
+ CACHE PATH "Source Version Control Tag File" FORCE)
+
+ ADD_CUSTOM_TARGET(tag
+ DEPENDS ${MANAGE_SOURCE_VERSION_CONTROL_TAG_FILE}
+ COMMENT "tag: tag ${PRJ_VER} in Git"
+ VERBATIM
+ )
+
+ ADD_DEPENDENCIES(tag changelog_no_force)
+
+ ADD_CUSTOM_COMMAND(OUTPUT ${MANAGE_SOURCE_VERSION_CONTROL_TAG_FILE}
+ COMMAND make tag_pre
+ COMMAND git diff --exit-code
+ COMMAND cmake -D "cmd=make_tag_file" -D "ver=${PRJ_VER}"
+ -D "output_file=${MANAGE_SOURCE_VERSION_CONTROL_TAG_FILE}"
+ -P ${CMAKE_FEDORA_MODULE_DIR}/ManageGitScript.cmake
+ COMMAND make tag_post
+ COMMENT "Tagging the source as ver ${PRJ_VER}"
+ VERBATIM
+ )
+
+ ## Pre tags
+ ADD_CUSTOM_TARGET(commit_clean
+ COMMAND git diff --exit-code
+ COMMENT "Is git commit clean?"
+ VERBATIM
+ )
+ ADD_DEPENDENCIES(tag_pre commit_clean)
+
+ ## Post tags
+ ADD_CUSTOM_TARGET(tag_push
+ COMMAND git push
+ COMMAND git push --tags
+ DEPENDS "${MANAGE_SOURCE_VERSION_CONTROL_TAG_FILE}"
+ COMMENT "Push to git"
+ )
+
+ ADD_DEPENDENCIES(tag_post tag_push)
+ENDFUNCTION(MANAGE_SOURCE_VERSION_CONTROL_GIT)
+
+FUNCTION(MANAGE_SOURCE_VERSION_CONTROL_HG)
+ MANAGE_SOURCE_VERSION_CONTROL_COMMON(Hg ${ARGN})
+
+ ADD_CUSTOM_TARGET(tag
+ COMMAND eval "hg sum | grep -qs -e '^commit: (clean)'"
+ COMMAND make tag_pre
+ COMMAND hg tag -m "${CHANGE_SUMMARY}" "${PRJ_VER}"
+ COMMAND make tag_post
+ COMMENT "tag: Hg tagging ${PRJ_VER} "
+ VERBATIM
+ )
+
+ ADD_DEPENDENCIES(tag changelog_no_force)
+
+ ## Post tags
+ ADD_CUSTOM_TARGET(tag_push
+ COMMAND hg push
+ COMMENT "Push to hg"
+ )
+ ADD_DEPENDENCIES(tag_post tag_push)
+ENDFUNCTION(MANAGE_SOURCE_VERSION_CONTROL_HG)
+
+FUNCTION(MANAGE_SOURCE_VERSION_CONTROL_SVN)
+ MANAGE_SOURCE_VERSION_CONTROL_COMMON(SVN ${ARGN})
+ SET(_valid_options "PRE_TARGETS" "POST_TARGETS" "SVN_URL")
+ VARIABLE_PARSE_ARGN(_o _valid_options ${ARGN})
+
+ SET(MANAGE_SOURCE_VERSION_CONTROL_TAG_FILE
+ ${CMAKE_FEDORA_TMP_DIR}/SVN/${PRJ_VER}
+ CACHE PATH "Source Version Control Tag File" FORCE)
+
+ ADD_CUSTOM_TARGET(tag
+ DEPENDS "${MANAGE_SOURCE_VERSION_CONTROL_TAG_FILE}"
+ COMMENT "tag: SVN tagging ${PRJ_VER} "
+ )
+
+ ADD_DEPENDENCIES(tag changelog_no_force)
+
+ ## Only tag when it is not yet tagged
+ ADD_CUSTOM_COMMAND(OUTPUT ${MANAGE_SOURCE_VERSION_CONTROL_TAG_FILE}
+ COMMAND if svn ls ${_o_SVN_URL}/${PRJ_VER} --depth empty &>/dev/null; then return 1;else return 0; fi
+ COMMAND make tag_pre
+ COMMAND svn copy "${SOURCE_BASE_URL}/trunk" "${SOURCE_BASE_URL}/tags/${PRJ_VER}" -m "${CHANGE_SUMMARY}"
+ COMMAND cmake -E touch ${MANAGE_SOURCE_VERSION_CONTROL_TAG_FILE}
+ COMMAND make tag_post
+ COMMENT "Tagging the source as ver ${PRJ_VER}"
+ VERBATIM
+ )
+
+ENDFUNCTION(MANAGE_SOURCE_VERSION_CONTROL_SVN)
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageString.cmake ibus-chewing-1.6.1_new/Modules/ManageString.cmake
--- ibus-chewing-1.6.1/Modules/ManageString.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageString.cmake 2015-12-17 17:43:31.000000000 +0800
@@ -0,0 +1,450 @@
+# - Manage String by utility functions
+#
+# Defines the following functions:
+# STRING_APPEND(<var> <str> [<separator>])
+# - Append a string to a variable.
+# * Parameters:
+# + var: A variable that stores the result.
+# + str: A string to be appended to end of line.
+# + separator: Separator to separate between strings.
+#
+# STRING_ESCAPE_BACKSLASH(<var> <str>)
+# - Escape the backslash (\).
+# * Parameters:
+# + var: A variable that stores the result.
+# + str: A string.
+#
+# STRING_ESCAPE_DOLLAR(<var> <str>)
+# - Escape the dollar sign ($).
+# * Parameters:
+# + var: A variable that stores the result.
+# + str: A string.
+#
+# STRING_ESCAPE_QUOTE(<var> <str>)
+# - Escape the double quote (").
+# * Parameters:
+# + var: A variable that stores the result.
+# + str: A string.
+#
+# STRING_ESCAPE_SEMICOLON(<var> <str>)
+# - Escape the semicolon (;).
+# * Parameters:
+# + var: A variable that stores the result.
+# + str: A string.
+#
+# STRING_PADDING(<var> <str> <length> [<padStr>])
+# - Padding the string to specified length.
+# * Parameters:
+# + var: A variable that stores the result.
+# + str: A string.
+# + length: Required length.
+# + padStr: String that used in padding. Default: " "
+#
+# STRING_PREPEND(<var> <str> [<separator>])
+# - Prepend a string to a variable.
+# * Parameters:
+# + var: A variable that stores the result.
+# + str: A string to be appended to end of line.
+# + separator: Separator to separate between strings.
+#
+# STRING_SPLIT(<var> <delimiter> <str>
+# [NOESCAPE_SEMICOLON] [ESCAPE_VARIABLE] [ALLOW_EMPTY]
+# )
+# - Split a string into a list using a delimiter,
+# which can be in 1 or more characters long.
+# * Parameters:
+# + var: A variable that stores the result.
+# + delimiter: To separate a string.
+# + str: A string.
+# + NOESCAPE_SEMICOLON: (Optional) Do not escape semicolons.
+# + ESCAPE_VARIABLE: (Optional) Escape variables.
+# + ALLOW_EMPTY: (Optional) Allow empty element exist in the array.
+#
+# STRING_TRIM(<var> <str> [NOUNQUOTE])
+# - Trim a string by removing the leading and trailing spaces,
+# just like STRING(STRIP ...) in CMake 2.6 and later.
+# This macro was developed as CMake 2.4 does not support
+# STRING(STRIP ..)
+# This macro also remove quote and double quote marks around
+# the string, unless NOUNQUOTE is defined.
+# * Parameters:
+# + var: A variable that stores the result.
+# + str: A string.
+# + NOUNQUOTE: (Optional) do not remove the double quote mark
+# around the string.
+#
+# STRING_UNQUOTE(<var> <str>)
+# - Remove double quote marks and quote marks around a string.
+# If the string is not quoted, then content of str is copied to var
+# * Parameters:
+# + var: A variable that stores the result.
+# + str: A string.
+#
+# Defines the following macros:
+# STRING_JOIN(<var> <delimiter> <strList> [<str> ...])
+# - Concatenate strings, with delimiter inserted between strings.
+# * Parameters:
+# + var: A variable that stores the result.
+# + strList: A list of strings.
+# + str: (Optional) more string to be join.
+#
+
+IF(DEFINED _MANAGE_STRING_CMAKE_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_STRING_CMAKE_)
+SET(_MANAGE_STRING_CMAKE_ "DEFINED")
+
+FUNCTION(STRING_APPEND var str)
+ IF(${ARGC} GREATER 2)
+ SET(_sep "${ARGV2}")
+ ELSE(${ARGC} GREATER 2)
+ SET(_sep "")
+ ENDIF(${ARGC} GREATER 2)
+ IF (POLICY CMP0054)
+ CMAKE_POLICY(PUSH)
+ CMAKE_POLICY(SET CMP0054 "NEW")
+ ENDIF()
+ IF("${${var}}" STREQUAL "")
+ SET(${var} "${str}" PARENT_SCOPE)
+ ELSE("${${var}}" STREQUAL "")
+ SET(${var} "${${var}}${_sep}${str}" PARENT_SCOPE)
+ ENDIF("${${var}}" STREQUAL "")
+ IF (POLICY CMP0054)
+ CMAKE_POLICY(POP)
+ ENDIF()
+ENDFUNCTION(STRING_APPEND var str)
+
+FUNCTION(STRING_ESCAPE_BACKSLASH var str)
+ IF(str STREQUAL "")
+ SET(${var} "" PARENT_SCOPE)
+ ELSE(str STREQUAL "")
+ STRING(REPLACE "\\" "\\\\" output "${str}")
+ SET(${var} "${output}" PARENT_SCOPE)
+ ENDIF(str STREQUAL "")
+ENDFUNCTION(STRING_ESCAPE_BACKSLASH)
+
+FUNCTION(STRING_ESCAPE_DOLLAR var str)
+ IF(str STREQUAL "")
+ SET(${var} "" PARENT_SCOPE)
+ ELSE(str STREQUAL "")
+ STRING(REPLACE "\$" "\\\$" output "${str}")
+ SET(${var} "${output}" PARENT_SCOPE)
+ ENDIF(str STREQUAL "")
+ENDFUNCTION(STRING_ESCAPE_DOLLAR)
+
+FUNCTION(STRING_ESCAPE_QUOTE var str)
+ IF(str STREQUAL "")
+ SET(${var} "" PARENT_SCOPE)
+ ELSE(str STREQUAL "")
+ STRING(REPLACE "\"" "\\\"" output "${str}")
+ SET(${var} "${output}" PARENT_SCOPE)
+ ENDIF(str STREQUAL "")
+ENDFUNCTION(STRING_ESCAPE_QUOTE)
+
+FUNCTION(STRING_ESCAPE_SEMICOLON var str)
+ IF(str STREQUAL "")
+ SET(${var} "" PARENT_SCOPE)
+ ELSE(str STREQUAL "")
+ STRING(REPLACE ";" "\\;" output "${str}")
+ SET(${var} "${output}" PARENT_SCOPE)
+ ENDIF(str STREQUAL "")
+ENDFUNCTION(STRING_ESCAPE_SEMICOLON var str)
+
+FUNCTION(STRING_PADDING var str length)
+ SET(_ret "${str}")
+ IF(${ARGN})
+ SET(_padStr ${ARGN})
+ ELSE(${ARGN})
+ SET(_padStr " ")
+ ENDIF(${ARGN})
+ STRING(LENGTH "${str}" _strLen)
+ STRING(LENGTH "${_padStr}" _padLen)
+ WHILE( _strLen LESS length)
+ SET(_ret "${_ret}${_padStr}")
+ MATH(EXPR _strLen ${_strLen}+${_padLen})
+ ENDWHILE( _strLen LESS length)
+ SET(${var} "${_ret}" PARENT_SCOPE)
+ENDFUNCTION(STRING_PADDING var str length)
+
+FUNCTION(STRING_PREPEND var str)
+ IF(${ARGC} GREATER 2)
+ SET(_sep "${ARGV2}")
+ ELSE(${ARGC} GREATER 2)
+ SET(_sep "")
+ ENDIF(${ARGC} GREATER 2)
+ IF("${${var}}" STREQUAL "")
+ SET(${var} "${str}" PARENT_SCOPE)
+ ELSE("${${var}}" STREQUAL "")
+ SET(${var} "${str}${_sep}${${var}}" PARENT_SCOPE)
+ ENDIF("${${var}}" STREQUAL "")
+ENDFUNCTION(STRING_PREPEND var str)
+
+# Return (index of lefttmost non match character)
+# Return _strLen if all characters matches regex
+FUNCTION(STRING_LEFTMOST_NOTMATCH_INDEX var str regex)
+ STRING(LENGTH "${str}" _strLen)
+ SET(_index 0)
+ SET(_ret ${_strLen})
+ WHILE(_index LESS _strLen)
+ STRING(SUBSTRING "${str}" ${_index} 1 _strCursor)
+ #MESSAGE("***STRING_UNQUOTE: _i=${_index} _strCursor=${_strCursor}")
+ IF(NOT "${_strCursor}" MATCHES "${regex}")
+ SET(_ret ${_index})
+ SET(_index ${_strLen})
+ ENDIF(NOT "${_strCursor}" MATCHES "${regex}")
+
+ MATH(EXPR _index ${_index}+1)
+ ENDWHILE(_index LESS _strLen)
+ SET(${var} ${_ret} PARENT_SCOPE)
+ENDFUNCTION(STRING_LEFTMOST_NOTMATCH_INDEX var str)
+
+# Return (index of rightmost non match character) +1
+# Return 0 if all characters matches regex
+#
+FUNCTION(STRING_RIGHTMOST_NOTMATCH_INDEX var str regex)
+ STRING(LENGTH "${str}" _strLen)
+ MATH(EXPR _index ${_strLen})
+ SET(_ret 0)
+ WHILE(_index GREATER 0)
+ MATH(EXPR _index_1 ${_index}-1)
+ STRING(SUBSTRING "${str}" ${_index_1} 1 _strCursor)
+ #MESSAGE("***STRING_UNQUOTE: _i=${_index} _strCursor=${_strCursor}")
+
+ IF(NOT "${_strCursor}" MATCHES "${regex}")
+ SET(_ret ${_index})
+ SET(_index 0)
+ ENDIF(NOT "${_strCursor}" MATCHES "${regex}")
+ MATH(EXPR _index ${_index}-1)
+ ENDWHILE(_index GREATER 0)
+ SET(${var} ${_ret} PARENT_SCOPE)
+ENDFUNCTION(STRING_RIGHTMOST_NOTMATCH_INDEX var str)
+
+FUNCTION(STRING_TRIM var str)
+ #_STRING_ESCAPE(_ret "${str}" ${ARGN})
+ STRING_LEFTMOST_NOTMATCH_INDEX(_leftIndex "${str}" "[ \t\n\r]")
+ STRING_RIGHTMOST_NOTMATCH_INDEX(_rightIndex "${str}" "[ \t\n\r]")
+ # MESSAGE("_left=${_leftIndex} _rightIndex=${_rightIndex} str=|${str}|")
+ MATH(EXPR _subLen ${_rightIndex}-${_leftIndex})
+ SET(_NOUNQUOTE 0)
+ FOREACH( _arg ${ARGN})
+ IF(_arg STREQUAL "NOUNQUOTE")
+ SET(_NOUNQUOTE 1)
+ ENDIF(_arg STREQUAL "NOUNQUOTE")
+ ENDFOREACH( _arg ${ARGN})
+
+ IF(_subLen GREATER 0)
+ STRING(SUBSTRING "${str}" ${_leftIndex} ${_subLen} _ret)
+ # IF _subLen > 1
+ # IF UNQUOTE; then unquote
+ # Otherwise don't touch
+ IF (_subLen GREATER 1)
+ IF(NOT _NOUNQUOTE)
+ STRING_UNQUOTE(_ret "${_ret}")
+ ENDIF(NOT _NOUNQUOTE)
+ ENDIF (_subLen GREATER 1)
+ ELSE(_subLen GREATER 0)
+ SET(_ret "")
+ ENDIF(_subLen GREATER 0)
+ SET(${var} "${_ret}" PARENT_SCOPE)
+
+ # Unencoding
+ #_STRING_UNESCAPE(${var} "${_ret}" ${ARGN})
+ENDFUNCTION(STRING_TRIM var str)
+
+# Internal function
+# Nested Variable cannot be escaped here, as variable is already substituted
+# at the time it passes to this macro.
+FUNCTION(_STRING_ESCAPE var str)
+ # ';' and '\' are tricky, need to be encoded.
+ # '#' => '#H'
+ # '\' => '#B'
+ # ';' => '#S'
+ # '$' => '#D'
+ SET(_NOESCAPE_SEMICOLON "")
+ SET(_ESCAPE_VARIABLE "")
+
+ FOREACH(_arg ${ARGN})
+ IF(${_arg} STREQUAL "NOESCAPE_SEMICOLON")
+ SET(_NOESCAPE_SEMICOLON "NOESCAPE_SEMICOLON")
+ ELSEIF(${_arg} STREQUAL "ESCAPE_VARIABLE")
+ SET(_ESCAPE_VARIABLE "ESCAPE_VARIABLE")
+ ENDIF(${_arg} STREQUAL "NOESCAPE_SEMICOLON")
+ ENDFOREACH(_arg ${ARGN})
+
+ STRING(REGEX REPLACE "#" "#H" _ret "${str}")
+
+ STRING(REGEX REPLACE "\\\\" "#B" _ret "${_ret}")
+
+ IF(NOT _ESCAPE_VARIABLE STREQUAL "")
+ STRING(REGEX REPLACE "$" "#D" _ret "${_ret}")
+ ENDIF(NOT _ESCAPE_VARIABLE STREQUAL "")
+
+ IF(_NOESCAPE_SEMICOLON STREQUAL "")
+ STRING(REGEX REPLACE ";" "#S" _ret "${_ret}")
+ ENDIF(_NOESCAPE_SEMICOLON STREQUAL "")
+ #MESSAGE("_STRING_ESCAPE:_ret=${_ret}")
+ SET(${var} "${_ret}" PARENT_SCOPE)
+ENDFUNCTION(_STRING_ESCAPE var str)
+
+FUNCTION(_STRING_UNESCAPE var str)
+ # '#B' => '\'
+ # '#H' => '#'
+ # '#D' => '$'
+ # '#S' => ';'
+ SET(_ESCAPE_VARIABLE "")
+ SET(_NOESCAPE_SEMICOLON "")
+ SET(_ret "${str}")
+ FOREACH(_arg ${ARGN})
+ IF(${_arg} STREQUAL "NOESCAPE_SEMICOLON")
+ SET(_NOESCAPE_SEMICOLON "NOESCAPE_SEMICOLON")
+ ELSEIF(${_arg} STREQUAL "ESCAPE_VARIABLE")
+ SET(_ESCAPE_VARIABLE "ESCAPE_VARIABLE")
+ STRING(REGEX REPLACE "#D" "$" _ret "${_ret}")
+ ENDIF(${_arg} STREQUAL "NOESCAPE_SEMICOLON")
+ ENDFOREACH(_arg ${ARGN})
+ #MESSAGE("###_STRING_UNESCAPE: var=${var} _ret=${_ret} _NOESCAPE_SEMICOLON=${_NOESCAPE_SEMICOLON} ESCAPE_VARIABLE=${_ESCAPE_VARIABLE}")
+
+ STRING(REGEX REPLACE "#B" "\\\\" _ret "${_ret}")
+ IF("${_NOESCAPE_SEMICOLON}" STREQUAL "")
+ # ESCAPE_SEMICOLON
+ STRING(REGEX REPLACE "#S" "\\\\;" _ret "${_ret}")
+ ELSE("${_NOESCAPE_SEMICOLON}" STREQUAL "")
+ # Don't ESCAPE_SEMICOLON
+ STRING(REGEX REPLACE "#S" ";" _ret "${_ret}")
+ ENDIF("${_NOESCAPE_SEMICOLON}" STREQUAL "")
+
+ IF(NOT _ESCAPE_VARIABLE STREQUAL "")
+ # '#D' => '$'
+ STRING(REGEX REPLACE "#D" "$" _ret "${_ret}")
+ ENDIF(NOT _ESCAPE_VARIABLE STREQUAL "")
+ STRING(REGEX REPLACE "#H" "#" _ret "${_ret}")
+ SET(${var} "${_ret}" PARENT_SCOPE)
+ #MESSAGE("*** _STRING_UNESCAPE: ${var}=${${var}}")
+ENDFUNCTION(_STRING_UNESCAPE var str)
+
+FUNCTION(STRING_UNQUOTE var str)
+ SET(_ret "${str}")
+ STRING(LENGTH "${str}" _strLen)
+
+ # IF _strLen > 1
+ # IF lCh and rCh are both "\""
+ # Remove _lCh and _rCh
+ # ELSEIF lCh and rCh are both "'"
+ # Remove _lCh and _rCh
+ # Otherwise don't touch
+ IF(_strLen GREATER 1)
+ STRING(SUBSTRING "${str}" 0 1 _lCh)
+ MATH(EXPR _strLen_1 ${_strLen}-1)
+ MATH(EXPR _strLen_2 ${_strLen_1}-1)
+ STRING(SUBSTRING "${str}" ${_strLen_1} 1 _rCh)
+ #MESSAGE("_lCh=${_lCh} _rCh=${_rCh} _ret=|${_ret}|")
+ IF("${_lCh}" STREQUAL "\"" AND "${_rCh}" STREQUAL "\"")
+ STRING(SUBSTRING "${_ret}" 1 ${_strLen_2} _ret)
+ ELSEIF("${_lCh}" STREQUAL "'" AND "${_rCh}" STREQUAL "'")
+ STRING(SUBSTRING "${_ret}" 1 ${_strLen_2} _ret)
+ ENDIF("${_lCh}" STREQUAL "\"" AND "${_rCh}" STREQUAL "\"")
+ ENDIF (_strLen GREATER 1)
+ SET(${var} "${_ret}" PARENT_SCOPE)
+ENDFUNCTION(STRING_UNQUOTE var str)
+
+MACRO(STRING_JOIN var delimiter)
+ SET(_ret "")
+ FOREACH(_str ${ARGN})
+ STRING_APPEND(_ret "${_str}" "${delimiter}")
+ ENDFOREACH(_str ${ARGN})
+ SET(${var} "${_ret}")
+ENDMACRO(STRING_JOIN var delimiter)
+
+FUNCTION(STRING_FIND var str search_str)
+ STRING(LENGTH "${str}" _str_len)
+ STRING(LENGTH "${search_str}" _search_len)
+ MATH(EXPR _str_end ${_str_len}-${_search_len}+1)
+
+ SET(_index 0)
+ SET(_str_remain "")
+ SET(_result -1)
+ WHILE(_index LESS _str_end)
+ STRING(SUBSTRING "${str}" ${_index} ${_search_len} _str_window)
+ IF(_str_window STREQUAL search_str)
+ SET(_result ${_index})
+ BREAK()
+ ELSE(_str_window STREQUAL search_str)
+ MATH(EXPR _index ${_index}+1)
+ ENDIF(_str_window STREQUAL search_str)
+ ENDWHILE(_index LESS _str_end)
+ SET(${var} ${_result} PARENT_SCOPE)
+ENDFUNCTION(STRING_FIND var str search)
+
+FUNCTION(STRING_SPLIT_2 var str_remain has_delimiter delimiter str)
+ STRING_FIND(_index "${str}" "${delimiter}")
+ IF(_index EQUAL -1)
+ SET(${has_delimiter} "0" PARENT_SCOPE)
+ SET(${var} "${str}" PARENT_SCOPE)
+ SET(${str_remain} "" PARENT_SCOPE)
+ ELSE(_index EQUAL -1)
+ SET(${has_delimiter} "1" PARENT_SCOPE)
+ STRING(SUBSTRING "${str}" 0 ${_index} _var)
+ SET(${var} "${_var}" PARENT_SCOPE)
+
+ STRING(LENGTH "${str}" _str_len)
+ STRING(LENGTH "${delimiter}" _delimiter_len)
+ MATH(EXPR _str_2_start ${_index}+${_delimiter_len})
+ MATH(EXPR _str_2_len ${_str_len}-${_index}-${_delimiter_len})
+ STRING(SUBSTRING "${str}" ${_str_2_start} ${_str_2_len} _str_remain)
+ SET(${str_remain} "${_str_remain}" PARENT_SCOPE)
+ ENDIF(_index EQUAL -1)
+ENDFUNCTION(STRING_SPLIT_2 var str_remain has_delimiter delimiter str)
+
+FUNCTION(STRING_SPLIT var delimiter str)
+ #MESSAGE("***STRING_SPLIT: var=${var} str=${str}")
+ SET(_max_tokens "")
+ SET(_NOESCAPE_SEMICOLON "")
+ SET(_ESCAPE_VARIABLE "")
+ SET(_ALLOW_EMPTY "")
+ FOREACH(_arg ${ARGN})
+ IF(${_arg} STREQUAL "NOESCAPE_SEMICOLON")
+ SET(_NOESCAPE_SEMICOLON "NOESCAPE_SEMICOLON")
+ ELSEIF(${_arg} STREQUAL "ESCAPE_VARIABLE")
+ SET(_ESCAPE_VARIABLE "ESCAPE_VARIABLE")
+ ELSEIF(${_arg} STREQUAL "ALLOW_EMPTY")
+ SET(_ALLOW_EMPTY "ALLOW_EMPTY")
+ ELSE(${_arg} STREQUAL "NOESCAPE_SEMICOLON")
+ SET(_max_tokens ${_arg})
+ ENDIF(${_arg} STREQUAL "NOESCAPE_SEMICOLON")
+ ENDFOREACH(_arg ${ARGN})
+
+ IF(NOT _max_tokens)
+ SET(_max_tokens -1)
+ ENDIF(NOT _max_tokens)
+
+ _STRING_ESCAPE(_str "${str}" ${_NOESCAPE_SEMICOLON} ${_ESCAPE_VARIABLE})
+ _STRING_ESCAPE(_delimiter "${delimiter}" ${_NOESCAPE_SEMICOLON} ${_ESCAPE_VARIABLE})
+ SET(_str_list "")
+ SET(_token_count 1)
+
+ WHILE(NOT _token_count EQUAL _max_tokens)
+ STRING_SPLIT_2(_token _str _has_delimiter "${_delimiter}" "${_str}")
+ #MESSAGE("_token_count=${_token_count} _max_tokens=${_max_tokens} _token=|${_token}| _str=${_str}")
+ MATH(EXPR _token_count ${_token_count}+1)
+ # Use length check to avoid the reserved word like "type"
+ STRING(LENGTH "${_token}" _token_len)
+
+ IF(_token_len GREATER 0 OR _ALLOW_EMPTY)
+ LIST(APPEND _str_list "${_token}")
+ ENDIF(_token_len GREATER 0 OR _ALLOW_EMPTY)
+ IF(_has_delimiter EQUAL 0)
+ ## No more tokens
+ BREAK()
+ ENDIF(_has_delimiter EQUAL 0)
+ ENDWHILE(NOT _token_count EQUAL _max_tokens)
+
+ IF(_has_delimiter EQUAL 1)
+ LIST(APPEND _str_list "${_str}")
+ ENDIF(_has_delimiter EQUAL 1)
+
+ # Unencoding
+ _STRING_UNESCAPE(_var "${_str_list}" ${_NOESCAPE_SEMICOLON} ${_ESCAPE_VARIABLE})
+ #MESSAGE("***STRING_SPLIT: tokens=${${var}}")
+ SET(${var} "${_var}" PARENT_SCOPE)
+ENDFUNCTION(STRING_SPLIT var delimiter str)
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageTarget.cmake ibus-chewing-1.6.1_new/Modules/ManageTarget.cmake
--- ibus-chewing-1.6.1/Modules/ManageTarget.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageTarget.cmake 2014-10-28 13:05:31.000000000 +0800
@@ -0,0 +1,59 @@
+# - Manage targets and output files.
+#
+# Included Modules:
+# - ManageVariable
+#
+# Defines following functions:
+# ADD_CUSTOM_TARGET_COMMAND(<target> OUTPUT <file1> ...
+# [ALL] [NO_FORCE] COMMAND <command1> ...
+# [<addCustomTargetOpt> ...]
+# )
+# - Combine ADD_CUSTOM_TARGET and ADD_CUSTOM_COMMAND.
+# This command is handy if you want a target that always refresh
+# the output files without writing the same build recipes
+# in separate ADD_CUSTOM_TARGET and ADD_CUSTOM_COMMAND.
+#
+# If you also want a target that run only if output files
+# do not exist or outdated. Specify "NO_FORCE".
+# The target for that will be "<target>_no_force".
+# * Parameters:
+# + target: target for this command
+# + OUTPUT file1 ... : Files to be outputted by this command
+# + ALL: (Optional) The target is built with target 'all'
+# + NO_FORCE: (Optional) Produce a target that run only if
+# output files do not exist or outdated.
+# + COMMAND command ... : Command to be run.
+# + addCustomTargetOpt ...: ADD_CUSTOM_TARGET.options.
+# * Targets:
+# + <target>: Target to be invoke.
+#
+
+IF(DEFINED _MANAGE_TARGET_CMAKE_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_TARGET_CMAKE_)
+SET(_MANAGE_TARGET_CMAKE_ "DEFINED")
+INCLUDE(ManageVariable)
+FUNCTION(ADD_CUSTOM_TARGET_COMMAND target)
+ SET(_validOptions "OUTPUT" "ALL" "NO_FORCE" "COMMAND")
+ VARIABLE_PARSE_ARGN(_opt _validOptions ${ARGN})
+ IF(DEFINED _opt_ALL)
+ SET(_all "ALL")
+ ELSE(DEFINED _opt_ALL)
+ SET(_all "")
+ ENDIF(DEFINED _opt_ALL)
+
+ ADD_CUSTOM_TARGET(${target} ${_all}
+ COMMAND ${_opt_COMMAND}
+ )
+
+ ADD_CUSTOM_COMMAND(OUTPUT ${_opt_OUTPUT}
+ COMMAND ${_opt_COMMAND}
+ )
+
+ IF(DEFINED _opt_NO_FORCE)
+ ADD_CUSTOM_TARGET(${target}_no_force
+ DEPENDS ${_opt_OUTPUT}
+ )
+ ENDIF(DEFINED _opt_NO_FORCE)
+ENDFUNCTION(ADD_CUSTOM_TARGET_COMMAND)
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageTranslation.cmake ibus-chewing-1.6.1_new/Modules/ManageTranslation.cmake
--- ibus-chewing-1.6.1/Modules/ManageTranslation.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageTranslation.cmake 2016-02-25 22:53:41.000000000 +0800
@@ -0,0 +1,669 @@
+# - Manage Translation
+# This module supports software translation by:
+# Creates gettext related targets.
+# Communicate to Zanata servers.
+#
+# By calling MANAGE_GETTEXT(), following variables are available in cache:
+# - MANAGE_TRANSLATION_LOCALES: Locales that would be processed.
+#
+# Included Modules:
+# - ManageArchive
+# - ManageDependency
+# - ManageFile
+# - ManageMessage
+# - ManageString
+# - ManageVariable
+# - ManageZanataSuggest
+#
+# Defines following targets:
+# + translations: Virtual target that make the translation files.
+# Once MANAGE_GETTEXT is used, this target invokes targets that
+# build translation.
+#
+# Defines following variables:
+# + XGETTEXT_OPTIONS_C: Default xgettext options for C programs.
+# Defines or read from following variables:
+# + MANAGE_TRANSLATION_MSGFMT_OPTIONS: msgfmt options
+# Default: --check --check-compatibility --strict
+# + MANAGE_TRANSLATION_MSGMERGE_OPTIONS: msgmerge options
+# Default: --update --indent --backup=none
+# + MANAGE_TRANSLATION_XGETEXT_OPTIONS: xgettext options
+# Default: ${XGETTEXT_OPTIONS_C}
+#
+# Defines following functions:
+# MANAGE_POT_FILE(<potFile>
+# [SRCS <src> ...]
+# [PO_DIR <dir>]
+# [MO_DIR <dir>|MO_LOCALE_DIR <dir>| NO_MO]
+# [NO_MO]
+# [LOCALES <locale> ... | SYSTEM_LOCALES]
+# [XGETTEXT_OPTIONS <opt> ...]
+# [MSGMERGE_OPTIONS <msgmergeOpt>]
+# [MSGFMT_OPTIONS <msgfmtOpt>]
+# [CLEAN]
+# [COMMAND <cmd> ...]
+# [DEPENDS <file> ...]
+# )
+# - Add a new pot file and source files that create the pot file.
+# It is mandatory if for multiple pot files.
+# By default, cmake-fedora will set the directory property
+# PROPERTIES CLEAN_NO_CUSTOM as "1" to prevent po files get cleaned
+# by "make clean". For this behavior to be effective, invoke this function
+# in the directory that contains generated PO file.
+# * Parameters:
+# + <potFile>: .pot file with path.
+# + SRCS <src> ... : Source files for xgettext to work on.
+# + DOMAIN_NAME <domainName>: gettext domain name.
+# Default: .pot filename without extension.
+# + PO_DIR <dir>: Directory of .po files.
+# This option is mandatory if .pot and associated .po files
+# are not in the same directory.
+# Default: Same directory of <potFile>.
+# + MO_DIR dir: Directory to create .gmo files. The .gmo files
+# are created as: <dir>/<locale>.gmo
+# This option collide with NO_MO and MO_LOCALE_DIR.
+# Default: Same with PO_DIR
+# + MO_LOCALE_DIR dir: Directory to create .mo files. The .mo files
+# are created as: <dir>/locale/<locale>/LC_MESSAGES/<domainName>.mo
+# This option collide with NO_MO and MO_DIR.
+# + NO_MO: Skip the mo generation, usually for document trnslation
+# that do not require MO.
+# This option collide with MO_DIR and MO_LOCALE_DIR.
+# + LOCALES locale ... : (Optional) Locale list to be generated.
+# + SYSTEM_LOCALES: (Optional) System locales from /usr/share/locale.
+# + XGETTEXT_OPTIONS opt ... : xgettext options.
+# + MSGMERGE_OPTIONS msgmergeOpt: (Optional) msgmerge options.
+# Default: ${MANAGE_TRANSLATION_MSGMERGE_OPTIONS}, which is
+# + MSGFMT_OPTIONS msgfmtOpt: (Optional) msgfmt options.
+# Default: ${MANAGE_TRANSLATION_MSGFMT_OPTIONS}
+# + CLEAN: Clean the POT, PO, MO files when doing make clean
+# By default, cmake-fedora will set the directory property
+# PROPERTIES CLEAN_NO_CUSTOM as "1" to prevent po files get cleaned.
+# Specify "CLEAN" to override this behavior.
+# + COMMAND cmd ... : Non-xgettext command that create pot file.
+# + DEPENDS file ... : Files that pot file depends on.
+# SRCS files are already depended on, so no need to list here.
+# * Variables to cache:
+# + MANAGE_TRANSLATION_GETTEXT_POT_FILES: List of pot files.
+# + MANAGE_TRANSLATION_GETTEXT_PO_FILES: List of all po files.
+# + MANAGE_TRANSLATION_GETTEXT_MO_FILES: List of all mo filess.
+# + MANAGE_TRANSLATION_LOCALES: List of locales.
+#
+# MANAGE_GETTEXT([ALL]
+# [POT_FILE <potFile>]
+# [SRCS <src> ...]
+# [PO_DIR <dir>]
+# [MO_DIR <dir>]
+# [NO_MO]
+# [LOCALES <locale> ... | SYSTEM_LOCALES]
+# [XGETTEXT_OPTIONS <opt> ...]
+# [MSGMERGE_OPTIONS <msgmergeOpt>]
+# [MSGFMT_OPTIONS <msgfmtOpt>]
+# [CLEAN]
+# [DEPENDS <file> ...]
+# )
+# - Manage Gettext support.
+# If no POT files were added, it invokes MANAGE_POT_FILE and manage .pot, .po and .gmo files.
+# This command creates targets for making the translation files.
+# So naturally, this command should be invoke after the last MANAGE_POT_FILE command.
+# The parameters are similar to the ones at MANAGE_POT_FILE, except:
+# * Parameters:
+# + ALL: (Optional) make target "all" depends on gettext targets.
+# + POT_FILE potFile: (Optional) pot files with path.
+# Default: ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pot
+# Refer MANAGE_POT_FILE for rest of the parameters.
+# * Targets:
+# + pot_files: Generate pot files.
+# + update_po: Update po files according to pot files.
+# + gmo_files: Converts po files to mo files.
+# + translation: Complete all translation tasks.
+# * Variables to cache:
+# + MANAGE_TRANSLATION_GETTEXT_POT_FILES: List of pot files.
+# + MANAGE_TRANSLATION_GETTEXT_PO_FILES: List of all po files.
+# + MANAGE_TRANSLATION_GETTEXT_MO_FILES: Lis of all mo filess.
+# + MANAGE_TRANSLATION_LOCALES: List of locales.
+# * Variables to cache:
+# + MSGINIT_EXECUTABLE: the full path to the msginit tool.
+# + MSGMERGE_EXECUTABLE: the full path to the msgmerge tool.
+# + MSGFMT_EXECUTABLE: the full path to the msgfmt tool.
+# + XGETTEXT_EXECUTABLE: the full path to the xgettext.
+# + MANAGE_LOCALES: Locales to be processed.
+#
+
+IF(DEFINED _MANAGE_TRANSLATION_CMAKE_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_TRANSLATION_CMAKE_)
+SET(_MANAGE_TRANSLATION_CMAKE_ "DEFINED")
+INCLUDE(ManageMessage)
+INCLUDE(ManageFile)
+INCLUDE(ManageString)
+INCLUDE(ManageVariable)
+INCLUDE(ManageZanataSuggest)
+
+#######################################
+# GETTEXT support
+#
+
+SET(XGETTEXT_OPTIONS_COMMON --from-code=UTF-8 --indent
+ --sort-by-file
+ )
+
+SET(XGETTEXT_OPTIONS_C ${XGETTEXT_OPTIONS_COMMON}
+ --language=C
+ --keyword=_ --keyword=N_ --keyword=C_:1c,2 --keyword=NC_:1c,2
+ --keyword=gettext --keyword=dgettext:2
+ --keyword=dcgettext:2 --keyword=ngettext:1,2
+ --keyword=dngettext:2,3 --keyword=dcngettext:2,3
+ --keyword=gettext_noop --keyword=pgettext:1c,2
+ --keyword=dpgettext:2c,3 --keyword=dcpgettext:2c,3
+ --keyword=npgettext:1c,2,3 --keyword=dnpgettext:2c,3,4
+ --keyword=dcnpgettext:2c,3,4.
+ )
+
+SET(MANAGE_TRANSLATION_MSGFMT_OPTIONS
+ "--check" CACHE STRING "msgfmt options"
+ )
+SET(MANAGE_TRANSLATION_MSGMERGE_OPTIONS
+ "--indent" "--update" "--sort-by-file" "--backup=none"
+ CACHE STRING "msgmerge options"
+ )
+SET(MANAGE_TRANSLATION_XGETTEXT_OPTIONS
+ ${XGETTEXT_OPTIONS_C}
+ CACHE STRING "xgettext options"
+ )
+
+FUNCTION(MANAGE_TRANSLATION_GETTEXT_POT_FILES_SET value)
+ SET(MANAGE_TRANSLATION_GETTEXT_POT_FILES "${value}" CACHE INTERNAL "POT files")
+ENDFUNCTION()
+
+FUNCTION(MANAGE_TRANSLATION_GETTEXT_POT_FILES_ADD)
+ LIST(APPEND MANAGE_TRANSLATION_GETTEXT_POT_FILES ${ARGN})
+ MANAGE_TRANSLATION_GETTEXT_POT_FILES_SET("${MANAGE_TRANSLATION_GETTEXT_POT_FILES}")
+ENDFUNCTION()
+
+FUNCTION(MANAGE_TRANSLATION_GETTEXT_PO_FILES_SET value)
+ SET(MANAGE_TRANSLATION_GETTEXT_PO_FILES "${value}" CACHE INTERNAL "PO files")
+ENDFUNCTION()
+
+FUNCTION(MANAGE_TRANSLATION_GETTEXT_PO_FILES_ADD)
+ LIST(APPEND MANAGE_TRANSLATION_GETTEXT_PO_FILES ${ARGN})
+ MANAGE_TRANSLATION_GETTEXT_PO_FILES_SET("${MANAGE_TRANSLATION_GETTEXT_PO_FILES}")
+ENDFUNCTION()
+
+FUNCTION(MANAGE_TRANSLATION_GETTEXT_MO_FILES_SET value)
+ SET(MANAGE_TRANSLATION_GETTEXT_MO_FILES "${value}" CACHE INTERNAL "MO files")
+ENDFUNCTION()
+
+FUNCTION(MANAGE_TRANSLATION_GETTEXT_MO_FILES_ADD)
+ LIST(APPEND MANAGE_TRANSLATION_GETTEXT_MO_FILES ${ARGN})
+ MANAGE_TRANSLATION_GETTEXT_MO_FILES_SET("${MANAGE_TRANSLATION_GETTEXT_MO_FILES}")
+ENDFUNCTION()
+
+FUNCTION(MANAGE_TRANSLATION_LOCALES_SET value)
+ SET(MANAGE_TRANSLATION_LOCALES "${value}" CACHE INTERNAL "Translation Locales")
+ENDFUNCTION()
+
+FUNCTION(MANAGE_GETTEXT_INIT)
+ IF(DEFINED MANAGE_GETTEXT_SUPPORT)
+ RETURN()
+ ENDIF()
+ INCLUDE(ManageArchive)
+ INCLUDE(ManageDependency)
+ MANAGE_DEPENDENCY(BUILD_REQUIRES GETTEXT REQUIRED)
+ MANAGE_DEPENDENCY(BUILD_REQUIRES FINDUTILS REQUIRED)
+ MANAGE_DEPENDENCY(REQUIRES GETTEXT REQUIRED)
+
+ FOREACH(_name "xgettext" "msgmerge" "msgfmt" "msginit")
+ STRING(TOUPPER "${_name}" _cmd)
+ FIND_PROGRAM_ERROR_HANDLING(${_cmd}_EXECUTABLE
+ ERROR_MSG " gettext support is disabled."
+ ERROR_VAR _gettext_dependency_missing
+ VERBOSE_LEVEL ${M_OFF}
+ "${_name}"
+ )
+ M_MSG(${M_INFO1} "${_cmd}_EXECUTABLE=${${_cmd}_EXECUTABLE}")
+ ENDFOREACH(_name "xgettext" "msgmerge" "msgfmt")
+
+ MANAGE_TRANSLATION_GETTEXT_POT_FILES_SET("")
+ IF(gettext_dependency_missing)
+ SET(MANAGE_GETTEXT_SUPPORT "0" CACHE INTERNAL "Gettext support")
+ ELSE()
+ SET(MANAGE_GETTEXT_SUPPORT "1" CACHE INTERNAL "Gettext support")
+ MANAGE_TRANSLATION_GETTEXT_PO_FILES_SET("")
+ MANAGE_TRANSLATION_GETTEXT_MO_FILES_SET("")
+ MANAGE_TRANSLATION_LOCALES_SET("")
+ ENDIF()
+ENDFUNCTION(MANAGE_GETTEXT_INIT)
+
+SET(MANAGE_POT_FILE_VALID_OPTIONS "SRCS" "DOMAIN_NAME" "PO_DIR" "MO_DIR"
+ "MO_LOCALE_DIR" "NO_MO" "LOCALES" "SYSTEM_LOCALES" "XGETTEXT_OPTIONS"
+ "MSGMERGE_OPTIONS" "MSGFMT_OPTIONS" "CLEAN" "COMMAND" "DEPENDS"
+ )
+## Internal
+FUNCTION(MANAGE_POT_FILE_SET_VARS potFile)
+ VARIABLE_PARSE_ARGN(_o MANAGE_POT_FILE_VALID_OPTIONS ${ARGN})
+ SET(cmdList "")
+ IF("${_o_COMMAND}" STREQUAL "")
+ LIST(APPEND cmdList ${XGETTEXT_EXECUTABLE})
+ IF(NOT _o_XGETTEXT_OPTIONS)
+ SET(_o_XGETTEXT_OPTIONS
+ "${MANAGE_TRANSLATION_XGETTEXT_OPTIONS}"
+ )
+ ENDIF()
+ LIST(APPEND cmdList ${_o_XGETTEXT_OPTIONS})
+ IF("${_o_SRCS}" STREQUAL "")
+ M_MSG(${M_WARN}
+ "MANAGE_POT_FILE: xgettext: No SRCS for ${potFile}"
+ )
+ ENDIF()
+ LIST(APPEND cmdList -o ${potFile}
+ "--package-name=${PROJECT_NAME}"
+ "--package-version=${PRJ_VER}"
+ "--msgid-bugs-address=${MAINTAINER}"
+ ${_o_SRCS}
+ )
+ ELSE()
+ SET(cmdList "${_o_COMMAND}")
+ ENDIF()
+ SET(cmdList "${cmdList}" PARENT_SCOPE)
+ SET(srcs "${_o_SRCS}" PARENT_SCOPE)
+ SET(depends "${_o_DEPENDS}" PARENT_SCOPE)
+
+ GET_FILENAME_COMPONENT(_potDir "${potFile}" PATH)
+ IF("${_o_PO_DIR}" STREQUAL "")
+ SET(_o_PO_DIR "${_potDir}")
+ ENDIF()
+ SET(poDir "${_o_PO_DIR}" PARENT_SCOPE)
+
+ IF("${_o_DOMAIN_NAME}" STREQUAL "")
+ GET_FILENAME_COMPONENT(_domainName "${potFile}" NAME_WE)
+ SET(domainName "${_domainName}" PARENT_SCOPE)
+ ELSE()
+ SET(domainName "${_o_DOMAIN_NAME}" PARENT_SCOPE)
+ ENDIF()
+
+ IF("${_o_MSGMERGE_OPTIONS}" STREQUAL "")
+ SET(_o_MSGMERGE_OPTIONS "${MANAGE_TRANSLATION_MSGMERGE_OPTIONS}")
+ ENDIF()
+ SET(msgmergeOpts "${_o_MSGMERGE_OPTIONS}" PARENT_SCOPE)
+
+ IF("${_o_MSGFMT_OPTIONS}" STREQUAL "")
+ SET(_o_MSGFMT_OPTIONS "${MANAGE_TRANSLATION_MSGFMT_OPTIONS}")
+ ENDIF()
+ SET(msgfmtOpts "${_o_MSGFMT_OPTIONS}" PARENT_SCOPE)
+
+ IF(DEFINED _o_NO_MO)
+ SET(moMode "NO_MO")
+ ENDIF()
+
+ IF(DEFINED _o_MO_LOCALE_DIR)
+ IF(moMode)
+ M_MSG(${M_ERROR} "MO_LOCALE_DIR cannot be used with ${moMode}")
+ ENDIF()
+ SET(moLocaleDir "${_o_MO_LOCALE_DIR}" PARENT_SCOPE)
+ SET(moMode "MO_LOCALE_DIR")
+ ENDIF()
+
+ IF(DEFINED _o_MO_DIR)
+ IF(moMode)
+ M_MSG(${M_ERROR} "MO_DIR cannot be used with ${moMode}")
+ ENDIF()
+ SET(moDir "${_o_MO_DIR}" PARENT_SCOPE)
+ SET(moMode "MO_DIR")
+ ENDIF()
+
+ ## Default to MO_DIR if none are not specified,
+ IF(NOT moMode)
+ SET(moDir "${_o_PO_DIR}" PARENT_SCOPE)
+ SET(moMode "MO_DIR")
+ ENDIF()
+ SET(moMode "${moMode}" PARENT_SCOPE)
+
+ IF(NOT DEFINED _o_CLEAN)
+ SET_DIRECTORY_PROPERTIES(PROPERTIES CLEAN_NO_CUSTOM "1")
+ SET(allClean 0 PARENT_SCOPE)
+ ELSE()
+ SET(allCleanVar 1 PARENT_SCOPE)
+ ENDIF()
+ENDFUNCTION(MANAGE_POT_FILE_SET_VARS)
+
+FUNCTION(MANAGE_POT_FILE_OBTAIN_TARGET_NAME var potFile)
+ FILE(RELATIVE_PATH potFileRel ${CMAKE_SOURCE_DIR} ${potFile})
+ STRING(REPLACE "/" "_" target "${potFileRel}")
+ STRING_PREPEND(target "pot_file_")
+ SET(${var} "${target}" PARENT_SCOPE)
+ENDFUNCTION(MANAGE_POT_FILE_OBTAIN_TARGET_NAME)
+
+## This function skip target setup when target exists
+## Use MANAGE_POT_FILE if you want check and warning
+FUNCTION(MANAGE_POT_FILE_INTERNAL showWarning potFile)
+ IF(NOT DEFINED MANAGE_GETTEXT_SUPPORT)
+ MANAGE_GETTEXT_INIT()
+ ENDIF()
+ IF(MANAGE_GETTEXT_SUPPORT EQUAL 0)
+ RETURN()
+ ENDIF()
+
+ ## Whether pot file already exists in MANAGE_TRANSLATION_GETTEXT_POT_FILES
+ MANAGE_POT_FILE_OBTAIN_TARGET_NAME(targetName "${potFile}")
+
+ IF(TARGET ${targetName})
+ IF(showWarning)
+ M_MSG(${M_WARN} "MANAGE_POT_FILE: Target ${targetName} is already exists, skip")
+ ENDIF()
+ RETURN()
+ ENDIF()
+
+ MANAGE_POT_FILE_SET_VARS("${potFile}" ${ARGN})
+
+ ADD_CUSTOM_TARGET_COMMAND(${targetName}
+ OUTPUT ${potFile}
+ NO_FORCE
+ COMMAND ${cmdList}
+ DEPENDS ${srcs} ${depends}
+ COMMENT "${potFile}: ${cmdList}"
+ VERBATIM
+ )
+ MANAGE_TRANSLATION_GETTEXT_POT_FILES_ADD("${potFile}")
+ SOURCE_ARCHIVE_CONTENTS_ADD("${potFile}" ${srcs} ${depends})
+ SET(cleanList "${potFile}")
+
+ SET(_moInstallRoot "${DATA_DIR}/locale")
+ ## Not only POT, but also PO and MO as well
+ FOREACH(_l ${MANAGE_TRANSLATION_LOCALES})
+ ## PO file
+ SET(_poFile "${poDir}/${_l}.po")
+ ADD_CUSTOM_COMMAND(OUTPUT ${_poFile}
+ COMMAND ${CMAKE_BUILD_TOOL} ${targetName}_no_force
+ COMMAND ${CMAKE_COMMAND}
+ -D cmd=po_make
+ -D "pot=${potFile}"
+ -D "locales=${_l}"
+ -D "options=${msgmergeOpts}"
+ -D "po_dir=${poDir}"
+ -P ${CMAKE_FEDORA_MODULE_DIR}/ManageGettextScript.cmake
+ COMMENT "Create ${_poFile} from ${potFile}"
+ VERBATIM
+ )
+ MANAGE_TRANSLATION_GETTEXT_PO_FILES_ADD("${_poFile}")
+ SOURCE_ARCHIVE_CONTENTS_ADD("${_poFile}")
+
+ ## MO file
+ SET(_moInstallDir "${_moInstallRoot}/${_l}/LC_MESSAGES")
+ IF(NOT "${moDir}" STREQUAL "")
+ SET(_moFile "${moDir}/${_l}.gmo")
+ FILE(MAKE_DIRECTORY "${moDir}")
+ ELSEIF(moLocaleDir)
+ SET(_moFile "${moLocaleDir}/locale/${_l}/LC_MESSAGES/${domainName}.mo")
+ FILE(MAKE_DIRECTORY "${moLocaleDir}/locale/${_l}/LC_MESSAGES")
+ ENDIF()
+
+ IF(NOT "${moMode}" STREQUAL "NO_MO")
+ ADD_CUSTOM_COMMAND(OUTPUT ${_moFile}
+ COMMAND ${MSGFMT_EXECUTABLE}
+ -o "${_moFile}"
+ "${_poFile}"
+ DEPENDS ${_poFile}
+ )
+
+ MANAGE_TRANSLATION_GETTEXT_MO_FILES_ADD("${_moFile}")
+
+ INSTALL(FILES ${_moFile} DESTINATION "${_moInstallDir}"
+ RENAME "${domainName}.mo"
+ )
+ LIST(APPEND cleanList "${_moFile}")
+ ENDIF()
+
+ ENDFOREACH(_l)
+ IF(NOT allClean)
+ SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${cleanList}")
+ ENDIF()
+ENDFUNCTION(MANAGE_POT_FILE_INTERNAL)
+
+FUNCTION(MANAGE_POT_FILE potFile)
+ MANAGE_POT_FILE_INTERNAL(1 "${potFile}" ${ARGN})
+ENDFUNCTION(MANAGE_POT_FILE)
+
+SET(MANAGE_GETTEXT_LOCALES_VALID_OPTIONS "WORKING_DIRECTORY" "LOCALES" "SYSTEM_LOCALES" "DETECT_PO_DIR" "SRCS")
+FUNCTION(MANAGE_GETTEXT_LOCALES localeListVar)
+ VARIABLE_PARSE_ARGN(_o MANAGE_GETTEXT_LOCALES_VALID_OPTIONS ${ARGN})
+ SET(_detectedPoDir "NOTFOUND")
+ IF(NOT "${_o_LOCALES}" STREQUAL "")
+ ## Locale is defined
+ ELSEIF(DEFINED _o_SYSTEM_LOCALES)
+ EXECUTE_PROCESS(
+ COMMAND ls -1 /usr/share/locale/
+ COMMAND grep -e "^[a-z]*\\(_[A-Z]*\\)\\?\\(@.*\\)\\?$"
+ COMMAND sort -u
+ COMMAND xargs
+ COMMAND sed -e "s/ /;/g"
+ OUTPUT_VARIABLE _o_LOCALES
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ ELSE()
+ IF("${_o_WORKING_DIRECTORY}" STREQUAL "")
+ SET(_o_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
+ ENDIF()
+
+ ## LOCALES is not specified, detect now
+ EXECUTE_PROCESS(
+ COMMAND find . -name "*.po"
+ COMMAND sed -e "s|^\\./||"
+ COMMAND sort -u
+ COMMAND xargs
+ COMMAND sed -e "s/ /;/g"
+ WORKING_DIRECTORY "${_o_WORKING_DIRECTORY}"
+ OUTPUT_VARIABLE _poFileList
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ IF("${_poFileList}" STREQUAL "")
+ M_MSG(${M_ERROR} "MANAGE_GETTEXT_LOCALES: Failed to find any .po files. Please either provide .po files, or specify SYSTEM_LOCALES or LOCALES")
+ ENDIF()
+ MANAGE_FILE_COMMON_DIR(_detectedPoDir ${_poFileList})
+
+ ## Empty _detectedPoDir means the PO files are in current directory
+ IF("${_detectedPoDir}" STREQUAL "")
+ SET(_commonPath "")
+ ELSE()
+ GET_FILENAME_COMPONENT(_commonPath "${_o_WORKING_DIRECTORY}/${_detectedPoDir}" ABSOLUTE)
+ ENDIF()
+ FOREACH(_poFile ${_poFileList})
+ IF("${_commonPath}" STREQUAL "")
+ SET(_rF "${_poFile}")
+ ELSE()
+ GET_FILENAME_COMPONENT(_filePath "${_poFile}" ABSOLUTE)
+ FILE(RELATIVE_PATH _rF "${_commonPath}" "${_filePath}")
+ ENDIF()
+ LOCALE_IN_PATH(_l "${_rF}")
+ IF(NOT "${_l}" STREQUAL "")
+ LIST(APPEND _o_LOCALES "${_l}")
+ ENDIF()
+ ENDFOREACH()
+
+ IF("${_o_LOCALES}" STREQUAL "")
+ ## Failed to find any locale
+ M_MSG(${M_ERROR} "MANAGE_GETTEXT_LOCALES: Failed to detect locales. Please either provide .po files, or specify SYSTEM_LOCALES or LOCALES")
+ ENDIF()
+ LIST(REMOVE_DUPLICATES _o_LOCALES)
+ LIST(SORT _o_LOCALES)
+ ENDIF()
+ MANAGE_TRANSLATION_LOCALES_SET("${_o_LOCALES}")
+ SET(${localeListVar} "${_o_LOCALES}" PARENT_SCOPE)
+
+ ## Return detected po dir if requested
+ IF(NOT "${_o_DETECT_PO_DIR}" STREQUAL "")
+ SET(${_o_DETECT_PO_DIR} "${detectedPoDir}" PARENT_SCOPE)
+ ENDIF()
+ENDFUNCTION(MANAGE_GETTEXT_LOCALES)
+
+SET(MANAGE_GETTEXT_VALID_OPTIONS ${MANAGE_POT_FILE_VALID_OPTIONS} "ALL" "POT_FILE")
+FUNCTION(MANAGE_GETTEXT)
+ IF(NOT DEFINED MANAGE_GETTEXT_SUPPORT)
+ MANAGE_GETTEXT_INIT()
+ ENDIF()
+
+ VARIABLE_PARSE_ARGN(_o MANAGE_GETTEXT_VALID_OPTIONS ${ARGN})
+ IF(DEFINED _o_ALL)
+ SET(_all "ALL")
+ ELSE()
+ SET(_all "")
+ ENDIF(DEFINED _o_ALL)
+
+ VARIABLE_TO_ARGN(_gettext_locales_argn _o MANAGE_GETTEXT_LOCALES_VALID_OPTIONS)
+ IF("${MANAGE_TRANSLATION_LOCALES}" STREQUAL "")
+ MANAGE_GETTEXT_LOCALES(_locales ${_gettext_locales_argn})
+ ENDIF()
+
+ ## Determine the pot files
+ VARIABLE_TO_ARGN(_addPotFileOptList _o MANAGE_POT_FILE_VALID_OPTIONS)
+ IF(NOT "${_o_POT_FILE}" STREQUAL "")
+ ### pot file is specified
+ MANAGE_POT_FILE("${_o_POT_FILE}" ${_addPotFileOptList})
+ ELSE()
+ ### pot file is not specified
+ IF("${MANAGE_TRANSLATION_GETTEXT_POT_FILES}" STREQUAL "")
+ #### No previous pot files
+ SET(_o_POT_FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pot")
+ MANAGE_POT_FILE("${_o_POT_FILE}" ${_addPotFileOptList})
+ ELSE()
+ FOREACH(_potFile ${MANAGE_TRANSLATION_GETTEXT_POT_FILES})
+ MANAGE_POT_FILE_INTERNAL(0 "${_potFile}" ${_addPotFileOptList})
+ ENDFOREACH()
+ ENDIF()
+ ENDIF()
+
+ ## Target translation
+ ADD_CUSTOM_TARGET(translations ${_all}
+ COMMENT "translations: Making translations"
+ )
+
+ ## Target pot_files
+ ## PO depends on POT, so no need to put ALL here
+ ADD_CUSTOM_TARGET(pot_files
+ COMMENT "pot_files: ${MANAGE_TRANSLATION_GETTEXT_POT_FILES}"
+ )
+
+ ## Depends on pot_file targets instead of pot files themselves
+ ## Otherwise it won't build when pot files is in sub CMakeLists.txt
+ FOREACH(potFile ${MANAGE_TRANSLATION_GETTEXT_POT_FILES})
+ MANAGE_POT_FILE_OBTAIN_TARGET_NAME(targetName "${potFile}")
+ ADD_DEPENDENCIES(pot_files ${targetName}_no_force)
+ ENDFOREACH(potFile)
+
+ ## Target update_po
+ ADD_CUSTOM_TARGET(update_po
+ DEPENDS ${MANAGE_TRANSLATION_GETTEXT_PO_FILES}
+ COMMENT "update_po: ${MANAGE_TRANSLATION_GETTEXT_PO_FILES}"
+ )
+ ADD_DEPENDENCIES(update_po pot_files)
+
+ ## Target gmo_files
+ IF(MANAGE_TRANSLATION_GETTEXT_MO_FILES)
+ ADD_CUSTOM_TARGET(gmo_files
+ DEPENDS ${MANAGE_TRANSLATION_GETTEXT_MO_FILES}
+ COMMENT "gmo_files: ${MANAGE_TRANSLATION_GETTEXT_MO_FILES}"
+ )
+ ENDIF()
+
+ IF(TARGET gmo_files)
+ ADD_DEPENDENCIES(gmo_files update_po)
+ ADD_DEPENDENCIES(translations gmo_files)
+ ELSE()
+ ADD_DEPENDENCIES(translations update_po)
+ ENDIF()
+
+ENDFUNCTION(MANAGE_GETTEXT)
+
+SET(MANAGE_GETTEXT_DETECT_POT_DIR_VALID_OPTIONS "WORKING_DIRECTORY")
+FUNCTION(MANAGE_GETTEXT_DETECT_POT_DIR potDirVar)
+ VARIABLE_PARSE_ARGN(_o MANAGE_GETTEXT_DETECT_POT_DIR_VALID_OPTIONS ${ARGN})
+ SET(detectedPotDir "NOTFOUND")
+ IF("${_o_WORKING_DIRECTORY}" STREQUAL "")
+ SET(_o_WORKING_DIRECTORY "${CMAKE_HOME_DIR}")
+ ENDIF()
+ EXECUTE_PROCESS(
+ COMMAND find . -name "*.pot"
+ COMMAND sed -e "s|^\\./||"
+ COMMAND sort -u
+ COMMAND xargs
+ COMMAND sed -e "s/ /;/g"
+ WORKING_DIRECTORY "${_o_WORKING_DIRECTORY}"
+ OUTPUT_VARIABLE potFileList
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ LIST(LENGTH potFileList potFileListLen)
+ IF( potFileListLen EQUAL 0 )
+ ## NOT_FOUND
+ ELSEIF( potFileListLen EQUAL 1 )
+ GET_FILENAME_COMPONENT(detectedPotDir "${potFileList}" PATH)
+ ELSE()
+ MANAGE_FILE_COMMON_DIR(detectedPotDir ${potFileList})
+ ENDIF()
+ SET(${potDirVar} "${detectedPotDir}" PARENT_SCOPE)
+ENDFUNCTION(MANAGE_GETTEXT_DETECT_POT_DIR)
+
+FUNCTION(LOCALE_PARSE_STRING language script country modifier str)
+ SET(_s "")
+ SET(_c "")
+ SET(_m "")
+ IF("${str}" MATCHES "(.*)@(.*)")
+ SET(_m "${CMAKE_MATCH_2}")
+ SET(_str "${CMAKE_MATCH_1}")
+ ELSE()
+ SET(_str "${str}")
+ ENDIF()
+ STRING(REPLACE "-" "_" _str "${_str}")
+ STRING_SPLIT(_lA "_" "${_str}")
+ LIST(LENGTH _lA _lLen)
+ LIST(GET _lA 0 _l)
+ IF(_lLen GREATER 2)
+ LIST(GET _lA 2 _c)
+ ENDIF()
+ IF(_lLen GREATER 1)
+ LIST(GET _lA 1 _x)
+ IF("${_x}" MATCHES "[A-Z][a-z][a-z][a-z]")
+ SET(_s "${_x}")
+ ELSE()
+ SET(_c "${_x}")
+ ENDIF()
+ ENDIF()
+
+ # Make sure the language is in the list
+ IF(NOT DEFINED ZANATA_SUGGEST_COUNTRY_${_l}__)
+ # empty language means invalid languages
+ SET(_l "")
+ SET(_s "")
+ SET(_c "")
+ SET(_m "")
+ ENDIF()
+
+ SET(${language} "${_l}" PARENT_SCOPE)
+ SET(${script} "${_s}" PARENT_SCOPE)
+ SET(${country} "${_c}" PARENT_SCOPE)
+ SET(${modifier} "${_m}" PARENT_SCOPE)
+ENDFUNCTION(LOCALE_PARSE_STRING)
+
+FUNCTION(LOCALE_IN_PATH var path)
+ GET_FILENAME_COMPONENT(_token "${path}" NAME_WE)
+ LOCALE_PARSE_STRING(language script country modifier "${_token}")
+ IF(NOT "${language}" STREQUAL "")
+ SET(${var} "${_token}" PARENT_SCOPE)
+ RETURN()
+ ENDIF()
+
+ GET_FILENAME_COMPONENT(_dir "${path}" PATH)
+ STRING_SPLIT(dirA "/" "${_dir}")
+ LIST(LENGTH dirA dirALen)
+ MATH(EXPR i ${dirALen}-1)
+ WHILE(NOT i LESS 0)
+ LIST(GET dirA ${i} _token)
+ LOCALE_PARSE_STRING(language script country modifier "${_token}")
+ IF(NOT "${language}" STREQUAL "")
+ SET(${var} "${_token}" PARENT_SCOPE)
+ RETURN()
+ ENDIF()
+ MATH(EXPR i ${i}-1)
+ ENDWHILE()
+
+ SET(${var} "" PARENT_SCOPE)
+ENDFUNCTION(LOCALE_IN_PATH)
diff -Nura ibus-chewing-1.6.1/Modules/ManageUninstall.cmake ibus-chewing-1.6.1_new/Modules/ManageUninstall.cmake
--- ibus-chewing-1.6.1/Modules/ManageUninstall.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageUninstall.cmake 2014-10-28 13:05:31.000000000 +0800
@@ -0,0 +1,33 @@
+# - Provide uninstall target.
+# Use this module to provide uninstall target.
+#
+# Included Modules:
+# - ManageMessage
+# - ManageFile
+#
+# Define following targets
+# uninstall: For uninstalling the package.
+#
+
+IF(DEFINED _MANAGE_UNINSTALL_CMAKE_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_UNINSTALL_CMAKE_)
+SET(_MANAGE_UNINSTALL_CMAKE_ "DEFINED")
+
+SET(CMAKE_UNINSTALL_IN_SEARCH_PATH
+ ${CMAKE_MODULE_PATH} ${CMAKE_ROOT}/Modules ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/Modules
+ )
+
+INCLUDE(ManageFile)
+FIND_FILE_ERROR_HANDLING(CMAKE_UNINSTALL_IN
+ FIND_ARGS cmake_uninstall.cmake.in PATHS ${CMAKE_UNINSTALL_IN_SEARCH_PATH}
+ )
+
+CONFIGURE_FILE("${CMAKE_UNINSTALL_IN}"
+ "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
+ IMMEDIATE @ONLY)
+
+ADD_CUSTOM_TARGET(uninstall
+ "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
+ )
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageUpload.cmake ibus-chewing-1.6.1_new/Modules/ManageUpload.cmake
--- ibus-chewing-1.6.1/Modules/ManageUpload.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageUpload.cmake 2014-10-28 13:05:31.000000000 +0800
@@ -0,0 +1,312 @@
+# - Manage upload source archive to hosting site
+# cmake-fedora can upload source archive to hosting site by
+# scp, sftp or any other command.
+#
+# Included Modules:
+# - ManageMessage
+# - ManageVariable
+#
+# This module defines following functions:
+# MANAGE_UPLOAD_TARGET(<targetName>
+# COMMAND <program> ...
+# [COMMENT <comment>]
+# [ADD_CUSTOM_TARGET_ARGS <arg> ...]
+# )
+# - Make an upload target using arbitrary command.
+# If COMMAND program exists the target <targetName> will be created;
+# if not, a M_OFF message is shown and target will not be created.
+# * Parameters:
+# + targetName: target for use this command.
+# + COMMAND program ... : Upload command and arguments
+# + COMMENT comment (Optional) Comment when target is being built.
+# Default: "<targetName>: Upload with <program> ..."
+# + ADD_CUSTOM_TARGET_ARGS <arg> ...: (Optional) Other arguments to be
+# passed to ADD_CUSTOM_TARGET.
+# * Targets:
+# + <targetName>
+#
+# MANAGE_UPLOAD_SCP(<targetName>
+# HOST_URL <url>
+# [USER <user>] [UPLOAD_FILES <file> ...] [DEPENDS <file> ...]
+# [REMOTE_DIR <dir>] [OPTIONS <options>]
+# [COMMENT <comment>]
+# [ADD_CUSTOM_TARGET_ARGS <arg> ...]
+# )
+# - Make an upload target using scp.
+# This functions check whether scp exists, see MANAGE_UPLOAD_TARGET
+# for detailed behavior.
+# * Parameters:
+# + targetName: target for use this command.
+# + HOST_URL url: scp server.
+# + USER user: (Optional) scp user.
+# Default: Environment variable $USER.
+# + UPLOAD_FILES file ... : (Optional) Files to be uploaded.
+# This will also tell cmake the build to those files,
+# thus, <targetName> depends on those files.
+# Default: ${SOURCE_ARCHIVE_FILE}
+# + DEPENDS file ...: (Optional) Files that <targetName> should depends on,
+# but no need to upload.
+# + REMOTE_DIR dir: (Optional) Directory on the server.
+# + OPTIONS options: (Optional) scp options.
+# + COMMENT comment (Optional) Comment when target is being built.
+# Default: "<targetName>: Upload with scp [<options>] user@url:dir/file1 ..."
+# + ADD_CUSTOM_TARGET_ARGS <arg> ...: (Optional) Other arguments to be
+# passed to ADD_CUSTOM_TARGET.
+# * Targets:
+# + <targetName>
+#
+# MANAGE_UPLOAD_SFTP(<targetName>
+# HOST_URL <url>
+# [BATCH <batchFile>]
+# [USER <user>] [UPLOAD_FILES <file> ...] [DEPENDS <file> ...]
+# [REMOTE_DIR <dir>] [OPTIONS <options>]
+# [COMMENT <comment>]
+# [ADD_CUSTOM_TARGET_ARGS <arg> ...]
+# )
+# - Make an upload target using sftp.
+# This functions check whether sftp exists, see MANAGE_UPLOAD_TARGET
+# for detailed behavior.
+# * Parameters:
+# + targetName: target for use this command.
+# + HOST_URL url: sftp server.
+# + BATCH batchFile: (Optional) File of sftp batch command.
+# If not specified, a batch file will be generated at
+# ${CMAKE_CURRENT_BINARY_DIR}/<targetName>-sftp-batch
+# + USER user: (Optional) sftp user.
+# Default: Environment variable $USER.
+# + UPLOAD_FILES file ... : (Optional) Files to be uploaded.
+# This will also tell cmake the build to those files,
+# thus, <targetName> depends on those files.
+# Default: ${SOURCE_ARCHIVE_FILE}
+# + DEPENDS file ...: (Optional) Files that <targetName> should depends on,
+# but no need to upload.
+# + REMOTE_DIR dir: (Optional) Directory on the server.
+# + OPTIONS options: (Optional) sftp options.
+# + COMMENT comment (Optional) Comment when target is being built.
+# Default: "<targetName>: Upload with sftp [<options>] user@url/dir/file1 ..."
+# + ADD_CUSTOM_TARGET_ARGS <arg> ...: (Optional) Other arguments to be
+# passed to ADD_CUSTOM_TARGET.
+# * Targets:
+# + <targetName>
+#
+#
+# MANAGE_UPLOAD_FEDORAHOSTED(<targetName>
+# [USER <user>] [UPLOAD_FILES <file> ...] [DEPENDS <file> ...]
+# [OPTIONS <options>]
+# [COMMENT <comment>]
+# [ADD_CUSTOM_TARGET_ARGS <arg> ...]
+# )
+# - Make an upload target to fedora hosted.
+# This functions check whether scp exists, see MANAGE_UPLOAD_TARGET
+# for detailed behavior.
+# * Parameters:
+# + targetName: target for use this command.
+# + USER user: (Optional) scp user.
+# Default: Environment variable $USER.
+# + UPLOAD_FILES file ... : (Optional) Files to be uploaded.
+# This will also tell cmake the build to those files,
+# thus, <targetName> depends on those files.
+# Default: ${SOURCE_ARCHIVE_FILE}
+# + DEPENDS file ...: (Optional) Files that <targetName> should depends on,
+# but no need to upload.
+# + OPTIONS options: (Optional) scp options.
+# + COMMENT comment (Optional) Comment when target is being built.
+# Default: "<targetName>: Upload with scp [<options>] user@url:dir/file1 ..."
+# + ADD_CUSTOM_TARGET_ARGS <arg> ...: (Optional) Other arguments to be
+# passed to ADD_CUSTOM_TARGET.
+# * Targets:
+# + <targetName>
+#
+# MANAGE_UPLOAD_SOURCEFORGE(<targetName>
+# [BATCH <batchFile>]
+# [USER <user>] [UPLOAD_FILES <file> ...] [DEPENDS <file> ...]
+# [OPTIONS <options>]
+# [COMMENT <comment>]
+# [ADD_CUSTOM_TARGET_ARGS <arg> ...]
+# )
+# - Make an upload target using sftp.
+# This functions check whether sftp exists, see MANAGE_UPLOAD_TARGET
+# for detailed behavior.
+# * Parameters:
+# + targetName: target for use this command.
+# + BATCH batchFile: (Optional) File of sftp batch command.
+# If not specified, a batch file will be generated at
+# ${CMAKE_CURRENT_BINARY_DIR}/<targetName>-sftp-batch
+# + USER user: (Optional) sftp user.
+# Default: Environment variable $USER.
+# + UPLOAD_FILES file ... : (Optional) Files to be uploaded.
+# This will also tell cmake the build to those files,
+# thus, <targetName> depends on those files.
+# Default: ${SOURCE_ARCHIVE_FILE}
+# + DEPENDS file ...: (Optional) Files that <targetName> should depends on,
+# but no need to upload.
+# + OPTIONS options: (Optional) sftp options.
+# + COMMENT comment (Optional) Comment when target is being built.
+# Default: "<targetName>: Upload with sftp [<options>] user@url/dir/file1 ..."
+# + ADD_CUSTOM_TARGET_ARGS <arg> ...: (Optional) Other arguments to be
+# passed to ADD_CUSTOM_TARGET.
+# * Targets:
+# + <targetName>
+#
+# MANAGE_UPLOAD_FEDORAHOSTED(targetName
+# [USER user] [UPLOAD_FILES files] [OPTIONS options] [DEPENDS files]
+# [COMMENT comments])
+# - Make an upload target for uploading to FedoraHosted.
+# Parameters:
+# + targetName: target name in make.
+# + USER user: scp user. Note that if USER is used but user is not defined.
+# It produces M_OFF warning.
+# + UPLOAD_FILES: Files to be uploaded. This will be in DEPENDS list.
+# + OPTIONS options: scp options.
+# + DEPENDS files: other files that should be in DEPENDS list.
+# + COMMENT comments: Comment to be shown when building the target.
+#
+# MANAGE_UPLOAD_SOURCEFORGE(targetName [BATCH batchFile]
+# [USER user] [UPLOAD_FILES files] [OPTIONS options] [DEPENDS files]
+# [COMMENT comments])
+# [UPLOAD_FILES files] [REMOTE_DIR remoteDir]
+# [UPLOAD_OPTIONS options] [DEPENDS files])
+# - Make an upload target for uploading to SourceForge
+# Parameters:
+# + targetName: target name in make.
+# + BATCH batchFile to be used in sftp. (sftp -b )
+# + USER user: sftp user. Note that if USER is used but user is not defined.
+# It produces M_OFF warning.
+# + UPLOAD_FILES: Files to be uploaded. This will be in DEPENDS list.
+# + OPTIONS options: sftp options.
+# + DEPENDS files: other files that should be in DEPENDS list.
+# + COMMENT comments: Comment to be shown when building the target.
+#
+#
+
+IF(DEFINED _MANAGE_UPLOAD_CMAKE_)
+ RETURN()
+ENDIF()
+SET(_MANAGE_UPLOAD_CMAKE_ "DEFINED")
+
+INCLUDE(ManageMessage)
+INCLUDE(ManageString)
+INCLUDE(ManageVariable)
+
+FUNCTION(MANAGE_UPLOAD_TARGET targetName)
+ SET(_validOptions "COMMAND" "COMMENT" "ADD_CUSTOM_TARGET_ARGS")
+ VARIABLE_PARSE_ARGN(_o _validOptions ${ARGN})
+
+ LIST(GET _o_COMMAND 0 _cmd)
+ FIND_PROGRAM_ERROR_HANDLING(${targetName}_UPLOAD_EXECUTABLE
+ ERROR_MSG " Upload target ${targetName} disabled."
+ ERROR_VAR _upload_target_missing_dependency
+ VERBOSE_LEVEL ${M_OFF}
+ "${_cmd}"
+ )
+
+ IF("${_o_COMMENT}" STREQUAL "")
+ SET(_o "${targetName}: Upload with ${_o_COMMAND}")
+ ENDIF()
+
+ IF(NOT _upload_target_missing_dependency)
+ ADD_CUSTOM_TARGET(${targetName}
+ COMMAND ${_o_COMMAND}
+ COMMENT "${_o_COMMENT}"
+ ${_o_ADD_CUSTOM_TARGET_ARGS}
+ )
+ ENDIF()
+ENDFUNCTION(MANAGE_UPLOAD_TARGET targetName)
+
+## Internal
+FUNCTION(MANAGE_UPLOAD_MAKE_URL var user url)
+ IF(NOT "${user}" STREQUAL "")
+ SET(_str "${user}@${url}")
+ ELSE()
+ SET(_str "${url}")
+ ENDIF()
+ SET(${var} "${_str}" PARENT_SCOPE)
+ENDFUNCTION(MANAGE_UPLOAD_MAKE_URL)
+
+
+FUNCTION(MANAGE_UPLOAD_SCP targetName)
+ SET(_validOptions "HOST_URL" "USER"
+ "UPLOAD_FILES" "DEPENDS" "REMOTE_DIR" "OPTIONS" "COMMENT"
+ "ADD_CUSTOM_TARGET_ARGS"
+ )
+ VARIABLE_PARSE_ARGN(_o _validOptions ${ARGN})
+
+ IF("${_o_HOST_URL}" STREQUAL "")
+ M_MSG(${M_ERROR} "HOST_URL is required.")
+ ENDIF()
+
+ IF("${_o_UPLOAD_FILES}" STREQUAL "")
+ SET(_o_UPLOAD_FILES "${SOURCE_ARCHIVE_FILE}")
+ ENDIF()
+
+ MANAGE_UPLOAD_MAKE_URL(_uploadUrl "${_o_USER}" "${_o_HOST_URL}")
+ IF(NOT "${_o_REMOTE_DIR}" STREQUAL "")
+ STRING_APPEND(_uploadUrl ":${_o_REMOTE_DIR}")
+ ENDIF()
+
+ IF("${_o_COMMENT}" STREQUAL "")
+ SET(_o "${targetName}: Upload with scp ${_o_OPTIONS} ${_o_UPLOAD_FILES} ${_uploadUrl}")
+ ENDIF()
+
+ MANAGE_UPLOAD_TARGET(${targetName}
+ COMMAND scp ${_o_OPTIONS} ${_o_UPLOAD_FILES} ${_uploadUrl}
+ DEPENDS ${_o_UPLOAD_FILES} ${_o_DEPENDS}
+ COMMENT "${_o_COMMENTS}"
+ ADD_CUSTOM_TARGET_ARGS VERBATIM ${_o_ADD_CUSTOM_TARGET_ARGS}
+ )
+ENDFUNCTION(MANAGE_UPLOAD_SCP fileAlias)
+
+FUNCTION(MANAGE_UPLOAD_SFTP targetName)
+ SET(_validOptions "HOST_URL" "USER"
+ "BATCH"
+ "UPLOAD_FILES" "DEPENDS" "REMOTE_DIR" "OPTIONS" "COMMENT"
+ "ADD_CUSTOM_TARGET_ARGS"
+ )
+
+ VARIABLE_PARSE_ARGN(_o _validOptions ${ARGN})
+
+ IF("${_o_HOST_URL}" STREQUAL "")
+ M_MSG(${M_ERROR} "HOST_URL is required.")
+ ENDIF()
+
+ IF("${_o_UPLOAD_FILES}" STREQUAL "")
+ SET(_o_UPLOAD_FILES "${SOURCE_ARCHIVE_FILE}")
+ ENDIF()
+
+ MANAGE_UPLOAD_MAKE_URL(_uploadUrl "${_o_USER}" "${_o_HOST_URL}")
+
+ ## Generate batch
+ IF("${_o_BATCH}" STREQUAL "")
+ SET(_o_BATCH "${CMAKE_CURRENT_BINARY_DIR}/${targetName}-sftp-batch")
+ FILE(WRITE "${_o_BATCH}" "pwd\n")
+ FOREACH(_f ${_o_UPLOAD_FILES})
+ FILE(APPEND "${_o_BATCH}" "put -p ${_f} ${_o_REMOTE_DIR}\n")
+ ENDFOREACH()
+ FILE(APPEND "${_o_BATCH}" "bye\n")
+ ENDIF()
+
+ IF("${_o_COMMENT}" STREQUAL "")
+ SET(_o "${targetName}: Upload with scp ${_o_OPTIONS} ${_o_UPLOAD_FILES} ${_uploadUrl}")
+ ENDIF()
+
+ MANAGE_UPLOAD_TARGET(${targetName}
+ COMMAND sftp -b ${_o_BATCH} ${_o_OPTIONS} ${_uploadUrl}
+ DEPENDS ${_o_UPLOAD_FILES} ${_o_DEPENDS}
+ COMMENT "${_o_COMMENTS}"
+ ADD_CUSTOM_TARGET_ARGS VERBATIM ${_o_ADD_CUSTOM_TARGET_ARGS}
+ )
+ENDFUNCTION(MANAGE_UPLOAD_SFTP targetName)
+
+FUNCTION(MANAGE_UPLOAD_FEDORAHOSTED targetName)
+ MANAGE_UPLOAD_SCP(${targetName}
+ HOST_URL "fedorahosted.org" REMOTE_DIR "${PROJECT_NAME}" ${ARGN}
+ )
+ENDFUNCTION(MANAGE_UPLOAD_FEDORAHOSTED)
+
+FUNCTION(MANAGE_UPLOAD_SOURCEFORGE targetName)
+ MANAGE_UPLOAD_SFTP(${targetName}
+ HOST_URL "frs.sourceforge.net"
+ REMOTE_DIR "/home/frs/project/${PROJECT_NAME}" ${ARGN}
+ )
+ENDFUNCTION(MANAGE_UPLOAD_SOURCEFORGE)
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageVariable.cmake ibus-chewing-1.6.1_new/Modules/ManageVariable.cmake
--- ibus-chewing-1.6.1/Modules/ManageVariable.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageVariable.cmake 2015-12-17 17:43:31.000000000 +0800
@@ -0,0 +1,398 @@
+# - Get or set variables from various sources.
+#
+# Included Modules:
+# - ManageFile
+# - ManageString
+#
+# Defines following functions:
+# SETTING_STRING_GET_VARIABLE(<key> <value> <str>
+# [NOUNQUOTE] [NOREPLACE] [<setting_sign>]
+# )
+# - Split a setting string (e.g. VAR=value) to key and value.
+# Note that if the first non-blank character is "#", then the
+# string is deemed as a comment thus will be skipped.
+# * Parameters:
+# + key: Key extracted from str.
+# + value: Value extracted from str
+# + str: String to be extracted variable and value from.
+# + NOUNQUOTE: (Optional) do not remove the double quote mark around the string.
+# + NOREPLACE (Optional) Without this parameter, this macro replaces
+# previous defined variables, use NOREPLACE to prevent this.
+# + NOESCAPE_SEMICOLON: (Optional) do not escape semicolons.
+# + setting_sign: (Optional) The symbol that separate key name and its value.
+# Default value: "="
+#
+# Defines following macros:
+# CMAKE_FEDORA_CONF_GET_ALL_VARIABLES([NOUNQUOTE] [NOREPLACE] [NOESCAPE_SEMICOLON])
+# - Get all variables from cmake-fedora.conf
+# * Parameters:
+# + NOUNQUOTE: (Optional) do not remove the double quote mark around the string.
+# + NOREPLACE (Optional) Without this parameter, this macro replaces
+# previous defined variables, use NOREPLACE to prevent this.
+# + NOESCAPE_SEMICOLON: (Optional) Do not escape semicolons.
+#
+# SETTING_FILE_GET_VARIABLES_PATTERN(<var> <key_pattern> <setting_file>
+# [NOUNQUOTE] [NOREPLACE]
+# [NOESCAPE_SEMICOLON] [<setting_sign>]
+# )
+# - Get variable values from a setting file if their names matches given
+# pattern. Note that if the first non-blank character is "#", then the
+# string is deemed as a comment thus will be skipped.
+# * Parameters:
+# + var: If specified, the value of setting string will be assign to the var;
+# otherwise using matched key name as variable name.
+# + key_pattern: Regex pattern of match the key name.
+# + setting_file: Setting filename.
+# + NOUNQUOTE: (Optional) do not remove the double quote mark around the string.
+# + NOREPLACE (Optional) Without this parameter, this macro replaces
+# previous defined variables, use NOREPLACE to prevent this.
+# + NOESCAPE_SEMICOLON: (Optional) do not escape semicolons.
+# + setting_sign: (Optional) The symbol that separate key name and its value.
+# Default value: "="
+#
+# SETTING_FILE_GET_ALL_VARIABLES(<setting_file> [NOUNQUOTE] [NOREPLACE]
+# [NOESCAPE_SEMICOLON] [<setting_sign>]
+# )
+# - Get all variable values from a setting file.
+# It is equivalent to:
+# SETTING_FILE_GET_VARIABLES_PATTERN("" "[A-Za-z_][A-Za-z0-9_]*"
+# "${setting_file}" ${ARGN})
+# Note that if the first non-blank character is "#", then the
+# string is deemed as a comment thus will be skipped.
+# * Parameters:
+# + setting_file: Setting filename.
+# + NOUNQUOTE: (Optional) do not remove the double quote mark around the string.
+# + NOREPLACE (Optional) Without this parameter, this macro replaces
+# previous defined variables, use NOREPLACE to prevent this.
+# + NOESCAPE_SEMICOLON: (Optional) Do not escape semicolons.
+# + setting_sign: (Optional) The symbol that separate key and value.
+# Default value: "="
+#
+# SETTING_FILE_GET_VARIABLE(<var> <key_name> <setting_file>
+# [NOUNQUOTE] [NOREPLACE]
+# [NOESCAPE_SEMICOLON] [<setting_sign>]
+# )
+# - Get the value of a key from a setting file.
+# It is equivalent to:
+# SETTING_FILE_GET_VARIABLES_PATTERN(${var} "${key_name}"
+# "${setting_file}" ${ARGN})
+# '#' is used to comment out setting.
+# * Parameters:
+# + var: Variable to store the value.
+# + key_name: Name of the key.
+# + setting_file: Setting filename.
+# + NOUNQUOTE: (Optional) do not remove the double quote mark around the string.
+# + NOREPLACE (Optional) Without this parameter, this macro replaces
+# previous defined variables, use NOREPLACE to prevent this.
+# + NOESCAPE_SEMICOLON: (Optional) do not escape semicolons.
+# + setting_sign: (Optional) The symbol that separate key and value.
+# Default value: "="
+#
+# SETTING_FILE_GET_ALL_VARIABLES(<setting_file> [NOUNQUOTE] [NOREPLACE]
+# [NOESCAPE_SEMICOLON] [<setting_sign>]
+# )
+# - Get all key values from a setting file.
+# '#' is used to comment out setting.
+# * Parameters:
+# + setting_file: Setting filename.
+# + NOUNQUOTE: (Optional) do not remove the double quote mark around the string.
+# + NOREPLACE (Optional) Without this parameter, this macro replaces
+# previous defined variables, use NOREPLACE to prevent this.
+# + NOESCAPE_SEMICOLON: (Optional) Do not escape semicolons.
+# + setting_sign: (Optional) The symbol that separate attribute name and its value.
+# Default value: "="
+#
+# GET_ENV(<var> <default_value> [<env>]
+# [[CACHE <type> <docstring> [FORCE]] | PARENT_SCOPE]
+# )
+# - Get the value of a environment variable, or use default
+# if the environment variable does not exist or empty.
+# * Parameters:
+# + var: Variable to be set
+# + default_value: Default value of the var
+# + env: (Optional) The name of environment variable. Only need if different from var.
+# + CACHE ... : Arguments for SET
+# + PARENT_SCOPE: Arguments for SET
+#
+# SET_VAR(<var> <untrimmed_value>)
+# - Trim and set the value to a variable.
+# * Parameters:
+# + var: Variable to be set
+# + untrimmed_value: Untrimmed values that may have space, \t, \n, \r in the front or back of the string.
+#
+# VARIABLE_PARSE_ARGN(<var> <valid_option_list> [arguments ...])
+# - Parse the arguments and put the result in var and var_<optName>
+# * Parameters:
+# + var: Main variable name.
+# + valid_option_list: List name of valid options.
+# + arguments ...: (Optional) variable to be parsed.
+#
+# VARIABLE_TO_ARGN(<var> <prefix> <valid_option_list>)
+# - Merge the variable and options to the form of ARGN.
+# Like the reverse of VARIABLE_PARSE_ARGN
+# * Parameters:
+# + var: Variable that holds result.
+# + prefix: Main variable name that to be processed.
+# + valid_option_list: List name of valid options.
+#
+
+IF(DEFINED _MANAGE_VARIABLE_CMAKE_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_VARIABLE_CMAKE_)
+SET(_MANAGE_VARIABLE_CMAKE_ "DEFINED")
+INCLUDE(ManageFile)
+INCLUDE(ManageString)
+
+# This macro is meant to be internal.
+MACRO(_MANAGE_VARIABLE_SET var value)
+ SET(${var} "${value}")
+ENDMACRO(_MANAGE_VARIABLE_SET var value)
+
+# it deals the "encoded" line.
+FUNCTION(SETTING_STRING_GET_VARIABLE var value str )
+ SET(setting_sign "=")
+ SET(_NOUNQUOTE "")
+ SET(_NOREPLACE "")
+ FOREACH(_arg ${ARGN})
+ IF (${_arg} STREQUAL "NOUNQUOTE")
+ SET(_NOUNQUOTE "NOUNQUOTE")
+ ELSEIF (${_arg} STREQUAL "NOREPLACE")
+ SET(_NOREPLACE "NOREPLACE")
+ ELSE(${_arg} STREQUAL "NOUNQUOTE")
+ SET(setting_sign ${_arg})
+ ENDIF(${_arg} STREQUAL "NOUNQUOTE")
+ ENDFOREACH(_arg ${ARGN})
+
+ STRING_SPLIT(_tokens "${setting_sign}" "${str}" 2)
+ #MESSAGE("_tokens=${_tokens}")
+ SET(_varName "")
+ SET(_val "")
+ FOREACH(_token ${_tokens})
+ #MESSAGE("_varName=${_varName} _token=${_token}")
+ IF(_varName STREQUAL "")
+ SET(_varName "${_token}")
+ ELSE(_varName STREQUAL "")
+ SET(_val "${_token}")
+ ENDIF(_varName STREQUAL "")
+ ENDFOREACH(_token ${_tokens})
+ #MESSAGE("_varName=${_varName} _val=${_val}")
+
+ SET(${var} "${_varName}" PARENT_SCOPE)
+ # Set var when
+ # 1. NOREPLACE is not set, or
+ # 2. var has value already.
+ SET(_setVar 0)
+ IF(_NOREPLACE STREQUAL "")
+ STRING_TRIM(_value "${_val}" ${_NOUNQUOTE})
+ ELSEIF(${var} STREQUAL "")
+ STRING_TRIM(_value "${_val}" ${_NOUNQUOTE})
+ ELSE(_NOREPLACE STREQUAL "")
+ SET(_value "${${var}}")
+ ENDIF(_NOREPLACE STREQUAL "")
+ SET(${value} "${_value}" PARENT_SCOPE)
+ #MESSAGE("_varName=${_varName} _value=${_value}")
+
+ENDFUNCTION(SETTING_STRING_GET_VARIABLE var str)
+
+MACRO(CMAKE_FEDORA_CONF_GET_ALL_VARIABLES)
+ MANAGE_CMAKE_FEDORA_CONF(CMAKE_FEDORA_CONF)
+ SET(HOME "$ENV{HOME}")
+ SETTING_FILE_GET_ALL_VARIABLES(${CMAKE_FEDORA_CONF} ${ARGN})
+ENDMACRO(CMAKE_FEDORA_CONF_GET_ALL_VARIABLES)
+
+# Internal macro
+# Similar to STRING_ESCAPE, but read directly from file,
+# This avoid the variable substitution
+# Variable escape is enforced.
+MACRO(FILE_READ_ESCAPE var filename)
+ # '$' is very tricky.
+ # '$' => '#D'
+ GET_FILENAME_COMPONENT(_filename_abs "${filename}" ABSOLUTE)
+ EXECUTE_PROCESS(COMMAND cat ${filename}
+ COMMAND sed -e "s/#/#H/g"
+ COMMAND sed -e "s/[$]/#D/g"
+ COMMAND sed -e "s/;/#S/g"
+ COMMAND sed -e "s/[\\]/#B/g"
+ OUTPUT_VARIABLE _ret
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ STRING(REGEX REPLACE "\n" ";" _ret "${_ret}")
+ #MESSAGE("_ret=|${_ret}|")
+ SET(${var} "${_ret}")
+ENDMACRO(FILE_READ_ESCAPE var filename)
+
+MACRO(SETTING_FILE_GET_VARIABLES_PATTERN var key_pattern setting_file)
+ IF("${setting_file}" STREQUAL "")
+ M_MSG(${M_FATAL} "SETTING_FILE_GET_VARIABLES_PATTERN: setting_file ${setting_file} is empty")
+ ENDIF("${setting_file}" STREQUAL "")
+ SET(setting_sign "=")
+ SET(_noUnQuoted "")
+ SET(_noEscapeSemicolon "")
+ SET(_noReplace "")
+ SET(_escapeVariable "")
+ FOREACH(_arg ${ARGN})
+ IF (${_arg} STREQUAL "NOUNQUOTE")
+ SET(_noUnQuoted "NOUNQUOTE")
+ ELSEIF (${_arg} STREQUAL "NOREPLACE")
+ SET(_noReplace "NOREPLACE")
+ ELSEIF (${_arg} STREQUAL "NOESCAPE_SEMICOLON")
+ SET(_noEscapeSemicolon "NOESCAPE_SEMICOLON")
+ ELSEIF (${_arg} STREQUAL "ESCAPE_VARIABLE")
+ SET(_escapeVariable "ESCAPE_VARIABLE")
+ ELSE(${_arg} STREQUAL "NOUNQUOTE")
+ SET(setting_sign ${_arg})
+ ENDIF(${_arg} STREQUAL "NOUNQUOTE")
+ ENDFOREACH(_arg)
+
+ ## Escape everything to be safe.
+ FILE_READ_ESCAPE(_lines "${setting_file}")
+
+ #STRING_SPLIT(_lines "\n" "${_txt_content}")
+ #MESSAGE("_lines=|${_lines}|")
+ SET(_actual_line "")
+ SET(_join_next 0)
+ FOREACH(_line ${_lines})
+ #MESSAGE("_line=|${_line}|")
+ IF(NOT _line MATCHES "^[ \\t]*#H")
+ ## Not a comment line.
+ IF(_join_next EQUAL 1)
+ SET(_actual_line "${_actual_line}${_line}" )
+ ELSE()
+ SET(_actual_line "${_line}")
+ ENDIF()
+ #MESSAGE("_actual_line=|${_actual_line}|")
+
+ IF(_actual_line MATCHES "#B$")
+ ## Join the lines that end with \\
+ SET(_join_next 1)
+ STRING(REGEX REPLACE "#B$" "" _actual_line "${_actual_line}")
+ ELSE()
+ SET(_join_next 0)
+ IF(_actual_line MATCHES "[ \\t]*${key_pattern}[ \\t]*${setting_sign}")
+ #MESSAGE("*** matched_line=|${_actual_line}|")
+ SETTING_STRING_GET_VARIABLE(_attr _value
+ "${_actual_line}" ${setting_sign} ${_noUnQuoted} )
+ #MESSAGE("*** _attr=${_attr} _value=${_value}")
+ IF(_noReplace STREQUAL "" OR NOT DEFINED ${_attr})
+ ## Unencoding
+ _STRING_UNESCAPE(_value "${_value}" ${_noEscapeSemicolon} ESCAPE_VARIABLE)
+ IF(_escapeVariable STREQUAL "")
+ ## If "ESCAPE_VARIABLE" is not defined.
+ ## then substitute the variable
+ _MANAGE_VARIABLE_SET(_value "${_value}")
+ ENDIF()
+ IF("${var}" STREQUAL "")
+ SET(${_attr} "${_value}")
+ ELSE()
+ SET(${var} "${_value}")
+ ENDIF()
+ ENDIF()
+ ENDIF()
+ ENDIF(_actual_line MATCHES "#B$")
+ ENDIF(NOT _line MATCHES "^[ \\t]*#H")
+ ENDFOREACH(_line ${_lines})
+ #SET(${var} "${_value}")
+ENDMACRO(SETTING_FILE_GET_VARIABLES_PATTERN var key_pattern setting_file)
+
+MACRO(SETTING_FILE_GET_VARIABLE var key_name setting_file)
+ SETTING_FILE_GET_VARIABLES_PATTERN(${var} "${key_name}"
+ "${setting_file}" ${ARGN})
+ENDMACRO(SETTING_FILE_GET_VARIABLE var key_name setting_file)
+
+MACRO(SETTING_FILE_GET_ALL_VARIABLES setting_file)
+ SETTING_FILE_GET_VARIABLES_PATTERN("" "[A-Za-z_][A-Za-z0-9_.]*"
+ "${setting_file}" ${ARGN})
+ENDMACRO(SETTING_FILE_GET_ALL_VARIABLES setting_file)
+
+MACRO(GET_ENV var default_value)
+ SET(_env "${var}")
+ SET(_state "")
+ SET(_setArgList "")
+ FOREACH(_arg ${ARGN})
+ IF(_state STREQUAL "set_args")
+ LIST(APPEND _setArgList "${_arg}")
+ ELSE(_state STREQUAL "set_args")
+ IF (_arg STREQUAL "CACHE")
+ SET(_state "set_args")
+ LIST(APPEND _setArgList "${_arg}")
+ ELSEIF (_arg STREQUAL "PARENT_SCOPE")
+ SET(_state "set_args")
+ LIST(APPEND _setArgList "${_arg}")
+ ELSE(_arg STREQUAL "CACHE")
+ SET(_env "${_arg}")
+ ENDIF(_arg STREQUAL "CACHE")
+ ENDIF(_state STREQUAL "set_args")
+ ENDFOREACH(_arg ${ARGN})
+
+ IF ("$ENV{${_env}}" STREQUAL "")
+ SET(${var} "${default_value}" ${_setArgList})
+ ELSE("$ENV{${_env}}" STREQUAL "")
+ SET(${var} "$ENV{${_env}}" ${_setArgList})
+ ENDIF("$ENV{${_env}}" STREQUAL "")
+ # MESSAGE("Variable ${var}=${${var}}")
+ENDMACRO(GET_ENV var default_value)
+
+MACRO(SET_VAR var untrimmedValue)
+ SET(_noUnQuoted "")
+ FOREACH(_arg ${ARGN})
+ IF (${_arg} STREQUAL "NOUNQUOTE")
+ SET(_noUnQuoted "NOUNQUOTE")
+ ENDIF(${_arg} STREQUAL "NOUNQUOTE")
+ ENDFOREACH(_arg ${ARGN})
+ #MESSAGE("untrimmedValue=${untrimmedValue}")
+ IF ("${untrimmedValue}" STREQUAL "")
+ SET(${var} "")
+ ELSE("${untrimmedValue}" STREQUAL "")
+ STRING_TRIM(trimmedValue "${untrimmedValue}" ${_noUnQuoted})
+ #MESSAGE("***SET_VAR: trimmedValue=${trimmedValue}")
+ SET(${var} "${trimmedValue}")
+ ENDIF("${untrimmedValue}" STREQUAL "")
+ #SET(value "${${var}}")
+ #MESSAGE("***SET_VAR: ${var}=|${value}|")
+ENDMACRO(SET_VAR var untrimmedValue)
+
+MACRO(VARIABLE_PARSE_ARGN var valid_option_list)
+ SET(_optName "") ## Last _optName
+ SET(_listName ${var})
+
+ ## Unset all, otherwise ghost from previous running exists.
+ UNSET(${var})
+ FOREACH(_o ${${valid_option_list}})
+ UNSET(${var}_${_o})
+ ENDFOREACH(_o ${valid_option_list})
+
+ FOREACH(_arg ${ARGN})
+ LIST(FIND ${valid_option_list} "${_arg}" _optIndex)
+ IF(_optIndex EQUAL -1)
+ ## Not an option name. Append to existing options
+ LIST(APPEND ${_listName} "${_arg}")
+ ELSE(_optIndex EQUAL -1)
+ ## _arg is an option name.
+ SET(_listName "${var}_${_arg}")
+
+ ## If the option already exists
+ IF(DEFINED ${var}_${_arg})
+ ### then append to it with option name
+ ### this is especiall useful for ADD_CUSTOM_TARGET_COMMAND
+ LIST(APPEND ${_listName} "${_arg}")
+ ELSE(DEFINED ${var}_${_arg})
+ ### otherwise init the option name,
+ ### , so it can be find by IF(DEFINED ...)
+ SET(${_listName} "")
+ ENDIF(DEFINED ${var}_${_arg})
+ ENDIF(_optIndex EQUAL -1)
+ ENDFOREACH(_arg ${ARGN})
+ENDMACRO(VARIABLE_PARSE_ARGN var valid_option_list)
+
+MACRO(VARIABLE_TO_ARGN var prefix valid_option_list)
+ SET(${var} "${${prefix}}")
+ FOREACH(_o ${${valid_option_list}})
+ IF(DEFINED ${prefix}_${_o})
+ LIST(APPEND ${var} "${_o}")
+ IF(NOT "${${prefix}_${_o}}" STREQUAL "")
+ LIST(APPEND ${var} "${${prefix}_${_o}}")
+ ENDIF()
+ ENDIF(DEFINED ${prefix}_${_o})
+ ENDFOREACH(_o ${${valid_option_list}})
+ENDMACRO(VARIABLE_TO_ARGN var prefix valid_option_list)
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageVersion.cmake ibus-chewing-1.6.1_new/Modules/ManageVersion.cmake
--- ibus-chewing-1.6.1/Modules/ManageVersion.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageVersion.cmake 2016-01-07 15:39:34.000000000 +0800
@@ -0,0 +1,192 @@
+# - Manage Version, ChangeLog and project information (prj_info.cmake)
+#
+# Included Modules:
+# - DateTimeFormat
+# - ManageString
+# - ManageVariable
+#
+# Set cache for following variables:
+# - CHANGELOG_FILE: Location of ChangeLog.
+# Default: ${CMAKE_SOURCE_DIR}/ChangeLog
+# - PRJ_INFO_CMAKE_FILE: Path to prj_info.cmake
+# Default: ${CMAKE_FEDORA_TMP_DIR}/prj_info.cmake
+#
+# Defines following functions:
+# RELEASE_NOTES_READ_FILE([<release_file>])
+# - Load release file information.
+# * Parameters:
+# + release_file: (Optional) release file to be read.
+# This file should contain following definition:
+# - PRJ_VER: Release version.
+# - SUMMARY: Summary of the release. Will be output as CHANGE_SUMMARY.
+# - Section [Changes]:
+# Changes of this release list below the section tag.
+# Default:${CMAKE_SOURCE_DIR}/RELEASE-NOTES.txt
+# * Values to cached:
+# + PRJ_VER: Version.
+# + CHANGE_SUMMARY: Summary of changes.
+# + RELEASE_NOTES_FILE: The loaded release file.
+# * Compile flags defined:
+# + PRJ_VER: Project version.
+#
+# PRJ_INFO_CMAKE_WRITE()
+# - Write the project infomation to prj_info.cmake.
+#
+# PRJ_INFO_CMAKE_APPEND(<var>)
+# - Append var to prj_info.cmake.
+# * Parameters:
+# + var: Variable to be append to prj_info.cmake.
+#
+# Defines following macros:
+# PRJ_INFO_CMAKE_READ(<prj_info_file>)
+# - Read prj_info.cmake and get the info of projects.
+# This macro is meant to be run by ManageChangeLogScript script.
+# So normally no need to call it manually.
+# * Parameters:
+# + prj_info_file: File name to be appended to.
+# Default: ${PRJ_INFO_CMAKE_FILE}, otherwise ${CMAKE_FEDORA_TMP_DIR}/prj_info.cmake.
+# * Targets:
+# + changelog: Always update ChangeLog. So it updates the date in ChangeLog.
+# + changelog_no_force: Only update ChangeLog if necessary.
+
+IF(DEFINED _MANAGE_VERSION_CMAKE_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_VERSION_CMAKE_)
+SET(_MANAGE_VERSION_CMAKE_ "DEFINED")
+INCLUDE(ManageMessage)
+INCLUDE(ManageVariable)
+INCLUDE(ManageFile)
+
+SET(PRJ_INFO_VARIABLE_LIST
+ PROJECT_NAME PRJ_VER PRJ_SUMMARY SUMMARY_TRANSLATIONS
+ PRJ_DESCRIPTION DESCRIPTION_TRANSLATIONS
+ LICENSE PRJ_GROUP MAINTAINER AUTHORS VENDER
+ BUILD_ARCH RPM_SPEC_URL RPM_SPEC_SOURCES
+ )
+
+SET(CHANGELOG_FILE "${CMAKE_SOURCE_DIR}/ChangeLog" CACHE FILEPATH "ChangeLog")
+SET(PRJ_INFO_CMAKE_FILE "${CMAKE_FEDORA_TMP_DIR}/prj_info.cmake" CACHE INTERNAL "prj_info.cmake")
+
+FUNCTION(PRJ_INFO_CMAKE_APPEND var)
+ IF(NOT "${${var}}" STREQUAL "")
+ STRING_ESCAPE_BACKSLASH(_str "${${var}}")
+ STRING_ESCAPE_DOLLAR(_str "${_str}")
+ STRING_ESCAPE_QUOTE(_str "${_str}")
+ FILE(APPEND ${PRJ_INFO_CMAKE_FILE} "SET(${var} \"${_str}\")\n")
+ ENDIF(NOT "${${var}}" STREQUAL "")
+ENDFUNCTION(PRJ_INFO_CMAKE_APPEND)
+
+MACRO(PRJ_INFO_CMAKE_READ prj_info_file)
+ IF("${prj_info_file}" STREQUAL "")
+ M_MSG(${M_EROR} "Requires prj_info.cmake")
+ ENDIF()
+ INCLUDE(${prj_info_file} RESULT_VARIABLE prjInfoPath)
+ IF("${prjInfoPath}" STREQUAL "NOTFOUND")
+ M_MSG(${M_ERROR} "Failed to read ${prj_info_file}")
+ ENDIF()
+ENDMACRO(PRJ_INFO_CMAKE_READ)
+
+FUNCTION(PRJ_INFO_CMAKE_WRITE)
+ FILE(REMOVE "${PRJ_INFO_CMAKE_FILE}")
+ FOREACH(_v ${PRJ_INFO_VARIABLE_LIST})
+ PRJ_INFO_CMAKE_APPEND(${_v})
+ ENDFOREACH(_v)
+ENDFUNCTION(PRJ_INFO_CMAKE_WRITE prj_info_file)
+
+## All variable should be specified eplicitly
+FUNCTION(RELEASE_NOTES_FILE_EXTRACT_CHANGELOG_CURRENT var releaseNoteFile )
+ FILE(STRINGS "${releaseNoteFile}" _releaseLines)
+ SET(_changeItemSection 0)
+ SET(_changeLogThis "")
+ ## Parse release file
+ INCLUDE(ManageString)
+ FOREACH(_line ${_releaseLines})
+ IF(_changeItemSection)
+ ### Append lines in change section
+ STRING_APPEND(_changeLogThis "${_line}" "\n")
+ ELSEIF("${_line}" MATCHES "^[[]Changes[]]")
+ ### Start the change section
+ SET(_changeItemSection 1)
+ ENDIF()
+ ENDFOREACH(_line ${_releaseLines})
+ SET(${var} "${_changeLogThis}" PARENT_SCOPE)
+ENDFUNCTION(RELEASE_NOTES_FILE_EXTRACT_CHANGELOG_CURRENT)
+
+FUNCTION(RELEASE_NOTES_READ_FILES_VARIABLES releaseNoteFile )
+ FILE(STRINGS "${RELEASE_NOTES_FILE}" _release_lines)
+
+ SET(CHANGELOG_CURRENT_FILE "${CMAKE_FEDORA_TMP_DIR}/ChangeLog.current" CACHE INTERNAL "ChangeLog.current")
+ ## Parse release file
+ IF (POLICY CMP0054)
+ CMAKE_POLICY(PUSH)
+ CMAKE_POLICY(SET CMP0054 "NEW")
+ ENDIF()
+ FOREACH(_line ${_release_lines})
+ IF("${_line}" MATCHES "^[[]Changes[]]")
+ ### Start the change section
+ BREAK()
+ ELSEIF(NOT "${_line}" MATCHES "^\\s*#")
+ SETTING_STRING_GET_VARIABLE(var value "${_line}")
+
+ IF("${var}" STREQUAL "PRJ_VER")
+ SET(${var} "${value}" CACHE STRING "Project Version" FORCE)
+ ELSEIF("${var}" STREQUAL "SUMMARY")
+ SET(CHANGE_SUMMARY "${value}" CACHE STRING "Change Summary" FORCE)
+ ELSE("${var}" STREQUAL "PRJ_VER")
+ SET(${var} "${value}" CACHE STRING "${var}" FORCE)
+ ENDIF("${var}" STREQUAL "PRJ_VER")
+ ENDIF("${_line}" MATCHES "^[[]Changes[]]")
+ ENDFOREACH(_line)
+ IF (POLICY CMP0054)
+ CMAKE_POLICY(POP)
+ ENDIF()
+ENDFUNCTION(RELEASE_NOTES_READ_FILES_VARIABLES)
+
+FUNCTION(RELEASE_NOTES_READ_FILE)
+ FOREACH(_arg ${ARGN})
+ IF(EXISTS ${_arg})
+ SET(RELEASE_NOTES_FILE ${_arg} CACHE FILEPATH "Release File")
+ ENDIF(EXISTS ${_arg})
+ ENDFOREACH(_arg ${ARGN})
+
+ IF(NOT RELEASE_NOTES_FILE)
+ SET(RELEASE_NOTES_FILE "${CMAKE_SOURCE_DIR}/RELEASE-NOTES.txt" CACHE FILEPATH "Release Notes")
+ ENDIF(NOT RELEASE_NOTES_FILE)
+
+ FILE(STRINGS "${RELEASE_NOTES_FILE}" _release_lines)
+
+ SET(_changeItemSection 0)
+ SET(CHANGELOG_CURRENT_FILE "${CMAKE_FEDORA_TMP_DIR}/ChangeLog.current" CACHE INTERNAL "ChangeLog.current")
+
+ ## Parse release file
+ RELEASE_NOTES_READ_FILES_VARIABLES(${RELEASE_NOTES_FILE})
+
+ IF(NOT CMAKE_SCRIPT_MODE_FILE)
+ ## Non Script mode
+
+ INCLUDE(ManageTarget)
+
+ ## Only update prj_info in non-script mode
+ PRJ_INFO_CMAKE_WRITE()
+
+ ADD_CUSTOM_TARGET(refresh_cmake_cache
+ COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_SOURCE_DIR}/CMakeCache.txt
+ COMMAND ${CMAKE_COMMAND} ${CMAKE_SOURCE_DIR}
+ )
+
+ ADD_CUSTOM_TARGET_COMMAND(changelog
+ NO_FORCE
+ OUTPUT ${CHANGELOG_FILE}
+ COMMAND ${CMAKE_COMMAND} -Dcmd=update
+ -Dchangelog=${CHANGELOG_FILE}
+ -Drelease=${RELEASE_NOTES_FILE}
+ -Dprj_info=${PRJ_INFO_CMAKE_FILE}
+ -Dcmakecache=${CMAKE_BINARY_DIR}/CMakeCache.txt
+ -Dcmake_source_dir=${CMAKE_SOURCE_DIR}
+ -P ${CMAKE_FEDORA_MODULE_DIR}/ManageChangeLogScript.cmake
+ DEPENDS ${RELEASE_NOTES_FILE}
+ COMMENT "changelog: ${CHANGELOG_FILE}"
+ )
+ ENDIF()
+ENDFUNCTION(RELEASE_NOTES_READ_FILE)
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageZanata.cmake ibus-chewing-1.6.1_new/Modules/ManageZanata.cmake
--- ibus-chewing-1.6.1/Modules/ManageZanata.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageZanata.cmake 2016-02-25 22:53:41.000000000 +0800
@@ -0,0 +1,973 @@
+# - Manage Zanata translation service support
+#
+# Zanata is a web-based translation services, this module creates required targets.
+# for common Zanata operation, like put-project, put-version,
+# push source and/or translation, pull translation and/or sources.
+#
+#
+# Included Modules:
+# - ManageFile
+# - ManageMessage
+# - ManageString
+# - ManageTranslation
+#
+# Define following functions:
+# MANAGE_ZANATA([[URL] <serverUrl>] [YES] [ERRORS] [DEBUG]
+# [CHUNK_SIZE <sizeInByte>]
+# [CLEAN_ZANATA_XML]
+# [CLIENT_COMMAND <command> ]
+# [COPY_TRANS <bool>]
+# [CREATE_SKELETONS]
+# [DISABLE_SSL_CERT]
+# [ENCODE_TABS <bool>]
+# [EXCLUDES <filePatternList>]
+# [GENERATE_ZANATA_XML]
+# [INCLUDES <filePatternList>]
+# [LOCALES <locale1,locale2...> ]
+# [PROJECT <projectId>]
+# [PROJECT_CONFIG <zanata.xml>]
+# [PROJECT_DESC "<Description>"]
+# [PROJECT_NAME "<project name>"]
+# [PROJECT_TYPE <projectType>]
+# [SRC_DIR <srcDir>]
+# [TRANS_DIR <transDir>]
+# [TRANS_DIR_PULL <transDir>]
+# [USER_CONFIG <zanata.ini>]
+# [USERNAME <username>]
+# [VERSION <ver>]
+# [ZANATA_EXECUTABLE <command> ]
+# )
+# - Use Zanata as translation service.
+# Zanata is a web-based translation manage system.
+# It uses ${PROJECT_NAME} as project Id (slug);
+# ${PRJ_NAME} as project name;
+# ${PRJ_SUMMARY} as project description
+# (truncate to 80 characters);
+# and ${PRJ_VER} as version, unless VERSION option is defined.
+#
+# In order to use Zanata with command line, you will need either
+# Zanata client:
+# * zanata-cli: Zanata java command line client.
+# * mvn: Maven build system.
+# * zanata: Zanata python command line client.
+#
+# In addition, ~/.config/zanata.ini is also required as it contains API key.
+# API key should not be put in source tree, otherwise it might be
+# misused.
+#
+# Feature disabled warning (M_OFF) will be shown if Zanata client
+# or zanata.ini is missing.
+# * Parameters:
+# + serverUrl: (Optional) The URL of Zanata server
+# Default: https://translate.zanata.org/zanata/
+# + YES: (Optional) Assume yes for all questions.
+# + ERROR: (Optional) Show errors. As "-e" in maven.
+# + DEBUG: (Optional) Show debug message. As "-X" in maven.
+# + CLEAN_ZANATA_XML: (Optional) zanata.xml will be removed with
+# "make clean"
+# + CLIENT_COMMAND command: (Optional)(Depreciated) command path to Zanata client.
+# Use ZANATA_EXECUTABLE instead.
+# Default: "zanata-cli"
+# + COPY_TRANS bool: (Optional) Copy translation from existing versions.
+# Default: "true"
+# + CREATE_SKELETONS: (Optional) Create .po file even if there is no translation
+# + DISABLE_SSL_CERT: (Optional) Disable SSL Cert check.
+# + ENCODE_TABS bool: (Optional) Encode tab as "\t"/
+# + EXCLUDES: (Optional) The file pattern that should not be pushed as source.
+# e.g. **/debug*.properties
+# + GENERATE_ZANATA_XML: (Optional) Automatic generate a zanata.xml
+# + INCLUDES: (Optional) The file pattern that should be pushed as source.
+# e.g. **/debug*.properties
+# + LOCALES locales: Locales to sync with Zanata.
+# Specify the locales to sync with this Zanata server.
+# If not specified, it uses client side system locales.
+# + PROJECT projectId: (Optional) This project ID in Zanata.
+# (Space not allowed)
+# Default: CMake Variable PROJECT_NAME
+# + PROJECT_CONFIG zanata.xml: (Optoional) Path to zanata.xml
+# If not specified, it will try to find zanata.xml in following directories:
+# ${CMAKE_SOURCE_DIRECTORY}
+# ${CMAKE_SOURCE_DIRECTORY}/po
+# ${CMAKE_CURRENT_SOURCE_DIRECTORY}
+# ${CMAKE_CURRENT_SOURCE_DIRECTORY}/po
+# ${CMAKE_CURRENT_BINARY_DIR}
+# if none found, it will set to:
+# ${CMAKE_CURRENT_BINARY_DIR}/zanata.xml
+# + PROJECT_DESC "Project description": (Optoional) Project description in Zanata.
+# Default: ${PRJ_DESCRIPTION}
+# + PROJECT_NAME "project name": (Optional) Project display name in Zanata.
+# (Space allowed)
+# Default: CMake Variable PROJECT_NAME
+# + PROJECT_TYPE projectType::(Optional) Zanata project type
+# for this version.
+# Normally version inherit the project-type from project,
+# if this is not the case, use this parameter to specify
+# the project type.
+# Valid values: file, gettext, podir, properties,
+# utf8properties, xliff
+# + SRC_DIR dir: (Optional) Directory to put source documents like .pot
+# This value will be put in zanata.xml, so it should be relative.
+# Default: "."
+# + TRANS_DIR dir: (Optional) Relative directory to push the translated
+# translated documents like .po
+# This value will be put in zanata.xml, so it should be relative.
+# Default: "."
+# + TRANS_DIR_PULL dir: (Optional) Directory to pull translated documents.
+# Default: CMAKE_CURRENT_BINARY_DIR
+# + USER_CONFIG zanata.ini: (Optoional) Path to zanata.ini
+# Feature disabled warning (M_OFF) will be shown if
+# if zanata.ini is missing.
+# Default: $HOME/.config/zanata.ini
+# + USERNAME username: (Optional) Zanata username
+# + VERSION version: (Optional) The version to push
+# + ZANATA_EXECUTABLE command : (Optional) command path to Zanata client.
+# Default: "zanata-cli"
+# * Targets:
+# + zanata_put_projet: Put project in zanata server.
+# + zanata_put_version: Put version in zanata server.
+# + zanata_push: Push source messages to zanata server.
+# + zanata_push_trans: Push translations to zanata server.
+# + zanata_push_both: Push source messages and translations to
+# zanata server.
+# + zanata_pull: Pull translations from zanata server.
+# * Variable Cached:
+# + ZANATA_CLIENT_EXECUTABLE: Full path of the client program.
+# + ZANATA_CLIENT_TYPE: The type of Zanata client, either
+# java: Java client
+# python: Python client
+# mvn: zanata-maven-plugin
+#
+
+
+IF(DEFINED _MANAGE_ZANATA_CMAKE_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_ZANATA_CMAKE_)
+SET(_MANAGE_ZANATA_CMAKE_ "DEFINED")
+INCLUDE(ManageMessage)
+INCLUDE(ManageFile)
+INCLUDE(ManageString)
+INCLUDE(ManageTranslation)
+INCLUDE(ManageVariable)
+INCLUDE(ManageZanataDefinition)
+INCLUDE(ManageZanataSuggest)
+
+## Variable ZANATA_* are compulsory
+SET(ZANATA_DESCRIPTION_SIZE 80 CACHE STRING "Zanata description size")
+
+#######################################
+# ZANATA "Object"
+#
+MACRO(MANAGE_ZANATA_XML_OBJECT_NEW var url )
+ SET(${var} "url")
+ SET(${var}_url "${url}")
+ FOREACH(arg ${ARGN})
+ IF("${${var}_project}" STREQUAL "")
+ MANAGE_ZANATA_XML_OBJECT_ADD_PROPERTY(${var} "project" "${arg}")
+ ELSEIF("${${var}_version}" STREQUAL "")
+ MANAGE_ZANATA_XML_OBJECT_ADD_PROPERTY(${var} "version" "${arg}")
+ ELSEIF("${${var}_type}" STREQUAL "")
+ MANAGE_ZANATA_XML_OBJECT_ADD_PROPERTY(${var} "type" "${arg}")
+ ENDIF()
+ ENDFOREACH(arg)
+ENDMACRO(MANAGE_ZANATA_XML_OBJECT_NEW)
+
+MACRO(MANAGE_ZANATA_XML_OBJECT_ADD_PROPERTY var key value )
+ LIST(APPEND ${var} "${key}")
+ SET(${var}_${key} "${value}")
+ENDMACRO(MANAGE_ZANATA_XML_OBJECT_ADD_PROPERTY)
+
+FUNCTION(MANAGE_ZANATA_XML_OBJECT_TO_STRING outputVar var)
+ SET(buf "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>")
+ STRING_APPEND(buf "<config xmlns=\"http://zanata.org/namespace/config/\">" "\n")
+ STRING_APPEND(buf " <url>${${var}_url}</url>" "\n")
+ STRING_APPEND(buf " <project>${${var}_project}</project>" "\n")
+ STRING_APPEND(buf " <project-version>${${var}_version}</project-version>" "\n")
+ STRING(TOLOWER "${${var}_type}" projectType)
+ STRING_APPEND(buf " <project-type>${projectType}</project-type>" "\n")
+ IF(NOT "${${var}_srcdir}" STREQUAL "")
+ STRING_APPEND(buf " <src-dir>${${var}_srcdir}</src-dyr>" "\n")
+ ENDIF()
+ IF(NOT "${${var}_transdir}" STREQUAL "")
+ STRING_APPEND(buf " <trans-dir>${${var}_transdir}</trans-dir>" "\n")
+ ENDIF()
+ IF(NOT "${${var}_locales}" STREQUAL "")
+ STRING_APPEND(buf " <locales>" "\n")
+ FOREACH(l ${${${var}_locales})
+ IF(NOT "${${var}_locales_${l}}" STREQUAL "")
+ STRING_APPEND(buf " <locale map-from=\"${${var}_locales_${l}}\">${l}</locale>" "\n")
+ ELSE()
+ STRING_APPEND(buf " <locale>${l}</locale>" "\n")
+ ENDIF()
+ ENDFOREACH(l)
+ STRING_APPEND(buf " </locales>" "\n")
+ ENDIF()
+ STRING_APPEND(buf "</config>" "\n")
+ SET(${outputVar} "${buf}" PARENT_SCOPE)
+ENDFUNCTION(MANAGE_ZANATA_XML_OBJECT_TO_STRING)
+
+#######################################
+## Option Conversion Function
+
+## ZANATA_STRING_DASH_TO_CAMEL_CASE(var opt)
+FUNCTION(ZANATA_STRING_DASH_TO_CAMEL_CASE var opt)
+ STRING_SPLIT(_strList "-" "${opt}")
+ SET(_first 1)
+ SET(_retStr "")
+ FOREACH(_s ${_strList})
+ IF("${_retStr}" STREQUAL "")
+ SET(_retStr "${_s}")
+ ELSE()
+ STRING(LENGTH "${_s}" _len)
+ MATH(EXPR _tailLen ${_len}-1)
+ STRING(SUBSTRING "${_s}" 0 1 _head)
+ STRING(SUBSTRING "${_s}" 1 ${_tailLen} _tail)
+ STRING(TOUPPER "${_head}" _head)
+ STRING(TOLOWER "${_tail}" _tail)
+ STRING_APPEND(_retStr "${_head}${_tail}")
+ ENDIF()
+ ENDFOREACH(_s)
+ SET(${var} "${_retStr}" PARENT_SCOPE)
+ENDFUNCTION(ZANATA_STRING_DASH_TO_CAMEL_CASE)
+
+FUNCTION(ZANATA_STRING_UPPERCASE_UNDERSCORE_TO_LOWERCASE_DASH var optName)
+ STRING(REPLACE "_" "-" result "${optName}")
+ STRING(TOLOWER "${result}" result)
+ SET(${var} "${result}" PARENT_SCOPE)
+ENDFUNCTION(ZANATA_STRING_UPPERCASE_UNDERSCORE_TO_LOWERCASE_DASH)
+
+FUNCTION(ZANATA_STRING_LOWERCASE_DASH_TO_UPPERCASE_UNDERSCORE var optName)
+ STRING(REPLACE "-" "_" result "${optName}")
+ STRING(TOUPPER "${result}" result)
+ SET(${var} "${result}" PARENT_SCOPE)
+ENDFUNCTION(ZANATA_STRING_LOWERCASE_DASH_TO_UPPERCASE_UNDERSCORE)
+
+FUNCTION(ZANATA_CLIENT_OPTNAME_LIST_APPEND_MVN listVar subCommandName optName)
+ IF("${optName}" STREQUAL "BATCH")
+ LIST(APPEND ${listVar} "-B")
+ ELSEIF("${optName}" STREQUAL "ERRORS")
+ LIST(APPEND ${listVar} "-e")
+ ELSEIF("${optName}" STREQUAL "DEBUG")
+ LIST(APPEND ${listVar} "-X")
+ ELSEIF("${optName}" STREQUAL "DISABLE_SSL_CERT")
+ LIST(APPEND ${listVar} "-Dzanata.disableSSLCert")
+ ELSEIF(DEFINED ZANATA_MVN_${subCommandName}_OPTION_NAME_${optName})
+ ## Option name that changed in subCommandName
+ ZANATA_STRING_UPPERCASE_UNDERSCORE_TO_LOWERCASE_DASH(optNameReal
+ "${ZANATA_MVN_${subCommandName}_OPTION_NAME_${optName}}")
+ ZANATA_STRING_DASH_TO_CAMEL_CASE(optNameReal "${optNameReal}")
+ IF(NOT "${ARGN}" STREQUAL "")
+ LIST(APPEND ${listVar} "-Dzanata.${optNameReal}=${ARGN}")
+ ELSE()
+ LIST(APPEND ${listVar} "-Dzanata.${optNameReal}")
+ ENDIF()
+ ELSE()
+ ZANATA_STRING_UPPERCASE_UNDERSCORE_TO_LOWERCASE_DASH(optNameReal "${optName}")
+ ZANATA_STRING_DASH_TO_CAMEL_CASE(optNameReal "${optNameReal}")
+ IF(NOT "${ARGN}" STREQUAL "")
+ LIST(APPEND ${listVar} "-Dzanata.${optNameReal}=${ARGN}")
+ ELSE()
+ LIST(APPEND ${listVar} "-Dzanata.${optNameReal}")
+ ENDIF()
+ ENDIF()
+ SET(${listVar} "${${listVar}}" PARENT_SCOPE)
+ENDFUNCTION(ZANATA_CLIENT_OPTNAME_LIST_APPEND_MVN)
+
+FUNCTION(ZANATA_CLIENT_OPTNAME_LIST_APPEND_JAVA listVar subCommandName optName)
+ IF("${optName}" STREQUAL "BATCH")
+ LIST(APPEND ${listVar} "-B")
+ ELSEIF("${optName}" STREQUAL "ERRORS")
+ LIST(APPEND ${listVar} "-e")
+ ELSEIF("${optName}" STREQUAL "DEBUG")
+ LIST(APPEND ${listVar} "-X")
+ ELSEIF(DEFINED ZANATA_MVN_${subCommandName}_OPTION_NAME_${optName})
+ ## Option name that changed in subCommand
+ ## Option name in mvn and zanata-cli is similar,
+ ## thus use ZANATA_MVN_<subCommandName>...
+ ZANATA_STRING_UPPERCASE_UNDERSCORE_TO_LOWERCASE_DASH(optNameReal
+ "${ZANATA_MVN_${subCommandName}_OPTION_NAME_${optName}}")
+ IF(NOT "${ARGN}" STREQUAL "")
+ LIST(APPEND ${listVar} "--${optNameReal}" "${ARGN}")
+ ELSE()
+ LIST(APPEND ${listVar} "--${optNameReal}")
+ ENDIF()
+ ELSE()
+ ZANATA_STRING_UPPERCASE_UNDERSCORE_TO_LOWERCASE_DASH(optNameReal "${optName}")
+ IF(NOT "${ARGN}" STREQUAL "")
+ LIST(APPEND ${listVar} "--${optNameReal}" "${ARGN}")
+ ELSE()
+ LIST(APPEND ${listVar} "--${optNameReal}")
+ ENDIF()
+ ENDIF()
+ SET(${listVar} "${${listVar}}" PARENT_SCOPE)
+ENDFUNCTION(ZANATA_CLIENT_OPTNAME_LIST_APPEND_JAVA)
+
+FUNCTION(ZANATA_CLIENT_OPTNAME_LIST_APPEND_PYTHON listVar subCommandName optName)
+ IF("${optName}" STREQUAL "BATCH")
+ ## Python client don't have BATCH
+ ELSEIF("${optName}" STREQUAL "ERRORS")
+ ## Python client don't have ERRORS
+ ELSEIF("${optName}" STREQUAL "DEBUG")
+ ## Python client don't have DEBUG
+ ELSE()
+ ZANATA_STRING_UPPERCASE_UNDERSCORE_TO_LOWERCASE_DASH(optNameReal "${optName}")
+ IF(NOT "${ARGN}" STREQUAL "")
+ LIST(APPEND ${listVar} "--${optNameReal}" "${ARGN}")
+ ELSE()
+ LIST(APPEND ${listVar} "--${optNameReal}")
+ ENDIF()
+ ENDIF()
+ SET(${listVar} "${${listVar}}" PARENT_SCOPE)
+ENDFUNCTION(ZANATA_CLIENT_OPTNAME_LIST_APPEND_PYTHON)
+
+FUNCTION(ZANATA_CLIENT_OPTNAME_LIST_APPEND listVar subCommand optName)
+ ZANATA_STRING_LOWERCASE_DASH_TO_UPPERCASE_UNDERSCORE(subCommandName "${subCommand}")
+ ## Skip Options that should not in the final command
+ IF(optName STREQUAL "ZANATA_EXECUTABLE")
+ RETURN()
+ ENDIF()
+
+ ## Invoke corresponding command
+ IF(ZANATA_CLIENT_TYPE STREQUAL "mvn")
+ ZANATA_CLIENT_OPTNAME_LIST_APPEND_MVN(${listVar} ${subCommandName} ${optName} ${ARGN})
+ ELSEIF(ZANATA_CLIENT_TYPE STREQUAL "java")
+ ZANATA_CLIENT_OPTNAME_LIST_APPEND_JAVA(${listVar} ${subCommandName} ${optName} ${ARGN})
+ ELSEIF(ZANATA_CLIENT_TYPE STREQUAL "python")
+ ZANATA_CLIENT_OPTNAME_LIST_APPEND_PYTHON(${listVar} ${subCommandName} ${optName} ${ARGN})
+ ELSE()
+ M_MSG(${M_ERROR} "ManageZanata: Unrecognized zanata client type ${ZANATA_CLIENT_TYPE}")
+ ENDIF()
+ SET(${listVar} "${${listVar}}" PARENT_SCOPE)
+ENDFUNCTION(ZANATA_CLIENT_OPTNAME_LIST_APPEND)
+
+## ZANATA_CLIENT_OPTNAME_LIST_PARSE_APPEND(var subCommand opt)
+## e.g ZANATA_CLIENT_OPTNAME_LIST_PARSE_APPEND(srcDir push "srcDir=.")
+FUNCTION(ZANATA_CLIENT_OPTNAME_LIST_PARSE_APPEND var subCommand opt)
+ STRING_SPLIT(_list "=" "${opt}")
+ ZANATA_CLIENT_OPTNAME_LIST_APPEND(${var} ${subCommand} ${_list})
+ SET(${var} "${${var}}" PARENT_SCOPE)
+ENDFUNCTION(ZANATA_CLIENT_OPTNAME_LIST_PARSE_APPEND)
+
+## Internal
+FUNCTION(ZANATA_CLIENT_SUB_COMMAND var subCommand)
+ IF(ZANATA_CLIENT_TYPE STREQUAL "mvn")
+ SET(${var} "${ZANATA_MAVEN_SUBCOMMAND_PREFIX}:${subCommand}" PARENT_SCOPE)
+ ELSEIF(ZANATA_CLIENT_TYPE STREQUAL "python")
+ ## Python client
+ IF("${subCommand}" STREQUAL "put-project")
+ SET(${var} "project" "create" PARENT_SCOPE)
+ ELSEIF("${subCommand}" STREQUAL "put-version")
+ SET(${var} "version" "create" PARENT_SCOPE)
+ ELSE()
+ SET(${var} "${subCommand}" PARENT_SCOPE)
+ ENDIF()
+ ELSE()
+ ## java
+ SET(${var} "${subCommand}" PARENT_SCOPE)
+ ENDIF()
+ENDFUNCTION(ZANATA_CLIENT_SUB_COMMAND)
+
+## Set variable for ZANATA
+FUNCTION(ZANATA_SET_CACHE_VAR mapVar key)
+ IF(NOT DEFINED ZANATA_OPTION_NAME_${key}_VAR_TYPE)
+ M_MSG(${M_ERROR} "[ManageZanata] key ${key} is invalid")
+ RETURN()
+ ENDIF()
+
+ IF("${${mapVar}_${key}}" STREQUAL "")
+ IF(key STREQUAL "PROJECT")
+ SET(v "${PROJECT_NAME}")
+ ELSEIF(key STREQUAL "PROJECT_CONFIG")
+ SET(v "")
+ FOREACH(d ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/po
+ ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/po)
+ IF(EXISTS "${d}/zanata.xml")
+ SET(v "${d}/zanata.xml")
+ BREAK()
+ ENDIF()
+ ENDFOREACH()
+ IF("${v}" STREQUAL "")
+ SET(v "${CMAKE_CURRENT_BINARY_DIR}/zanata.xml")
+ ENDIF()
+ ELSEIF(key STREQUAL "USER_CONFIG")
+ SET(v "$ENV{HOME}/.config/zanata.ini")
+ ELSE()
+ SET(v "${ZANATA_OPTION_NAME_${key}_DEFAULT}")
+ ENDIF()
+ SET(force "")
+ ELSE()
+ SET(v "${${mapVar}_${key}}")
+ SET(force "FORCE")
+ ENDIF()
+ SET(ZANATA_${key} "${v}" CACHE "${ZANATA_OPTION_NAME_VAR_TYPE}" "ZANATA_${key}" ${force})
+ENDFUNCTION(ZANATA_SET_CACHE_VAR)
+
+## ZANATA_CMAKE_OPTIONS_PARSE_OPTIONSMAP <varPrefix> [ARGN]
+## Parse the arguments from MANAGE_ZANATA.
+## Returns: <varPrefix> contains the specified arguments
+## Defines: <varPrefix>_<ARGUMENT> with value
+FUNCTION(ZANATA_CMAKE_OPTIONS_PARSE_OPTIONS_MAP varPrefix)
+ ## isValue=2 Must be an option value
+ ## isValue=1 Maybe either
+ ## isValue=0 Must be an option name
+ SET(result "")
+ SET(isValue 1)
+ SET(isOptName 1)
+ SET(optName "")
+ SET(dependencyMissing 0)
+
+ FOREACH(opt ${ARGN})
+ IF(isValue EQUAL 1)
+ ## Can be either, determine what it is
+ IF(DEFINED ZANATA_OPTION_NAME_${opt})
+ ## This is a new option name
+ SET(isValue 0)
+ ELSEIF(NOT "${optName}" STREQUAL "")
+ ## This should be an option value
+ SET(isValue 2)
+ ELSEIF(opt MATCHES "^http")
+ ## Zanata server url
+ SET(optName "URL")
+ SET(isValue 2)
+ LIST(APPEND ${varPrefix} "${optName}")
+ ELSE()
+ ## Cannot decided
+ M_MSG(${M_ERROR} "ManageZanata: String '${opt}' is neither a option name, nor a value")
+ ENDIF()
+ ENDIF()
+
+ IF (isValue EQUAL 0)
+ ## Must be option name
+ IF(NOT DEFINED ZANATA_OPTION_NAME_${opt})
+ M_MSG(${M_ERROR} "ManageZanata: Unrecognized option name ${opt}")
+ ENDIF()
+
+ IF(DEFINED ZANATA_OPTION_ALIAS_${opt})
+ SET(optName "${ZANATA_OPTION_ALIAS_${opt}}")
+ ELSE()
+ SET(optName "${opt}")
+ ENDIF()
+ LIST(APPEND ${varPrefix} "${optName}")
+
+ ## Find on next opt is value or option name
+ LIST(GET ZANATA_OPTION_NAME_${optName} 0 isValue)
+
+ ## Set value as 1 for no or optional value, as DEFINED is not reliable for sibling functions
+ IF(isValue LESS 2)
+ SET(${varPrefix}_${optName} "1")
+ SET(${varPrefix}_${optName} "1" PARENT_SCOPE)
+ ENDIF()
+ ELSEIF (${isValue} EQUAL 2)
+ ## Must be option value
+ IF("${optName}" STREQUAL "")
+ M_MSG(${M_ERROR} "ManageZanata: Value without associated option ${opt}")
+ ENDIF()
+ SET(${varPrefix}_${optName} "${opt}")
+ SET(${varPrefix}_${optName} "${opt}" PARENT_SCOPE)
+ SET(optName "")
+ SET(isValue 0)
+ ELSE()
+ ## Invalid Argument
+ M_MSG(${M_ERROR} "ManageZanata: Error: isValue should not be ${isValue} with string '${opt}' ")
+ ENDIF()
+ ENDFOREACH()
+
+ ##== Set cache variable
+ FOREACH(optName ${ZANATA_OPTION_INIT_LIST})
+ ZANATA_SET_CACHE_VAR(${varPrefix} "${optName}")
+ ENDFOREACH()
+
+ ##== Variable that need to check
+ ## USER_CONFIG
+ IF(NOT EXISTS "${ZANATA_USER_CONFIG}")
+ SET(dependencyMissing 1)
+ M_MSG(${M_OFF} "MANAGE_ZANATA: Failed to find zanata.ini at ${ZANATA_USER_CONFIG}")
+ ENDIF()
+
+ ## ZANATA_CLIENT_EXECUTABLE
+ IF("${_o_ZANATA_EXECUTABLE}" STREQUAL "")
+ IF("${ZANATA_CLIENT_EXECUTABLE}" STREQUAL "")
+ SET(zanataClientMissing 0)
+ FIND_PROGRAM_ERROR_HANDLING(ZANATA_CLIENT_EXECUTABLE
+ ERROR_MSG " Zanata support is disabled."
+ ERROR_VAR zanataClientMissing
+ VERBOSE_LEVEL ${M_OFF}
+ FIND_ARGS NAMES zanata-cli mvn zanata
+ )
+ IF(zanataClientMissing EQUAL 1)
+ SET(dependencyMissing 1)
+ M_MSG(${M_OFF} "MANAGE_ZANATA: Failed to find zanata client, Zanata support disabled")
+ ELSE()
+ SET(ZANATA_CLIENT_EXECUTABLE "${ZANATA_CLIENT_EXECUTABLE}"
+ CACHE FILEPATH "Zanata client excutable"
+ )
+ ENDIF()
+ ENDIF()
+ ELSE()
+ LIST(GET ${varPrefix}_ZANATA_EXECUTABLE 0 ZANATA_CLIENT_EXECUTABLE)
+ SET(ZANATA_CLIENT_EXECUTABLE "${${varPrefix}_ZANATA_EXECUTABLE}"
+ CACHE FILEPATH "Zanata client excutable" FORCE
+ )
+ ENDIF()
+ GET_FILENAME_COMPONENT(zanataClientFilename "${ZANATA_CLIENT_EXECUTABLE}" NAME)
+ IF(zanataClientFilename STREQUAL "zanata")
+ SET(ZANATA_CLIENT_TYPE "python" CACHE INTERNAL "Zanata Client Type")
+ ELSEIF(zanataClientFilename STREQUAL "zanata-cli")
+ SET(ZANATA_CLIENT_TYPE "java" CACHE INTERNAL "Zanata Client Type")
+ ELSEIF(zanataClientFilename STREQUAL "mvn")
+ SET(ZANATA_CLIENT_TYPE "mvn" CACHE INTERNAL "Zanata Client Type")
+ ELSE()
+ M_MSG(${M_OFF} "${ZANATA_CLIENT_EXECUTABLE} is not a supported Zanata client")
+ SET(dependencyMissing 1)
+ ENDIF()
+
+ IF(dependencyMissing EQUAL 1)
+ SET(${varPrefix}_DEPENDENCY_MISSING 1 PARENT_SCOPE)
+ RETURN()
+ ENDIF()
+
+ ##== Other Variables
+ IF("${${varPrefix}_PROJECT_DESC}" STREQUAL "")
+ SET(${varPrefix}_PROJECT_DESC "${PRJ_SUMMARY}")
+ ENDIF()
+ STRING(LENGTH "${${varPrefix}_PROJECT_DESC}" _prjSummaryLen)
+ IF(_prjSummaryLen GREATER ${ZANATA_DESCRIPTION_SIZE})
+ STRING(SUBSTRING "${${varPrefix}_PROJECT_DESC}" 0 ${ZANATA_DESCRIPTION_SIZE}
+ ${varPrefix}_PROJECT_DESC
+ )
+ ENDIF()
+ SET(${varPrefix}_PROJECT_DESC "${${varPrefix}_PROJECT_DESC}" PARENT_SCOPE)
+
+ SET(${varPrefix} "${${varPrefix}}" PARENT_SCOPE)
+ENDFUNCTION(ZANATA_CMAKE_OPTIONS_PARSE_OPTIONS_MAP)
+
+# MANAGE_ZANATA_OBTAIN_REAL_COMMAND(<cmdListVar>
+# <subCommand> <optionMapVar>
+# [YES] [BATCH] [ERRORS] [DEBUG]
+# [DISABLE_SSL_CERT]
+# [URL <url>]
+# [USERNAME <username>]
+# [KEY <key>]
+# [USER_CONFIG <zanata.ini>]
+# ...
+# )
+
+FUNCTION(MANAGE_ZANATA_OBTAIN_REAL_COMMAND cmdListVar subCommand optionMapVar)
+ IF(${optionMapVar}_BATCH)
+ IF(${optionMapVar}_BACKEND STREQUAL "python")
+ SET(result "yes" "|" "${ZANATA_CLIENT_EXECUTABLE}")
+ ELSE()
+ SET(result "${ZANATA_CLIENT_EXECUTABLE}")
+ ZANATA_CLIENT_OPTNAME_LIST_APPEND(result "${subCommand}" "BATCH" )
+ ENDIF()
+ ELSE()
+ SET(result "${ZANATA_CLIENT_EXECUTABLE}")
+ ENDIF()
+
+ FOREACH(optName "DEBUG" "ERRORS")
+ IF(${optionMapVar}_${optName})
+ ZANATA_CLIENT_OPTNAME_LIST_APPEND(result "${subCommand}" "${optName}" )
+ ENDIF()
+ ENDFOREACH(optName)
+
+ ## Sub-command
+ ZANATA_CLIENT_SUB_COMMAND(subCommandReal "${subCommand}")
+ LIST(APPEND result "${subCommandReal}")
+
+ ## Explicit Options
+ FOREACH(optName ${${optionMapVar}})
+ IF(optName STREQUAL "BATCH")
+ ELSEIF(optName STREQUAL "DEBUG")
+ ELSEIF(optName STREQUAL "ERRORS")
+ ELSE()
+ IF(${optionMapVar}_${optName})
+ IF(ZANATA_OPTION_NAME_${optName} EQUAL 1 AND "${${optionMapVar}_${optName}}" STREQUAL "1")
+ ZANATA_CLIENT_OPTNAME_LIST_APPEND(result "${subCommand}" "${optName}")
+ ELSE()
+ ZANATA_CLIENT_OPTNAME_LIST_APPEND(result "${subCommand}" "${optName}" "${${optionMapVar}_${optName}}")
+ ENDIF()
+ ENDIF()
+ ENDIF()
+ ENDFOREACH(optName)
+
+ ## Implied options: Mandatory options but not specified.
+ ZANATA_STRING_LOWERCASE_DASH_TO_UPPERCASE_UNDERSCORE(subCommandName "${subCommand}")
+ STRING(TOUPPER "${ZANATA_CLIENT_TYPE}" zanataClientTypeUpper)
+
+ IF(DEFINED ZANATA_${zanataClientTypeUpper}_${subCommandName}_MANDATORY_OPTIONS)
+ FOREACH(optName ${ZANATA_${zanataClientTypeUpper}_${subCommandName}_MANDATORY_OPTIONS})
+ IF(DEFINED ZANATA_${optName})
+ ## Implied options
+ IF("${${optionMapVar}_${optName}}" STREQUAL "")
+ ## Not yet append as exlicit options
+ ZANATA_CLIENT_OPTNAME_LIST_APPEND(result "${subCommand}" "${optName}" "${ZANATA_${optName}}")
+ ENDIF()
+ ENDIF()
+ ENDFOREACH(optName)
+ ENDIF()
+
+ SET(${cmdListVar} "${result}" PARENT_SCOPE)
+ENDFUNCTION(MANAGE_ZANATA_OBTAIN_REAL_COMMAND)
+
+#######################################
+# ZANATA Put_Version
+#
+
+# MANAGE_ZANATA_OBTAIN_PUT_VERSION_COMMAND(<cmdListVar> <optionMapVar>)
+FUNCTION(MANAGE_ZANATA_OBTAIN_PUT_VERSION_COMMAND cmdListVar optionMapVar)
+ ### zanata_put-version
+ MANAGE_ZANATA_OBTAIN_REAL_COMMAND(result put-version ${optionMapVar})
+ SET(${cmdListVar} "${result}" PARENT_SCOPE)
+ENDFUNCTION(MANAGE_ZANATA_OBTAIN_PUT_VERSION_COMMAND)
+
+FUNCTION(MANAGE_ZANATA_PUT_VERSION_TARGETS cmdList)
+ ADD_CUSTOM_TARGET(zanata_put_version
+ COMMAND ${cmdList}
+ COMMENT "zanata_put-version: with ${cmdList}"
+ DEPENDS ${zanataXml}
+ )
+ENDFUNCTION(MANAGE_ZANATA_PUT_VERSION_TARGETS)
+
+
+#######################################
+# ZANATA Push
+#
+
+# MANAGE_ZANATA_OBTAIN_PUSH_COMMAND(<cmdListVar> <optionMapVar>)
+FUNCTION(MANAGE_ZANATA_OBTAIN_PUSH_COMMAND cmdListVar optionMapVar)
+ ### zanata_push
+ MANAGE_ZANATA_OBTAIN_REAL_COMMAND(result push ${optionMapVar})
+ SET(${cmdListVar} "${result}" PARENT_SCOPE)
+ENDFUNCTION(MANAGE_ZANATA_OBTAIN_PUSH_COMMAND)
+
+FUNCTION(MANAGE_ZANATA_PUSH_TARGETS cmdList)
+ ADD_CUSTOM_TARGET(zanata_push
+ COMMAND ${cmdList}
+ COMMENT "zanata_push: with ${cmdList}"
+ DEPENDS ${zanataXml}
+ )
+
+ ### zanata_push_both
+ SET(extraOptions "")
+ ZANATA_CLIENT_OPTNAME_LIST_APPEND(extraOptions "PUSH_TYPE" "both")
+ ADD_CUSTOM_TARGET(zanata_push_both
+ COMMAND ${cmdList} ${extraOptions}
+ COMMENT "zanata_push: with ${cmdList} ${extraOptions}"
+ DEPENDS ${zanataXml}
+ )
+
+ ### zanata_push_trans
+ SET(extraOptions "")
+ ZANATA_CLIENT_OPTNAME_LIST_APPEND(extraOptions "PUSH_TYPE" "trans")
+ ADD_CUSTOM_TARGET(zanata_push_trans
+ COMMAND ${cmdList} ${extraOptions}
+ COMMENT "zanata_push: with ${cmdList} ${extraOptions}"
+ DEPENDS ${zanataXml}
+ )
+ENDFUNCTION(MANAGE_ZANATA_PUSH_TARGETS)
+
+#######################################
+# ZANATA Pull
+#
+
+# MANAGE_ZANATA_OBTAIN_PULL_COMMAND(<cmdListVar> <optionMapVar>)
+FUNCTION(MANAGE_ZANATA_OBTAIN_PULL_COMMAND cmdListVar optionMapVar)
+ ### zanata_pull
+ MANAGE_ZANATA_OBTAIN_REAL_COMMAND(result pull ${optionMapVar})
+ SET(${cmdListVar} "${result}" PARENT_SCOPE)
+ENDFUNCTION(MANAGE_ZANATA_OBTAIN_PULL_COMMAND)
+
+FUNCTION(MANAGE_ZANATA_PULL_TARGETS cmdList)
+ ADD_CUSTOM_TARGET(zanata_pull
+ COMMAND ${cmdList}
+ COMMENT "zanata_pull: with ${cmdList}"
+ DEPENDS ${zanataXml}
+ )
+
+ ### zanata_pull_both
+ SET(extraOptions "")
+ ZANATA_CLIENT_OPTNAME_LIST_APPEND(extraOptions "PULL_TYPE" "both")
+ ADD_CUSTOM_TARGET(zanata_pull_both
+ COMMAND ${cmdList} ${extraOptions}
+ COMMENT "zanata_pull: with ${cmdList} ${extraOptions}"
+ DEPENDS ${zanataXml}
+ )
+
+ENDFUNCTION(MANAGE_ZANATA_PULL_TARGETS)
+
+#######################################
+# ZANATA Main
+#
+
+FUNCTION(MANAGE_ZANATA)
+ ZANATA_CMAKE_OPTIONS_PARSE_OPTIONS_MAP(_o ${ARGN})
+
+ IF(_o_DEPENDENCIES_MISSING EQUAL 1)
+ RETURN()
+ ENDIF()
+
+ ### Common options
+ SET(zanataCommonOptions "")
+ FOREACH(optCName "URL" ${ZANATA_CLIENT_COMMON_VALID_OPTIONS})
+ SET(value "${_o_${optCName}}")
+ IF(value)
+ ZANATA_CLIENT_OPTNAME_LIST_APPEND(zanataCommonOptions "${optCName}" "${value}")
+ ENDIF()
+ ENDFOREACH(optCName)
+
+ ### zanata_put_project
+ SET(exec "")
+ MANAGE_ZANATA_OBTAIN_REAL_COMMAND(exec put-project _o)
+ LIST(APPEND exec ${zanataCommonOptions})
+ ADD_CUSTOM_TARGET(zanata_put_project
+ COMMAND ${exec}
+ COMMENT "zanata_put_project: with ${exec}"
+ )
+
+ ### zanata_put_version
+ MANAGE_ZANATA_OBTAIN_PUT_VERSION_COMMAND(cmdPushList _o)
+ MANAGE_ZANATA_PUT_VERSION_TARGETS("${cmdPushList}")
+
+ ### zanata_push
+ MANAGE_ZANATA_OBTAIN_PUSH_COMMAND(cmdPushList _o)
+ MANAGE_ZANATA_PUSH_TARGETS("${cmdPushList}")
+
+ ### zanata_pull
+ MANAGE_ZANATA_OBTAIN_PULL_COMMAND(cmdPullList _o)
+ MANAGE_ZANATA_PULL_TARGETS("${cmdPullList}")
+ENDFUNCTION(MANAGE_ZANATA)
+
+#######################################
+# MANAGE_ZANATA_XML_MAKE
+#
+FUNCTION(ZANATA_LOCALE_COMPLETE var language script country modifier)
+ IF("${modifier}" STREQUAL "")
+ SET(sModifier "${ZANATA_SUGGEST_MODIFIER_${language}_${script}_}")
+ IF(NOT "${sModifier}" STREQUAL "")
+ SET(modifier "${sModifier}")
+ ENDIF()
+ ENDIF()
+ IF("${country}" STREQUAL "")
+ SET(sCountry "${ZANATA_SUGGEST_COUNTRY_${language}_${script}_}")
+ IF(NOT "${sCountry}" STREQUAL "")
+ SET(country "${sCountry}")
+ ENDIF()
+ ENDIF()
+ IF("${script}" STREQUAL "")
+ SET(sScript "${ZANATA_SUGGEST_SCRIPT_${language}_${country}_${modifier}}")
+ IF(NOT "${sScript}" STREQUAL "")
+ SET(script "${sScript}")
+ ENDIF()
+ ENDIF()
+ SET(${var} "${language}_${script}_${country}_${modifier}" PARENT_SCOPE)
+ENDFUNCTION(ZANATA_LOCALE_COMPLETE var locale)
+
+FUNCTION(ZANATA_JSON_GET_VALUE var key string)
+ STRING(REGEX REPLACE ".*[{,]\"${key}\":\"([^\"]*)\".*" "\\1" ret "${string}")
+ SET(${var} "${ret}" PARENT_SCOPE)
+ENDFUNCTION(ZANATA_JSON_GET_VALUE)
+
+FUNCTION(ZANATA_JSON_TO_ARRAY var string)
+ STRING(REGEX REPLACE "[[]\(.*\)[]]" "\\1" ret1 "${string}")
+ STRING(REGEX REPLACE "},{" "};{" ret "${ret1}")
+ SET(${var} "${ret}" PARENT_SCOPE)
+ENDFUNCTION(ZANATA_JSON_TO_ARRAY)
+
+FUNCTION(ZANATA_REST_GET_PROJECT_VERSION_TYPE var url project version)
+ SET(restUrl "${url}rest/projects/p/${project}/iterations/i/${version}")
+ EXECUTE_PROCESS(COMMAND curl -f -G -s -H "Content-Type:application/json"
+ -H "Accept:application/json" "${restUrl}"
+ RESULT_VARIABLE curlRet
+ OUTPUT_VARIABLE curlOut)
+ IF(NOT curlRet EQUAL 0)
+ M_MSG(${M_OFF} "Failed to get project type from project ${project} to ${version} with ${url}")
+ RETURN()
+ ENDIF()
+ ZANATA_JSON_GET_VALUE(ret "projectType" "${curlOut}")
+ SET(${var} "${ret}" PARENT_SCOPE)
+ENDFUNCTION(ZANATA_REST_GET_PROJECT_VERSION_TYPE)
+
+FUNCTION(ZANATA_REST_GET_PROJECT_VERSION_LOCALES var url project version)
+ SET(restUrl "${url}rest/projects/p/${project}/iterations/i/${version}/locales")
+ EXECUTE_PROCESS(COMMAND curl -f -G -s -H "Content-Type:application/json"
+ -H "Accept:application/json" "${restUrl}"
+ RESULT_VARIABLE curlRet
+ OUTPUT_VARIABLE curlOut)
+ IF(NOT curlRet EQUAL 0)
+ M_MSG(${M_OFF} "Failed to get project type from project ${project} to ${version} with ${url}")
+ RETURN()
+ ENDIF()
+ ZANATA_JSON_TO_ARRAY(nodeArray "${curlOut}")
+ SET(retArray "")
+ FOREACH(node ${nodeArray})
+ ZANATA_JSON_GET_VALUE(l "localeId" "${node}")
+ LIST(APPEND retArray "${l}")
+ ENDFOREACH()
+ SET(${var} "${retArray}" PARENT_SCOPE)
+ENDFUNCTION(ZANATA_REST_GET_PROJECT_VERSION_LOCALES)
+
+FUNCTION(ZANATA_ZANATA_XML_DOWNLOAD zanataXml url project version)
+ GET_FILENAME_COMPONENT(zanataXmlDir "${zanataXml}" PATH)
+ IF(NOT zanataXmlDir)
+ SET(zanataXml "./${zanataXml}")
+ ENDIF()
+
+ ZANATA_REST_GET_PROJECT_VERSION_TYPE(pType "${url}" "${project}" "${version}")
+ MANAGE_ZANATA_XML_OBJECT_NEW(zObj "${url}" "${project}" "${version}" "${pType}")
+ MANAGE_ZANATA_XML_OBJECT_TO_STRING(buf zObj)
+ FILE(WRITE "${zanataXml}" "${buf}")
+ENDFUNCTION(ZANATA_ZANATA_XML_DOWNLOAD)
+
+FUNCTION(ZANATA_BEST_MATCH_LOCALES var serverLocales clientLocales)
+ ## Build "Client Hash"
+ SET(result "")
+ FOREACH(cL ${clientLocales})
+ LOCALE_PARSE_STRING(cLang cScript cCountry cModifier "${cL}")
+ SET(_ZANATA_CLIENT_LOCALE_${cLang}_${cScript}_${cCountry}_${cModifier} "${cL}")
+ ZANATA_LOCALE_COMPLETE(cCLocale "${cLang}" "${cScript}" "${cCountry}" "${cModifier}")
+ SET(compKey "_ZANATA_CLIENT_COMPLETE_LOCALE_${cCLocale}")
+ IF("${${compKey}}" STREQUAL "")
+ SET("${compKey}" "${cL}")
+ ENDIF()
+ ENDFOREACH()
+
+ ## 1st pass: Exact match
+ FOREACH(sL ${serverLocales})
+ LOCALE_PARSE_STRING(sLang sScript sCountry sModifier "${sL}")
+ SET(scKey "_ZANATA_CLIENT_LOCALE_${sLang}_${sScript}_${sCountry}_${sModifier}")
+ ## Exact match locale
+ SET(cLExact "${${scKey}}")
+ IF(NOT "${cLExact}" STREQUAL "")
+ SET(_ZANATA_SERVER_LOCALE_${sL} "${cLExact}")
+ SET(_ZANATA_CLIENT_LOCALE_${cLExact} "${sL}")
+ LIST(APPEND result "${sL},${cLExact}")
+ ENDIF()
+ ENDFOREACH()
+
+ ## 2nd pass: Find the next best match
+ FOREACH(sL ${serverLocales})
+ IF("${_ZANATA_SERVER_LOCALE_${sL}}" STREQUAL "")
+ ## no exact match
+ LOCALE_PARSE_STRING(sLang sScript sCountry sModifier "${sL}")
+
+ ## Locale completion
+ ZANATA_LOCALE_COMPLETE(sCLocale "${sLang}" "${sScript}" "${sCountry}" "${sModifier}")
+ SET(sCompKey "_ZANATA_CLIENT_COMPLETE_LOCALE_${sCLocale}")
+ SET(bestMatch "")
+
+ ## Match client locale after Locale completion
+ SET(cLComp "${${sCompKey}}")
+ IF(NOT "${cLComp}" STREQUAL "")
+ ## And the client locale is not occupied
+ IF("${_ZANATA_CLIENT_LOCALE_${cLComp}}" STREQUAL "")
+ SET(_ZANATA_SERVER_LOCALE_${sL} "${cLComp}")
+ SET(_ZANATA_CLIENT_LOCALE_${cLComp} "${sL}")
+ SET(bestMatch "${cLComp}")
+ ENDIF()
+ ENDIF()
+ IF(bestMatch STREQUAL "")
+ ## No matched, use corrected sL
+ STRING(REPLACE "-" "_" bestMatch "${sL}")
+ IF("${bestMatch}" STREQUAL "${sL}")
+ M_MSG(${M_OFF} "${sL} does not have matched client locale, use as-is.")
+ ELSE()
+ M_MSG(${M_OFF} "${sL} does not have matched client locale, use ${bestMatch}.")
+ ENDIF()
+ ENDIF()
+ LIST(APPEND result "${sL},${bestMatch}")
+ ENDIF()
+ ENDFOREACH()
+ LIST(SORT result)
+ SET(${var} "${result}" PARENT_SCOPE)
+ENDFUNCTION(ZANATA_BEST_MATCH_LOCALES)
+
+FUNCTION(ZANATA_ZANATA_XML_MAP zanataXml zanataXmlIn workDir)
+ INCLUDE(ManageTranslation)
+ INCLUDE(ManageZanataSuggest)
+ FILE(STRINGS "${zanataXmlIn}" zanataXmlLines)
+ FILE(REMOVE ${zanataXml})
+
+ ## Start parsing zanataXmlIn and gather serverLocales
+ SET(serverLocales "")
+ SET(srcDirOrig "")
+ SET(transDirOrig "")
+ FOREACH(line ${zanataXmlLines})
+ IF("${line}" MATCHES "<locale>(.*)</locale>")
+ ## Is a locale string
+ SET(sL "${CMAKE_MATCH_1}")
+ LIST(APPEND serverLocales "${sL}")
+ ELSEIF("${line}" MATCHES "<src-dir>(.*)</src-dir>")
+ SET(srcDirOrig "${CMAKE_MATCH_1}")
+ ELSEIF("${line}" MATCHES "<trans-dir>(.*)</trans-dir>")
+ SET(transDirOrig "${CMAKE_MATCH_1}")
+ ELSEIF("${line}" MATCHES "<url>(.*)</url>")
+ SET(url "${CMAKE_MATCH_1}")
+ ELSEIF("${line}" MATCHES "<project>(.*)</project>")
+ SET(project "${CMAKE_MATCH_1}")
+ ELSEIF("${line}" MATCHES "<project-version>(.*)</project-version>")
+ SET(version "${CMAKE_MATCH_1}")
+ ELSEIF("${line}" MATCHES "<project-type>(.*)</project-type>")
+ SET(projectType "${CMAKE_MATCH_1}")
+ ELSE()
+ IF(zanataXmlIsHeader)
+ STRING_APPEND(zanataXmlHeader "${line}" "\n")
+ ELSE()
+ STRING_APPEND(zanataXmlFooter "${line}" "\n")
+ ENDIF()
+ ## Not a locale string, write as-is
+ ENDIF()
+ ENDFOREACH()
+
+ MANAGE_ZANATA_XML_OBJECT_NEW(zObj ${url} ${project} ${version} ${projectType})
+
+ ## Build "Client Hash"
+ MANAGE_GETTEXT_LOCALES(clientLocales WORKING_DIRECTORY "${workDir}" DETECT_PO_DIR poDir ${ARGN})
+ IF(NOT "${srcDirOrig}" STREQUAL "")
+ SET(poDir "${srcDirOrig}")
+ ELSEIF("${poDir}" STREQUAL "")
+ SET(poDir ".")
+ ENDIF()
+
+ IF(NOT "${transDirOrig}" STREQUAL "")
+ SET(potDir "${transDirOrig}")
+ ELSE()
+ MANAGE_GETTEXT_DETECT_POT_DIR(potDir WORKING_DIRECTORY "${workDir}")
+ IF("${potDir}" STREQUAL "NOTFOUND")
+ M_MSG(${M_ERROR} "ZANATA_ZANATA_XML_MAP: Failed to detect pot dir because .pot files are not found in ${workDir}")
+ ELSEIF("${potDir}" STREQUAL "")
+ SET(potDir ".")
+ ENDIF()
+ ENDIF()
+ MANAGE_ZANATA_XML_OBJECT_ADD_PROPERTY(zObj "src-dir" "${potDir}")
+ MANAGE_ZANATA_XML_OBJECT_ADD_PROPERTY(zObj "trans-dir" "${poDir}")
+
+
+ IF(NOT "${serverLocales}" STREQUAL "")
+ ## If server locales are available, then start matching the client and server locales
+
+ ## clientLocales if not specified
+ IF("${clientLocales}" STREQUAL "")
+ MANAGE_GETTEXT_LOCALES(clientLocales SYSTEM_LOCALES)
+ ENDIF()
+ M_MSG(${M_INFO3} "clientLocales=${clientLocales}")
+
+ LIST(SORT serverLocales)
+ ZANATA_BEST_MATCH_LOCALES(bestMatches "${serverLocales}" "${clientLocales}")
+
+ FOREACH(bM ${bestMatches})
+ STRING_SPLIT(lA "," "${bM}")
+ LIST(GET lA 0 sLocale)
+ LIST(GET lA 1 cLocale)
+ LIST(APPEND zObj_locales "${sLocale}")
+
+ IF(NOT "${sLocale}" STREQUAL "${cLocale}")
+ SET(zObj_locales_${sLocale} "${cLocale}")
+ ENDIF()
+ ENDFOREACH(bM)
+ ENDIF(NOT "${serverLocales}" STREQUAL "")
+
+ MANAGE_ZANATA_XML_OBJECT_TO_STRING(outputBuf zObj)
+ FILE(WRITE "${zanataXml}" "${outputBuf}")
+ENDFUNCTION(ZANATA_ZANATA_XML_MAP)
+
+
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageZanataDefinition.cmake ibus-chewing-1.6.1_new/Modules/ManageZanataDefinition.cmake
--- ibus-chewing-1.6.1/Modules/ManageZanataDefinition.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageZanataDefinition.cmake 2016-01-29 15:15:26.000000000 +0800
@@ -0,0 +1,128 @@
+# Manage Zanata definition
+
+IF(DEFINED _MANAGE_ZANATA_DEFINITION_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_ZANATA_DEFINITION_)
+SET(_MANAGE_ZANATA_DEFINITION_ "DEFINED")
+SET(ZANATA_MAVEN_SUBCOMMAND_PREFIX "org.zanata:zanata-maven-plugin" )
+
+## ZANATA_OPTIONS_NAME_<OPTION> <HAS_VALUE> [<defaultvalue>]
+## OPTION_ID: Start with - : mvn/zanata-cli options
+## Start with : cmake-fedora options
+## Others : zanata-cli formatted long options
+## HAS_VALUE: 0 (no value)
+## 1 (optional value)
+## 2 (mandatory value)
+
+SET(ZANATA_OPTION_NAME_YES 0)
+SET(ZANATA_OPTION_NAME_BATCH 0)
+SET(ZANATA_OPTION_NAME_ERRORS 0)
+SET(ZANATA_OPTION_NAME_DEBUG 0)
+SET(ZANATA_OPTION_NAME_CLEAN_ZANATA_XML 0)
+SET(ZANATA_OPTION_NAME_CLIENT_COMMAND 2)
+SET(ZANATA_OPTION_NAME_ZANATA_EXECUTABLE 2)
+SET(ZANATA_OPTION_NAME_ZANATA_EXECUTABLE_VAR_TYPE "FILEPATH")
+SET(ZANATA_OPTION_NAME_COPY_TRANS 1)
+SET(ZANATA_OPTION_NAME_CREATE_SKELETONS 1)
+SET(ZANATA_OPTION_NAME_DISABLE_SSL_CERT 1)
+SET(ZANATA_OPTION_NAME_ENCODE_TABS 1)
+SET(ZANATA_OPTION_NAME_EXCLUDES 2)
+SET(ZANATA_OPTION_NAME_GENERATE_ZANATA_XML 0)
+SET(ZANATA_OPTION_NAME_INCLUDES 2)
+SET(ZANATA_OPTION_NAME_LOCALES 2)
+SET(ZANATA_OPTION_NAME_PROJECT 2)
+SET(ZANATA_OPTION_NAME_PROJECT_VAR_TYPE "STRING")
+SET(ZANATA_OPTION_NAME_PROJECT_CONFIG 2)
+SET(ZANATA_OPTION_NAME_PROJECT_CONFIG_VAR_TYPE "FILEPATH")
+SET(ZANATA_OPTION_NAME_PROJECT_DESC 2)
+SET(ZANATA_OPTION_NAME_PROJECT_NAME 2)
+SET(ZANATA_OPTION_NAME_PROJECT_TYPE 2)
+SET(ZANATA_OPTION_NAME_PROJECT_TYPE_DEFAULT "gettext")
+SET(ZANATA_OPTION_NAME_PROJECT_TYPE_VAR_TYPE "STRING")
+SET(ZANATA_OPTION_NAME_SRC_DIR 2)
+SET(ZANATA_OPTION_NAME_SRC_DIR_DEFAULT ".")
+SET(ZANATA_OPTION_NAME_SRC_DIR_VAR_TYPE "FILEPATH")
+SET(ZANATA_OPTION_NAME_TRANS_DIR 2)
+SET(ZANATA_OPTION_NAME_TRANS_DIR_DEFAULT ".")
+SET(ZANATA_OPTION_NAME_TRANS_DIR_VAR_TYPE "FILEPATH")
+SET(ZANATA_OPTION_NAME_TRANS_DIR_PULL 2)
+SET(ZANATA_OPTION_NAME_TRANS_DIR_PULL_VAR_TYPE "FILE_PATH")
+SET(ZANATA_OPTION_NAME_TRANS_DIR_PULL 2)
+SET(ZANATA_OPTION_NAME_URL 2)
+SET(ZANATA_OPTION_NAME_URL_DEFAULT "https://translate.zanata.org/zanata/")
+SET(ZANATA_OPTION_NAME_URL_VAR_TYPE "STRING")
+SET(ZANATA_OPTION_NAME_USERNAME 2)
+SET(ZANATA_OPTION_NAME_USER_CONFIG 2)
+SET(ZANATA_OPTION_NAME_USER_CONFIG_VAR_TYPE "FILE_PATH")
+SET(ZANATA_OPTION_NAME_VERSION 2)
+SET(ZANATA_OPTION_NAME_VERSION_DEFAULT "master")
+SET(ZANATA_OPTION_NAME_VERSION_VAR_TYPE "STRING")
+
+SET(ZANATA_OPTION_INIT_LIST PROJECT PROJECT_CONFIG SRC_DIR TRANS_DIR TRANS_DIR_PULL URL USER_CONFIG VERSION)
+
+SET(ZANATA_OPTION_ALIAS_YES "BATCH")
+SET(ZANATA_OPTION_ALIAS_CLIENT_COMMAND "ZANATA_EXECUTABLE")
+
+###== Start Option name substitute given sub-command
+### Format: ZANATA_<BACKEND>_<SUBCOMMAND>_OPTION_NAME_<OPTION> <ACTUAL_NAME_IN_SUBCOMMAND>
+###==== Start backend MVN and ZANATA_CLI
+SET(ZANATA_MVN_PUT_PROJECT_OPTION_NAME_PROJECT "PROJECT_SLUG")
+SET(ZANATA_MVN_PUT_PROJECT_OPTION_NAME_PROJECT_TYPE "DEFAULT_PROJECT_TYPE")
+SET(ZANATA_MVN_PUT_VERSION_OPTION_NAME_PROJECT "VERSION_PROJECT")
+SET(ZANATA_MVN_PUT_VERSION_OPTION_NAME_VERSION "VERSION_SLUG")
+SET(ZANATA_MVN_PUSH_OPTION_NAME_VERSION "PROJECT_VERSION")
+SET(ZANATA_MVN_PULL_OPTION_NAME_VERSION "PROJECT_VERSION")
+SET(ZANATA_MVN_PULL_OPTION_NAME_TRANS_DIR_PULL "TRANS_DIR")
+
+###==== Start backend ZANATA
+SET(ZANATA_ZANATA_PULL_OPTION_NAME_TRANS_DIR_PULL "TRANS_DIR")
+###== End Option name substitute given sub-command
+
+SET(ZANATA_MVN_PUT_PROJECT_MANDATORY_OPTIONS "PROJECT" "PROJECT_NAME" "PROJECT_DESC" "PROJECT_TYPE")
+SET(ZANATA_MVN_PUT_VERSION_MANDATORY_OPTIONS "PROJECT" "VERSION")
+SET(ZANATA_MVN_PUSH_MANDATORY_OPTIONS "PROJECT_CONFIG")
+SET(ZANATA_MVN_PULL_MANDATORY_OPTIONS "PROJECT_CONFIG")
+
+SET(ZANATA_JAVA_PUT_PROJECT_MANDATORY_OPTIONS "PROJECT" "PROJECT_NAME" "PROJECT_DESC" "PROJECT_TYPE")
+SET(ZANATA_JAVA_PUT_VERSION_MANDATORY_OPTIONS "PROJECT" "VERSION")
+SET(ZANATA_JAVA_PUSH_MANDATORY_OPTIONS "PROJECT_CONFIG")
+SET(ZANATA_JAVA_PULL_MANDATORY_OPTIONS "PROJECT_CONFIG")
+
+SET(ZANATA_PYTHON_PUT_PROJECT_MANDATORY_OPTIONS "PROJECT" "PROJECT_NAME" "PROJECT_DESC" "PROJECT_TYPE")
+SET(ZANATA_PYTHON_PUT_VERSION_MANDATORY_OPTIONS "PROJECT" "VERSION")
+SET(ZANATA_PYTHON_PUSH_MANDATORY_OPTIONS "PROJECT_CONFIG")
+SET(ZANATA_PYTHON_PULL_MANDATORY_OPTIONS "PROJECT_CONFIG")
+
+SET(ZANATA_CLIENT_COMMON_VALID_OPTIONS "DISABLE_SSL_CERT" "URL" "USERNAME" "KEY" "USER_CONFIG" "PROJECT" "PROJECT_TYPE")
+SET(ZANATA_CLIENT_PROJECT_VALID_OPTIONS "PROJECT_NAME" "PROJECT_DESC")
+SET(ZANATA_CLIENT_VERSION_COMMON_VALID_OPTIONS "VERSION" )
+SET(ZANATA_CLIENT_PUSH_PULL_VALID_OPTIONS "LOCALES" "PROJECT_CONFIG" "SRC_DIR" "TRANS_DIR" )
+SET(ZANATA_CLIENT_PUSH_VALID_OPTIONS "COPY_TRANS" "EXCLUDES" "INCLUDES" )
+SET(ZANATA_CLIENT_PULL_VALID_OPTIONS "CREATE_SKELETONS" "ENCODE_TABS" "TRANS_DIR_PULL")
+SET(MANAGE_ZANATA_VALID_OPTIONS "GENERATE_ZANATA_XML" "CLEAN_ZANATA_XML"
+ "CLIENT_COMMAND"
+ ${ZANATA_CLIENT_GLOBAL_VALID_OPTIONS}
+ ${ZANATA_CLIENT_COMMON_VALID_OPTIONS}
+ ${ZANATA_CLIENT_PROJECT_VALID_OPTIONS}
+ ${ZANATA_CLIENT_VERSION_COMMON_VALID_OPTIONS}
+ ${ZANATA_CLIENT_PUSH_PULL_VALID_OPTIONS}
+ ${ZANATA_CLIENT_PUSH_VALID_OPTIONS}
+ ${ZANATA_CLIENT_PULL_VALID_OPTIONS}
+ )
+
+## Valid subcommand for each client
+SET(ZANATA_SUBCOMMAND_PUT_PROJECT_VALID_OPTIONS
+ ${ZANATA_CLIENT_COMMON_VALID_OPTIONS} ${ZANATA_CLIENT_PROJECT_VALID_OPTIONS}
+ )
+SET(ZANATA_SUBCOMMAND_PUT_VERSION_VALID_OPTIONS
+ ${ZANATA_CLIENT_COMMON_VALID_OPTIONS} ${ZANATA_MVN_PUT_VERSION_MANDATORY_OPTIONS}
+ )
+SET(ZANATA_SUBCOMMAND_PUSH_VALID_OPTIONS
+ ${ZANATA_CLIENT_COMMON_VALID_OPTIONS} ${ZANATA_CLIENT_PUSH_PULL_VALID_OPTIONS}
+ ${ZANATA_CLIENT_PUSH_VALID_OPTIONS}
+ )
+SET(ZANATA_SUBCOMMAND_PULL_VALID_OPTIONS
+ ${ZANATA_CLIENT_COMMON_VALID_OPTIONS} ${ZANATA_CLIENT_PUSH_PULL_VALID_OPTIONS}
+ ${ZANATA_CLIENT_PULL_VALID_OPTIONS}
+ )
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageZanataScript.cmake ibus-chewing-1.6.1_new/Modules/ManageZanataScript.cmake
--- ibus-chewing-1.6.1/Modules/ManageZanataScript.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageZanataScript.cmake 2015-12-17 17:43:31.000000000 +0800
@@ -0,0 +1,201 @@
+# - Manage Zanata Script
+# Zanata related scripts to be invoked in command line.
+
+MACRO(MANAGE_ZANATA_SCRIPT_PRINT_USAGE)
+ MESSAGE("Manage Zanata script: This script is not recommend for end users
+
+cmake -D cmd=zanata_xml_download
+ -D url=<zanata_server_url>
+ -D project=<project_id>
+ -D version=<version_id>
+ [-D zanata_xml=<zanata.xml>]
+ [-D \"<var>=<value>\"]
+ -P <CmakeModulePath>/ManageZanataScript.cmake
+
+ Download zanata.xml from Zanata Server
+ Options:
+ url: Zanata server URL (e.g. https://translate.zanata.org/zanata/)
+ This should be indentical to what is written in zanata.ini.
+ project: project ID in Zanata.
+ version: version ID in Zanata.
+ zanata_xml: (Optional) zanata.xml output file.
+ Default: zanata.xml
+
+cmake -D cmd=zanata_xml_map
+ [-D \"locales=<locale1;locale2...>\"]
+ [-D system_locales=1]
+ [-D po_dir=<po_dir> ]
+ [-D trans_dir=<trans_dir> ]
+ [-D zanata_xml=<zanata.xml>]
+ [-D zanata_xml_in=<zanata.xml>]
+ [-D \"<var>=<value>\"]
+ -P <CmakeModulePath>/ManageZanataScript.cmake
+
+ Map the zanata server locales with client translation files,
+ so it will output correctly.
+ Options:
+ system_locales: use system locales in /usr/share/locale.
+ locales: client-side locales to be mapped.
+ po_dir: (Deprecated) Use trans_dir instead
+ trans_dir: (Optional) Specify base directory of translation files.
+ zanata_xml: (Optional) zanata.xml output file.
+ Default: zanata.xml
+ zanata_xml_in: (Optional) zanata.xml input file.
+ Default: zanata.xml
+
+cmake -D cmd=zanata_xml_make
+ -D url=<zanata_server_url>
+ -D project=<project_id>
+ -D version=<version_id>
+ [-D \"locales=<locale1;locale2...>\"]
+ [-D system_locales=1]
+ [-D po_dir=<po_dir> ]
+ [-D trans_dir=<trans_dir> ]
+ [-D zanata_xml=<zanata.xml>]
+ [-D \"<var>=<value>\"]
+ -P <CmakeModulePath>/ManageZanataScript.cmake
+
+ Make a working zanata.xml.
+ Options:
+ url: Zanata server URL (e.g. https://translate.zanata.org/zanata/)
+ This should be indentical to what is written in zanata.ini.
+ po_dir: (Deprecated) Use trans_dir instead
+ trans_dir: (Optional) Specify base directory of translation files.
+ project: project ID in Zanata.
+ version: version ID in Zanata.
+ system_locales: use system locales in /usr/share/locale.
+ locales: client-side locales to be mapped.
+ zanata_xml: (Optional) zanata.xml output file.
+ Default: zanata.xml
+ "
+ )
+ENDMACRO(MANAGE_ZANATA_SCRIPT_PRINT_USAGE)
+
+MACRO(ZANATA_XML_DOWNLOAD_CHECK)
+ SET(_requirementMet 1)
+ IF(NOT url)
+ M_MSG("${M_ERROR}" "Requires url")
+ SET(_requirementMet 0)
+ ENDIF()
+ IF(NOT project)
+ M_MSG("${M_ERROR}" "Requires project")
+ SET(_requirementMet 0)
+ ENDIF()
+ IF(NOT version)
+ M_MSG("${M_ERROR}" "Requires version")
+ SET(_requirementMet 0)
+ ENDIF()
+ IF(NOT _requirementMet)
+ RETURN()
+ ENDIF()
+ IF(NOT zanata_xml)
+ SET(zanata_xml "zanata.xml")
+ ENDIF()
+ ZANATA_ZANATA_XML_DOWNLOAD("${zanata_xml}" "${url}" "${project}" "${version}")
+ENDMACRO()
+
+MACRO(ZANATA_XML_MAP_CHECK)
+ SET(_requirementMet 1)
+ IF(NOT zanata_xml_in)
+ SET(zanata_xml_in "zanata.xml")
+ ENDIF()
+
+ IF(NOT EXISTS ${zanata_xml_in})
+ M_MSG("${M_ERROR}" "File not exists: ${zanata_xml_in}")
+ SET(_requirementMet 0)
+ ENDIF()
+
+ IF(NOT zanata_xml)
+ SET(zanata_xml "zanata.xml")
+ ENDIF()
+
+ IF(NOT _requirementMet)
+ RETURN()
+ ENDIF()
+
+ IF(NOT "${po_dir}" STREQUAL "")
+ SET(trans_dir "${po_dir}")
+ ENDIF()
+
+ IF("${trans_dir}" STREQUAL "")
+ SET(trans_dir ".")
+ ENDIF()
+
+ SET(extOptions "")
+ IF("${system_locales}" STREQUAL "1")
+ LIST(APPEND extOptions "SYSTEM_LOCALES")
+ ELSEIF(NOT "${locales}" STREQUAL "")
+ LIST(APPEND extOptions "LOCALES" "${locales}")
+ ENDIF()
+ ZANATA_ZANATA_XML_MAP("${zanata_xml}" "${zanata_xml_in}" "${trans_dir}" ${extOptions})
+ENDMACRO()
+
+FUNCTION(ZANATA_XML_MAKE_CHECK)
+ IF(NOT zanata_xml)
+ SET(zanata_xml "zanata.xml")
+ ENDIF()
+ SET(zanata_xml_in "${zanata_xml}")
+
+ IF(NOT EXISTS "${zanata_xml_in}")
+ ZANATA_XML_DOWNLOAD_CHECK()
+ ENDIF()
+
+ ZANATA_XML_MAP_CHECK()
+ENDFUNCTION()
+
+SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
+
+#######################################
+# Determine CMAKE_FEDORA_MODULE_DIR
+#
+
+## It is possible that current dir is in NO_PACK/FedPkg/<prj>
+LIST(INSERT CMAKE_MODULE_PATH 0
+ ${CMAKE_SOURCE_DIR}/Modules ${CMAKE_SOURCE_DIR}/cmake-fedora/Modules
+ ${CMAKE_SOURCE_DIR}/../../../Modules
+ ${CMAKE_SOURCE_DIR}/../../../cmake-fedora/Modules
+ ${CMAKE_SOURCE_DIR}
+ )
+
+IF(CMAKE_SCRIPT_MODE_FILE)
+ GET_FILENAME_COMPONENT(CMAKE_FEDORA_SCRIPT_DIR ${CMAKE_SCRIPT_MODE_FILE}
+ PATH)
+ LIST(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_FEDORA_SCRIPT_DIR}")
+ENDIF()
+
+IF(cmake_fedora_module_dir)
+ LIST(INSERT CMAKE_MODULE_PATH 0 "${cmake_fedora_module_dir}")
+ENDIF()
+
+INCLUDE(ManageMessage RESULT_VARIABLE MANAGE_MODULE_PATH)
+IF(NOT MANAGE_MODULE_PATH)
+ MESSAGE(FATAL_ERROR "ManageMessage.cmake cannot be found in ${CMAKE_MODULE_PATH}")
+ENDIF()
+GET_FILENAME_COMPONENT(CMAKE_FEDORA_MODULE_DIR
+ "${MANAGE_MODULE_PATH}" PATH)
+
+INCLUDE(ManageEnvironmentCommon)
+INCLUDE(ManageString)
+INCLUDE(ManageVariable)
+INCLUDE(ManageVersion)
+INCLUDE(ManageZanata)
+
+IF(NOT DEFINED cmd)
+ MANAGE_ZANATA_SCRIPT_PRINT_USAGE()
+ELSE()
+ IF("${cmd}" STREQUAL "zanata_xml_download")
+ ZANATA_XML_DOWNLOAD_CHECK()
+ ELSEIF("${cmd}" STREQUAL "zanata_xml_map")
+ ZANATA_XML_MAP_CHECK()
+ ELSEIF("${cmd}" STREQUAL "zanata_xml_make")
+ ZANATA_XML_MAKE_CHECK()
+ ELSE()
+ MANAGE_ZANATA_SCRIPT_PRINT_USAGE()
+ M_MSG(${M_FATAL} "Invalid sub-command ${cmd}")
+ ENDIF()
+ENDIF()
+
+
+
+
+
diff -Nura ibus-chewing-1.6.1/Modules/ManageZanataSuggest.cmake ibus-chewing-1.6.1_new/Modules/ManageZanataSuggest.cmake
--- ibus-chewing-1.6.1/Modules/ManageZanataSuggest.cmake 1970-01-01 08:00:00.000000000 +0800
+++ ibus-chewing-1.6.1_new/Modules/ManageZanataSuggest.cmake 2015-12-17 17:43:31.000000000 +0800
@@ -0,0 +1,208 @@
+# Manage the list of suggest country
+# Initial generated on Fedora 20 with:
+# locale -a | grep -e "^[a-z]\+_[A-Z]\+$" | sort -u | sed -e "s/\([a-z]\+\)/SET(ZANATA_SUGGEST_COUNTRY_\1 /g" | sed -e 's/ _\([A-Z]\+\)/ "\1")/'
+
+IF(DEFINED _MANAGE_ZANATA_SUGGEST_)
+ RETURN()
+ENDIF(DEFINED _MANAGE_ZANATA_SUGGEST_)
+SET(_MANAGE_ZANATA_SUGGEST_ "DEFINED")
+
+SET(ZANATA_SUGGEST_COUNTRY_aa__ "ET")
+SET(ZANATA_SUGGEST_COUNTRY_ach__ "UG")
+SET(ZANATA_SUGGEST_COUNTRY_af__ "ZA")
+SET(ZANATA_SUGGEST_COUNTRY_am__ "ET")
+SET(ZANATA_SUGGEST_COUNTRY_aln__ "AL")
+SET(ZANATA_SUGGEST_COUNTRY_an__ "ES")
+SET(ZANATA_SUGGEST_COUNTRY_anp__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_ar__ "SA")
+SET(ZANATA_SUGGEST_COUNTRY_as__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_ast__ "ES")
+SET(ZANATA_SUGGEST_COUNTRY_ayc__ "PE")
+SET(ZANATA_SUGGEST_COUNTRY_az__ "AZ")
+SET(ZANATA_SUGGEST_COUNTRY_bal__ "PK")
+SET(ZANATA_SUGGEST_COUNTRY_be__ "BY")
+SET(ZANATA_SUGGEST_COUNTRY_bem__ "ZM")
+SET(ZANATA_SUGGEST_COUNTRY_ber__ "DZ")
+SET(ZANATA_SUGGEST_COUNTRY_bg__ "BG")
+SET(ZANATA_SUGGEST_COUNTRY_bho__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_bn__ "BD")
+SET(ZANATA_SUGGEST_COUNTRY_bo__ "CN")
+SET(ZANATA_SUGGEST_COUNTRY_br__ "FR")
+SET(ZANATA_SUGGEST_COUNTRY_brx__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_bs__ "BA")
+SET(ZANATA_SUGGEST_COUNTRY_byn__ "ER")
+SET(ZANATA_SUGGEST_COUNTRY_ca__ "AD")
+SET(ZANATA_SUGGEST_COUNTRY_crh__ "UA")
+SET(ZANATA_SUGGEST_COUNTRY_csb__ "PL")
+SET(ZANATA_SUGGEST_COUNTRY_cs__ "CZ")
+SET(ZANATA_SUGGEST_COUNTRY_cv__ "RU")
+SET(ZANATA_SUGGEST_COUNTRY_cy__ "GB")
+SET(ZANATA_SUGGEST_COUNTRY_da__ "DK")
+SET(ZANATA_SUGGEST_COUNTRY_de__ "DE")
+SET(ZANATA_SUGGEST_COUNTRY_doi__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_dv__ "MV")
+SET(ZANATA_SUGGEST_COUNTRY_dz__ "BT")
+SET(ZANATA_SUGGEST_COUNTRY_el__ "GR")
+SET(ZANATA_SUGGEST_COUNTRY_en__ "US")
+SET(ZANATA_SUGGEST_COUNTRY_eo__ "")
+SET(ZANATA_SUGGEST_COUNTRY_es__ "ES")
+SET(ZANATA_SUGGEST_COUNTRY_et__ "EE")
+SET(ZANATA_SUGGEST_COUNTRY_eu__ "ES")
+SET(ZANATA_SUGGEST_COUNTRY_fa__ "IR")
+SET(ZANATA_SUGGEST_COUNTRY_ff__ "SN")
+SET(ZANATA_SUGGEST_COUNTRY_fi__ "FI")
+SET(ZANATA_SUGGEST_COUNTRY_fil__ "PH")
+SET(ZANATA_SUGGEST_COUNTRY_fo__ "FO")
+SET(ZANATA_SUGGEST_COUNTRY_fr__ "FR")
+SET(ZANATA_SUGGEST_COUNTRY_fur__ "IT")
+SET(ZANATA_SUGGEST_COUNTRY_fy__ "DE")
+SET(ZANATA_SUGGEST_COUNTRY_ga__ "IE")
+SET(ZANATA_SUGGEST_COUNTRY_gd__ "GB")
+SET(ZANATA_SUGGEST_COUNTRY_gez__ "ER")
+SET(ZANATA_SUGGEST_COUNTRY_gl__ "ES")
+SET(ZANATA_SUGGEST_COUNTRY_gu__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_gv__ "GB")
+SET(ZANATA_SUGGEST_COUNTRY_ha__ "NG")
+SET(ZANATA_SUGGEST_COUNTRY_he__ "IL")
+SET(ZANATA_SUGGEST_COUNTRY_hi__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_hne__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_hr__ "HR")
+SET(ZANATA_SUGGEST_COUNTRY_hsb__ "DE")
+SET(ZANATA_SUGGEST_COUNTRY_ht__ "HT")
+SET(ZANATA_SUGGEST_COUNTRY_hu__ "HU")
+SET(ZANATA_SUGGEST_COUNTRY_hy__ "AM")
+SET(ZANATA_SUGGEST_COUNTRY_ia__ "FR")
+SET(ZANATA_SUGGEST_COUNTRY_id__ "ID")
+SET(ZANATA_SUGGEST_COUNTRY_ig__ "NG")
+SET(ZANATA_SUGGEST_COUNTRY_ilo__ "PH")
+SET(ZANATA_SUGGEST_COUNTRY_ik__ "CA")
+SET(ZANATA_SUGGEST_COUNTRY_is__ "IS")
+SET(ZANATA_SUGGEST_COUNTRY_it__ "IT")
+SET(ZANATA_SUGGEST_COUNTRY_iu__ "CA")
+SET(ZANATA_SUGGEST_COUNTRY_iw__ "IL")
+SET(ZANATA_SUGGEST_COUNTRY_ja__ "JP")
+SET(ZANATA_SUGGEST_COUNTRY_ka__ "GE")
+SET(ZANATA_SUGGEST_COUNTRY_kk__ "KZ")
+SET(ZANATA_SUGGEST_COUNTRY_kl__ "GL")
+SET(ZANATA_SUGGEST_COUNTRY_km__ "KH")
+SET(ZANATA_SUGGEST_COUNTRY_kn__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_kok__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_ko__ "KR")
+SET(ZANATA_SUGGEST_COUNTRY_ks__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_ku__ "TR")
+SET(ZANATA_SUGGEST_COUNTRY_kw__ "GB")
+SET(ZANATA_SUGGEST_COUNTRY_ky__ "KG")
+SET(ZANATA_SUGGEST_COUNTRY_lb__ "LU")
+SET(ZANATA_SUGGEST_COUNTRY_lg__ "UG")
+SET(ZANATA_SUGGEST_COUNTRY_li__ "BE")
+SET(ZANATA_SUGGEST_COUNTRY_lij__ "IT")
+SET(ZANATA_SUGGEST_COUNTRY_li__ "NL")
+SET(ZANATA_SUGGEST_COUNTRY_lo__ "LA")
+SET(ZANATA_SUGGEST_COUNTRY_lt__ "LT")
+SET(ZANATA_SUGGEST_COUNTRY_lv__ "LV")
+SET(ZANATA_SUGGEST_COUNTRY_mag__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_mai__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_mg__ "MG")
+SET(ZANATA_SUGGEST_COUNTRY_mhr__ "RU")
+SET(ZANATA_SUGGEST_COUNTRY_mi__ "NZ")
+SET(ZANATA_SUGGEST_COUNTRY_mk__ "MK")
+SET(ZANATA_SUGGEST_COUNTRY_ml__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_mni__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_mn__ "MN")
+SET(ZANATA_SUGGEST_COUNTRY_mr__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_ms__ "MY")
+SET(ZANATA_SUGGEST_COUNTRY_mt__ "MT")
+SET(ZANATA_SUGGEST_COUNTRY_my__ "MM")
+SET(ZANATA_SUGGEST_COUNTRY_nan__ "TW")
+SET(ZANATA_SUGGEST_COUNTRY_nb__ "NO")
+SET(ZANATA_SUGGEST_COUNTRY_nds__ "DE")
+SET(ZANATA_SUGGEST_COUNTRY_ne__ "NP")
+SET(ZANATA_SUGGEST_COUNTRY_nhn__ "MX")
+SET(ZANATA_SUGGEST_COUNTRY_niu__ "NU")
+SET(ZANATA_SUGGEST_COUNTRY_nl__ "NL")
+SET(ZANATA_SUGGEST_COUNTRY_nn__ "NO")
+SET(ZANATA_SUGGEST_COUNTRY_no__ "NO")
+SET(ZANATA_SUGGEST_COUNTRY_nr__ "ZA")
+SET(ZANATA_SUGGEST_COUNTRY_nso__ "ZA")
+SET(ZANATA_SUGGEST_COUNTRY_oc__ "FR")
+SET(ZANATA_SUGGEST_COUNTRY_om__ "ET")
+SET(ZANATA_SUGGEST_COUNTRY_or__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_os__ "RU")
+SET(ZANATA_SUGGEST_COUNTRY_pa__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_pap__ "AN")
+SET(ZANATA_SUGGEST_COUNTRY_pl__ "PL")
+SET(ZANATA_SUGGEST_COUNTRY_ps__ "AF")
+SET(ZANATA_SUGGEST_COUNTRY_pt__ "PT")
+SET(ZANATA_SUGGEST_COUNTRY_ro__ "RO")
+SET(ZANATA_SUGGEST_COUNTRY_ru__ "RU")
+SET(ZANATA_SUGGEST_COUNTRY_rw__ "RW")
+SET(ZANATA_SUGGEST_COUNTRY_sa__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_sat__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_sc__ "IT")
+SET(ZANATA_SUGGEST_COUNTRY_sd__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_se__ "NO")
+SET(ZANATA_SUGGEST_COUNTRY_shs__ "CA")
+SET(ZANATA_SUGGEST_COUNTRY_sid__ "ET")
+SET(ZANATA_SUGGEST_COUNTRY_si__ "LK")
+SET(ZANATA_SUGGEST_COUNTRY_sk__ "SK")
+SET(ZANATA_SUGGEST_COUNTRY_sl__ "SI")
+SET(ZANATA_SUGGEST_COUNTRY_so__ "SO")
+SET(ZANATA_SUGGEST_COUNTRY_sq__ "AL")
+SET(ZANATA_SUGGEST_COUNTRY_sq__ "MK")
+SET(ZANATA_SUGGEST_COUNTRY_sr__ "RS")
+SET(ZANATA_SUGGEST_COUNTRY_sr__latin "RS")
+SET(ZANATA_SUGGEST_COUNTRY_sr_Cyrl_ "RS")
+SET(ZANATA_SUGGEST_COUNTRY_sr_Latn_ "RS")
+SET(ZANATA_SUGGEST_COUNTRY_sr_Latn_latin "RS")
+SET(ZANATA_SUGGEST_COUNTRY_ss__ "ZA")
+SET(ZANATA_SUGGEST_COUNTRY_st__ "ZA")
+SET(ZANATA_SUGGEST_COUNTRY_sv__ "SE")
+SET(ZANATA_SUGGEST_COUNTRY_sw__ "TZ")
+SET(ZANATA_SUGGEST_COUNTRY_szl__ "PL")
+SET(ZANATA_SUGGEST_COUNTRY_ta__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_te__ "IN")
+SET(ZANATA_SUGGEST_COUNTRY_tg__ "TJ")
+SET(ZANATA_SUGGEST_COUNTRY_th__ "TH")
+SET(ZANATA_SUGGEST_COUNTRY_ti__ "ET")
+SET(ZANATA_SUGGEST_COUNTRY_tig__ "ER")
+SET(ZANATA_SUGGEST_COUNTRY_tk__ "TM")
+SET(ZANATA_SUGGEST_COUNTRY_tl__ "PH")
+SET(ZANATA_SUGGEST_COUNTRY_tn__ "ZA")
+SET(ZANATA_SUGGEST_COUNTRY_tr__ "TR")
+SET(ZANATA_SUGGEST_COUNTRY_ts__ "ZA")
+SET(ZANATA_SUGGEST_COUNTRY_tt__ "RU")
+SET(ZANATA_SUGGEST_COUNTRY_ug__ "CN")
+SET(ZANATA_SUGGEST_COUNTRY_uk__ "UA")
+SET(ZANATA_SUGGEST_COUNTRY_unm__ "US")
+SET(ZANATA_SUGGEST_COUNTRY_ur__ "PK")
+SET(ZANATA_SUGGEST_COUNTRY_uz__ "UZ")
+SET(ZANATA_SUGGEST_COUNTRY_ve__ "ZA")
+SET(ZANATA_SUGGEST_COUNTRY_vi__ "VN")
+SET(ZANATA_SUGGEST_COUNTRY_wa__ "BE")
+SET(ZANATA_SUGGEST_COUNTRY_wae__ "CH")
+SET(ZANATA_SUGGEST_COUNTRY_wal__ "ET")
+SET(ZANATA_SUGGEST_COUNTRY_wba__ "VE")
+SET(ZANATA_SUGGEST_COUNTRY_wo__ "SN")
+SET(ZANATA_SUGGEST_COUNTRY_xh__ "ZA")
+SET(ZANATA_SUGGEST_COUNTRY_yi__ "US")
+SET(ZANATA_SUGGEST_COUNTRY_yo__ "NG")
+SET(ZANATA_SUGGEST_COUNTRY_yue__ "HK")
+SET(ZANATA_SUGGEST_COUNTRY_zh__ "CN")
+SET(ZANATA_SUGGEST_COUNTRY_zh_Hans_ "CN")
+SET(ZANATA_SUGGEST_COUNTRY_zh_Hant_ "TW")
+SET(ZANATA_SUGGEST_COUNTRY_zu__ "ZA")
+
+SET(ZANATA_SUGGEST_SCRIPT_sr__ "Cyrl")
+SET(ZANATA_SUGGEST_SCRIPT_sr_RS_ "Cyrl")
+
+SET(ZANATA_SUGGEST_SCRIPT_sr__latin "Latn")
+SET(ZANATA_SUGGEST_SCRIPT_sr_RS_latin "Latn")
+SET(ZANATA_SUGGEST_SCRIPT_zh__ "Hans")
+SET(ZANATA_SUGGEST_SCRIPT_zh_CN_ "Hans")
+SET(ZANATA_SUGGEST_SCRIPT_zh_SG_ "Hans")
+SET(ZANATA_SUGGEST_SCRIPT_zh_TW_ "Hant")
+SET(ZANATA_SUGGEST_SCRIPT_zh_HG_ "Hant")
+SET(ZANATA_SUGGEST_SCRIPT_zh_MO_ "Hant")
+
+SET(ZANATA_SUGGEST_MODIFIER_sr_Latn_ "latin")
+