diff --git a/cmake/draco_install.cmake b/cmake/draco_install.cmake index 3be1ba1..b9dda26 100644 --- a/cmake/draco_install.cmake +++ b/cmake/draco_install.cmake @@ -23,99 +23,101 @@ include(GNUInstallDirs) # Sets up the draco install targets. Must be called after the static library # target is created. macro(draco_setup_install_target) - set(bin_path "${CMAKE_INSTALL_BINDIR}") - set(data_path "${CMAKE_INSTALL_DATAROOTDIR}") - set(includes_path "${CMAKE_INSTALL_INCLUDEDIR}") - set(libs_path "${CMAKE_INSTALL_LIBDIR}") + if(DRACO_INSTALL) + set(bin_path "${CMAKE_INSTALL_BINDIR}") + set(data_path "${CMAKE_INSTALL_DATAROOTDIR}") + set(includes_path "${CMAKE_INSTALL_INCLUDEDIR}") + set(libs_path "${CMAKE_INSTALL_LIBDIR}") - foreach(file ${draco_sources}) - if(file MATCHES "h$") - list(APPEND draco_api_includes ${file}) + foreach(file ${draco_sources}) + if(file MATCHES "h$") + list(APPEND draco_api_includes ${file}) + endif() + endforeach() + + list(REMOVE_DUPLICATES draco_api_includes) + + # Strip $draco_src_root from the file paths: we need to install relative to + # $include_directory. + list(TRANSFORM draco_api_includes REPLACE "${draco_src_root}/" "") + + foreach(draco_api_include ${draco_api_includes}) + get_filename_component(file_directory ${draco_api_include} DIRECTORY) + set(target_directory "${includes_path}/draco/${file_directory}") + install(FILES ${draco_src_root}/${draco_api_include} + DESTINATION "${target_directory}") + endforeach() + + install(FILES "${draco_build}/draco/draco_features.h" + DESTINATION "${includes_path}/draco/") + + install(TARGETS draco_decoder DESTINATION "${bin_path}") + install(TARGETS draco_encoder DESTINATION "${bin_path}") + + if(DRACO_TRANSCODER_SUPPORTED) + install(TARGETS draco_transcoder DESTINATION "${bin_path}") endif() - endforeach() - list(REMOVE_DUPLICATES draco_api_includes) - - # Strip $draco_src_root from the file paths: we need to install relative to - # $include_directory. - list(TRANSFORM draco_api_includes REPLACE "${draco_src_root}/" "") - - foreach(draco_api_include ${draco_api_includes}) - get_filename_component(file_directory ${draco_api_include} DIRECTORY) - set(target_directory "${includes_path}/draco/${file_directory}") - install(FILES ${draco_src_root}/${draco_api_include} - DESTINATION "${target_directory}") - endforeach() - - install(FILES "${draco_build}/draco/draco_features.h" - DESTINATION "${includes_path}/draco/") - - install(TARGETS draco_decoder DESTINATION "${bin_path}") - install(TARGETS draco_encoder DESTINATION "${bin_path}") - - if(DRACO_TRANSCODER_SUPPORTED) - install(TARGETS draco_transcoder DESTINATION "${bin_path}") - endif() - - if(MSVC) - install( - TARGETS draco - EXPORT dracoExport - RUNTIME DESTINATION "${bin_path}" - ARCHIVE DESTINATION "${libs_path}" - LIBRARY DESTINATION "${libs_path}") - else() - install( - TARGETS draco_static - EXPORT dracoExport - DESTINATION "${libs_path}") - - if(BUILD_SHARED_LIBS) + if(MSVC) install( - TARGETS draco_shared + TARGETS draco EXPORT dracoExport RUNTIME DESTINATION "${bin_path}" ARCHIVE DESTINATION "${libs_path}" LIBRARY DESTINATION "${libs_path}") + else() + install( + TARGETS draco_static + EXPORT dracoExport + DESTINATION "${libs_path}") + + if(BUILD_SHARED_LIBS) + install( + TARGETS draco_shared + EXPORT dracoExport + RUNTIME DESTINATION "${bin_path}" + ARCHIVE DESTINATION "${libs_path}" + LIBRARY DESTINATION "${libs_path}") + endif() endif() - endif() - if(DRACO_UNITY_PLUGIN) - install(TARGETS dracodec_unity DESTINATION "${libs_path}") - endif() + if(DRACO_UNITY_PLUGIN) + install(TARGETS dracodec_unity DESTINATION "${libs_path}") + endif() - if(DRACO_MAYA_PLUGIN) - install(TARGETS draco_maya_wrapper DESTINATION "${libs_path}") - endif() + if(DRACO_MAYA_PLUGIN) + install(TARGETS draco_maya_wrapper DESTINATION "${libs_path}") + endif() - # pkg-config: draco.pc - configure_file("${draco_root}/cmake/draco.pc.template" - "${draco_build}/draco.pc" @ONLY NEWLINE_STYLE UNIX) - install(FILES "${draco_build}/draco.pc" DESTINATION "${libs_path}/pkgconfig") + # pkg-config: draco.pc + configure_file("${draco_root}/cmake/draco.pc.template" + "${draco_build}/draco.pc" @ONLY NEWLINE_STYLE UNIX) + install(FILES "${draco_build}/draco.pc" DESTINATION "${libs_path}/pkgconfig") - # CMake config: draco-config.cmake - configure_package_config_file( - "${draco_root}/cmake/draco-config.cmake.template" - "${draco_build}/draco-config.cmake" - INSTALL_DESTINATION "${data_path}/cmake/draco") + # CMake config: draco-config.cmake + configure_package_config_file( + "${draco_root}/cmake/draco-config.cmake.template" + "${draco_build}/draco-config.cmake" + INSTALL_DESTINATION "${data_path}/cmake/draco") - write_basic_package_version_file( - "${draco_build}/draco-config-version.cmake" - VERSION ${DRACO_VERSION} - COMPATIBILITY AnyNewerVersion) + write_basic_package_version_file( + "${draco_build}/draco-config-version.cmake" + VERSION ${DRACO_VERSION} + COMPATIBILITY AnyNewerVersion) - export( - EXPORT dracoExport - NAMESPACE draco:: - FILE "${draco_build}/draco-targets.cmake") + export( + EXPORT dracoExport + NAMESPACE draco:: + FILE "${draco_build}/draco-targets.cmake") - install( - EXPORT dracoExport - NAMESPACE draco:: - FILE draco-targets.cmake - DESTINATION "${data_path}/cmake/draco") + install( + EXPORT dracoExport + NAMESPACE draco:: + FILE draco-targets.cmake + DESTINATION "${data_path}/cmake/draco") - install(FILES "${draco_build}/draco-config.cmake" - "${draco_build}/draco-config-version.cmake" - DESTINATION "${data_path}/cmake/draco") + install(FILES "${draco_build}/draco-config.cmake" + "${draco_build}/draco-config-version.cmake" + DESTINATION "${data_path}/cmake/draco") + endif(DRACO_INSTALL) endmacro() diff --git a/cmake/draco_options.cmake b/cmake/draco_options.cmake index 0851497..1e3f750 100644 --- a/cmake/draco_options.cmake +++ b/cmake/draco_options.cmake @@ -131,6 +131,10 @@ macro(draco_set_default_options) NAME DRACO_DEBUG_COMPILER_WARNINGS HELPSTRING "Turn on more warnings." VALUE OFF) + draco_option( + NAME DRACO_INSTALL + HELPSTRING "Enable installation." + VALUE ON) draco_check_deprecated_options() endmacro() diff --git a/src/draco/io/file_writer_utils.cc b/src/draco/io/file_writer_utils.cc index 3dab80b..08ca4c2 100644 --- a/src/draco/io/file_writer_utils.cc +++ b/src/draco/io/file_writer_utils.cc @@ -38,11 +38,10 @@ bool DirectoryExists(const std::string &path_arg) { struct stat path_stat; std::string path = path_arg; -#if defined(_WIN32) && not defined(__MINGW32__) +#if defined(_WIN32) && !defined(__MINGW32__) // Avoid a silly windows issue: stat() will fail on a drive letter missing the - // trailing slash. - if (path.size() > 0 && path[path.size()] != '\\' && - path[path.size()] != '/') { + // trailing slash. To keep it simple, append a path separator to all paths. + if (!path.empty() && path.back() != '\\' && path.back() != '/') { path.append("\\"); } #endif @@ -68,9 +67,7 @@ bool CheckAndCreatePathForFile(const std::string &filename) { const ghc::filesystem::path ghc_path(path); ghc::filesystem::create_directories(ghc_path); #endif // DRACO_TRANSCODER_SUPPORTED - const bool directory_exists = DirectoryExists(path); - - return directory_exists; + return DirectoryExists(path); } } // namespace draco