cmake-fedora-2.9.3/0000755000174300017420000000000013560742571013450 5ustar gitgit00000000000000cmake-fedora-2.9.3/AUTHORS0000644000174300017420000000006113560742571014515 0ustar gitgit00000000000000Main author: Ding-Yi Chen cmake-fedora-2.9.3/CMakeLists.txt0000644000174300017420000001270713560742571016217 0ustar gitgit00000000000000cmake_minimum_required(VERSION 2.6.2) # Included scripts do automatic cmake_policy PUSH and POP. # OLD: CMake policy in included script will affect the invoker. # CMAKE_POLICY(SET CMP0011 OLD) LIST(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/Modules) INCLUDE(ManageEnvironmentCommon RESULT_VARIABLE MANAGE_ENVIRONMENT_PATH) GET_FILENAME_COMPONENT(CMAKE_FEDORA_MODULE_DIR "${MANAGE_ENVIRONMENT_PATH}" PATH CACHE ) # Whether to build on fedora SET(CMAKE_FEDORA_ENABLE_FEDORA_BUILD "1" CACHE STRING "Enable fedora build" FORCE) #################################################################### # Project specific information # PROJECT(cmake-fedora NONE) SET(PRJ_SUMMARY "CMake helper modules for fedora developers") SET(PRJ_DESCRIPTION "cmake-fedora consist a set of cmake modules that provides helper macros and targets for fedora developers." ) SET(AUTHORS "Ding-Yi Chen") SET(MAINTAINER "Ding-Yi Chen ") SET(VENDOR "Red Hat, APAC, Inc.") SET(LICENSE BSD) SET(PRJ_GROUP "System Environment/Libraries") SET(BUILD_ARCH "noarch") SET(RPM_SPEC_URL "https://pagure.io/%{name}/") SET(RPM_SPEC_SOURCES "https://releases.pagure.org/%{name}/%{name}-%{version}-Source.tar.gz") #################################################################### # Includes # INCLUDE(ManageEnvironment) INCLUDE(ManageArchive) INCLUDE(ManageVersion) RELEASE_NOTES_READ_FILE() INCLUDE(ManageDependency) INCLUDE(ManageFile) INCLUDE(ManageSourceVersionControl) INCLUDE(ManageTarget) INCLUDE(ManageUninstall) ENABLE_TESTING() #################################################################### # Dependencies # ## Requires MANAGE_DEPENDENCY(REQUIRES CMAKE VER "2.6.2") MANAGE_DEPENDENCY(REQUIRES GIT) MANAGE_DEPENDENCY(REQUIRES BODHI-CLIENT) MANAGE_DEPENDENCY(REQUIRES KOJI) MANAGE_DEPENDENCY(REQUIRES RPM-BUILD) MANAGE_DEPENDENCY(REQUIRES FEDPKG) MANAGE_DEPENDENCY(REQUIRES FEDORA-PACKAGER) MANAGE_DEPENDENCY(REQUIRES CURL) MANAGE_DEPENDENCY(REQUIRES PACKAGEDB-CLI) ## Build requires MANAGE_DEPENDENCY(BUILD_REQUIRES CMAKE VER "2.6.2" REQUIRED) MANAGE_DEPENDENCY(BUILD_REQUIRES KOJI REQUIRED) #################################################################### # Building # #################################################################### # Installing # INSTALL(FILES AUTHORS README.md ChangeLog COPYING DESTINATION ${PRJ_DOC_DIR} ) INSTALL(FILES cmake-fedora.conf DESTINATION ${SYSCONF_DIR} ) ADD_SUBDIRECTORY(Modules) ADD_SUBDIRECTORY(scripts) ADD_SUBDIRECTORY(Templates) MANAGE_SOURCE_VERSION_CONTROL_GIT() #################################################################### # Packing # ADD_CUSTOM_TARGET(test_all COMMAND ctest -C Debug --output-on-failure COMMENT "ctest: Run tests" ) ADD_DEPENDENCIES(pack_src_pre test_all) ## Pack Source SET(SOURCE_ARCHIVE_DIR ${CMAKE_BINARY_DIR}/SOURCES CACHE PATH "Source Archive Dir") PACK_SOURCE_ARCHIVE("${SOURCE_ARCHIVE_DIR}" GITIGNORE ${CMAKE_SOURCE_DIR}/.gitignore ) IF(CMAKE_FEDORA_ENABLE_FEDORA_BUILD) SET(RPM_BUILD_SOURCES ${SOURCE_ARCHIVE_DIR}) INCLUDE(ManageRPM) RPM_SPEC_STRING_ADD_DIRECTIVE(RPM_SPEC_SCRIPT_OUTPUT check "" "ctest --output-on-failure") PACK_RPM(SPEC_IN "Templates/fedora/project.spec.in") RPM_MOCK_BUILD() ENDIF(CMAKE_FEDORA_ENABLE_FEDORA_BUILD) #################################################################### # Hosting # #################################################################### # Custom # # Module-only tarballs INCLUDE(ManageTarget) SET(MODULE_ONLY_ARCHIVE ${PROJECT_NAME}-${PRJ_VER}-modules-only.tar.gz) SET(MODULE_ONLY_LATEST_ARCHIVE ${PROJECT_NAME}-modules-only-latest.tar.gz) ADD_CUSTOM_TARGET_COMMAND(module-only OUTPUT ${MODULE_ONLY_ARCHIVE} ${MODULE_ONLY_LATEST_ARCHIVE} COMMAND tar --exclude=.* -czvf ${MODULE_ONLY_ARCHIVE} Modules/*.cmake Modules/*.cmake.in COMMAND ln -sf ${MODULE_ONLY_ARCHIVE} ${MODULE_ONLY_LATEST_ARCHIVE} ) ADD_DEPENDENCIES(tag_pre module-only) #################################################################### # Release # INCLUDE(ManageRelease) IF(CMAKE_FEDORA_ENABLE_FEDORA_BUILD) INCLUDE(ManageReleaseFedora) RELEASE_FEDORA(fedora epel7 el6) # "Off" Warning is displayed if mock is not installed. MANAGE_RELEASE(tag_push release_fedora) ELSE(CMAKE_FEDORA_ENABLE_FEDORA_BUILD) MANAGE_RELEASE(tag_push) ENDIF(CMAKE_FEDORA_ENABLE_FEDORA_BUILD) #################################################################### # Test Suites. # ADD_TEST("ManageString" ctest -S test/testManageString.cmake) ADD_TEST("ManageVariable" ctest -S test/testManageVariable.cmake) ADD_TEST("ManageFile" ctest -S test/testManageFile.cmake) ADD_TEST("ManageTranslation" ctest -S test/testManageTranslation.cmake) ADD_TEST("CmakeFedoraScript" ctest -S test/testCmakeFedoraScript.cmake) ADD_TEST("CmakeFedoraFedpkg" ctest -S test/testCmakeFedoraFedpkg.cmake) IF(CMAKE_VERSION VERSION_GREATER 2.8.0) ## These tests requires internet, which should not be run in koji ADD_TEST(NAME "CmakeFedoraKoji" CONFIGURATIONS "Debug" COMMAND ctest -S test/testCmakeFedoraKoji.cmake ) ADD_TEST(NAME "CmakeFedoraFedpkgDeep" CONFIGURATIONS "Debug" COMMAND ctest -S test/testCmakeFedoraFedpkgDeep.cmake ) ADD_TEST(NAME "ManageZanata" CONFIGURATIONS "Debug" COMMAND ctest -S test/testManageZanata.cmake ) ADD_TEST(NAME "cmake-fedora-newprj" CONFIGURATIONS "Debug" COMMAND ctest -S test/testCmakeFedoraNewprj.cmake ) ENDIF(CMAKE_VERSION VERSION_GREATER 2.8.0) cmake-fedora-2.9.3/COPYING0000644000174300017420000000270313560742571014505 0ustar gitgit00000000000000Copyright (c) 2010, Ding-Yi Chen, Red Hat, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the Red Hat, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. cmake-fedora-2.9.3/ChangeLog0000644000174300017420000006115413560742571015231 0ustar gitgit00000000000000* Tue Aug 01 2017 Ding-Yi Chen - 2.9.3 - Fixed cmake-fedora-fedpkg failed to push to bodhi. - Target tag_pre now depends on target module-only. * Fri Jul 28 2017 Ding-Yi Chen - 2.9.2 Fixed RHBZ#1476070 - cmake-fedora-fedpkg failed to handle multiple builds * Thu Jul 27 2017 Ding-Yi Chen - 2.9.1 Fixed the cmake-fedora-fedpkg related path SRPM bug - Bugs: + Fixed RHBZ#1475682 - ChangeLog failed to update after doing the git reset --hard HEAD * Wed Jul 26 2017 Ding-Yi Chen - 2.9.0 This update fixes bugs in cmake-fedora-fedpkg with bodhi-client v2. Recognize RedHat Bugzilla numbers in latest ChangeLog and associate them in bodhi. - Enhancement: + Recognize RedHat Bugzilla numbers in latest ChangeLog and associate them with bodhi + cmake-fedora-fedpkg new option: -u - Bugs: + Fixed RHBZ#1474591 - Adopt bodhi version 2 + Fixed RHBZ#1474624 - Bodhi UpdateType is mistakenly set as newpackage * Mon Jul 24 2017 Ding-Yi Chen - 2.8.0 Migrate changes like fedorahosted to pagure. And move from pkgdb to product definition center (PDC). - Enhancement: + cmake-fedora-pkgdb new sub-commands: - git-branch package: List the git-branches of package - newest-nvr: Return NVR of master branch - newest-changelog: Return the latest ChangeLog in master branch. - Changes: + koji-build-scratch is now back to use koji build --scratch + MANAGE_UPLOAD_FEDORAHOSTED is marked as depreciated But MANAGE_UPLOAD_PAGURE is not implemented yet, as pagure does not support scp upload yet - Bugs: + Fixed RHBZ#1424757 - cmake-fedora: failed to handle f26-pending + Fixed RHBZ#1425263 - cmake-fedora: migrate from fedorahosted to pagure + Fixed fedpkg --dist depreciate warning * Fri Aug 19 2016 Ding-Yi Chen - 2.7.1 - Bugs: + cmake-fedora-fedpkg: fix when git change is at staging, but not committed yet. * Wed Aug 17 2016 Ding-Yi Chen - 2.7.0 - Enhancement: + cmake-fedora-reset: The program that clean and reset the build environment - Bugs: + Fixed Bug 1367656 - cmake-fedora-fedpkg: failed when commit is clean * Thu Feb 25 2016 Ding-Yi Chen - 2.6.0 - Enhancement: * ManageTranslation: MANAGE_POT_FILE: new options DOMAIN_NAME, MO_LOCALE_DIR - Bug fix: * cmake-fedora-zanata: remove debug message * ManageTranslate: failed to generate pot targets when MANAGE_TRANSLATION_GETTEXT_POT_FILES is not empty. * Fri Jan 29 2016 Ding-Yi Chen - 2.5.1 - Fixed: * Out-of-the-source build for ibus-chewing * Wed Jan 06 2016 Ding-Yi Chen - 2.5.0 - Enhancement: * New Target: changelog_no_force: Does not update ChangeLog if RELEASE-NOTES.txt is newer than ChangeLog. - Fixed: * MANAGE_ZANATA: Error message that missing right bracket. Thanks ChangZhu Chen for pointing it out. * Bug 1295278 - cmake-fedora: failed to update version when CMakeCache.txt is newer than RELEASE-NOTES.txt * Fri Dec 18 2015 Ding-Yi Chen - 2.4.4 - Removed: * Target: commit_clean and tag_not_exist. The functionality move to tag file instead. - Changed: * Target changelog does not need to depend on refresh_cmake_cache because ManageChangeLogScript does it already - Fixed: * MANAGE_ZANATA: Error message that missing right bracket * Mon Nov 02 2015 Ding-Yi Chen - 2.4.3 - Enhancement: * New scripts: cmake-fedora-pkgdb, cmake-fedora-zanata * New target: - refresh_cmake_cache: Remove the old cache and rebuild the new cache. - Fixed: * Resolves: RHBZ 1194797: find -printf is not portable - Changed: * Support zanata-server and zanata-client 3.7. * Add additional path to cmake-fedora.conf * cmake-fedora.conf: Remove bodhi branch, use whatever cmake-fedora-pkgdb found. * ManageFile: New function: MANAGE_FILE_COMMON_DIR * ManageString: Macro to function: STRING_UNQUOTE * koji-build-scratch: Use fedpkg backend instead * cmake-fedora-fedpkg: Fix * Thu Dec 11 2014 Ding-Yi Chen - 2.3.4 - Fixed RHBZ 1144906 - cmake-fedora failed to build target pot_files if the .pot file not exists. - ManageDependency: Now able to assign multiple PKG_CONFIG files. - ManageGConf: Added "Variables to cache". - cmake-fedora.conf: el7 and fc21 is now available in bodhi. - ManageRPMScript: Fixed the mo file handling. - ManageZanata: Use /usr/share/locale as SYSTEM_LOCALE source instead. * Mon Sep 22 2014 Ding-Yi Chen - 2.3.1 - Fixed RHBZ 1144906 - cmake-fedora failed to build target pot_files if the .pot file not exists. - ManageDependency: var_CFLAGS and var_LIBS are also cached. - ManageDependency: var_INCLUDEDIR also includes directories from var_CFLAGS. - ManageGConf: Added "Variables to cache". - cmake-fedora.conf: el7 and fc21 is now available in bodhi. * Tue Aug 26 2014 Ding-Yi Chen - 2.3.0 - cmake-fedora-fedpkg: fix try_command - ManageChangeLogScript: New command "make" * Mon Aug 25 2014 Ding-Yi Chen - 2.2.1 - ManageEnvironmentCommon: Module of variable for both normal and script mode. - ManageDependency: Make changes suitable for more generic *nix build. e.g. FEDORA_NAME -> PACKAGE_NAME - ManageZanata: MANAGE_ZANATA: New option CLEAN_ZANATA_XML. - Workaround for Bug 1115136, otherwise el7 won't work. * Fri Aug 15 2014 Ding-Yi Chen - 2.1.3 - Fixed cmake-fedora-fedpkg * Fri Aug 15 2014 Ding-Yi Chen - 2.1.2 - ManageVariable: CMAKE_FEDORA_CONF_GET_ALL_VARIABLES are now accepting the same parameters as SETTING_FILE_GET_ALL_VARIABLES - Fixed the bodhi push as Fedora-21 and EPEL-7 are not yet in bodhi. * Tue Aug 12 2014 Ding-Yi Chen - 2.1.1 - Fixed Bug 1002279 - Project configuration bugs when using cmake-fedora-newprj - cmake-fedora-newprj: Correct git repo URL - ManageZanata: Fix zanata.xml suggest countries. * Mon Aug 11 2014 Ding-Yi Chen - 2.1.0 - Fixed Bug 1093336 - date(1): -u is much portable than --utc - Fix EPEL 7 support. - Enhancement: + No need to use MAKE_INSTALL_* for rpm files section. INSTALL at any place works. + Better handling of ChangeLog: - ChangeLog will only invoked before make pack_src or make changelog. + find_lang and files -f .lang are added automatically when translations exists. + New targets: - dist: Produce the source archive file. This is in GNU Standard targets. + New modules: - CmakeFedoraScript: Scripts to be invoked in command line. - ManageChangeLogScript: Scripts for handling ChangeLog. - ManageRpmScript: RPM Scripts for handling RPM and SPEC. - ManageZanata: Zanata translation service. Split from ManageTranslation + New cache variables: - CMAKE_FEDORA_MODULE_DIR: cmake-fedora modules dir. + ManageFile: New function: MANAGE_CMAKE_FEDORA_CONF + ManageFile: New function: MANAGE_FILE_CACHE + ManageFile: New function: MANAGE_FILE_EXPIRY + ManageGConf: New macro: MANAGE_GCONF_SCHEMAS + ManageMessage: New function: M_OUT + ManageVariable: New macro: CMAKE_FEDORA_CONF_GET_ALL_VARIABLES + ManageString: New function: STRING_ESCAPE_BACKSLASH + ManageString: New function: STRING_ESCAPE_DOLLAR + ManageString: New function: STRING_ESCAPE_QUOTE + ManageTranslate: New function: ADD_POT_FILE + Target rpmlint: rpmlint statistics are now combined. + cmake-fedora-fedpkg: Default is now build all active Fedora (including rawhide) and EPEL releases in fedpkg branches. - Removed: + cmake-fedora.conf.in is no longer needed. + TODO should be put in wiki. + Modules: - ManageInstall: This is no longer needed. + Targets: - changelog_prev_update: + Scripts: - cmake-fedora-functions is no longer needed. - cmake-fedora-changelog is no longer needed. + Variables: - PRJ_RPM_SPEC_FILE - Changed: + DateTimeFormat: Macro to function: TODAY + ManageAPIDOC: MANAGE_APIDOC_DOXYGEN: Macro to function. + ManageAPIDOC: MANAGE_APIDOC_DOXYGEN: Parameters changed. + ManageArchive: Only the files that are explicitly added to SOURCE_ARCHIVE_CONTENTS will be depended. + ManageFile: GIT_GLOB_TO_CMAKE_REGEX: Macro to function. + ManageString: STRING_ESCAPE_SEMICOLON: Macro to function. + ManageDependency: MANAGE_DEPENDENCY: Macro to function. + ManageRelease: MANAGE_RELEASE: Macro to function. + ManageRelease: MANAGE_RELEASE: Parameters changed. + ManageRPM: RPM_MOCK_BUILD: Parameters changed. + ManageSourceVersionControl: MANAGE_SOURCE_VERSION_CONTROL_GIT: - Macro to function - Parameters Changed + ManageSourceVersionControl: MANAGE_SOURCE_VERSION_CONTROL_HG: - Macro to function - Parameters Changed - Mark as experiment + ManageSourceVersionControl: MANAGE_SOURCE_VERSION_CONTROL_HG: - Macro to function - Parameters Changed - Mark as experiment + ManageTranslation: MANAGE_GETTEXT: - Macro to function - Parameters Changed + ManageUpload: For all marcos: - Macros are changed to function - Parameters has changed. + PRJ_DOC_DIR: Changed from docdir/- to docdir/ * Fri Feb 28 2014 Ding-Yi Chen - 1.3.0 - Fixed Bug 1002279 - Project configuration bugs when using cmake-fedora-newprj - Enhanced: + Support EPEL7 + New targets: pack_src_no_force. - Fixed: + cmake-fedora-newprj is fixed. * Sat Feb 01 2014 Ding-Yi Chen - 1.2.7 - Changed: + cmake-fedora.conf.in will also be searched if cmake-fedora.conf does not exist. + Target test is built before pack_src. * Fri Jan 31 2014 Ding-Yi Chen - 1.2.6 - Resolves Bug 1058631 - ManagePRM generate Broken defattr - Enhancement: + ManageTarget: ADD_CUSTOM_TARGET_COMMAND: NO_FORCE: new option. + Projects that includes cmake-fedora as submodule are no longer requires cmake-fedora.conf - Changed: + ManageTranslation: Fix po build + ManageRPM: Fix defattr + ManageReleaseFedora: - Helper scripts in CMAKE_SOURCE_DIR/cmake-fedora can also be located. - FedPkg default directory is changed to CMAKE_FEDORA_TMP_DIR/FedPkg * Thu Jan 09 2014 Ding-Yi Chen - 1.2.3 - Resolves Bug 1040333 - RFE: Suiport .gitignore file as source of CPACK_SOURCE_IGNORE_FILES - Resolves Bug 1046213 - RFE: RPM ChangeLog should be generated by newest build from koji - Enhancement: + ChangeLog.prev is no longer required. + RPM-ChangeLog.prev is provide by koji now. + cmake-fedora-koji: - new subcommand: newest-build and newest-changelog. + cmake-fedora-changelog: new script. + New targets: - tag_push: Push to git. + ManageFile: - Add absolute file support - MANAGE_FILE_INSTALL: Add TARGETS support. - MANAGE_FILE_INSTALL: Add RENAME support. - GIT_GLOB_TO_CMAKE_REGEX: Convert git glob to cmake regex + ManageArchive: - PACK_SOURCE_CPACK: Pack with CPack - PACK_SOURCE_ARCHIVE: Now can specify OUTPUT_FILE. - SOURCE_ARCHIVE_CONTENTS_ADD: Add file to source archive. - SOURCE_ARCHIVE_CONTENTS_ADD_NO_CHECK: Add file to source archive without checking. + ManageDependency: Manage dependencies. + ManageRPM: - PACK_RPM: New options: SPEC_IN and SPEC. - RPM_SPEC_STRING_ADD: Add a string to SPEC string. - RPM_SPEC_STRING_ADD_DIRECTIVE: Add a directive to SPEC string. - RPM_SPEC_STRING_ADD_TAG: Add a string to SPEC string. + ManageString: - STRING_APPEND: Append a string to a variable. - STRING_PADDING: Padding the string to specified length - STRING_PREPEND: Prepend a string to a variable. + ManageTranslation: - MANAGE_GETTEXT: + Can specify MSGFMT_OPTIONS and MSGMERGE_OPTIONS + Add gettext-devel to BUILD_REQUIRES. + ManageVariable: - VARIABLE_TO_ARGN: Merge the variable and options to the form of ARGN. + Cached variables: - RPM_SPEC_CMAKE_FLAG: cmake flags in rpm build. - RPM_SPEC_MAKE_FLAG: make flags in rpm build. - Changed Modules: + ManageArchive: - PACK_SOURCE_ARCHIVE: Can now pass either empty, outputDir, or source File. + ManageGConf2: Fixed. + ManageString: STRING_SPLIT: New Option: ALLOW_EMPTY + ManageRPM - Add support of pre, post, and preun + ManageVariable: - VARIABLE_PARSE_ARGN can now handle multiple-appeared options. - Changed: + CMake policy no longer enforced by default. + ManageString: STRING_SPLIT is changed from macro to function, so no need to put excessive backslashes. - Removed: + Target after_release_commit and related are no longer required and thus removed. * Mon Dec 23 2013 Ding-Yi Chen - 1.1.6 - Enhancement: + Fedora version will now automatically updated. + New macros: - VARIABLE_PARSE_ARGN: Parse the arguments. + New scripts: cmake-fedora-koji: Koji utilities. cmake-fedora-fedpkg: Fedpkg utilities. + Changed scripts: koji-build-scratch: fedora_1, fedora_2, epel_1, epel_2 can now be used as build scopes. + BODHI_UPDATE_TYPE is no longer required. + No need to manual edit project.spec.in + ADD_CUSTOM_TARGET_COMMAND now allow "ALL" - Bug Fixes: Resolves: Bug 879141 - Excessive quotation mark for target tag_pre Resolves: Bug 992069 - cmake-fedora: FTBFS in rawhide - Changed Modules + ManageUpload: - New macros: + MANAGE_UPLOAD_TARGET - Changed macros: + MANAGE_UPLOAD_SCP: parameter fileAlias replaced with targetName + MANAGE_UPLOAD_SFTP: parameter fileAlias replaced with targetName + MANAGE_UPLOAD_FEDORAHOSTED: parameter fileAlias replaced with targetName + MANAGE_UPLOAD_SOURCEFORGE: parameter fileAlias replaced with targetName - Removed macros: + MANAGE_UPLOAD_MAKE_TARGET + MANAGE_UPLOAD_CMD - Removed Directory: + /examples: as the examples can be found in /Templates/fedora - Removed Variables: + FEDORA_AUTO_KARMA - Removed Macros: + MANAGE_UPLOAD_MAKE_TARGET + MANAGE_UPLOAD_CMD - Removed Targets: + bodhi_new: Submit the package to bodhi + fedpkg__build: Build for tag + fedpkg__commit: Import, commit and push * Thu Nov 22 2012 Ding-Yi Chen - 1.0.5 - Fedora 18 support. - Source tarball filename is changed back to name-version-Source.tar.gz to avoid confusion between source generate by cmake-fedora (which contains ChangeLog and projectName.pot) and tarball generation service from hosting site (which does not contain generated files) - koji-build-scratch: rawhide build target does not always have suffix -candidate. - README updated. - TODO updated. * Fri Aug 17 2012 Ding-Yi Chen - 1.0.4 - Source tarball filename is now name-version.tar.gz instead of name-version-Source.tar.gz - after_release_commit depends rpm_changelog_prev_update if RPM supported enabled. - Corrected the 'FORCE' of cmake CACHE - Update the error messages when cmake-fedora is not installed. - Fixed target: zanata_push_trans. - Fixed zanata arguments. - fedpkg clone is now triggered if the clone directory does not exist when doing the fedpkg_commit, it no longer the listed OUTPUT of an ADD_CUSTOM_COMMAND. - Add target: translations as an universal easy target to generate/update translation files. * Mon Jul 23 2012 Ding-Yi Chen - 1.0.2 - Fixed after_release_commit * Sun Jul 22 2012 Ding-Yi Chen - 1.0.1 - Greatly simplified the modules design and usage. - Release version are now defined in cmake-fedora.conf for easy maintenance. - Fix the MANAGE_MESSAGE_LEVEL - koji scratch builds are run only once before tagging. - CVS support is removed. - New command: koji-build-scratch for scratch build on all supported releases. - New module: ManageTarget - New function: SETTING_STRING_GET_VARIABLE - New macro: + ADD_CUSTOM_TARGET_COMMAND + STRING_ESCAPE_SEMICOLON - Macros changed behavior: MANAGE_ZANATA: Arguments are changed. - Target changed: changelog_update are now separate as: + changelog_prev_update: Update ChangeLog.prev + rpm_changelog_prev_update: Update RPM-ChangeLog.prev - Command renamed: + cmake-fedora-newprj.sh to cmake-fedora-newprj - Module renamed: + ManageReleaseOnFedora to ManageReleaseFedora + ManageMaintainerTargets to ManageUpload + PackSource to ManageArchive + PackRPM to ManageRPM + UseGConf to ManageGConf + UseDoxygen to ManageAPIDoc - Function renamed: + LOAD_RELEASE_FILE to RELEASE_NOTES_READ_FILE - Macro renamed: + PACK_SOURCE to PACK_SOURCE_ARCHIVE + USE_MOCK to RPM_MOCK_BUILD + USE_DOXYGEN to MANAGE_APIDOC_DOXYGEN + USE_GETTEXT to MANAGE_GETTEXT + USE_ZANATA to MANAGE_ZANATA - Variable renamed: PACK_SOURCE_IGNORE_FILES to SOURCE_ARCHIVE_IGNORE_FILES - RELEASE_ON_FEDORA: support new tags: "fedora" for current fedora, and "epel" for current epel. - ChangeLog generation rewritten, target version_check no longer need. - Removed target: version_check - Variable Removed: FEDORA_NEXT_RELEASE FEDORA_NEXT_RELEASE_TAGS FEDORA_LATEST_RELEASE FEDORA_PREVIOUS_RELEASE * Tue Sep 20 2011 Ding-Yi Chen - 0.8.1 - Fixed Bug 738958 - cmake-fedora: remove excessive quotation marks for Precompile definition - Fixed Bug 733540 - cmake-fedora: "" should be read as empty string - ManageEnvironment: Now defined cmake_policy won't get overridden. - ManageString: STRING_UNQUOTE is now merely remove quote marks in the beginning and end of string. The string will not be changed otherwise. - UseUninstall has renamed as ManageUninstall - ManageMaintainerTargets: Reveal MAINTAINER_UPLOAD_COMMAND - ManageTranslation: Adopt zanata python client 1.3, arguments are redesigned. + Change target: from "translations" to "gmo_files" + Add targets: zanata_push, zanata_push_trans, zanata_pull_trans + Add argument: ALL_FOR_PUSH, ALL_FOR_PUSH_TRANS and ALL_FOR_PULL + Add argument: OPTIONS for passing arguments. - ManageReleaseOnFedora: Now default to build against candidate repos, unless _CANDIDATE_PREFERRED is set to "0". * Thu Aug 18 2011 Ding-Yi Chen - 0.7.994 - Fixed Bug 725615 - cmake-fedora: Use UTC for changelog - Fixed Bug 725617 - cmake-fedora: target 'tag' should stop when tag file exists. - Fixed Bug 733540 - cmake-fedora: "" should be read as empty string - Change behavior + STRING_UNQUOTE is now merely remove quote marks in the beginning and end of string. The string will not be changed otherwise. - Module CompileEnv.cmake is obsoleted by ManageEnvironment.cmake because it is what the variable actually store. - Revised ManageTranslation, now zanata.xml.in can be put to either CMAKE_SOURCE_DIR or CMAKE_CURRENT_SOURCE_DIR. - ManageReleaseOnFedora: + New Constants: FEDORA_NEXT_RELEASE_TAGS, FEDORA_SUPPORTED_RELEASE_TAGS. + Remove NORAWHIDE, as user can use TAGS to achieve the same. + Actually mkdir and clone project if the FedPkg directory is missing. - ManageTranslation: + Fixed zanata.xml path problem + Fixed zanata related targets. - New Variable: CMAKE_FEDORA_TMP_DIR for holding cmake-fedora files. + ChangeLog temporary files have moved to this directory. * Fri Jul 08 2011 Ding-Yi Chen - 0.7.1 - Target release now depends on upload. * Fri Jul 08 2011 Ding-Yi Chen - 0.7.0 - Fixed target: after_release_commit. - Add "INCLUDE(ManageRelease)" in template so new project will not get CMake command "MANAGE_RELEASE" - Corrected TODO. - Corrected ChangeLog.prev and SPECS/RPM-ChangeLog.prev. - By default, the CMAKE_INSTALL_PREFIX is set as '/usr'. * Wed Jul 06 2011 Ding-Yi Chen - 0.6.1 - Remove f13 from FEDORA_CURRENT_RELEASE_TAGS, as Fedora 13 is end of life. - ManageMessage: New module. + M_MSG: Controllable verbose output - ManageRelease: New module. + MANAGE_RELEASE: Make release by uploading files to hosting services - Now ManageReleaseOnFedora includes ManageMaintainerTargets - Modules are shown what they include and included by. - Now tag depends on koji_scratch_build, while fedpkg_commit master (or other primary branch) depends directly on tag. - MAINTAINER_SETTING_READ_FILE now can either use MAINTAINER_SETTING, or take one argument that define maintainer setting file. - MANAGE_MAINTAINER_TARGETS_UPLOAD no longer require argument hostService, It now relies on HOSTING_SERVICES from maintainer setting file. - Minimum cmake requirement is now raise to 2.6. - Targets which perform after release now have the prefix "after_release". * Wed Jun 08 2011 Ding-Yi Chen - 0.6.0 - Fixed Bug 684107 - [cmake-fedora] TAGS in USE_FEDPKG is ineffective. - ManageTranslation: + Renamed from UseGettext + New Macro: USE_ZANATA() - Zanata support (experiential). + New Macro: USE_GETTEXT() - Gettext support. This macro merges GETTEXT_CREATE_POT and GETTEXT_CREATE_TRANSLATIONS, to simplified the usage and make the macro names more consistent. - ManageReleaseOnFedora: + New Variable: FEDORA_EPEL_RELEASE_TAGS - Clean up Modules: No unrelated files under Modules/ - Removed debug messages of: CMAKE_MAJOR_VERSION, CMAKE_MINOR_VERSION. CMAKE_PATCH_VERSION, _cmake_uninstall_in, _koji_tags, _tags. * Sun Feb 27 2011 Ding-Yi Chen - 0.5.0 - Macro: RELEASE_ON_FEDORA added. - Target: release_on_fedora added. - Now has more informative error message, when cmake-fedora is not installed. - Fixed UseUninstall - Fixed Bug 670079 - [cmake-fedora] target "release" will not stop when koji build failed - Fixed Bug 671063 - [cmake-fedora] target "rpmlint" should not depend on "koji_scratch_build" - Protocol for hosting server should now be specified as "[Hosting]_PROTOCOL". - Refactoring ManageMaintainerTargets. - fedpkg and koji build for every tags are revealed. - Now set rawhide as f16, release dists are f15,f14,f13. - rpm build process is now refined, no unnecessary build. - Renamed target push_svc_tag to push_post_release. - Renamed module UseFedpkg to ManageReleaseOnFedora * Fri Jan 07 2011 Ding-Yi Chen - 0.4.0 - New target: release - New target: install_rpms - ./Module should precedes /usr/share/cmake/Modules, so it always use latest modules. - Fixed Reading a file that contains '\'. - Added Macro PACK_RPM_GET_ARCH - Added target install_rpms for bulk rpms installation. - Target rpm now uses -bb instead of -ba. - Target rpm now depends on srpm. - Source version control logic is split out as ManageSourceVersionControl - Module UseHostingService is renamed as ManageMaintainerTarget - Macro USE_HOSTING_SERVICE_READ_SETTING_FILE is renamed as MAINTAINER_SETTING_READ_FILE * Sun Dec 19 2010 Ding-Yi Chen - 0.3.3 - Fixed: Support for out-of-source build. - Fixed: Join the next line if ended with back slash '\'. - ChangeLog: Now generate from "cmake ." directly. - changelog: target removed. So it won't do unnecessary rebuild. * Tue Nov 09 2010 Ding-Yi Chen - 0.3.2 - Fixed: Macro invoked with incorrect arguments for macro named STRING_ESCAPE Caused by give and empty string from STRING_TRIM - Removed: f12 from FEDORA_CURRENT_RELEASE_TAGS * Mon Nov 08 2010 Ding-Yi Chen - 0.3.1 - SETTING_FILE_GET_VARIABLES_PATTERN: Fixed: unable to use relative path problem. Fixed: UNQUOTE and NOESCAPE_SEMICOLON can now used together. * Wed Nov 03 2010 Ding-Yi Chen - 0.3.0 - New macro: SETTING_FILE_GET_VARIABLES_PATTERN - New macro: PACK_SOURCE_FILES - Fixed: Variable lost in SETTING_FILE_GET_ALL_VARIABLES and SETTING_FILE_GET_VARABLE. - Fixed: Variable values won't apply in SETTING_FILE_GET_ALL_VARIABLES - UseUninstall finds cmake_uninstall.in in additional paths: /usr/share/cmake/Modules and /usr/share/cmake/Modules - Minor improvements in CMakeLists.txt and project.spec.in templates. * Wed Oct 20 2010 Ding-Yi Chen - 0.2.4 - cmake-fedora-newprj.sh: New option "-e" that extract value from specified spec or spec.in. - Now usage is printed instead of junk output when project_name is not given. - Source code (whatever is packed) and tarball dependency now checked. * Sat Oct 16 2010 Ding-Yi Chen - 0.2.3 - Inserted git pull for each fedpkg targets. Reduce the chance of conflict. - Fixed target: bodhi_new. So it will actually run this command instead of just showing it. * Fri Oct 15 2010 Ding-Yi Chen - 0.2.2 - Add new project building script. - Build for EL-5, EL-6 - Add el5, el6 build. - Fixed errors in UseFedpkg. - Fixed target: tag - Fixed target: bodhi_new * Fri Oct 08 2010 Ding-Yi Chen - 0.1.4 - Fixed error in UseFedpkg. * Mon Oct 04 2010 Ding-Yi Chen - 0.1.2 - Removed excess spaces. * Mon Oct 04 2010 Ding-Yi Chen - 0.1.1 - Added koji scratch build target. - Fixed changelog_update. * Mon Oct 04 2010 Ding-Yi Chen - 0.1.0 - Initial package.cmake-fedora-2.9.3/Modules/0000755000174300017420000000000013560742571015060 5ustar gitgit00000000000000cmake-fedora-2.9.3/Modules/CMakeLists.txt0000644000174300017420000000050413560742571017617 0ustar gitgit00000000000000FILE(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 ) cmake-fedora-2.9.3/Modules/CmakeFedoraScript.cmake0000644000174300017420000001674313560742571021423 0ustar gitgit00000000000000# - 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= -D outputFile= [-D atOnly=1] [-D cmake_fedora_module_dir=] [-D escape_quotes=1] [\"-D =\"] -P /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=\" [-D cmake_fedora_module_dir=] [-D paths=\";\"] [-D error_msg=] [-D verbose_level=] [-D no_default_path=1] -P /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=\" -D cache_file= [-D cmake_fedora_module_dir=] [-D expiry_seconds=seconds] [-D cache_dir=dir] -P /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=: The command that provide output. cache_file=: The path to cache file. cmake_fedora_module_dir=: Specify this if cmake and cmake-fedora failed to find the location of CMake Fedora modules. expiry_seconds=: After the cache should expired. cache_dir=: The directory to put cache. cmake -D cmd=get_variable -Dvar= [-D noescape_semicolon=1] -P /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=") 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=") 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("${run}" STREQUAL "") CMAKE_FEDORA_SCRIPT_PRINT_USAGE() M_MSG(${M_FATAL} "Requires -Drun=") ENDIF() IF(NOT cache_file) CMAKE_FEDORA_SCRIPT_PRINT_USAGE() M_MSG(${M_FATAL} "Requires -Dcache_file=") 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=") 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/ 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=\"\"") 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() cmake-fedora-2.9.3/Modules/DateTimeFormat.cmake0000644000174300017420000000211713560742571020730 0ustar gitgit00000000000000# - 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( []) # - 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") cmake-fedora-2.9.3/Modules/ManageAPIDoc.cmake0000644000174300017420000000753413560742571020243 0ustar gitgit00000000000000# - Manage generated API documents # This module provide functions for API document generation. # # Included Modules: # - ManageDependency # - ManageMessage # # Defines following functions: # MANAGE_APIDOC_DOXYGEN([DOXYGEN ] # [OUTPUT_DIRECTORY ] ... # ) # - 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) cmake-fedora-2.9.3/Modules/ManageArchive.cmake0000644000174300017420000002736413560742571020570 0ustar gitgit00000000000000# - 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() # - 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() # - Add a file to source archive without check. # * Parameters: # - filename: Filename to be added. # # Defines following macros: # PACK_SOURCE_ARCHIVE([ | OUTPUT_FILE ] # [GENERATOR ] # [GITIGNORE ] [INCLUDE ]) # ) # - Pack source archive.. # * Parameters: # + outputDir: Directory to write source archive. # + OUTPUT_FILE file: Output file with path. # Default: SOURCES/--Source. # + 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) cmake-fedora-2.9.3/Modules/ManageChangeLogScript.cmake0000644000174300017420000001436313560742571022216 0ustar gitgit00000000000000# - 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= -D release= -D prj_info= [-D \"=\"] -P /ManageChangeLogScript.cmake Always update ChangeLog. cmake -D cmd=extract_current -D release= [-D \"=\"] -P /ManageChangeLogScript.cmake Extract current Changelog items from RELEASE-NOTES.txt cmake -D cmd=extract_prev -D ver= -D changelog= [-D \"=\"] -P /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() EXECUTE_PROCESS(COMMAND sed -ne "/PRJ_VER/ s/PRJ_VER:STRING=//p" "${CMAKE_SOURCE_DIR}/CMakeCache.txt" OUTPUT_VARIABLE CachedPrjVer OUTPUT_STRIP_TRAILING_WHITESPACE ) IF(NOT "${CachedPrjVer}" STREQUAL "${PRJ_VER}") EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} "${CMAKE_SOURCE_DIR}") ENDIF() FILE(WRITE "${CMAKE_FEDORA_TMP_DIR}/ChangeLog" "* ${TODAY_CHANGELOG} ${MAINTAINER} - ${PRJ_VER}\n") FILE(APPEND "${CMAKE_FEDORA_TMP_DIR}/ChangeLog" "${currentStr}\n\n") FILE(APPEND "${CMAKE_FEDORA_TMP_DIR}/ChangeLog" "${prevStr}") EXECUTE_PROCESS(COMMAND diff "${CMAKE_FEDORA_TMP_DIR}/ChangeLog" "${changelog}" RESULT_VARIABLE different OUTPUT_QUIET ERROR_QUIET ) IF(NOT different EQUAL 0) EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_FEDORA_TMP_DIR}/ChangeLog" "${changelog}") ENDIF() ENDMACRO() SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) ####################################### # Determine CMAKE_FEDORA_MODULE_DIR # ## It is possible that current dir is in NO_PACK/FedPkg/ 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 "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() cmake-fedora-2.9.3/Modules/ManageDependency.cmake0000644000174300017420000002145513560742571021260 0ustar gitgit00000000000000# - 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( [VER [EXACT]] [REQUIRED] # [PROGRAM_NAMES ...] [PROGRAM_SEARCH_PATHS ...] # [PKG_CONFIG ...] # [PACKAGE_NAME | 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}_: 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) cmake-fedora-2.9.3/Modules/ManageEnvironment.cmake0000644000174300017420000001203413560742571021477 0ustar gitgit00000000000000# - 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( [] [ENV_NAME ] # [CACHE [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 . # 2. Value of environment variable , # or if ENV_NAME is specified, value of . # 3. # * 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) cmake-fedora-2.9.3/Modules/ManageEnvironmentCommon.cmake0000644000174300017420000000530113560742571022647 0ustar gitgit00000000000000# - 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") cmake-fedora-2.9.3/Modules/ManageFile.cmake0000644000174300017420000004550713560742571020065 0ustar gitgit00000000000000# - Manage files # # Included Modules: # - ManageMessage # - ManageVariable # # Defines following functions: # FIND_FILE_ERROR_HANDLING( # [ERROR_MSG ] # [ERROR_VAR ] # [VERBOSE_LEVEL ] # [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( # [ERROR_MSG ] # [ERROR_VAR ] # [VERBOSE_LEVEL ] # [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( ) # - 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( # [ERROR_MSG ] # [ERROR_VAR ] # [VERBOSE_LEVEL ] # ) # - 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( ...>) # - 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( [EXPIRY_SECONDS ] # [CACHE_DIR ] [ERROR_VAR ] [RESULT_VAR resultVar] # COMMAND # ) # - 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 . # 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 . # + COMMAND : Command to produceoutput. # # MANAGE_FILE_EXPIRY( ) # - 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( # [ | FILES ] [DEST_SUBDIR ] # [RENAME ] [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) cmake-fedora-2.9.3/Modules/ManageGConf.cmake0000644000174300017420000000574013560742571020175 0ustar gitgit00000000000000# - 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 ] # [INSTALL_DIR ] [CONFIG_SOURCE ] # ) # - Process schemas file. # * Parameters: # + FILE : (Optional) Path to GConf .schema. # Default: ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.schemas # + INSTALL_DIR : (Optional) Directory to install GConf .schemas file. # Default: ${SYSCONF_DIR}/gconf/schemas # + CONFIG_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) cmake-fedora-2.9.3/Modules/ManageGettextScript.cmake0000644000174300017420000001677513560742571022024 0ustar gitgit00000000000000# 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= -D \"exec:STRING=\" [\"-D=\"] [\"-D =\"] -P /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= [-D \"options:STRING=<--opt1;--opt2;value; ...>\"] [\"-Dlocales=\" | -Dsystem_locales] [-Dpo_dir=] [\"-D=\"] [\"-D =\"] -P /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= [-D mo_dir=] [-D \"options=<--opt1;--opt2=value; ...>\" [-D \"locales=\" | -Dsystem_locales] [-D \"=\"] -P /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=] [-Dsystem_locales] [-D \"=\"] -P /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=\"") ENDIF() IF("${exec}" STREQUAL "") M_MSG(${M_FATAL} "Requires \"-Dexec=\"") 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=\"") 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=\"") 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/ 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() cmake-fedora-2.9.3/Modules/ManageGitScript.cmake0000644000174300017420000000515413560742571021110 0ustar gitgit00000000000000# - 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= -D output_file= [-D \"msg=\"] [-D cmake_fedora_module_dir=] [\"-D =\"] -P /ManageGitScript.cmake Make a tag file, which indicates the build process is passed and the branch is tagged with . 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/ 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=") ENDIF() IF(NOT output_file) MANAGE_GIT_SCRIPT_PRINT_USAGE() M_MSG(${M_FATAL} "Requires -D output_file=") ENDIF() MAKE_TAG_FILE() ELSE() MANAGE_GIT_SCRIPT_PRINT_USAGE() M_MSG(${M_FATAL} "Invalid cmd ${cmd}") ENDIF() cmake-fedora-2.9.3/Modules/ManageMessage.cmake0000644000174300017420000000441313560742571020561 0ustar gitgit00000000000000# - 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( ) # - 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() # - 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) cmake-fedora-2.9.3/Modules/ManageRPM.cmake0000644000174300017420000004035713560742571017642 0ustar gitgit00000000000000# - 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( []) # - 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 ) # - 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( []) # - 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 ] [SPEC ] # [CONFIG_REPLACE ...]) # - 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 ...: 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 ...]) # - 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_: Build RPM with . # 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 exist ## 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 exist" ) ENDIF(EXISTS "${_mCfg}") ENDFOREACH(_mName) ENDMACRO(RPM_MOCK_BUILD) cmake-fedora-2.9.3/Modules/ManageRPMScript.cmake0000644000174300017420000003205713560742571021025 0ustar gitgit00000000000000# - 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= -Dspec_in= -Dmanifests= -Drelease= -Dprj_info= [\"-Dconfig_replace=\"] [\"-D=\"] -P /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= -Dprj_info= [\"-Dconfig_replace=\"] [\"-D=\"] -P /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= -Drelease= -Dprj_info= [\"-D=\"] -P /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=/install_manifests.txt>\"] [\"-Dtmp_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=\"") 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_PKGDB_CMD FIND_ARGS NAMES cmake-fedora-pkgdb 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_PKGDB_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=\"") 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=\"") ENDIF() IF(NOT release) MANAGE_RPM_SCRIPT_PRINT_USAGE() M_MSG(${M_FATAL} "Requires \"-Drelease=\"") ENDIF() IF(NOT prj_info) MANAGE_RPM_SCRIPT_PRINT_USAGE() M_MSG(${M_FATAL} "Requires -Dprj_info=") 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/ 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=") 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() cmake-fedora-2.9.3/Modules/ManageRelease.cmake0000644000174300017420000000363413560742571020561 0ustar gitgit00000000000000# - Manage release by provides release related targets. # # Included Modules: # - ManageMessage # - ManageVariable # # Defines following functions: # MANAGE_RELEASE([] [DEPENDS ]) # - 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) cmake-fedora-2.9.3/Modules/ManageReleaseFedora.cmake0000644000174300017420000002236513560742571021704 0ustar gitgit00000000000000# - 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([ ...] # [DEPENDS ...] # [TARGETS ...] # ) # - 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) cmake-fedora-2.9.3/Modules/ManageSourceVersionControl.cmake0000644000174300017420000001477113560742571023354 0ustar gitgit00000000000000# - 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 ...) for the targets # that need to be done before target . # - 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 ...) for the targets # that need to be done after target . # # # Included Modoule: # - ManageTarget # - ManageVariable # # Define following functions: # MANAGE_SOURCE_VERSION_CONTROL_GIT( # [PRE_TARGETS ...] [POST_TARGETS ...] # ) # - 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 ...] [POST_TARGETS ...] # ) # - (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 # [PRE_TARGETS ...] [POST_TARGETS ...] # ) # - (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) cmake-fedora-2.9.3/Modules/ManageString.cmake0000644000174300017420000003566713560742571020462 0ustar gitgit00000000000000# - Manage String by utility functions # # Defines the following functions: # STRING_APPEND( []) # - 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( ) # - Escape the backslash (\). # * Parameters: # + var: A variable that stores the result. # + str: A string. # # STRING_ESCAPE_DOLLAR( ) # - Escape the dollar sign ($). # * Parameters: # + var: A variable that stores the result. # + str: A string. # # STRING_ESCAPE_QUOTE( ) # - Escape the double quote ("). # * Parameters: # + var: A variable that stores the result. # + str: A string. # # STRING_ESCAPE_SEMICOLON( ) # - Escape the semicolon (;). # * Parameters: # + var: A variable that stores the result. # + str: A string. # # STRING_PADDING( []) # - 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( []) # - 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( # [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( [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( ) # - 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( [ ...]) # - 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) cmake-fedora-2.9.3/Modules/ManageTarget.cmake0000644000174300017420000000354113560742571020424 0ustar gitgit00000000000000# - Manage targets and output files. # # Included Modules: # - ManageVariable # # Defines following functions: # ADD_CUSTOM_TARGET_COMMAND( OUTPUT ... # [ALL] [NO_FORCE] COMMAND ... # [ ...] # ) # - 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 "_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 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) cmake-fedora-2.9.3/Modules/ManageTranslation.cmake0000644000174300017420000005505413560742571021502 0ustar gitgit00000000000000# - 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( # [SRCS ...] # [PO_DIR ] # [MO_DIR |MO_LOCALE_DIR | NO_MO] # [NO_MO] # [LOCALES ... | SYSTEM_LOCALES] # [XGETTEXT_OPTIONS ...] # [MSGMERGE_OPTIONS ] # [MSGFMT_OPTIONS ] # [CLEAN] # [COMMAND ...] # [DEPENDS ...] # ) # - 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: # + : .pot file with path. # + SRCS ... : Source files for xgettext to work on. # + DOMAIN_NAME : gettext domain name. # Default: .pot filename without extension. # + PO_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 . # + MO_DIR dir: Directory to create .gmo files. The .gmo files # are created as: /.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: /locale//LC_MESSAGES/.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 ] # [SRCS ...] # [PO_DIR ] # [MO_DIR ] # [NO_MO] # [LOCALES ... | SYSTEM_LOCALES] # [XGETTEXT_OPTIONS ...] # [MSGMERGE_OPTIONS ] # [MSGFMT_OPTIONS ] # [CLEAN] # [DEPENDS ...] # ) # - 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) cmake-fedora-2.9.3/Modules/ManageUninstall.cmake0000644000174300017420000000153613560742571021151 0ustar gitgit00000000000000# - 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" ) cmake-fedora-2.9.3/Modules/ManageUpload.cmake0000644000174300017420000002504513560742571020425 0ustar gitgit00000000000000# - 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( # COMMAND ... # [COMMENT ] # [ADD_CUSTOM_TARGET_ARGS ...] # ) # - Make an upload target using arbitrary command. # If COMMAND program exists the target 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: ": Upload with ..." # + ADD_CUSTOM_TARGET_ARGS ...: (Optional) Other arguments to be # passed to ADD_CUSTOM_TARGET. # * Targets: # + # # MANAGE_UPLOAD_SCP( # HOST_URL # [USER ] [UPLOAD_FILES ...] [DEPENDS ...] # [REMOTE_DIR ] [OPTIONS ] # [COMMENT ] # [ADD_CUSTOM_TARGET_ARGS ...] # ) # - 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, depends on those files. # Default: ${SOURCE_ARCHIVE_FILE} # + DEPENDS file ...: (Optional) Files that 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: ": Upload with scp [] user@url:dir/file1 ..." # + ADD_CUSTOM_TARGET_ARGS ...: (Optional) Other arguments to be # passed to ADD_CUSTOM_TARGET. # * Targets: # + # # MANAGE_UPLOAD_SFTP( # HOST_URL # [BATCH ] # [USER ] [UPLOAD_FILES ...] [DEPENDS ...] # [REMOTE_DIR ] [OPTIONS ] # [COMMENT ] # [ADD_CUSTOM_TARGET_ARGS ...] # ) # - 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}/-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, depends on those files. # Default: ${SOURCE_ARCHIVE_FILE} # + DEPENDS file ...: (Optional) Files that 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: ": Upload with sftp [] user@url/dir/file1 ..." # + ADD_CUSTOM_TARGET_ARGS ...: (Optional) Other arguments to be # passed to ADD_CUSTOM_TARGET. # * Targets: # + # # # MANAGE_UPLOAD_FEDORAHOSTED( # [USER ] [UPLOAD_FILES ...] [DEPENDS ...] # [OPTIONS ] # [COMMENT ] # [ADD_CUSTOM_TARGET_ARGS ...] # ) # As fedorahosted.org will be retire on 2017 Feb 28 # This function is depreciated. # * 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, depends on those files. # Default: ${SOURCE_ARCHIVE_FILE} # + DEPENDS file ...: (Optional) Files that should depends on, # but no need to upload. # + OPTIONS options: (Optional) scp options. # + COMMENT comment (Optional) Comment when target is being built. # Default: ": Upload with scp [] user@url:dir/file1 ..." # + ADD_CUSTOM_TARGET_ARGS ...: (Optional) Other arguments to be # passed to ADD_CUSTOM_TARGET. # * Targets: # + # # MANAGE_UPLOAD_SOURCEFORGE( # [BATCH ] # [USER ] [UPLOAD_FILES ...] [DEPENDS ...] # [OPTIONS ] # [COMMENT ] # [ADD_CUSTOM_TARGET_ARGS ...] # ) # - 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}/-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, depends on those files. # Default: ${SOURCE_ARCHIVE_FILE} # + DEPENDS file ...: (Optional) Files that should depends on, # but no need to upload. # + OPTIONS options: (Optional) sftp options. # + COMMENT comment (Optional) Comment when target is being built. # Default: ": Upload with sftp [] user@url/dir/file1 ..." # + ADD_CUSTOM_TARGET_ARGS ...: (Optional) Other arguments to be # passed to ADD_CUSTOM_TARGET. # * Targets: # + # # 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_PAGURE targetName) MANAGE_UPLOAD_SCP(${targetName} HOST_URL "pagure.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) cmake-fedora-2.9.3/Modules/ManageVariable.cmake0000644000174300017420000003566013560742571020732 0ustar gitgit00000000000000# - Get or set variables from various sources. # # Included Modules: # - ManageFile # - ManageString # # Defines following functions: # SETTING_STRING_GET_VARIABLE( # [NOUNQUOTE] [NOREPLACE] [] # ) # - 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( # [NOUNQUOTE] [NOREPLACE] # [NOESCAPE_SEMICOLON] [] # ) # - 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( [NOUNQUOTE] [NOREPLACE] # [NOESCAPE_SEMICOLON] [] # ) # - 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( # [NOUNQUOTE] [NOREPLACE] # [NOESCAPE_SEMICOLON] [] # ) # - 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( [NOUNQUOTE] [NOREPLACE] # [NOESCAPE_SEMICOLON] [] # ) # - 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( [] # [[CACHE [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( ) # - 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( [arguments ...]) # - Parse the arguments and put the result in var and var_ # * Parameters: # + var: Main variable name. # + valid_option_list: List name of valid options. # + arguments ...: (Optional) variable to be parsed. # # VARIABLE_TO_ARGN( ) # - 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) cmake-fedora-2.9.3/Modules/ManageVersion.cmake0000644000174300017420000001551613560742571020630 0ustar gitgit00000000000000# - 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([]) # - 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_APPEND() # - Append var to prj_info.cmake. # * Parameters: # + var: Variable to be append to prj_info.cmake. # # PRJ_INFO_CMAKE_WRITE() # - Write the project infomation to prj_info.cmake. # # Defines following macros: # PRJ_INFO_CMAKE_READ() # - 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}) PRJ_INFO_CMAKE_WRITE() IF(NOT CMAKE_SCRIPT_MODE_FILE) ## Non Script mode INCLUDE(ManageTarget) 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=make -Dchangelog=${CHANGELOG_FILE} -Drelease=${RELEASE_NOTES_FILE} -Dprj_info=${PRJ_INFO_CMAKE_FILE} -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) cmake-fedora-2.9.3/Modules/ManageZanata.cmake0000644000174300017420000010606213560742571020416 0ustar gitgit00000000000000# - 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] ] [YES] [ERRORS] [DEBUG] # [CHUNK_SIZE ] # [CLEAN_ZANATA_XML] # [CLIENT_COMMAND ] # [COPY_TRANS ] # [CREATE_SKELETONS] # [DISABLE_SSL_CERT] # [ENCODE_TABS ] # [EXCLUDES ] # [GENERATE_ZANATA_XML] # [INCLUDES ] # [LOCALES ] # [PROJECT ] # [PROJECT_CONFIG ] # [PROJECT_DESC ""] # [PROJECT_NAME ""] # [PROJECT_TYPE ] # [SRC_DIR ] # [TRANS_DIR ] # [TRANS_DIR_PULL ] # [USER_CONFIG ] # [USERNAME ] # [VERSION ] # [ZANATA_EXECUTABLE ] # ) # - 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 "") STRING_APPEND(buf "" "\n") STRING_APPEND(buf " ${${var}_url}" "\n") STRING_APPEND(buf " ${${var}_project}" "\n") STRING_APPEND(buf " ${${var}_version}" "\n") STRING(TOLOWER "${${var}_type}" projectType) STRING_APPEND(buf " ${projectType}" "\n") IF(NOT "${${var}_srcdir}" STREQUAL "") STRING_APPEND(buf " ${${var}_srcdir}" "\n") ENDIF() IF(NOT "${${var}_transdir}" STREQUAL "") STRING_APPEND(buf " ${${var}_transdir}" "\n") ENDIF() IF(NOT "${${var}_locales}" STREQUAL "") STRING_APPEND(buf " " "\n") FOREACH(l ${${${var}_locales}) IF(NOT "${${var}_locales_${l}}" STREQUAL "") STRING_APPEND(buf " ${l}" "\n") ELSE() STRING_APPEND(buf " ${l}" "\n") ENDIF() ENDFOREACH(l) STRING_APPEND(buf " " "\n") ENDIF() STRING_APPEND(buf "" "\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_... 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 [ARGN] ## Parse the arguments from MANAGE_ZANATA. ## Returns: contains the specified arguments ## Defines: _ 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( # # [YES] [BATCH] [ERRORS] [DEBUG] # [DISABLE_SSL_CERT] # [URL ] # [USERNAME ] # [KEY ] # [USER_CONFIG ] # ... # ) 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( ) 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( ) 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( ) 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 "(.*)") ## Is a locale string SET(sL "${CMAKE_MATCH_1}") LIST(APPEND serverLocales "${sL}") ELSEIF("${line}" MATCHES "(.*)") SET(srcDirOrig "${CMAKE_MATCH_1}") ELSEIF("${line}" MATCHES "(.*)") SET(transDirOrig "${CMAKE_MATCH_1}") ELSEIF("${line}" MATCHES "(.*)") SET(url "${CMAKE_MATCH_1}") ELSEIF("${line}" MATCHES "(.*)") SET(project "${CMAKE_MATCH_1}") ELSEIF("${line}" MATCHES "(.*)") SET(version "${CMAKE_MATCH_1}") ELSEIF("${line}" MATCHES "(.*)") 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) cmake-fedora-2.9.3/Modules/ManageZanataDefinition.cmake0000644000174300017420000001327613560742571022433 0ustar gitgit00000000000000# 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_