|
| 1 | +require_relative 'mrblib/version' |
| 2 | + |
1 | 3 | MRuby::Gem::Specification.new('mruby-simplemsgpack') do |spec| |
2 | 4 | spec.license = 'Apache-2' |
3 | 5 | spec.summary = 'msgpack for mruby including extension types' |
4 | 6 | spec.homepage = 'https://github.com/Asmod4n/mruby-simplemsgpack' |
5 | 7 | spec.authors = File.readlines("#{spec.dir}/AUTHORS").map(&:strip) |
| 8 | + spec.version = MessagePack::VERSION |
6 | 9 | spec.add_dependency 'mruby-errno' |
7 | 10 | spec.add_conflict 'mruby-msgpack' |
8 | 11 |
|
9 | | - if build.is_a?(MRuby::CrossBuild) |
10 | | - msgpackc = "#{spec.dir}/msgpack-c" |
11 | | - spec.cc.include_paths << "#{msgpackc}/include" |
12 | | - spec.objs += %W( |
13 | | - #{msgpackc}/src/unpack.c |
14 | | - #{msgpackc}/src/version.c |
15 | | - #{msgpackc}/src/zone.c |
16 | | - ).map { |f| f.relative_path_from(dir).pathmap("#{build_dir}/%X#{spec.exts.object}" ) } |
| 12 | + if build.is_a?(MRuby::CrossBuild) |
| 13 | + unless File.exists?("#{spec.build_dir}/lib/libmsgpackc.a") |
| 14 | + cmake_opts = "-DCMAKE_SYSTEM_NAME=\"#{build.build_target}\" -DCMAKE_HOST_SYSTEM_NAME=\"#{build.host_target}\" -DCMAKE_INSTALL_PREFIX=\"#{spec.build_dir}\" -DCMAKE_CXX_COMPILER=\"#{spec.cxx.command}\" -DCMAKE_CXX_COMPILER_AR=\"#{spec.archiver.command}\" -DCMAKE_CXX_FLAGS=\"#{spec.cxx.flags.join(' ')}\" -DCMAKE_C_COMPILER=\"#{spec.cc.command}\" -DCMAKE_C_COMPILER_AR=\"#{spec.archiver.command}\" -DCMAKE_C_FLAGS=\"#{spec.cc.flags.join(' ')}\" -DCMAKE_LINKER=\"#{spec.linker.command}\" -DCMAKE_MODULE_LINKER_FLAGS=\"#{spec.linker.flags.join(' ')}\"" |
| 15 | + sh "mkdir -p #{spec.build_dir}/build && cd #{spec.build_dir}/build && cmake #{cmake_opts} #{spec.dir}/deps/msgpack-c/ && cmake --build . && cmake --build . --target install" |
| 16 | + end |
| 17 | + spec.linker.flags_before_libraries << "\"#{spec.build_dir}/lib/libmsgpackc.a\"" |
| 18 | + spec.cc.include_paths << "#{spec.build_dir}/include" |
| 19 | + spec.cxx.include_paths << "#{spec.build_dir}/include" |
| 20 | + build.cc.include_paths << "#{spec.build_dir}/include" |
| 21 | + build.cxx.include_paths << "#{spec.build_dir}/include" |
17 | 22 | elsif spec.cc.search_header_path('msgpack.h') && spec.cc.search_header_path('msgpack/version_master.h') |
18 | 23 | if spec.build.toolchains.include? 'visualcpp' |
19 | 24 | spec.linker.libraries << 'libmsgpackc' |
20 | 25 | else |
21 | 26 | spec.linker.libraries << 'msgpackc' |
22 | 27 | end |
23 | 28 | else |
24 | | - msgpackc = "#{spec.dir}/msgpack-c" |
25 | | - spec.cc.include_paths << "#{msgpackc}/include" |
26 | | - spec.objs += %W( |
27 | | - #{msgpackc}/src/unpack.c |
28 | | - #{msgpackc}/src/version.c |
29 | | - #{msgpackc}/src/zone.c |
30 | | - ).map { |f| f.relative_path_from(dir).pathmap("#{build_dir}/%X#{spec.exts.object}" ) } |
| 29 | + `pkg-config --cflags msgpack 2>/dev/null`.split("\s").each do |cflag| |
| 30 | + spec.cxx.flags << cflag |
| 31 | + spec.cc.flags << cflag |
| 32 | + end |
| 33 | + exitstatus = $?.exitstatus |
| 34 | + `pkg-config --libs msgpack 2>/dev/null`.split("\s").each do |lib| |
| 35 | + spec.linker.flags_before_libraries << lib |
| 36 | + end |
| 37 | + exitstatus += $?.exitstatus |
| 38 | + unless exitstatus == 0 |
| 39 | + unless File.exists?("#{spec.build_dir}/lib/libmsgpackc.a") |
| 40 | + warn "mruby-simplemsgpack: cannot find libmsgpackc, building it" |
| 41 | + cmake_opts = "-DCMAKE_INSTALL_PREFIX=\"#{spec.build_dir}\" -DCMAKE_CXX_COMPILER=\"#{spec.cxx.command}\" -DCMAKE_CXX_COMPILER_AR=\"#{spec.archiver.command}\" -DCMAKE_CXX_FLAGS=\"#{spec.cxx.flags.join(' ')}\" -DCMAKE_C_COMPILER=\"#{spec.cc.command}\" -DCMAKE_C_COMPILER_AR=\"#{spec.archiver.command}\" -DCMAKE_C_FLAGS=\"#{spec.cc.flags.join(' ')}\" -DCMAKE_LINKER=\"#{spec.linker.command}\" -DCMAKE_MODULE_LINKER_FLAGS=\"#{spec.linker.flags.join(' ')}\"" |
| 42 | + sh "mkdir -p #{spec.build_dir}/build && cd #{spec.build_dir}/build && cmake #{cmake_opts} #{spec.dir}/deps/msgpack-c/ && cmake --build . && cmake --build . --target install" |
| 43 | + end |
| 44 | + spec.linker.flags_before_libraries << "\"#{spec.build_dir}/lib/libmsgpackc.a\"" |
| 45 | + spec.cc.include_paths << "#{spec.build_dir}/include" |
| 46 | + spec.cxx.include_paths << "#{spec.build_dir}/include" |
| 47 | + build.cc.include_paths << "#{spec.build_dir}/include" |
| 48 | + build.cxx.include_paths << "#{spec.build_dir}/include" |
| 49 | + end |
31 | 50 | end |
32 | 51 | end |
0 commit comments