Add examples subdirectory to CMake build; included if BUILD_EXAMPLES is true
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f7b4f36..aaa8877 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -337,6 +337,11 @@
endif() # !NO_SELFTEST
+if(BUILD_EXAMPLES)
+ add_subdirectory(examples)
+endif()
+
+
install(DIRECTORY "single_include/" DESTINATION "include/catch")
## Provide some pkg-config integration
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
new file mode 100644
index 0000000..9f7c7fa
--- /dev/null
+++ b/examples/CMakeLists.txt
@@ -0,0 +1,100 @@
+#
+# Build examples.
+#
+# Requires BUILD_EXAMPLES to be defined 'true', see ../CMakeLists.txt.
+#
+
+cmake_minimum_required( VERSION 3.0 )
+
+project( CatchExamples CXX )
+
+# define folders used:
+
+set( EXAMPLES_DIR ${CATCH_DIR}/examples )
+set( HEADER_DIR ${CATCH_DIR}/single_include )
+
+# single-file sources:
+
+set( SOURCES_SINGLE_FILE
+ 010-TestCase.cpp
+)
+
+# multiple-file modules:
+
+set( SOURCES_020
+ 020-TestCase-1.cpp
+ 020-TestCase-2.cpp
+)
+
+# main for idiomatic test sources:
+
+set( SOURCES_IDIOMATIC_MAIN
+ 000-CatchMain.cpp
+)
+
+# sources to combine with 000-CatchMain.cpp:
+
+set( SOURCES_IDIOMATIC_TESTS
+ 030-Asn-Require-Check.cpp
+ 100-Fix-Section.cpp
+ 110-Fix-ClassFixture.cpp
+ 120-Bdd-ScenarioGivenWhenThen.cpp
+ 210-Evt-EventListeners.cpp
+)
+
+# check if all sources are listed, warn if not:
+
+set( SOURCES_ALL
+ ${SOURCES_020}
+ ${SOURCES_SINGLE_FILE}
+ ${SOURCES_IDIOMATIC_MAIN}
+ ${SOURCES_IDIOMATIC_TESTS}
+)
+
+foreach( name ${SOURCES_ALL} )
+ list( APPEND SOURCES_ALL_PATH ${EXAMPLES_DIR}/${name} )
+endforeach()
+
+CheckFileList( SOURCES_ALL_PATH ${EXAMPLES_DIR} )
+
+# create target names:
+
+string( REPLACE ".cpp" "" BASENAMES_SINGLE_FILE "${SOURCES_SINGLE_FILE}" )
+string( REPLACE ".cpp" "" BASENAMES_IDIOMATIC_TESTS "${SOURCES_IDIOMATIC_TESTS}" )
+
+set( TARGETS_SINGLE_FILE ${BASENAMES_SINGLE_FILE} )
+set( TARGETS_IDIOMATIC_TESTS ${BASENAMES_IDIOMATIC_TESTS} )
+set( TARGETS_ALL ${TARGETS_SINGLE_FILE} ${TARGETS_IDIOMATIC_TESTS} 020-TestCase CatchMain )
+
+# define program targets:
+
+add_library( CatchMain OBJECT ${EXAMPLES_DIR}/${SOURCES_IDIOMATIC_MAIN} ${HEADER_DIR}/catch.hpp )
+
+add_executable( 020-TestCase ${EXAMPLES_DIR}/020-TestCase-1.cpp ${EXAMPLES_DIR}/020-TestCase-2.cpp ${HEADER_DIR}/catch.hpp )
+
+foreach( name ${TARGETS_SINGLE_FILE} )
+ add_executable( ${name} ${EXAMPLES_DIR}/${name}.cpp ${HEADER_DIR}/catch.hpp )
+endforeach()
+
+foreach( name ${TARGETS_IDIOMATIC_TESTS} )
+ add_executable( ${name} ${EXAMPLES_DIR}/${name}.cpp $<TARGET_OBJECTS:CatchMain> ${HEADER_DIR}/catch.hpp )
+endforeach()
+
+foreach( name ${TARGETS_ALL} )
+ target_include_directories( ${name} PRIVATE ${HEADER_DIR} )
+
+ set_property(TARGET ${name} PROPERTY CXX_STANDARD 11)
+
+ # Add desired warnings
+ if ( CMAKE_CXX_COMPILER_ID MATCHES "Clang|AppleClang|GNU" )
+ target_compile_options( ${name} PRIVATE -Wall -Wextra -Wunreachable-code )
+ endif()
+ # Clang specific warning go here
+ if ( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
+ # Actually keep these
+ target_compile_options( ${name} PRIVATE -Wweak-vtables -Wexit-time-destructors -Wglobal-constructors -Wmissing-noreturn )
+ endif()
+ if ( CMAKE_CXX_COMPILER_ID MATCHES "MSVC" )
+ target_compile_options( ${name} PRIVATE /W4 /w44265 /WX )
+ endif()
+endforeach()