home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / usr / share / YaST2 / data / devtools / admin / aminclude / pluglib-bindings.ami
Text File  |  2006-11-29  |  3KB  |  77 lines

  1. # -*- makefile -*- Automake include file
  2. # $Id: pluglib-bindings.ami 27327 2006-01-25 14:12:13Z mvidner $
  3.  
  4. # Wraps a pluglib for use by YaST. Done by using Swig for Perl, adding
  5. # type information. Compiles, installs.
  6.  
  7. # expected input:
  8. #  PLUGLIB_MODULE = the name after %module in .i
  9. #  PLUGLIB_LIBRARY = the object file/library that is being wrapped
  10. #  PLUGLIB_DEPEND = dependencies
  11. # example:
  12. #  PLUGLIB_MODULE = Storage
  13. #  PLUGLIB_LIBRARY = .libs/liby2storage.so
  14. #  PLUGLIB_DEPEND = ../../src/StorageInterface.h
  15. #  include $(top_srcdir)/pluglib-bindings.ami
  16.  
  17. TARGET_PM = $(PLUGLIB_MODULE).pm
  18. TARGET_SO = $(PLUGLIB_MODULE).so
  19.  
  20. # ydatadir or `pkg-config --variable=yast2dir yast2-devtools`/data ?
  21. # putting files to a directory owned by another package?
  22. # ok but then they should share prefixes (maybe not really)
  23. PLGB_BASEDIR = $(ydatadir)/devtools/pluglib-bindings
  24.  
  25. # TODO configure
  26. SWIG = swig
  27. #SWIG = $(HOME)/pfx-swig-1.3.24/bin/swig
  28. SWIGFLAGS = -I$(PLGB_BASEDIR)/swig -c++
  29.  
  30. # Process the .i file, creating a wrapper for Perl and a XML parse.
  31. %_wrap.cc %_wrap.xml: %.i $(PLUGLIB_DEPEND)
  32.     $(SWIG) -perl $(SWIGFLAGS) -o $*_wrap.cc -xmlout $*_wrap.xml $<
  33.  
  34. PLGB_TYPEINFO_XSL = $(PLGB_BASEDIR)/stylesheets/swigxml2typeinfo.xsl
  35. PLGB_TYPEINFO_FILTER = $(PLGB_BASEDIR)/stylesheets/filter.pl
  36.  
  37. # Add typeinfo
  38. # (sablotron indeed has fewer build dependencies than xsltproc)
  39. # PLGB_TYPEINFO_FILTER opens all files in append mode
  40. # which is strange but we can live with it by deleting the
  41. # appropriate files beforehand.
  42. $(TARGET_PM): %.pm: %_wrap.xml
  43.     if test -d $(PLUGLIB_MODULE); then \
  44.       rm -f $(PLUGLIB_MODULE)/*.pm; \
  45.     fi
  46.     sabcmd $(PLGB_TYPEINFO_XSL) $< | perl $(PLGB_TYPEINFO_FILTER)
  47.  
  48. # Install the Perl modules
  49. PLGB_PMdir = $(moduledir)
  50. PLGB_PM_DATA = $(TARGET_PM)
  51. # Copy the directory with additional pm modules
  52. install-data-local:
  53.     if test -d $(PLUGLIB_MODULE); then \
  54.       cp --recursive $(PLUGLIB_MODULE) $(DESTDIR)$(PLGB_PMdir); \
  55.     fi
  56. # This is to ensure that automake generates the LTCXXCOMPILE variable.
  57. # We need to use LTCXXCOMPILE because libtool puts in -fPIC on some
  58. # architectures and also we get RPM_OPT_FLAGS via CXXCLAGS that way.
  59. noinst_PROGRAMS = dummy_to_have_cxxcompile
  60. dummy_to_have_cxxcompile_SOURCES = dummy_to_have_cxxcompile.cc
  61. dummy_to_have_cxxcompile.cc:
  62.     echo 'int main() {return 0;}' > $@
  63.  
  64. # Compile the wrapper
  65. .libs/%_wrap.o: %_wrap.cc
  66.     $(LTCXXCOMPILE) $(PERL_CFLAGS) -c -o $*_wrap.lo $<
  67.  
  68. # Link the wrapper and the actual library
  69. $(TARGET_SO): %.so: .libs/%_wrap.o $(PLUGLIB_LIBRARY)
  70.     $(CXXCOMPILE) -shared -o $@ $^
  71.  
  72. # Install the library
  73. PLGB_SOdir = $(PERL_VENDORARCH)
  74. PLGB_SO_DATA = $(TARGET_SO)
  75.  
  76. CLEANFILES = $(PLUGLIB_MODULE)_wrap.*
  77.