diff --git a/Modules/UseSWIG.cmake b/Modules/UseSWIG.cmake
index a60e05e6ee49c68164e7b00b79e4469aec801aa6..b47a8cb055ddc877e5bbcd038f23c5ef381410f5 100644
--- a/Modules/UseSWIG.cmake
+++ b/Modules/UseSWIG.cmake
@@ -496,7 +496,8 @@ function(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
     endif()
   endif()
   if (SWIG_MODULE_${name}_LANGUAGE STREQUAL "PYTHON" AND NOT SWIG_MODULE_${name}_NOPROXY)
-    if(NOT ("-interface" IN_LIST swig_source_file_flags OR "-interface" IN_LIST SWIG_MODULE_${name}_EXTRA_FLAGS))
+    if(SWIG_USE_INTERFACE AND
+        NOT ("-interface" IN_LIST swig_source_file_flags OR "-interface" IN_LIST SWIG_MODULE_${name}_EXTRA_FLAGS))
       # This makes sure that the name used in the proxy code
       # matches the library name created by CMake
       list (APPEND SWIG_MODULE_${name}_EXTRA_FLAGS "-interface" "$<TARGET_FILE_PREFIX:${target_name}>$<TARGET_FILE_BASE_NAME:${target_name}>")
@@ -724,6 +725,13 @@ function(SWIG_ADD_LIBRARY name)
 
   set(swig_generated_sources)
   set(swig_generated_timestamps)
+  list(LENGTH swig_dot_i_sources swig_sources_count)
+  if (swig_sources_count GREATER "1")
+    # option -interface cannot be used
+    set(SWIG_USE_INTERFACE FALSE)
+  else()
+    set(SWIG_USE_INTERFACE TRUE)
+  endif()
   foreach(swig_it IN LISTS swig_dot_i_sources)
     SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source "${swig_it}")
     list (APPEND swig_generated_sources "${swig_generated_source}")
diff --git a/Tests/UseSWIG/CMakeLists.txt b/Tests/UseSWIG/CMakeLists.txt
index d10284674a3646007f175934940a254d876f7b49..cd04a4a7cb079b6ae75f859eb6c528206c8fad14 100644
--- a/Tests/UseSWIG/CMakeLists.txt
+++ b/Tests/UseSWIG/CMakeLists.txt
@@ -91,6 +91,15 @@ add_test(NAME UseSWIG.MultiplePython COMMAND
   --build-options ${build_options}
   --test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
   )
+add_test(NAME UseSWIG.MultipleFiles COMMAND
+  ${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
+  --build-and-test
+  "${CMake_SOURCE_DIR}/Tests/UseSWIG/MultipleFiles"
+  "${CMake_BINARY_DIR}/Tests/UseSWIG/MultipleFiles"
+  ${build_generator_args}
+  --build-project TestMultipleFiles
+  --build-options ${build_options}
+  )
 
 
 add_test(NAME UseSWIG.ModuleVersion2 COMMAND
diff --git a/Tests/UseSWIG/MultipleFiles/CMakeLists.txt b/Tests/UseSWIG/MultipleFiles/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..bf3d9469e1626b6cfb08d5265bf697101c649c4c
--- /dev/null
+++ b/Tests/UseSWIG/MultipleFiles/CMakeLists.txt
@@ -0,0 +1,30 @@
+cmake_minimum_required(VERSION 3.18)
+
+project(TestMultipleFiles CXX)
+
+find_package(SWIG REQUIRED)
+include(UseSWIG)
+
+unset(SWIG_LANG_TYPE)
+unset(SWIG_LANG_INCLUDE_DIRECTORIES)
+unset(SWIG_LANG_DEFINITIONS)
+unset(SWIG_LANG_OPTIONS)
+unset(SWIG_LANG_LIBRARIES)
+
+find_package(Python3 REQUIRED COMPONENTS Development)
+
+set_property(SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/add.i" PROPERTY CPLUSPLUS ON)
+set_property(SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/sub.i" PROPERTY CPLUSPLUS ON)
+set_property(SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/add.i" PROPERTY SWIG_MODULE_NAME _add)
+set_property(SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/sub.i" PROPERTY SWIG_MODULE_NAME _sub)
+
+
+swig_add_library(example
+                 LANGUAGE python
+                 TYPE MODULE
+                 SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/add.i"
+                         "${CMAKE_CURRENT_SOURCE_DIR}/sub.i"
+                         "${CMAKE_CURRENT_SOURCE_DIR}/add.cxx"
+                         "${CMAKE_CURRENT_SOURCE_DIR}/sub.cxx")
+target_include_directories(example PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
+target_link_libraries(example PRIVATE Python3::Module)
diff --git a/Tests/UseSWIG/MultipleFiles/add.cxx b/Tests/UseSWIG/MultipleFiles/add.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..a4dcca391d50ed1a83422959f26259dd63c5021f
--- /dev/null
+++ b/Tests/UseSWIG/MultipleFiles/add.cxx
@@ -0,0 +1,6 @@
+#include "add.h"
+
+int add(int a, int b)
+{
+  return a + b;
+}
diff --git a/Tests/UseSWIG/MultipleFiles/add.h b/Tests/UseSWIG/MultipleFiles/add.h
new file mode 100644
index 0000000000000000000000000000000000000000..6295ab95cdbf4b778cad0c707d1cc8743ca75801
--- /dev/null
+++ b/Tests/UseSWIG/MultipleFiles/add.h
@@ -0,0 +1 @@
+int add(int a, int b);
diff --git a/Tests/UseSWIG/MultipleFiles/add.i b/Tests/UseSWIG/MultipleFiles/add.i
new file mode 100644
index 0000000000000000000000000000000000000000..204639701a48eac18b70cbfcd8277e45d18a8d9a
--- /dev/null
+++ b/Tests/UseSWIG/MultipleFiles/add.i
@@ -0,0 +1,4 @@
+%{
+#include "add.h"
+%}
+%include "add.h"
diff --git a/Tests/UseSWIG/MultipleFiles/sub.cxx b/Tests/UseSWIG/MultipleFiles/sub.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..d6874ef1375f48357c9bb0e90b3b4bdb58916ff0
--- /dev/null
+++ b/Tests/UseSWIG/MultipleFiles/sub.cxx
@@ -0,0 +1,6 @@
+#include "sub.h"
+
+int sub(int a, int b)
+{
+  return a - b;
+}
diff --git a/Tests/UseSWIG/MultipleFiles/sub.h b/Tests/UseSWIG/MultipleFiles/sub.h
new file mode 100644
index 0000000000000000000000000000000000000000..de771117456bbc2bf9194a05472215ab93d9e916
--- /dev/null
+++ b/Tests/UseSWIG/MultipleFiles/sub.h
@@ -0,0 +1 @@
+int sub(int a, int b);
diff --git a/Tests/UseSWIG/MultipleFiles/sub.i b/Tests/UseSWIG/MultipleFiles/sub.i
new file mode 100644
index 0000000000000000000000000000000000000000..fc70f10676310fcf0b2bff1eaf9db36926c93a50
--- /dev/null
+++ b/Tests/UseSWIG/MultipleFiles/sub.i
@@ -0,0 +1,5 @@
+%{
+#include "sub.h"
+%}
+
+%include "sub.h"