Skip to content

Commit 734eb42

Browse files
committed
Add CMake version export
1 parent f51a34a commit 734eb42

File tree

5 files changed

+115
-0
lines changed

5 files changed

+115
-0
lines changed

cmake/flibcpp_version.cpp.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
extern "C" const char flibcpp_version_string[] = "@Flibcpp_VERSION@";

example/sort.f90

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,21 @@
55
program main
66
use ISO_FORTRAN_ENV
77
use, intrinsic :: ISO_C_BINDING
8+
use flc, only : get_flibcpp_version_string
89
use flc_algorithm, only : sort
910

1011
implicit none
1112
integer :: n = 10000
1213
real(c_double), dimension(:), allocatable :: x
1314

15+
write(*,*) "Flibcpp version ", get_flibcpp_version_string()
16+
1417
allocate(x(n))
1518
! TODO: fill randomly
1619
x = 1
1720
call sort(x)
21+
22+
write(*,*) "Success!"
1823
end program
1924

2025

src/flc.i

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,17 @@ using std::size_t;
5555
(const int32_t *DATA, size_t DATASIZE),
5656
(const int64_t *DATA, size_t DATASIZE),
5757
(const double *DATA, size_t DATASIZE) };
58+
59+
/************************
60+
* Version information
61+
*
62+
* Linked into auto-generated file flibcpp_version.cpp
63+
************************/
64+
65+
%apply const char* { const char flibcpp_version_string[] };
66+
67+
%inline %{
68+
extern "C" {
69+
extern const char flibcpp_version_string[];
70+
}
71+
%}

src/generated/flc.f90

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,56 @@ module flc
1414
private
1515

1616
! DECLARATION CONSTRUCTS
17+
type, bind(C) :: SwigArrayWrapper
18+
type(C_PTR), public :: data = C_NULL_PTR
19+
integer(C_SIZE_T), public :: size = 0
20+
end type
21+
public :: get_flibcpp_version_string
22+
23+
! WRAPPER DECLARATIONS
24+
interface
25+
function swigc_flibcpp_version_string_get() &
26+
bind(C, name="_wrap_flibcpp_version_string_get") &
27+
result(fresult)
28+
use, intrinsic :: ISO_C_BINDING
29+
import :: swigarraywrapper
30+
type(SwigArrayWrapper) :: fresult
31+
end function
32+
33+
subroutine SWIG_free(cptr) &
34+
bind(C, name="free")
35+
use, intrinsic :: ISO_C_BINDING
36+
type(C_PTR), value :: cptr
37+
end subroutine
38+
end interface
39+
40+
41+
contains
42+
! MODULE SUBPROGRAMS
43+
44+
subroutine SWIG_chararray_to_string(wrap, string)
45+
use, intrinsic :: ISO_C_BINDING
46+
type(SwigArrayWrapper), intent(IN) :: wrap
47+
character(kind=C_CHAR, len=:), allocatable, intent(OUT) :: string
48+
character(kind=C_CHAR), dimension(:), pointer :: chars
49+
integer(kind=C_SIZE_T) :: i
50+
call c_f_pointer(wrap%data, chars, [wrap%size])
51+
allocate(character(kind=C_CHAR, len=wrap%size) :: string)
52+
do i=1, wrap%size
53+
string(i:i) = chars(i)
54+
end do
55+
end subroutine
56+
57+
function get_flibcpp_version_string() &
58+
result(swig_result)
59+
use, intrinsic :: ISO_C_BINDING
60+
character(kind=C_CHAR, len=:), allocatable :: swig_result
61+
type(SwigArrayWrapper) :: fresult
62+
63+
fresult = swigc_flibcpp_version_string_get()
64+
call SWIG_chararray_to_string(fresult, swig_result)
65+
if (.false.) call SWIG_free(fresult%data)
66+
end function
67+
1768

1869
end module

src/generated/flcFORTRAN_wrap.cxx

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,50 @@ using std::size_t;
221221

222222
#include <stdint.h>
223223

224+
225+
extern "C" {
226+
extern const char flibcpp_version_string[];
227+
}
228+
229+
230+
#include <stdlib.h>
231+
#ifdef _MSC_VER
232+
# ifndef strtoull
233+
# define strtoull _strtoui64
234+
# endif
235+
# ifndef strtoll
236+
# define strtoll _strtoi64
237+
# endif
238+
#endif
239+
240+
241+
struct SwigArrayWrapper {
242+
void* data;
243+
size_t size;
244+
};
245+
246+
247+
SWIGINTERN SwigArrayWrapper SwigArrayWrapper_uninitialized() {
248+
SwigArrayWrapper result;
249+
result.data = NULL;
250+
result.size = 0;
251+
return result;
252+
}
253+
254+
255+
#include <string.h>
256+
224257
extern "C" {
258+
SWIGEXPORT SwigArrayWrapper _wrap_flibcpp_version_string_get() {
259+
SwigArrayWrapper fresult ;
260+
char *result = 0 ;
261+
262+
result = (char *)(char *)flibcpp_version_string;
263+
fresult.size = strlen(reinterpret_cast< const char* >(result));
264+
fresult.data = const_cast< char * >(result);
265+
return fresult;
266+
}
267+
268+
225269
} // extern
226270

0 commit comments

Comments
 (0)