1 # Copyright 1999-2020 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
5 PYTHON_COMPAT=( python3_{6,7} )
6 CMAKE_MAKEFILE_GENERATOR=emake
10 inherit check-reqs bash-completion-r1 cmake-utils distutils-r1 flag-o-matic \
11 multiprocessing python-r1 udev readme.gentoo-r1 toolchain-funcs \
14 if [[ ${PV} == *9999* ]]; then
16 EGIT_REPO_URI="https://github.com/ceph/ceph.git"
19 SRC_URI="https://download.ceph.com/tarballs/${P}.tar.gz"
20 KEYWORDS="~amd64 ~ppc64"
23 DESCRIPTION="Ceph distributed filesystem"
24 HOMEPAGE="https://ceph.com/"
26 LICENSE="LGPL-2.1 CC-BY-SA-3.0 GPL-2 GPL-2+ LGPL-2+ BSD Boost-1.0 MIT public-domain"
29 CPU_FLAGS_X86=(sse{,2,3,4_1,4_2} ssse3)
31 IUSE="babeltrace +cephfs custom-cflags dpdk fuse grafana jemalloc kerberos ldap"
32 IUSE+=" libressl lttng +mgr numa rabbitmq +radosgw +ssl spdk "
33 IUSE+=" system-boost systemd +tcmalloc test xfs zfs"
34 IUSE+=" $(printf "cpu_flags_x86_%s\n" ${CPU_FLAGS_X86[@]})"
47 dev-libs/leveldb:=[snappy,tcmalloc(-)?]
52 sys-auth/oath-toolkit:=
62 babeltrace? ( dev-util/babeltrace )
63 ldap? ( net-nds/openldap:= )
64 lttng? ( dev-util/lttng-ust:= )
65 fuse? ( sys-fs/fuse:0= )
66 kerberos? ( virtual/krb5 )
67 rabbitmq? ( net-libs/rabbitmq-c:= )
69 !libressl? ( dev-libs/openssl:= )
70 libressl? ( dev-libs/libressl:= )
72 xfs? ( sys-fs/xfsprogs:= )
78 net-misc/curl:=[curl_ssl_openssl]
82 net-misc/curl:=[curl_ssl_libressl]
85 system-boost? ( =dev-libs/boost-1.72*[threads,context,python,${PYTHON_USEDEP}] )
86 jemalloc? ( dev-libs/jemalloc:= )
87 !jemalloc? ( >=dev-util/google-perftools-2.6.1:= )
91 amd64? ( dev-lang/yasm )
92 x86? ( dev-lang/yasm )
94 >=dev-util/cmake-3.5.0
95 dev-python/cython[${PYTHON_USEDEP}]
109 dev-python/coverage[${PYTHON_USEDEP}]
110 dev-python/virtualenv[${PYTHON_USEDEP}]
111 dev-python/requests-mock[${PYTHON_USEDEP}]
116 RDEPEND="${COMMON_DEPEND}
121 sys-fs/lvm2[-device-mapper-only(-)]
124 dev-python/bcrypt[${PYTHON_USEDEP}]
125 dev-python/cherrypy[${PYTHON_USEDEP}]
126 dev-python/flask[${PYTHON_USEDEP}]
127 dev-python/jinja[${PYTHON_USEDEP}]
128 dev-python/pecan[${PYTHON_USEDEP}]
129 dev-python/prettytable[${PYTHON_USEDEP}]
130 dev-python/pyopenssl[${PYTHON_USEDEP}]
131 dev-python/requests[${PYTHON_USEDEP}]
132 dev-python/werkzeug[${PYTHON_USEDEP}]
134 dev-python/more-itertools[${PYTHON_USEDEP}]
135 dev-python/pyjwt[${PYTHON_USEDEP}]
136 dev-python/pyyaml[${PYTHON_USEDEP}]
137 dev-python/routes[${PYTHON_USEDEP}]
138 dev-python/six[${PYTHON_USEDEP}]
142 ${PYTHON_REQUIRED_USE}
144 ?? ( jemalloc tcmalloc )
145 rabbitmq? ( radosgw )
148 # the tests need root access
149 RESTRICT="test? ( userpriv )"
151 # distribution tarball does not include everything needed for tests
154 # false positives unless all USE flags are on
155 CMAKE_WARN_UNUSED_CLI="no"
158 "${FILESDIR}/ceph-12.2.0-use-provided-cpu-flag-values.patch"
159 "${FILESDIR}/ceph-14.2.0-cflags.patch"
160 "${FILESDIR}/ceph-12.2.4-boost-build-none-options.patch"
161 "${FILESDIR}/ceph-13.2.0-cflags.patch"
162 "${FILESDIR}/ceph-14.2.0-mgr-python-version.patch"
163 "${FILESDIR}/ceph-14.2.5-no-virtualenvs.patch"
164 "${FILESDIR}/ceph-13.2.2-dont-install-sysvinit-script.patch"
165 "${FILESDIR}/ceph-14.2.0-dpdk-cflags.patch"
166 "${FILESDIR}/ceph-14.2.0-link-crc32-statically.patch"
167 "${FILESDIR}/ceph-14.2.0-cython-0.29.patch"
168 "${FILESDIR}/ceph-14.2.3-dpdk-compile-fix-1.patch"
169 "${FILESDIR}/ceph-14.2.4-python-executable.patch"
170 "${FILESDIR}/ceph-14.2.4-undefined-behaviour.patch"
173 check-reqs_export_vars() {
175 CHECKREQS_DISK_BUILD="12G"
176 CHECKREQS_DISK_USR="460M"
178 CHECKREQS_DISK_BUILD="1400M"
179 CHECKREQS_DISK_USR="450M"
182 export CHECKREQS_DISK_BUILD CHECKREQS_DISK_USR
186 check-reqs_export_vars
187 check-reqs_pkg_pretend
191 python_setup 'python3*'
192 check-reqs_export_vars
197 cmake-utils_src_prepare
199 if use system-boost; then
200 eapply "${FILESDIR}/ceph-14.2.8-boost-sonames.patch"
202 find "${S}" -name '*.cmake' -or -name 'CMakeLists.txt' -print0 \
204 -e 's|Boost::|Boost_|g' \
205 -e 's|Boost_boost|boost_system|g' -i || die
208 sed -i -r "s:DESTINATION .+\\):DESTINATION $(get_bashcompdir)\\):" \
209 src/bash_completion/CMakeLists.txt || die
211 # remove tests that need root access
212 rm src/test/cli/ceph-authtool/cap*.t || die
215 ceph_src_configure() {
218 -DWITH_BABELTRACE=$(usex babeltrace)
219 -DWITH_CEPHFS=$(usex cephfs)
220 -DWITH_CEPHFS_SHELL=$(if python_is_python3; then usex cephfs; else echo OFF; fi)
221 -DWITH_DPDK=$(usex dpdk)
222 -DWITH_DPDK=$(usex spdk)
223 -DWITH_FUSE=$(usex fuse)
224 -DWITH_LTTNG=$(usex lttng)
225 -DWITH_GSSAPI=$(usex kerberos)
226 -DWITH_GRAFANA=$(usex grafana)
227 -DWITH_MGR=$(usex mgr)
228 -DWITH_MGR_DASHBOARD_FRONTEND=NO
229 -DWITH_NUMA=$(usex numa)
230 -DWITH_OPENLDAP=$(usex ldap)
231 -DMGR_PYTHON_VERSION=$(if python_is_python3; then echo 3; else echo 2; fi)
232 -DWITH_PYTHON3=$(if python_is_python3; then echo "ON"; else echo "OFF"; fi)
233 -DWITH_PYTHON2=$(if python_is_python3; then echo "OFF"; else echo "ON"; fi)
234 -DWITH_RADOSGW=$(usex radosgw)
235 -DWITH_RADOSGW_AMQP_ENDPOINT=$(usex rabbitmq)
236 -DWITH_SSL=$(usex ssl)
237 -DWITH_SYSTEMD=$(usex systemd)
238 -DWITH_TESTS=$(usex test)
239 -DWITH_XFS=$(usex xfs)
240 -DWITH_ZFS=$(usex zfs)
242 -DALLOCATOR=$(usex tcmalloc 'tcmalloc' "$(usex jemalloc 'jemalloc' 'libc')")
243 -DWITH_SYSTEM_BOOST=$(usex system-boost)
244 -DBOOST_J=$(makeopts_jobs)
247 -DSYSTEMD_UNITDIR=$(systemd_get_systemunitdir)
248 -DEPYTHON_VERSION="${EPYTHON#python}"
249 -DCMAKE_INSTALL_DOCDIR="${EPREFIX}/usr/share/doc/${PN}-${PVR}"
250 -DCMAKE_INSTALL_SYSCONFDIR="${EPREFIX}/etc"
253 if use amd64 || use x86; then
254 for flag in ${CPU_FLAGS_X86[@]}; do
255 mycmakeargs+=("$(usex cpu_flags_x86_${flag} "-DHAVE_INTEL_${flag^^}=1")")
259 rm -f "${BUILD_DIR:-${S}}/CMakeCache.txt" \
260 || die "failed to remove cmake cache"
262 cmake-utils_src_configure
265 sed -i "s:\"${T//:\\:}/${EPYTHON}/bin/python\":\"${PYTHON}\":" \
266 "${BUILD_DIR:-${S}}"/include/acconfig.h \
271 use custom-cflags || strip-flags
276 local CMAKE_USE_DIR="${S}"
279 pushd "${BUILD_DIR}/src/pybind" >/dev/null || die
280 emake VERBOSE=1 clean
283 # python modules are only compiled with "make install" so we need to do this to
284 # prevent doing a bunch of compilation in src_install
285 DESTDIR="${T}" emake VERBOSE=1 install
286 popd >/dev/null || die
290 cmake-utils_src_make VERBOSE=1 all
292 # we have to do this here to prevent from building everything multiple times
294 python_foreach_impl python_compile
298 make check || die "make check failed"
302 local CMAKE_USE_DIR="${S}"
303 pushd "${BUILD_DIR}/src/pybind" >/dev/null || die
304 DESTDIR="${ED}" emake VERBOSE=1 install
305 popd >/dev/null || die
311 cmake-utils_src_install
312 python_foreach_impl python_install
314 find "${ED}" -name '*.la' -type f -delete || die
316 exeinto /usr/$(get_libdir)/ceph
317 newexe "${BUILD_DIR}/bin/init-ceph" init-ceph
319 insinto /etc/logrotate.d/
320 newins "${FILESDIR}"/ceph.logrotate-r2 ${PN}
322 keepdir /var/lib/${PN}{,/tmp} /var/log/${PN}/stat
324 fowners -R ceph:ceph /var/log/ceph
326 newinitd "${FILESDIR}/rbdmap.initd" rbdmap
327 newinitd "${FILESDIR}/${PN}.initd-r12" ${PN}
328 newconfd "${FILESDIR}/${PN}.confd-r5" ${PN}
330 insinto /etc/sysctl.d
331 newins "${FILESDIR}"/sysctld 90-${PN}.conf
333 use tcmalloc && newenvd "${FILESDIR}"/envd-tcmalloc 99${PN}-tcmalloc
335 # units aren't installed by the build system unless systemd is enabled
336 # so no point installing these with the USE flag disabled
338 systemd_install_serviced "${FILESDIR}/ceph-mds_at.service.conf" \
341 systemd_install_serviced "${FILESDIR}/ceph-osd_at.service.conf" \
345 udev_dorules udev/*.rules
347 readme.gentoo_create_doc
349 python_setup 'python3*'
352 sed -i -r "s:${T//:/\\:}/${EPYTHON}:/usr:" "${ED}"/usr/bin/ceph{,-crash} \
355 python_fix_shebang "${ED}"/usr/{,s}bin/
357 # python_fix_shebang apparently is not idempotent
358 local shebang_regex='(/usr/lib/python-exec/python[0-9]\.[0-9]/python)[0-9]\.[0-9]'
359 grep -r -E -l --null "${shebang_regex}" "${ED}"/usr/{s,}bin/ \
360 | xargs --null --no-run-if-empty -- sed -i -r "s:${shebang_regex}:\1:" || die
362 local -a rados_classes=( "${ED}/usr/$(get_libdir)/rados-classes"/* )
363 dostrip -x "${rados_classes[@]#${ED}}"
367 readme.gentoo_print_elog