/[gentoo-x86]/eclass/cmake-utils.eclass
Gentoo

Diff of /eclass/cmake-utils.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.17 Revision 1.39
1# Copyright 1999-2007 Gentoo Foundation 1# Copyright 1999-2009 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.17 2009/03/10 23:22:39 scarabeus Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/cmake-utils.eclass,v 1.39 2009/12/22 22:52:52 scarabeus 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# @AUTHORS: 8#
9# @CODE
9# Tomáš Chvátal <scarabeus@gentoo.org> 10# Tomáš Chvátal <scarabeus@gentoo.org>
10# Maciej Mrozowski <reavertm@poczta.fm> 11# Maciej Mrozowski <reavertm@poczta.fm>
11# (undisclosed contributors) 12# (undisclosed contributors)
12# Original author: Zephyrus (zephyrus@mirach.it) 13# Original author: Zephyrus (zephyrus@mirach.it)
14# @CODE
13# @BLURB: common ebuild functions for cmake-based packages 15# @BLURB: common ebuild functions for cmake-based packages
14# @DESCRIPTION: 16# @DESCRIPTION:
15# The cmake-utils eclass contains functions that make creating ebuilds for 17# The cmake-utils eclass contains functions that make creating ebuilds for
16# cmake-based packages much easier. 18# cmake-based packages much easier.
17# Its main features are support of out-of-source builds as well as in-source 19# Its main features are support of out-of-source builds as well as in-source
18# builds and an implementation of the well-known use_enable and use_with 20# builds and an implementation of the well-known use_enable and use_with
19# functions for CMake. 21# functions for CMake.
20 22
23# @ECLASS-VARIABLE: WANT_CMAKE
24# @DESCRIPTION:
25# Specify if cmake-utils eclass should depend on cmake optionaly or not.
26# This is usefull when only part of aplication is using cmake build system.
27# Valid values are: always [default], optional (where the value is the useflag
28# used for optionality)
29WANT_CMAKE="${WANT_CMAKE:-always}"
30CMAKEDEPEND=""
31case ${WANT_CMAKE} in
32 always)
33 ;;
34 *)
35 IUSE+=" ${WANT_CMAKE}"
36 CMAKEDEPEND+="${WANT_CMAKE}? ( "
37 ;;
38esac
21inherit toolchain-funcs multilib flag-o-matic base 39inherit toolchain-funcs multilib flag-o-matic base
22 40
23EXPF="src_compile src_test src_install" 41CMAKE_EXPF="src_compile src_test src_install"
24case ${EAPI:-0} in 42case ${EAPI:-0} in
25 2) EXPF="${EXPF} src_configure" 43 3|2) CMAKE_EXPF+=" src_configure" ;;
26 ;;
27 1|0) ;; 44 1|0) ;;
28 *) die "Unknown EAPI, Bug eclass maintainers." ;; 45 *) die "Unknown EAPI, Bug eclass maintainers." ;;
29esac 46esac
30EXPORT_FUNCTIONS ${EXPF} 47EXPORT_FUNCTIONS ${CMAKE_EXPF}
31 48
32: ${DESCRIPTION:="Based on the ${ECLASS} eclass"} 49: ${DESCRIPTION:="Based on the ${ECLASS} eclass"}
33 50
51if [[ ${PN} != cmake ]]; then
34DEPEND=">=dev-util/cmake-2.4.6-r1" 52 CMAKEDEPEND+=">=dev-util/cmake-2.6.2-r1"
53fi
54
55CMAKEDEPEND+=" userland_GNU? ( >=sys-apps/findutils-4.4.0 )"
56
57[[ ${WANT_CMAKE} = always ]] || CMAKEDEPEND+=" )"
58
59DEPEND="${CMAKEDEPEND}"
60unset CMAKEDEPEND
35 61
36# Internal functions used by cmake-utils_use_* 62# Internal functions used by cmake-utils_use_*
37_use_me_now() { 63_use_me_now() {
38 debug-print-function ${FUNCNAME} "$@" 64 debug-print-function ${FUNCNAME} "$@"
65
66 local uper capitalised x
39 [[ -z $2 ]] && die "cmake-utils_use-$1 <USE flag> [<flag name>]" 67 [[ -z $2 ]] && die "cmake-utils_use-$1 <USE flag> [<flag name>]"
68 if [[ ! -z $3 ]]; then
69 # user specified the use name so use it
40 echo "-D$1_${3:-$2}=$(use $2 && echo ON || echo OFF)" 70 echo "-D$1$3=$(use $2 && echo ON || echo OFF)"
71 else
72 # use all various most used combinations
73 uper=$(echo ${2} | tr '[:lower:]' '[:upper:]')
74 capitalised=$(echo ${2} | sed 's/\<\(.\)\([^ ]*\)/\u\1\L\2/g')
75 for x in $2 $uper $capitalised; do
76 echo "-D$1$x=$(use $2 && echo ON || echo OFF) "
77 done
78 fi
41} 79}
42_use_me_now_inverted() { 80_use_me_now_inverted() {
43 debug-print-function ${FUNCNAME} "$@" 81 debug-print-function ${FUNCNAME} "$@"
82
83 local uper capitalised x
44 [[ -z $2 ]] && die "cmake-utils_use-$1 <USE flag> [<flag name>]" 84 [[ -z $2 ]] && die "cmake-utils_use-$1 <USE flag> [<flag name>]"
85 if [[ ! -z $3 ]]; then
86 # user specified the use name so use it
45 echo "-D$1_${3:-$2}=$(use $2 && echo OFF || echo ON)" 87 echo "-D$1$3=$(use $2 && echo OFF || echo ON)"
88 else
89 # use all various most used combinations
90 uper=$(echo ${2} | tr '[:lower:]' '[:upper:]')
91 capitalised=$(echo ${2} | sed 's/\<\(.\)\([^ ]*\)/\u\1\L\2/g')
92 for x in $2 $uper $capitalised; do
93 echo "-D$1$x=$(use $2 && echo OFF || echo ON) "
94 done
95 fi
46} 96}
47 97
48# @ECLASS-VARIABLE: DOCS 98# @ECLASS-VARIABLE: DOCS
49# @DESCRIPTION: 99# @DESCRIPTION:
50# Documents passed to dodoc command. 100# Documents passed to dodoc command.
52# @ECLASS-VARIABLE: HTML_DOCS 102# @ECLASS-VARIABLE: HTML_DOCS
53# @DESCRIPTION: 103# @DESCRIPTION:
54# Documents passed to dohtml command. 104# Documents passed to dohtml command.
55 105
56# @ECLASS-VARIABLE: PREFIX 106# @ECLASS-VARIABLE: PREFIX
57# @DESCRIPTION 107# @DESCRIPTION:
58# Eclass respects PREFIX variable, though it's not recommended way to set 108# Eclass respects PREFIX variable, though it's not recommended way to set
59# install/lib/bin prefixes. 109# install/lib/bin prefixes.
60# Use -DCMAKE_INSTALL_PREFIX=... CMake variable instead. 110# Use -DCMAKE_INSTALL_PREFIX=... CMake variable instead.
61 111
62# @ECLASS-VARIABLE: CMAKE_IN_SOURCE_BUILD 112# @ECLASS-VARIABLE: CMAKE_IN_SOURCE_BUILD
63# @DESCRIPTION: 113# @DESCRIPTION:
64# Set to enable in-source build. 114# Set to enable in-source build.
65
66# @ECLASS-VARIABLE: CMAKE_NO_COLOR
67# @DESCRIPTION:
68# Set to disable cmake output coloring.
69 115
70# @ECLASS-VARIABLE: CMAKE_VERBOSE 116# @ECLASS-VARIABLE: CMAKE_VERBOSE
71# @DESCRIPTION: 117# @DESCRIPTION:
72# Set to enable verbose messages during compilation. 118# Set to enable verbose messages during compilation.
73 119
82 128
83# @FUNCTION: _check_build_dir 129# @FUNCTION: _check_build_dir
84# @DESCRIPTION: 130# @DESCRIPTION:
85# Determine using IN or OUT source build 131# Determine using IN or OUT source build
86_check_build_dir() { 132_check_build_dir() {
87 # in/out source build 133 # @ECLASS-VARIABLE: CMAKE_USE_DIR
134 # @DESCRIPTION:
135 # Sets the directory where we are working with cmake.
136 # For example when application uses autotools and only one
137 # plugin needs to be done by cmake.
138 # By default it uses ${S}.
139 : ${CMAKE_USE_DIR:=${S}}
140
141 # @ECLASS-VARIABLE: CMAKE_BUILD_DIR
142 # @DESCRIPTION:
143 # Specify the build directory where all cmake processed
144 # files should be located.
145 #
146 # For installing binary doins "${CMAKE_BUILD_DIR}/${PN}"
88 if [[ -n "${CMAKE_IN_SOURCE_BUILD}" ]]; then 147 if [[ -n ${CMAKE_IN_SOURCE_BUILD} ]]; then
148 # we build in source dir
89 CMAKE_BUILD_DIR="${S}" 149 CMAKE_BUILD_DIR="${CMAKE_USE_DIR}"
90 else 150 elif [[ ${CMAKE_USE_DIR} = ${WORKDIR} ]]; then
151 # out of tree build, but with $S=$WORKDIR, see bug #273949 for reason.
91 CMAKE_BUILD_DIR="${WORKDIR}/${PN}_build" 152 CMAKE_BUILD_DIR="${CMAKE_USE_DIR}/build"
153 else
154 # regular out of tree build
155 [[ ${1} = init || -d ${CMAKE_USE_DIR}_build ]] && SUF="_build" || SUF=""
156 CMAKE_BUILD_DIR="${CMAKE_USE_DIR}${SUF}"
157
92 fi 158 fi
93 echo ">>> Working in BUILD_DIR: \"$CMAKE_BUILD_DIR\"" 159 echo ">>> Working in BUILD_DIR: \"$CMAKE_BUILD_DIR\""
94} 160}
95# @FUNCTION: cmake-utils_use_with 161# @FUNCTION: cmake-utils_use_with
96# @USAGE: <USE flag> [flag name] 162# @USAGE: <USE flag> [flag name]
97# @DESCRIPTION: 163# @DESCRIPTION:
98# Based on use_with. See ebuild(5). 164# Based on use_with. See ebuild(5).
99# 165#
100# `cmake-utils_use_with foo FOO` echoes -DWITH_FOO=ON if foo is enabled 166# `cmake-utils_use_with foo FOO` echoes -DWITH_FOO=ON if foo is enabled
101# and -DWITH_FOO=OFF if it is disabled. 167# and -DWITH_FOO=OFF if it is disabled.
102cmake-utils_use_with() { _use_me_now WITH "$@" ; } 168cmake-utils_use_with() { _use_me_now WITH_ "$@" ; }
103 169
104# @FUNCTION: cmake-utils_use_enable 170# @FUNCTION: cmake-utils_use_enable
105# @USAGE: <USE flag> [flag name] 171# @USAGE: <USE flag> [flag name]
106# @DESCRIPTION: 172# @DESCRIPTION:
107# Based on use_enable. See ebuild(5). 173# Based on use_enable. See ebuild(5).
108# 174#
109# `cmake-utils_use_enable foo FOO` echoes -DENABLE_FOO=ON if foo is enabled 175# `cmake-utils_use_enable foo FOO` echoes -DENABLE_FOO=ON if foo is enabled
110# and -DENABLE_FOO=OFF if it is disabled. 176# and -DENABLE_FOO=OFF if it is disabled.
111cmake-utils_use_enable() { _use_me_now ENABLE "$@" ; } 177cmake-utils_use_enable() { _use_me_now ENABLE_ "$@" ; }
112 178
113# @FUNCTION: cmake-utils_use_disable 179# @FUNCTION: cmake-utils_use_disable
114# @USAGE: <USE flag> [flag name] 180# @USAGE: <USE flag> [flag name]
115# @DESCRIPTION: 181# @DESCRIPTION:
116# Based on inversion of use_enable. See ebuild(5). 182# Based on inversion of use_enable. See ebuild(5).
117# 183#
118# `cmake-utils_use_enable foo FOO` echoes -DDISABLE_FOO=OFF if foo is enabled 184# `cmake-utils_use_enable foo FOO` echoes -DDISABLE_FOO=OFF if foo is enabled
119# and -DDISABLE_FOO=ON if it is disabled. 185# and -DDISABLE_FOO=ON if it is disabled.
120cmake-utils_use_disable() { _use_me_now_inverted DISABLE "$@" ; } 186cmake-utils_use_disable() { _use_me_now_inverted DISABLE_ "$@" ; }
121 187
122# @FUNCTION: cmake-utils_use_no 188# @FUNCTION: cmake-utils_use_no
123# @USAGE: <USE flag> [flag name] 189# @USAGE: <USE flag> [flag name]
124# @DESCRIPTION: 190# @DESCRIPTION:
125# Based on use_disable. See ebuild(5). 191# Based on use_disable. See ebuild(5).
126# 192#
127# `cmake-utils_use_no foo FOO` echoes -DNO_FOO=OFF if foo is enabled 193# `cmake-utils_use_no foo FOO` echoes -DNO_FOO=OFF if foo is enabled
128# and -DNO_FOO=ON if it is disabled. 194# and -DNO_FOO=ON if it is disabled.
129cmake-utils_use_no() { _use_me_now_inverted NO "$@" ; } 195cmake-utils_use_no() { _use_me_now_inverted NO_ "$@" ; }
130 196
131# @FUNCTION: cmake-utils_use_want 197# @FUNCTION: cmake-utils_use_want
132# @USAGE: <USE flag> [flag name] 198# @USAGE: <USE flag> [flag name]
133# @DESCRIPTION: 199# @DESCRIPTION:
134# Based on use_enable. See ebuild(5). 200# Based on use_enable. See ebuild(5).
135# 201#
136# `cmake-utils_use_want foo FOO` echoes -DWANT_FOO=ON if foo is enabled 202# `cmake-utils_use_want foo FOO` echoes -DWANT_FOO=ON if foo is enabled
137# and -DWANT_FOO=OFF if it is disabled. 203# and -DWANT_FOO=OFF if it is disabled.
138cmake-utils_use_want() { _use_me_now WANT "$@" ; } 204cmake-utils_use_want() { _use_me_now WANT_ "$@" ; }
139 205
140# @FUNCTION: cmake-utils_use_build 206# @FUNCTION: cmake-utils_use_build
141# @USAGE: <USE flag> [flag name] 207# @USAGE: <USE flag> [flag name]
142# @DESCRIPTION: 208# @DESCRIPTION:
143# Based on use_enable. See ebuild(5). 209# Based on use_enable. See ebuild(5).
144# 210#
145# `cmake-utils_use_build foo FOO` echoes -DBUILD_FOO=ON if foo is enabled 211# `cmake-utils_use_build foo FOO` echoes -DBUILD_FOO=ON if foo is enabled
146# and -DBUILD_FOO=OFF if it is disabled. 212# and -DBUILD_FOO=OFF if it is disabled.
147cmake-utils_use_build() { _use_me_now BUILD "$@" ; } 213cmake-utils_use_build() { _use_me_now BUILD_ "$@" ; }
148 214
149# @FUNCTION: cmake-utils_use_has 215# @FUNCTION: cmake-utils_use_has
150# @USAGE: <USE flag> [flag name] 216# @USAGE: <USE flag> [flag name]
151# @DESCRIPTION: 217# @DESCRIPTION:
152# Based on use_enable. See ebuild(5). 218# Based on use_enable. See ebuild(5).
153# 219#
154# `cmake-utils_use_has foo FOO` echoes -DHAVE_FOO=ON if foo is enabled 220# `cmake-utils_use_has foo FOO` echoes -DHAVE_FOO=ON if foo is enabled
155# and -DHAVE_FOO=OFF if it is disabled. 221# and -DHAVE_FOO=OFF if it is disabled.
156cmake-utils_use_has() { _use_me_now HAVE "$@" ; } 222cmake-utils_use_has() { _use_me_now HAVE_ "$@" ; }
157
158# @FUNCTION: cmake-utils_has
159# @DESCRIPTION:
160# Deprecated, use cmake-utils_use_has, kept now for backcompat.
161cmake-utils_has() { ewarn "QA: ebuild is using deprecated call. Inform maintainer." ; _use_me_now HAVE "$@" ; }
162 223
163# @FUNCTION: cmake-utils_use 224# @FUNCTION: cmake-utils_use
164# @USAGE: <USE flag> [flag name] 225# @USAGE: <USE flag> [flag name]
165# @DESCRIPTION: 226# @DESCRIPTION:
166# Based on use_enable. See ebuild(5). 227# Based on use_enable. See ebuild(5).
174_modify-cmakelists() { 235_modify-cmakelists() {
175 debug-print-function ${FUNCNAME} "$@" 236 debug-print-function ${FUNCNAME} "$@"
176 237
177 # Comment out all set (<some_should_be_user_defined_variable> value) 238 # Comment out all set (<some_should_be_user_defined_variable> value)
178 # TODO Add QA checker - inform when variable being checked for below is set in CMakeLists.txt 239 # TODO Add QA checker - inform when variable being checked for below is set in CMakeLists.txt
179 find "${S}" -name CMakeLists.txt \ 240 find "${CMAKE_USE_DIR}" -name CMakeLists.txt \
180 -exec sed -i -e '/^[[:space:]]*[sS][eE][tT][[:space:]]*([[:space:]]*CMAKE_BUILD_TYPE.*)/{s/^/#IGNORE /g}' {} + \ 241 -exec sed -i -e '/^[[:space:]]*[sS][eE][tT][[:space:]]*([[:space:]]*CMAKE_BUILD_TYPE.*)/{s/^/#IGNORE /g}' {} + \
181 -exec sed -i -e '/^[[:space:]]*[sS][eE][tT][[:space:]]*([[:space:]]*CMAKE_INSTALL_PREFIX.*)/{s/^/#IGNORE /g}' {} + \ 242 -exec sed -i -e '/^[[:space:]]*[sS][eE][tT][[:space:]]*([[:space:]]*CMAKE_INSTALL_PREFIX.*)/{s/^/#IGNORE /g}' {} + \
182 || die "${LINENO}: failed to disable hardcoded settings" 243 || die "${LINENO}: failed to disable hardcoded settings"
183 244
184 # NOTE Append some useful summary here 245 # NOTE Append some useful summary here
185 echo ' 246 cat >> CMakeLists.txt <<- _EOF_
247
186MESSAGE(STATUS "<<< Gentoo configuration >>> 248 MESSAGE(STATUS "<<< Gentoo configuration >>>
187Build type: ${CMAKE_BUILD_TYPE} 249 Build type: ${CMAKE_BUILD_TYPE}
188Install path: ${CMAKE_INSTALL_PREFIX}\n")' >> CMakeLists.txt 250 Install path: ${CMAKE_INSTALL_PREFIX}\n")
251 _EOF_
189} 252}
190 253
191# @FUNCTION: cmake-utils_src_configure 254# @FUNCTION: enable_cmake-utils_src_configure
192# @DESCRIPTION: 255# @DESCRIPTION:
193# General function for configuring with cmake. Default behaviour is to start an 256# General function for configuring with cmake. Default behaviour is to start an
194# out-of-source build. 257# out-of-source build.
195cmake-utils_src_configure() { 258enable_cmake-utils_src_configure() {
196 debug-print-function ${FUNCNAME} "$@" 259 debug-print-function ${FUNCNAME} "$@"
260
261 _check_build_dir init
262
263 # check if CMakeLists.txt exist and if no then die
264 if [[ ! -e ${CMAKE_USE_DIR}/CMakeLists.txt ]] ; then
265 eerror "I was unable to locate CMakeLists.txt under:"
266 eerror "\"${CMAKE_USE_DIR}/CMakeLists.txt\""
267 eerror "You should consider not inheriting the cmake eclass."
268 die "FATAL: Unable to find CMakeLists.txt"
269 fi
197 270
198 # Remove dangerous things. 271 # Remove dangerous things.
199 _modify-cmakelists 272 _modify-cmakelists
273
274 # Fix xdg collision with sandbox
275 export XDG_CONFIG_HOME="${T}"
200 276
201 # @SEE CMAKE_BUILD_TYPE 277 # @SEE CMAKE_BUILD_TYPE
202 if [[ ${CMAKE_BUILD_TYPE} = Gentoo ]]; then 278 if [[ ${CMAKE_BUILD_TYPE} = Gentoo ]]; then
203 # Handle release builds 279 # Handle release builds
204 if ! has debug ${IUSE//+} || ! use debug; then 280 if ! has debug ${IUSE//+} || ! use debug; then
205 append-cppflags -DNDEBUG 281 append-cppflags -DNDEBUG
206 fi 282 fi
207 fi 283 fi
208 284
209 # Prepare Gentoo override rules (set valid compiler, append CPPFLAGS) 285 # Prepare Gentoo override rules (set valid compiler, append CPPFLAGS)
210 local build_rules="${TMPDIR}"/gentoo_rules.cmake 286 local build_rules=${T}/gentoo_rules.cmake
211cat > ${build_rules} << _EOF_ 287 cat > "${build_rules}" <<- _EOF_
212SET (CMAKE_C_COMPILER $(type -P $(tc-getCC)) CACHE FILEPATH "C compiler" FORCE) 288 SET (CMAKE_C_COMPILER $(type -P $(tc-getCC)) CACHE FILEPATH "C compiler" FORCE)
213SET (CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> ${CPPFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "C compile command" FORCE) 289 SET (CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> ${CPPFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "C compile command" FORCE)
214SET (CMAKE_CXX_COMPILER $(type -P $(tc-getCXX)) CACHE FILEPATH "C++ compiler" FORCE) 290 SET (CMAKE_CXX_COMPILER $(type -P $(tc-getCXX)) CACHE FILEPATH "C++ compiler" FORCE)
215SET (CMAKE_CXX_COMPILE_OBJECT "<CMAKE_CXX_COMPILER> <DEFINES> ${CPPFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "C++ compile command" FORCE) 291 SET (CMAKE_CXX_COMPILE_OBJECT "<CMAKE_CXX_COMPILER> <DEFINES> ${CPPFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "C++ compile command" FORCE)
216_EOF_ 292 _EOF_
293
294 if use prefix; then
295 cat >> "${build_rules}" <<- _EOF_
296 # in Prefix we need rpath and must ensure cmake gets our default linker path
297 # right ... except for Darwin hosts
298 IF (NOT APPLE)
299 SET (CMAKE_SKIP_RPATH OFF CACHE BOOL "" FORCE)
300 SET (CMAKE_PLATFORM_REQUIRED_RUNTIME_PATH "${EPREFIX}/usr/${CHOST}/lib/gcc;${EPREFIX}/usr/${CHOST}/lib;${EPREFIX}/usr/$(get_libdir);${EPREFIX}/$(get_libdir)"
301 CACHE STRING "" FORCE)
302 SET (CMAKE_BUILD_WITH_INSTALL_RPATH ON CACHE BOOL "" FORCE)
303 ENDIF (NOT APPLE)
304 _EOF_
305 fi
306
307 # Common configure parameters (invariants)
308 local common_config=${T}/gentoo_common_config.cmake
309 local libdir=$(get_libdir)
310 cat > "${common_config}" <<- _EOF_
311 SET (LIB_SUFFIX ${libdir/lib} CACHE STRING "library path suffix" FORCE)
312 _EOF_
313 [[ -n ${NOCOLOR} ]] || echo 'SET (CMAKE_COLOR_MAKEFILE OFF CACHE BOOL "pretty colors during make" FORCE)' >> "${common_config}"
314
315 # Convert mycmakeargs to an array, for backwards compatibility
316 # Make the array a local variable since <=portage-2.1.6.x does not
317 # support global arrays (see bug #297255).
318 if [[ $(declare -p mycmakeargs 2>&-) != "declare -a mycmakeargs="* ]]; then
319 local mycmakeargs_local=(${mycmakeargs})
320 else
321 local mycmakeargs_local=("${mycmakeargs[@]}")
322 fi
323
324 has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=
217 325
218 # Common configure parameters (overridable) 326 # Common configure parameters (overridable)
219 # NOTE CMAKE_BUILD_TYPE can be only overriden via CMAKE_BUILD_TYPE eclass variable 327 # NOTE CMAKE_BUILD_TYPE can be only overriden via CMAKE_BUILD_TYPE eclass variable
220 # No -DCMAKE_BUILD_TYPE=xxx definitions will be in effect. 328 # No -DCMAKE_BUILD_TYPE=xxx definitions will be in effect.
221 local cmakeargs=" 329 local cmakeargs=(
330 -C "${common_config}"
222 -DCMAKE_INSTALL_PREFIX=${PREFIX:-/usr} 331 -DCMAKE_INSTALL_PREFIX="${EPREFIX}${PREFIX:-/usr}"
223 ${mycmakeargs} 332 "${mycmakeargs_local[@]}"
224 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} 333 -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}"
225 -DCMAKE_INSTALL_DO_STRIP=OFF 334 -DCMAKE_INSTALL_DO_STRIP=OFF
226 -DCMAKE_USER_MAKE_RULES_OVERRIDE=${build_rules}" 335 -DCMAKE_USER_MAKE_RULES_OVERRIDE="${build_rules}"
336 )
227 337
228 # Common configure parameters (invariants)
229 local common_config="${TMPDIR}"/gentoo_common_config.cmake
230 local libdir=$(get_libdir)
231cat > ${common_config} << _EOF_
232SET (LIB_SUFFIX ${libdir/lib} CACHE STRING "library path suffix" FORCE)
233_EOF_
234 [[ -n ${CMAKE_NO_COLOR} ]] && echo 'SET (CMAKE_COLOR_MAKEFILE OFF CACHE BOOL "pretty colors during make" FORCE)' >> ${common_config}
235 cmakeargs="-C ${common_config} ${cmakeargs}"
236
237 _check_build_dir
238 mkdir -p "${CMAKE_BUILD_DIR}" 338 mkdir -p "${CMAKE_BUILD_DIR}"
239 pushd "${CMAKE_BUILD_DIR}" > /dev/null 339 pushd "${CMAKE_BUILD_DIR}" > /dev/null
240 debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: mycmakeargs is $cmakeargs" 340 debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: mycmakeargs is ${mycmakeargs_local[*]}"
341 echo cmake "${cmakeargs[@]}" "${CMAKE_USE_DIR}"
241 cmake ${cmakeargs} "${S}" || die "cmake failed" 342 cmake "${cmakeargs[@]}" "${CMAKE_USE_DIR}" || die "cmake failed"
242 343
243 popd > /dev/null 344 popd > /dev/null
244} 345}
245 346
246# @FUNCTION: cmake-utils_src_compile 347# @FUNCTION: enable_cmake-utils_src_compile
247# @DESCRIPTION: 348# @DESCRIPTION:
248# General function for compiling with cmake. Default behaviour is to check for 349# General function for compiling with cmake. Default behaviour is to check for
249# EAPI and respectively to configure as well or just compile. 350# EAPI and respectively to configure as well or just compile.
250cmake-utils_src_compile() { 351enable_cmake-utils_src_compile() {
251 debug-print-function ${FUNCNAME} "$@" 352 debug-print-function ${FUNCNAME} "$@"
252 353
253 has src_configure ${EXPF} || cmake-utils_src_configure 354 has src_configure ${CMAKE_EXPF} || cmake-utils_src_configure
254 cmake-utils_src_make "$@" 355 cmake-utils_src_make "$@"
255} 356}
256 357
257# @FUNCTION: cmake-utils_src_configurein
258# @DESCRIPTION:
259# Deprecated
260cmake-utils_src_configurein() {
261 ewarn "QA: This ebuild is using deprecated function call: ${FUNCNAME}"
262 ewarn "QA: Inform ebuild maintainer."
263 cmake-utils_src_configure
264}
265
266# @FUNCTION: cmake-utils_src_configureout
267# @DESCRIPTION:
268# Deprecated
269cmake-utils_src_configureout() {
270 ewarn "QA: This ebuild is using deprecated function call: ${FUNCNAME}"
271 ewarn "QA: Inform ebuild maintainer."
272 cmake-utils_src_configure
273}
274
275# @FUNCTION: cmake-utils_src_make 358# @FUNCTION: cmake-utils_src_make
276# @DESCRIPTION: 359# @DESCRIPTION:
277# Function for building the package. Automatically detects the build type. 360# Function for building the package. Automatically detects the build type.
278# All arguments are passed to emake: 361# All arguments are passed to emake
279cmake-utils_src_make() { 362cmake-utils_src_make() {
280 debug-print-function ${FUNCNAME} "$@" 363 debug-print-function ${FUNCNAME} "$@"
281 364
282 _check_build_dir 365 _check_build_dir
283 pushd "${CMAKE_BUILD_DIR}" > /dev/null 366 pushd "${CMAKE_BUILD_DIR}" &> /dev/null
367 # first check if Makefile exist otherwise die
368 [[ -e Makefile ]] || die "Makefile not found. Error during configure stage."
284 if [[ -n ${CMAKE_VERBOSE} ]]; then 369 if [[ -n ${CMAKE_VERBOSE} ]]; then
285 emake VERBOSE=1 "$@" || die "Make failed!" 370 emake VERBOSE=1 "$@" || die "Make failed!"
286 else 371 else
287 emake "$@" || die "Make failed!" 372 emake "$@" || die "Make failed!"
288 fi 373 fi
289 popd > /dev/null 374 popd &> /dev/null
290} 375}
291 376
292# @FUNCTION: cmake-utils_src_install 377# @FUNCTION: enable_cmake-utils_src_install
293# @DESCRIPTION: 378# @DESCRIPTION:
294# Function for installing the package. Automatically detects the build type. 379# Function for installing the package. Automatically detects the build type.
295cmake-utils_src_install() { 380enable_cmake-utils_src_install() {
296 debug-print-function ${FUNCNAME} "$@" 381 debug-print-function ${FUNCNAME} "$@"
297 382
298 _check_build_dir 383 _check_build_dir
299 pushd "${CMAKE_BUILD_DIR}" > /dev/null 384 pushd "${CMAKE_BUILD_DIR}" &> /dev/null
300 emake install DESTDIR="${D}" || die "Make install failed" 385 emake install DESTDIR="${D}" || die "Make install failed"
301 popd > /dev/null 386 popd &> /dev/null
302 387
303 # Manual document installation 388 # Manual document installation
304 [[ -n "${DOCS}" ]] && { dodoc ${DOCS} || die "dodoc failed" ; } 389 [[ -n "${DOCS}" ]] && { dodoc ${DOCS} || die "dodoc failed" ; }
305 [[ -n "${HTML_DOCS}" ]] && { dohtml -r ${HTML_DOCS} || die "dohtml failed" ; } 390 [[ -n "${HTML_DOCS}" ]] && { dohtml -r ${HTML_DOCS} || die "dohtml failed" ; }
306} 391}
307 392
308# @FUNCTION: cmake-utils_src_test 393# @FUNCTION: enable_cmake-utils_src_test
309# @DESCRIPTION: 394# @DESCRIPTION:
310# Function for testing the package. Automatically detects the build type. 395# Function for testing the package. Automatically detects the build type.
311cmake-utils_src_test() { 396enable_cmake-utils_src_test() {
312 debug-print-function ${FUNCNAME} "$@" 397 debug-print-function ${FUNCNAME} "$@"
313 398
314 _check_build_dir 399 _check_build_dir
315 pushd "${CMAKE_BUILD_DIR}" > /dev/null 400 pushd "${CMAKE_BUILD_DIR}" &> /dev/null
316 # Standard implementation of src_test 401 # Standard implementation of src_test
317 if emake -j1 check -n &> /dev/null; then 402 if emake -j1 check -n &> /dev/null; then
318 einfo ">>> Test phase [check]: ${CATEGORY}/${PF}" 403 einfo ">>> Test phase [check]: ${CATEGORY}/${PF}"
319 if ! emake -j1 check; then 404 if ! emake -j1 check; then
320 die "Make check failed. See above for details." 405 die "Make check failed. See above for details."
325 die "Make test failed. See above for details." 410 die "Make test failed. See above for details."
326 fi 411 fi
327 else 412 else
328 einfo ">>> Test phase [none]: ${CATEGORY}/${PF}" 413 einfo ">>> Test phase [none]: ${CATEGORY}/${PF}"
329 fi 414 fi
330 popd > /dev/null 415 popd &> /dev/null
331} 416}
417
418## Wrappers for calls bellow this line
419# @FUNCTION: cmake-utils_src_configure
420# @DESCRIPTION:
421# Wrapper for detection if we want to run enable_ prefixed function with same name
422# unconditionaly or only when some useflag is enabled.
423cmake-utils_src_configure() {
424 _execute_optionaly "src_configure"
425}
426
427# @FUNCTION: cmake-utils_src_compile
428# @DESCRIPTION:
429# Wrapper for detection if we want to run enable_ prefixed function with same name
430# unconditionaly or only when some useflag is enabled.
431cmake-utils_src_compile() {
432 _execute_optionaly "src_compile"
433}
434
435# @FUNCTION: cmake-utils_src_install
436# @DESCRIPTION:
437# Wrapper for detection if we want to run enable_ prefixed function with same name
438# unconditionaly or only when some useflag is enabled.
439cmake-utils_src_install() {
440 _execute_optionaly "src_install"
441}
442
443# @FUNCTION: cmake-utils_src_test
444# @DESCRIPTION:
445# Wrapper for detection if we want to run enable_ prefixed function with same name
446# unconditionaly or only when some useflag is enabled.
447cmake-utils_src_test() {
448 _execute_optionaly "src_test"
449}
450
451
452_execute_optionaly() {
453 local phase="$1"
454 if [[ ${WANT_CMAKE} = always ]]; then
455 enable_cmake-utils_${phase}
456 else
457 use ${WANT_CMAKE} && enable_cmake-utils_${phase}
458 fi
459}

Legend:
Removed from v.1.17  
changed lines
  Added in v.1.39

  ViewVC Help
Powered by ViewVC 1.1.20