@@ -234,15 +234,27 @@ as well as ``SWIG``:
234
234
set(SWIG_SOURCE_FILE_EXTENSIONS ".i" ".swg")
235
235
#]=======================================================================]
236
236
237
+ cmake_policy (GET CMP0078 target_name_policy )
238
+ cmake_policy (GET CMP0086 module_name_policy )
239
+
237
240
cmake_policy (VERSION 3.12 )
241
+ if (target_name_policy )
242
+ # respect user choice regarding CMP0078 policy
243
+ cmake_policy (SET CMP0078 ${target_name_policy} )
244
+ endif ()
245
+ if (module_name_policy )
246
+ # respect user choice regarding CMP0086 policy
247
+ cmake_policy (SET CMP0086 ${module_name_policy} )
248
+ endif ()
249
+ unset (target_name_policy )
250
+ unset (module_name_policy )
238
251
239
252
set (SWIG_CXX_EXTENSION "cxx" )
240
253
set (SWIG_EXTRA_LIBRARIES "" )
241
254
242
255
set (SWIG_PYTHON_EXTRA_FILE_EXTENSIONS ".py" )
243
256
set (SWIG_JAVA_EXTRA_FILE_EXTENSIONS ".java" "JNI.java" )
244
257
set (SWIG_CSHARP_EXTRA_FILE_EXTENSIONS ".cs" "PINVOKE.cs" )
245
- set (SWIG_FORTRAN_EXTRA_FILE_EXTENSIONS ".f90" )
246
258
247
259
set (SWIG_MANAGE_SUPPORT_FILES_SCRIPT "${CMAKE_CURRENT_LIST_DIR} /UseSWIG/ManageSupportFiles.cmake" )
248
260
@@ -322,15 +334,30 @@ function(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
322
334
set (extra_file "${generatedpath} /${module_basename}${it} " )
323
335
if (extra_file MATCHES "\\ .cs$" AND CMAKE_CSharp_COMPILER_LOADED )
324
336
set_source_files_properties (${extra_file} PROPERTIES LANGUAGE "CSharp" )
325
- elseif (extra_file MATCHES "\\ .f90$" AND CMAKE_Fortran_COMPILER_LOADED )
326
- set_source_files_properties (${extra_file} PROPERTIES LANGUAGE "Fortran" )
327
337
else ()
328
338
# Treat extra outputs as plain files regardless of language.
329
339
set_source_files_properties (${extra_file} PROPERTIES LANGUAGE "" )
330
340
endif ()
331
341
list (APPEND files "${extra_file} " )
332
342
endforeach ()
333
343
344
+ if (language STREQUAL "FORTRAN" AND CMAKE_Fortran_COMPILER_LOADED )
345
+ # Process possible user-supplied extension in flags (obtained via parent
346
+ # scope variable) to determine the source file name.
347
+ list (FIND SWIG_COMPILATION_FLAGS "-fext" fext_idx )
348
+ if (fext_idx EQUAL -1 )
349
+ # Default Fortran generated extension
350
+ set (fext "f90" )
351
+ else ()
352
+ # Get extension from user-provided flag
353
+ math (EXPR fext_idx "${fext_idx} + 1" )
354
+ list (GET SWIG_COMPILATION_FLAGS "${fext_idx} " fext )
355
+ endif ()
356
+ set (extra_file "${generatedpath} /${module_basename} .${fext} " )
357
+ set_source_files_properties ("${extra_file} " PROPERTIES LANGUAGE "Fortran" )
358
+ list (APPEND files "${extra_file} " )
359
+ endif ()
360
+
334
361
set (${outfiles} ${files} PARENT_SCOPE )
335
362
endfunction ()
336
363
@@ -405,6 +432,7 @@ function(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
405
432
get_filename_component (swig_source_file_fullname "${infile} " ABSOLUTE )
406
433
407
434
if (NOT SWIG_MODULE_${name}_NOPROXY )
435
+ set (SWIG_COMPILATION_FLAGS ${swig_source_file_flags} )
408
436
SWIG_GET_EXTRA_OUTPUT_FILES (${SWIG_MODULE_${name}_LANGUAGE}
409
437
swig_extra_generated_files
410
438
"${outdir} "
@@ -438,20 +466,32 @@ function(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
438
466
list (APPEND swig_special_flags "-c++" )
439
467
endif ()
440
468
441
- set ( module_name_policy "NEW" )
469
+ cmake_policy ( GET CMP0086 module_name_policy )
442
470
if (module_name_policy STREQUAL "NEW" )
443
471
get_source_file_property (module_name "${infile} " SWIG_MODULE_NAME )
444
472
if (module_name )
445
473
list (APPEND swig_special_flags "-module" "${module_name} " )
446
474
endif ()
475
+ else ()
476
+ if (NOT module_name_policy )
477
+ cmake_policy (GET_WARNING CMP0086 _cmp0086_warning )
478
+ message (AUTHOR_WARNING "${_cmp0086_warning} \n " )
479
+ endif ()
447
480
endif ()
448
481
449
482
set (swig_extra_flags )
450
483
if (SWIG_MODULE_${name}_LANGUAGE STREQUAL "CSHARP" )
451
484
if (NOT ("-dllimport" IN_LIST swig_source_file_flags OR "-dllimport" IN_LIST SWIG_MODULE_${name}_EXTRA_FLAGS ))
452
485
# This makes sure that the name used in the generated DllImport
453
486
# matches the library name created by CMake
454
- list (APPEND SWIG_MODULE_${name}_EXTRA_FLAGS "-dllimport" "${name} " )
487
+ list (APPEND SWIG_MODULE_${name}_EXTRA_FLAGS "-dllimport" "$<TARGET_FILE_PREFIX:${target_name} >$<TARGET_FILE_BASE_NAME:${target_name} >" )
488
+ endif ()
489
+ endif ()
490
+ if (SWIG_MODULE_${name}_LANGUAGE STREQUAL "PYTHON" AND NOT SWIG_MODULE_${name}_NOPROXY )
491
+ if (NOT ("-interface" IN_LIST swig_source_file_flags OR "-interface" IN_LIST SWIG_MODULE_${name}_EXTRA_FLAGS ))
492
+ # This makes sure that the name used in the proxy code
493
+ # matches the library name created by CMake
494
+ list (APPEND SWIG_MODULE_${name}_EXTRA_FLAGS "-interface" "$<TARGET_FILE_PREFIX:${target_name} >$<TARGET_FILE_BASE_NAME:${target_name} >" )
455
495
endif ()
456
496
endif ()
457
497
list (APPEND swig_extra_flags ${SWIG_MODULE_${name}_EXTRA_FLAGS} )
@@ -576,11 +616,12 @@ function(SWIG_ADD_LIBRARY name)
576
616
unset (_SAM_TYPE )
577
617
endif ()
578
618
579
- set ( target_name_policy "NEW" )
619
+ cmake_policy ( GET CMP0078 target_name_policy )
580
620
if (target_name_policy STREQUAL "NEW" )
581
621
set (UseSWIG_TARGET_NAME_PREFERENCE STANDARD )
582
622
else ()
583
623
if (NOT target_name_policy )
624
+ cmake_policy (GET_WARNING CMP0078 _cmp0078_warning )
584
625
message (AUTHOR_WARNING "${_cmp0078_warning} \n " )
585
626
endif ()
586
627
if (NOT DEFINED UseSWIG_TARGET_NAME_PREFERENCE )
@@ -685,9 +726,9 @@ function(SWIG_ADD_LIBRARY name)
685
726
endif ()
686
727
endforeach ()
687
728
set_property (DIRECTORY APPEND PROPERTY
688
- ADDITIONAL_MAKE_CLEAN_FILES ${swig_generated_sources} ${swig_generated_timestamps} )
729
+ ADDITIONAL_CLEAN_FILES ${swig_generated_sources} ${swig_generated_timestamps} )
689
730
if (UseSWIG_MODULE_VERSION VERSION_GREATER 1 )
690
- set_property (DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${outputdir} " )
731
+ set_property (DIRECTORY APPEND PROPERTY ADDITIONAL_CLEAN_FILES "${outputdir} " )
691
732
endif ()
692
733
693
734
add_library (${target_name}
@@ -706,8 +747,6 @@ function(SWIG_ADD_LIBRARY name)
706
747
if (swig_lowercase_language STREQUAL "octave" )
707
748
set_target_properties (${target_name} PROPERTIES PREFIX "" )
708
749
set_target_properties (${target_name} PROPERTIES SUFFIX ".oct" )
709
- elseif (swig_lowercase_language STREQUAL "fortran" )
710
- # XXX
711
750
elseif (swig_lowercase_language STREQUAL "go" )
712
751
set_target_properties (${target_name} PROPERTIES PREFIX "" )
713
752
elseif (swig_lowercase_language STREQUAL "java" )
@@ -766,6 +805,8 @@ function(SWIG_ADD_LIBRARY name)
766
805
if (APPLE )
767
806
set_target_properties (${target_name} PROPERTIES SUFFIX ".dylib" )
768
807
endif ()
808
+ elseif (swig_lowercase_language STREQUAL "fortran" )
809
+ # Do *not* override the target's library prefix
769
810
else ()
770
811
# assume empty prefix because we expect the module to be dynamically loaded
771
812
set_target_properties (${target_name} PROPERTIES PREFIX "" )
0 commit comments