libapparmor: Fix ruby 3.1 build for libapparmor

The Hack used to build the libapparmor swig interface for ruby fails
with ruby 3.1.  Instead of trying to do black magic in ruby to rename
the generated Makefile to Makefile.new, just save off the Makefile
and restore after ruby's setup has been called.

Fixes: https://gitlab.com/apparmor/apparmor/-/issues/206
Signed-off-by: John Johansen <john.johansen@canonical.com>
Acked-by: Christian Boltz <apparmor@cboltz.de>
This commit is contained in:
John Johansen 2022-01-26 08:04:04 -08:00
parent 0e52b555ae
commit 1ca30e35b0
3 changed files with 7 additions and 13 deletions

2
.gitignore vendored
View file

@ -177,7 +177,7 @@ libraries/libapparmor/swig/ruby/LibAppArmor_wrap.c
libraries/libapparmor/swig/ruby/LibAppArmor_wrap.o libraries/libapparmor/swig/ruby/LibAppArmor_wrap.o
libraries/libapparmor/swig/ruby/Makefile libraries/libapparmor/swig/ruby/Makefile
libraries/libapparmor/swig/ruby/Makefile.in libraries/libapparmor/swig/ruby/Makefile.in
libraries/libapparmor/swig/ruby/Makefile.new libraries/libapparmor/swig/ruby/Makefile.bak
libraries/libapparmor/swig/ruby/Makefile.ruby libraries/libapparmor/swig/ruby/Makefile.ruby
libraries/libapparmor/swig/ruby/mkmf.log libraries/libapparmor/swig/ruby/mkmf.log
libraries/libapparmor/testsuite/.deps libraries/libapparmor/testsuite/.deps

View file

@ -9,7 +9,9 @@ LibAppArmor_wrap.c : $(srcdir)/../SWIG/libapparmor.i
MOSTLYCLEANFILES=LibAppArmor_wrap.c MOSTLYCLEANFILES=LibAppArmor_wrap.c
Makefile.ruby: extconf.rb Makefile.ruby: extconf.rb
mv Makefile Makefile.bak
PREFIX=$(prefix) $(RUBY) $< --with-LibAppArmor-include=$(top_srcdir)/include PREFIX=$(prefix) $(RUBY) $< --with-LibAppArmor-include=$(top_srcdir)/include
mv Makefile.bak Makefile
LibAppArmor.so: LibAppArmor_wrap.c Makefile.ruby LibAppArmor.so: LibAppArmor_wrap.c Makefile.ruby
$(MAKE) -fMakefile.ruby $(MAKE) -fMakefile.ruby
@ -22,7 +24,7 @@ install-exec-local: Makefile.ruby
clean-local: clean-local:
if test -f Makefile.ruby; then $(MAKE) -fMakefile.ruby clean; fi if test -f Makefile.ruby; then $(MAKE) -fMakefile.ruby clean; fi
rm -f Makefile.ruby Makefile.new rm -f Makefile.ruby Makefile.bak
rm -f *.o *.so *.log rm -f *.o *.so *.log
endif endif

View file

@ -2,16 +2,8 @@
require 'mkmf' require 'mkmf'
# hack 1: ruby black magic to write a Makefile.new instead of a Makefile # hack 1: Before extconf.rb gets called, Makefile gets backed up, and
alias open_orig open # restored afterwards (see Makefile.am)
def open(path, mode=nil, perm=nil)
path = 'Makefile.new' if path == 'Makefile'
if block_given?
open_orig(path, mode, perm) { |io| yield(io) }
else
open_orig(path, mode, perm)
end
end
if ENV['PREFIX'] if ENV['PREFIX']
prefix = CONFIG['prefix'] prefix = CONFIG['prefix']
@ -27,7 +19,7 @@ if find_library('apparmor', 'parse_record', '../../src/.libs') and
# hack 2: strip all rpath references # hack 2: strip all rpath references
open('Makefile.ruby', 'w') do |out| open('Makefile.ruby', 'w') do |out|
IO.foreach('Makefile.new') do |line| IO.foreach('Makefile') do |line|
out.puts line.gsub(/-Wl,-R'[^']*'/, '') out.puts line.gsub(/-Wl,-R'[^']*'/, '')
end end
end end