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

Contents of /eclass/mysql-cmake.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.11 - (hide annotations) (download)
Sun Jan 20 02:23:10 2013 UTC (14 months, 4 weeks ago) by robbat2
Branch: MAIN
Changes since 1.10: +7 -4 lines
Sync mysql eclasses from overlay. Includes fix for bug #434552, support for google-mysql, new configurations.

1 jmbsvicetto 1.5 # Copyright 1999-2012 Gentoo Foundation
2 robbat2 1.1 # Distributed under the terms of the GNU General Public License v2
3 robbat2 1.11 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql-cmake.eclass,v 1.10 2012/11/01 23:57:50 robbat2 Exp $
4 robbat2 1.1
5     # @ECLASS: mysql-cmake.eclass
6     # @MAINTAINER:
7     # Maintainers:
8     # - MySQL Team <mysql-bugs@gentoo.org>
9     # - Robin H. Johnson <robbat2@gentoo.org>
10     # - Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
11     # @BLURB: This eclass provides the support for cmake based mysql releases
12     # @DESCRIPTION:
13     # The mysql-cmake.eclass provides the support to build the mysql
14     # ebuilds using the cmake build system. This eclass provides
15     # the src_unpack, src_prepare, src_configure, src_compile, scr_install,
16     # pkg_preinst, pkg_postinst, pkg_config and pkg_postrm phase hooks.
17    
18 zmedico 1.9 inherit cmake-utils flag-o-matic multilib
19 robbat2 1.1
20     #
21     # HELPER FUNCTIONS:
22     #
23    
24     # @FUNCTION: mysql_cmake_disable_test
25     # @DESCRIPTION:
26     # Helper function to disable specific tests.
27     mysql-cmake_disable_test() {
28    
29 robbat2 1.10 local rawtestname testname testsuite reason mysql_disabled_file mysql_disabled_dir
30 robbat2 1.1 rawtestname="${1}" ; shift
31     reason="${@}"
32     ewarn "test '${rawtestname}' disabled: '${reason}'"
33    
34     testsuite="${rawtestname/.*}"
35     testname="${rawtestname/*.}"
36 robbat2 1.10 for mysql_disabled_file in \
37     ${S}/mysql-test/disabled.def \
38     ${S}/mysql-test/t/disabled.def ; do
39     [ -f "${mysql_disabled_file}" ] && break
40     done
41     #mysql_disabled_file="${S}/mysql-test/t/disabled.def"
42 robbat2 1.1 #einfo "rawtestname=${rawtestname} testname=${testname} testsuite=${testsuite}"
43 robbat2 1.10 echo ${testname} : ${reason} >> "${mysql_disabled_file}"
44 robbat2 1.1
45 robbat2 1.10 if [ -n "${testsuite}" ] && [ "${testsuite}" != "main" ]; then
46     for mysql_disabled_file in \
47 robbat2 1.1 ${S}/mysql-test/suite/${testsuite}/disabled.def \
48     ${S}/mysql-test/suite/${testsuite}/t/disabled.def \
49     FAILED ; do
50 robbat2 1.10 [ -f "${mysql_disabled_file}" ] && break
51 robbat2 1.1 done
52     if [ "${mysql_disabled_file}" != "FAILED" ]; then
53 robbat2 1.10 echo "${testname} : ${reason}" >> "${mysql_disabled_file}"
54 robbat2 1.1 else
55 robbat2 1.10 for mysql_disabled_dir in \
56     ${S}/mysql-test/suite/${testsuite} \
57     ${S}/mysql-test/suite/${testsuite}/t \
58     FAILED ; do
59     [ -d "${mysql_disabled_dir}" ] && break
60     done
61     if [ "${mysql_disabled_dir}" != "FAILED" ]; then
62     echo "${testname} : ${reason}" >> "${mysql_disabled_dir}/disabled.def"
63     else
64     ewarn "Could not find testsuite disabled.def location for ${rawtestname}"
65     fi
66 robbat2 1.1 fi
67     fi
68     }
69    
70     # @FUNCTION: configure_cmake_locale
71     # @DESCRIPTION:
72     # Helper function to configure locale cmake options
73     configure_cmake_locale() {
74    
75     if ! use minimal && [ -n "${MYSQL_DEFAULT_CHARSET}" -a -n "${MYSQL_DEFAULT_COLLATION}" ]; then
76     ewarn "You are using a custom charset of ${MYSQL_DEFAULT_CHARSET}"
77     ewarn "and a collation of ${MYSQL_DEFAULT_COLLATION}."
78     ewarn "You MUST file bugs without these variables set."
79    
80     mycmakeargs+=(
81     -DDEFAULT_CHARSET=${MYSQL_DEFAULT_CHARSET}
82     -DDEFAULT_COLLATION=${MYSQL_DEFAULT_COLLATION}
83     )
84    
85     elif ! use latin1 ; then
86     mycmakeargs+=(
87     -DDEFAULT_CHARSET=utf8
88     -DDEFAULT_COLLATION=utf8_general_ci
89     )
90     else
91     mycmakeargs+=(
92     -DDEFAULT_CHARSET=latin1
93     -DDEFAULT_COLLATION=latin1_swedish_ci
94     )
95     fi
96     }
97    
98     # @FUNCTION: configure_cmake_minimal
99     # @DESCRIPTION:
100     # Helper function to configure minimal build
101     configure_cmake_minimal() {
102    
103     mycmakeargs+=(
104     -DWITHOUT_SERVER=1
105     -DWITHOUT_EMBEDDED_SERVER=1
106     -DENABLED_LOCAL_INFILE=1
107     -DEXTRA_CHARSETS=none
108     -DINSTALL_SQLBENCHDIR=
109     -DWITH_SSL=system
110     -DWITH_ZLIB=system
111     -DWITHOUT_LIBWRAP=1
112 robbat2 1.11 -DWITH_READLINE=0
113     -DWITH_LIBEDIT=0
114 robbat2 1.1 -DWITHOUT_ARCHIVE_STORAGE_ENGINE=1
115     -DWITHOUT_BLACKHOLE_STORAGE_ENGINE=1
116     -DWITHOUT_CSV_STORAGE_ENGINE=1
117     -DWITHOUT_FEDERATED_STORAGE_ENGINE=1
118     -DWITHOUT_HEAP_STORAGE_ENGINE=1
119     -DWITHOUT_INNOBASE_STORAGE_ENGINE=1
120     -DWITHOUT_MYISAMMRG_STORAGE_ENGINE=1
121     -DWITHOUT_MYISAM_STORAGE_ENGINE=1
122     -DWITHOUT_PARTITION_STORAGE_ENGINE=1
123     -DWITHOUT_INNOBASE_STORAGE_ENGINE=1
124     )
125     }
126    
127     # @FUNCTION: configure_cmake_standard
128     # @DESCRIPTION:
129     # Helper function to configure standard build
130     configure_cmake_standard() {
131    
132     mycmakeargs+=(
133     -DENABLED_LOCAL_INFILE=1
134     -DEXTRA_CHARSETS=all
135     -DMYSQL_USER=mysql
136 jmbsvicetto 1.5 -DMYSQL_UNIX_ADDR=${EPREFIX}/var/run/mysqld/mysqld.sock
137 robbat2 1.11 -DWITH_READLINE=0
138     -DWITH_LIBEDIT=0
139 robbat2 1.1 -DWITH_ZLIB=system
140     -DWITHOUT_LIBWRAP=1
141     )
142    
143     mycmakeargs+=(
144 robbat2 1.3 $(cmake-utils_use_disable !static SHARED)
145 robbat2 1.1 $(cmake-utils_use_with debug)
146     $(cmake-utils_use_with embedded EMBEDDED_SERVER)
147     $(cmake-utils_use_with profiling)
148 robbat2 1.4 $(cmake-utils_use_enable systemtap DTRACE)
149 robbat2 1.1 )
150    
151     if use ssl; then
152     mycmakeargs+=( -DWITH_SSL=system )
153     else
154     mycmakeargs+=( -DWITH_SSL=0 )
155     fi
156    
157 robbat2 1.10 if mysql_version_is_at_least "5.5" && use jemalloc; then
158     mycmakeargs+=( -DCMAKE_EXE_LINKER_FLAGS='-ljemalloc' -DWITH_SAFEMALLOC=OFF )
159     fi
160    
161     if mysql_version_is_at_least "5.5" && use tcmalloc; then
162     mycmakeargs+=( -DCMAKE_EXE_LINKER_FLAGS='-ltcmalloc' -DWITH_SAFEMALLOC=OFF )
163     fi
164    
165 robbat2 1.1 # Storage engines
166     mycmakeargs+=(
167     -DWITH_ARCHIVE_STORAGE_ENGINE=1
168     -DWITH_BLACKHOLE_STORAGE_ENGINE=1
169     -DWITH_CSV_STORAGE_ENGINE=1
170     -DWITH_HEAP_STORAGE_ENGINE=1
171     -DWITH_INNOBASE_STORAGE_ENGINE=1
172     -DWITH_MYISAMMRG_STORAGE_ENGINE=1
173     -DWITH_MYISAM_STORAGE_ENGINE=1
174     -DWITH_PARTITION_STORAGE_ENGINE=1
175     $(cmake-utils_use_with extraengine FEDERATED_STORAGE_ENGINE)
176     )
177 robbat2 1.10
178     if pbxt_available ; then
179     mycmakeargs+=( $(cmake-utils_use_with pbxt PBXT_STORAGE_ENGINE) )
180     fi
181    
182     if [ "${PN}" == "mariadb" ]; then
183     mycmakeargs+=(
184     $(cmake-utils_use_with oqgraph OQGRAPH_STORAGE_ENGINE)
185     $(cmake-utils_use_with sphinx SPHINX_STORAGE_ENGINE)
186     $(cmake-utils_use_with extraengine FEDERATEDX_STORAGE_ENGINE)
187     )
188     fi
189 robbat2 1.1 }
190    
191     #
192     # EBUILD FUNCTIONS
193     #
194    
195     # @FUNCTION: mysql-cmake_src_prepare
196     # @DESCRIPTION:
197     # Apply patches to the source code and remove unneeded bundled libs.
198     mysql-cmake_src_prepare() {
199    
200     debug-print-function ${FUNCNAME} "$@"
201    
202     cd "${S}"
203    
204     # Apply the patches for this MySQL version
205     EPATCH_SUFFIX="patch"
206     mkdir -p "${EPATCH_SOURCE}" || die "Unable to create epatch directory"
207     # Clean out old items
208     rm -f "${EPATCH_SOURCE}"/*
209     # Now link in right patches
210     mysql_mv_patches
211     # And apply
212     epatch
213    
214     # last -fPIC fixup, per bug #305873
215     i="${S}"/storage/innodb_plugin/plug.in
216     [ -f "${i}" ] && sed -i -e '/CFLAGS/s,-prefer-non-pic,,g' "${i}"
217    
218     rm -f "scripts/mysqlbug"
219     }
220    
221     # @FUNCTION: mysql-cmake_src_configure
222     # @DESCRIPTION:
223     # Configure mysql to build the code for Gentoo respecting the use flags.
224     mysql-cmake_src_configure() {
225    
226     debug-print-function ${FUNCNAME} "$@"
227    
228 jmbsvicetto 1.2 CMAKE_BUILD_TYPE="RelWithDebInfo"
229    
230 robbat2 1.1 mycmakeargs=(
231 jmbsvicetto 1.5 -DCMAKE_INSTALL_PREFIX=${EPREFIX}/usr
232     -DMYSQL_DATADIR=${EPREFIX}/var/lib/mysql
233     -DSYSCONFDIR=${EPREFIX}/etc/mysql
234 robbat2 1.1 -DINSTALL_BINDIR=bin
235     -DINSTALL_DOCDIR=share/doc/${P}
236     -DINSTALL_DOCREADMEDIR=share/doc/${P}
237     -DINSTALL_INCLUDEDIR=include/mysql
238     -DINSTALL_INFODIR=share/info
239     -DINSTALL_LIBDIR=$(get_libdir)/mysql
240     -DINSTALL_MANDIR=share/man
241 jmbsvicetto 1.5 -DINSTALL_MYSQLDATADIR=${EPREFIX}/var/lib/mysql
242 robbat2 1.1 -DINSTALL_MYSQLSHAREDIR=share/mysql
243     -DINSTALL_MYSQLTESTDIR=share/mysql/mysql-test
244     -DINSTALL_PLUGINDIR=$(get_libdir)/mysql/plugin
245     -DINSTALL_SBINDIR=sbin
246     -DINSTALL_SCRIPTDIR=share/mysql/scripts
247     -DINSTALL_SQLBENCHDIR=share/mysql
248 jmbsvicetto 1.5 -DINSTALL_SUPPORTFILESDIR=${EPREFIX}/usr/share/mysql
249 robbat2 1.1 -DWITH_COMMENT="Gentoo Linux ${PF}"
250     -DWITHOUT_UNIT_TESTS=1
251     )
252    
253 robbat2 1.10 # Bug 412851
254     # MariaDB requires this flag to compile with GPLv3 readline linked
255     # Adds a warning about redistribution to configure
256     if [[ "${PN}" == "mariadb" ]] ; then
257     mycmakeargs+=( -DNOT_FOR_DISTRIBUTION=1 )
258     fi
259    
260 robbat2 1.1 configure_cmake_locale
261    
262     if use minimal ; then
263     configure_cmake_minimal
264     else
265     configure_cmake_standard
266     fi
267    
268     # Bug #114895, bug #110149
269     filter-flags "-O" "-O[01]"
270    
271     CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing"
272     CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
273     CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
274     export CXXFLAGS
275    
276     # bug #283926, with GCC4.4, this is required to get correct behavior.
277     append-flags -fno-strict-aliasing
278    
279     cmake-utils_src_configure
280     }
281    
282     # @FUNCTION: mysql-cmake_src_compile
283     # @DESCRIPTION:
284     # Compile the mysql code.
285     mysql-cmake_src_compile() {
286    
287     debug-print-function ${FUNCNAME} "$@"
288    
289     cmake-utils_src_compile
290     }
291    
292     # @FUNCTION: mysql-cmake_src_install
293     # @DESCRIPTION:
294     # Install mysql.
295     mysql-cmake_src_install() {
296    
297     debug-print-function ${FUNCNAME} "$@"
298    
299     # Make sure the vars are correctly initialized
300     mysql_init_vars
301    
302     cmake-utils_src_install
303    
304     # Convenience links
305     einfo "Making Convenience links for mysqlcheck multi-call binary"
306     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
307     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
308     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
309    
310     # INSTALL_LAYOUT=STANDALONE causes cmake to create a /usr/data dir
311 jmbsvicetto 1.5 rm -Rf "${ED}/usr/data"
312 robbat2 1.1
313     # Various junk (my-*.cnf moved elsewhere)
314     einfo "Removing duplicate /usr/share/mysql files"
315    
316     # Clean up stuff for a minimal build
317     # if use minimal ; then
318     # einfo "Remove all extra content for minimal build"
319     # rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
320 jmbsvicetto 1.5 # rm -f "${ED}"/usr/bin/{mysql{_install_db,manager*,_secure_installation,_fix_privilege_tables,hotcopy,_convert_table_format,d_multi,_fix_extensions,_zap,_explain_log,_tableinfo,d_safe,_install,_waitpid,binlog,test},myisam*,isam*,pack_isam}
321     # rm -f "${ED}/usr/sbin/mysqld"
322 robbat2 1.1 # rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
323     # fi
324    
325     # Unless they explicitly specific USE=test, then do not install the
326     # testsuite. It DOES have a use to be installed, esp. when you want to do a
327     # validation of your database configuration after tuning it.
328     if ! use test ; then
329     rm -rf "${D}"/${MY_SHAREDSTATEDIR}/mysql-test
330     fi
331    
332     # Configuration stuff
333     case ${MYSQL_PV_MAJOR} in
334 robbat2 1.11 5.[1-4]*) mysql_mycnf_version="5.1" ;;
335     5.[5-9]|6*|7*) mysql_mycnf_version="5.5" ;;
336 robbat2 1.1 esac
337     einfo "Building default my.cnf (${mysql_mycnf_version})"
338     insinto "${MY_SYSCONFDIR}"
339     doins scripts/mysqlaccess.conf
340     mycnf_src="my.cnf-${mysql_mycnf_version}"
341     sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
342     "${FILESDIR}/${mycnf_src}" \
343     > "${TMPDIR}/my.cnf.ok"
344     if use latin1 ; then
345     sed -i \
346     -e "/character-set/s|utf8|latin1|g" \
347     "${TMPDIR}/my.cnf.ok"
348     fi
349     newins "${TMPDIR}/my.cnf.ok" my.cnf
350    
351     # Minimal builds don't have the MySQL server
352     if ! use minimal ; then
353     einfo "Creating initial directories"
354     # Empty directories ...
355     diropts "-m0750"
356     if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
357 jmbsvicetto 1.5 dodir "${MY_DATADIR#${EPREFIX}}"
358     keepdir "${MY_DATADIR#${EPREFIX}}"
359 robbat2 1.1 chown -R mysql:mysql "${D}/${MY_DATADIR}"
360     fi
361    
362     diropts "-m0755"
363 jmbsvicetto 1.5 for folder in "${MY_LOGDIR#${EPREFIX}}" "/var/run/mysqld" ; do
364 robbat2 1.1 dodir "${folder}"
365     keepdir "${folder}"
366 jmbsvicetto 1.5 chown -R mysql:mysql "${ED}/${folder}"
367 robbat2 1.1 done
368     fi
369    
370     # Minimal builds don't have the MySQL server
371     if ! use minimal ; then
372     einfo "Including support files and sample configurations"
373     docinto "support-files"
374     for script in \
375     "${S}"/support-files/my-*.cnf.sh \
376     "${S}"/support-files/magic \
377     "${S}"/support-files/ndb-config-2-node.ini.sh
378     do
379     [[ -f "$script" ]] && dodoc "${script}"
380     done
381    
382     docinto "scripts"
383     for script in "${S}"/scripts/mysql* ; do
384     [[ -f "$script" ]] && [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
385     done
386    
387     fi
388    
389 jmbsvicetto 1.5 mysql_lib_symlinks "${ED}"
390 robbat2 1.1 }

  ViewVC Help
Powered by ViewVC 1.1.20