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