Merge pull request #60 from tusharpm/appveyor

AppVeyor integration
This commit is contained in:
Michele Caini 2016-09-27 16:13:28 +02:00 committed by GitHub
commit b1aa7ed0ef
12 changed files with 145 additions and 36 deletions

View File

@ -48,7 +48,9 @@ endif(APPLE)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
if(NOT WIN32)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
endif(NOT WIN32)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g -DDEBUG")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Os -DRELEASE")

26
appveyor.yml Normal file
View File

@ -0,0 +1,26 @@
# can use variables like {build} and {branch}
version: 1.0.{build}
image: Visual Studio 2015
environment:
BUILD_DIR: "%APPVEYOR_BUILD_FOLDER%\\build"
platform:
- Win32
- x64
configuration:
- Release
before_build:
- deps.bat
- cd %BUILD_DIR%
- cmake .. -G"%CMAKE_GENERATOR_NAME%"
build:
parallel: true
project: build/uvw.sln
verbosity: minimal
test_script: "%APPVEYOR_BUILD_FOLDER%\\runtests.bat"

View File

@ -30,24 +30,28 @@ find_path(
find_library(
GOOGLETEST_LIBRARY NAMES gtest
PATHS ${BUILD_DEPS_DIR}/${GOOGLETEST_DEPS_DIR}/build/googlemock/gtest/
PATH_SUFFIXES Release
NO_DEFAULT_PATH
)
find_library(
GOOGLETEST_MAIN_LIBRARY NAMES gtest_main
PATHS ${BUILD_DEPS_DIR}/${GOOGLETEST_DEPS_DIR}/build/googlemock/gtest/
PATH_SUFFIXES Release
NO_DEFAULT_PATH
)
find_library(
GOOGLEMOCK_LIBRARY NAMES gmock
PATHS ${BUILD_DEPS_DIR}/${GOOGLETEST_DEPS_DIR}/build/googlemock/
PATH_SUFFIXES Release
NO_DEFAULT_PATH
)
find_library(
GOOGLEMOCK_MAIN_LIBRARY NAMES gmock_main
PATHS ${BUILD_DEPS_DIR}/${GOOGLETEST_DEPS_DIR}/build/googlemock/
PATH_SUFFIXES Release
NO_DEFAULT_PATH
)

View File

@ -22,14 +22,16 @@ find_path(
)
find_library(
UV_STATIC_LIBRARY NAMES libuv.a
PATHS ${BUILD_DEPS_DIR}/${UV_DEPS_DIR}/.libs/
UV_STATIC_LIBRARY NAMES libuv.a libuv
PATHS ${BUILD_DEPS_DIR}/${UV_DEPS_DIR}
PATH_SUFFIXES .libs Release
NO_DEFAULT_PATH
)
find_library(
UV_SHARED_LIBRARY NAMES uv
PATHS ${BUILD_DEPS_DIR}/${UV_DEPS_DIR}/.libs/
UV_SHARED_LIBRARY NAMES uv libuv
PATHS ${BUILD_DEPS_DIR}/${UV_DEPS_DIR}
PATH_SUFFIXES .libs Release
NO_DEFAULT_PATH
)

37
deps.bat Normal file
View File

@ -0,0 +1,37 @@
@echo off
set SRC_DIR=%~dp0
if not defined ARCH set ARCH=x86
if defined platform if "%platform%"=="x64" set ARCH=x64
@rem init/update submodules
cd %SRC_DIR%
git submodule update --init
@rem compile dependencies
@rem uv first because vcbuild.bat gives us good things like:
@rem - msbuild in PATH
@rem - variables like config, msbuild_platform
cd %SRC_DIR%deps\libuv
@rem the arguments to vcbuild make all the difference to further builds
call vcbuild.bat release %ARCH% shared
if "%msbuild_platform%"=="x64" (
set CMAKE_GENERATOR_NAME=Visual Studio 14 2015 Win64
) else (
set CMAKE_GENERATOR_NAME=Visual Studio 14 2015
)
set GTEST_BUILD_DIR=%SRC_DIR%deps\googletest\build
if exist %GTEST_BUILD_DIR%\NUL rd /s /q %GTEST_BUILD_DIR%
md %GTEST_BUILD_DIR%
cd %GTEST_BUILD_DIR%
cmake .. -Dgtest_force_shared_crt=ON -G"%CMAKE_GENERATOR_NAME%"
msbuild googlemock\gmock.sln /p:Configuration=%config% /p:Platform="%msbuild_platform%" /clp:NoSummary;NoItemAndPropertyList;Verbosity=minimal /nologo /m
msbuild googlemock\gtest\gtest.sln /p:Configuration=%config% /p:Platform="%msbuild_platform%" /clp:NoSummary;NoItemAndPropertyList;Verbosity=minimal /nologo /m
@rem go back home
cd %SRC_DIR%

23
runtests.bat Normal file
View File

@ -0,0 +1,23 @@
@echo off
set SRC_DIR=%~dp0
set BUILD_DIR=%SRC_DIR%build\
if not defined config set config=Release
cd %BUILD_DIR%
if defined APPVEYOR if "%APPVEYOR%" == "True" goto skip-build
@rem Now to build the tests
cmake .. -G"%CMAKE_GENERATOR_NAME%"
msbuild uvw.sln /p:Configuration=%config% /p:Platform="%msbuild_platform%" /clp:NoSummary;NoItemAndPropertyList;Verbosity=minimal /nologo /m
:skip-build
@rem one more thing before running the tests, the executables need `libuv.dll`
@rem in the loader path. The easiest is in the same directory.
copy %SRC_DIR%deps\libuv\%config%\libuv.dll %BUILD_DIR%test\bin\%config%
@rem run the tests now
msbuild RUN_TESTS.vcxproj /p:Configuration=%config% /p:Platform="%msbuild_platform%" /clp:NoSummary;NoItemAndPropertyList;Verbosity=minimal /nologo /m
cd %SRC_DIR%

View File

@ -1,5 +1,8 @@
#pragma once
#ifdef _WIN32
#include <ciso646>
#endif
#include <new>
#include <memory>

View File

@ -28,7 +28,7 @@ enum class UVProcessFlags: std::underlying_type_t<uv_process_flags> {
enum class UVStdIOFlags: std::underlying_type_t<uv_stdio_flags> {
IGNORE = UV_IGNORE,
IGNORE_STREAM = UV_IGNORE,
CREATE_PIPE = UV_CREATE_PIPE,
INHERIT_FD = UV_INHERIT_FD,
INHERIT_STREAM = UV_INHERIT_STREAM,
@ -199,7 +199,7 @@ public:
*
* Available flags are:
*
* * `ProcessHandle::StdIO::IGNORE`
* * `ProcessHandle::StdIO::IGNORE_STREAM`
* * `ProcessHandle::StdIO::CREATE_PIPE`
* * `ProcessHandle::StdIO::INHERIT_FD`
* * `ProcessHandle::StdIO::INHERIT_STREAM`
@ -229,7 +229,7 @@ public:
*
* Available flags are:
*
* * `ProcessHandle::StdIO::IGNORE`
* * `ProcessHandle::StdIO::IGNORE_STREAM`
* * `ProcessHandle::StdIO::CREATE_PIPE`
* * `ProcessHandle::StdIO::INHERIT_FD`
* * `ProcessHandle::StdIO::INHERIT_STREAM`

View File

@ -171,7 +171,13 @@ class StreamHandle: public Handle<T, U> {
}
protected:
#ifdef _WIN32
StreamHandle(std::shared_ptr<Loop> ref)
: Handle{std::move(ref)}
{ }
#else
using Handle<T, U>::Handle;
#endif
public:
/**

View File

@ -246,13 +246,13 @@ public:
* * `UDPHandle::Membership::JOIN_GROUP`
*
* @param multicast Multicast address to set membership for.
* @param interface Interface address.
* @param iface Interface address.
* @param membership Action to be performed.
* @return True in case of success, false otherwise.
*/
template<typename I = IPv4>
bool multicastMembership(std::string multicast, std::string interface, Membership membership) {
return (0 == uv_udp_set_membership(get<uv_udp_t>(), multicast.data(), interface.data(), static_cast<uv_membership>(membership)));
bool multicastMembership(std::string multicast, std::string iface, Membership membership) {
return (0 == uv_udp_set_membership(get<uv_udp_t>(), multicast.data(), iface.data(), static_cast<uv_membership>(membership)));
}
/**
@ -278,12 +278,12 @@ public:
/**
* @brief Sets the multicast interface to send or receive data on.
* @param interface Interface address.
* @param iface Interface address.
* @return True in case of success, false otherwise.
*/
template<typename I = IPv4>
bool multicastInterface(std::string interface) {
return (0 == uv_udp_set_multicast_interface(get<uv_udp_t>(), interface.data()));
bool multicastInterface(std::string iface) {
return (0 == uv_udp_set_multicast_interface(get<uv_udp_t>(), iface.data()));
}
/**

View File

@ -11,6 +11,12 @@
#include <array>
#include <uv.h>
#ifdef _WIN32
// MSVC doesn't have C++14 relaxed constexpr support yet. Hence the jugglery.
#define R_CONSTEXPR
#else
#define R_CONSTEXPR constexpr
#endif
namespace uvw {
@ -97,12 +103,12 @@ public:
~Flags() noexcept { static_assert(std::is_enum<E>::value, "!"); }
constexpr Flags& operator=(const Flags &f) noexcept {
R_CONSTEXPR Flags& operator=(const Flags &f) noexcept {
flags = f.flags;
return *this;
}
constexpr Flags& operator=(Flags &&f) noexcept {
R_CONSTEXPR Flags& operator=(Flags &&f) noexcept {
flags = std::move(f.flags);
return *this;
}
@ -314,7 +320,7 @@ Addr address(F &&f, const H *handle) noexcept {
template<typename F, typename... Args>
std::string path(F &&f, Args... args) noexcept {
std::size_t size = DEFAULT_SIZE;
char buf[size];
char buf[DEFAULT_SIZE];
std::string str{};
auto err = std::forward<F>(f)(args..., buf, &size);
@ -475,13 +481,7 @@ struct Utilities {
if(0 == uv_cpu_info(&infos, &count)) {
std::for_each(infos, infos+count, [&cpuinfos](const auto &info) {
CPUInfo cpuinfo;
cpuinfo.model = info.model;
cpuinfo.speed = info.speed;
cpuinfo.times = info.cpu_times;
cpuinfos.push_back(std::move(cpuinfo));
cpuinfos.push_back({ info.model, info.speed, info.cpu_times });
});
uv_free_cpu_info(infos, count);
@ -507,21 +507,23 @@ struct Utilities {
if(0 == uv_interface_addresses(&ifaces, &count)) {
std::for_each(ifaces, ifaces+count, [&interfaces](const auto &iface) {
InterfaceAddress interface;
interface.name = iface.name;
interface.physical = iface.phys_addr;
interface.internal = iface.is_internal;
if(iface.address.address4.sin_family == AF_INET) {
interface.address = details::address<IPv4>(&iface.address.address4);
interface.netmask = details::address<IPv4>(&iface.netmask.netmask4);
interfaces.push_back({
iface.name,
iface.phys_addr,
iface.is_internal == 0 ? false : true,
details::address<IPv4>(&iface.address.address4),
details::address<IPv4>(&iface.netmask.netmask4)
});
} else if(iface.address.address4.sin_family == AF_INET6) {
interface.address = details::address<IPv6>(&iface.address.address6);
interface.netmask = details::address<IPv6>(&iface.netmask.netmask6);
interfaces.push_back({
iface.name,
iface.phys_addr,
iface.is_internal == 0 ? false : true,
details::address<IPv6>(&iface.address.address6),
details::address<IPv6>(&iface.netmask.netmask6)
});
}
interfaces.push_back(std::move(interface));
});
uv_free_interface_addresses(ifaces, count);

View File

@ -22,6 +22,10 @@ if(${LIBRT_FOUND})
list(APPEND COMMON_LINK_LIBS ${LIBRT_LIBRARIES})
endif(${LIBRT_FOUND})
if(WIN32)
list(APPEND COMMON_LINK_LIBS ws2_32)
endif(WIN32)
add_library(odr OBJECT odr.cpp)
target_include_directories(odr PRIVATE ${COMMON_INCLUDE_DIRS})