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