mirror of
https://github.com/aantron/better-enums.git
synced 2025-12-14 23:49:52 +08:00
Until recently, CMake reported VS2015 as not supporting constexpr. However, constexpr support was added in the VS2015 release, and CMake now reports accordingly. The constexpr support in VS2015 is too buggy to build Better Enums. This change disables testing on VS2015 with constexpr support, because those tests will fail. Also adapted to a change in the Cygwin path prefix in AppVeyor and fixed an issue in the Travis build with wget being unable to retrieve from www.cmake.org's new redirect to cmake.org.
165 lines
4.6 KiB
Makefile
165 lines
4.6 KiB
Makefile
# Run "make" for quick builds while developing.
|
|
# Run "make default-all" before submitting a pull request.
|
|
# Run "make clean" to clean up.
|
|
# See doc/CONTRIBUTING.md for full instructions.
|
|
|
|
CXXTEST_GENERATED := cxxtest/tests.cc
|
|
|
|
UNIX_MAKE_COMMAND := make
|
|
WINDOWS_MAKE_COMMAND := "MSBuild.exe \"Better Enums Testing.sln\""
|
|
|
|
UNIX_OUTPUT_DIRECTORY := .
|
|
WINDOWS_OUTPUT_DIRECTORY := Debug
|
|
|
|
ifdef COMSPEC
|
|
WIN32 := true
|
|
endif
|
|
ifdef ComSpec
|
|
WIN32 := true
|
|
endif
|
|
|
|
ifndef WIN32
|
|
|
|
DEFAULT_MAKE_COMMAND := $(UNIX_MAKE_COMMAND)
|
|
DEFAULT_OUTPUT_DIRECTORY := $(UNIX_OUTPUT_DIRECTORY)
|
|
define PATH_FIX
|
|
@true
|
|
endef
|
|
SUFFIX :=
|
|
CXXTESTGEN := cxxtestgen
|
|
|
|
else
|
|
|
|
DEFAULT_MAKE_COMMAND := $(WINDOWS_MAKE_COMMAND)
|
|
DEFAULT_OUTPUT_DIRECTORY := $(WINDOWS_OUTPUT_DIRECTORY)
|
|
define PATH_FIX
|
|
sed 's!include "/!include "C:/cygwin/!g' $1 > $$$$ && mv $$$$ $1
|
|
endef
|
|
SUFFIX := .exe
|
|
CXXTESTGEN := python `which cxxtestgen | sed -E 's!(/cygdrive)?/c/!c:/!'`
|
|
|
|
endif
|
|
|
|
DEFAULTS := \
|
|
TITLE=default \
|
|
MAKE_COMMAND=$(DEFAULT_MAKE_COMMAND) \
|
|
OUTPUT_DIRECTORY=$(DEFAULT_OUTPUT_DIRECTORY)
|
|
|
|
# Builds one configuration with the system compiler. This will be either a
|
|
# regular C++11 or C++98 build (no constexpr to_string and no strict
|
|
# conversions).
|
|
.PHONY : default
|
|
default : examples
|
|
make $(DEFAULTS) one-configuration
|
|
|
|
# Builds all configurations with the system compiler.
|
|
.PHONY : default-all
|
|
default-all : examples
|
|
make $(DEFAULTS) all-configurations
|
|
|
|
.PHONY : examples
|
|
examples :
|
|
make -C ../doc examples
|
|
|
|
# Example: make COMPILER=clang++36 unix
|
|
.PHONY : unix
|
|
unix :
|
|
make TITLE=$(COMPILER) CMAKE_OPTIONS="-DCMAKE_CXX_COMPILER=$(COMPILER)" \
|
|
MAKE_COMMAND=$(UNIX_MAKE_COMMAND) \
|
|
OUTPUT_DIRECTORY=$(UNIX_OUTPUT_DIRECTORY) all-configurations
|
|
|
|
# Example: make TITLE=vc2013 COMPILER="Visual Studio 12 2013" ms
|
|
.PHONY : ms
|
|
ms :
|
|
make TITLE=$(TITLE) CMAKE_OPTIONS="-G \\\"$(COMPILER)\\\"" \
|
|
MAKE_COMMAND=$(WINDOWS_MAKE_COMMAND) \
|
|
OUTPUT_DIRECTORY=$(WINDOWS_OUTPUT_DIRECTORY) all-configurations
|
|
|
|
# Expects three variables to be defined:
|
|
# CMAKE_OPTIONS:
|
|
# First, the compiler:
|
|
# - Empty for a "default" build.
|
|
# - -G "Visual Studio XX YYYY" to select a specific Microsoft compiler.
|
|
# - -DCMAKE_CXX_COMPILER=AAA to select a specific Unix compiler binary.
|
|
# Configuration selection (e.g. -DCONFIGURATION=CXX98) also go here.
|
|
# TITLE:
|
|
# The build title (subdirectory). Some combination of compiler/configuration.
|
|
# MAKE_COMMAND:
|
|
# Either make or msbuild "Better Enums Testing.sln"
|
|
# OUTPUT_DIRECTORY:
|
|
# Path to generated binaries relative to build directory. Either "." or
|
|
# "Debug".
|
|
.PHONY : one-configuration
|
|
one-configuration : $(CXXTEST_GENERATED)
|
|
mkdir -p build/$(TITLE)
|
|
cd build/$(TITLE) && cmake $(CMAKE_OPTIONS) ../.. && $(MAKE_COMMAND)
|
|
rm -rf build/$(TITLE)/bin
|
|
[ -f build/$(TITLE)/do-not-test ] || \
|
|
( ln -s $(OUTPUT_DIRECTORY) build/$(TITLE)/bin && \
|
|
make BIN=build/$(TITLE)/bin run-tests )
|
|
|
|
.PHONY : run-tests
|
|
run-tests :
|
|
$(BIN)/cxxtest
|
|
@for FILE in $(BIN)/example-*$(SUFFIX) ; \
|
|
do \
|
|
EXAMPLE=$$(basename $$FILE | sed s/\.exe$$// | sed s/^example-//) ; \
|
|
$$FILE | sed 's/\r$$//' | cmp - expect/$$EXAMPLE ; \
|
|
RESULT=$$? ; \
|
|
if [ $$RESULT -ne 0 ] ; \
|
|
then \
|
|
echo \'$$FILE\' produced bad output ; \
|
|
exit $$RESULT ; \
|
|
fi ; \
|
|
done
|
|
@echo Example program output matches expected output
|
|
|
|
.PHONY : all-configurations
|
|
all-configurations :
|
|
make TITLE=$(TITLE)-c++11 \
|
|
CMAKE_OPTIONS="$(CMAKE_OPTIONS) -DCONFIGURATION=CONSTEXPR" \
|
|
one-configuration
|
|
make TITLE=$(TITLE)-full-constexpr \
|
|
CMAKE_OPTIONS="$(CMAKE_OPTIONS) -DCONFIGURATION=FULL_CONSTEXPR" \
|
|
one-configuration
|
|
make TITLE=$(TITLE)-enum-class \
|
|
CMAKE_OPTIONS="$(CMAKE_OPTIONS) -DCONFIGURATION=STRICT_CONVERSION" \
|
|
one-configuration
|
|
make TITLE=$(TITLE)-c++14 \
|
|
CMAKE_OPTIONS="$(CMAKE_OPTIONS) -DCONFIGURATION=CXX14" \
|
|
one-configuration
|
|
make TITLE=$(TITLE)-c++98 \
|
|
CMAKE_OPTIONS="$(CMAKE_OPTIONS) -DCONFIGURATION=CXX98" \
|
|
one-configuration
|
|
|
|
.PHONY : all-unix
|
|
all-unix : examples
|
|
make COMPILER=clang++36 unix
|
|
make COMPILER=g++52 unix
|
|
make COMPILER=g++46 unix
|
|
make COMPILER=g++47 unix
|
|
make COMPILER=g++43 unix
|
|
make COMPILER=g++48 unix
|
|
make COMPILER=g++49 unix
|
|
make COMPILER=g++44 unix
|
|
make COMPILER=g++45 unix
|
|
make COMPILER=clang++33 unix
|
|
make COMPILER=clang++34 unix
|
|
make COMPILER=clang++35 unix
|
|
|
|
.PHONY : all-ms
|
|
all-ms : examples
|
|
make TITLE=vc2015 COMPILER="Visual Studio 14 2015" ms
|
|
make TITLE=vc2008 COMPILER="Visual Studio 9 2008" ms
|
|
make TITLE=vc2010 COMPILER="Visual Studio 10 2010" ms
|
|
make TITLE=vc2012 COMPILER="Visual Studio 11 2012" ms
|
|
make TITLE=vc2013 COMPILER="Visual Studio 12 2013" ms
|
|
|
|
$(CXXTEST_GENERATED) : cxxtest/*.h
|
|
$(CXXTESTGEN) --error-printer -o $@ $^
|
|
$(call PATH_FIX,$@)
|
|
|
|
.PHONY : clean
|
|
clean :
|
|
rm -rf build $(CXXTEST_GENERATED)
|