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

Contents of /eclass/cmake-utils.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.13 - (hide annotations) (download)
Mon Oct 27 14:38:38 2008 UTC (5 years, 10 months ago) by vapier
Branch: MAIN
Changes since 1.12: +2 -2 lines
allow build type to be overridden via $CMAKE_BUILD_TYPE

1 philantrop 1.1 # Copyright 1999-2007 Gentoo Foundation
2     # Distributed under the terms of the GNU General Public License v2
3 vapier 1.13 # $Header: /var/cvsroot/gentoo-x86/eclass/cmake-utils.eclass,v 1.12 2008/10/27 05:36:02 vapier Exp $
4 philantrop 1.1
5     # @ECLASS: cmake-utils.eclass
6     # @MAINTAINER:
7     # kde@gentoo.org
8     # @BLURB: common ebuild functions for cmake-based packages
9     # @DESCRIPTION:
10     # The cmake-utils eclass contains functions that make creating ebuilds for
11     # cmake-based packages much easier.
12     # Its main features are support of out-of-source builds as well as in-source
13     # builds and an implementation of the well-known use_enable and use_with
14     # functions for CMake.
15    
16     # Original author: Zephyrus (zephyrus@mirach.it)
17    
18     inherit toolchain-funcs multilib
19    
20     DESCRIPTION="Based on the ${ECLASS} eclass"
21    
22 ingmar 1.8 DEPEND=">=dev-util/cmake-2.4.6"
23 philantrop 1.1
24 jmbsvicetto 1.10 case ${EAPI} in
25     2)
26     EXPORT_FUNCTIONS src_configure src_compile src_test src_install
27     ;;
28     *)
29     EXPORT_FUNCTIONS src_compile src_test src_install
30     ;;
31     esac
32    
33 philantrop 1.1
34     # Internal function use by cmake-utils_use_with and cmake-utils_use_enable
35     _use_me_now() {
36     debug-print-function $FUNCNAME $*
37     [[ -z $2 ]] && die "cmake-utils_use-$1 <USE flag> [<flag name>]"
38     echo "-D$1_${3:-$2}=$(use $2 && echo ON || echo OFF)"
39     }
40    
41 zlin 1.5 # @VARIABLE: DOCS
42     # @DESCRIPTION:
43     # Documents to dodoc
44    
45 philantrop 1.1 # @FUNCTION: cmake-utils_use_with
46     # @USAGE: <USE flag> [flag name]
47     # @DESCRIPTION:
48 philantrop 1.3 # Based on use_with. See ebuild(5).
49 betelgeuse 1.4 #
50 philantrop 1.3 # `cmake-utils_use_with foo FOO` echoes -DWITH_FOO=ON if foo is enabled
51     # and -DWITH_FOO=OFF if it is disabled.
52 philantrop 1.1 cmake-utils_use_with() { _use_me_now WITH "$@" ; }
53    
54     # @FUNCTION: cmake-utils_use_enable
55     # @USAGE: <USE flag> [flag name]
56     # @DESCRIPTION:
57 philantrop 1.3 # Based on use_enable. See ebuild(5).
58 betelgeuse 1.4 #
59 philantrop 1.3 # `cmake-utils_use_enable foo FOO` echoes -DENABLE_FOO=ON if foo is enabled
60     # and -DENABLE_FOO=OFF if it is disabled.
61 philantrop 1.1 cmake-utils_use_enable() { _use_me_now ENABLE "$@" ; }
62    
63 philantrop 1.2 # @FUNCTION: cmake-utils_use_want
64     # @USAGE: <USE flag> [flag name]
65     # @DESCRIPTION:
66 philantrop 1.3 # Based on use_enable. See ebuild(5).
67 betelgeuse 1.4 #
68 philantrop 1.3 # `cmake-utils_use_want foo FOO` echoes -DWANT_FOO=ON if foo is enabled
69     # and -DWANT_FOO=OFF if it is disabled.
70 philantrop 1.2 cmake-utils_use_want() { _use_me_now WANT "$@" ; }
71    
72 philantrop 1.3 # @FUNCTION: cmake-utils_has
73     # @USAGE: <USE flag> [flag name]
74     # @DESCRIPTION:
75     # Based on use_enable. See ebuild(5).
76 betelgeuse 1.4 #
77 philantrop 1.3 # `cmake-utils_has foo FOO` echoes -DHAVE_FOO=ON if foo is enabled
78     # and -DHAVE_FOO=OFF if it is disabled.
79     cmake-utils_has() { _use_me_now HAVE "$@" ; }
80    
81 jmbsvicetto 1.9 # @FUNCTION: cmake-utils_src_configure
82 philantrop 1.1 # @DESCRIPTION:
83 jmbsvicetto 1.9 # General function for configuring with cmake. Default behaviour is to start an
84     # out-of-source build.
85     cmake-utils_src_configure() {
86 philantrop 1.1 debug-print-function $FUNCNAME $*
87    
88 vapier 1.12 if ! has debug ${IUSE//+} || ! use debug ; then
89 vapier 1.11 append-cppflags -DNDEBUG
90     fi
91    
92 philantrop 1.2 if [[ -n "${CMAKE_IN_SOURCE_BUILD}" ]]; then
93     cmake-utils_src_configurein
94     else
95     cmake-utils_src_configureout
96     fi
97 jmbsvicetto 1.9 }
98    
99     # @FUNCTION: cmake-utils_src_compile
100     # @DESCRIPTION:
101     # General function for compiling with cmake. Default behaviour is to check for
102     # eapi and based on it configure or only compile
103     cmake-utils_src_compile() {
104     case ${EAPI} in
105 jmbsvicetto 1.10 2)
106 jmbsvicetto 1.9 ;;
107     *)
108     cmake-utils_src_configure
109     ;;
110     esac
111    
112 philantrop 1.3 cmake-utils_src_make "$@"
113 philantrop 1.1 }
114    
115     # @FUNCTION: cmake-utils_src_configurein
116     # @DESCRIPTION:
117     # Function for software that requires configure and building in the source
118     # directory.
119     cmake-utils_src_configurein() {
120     debug-print-function $FUNCNAME $*
121    
122 philantrop 1.7 local cmakeargs="$(_common_configure_code) ${mycmakeargs} ${EXTRA_ECONF}"
123 philantrop 1.1
124     debug-print "$LINENO $ECLASS $FUNCNAME: mycmakeargs is $cmakeargs"
125     cmake ${cmakeargs} . || die "Cmake failed"
126     }
127    
128     # @FUNCTION: cmake-utils_src_configureout
129     # @DESCRIPTION:
130     # Function for software that requires configure and building outside the source
131     # tree - default.
132     cmake-utils_src_configureout() {
133     debug-print-function $FUNCNAME $*
134    
135 philantrop 1.7 local cmakeargs="$(_common_configure_code) ${mycmakeargs} ${EXTRA_ECONF}"
136 philantrop 1.2 mkdir -p "${WORKDIR}"/${PN}_build
137     pushd "${WORKDIR}"/${PN}_build > /dev/null
138 philantrop 1.1
139     debug-print "$LINENO $ECLASS $FUNCNAME: mycmakeargs is $cmakeargs"
140     cmake ${cmakeargs} "${S}" || die "Cmake failed"
141 philantrop 1.2
142     popd > /dev/null
143 philantrop 1.1 }
144    
145     # Internal use only. Common configuration options for all types of builds.
146     _common_configure_code() {
147     local tmp_libdir=$(get_libdir)
148 vapier 1.11 # CMAKE_BUILD_TYPE only modifies compiler flags, so set to None
149 vapier 1.13 echo -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-None}
150 philantrop 1.1 echo -DCMAKE_C_COMPILER=$(type -P $(tc-getCC))
151     echo -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX))
152     echo -DCMAKE_INSTALL_PREFIX=${PREFIX:-/usr}
153     echo -DLIB_SUFFIX=${tmp_libdir/lib}
154 philantrop 1.2 echo -DLIB_INSTALL_DIR=${PREFIX:-/usr}/${tmp_libdir}
155 philantrop 1.1 [[ -n ${CMAKE_NO_COLOR} ]] && echo -DCMAKE_COLOR_MAKEFILE=OFF
156     }
157    
158     # @FUNCTION: cmake-utils_src_make
159     # @DESCRIPTION:
160     # Function for building the package. Automatically detects the build type.
161 philantrop 1.3 # All arguments are passed to emake:
162     # "cmake-utils_src_make -j1" can be used to work around parallel make issues.
163 philantrop 1.1 cmake-utils_src_make() {
164     debug-print-function $FUNCNAME $*
165    
166     # At this point we can automatically check if it's an out-of-source or an
167     # in-source build
168     if [[ -d ${WORKDIR}/${PN}_build ]]; then
169 philantrop 1.2 pushd "${WORKDIR}"/${PN}_build > /dev/null
170 philantrop 1.1 fi
171     if ! [[ -z ${CMAKE_COMPILER_VERBOSE} ]]; then
172 philantrop 1.3 emake VERBOSE=1 "$@" || die "Make failed!"
173 philantrop 1.1 else
174 philantrop 1.3 emake "$@" || die "Make failed!"
175 philantrop 1.2 fi
176     if [[ -d ${WORKDIR}/${PN}_build ]]; then
177     popd > /dev/null
178 philantrop 1.1 fi
179     }
180    
181     # @FUNCTION: cmake-utils_src_install
182     # @DESCRIPTION:
183     # Function for installing the package. Automatically detects the build type.
184     cmake-utils_src_install() {
185     debug-print-function $FUNCNAME $*
186    
187     # At this point we can automatically check if it's an out-of-source or an
188     # in-source build
189     if [[ -d ${WORKDIR}/${PN}_build ]]; then
190 philantrop 1.2 pushd "${WORKDIR}"/${PN}_build > /dev/null
191 philantrop 1.1 fi
192     emake install DESTDIR="${D}" || die "Make install failed"
193 philantrop 1.2 if [[ -d ${WORKDIR}/${PN}_build ]]; then
194     popd > /dev/null
195     fi
196 zlin 1.5
197     # Manual document installation
198     [[ -n "${DOCS}" ]] && dodoc ${DOCS}
199 philantrop 1.1 }
200    
201     # @FUNCTION: cmake-utils_src_test
202     # @DESCRIPTION:
203     # Function for testing the package. Automatically detects the build type.
204     cmake-utils_src_test() {
205     debug-print-function $FUNCNAME $*
206    
207     # At this point we can automatically check if it's an out-of-source or an
208     # in-source build
209     if [[ -d ${WORKDIR}/${PN}_build ]]; then
210 philantrop 1.2 pushd "${WORKDIR}"/${PN}_build > /dev/null
211 philantrop 1.1 fi
212     # Standard implementation of src_test
213     if emake -j1 check -n &> /dev/null; then
214     einfo ">>> Test phase [check]: ${CATEGORY}/${PF}"
215     if ! emake -j1 check; then
216     die "Make check failed. See above for details."
217     fi
218     elif emake -j1 test -n &> /dev/null; then
219     einfo ">>> Test phase [test]: ${CATEGORY}/${PF}"
220     if ! emake -j1 test; then
221     die "Make test failed. See above for details."
222     fi
223     else
224     einfo ">>> Test phase [none]: ${CATEGORY}/${PF}"
225     fi
226 philantrop 1.2 if [[ -d ${WORKDIR}/${PN}_build ]]; then
227     popd > /dev/null
228     fi
229 philantrop 1.1 }

  ViewVC Help
Powered by ViewVC 1.1.20