@@ -16,6 +16,35 @@ MRuby::Gem::Specification.new('mruby-zmq') do |spec|
16
16
spec . add_dependency 'mruby-metaprog'
17
17
spec . add_test_dependency 'mruby-sleep'
18
18
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
+
19
48
if spec . cc . search_header_path 'threads.h'
20
49
spec . cc . defines << 'HAVE_THREADS_H'
21
50
end
@@ -25,17 +54,21 @@ MRuby::Gem::Specification.new('mruby-zmq') do |spec|
25
54
if spec . build . toolchains . include? 'visualcpp'
26
55
spec . linker . libraries << 'libzmq'
27
56
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
39
72
end
40
73
spec . linker . flags_before_libraries << '-pthread' << '-lpthread'
41
74
end
0 commit comments