# Copyright 2019 Mike Dev
+# Copyright 2020 Andrey Semashev
+#
# Distributed under the Boost Software License, Version 1.0.
# See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt
#
# NOTE: CMake support for Boost.Filesystem is currently experimental at best
# and the interface is likely to change in the future
-cmake_minimum_required( VERSION 3.5 )
-project( BoostFilesystem )
+cmake_minimum_required(VERSION 3.5)
+project(BoostFilesystem VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
+
+include(CheckCXXSourceCompiles)
-add_library( boost_filesystem
+check_cxx_source_compiles("#include <${CMAKE_CURRENT_SOURCE_DIR}/config/has_stat_st_mtim.cpp>" BOOST_FILESYSTEM_HAS_STAT_ST_MTIM)
+check_cxx_source_compiles("#include <${CMAKE_CURRENT_SOURCE_DIR}/config/has_stat_st_mtimensec.cpp>" BOOST_FILESYSTEM_HAS_STAT_ST_MTIMENSEC)
+check_cxx_source_compiles("#include <${CMAKE_CURRENT_SOURCE_DIR}/config/has_stat_st_mtimespec.cpp>" BOOST_FILESYSTEM_HAS_STAT_ST_MTIMESPEC)
+if(WIN32)
+ # Note: We can't use the Boost::library targets here as they may not yet be included by the superproject when this CMakeLists.txt is included.
+ set(CMAKE_REQUIRED_INCLUDES "${CMAKE_CURRENT_SOURCE_DIR}/../..")
+ set(CMAKE_REQUIRED_LIBRARIES bcrypt)
+ check_cxx_source_compiles("#include <${CMAKE_CURRENT_SOURCE_DIR}/config/has_bcrypt.cpp>" BOOST_FILESYSTEM_HAS_BCRYPT)
+ unset(CMAKE_REQUIRED_LIBRARIES)
+ unset(CMAKE_REQUIRED_INCLUDES)
+endif()
+
+add_library(boost_filesystem
src/codecvt_error_category.cpp
src/exception.cpp
src/operations.cpp
src/windows_file_codecvt.cpp
)
-add_library( Boost::filesystem ALIAS boost_filesystem )
+add_library(Boost::filesystem ALIAS boost_filesystem)
-target_include_directories( boost_filesystem PUBLIC include )
+target_include_directories(boost_filesystem PUBLIC include)
+target_include_directories(boost_filesystem PRIVATE src)
-target_compile_definitions( boost_filesystem
+target_compile_definitions(boost_filesystem
PUBLIC
# NOTE:
# We deactivate autolinking, because cmake based builds don't need it
BOOST_FILESYSTEM_SOURCE
)
-target_link_libraries( boost_filesystem
+if(BOOST_FILESYSTEM_HAS_STAT_ST_MTIM)
+ target_compile_definitions(boost_filesystem PRIVATE BOOST_FILESYSTEM_HAS_STAT_ST_MTIM)
+endif()
+if(BOOST_FILESYSTEM_HAS_STAT_ST_MTIMENSEC)
+ target_compile_definitions(boost_filesystem PRIVATE BOOST_FILESYSTEM_HAS_STAT_ST_MTIMENSEC)
+endif()
+if(BOOST_FILESYSTEM_HAS_STAT_ST_MTIMESPEC)
+ target_compile_definitions(boost_filesystem PRIVATE BOOST_FILESYSTEM_HAS_STAT_ST_MTIMESPEC)
+endif()
+
+target_link_libraries(boost_filesystem
PUBLIC
Boost::assert
Boost::config
Boost::smart_ptr
Boost::system
Boost::type_traits
-)
-target_link_libraries( boost_filesystem
PRIVATE
- Boost::winapi
+ Boost::predef
)
+
+if(WIN32)
+ if(BOOST_FILESYSTEM_HAS_BCRYPT)
+ target_compile_definitions(boost_filesystem PRIVATE BOOST_FILESYSTEM_HAS_BCRYPT)
+ target_link_libraries(boost_filesystem PRIVATE bcrypt)
+ else()
+ target_compile_definitions(boost_filesystem PRIVATE BOOST_FILESYSTEM_HAS_WINCRYPT)
+ if(NOT WINCE)
+ target_link_libraries(boost_filesystem PRIVATE advapi32)
+ else()
+ target_link_libraries(boost_filesystem PRIVATE coredll)
+ endif()
+ endif()
+
+ target_link_libraries(boost_filesystem
+ PRIVATE
+ Boost::winapi
+ )
+endif()