mirror of
https://github.com/apple/foundationdb.git
synced 2025-05-14 01:42:37 +08:00
The ruby bindings are not currently installable. We can reproduce this with a build from source: ``` foundationdb/tmp on main [$?] via △ v3.25.2 zsh ❯ gem install ./bindings/ruby/fdb-7.3.0.gem ERROR: While executing gem ... (Gem::Package::PathError) installing into parent path /Users/andrew/projects/foundationdb/LICENSE of /Users/andrew/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/fdb-7.3.0 is not allowed ``` The problem is that the gemspec is interpolating the source directory into the `files` array - and while this allows the gem to build, it prevents it from actually being installed. To fix it, we borrow similar code from the python bindings to copy the necessary files and license into the build directory before building the gem. This allows the gem to be installed: ``` foundationdb/tmp on main [!?] via △ v3.25.2 zsh ❯ gem install ./bindings/ruby/fdb-7.3.0.gem Successfully installed fdb-7.3.0 Parsing documentation for fdb-7.3.0 Installing ri documentation for fdb-7.3.0 Done installing documentation for fdb after 0 seconds 1 gem installed ```
53 lines
1.9 KiB
CMake
53 lines
1.9 KiB
CMake
# we put this generated file into the src dir, as it
|
|
# greatly simplifies debugging
|
|
vexillographer_compile(TARGET ruby_options LANG ruby
|
|
OUT ${CMAKE_CURRENT_SOURCE_DIR}/lib/fdboptions.rb ALL)
|
|
configure_file(fdb.gemspec.cmake fdb.gemspec)
|
|
configure_file(${CMAKE_SOURCE_DIR}/LICENSE ${CMAKE_CURRENT_BINARY_DIR}/LICENSE COPYONLY)
|
|
|
|
set(SRCS
|
|
lib/fdb.rb
|
|
lib/fdbdirectory.rb
|
|
lib/fdbimpl.rb
|
|
lib/fdbimpl_v609.rb
|
|
lib/fdblocality.rb
|
|
lib/fdboptions.rb
|
|
lib/fdbsubspace.rb
|
|
lib/fdbtuple.rb)
|
|
|
|
set(out_files "")
|
|
foreach(src ${SRCS})
|
|
get_filename_component(dirname ${src} DIRECTORY)
|
|
get_filename_component(extname ${src} EXT)
|
|
if(NOT EXISTS ${dirname})
|
|
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/bindings/ruby/${dirname})
|
|
endif()
|
|
set(from_path ${CMAKE_CURRENT_SOURCE_DIR}/${src})
|
|
set(to_path ${CMAKE_CURRENT_BINARY_DIR}/${src})
|
|
add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/bindings/ruby/${src}
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${from_path} ${to_path}
|
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${src}
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
COMMENT "copy ${src}")
|
|
set(out_files "${out_files};${PROJECT_BINARY_DIR}/bindings/ruby/${src}")
|
|
endforeach()
|
|
add_custom_target(ruby_binding ALL DEPENDS ${out_files})
|
|
|
|
if(NOT FDB_RELEASE)
|
|
set(not_fdb_release_string "SNAPSHOT")
|
|
else()
|
|
set(not_fdb_release_string "")
|
|
endif()
|
|
|
|
set(setup_file fdb-${FDB_VERSION}.gem)
|
|
set(gem_target ${CMAKE_BINARY_DIR}/packages/fdb-${FDB_VERSION}${not_fdb_release_string}.gem)
|
|
add_custom_command(OUTPUT ${gem_target}
|
|
COMMAND ${GEM_COMMAND} build fdb.gemspec --output ${setup_file} &&
|
|
${CMAKE_COMMAND} -E copy ${setup_file} ${gem_target}
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMENT "Building ruby gem")
|
|
add_custom_target(gem_package DEPENDS ${gem_target})
|
|
add_dependencies(gem_package ruby_options)
|
|
add_dependencies(gem_package ruby_binding)
|
|
add_dependencies(packages gem_package)
|