diff --git a/.gitignore b/.gitignore
index 17ea701d139816c5301f73b038671b75ac47786b..abe3eaa10177f8486f2ac778a2dd8d8e29d00a1f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,6 @@ archives*
 CMakeLists.txt.user
 .directory*
 build_packages*
+build
+install
+log
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d249b8c87619b15020fef331e940b493c5f63100..4070bc159b6ad33fddfedeca12213d0f5616146c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -126,8 +126,14 @@ fast-build:
   before_script:
     - export GIT_LFS_SKIP_SMUDGE=1
     - git checkout -f -q $CI_COMMIT_SHA
+    # pull data needed by the two convolution test
+    - |
+      git lfs pull --include Data/Baseline/OTB/Images/bfTvConvolutionImageFilter.tif
+      git lfs pull --include Data/Input/QB_Suburb.png
+      git lfs pull --include Data/Input/QB_PAN_ROI_1000_100.tif
   script:
     - ctest -V -S CI/main_ci.cmake -DIMAGE_NAME:string=ubuntu-22.04-fast
+    - ctest -VV -S CI/FFTW_tests.cmake -DIMAGE_NAME:string=ubuntu-22.04-fast
     - ccache -s
 
 legal-check:
diff --git a/CI/FFTW_tests.cmake b/CI/FFTW_tests.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..abdbada2684dfb4e9e13dc62c715eb5771cd3606
--- /dev/null
+++ b/CI/FFTW_tests.cmake
@@ -0,0 +1,96 @@
+#
+# Copyright (C) 2005-2024 Centre National d'Etudes Spatiales (CNES)
+#
+# This file is part of Orfeo Toolbox
+#
+#     https://www.orfeo-toolbox.org/
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+include( "${CMAKE_CURRENT_LIST_DIR}/macros.cmake" )
+get_filename_component(OTB_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR} DIRECTORY)
+set (ENV{LANG} "C") # Only ascii output
+
+# Build Configuration : Release, Debug..
+if(ci_build_type)
+  set (CTEST_BUILD_CONFIGURATION ${ci_build_type})
+else()
+  set (CTEST_BUILD_CONFIGURATION "Release")
+endif()
+
+set (CTEST_CMAKE_GENERATOR "Ninja")
+
+# detect short sha
+if(NOT DEFINED ENV{CI_COMMIT_SHORT_SHA})
+  execute_process(COMMAND git log -1 --pretty=format:%h
+                  WORKING_DIRECTORY ${OTB_SOURCE_DIR}
+                  OUTPUT_VARIABLE ci_short_sha)
+else()
+  set(ci_short_sha "$ENV{CI_COMMIT_SHORT_SHA}")
+endif()
+
+# Find the build name and CI profile. Customize it with FFTW
+set_dash_build_name()
+set (CTEST_BUILD_NAME "FFTW Tests ${ci_ref_name} P-${ci_pipeline_id}")
+
+# Detect site
+if(NOT DEFINED IMAGE_NAME)
+  if(DEFINED ENV{IMAGE_NAME})
+    set(IMAGE_NAME $ENV{IMAGE_NAME})
+  endif()
+endif()
+set (CTEST_SITE "${IMAGE_NAME}")
+
+# Directory variable
+set (CTEST_SOURCE_DIRECTORY "${OTB_SOURCE_DIR}")
+if(BUILD_DIR)
+  set (CTEST_BINARY_DIRECTORY "${BUILD_DIR}")
+else()
+  set (CTEST_BINARY_DIRECTORY "${OTB_SOURCE_DIR}/build/")
+endif()
+set (CTEST_INSTALL_DIRECTORY "${OTB_SOURCE_DIR}/install/")
+set (PROJECT_SOURCE_DIR "${OTB_SOURCE_DIR}")
+
+# Ctest command value
+set (CMAKE_COMMAND "cmake")
+
+message(STATUS "CI profile : ${ci_profile}")
+
+# Sources are already checked out : do nothing for update
+set(CTEST_GIT_UPDATE_CUSTOM "${CMAKE_COMMAND}" "-E" "echo" "No update")
+# Look for a GIT command-line client.
+find_program(CTEST_GIT_COMMAND NAMES git git.cmd)
+
+
+
+ctest_start (Experimental TRACK CI_Build)
+
+ctest_update()
+
+# Run only onverlapSave tests
+ctest_test(PARALLEL_LEVEL 8
+    RETURN_VALUE _test_rv
+    CAPTURE_CMAKE_ERROR _test_error
+    INCLUDE "OverlapSave"
+    )
+  # Test log
+file ( WRITE 
+"${OTB_SOURCE_DIR}/log/test_return_value_log.txt" "${_test_rv}")
+file ( WRITE 
+"${OTB_SOURCE_DIR}/log/test_cmake_error_log.txt" "${_test_error}")
+
+if ( NOT _test_rv EQUAL 0 )
+  message( SEND_ERROR "An error occurs during ctest_test.")
+endif()
+
+ctest_submit()
diff --git a/CI/ubuntu-22.04-fast.cmake b/CI/ubuntu-22.04-fast.cmake
index 7ca25a3da30627b4449b03e3ccd6c81e9cddc213..78c2303422e2c10c489c17cb9fec208ff0d1ee04 100644
--- a/CI/ubuntu-22.04-fast.cmake
+++ b/CI/ubuntu-22.04-fast.cmake
@@ -26,6 +26,7 @@ CMAKE_CXX_COMPILER:STRING=g++
 CMAKE_C_COMPILER_LAUNCHER:STRING=ccache
 CMAKE_CXX_COMPILER_LAUNCHER:STRING=ccache
 OTB_USE_SHARK:BOOL=OFF
+OTB_USE_FFTW:BOOL=ON
 BUILD_EXAMPLES:BOOL=OFF")
 
 set(ci_skip_testing ON)
diff --git a/Modules/Core/Convolution/CMakeLists.txt b/Modules/Core/Convolution/CMakeLists.txt
index 4a79021d37ac4ea8f9577293913d40d63b380aa2..262a67e7781e527596f3897125a8e86763868c3e 100644
--- a/Modules/Core/Convolution/CMakeLists.txt
+++ b/Modules/Core/Convolution/CMakeLists.txt
@@ -19,4 +19,12 @@
 #
 
 project(OTBConvolution)
+
+option(OTB_USE_FFTW "Download and compile FFTW third party (license change to GPLv2)" OFF)
+if (OTB_USE_FFTW)
+  message(NOTICE "/!\\ /!\\ /!\\ You are actually compiling OTB with FFTW. As FFTW is distributed under GNU GPLv2, OTB is now provided with GNU GPLv2 license /!\\ /!\\ /!\\ ")
+else()
+  message(STATUS "Compiling with FFTW disabled, otbOverlapSaveConvolutionImageFilter will not be available")
+endif()
+
 otb_module_impl()
diff --git a/Modules/Core/Convolution/include/otbOverlapSaveConvolutionImageFilter.hxx b/Modules/Core/Convolution/include/otbOverlapSaveConvolutionImageFilter.hxx
index df27d747d15819d9a94e968f43614ba7f65859ba..d09a2f3a488aa3f75a78a50eee3197988dd2cb4b 100644
--- a/Modules/Core/Convolution/include/otbOverlapSaveConvolutionImageFilter.hxx
+++ b/Modules/Core/Convolution/include/otbOverlapSaveConvolutionImageFilter.hxx
@@ -35,7 +35,7 @@
 #include "itkImageRegionIterator.h"
 #include "otbMath.h"
 
-#ifdef ITK_USE_FFTWD
+#ifdef OTB_USE_FFTW
 #include "itkFFTWCommon.h"
 #endif
 
@@ -54,7 +54,7 @@ OverlapSaveConvolutionImageFilter<TInputImage, TOutputImage, TBoundaryCondition>
 template <class TInputImage, class TOutputImage, class TBoundaryCondition>
 void OverlapSaveConvolutionImageFilter<TInputImage, TOutputImage, TBoundaryCondition>::GenerateInputRequestedRegion()
 {
-#if defined ITK_USE_FFTWD
+#if defined OTB_USE_FFTW
   // call the superclass' implementation of this method
   Superclass::GenerateInputRequestedRegion();
 
@@ -108,7 +108,7 @@ void OverlapSaveConvolutionImageFilter<TInputImage, TOutputImage, TBoundaryCondi
      * ::ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) */
     ::GenerateData()
 {
-#if defined ITK_USE_FFTWD
+#if defined OTB_USE_FFTW
   // Input/Output pointers
   typename OutputImageType::Pointer     output = this->GetOutput();
   typename InputImageType::ConstPointer input  = this->GetInput();
diff --git a/Modules/Core/Convolution/test/CMakeLists.txt b/Modules/Core/Convolution/test/CMakeLists.txt
index ebb6f84892b968f6c26feb23e22696a56c3f649d..b7826c0923845ebd7d86245d10ec1acc48e1e44a 100644
--- a/Modules/Core/Convolution/test/CMakeLists.txt
+++ b/Modules/Core/Convolution/test/CMakeLists.txt
@@ -23,12 +23,20 @@ otb_module_test()
 set(OTBConvolutionTests
 otbConvolutionTestDriver.cxx
 otbConvolutionImageFilter.cxx
-otbOverlapSaveConvolutionImageFilter.cxx
 otbCompareOverlapSaveAndClassicalConvolutionWithGaborFilter.cxx
 otbGaborFilterGenerator.cxx
 )
 
+if (OTB_USE_FFTW)
+  list(APPEND OTBConvolutionTests otbOverlapSaveConvolutionImageFilter.cxx)
+endif()
+
 add_executable(otbConvolutionTestDriver ${OTBConvolutionTests})
+# enable FFTW tests when using OTB_USE_FFTW option
+if (OTB_USE_FFTW)
+  target_compile_definitions(otbConvolutionTestDriver PUBLIC "OTB_USE_FFTW=1")
+endif()
+
 target_link_libraries(otbConvolutionTestDriver ${OTBConvolution-Test_LIBRARIES})
 otb_module_target_label(otbConvolutionTestDriver)
 
@@ -43,36 +51,34 @@ otb_add_test(NAME bfTvConvolutionImageFilter COMMAND otbConvolutionTestDriver
   ${TEMP}/bfTvConvolutionImageFilter.tif
   )
 
-if(ITK_USE_FFTWD)
-
-if(MSVC AND (CMAKE_SIZEOF_VOID_P EQUAL "4"))
-  message(WARNING "Disable OverlapSaveConvolution tests")
-else()
-otb_add_test(NAME bfTvOverlapSaveConvolutionImageFilter COMMAND otbConvolutionTestDriver
-  --compare-image ${EPSILON_7}
-  ${BASELINE}/bfTvConvolutionImageFilter.tif
-  ${TEMP}/bfTvOverlapSaveConvolutionImageFilter.tif
-  otbOverlapSaveConvolutionImageFilter
-  ${INPUTDATA}/QB_Suburb.png
-  ${TEMP}/bfTvOverlapSaveConvolutionImageFilter.tif
-  )
-
-otb_add_test(NAME bfTvCompareOverlapSaveAndClassicalConvolutionWithGaborFilter COMMAND otbConvolutionTestDriver
-  --compare-image ${EPSILON_7}
-  ${TEMP}/bfTvCompareConvolutionOutput.tif
-  ${TEMP}/bfTvCompareOSConvolutionoutput.tif
-  otbCompareOverlapSaveAndClassicalConvolutionWithGaborFilter
-  ${INPUTDATA}/QB_PAN_ROI_1000_100.tif
-  ${TEMP}/bfTvCompareConvolutionOutput.tif
-  ${TEMP}/bfTvCompareOSConvolutionoutput.tif
-  32 32 #Radius
-  0.02 0.025 # a b
-  -45 # theta
-  0.0125 0.0125 #u0 v0
-  0
-  )
-endif()
+if(OTB_USE_FFTW)
+  if(MSVC AND (CMAKE_SIZEOF_VOID_P EQUAL "4"))
+    message(WARNING "Disable OverlapSaveConvolution tests")
+  else()
+    otb_add_test(NAME bfTvOverlapSaveConvolutionImageFilter COMMAND otbConvolutionTestDriver
+      --compare-image ${EPSILON_7}
+      ${BASELINE}/bfTvConvolutionImageFilter.tif
+      ${TEMP}/bfTvOverlapSaveConvolutionImageFilter.tif
+      otbOverlapSaveConvolutionImageFilter
+      ${INPUTDATA}/QB_Suburb.png
+      ${TEMP}/bfTvOverlapSaveConvolutionImageFilter.tif
+      )
 
+    otb_add_test(NAME bfTvCompareOverlapSaveAndClassicalConvolutionWithGaborFilter COMMAND otbConvolutionTestDriver
+      --compare-image ${EPSILON_7}
+      ${TEMP}/bfTvCompareConvolutionOutput.tif
+      ${TEMP}/bfTvCompareOSConvolutionoutput.tif
+      otbCompareOverlapSaveAndClassicalConvolutionWithGaborFilter
+      ${INPUTDATA}/QB_PAN_ROI_1000_100.tif
+      ${TEMP}/bfTvCompareConvolutionOutput.tif
+      ${TEMP}/bfTvCompareOSConvolutionoutput.tif
+      32 32 #Radius
+      0.02 0.025 # a b
+      -45 # theta
+      0.0125 0.0125 #u0 v0
+      0
+      )
+  endif()
 endif()
 
 otb_add_test(NAME bfTvGaborFilterGenerator COMMAND otbConvolutionTestDriver
diff --git a/Modules/Core/Convolution/test/otbConvolutionTestDriver.cxx b/Modules/Core/Convolution/test/otbConvolutionTestDriver.cxx
index 9e5a6dc2d2c7aff68a00fb3e76c7e8577cdb5de4..0bd5419a277192c8352d104d4b98bbba884c672d 100644
--- a/Modules/Core/Convolution/test/otbConvolutionTestDriver.cxx
+++ b/Modules/Core/Convolution/test/otbConvolutionTestDriver.cxx
@@ -23,7 +23,7 @@
 void RegisterTests()
 {
   REGISTER_TEST(otbConvolutionImageFilter);
-#if defined(ITK_USE_FFTWD)
+#if defined(OTB_USE_FFTW)
   REGISTER_TEST(otbOverlapSaveConvolutionImageFilter);
   REGISTER_TEST(otbCompareOverlapSaveAndClassicalConvolutionWithGaborFilter);
 #endif
diff --git a/Modules/Core/Descriptors/test/otbFourierMellinImageFilter.cxx b/Modules/Core/Descriptors/test/otbFourierMellinImageFilter.cxx
index 5fb2f52df63a89d90ae1374119be53b49b396b32..827d8a15d87fa7b90aac7692dd57d82e8151bb03 100644
--- a/Modules/Core/Descriptors/test/otbFourierMellinImageFilter.cxx
+++ b/Modules/Core/Descriptors/test/otbFourierMellinImageFilter.cxx
@@ -87,6 +87,7 @@ int otbFourierMellinImageFilter(int itkNotUsed(argc), char* argv[])
   imaginaryWriter->SetInput(imaginaryRescaler->GetOutput());
   imaginaryWriter->Update();
 // Hugly hack for cleaning fftw threads
+#if defined(OTB_USE_FFTW)
 #if defined(ITK_USE_FFTWF)
     fftwf_cleanup_threads();
     fftwf_cleanup();
@@ -94,6 +95,7 @@ int otbFourierMellinImageFilter(int itkNotUsed(argc), char* argv[])
 #if defined(ITK_USE_FFTWD)
     fftw_cleanup_threads();
     fftw_cleanup();
+#endif
 #endif
   return EXIT_SUCCESS;
 }
diff --git a/Modules/ThirdParty/ITK/CMakeLists.txt b/Modules/ThirdParty/ITK/CMakeLists.txt
index 1efa7de0b4cba0490103d499fcf3d0e018dcae83..c40641a5c3b56651572ce9b864323e40f5e66557 100644
--- a/Modules/ThirdParty/ITK/CMakeLists.txt
+++ b/Modules/ThirdParty/ITK/CMakeLists.txt
@@ -23,7 +23,13 @@ project(OTBITK)
 set(OTBITK_SYSTEM_INCLUDE_DIRS ${ITK_INCLUDE_DIRS})
 set(OTBITK_SYSTEM_LIBRARY_DIRS ${ITK_LIBRARY_DIRS})
 list(REMOVE_DUPLICATES OTBITK_SYSTEM_LIBRARY_DIRS)
-set(OTBITK_LIBRARIES "${ITK_LIBRARIES}" ${FFTWD_BASE_LIB} ${FFTWD_THREADS_LIB} ${FFTWF_BASE_LIB} ${FFTWF_THREADS_LIB})
+
+if (OTB_USE_FFTW)
+    set(OTBITK_LIBRARIES "${ITK_LIBRARIES}" ${FFTWD_BASE_LIB} ${FFTWD_THREADS_LIB} ${FFTWF_BASE_LIB} ${FFTWF_THREADS_LIB})
+else()
+    set(OTBITK_LIBRARIES "${ITK_LIBRARIES}")
+endif()
+
 set(OTBITK_EXPORT_CODE_BUILD "find_package(ITK REQUIRED COMPONENTS ${OTBITK_ITK_REQUIRED_MODULE_LIST} HINTS ${ITK_DIR})")
 set(OTBITK_EXPORT_CODE_INSTALL ${OTBITK_EXPORT_CODE_BUILD})
 
diff --git a/SuperBuild/CMake/External_fftw.cmake b/SuperBuild/CMake/External_fftw.cmake
index bcc242186ad369dcaccdf7ec0a14ed1b8f86abef..f3a0c3f7de0286ef28cd127dcc4259adb175044c 100644
--- a/SuperBuild/CMake/External_fftw.cmake
+++ b/SuperBuild/CMake/External_fftw.cmake
@@ -18,78 +18,83 @@
 # limitations under the License.
 #
 
-INCLUDE_ONCE_MACRO(FFTW)
+if (OTB_USE_FFTW)
+  INCLUDE_ONCE_MACRO(FFTW)
 
-SETUP_SUPERBUILD(FFTW)
+  SETUP_SUPERBUILD(FFTW)
+  message(AUTHOR_WARNING "/!\\/!\\/!\\ You are actually compiling OTB with FFTW. As FFTW is distributed under GNU GPLv2, OTB is now provided with GNU GPLv2 license /!\\/!\\/!\\")
 
-set(FFTWF_SB_SRC ${CMAKE_BINARY_DIR}/FFTW/src/FFTWF)
-set(FFTWD_SB_SRC ${CMAKE_BINARY_DIR}/FFTW/src/FFTWD)
-set(FFTWF_SB_BUILD ${CMAKE_BINARY_DIR}/FFTW/build/FFTWF)
-set(FFTWD_SB_BUILD ${CMAKE_BINARY_DIR}/FFTW/build/FFTWD)
+  set(FFTWF_SB_SRC ${CMAKE_BINARY_DIR}/FFTW/src/FFTWF)
+  set(FFTWD_SB_SRC ${CMAKE_BINARY_DIR}/FFTW/src/FFTWD)
+  set(FFTWF_SB_BUILD ${CMAKE_BINARY_DIR}/FFTW/build/FFTWF)
+  set(FFTWD_SB_BUILD ${CMAKE_BINARY_DIR}/FFTW/build/FFTWD)
 
-if(WIN32)
-  set(FFTW_SB_CONFIG -DWITH_COMBINED_THREADS:BOOL=ON)
-else()
-  set(FFTW_SB_CONFIG -DWITH_COMBINED_THREADS:BOOL=OFF)
-endif()
+  if(WIN32)
+    set(FFTW_SB_CONFIG -DWITH_COMBINED_THREADS:BOOL=ON)
+  else()
+    set(FFTW_SB_CONFIG -DWITH_COMBINED_THREADS:BOOL=OFF)
+  endif()
 
-# Compile the float version of FFTW
-ExternalProject_Add(FFTWF
-  PREFIX FFTW/FFTWF
-  URL "https://fftw.org/fftw-3.3.10.tar.gz"
-  URL_MD5 8ccbf6a5ea78a16dbc3e1306e234cc5c
-  SOURCE_DIR ${FFTWF_SB_SRC}
-  BINARY_DIR ${FFTWF_SB_BUILD}
-  INSTALL_DIR ${SB_INSTALL_PREFIX}
-  DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
-  CMAKE_CACHE_ARGS
-  ${SB_CMAKE_CACHE_ARGS}
-    -DCMAKE_INSTALL_LIBDIR:PATH=lib
-    -DBUILD_TESTS:BOOL=OFF
-    -DDISABLE_FORTRAN:BOOL=ON
-    -DENABLE_THREADS:BOOL=ON
-    -DENABLE_SSE2:BOOL=ON
-    -DENABLE_FLOAT:BOOL=ON
-    ${FFTW_SB_CONFIG}
-  DEPENDS ${FFTW_DEPENDENCIES}
-  LOG_DOWNLOAD 1
-  LOG_CONFIGURE 1
-  LOG_BUILD 1
-  LOG_INSTALL 1
-  )
+  # Compile the float version of FFTW
+  ExternalProject_Add(FFTWF
+    PREFIX FFTW/FFTWF
+    URL "https://fftw.org/fftw-3.3.10.tar.gz"
+    URL_MD5 8ccbf6a5ea78a16dbc3e1306e234cc5c
+    SOURCE_DIR ${FFTWF_SB_SRC}
+    BINARY_DIR ${FFTWF_SB_BUILD}
+    INSTALL_DIR ${SB_INSTALL_PREFIX}
+    DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
+    CMAKE_CACHE_ARGS
+    ${SB_CMAKE_CACHE_ARGS}
+      -DCMAKE_INSTALL_LIBDIR:PATH=lib
+      -DBUILD_TESTS:BOOL=OFF
+      -DDISABLE_FORTRAN:BOOL=ON
+      -DENABLE_THREADS:BOOL=ON
+      -DENABLE_SSE2:BOOL=ON
+      -DENABLE_FLOAT:BOOL=ON
+      ${FFTW_SB_CONFIG}
+    DEPENDS ${FFTW_DEPENDENCIES}
+    LOG_DOWNLOAD 1
+    LOG_CONFIGURE 1
+    LOG_BUILD 1
+    LOG_INSTALL 1
+    )
 
-# Compile the double version of FFTW
-ExternalProject_Add(FFTWD
-  PREFIX FFTW/FFTWD
-  URL "https://fftw.org/fftw-3.3.10.tar.gz"
-  URL_MD5 8ccbf6a5ea78a16dbc3e1306e234cc5c
-  SOURCE_DIR ${FFTWD_SB_SRC}
-  BINARY_DIR ${FFTWD_SB_BUILD}
-  INSTALL_DIR ${SB_INSTALL_PREFIX}
-  DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
-  CMAKE_CACHE_ARGS
-  ${SB_CMAKE_CACHE_ARGS}
-    -DCMAKE_INSTALL_LIBDIR:PATH=lib
-    -DBUILD_TESTS:BOOL=OFF
-    -DDISABLE_FORTRAN:BOOL=ON
-    -DENABLE_THREADS:BOOL=ON
-    -DENABLE_SSE2:BOOL=ON
-    -DENABLE_FLOAT:BOOL=OFF
-    ${FFTW_SB_CONFIG}
-  DEPENDS FFTWF
-  LOG_DOWNLOAD 1
-  LOG_CONFIGURE 1
-  LOG_BUILD 1
-  LOG_INSTALL 1
-  )
+  # Compile the double version of FFTW
+  ExternalProject_Add(FFTWD
+    PREFIX FFTW/FFTWD
+    URL "https://fftw.org/fftw-3.3.10.tar.gz"
+    URL_MD5 8ccbf6a5ea78a16dbc3e1306e234cc5c
+    SOURCE_DIR ${FFTWD_SB_SRC}
+    BINARY_DIR ${FFTWD_SB_BUILD}
+    INSTALL_DIR ${SB_INSTALL_PREFIX}
+    DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
+    CMAKE_CACHE_ARGS
+    ${SB_CMAKE_CACHE_ARGS}
+      -DCMAKE_INSTALL_LIBDIR:PATH=lib
+      -DBUILD_TESTS:BOOL=OFF
+      -DDISABLE_FORTRAN:BOOL=ON
+      -DENABLE_THREADS:BOOL=ON
+      -DENABLE_SSE2:BOOL=ON
+      -DENABLE_FLOAT:BOOL=OFF
+      ${FFTW_SB_CONFIG}
+    DEPENDS FFTWF
+    LOG_DOWNLOAD 1
+    LOG_CONFIGURE 1
+    LOG_BUILD 1
+    LOG_INSTALL 1
+    )
 
-ExternalProject_Add(FFTW
-  PREFIX FFTW
-  DOWNLOAD_COMMAND ""
-  CONFIGURE_COMMAND ""
-  BUILD_COMMAND ""
-  INSTALL_COMMAND ""
-  DEPENDS FFTWD
-  )
+  ExternalProject_Add(FFTW
+    PREFIX FFTW
+    DOWNLOAD_COMMAND ""
+    CONFIGURE_COMMAND ""
+    BUILD_COMMAND ""
+    INSTALL_COMMAND ""
+    DEPENDS FFTWD
+    )
 
-set(_SB_FFTW_INCLUDE_PATH ${SB_INSTALL_PREFIX}/include)
+  set(_SB_FFTW_INCLUDE_PATH ${SB_INSTALL_PREFIX}/include)
+else()
+  message(STATUS "Compiling with FFTW disabled, otbOverlapSaveConvolutionImageFilter will not be available")
+endif()
diff --git a/SuperBuild/CMake/External_itk.cmake b/SuperBuild/CMake/External_itk.cmake
index 8357ad767e70e167bee71f21f8ad6c98856d2d7b..1e69a8572e5d616bfc40c3aa1a2a9efe32279231 100644
--- a/SuperBuild/CMake/External_itk.cmake
+++ b/SuperBuild/CMake/External_itk.cmake
@@ -114,19 +114,27 @@ foreach(ITK_MODULE ${ITK_ENABLED_MODULES})
 endforeach()
 
 # declare dependencies
-ADDTO_DEPENDENCIES_IF_NOT_SYSTEM(ITK ZLIB FFTW)
+# by default we don't distribute otb with fftw as it implies a GPLv2
+# contamination
+if (OTB_USE_FFTW)
+  ADDTO_DEPENDENCIES_IF_NOT_SYSTEM(ITK ZLIB FFTW)
+else()
+  ADDTO_DEPENDENCIES_IF_NOT_SYSTEM(ITK ZLIB)
+endif()
 ADD_SUPERBUILD_CMAKE_VAR(ITK ZLIB_INCLUDE_DIR)
 ADD_SUPERBUILD_CMAKE_VAR(ITK ZLIB_LIBRARY)
 
-# These variables are used in ITK to initialize the value of the ITK_USE_FFTW_XXX options
-list(APPEND ITK_SB_CONFIG
-  -DUSE_FFTWF:BOOL=ON
-  -DUSE_FFTWD:BOOL=ON
-  -DUSE_SYSTEM_FFTW:BOOL=ON
-  )
-ADD_SUPERBUILD_CMAKE_VAR(ITK FFTW_INCLUDE_PATH)
-ADD_SUPERBUILD_CMAKE_VAR(ITK FFTW_LIBRARIES)
-ADD_SUPERBUILD_CMAKE_VAR(ITK FFTWD_LIBRARIES)
+if (OTB_USE_FFTW)
+  # These variables are used in ITK to initialize the value of the ITK_USE_FFTW_XXX options
+  list(APPEND ITK_SB_CONFIG
+    -DUSE_FFTWF:BOOL=ON
+    -DUSE_FFTWD:BOOL=ON
+    -DUSE_SYSTEM_FFTW:BOOL=ON
+    )
+  ADD_SUPERBUILD_CMAKE_VAR(ITK FFTW_INCLUDE_PATH)
+  ADD_SUPERBUILD_CMAKE_VAR(ITK FFTW_LIBRARIES)
+  ADD_SUPERBUILD_CMAKE_VAR(ITK FFTWD_LIBRARIES)
+endif()
 
 if (WIN32)
   list(APPEND ITK_SB_CONFIG
@@ -169,4 +177,4 @@ ExternalProject_Add(ITK
   LOG_INSTALL 1
   )
 
-SUPERBUILD_PATCH_SOURCE(ITK)
\ No newline at end of file
+SUPERBUILD_PATCH_SOURCE(ITK)
diff --git a/SuperBuild/CMakeLists.txt b/SuperBuild/CMakeLists.txt
index f1bcd99adb4be7a09150538b48556bd231230e22..579b767bbfe468915a2682583177006fd1cb0ae9 100644
--- a/SuperBuild/CMakeLists.txt
+++ b/SuperBuild/CMakeLists.txt
@@ -22,6 +22,15 @@ cmake_minimum_required(VERSION 3.10.2)
 
 project(OTB-SuperBuild)
 
+if(POLICY CMP0135)
+  # avoid cmake warnings about missing DOWNLOAD_EXTRACT_TIMESTAMP
+  # when using ExternalProject_Add in External_<dep>.cmake files.
+  # As we also build on rhel and cmake version < 3.24 here,
+  # we need to use policy settings
+  cmake_policy(SET CMP0135 NEW)
+endif()
+
+
 set(CMAKE_CXX_STANDARD 14)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 set(CMAKE_CXX_EXTENSIONS OFF)
@@ -276,6 +285,7 @@ option(OTB_USE_CURL "Enable module Curl in OTB" ON)
 option(OTB_USE_SIFTFAST "Enable module Siftfast in OTB" ON)
 option(OTB_USE_GSL "Enable module GSL in OTB" ON)
 option(OTB_USE_LIBKML "Enable module libKML in OTB" OFF)
+option(OTB_USE_FFTW "Download and compile FFTW third party (license change to GPLv2)" OFF)
 #option() does not change the value in cache so we have to set the option via the set CACHE FORCE method
 if(OTB_BUILD_Learning MATCHES ON)
   set(OTB_USE_LIBSVM ON CACHE BOOL "Enable module LibSVM in OTB" FORCE)