mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-19 05:39:18 +02:00
Merge pull request #761 from lubgr/cmake-install-target
CMake update 3/3: provide install target
This commit is contained in:
commit
5de159a72a
4 changed files with 162 additions and 2 deletions
138
CMakeLists.txt
138
CMakeLists.txt
|
@ -13,6 +13,7 @@ project(chibi-scheme LANGUAGES C VERSION ${version}
|
||||||
include(CheckIncludeFile)
|
include(CheckIncludeFile)
|
||||||
include(CheckSymbolExists)
|
include(CheckSymbolExists)
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
|
include(CMakePackageConfigHelpers)
|
||||||
|
|
||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
|
||||||
|
@ -159,6 +160,8 @@ endif()
|
||||||
set(chibi-ffi ${CMAKE_CURRENT_SOURCE_DIR}/tools/chibi-ffi)
|
set(chibi-ffi ${CMAKE_CURRENT_SOURCE_DIR}/tools/chibi-ffi)
|
||||||
set(chibi-genstatic ${CMAKE_CURRENT_SOURCE_DIR}/tools/chibi-genstatic)
|
set(chibi-genstatic ${CMAKE_CURRENT_SOURCE_DIR}/tools/chibi-genstatic)
|
||||||
|
|
||||||
|
add_custom_target(chibi-compiled-libs)
|
||||||
|
|
||||||
function(add_compiled_library cfile)
|
function(add_compiled_library cfile)
|
||||||
if (NOT BUILD_SHARED_LIBS)
|
if (NOT BUILD_SHARED_LIBS)
|
||||||
return()
|
return()
|
||||||
|
@ -176,11 +179,16 @@ function(add_compiled_library cfile)
|
||||||
|
|
||||||
add_library(${libname} ${cfile})
|
add_library(${libname} ${cfile})
|
||||||
target_link_libraries(${libname} PRIVATE libchibi-scheme)
|
target_link_libraries(${libname} PRIVATE libchibi-scheme)
|
||||||
|
add_dependencies(chibi-compiled-libs ${libname})
|
||||||
|
|
||||||
set_target_properties(${libname} PROPERTIES
|
set_target_properties(${libname} PROPERTIES
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${libdir}
|
LIBRARY_OUTPUT_DIRECTORY ${libdir}
|
||||||
LIBRARY_OUTPUT_NAME ${basename}
|
LIBRARY_OUTPUT_NAME ${basename}
|
||||||
PREFIX "")
|
PREFIX "")
|
||||||
|
|
||||||
|
file(RELATIVE_PATH installsubdir ${CMAKE_CURRENT_BINARY_DIR}/lib ${libdir})
|
||||||
|
install(TARGETS ${libname}
|
||||||
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/chibi/${installsubdir})
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
if(BUILD_SHARED_LIBS)
|
if(BUILD_SHARED_LIBS)
|
||||||
|
@ -436,21 +444,147 @@ add_test(NAME "foreign-typeid"
|
||||||
COMMAND test-foreign-typeid
|
COMMAND test-foreign-typeid
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Image, pkgconfig and meta file generation
|
||||||
|
#
|
||||||
|
|
||||||
|
add_custom_command(OUTPUT chibi.img
|
||||||
|
COMMAND chibi-scheme -I ${CMAKE_CURRENT_BINARY_DIR}/lib -mchibi.repl
|
||||||
|
-d ${CMAKE_CURRENT_BINARY_DIR}/chibi.img
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
add_custom_command(OUTPUT red.img
|
||||||
|
COMMAND chibi-scheme -I ${CMAKE_CURRENT_BINARY_DIR}/lib -xscheme.red -mchibi.repl
|
||||||
|
-d ${CMAKE_CURRENT_BINARY_DIR}/red.img
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
add_custom_command(OUTPUT snow.img
|
||||||
|
COMMAND chibi-scheme -I ${CMAKE_CURRENT_BINARY_DIR}/lib
|
||||||
|
-mchibi.snow.commands -mchibi.snow.interface -mchibi.snow.package -mchibi.snow.utils
|
||||||
|
-d ${CMAKE_CURRENT_BINARY_DIR}/snow.img
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
|
if(BUILD_SHARED_LIBS)
|
||||||
|
# Currently, image dumps only work with shared library builds, which includes Windows
|
||||||
|
add_custom_target(chibi-images ALL
|
||||||
|
DEPENDS
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/chibi.img
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/red.img
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/snow.img
|
||||||
|
# The dependency on libchibi-scheme is crucial here:
|
||||||
|
chibi-compiled-libs)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
configure_file(contrib/chibi-scheme.pc.cmake.in chibi-scheme.pc @ONLY)
|
||||||
|
|
||||||
|
function(generate_package_list libdir output)
|
||||||
|
add_custom_command(OUTPUT ${output}
|
||||||
|
COMMAND
|
||||||
|
${CMAKE_COMMAND}
|
||||||
|
-DEXEC=$<TARGET_FILE:chibi-scheme>
|
||||||
|
-DLIBDIR=${libdir}
|
||||||
|
-DGENMETA=tools/generate-install-meta.scm
|
||||||
|
-DVERSION=${CMAKE_PROJECT_VERSION}
|
||||||
|
-DOUT=${CMAKE_CURRENT_BINARY_DIR}/${output}
|
||||||
|
-P contrib/chibi-generate-install-meta-helper.cmake
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
DEPENDS
|
||||||
|
chibi-scheme
|
||||||
|
tools/generate-install-meta.scm
|
||||||
|
contrib/chibi-generate-install-meta-helper.cmake)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
generate_package_list(lib/chibi .chibi.meta)
|
||||||
|
generate_package_list(lib/scheme .scheme.meta)
|
||||||
|
generate_package_list(lib/srfi .srfi.meta)
|
||||||
|
|
||||||
|
add_custom_target(chibi-meta-lists ALL
|
||||||
|
DEPENDS
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/.chibi.meta
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/.scheme.meta
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/.srfi.meta)
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Installation
|
# Installation
|
||||||
#
|
#
|
||||||
|
|
||||||
install(DIRECTORY include/chibi
|
install(DIRECTORY include/chibi
|
||||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
||||||
USE_SOURCE_PERMISSIONS
|
|
||||||
PATTERN "sexp-*.[hc]" EXCLUDE
|
PATTERN "sexp-*.[hc]" EXCLUDE
|
||||||
PATTERN "*.h.in" EXCLUDE)
|
PATTERN "*.h.in" EXCLUDE)
|
||||||
|
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/chibi/install.h
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/chibi/install.h
|
||||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/chibi)
|
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/chibi)
|
||||||
|
|
||||||
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/chibi-scheme.pc
|
||||||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||||
|
|
||||||
add_library(chibi::libchibi-scheme ALIAS libchibi-scheme)
|
add_library(chibi::libchibi-scheme ALIAS libchibi-scheme)
|
||||||
|
|
||||||
install(TARGETS libchibi-scheme
|
install(TARGETS libchibi-scheme libchibi-common chibi-scheme
|
||||||
|
EXPORT chibi-scheme-targets
|
||||||
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
|
|
||||||
|
install(FILES
|
||||||
|
tools/chibi-ffi
|
||||||
|
tools/chibi-doc
|
||||||
|
tools/snow-chibi
|
||||||
|
tools/snow-chibi.scm
|
||||||
|
DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||||
|
|
||||||
|
install(FILES
|
||||||
|
doc/chibi-scheme.1
|
||||||
|
doc/chibi-ffi.1
|
||||||
|
doc/chibi-doc.1
|
||||||
|
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
|
||||||
|
|
||||||
|
if(BUILD_SHARED_LIBS)
|
||||||
|
install(FILES
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/chibi.img
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/red.img
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/snow.img
|
||||||
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/chibi)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
install(DIRECTORY
|
||||||
|
lib/
|
||||||
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/chibi
|
||||||
|
PATTERN "*win32" EXCLUDE
|
||||||
|
PATTERN "*test.sld" EXCLUDE
|
||||||
|
PATTERN "*.c" EXCLUDE
|
||||||
|
PATTERN "*.stub" EXCLUDE)
|
||||||
|
|
||||||
|
# This is to revert the above exclusion pattern
|
||||||
|
install(FILES lib/chibi/test.sld
|
||||||
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/chibi/chibi)
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
install(DIRECTORY
|
||||||
|
lib/
|
||||||
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/chibi
|
||||||
|
FILES_MATCHING
|
||||||
|
PATTERN "*win32/*.scm"
|
||||||
|
PATTERN "*win32/*.sld")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
install(FILES
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/.chibi.meta
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/.scheme.meta
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/.srfi.meta
|
||||||
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/chibi)
|
||||||
|
|
||||||
|
install(EXPORT chibi-scheme-targets
|
||||||
|
FILE chibi-scheme-targets.cmake
|
||||||
|
NAMESPACE chibi::
|
||||||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/chibi)
|
||||||
|
|
||||||
|
write_basic_package_version_file(chibi-scheme-config-version.cmake
|
||||||
|
VERSION ${CMAKE_PROJECT_VERSION}
|
||||||
|
COMPATIBILITY ExactVersion)
|
||||||
|
|
||||||
|
install(FILES
|
||||||
|
contrib/chibi-scheme-config.cmake
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/chibi-scheme-config-version.cmake
|
||||||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/chibi)
|
||||||
|
|
10
contrib/chibi-generate-install-meta-helper.cmake
Normal file
10
contrib/chibi-generate-install-meta-helper.cmake
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND find ${LIBDIR} -name "*.sld"
|
||||||
|
COMMAND ${EXEC} ${GENMETA} ${VERSION}
|
||||||
|
OUTPUT_FILE ${OUT}
|
||||||
|
RESULT_VARIABLE error)
|
||||||
|
|
||||||
|
if(error)
|
||||||
|
message(FATAL_ERROR "${error}")
|
||||||
|
endif()
|
2
contrib/chibi-scheme-config.cmake
Normal file
2
contrib/chibi-scheme-config.cmake
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/chibi-scheme-targets.cmake)
|
14
contrib/chibi-scheme.pc.cmake.in
Normal file
14
contrib/chibi-scheme.pc.cmake.in
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# pkg-config
|
||||||
|
prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
|
exec_prefix=@CMAKE_INSTALL_FULL_BINDIR@
|
||||||
|
libdir=@CMAKE_INSTALL_FULL_LIBDIR@
|
||||||
|
includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
|
||||||
|
version=@CMAKE_PROJECT_VERSION@
|
||||||
|
|
||||||
|
Name: chibi-scheme
|
||||||
|
URL: http://synthcode.com/scheme/chibi/
|
||||||
|
Description: Minimal Scheme Implementation for use as an Extension Language
|
||||||
|
Version: ${version}
|
||||||
|
Libs: -L${libdir} -lchibi-scheme
|
||||||
|
Libs.private: -dl -lm
|
||||||
|
Cflags: -I${includedir}
|
Loading…
Add table
Reference in a new issue