diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt --- a/libcxx/CMakeLists.txt +++ b/libcxx/CMakeLists.txt @@ -57,10 +57,7 @@ by users in their own code regardless of this option." OFF) option(LIBCXX_ENABLE_SHARED "Build libc++ as a shared library." ON) option(LIBCXX_ENABLE_STATIC "Build libc++ as a static library." ON) -option(LIBCXX_ENABLE_FILESYSTEM - "Whether to include support for parts of the library that rely on a filesystem being - available on the platform. This includes things like most parts of and - others like " ON) +option(LIBCXX_ENABLE_FILESYSTEM "Build filesystem as part of the main libc++ library" ON) option(LIBCXX_INCLUDE_TESTS "Build the libc++ tests." ${LLVM_INCLUDE_TESTS}) option(LIBCXX_ENABLE_DEBUG_MODE "Whether to build libc++ with the debug mode enabled. @@ -79,6 +76,8 @@ the C locale API (e.g. embedded). When localization is not supported, several parts of the library will be disabled: , , will be completely unusable, and other parts may be only partly available." ON) +option(LIBCXX_ENABLE_FSTREAM + "Whether to include support for ." ON) option(LIBCXX_ENABLE_UNICODE "Whether to include support for Unicode in the library. Disabling Unicode can be useful when porting to platforms that don't support UTF-8 encoding (e.g. @@ -789,9 +788,10 @@ config_define_if(LIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY _LIBCPP_HAS_THREAD_LIBRARY_EXTERNAL) config_define_if(LIBCXX_HAS_MUSL_LIBC _LIBCPP_HAS_MUSL_LIBC) config_define_if(LIBCXX_NO_VCRUNTIME _LIBCPP_NO_VCRUNTIME) -config_define_if_not(LIBCXX_ENABLE_FILESYSTEM _LIBCPP_HAS_NO_FILESYSTEM) +config_define_if_not(LIBCXX_ENABLE_FILESYSTEM _LIBCPP_HAS_NO_FILESYSTEM_LIBRARY) config_define_if_not(LIBCXX_ENABLE_RANDOM_DEVICE _LIBCPP_HAS_NO_RANDOM_DEVICE) config_define_if_not(LIBCXX_ENABLE_LOCALIZATION _LIBCPP_HAS_NO_LOCALIZATION) +config_define_if_not(LIBCXX_ENABLE_FSTREAM _LIBCPP_HAS_NO_FSTREAM) config_define_if_not(LIBCXX_ENABLE_UNICODE _LIBCPP_HAS_NO_UNICODE) config_define_if_not(LIBCXX_ENABLE_WIDE_CHARACTERS _LIBCPP_HAS_NO_WIDE_CHARACTERS) config_define_if_not(LIBCXX_ENABLE_VENDOR_AVAILABILITY_ANNOTATIONS _LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS) diff --git a/libcxx/cmake/caches/Generic-no-fstream.cmake b/libcxx/cmake/caches/Generic-no-fstream.cmake new file mode 100644 --- /dev/null +++ b/libcxx/cmake/caches/Generic-no-fstream.cmake @@ -0,0 +1 @@ +set(LIBCXX_ENABLE_FSTREAM OFF CACHE BOOL "") diff --git a/libcxx/docs/ReleaseNotes.rst b/libcxx/docs/ReleaseNotes.rst --- a/libcxx/docs/ReleaseNotes.rst +++ b/libcxx/docs/ReleaseNotes.rst @@ -157,14 +157,6 @@ This is relevant for vendors building the libc++ shared library and for folks statically linking libc++ into an application that has back-deployment requirements on Apple platforms. -- ``LIBCXX_ENABLE_FILESYSTEM`` now represents whether a filesystem is supported on the platform instead - of representing merely whether ```` should be provided. This means that vendors building - with ``LIBCXX_ENABLE_FILESYSTEM=OFF`` will now also get ```` excluded from their configuration - of the library. - -- ``LIBCXX_ENABLE_FSTREAM`` is not supported anymore, please use ``LIBCXX_ENABLE_FILESYSTEM=OFF`` if your - platform does not have support for a filesystem. - - The lit test parameter ``enable_modules`` changed from a Boolean to an enum. The changes are - ``False`` became ``none``. This option does not test with modules enabled. diff --git a/libcxx/include/CMakeLists.txt b/libcxx/include/CMakeLists.txt --- a/libcxx/include/CMakeLists.txt +++ b/libcxx/include/CMakeLists.txt @@ -998,7 +998,7 @@ wctype.h ) -foreach(feature LIBCXX_ENABLE_FILESYSTEM LIBCXX_ENABLE_LOCALIZATION LIBCXX_ENABLE_THREADS LIBCXX_ENABLE_WIDE_CHARACTERS) +foreach(feature LIBCXX_ENABLE_FILESYSTEM LIBCXX_ENABLE_LOCALIZATION LIBCXX_ENABLE_FSTREAM LIBCXX_ENABLE_THREADS LIBCXX_ENABLE_WIDE_CHARACTERS) if (NOT ${${feature}}) set(requires_${feature} "requires LIBCXX_CONFIGURED_WITHOUT_SUPPORT_FOR_THIS_HEADER") endif() diff --git a/libcxx/include/__config_site.in b/libcxx/include/__config_site.in --- a/libcxx/include/__config_site.in +++ b/libcxx/include/__config_site.in @@ -24,9 +24,10 @@ #cmakedefine _LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS #cmakedefine _LIBCPP_NO_VCRUNTIME #cmakedefine _LIBCPP_TYPEINFO_COMPARISON_IMPLEMENTATION @_LIBCPP_TYPEINFO_COMPARISON_IMPLEMENTATION@ -#cmakedefine _LIBCPP_HAS_NO_FILESYSTEM +#cmakedefine _LIBCPP_HAS_NO_FILESYSTEM_LIBRARY #cmakedefine _LIBCPP_HAS_NO_RANDOM_DEVICE #cmakedefine _LIBCPP_HAS_NO_LOCALIZATION +#cmakedefine _LIBCPP_HAS_NO_FSTREAM #cmakedefine _LIBCPP_HAS_NO_WIDE_CHARACTERS #cmakedefine01 _LIBCPP_ENABLE_ASSERTIONS_DEFAULT #cmakedefine _LIBCPP_ENABLE_DEBUG_MODE diff --git a/libcxx/include/filesystem b/libcxx/include/filesystem --- a/libcxx/include/filesystem +++ b/libcxx/include/filesystem @@ -481,7 +481,7 @@ // [fs.filesystem.syn] #include -#if defined(_LIBCPP_HAS_NO_FILESYSTEM) +#if defined(_LIBCPP_HAS_NO_FILESYSTEM_LIBRARY) # error "The library is not supported since libc++ has been configured without support for a filesystem." #endif diff --git a/libcxx/include/fstream b/libcxx/include/fstream --- a/libcxx/include/fstream +++ b/libcxx/include/fstream @@ -194,7 +194,7 @@ #include #include -#if !defined(_LIBCPP_HAS_NO_FILESYSTEM) +#if !defined(_LIBCPP_HAS_NO_FILESYSTEM_LIBRARY) # include #endif @@ -209,7 +209,7 @@ # define _LIBCPP_HAS_NO_OFF_T_FUNCTIONS #endif -#if !defined(_LIBCPP_HAS_NO_FILESYSTEM) +#if !defined(_LIBCPP_HAS_NO_FSTREAM) _LIBCPP_BEGIN_NAMESPACE_STD @@ -245,7 +245,7 @@ _LIBCPP_INLINE_VISIBILITY basic_filebuf* open(const string& __s, ios_base::openmode __mode); -#if _LIBCPP_STD_VER >= 17 +#if _LIBCPP_STD_VER >= 17 && !defined(_LIBCPP_HAS_NO_FILESYSTEM_LIBRARY) _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY _LIBCPP_INLINE_VISIBILITY basic_filebuf* open(const _VSTD_FS::path& __p, ios_base::openmode __mode) { return open(__p.c_str(), __mode); @@ -1168,7 +1168,7 @@ #endif _LIBCPP_INLINE_VISIBILITY explicit basic_ifstream(const string& __s, ios_base::openmode __mode = ios_base::in); -#if _LIBCPP_STD_VER >= 17 +#if _LIBCPP_STD_VER >= 17 && !defined(_LIBCPP_HAS_NO_FILESYSTEM_LIBRARY) _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY _LIBCPP_INLINE_VISIBILITY explicit basic_ifstream(const filesystem::path& __p, ios_base::openmode __mode = ios_base::in) : basic_ifstream(__p.c_str(), __mode) {} @@ -1189,7 +1189,7 @@ void open(const wchar_t* __s, ios_base::openmode __mode = ios_base::in); #endif void open(const string& __s, ios_base::openmode __mode = ios_base::in); -#if _LIBCPP_STD_VER >= 17 +#if _LIBCPP_STD_VER >= 17 && !defined(_LIBCPP_HAS_NO_FILESYSTEM_LIBRARY) _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY _LIBCPP_INLINE_VISIBILITY void open(const filesystem::path& __p, ios_base::openmode __mode = ios_base::in) { @@ -1369,7 +1369,7 @@ _LIBCPP_INLINE_VISIBILITY explicit basic_ofstream(const string& __s, ios_base::openmode __mode = ios_base::out); -#if _LIBCPP_STD_VER >= 17 +#if _LIBCPP_STD_VER >= 17 && !defined(_LIBCPP_HAS_NO_FILESYSTEM_LIBRARY) _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY _LIBCPP_INLINE_VISIBILITY explicit basic_ofstream(const filesystem::path& __p, ios_base::openmode __mode = ios_base::out) : basic_ofstream(__p.c_str(), __mode) {} @@ -1392,7 +1392,7 @@ #endif void open(const string& __s, ios_base::openmode __mode = ios_base::out); -#if _LIBCPP_STD_VER >= 17 +#if _LIBCPP_STD_VER >= 17 && !defined(_LIBCPP_HAS_NO_FILESYSTEM_LIBRARY) _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY _LIBCPP_INLINE_VISIBILITY void open(const filesystem::path& __p, ios_base::openmode __mode = ios_base::out) { return open(__p.c_str(), __mode); } @@ -1570,7 +1570,7 @@ _LIBCPP_INLINE_VISIBILITY explicit basic_fstream(const string& __s, ios_base::openmode __mode = ios_base::in | ios_base::out); -#if _LIBCPP_STD_VER >= 17 +#if _LIBCPP_STD_VER >= 17 && !defined(_LIBCPP_HAS_NO_FILESYSTEM_LIBRARY) _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY _LIBCPP_INLINE_VISIBILITY explicit basic_fstream(const filesystem::path& __p, ios_base::openmode __mode = ios_base::in | ios_base::out) : basic_fstream(__p.c_str(), __mode) {} @@ -1595,7 +1595,7 @@ #endif _LIBCPP_HIDE_FROM_ABI void open(const string& __s, ios_base::openmode __mode = ios_base::in | ios_base::out); -#if _LIBCPP_STD_VER >= 17 +#if _LIBCPP_STD_VER >= 17 && !defined(_LIBCPP_HAS_NO_FILESYSTEM_LIBRARY) _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY _LIBCPP_INLINE_VISIBILITY void open(const filesystem::path& __p, ios_base::openmode __mode = ios_base::in|ios_base::out) { return open(__p.c_str(), __mode); } @@ -1745,7 +1745,7 @@ _LIBCPP_END_NAMESPACE_STD -#endif // _LIBCPP_HAS_NO_FILESYSTEM +#endif // _LIBCPP_HAS_NO_FSTREAM _LIBCPP_POP_MACROS diff --git a/libcxx/include/module.modulemap.in b/libcxx/include/module.modulemap.in --- a/libcxx/include/module.modulemap.in +++ b/libcxx/include/module.modulemap.in @@ -976,7 +976,7 @@ } module fstream { @requires_LIBCXX_ENABLE_LOCALIZATION@ - @requires_LIBCXX_ENABLE_FILESYSTEM@ + @requires_LIBCXX_ENABLE_FSTREAM@ header "fstream" export * } diff --git a/libcxx/src/ios.instantiations.cpp b/libcxx/src/ios.instantiations.cpp --- a/libcxx/src/ios.instantiations.cpp +++ b/libcxx/src/ios.instantiations.cpp @@ -37,7 +37,7 @@ template class _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS basic_ostringstream; template class _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS basic_istringstream; -#ifndef _LIBCPP_HAS_NO_FILESYSTEM +#ifndef _LIBCPP_HAS_NO_FSTREAM template class _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS basic_ifstream; template class _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS basic_ofstream; template class _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS basic_filebuf; diff --git a/libcxx/test/libcxx/iterators/iterator.requirements/iterator.assoc.types/iterator.traits/legacy_bidirectional_iterator.compile.pass.cpp b/libcxx/test/libcxx/iterators/iterator.requirements/iterator.assoc.types/iterator.traits/legacy_bidirectional_iterator.compile.pass.cpp --- a/libcxx/test/libcxx/iterators/iterator.requirements/iterator.assoc.types/iterator.traits/legacy_bidirectional_iterator.compile.pass.cpp +++ b/libcxx/test/libcxx/iterators/iterator.requirements/iterator.assoc.types/iterator.traits/legacy_bidirectional_iterator.compile.pass.cpp @@ -20,7 +20,7 @@ #include #include -#ifndef TEST_HAS_NO_FILESYSTEM +#ifndef TEST_HAS_NO_FILESYSTEM_LIBRARY #include #endif #include @@ -61,7 +61,7 @@ static_assert(std::__iterator_traits_detail::__cpp17_bidirectional_iterator::const_reverse_iterator>); // -#ifndef TEST_HAS_NO_FILESYSTEM +#ifndef TEST_HAS_NO_FILESYSTEM_LIBRARY static_assert(!std::__iterator_traits_detail::__cpp17_bidirectional_iterator); static_assert(!std::__iterator_traits_detail::__cpp17_bidirectional_iterator); #endif diff --git a/libcxx/test/libcxx/iterators/iterator.requirements/iterator.assoc.types/iterator.traits/legacy_forward_iterator.compile.pass.cpp b/libcxx/test/libcxx/iterators/iterator.requirements/iterator.assoc.types/iterator.traits/legacy_forward_iterator.compile.pass.cpp --- a/libcxx/test/libcxx/iterators/iterator.requirements/iterator.assoc.types/iterator.traits/legacy_forward_iterator.compile.pass.cpp +++ b/libcxx/test/libcxx/iterators/iterator.requirements/iterator.assoc.types/iterator.traits/legacy_forward_iterator.compile.pass.cpp @@ -20,7 +20,7 @@ #include #include -#ifndef TEST_HAS_NO_FILESYSTEM +#ifndef TEST_HAS_NO_FILESYSTEM_LIBRARY #include #endif #include @@ -61,7 +61,7 @@ static_assert(std::__iterator_traits_detail::__cpp17_forward_iterator::const_reverse_iterator>); // -#ifndef TEST_HAS_NO_FILESYSTEM +#ifndef TEST_HAS_NO_FILESYSTEM_LIBRARY static_assert(!std::__iterator_traits_detail::__cpp17_forward_iterator); static_assert(!std::__iterator_traits_detail::__cpp17_forward_iterator); #endif diff --git a/libcxx/test/libcxx/iterators/iterator.requirements/iterator.assoc.types/iterator.traits/legacy_input_iterator.compile.pass.cpp b/libcxx/test/libcxx/iterators/iterator.requirements/iterator.assoc.types/iterator.traits/legacy_input_iterator.compile.pass.cpp --- a/libcxx/test/libcxx/iterators/iterator.requirements/iterator.assoc.types/iterator.traits/legacy_input_iterator.compile.pass.cpp +++ b/libcxx/test/libcxx/iterators/iterator.requirements/iterator.assoc.types/iterator.traits/legacy_input_iterator.compile.pass.cpp @@ -20,7 +20,7 @@ #include #include -#ifndef TEST_HAS_NO_FILESYSTEM +#ifndef TEST_HAS_NO_FILESYSTEM_LIBRARY #include #endif #include @@ -61,7 +61,7 @@ static_assert(std::__iterator_traits_detail::__cpp17_input_iterator::const_reverse_iterator>); // -#ifndef TEST_HAS_NO_FILESYSTEM +#ifndef TEST_HAS_NO_FILESYSTEM_LIBRARY static_assert(std::__iterator_traits_detail::__cpp17_input_iterator); static_assert(std::__iterator_traits_detail::__cpp17_input_iterator); #endif diff --git a/libcxx/test/libcxx/iterators/iterator.requirements/iterator.assoc.types/iterator.traits/legacy_iterator.compile.pass.cpp b/libcxx/test/libcxx/iterators/iterator.requirements/iterator.assoc.types/iterator.traits/legacy_iterator.compile.pass.cpp --- a/libcxx/test/libcxx/iterators/iterator.requirements/iterator.assoc.types/iterator.traits/legacy_iterator.compile.pass.cpp +++ b/libcxx/test/libcxx/iterators/iterator.requirements/iterator.assoc.types/iterator.traits/legacy_iterator.compile.pass.cpp @@ -20,7 +20,7 @@ #include #include -#ifndef TEST_HAS_NO_FILESYSTEM +#ifndef TEST_HAS_NO_FILESYSTEM_LIBRARY #include #endif #include @@ -61,7 +61,7 @@ static_assert(std::__iterator_traits_detail::__cpp17_iterator::const_reverse_iterator>); // -#ifndef TEST_HAS_NO_FILESYSTEM +#ifndef TEST_HAS_NO_FILESYSTEM_LIBRARY static_assert(std::__iterator_traits_detail::__cpp17_iterator); static_assert(std::__iterator_traits_detail::__cpp17_iterator); #endif diff --git a/libcxx/test/libcxx/iterators/iterator.requirements/iterator.assoc.types/iterator.traits/legacy_random_access_iterator.compile.pass.cpp b/libcxx/test/libcxx/iterators/iterator.requirements/iterator.assoc.types/iterator.traits/legacy_random_access_iterator.compile.pass.cpp --- a/libcxx/test/libcxx/iterators/iterator.requirements/iterator.assoc.types/iterator.traits/legacy_random_access_iterator.compile.pass.cpp +++ b/libcxx/test/libcxx/iterators/iterator.requirements/iterator.assoc.types/iterator.traits/legacy_random_access_iterator.compile.pass.cpp @@ -20,7 +20,7 @@ #include #include -#ifndef TEST_HAS_NO_FILESYSTEM +#ifndef TEST_HAS_NO_FILESYSTEM_LIBRARY #include #endif #include @@ -61,7 +61,7 @@ static_assert(std::__iterator_traits_detail::__cpp17_random_access_iterator::const_reverse_iterator>); // -#ifndef TEST_HAS_NO_FILESYSTEM +#ifndef TEST_HAS_NO_FILESYSTEM_LIBRARY static_assert(!std::__iterator_traits_detail::__cpp17_random_access_iterator); static_assert(!std::__iterator_traits_detail::__cpp17_random_access_iterator); #endif diff --git a/libcxx/test/std/input.output/file.streams/lit.local.cfg b/libcxx/test/std/input.output/file.streams/lit.local.cfg --- a/libcxx/test/std/input.output/file.streams/lit.local.cfg +++ b/libcxx/test/std/input.output/file.streams/lit.local.cfg @@ -2,5 +2,5 @@ if "no-localization" in config.available_features: config.unsupported = True -if "no-filesystem" in config.available_features: +if "no-fstream" in config.available_features: config.unsupported = True diff --git a/libcxx/test/std/input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.put/xsputn.PR14074.pass.cpp b/libcxx/test/std/input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.put/xsputn.PR14074.pass.cpp --- a/libcxx/test/std/input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.put/xsputn.PR14074.pass.cpp +++ b/libcxx/test/std/input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.put/xsputn.PR14074.pass.cpp @@ -17,7 +17,7 @@ // basic_streambuf, but I can't seem to reproduce without going through one // of its derived classes. -// UNSUPPORTED: no-filesystem +// UNSUPPORTED: no-fstream #include #include diff --git a/libcxx/test/std/iterators/iterator.primitives/iterator.traits/cxx20_iterator_traits.compile.pass.cpp b/libcxx/test/std/iterators/iterator.primitives/iterator.traits/cxx20_iterator_traits.compile.pass.cpp --- a/libcxx/test/std/iterators/iterator.primitives/iterator.traits/cxx20_iterator_traits.compile.pass.cpp +++ b/libcxx/test/std/iterators/iterator.primitives/iterator.traits/cxx20_iterator_traits.compile.pass.cpp @@ -40,7 +40,7 @@ # include #endif -#ifndef TEST_HAS_NO_FILESYSTEM +#ifndef TEST_HAS_NO_FILESYSTEM_LIBRARY # include #endif @@ -156,7 +156,7 @@ static_assert(testConst()); #endif // !TEST_HAS_NO_LOCALIZATION -#ifndef TEST_HAS_NO_FILESYSTEM +#ifndef TEST_HAS_NO_FILESYSTEM_LIBRARY static_assert(test()); static_assert(test in this test. -// XFAIL: no-filesystem +// XFAIL: no-fstream #include #include diff --git a/libcxx/test/std/utilities/format/format.formattable/concept.formattable.compile.pass.cpp b/libcxx/test/std/utilities/format/format.formattable/concept.formattable.compile.pass.cpp --- a/libcxx/test/std/utilities/format/format.formattable/concept.formattable.compile.pass.cpp +++ b/libcxx/test/std/utilities/format/format.formattable/concept.formattable.compile.pass.cpp @@ -42,7 +42,7 @@ #include "test_macros.h" #include "min_allocator.h" -#ifndef TEST_HAS_NO_FILESYSTEM +#ifndef TEST_HAS_NO_FILESYSTEM_LIBRARY # include #endif #ifndef TEST_HAS_NO_LOCALIZATION @@ -182,7 +182,7 @@ assert_is_not_formattable, CharT>(); assert_is_not_formattable, CharT>(); assert_is_not_formattable(); -#ifndef TEST_HAS_NO_FILESYSTEM +#ifndef TEST_HAS_NO_FILESYSTEM_LIBRARY assert_is_not_formattable(); #endif assert_is_not_formattable, CharT>(); diff --git a/libcxx/test/std/utilities/format/format.range/format.range.fmtkind/format_kind.compile.pass.cpp b/libcxx/test/std/utilities/format/format.range/format.range.fmtkind/format_kind.compile.pass.cpp --- a/libcxx/test/std/utilities/format/format.range/format.range.fmtkind/format_kind.compile.pass.cpp +++ b/libcxx/test/std/utilities/format/format.range/format.range.fmtkind/format_kind.compile.pass.cpp @@ -35,7 +35,7 @@ #include "test_macros.h" -#ifndef TEST_HAS_NO_FILESYSTEM +#ifndef TEST_HAS_NO_FILESYSTEM_LIBRARY # include #endif @@ -67,7 +67,7 @@ static_assert(std::ranges::input_range, "format_kind requires an input range"); static_assert(std::format_kind == std::range_format::disabled); -#ifndef TEST_HAS_NO_FILESYSTEM +#ifndef TEST_HAS_NO_FILESYSTEM_LIBRARY static_assert(std::format_kind == std::range_format::disabled); #endif diff --git a/libcxx/test/support/test_macros.h b/libcxx/test/support/test_macros.h --- a/libcxx/test/support/test_macros.h +++ b/libcxx/test/support/test_macros.h @@ -386,8 +386,12 @@ # define TEST_HAS_NO_THREADS #endif -#if defined(_LIBCPP_HAS_NO_FILESYSTEM) -# define TEST_HAS_NO_FILESYSTEM +#if defined(_LIBCPP_HAS_NO_FILESYSTEM_LIBRARY) +# define TEST_HAS_NO_FILESYSTEM_LIBRARY +#endif + +#if defined(_LIBCPP_HAS_NO_FSTREAM) +# define TEST_HAS_NO_FSTREAM #endif #if defined(_LIBCPP_HAS_NO_FGETPOS_FSETPOS) diff --git a/libcxx/utils/ci/buildkite-pipeline.yml b/libcxx/utils/ci/buildkite-pipeline.yml --- a/libcxx/utils/ci/buildkite-pipeline.yml +++ b/libcxx/utils/ci/buildkite-pipeline.yml @@ -596,6 +596,24 @@ limit: 2 timeout_in_minutes: 120 + - label: "No fstream" + command: "libcxx/utils/ci/run-buildbot generic-no-fstream" + artifact_paths: + - "**/test-results.xml" + - "**/*.abilist" + env: + CC: "clang-${LLVM_HEAD_VERSION}" + CXX: "clang++-${LLVM_HEAD_VERSION}" + ENABLE_CLANG_TIDY: "On" + agents: + queue: "libcxx-builders" + os: "linux" + retry: + automatic: + - exit_status: -1 # Agent was lost + limit: 2 + timeout_in_minutes: 120 + - label: "No locale" command: "libcxx/utils/ci/run-buildbot generic-no-localization" artifact_paths: diff --git a/libcxx/utils/ci/run-buildbot b/libcxx/utils/ci/run-buildbot --- a/libcxx/utils/ci/run-buildbot +++ b/libcxx/utils/ci/run-buildbot @@ -437,6 +437,11 @@ generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-random_device.cmake" check-runtimes ;; +generic-no-fstream) + clean + generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-fstream.cmake" + check-runtimes +;; generic-no-localization) clean generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-localization.cmake" diff --git a/libcxx/utils/libcxx/test/features.py b/libcxx/utils/libcxx/test/features.py --- a/libcxx/utils/libcxx/test/features.py +++ b/libcxx/utils/libcxx/test/features.py @@ -302,9 +302,10 @@ "_LIBCPP_HAS_THREAD_API_PTHREAD": "libcpp-has-thread-api-pthread", "_LIBCPP_NO_VCRUNTIME": "libcpp-no-vcruntime", "_LIBCPP_ABI_VERSION": "libcpp-abi-version", - "_LIBCPP_HAS_NO_FILESYSTEM": "no-filesystem", + "_LIBCPP_HAS_NO_FILESYSTEM_LIBRARY": "no-filesystem", "_LIBCPP_HAS_NO_RANDOM_DEVICE": "no-random-device", "_LIBCPP_HAS_NO_LOCALIZATION": "no-localization", + "_LIBCPP_HAS_NO_FSTREAM": "no-fstream", "_LIBCPP_HAS_NO_WIDE_CHARACTERS": "no-wide-characters", "_LIBCPP_HAS_NO_UNICODE": "libcpp-has-no-unicode", "_LIBCPP_ENABLE_DEBUG_MODE": "libcpp-has-debug-mode", diff --git a/libcxx/utils/libcxx/test/header_information.py b/libcxx/utils/libcxx/test/header_information.py --- a/libcxx/utils/libcxx/test/header_information.py +++ b/libcxx/utils/libcxx/test/header_information.py @@ -35,7 +35,7 @@ "experimental/utility": "// UNSUPPORTED: c++03", "experimental/vector": "// UNSUPPORTED: c++03", "filesystem": "// UNSUPPORTED: no-filesystem, c++03, c++11, c++14", - "fstream": "// UNSUPPORTED: no-localization, no-filesystem", + "fstream": "// UNSUPPORTED: no-localization, no-fstream", "future": "// UNSUPPORTED: no-threads, c++03", "iomanip": "// UNSUPPORTED: no-localization", "ios": "// UNSUPPORTED: no-localization",