| 1 | # Copyright 1999-2007 Gentoo Foundation |
1 | # Copyright 1999-2007 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.6 2008/02/20 14:33:20 zlin Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/cmake-utils.eclass,v 1.15 2008/11/05 20:59:37 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 | # @BLURB: common ebuild functions for cmake-based packages |
8 | # @BLURB: common ebuild functions for cmake-based packages |
| … | |
… | |
| 13 | # builds and an implementation of the well-known use_enable and use_with |
13 | # builds and an implementation of the well-known use_enable and use_with |
| 14 | # functions for CMake. |
14 | # functions for CMake. |
| 15 | |
15 | |
| 16 | # Original author: Zephyrus (zephyrus@mirach.it) |
16 | # Original author: Zephyrus (zephyrus@mirach.it) |
| 17 | |
17 | |
| 18 | inherit toolchain-funcs multilib |
18 | inherit toolchain-funcs multilib flag-o-matic |
| 19 | |
19 | |
| 20 | DESCRIPTION="Based on the ${ECLASS} eclass" |
20 | DESCRIPTION="Based on the ${ECLASS} eclass" |
| 21 | |
21 | |
| 22 | DEPEND="dev-util/cmake" |
22 | DEPEND=">=dev-util/cmake-2.4.6" |
| 23 | |
23 | |
|
|
24 | case ${EAPI} in |
|
|
25 | 2) |
|
|
26 | EXPORT_FUNCTIONS src_configure src_compile src_test src_install |
|
|
27 | ;; |
|
|
28 | *) |
| 24 | EXPORT_FUNCTIONS src_compile src_test src_install |
29 | EXPORT_FUNCTIONS src_compile src_test src_install |
|
|
30 | ;; |
|
|
31 | esac |
|
|
32 | |
| 25 | |
33 | |
| 26 | # Internal function use by cmake-utils_use_with and cmake-utils_use_enable |
34 | # Internal function use by cmake-utils_use_with and cmake-utils_use_enable |
| 27 | _use_me_now() { |
35 | _use_me_now() { |
| 28 | debug-print-function $FUNCNAME $* |
36 | debug-print-function $FUNCNAME $* |
| 29 | [[ -z $2 ]] && die "cmake-utils_use-$1 <USE flag> [<flag name>]" |
37 | [[ -z $2 ]] && die "cmake-utils_use-$1 <USE flag> [<flag name>]" |
| … | |
… | |
| 68 | # |
76 | # |
| 69 | # `cmake-utils_has foo FOO` echoes -DHAVE_FOO=ON if foo is enabled |
77 | # `cmake-utils_has foo FOO` echoes -DHAVE_FOO=ON if foo is enabled |
| 70 | # and -DHAVE_FOO=OFF if it is disabled. |
78 | # and -DHAVE_FOO=OFF if it is disabled. |
| 71 | cmake-utils_has() { _use_me_now HAVE "$@" ; } |
79 | cmake-utils_has() { _use_me_now HAVE "$@" ; } |
| 72 | |
80 | |
| 73 | # @FUNCTION: cmake-utils_src_compile |
81 | # @FUNCTION: cmake-utils_src_configure |
| 74 | # @DESCRIPTION: |
82 | # @DESCRIPTION: |
| 75 | # General function for compiling with cmake. Default behaviour is to start an |
83 | # General function for configuring with cmake. Default behaviour is to start an |
| 76 | # out-of-source build. All arguments are passed to cmake-utils_src_make. |
84 | # out-of-source build. |
| 77 | cmake-utils_src_compile() { |
85 | cmake-utils_src_configure() { |
| 78 | debug-print-function $FUNCNAME $* |
86 | debug-print-function $FUNCNAME $* |
| 79 | |
87 | |
| 80 | if [[ -n "${CMAKE_IN_SOURCE_BUILD}" ]]; then |
88 | if [[ -n "${CMAKE_IN_SOURCE_BUILD}" ]]; then |
| 81 | cmake-utils_src_configurein |
89 | cmake-utils_src_configurein |
| 82 | else |
90 | else |
| 83 | cmake-utils_src_configureout |
91 | cmake-utils_src_configureout |
| 84 | fi |
92 | fi |
|
|
93 | } |
|
|
94 | |
|
|
95 | # @FUNCTION: cmake-utils_src_compile |
|
|
96 | # @DESCRIPTION: |
|
|
97 | # General function for compiling with cmake. Default behaviour is to check for |
|
|
98 | # eapi and based on it configure or only compile |
|
|
99 | cmake-utils_src_compile() { |
|
|
100 | case ${EAPI} in |
|
|
101 | 2) |
|
|
102 | ;; |
|
|
103 | *) |
|
|
104 | cmake-utils_src_configure |
|
|
105 | ;; |
|
|
106 | esac |
|
|
107 | |
| 85 | cmake-utils_src_make "$@" |
108 | cmake-utils_src_make "$@" |
| 86 | } |
109 | } |
| 87 | |
110 | |
| 88 | # @FUNCTION: cmake-utils_src_configurein |
111 | # @FUNCTION: cmake-utils_src_configurein |
| 89 | # @DESCRIPTION: |
112 | # @DESCRIPTION: |
| 90 | # Function for software that requires configure and building in the source |
113 | # Function for software that requires configure and building in the source |
| 91 | # directory. |
114 | # directory. |
| 92 | cmake-utils_src_configurein() { |
115 | cmake-utils_src_configurein() { |
| 93 | debug-print-function $FUNCNAME $* |
116 | debug-print-function $FUNCNAME $* |
| 94 | |
117 | |
| 95 | local cmakeargs="$(_common_configure_code) ${mycmakeargs}" |
118 | _common_configure_code |
|
|
119 | local cmakeargs="${mycmakeargs} ${EXTRA_ECONF}" |
| 96 | |
120 | |
| 97 | debug-print "$LINENO $ECLASS $FUNCNAME: mycmakeargs is $cmakeargs" |
121 | debug-print "$LINENO $ECLASS $FUNCNAME: mycmakeargs is $cmakeargs" |
| 98 | cmake ${cmakeargs} . || die "Cmake failed" |
122 | cmake -C "${TMPDIR}/gentoo_common_config.cmake" ${cmakeargs} . || die "Cmake failed" |
| 99 | } |
123 | } |
| 100 | |
124 | |
| 101 | # @FUNCTION: cmake-utils_src_configureout |
125 | # @FUNCTION: cmake-utils_src_configureout |
| 102 | # @DESCRIPTION: |
126 | # @DESCRIPTION: |
| 103 | # Function for software that requires configure and building outside the source |
127 | # Function for software that requires configure and building outside the source |
| 104 | # tree - default. |
128 | # tree - default. |
| 105 | cmake-utils_src_configureout() { |
129 | cmake-utils_src_configureout() { |
| 106 | debug-print-function $FUNCNAME $* |
130 | debug-print-function $FUNCNAME $* |
| 107 | |
131 | |
| 108 | local cmakeargs="$(_common_configure_code) ${mycmakeargs}" |
132 | _common_configure_code |
|
|
133 | local cmakeargs="${mycmakeargs} ${EXTRA_ECONF}" |
| 109 | mkdir -p "${WORKDIR}"/${PN}_build |
134 | mkdir -p "${WORKDIR}"/${PN}_build |
| 110 | pushd "${WORKDIR}"/${PN}_build > /dev/null |
135 | pushd "${WORKDIR}"/${PN}_build > /dev/null |
| 111 | |
136 | |
| 112 | debug-print "$LINENO $ECLASS $FUNCNAME: mycmakeargs is $cmakeargs" |
137 | debug-print "$LINENO $ECLASS $FUNCNAME: mycmakeargs is $cmakeargs" |
| 113 | cmake ${cmakeargs} "${S}" || die "Cmake failed" |
138 | cmake -C "${TMPDIR}/gentoo_common_config.cmake" ${cmakeargs} "${S}" || die "Cmake failed" |
| 114 | |
139 | |
| 115 | popd > /dev/null |
140 | popd > /dev/null |
| 116 | } |
141 | } |
| 117 | |
142 | |
| 118 | # Internal use only. Common configuration options for all types of builds. |
143 | # Internal use only. Common configuration options for all types of builds. |
| 119 | _common_configure_code() { |
144 | _common_configure_code() { |
| 120 | local tmp_libdir=$(get_libdir) |
145 | local tmp_libdir=$(get_libdir) |
|
|
146 | # here we set the compiler explicitly, set install directories prefixes, and |
|
|
147 | # make sure that the gentoo user compiler flags trump those set in the |
|
|
148 | # program |
|
|
149 | local modules_dir=/usr/share/cmake/Modules |
|
|
150 | local cxx_create_shared_library=$(sed -n -e 's/)/ CACHE STRING "")/' -e "s/<TARGET_SONAME>/<TARGET_SONAME> ${CXXFLAGS}/" -e '/SET(CMAKE_CXX_CREATE_SHARED_LIBRARY/,/)/p' "${modules_dir}/CMakeCXXInformation.cmake") |
|
|
151 | local c_create_shared_library=$(sed -n -e 's/)/ CACHE STRING "")/' -e "s/<TARGET_SONAME>/<TARGET_SONAME> ${CFLAGS}/" -e '/SET(CMAKE_C_CREATE_SHARED_LIBRARY/,/)/p' "${modules_dir}/CMakeCInformation.cmake") |
|
|
152 | local c_compile_object=$(sed -n -e 's/)/ CACHE STRING "")/' -e "s/<FLAGS>/<FLAGS> ${CFLAGS}/" -e '/SET(CMAKE_C_COMPILE_OBJECT/,/)/p' "${modules_dir}/CMakeCInformation.cmake") |
|
|
153 | local cxx_compile_object=$(sed -n -e 's/)/ CACHE STRING "")/' -e "s/<FLAGS>/<FLAGS> ${CXXFLAGS}/" -e '/SET(CMAKE_CXX_COMPILE_OBJECT/,/)/p' "${modules_dir}/CMakeCXXInformation.cmake") |
|
|
154 | local c_link_executable=$(sed -n -e 's/)/ CACHE STRING "")/' -e "s/<FLAGS>/<FLAGS> ${CFLAGS}/" -e "s/<LINK_FLAGS>/<LINK_FLAGS> ${LDFLAGS}/" -e '/SET(CMAKE_C_LINK_EXECUTABLE/,/)/p' "${modules_dir}/CMakeCInformation.cmake") |
|
|
155 | local cxx_link_executable=$(sed -n -e 's/)/ CACHE STRING "")/' -e "s/<FLAGS>/<FLAGS> ${CXXFLAGS}/" -e "s/<LINK_FLAGS>/<LINK_FLAGS> ${LDFLAGS}/" -e '/SET(CMAKE_CXX_LINK_EXECUTABLE/,/)/p' "${modules_dir}/CMakeCXXInformation.cmake") |
|
|
156 | cat > "${TMPDIR}/gentoo_common_config.cmake" <<_EOF_ |
|
|
157 | SET(CMAKE_C_COMPILER $(type -P $(tc-getCC)) CACHE STRING "package building C compiler") |
|
|
158 | SET(CMAKE_CXX_COMPILER $(type -P $(tc-getCXX)) CACHE STRING "package building C++ compiler") |
|
|
159 | ${c_create_shared_library} |
|
|
160 | ${cxx_create_shared_library} |
|
|
161 | ${c_compile_object} |
|
|
162 | ${cxx_compile_object} |
|
|
163 | ${c_link_executable} |
|
|
164 | ${cxx_link_executable} |
|
|
165 | SET(CMAKE_INSTALL_PREFIX ${PREFIX:-/usr} CACHE FILEPATH "install path prefix") |
|
|
166 | SET(LIB_SUFFIX ${tmp_libdir/lib} CACHE FILEPATH "library path suffix") |
|
|
167 | SET(LIB_INSTALL_DIR ${PREFIX:-/usr}/${tmp_libdir} CACHE FILEPATH "library install directory") |
|
|
168 | |
|
|
169 | _EOF_ |
|
|
170 | |
|
|
171 | [[ -n ${CMAKE_NO_COLOR} ]] && echo 'SET(CMAKE_COLOR_MAKEFILE OFF CACHE BOOL "pretty colors during make")' >> "${TMPDIR}/gentoo_common_config.cmake" |
|
|
172 | |
| 121 | if has debug ${IUSE//+} && use debug; then |
173 | if has debug ${IUSE//+} && use debug ; then |
| 122 | echo -DCMAKE_BUILD_TYPE=Debug |
174 | echo 'SET(CMAKE_BUILD_TYPE Debug CACHE STRING "determines build settings")' >> "${TMPDIR}/gentoo_common_config.cmake" |
| 123 | else |
175 | else |
| 124 | echo -DCMAKE_BUILD_TYPE=Release |
176 | echo 'SET(CMAKE_BUILD_TYPE Release CACHE STRING "determines build settings")' >> "${TMPDIR}/gentoo_common_config.cmake" |
| 125 | fi |
177 | fi |
| 126 | echo -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) |
|
|
| 127 | echo -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) |
|
|
| 128 | echo -DCMAKE_INSTALL_PREFIX=${PREFIX:-/usr} |
|
|
| 129 | echo -DLIB_SUFFIX=${tmp_libdir/lib} |
|
|
| 130 | echo -DLIB_INSTALL_DIR=${PREFIX:-/usr}/${tmp_libdir} |
|
|
| 131 | [[ -n ${CMAKE_NO_COLOR} ]] && echo -DCMAKE_COLOR_MAKEFILE=OFF |
|
|
| 132 | } |
178 | } |
| 133 | |
179 | |
| 134 | # @FUNCTION: cmake-utils_src_make |
180 | # @FUNCTION: cmake-utils_src_make |
| 135 | # @DESCRIPTION: |
181 | # @DESCRIPTION: |
| 136 | # Function for building the package. Automatically detects the build type. |
182 | # Function for building the package. Automatically detects the build type. |