From 8eb0961b40a763a3858539c32d22fda675bb9ef8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20B=C3=B6ger?= Date: Tue, 13 Jul 2021 11:49:31 +0100 Subject: [PATCH 1/9] build images and meta package lists --- CMakeLists.txt | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index d45416eb..6dab29b5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -436,6 +436,48 @@ add_test(NAME "foreign-typeid" COMMAND test-foreign-typeid WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + +# +# Image, pkgconfig and meta file generation +# + +add_custom_target(chibi-images + COMMAND chibi-scheme -I ${CMAKE_CURRENT_BINARY_DIR}/lib + -mchibi.repl -d ${CMAKE_CURRENT_BINARY_DIR}/chibi.img + COMMAND chibi-scheme -I ${CMAKE_CURRENT_BINARY_DIR}/lib + -xscheme.red -mchibi.repl -d ${CMAKE_CURRENT_BINARY_DIR}/red.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}) + +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=$ + -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) +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(meta-lists + DEPENDS + ${CMAKE_CURRENT_BINARY_DIR}/.chibi.meta + ${CMAKE_CURRENT_BINARY_DIR}/.scheme.meta + ${CMAKE_CURRENT_BINARY_DIR}/.srfi.meta) + + # # Installation # From 3b5f08c1da078c630fff3cea0be0ef08431eac01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20B=C3=B6ger?= Date: Tue, 13 Jul 2021 11:52:46 +0100 Subject: [PATCH 2/9] install main targets, images and meta lists --- CMakeLists.txt | 55 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6dab29b5..e66c8b5a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -181,6 +181,10 @@ function(add_compiled_library cfile) LIBRARY_OUTPUT_DIRECTORY ${libdir} LIBRARY_OUTPUT_NAME ${basename} PREFIX "") + + file(RELATIVE_PATH installsubdir ${CMAKE_CURRENT_BINARY_DIR}/lib ${libdir}) + install(TARGETS ${libname} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/chibi/${installsubdir}) endfunction() if(BUILD_SHARED_LIBS) @@ -493,6 +497,55 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/chibi/install.h add_library(chibi::libchibi-scheme ALIAS libchibi-scheme) -install(TARGETS libchibi-scheme +install(TARGETS libchibi-scheme chibi-scheme + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY 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) From 4c1f10e79edf7e798afc413ccc3083d235ce4e64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20B=C3=B6ger?= Date: Tue, 13 Jul 2021 11:53:08 +0100 Subject: [PATCH 3/9] don't manually specify default behaviour for file permissions --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e66c8b5a..5dc8b953 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -488,7 +488,6 @@ add_custom_target(meta-lists install(DIRECTORY include/chibi DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - USE_SOURCE_PERMISSIONS PATTERN "sexp-*.[hc]" EXCLUDE PATTERN "*.h.in" EXCLUDE) From 2508c611741d161c10f79a3fc32d87f0da18da12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20B=C3=B6ger?= Date: Tue, 13 Jul 2021 11:53:45 +0100 Subject: [PATCH 4/9] install pkgconfig file, too --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5dc8b953..480532e2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -494,6 +494,9 @@ install(DIRECTORY include/chibi install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/chibi/install.h 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) install(TARGETS libchibi-scheme chibi-scheme From 7015657c42eb3d312fc4a069869972ec750ab5e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20B=C3=B6ger?= Date: Tue, 13 Jul 2021 11:57:19 +0100 Subject: [PATCH 5/9] add missing template/helper files for install targets --- contrib/chibi-generate-install-meta-helper.cmake | 10 ++++++++++ contrib/chibi-scheme.pc.cmake.in | 14 ++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 contrib/chibi-generate-install-meta-helper.cmake create mode 100644 contrib/chibi-scheme.pc.cmake.in diff --git a/contrib/chibi-generate-install-meta-helper.cmake b/contrib/chibi-generate-install-meta-helper.cmake new file mode 100644 index 00000000..ddfae28d --- /dev/null +++ b/contrib/chibi-generate-install-meta-helper.cmake @@ -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() diff --git a/contrib/chibi-scheme.pc.cmake.in b/contrib/chibi-scheme.pc.cmake.in new file mode 100644 index 00000000..bcb3ead2 --- /dev/null +++ b/contrib/chibi-scheme.pc.cmake.in @@ -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} From cba39c2ede1ead14f49f6bddab6d2b646f8649a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20B=C3=B6ger?= Date: Tue, 13 Jul 2021 13:24:30 +0100 Subject: [PATCH 6/9] install an EXPORT set and cooperate with find_package --- CMakeLists.txt | 18 +++++++++++++++++- contrib/chibi-scheme-config.cmake | 2 ++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 contrib/chibi-scheme-config.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 480532e2..5555fc5a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,6 +13,7 @@ project(chibi-scheme LANGUAGES C VERSION ${version} include(CheckIncludeFile) include(CheckSymbolExists) include(GNUInstallDirs) +include(CMakePackageConfigHelpers) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) @@ -499,7 +500,8 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/chibi-scheme.pc add_library(chibi::libchibi-scheme ALIAS libchibi-scheme) -install(TARGETS libchibi-scheme chibi-scheme +install(TARGETS libchibi-scheme libchibi-common chibi-scheme + EXPORT chibi-scheme-targets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) @@ -551,3 +553,17 @@ install(FILES ${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) diff --git a/contrib/chibi-scheme-config.cmake b/contrib/chibi-scheme-config.cmake new file mode 100644 index 00000000..aa0f8128 --- /dev/null +++ b/contrib/chibi-scheme-config.cmake @@ -0,0 +1,2 @@ + +include(${CMAKE_CURRENT_LIST_DIR}/chibi-scheme-targets.cmake) From fe953319ff5281a90154912111953b3dfb75b601 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20B=C3=B6ger?= Date: Thu, 22 Jul 2021 21:08:41 +0100 Subject: [PATCH 7/9] fix dependencies of package list generation command --- CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5555fc5a..197dbf67 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -469,7 +469,10 @@ function(generate_package_list libdir output) -DOUT=${CMAKE_CURRENT_BINARY_DIR}/${output} -P contrib/chibi-generate-install-meta-helper.cmake WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS chibi-scheme) + DEPENDS + chibi-scheme + tools/generate-install-meta.scm + contrib/chibi-generate-install-meta-helper.cmake) endfunction() generate_package_list(lib/chibi .chibi.meta) From b827cfb429e43627327517e57b137bf8c91055a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20B=C3=B6ger?= Date: Fri, 23 Jul 2021 22:13:46 +0100 Subject: [PATCH 8/9] Build images and .meta lists with ALL target --- CMakeLists.txt | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 197dbf67..1dd73c76 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -160,6 +160,8 @@ endif() set(chibi-ffi ${CMAKE_CURRENT_SOURCE_DIR}/tools/chibi-ffi) set(chibi-genstatic ${CMAKE_CURRENT_SOURCE_DIR}/tools/chibi-genstatic) +add_custom_target(chibi-compiled-libs) + function(add_compiled_library cfile) if (NOT BUILD_SHARED_LIBS) return() @@ -177,6 +179,7 @@ function(add_compiled_library cfile) add_library(${libname} ${cfile}) target_link_libraries(${libname} PRIVATE libchibi-scheme) + add_dependencies(chibi-compiled-libs ${libname}) set_target_properties(${libname} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${libdir} @@ -446,16 +449,28 @@ add_test(NAME "foreign-typeid" # Image, pkgconfig and meta file generation # -add_custom_target(chibi-images - COMMAND chibi-scheme -I ${CMAKE_CURRENT_BINARY_DIR}/lib - -mchibi.repl -d ${CMAKE_CURRENT_BINARY_DIR}/chibi.img - COMMAND chibi-scheme -I ${CMAKE_CURRENT_BINARY_DIR}/lib - -xscheme.red -mchibi.repl -d ${CMAKE_CURRENT_BINARY_DIR}/red.img +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}) +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) + configure_file(contrib/chibi-scheme.pc.cmake.in chibi-scheme.pc @ONLY) function(generate_package_list libdir output) @@ -479,7 +494,7 @@ generate_package_list(lib/chibi .chibi.meta) generate_package_list(lib/scheme .scheme.meta) generate_package_list(lib/srfi .srfi.meta) -add_custom_target(meta-lists +add_custom_target(chibi-meta-lists ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/.chibi.meta ${CMAKE_CURRENT_BINARY_DIR}/.scheme.meta From 2e41cf06b2983e0a4ec67ed71d071dbe20b0b4fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20B=C3=B6ger?= Date: Fri, 23 Jul 2021 22:47:41 +0100 Subject: [PATCH 9/9] don't dump images in static library configurations --- CMakeLists.txt | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1dd73c76..6a93d08f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -463,13 +463,16 @@ add_custom_command(OUTPUT snow.img -d ${CMAKE_CURRENT_BINARY_DIR}/snow.img WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) -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) +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)