mirror of
https://github.com/zap-proto/ruby.git
synced 2026-10-30 15:04:01 +00:00
Rebrand all ZAP-facing identifiers off Cap'n Proto: - module Capnp→Zap, ext binding namespace ruby_capn_proto→ruby_zap, header guard RUBY_CAPN_PROTO_H→RUBY_ZAP_H, entry point Init_zap, gem capn_proto→zap, schemas .capnp→.zap, media/logo, gemspec, README, spec, examples. Zero capnp/Cap'n Proto brand prose remains. Binding-namespace nuance (kept on purpose): the native ext links the upstream serialization runtime (libcapnp/kj). Its capnp:: C++ symbols and <capnp/...> headers are the linked library's real API — there is no zap:: namespace or libzap to retarget to yet — so those references, the -lcapnp/-lcapnpc/-lkj link flags, and the pycapnp dev-only fixture generators stay, each documented as the external dependency surface (retargets to <zap/...>/-lzap when the ZAP C++ runtime ships). Build/modernization: - extconf.rb: discover the runtime via dir_config + pkg_config so the ext builds against non-default prefixes (e.g. Homebrew), not just /usr/local. Native ext now compiles + links cleanly (zap.bundle). - ext: parenthesize `if (FIXNUM_P(x))` in the two dynamic builders — required since Ruby's FIXNUM_P macro no longer wraps its expansion (Ruby 4 build break). - Rakefile: put lib on $LOAD_PATH and load the gemspec via Gem::Specification.load; pin rake-compiler ~> 0.9; make the rspec rake task degrade with a clear message instead of aborting the whole Rakefile when the harness can't load. - gemspec: bump dev deps within-major (rspec ~> 2.14, rake ~> 13.0, rake-compiler ~> 0.9); add required_ruby_version. - .gitignore: ignore native-ext build artifacts (*.o, Makefile, mkmf.log, *.bundle.dSYM, *.gem). Verified: all spec/zap_spec.rb assertions pass against the compiled binding (write/read + to_bytes round-trips, unknown-field and out-of-bounds raise Zap::Exception, dynamic struct assign); the addressbook example decodes end-to-end.
66 lines
1.5 KiB
Python
66 lines
1.5 KiB
Python
# vim: ts=2 et sw=2 sts=2
|
|
|
|
import os
|
|
import ycm_core
|
|
import glob
|
|
import subprocess
|
|
|
|
def RubyInclude():
|
|
cmd = ["ruby", "-e", "print RbConfig::CONFIG['rubyhdrdir']"]
|
|
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
rubyhdrdir = process.stdout.read()
|
|
return rubyhdrdir
|
|
|
|
flags = [
|
|
'-Wall',
|
|
'-Wextra',
|
|
'-Werror',
|
|
'-fexceptions',
|
|
'-Wc++98-compat',
|
|
'-std=c++11',
|
|
'-x', 'c++',
|
|
'-I', '.',
|
|
'-I', '/usr/local/include',
|
|
'-I', RubyInclude(),
|
|
]
|
|
|
|
def DirectoryOfThisScript():
|
|
return os.path.dirname( os.path.abspath( __file__ ) )
|
|
|
|
def MakeRelativePathsInFlagsAbsolute( flags, working_directory ):
|
|
if not working_directory:
|
|
return list( flags )
|
|
new_flags = []
|
|
make_next_absolute = False
|
|
path_flags = [ '-isystem', '-I', '-iquote', '--sysroot=' ]
|
|
for flag in flags:
|
|
new_flag = flag
|
|
|
|
if make_next_absolute:
|
|
make_next_absolute = False
|
|
if not flag.startswith( '/' ):
|
|
new_flag = os.path.join( working_directory, flag )
|
|
|
|
for path_flag in path_flags:
|
|
if flag == path_flag:
|
|
make_next_absolute = True
|
|
break
|
|
|
|
if flag.startswith( path_flag ):
|
|
path = flag[ len( path_flag ): ]
|
|
new_flag = path_flag + os.path.join( working_directory, path )
|
|
break
|
|
|
|
if new_flag:
|
|
new_flags.append( new_flag )
|
|
return new_flags
|
|
|
|
def FlagsForFile( filename ):
|
|
relative_to = DirectoryOfThisScript()
|
|
final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to )
|
|
|
|
return {
|
|
'flags': final_flags,
|
|
'do_cache': True
|
|
}
|