diff options
author | Gregory M. Tuner <gmt@be-evil.net> | 2014-06-12 15:23:09 -0700 |
---|---|---|
committer | Gregory M. Tuner <gmt@be-evil.net> | 2014-06-12 15:23:09 -0700 |
commit | 7986c3523496b28334e4fd9a571a375834bf85af (patch) | |
tree | bd0426e4ade6875d73cb7781b5370323285978ad | |
parent | eclass/autotools-multilib: drop pointless redundant inheritance (diff) | |
download | gmt-7986c3523496b28334e4fd9a571a375834bf85af.tar.gz gmt-7986c3523496b28334e4fd9a571a375834bf85af.tar.bz2 gmt-7986c3523496b28334e4fd9a571a375834bf85af.zip |
eclass/cmake-multilib: migrate to upstream-style multilib-minimal basis
Signed-off-by: Gregory M. Tuner <gmt@be-evil.net>
-rw-r--r-- | eclass/cmake-multilib.eclass | 227 | ||||
-rw-r--r-- | eclass/mysql-cmake-multilib.eclass | 17 | ||||
-rw-r--r-- | media-libs/libprojectm/Manifest | 2 | ||||
-rw-r--r-- | media-libs/libprojectm/libprojectm-2.1.0-r2.ebuild | 2 |
4 files changed, 160 insertions, 88 deletions
diff --git a/eclass/cmake-multilib.eclass b/eclass/cmake-multilib.eclass index bdc5247..65f314a 100644 --- a/eclass/cmake-multilib.eclass +++ b/eclass/cmake-multilib.eclass @@ -9,126 +9,191 @@ # Author: Michał Górny <mgorny@gentoo.org> # @BLURB: cmake-utils wrapper for multilib builds # @DESCRIPTION: -# The cmake-multilib.eclass is a cmake-utils.eclass(5) wrapper -# introducing support for building for more than one ABI (multilib). +# The cmake-multilib.eclass provides a glue between cmake-utils.eclass(5) +# and multilib-minimal.eclass(5), aiming to provide a convenient way +# to build packages using cmake for multiple ABIs. # -# Inheriting this eclass sets IUSE and exports cmake-utils phase -# function wrappers which build the package for each supported ABI -# if the appropriate flag is enabled. +# Inheriting this eclass sets IUSE and exports default multilib_src_*() +# sub-phases that call cmake-utils phase functions for each ABI enabled. +# The multilib_src_*() functions can be defined in ebuild just like +# in multilib-minimal, yet they ought to call appropriate cmake-utils +# phase rather than 'default'. -# EAPI=4 is required for meaningful MULTILIB_USEDEP. +# EAPI=5 is required for meaningful MULTILIB_USEDEP. case ${EAPI:-0} in 5) :;; *) die "EAPI=${EAPI} is not supported" ;; esac -inherit my-god-its-full-of-quotation-marks ehooker cmake-utils multilib-build +inherit my-god-its-full-of-quotation-marks ehooker cmake-utils multilib-minimal ehooker EXPORT_FUNCTIONS src_prepare src_configure src_compile src_test src_install cmake-multilib_src_prepare() { debug-print-function "${FUNCNAME}" "$(mg-qm "$@")" - cmake-utils_src_prepare "$@" - [[ ${CMAKE_IN_SOURCE_BUILD} ]] && multilib_copy_sources + + if ehook_fire cmake-multilib-global-pre_src_prepare; then + cmake-utils_src_prepare "$@" + [[ ${CMAKE_IN_SOURCE_BUILD} ]] && multilib_copy_sources + fi + ehook_fire cmake-multilib-global-post_src_prepare -u } -_cmake-multilib_munge_build_dir() { +# this may not be neccesary but for now it's being left in as a backwards- +# compatbility paranoia thing. Worth seeing what happens if we get rid of it +_cmake-multilib_localize_vars() { debug-print-function ${FUNCNAME} "$(mg-qm "$@")" - debug-print "${FUNCNAME} unmunged: S=\"${S}\" BUILD_DIR=\"${BUILD_DIR}\" ECONF_SOURCE=\"${ECONF_SOURCE}\" CMAKE_USE_DIR=\"${CMAKE_USE_DIR}\" (CMAKE_IN_SOURCE_BUILD=\"${CMAKE_IN_SOURCE_BUILD}\")" - # Forgetting munged variables after each ABI is processed + # Forget these variables after each phase is processed local S="${S}" local BUILD_DIR="${BUILD_DIR}" local ECONF_SOURCE="${ECONF_SOURCE}" - local CMAKE_USE_DIR="${CMAKE_USE_DIR}" - - if [[ ${CMAKE_IN_SOURCE_BUILD} ]] ; then - CMAKE_USE_DIR="${CMAKE_USE_DIR:-${BUILD_DIR}}" - # it's debatable if we should change S here. But I think doing so leads to a more intuitive - # result. Certainly, it'd allow more code to work unmodified, when porting non-multibuild ebuilds - S="${CMAKE_USE_DIR}" - fi - debug-print "${FUNCNAME} result: S=\"${S}\" BUILD_DIR=\"${BUILD_DIR}\" ECONF_SOURCE=\"${ECONF_SOURCE}\" CMAKE_USE_DIR=\"${CMAKE_USE_DIR}\" (CMAKE_IN_SOURCE_BUILD=\"${CMAKE_IN_SOURCE_BUILD}\")" "$@" } +# generate ehook listeners for cmake-utils per-phase pre/post ehooks, which wrap +# near-equivalent (but less confusingly named) cmake-multilib e-hooks. +_cmake-multilib_wrap_cmake_utils_phase_hooks() { + local phase evaltext + for phase in src_configure src_compile src_test src_install; do + read -r -d '' evaltext <<-EOF + _cmake-multilib-cmake-utils-pre_${phase}_wrapper() { + debug-print-function \${FUNCNAME} "\$(mg-qm "\$@")" + ehook_fire cmake-multilib-per-abi-pre_${phase} + local rslt=\$? + if [[ \${rslt} == 0 ]] ; then + if multilib_is_native_abi ; then + ehook_fire cmake-multilib-best-abi-pre_${phase} + rslt=\$? + fi + fi + [[ \$rslt == 0 ]] && _CMAKE_MULTILIB_PHASE=${phase} ehook_fire cmake-multilib-internal-per-abi_postproc -u + return \$rslt + } + _cmake-multilib-cmake-utils-post_${phase}_wrapper() { + debug-print-function \${FUNCNAME} "\$(mg-qm "\$@")" + ehook_fire cmake-multilib-per-abi-post_${phase} -u + if multilib_is_native_abi ; then + ehook_fire cmake-multilib-best-abi-post_${phase} -u + fi + } + EOF + eval "${evaltext}" + done + _CMAKE_MULTILIB_CMAKE_UTILS_HOOKS_WRAPPED=yes +} + +[[ ${_CMAKE_MULTILIB_CMAKE_UTILS_HOOKS_WRAPPED} ]] || \ + _cmake-multilib_wrap_cmake_utils_phase_hooks + +# do @GET_LIBDIR@ substitution in each of the named arrays +_cmake-multilib_libdir_subst() { + local _array _array_reference _item + for _array in "$@"; do + local _new_array=() + _array_reference="${_array}[@]" + for _item in "${!_array_reference}"; do + _new_array+=("${_item//@GET_LIBDIR@/$(get_libdir)}") + done + eval "${_array}=(\"\${_new_array[@]}\")" + done +} + +ehook cmake-multilib-internal-per-abi_postproc _cmake-multilib_abi_postproc +# munge @GET_LIBDIR@ arguments flowing into phase actions as appropriate +_cmake-multilib_abi_postproc() { + case ${_CMAKE_MULTILIB_PHASE} in + src_configure) _cmake-multilib_libdir_subst mycmakeargs ;; + src_compile) _cmake-multilib_libdir_subst myninjamakeargs mycmakemakeargs;; + src_test) _cmake-multilib_libdir_subst myctestargs ;; + src_install) _cmake-multilib_libdir_subst mycmakeinstallargs ;; + *) die "Don't know what to do about phase \"${_CMAKE_MULTILIB_PHASE}\"" ;; + esac +} + +multilib_src_configure() { + debug-print-function "${FUNCNAME}" "$(mg-qm "$@")" + [[ ${CMAKE_MULTILIB_IN_SOURCE_BUILD} ]] && local ECONF_SOURCE=${BUILD_DIR} + + ehook cmake-utils-pre_src_configure _cmake-multilib-cmake-utils-pre_src_configure_wrapper + ehook cmake-utils-post_src_configure _cmake-multilib-cmake-utils-post_src_configure_wrapper + _cmake-multilib_localize_vars cmake-utils_src_configure "${_cm_args[@]}" + eunhook cmake-utils-pre_src_configure _cmake-multilib-cmake-utils-pre_src_configure_wrapper + eunhook cmake-utils-post_src_configure _cmake-multilib-cmake-utils-post_src_configure_wrapper +} + cmake-multilib_src_configure() { + debug-print-function ${FUNCNAME} "$(mg-qm "$@")" + + local _cm_args=( "$@" ) + ehook_fire cmake-multilib-global-pre_src_configure && \ + multilib-minimal_src_configure + ehook_fire cmake-multilib-global-post_src_configure -u +} + +multilib_src_compile() { debug-print-function "${FUNCNAME}" "$(mg-qm "$@")" - _cmake-multilib_src_configure_wrapper() { - debug-print-function "${FUNCNAME}" "$(mg-qm "$@")" - declare -a mycmakeargs=("${mycmakeargs[@]}") - declare -a morecmakeargs=("$@") - debug-print "${FUNCNAME} (pre-pre-hook): mycmakeargs=($(mg-qm "${mycmakeargs[@]}"))" - debug-print "${FUNCNAME} (pre-pre-hook): morecmakeargs=($(mg-qm "${morecmakeargs[@]}"))" - if ehook_fire cmake-multilib-pre_src_configure ; then - debug-print "${FUNCNAME} (post-pre-hook): mycmakeargs=($(mg-qm "${mycmakeargs[@]}"))" - debug-print "${FUNCNAME} (post-pre-hook): morecmakeargs=($(mg-qm "${morecmakeargs[@]}"))" - _cmake-multilib_munge_build_dir \ - cmake-utils_src_configure "${morecmakeargs[@]}" - fi - ehook_fire cmake-multilib-post_src_configure -u - } - - multilib_parallel_foreach_abi _cmake-multilib_src_configure_wrapper "${@}" + ehook cmake-utils-pre_src_compile _cmake-multilib-cmake-utils-pre_src_compile_wrapper + ehook cmake-utils-post_src_compile _cmake-multilib-cmake-utils-post_src_compile_wrapper + _cmake-multilib_localize_vars cmake-utils_src_compile "${_cm_args[@]}" + eunhook cmake-utils-pre_src_compile _cmake-multilib-cmake-utils-pre_src_compile_wrapper + eunhook cmake-utils-post_src_compile _cmake-multilib-cmake-utils-post_src_compile_wrapper } cmake-multilib_src_compile() { + debug-print-function ${FUNCNAME} "$(mg-qm "$@")" + + local _cm_args=( "$@" ) + ehook_fire cmake-multilib-global-pre_src_compile && \ + multilib-minimal_src_compile + ehook_fire cmake-multilib-global-post_src_compile -u +} + +multilib_src_test() { debug-print-function "${FUNCNAME}" "$(mg-qm "$@")" - _cmake-multilib_src_compile_wrapper() { - debug-print-function "${FUNCNAME}" "$(mg-qm "$@")" - declare -a cmake_compile_args=("$@") - debug-print "${FUNCNAME} (pre-pre-hook): cmake_compile_args=($(mg-qm "${cmake_compile_args[@]}"))" - if ehook_fire cmake-multilib-pre_src_compile ; then - debug-print "${FUNCNAME} (post-pre-hook): cmake_compile_args=($(mg-qm "${cmake_compile_args[@]}"))" - _cmake-multilib_munge_build_dir \ - cmake-utils_src_compile "${cmake_compile_args[@]}" - fi - ehook_fire cmake-multilib-post_src_compile -u - } - - multilib_foreach_abi _cmake-multilib_src_compile_wrapper "${@}" + ehook cmake-utils-pre_src_test _cmake-multilib-cmake-utils-pre_src_test_wrapper + ehook cmake-utils-post_src_test _cmake-multilib-cmake-utils-post_src_test_wrapper + _cmake-multilib_localize_vars cmake-utils_src_test "${_cm_args[@]}" + eunhook cmake-utils-pre_src_test _cmake-multilib-cmake-utils-pre_src_test_wrapper + eunhook cmake-utils-post_src_test _cmake-multilib-cmake-utils-post_src_test_wrapper } cmake-multilib_src_test() { + debug-print-function ${FUNCNAME} "$(mg-qm "$@")" + + local _cm_args=( "$@" ) + ehook_fire cmake-multilib-global-pre_src_test && \ + multilib-minimal_src_test + ehook_fire cmake-multilib-global-post_src_test -u +} + +multilib_src_install() { debug-print-function "${FUNCNAME}" "$(mg-qm "$@")" - _cmake-multilib_src_test_wrapper() { - debug-print-function "${FUNCNAME}" "$(mg-qm "$@")" - declare -a cmake_test_args=("$@") - debug-print "${FUNCNAME} (pre-pre-hook): cmake_test_args=($(mg-qm "${cmake_test_args[@]}"))" - if ehook_fire cmake-multilib-pre_src_test ; then - debug-print "${FUNCNAME} (post-pre-hook): cmake_test_args=($(mg-qm "${cmake_test_args[@]}"))" - _cmake-multilib_munge_build_dir \ - cmake-utils_src_test "${cmake_test_args[@]}" - fi - ehook_fire cmake-multilib-post_src_test -u - } - - multilib_foreach_abi _cmake-multilib_src_test_wrapper "${@}" + # override some variables that cmake-utils might attempt to process, but + # for which we have alternate processing in multilib_src_install_all. This + # prevents pointless repeat-installation of nongenerated documentation. + local DOCS=() HTML_DOCS=() + ehook cmake-utils-pre_src_install _cmake-multilib-cmake-utils-pre_src_install_wrapper + ehook cmake-utils-post_src_install _cmake-multilib-cmake-utils-post_src_install_wrapper + _cmake-multilib_localize_vars cmake-utils_src_install "${_cm_args[@]}" + eunhook cmake-utils-pre_src_install _cmake-multilib-cmake-utils-pre_src_install_wrapper + eunhook cmake-utils-post_src_install _cmake-multilib-cmake-utils-post_src_install_wrapper +} + +multilib_src_install_all() { + debug-print-function ${FUNCNAME} "$(mg-qm "$@")" + einstalldocs } cmake-multilib_src_install() { debug-print-function "${FUNCNAME}" "$(mg-qm "$@")" - cmake-multilib_secure_install() { - debug-print-function "${FUNCNAME}" "$(mg-qm "$@")" - declare -a cmake_install_args=("$@") - debug-print "${FUNCNAME} (pre-pre-hook): cmake_install_args=($(mg-qm "${cmake_install_args[@]}"))" - if ehook_fire cmake-multilib-pre_src_install ; then - debug-print "${FUNCNAME} (post-pre-hook): cmake_install_args=($(mg-qm "${cmake_install_args[@]}"))" - _cmake-multilib_munge_build_dir \ - cmake-utils_src_install "${cmake_install_args[@]}" - fi - ehook_fire cmake-multilib-post_src_install -u - - # Make sure all headers are the same for each ABI. - multilib_prepare_wrappers - multilib_check_headers - } - - multilib_foreach_abi cmake-multilib_secure_install "${@}" - multilib_install_wrappers + local _cm_args=( "$@" ) + ehook_fire cmake-multilib-global-pre_src_install && \ + multilib-minimal_src_install + ehook_fire cmake-multilib-global-post_src_install -u } diff --git a/eclass/mysql-cmake-multilib.eclass b/eclass/mysql-cmake-multilib.eclass index 4ed1e56..cd68066 100644 --- a/eclass/mysql-cmake-multilib.eclass +++ b/eclass/mysql-cmake-multilib.eclass @@ -18,6 +18,13 @@ inherit flag-o-matic multilib prefix eutils mysql-cmake cmake-multilib +# FIXME +# systemtap is currently broken for multilib targets, so don't allow +# multiple abi's to be selected if that use-flag is on :( +__SHITTY_HACK=( ${MULTILIB_USEDEP//(-)\?/ } ) +REQUIRED_USE="systemtap? ( ?? ( "${__SHITTY_HACK[@]#,}" ) )" +unset __SHITTY_HACK + # # HELPER FUNCTIONS: # @@ -54,7 +61,7 @@ configure_cmake_minimal() { -DWITHOUT_PARTITION_STORAGE_ENGINE=1 -DWITHOUT_INNOBASE_STORAGE_ENGINE=1 -DWITH_UNIT_TESTS=0 - -DENABLE_DTRACE=0 + -DENABLE_DTRACE=OFF ) } @@ -74,9 +81,9 @@ configure_cmake_standard() { $(cmake-utils_use_with debug) $(cmake-utils_use_with embedded EMBEDDED_SERVER) $(cmake-utils_use_with profiling) - $(cmake-utils_use_enable systemtap DTRACE) $(cmake-utils_use_with test UNIT_TESTS) $(cmake-utils_use_enable static-libs STATIC_LIBS) + -DENABLE_DTRACE=$(usex systemtap ON OFF) ) if use static; then @@ -261,7 +268,7 @@ mysql-cmake-multilib_src_configure() { # bug #283926, with GCC4.4, this is required to get correct behavior. append-flags -fno-strict-aliasing - ehook cmake-multilib-pre_src_configure mysql_cmake_abi_pre_configure + ehook cmake-multilib-per-abi-pre_src_configure mysql_cmake_abi_pre_configure cmake-multilib_src_configure } @@ -293,8 +300,8 @@ mysql-cmake-multilib_src_install() { debug-print-function ${FUNCNAME} "$@" # Make sure the vars are correctly initialized - ehook cmake-multilib-pre_src_install mysql_init_vars - ehook cmake-multilib-post_src_install _mysql-cmake-post-src_install_perabi + ehook cmake-multilib-per-abi-pre_src_install mysql_init_vars + ehook cmake-multilib-per-abi-post_src_install _mysql-cmake-post-src_install_perabi cmake-multilib_src_install # Convenience links diff --git a/media-libs/libprojectm/Manifest b/media-libs/libprojectm/Manifest index 5b25442..43fe73e 100644 --- a/media-libs/libprojectm/Manifest +++ b/media-libs/libprojectm/Manifest @@ -3,6 +3,6 @@ AUX libprojectm-2.0.1-pcfix.patch 505 SHA256 242cfdb513f48a24b7c0ed8b32616042472 AUX libprojectm-2.1.0-multilib.patch 1529 SHA256 e1c4dd300d7513f588d07faaa8e638e79ba011c76dba8eecad9df4826653c91a SHA512 cfbf57500aa3abb0efe812ce430c5c0ad35068bc2904bae934d9a0c526f679f639accd7e7c454fe192c3dbd37c192dcad995d0b411b6ba36af141fcb8d57da1c WHIRLPOOL a7207006001d7208b14989077487984f41fd083b84647a89e30c562947e74e506b5ee995d1946f8f7b29e697ee43f9456f9d44404fdd8b315ac7ffecec921f87 AUX libprojectm-2.1.0-path.patch 668 SHA256 13e71427f25229e8729153fa31cf72c0d0e8de3d8c5767cb5dffee94adeacdc0 SHA512 a119198702e63c7fd5d5aff634f81fe49a6a5689b86fea4152c27601d2d78a01ff51bf3edada50dd31bbc0a505f2ae0f5846a29e3c41ef9439b5f196c8423a99 WHIRLPOOL 19e6461da1c7114567eb1999b286aadd01adda8fd630f16071cfc5ef884ea1170adcc56cd10bb3beebe6dc9e8fde6c1999c6e9d3c5def8e83add95fb55f54e1d DIST projectM-complete-2.1.0-Source.tar.gz 31130351 SHA256 513204f033006bd3dcdf8aada196d816d6b7187266ddcbb1594d0285cc9406ee SHA512 53f4531208d2594f1c28a7f7842fb5ee3349ca9e48f9f0d999a90b6a62d315c9c0ae9cba1cdfacb8a149eba3e5ddc4517ac406ee2c53718191be8e26ee2cca5f WHIRLPOOL f60ee006dac8465a17e1397a9331bdabd7a3967455f9e16644e1ff5e544ab1662b3aa8a2b428c0258f0b38c91513bfbda3cd29b4419e05e64aa410e61ad03972 -EBUILD libprojectm-2.1.0-r2.ebuild 1647 SHA256 5e9cae5c0c75738a7c5a30493bcce90c48adcb60ce0034dacbfd5f342ce55ccb SHA512 5d87bb8aa0c39b916c0303943763e85ac59af61b739e873d9b958bc6c15336ede9f22fd71b4c74118cfd16230381ed7a20077743660d78b771697b4782292da4 WHIRLPOOL 9e6dbc905e8344d2c28848c65e220473e699a7f120313618aae7a0469e74d7398a4caaa462b420a5c61455aa2c7aa2773b0f0ffab5c6fb42c4f5523a045710a4 +EBUILD libprojectm-2.1.0-r2.ebuild 1655 SHA256 ba4b8288b59ae5d78900f77393449dd5440b2dcf9eabbae8f2bbbf2a3419851d SHA512 6763689f02fb041239406fc3486e456c5893aff3f98d65b2ce6754011dd4e66c7c04553ab94fdab7b9d56502207800ebf2a4ca2d44b7cdd494f691d78c8212c6 WHIRLPOOL f4f3427c3a2d6da16ae0196b150f5a09b6c3428188bd8aab2f09cc4fc731ff021faca99ab69590852162f7bd12b4aeca62482e02fd85aabd60c9767752dda537 MISC ChangeLog 8409 SHA256 a3300dcaef4de95c9e1806d4724c827e1352302fb9b8f3ae35939950fb47956f SHA512 c8b79560f219e2174f21a1c105cc5ca3d8763aa4ea3249a2d454064b10a842a4f16c8ca321019bf593089dc54779ca85274bcd00c245ea359f47789635081de4 WHIRLPOOL fb39b81439f69b6ba391ea8d1636276091798d01f065094a59fdf4cda47fd0b85169b98f97f50e7bb59cfa4474dac39cc3fe5335cf0cd662fdd82e911cc0c221 MISC metadata.xml 158 SHA256 dfb5b47e6836db39fb187301dfcff1c2605e91d13d21db160806a563d8c75f9b SHA512 90f74979d228a35f81de50665ead63d228bc4f0d11f3def4832c9607f4242cbc4562db0a123bdcf2c4b6e0be78fc5565a65f75cdb53ed4c8d45544ebf74255dc WHIRLPOOL a90483bd4fa01ed5fa21bfe9f59c11b97c793146e3031eae342a3355c6dc2e4ef2b356af0bf711b5e16e16551c91d63ecdbb48e708df606017264e8bff5e9fe9 diff --git a/media-libs/libprojectm/libprojectm-2.1.0-r2.ebuild b/media-libs/libprojectm/libprojectm-2.1.0-r2.ebuild index d78fbcc..588065b 100644 --- a/media-libs/libprojectm/libprojectm-2.1.0-r2.ebuild +++ b/media-libs/libprojectm/libprojectm-2.1.0-r2.ebuild @@ -51,7 +51,7 @@ src_configure() { cmake-multilib_src_configure } -ehook cmake-multilib_pre_src_configure my_abi_pre_configure +ehook cmake-multilib-per-abi-pre_src_configure my_abi_pre_configure my_abi_pre_configure() { if use video_cards_nvidia; then append-ldflags -L/opt/nvidia-cg-toolkit/$(get_libdir) |