Merge remote-tracking branch 'origin/libfyaml' into development
This commit is contained in:
commit
87b5097ffe
|
@ -29,9 +29,10 @@ add_definitions("-D${DAMASK_SOLVER}")
|
|||
|
||||
# EXPERIMENTAL: This might help to detect HDF5 and FFTW3 in the future if PETSc is not aware of them
|
||||
set(ENV{PKG_CONFIG_PATH} "$ENV{PETSC_DIR}/$ENV{PETSC_ARCH}/externalpackages:$ENV{PKG_CONFIG_PATH}")
|
||||
message($ENV{PKG_CONFIG_PATH})
|
||||
pkg_check_modules(HDF5 hdf5)
|
||||
pkg_check_modules(FFTW3 fftw3)
|
||||
pkg_check_modules(fYAML libfyaml)
|
||||
pkg_check_modules(zlib zlib)
|
||||
|
||||
file(STRINGS ${PROJECT_SOURCE_DIR}/VERSION DAMASK_VERSION)
|
||||
|
||||
|
@ -116,7 +117,17 @@ if(CMAKE_BUILD_TYPE STREQUAL "DEBUG")
|
|||
endif()
|
||||
|
||||
set(CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE} "${CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE}} ${PETSC_INCLUDES} ${BUILDCMD_POST}")
|
||||
set(CMAKE_Fortran_LINK_EXECUTABLE "${CMAKE_Fortran_LINK_EXECUTABLE} <OBJECTS> -o <TARGET> <LINK_LIBRARIES> -L${PETSC_LIBRARY_DIRS} -lpetsc ${PETSC_EXTERNAL_LIB} -lz ${BUILDCMD_POST}")
|
||||
|
||||
set(CMAKE_Fortran_LINK_EXECUTABLE "${CMAKE_Fortran_LINK_EXECUTABLE} <OBJECTS> -o <TARGET> <LINK_LIBRARIES> -L${PETSC_LIBRARY_DIRS} -lpetsc ${PETSC_EXTERNAL_LIB} -lz")
|
||||
|
||||
if(fYAML_FOUND STREQUAL "1")
|
||||
set(CMAKE_Fortran_LINK_EXECUTABLE "${CMAKE_Fortran_LINK_EXECUTABLE} -L${fYAML_LIBRARY_DIRS} -l${fYAML_LIBRARIES}")
|
||||
add_definitions(-DFYAML)
|
||||
pkg_get_variable(fYAML_INCLUDE_DIR libfyaml includedir) # fYAML_INCLUDE_DIRS and fYAML_CFLAGS are not working
|
||||
set(CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE} "${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}} -I${fYAML_INCLUDE_DIR}")
|
||||
endif()
|
||||
|
||||
set(CMAKE_Fortran_LINK_EXECUTABLE "${CMAKE_Fortran_LINK_EXECUTABLE} ${BUILDCMD_POST}")
|
||||
|
||||
message("Fortran Compiler Flags:\n${CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE}}\n")
|
||||
message("C Compiler Flags:\n${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}}\n")
|
||||
|
|
|
@ -7,7 +7,11 @@
|
|||
#include <pwd.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include "zlib.h"
|
||||
#include <zlib.h>
|
||||
|
||||
#ifdef FYAML
|
||||
#include <libfyaml.h>
|
||||
#endif
|
||||
|
||||
#define PATHLEN 4096
|
||||
#define STRLEN 256
|
||||
|
@ -80,3 +84,26 @@ void inflate_c(const uLong *s_deflated, const uLong *s_inflated, const Byte defl
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef FYAML
|
||||
void to_flow_c(char **flow, int* length_flow, const char *mixed){
|
||||
struct fy_document *fyd = NULL;
|
||||
enum fy_emitter_cfg_flags emit_flags = FYECF_MODE_FLOW_ONELINE | FYECF_STRIP_LABELS | FYECF_STRIP_DOC;
|
||||
|
||||
fyd = fy_document_build_from_string(NULL, mixed, -1);
|
||||
if (!fyd) {
|
||||
*length_flow = -1;
|
||||
return;
|
||||
}
|
||||
int err = fy_document_resolve(fyd);
|
||||
if (err) {
|
||||
*length_flow = -1;
|
||||
return;
|
||||
}
|
||||
|
||||
*flow = fy_emit_document_to_string(fyd,emit_flags);
|
||||
*length_flow = strlen(*flow);
|
||||
|
||||
fy_document_destroy(fyd);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -483,7 +483,9 @@ subroutine IO_error(error_ID,el,ip,g,instance,ext_msg)
|
|||
case (701)
|
||||
msg = 'Incorrect indent/Null value not allowed'
|
||||
case (702)
|
||||
msg = 'Invalid use of flow yaml'
|
||||
msg = 'Invalid use of flow YAML'
|
||||
case (703)
|
||||
msg = 'Invalid YAML'
|
||||
case (704)
|
||||
msg = 'Space expected after a colon for <key>: <value> pair'
|
||||
case (705)
|
||||
|
|
|
@ -8,6 +8,9 @@ module YAML_parse
|
|||
use prec
|
||||
use IO
|
||||
use YAML_types
|
||||
#ifdef FYAML
|
||||
use system_routines
|
||||
#endif
|
||||
|
||||
implicit none
|
||||
private
|
||||
|
@ -16,14 +19,34 @@ module YAML_parse
|
|||
YAML_parse_init, &
|
||||
YAML_parse_str
|
||||
|
||||
#ifdef FYAML
|
||||
interface
|
||||
|
||||
subroutine to_flow_C(flow,length_flow,mixed) bind(C)
|
||||
use, intrinsic :: ISO_C_Binding, only: C_INT, C_CHAR, C_PTR
|
||||
|
||||
type(C_PTR), intent(out) :: flow
|
||||
integer(C_INT), intent(out) :: length_flow
|
||||
character(kind=C_CHAR), dimension(*), intent(in) :: mixed
|
||||
end subroutine to_flow_C
|
||||
|
||||
end interface
|
||||
#endif
|
||||
|
||||
|
||||
contains
|
||||
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
!> @brief Do sanity checks.
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
subroutine YAML_parse_init
|
||||
subroutine YAML_parse_init()
|
||||
|
||||
call selfTest
|
||||
print'(/,1x,a)', '<<<+- YAML_parse init -+>>>'
|
||||
#ifdef FYAML
|
||||
print'(/,1x,a)', 'libfyaml powered'
|
||||
#else
|
||||
call selfTest()
|
||||
#endif
|
||||
|
||||
end subroutine YAML_parse_init
|
||||
|
||||
|
@ -155,8 +178,37 @@ logical function quotedString(line)
|
|||
end function quotedString
|
||||
|
||||
|
||||
#ifdef FYAML
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
! @brief Returns Indentation.
|
||||
! @brief Convert all block style YAML parts to flow style.
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
function to_flow(mixed) result(flow)
|
||||
|
||||
character(len=*), intent(in) :: mixed
|
||||
character(:,C_CHAR), allocatable :: flow
|
||||
|
||||
type(C_PTR) :: str_ptr
|
||||
integer(C_INT) :: strlen
|
||||
|
||||
|
||||
call to_flow_C(str_ptr,strlen,f_c_string(mixed))
|
||||
if (strlen < 1) call IO_error(703,ext_msg='libyfaml')
|
||||
allocate(character(len=strlen,kind=c_char) :: flow)
|
||||
|
||||
block
|
||||
character(len=strlen,kind=c_char), pointer :: s
|
||||
call c_f_pointer(str_ptr,s)
|
||||
flow = s
|
||||
end block
|
||||
|
||||
call free_C(str_ptr)
|
||||
|
||||
end function to_flow
|
||||
|
||||
|
||||
#else
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
! @brief Determine Indentation.
|
||||
! @details It determines the indentation level for a given block/line.
|
||||
! In cases for nested lists, an offset is added to determine the indent of the item block (skip
|
||||
! leading dashes)
|
||||
|
@ -737,7 +789,7 @@ end subroutine
|
|||
|
||||
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
! @brief convert all block style YAML parts to flow style
|
||||
! @brief Convert all block style YAML parts to flow style.
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
function to_flow(blck)
|
||||
|
||||
|
@ -921,5 +973,6 @@ subroutine selfTest
|
|||
end block basic_mixed
|
||||
|
||||
end subroutine selfTest
|
||||
#endif
|
||||
|
||||
end module YAML_parse
|
||||
|
|
|
@ -17,7 +17,9 @@ module system_routines
|
|||
getUserName, &
|
||||
signalterm_C, &
|
||||
signalusr1_C, &
|
||||
signalusr2_C
|
||||
signalusr2_C, &
|
||||
f_c_string, &
|
||||
free_C
|
||||
|
||||
|
||||
interface
|
||||
|
@ -71,6 +73,12 @@ module system_routines
|
|||
type(C_FUNPTR), intent(in), value :: handler
|
||||
end subroutine signalusr2_C
|
||||
|
||||
subroutine free_C(ptr) bind(C,name='free')
|
||||
import c_ptr
|
||||
type(c_ptr), value :: ptr
|
||||
end subroutine free_C
|
||||
|
||||
|
||||
end interface
|
||||
|
||||
contains
|
||||
|
|
Loading…
Reference in New Issue