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

[xen master] libs/stat: Fix and rework python-bindings build



commit 1e983961452bec4df691e1c6521e06de8567486a
Author:     Anthony PERARD <anthony.perard@xxxxxxxxxx>
AuthorDate: Fri Feb 25 15:13:13 2022 +0000
Commit:     Julien Grall <jgrall@xxxxxxxxxx>
CommitDate: Thu Jun 16 16:58:50 2022 +0100

    libs/stat: Fix and rework python-bindings build
    
    Fix the dependency on the library, $(SHLIB) variable doesn't exist
    anymore.
    
    Rework dependency on the include file, we can let `swig` generate the
    dependency for us with the use of "-M*" flags.
    
    The xenstat.h file has moved so we need to fix the include location.
    
    Rather than relaying on the VCS to create an empty directory for us,
    we can create one before generating the *.c file for the bindings.
    
    Make use of generic variable names to build a shared library from a
    source file: CFLAGS, LDFLAGS, and LDLIBS.
    
    Fix python's specific *flags by using python-config, and add them to
    generic flags variables: CFLAGS, LDLIBS.
    
    To build a shared library, we need to build the source file with
    "-fPIC", which was drop by 6d0ec05390 (tools: split libxenstat into
    new tools/libs/stat directory).
    
    The source file generated by swig seems to be missing a prototype for
    the "init" function, so we need "-Wno-missing-prototypes" in order to
    build it.
    
    Add some targets to .PHONY.
    
    Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
    Reviewed-by: Juergen Gross <jgross@xxxxxxxx>
---
 tools/libs/stat/Makefile                    | 27 +++++++++++++++++++--------
 tools/libs/stat/bindings/swig/python/.empty |  1 -
 2 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/tools/libs/stat/Makefile b/tools/libs/stat/Makefile
index 998435d494..b8d75810fc 100644
--- a/tools/libs/stat/Makefile
+++ b/tools/libs/stat/Makefile
@@ -49,23 +49,34 @@ install-bindings: install-perl-bindings 
install-python-bindings
 .PHONY: uninstall-bindings
 uninstall-bindings: uninstall-perl-bindings uninstall-python-bindings
 
-$(BINDINGS): $(SHLIB) $(SHLIB_LINKS) include/xenstat.h
+$(BINDINGS): libxenstat.so
 
-SWIG_FLAGS=-module xenstat -Iinclude -I.
+SWIG_FLAGS = -module xenstat -I$(XEN_INCLUDE)
+SWIG_FLAGS += -MMD -MP -MF .$(if $(filter-out .,$(@D)),$(subst 
/,@,$(@D))@)$(@F).d
 
 # Python bindings
-PYTHON_VERSION=$(PYTHON:python%=%)
-PYTHON_FLAGS=-I/usr/include/python$(PYTHON_VERSION) -lpython$(PYTHON_VERSION)
 $(PYMOD): $(PYSRC)
 $(PYSRC): bindings/swig/xenstat.i
-       swig -python $(SWIG_FLAGS) -outdir $(@D) -o $(PYSRC) $<
-
+       mkdir -p $(@D)
+       swig -python $(SWIG_FLAGS) -outdir $(@D) -o $@ $<
+
+$(PYLIB): CFLAGS += $(shell $(PYTHON)-config --includes)
+$(PYLIB): CFLAGS += -fPIC
+$(PYLIB): CFLAGS += -Wno-missing-prototypes
+$(PYLIB): LDFLAGS += $(SHLIB_LDFLAGS)
+$(PYLIB): LDLIBS := $(shell $(PYTHON)-config --libs)
+$(PYLIB): LDLIBS += $(LDLIBS_libxenstat)
 $(PYLIB): $(PYSRC)
-       $(CC) $(CFLAGS) $(LDFLAGS) $(PYTHON_FLAGS) $(SHLIB_LDFLAGS) -lxenstat 
-o $@ $< $(APPEND_LDFLAGS)
+       $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LDLIBS) $(APPEND_LDFLAGS)
 
+.PHONY: python-bindings
 python-bindings: $(PYLIB) $(PYMOD)
 
-pythonlibdir=$(prefix)/lib/python$(PYTHON_VERSION)/site-packages
+pythonlibdir = $(shell $(PYTHON) -c \
+              'import distutils.sysconfig as cfg; \
+               print(cfg.get_python_lib(False, False, prefix="$(prefix)"))')
+
+.PHONY: install-python-bindings
 install-python-bindings: $(PYLIB) $(PYMOD)
        $(INSTALL_PROG) $(PYLIB) $(DESTDIR)$(pythonlibdir)/_xenstat.so
        $(INSTALL_PROG) $(PYMOD) $(DESTDIR)$(pythonlibdir)/xenstat.py
diff --git a/tools/libs/stat/bindings/swig/python/.empty 
b/tools/libs/stat/bindings/swig/python/.empty
deleted file mode 100644
index 2a8dd4274d..0000000000
--- a/tools/libs/stat/bindings/swig/python/.empty
+++ /dev/null
@@ -1 +0,0 @@
-This directory is empty; this file is included to prevent version control 
systems from removing the directory.
--
generated by git-patchbot for /home/xen/git/xen.git#master



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.