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
+[](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