From 60c7f382e9bdc33712c7a505d95c4ded19eaf1b6 Mon Sep 17 00:00:00 2001 From: Paul Harris Date: Mon, 30 May 2022 22:04:25 +0800 Subject: [PATCH] (#10851) [package] netcdf/4.8.1: Upgrade to 4.8.1. Fix up patches for 4.7.4. * Upgrade to 4.8.1. Fix up patches for 4.7.4. * Fix that will allow shared-debug to build * byterange=False by default, AND set libdirs/includedirs include/lib dirs were needed for a downstream consumer. --- recipes/netcdf/all/conandata.yml | 12 +- recipes/netcdf/all/conanfile.py | 23 ++- .../all/patches/0001-cmake-subproject.patch | 154 ------------------ .../patches/4.7.4-0001-cmake-subproject.patch | 40 +++++ ...msvc.patch => 4.7.4-0002-cmake-msvc.patch} | 0 ...3-cmake-HDF5-cmake-components-wrong.patch} | 0 .../all/patches/4.8.1-0001-fix-cmake.patch | 61 +++++++ recipes/netcdf/config.yml | 2 + 8 files changed, 131 insertions(+), 161 deletions(-) delete mode 100644 recipes/netcdf/all/patches/0001-cmake-subproject.patch create mode 100644 recipes/netcdf/all/patches/4.7.4-0001-cmake-subproject.patch rename recipes/netcdf/all/patches/{0002-cmake-msvc.patch => 4.7.4-0002-cmake-msvc.patch} (100%) rename recipes/netcdf/all/patches/{0003-cmake-HDF5-cmake-components-wrong.patch => 4.7.4-0003-cmake-HDF5-cmake-components-wrong.patch} (100%) create mode 100644 recipes/netcdf/all/patches/4.8.1-0001-fix-cmake.patch diff --git a/recipes/netcdf/all/conandata.yml b/recipes/netcdf/all/conandata.yml index 1f69ed3a52..b00014281b 100644 --- a/recipes/netcdf/all/conandata.yml +++ b/recipes/netcdf/all/conandata.yml @@ -2,11 +2,17 @@ sources: "4.7.4": url: "https://github.com/Unidata/netcdf-c/archive/v4.7.4.tar.gz" sha256: "99930ad7b3c4c1a8e8831fb061cb02b2170fc8e5ccaeda733bd99c3b9d31666b" + "4.8.1": + url: "https://github.com/Unidata/netcdf-c/archive/v4.8.1.tar.gz" + sha256: "bc018cc30d5da402622bf76462480664c6668b55eb16ba205a0dfb8647161dd0" patches: "4.7.4": - base_path: "source_subfolder" - patch_file: "patches/0001-cmake-subproject.patch" + patch_file: "patches/4.7.4-0001-cmake-subproject.patch" - base_path: "source_subfolder" - patch_file: "patches/0002-cmake-msvc.patch" + patch_file: "patches/4.7.4-0002-cmake-msvc.patch" - base_path: "source_subfolder" - patch_file: "patches/0003-cmake-HDF5-cmake-components-wrong.patch" + patch_file: "patches/4.7.4-0003-cmake-HDF5-cmake-components-wrong.patch" + "4.8.1": + - base_path: "source_subfolder" + patch_file: "patches/4.8.1-0001-fix-cmake.patch" diff --git a/recipes/netcdf/all/conanfile.py b/recipes/netcdf/all/conanfile.py index 4a14367c1e..7a134d4706 100644 --- a/recipes/netcdf/all/conanfile.py +++ b/recipes/netcdf/all/conanfile.py @@ -24,6 +24,7 @@ class NetcdfConan(ConanFile): "with_hdf5": [True, False], "cdf5": [True, False], "dap": [True, False], + "byterange": [True, False], } default_options = { "shared": False, @@ -32,6 +33,7 @@ class NetcdfConan(ConanFile): "with_hdf5": True, "cdf5": True, "dap": True, + "byterange": False, } generators = "cmake_find_package", "cmake_find_package_multi", "cmake" @@ -66,9 +68,18 @@ class NetcdfConan(ConanFile): def requirements(self): if self._with_hdf5: - self.requires("hdf5/1.12.0") - if self.options.dap: - self.requires("libcurl/7.80.0") + if self.version == "4.7.4": + # 4.7.4 was built and tested with hdf5/1.12.0 + # It would be nice to upgrade to 1.12.1, + # but when the byterange feature is enabled, + # it triggers a compile error that was later patched in 4.8.x + # So we will require the older hdf5 to keep the older behaviour. + self.requires("hdf5/1.12.0") + else: + self.requires("hdf5/1.12.1") + + if self.options.dap or self.options.byterange: + self.requires("libcurl/7.83.1") def source(self): tools.get(**self.conan_data["sources"][self.version], @@ -81,10 +92,12 @@ class NetcdfConan(ConanFile): self._cmake.definitions["BUILD_TESTING"] = False self._cmake.definitions["BUILD_UTILITIES"] = False self._cmake.definitions["ENABLE_TESTS"] = False + self._cmake.definitions["ENABLE_FILTER_TESTING"] = False self._cmake.definitions["ENABLE_NETCDF_4"] = self.options.netcdf4 self._cmake.definitions["ENABLE_CDF5"] = self.options.cdf5 self._cmake.definitions["ENABLE_DAP"] = self.options.dap + self._cmake.definitions["ENABLE_BYTERANGE"] = self.options.byterange self._cmake.definitions["USE_HDF5"] = self.options.with_hdf5 self._cmake.definitions["NC_FIND_SHARED_LIBS"] = self.options.with_hdf5 and self.options["hdf5"].shared self._cmake.configure(build_folder=self._build_subfolder) @@ -120,9 +133,11 @@ class NetcdfConan(ConanFile): self.cpp_info.set_property("pkg_config_name", "netcdf") # TODO: back to global scope in conan v2 once cmake_find_package_* generators removed self.cpp_info.components["libnetcdf"].libs = ["netcdf"] + self.cpp_info.components["libnetcdf"].libdirs = ["lib"] + self.cpp_info.components["libnetcdf"].includedirs = ["include"] if self._with_hdf5: self.cpp_info.components["libnetcdf"].requires.append("hdf5::hdf5") - if self.options.dap: + if self.options.dap or self.options.byterange: self.cpp_info.components["libnetcdf"].requires.append("libcurl::libcurl") if self.settings.os in ["Linux", "FreeBSD"]: self.cpp_info.components["libnetcdf"].system_libs = ["dl", "m"] diff --git a/recipes/netcdf/all/patches/0001-cmake-subproject.patch b/recipes/netcdf/all/patches/0001-cmake-subproject.patch deleted file mode 100644 index 0868e408c8..0000000000 --- a/recipes/netcdf/all/patches/0001-cmake-subproject.patch +++ /dev/null @@ -1,154 +0,0 @@ ---- CMakeLists.txt -+++ CMakeLists.txt -@@ -85,8 +85,7 @@ IF(MSVC) - ENDIF() - - #Add custom CMake Module --SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/" -- CACHE INTERNAL "Location of our custom CMake modules.") -+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/") - - # auto-configure style checks, other CMake modules. - INCLUDE(CheckLibraryExists) -@@ -393,17 +392,17 @@ IF(NOT MSVC) - SET(BUILD_FORTRAN ON) - ENDIF() - IF(BUILD_FORTRAN) -- CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/postinstall.sh.in" -- "${CMAKE_BINARY_DIR}/postinstall.sh" -+ CONFIGURE_FILE("${PROJECT_SOURCE_DIR}/postinstall.sh.in" -+ "${PROJECT_BINARY_DIR}/postinstall.sh" - @ONLY) - - ADD_CUSTOM_TARGET(build-netcdf-fortran -- COMMAND sh -c "${CMAKE_BINARY_DIR}/postinstall.sh -t cmake -a build" -+ COMMAND sh -c "${PROJECT_BINARY_DIR}/postinstall.sh -t cmake -a build" - DEPENDS netcdf - ) - - ADD_CUSTOM_TARGET(install-netcdf-fortran -- COMMAND sh -c "${CMAKE_BINARY_DIR}/postinstall.sh -t cmake -a install" -+ COMMAND sh -c "${PROJECT_BINARY_DIR}/postinstall.sh -t cmake -a install" - DEPENDS build-netcdf-fortran - ) - -@@ -789,7 +788,6 @@ ENDIF(USE_HDF5 OR ENABLE_NETCDF_4) - - # See if we have libcurl - FIND_PACKAGE(CURL) --ADD_DEFINITIONS(-DCURL_STATICLIB=1) - INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIRS}) - - # Check to see if CURLOPT_USERNAME is defined. -@@ -854,7 +852,7 @@ ENDIF() - # Option to support byte-range reading of remote datasets - OPTION(ENABLE_BYTERANGE "Enable byte-range access to remote datasets.." OFF) - --IF(NOT CURL_LIBRARY) -+IF(NOT CURL_FOUND) - IF(ENABLE_BYTERANGE) - MESSAGE(FATAL_ERROR "Byte-range support specified, CURL libraries are not found.") - ENDIF() -@@ -1193,8 +1191,8 @@ IF(ENABLE_DOXYGEN) - ### - OPTION(ENABLE_DOXYGEN_BUILD_RELEASE_DOCS "Build release documentation. This is of interest only to the netCDF developers." OFF) - IF(ENABLE_DOXYGEN_BUILD_RELEASE_DOCS) -- SET(DOXYGEN_CSS_FILE "${CMAKE_SOURCE_DIR}/docs/release.css" CACHE STRING "") -- SET(DOXYGEN_HEADER_FILE "${CMAKE_SOURCE_DIR}/docs/release_header.html" CACHE STRING "") -+ SET(DOXYGEN_CSS_FILE "${PROJECT_SOURCE_DIR}/docs/release.css" CACHE STRING "") -+ SET(DOXYGEN_HEADER_FILE "${PROJECT_SOURCE_DIR}/docs/release_header.html" CACHE STRING "") - SET(DOXYGEN_SEARCHENGINE "NO" CACHE STRING "") - SET(ENABLE_DOXYGEN_SERVER_BASED_SEARCH NO CACHE STRING "") - ELSE() -@@ -1499,7 +1497,7 @@ MACRO(add_bin_env_temp_large_test prefix F) - ) - ENDIF() - -- ADD_TEST(${prefix}_${F} bash "-c" "TEMP_LARGE=${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/${prefix}_${F}") -+ ADD_TEST(${prefix}_${F} bash "-c" "TEMP_LARGE=${PROJECT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/${prefix}_${F}") - IF(MSVC) - SET_PROPERTY(TARGET ${prefix}_${F} PROPERTY FOLDER "tests") - SET_TARGET_PROPERTIES(${prefix}_${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY -@@ -1680,7 +1678,7 @@ ENDIF(ENABLE_BASH_SCRIPT_TESTING) - - MACRO(add_sh_test prefix F) - IF(HAVE_BASH) -- ADD_TEST(${prefix}_${F} bash "-c" "export srcdir=${CMAKE_CURRENT_SOURCE_DIR};export TOPSRCDIR=${CMAKE_SOURCE_DIR};${CMAKE_CURRENT_BINARY_DIR}/${F}.sh") -+ ADD_TEST(${prefix}_${F} bash "-c" "export srcdir=${CMAKE_CURRENT_SOURCE_DIR};export TOPSRCDIR=${PROJECT_SOURCE_DIR};${CMAKE_CURRENT_BINARY_DIR}/${F}.sh") - ENDIF() - ENDMACRO() - ---- cmake/modules/FindMakeDist.cmake -+++ cmake/modules/FindMakeDist.cmake -@@ -153,9 +153,9 @@ macro(enable_makedist) - get_source_file_property(__makedist_extradist "${__makedist_source}" EXTRADIST) - - if(NOT __makedist_generated) -- file(RELATIVE_PATH __makedist_cur_path "${CMAKE_SOURCE_DIR}" "${__makedist_full_cur_path}") -+ file(RELATIVE_PATH __makedist_cur_path "${PROJECT_SOURCE_DIR}" "${__makedist_full_cur_path}") - elseif(__makedist_extradist) -- file(RELATIVE_PATH __makedist_cur_path "${CMAKE_BINARY_DIR}" "${__makedist_full_cur_path}") -+ file(RELATIVE_PATH __makedist_cur_path "${PROJCT_BINARY_DIR}" "${__makedist_full_cur_path}") - else(__makedist_extradist) - set(__makedist_cur_path) - endif(NOT __makedist_generated) ---- docs/CMakeLists.txt -+++ docs/CMakeLists.txt -@@ -11,12 +11,12 @@ - IF(ENABLE_DOXYGEN) - # The following is redundant but does not hurt anything. - -- FILE(GLOB COPY_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.html ${CMAKE_CURRENT_SOURCE_DIR}/images ${CMAKE_CURRENT_SOURCE_DIR}/*.doc ${CMAKE_CURRENT_SOURCE_DIR}/*.xml ${CMAKE_CURRENT_SOURCE_DIR}/*.m4 ${CMAKE_CURRENT_SOURCE_DIR}/*.texi ${CMAKE_SOURCE_DIR}/oc2/auth.html.in) -+ FILE(GLOB COPY_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.html ${CMAKE_CURRENT_SOURCE_DIR}/images ${CMAKE_CURRENT_SOURCE_DIR}/*.doc ${CMAKE_CURRENT_SOURCE_DIR}/*.xml ${CMAKE_CURRENT_SOURCE_DIR}/*.m4 ${CMAKE_CURRENT_SOURCE_DIR}/*.texi ${PROJECT_SOURCE_DIR}/oc2/auth.html.in) - FILE(COPY ${COPY_FILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) - - # Set abs_top_srcdir to work with the autotools - # doxyfile template. -- SET(abs_top_srcdir ${CMAKE_SOURCE_DIR}) -+ SET(abs_top_srcdir ${PROJECT_SOURCE_DIR}) - SET(abs_builddir ${CMAKE_CURRENT_BINARY_DIR}) - - # Create general and guide doxyfiles. -@@ -34,7 +34,7 @@ IF(ENABLE_DOXYGEN) - # Create auth.html with some sed commands. - ADD_CUSTOM_TARGET(oc2-auth - -- cat ${CMAKE_SOURCE_DIR}/oc2/auth.html.in | sed -e "//d" | sed -e "s|^||" | sed -e "s|zz|netcdf|g" -e "s|ZZ|netCDF|g" | sed -e "/stylesheet/r${CMAKE_SOURCE_DIR}/oc2/oc.css" -e "/stylesheet/d" > ${CMAKE_CURRENT_SOURCE_DIR}/auth.html -+ cat ${PROJECT_SOURCE_DIR}/oc2/auth.html.in | sed -e "//d" | sed -e "s|^||" | sed -e "s|zz|netcdf|g" -e "s|ZZ|netCDF|g" | sed -e "/stylesheet/r${PROJECT_SOURCE_DIR}/oc2/oc.css" -e "/stylesheet/d" > ${CMAKE_CURRENT_SOURCE_DIR}/auth.html - COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/auth.html ${CMAKE_CURRENT_BINARY_DIR}/html - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - VERBATIM ---- nc_test/CMakeLists.txt -+++ nc_test/CMakeLists.txt -@@ -5,15 +5,15 @@ - - # See netcdf-c/COPYRIGHT file for more info. - --message(STATUS "CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR}") --message(STATUS "CMAKE_BINARY_DIR=${CMAKE_BINARY_DIR}") -+message(STATUS "PROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR}") -+message(STATUS "PROJECT_BINARY_DIR=${PROJECT_BINARY_DIR}") - message(STATUS "CMAKE_CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}") - message(STATUS "CMAKE_CURRENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}") - --add_definitions(-D"TOPSRCDIR=${CMAKE_SOURCE_DIR}") --add_definitions(-D"TOPBINDIR=${CMAKE_BINARY_DIR}") -+add_definitions(-D"TOPSRCDIR=${PROJECT_SOURCE_DIR}") -+add_definitions(-D"TOPBINDIR=${PROJECT_BINARY_DIR}") - --INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/include) -+INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR}/include) - - SET (nc_test_m4_SOURCES test_get test_put test_read test_write) - FOREACH (F ${nc_test_m4_SOURCES}) ---- liblib/CMakeLists.txt -+++ liblib/CMakeLists.txt -@@ -88,7 +88,7 @@ IF(USE_HDF5 OR USE_NETCDF4) - ENDIF() - - IF(USE_DAP) -- SET(TLL_LIBS ${TLL_LIBS} ${CURL_LIBRARY}) -+ SET(TLL_LIBS ${TLL_LIBS} ${CURL_LIBRARIES}) - ENDIF() - - IF(USE_HDF4) diff --git a/recipes/netcdf/all/patches/4.7.4-0001-cmake-subproject.patch b/recipes/netcdf/all/patches/4.7.4-0001-cmake-subproject.patch new file mode 100644 index 0000000000..bb9e090d80 --- /dev/null +++ b/recipes/netcdf/all/patches/4.7.4-0001-cmake-subproject.patch @@ -0,0 +1,40 @@ +--- CMakeLists.txt ++++ CMakeLists.txt +@@ -85,8 +85,7 @@ IF(MSVC) + ENDIF() + + #Add custom CMake Module +-SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/" +- CACHE INTERNAL "Location of our custom CMake modules.") ++list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/") + + # auto-configure style checks, other CMake modules. + INCLUDE(CheckLibraryExists) +@@ -789,7 +788,6 @@ ENDIF(USE_HDF5 OR ENABLE_NETCDF_4) + + # See if we have libcurl + FIND_PACKAGE(CURL) +-ADD_DEFINITIONS(-DCURL_STATICLIB=1) + INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIRS}) + + # Check to see if CURLOPT_USERNAME is defined. +@@ -854,7 +852,7 @@ ENDIF() + # Option to support byte-range reading of remote datasets + OPTION(ENABLE_BYTERANGE "Enable byte-range access to remote datasets.." OFF) + +-IF(NOT CURL_LIBRARY) ++IF(NOT CURL_FOUND) + IF(ENABLE_BYTERANGE) + MESSAGE(FATAL_ERROR "Byte-range support specified, CURL libraries are not found.") + ENDIF() +--- liblib/CMakeLists.txt ++++ liblib/CMakeLists.txt +@@ -88,7 +88,7 @@ IF(USE_HDF5 OR USE_NETCDF4) + ENDIF() + + IF(USE_DAP) +- SET(TLL_LIBS ${TLL_LIBS} ${CURL_LIBRARY}) ++ SET(TLL_LIBS ${TLL_LIBS} ${CURL_LIBRARIES}) + ENDIF() + + IF(USE_HDF4) diff --git a/recipes/netcdf/all/patches/0002-cmake-msvc.patch b/recipes/netcdf/all/patches/4.7.4-0002-cmake-msvc.patch similarity index 100% rename from recipes/netcdf/all/patches/0002-cmake-msvc.patch rename to recipes/netcdf/all/patches/4.7.4-0002-cmake-msvc.patch diff --git a/recipes/netcdf/all/patches/0003-cmake-HDF5-cmake-components-wrong.patch b/recipes/netcdf/all/patches/4.7.4-0003-cmake-HDF5-cmake-components-wrong.patch similarity index 100% rename from recipes/netcdf/all/patches/0003-cmake-HDF5-cmake-components-wrong.patch rename to recipes/netcdf/all/patches/4.7.4-0003-cmake-HDF5-cmake-components-wrong.patch diff --git a/recipes/netcdf/all/patches/4.8.1-0001-fix-cmake.patch b/recipes/netcdf/all/patches/4.8.1-0001-fix-cmake.patch new file mode 100644 index 0000000000..c64e1a3bb7 --- /dev/null +++ b/recipes/netcdf/all/patches/4.8.1-0001-fix-cmake.patch @@ -0,0 +1,61 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 6b39f0e4..76f69653 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -86,8 +86,7 @@ IF(MSVC) + ENDIF() + + #Add custom CMake Module +-SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/" +- CACHE INTERNAL "Location of our custom CMake modules.") ++list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/") + + # auto-configure style checks, other CMake modules. + INCLUDE(CheckLibraryExists) +@@ -645,7 +644,7 @@ IF(USE_HDF5) + # examples, even though the previous version of what we + # had worked. + ##### +- IF(MSVC) ++ IF(0) + SET(SEARCH_PACKAGE_NAME ${HDF5_PACKAGE_NAME}) + FIND_PACKAGE(HDF5 NAMES ${SEARCH_PACKAGE_NAME} COMPONENTS C HL CONFIG REQUIRED ${NC_HDF5_LINK_TYPE}) + ELSE(MSVC) +@@ -848,7 +847,6 @@ ENDIF(USE_HDF5) + + # See if we have libcurl + FIND_PACKAGE(CURL) +-ADD_DEFINITIONS(-DCURL_STATICLIB=1) + INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIRS}) + + # Define a test flag for have curl library +@@ -2028,7 +2026,7 @@ ADD_SUBDIRECTORY(docs) + # install them in the binary dir. Grab all of the .libs, put them + # in the libdir. + ## +-IF(MSVC) ++IF(0) + FILE(GLOB COPY_FILES ${CMAKE_PREFIX_PATH}/lib/*.lib) + INSTALL(FILES ${COPY_FILES} + DESTINATION ${CMAKE_INSTALL_LIBDIR} +diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt +index be72612c..e0edb4ca 100644 +--- a/liblib/CMakeLists.txt ++++ b/liblib/CMakeLists.txt +@@ -90,14 +90,14 @@ IF(USE_HDF5) + # builds: + # Make sure that HDF5_C_LIBRARY appears *after* + # HDF5_HL_LIBRARY. +- SET(TLL_LIBS ${HDF5_HL_LIBRARIES} ${HDF5_C_LIBRARIES} ${TLL_LIBS} ${SZIP_LIBRARY}) ++ SET(TLL_LIBS ${HDF5_HL_LIBRARIES} ${HDF5_LIBRARIES} ${TLL_LIBS} ${SZIP_LIBRARY}) + ELSE() # Windows CMake defines HDF5_LIBRARIES. + SET(TLL_LIBS ${HDF5_LIBRARIES} ${TLL_LIBS} ${SZIP_LIBRARY}) + ENDIF() + ENDIF() + + IF(FOUND_CURL) +- SET(TLL_LIBS ${TLL_LIBS} ${CURL_LIBRARY}) ++ SET(TLL_LIBS ${TLL_LIBS} ${CURL_LIBRARIES}) + ENDIF() + + IF(USE_HDF4) diff --git a/recipes/netcdf/config.yml b/recipes/netcdf/config.yml index c5de54a27d..2236af8c5b 100644 --- a/recipes/netcdf/config.yml +++ b/recipes/netcdf/config.yml @@ -1,3 +1,5 @@ versions: "4.7.4": folder: "all" + "4.8.1": + folder: "all"