Index: CMakeLists.txt =================================================================== --- CMakeLists.txt +++ CMakeLists.txt @@ -41,6 +41,9 @@ option(LIBCXX_ENABLE_PEDANTIC "Compile with pedantic enabled." ON) option(LIBCXX_ENABLE_WERROR "Fail and stop if a warning is triggered." OFF) option(LIBCXX_ENABLE_CXX0X "Enable -std=c++0x and use of c++0x language features if the compiler supports it." ON) +option(LIBCXX_ENABLE_CXX11 "Enable -std=c++11 and use of c++11 language features if the compiler supports it." ON) +option(LIBCXX_ENABLE_CXX1Y "Enable -std=c++1y and use of c++1y language features if the compiler supports it." ON) +option(LIBCXX_ENABLE_CXX1Z "Enable -std=c++1z and use of c++1z language features if the compiler supports it." OFF) option(LIBCXX_ENABLE_SHARED "Build libc++ as a shared library." ON) option(LIBCXX_INSTALL_SUPPORT_HEADERS "Install libc++ support headers." ON) @@ -178,8 +181,19 @@ list(APPEND LIBCXX_CXX_REQUIRED_FLAGS -nostdinc++) string(REPLACE "-stdlib=libc++" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") endif() - if (LIBCXX_ENABLE_CXX0X AND LIBCXX_HAS_STDCXX0X_FLAG) - list(APPEND LIBCXX_CXX_REQUIRED_FLAGS -std=c++0x) + if (LIBCXX_ENABLE_CXX1Z AND LIBCXX_HAS_STDCXX1Z_FLAG) + set(LIBCXX_STD_VERSION c++1z) + elseif(LIBCXX_ENABLE_CXX1Y AND LIBCXX_HAS_STDCXX1Y_FLAG) + set(LIBCXX_STD_VERSION c++1y) + elseif(LIBCXX_ENABLE_CXX11 AND LIBCXX_HAS_STDCXX11_FLAG) + set(LIBCXX_STD_VERSION c++11) + elseif (LIBCXX_ENABLE_CXX0X AND LIBCXX_HAS_STDCXX0X_FLAG) + set(LIBCXX_STD_VERSION c++0x) + endif() + if (DEFINED LIBCXX_STD_VERSION) + list(APPEND LIBCXX_CXX_REQUIRED_FLAGS -std=${LIBCXX_STD_VERSION}) + else() + message(FATAL_ERROR "libc++ requires a standard version >= c++0x") endif() endif() Index: cmake/config-ix.cmake =================================================================== --- cmake/config-ix.cmake +++ cmake/config-ix.cmake @@ -3,6 +3,9 @@ # Check compiler flags check_cxx_compiler_flag(-std=c++0x LIBCXX_HAS_STDCXX0X_FLAG) +check_cxx_compiler_flag(-std=c++11 LIBCXX_HAS_STDCXX11_FLAG) +check_cxx_compiler_flag(-std=c++1y LIBCXX_HAS_STDCXX1Y_FLAG) +check_cxx_compiler_flag(-std=c++1z LIBCXX_HAS_STDCXX1Z_FLAG) check_cxx_compiler_flag(-fPIC LIBCXX_HAS_FPIC_FLAG) check_cxx_compiler_flag(-nodefaultlibs LIBCXX_HAS_NODEFAULTLIBS_FLAG) check_cxx_compiler_flag(-nostdinc++ LIBCXX_HAS_NOSTDINCXX_FLAG) Index: test/CMakeLists.txt =================================================================== --- test/CMakeLists.txt +++ test/CMakeLists.txt @@ -28,7 +28,6 @@ set(LIBCXX_BINARY_DIR ${CMAKE_BINARY_DIR}) set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE}) pythonize_bool(LIBCXX_ENABLE_SHARED) - pythonize_bool(LIBCXX_HAS_STDCXX0X_FLAG) set(AUTO_GEN_COMMENT "## Autogenerated by libcxx configuration.\n# Do not edit!") Index: test/lit.cfg =================================================================== --- test/lit.cfg +++ test/lit.cfg @@ -202,17 +202,33 @@ if libcxx_obj_root is None: libcxx_obj_root = libcxx_src_root -cxx_has_stdcxx0x_flag_str = lit_config.params.get('cxx_has_stdcxx0x_flag', None) -if cxx_has_stdcxx0x_flag_str is not None: - if cxx_has_stdcxx0x_flag_str.lower() in ('1', 'true'): - cxx_has_stdcxx0x_flag = True - elif cxx_has_stdcxx0x_flag_str.lower() in ('', '0', 'false'): - cxx_has_stdcxx0x_flag = False - else: - lit_config.fatal( - 'user parameter cxx_has_stdcxx0x_flag_str should be 0 or 1') -else: - cxx_has_stdcxx0x_flag = getattr(config, 'cxx_has_stdcxx0x_flag', True) +cxx_std_flag = None + +# Allow --param std= to be passed to the lit invokation to specify the +# the standard version to be specified. +std_version = lit_config.params.get('std', None) +if std_version != None: + cxx_std_flag = '-std=' + std_version + +# Read the default_std_flag from either the global config or the lit.site.cfg +default_std_version = lit_config.params.get('default_std_version', None) +if default_std_version is None: + default_std_version = getattr(config, 'default_std_version', None) + +# If cxx_std_flag has not been set and we have a non-empty default version +# set that as the standard flag. +if cxx_std_flag is None and default_std_version: + cxx_std_flag = '-std=' + default_std_version + +# Configure extra compiler flags. +include_paths = ['-I' + libcxx_src_root + '/include', + '-I' + libcxx_src_root + '/test/support'] +library_paths = ['-L' + libcxx_obj_root + '/lib'] +compile_flags = [] +if cxx_std_flag: + compile_flags += [cxx_std_flag] + lit_config.note("using std_flags as: %s" % (cxx_std_flag,)) + # This test suite supports testing against either the system library or the # locally built one; the former mode is useful for testing ABI compatibility @@ -259,13 +275,6 @@ if not link_flags_str is None: link_flags += shlex.split(link_flags_str) -# Configure extra compiler flags. -include_paths = ['-I' + libcxx_src_root + '/include', - '-I' + libcxx_src_root + '/test/support'] -library_paths = ['-L' + libcxx_obj_root + '/lib'] -compile_flags = [] -if cxx_has_stdcxx0x_flag: - compile_flags += ['-std=c++0x'] # Configure extra linker parameters. exec_env = {} Index: test/lit.site.cfg.in =================================================================== --- test/lit.site.cfg.in +++ test/lit.site.cfg.in @@ -1,6 +1,6 @@ @AUTO_GEN_COMMENT@ config.cxx_under_test = "@LIBCXX_COMPILER@" -config.cxx_has_stdcxx0x_flag = @LIBCXX_HAS_STDCXX0X_FLAG@ +config.default_std_version = "@LIBCXX_STD_VERSION@" config.libcxx_src_root = "@LIBCXX_SOURCE_DIR@" config.libcxx_obj_root = "@LIBCXX_BINARY_DIR@" config.python_executable = "@PYTHON_EXECUTABLE@"