Skip to content

Commit d7c3725

Browse files
committed
Extend and improve version support
Requires SWIG a9a2d6a239319757a599862319952e5cef767b6f
1 parent 734eb42 commit d7c3725

File tree

8 files changed

+67
-17
lines changed

8 files changed

+67
-17
lines changed

.gitattributes

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/.* export-ignore
2+
/cmake/git-version.txt export-subst

CMakeLists.txt

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,38 @@ else()
6060
endif()
6161

6262
#---------------------------------------------------------------------------#
63-
# GIT
63+
# VERSIONING
6464
#---------------------------------------------------------------------------#
6565

66+
67+
# Get a possible Git version generated using git-archive (see the .gitattributes
68+
# file)
69+
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/git-version.txt"
70+
FLIBCPP_VERSION_STRING)
71+
72+
if (NOT FLIBCPP_VERSION_STRING MATCHES "\\$Format:")
73+
# First line are decorators, second is hash
74+
list(GET FLIBCPP_VERSION_STRING 0 _tag)
75+
string(REGEX REPLACE ".*, *(tag: *)?" "" _tag "${_tag}")
76+
list(GET FLIBCPP_VERSION_STRING 1 _hash)
77+
string(REGEX REPLACE " +" "" _hash "${_hash}")
78+
set(FLIBCPP_VERSION_STRING "${_tag}-g${_hash}")
79+
else()
80+
find_package(Git)
81+
if (Git_FOUND)
82+
execute_process(
83+
COMMAND "${GIT_EXECUTABLE}" "describe"
84+
ERROR_QUIET
85+
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
86+
OUTPUT_VARIABLE FLIBCPP_VERSION_STRING
87+
OUTPUT_STRIP_TRAILING_WHITESPACE
88+
)
89+
else()
90+
set(FLIBCPP_VERSION_STRING "${Flibcpp_VERSION}")
91+
endif()
92+
endif()
93+
94+
6695
set(FLIBCPP_VERSION_CPP "${CMAKE_CURRENT_BINARY_DIR}/flibcpp_version.cpp")
6796
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/flibcpp_version.cpp.in"
6897
"${FLIBCPP_VERSION_CPP}" @ONLY)
@@ -88,8 +117,6 @@ function(swig_fortran_add_module name)
88117
set_property(SOURCE src/${name}.i
89118
PROPERTY USE_TARGET_INCLUDE_DIRECTORIES ON)
90119

91-
message(STATUS "Extra sources for ${name}: ${ARGN}")
92-
93120
if (FLIBCPP_USE_SWIG)
94121
# SWIG is available; actually generate the library dynamically.
95122
# Create the library
@@ -158,7 +185,6 @@ install(EXPORT Flibcpp-targets
158185
# Create a ConfigVersion.cmake file
159186
include(CMakePackageConfigHelpers)
160187

161-
message(STATUS "Libraries: ${FLIBCPP_LIBRARIES}")
162188
configure_package_config_file(
163189
${CMAKE_CURRENT_LIST_DIR}/cmake/FlibcppConfig.cmake.in
164190
${CMAKE_CURRENT_BINARY_DIR}/FlibcppConfig.cmake

cmake/flibcpp_version.cpp.in

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
extern "C" const char flibcpp_version_string[] = "@Flibcpp_VERSION@";
1+
extern "C" const char flibcpp_version[] = "@FLIBCPP_VERSION_STRING@";
2+
extern "C" const int flibcpp_version_major = @PROJECT_VERSION_MAJOR@;
3+
extern "C" const int flibcpp_version_minor = @PROJECT_VERSION_MINOR@;
4+
extern "C" const int flibcpp_version_patch = @PROJECT_VERSION_PATCH@;

cmake/git-version.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
$Format:%D$
2+
$Format:%h$

example/sort.f90

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,16 @@
55
program main
66
use ISO_FORTRAN_ENV
77
use, intrinsic :: ISO_C_BINDING
8-
use flc, only : get_flibcpp_version_string
8+
use flc
99
use flc_algorithm, only : sort
1010

1111
implicit none
1212
integer :: n = 10000
1313
real(c_double), dimension(:), allocatable :: x
1414

15-
write(*,*) "Flibcpp version ", get_flibcpp_version_string()
15+
write(*,"(a, 2(i1,'.'), (i1))") "Flibcpp version number: ", &
16+
flibcpp_version_major, flibcpp_version_minor, flibcpp_version_patch
17+
write(*,*) "Flibcpp version string: ", get_flibcpp_version()
1618

1719
allocate(x(n))
1820
! TODO: fill randomly

src/flc.i

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,16 @@ using std::size_t;
6262
* Linked into auto-generated file flibcpp_version.cpp
6363
************************/
6464

65-
%apply const char* { const char flibcpp_version_string[] };
65+
%apply const char* { const char flibcpp_version[] };
66+
%fortranbindc flibcpp_version_major;
67+
%fortranbindc flibcpp_version_minor;
68+
%fortranbindc flibcpp_version_patch;
6669

6770
%inline %{
6871
extern "C" {
69-
extern const char flibcpp_version_string[];
72+
extern const char flibcpp_version[];
73+
extern const int flibcpp_version_major;
74+
extern const int flibcpp_version_minor;
75+
extern const int flibcpp_version_patch;
7076
}
7177
%}

src/generated/flc.f90

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,18 @@ module flc
1818
type(C_PTR), public :: data = C_NULL_PTR
1919
integer(C_SIZE_T), public :: size = 0
2020
end type
21-
public :: get_flibcpp_version_string
21+
public :: get_flibcpp_version
22+
integer(C_INT), protected, public, &
23+
bind(C, name="flibcpp_version_major") :: flibcpp_version_major
24+
integer(C_INT), protected, public, &
25+
bind(C, name="flibcpp_version_minor") :: flibcpp_version_minor
26+
integer(C_INT), protected, public, &
27+
bind(C, name="flibcpp_version_patch") :: flibcpp_version_patch
2228

2329
! WRAPPER DECLARATIONS
2430
interface
25-
function swigc_flibcpp_version_string_get() &
26-
bind(C, name="_wrap_flibcpp_version_string_get") &
31+
function swigc_flibcpp_version_get() &
32+
bind(C, name="_wrap_flibcpp_version_get") &
2733
result(fresult)
2834
use, intrinsic :: ISO_C_BINDING
2935
import :: swigarraywrapper
@@ -54,13 +60,13 @@ subroutine SWIG_chararray_to_string(wrap, string)
5460
end do
5561
end subroutine
5662

57-
function get_flibcpp_version_string() &
63+
function get_flibcpp_version() &
5864
result(swig_result)
5965
use, intrinsic :: ISO_C_BINDING
6066
character(kind=C_CHAR, len=:), allocatable :: swig_result
6167
type(SwigArrayWrapper) :: fresult
6268

63-
fresult = swigc_flibcpp_version_string_get()
69+
fresult = swigc_flibcpp_version_get()
6470
call SWIG_chararray_to_string(fresult, swig_result)
6571
if (.false.) call SWIG_free(fresult%data)
6672
end function

src/generated/flcFORTRAN_wrap.cxx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,10 @@ using std::size_t;
223223

224224

225225
extern "C" {
226-
extern const char flibcpp_version_string[];
226+
extern const char flibcpp_version[];
227+
extern const int flibcpp_version_major;
228+
extern const int flibcpp_version_minor;
229+
extern const int flibcpp_version_patch;
227230
}
228231

229232

@@ -255,11 +258,11 @@ SWIGINTERN SwigArrayWrapper SwigArrayWrapper_uninitialized() {
255258
#include <string.h>
256259

257260
extern "C" {
258-
SWIGEXPORT SwigArrayWrapper _wrap_flibcpp_version_string_get() {
261+
SWIGEXPORT SwigArrayWrapper _wrap_flibcpp_version_get() {
259262
SwigArrayWrapper fresult ;
260263
char *result = 0 ;
261264

262-
result = (char *)(char *)flibcpp_version_string;
265+
result = (char *)(char *)flibcpp_version;
263266
fresult.size = strlen(reinterpret_cast< const char* >(result));
264267
fresult.data = const_cast< char * >(result);
265268
return fresult;

0 commit comments

Comments
 (0)