aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory M. Tuner <gmt@be-evil.net>2014-06-12 15:23:09 -0700
committerGregory M. Tuner <gmt@be-evil.net>2014-06-12 15:23:09 -0700
commit7986c3523496b28334e4fd9a571a375834bf85af (patch)
treebd0426e4ade6875d73cb7781b5370323285978ad
parenteclass/autotools-multilib: drop pointless redundant inheritance (diff)
downloadgmt-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.eclass227
-rw-r--r--eclass/mysql-cmake-multilib.eclass17
-rw-r--r--media-libs/libprojectm/Manifest2
-rw-r--r--media-libs/libprojectm/libprojectm-2.1.0-r2.ebuild2
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)