Commit 0c2fb4c8 authored by Rishi Theivendran's avatar Rishi Theivendran Committed by Brad King

UseSWIG: Add CSHARP variant for wrapper files

Issue: #18065
Fixes: #18066
parent 90ebc32d
......@@ -189,6 +189,9 @@ Modules
``UseSWIG_MODULE_VERSION`` variable to ensure legacy support as well as more
robust handling of ``SWIG`` advanced features (like ``%template``).
* The :module:`UseSWIG` module learned to support CSHARP variant
wrapper files.
* The :module:`WriteCompilerDetectionHeader` module gained a ``BARE_FEATURES``
option to add a compatibility define for the exact keyword of a new language
feature.
......
......@@ -189,6 +189,7 @@ set(SWIG_EXTRA_LIBRARIES "")
set(SWIG_PYTHON_EXTRA_FILE_EXTENSIONS ".py")
set(SWIG_JAVA_EXTRA_FILE_EXTENSIONS ".java" "JNI.java")
set(SWIG_CSHARP_EXTRA_FILE_EXTENSIONS ".cs" "PINVOKE.cs")
##
## PRIVATE functions
......@@ -263,10 +264,14 @@ function(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
endif()
foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSIONS})
set(extra_file "${generatedpath}/${module_basename}${it}")
if (extra_file MATCHES "\\.cs$")
set_source_files_properties(${extra_file} PROPERTIES LANGUAGE "CSharp")
else()
# Treat extra outputs as plain files regardless of language.
set_source_files_properties(${extra_file} PROPERTIES LANGUAGE "")
endif()
list(APPEND files "${extra_file}")
endforeach()
# Treat extra outputs as plain files regardless of language.
set_source_files_properties(${files} PROPERTIES LANGUAGE "")
set (${outfiles} ${files} PARENT_SCOPE)
endfunction()
......
......@@ -15,6 +15,9 @@ unset(SWIG_LANG_DEFINITIONS)
unset(SWIG_LANG_OPTIONS)
unset(SWIG_LANG_LIBRARIES)
if(${language} MATCHES csharp)
set(SWIG_LANG_TYPE TYPE SHARED)
endif()
if(${language} MATCHES python)
find_package(Python REQUIRED COMPONENTS Interpreter Development)
set(SWIG_LANG_INCLUDE_DIRECTORIES ${Python_INCLUDE_DIRS})
......@@ -76,4 +79,5 @@ SWIG_ADD_LIBRARY(example
${SWIG_LANG_TYPE}
SOURCES "${CMAKE_CURRENT_LIST_DIR}/example.i"
"${CMAKE_CURRENT_LIST_DIR}/example.cxx")
TARGET_INCLUDE_DIRECTORIES(example PUBLIC ${CMAKE_CURRENT_LIST_DIR})
TARGET_LINK_LIBRARIES(example PRIVATE ${SWIG_LANG_LIBRARIES})
cmake_minimum_required(VERSION 3.12)
project(TestBasicCsharp CXX CSharp)
include(CTest)
set(language "csharp")
include (../BasicConfiguration.cmake)
set_source_files_properties(Square.cs Circle.cs Shape.cs PROPERTIES GENERATED 1)
add_library(example_cs SHARED $<TARGET_PROPERTY:example,SWIG_SUPPORT_FILES> Square.cs Circle.cs Shape.cs)
set_target_properties(example_cs PROPERTIES LINKER_LANGUAGE CSharp)
target_link_libraries(example_cs example)
add_executable(runme ${CMAKE_CURRENT_SOURCE_DIR}/../runme.cs)
target_link_libraries(runme example_cs)
set_target_properties(runme PROPERTIES LINKER_LANGUAGE CSharp)
add_test (NAME BasicCsharp
COMMAND $<TARGET_FILE:runme>)
......@@ -19,6 +19,20 @@ add_test(NAME UseSWIG.LegacyPerl COMMAND
--test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
)
include(CheckLanguage)
check_language(CSharp)
if (CMAKE_CSharp_COMPILER)
add_test(NAME UseSWIG.BasicCsharp COMMAND
${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
--build-and-test
"${CMake_SOURCE_DIR}/Tests/UseSWIG/BasicCsharp"
"${CMake_BINARY_DIR}/Tests/UseSWIG/BasicCsharp"
${build_generator_args}
--build-project TestBasicCsharp
--build-options ${build_options}
--test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
)
endif()
add_test(NAME UseSWIG.BasicPython COMMAND
${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
......
using System;
using System.Collections.Generic;
public class runme
{
static void Main()
{
// ----- Object creation -----
Console.WriteLine("Creating some objects:");
Circle c = new Circle(10);
Console.WriteLine(" Created " + c);
Square s = new Square(10);
Console.WriteLine(" Created " + s);
// ----- Access a static member -----
Console.WriteLine("\nA total of " + Shape.nshapes + " shapes were created");
// ----- Member data access -----
// Set the location of the object
c.x = 20;
c.y = 30;
s.x = -10;
s.y = 5;
Console.WriteLine("\nHere is their current position:");
Console.WriteLine(" Circle = ({0}, {1})", c.x,c.y);
Console.WriteLine(" Square = ({0}, {1})", s.x,s.y);
// ----- Call some methods -----
Console.WriteLine("\nHere are some properties of the shapes:");
List <Shape> shapeList = new List <Shape> { c,s };
foreach(var o in shapeList){
Console.WriteLine(" " + o);
Console.WriteLine(" area = " + o.area());
Console.WriteLine(" perimeter = " + o.perimeter());
}
Console.WriteLine("\nGuess I'll clean up now");
// Note: this invokes the virtual destructor
c.Dispose();
s.Dispose();
s = new Square(10);;
Console.WriteLine(Shape.nshapes + " shapes remain");
Console.WriteLine("Goodbye");
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment