tangled
alpha
login
or
join now
pyrox.dev
/
nixpkgs
0
fork
atom
lol
0
fork
atom
overview
issues
pulls
pipelines
kinetic-cpp-client: Add derivation
William A. Kennington III
11 years ago
7fb042d1
e214f2f1
+285
3 changed files
expand all
collapse all
unified
split
pkgs
development
libraries
kinetic-cpp-client
build-fix.patch
default.nix
top-level
all-packages.nix
+224
pkgs/development/libraries/kinetic-cpp-client/build-fix.patch
···
1
1
+
diff --git a/CMakeLists.txt b/CMakeLists.txt
2
2
+
index 8217cba..a6c1d70 100644
3
3
+
--- a/CMakeLists.txt
4
4
+
+++ b/CMakeLists.txt
5
5
+
@@ -32,7 +32,7 @@ else(APPLE)
6
6
+
endif(${BUILD_FOR_ARM})
7
7
+
endif(APPLE)
8
8
+
9
9
+
-set(CMAKE_CXX_FLAGS "--std=c++0x -Wall -Wextra -Werror -Wno-unknown-warning-option -Wno-unused-parameter -Wno-null-dereference -Wno-unused-local-typedefs -DGTEST_USE_OWN_TR1_TUPLE=1 ${BUILD_PIC_COMPILER_FLAGS}")
10
10
+
+set(CMAKE_CXX_FLAGS "--std=c++11 -DGTEST_USE_OWN_TR1_TUPLE=1 ${BUILD_PIC_COMPILER_FLAGS}")
11
11
+
12
12
+
set(TEST_BINARY "kinetic_client_test")
13
13
+
set(TEST_BINARY_PATH ${kinetic_cpp_client_BINARY_DIR}/${TEST_BINARY})
14
14
+
@@ -50,103 +50,16 @@ set(GENERATED_SOURCES_PATH ${kinetic_cpp_client_SOURCE_DIR}/src/main/generated)
15
15
+
set(PREFIX "${CMAKE_BINARY_DIR}/vendor")
16
16
+
set(EXTERNAL_PREFIX "${kinetic_cpp_client_BINARY_DIR}/vendor")
17
17
+
18
18
+
-include(ExternalProject)
19
19
+
-
20
20
+
-set(KINETIC_PROTO_VERSION "3.0.0")
21
21
+
-set(KINETIC_PROTO_MD5 "85ca027b870811a297c1f6d792498934")
22
22
+
-
23
23
+
-ExternalProject_add(
24
24
+
- kinetic-proto
25
25
+
- PREFIX ${PREFIX}
26
26
+
- DOWNLOAD_COMMAND curl -L https://github.com/Seagate/kinetic-protocol/archive/${KINETIC_PROTO_VERSION}.tar.gz -o kinetic-proto.tar.gz && openssl md5 kinetic-proto.tar.gz | grep -q ${KINETIC_PROTO_MD5} && rm -rf kinetic-proto && mkdir -p kinetic-proto && tar -xz --strip-components 1 -C kinetic-proto -f kinetic-proto.tar.gz
27
27
+
- BUILD_IN_SOURCE 1
28
28
+
- CONFIGURE_COMMAND ""
29
29
+
- BUILD_COMMAND ""
30
30
+
- INSTALL_COMMAND ""
31
31
+
-)
32
32
+
-
33
33
+
-ExternalProject_add(
34
34
+
- gflags
35
35
+
- PREFIX ${EXTERNAL_PREFIX}
36
36
+
- URL "${kinetic_cpp_client_SOURCE_DIR}/tarballs/gflags-2.0-no-svn-files.tar.gz"
37
37
+
- URL_MD5 "9084829124e02a7e6be0f0f824523423"
38
38
+
- CONFIGURE_COMMAND ../gflags/configure --prefix=${EXTERNAL_PREFIX} --enable-static ${CONFIG_HOST_FLAG} ${CHILD_MAKE_FLAGS} ${PIC_MAKE_FLAGS}
39
39
+
-)
40
40
+
-
41
41
+
-ExternalProject_add(
42
42
+
- glog
43
43
+
- PREFIX ${EXTERNAL_PREFIX}
44
44
+
- URL "${kinetic_cpp_client_SOURCE_DIR}/tarballs/glog-0.3.3.tar.gz"
45
45
+
- URL_MD5 "a6fd2c22f8996846e34c763422717c18"
46
46
+
- PATCH_COMMAND sh ${kinetic_cpp_client_SOURCE_DIR}/patches/apply-glog-patches.sh ${kinetic_cpp_client_SOURCE_DIR}
47
47
+
- CONFIGURE_COMMAND ../glog/configure --prefix=${EXTERNAL_PREFIX} --with-gflags=${EXTERNAL_PREFIX} --enable-static ${CONFIG_HOST_FLAG} ${CHILD_MAKE_FLAGS} ${PIC_MAKE_FLAGS}
48
48
+
- DEPENDS gflags
49
49
+
-)
50
50
+
-
51
51
+
-ExternalProject_add(
52
52
+
- gtest
53
53
+
- PREFIX ${EXTERNAL_PREFIX}
54
54
+
- URL "${kinetic_cpp_client_SOURCE_DIR}/tarballs/gtest-1.6.0.zip"
55
55
+
- URL_MD5 "4577b49f2973c90bf9ba69aa8166b786"
56
56
+
- BUILD_IN_SOURCE 1
57
57
+
- CONFIGURE_COMMAND ""
58
58
+
- BUILD_COMMAND ${CMAKE_CXX_COMPILER} -DGTEST_USE_OWN_TR1_TUPLE=1 -I../gtest -I../gtest/include -c ../gtest/src/gtest-all.cc && ar -rv libgtest.a gtest-all.o && ranlib libgtest.a
59
59
+
- INSTALL_COMMAND ""
60
60
+
-)
61
61
+
-
62
62
+
-ExternalProject_add(
63
63
+
- gmock
64
64
+
- PREFIX ${EXTERNAL_PREFIX}
65
65
+
- URL "${kinetic_cpp_client_SOURCE_DIR}/tarballs/gmock-1.6.0.zip"
66
66
+
- URL_MD5 "f547f47321ca88d3965ca2efdcc2a3c1"
67
67
+
- BUILD_IN_SOURCE 1
68
68
+
- CONFIGURE_COMMAND ""
69
69
+
- BUILD_COMMAND ${CMAKE_CXX_COMPILER} -DGTEST_USE_OWN_TR1_TUPLE=1 -I../gmock -I../gmock/include -I../gtest -I../gtest/include -c ../gmock/src/gmock-all.cc && ar -rv libgmock.a gmock-all.o && ranlib libgmock.a
70
70
+
- INSTALL_COMMAND ""
71
71
+
- DEPENDS gtest
72
72
+
-)
73
73
+
-
74
74
+
-ExternalProject_add(
75
75
+
- openssl
76
76
+
- PREFIX ${EXTERNAL_PREFIX}
77
77
+
- URL "${kinetic_cpp_client_SOURCE_DIR}/tarballs/openssl-1.0.1g.tar.gz"
78
78
+
- URL_MD5 "de62b43dfcd858e66a74bee1c834e959"
79
79
+
- BUILD_IN_SOURCE 1
80
80
+
- CONFIGURE_COMMAND ${OPENSSL_CONFIGURE_COMMAND} --prefix=${EXTERNAL_PREFIX} ${BUILD_PIC_COMPILER_FLAG}
81
81
+
- BUILD_COMMAND touch apps/openssl && touch openssl.pc && make ${CHILD_MAKE_FLAGS} build_libs libssl.pc libcrypto.pc
82
82
+
- INSTALL_COMMAND make install_sw
83
83
+
-)
84
84
+
-
85
85
+
-# The protobuf build requires the existence of a protoc binary that can be
86
86
+
-# executed on the host machine. To handle cross compilation, we always build
87
87
+
-# protobuf once for the host so that we have a suitable copy of protoc.
88
88
+
-ExternalProject_add(
89
89
+
- protoc
90
90
+
- PREFIX ${EXTERNAL_PREFIX}/host
91
91
+
- URL "${kinetic_cpp_client_SOURCE_DIR}/tarballs/protobuf-2.5.0.tar.bz2"
92
92
+
- URL_MD5 "a72001a9067a4c2c4e0e836d0f92ece4"
93
93
+
- CONFIGURE_COMMAND ../protoc/configure --prefix=${EXTERNAL_PREFIX}/host --enable-static
94
94
+
-)
95
95
+
-
96
96
+
# Protobuf code generation rules
97
97
+
-set(PROTOC_PATH "${PREFIX}/host/bin/protoc")
98
98
+
-set(PROTO_DIR "${CMAKE_BINARY_DIR}/vendor/src/kinetic-proto")
99
99
+
+set(PROTOC_PATH "protoc")
100
100
+
+set(PROTO_DIR "${CMAKE_BINARY_DIR}/kinetic-proto")
101
101
+
set(PROTO_ORIG_PATH "${PROTO_DIR}/kinetic.proto")
102
102
+
set(PROTO_MODIFIED_PATH "${PROTO_DIR}/kinetic_client.proto")
103
103
+
-ExternalProject_add(
104
104
+
- protobuf
105
105
+
- PREFIX ${EXTERNAL_PREFIX}
106
106
+
- URL "${kinetic_cpp_client_SOURCE_DIR}/tarballs/protobuf-2.5.0.tar.bz2"
107
107
+
- URL_MD5 "a72001a9067a4c2c4e0e836d0f92ece4"
108
108
+
- CONFIGURE_COMMAND ../protobuf/configure --prefix=${EXTERNAL_PREFIX} --enable-static --with-protoc=${PROTOC_PATH} ${CONFIG_HOST_FLAG} ${CHILD_MAKE_FLAGS} ${PIC_MAKE_FLAGS}
109
109
+
- DEPENDS protoc
110
110
+
-)
111
111
+
112
112
+
add_custom_command(
113
113
+
COMMENT "Compiling protobuf"
114
114
+
OUTPUT ${GENERATED_SOURCES_PATH}/kinetic_client.pb.h ${GENERATED_SOURCES_PATH}/kinetic_client.pb.cc
115
115
+
COMMAND mkdir -p ${GENERATED_SOURCES_PATH} && sed 's/com\\.seagate\\.kinetic\\.proto/com.seagate.kinetic.client.proto/' ${PROTO_ORIG_PATH} > ${PROTO_MODIFIED_PATH} && ${PROTOC_PATH} -I=${PROTO_DIR} --cpp_out=${GENERATED_SOURCES_PATH} ${PROTO_MODIFIED_PATH}
116
116
+
- DEPENDS kinetic-proto protoc protobuf
117
117
+
)
118
118
+
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${GENERATED_SOURCES_PATH})
119
119
+
120
120
+
@@ -157,21 +70,10 @@ include_directories(
121
121
+
122
122
+
src/test/mock
123
123
+
src/test
124
124
+
-
125
125
+
- ${EXTERNAL_PREFIX}/include
126
126
+
- ${EXTERNAL_PREFIX}/src/gmock/include
127
127
+
- ${EXTERNAL_PREFIX}/src/gtest/include
128
128
+
)
129
129
+
130
130
+
set(LIBRARY_DEPENDENCIES
131
131
+
kinetic_client
132
132
+
- ${CMAKE_BINARY_DIR}/vendor/lib/libglog.a
133
133
+
- ${CMAKE_BINARY_DIR}/vendor/lib/libgflags.a
134
134
+
- ${CMAKE_BINARY_DIR}/vendor/lib/libssl.a
135
135
+
- ${CMAKE_BINARY_DIR}/vendor/lib/libcrypto.a
136
136
+
- ${CMAKE_BINARY_DIR}/vendor/lib/libprotobuf.a
137
137
+
- ${CMAKE_BINARY_DIR}/vendor/src/gtest/libgtest.a
138
138
+
- ${CMAKE_BINARY_DIR}/vendor/src/gmock/libgmock.a
139
139
+
${CMAKE_THREAD_LIBS_INIT}
140
140
+
dl
141
141
+
)
142
142
+
@@ -180,12 +82,68 @@ set(LIBRARY_DEPENDENCIES
143
143
+
# Otherwise glog uses the standard glibc unwinder and there is no dependency.
144
144
+
find_library(LIBUNWIND "unwind")
145
145
+
if(LIBUNWIND)
146
146
+
- set(LIBRARY_DEPENDENCIES
147
147
+
- ${LIBRARY_DEPENDENCIES}
148
148
+
+ set(LIBRARY_DEPENDENCIES
149
149
+
+ ${LIBRARY_DEPENDENCIES}
150
150
+
${LIBUNWIND}
151
151
+
)
152
152
+
endif()
153
153
+
154
154
+
+find_library(LIBSSL "ssl")
155
155
+
+if(LIBSSL)
156
156
+
+ set(LIBRARY_DEPENDENCIES
157
157
+
+ ${LIBRARY_DEPENDENCIES}
158
158
+
+ ${LIBSSL}
159
159
+
+ )
160
160
+
+endif()
161
161
+
+
162
162
+
+find_library(LIBCRYPTO "crypto")
163
163
+
+if(LIBCRYPTO)
164
164
+
+ set(LIBRARY_DEPENDENCIES
165
165
+
+ ${LIBRARY_DEPENDENCIES}
166
166
+
+ ${LIBCRYPTO}
167
167
+
+ )
168
168
+
+endif()
169
169
+
+
170
170
+
+find_library(LIBPROTOBUF "protobuf")
171
171
+
+if(LIBPROTOBUF)
172
172
+
+ set(LIBRARY_DEPENDENCIES
173
173
+
+ ${LIBRARY_DEPENDENCIES}
174
174
+
+ ${LIBPROTOBUF}
175
175
+
+ )
176
176
+
+endif()
177
177
+
+
178
178
+
+find_library(LIBGLOG "glog")
179
179
+
+if(LIBGLOG)
180
180
+
+ set(LIBRARY_DEPENDENCIES
181
181
+
+ ${LIBRARY_DEPENDENCIES}
182
182
+
+ ${LIBGLOG}
183
183
+
+ )
184
184
+
+endif()
185
185
+
+
186
186
+
+find_library(LIBGFLAGS "gflags")
187
187
+
+if(LIBGFLAGS)
188
188
+
+ set(LIBRARY_DEPENDENCIES
189
189
+
+ ${LIBRARY_DEPENDENCIES}
190
190
+
+ ${LIBGFLAGS}
191
191
+
+ )
192
192
+
+endif()
193
193
+
+
194
194
+
+find_library(LIBGMOCK "gmock")
195
195
+
+if(LIBGMOCK)
196
196
+
+ set(LIBRARY_DEPENDENCIES
197
197
+
+ ${LIBRARY_DEPENDENCIES}
198
198
+
+ ${LIBGMOCK}
199
199
+
+ )
200
200
+
+endif()
201
201
+
+
202
202
+
+find_library(LIBGTEST "gtest")
203
203
+
+if(LIBGTEST)
204
204
+
+ set(LIBRARY_DEPENDENCIES
205
205
+
+ ${LIBRARY_DEPENDENCIES}
206
206
+
+ ${LIBGTEST}
207
207
+
+ )
208
208
+
+endif()
209
209
+
+
210
210
+
add_library(kinetic_client
211
211
+
src/main/generated/kinetic_client.pb.cc
212
212
+
src/main/hmac_provider.cc
213
213
+
diff --git a/src/test/kinetic_cpp_client_test.cc b/src/test/kinetic_cpp_client_test.cc
214
214
+
index 2079fab..c5004a2 100644
215
215
+
--- a/src/test/kinetic_cpp_client_test.cc
216
216
+
+++ b/src/test/kinetic_cpp_client_test.cc
217
217
+
@@ -22,6 +22,7 @@
218
218
+
219
219
+
#include <iostream>
220
220
+
221
221
+
+#include "gflags/gflags.h"
222
222
+
#include "gtest/gtest.h"
223
223
+
#include "glog/logging.h"
224
224
+
+59
pkgs/development/libraries/kinetic-cpp-client/default.nix
···
1
1
+
{ stdenv, fetchgit, fetchurl, cmake, protobuf, libunwind, openssl, glog
2
2
+
, google-gflags, gmock, gtest
3
3
+
}:
4
4
+
5
5
+
let
6
6
+
protoTar = fetchurl {
7
7
+
url = "http://github.com/Seagate/kinetic-protocol/archive/3.0.0.tar.gz";
8
8
+
sha256 = "0406pp0sdf0rg6s5g18r2d8si2rin7p6qbzp7c6pma5hyzsygz48";
9
9
+
};
10
10
+
in
11
11
+
stdenv.mkDerivation rec {
12
12
+
name = "kinetic-cpp-client-2015-04-14";
13
13
+
14
14
+
src = fetchgit {
15
15
+
url = "git://github.com/Seagate/kinetic-cpp-client.git";
16
16
+
rev = "015085a5c89db0398f80923053f36b9e0611e107";
17
17
+
sha256 = "15iwlfjwnyswiwssdjg6qiflhddh66nv07xji4yhz1s4vqhk3nrx";
18
18
+
};
19
19
+
20
20
+
patches = [ ./build-fix.patch ];
21
21
+
22
22
+
postPatch = ''
23
23
+
mkdir -p build/kinetic-proto
24
24
+
tar -x --strip-components 1 -C build/kinetic-proto -f ${protoTar}
25
25
+
'';
26
26
+
27
27
+
nativeBuildInputs = [ cmake protobuf ];
28
28
+
buildInputs = [ libunwind glog google-gflags gmock gtest ];
29
29
+
30
30
+
# The headers and library include from these and there is no provided pc file
31
31
+
propagatedBuildInputs = [ protobuf openssl ];
32
32
+
33
33
+
cmakeFlags = [
34
34
+
"-DBUILD_SHARED_LIBS=true"
35
35
+
];
36
36
+
37
37
+
preCheck = ''
38
38
+
# The checks cannot find libkinetic_client.so otherwise
39
39
+
export LD_LIBRARY_PATH="$(pwd)"
40
40
+
'';
41
41
+
42
42
+
installPhase = ''
43
43
+
# There is no included install script so do our best
44
44
+
mkdir -p $out/lib
45
45
+
cp libkinetic_client.so $out/lib
46
46
+
cp -r ../include $out
47
47
+
cp ../src/main/generated/kinetic_client.pb.h $out/include
48
48
+
'';
49
49
+
50
50
+
doCheck = true;
51
51
+
52
52
+
meta = with stdenv.lib; {
53
53
+
homepage = https://github.com/Seagate/kinetic-cpp-client;
54
54
+
description = "code for producing C and C++ kinetic clients";
55
55
+
license = licenses.lgpl21;
56
56
+
platforms = platforms.unix;
57
57
+
maintainers = with maintainers; [ wkennington ];
58
58
+
};
59
59
+
}
+2
pkgs/top-level/all-packages.nix
···
6200
6200
kf5_latest = kf57;
6201
6201
kf5_stable = kf57;
6202
6202
6203
6203
+
kinetic-cpp-client = callPackage ../development/libraries/kinetic-cpp-client { };
6204
6204
+
6203
6205
krb5 = callPackage ../development/libraries/kerberos/krb5.nix {
6204
6206
openldap = openldap.override {
6205
6207
cyrus_sasl = cyrus_sasl.override { kerberos = null; };