CASA/casa-yast/pluglib-bindings.ami
2006-04-14 20:38:26 +00:00

77 lines
2.6 KiB
Makefile

# -*- makefile -*- Automake include file
# $Id: pluglib-bindings.ami 27327 2006-01-25 14:12:13Z mvidner $
# Wraps a pluglib for use by YaST. Done by using Swig for Perl, adding
# type information. Compiles, installs.
# expected input:
# PLUGLIB_MODULE = the name after %module in .i
# PLUGLIB_LIBRARY = the object file/library that is being wrapped
# PLUGLIB_DEPEND = dependencies
# example:
# PLUGLIB_MODULE = Storage
# PLUGLIB_LIBRARY = .libs/liby2storage.so
# PLUGLIB_DEPEND = ../../src/StorageInterface.h
# include $(top_srcdir)/pluglib-bindings.ami
TARGET_PM = $(PLUGLIB_MODULE).pm
TARGET_SO = $(PLUGLIB_MODULE).so
# ydatadir or `pkg-config --variable=yast2dir yast2-devtools`/data ?
# putting files to a directory owned by another package?
# ok but then they should share prefixes (maybe not really)
PLGB_BASEDIR = $(ydatadir)/devtools/pluglib-bindings
# TODO configure
SWIG = swig
#SWIG = $(HOME)/pfx-swig-1.3.24/bin/swig
SWIGFLAGS = -I$(PLGB_BASEDIR)/swig -c++
# Process the .i file, creating a wrapper for Perl and a XML parse.
%_wrap.cc %_wrap.xml: %.i $(PLUGLIB_DEPEND)
$(SWIG) -perl $(SWIGFLAGS) -o $*_wrap.cc -xmlout $*_wrap.xml $<
PLGB_TYPEINFO_XSL = $(PLGB_BASEDIR)/stylesheets/swigxml2typeinfo.xsl
PLGB_TYPEINFO_FILTER = $(PLGB_BASEDIR)/stylesheets/filter.pl
# Add typeinfo
# (sablotron indeed has fewer build dependencies than xsltproc)
# PLGB_TYPEINFO_FILTER opens all files in append mode
# which is strange but we can live with it by deleting the
# appropriate files beforehand.
$(TARGET_PM): %.pm: %_wrap.xml
if test -d $(PLUGLIB_MODULE); then \
rm -f $(PLUGLIB_MODULE)/*.pm; \
fi
sabcmd $(PLGB_TYPEINFO_XSL) $< | perl $(PLGB_TYPEINFO_FILTER)
# Install the Perl modules
PLGB_PMdir = $(moduledir)
PLGB_PM_DATA = $(TARGET_PM)
# Copy the directory with additional pm modules
install-data-local:
if test -d $(PLUGLIB_MODULE); then \
cp --recursive $(PLUGLIB_MODULE) $(DESTDIR)$(PLGB_PMdir); \
fi
# This is to ensure that automake generates the LTCXXCOMPILE variable.
# We need to use LTCXXCOMPILE because libtool puts in -fPIC on some
# architectures and also we get RPM_OPT_FLAGS via CXXCLAGS that way.
noinst_PROGRAMS = dummy_to_have_cxxcompile
dummy_to_have_cxxcompile_SOURCES = dummy_to_have_cxxcompile.cc
dummy_to_have_cxxcompile.cc:
echo 'int main() {return 0;}' > $@
# Compile the wrapper
.libs/%_wrap.o: %_wrap.cc
$(LTCXXCOMPILE) $(PERL_CFLAGS) -c -o $*_wrap.lo $<
# Link the wrapper and the actual library
$(TARGET_SO): %.so: .libs/%_wrap.o $(PLUGLIB_LIBRARY)
$(CXXCOMPILE) -shared -o $@ $^
# Install the library
PLGB_SOdir = $(PERL_VENDORARCH)
PLGB_SO_DATA = $(TARGET_SO)
CLEANFILES = $(PLUGLIB_MODULE)_wrap.*