diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..faae31b5 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,38 @@ + +os: +- linux + +matrix: + include: + - os: osx + osx_image: xcode7.3 + +addons: + apt: + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-precise-3.8 + packages: + - gcc-5 + - g++-5 + - clang-3.8 + +language: cpp +compiler: +- gcc +- clang + +before_install: ./travis.sh + +install: +- if [ "$CXX" = "g++" ] && [ "$TRAVIS_OS_NAME" = "linux" ]; then export CXX="g++-5" CC="gcc-5"; fi +- if [ "$CXX" = "clang++" ] && [ "$TRAVIS_OS_NAME" = "linux" ]; then export CXX="clang++-3.8" CC="clang-3.8"; fi +- echo ${PATH} +- echo ${CXX} +- ${CXX} --version +- ${CXX} -v +- cmake --version + +before_script: ./deps.sh + +script: mkdir -p build && cd build && cmake .. && make && make test diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c4d7190..fa902b31 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -92,6 +92,7 @@ find_package(UV REQUIRED) find_package(Threads REQUIRED) find_package(GoogleTest) find_package(Doxygen 1.8) +find_package(LibRt) # # Referenced directories and targets diff --git a/README.md b/README.md index 450eaf6c..0e3f2e2f 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ # uvw +[![Build Status](https://travis-ci.org/skypjack/uvw.svg?branch=master)](https://travis-ci.org/skypjack/uvw) + # Introduction `uvw` is a header-only, event based, tiny and easy to use *libuv* wrapper in modern C++.
diff --git a/cmake/modules/FindLibRt.cmake b/cmake/modules/FindLibRt.cmake new file mode 100644 index 00000000..caf7ac2b --- /dev/null +++ b/cmake/modules/FindLibRt.cmake @@ -0,0 +1,31 @@ +# FindLibRt +# -------- +# +# Find the native realtime includes and library. +# +# Result Variables +# ^^^^^^^^^^^^^^^^ +# +# This module defines the following variables: +# +# :: +# +# LIBRT_INCLUDE_DIRS - where to find time.h, etc. +# LIBRT_LIBRARIES - List of libraries when using librt. +# LIBRT_FOUND - True if realtime library found. +# +# Hints +# ^^^^^ +# +# A user may set ``LIBRT_ROOT`` to a realtime installation root to tell this +# module where to look. + +find_path(LIBRT_INCLUDE_DIRS + NAMES time.h + PATHS ${LIBRT_ROOT}/include/ +) +find_library(LIBRT_LIBRARIES rt) +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LibRt DEFAULT_MSG LIBRT_LIBRARIES LIBRT_INCLUDE_DIRS) +mark_as_advanced(LIBRT_INCLUDE_DIRS LIBRT_LIBRARIES) + diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 6a185f4c..00699f69 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -15,9 +15,16 @@ set( COMMON_LINK_LIBS ${CMAKE_THREAD_LIBS_INIT} ${GOOGLETEST_LIBRARIES} - ${UV_LIBRARIES} + ${UV_STATIC_LIBRARY} ) +if(${LIBRT_FOUND}) + list(APPEND COMMON_LINK_LIBS ${LIBRT_LIBRARIES}) +endif(${LIBRT_FOUND}) + +add_library(odr OBJECT odr.cpp) +target_include_directories(odr PRIVATE ${COMMON_INCLUDE_DIRS}) + # List of available targets set(TARGET_MAIN main) @@ -33,7 +40,7 @@ set(TARGET_WORK work) # Test TARGET_MAIN -set(TARGET_MAIN_SOURCES odr.cpp main.cpp) +set(TARGET_MAIN_SOURCES $ main.cpp) add_executable(${TARGET_MAIN} ${TARGET_MAIN_SOURCES}) target_include_directories(${TARGET_MAIN} PRIVATE ${COMMON_INCLUDE_DIRS}) target_link_libraries(${TARGET_MAIN} PRIVATE ${COMMON_LINK_LIBS}) @@ -41,7 +48,7 @@ add_test(NAME ${TARGET_MAIN} COMMAND ${TARGET_MAIN}) # Test TARGET_ASYNC -set(TARGET_ASYNC_SOURCES odr.cpp uvw/async.cpp) +set(TARGET_ASYNC_SOURCES $ uvw/async.cpp) add_executable(${TARGET_ASYNC} ${TARGET_ASYNC_SOURCES}) target_include_directories(${TARGET_ASYNC} PRIVATE ${COMMON_INCLUDE_DIRS}) target_link_libraries(${TARGET_ASYNC} PRIVATE ${COMMON_LINK_LIBS}) @@ -49,7 +56,7 @@ add_test(NAME ${TARGET_ASYNC} COMMAND ${TARGET_ASYNC}) # Test TARGET_CHECK -set(TARGET_CHECK_SOURCES odr.cpp uvw/check.cpp) +set(TARGET_CHECK_SOURCES $ uvw/check.cpp) add_executable(${TARGET_CHECK} ${TARGET_CHECK_SOURCES}) target_include_directories(${TARGET_CHECK} PRIVATE ${COMMON_INCLUDE_DIRS}) target_link_libraries(${TARGET_CHECK} PRIVATE ${COMMON_LINK_LIBS}) @@ -57,7 +64,7 @@ add_test(NAME ${TARGET_CHECK} COMMAND ${TARGET_CHECK}) # Test TARGET_EMITTER -set(TARGET_EMITTER_SOURCES odr.cpp uvw/emitter.cpp) +set(TARGET_EMITTER_SOURCES $ uvw/emitter.cpp) add_executable(${TARGET_EMITTER} ${TARGET_EMITTER_SOURCES}) target_include_directories(${TARGET_EMITTER} PRIVATE ${COMMON_INCLUDE_DIRS}) target_link_libraries(${TARGET_EMITTER} PRIVATE ${COMMON_LINK_LIBS}) @@ -65,7 +72,7 @@ add_test(NAME ${TARGET_EMITTER} COMMAND ${TARGET_EMITTER}) # Test TARGET_IDLE -set(TARGET_IDLE_SOURCES odr.cpp uvw/idle.cpp) +set(TARGET_IDLE_SOURCES $ uvw/idle.cpp) add_executable(${TARGET_IDLE} ${TARGET_IDLE_SOURCES}) target_include_directories(${TARGET_IDLE} PRIVATE ${COMMON_INCLUDE_DIRS}) target_link_libraries(${TARGET_IDLE} PRIVATE ${COMMON_LINK_LIBS}) @@ -73,7 +80,7 @@ add_test(NAME ${TARGET_IDLE} COMMAND ${TARGET_IDLE}) # Test TARGET_LOOP -set(TARGET_LOOP_SOURCES odr.cpp uvw/loop.cpp) +set(TARGET_LOOP_SOURCES $ uvw/loop.cpp) add_executable(${TARGET_LOOP} ${TARGET_LOOP_SOURCES}) target_include_directories(${TARGET_LOOP} PRIVATE ${COMMON_INCLUDE_DIRS}) target_link_libraries(${TARGET_LOOP} PRIVATE ${COMMON_LINK_LIBS}) @@ -81,7 +88,7 @@ add_test(NAME ${TARGET_LOOP} COMMAND ${TARGET_LOOP}) # Test TARGET_PREPARE -set(TARGET_PREPARE_SOURCES odr.cpp uvw/prepare.cpp) +set(TARGET_PREPARE_SOURCES $ uvw/prepare.cpp) add_executable(${TARGET_PREPARE} ${TARGET_PREPARE_SOURCES}) target_include_directories(${TARGET_PREPARE} PRIVATE ${COMMON_INCLUDE_DIRS}) target_link_libraries(${TARGET_PREPARE} PRIVATE ${COMMON_LINK_LIBS}) @@ -89,7 +96,7 @@ add_test(NAME ${TARGET_PREPARE} COMMAND ${TARGET_PREPARE}) # Test TARGET_SIGNAL -set(TARGET_SIGNAL_SOURCES odr.cpp uvw/signal.cpp) +set(TARGET_SIGNAL_SOURCES $ uvw/signal.cpp) add_executable(${TARGET_SIGNAL} ${TARGET_SIGNAL_SOURCES}) target_include_directories(${TARGET_SIGNAL} PRIVATE ${COMMON_INCLUDE_DIRS}) target_link_libraries(${TARGET_SIGNAL} PRIVATE ${COMMON_LINK_LIBS}) @@ -97,7 +104,7 @@ add_test(NAME ${TARGET_SIGNAL} COMMAND ${TARGET_SIGNAL}) # Test TARGET_TIMER -set(TARGET_TIMER_SOURCES odr.cpp uvw/timer.cpp) +set(TARGET_TIMER_SOURCES $ uvw/timer.cpp) add_executable(${TARGET_TIMER} ${TARGET_TIMER_SOURCES}) target_include_directories(${TARGET_TIMER} PRIVATE ${COMMON_INCLUDE_DIRS}) target_link_libraries(${TARGET_TIMER} PRIVATE ${COMMON_LINK_LIBS}) @@ -105,7 +112,7 @@ add_test(NAME ${TARGET_TIMER} COMMAND ${TARGET_TIMER}) # Test TARGET_WORK -set(TARGET_WORK_SOURCES odr.cpp uvw/work.cpp) +set(TARGET_WORK_SOURCES $ uvw/work.cpp) add_executable(${TARGET_WORK} ${TARGET_WORK_SOURCES}) target_include_directories(${TARGET_WORK} PRIVATE ${COMMON_INCLUDE_DIRS}) target_link_libraries(${TARGET_WORK} PRIVATE ${COMMON_LINK_LIBS}) diff --git a/test/uvw/signal.cpp b/test/uvw/signal.cpp index c57a7e99..4bbbb143 100644 --- a/test/uvw/signal.cpp +++ b/test/uvw/signal.cpp @@ -10,9 +10,9 @@ TEST(Signal, Fake) { handle->on(l); handle->on(l); - handle->start(42); + handle->start(2); - ASSERT_EQ(42, handle->signal()); + ASSERT_EQ(2, handle->signal()); handle->stop(); handle->close(); diff --git a/travis.sh b/travis.sh new file mode 100755 index 00000000..b05ec793 --- /dev/null +++ b/travis.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +USER_PATH_DIR=~/bin +TEMP_DIR=~/.cmake +mkdir -p ${USER_PATH_DIR} +mkdir -p ${TEMP_DIR} + +if [ "$TRAVIS_OS_NAME" == "linux" ]; then + curl -s https://cmake.org/files/v3.6/cmake-3.6.2-Linux-x86_64.tar.gz | tar -xz -C ${TEMP_DIR} + ln -s ${TEMP_DIR}/cmake-3.6.2-Linux-x86_64/bin/cmake ${USER_PATH_DIR} +fi + +if [ "$TRAVIS_OS_NAME" == "osx" ]; then + curl -s https://cmake.org/files/v3.6/cmake-3.6.2-Darwin-x86_64.tar.gz | tar -xz -C ${TEMP_DIR} + "${TEMP_DIR}/cmake-3.6.2-Darwin-x86_64/CMake.app/Contents/bin/cmake-gui" --install=${USER_PATH_DIR} +fi