e719a41a88a578bfaf682aea9b420e864fb734ab
[gentoo.git] / dev-db / clickhouse / clickhouse-18.6.0-r1.ebuild
1 # Copyright 1999-2020 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
3
4 EAPI=6
5
6 CMAKE_MAKEFILE_GENERATOR="ninja"
7
8 inherit cmake-utils systemd toolchain-funcs user
9
10 DESCRIPTION="An OSS column-oriented database management system for real-time data analysis"
11 HOMEPAGE="https://clickhouse.yandex"
12 LICENSE="Apache-2.0"
13
14 MY_PN="ClickHouse"
15 TYPE="stable"
16
17 CCTZ_COMMIT="4f9776a"
18 ZSTD_COMMIT="2555975"
19 SRC_URI="https://github.com/yandex/${MY_PN}/archive/v${PV}-${TYPE}.tar.gz -> ${P}.tar.gz
20         https://github.com/google/cctz/archive/${CCTZ_COMMIT}.tar.gz -> cctz-${CCTZ_COMMIT}.tar.gz
21 "
22
23 SLOT="0/${TYPE}"
24 IUSE="+client cpu_flags_x86_sse4_2 +server debug doc kafka mongodb mysql static test tools zookeeper"
25 RESTRICT="!test? ( test )"
26 KEYWORDS="~amd64"
27
28 REQUIRED_USE="
29         server? ( cpu_flags_x86_sse4_2 )
30         static? ( client server tools )
31 "
32
33 RDEPEND="
34         dev-libs/re2:0=
35         !static? (
36                 >=app-arch/lz4-1.8.0:=
37                 >=app-arch/zstd-1.3.4:=
38                 client? (
39                         sys-libs/ncurses:0=
40                         sys-libs/readline:0=
41                 )
42
43                 dev-libs/double-conversion
44                 dev-libs/capnproto
45                 dev-libs/libltdl:0
46                 sys-libs/libunwind:7
47                 sys-libs/zlib
48                 || (
49                         dev-db/unixODBC
50                         dev-libs/poco[odbc]
51                 )
52                 dev-libs/icu:=
53                 dev-libs/glib
54                 >=dev-libs/boost-1.65.0:=
55                 dev-libs/openssl:0=
56                 dev-libs/zookeeper-c
57                 kafka? ( dev-libs/librdkafka:= )
58                 mysql? ( dev-db/mysql-connector-c:= )
59         )
60
61         >=dev-libs/poco-1.9.0
62         dev-libs/libpcre
63 "
64
65 DEPEND="${RDEPEND}
66         doc? ( >=dev-python/mkdocs-0.17.3 )
67         static? (
68                 >=app-arch/lz4-1.8.0[static-libs]
69                 >=app-arch/zstd-1.3.4[static-libs]
70                 client? (
71                         sys-libs/ncurses:0=[static-libs]
72                         sys-libs/readline:0=[static-libs]
73                 )
74                 dev-libs/capnproto[static-libs]
75                 dev-libs/libltdl[static-libs]
76                 sys-libs/libunwind:7[static-libs]
77                 sys-libs/zlib[static-libs]
78                 || (
79                         dev-db/unixODBC[static-libs]
80                         dev-libs/poco[odbc]
81                 )
82                 dev-libs/icu[static-libs]
83                 dev-libs/glib[static-libs]
84                 >=dev-libs/boost-1.65.0[static-libs]
85                 dev-libs/openssl[static-libs]
86                 dev-libs/zookeeper-c[static-libs]
87                 dev-db/mysql-connector-c[static-libs]
88                 kafka? ( dev-libs/librdkafka[static-libs] )
89         )
90
91         sys-libs/libtermcap-compat
92         dev-util/patchelf
93         >=sys-devel/lld-6.0.0
94         || (
95                 >=sys-devel/gcc-7.0
96                 >=sys-devel/clang-6.0
97         )
98 "
99
100 S="${WORKDIR}/${MY_PN}-${PV}-${TYPE}"
101
102 _clang_fullversion() {
103         local ver="$1"; shift
104         set -- $($(tc-getCPP "$@") -E -P - <<<"__clang_major__ __clang_minor__ __clang_patchlevel__")
105         eval echo "$ver"
106 }
107
108 clang-fullversion() {
109         _clang_fullversion '$1.$2.$3' "$@"
110 }
111
112 clang-version() {
113         _clang_fullversion '$1.$2' "$@"
114 }
115
116 clang-major-version() {
117         _clang_fullversion '$1' "$@"
118 }
119
120 clang-minor-version() {
121         _clang_fullversion '$2' "$@"
122 }
123
124 clang-micro-version() {
125         _clang_fullversion '$3' "$@"
126 }
127
128 pkg_pretend() {
129         if [[ $(tc-getCC) == clang ]]; then
130                 if [[ $(clang-major-version) -lt 6 ]]; then
131                         eerror "Compilation with clang older than 6.0 is not supported"
132                         die "Too old clang found"
133                 fi
134                 :
135         elif [[ $(gcc-major-version) -lt 7 ]] && [[$(gcc-minor-version) -lt 2 ]]; then
136                 eerror "Compilation with gcc older than 7.2 is not supported"
137                 die "Too old gcc found"
138         fi
139 }
140
141 src_unpack() {
142         default_src_unpack
143         [[ ${PV} == 9999 ]] && return 0
144         cd "${S}/contrib" || die "failed to cd to contrib"
145         mkdir -p cctz zookeeper zstd || die "failed to create directories"
146         tar --strip-components=1 -C cctz -xf "${DISTDIR}/cctz-${CCTZ_COMMIT}.tar.gz" || die "failed to unpack cctz"
147 }
148
149 src_configure() {
150         local mycmakeargs=(
151                 -DENABLE_POCO_MONGODB="$(usex mongodb)"
152                 -DENABLE_RDKAFKA="$(usex kafka)"
153                 -DENABLE_TESTS="$(usex test)"
154                 -DUSE_STATIC_LIBRARIES="$(usex static)"
155                 -DMAKE_STATIC_LIBRARIES="$(usex static)"
156                 -DUSE_MYSQL="$(usex mysql)"
157                 -DENABLE_CLICKHOUSE_SERVER="$(usex server)"
158                 -DENABLE_CLICKHOUSE_CLIENT="$(usex client)"
159                 -DENABLE_CLICKHOUSE_LOCAL="$(usex tools)"
160                 -DENABLE_CLICKHOUSE_BENCHMARK="$(usex tools)"
161                 -DENABLE_CLICKHOUSE_PERFORMANCE="$(usex tools)"
162                 -DENABLE_CLICKHOUSE_EXTRACT_FROM_CONFIG="$(usex tools)"
163                 -DENABLE_CLICKHOUSE_COMPRESSOR="$(usex tools)"
164                 -DENABLE_CLICKHOUSE_COPIER="$(usex tools)"
165                 -DENABLE_CLICKHOUSE_COPIER="$(usex tools)"
166                 -DENABLE_CLICKHOUSE_ALL=OFF
167                 -DUSE_INTERNAL_CITYHASH_LIBRARY=ON # Clickhouse explicitly requires bundled patched cityhash
168                 -DUNBUNDLED=ON
169         )
170
171         cmake-utils_src_configure
172 }
173
174 src_install() {
175         cmake-utils_src_install
176
177         if ! use test; then
178                 rm -rf "${D}/usr/share/clickhouse-test" || die "failed to remove tests"
179         fi
180
181         if use doc; then
182                 pushd "${S}/docs/tools" || die "Failed to enter docs build directory"
183                 ./build.py || die "Failed to build docs"
184                 popd || die "Failed to exit docs build directory"
185
186                 dodoc -r "${S}/docs/build"
187         fi
188
189         if use server; then
190                 newinitd "${FILESDIR}"/clickhouse-server.initd clickhouse-server
191                 systemd_dounit "${FILESDIR}"/clickhouse-server.service
192         fi
193 }
194
195 pkg_preinst() {
196         if use server; then
197                 enewgroup clickhouse
198                 enewuser clickhouse -1 -1 /var/lib/clickhouse clickhouse
199         fi
200 }