mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-06 05:40:54 -06:00
Merge branch 'UseSWIG-csharp-variant' into release-3.12
Merge-request: !2137
This commit is contained in:
@@ -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})
|
||||
|
||||
21
Tests/UseSWIG/BasicCsharp/CMakeLists.txt
Normal file
21
Tests/UseSWIG/BasicCsharp/CMakeLists.txt
Normal file
@@ -0,0 +1,21 @@
|
||||
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>
|
||||
|
||||
54
Tests/UseSWIG/runme.cs
Normal file
54
Tests/UseSWIG/runme.cs
Normal file
@@ -0,0 +1,54 @@
|
||||
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");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user