Skip to content

Commit cb94b48

Browse files
committed
build from source again
1 parent 22f5baf commit cb94b48

File tree

6 files changed

+58
-13
lines changed

6 files changed

+58
-13
lines changed

.gitmodules

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[submodule "deps/libzmq"]
2+
path = deps/libzmq
3+
url = https://github.com/zeromq/libzmq

.travis.yml

+2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
dist: focal
2+
env:
3+
- BUILD_LIBZMQ=1
24
addons:
35
apt:
46
packages:

Rakefile

+5
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,9 @@ task :test => :mruby do
99
sh "cd mruby && MRUBY_CONFIG=#{MRUBY_CONFIG} rake all test"
1010
end
1111

12+
desc "cleanup"
13+
task :clean do
14+
sh "cd mruby && rake deep_clean"
15+
end
16+
1217
task :default => :test

build_config.rb

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
MRuby::Build.new do |conf|
22
toolchain :gcc
33
enable_debug
4-
conf.enable_sanitizer "address,undefined,leak"
5-
conf.cc.flags << '-fno-omit-frame-pointer' << '-g' << '-ggdb'
4+
conf.enable_debug
5+
conf.enable_sanitizer "address,undefined"
6+
conf.cc.flags << '-fno-omit-frame-pointer'
67
conf.enable_test
78
conf.gembox 'full-core'
89
conf.gem File.expand_path(File.dirname(__FILE__))

deps/libzmq

Submodule libzmq added at 416b7ae

mrbgem.rake

+44-11
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,35 @@ MRuby::Gem::Specification.new('mruby-zmq') do |spec|
1616
spec.add_dependency 'mruby-metaprog'
1717
spec.add_test_dependency 'mruby-sleep'
1818

19+
task :clean do
20+
if File.exists?("#{spec.build_dir}/lib/libzmq.a")
21+
sh "cd #{spec.build_dir}/build && make uninstall"
22+
FileUtils.rm_rf "#{spec.build_dir}/build"
23+
end
24+
end
25+
26+
def build_libzmq(spec, build)
27+
unless File.exists?("#{spec.build_dir}/lib/libzmq.a")
28+
warn "mruby-zmq: cannot find libzmq, building it"
29+
if spec.cc.search_header_path 'sodium.h'
30+
sh "cd #{spec.dir}/deps/libzmq && ./autogen.sh && mkdir -p #{spec.build_dir}/build && cd #{spec.build_dir}/build && #{spec.dir}/deps/libzmq/configure CC=\"#{spec.cc.command}\" CFLAGS=\"#{spec.cc.flags.join(' ')}\" CXX=\"#{spec.cxx.command}\" CXXFLAGS=\"#{spec.cxx.flags.join(' ')}\" --disable-shared --enable-static --without-docs --with-libsodium --prefix=#{spec.build_dir} && make -j4 && make install"
31+
else
32+
sh "cd #{spec.dir}/deps/libzmq && ./autogen.sh && mkdir -p #{spec.build_dir}/build && cd #{spec.build_dir}/build && #{spec.dir}/deps/libzmq/configure CC=\"#{spec.cc.command}\" CFLAGS=\"#{spec.cc.flags.join(' ')}\" CXX=\"#{spec.cxx.command}\" CXXFLAGS=\"#{spec.cxx.flags.join(' ')}\" --disable-shared --enable-static --without-docs --prefix=#{spec.build_dir} && make -j4 && make install"
33+
end
34+
end
35+
spec.linker.flags_before_libraries << "\"#{spec.build_dir}/lib/libzmq.a\""
36+
if spec.cc.search_header_path 'sodium.h'
37+
spec.linker.libraries << 'sodium'
38+
end
39+
spec.linker.libraries << 'stdc++'
40+
spec.cc.include_paths << "#{spec.build_dir}/include"
41+
spec.cxx.include_paths << "#{spec.build_dir}/include"
42+
build.cc.include_paths << "#{spec.build_dir}/include"
43+
build.cxx.include_paths << "#{spec.build_dir}/include"
44+
spec.cxx.defines << 'ZMQ_BUILD_DRAFT_API=1'
45+
spec.cc.defines << 'ZMQ_BUILD_DRAFT_API=1'
46+
end
47+
1948
if spec.cc.search_header_path 'threads.h'
2049
spec.cc.defines << 'HAVE_THREADS_H'
2150
end
@@ -25,17 +54,21 @@ MRuby::Gem::Specification.new('mruby-zmq') do |spec|
2554
if spec.build.toolchains.include? 'visualcpp'
2655
spec.linker.libraries << 'libzmq'
2756
else
28-
`pkg-config --cflags libzmq 2>/dev/null`.split("\s").each do |cflag|
29-
spec.cxx.flags << cflag
30-
spec.cc.flags << cflag
31-
end
32-
exitstatus = $?.exitstatus
33-
`pkg-config --libs libzmq 2>/dev/null`.split("\s").each do |lib|
34-
spec.linker.flags_before_libraries << lib
35-
end
36-
exitstatus += $?.exitstatus
37-
unless exitstatus == 0
38-
raise "install libzmq(-dev) before continuing"
57+
if ENV['BUILD_LIBZMQ']
58+
build_libzmq(spec, build)
59+
else
60+
`pkg-config --cflags libzmq 2>/dev/null`.split("\s").each do |cflag|
61+
spec.cxx.flags << cflag
62+
spec.cc.flags << cflag
63+
end
64+
exitstatus = $?.exitstatus
65+
`pkg-config --libs libzmq 2>/dev/null`.split("\s").each do |lib|
66+
spec.linker.flags_before_libraries << lib
67+
end
68+
exitstatus += $?.exitstatus
69+
unless exitstatus == 0
70+
build_libzmq(spec, build)
71+
end
3972
end
4073
spec.linker.flags_before_libraries << '-pthread' << '-lpthread'
4174
end

0 commit comments

Comments
 (0)