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

Extend CI tests with older c++ standards #273

Merged
merged 7 commits into from
Feb 9, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
language: cpp
sudo: required # the doc target uses sudo to install dependencies

os:
- linux
Expand All @@ -12,8 +13,9 @@ env:
6pxmyzLHSn1ZR7OX5rfPvwM3tOyZ3H0=
matrix:
- BUILD=Doc
- BUILD=Debug
- BUILD=Release
- BUILD=Debug STANDARD=0x
- BUILD=Release STANDARD=98
- BUILD=Release STANDARD=0x

matrix:
exclude:
Expand Down
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ option(FMT_PEDANTIC "Enable extra warnings and expensive tests." OFF)
option(FMT_DOC "Generate the doc target." ${MASTER_PROJECT})
option(FMT_INSTALL "Generate the install target." ${MASTER_PROJECT})
option(FMT_TEST "Generate the test target." ${MASTER_PROJECT})
option(FMT_USE_CPP11 "Enable the addition of c++11 compiler flags." ${MASTER_PROJECT})

project(FORMAT)

Expand Down
7 changes: 4 additions & 3 deletions cppformat/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
#------------------------------------------------------------------------------
# define the cppformat library, its includes and the needed defines
set(FMT_HEADERS format.h)
set(FMT_SOURCES format.cc)
set(FMT_HEADERS format.h format.cc)
if (HAVE_OPEN)
set(FMT_HEADERS ${FMT_HEADERS} posix.h)
set(FMT_SOURCES ${FMT_SOURCES} posix.cc)
endif ()

add_library(cppformat ${FMT_SOURCES} ${FMT_HEADERS})

target_compile_options(cppformat PUBLIC ${CPP11_FLAG}) # starting with cmake 3.1 the CXX_STANDARD property can be used
if (FMT_USE_CPP11)
target_compile_options(cppformat PUBLIC ${CPP11_FLAG}) # starting with cmake 3.1 the CXX_STANDARD property can be used
endif ()
if (FMT_PEDANTIC)
target_compile_options(cppformat PRIVATE ${PEDANTIC_COMPILE_FLAGS})
endif ()
Expand Down
4 changes: 3 additions & 1 deletion support/cmake/testCxx11.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,10 @@ else ()
endif ()
endif ()

if (FMT_USE_CPP11)
set(CMAKE_REQUIRED_FLAGS ${CPP11_FLAG})
endif ()

set(CMAKE_REQUIRED_FLAGS ${CPP11_FLAG})
# Check if variadic templates are working and not affected by GCC bug 39653:
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=39653
check_cxx_source_compiles("
Expand Down
52 changes: 50 additions & 2 deletions support/travis-build.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,13 @@ def rmtree_if_exists(dir):
if e.errno == errno.ENOENT:
pass

def makedirs_if_not_exist(dir):
try:
os.makedirs(dir)
except OSError as e:
if e.errno != errno.EEXIST:
raise

build = os.environ['BUILD']
if build == 'Doc':
travis = 'TRAVIS' in os.environ
Expand Down Expand Up @@ -67,11 +74,52 @@ def rmtree_if_exists(dir):
raise CalledProcessError(p.returncode, cmd)
exit(0)

check_call(['git', 'submodule', 'update', '--init'])
check_call(['cmake', '-DCMAKE_BUILD_TYPE=' + build, '-DFMT_PEDANTIC=ON', '.'])
cppStandard = os.environ['STANDARD']
srcDir = os.getcwd()
srcDir_test = os.path.join(srcDir,"test","find-package-test")

installDir = os.path.join(srcDir,"_install")
buildDir = os.path.join(srcDir,"_build")
buildDir_test = os.path.join(srcDir,"_build_test")

# configure library
makedirs_if_not_exist(buildDir)
os.chdir(buildDir)
if cppStandard == '0x':
# default configuration
check_call(['cmake', '-DCMAKE_INSTALL_PREFIX='+installDir,
'-DCMAKE_BUILD_TYPE=' + build,
'-DFMT_DOC=OFF',
'-DFMT_PEDANTIC=ON',
srcDir])
else:
check_call(['cmake', '-DCMAKE_INSTALL_PREFIX='+installDir,
'-DCMAKE_BUILD_TYPE=' + build,
'-DCMAKE_CXX_FLAGS=-std=c++' + cppStandard,
'-DFMT_USE_CPP11=OFF',
'-DFMT_DOC=OFF',
'-DFMT_PEDANTIC=ON',
srcDir])

# build library
check_call(['make', '-j4'])

# test library
env = os.environ.copy()
env['CTEST_OUTPUT_ON_FAILURE'] = '1'
if call(['make', 'test'], env=env):
with open('Testing/Temporary/LastTest.log', 'r') as f:
print(f.read())
sys.exit(-1)

# install library
check_call(['make', 'install'])

# test installation
makedirs_if_not_exist(buildDir_test)
os.chdir(buildDir_test)
check_call(['cmake', '-DCMAKE_INSTALL_PREFIX='+installDir,
'-DCMAKE_BUILD_TYPE=' + build,
'-DCMAKE_CXX_FLAGS=-std=c++' + cppStandard,
srcDir_test])
check_call(['make', '-j4'])
16 changes: 3 additions & 13 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ add_library(gmock STATIC
${FMT_GMOCK_DIR}/gmock-gtest-all.cc ${FMT_GMOCK_DIR}/gmock/gmock.h
${FMT_GMOCK_DIR}/gtest/gtest.h ${FMT_GMOCK_DIR}/gtest/gtest-spi.h)
target_include_directories(gmock PUBLIC ${FMT_GMOCK_DIR})
target_compile_options(gmock PUBLIC ${CPP11_FLAG})
if (FMT_USE_CPP11)
target_compile_options(gmock PUBLIC ${CPP11_FLAG})
endif ()

find_package(Threads)
if (Threads_FOUND)
Expand Down Expand Up @@ -112,18 +114,6 @@ if (HAVE_FNO_EXCEPTIONS_FLAG)
endif ()

if (FMT_PEDANTIC)
# syntax test which checks if the library builds in gnu++98 mode
file(GLOB test_src *.cc *.h)
file(GLOB lib_src ../cppformat/*.cc ../cppformat/*.h)
add_library(testformat STATIC ${test_src} ${lib_src})
target_include_directories(testformat PRIVATE .. ../gmock)
target_compile_definitions(testformat PRIVATE
FMT_USE_FILE_DESCRIPTORS=$<BOOL:${HAVE_OPEN}>)
check_cxx_compiler_flag(-std=gnu++98 HAVE_STD_GNUPP98_FLAG)
if (HAVE_STD_GNUPP98_FLAG)
target_compile_options(testformat PRIVATE -std=gnu++98)
endif ()

# Test that the library compiles without windows.h.
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
add_library(no-windows-h-test ../cppformat/format.cc)
Expand Down