ruby-libvirt 0.8.2 → 0.8.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bf273ca7e41e36f188e254668c9c5811613941975b2fce9638f592026a96e7a6
4
- data.tar.gz: 4802c02baa9233f4305a27705d52052d2bbea308d59d8db0c51444102368d33a
3
+ metadata.gz: 39fda947f631865aa0b6f0583aad469746de1bde687a106f08e9cc40167bb78c
4
+ data.tar.gz: 010a9b66860d55d01ea1220a896a267151bb0c773261c37076101fb7dcae439e
5
5
  SHA512:
6
- metadata.gz: c1df9d3f345b3e89ed50820d139a4c64e0d0034271c5f5cf326d8385c5f957eef72bf9f27e9d7e9949f3ccba21bab7af5d079a7557ed4539b058477e179737e5
7
- data.tar.gz: e5b4f69d58d2630df70e2f00ded49c116441f640ecb677070dbd5cbef97d9f6f597d75d9940baaeabae863e7ec43c1793fd33e71db79e0f7723b37752e90f204
6
+ metadata.gz: cc4db18a21728f16e913fd1f23a2b9de39c46e17a9936f72c4cf9d4da7d6f9051a95a55cb750504640e8bc9ba12055d4a505f441c73ccadb32024983dd326e67
7
+ data.tar.gz: cb461a77f74fe3a69ac5ae4e52ba46a2b2bbaebf759dd4b8301296842c378501e0e3801e506ffd9a0b4d14f560dabe9e7cd3e6c49d77d3b93083b19bff9cdfaa
data/NEWS.rst ADDED
@@ -0,0 +1,235 @@
1
+ =====================
2
+ ruby-libvirt releases
3
+ =====================
4
+
5
+
6
+ 0.8.4 (2024-08-01)
7
+ ==================
8
+
9
+ * Explicitly disallow use of ``new`` for wrapper classes
10
+
11
+
12
+ 0.8.3 (2024-05-13)
13
+ ==================
14
+
15
+ * Fix runtime warnings with Ruby >= 3.2
16
+ * Improve build system
17
+ * Improve website
18
+
19
+
20
+ 0.8.2 (2024-02-09)
21
+ ==================
22
+
23
+ * Fix ``StoragePool#list_all_volumes``
24
+ * Fix regression in ``Domain#attach_device`` and ``Domain#detach_device``
25
+
26
+
27
+ 0.8.1 (2024-02-08)
28
+ ==================
29
+
30
+ * Add missing ``virDomainUndefineFlagsValues`` constants
31
+ * Require libvirt 2.0.0
32
+ * Always use pkg-config for detecting libvirt
33
+ * Drop most compile-time feature checks
34
+
35
+
36
+ 0.8.0 (2021-11-15)
37
+ ==================
38
+
39
+ * Fix default values for ``node_cpu_stats`` and ``node_memory_stats``
40
+ * Fix cpumap allocation for ``virDomainGetVcpus``
41
+ * Enforce UTF8 for strings and exceptions
42
+ * Drop local ``have_const``
43
+ * Use sensible default for ``libvirt_domain_qemu_agent_command``
44
+
45
+
46
+ 0.7.1 (2018-02-18)
47
+ ==================
48
+
49
+ * Fix a bad bug in block_resize (Marius Rieder)
50
+ * Fix up some problems pointed out by clang
51
+ * Fix up the tests for small semantic differences in how libvirt works
52
+
53
+
54
+ 0.7.0 (2016-09-22)
55
+ ==================
56
+
57
+ * Fix network lease API to allow arguments that libvirt allows
58
+ * Implement ``VIRT_STORAGE_POOL_CREATE`` flags
59
+ * Implement more ``VIR_STORAGE_VOL`` flags
60
+ * Implement ``VIR_DOMAIN_QEMU_AGENT_COMMAND_SHUTDOWN``
61
+ * Implement ``virDomainDefineXMLFlags``
62
+ * Implement ``virDomainRename``
63
+ * Implement ``virDomainSetUserPassword``
64
+ * Implement ``VIR_DOMAIN_TIME_SYNC``
65
+ * Fix the return value from ``virStreamSourceFunc`` so volume upload works
66
+
67
+
68
+ 0.6.0 (2015-11-20)
69
+ ==================
70
+
71
+ * Fix possible buffer overflow
72
+ * Fix storage volume creation error messages
73
+ * Add additional storage pool defines
74
+ * Implement ``Network#dhcp_leases`` method
75
+ * Implement ``Connect#node_alloc_pages`` method
76
+ * Implement ``Domain#time`` method
77
+ * Implement ``Connect#domain_capabilities`` method
78
+ * Implement ``Domain#core_dump_with_format`` method
79
+ * Implement ``Domain#fs_freeze`` method
80
+ * Implement ``Domain#fs_info`` method
81
+ * Implement ``Connect#node_free_pages`` method
82
+
83
+
84
+ 0.5.2 (2014-01-08)
85
+ ==================
86
+
87
+ * Fix to make sure we don't free more entires than retrieved
88
+
89
+
90
+ 0.5.1 (2013-12-15)
91
+ ==================
92
+
93
+ * Fixes to compile against older libvirt
94
+ * Fixes to compile against ruby 1.8
95
+
96
+
97
+ 0.5.0 (2013-12-09)
98
+ ==================
99
+
100
+ * Updated ``Network`` class, implementing almost all libvirt APIs
101
+ * Updated ``Domain`` class, implementing almost all libvirt APIs
102
+ * Updated ``Connection`` class, implementing almost all libvirt APIs
103
+ * Updated ``DomainSnapshot`` class, implementing almost all libvirt APIs
104
+ * Updated ``NodeDevice`` class, implementing almost all libvirt APIs
105
+ * Updated ``Storage`` class, implementing almost all libvirt APIs
106
+ * Add constants for almost all libvirt defines
107
+ * Improved performance in the library by using alloca
108
+
109
+
110
+ 0.4.0 (2011-07-27)
111
+ ==================
112
+
113
+ * Updated ``Domain`` class, implementing ``dom.memory_parameters=``,
114
+ ``dom.memory_parameters``, ``dom.updated?``, ``dom.migrate2``,
115
+ ``dom.migrate_to_uri2``, ``dom.migrate_set_max_speed``,
116
+ ``dom.qemu_monitor_command``, ``dom.blkio_parameters``,
117
+ ``dom.blkio_parameters=``, ``dom.state``, ``dom.open_console``,
118
+ ``dom.screenshot`` and ``dom.inject_nmi``
119
+ * Implementation of the ``Stream`` class, which covers the libvirt
120
+ ``virStream`` APIs
121
+ * Add the ability to build against non-system libvirt libraries
122
+ * Updated ``Error`` object, which now includes the libvirt code, component and
123
+ level of the error, as well as all of the error constants from ``libvirt.h``
124
+ * Updated ``Connect`` class, implementing ``conn.sys_info``, ``conn.stream``,
125
+ ``conn.interface_change_begin``, ``conn.interface_change_commit`` and
126
+ ``conn.interface_change_rollback``
127
+ * Updated ``StorageVol`` class, implementing ``vol.download`` and
128
+ ``vol.upload``
129
+ * Various bugfixes
130
+
131
+
132
+ 0.3.0 (2010-12-12)
133
+ ==================
134
+
135
+ * Implementation of ``Libvirt::open_auth``, ``Libvirt::event_register_impl``
136
+ * Updated ``Connect`` class, implementing ``conn.compare_cpu``,
137
+ ``conn.baseline_cpu``, ``conn.domain_event_register_any``,
138
+ ``conn.domain_event_deregister_any``, ``conn.domain_event_register``,
139
+ ``conn.domain_event_deregister`` and ``conn.create_domain_xml``
140
+ * Updated ``Domain`` class, implementing ``dom.get_vcpus``,
141
+ ``dom.update_device``, ``dom.scheduler_type``, ``dom.scheduler_parameters``,
142
+ ``dom.scheduler_parameters=``, ``dom.num_vcpus``, ``dom.vcpus_flags=`` and
143
+ ``dom.qemu_monitor_command``
144
+ * Updated ``Interface`` class, implementing ``interface.free``
145
+ * Many potential memory leaks have been fixed
146
+ * Many bugfixes
147
+ * Documentation update of many methods, including all of the lookup methods
148
+ that were missing before
149
+
150
+
151
+ 0.2.0 (2010-07-01)
152
+ ==================
153
+
154
+ * Updated ``Storage`` class, implementing ``pool.active?``,
155
+ ``pool.persistent?`` and ``pool.vol_create_xml_from``
156
+ * Updated ``Connect`` class, implementing ``conn.node_free_memory``,
157
+ ``conn.node_cells_free_memory``, ``conn.node_get_security_model``,
158
+ ``conn.encrypted?``, ``conn.libversion`` and ``conn.secure?``
159
+ * Updated ``Network`` class, implementing ``net.active?`` and
160
+ ``net.persistent?``
161
+ * Update ``Domain`` class, implementing ``conn.domain_xml_from_native``,
162
+ ``conn.domain_xml_to_native``, ``dom.migrate_to_uri``,
163
+ ``dom.migrate_set_max_downtime``, ``dom.managed_save``,
164
+ ``dom.has_managed_save?``, ``dom.managed_save_remove``,
165
+ ``dom.security_label``, ``dom.block_stats``, ``dom.memory_stats``,
166
+ ``dom.blockinfo``, ``dom.block_peek``, ``dom.memory_peek``, ``dom.active?``,
167
+ ``dom.persistent?``, ``dom.snapshot_create_xml``, ``dom.num_of_snapshots``,
168
+ ``dom.list_snapshots``, ``dom.lookup_snapshot_by_name``,
169
+ ``dom.has_current_snapshot?``, ``dom.revert_to_snapshot``,
170
+ ``dom.current_snapshot``, ``snapshot.xml_desc``, ``snapshot.delete``,
171
+ ``dom.job_info`` and ``dom.abort_job``
172
+ * Implementation of the ``NodeDevice`` class
173
+ * Implementation of the ``Secret`` class
174
+ * Implementation of the ``NWFilter`` class
175
+ * Implementation of the ``Interface`` class
176
+ * Conversion of the development tree to git
177
+ * New maintainer (Chris Lalancette). David Lutterkort has agreed to transfer
178
+ maintainership since he is not actively involved in their development
179
+ anymore
180
+
181
+
182
+ 0.1.0 (2008-11-18)
183
+ ==================
184
+
185
+ * Add binding for ``virConnectFindStoragePoolSources`` (Chris Lalancette)
186
+ * Fix ``dom_migrate`` (Chris Lalancette)
187
+ * Add the ``MIGRATE_LIVE`` (``enum virDomainMigrateFlags``) flag
188
+ * Slight improvements of the unit tests
189
+
190
+
191
+ 0.0.7 (2008-04-15)
192
+ ==================
193
+
194
+ * Binding for ``virDomainMigrate``
195
+ * Fix crash caused by using ``virResetError``
196
+ * More sensible message included in exceptions
197
+
198
+
199
+ 0.0.6 (2008-04-02)
200
+ ==================
201
+
202
+ * Fix test failure exposed by the Fedora builders
203
+
204
+
205
+ 0.0.5 (2008-04-02)
206
+ ==================
207
+
208
+ * Explicit free methods for various objects (based on a patch by Vadim Zaliva)
209
+ * Make the FLAGS argument for various calls optional, and default it to 0
210
+ (Chris Lalancette)
211
+ * More finegrained exceptions on errors, containing libvirt error message
212
+ (Mohammed Morsi)
213
+
214
+
215
+ 0.0.4 (2008-04-01)
216
+ ==================
217
+
218
+ * Bindings for the libvirt storage API (requires libvirt 0.4.1)
219
+ * Suppress some bindings if the underlying libvirt doesn't support it
220
+ * Bindings for ``virDomainSetMemory``, ``virDomainPinVcpu`` and
221
+ ``virDomainSetVcpus`` (Vadim Zaliva)
222
+
223
+
224
+ 0.0.2 (2007-12-06)
225
+ ==================
226
+
227
+ * Add ``virNodeGetInfo`` binding
228
+ * Convert Ruby API from StudlyCaps to under_score_separation, since that's
229
+ the Ruby convention
230
+
231
+
232
+ 0.0.1 (2007-11-19)
233
+ ==================
234
+
235
+ * Initial release
data/README.rst ADDED
@@ -0,0 +1,45 @@
1
+ ============
2
+ ruby-libvirt
3
+ ============
4
+
5
+ Ruby bindings for `libvirt <https://libvirt.org/>`__.
6
+
7
+
8
+ Usage
9
+ =====
10
+
11
+ Add ``require 'libvirt'`` to your program, then call
12
+ ``Libvirt::open`` or ``Libvirt::open_read_only`` to obtain a
13
+ connection.
14
+
15
+ See ``examples/*.rb`` and ``tests/*.rb`` for more examples.
16
+
17
+
18
+ Hacking
19
+ =======
20
+
21
+ On a Fedora machine, run
22
+
23
+ ::
24
+
25
+ $ yum install libvirt-devel ruby-devel rubygem-rake
26
+
27
+ followed by
28
+
29
+ ::
30
+
31
+ $ rake build
32
+
33
+ To run code against the bindings without having to install them
34
+ first, ``$RUBYLIB`` needs to be set appropriately. For example:
35
+
36
+ ::
37
+
38
+ $ export RUBYLIB="lib:ext/libvirt"
39
+ $ ruby -rlibvirt -e 'puts Libvirt::version[0]'
40
+
41
+
42
+ Contributing
43
+ ============
44
+
45
+ See `CONTRIBUTING.rst <CONTRIBUTING.rst>`__.
data/Rakefile CHANGED
@@ -11,75 +11,96 @@
11
11
 
12
12
  # Rakefile for ruby-rpm -*- ruby -*-
13
13
  require 'rake/clean'
14
- begin
15
- require 'rdoc/task'
16
- rescue LoadError
17
- require 'rake/rdoctask'
18
- end
19
14
  require 'rake/testtask'
15
+ require 'rdoc/task'
20
16
  require 'rubygems/package_task'
21
- require 'rbconfig'
22
17
 
23
18
  PKG_NAME='ruby-libvirt'
24
- PKG_VERSION='0.8.2'
25
-
26
- EXT_CONF='ext/libvirt/extconf.rb'
27
- MAKEFILE="ext/libvirt/Makefile"
28
- LIBVIRT_MODULE="ext/libvirt/_libvirt.so"
29
- SPEC_FILE="ruby-libvirt.spec"
30
- LIBVIRT_SRC=Dir.glob("ext/libvirt/*.c")
31
- LIBVIRT_SRC << MAKEFILE
19
+ PKG_VERSION='0.8.4'
20
+
21
+ EXT_DIR = "ext/libvirt"
22
+ EXTCONF = "#{EXT_DIR}/extconf.rb"
23
+ MAKEFILE = "#{EXT_DIR}/Makefile"
24
+ LIBVIRT_MODULE = "#{EXT_DIR}/_libvirt.so"
25
+ SPEC_FILE = "#{PKG_NAME}.spec"
26
+ SRC_FILES = FileList[
27
+ "#{EXT_DIR}/_libvirt.c",
28
+ "#{EXT_DIR}/common.c",
29
+ "#{EXT_DIR}/common.h",
30
+ "#{EXT_DIR}/connect.c",
31
+ "#{EXT_DIR}/connect.h",
32
+ "#{EXT_DIR}/domain.c",
33
+ "#{EXT_DIR}/domain.h",
34
+ "#{EXT_DIR}/interface.c",
35
+ "#{EXT_DIR}/interface.h",
36
+ "#{EXT_DIR}/network.c",
37
+ "#{EXT_DIR}/network.h",
38
+ "#{EXT_DIR}/nodedevice.c",
39
+ "#{EXT_DIR}/nodedevice.h",
40
+ "#{EXT_DIR}/nwfilter.c",
41
+ "#{EXT_DIR}/nwfilter.h",
42
+ "#{EXT_DIR}/secret.c",
43
+ "#{EXT_DIR}/secret.h",
44
+ "#{EXT_DIR}/storage.c",
45
+ "#{EXT_DIR}/storage.h",
46
+ "#{EXT_DIR}/stream.c",
47
+ "#{EXT_DIR}/stream.h",
48
+ ]
49
+ LIB_FILES = FileList[
50
+ "lib/libvirt.rb",
51
+ ]
52
+ GEN_FILES = FileList[
53
+ MAKEFILE,
54
+ "#{EXT_DIR}/extconf.h",
55
+ ]
32
56
 
33
57
  #
34
58
  # Additional files for clean/clobber
35
59
  #
36
60
 
37
- CLEAN.include [ "ext/**/*.o", LIBVIRT_MODULE, "ext/**/depend", "ext/**/*.gcda",
38
- "ext/**/*.gcno", "ext/**/*.gcov" ]
39
-
40
- CLOBBER.include [ "ext/**/mkmf.log", "ext/**/extconf.h", MAKEFILE ]
41
-
42
- task :default => :build
61
+ CLEAN.include [ "#{EXT_DIR}/*.o", LIBVIRT_MODULE ]
62
+ CLOBBER.include [ "#{EXT_DIR}/mkmf.log" ] + GEN_FILES
43
63
 
44
64
  #
45
65
  # Build locally
46
66
  #
47
- file MAKEFILE => EXT_CONF do |t|
48
- Dir::chdir(File::dirname(EXT_CONF)) do
49
- extra = ""
50
- args = ARGV.grep(/^--with-libvirt-include=/)
51
- extra += args[0].chomp unless args.empty?
52
- args = ARGV.grep(/^--with-libvirt-lib=/)
53
- extra += " " + args[0].chomp unless args.empty?
54
-
55
- unless sh "ruby #{File::basename(EXT_CONF)} #{extra}"
56
- $stderr.puts "Failed to run extconf"
57
- break
58
- end
67
+
68
+ task :default => :build
69
+
70
+ file MAKEFILE => EXTCONF do |t|
71
+ Dir::chdir(File::dirname(EXTCONF)) do
72
+ sh "ruby #{File::basename(EXTCONF)}"
59
73
  end
60
74
  end
61
- file LIBVIRT_MODULE => LIBVIRT_SRC do |t|
62
- Dir::chdir(File::dirname(EXT_CONF)) do
63
- unless sh "make"
64
- $stderr.puts "make failed"
65
- break
66
- end
67
- end
75
+ file LIBVIRT_MODULE => SRC_FILES + [ MAKEFILE ] do |t|
76
+ Dir::chdir(File::dirname(EXTCONF)) do
77
+ sh "make"
78
+ end
68
79
  end
69
80
  desc "Build the native library"
70
81
  task :build => LIBVIRT_MODULE
71
82
 
72
83
  #
73
- # Test task
84
+ # Test tasks
74
85
  #
75
86
 
87
+ TEST_FILES = FileList[
88
+ "tests/test_conn.rb",
89
+ "tests/test_domain.rb",
90
+ "tests/test_interface.rb",
91
+ "tests/test_network.rb",
92
+ "tests/test_nodedevice.rb",
93
+ "tests/test_nwfilter.rb",
94
+ "tests/test_open.rb",
95
+ "tests/test_secret.rb",
96
+ "tests/test_storage.rb",
97
+ "tests/test_stream.rb",
98
+ "tests/test_utils.rb",
99
+ ]
100
+
76
101
  Rake::TestTask.new(:test) do |t|
77
- t.test_files = [ 'tests/test_conn.rb', 'tests/test_domain.rb',
78
- 'tests/test_interface.rb', 'tests/test_network.rb',
79
- 'tests/test_nodedevice.rb', 'tests/test_nwfilter.rb',
80
- 'tests/test_open.rb', 'tests/test_secret.rb',
81
- 'tests/test_storage.rb', 'tests/test_stream.rb' ]
82
- t.libs = [ 'lib', 'ext/libvirt' ]
102
+ t.test_files = TEST_FILES
103
+ t.libs << EXT_DIR
83
104
  end
84
105
  task :test => :build
85
106
 
@@ -87,65 +108,55 @@ task :test => :build
87
108
  # Documentation tasks
88
109
  #
89
110
 
90
- RDOC_FILES = FileList[ "README.rdoc", "lib/libvirt.rb",
91
- "ext/libvirt/_libvirt.c", "ext/libvirt/connect.c",
92
- "ext/libvirt/domain.c", "ext/libvirt/interface.c",
93
- "ext/libvirt/network.c", "ext/libvirt/nodedevice.c",
94
- "ext/libvirt/nwfilter.c", "ext/libvirt/secret.c",
95
- "ext/libvirt/storage.c", "ext/libvirt/stream.c" ]
111
+ RDOC_MAIN = "doc/main.rdoc"
112
+ RDOC_FILES = FileList[ RDOC_MAIN ] + SRC_FILES + LIB_FILES
96
113
 
97
- Rake::RDocTask.new do |rd|
98
- rd.main = "README.rdoc"
114
+ RDoc::Task.new do |rd|
115
+ rd.main = RDOC_MAIN
99
116
  rd.rdoc_dir = "doc/site/api"
100
117
  rd.rdoc_files.include(RDOC_FILES)
101
118
  end
102
119
 
103
- Rake::RDocTask.new(:ri) do |rd|
104
- rd.main = "README.rdoc"
120
+ RDoc::Task.new(:ri) do |rd|
121
+ rd.main = RDOC_MAIN
105
122
  rd.rdoc_dir = "doc/ri"
106
123
  rd.options << "--ri-system"
107
124
  rd.rdoc_files.include(RDOC_FILES)
108
125
  end
109
126
 
110
- #
111
- # Splint task
112
- #
113
-
114
- task :splint => [ MAKEFILE ] do |t|
115
- Dir::chdir(File::dirname(EXT_CONF)) do
116
- unless sh "splint -I" + Config::CONFIG['vendorarchdir'] + " *.c"
117
- $stderr.puts "Failed to run splint"
118
- break
119
- end
120
- end
121
- end
122
-
123
127
  #
124
128
  # Package tasks
125
129
  #
126
130
 
127
- PKG_FILES = FileList[ "Rakefile", "COPYING", "README", "NEWS", "README.rdoc",
128
- "lib/**/*.rb",
129
- "ext/**/*.[ch]", "ext/**/MANIFEST", "ext/**/extconf.rb",
130
- "tests/**/*",
131
- "spec/**/*" ]
132
-
133
- DIST_FILES = FileList[ "pkg/*.src.rpm", "pkg/*.gem", "pkg/*.zip",
134
- "pkg/*.tgz" ]
131
+ PKG_FILES = FileList[
132
+ "Rakefile",
133
+ "COPYING",
134
+ "README.rst",
135
+ "NEWS.rst",
136
+ EXTCONF,
137
+ RDOC_MAIN,
138
+ ] + SRC_FILES + LIB_FILES + TEST_FILES
135
139
 
136
140
  SPEC = Gem::Specification.new do |s|
137
141
  s.name = PKG_NAME
138
142
  s.version = PKG_VERSION
139
- s.email = "libvir-list@redhat.com"
140
- s.homepage = "https://ruby.libvirt.org/"
141
- s.summary = "Ruby bindings for LIBVIRT"
142
143
  s.files = PKG_FILES
143
- s.required_ruby_version = '>= 1.8.1'
144
- s.extensions = "ext/libvirt/extconf.rb"
145
- s.author = "David Lutterkort, Chris Lalancette"
146
- s.rubyforge_project = "None"
147
- s.description = "Ruby bindings for libvirt."
144
+ s.extensions = EXTCONF
145
+ s.required_ruby_version = ">= 1.8.1"
146
+ s.summary = "Ruby bindings for libvirt"
147
+ s.description = <<~EOF
148
+ ruby-libvirt allows applications written in Ruby to use the
149
+ libvirt API.
150
+ EOF
151
+ s.authors = ["David Lutterkort", "Chris Lalancette"]
148
152
  s.license = "LGPL-2.1-or-later"
153
+ s.email = "devel@lists.libvirt.org"
154
+ s.homepage = "https://ruby.libvirt.org/"
155
+ s.metadata = {
156
+ "source_code_uri" => "https://gitlab.com/libvirt/libvirt-ruby",
157
+ "bug_tracker_uri" => "https://gitlab.com/libvirt/libvirt-ruby/-/issues",
158
+ "documentation_uri" => "https://ruby.libvirt.org/api/index.html",
159
+ }
149
160
  end
150
161
 
151
162
  Gem::PackageTask.new(SPEC) do |pkg|
@@ -155,12 +166,22 @@ end
155
166
 
156
167
  desc "Build (S)RPM for #{PKG_NAME}"
157
168
  task :rpm => [ :package ] do |t|
158
- system("sed -e 's/@VERSION@/#{PKG_VERSION}/' #{SPEC_FILE} > pkg/#{SPEC_FILE}")
159
- Dir::chdir("pkg") do |dir|
160
- dir = File::expand_path(".")
161
- system("rpmbuild --define '_topdir #{dir}' --define '_sourcedir #{dir}' --define '_srcrpmdir #{dir}' --define '_rpmdir #{dir}' --define '_builddir #{dir}' -ba #{SPEC_FILE} > rpmbuild.log 2>&1")
162
- if $? != 0
163
- raise "rpmbuild failed"
164
- end
165
- end
169
+ pkg_dir = File::expand_path("pkg")
170
+ sed = [
171
+ "sed",
172
+ "-e", "'s/@VERSION@/#{PKG_VERSION}/'",
173
+ "#{SPEC_FILE}.in", ">#{pkg_dir}/#{SPEC_FILE}",
174
+ ]
175
+ sh sed.join(" ")
176
+ rpmbuild = [
177
+ "rpmbuild",
178
+ "--clean",
179
+ "--define", "'_topdir #{pkg_dir}'",
180
+ "--define", "'_sourcedir #{pkg_dir}'",
181
+ "--define", "'_srcrpmdir #{pkg_dir}'",
182
+ "--define", "'_rpmdir #{pkg_dir}'",
183
+ "--define", "'_builddir #{pkg_dir}'",
184
+ "-ba", "#{pkg_dir}/#{SPEC_FILE}",
185
+ ]
186
+ sh rpmbuild.join(" ")
166
187
  end
data/ext/libvirt/common.c CHANGED
@@ -491,3 +491,14 @@ int ruby_libvirt_get_maxcpus(virConnectPtr conn)
491
491
 
492
492
  return maxcpu;
493
493
  }
494
+
495
+ /* For classes where Ruby objects are just wrappers around C pointers,
496
+ * the only acceptable way to create new instances is to use
497
+ * Connect.create_domain_xml and similar. The use of Domain.new and
498
+ * friends is explicitly disallowed by providing this functions as
499
+ * implementation when defining the class
500
+ */
501
+ VALUE ruby_libvirt_new_not_allowed(int argc, VALUE *argv, VALUE obj)
502
+ {
503
+ rb_raise(rb_eTypeError, "Not allowed for this class");
504
+ }
data/ext/libvirt/common.h CHANGED
@@ -268,6 +268,8 @@ struct ruby_libvirt_str_new2_and_ary_store_arg {
268
268
  };
269
269
  VALUE ruby_libvirt_str_new2_and_ary_store_wrap(VALUE arg);
270
270
 
271
+ VALUE ruby_libvirt_new_not_allowed(int argc, VALUE *argv, VALUE obj);
272
+
271
273
  #ifndef RARRAY_LEN
272
274
  #define RARRAY_LEN(ar) (RARRAY(ar)->len)
273
275
  #endif
@@ -2741,6 +2741,9 @@ static VALUE libvirt_connect_node_free_pages(int argc, VALUE *argv, VALUE c)
2741
2741
  void ruby_libvirt_connect_init(void)
2742
2742
  {
2743
2743
  c_connect = rb_define_class_under(m_libvirt, "Connect", rb_cObject);
2744
+ rb_undef_alloc_func(c_connect);
2745
+ rb_define_singleton_method(c_connect, "new",
2746
+ ruby_libvirt_new_not_allowed, -1);
2744
2747
 
2745
2748
  /*
2746
2749
  * Class Libvirt::Connect::Nodeinfo
data/ext/libvirt/domain.c CHANGED
@@ -4063,6 +4063,9 @@ static VALUE libvirt_domain_user_password_equal(VALUE d, VALUE in)
4063
4063
  void ruby_libvirt_domain_init(void)
4064
4064
  {
4065
4065
  c_domain = rb_define_class_under(m_libvirt, "Domain", rb_cObject);
4066
+ rb_undef_alloc_func(c_domain);
4067
+ rb_define_singleton_method(c_domain, "new",
4068
+ ruby_libvirt_new_not_allowed, -1);
4066
4069
 
4067
4070
  rb_define_const(c_domain, "NOSTATE", INT2NUM(VIR_DOMAIN_NOSTATE));
4068
4071
  rb_define_const(c_domain, "RUNNING", INT2NUM(VIR_DOMAIN_RUNNING));
@@ -4388,6 +4391,10 @@ void ruby_libvirt_domain_init(void)
4388
4391
  * Class Libvirt::Domain::Snapshot
4389
4392
  */
4390
4393
  c_domain_snapshot = rb_define_class_under(c_domain, "Snapshot", rb_cObject);
4394
+ rb_undef_alloc_func(c_domain_snapshot);
4395
+ rb_define_singleton_method(c_domain_snapshot, "new",
4396
+ ruby_libvirt_new_not_allowed, -1);
4397
+
4391
4398
  rb_define_const(c_domain_snapshot, "DELETE_CHILDREN",
4392
4399
  INT2NUM(VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN));
4393
4400
  rb_define_method(c_domain_snapshot, "xml_desc",
@@ -1,9 +1,5 @@
1
1
  require 'mkmf'
2
2
 
3
- RbConfig::MAKEFILE_CONFIG['CC'] = ENV['CC'] if ENV['CC']
4
- RbConfig::MAKEFILE_CONFIG['CCDLFLAGS'] = ENV['CFLAGS'] if ENV['CFLAGS']
5
- RbConfig::MAKEFILE_CONFIG['EXTDLDFLAGS'] = ENV['CFLAGS'] if ENV['CFLAGS']
6
-
7
3
  extension_name = '_libvirt'
8
4
 
9
5
  unless pkg_config("libvirt")
@@ -174,6 +174,10 @@ static VALUE libvirt_interface_free(VALUE i)
174
174
  void ruby_libvirt_interface_init(void)
175
175
  {
176
176
  c_interface = rb_define_class_under(m_libvirt, "Interface", rb_cObject);
177
+ rb_undef_alloc_func(c_interface);
178
+ rb_define_singleton_method(c_interface, "new",
179
+ ruby_libvirt_new_not_allowed, -1);
180
+
177
181
  rb_define_const(c_interface, "XML_INACTIVE",
178
182
  INT2NUM(VIR_INTERFACE_XML_INACTIVE));
179
183
  rb_define_attr(c_interface, "connection", 1, 0);
@@ -329,6 +329,10 @@ static VALUE libvirt_network_get_dhcp_leases(int argc, VALUE *argv, VALUE n)
329
329
  void ruby_libvirt_network_init(void)
330
330
  {
331
331
  c_network = rb_define_class_under(m_libvirt, "Network", rb_cObject);
332
+ rb_undef_alloc_func(c_network);
333
+ rb_define_singleton_method(c_network, "new",
334
+ ruby_libvirt_new_not_allowed, -1);
335
+
332
336
  rb_define_attr(c_network, "connection", 1, 0);
333
337
 
334
338
  rb_define_method(c_network, "undefine", libvirt_network_undefine, 0);
@@ -260,6 +260,9 @@ static VALUE libvirt_nodedevice_lookup_scsi_host_by_wwn(int argc, VALUE *argv,
260
260
  void ruby_libvirt_nodedevice_init(void)
261
261
  {
262
262
  c_nodedevice = rb_define_class_under(m_libvirt, "NodeDevice", rb_cObject);
263
+ rb_undef_alloc_func(c_nodedevice);
264
+ rb_define_singleton_method(c_nodedevice, "new",
265
+ ruby_libvirt_new_not_allowed, -1);
263
266
 
264
267
  rb_define_attr(c_nodedevice, "connection", 1, 0);
265
268
 
@@ -123,6 +123,10 @@ static VALUE libvirt_nwfilter_free(VALUE n)
123
123
  void ruby_libvirt_nwfilter_init(void)
124
124
  {
125
125
  c_nwfilter = rb_define_class_under(m_libvirt, "NWFilter", rb_cObject);
126
+ rb_undef_alloc_func(c_nwfilter);
127
+ rb_define_singleton_method(c_nwfilter, "new",
128
+ ruby_libvirt_new_not_allowed, -1);
129
+
126
130
  rb_define_attr(c_nwfilter, "connection", 1, 0);
127
131
 
128
132
  /* NWFilter object methods */