diff options
author | Arun Isaac | 2021-02-10 14:25:53 +0530 |
---|---|---|
committer | Arun Isaac | 2021-02-10 14:53:45 +0530 |
commit | 7b74734e6b9356cf4208950ba254b75d756aec5b (patch) | |
tree | fa11af8ed06a289e5d9c175e27f360e6f834f7b9 /CMakeLists.txt | |
parent | e3cdcaf807ff3833f2a9ef642301bcaa3172a8ad (diff) | |
download | nsmc-7b74734e6b9356cf4208950ba254b75d756aec5b.tar.gz nsmc-7b74734e6b9356cf4208950ba254b75d756aec5b.tar.lz nsmc-7b74734e6b9356cf4208950ba254b75d756aec5b.zip |
Add scheme wrapper.
* scm/extent-sampling/load-libs.scm.in, scm/extent-sampling/wrap.scm:
New files.
* CMakeLists.txt: Check for guile. Build and install scheme wrapper.
(change_extension): New function.
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 935c3b3..beae2ff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,15 @@ project(extent-sampling VERSION 0.1.0) find_package(GSL REQUIRED) find_program(SC NAMES sc REQUIRED) find_program(INDENT NAMES indent) +# TODO: Maybe, support other versions of guile such as 2.2. +pkg_check_modules(GUILE guile-3.0) +pkg_get_variable(GUILD guile-3.0 guild) + +function(change_extension var filename extension) + get_filename_component(basename ${filename} NAME_WE) + get_filename_component(dirname ${filename} DIRECTORY) + set(${var} ${dirname}/${basename}.${extension} PARENT_SCOPE) +endfunction() # Generate C source files from SC source files, and optionally indent # them. @@ -37,3 +46,26 @@ set_target_properties(extentsampling PROPERTIES PUBLIC_HEADER "include/extent-sampling.h;include/gaussian-nd-random.h;include/nd-random.h;include/oracles.h") install(TARGETS extentsampling LIBRARY PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/extent-sampling) + +# Build and install scheme wrapper. +if(${GUILE_FOUND}) + configure_file(scm/extent-sampling/load-libs.scm.in scm/extent-sampling/load-libs.scm) + set(SCM_WRAPPER_PATH scm/extent-sampling/wrap.scm) + change_extension(SCM_WRAPPER_GO_PATH ${SCM_WRAPPER_PATH} go) + add_custom_command( + OUTPUT ${SCM_WRAPPER_GO_PATH} + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/${SCM_WRAPPER_PATH} ${CMAKE_BINARY_DIR}/${SCM_WRAPPER_PATH} + COMMAND ${GUILD} compile ${CMAKE_BINARY_DIR}/${SCM_WRAPPER_PATH} -o ${CMAKE_BINARY_DIR}/${SCM_WRAPPER_GO_PATH} + DEPENDS ${SCM_WRAPPER_PATH} + VERBATIM) + add_custom_target(scheme ALL DEPENDS ${SCM_WRAPPER_GO_PATH}) + string(REPLACE "." ";" GUILE_VERSION_LIST ${GUILE_VERSION}) + list(GET GUILE_VERSION_LIST 0 GUILE_MAJOR_VERSION) + list(GET GUILE_VERSION_LIST 1 GUILE_MINOR_VERSION) + install(FILES ${CMAKE_BINARY_DIR}/scm/extent-sampling/load-libs.scm + DESTINATION ${CMAKE_INSTALL_DATADIR}/guile/site/${GUILE_MAJOR_VERSION}.${GUILE_MINOR_VERSION}/extent-sampling) + install(FILES ${CMAKE_BINARY_DIR}/${SCM_WRAPPER_PATH} + DESTINATION ${CMAKE_INSTALL_DATADIR}/guile/site/${GUILE_MAJOR_VERSION}.${GUILE_MINOR_VERSION}/extent-sampling) + install(FILES ${CMAKE_BINARY_DIR}/${SCM_WRAPPER_GO_PATH} + DESTINATION ${CMAKE_INSTALL_LIBDIR}/guile/site/${GUILE_MAJOR_VERSION}.${GUILE_MINOR_VERSION}/site-ccache/extent-sampling) +endif() |