| 1 | # Copyright 1999-2012 Gentoo Foundation |
1 | # Copyright 1999-2012 Gentoo Foundation |
| 2 | # Distributed under the terms of the GNU General Public License v2 |
2 | # Distributed under the terms of the GNU General Public License v2 |
| 3 | # $Header: /var/cvsroot/gentoo-x86/eclass/cmake-utils.eclass,v 1.80 2012/09/15 16:16:53 zmedico Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/cmake-utils.eclass,v 1.81 2012/09/20 10:32:40 kensington Exp $ |
| 4 | |
4 | |
| 5 | # @ECLASS: cmake-utils.eclass |
5 | # @ECLASS: cmake-utils.eclass |
| 6 | # @MAINTAINER: |
6 | # @MAINTAINER: |
| 7 | # kde@gentoo.org |
7 | # kde@gentoo.org |
| 8 | # @AUTHOR: |
8 | # @AUTHOR: |
| … | |
… | |
| 39 | |
39 | |
| 40 | # @ECLASS-VARIABLE: CMAKE_REMOVE_MODULES |
40 | # @ECLASS-VARIABLE: CMAKE_REMOVE_MODULES |
| 41 | # @DESCRIPTION: |
41 | # @DESCRIPTION: |
| 42 | # Do we want to remove anything? yes or whatever else for no |
42 | # Do we want to remove anything? yes or whatever else for no |
| 43 | CMAKE_REMOVE_MODULES="${CMAKE_REMOVE_MODULES:-yes}" |
43 | CMAKE_REMOVE_MODULES="${CMAKE_REMOVE_MODULES:-yes}" |
|
|
44 | |
|
|
45 | # @ECLASS-VARIABLE: CMAKE_MAKEFILE_GENERATOR |
|
|
46 | # @DESCRIPTION: |
|
|
47 | # Specify a makefile generator to be used by cmake. At this point only "make" |
|
|
48 | # and "ninja" is supported. |
|
|
49 | CMAKE_MAKEFILE_GENERATOR="${CMAKE_MAKEFILE_GENERATOR:-make}" |
| 44 | |
50 | |
| 45 | CMAKEDEPEND="" |
51 | CMAKEDEPEND="" |
| 46 | case ${WANT_CMAKE} in |
52 | case ${WANT_CMAKE} in |
| 47 | always) |
53 | always) |
| 48 | ;; |
54 | ;; |
| … | |
… | |
| 162 | : ${CMAKE_BUILD_DIR:=${WORKDIR}/${P}_build} |
168 | : ${CMAKE_BUILD_DIR:=${WORKDIR}/${P}_build} |
| 163 | fi |
169 | fi |
| 164 | mkdir -p "${CMAKE_BUILD_DIR}" |
170 | mkdir -p "${CMAKE_BUILD_DIR}" |
| 165 | echo ">>> Working in BUILD_DIR: \"$CMAKE_BUILD_DIR\"" |
171 | echo ">>> Working in BUILD_DIR: \"$CMAKE_BUILD_DIR\"" |
| 166 | } |
172 | } |
|
|
173 | |
|
|
174 | # Determine which generator to use |
|
|
175 | _generator_to_use() { |
|
|
176 | if [[ ${CMAKE_MAKEFILE_GENERATOR} = "ninja" ]]; then |
|
|
177 | has_version dev-util/ninja && echo "Ninja" && return |
|
|
178 | fi |
|
|
179 | echo "Unix Makefiles" |
|
|
180 | } |
|
|
181 | |
| 167 | # @FUNCTION: cmake-utils_use_with |
182 | # @FUNCTION: cmake-utils_use_with |
| 168 | # @USAGE: <USE flag> [flag name] |
183 | # @USAGE: <USE flag> [flag name] |
| 169 | # @DESCRIPTION: |
184 | # @DESCRIPTION: |
| 170 | # Based on use_with. See ebuild(5). |
185 | # Based on use_with. See ebuild(5). |
| 171 | # |
186 | # |
| … | |
… | |
| 349 | # Common configure parameters (invariants) |
364 | # Common configure parameters (invariants) |
| 350 | local common_config=${CMAKE_BUILD_DIR}/gentoo_common_config.cmake |
365 | local common_config=${CMAKE_BUILD_DIR}/gentoo_common_config.cmake |
| 351 | local libdir=$(get_libdir) |
366 | local libdir=$(get_libdir) |
| 352 | cat > "${common_config}" <<- _EOF_ |
367 | cat > "${common_config}" <<- _EOF_ |
| 353 | SET (LIB_SUFFIX ${libdir/lib} CACHE STRING "library path suffix" FORCE) |
368 | SET (LIB_SUFFIX ${libdir/lib} CACHE STRING "library path suffix" FORCE) |
| 354 | SET (CMAKE_INSTALL_LIBDIR ${PREFIX}/${libdir} CACHE PATH "Output directory for libraries") |
369 | SET (CMAKE_INSTALL_LIBDIR ${libdir} CACHE PATH "Output directory for libraries") |
| 355 | _EOF_ |
370 | _EOF_ |
| 356 | [[ "${NOCOLOR}" = true || "${NOCOLOR}" = yes ]] && echo 'SET (CMAKE_COLOR_MAKEFILE OFF CACHE BOOL "pretty colors during make" FORCE)' >> "${common_config}" |
371 | [[ "${NOCOLOR}" = true || "${NOCOLOR}" = yes ]] && echo 'SET (CMAKE_COLOR_MAKEFILE OFF CACHE BOOL "pretty colors during make" FORCE)' >> "${common_config}" |
| 357 | |
372 | |
| 358 | # Convert mycmakeargs to an array, for backwards compatibility |
373 | # Convert mycmakeargs to an array, for backwards compatibility |
| 359 | # Make the array a local variable since <=portage-2.1.6.x does not |
374 | # Make the array a local variable since <=portage-2.1.6.x does not |
| … | |
… | |
| 368 | # NOTE CMAKE_BUILD_TYPE can be only overriden via CMAKE_BUILD_TYPE eclass variable |
383 | # NOTE CMAKE_BUILD_TYPE can be only overriden via CMAKE_BUILD_TYPE eclass variable |
| 369 | # No -DCMAKE_BUILD_TYPE=xxx definitions will be in effect. |
384 | # No -DCMAKE_BUILD_TYPE=xxx definitions will be in effect. |
| 370 | local cmakeargs=( |
385 | local cmakeargs=( |
| 371 | --no-warn-unused-cli |
386 | --no-warn-unused-cli |
| 372 | -C "${common_config}" |
387 | -C "${common_config}" |
|
|
388 | -G "$(_generator_to_use)" |
| 373 | -DCMAKE_INSTALL_PREFIX="${EPREFIX}${PREFIX}" |
389 | -DCMAKE_INSTALL_PREFIX="${EPREFIX}${PREFIX}" |
| 374 | "${mycmakeargs_local[@]}" |
390 | "${mycmakeargs_local[@]}" |
| 375 | -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" |
391 | -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" |
| 376 | -DCMAKE_INSTALL_DO_STRIP=OFF |
392 | -DCMAKE_INSTALL_DO_STRIP=OFF |
| 377 | -DCMAKE_USER_MAKE_RULES_OVERRIDE="${build_rules}" |
393 | -DCMAKE_USER_MAKE_RULES_OVERRIDE="${build_rules}" |
| … | |
… | |
| 399 | cmake-utils_src_make() { |
415 | cmake-utils_src_make() { |
| 400 | debug-print-function ${FUNCNAME} "$@" |
416 | debug-print-function ${FUNCNAME} "$@" |
| 401 | |
417 | |
| 402 | _check_build_dir |
418 | _check_build_dir |
| 403 | pushd "${CMAKE_BUILD_DIR}" > /dev/null |
419 | pushd "${CMAKE_BUILD_DIR}" > /dev/null |
|
|
420 | if [[ $(_generator_to_use) = Ninja ]]; then |
| 404 | # first check if Makefile exist otherwise die |
421 | # first check if Makefile exist otherwise die |
|
|
422 | [[ -e build.ninja ]] || die "Makefile not found. Error during configure stage." |
|
|
423 | if [[ "${CMAKE_VERBOSE}" != "OFF" ]]; then |
|
|
424 | #TODO get load average from portage (-l option) |
|
|
425 | ninja ${MAKEOPTS} -v "$@" |
|
|
426 | else |
|
|
427 | ninja "$@" |
|
|
428 | fi || die "ninja failed!" |
|
|
429 | else |
|
|
430 | # first check if Makefile exist otherwise die |
| 405 | [[ -e Makefile ]] || die "Makefile not found. Error during configure stage." |
431 | [[ -e Makefile ]] || die "Makefile not found. Error during configure stage." |
| 406 | if [[ "${CMAKE_VERBOSE}" != "OFF" ]]; then |
432 | if [[ "${CMAKE_VERBOSE}" != "OFF" ]]; then |
| 407 | emake VERBOSE=1 "$@" || die "Make failed!" |
433 | emake VERBOSE=1 "$@" || die "Make failed!" |
| 408 | else |
434 | else |
| 409 | emake "$@" || die "Make failed!" |
435 | emake "$@" || die "Make failed!" |
|
|
436 | fi |
| 410 | fi |
437 | fi |
| 411 | popd > /dev/null |
438 | popd > /dev/null |
| 412 | } |
439 | } |
| 413 | |
440 | |
| 414 | enable_cmake-utils_src_install() { |
441 | enable_cmake-utils_src_install() { |
| 415 | debug-print-function ${FUNCNAME} "$@" |
442 | debug-print-function ${FUNCNAME} "$@" |
| 416 | |
443 | |
| 417 | _check_build_dir |
444 | _check_build_dir |
| 418 | pushd "${CMAKE_BUILD_DIR}" > /dev/null |
445 | pushd "${CMAKE_BUILD_DIR}" > /dev/null |
|
|
446 | if [[ $(_generator_to_use) = Ninja ]]; then |
|
|
447 | DESTDIR=${D} ninja install "$@" || die "died running ninja install" |
|
|
448 | base_src_install_docs |
|
|
449 | else |
| 419 | base_src_install "$@" |
450 | base_src_install "$@" |
|
|
451 | fi |
| 420 | popd > /dev/null |
452 | popd > /dev/null |
| 421 | |
453 | |
| 422 | # Backward compatibility, for non-array variables |
454 | # Backward compatibility, for non-array variables |
| 423 | if [[ -n "${DOCS}" ]] && [[ "$(declare -p DOCS 2>/dev/null 2>&1)" != "declare -a"* ]]; then |
455 | if [[ -n "${DOCS}" ]] && [[ "$(declare -p DOCS 2>/dev/null 2>&1)" != "declare -a"* ]]; then |
| 424 | dodoc ${DOCS} || die "dodoc failed" |
456 | dodoc ${DOCS} || die "dodoc failed" |