lol

kinetic-cpp-client: Add derivation

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