[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Help needed with building Ruby extensions for hivex, libguestfs



Lucas Nussbaum escreveu isso aí:
> On 23/08/11 at 00:35 +0200, Hilko Bengen wrote:
> > Hi,
> > 
> > I'd love to provide ruby-hivex and ruby-guestfs packages, but I need
> > some help with figuring out what needs to be adjusted so that the Ruby
> > bindings can be built in separate builddirs. Working patches would be
> > even better. :-)
> > 
> > Both packages use autoconf to generate the Rakefile at build-time. So
> > far, I haven't been able to figure out how to adjust the paths so that
> > "rake build" will put all newly generated files below @builddir@ and
> > "rake install" will take the files from appropriate locations.
> 
> Hi,
> 
> I've looked at the hivex source package, but couldn't find ruby bindings
> there.
> For guestfs, I'd suggest ignoring the Rakefile completely, and using
> gem2deb to build the extension. I don't think that gem2deb can use a
> different root directly at the moment. Antonio, what do you think?

The problem with the generated Rakefile is that it it hardcodes using `ruby`.
Depending on what your /usr/bin/ruby points to (currently it can be ruby1.8 or
ruby1.9.1), it will only build bindings for that specific version.

gem2deb can't use a different root, but the extension builder will look
for every extconf.rb under the root and build/install it with all
supported Ruby versions.

I would do as Lucas suggested: ignore the upstream Ruby support and
build directly with gem2deb. The attached patches should do the trick. I
couldn't actually test these patches here because the build failed
before that point as follows:

c -I..    -Wall -Wno-unused -fno-strict-aliasing -g -O2 -c -o libprotocol_la-guestfs_protocol.lo `test -f 'guestfs_protocol.c' || echo '../../../src/'`guestfs_protocol.c
guestfs_protocol.c:6:33: fatal error: ../guestfs_protocol.h: No such file or directory
compilation terminated.
make[5]: *** [libprotocol_la-guestfs_protocol.lo] Error 1
make[5]: Leaving directory `/tmp/libguestfs/debian/build-python2.6/src'
make[4]: *** [all] Error 2
make[4]: Leaving directory `/tmp/libguestfs/debian/build-python2.6/src'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/tmp/libguestfs/debian/build-python2.6'
make[2]: ** [all] Erro 2
make[2]: Saindo do diretório `/tmp/libguestfs/debian/build-python2.6'
dh_auto_build: make -j1 INSTALLDIRS=vendor LD_RUN_PATH= returned exit code 2
make[1]: ** [override_dh_auto_build] Erro 2
make[1]: Saindo do diretório `/tmp/libguestfs'
make: ** [build] Erro 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
debuild: fatal error at line 1348:
dpkg-buildpackage -rfakeroot -D -us -uc -i -I failed
gbp:error: debuild -i -I returned 29
gbp:error: Couldn't run 'debuild -i -I -us -uc'

HTH,

-- 
Antonio Terceiro <terceiro@debian.org>
From 6e22d7a58e71ffc54a12ed0c42ae9e513e7c0fab Mon Sep 17 00:00:00 2001
From: Antonio Terceiro <terceiro@softwarelivre.org>
Date: Sat, 27 Aug 2011 16:51:01 -0700
Subject: [PATCH 1/2] Custom CFLAGS and LDFLAGS for Ruby build

---
 ruby/ext/guestfs/extconf.rb |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/ruby/ext/guestfs/extconf.rb b/ruby/ext/guestfs/extconf.rb
index cc053aa..8883722 100644
--- a/ruby/ext/guestfs/extconf.rb
+++ b/ruby/ext/guestfs/extconf.rb
@@ -22,6 +22,11 @@ extension_name = '_guestfs'
 
 dir_config(extension_name)
 
+topdir = File.expand_path(File.dirname(__FILE__), '../../..')
+
+$CFLAGS = "#{$CFLAGS} -I#{topdir}/src"
+$LDFLAGS = "#{$LDFLAGS} -L#{topdir}/src"
+
 unless have_header("guestfs.h")
   raise "<guestfs.h> not found"
 end
-- 
1.7.5.4

From da1439557aa840474e22c36c852f661c92620f21 Mon Sep 17 00:00:00 2001
From: Antonio Terceiro <terceiro@softwarelivre.org>
Date: Sat, 27 Aug 2011 16:53:27 -0700
Subject: [PATCH 2/2] Build Ruby bindings

---
 debian/control |   25 +++++++++++++++++++++++++
 debian/rules   |    2 ++
 2 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/debian/control b/debian/control
index 5686fee..e22e06f 100644
--- a/debian/control
+++ b/debian/control
@@ -15,12 +15,14 @@ Build-Depends: debhelper (>= 7.0.50~), autotools-dev, aptitude,
   genisoimage, pkg-config,
   dh-ocaml, ocaml, ocaml-findlib, libpcre-ocaml-dev,
   python (>= 2.6.7-2), python-all-dev (>= 2.6.6-3~), python3-all-dev,
+  gem2deb (>= 0.2.7~),
   libtest-pod-coverage-perl, libextutils-command-perl, libintl-perl, libtest-pod-perl,
   libstring-shellquote-perl,
   libsys-virt-perl, libwin-hivex-perl,
   libfuse-dev, fuse-utils 
 Homepage: http://libguestfs.org
 Standards-Version: 3.9.2
+XS-Ruby-Versions: all
 
 Package: guestfish
 Section: admin
@@ -310,3 +312,26 @@ Description: library for accessing and modifying guest disk images
  .
  This package contains all the files needed to develop OCaml programs
  wich use OCaml bindings to libguestfs.
+
+Package: ruby-guestfs
+Section: python
+Architecture: i386 amd64
+Depends: ${shlibs:Depends}, ${misc:Depends}, ruby | ruby-interpreter, libguestfs0 (= ${binary:Version})
+Description: library for accessing and modifying guest disk images
+ libguestfs is a library for accessing and modifying guest disk images. Amongst
+ the things this is good for: making batch configuration changes to guests,
+ viewing and editing files inside guests, getting disk used/free statistics,
+ migrating between virtualization systems, performing partial backups,
+ performing partial guest clones, cloning guests and changing
+ registry/UUID/hostname info, and much else besides.
+ .
+ It uses Linux kernel and qemu code, and can access any type of guest
+ filesystem that Linux and qemu can, including but not limited to: ext2/3/4,
+ btrfs, FAT and NTFS, LVM, many different disk partition schemes, qcow, qcow2,
+ vmdk.
+ .
+ libguestfs provides ways to enumerate guest storage (eg. partitions, LVs, what
+ filesystem is in each LV, etc.). It can also run commands in the context of 
+ the guest. Also you can upload and download files and directories.
+ .
+ This package contains the Ruby bindings.
diff --git a/debian/rules b/debian/rules
index 9ae5321..baa395d 100755
--- a/debian/rules
+++ b/debian/rules
@@ -66,6 +66,8 @@ override_dh_auto_install:
 	        DESTDIR=$(CURDIR)/debian/tmp ; \
 	    fi ; \
 	done
+	dh_install -p ruby-guestfs ruby/lib/guestfs.rb /usr/lib/ruby/vendor_lib
+	DH_RUBY_USE_DH_AUTO_INSTALL_DESTDIR=yes dh_ruby --install $(CURDIR)/debian/ruby-guestfs
 
 override_dh_install:
 	rm -f debian/tmp/usr/lib/python*/dist-packages/libguestfsmod.la
-- 
1.7.5.4

Attachment: signature.asc
Description: Digital signature


Reply to: