Skip to content

Commit

Permalink
Merge pull request #115 from k0ekk0ek/travisci
Browse files Browse the repository at this point in the history
Windows builds on Travis CI
  • Loading branch information
eboasson committed Feb 19, 2019
2 parents a54ebff + 58a8dfd commit 1c7f903
Show file tree
Hide file tree
Showing 6 changed files with 105 additions and 79 deletions.
95 changes: 77 additions & 18 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ linux_gcc8: &linux_gcc8
apt:
update: true
sources: [ ubuntu-toolchain-r-test ]
#packages: [ gcc-8 g++-8 maven cmake ]
packages: [ gcc-8 g++-8 ]

linux_clang: &linux_clang
Expand All @@ -21,8 +20,6 @@ linux_clang: &linux_clang
addons:
apt:
update: true
#sources: [ ubuntu-toolchain-r-test ]
#packages: [ maven clang ]

osx_xcode10_1: &osx_xcode10_1
os: osx
Expand All @@ -33,6 +30,9 @@ osx_xcode10_1: &osx_xcode10_1
packages:
- pyenv-virtualenv

windows_vs2017: &windows_vs2017
os: windows

matrix:
include:
- <<: *linux_gcc8
Expand All @@ -42,19 +42,56 @@ matrix:
- <<: *linux_clang
env: [ BUILD_TYPE=Debug, C_COMPILER=clang, CXX_COMPILER=clang++, USE_SANITIZER=address ]
- <<: *linux_clang
env: [ BUILT_TYPE=Release, C_COMPILER=clang, CXX_COMPILER=clang++, USE_SANITIZER=none ]
env: [ BUILD_TYPE=Release, C_COMPILER=clang, CXX_COMPILER=clang++, USE_SANITIZER=none ]
- <<: *osx_xcode10_1
env: [ BUILD_TYPE=Debug, C_COMPILER=clang, CXX_COMPILER=clang++, USE_SANITIZER=address ]
- <<: *osx_xcode10_1
env: [ BUILD_TYPE=Release, C_COMPILER=clang, CXX_COMPILER=clang++, USE_SANITIZER=none ]
- <<: *windows_vs2017
env: [ ARCH=x86, BUILD_TYPE=Debug, GENERATOR="Visual Studio 15 2017" ]
- <<: *windows_vs2017
env: [ ARCH=x86_64, BUILD_TYPE=Debug, GENERATOR="Visual Studio 15 2017" ]
- <<: *windows_vs2017
env: [ ARCH=x86_64, BUILD_TYPE=Release, GENERATOR="Visual Studio 15 2017" ]


# Conan will automatically determine the best compiler for a given platform
# based on educated guesses. The first check is based on the CC and CXX
# environment variables, the second (on Windows) is to check if Microsoft
# Visual Studio is installed. On Travis CC and CXX are set to gcc on Microsoft
# Windows targets as well, this has the undesired effect that MSVC is not
# detected, unsetting CC and CXX solves that problem.
before_install:
- eval "export CC=${C_COMPILER}";
- eval "export CXX=${CXX_COMPILER}";
- if [ "${TRAVIS_OS_NAME}" = "windows" ]; then
eval "unset CC";
eval "unset CXX";
else
eval "export CC=${C_COMPILER}";
eval "export CXX=${CXX_COMPILER}";
fi

# Windows targets in Travis are still very much in beta and Python is not yet
# available and installation of Python through Chocolaty does not work well.
# The real fix is to wait until Python and pip are both available on the
# target. Until then download Conan from the official website and simply add
# the extracted folder to the path.
#
# Maven requires JAVA_HOME to be set (at least on Windows), but Windows targets
# do not come with Java installed. For now it is installed through Chocolatey
# as a dependency of Maven, hence JAVA_HOME is only available after the
# package is installed. The problem is that the shell cannot be restarted and
# the path is not fixed as it contains the version number. To workaround this
# issue, JAVA_HOME is read from the registry and exported by this script.
install:
- if [ "${TRAVIS_OS_NAME}" = "osx" ]; then
- if [ "${TRAVIS_OS_NAME}" = "windows" ]; then
choco install innoextract maven;
wget -q https://dl.bintray.com/conan/installers/conan-win-64_1_10_0.exe;
innoextract conan-win-64_1_10_0.exe;
KEY='HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment';
VALUE='JAVA_HOME';
JAVA_HOME=$(REG QUERY "${KEY}" -v "${VALUE}" | sed -n 's/^.*JAVA_HOME \+[_A-Z]\+ \+//ip');
eval "export JAVA_HOME=\"${JAVA_HOME}\"";
eval "export PATH=\"$(pwd)/app/conan:${PATH}\"";
elif [ "${TRAVIS_OS_NAME}" = "osx" ]; then
eval "$(pyenv init -)";
pyenv virtualenv conan;
pyenv rehash;
Expand All @@ -63,21 +100,43 @@ install:
else
pip install conan --upgrade --user;
fi
- conan user
- conan profile new default --detect

before_script:
- conan remote add bincrafters https://api.bintray.com/conan/bincrafters/public-conan
- conan profile get settings.arch default
- if [ -z "${ARCH}" ]; then
eval "export ARCH=\"$(conan profile get settings.arch default)\"";
fi
- if [ "${TRAVIS_OS_NAME}" = "windows" ]; then
GENERATOR_ARCH=$(if [ "${ARCH}" = "x86_64" ]; then echo " Win64"; fi);
eval "export GENERATOR=\"${GENERATOR}${GENERATOR_ARCH}\"";
eval "export USE_SANITIZER=none";
else
eval "export GENERATOR=\"Unix Makefiles\"";
fi
- export

script:
- mkdir build
- cd build
- conan install .. --build missing
- cmake -DBUILD_TESTING=on -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DUSE_SANITIZER=${USE_SANITIZER} -DCMAKE_INSTALL_PREFIX=${PWD}/install ../src
- cmake --build . --target install
- mkdir install/share/CycloneDDS/examples/helloworld/build
- if [ "$USE_SANITIZER" = "none" ]; then
(cd install/share/CycloneDDS/examples/helloworld/build && cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} .. && cmake --build .) ;
else
(cd install/share/CycloneDDS/examples/helloworld/build && cmake -DCMAKE_C_FLAGS=-fsanitize=address -DCMAKE_LINKER_FLAGS=-fsanitize=address -DCMAKE_BUILD_TYPE=${BUILD_TYPE} .. && cmake --build .) ;
- conan install -b missing -s arch=${ARCH} -s build_type=${BUILD_TYPE} ..
- cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE}
-DCMAKE_INSTALL_PREFIX=$(pwd)/install
-DUSE_SANITIZER=${USE_SANITIZER}
-DBUILD_TESTING=on
-G "${GENERATOR}" ../src
- cmake --build . --config ${BUILD_TYPE} --target install
- ctest -T test -C ${BUILD_TYPE}
- if [ "${USE_SANITIZER}" != "none" ]; then
CMAKE_LINKER_FLAGS="-DCMAKE_LINKER_FLAGS=-fsanitize=${USE_SANITIZER}";
CMAKE_C_FLAGS="-DCMAKE_C_FLAGS=-fsanitize=${USE_SANITIZER}";
fi
- ctest -T test
- mkdir install/share/CycloneDDS/examples/helloworld/build
- cd install/share/CycloneDDS/examples/helloworld/build
- cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE}
${CMAKE_C_FLAGS}
${CMAKE_LINKER_FLAGS}
-G "${GENERATOR}" ..
- cmake --build . --config ${BUILD_TYPE}

38 changes: 21 additions & 17 deletions src/cmake/modules/FindMaven.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -17,21 +17,19 @@ if(DEFINED ENV{M2_HOME})
list(APPEND _mvn_hints "$ENV{M2_HOME}/bin")
endif()

# Chocolatey installs packages under C:\ProgramData\chocolatey.
if(ENV{ProgramData} AND IS_DIRECTORY "$ENV{ProgramData}/chocolatey/bin")
list(APPEND _mvn_paths "$ENV{ProgramData}/chocolatey/bin")
endif()

# Maven documentation mentions intalling maven under C:\Program Files on
# Windows and under /opt on *NIX platforms
# Windows and under /opt on *NIX platforms.
if(WIN32)
set(_program_files_env "ProgramFiles")
set(_program_files $ENV{${_program_files_env}})
set(_program_files_x86_env "ProgramFiles(x86)")
set(_program_files_x86 $ENV{${_program_files_x86_env}})

if(_program_files)
list(APPEND _dirs "${_program_files}")
endif()

if(_program_files_x86)
list(APPEND _dirs "${_program_files_x86}")
endif()
foreach(_env "ProgramFiles" "ProgramFiles(x86)")
if(ENV{${_env}} AND IS_DIRECTORY "$ENV{${_env}}")
list(APPEND _dirs "$ENV{${_env}}")
endif()
endforeach()
else()
list(APPEND _dirs "/opt")
endif()
Expand All @@ -45,14 +43,20 @@ foreach(_dir ${_dirs})
endforeach()
endforeach()

if(WIN32)
set(_mvn_names "mvn.cmd" "mvn.exe")
else()
set(_mvn_names "mvn")
endif()

find_program(Maven_EXECUTABLE
NAMES mvn
NAMES ${_mvn_names}
HINTS ${_mvn_hints}
PATHS ${_mvn_paths})

if(Maven_EXECUTABLE)
execute_process(COMMAND ${Maven_EXECUTABLE} -version
RESULT_VARIABLE result
RESULT_VARIABLE res
OUTPUT_VARIABLE var
ERROR_VARIABLE var
OUTPUT_STRIP_TRAILING_WHITESPACE
Expand All @@ -67,8 +71,8 @@ endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Maven
FOUND_VAR Maven_FOUND
REQUIRED_VARS Maven_EXECUTABLE
VERSION_VAR Maven_VERSION)
VERSION_VAR Maven_VERSION
REQUIRED_VARS Maven_EXECUTABLE Maven_VERSION)

mark_as_advanced(Maven_FOUND Maven_EXECUTABLE Maven_VERSION)

17 changes: 6 additions & 11 deletions src/idlc/cmake/IdlcGenerate.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,16 @@
#
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
#
find_package(Java 1.8 REQUIRED)

if(NOT IDLC_JAR)
set(IDLC_JAR "${CMAKE_CURRENT_LIST_DIR}/idlc-jar-with-dependencies.jar")
set(IDLC_JAR "${CMAKE_CURRENT_LIST_DIR}/idlc-jar-with-dependencies.jar")
endif()

set(LINE_ENDINGS "UNIX")
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
set(EXTENSION ".bat")
set(LINE_ENDINGS "WIN32")
if(WIN32)
set(EXTENSION ".bat")
set(LINE_ENDINGS "WIN32")
endif()

set(IDLC_DIR "${CMAKE_CURRENT_BINARY_DIR}" CACHE STRING "")
Expand All @@ -30,13 +32,6 @@ configure_file(
@ONLY
NEWLINE_STYLE ${LINE_ENDINGS})

# FIXME: C++ IDL compiler depends idlpp. Leave it disabled for now.
#configure_file(
# "cmake/dds_idlcpp${EXTENSION}.in"
# "dds_idlcpp${EXTENSION}"
# @ONLY
# NEWLINE_STYLE ${LINE_ENDINGS})

if(NOT ("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows"))
execute_process(COMMAND chmod +x "${IDLC_DIR}/${IDLC}")
endif()
Expand Down
2 changes: 1 addition & 1 deletion src/idlc/cmake/dds_idlc.bat.in
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,5 @@ if "%CLASSPATH%"=="" (
set "CLASSPATH=@IDLC_JAR@;%CLASSPATH%"
)

java org.eclipse.cyclonedds.compilers.Idlc %*
"@Java_JAVA_EXECUTABLE@" org.eclipse.cyclonedds.compilers.Idlc %*

19 changes: 0 additions & 19 deletions src/idlc/cmake/dds_idlcpp.bat.in

This file was deleted.

13 changes: 0 additions & 13 deletions src/idlc/cmake/dds_idlcpp.in

This file was deleted.

0 comments on commit 1c7f903

Please sign in to comment.