Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

package DataFrame for conan-io #542

Closed
wants to merge 15 commits into from
Closed
7 changes: 7 additions & 0 deletions recipes/dataframe/all/CMakeLists.txt
@@ -0,0 +1,7 @@
cmake_minimum_required(VERSION 2.8.12)
project(cmake_wrapper)

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()

add_subdirectory("source_subfolder")
8 changes: 8 additions & 0 deletions recipes/dataframe/all/conandata.yml
@@ -0,0 +1,8 @@
sources:
"1.5.0":
sha256: c8f2c1711c8eb8ca4d81780d27b140666c05b35124c7e5cccbec3f22aad7cf64
url: https://github.com/hosseinmoein/DataFrame/archive/V-1.5.0.tar.gz
patches:
"1.5.0":
- base_path: source_subfolder
patch_file: "patches/0001-remove-tests.patch"
74 changes: 74 additions & 0 deletions recipes/dataframe/all/conanfile.py
@@ -0,0 +1,74 @@
import os
from conans import ConanFile, CMake, tools
yssource marked this conversation as resolved.
Show resolved Hide resolved


class DataFrameConan(ConanFile):
name = "dataframe"
license = "BSD-3-Clause"
url = "https://github.com/conan-io/conan-center-index"
homepage = "https://github.com/hosseinmoein/DataFrame"
description = "C++ DataFrame -- R's and Pandas DataFrame in modern C++ using native types, continuous memory storage, and no virtual functions"
topics = (
"conan",
"dataframe",
"numerical-analysis",
"multidimensional-data",
"heterogeneous",
)
settings = "os", "compiler", "build_type", "arch"
options = {
"shared": [True, False],
"fPIC": [True, False],
}
default_options = {
"shared": False,
"fPIC": True,
}

generators = "cmake"
exports_sources = ["CMakeLists.txt", "patches/*"]

@property
def _source_subfolder(self):
return os.path.join(self.source_folder, "source_subfolder")

def source(self):
tools.get(**self.conan_data["sources"][self.version])
extracted_folder = "DataFrame-V-" + self.version
os.rename(extracted_folder, self._source_subfolder)

def config_options(self):
if self.settings.os == "Windows":
del self.options.fPIC

yssource marked this conversation as resolved.
Show resolved Hide resolved
def _configure_cmake(self):
cmake = CMake(self)
cmake.configure()
return cmake

def build(self):
for patch in self.conan_data["patches"][self.version]:
tools.patch(**patch)
cmake = self._configure_cmake()
cmake.build()

def package(self):
self.copy("License", dst="licenses", src=self._source_subfolder)
cmake = self._configure_cmake()
cmake.install()

# Remove packaging files & MS runtime files
for dir_to_remove in [
os.path.join("lib", "cmake"),
os.path.join("lib", "share"),
os.path.join("lib", "pkgconfig"),
yssource marked this conversation as resolved.
Show resolved Hide resolved
"CMake"
]:
tools.rmdir(os.path.join(self.package_folder, dir_to_remove))

def package_info(self):
self.cpp_info.libs = tools.collect_libs(self)

# in linux we need to link also with these libs
if self.settings.os == "Linux":
self.cpp_info.system_libs.extend(["pthread", "dl", "rt"])
178 changes: 178 additions & 0 deletions recipes/dataframe/all/patches/0001-remove-tests.patch
@@ -0,0 +1,178 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7b1bd27..32ce569 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -120,16 +120,16 @@ set(${LIBRARY_TARGET_NAME}_HDR

# Build the library
if (UNIX)
- add_library(${LIBRARY_TARGET_NAME} SHARED ${${LIBRARY_TARGET_NAME}_SRC})
+ add_library(${LIBRARY_TARGET_NAME} ${${LIBRARY_TARGET_NAME}_SRC})
endif(UNIX)

if (MSVC)
add_definitions(-D _CRT_SECURE_NO_WARNINGS)
- add_library(${LIBRARY_TARGET_NAME} STATIC ${${LIBRARY_TARGET_NAME}_SRC})
+ add_library(${LIBRARY_TARGET_NAME} ${${LIBRARY_TARGET_NAME}_SRC})
endif(MSVC)

if (MINGW)
- add_library(${LIBRARY_TARGET_NAME} STATIC ${${LIBRARY_TARGET_NAME}_SRC})
+ add_library(${LIBRARY_TARGET_NAME} ${${LIBRARY_TARGET_NAME}_SRC})
endif()

# Set two minimum target properties for the library.
@@ -151,7 +151,7 @@ target_include_directories(${LIBRARY_TARGET_NAME}
# Specify installation targets, typology and destination folders.
install(TARGETS ${LIBRARY_TARGET_NAME}
EXPORT ${PROJECT_NAME}
- LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT shlib
+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT lib
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT lib
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT bin
)
@@ -211,144 +211,9 @@ endif(MSVC)
# Add the uninstall target
include(AddUninstallTarget)

-# Build the test binary
-add_executable(dataframe_tester test/dataframe_tester.cc)
-add_executable(dataframe_performance test/dataframe_performance.cc)
-add_executable(vectors_tester test/vectors_tester.cc)
-add_executable(vector_ptr_view_tester test/vector_ptr_view_tester.cc)
-add_executable(date_time_tester test/date_time_tester.cc)
-add_executable(mmfile_tester test/mmfile_tester.cc)
-add_executable(obj_vector_tester test/obj_vector_tester.cc)
-add_executable(obj_vector_erase_tester test/obj_vector_erase_tester.cc)
-add_executable(sharedmem_tester test/sharedmem_tester.cc)
-add_executable(gen_rand_tester test/gen_rand_tester.cc)
-
-# Link the DataFrame library to the test binary
-target_link_libraries(dataframe_tester DataFrame)
-
-# Link the DataFrame library to the test binary
-target_link_libraries(dataframe_performance DataFrame)
-
-# Link the DataFrame library to the test binary
-target_link_libraries(vectors_tester DataFrame)
-
-# Link the DataFrame library to the test binary
-target_link_libraries(vector_ptr_view_tester DataFrame)
-
-# Link the DataFrame library to the test binary
-target_link_libraries(date_time_tester DataFrame)
-
-# Link the DataFrame library to the test binary
-target_link_libraries(mmfile_tester DataFrame)
-
-# Link the DataFrame library to the test binary
-target_link_libraries(obj_vector_tester DataFrame)
-
-# Link the DataFrame library to the test binary
-target_link_libraries(obj_vector_erase_tester DataFrame)
-
-# Link the DataFrame library to the test binary
-target_link_libraries(sharedmem_tester DataFrame)
-
-# Link the DataFrame library to the test binary
-target_link_libraries(gen_rand_tester DataFrame)
-
-if (UNIX)
- # Find pthreads library
- set(THREADS_PREFER_PTHREAD_FLAG ON)
- find_package(Threads REQUIRED)
- target_link_libraries(dataframe_tester Threads::Threads)
- target_link_libraries(dataframe_performance Threads::Threads)
- target_link_libraries(vectors_tester Threads::Threads)
- target_link_libraries(vector_ptr_view_tester Threads::Threads)
- target_link_libraries(date_time_tester Threads::Threads)
- target_link_libraries(mmfile_tester Threads::Threads)
- target_link_libraries(obj_vector_tester Threads::Threads)
- target_link_libraries(obj_vector_erase_tester Threads::Threads)
- target_link_libraries(sharedmem_tester Threads::Threads)
- target_link_libraries(gen_rand_tester Threads::Threads)
-endif (UNIX)
-
-if (UNIX AND NOT APPLE)
- target_link_libraries(dataframe_tester rt)
- target_link_libraries(dataframe_performance rt)
- target_link_libraries(vectors_tester rt)
- target_link_libraries(vector_ptr_view_tester rt)
- target_link_libraries(date_time_tester rt)
- target_link_libraries(mmfile_tester rt)
- target_link_libraries(obj_vector_tester rt)
- target_link_libraries(obj_vector_erase_tester rt)
- target_link_libraries(sharedmem_tester rt)
- target_link_libraries(gen_rand_tester rt)
-endif()
-
-# Enable ctest, testing so we can see if unit tests pass or fail in CI
-enable_testing()
-add_test(NAME dataframe_tester
- COMMAND dataframe_tester
- WORKING_DIRECTORY $<TARGET_FILE_DIR:dataframe_tester>)
-add_test(NAME vectors_tester
- COMMAND vectors_tester
- WORKING_DIRECTORY $<TARGET_FILE_DIR:vectors_tester>)
-add_test(NAME vector_ptr_view_tester
- COMMAND vector_ptr_view_tester
- WORKING_DIRECTORY $<TARGET_FILE_DIR:vector_ptr_view_tester>)
-add_test(NAME date_time_tester
- COMMAND date_time_tester
- WORKING_DIRECTORY $<TARGET_FILE_DIR:date_time_tester>)
-
# For some unknown reason to me, this test hangs in Travis CI
#
# add_test(NAME mmfile_tester
# COMMAND mmfile_tester
# WORKING_DIRECTORY $<TARGET_FILE_DIR:mmfile_tester>)

-add_test(NAME obj_vector_tester
- COMMAND obj_vector_tester
- WORKING_DIRECTORY $<TARGET_FILE_DIR:obj_vector_tester>)
-
-add_test(NAME obj_vector_erase_tester
- COMMAND obj_vector_erase_tester
- WORKING_DIRECTORY $<TARGET_FILE_DIR:obj_vector_erase_tester>)
-add_test(NAME gen_rand_tester
- COMMAND gen_rand_tester
- WORKING_DIRECTORY $<TARGET_FILE_DIR:gen_rand_tester>)
-
-message("-- Copying files for testing")
-# Ctest require this files in the build dir, on all platforms
-add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy
- ${CMAKE_CURRENT_SOURCE_DIR}/test/sample_data.csv
- ${CMAKE_CURRENT_BINARY_DIR}/sample_data.csv)
-add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy
- ${CMAKE_CURRENT_SOURCE_DIR}/test/sample_data.json
- ${CMAKE_CURRENT_BINARY_DIR}/sample_data.json)
-add_custom_command(
- TARGET ${PROJECT_NAME} POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy
- ${CMAKE_CURRENT_SOURCE_DIR}/test/sample_data_dt_index.csv
- ${CMAKE_CURRENT_BINARY_DIR}/sample_data_dt_index.csv)
-add_custom_command(
- TARGET ${PROJECT_NAME} POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy
- ${CMAKE_CURRENT_SOURCE_DIR}/test/sample_data_string_index.csv
- ${CMAKE_CURRENT_BINARY_DIR}/sample_data_string_index.csv)
-
-file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test/sample_data.csv
- DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/bin/Debug)
-file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test/sample_data.csv
- DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/bin/Release)
-file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test/sample_data.json
- DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/bin/Debug)
-file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test/sample_data.json
- DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/bin/Release)
-file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test/sample_data_dt_index.csv
- DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/bin/Debug)
-file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test/sample_data_dt_index.csv
- DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/bin/Release)
-file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test/sample_data_string_index.csv
- DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/bin/Debug)
-file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test/sample_data_string_index.csv
- DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/bin/Release)
-message("-- Copying files for testing - done")
9 changes: 9 additions & 0 deletions recipes/dataframe/all/test_package/CMakeLists.txt
@@ -0,0 +1,9 @@
cmake_minimum_required(VERSION 2.8.12)
project(test_package CXX)

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()

add_executable(${PROJECT_NAME} test_package.cpp)
target_link_libraries(${PROJECT_NAME} ${CONAN_LIBS})
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 17)
16 changes: 16 additions & 0 deletions recipes/dataframe/all/test_package/conanfile.py
@@ -0,0 +1,16 @@
import os

from conans import ConanFile, CMake, tools


class DataFrameTestConan(ConanFile):
settings = "os", "compiler", "build_type", "arch"
generators = "cmake"

def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()

def test(self):
self.run(os.path.join("bin", "test_package"), run_environment=True)
36 changes: 36 additions & 0 deletions recipes/dataframe/all/test_package/test_package.cpp
@@ -0,0 +1,36 @@
#include <DataFrame/DataFrame.h>
#include <cassert>

using namespace hmdf;

typedef StdDataFrame<unsigned long> MyDataFrame;

int main(int argc, char *argv[]) {

MyDataFrame::set_thread_level(10);

MyDataFrame df;
std::vector<int> &col0 =
df.create_column<int>(static_cast<const char *>("col_name"));

std::vector<int> intvec = {1, 2, 3, 4, 5};
std::vector<double> dblvec = {1.2345, 2.2345, 3.2345, 4.2345, 5.2345};
std::vector<double> dblvec2 = {0.998, 0.3456, 0.056, 0.15678,
0.00345, 0.923, 0.06743, 0.1};
std::vector<std::string> strvec = {"Col_name", "Col_name", "Col_name",
"Col_name", "Col_name"};
std::vector<unsigned long> ulgvec = {1UL, 2UL, 3UL, 4UL, 5UL, 8UL, 7UL, 6UL};
std::vector<unsigned long> xulgvec = ulgvec;
const size_t total_count = ulgvec.size() + intvec.size() + dblvec.size() +
dblvec2.size() + strvec.size() + xulgvec.size() +
9; // NaNa inserterd

MyDataFrame::size_type rc = df.load_data(
std::move(ulgvec), std::make_pair("int_col", intvec),
std::make_pair("dbl_col", dblvec), std::make_pair("dbl_col_2", dblvec2),
std::make_pair("str_col", strvec), std::make_pair("ul_col", xulgvec));

assert(rc == 48);

return 0;
}
3 changes: 3 additions & 0 deletions recipes/dataframe/config.yml
@@ -0,0 +1,3 @@
versions:
"1.5.0":
folder: all