qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: kwolf@redhat.com, stefanha@gmail.com, aliguori@us.ibm.com,
	qemu-devel@nongnu.org, blauwirbel@gmail.com
Subject: Re: [Qemu-devel] [PATCH V11 4/7] libqblock build system
Date: Tue, 27 Nov 2012 11:07:11 +0800	[thread overview]
Message-ID: <50B42E5F.4030607@linux.vnet.ibm.com> (raw)
In-Reply-To: <50B31BFE.5040700@redhat.com>

于 2012-11-26 15:36, Paolo Bonzini 写道:
> Il 24/11/2012 10:27, Wenchao Xia ha scritto:
>>    Libqblock was placed in new directory ./libqblock, libtool will build
>> dynamic library there, source files of block layer remains in ./block.
>> So block related source code will generate 3 sets of binary, first is old
>> ones used in qemu, second and third are non PIC and PIC ones in ./libqblock.
>>    GCC compiler flag visibility=hidden was used with special macro, to export
>> only symbols that was marked as PUBLIC.
>>    For testing, make check-libqblock will build binaries and execute it, make
>> clean or make check-clean will delete generated binaries.
>>    By default this library will be built and tested if libtool present, out of
>> tree building is supported.
>>
>> v10:
>>    Use $(SRC_PATH) in install rules.
>>    Call install libqblock from install target in root Makefile.
>>    Make libqblock and check-libqblock is conditional to a configure option and
>> libtool now, if libtool is not present it is forced to be disabled.
>>    Removed unnest-vars in libqblock Makfile for that it was done in Makefile.objs.
>>    Picked out only needed objects files for libqblock, added stub objects in
>> libqblock linking.
>>    Use libtool to link check-libqblock.
>>    Removed -fPIC cc flag replacement in tests/Makefile.
>>    Removed seperate directory for libqblock test case.
>>    Added target subdir-libqblock.
>>    Added targets to .phony.
>>    Generate files at root directory instead of ./libqblock.
>>
>> v11:
>>    Set libqblock initial string to empty instead of “yes” in configure, by default
>> it will be set depending on libtool’s state, fail when user set it to yes but
>> libtool not present.
>>    Removed link flag in check-libqblock linkage, use libtool to search library.
>>    Added libqblock-aio.c, which contains code from main-loop.c, iohandler.c
>> compatfd.c, removed these three files from compile and link objects.
>>
>> Signed-off-by: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
>> ---
>>   .gitignore                    |    2 +
>>   Makefile                      |   25 ++++++++++++-
>>   configure                     |   39 ++++++++++++++++++++
>>   libqblock/Makefile            |   74 +++++++++++++++++++++++++++++++++++++
>>   libqblock/libqblock-aio.c     |   81 +++++++++++++++++++++++++++++++++++++++++
>>   libqblock/libqblock.c         |    6 +++
>>   libqblock/libqblock.h         |    1 +
>>   libqblock/libqblock.pc.in     |   13 +++++++
>>   tests/Makefile                |   29 ++++++++++++++-
>>   tests/check-libqblock-qcow2.c |    6 +++
>>   10 files changed, 272 insertions(+), 4 deletions(-)
>>   create mode 100644 libqblock/Makefile
>>   create mode 100644 libqblock/libqblock-aio.c
>>   create mode 100644 libqblock/libqblock-error.c
>>   create mode 100644 libqblock/libqblock-error.h
>>   create mode 100644 libqblock/libqblock-types.h
>>   create mode 100644 libqblock/libqblock.c
>>   create mode 100644 libqblock/libqblock.h
>>   create mode 100644 libqblock/libqblock.pc.in
>>   create mode 100644 tests/check-libqblock-qcow2.c
>>
>> diff --git a/.gitignore b/.gitignore
>> index bd6ba1c..77c1910 100644
>> --- a/.gitignore
>> +++ b/.gitignore
>> @@ -93,3 +93,5 @@ cscope.*
>>   tags
>>   TAGS
>>   *~
>> +tests/check-libqblock-qcow2
>> +tests/test_images
>> diff --git a/Makefile b/Makefile
>> index b04d862..dd01fe7 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -195,6 +195,27 @@ qemu-img$(EXESUF): qemu-img.o $(tools-obj-y) $(block-obj-y) libqemustub.a
>>   qemu-nbd$(EXESUF): qemu-nbd.o $(tools-obj-y) $(block-obj-y) libqemustub.a
>>   qemu-io$(EXESUF): qemu-io.o cmd.o $(tools-obj-y) $(block-obj-y) libqemustub.a
>>
>> +######################################################################
>> +# Support building shared library libqblock
>> +.PHONY: install-libqblock subdir-libqblock
>> +
>> +ifeq ($(CONFIG_LIBQBLOCK), y)
>> +subdir-libqblock: $(GENERATED_HEADERS) $(GENERATED_SOURCES)
>> +	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C libqblock V="$(V)" TARGET_DIR="$*/" all,)
>> +
>> +install-libqblock: subdir-libqblock
>> +	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C libqblock V="$(V)" TARGET_DIR="$*/" install-libqblock,)
>> +else
>> +LIBQBLOCK_WARN = "Libqblock was not enabled, skip. Make sure libtool was installed and libqblock was enabled."
>> +subdir-libqblock: $(GENERATED_HEADERS) $(GENERATED_SOURCES)
>> +	@echo $(LIBQBLOCK_WARN)
>> +
>> +install-libqblock:
>> +	@echo $(LIBQBLOCK_WARN)
>> +endif
>> +
>> +###########################################################################
>> +
>>   qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o
>>
>>   vscclient$(EXESUF): $(libcacard-y) $(oslib-obj-y) $(trace-obj-y) libcacard/vscclient.o libqemustub.a
>> @@ -258,7 +279,7 @@ clean:
>>   	rm -rf qapi-generated
>>   	rm -rf qga/qapi-generated
>>   	$(MAKE) check-clean
>> -	for d in $(ALL_SUBDIRS) $(QEMULIBS) libcacard; do \
>> +	for d in $(ALL_SUBDIRS) $(QEMULIBS) libcacard libqblock; do \
>>   	if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \
>>   	rm -f $$d/qemu-options.def; \
>>           done
>> @@ -331,7 +352,7 @@ install-confdir:
>>   install-sysconfig: install-datadir install-confdir
>>   	$(INSTALL_DATA) $(SRC_PATH)/sysconfigs/target/target-x86_64.conf "$(DESTDIR)$(qemu_confdir)"
>>
>> -install: all $(if $(BUILD_DOCS),install-doc) install-sysconfig install-datadir
>> +install: all $(if $(BUILD_DOCS),install-doc) install-sysconfig install-datadir $(if $(CONFIG_LIBQBLOCK),install-libqblock)
>>   	$(INSTALL_DIR) "$(DESTDIR)$(bindir)"
>>   ifneq ($(TOOLS),)
>>   	$(INSTALL_PROG) $(STRIP_OPT) $(TOOLS) "$(DESTDIR)$(bindir)"
>> diff --git a/configure b/configure
>> index 801585c..b0bf912 100755
>> --- a/configure
>> +++ b/configure
>> @@ -223,6 +223,7 @@ libiscsi=""
>>   coroutine=""
>>   seccomp=""
>>   glusterfs=""
>> +libqblock=""
>>
>>   # parse CC options first
>>   for opt do
>> @@ -871,6 +872,10 @@ for opt do
>>     ;;
>>     --enable-glusterfs) glusterfs="yes"
>>     ;;
>> +  --disable-libqblock) libqblock="no"
>> +  ;;
>> +  --enable-libqblock) libqblock="yes"
>> +  ;;
>>     *) echo "ERROR: unknown option $opt"; show_help="yes"
>>     ;;
>>     esac
>> @@ -1119,6 +1124,8 @@ echo "  --with-coroutine=BACKEND coroutine backend. Supported options:"
>>   echo "                           gthread, ucontext, sigaltstack, windows"
>>   echo "  --enable-glusterfs       enable GlusterFS backend"
>>   echo "  --disable-glusterfs      disable GlusterFS backend"
>> +echo "  --enable-libqblock       enable dynamic library libqblock"
>> +echo "  --disable-libqblock      disable dynamic library libqblock"
>>   echo ""
>>   echo "NOTE: The object files are built at the place where configure is launched"
>>   exit 1
>> @@ -2349,6 +2356,28 @@ EOF
>>     fi
>>   fi
>>
>> +##########################################
>> +# libqblock probe
>> +if test "$libqblock" == "yes" ; then
>> +    # if it is set to yes by user, check whether libtool exist
>> +    if ! has $libtool; then
>> +        echo
>> +        echo "ERROR: Libqblock needs libtool, but libtool was not found."
>> +        echo "Make sure libtool was installed, or disable libqblock."
>> +        echo
>> +        exit 1
>> +    fi
>> +fi
>> +
>> +if test "$libqblock" == "" ; then
>> +    # libqblock depends on libtool, default to yes if libtool exist
>> +    if ! has $libtool; then
>> +        libqblock="no"
>> +    else
>> +        libqblock="yes"
>> +    fi
>> +fi
>> +
>>   #
>>   # Check for xxxat() functions when we are building linux-user
>>   # emulator.  This is done because older glibc versions don't
>> @@ -3101,6 +3130,9 @@ if test "$want_tools" = "yes" ; then
>>     if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
>>       tools="qemu-nbd\$(EXESUF) $tools"
>>     fi
>> +  if test "$libqblock" = "yes" ; then
>> +  tools="subdir-libqblock $tools"
>> +  fi
>>   fi
>>   if test "$softmmu" = yes ; then
>>     if test "$virtfs" != no ; then
>> @@ -3235,6 +3267,7 @@ echo "build guest agent $guest_agent"
>>   echo "seccomp support   $seccomp"
>>   echo "coroutine backend $coroutine_backend"
>>   echo "GlusterFS support $glusterfs"
>> +echo "libqblock support $libqblock"
>>
>>   if test "$sdl_too_old" = "yes"; then
>>   echo "-> Your SDL version is too old - please upgrade to have SDL support"
>> @@ -3581,6 +3614,10 @@ if test "$glusterfs" = "yes" ; then
>>     echo "CONFIG_GLUSTERFS=y" >> $config_host_mak
>>   fi
>>
>> +if test "$libqblock" = "yes" ; then
>> +  echo "CONFIG_LIBQBLOCK=y" >> $config_host_mak
>> +fi
>> +
>>   # USB host support
>>   case "$usb" in
>>   linux)
>> @@ -4166,12 +4203,14 @@ DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas"
>>   DIRS="$DIRS roms/seabios roms/vgabios"
>>   DIRS="$DIRS qapi-generated"
>>   DIRS="$DIRS libcacard libcacard/libcacard libcacard/trace"
>> +DIRS="$DIRS libqblock"
>>   FILES="Makefile tests/Makefile tests/tcg/Makefile qdict-test-data.txt"
>>   FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
>>   FILES="$FILES tests/tcg/lm32/Makefile libcacard/Makefile"
>>   FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
>>   FILES="$FILES pc-bios/spapr-rtas/Makefile"
>>   FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
>> +FILES="$FILES libqblock/Makefile"
>>   for bios_file in \
>>       $source_path/pc-bios/*.bin \
>>       $source_path/pc-bios/*.rom \
>> diff --git a/libqblock/Makefile b/libqblock/Makefile
>> new file mode 100644
>> index 0000000..0602221
>> --- /dev/null
>> +++ b/libqblock/Makefile
>> @@ -0,0 +1,74 @@
>> +###########################################################################
>> +# libqblock Makefile
>> +##########################################################################
>> +-include ../config-host.mak
>> +-include $(SRC_PATH)/rules.mak
>> +-include $(SRC_PATH)/Makefile.objs
>> +
>> +#############################################################################
>> +# Library settings
>> +#############################################################################
>> +# src files are in orignial path
>> +$(call set-vpath, $(SRC_PATH))
>> +# generated files are in ../
>> +$(call set-vpath, ../)
>> +
>> +#library objects
>> +libqblock-obj-y= libqblock/libqblock.o libqblock/libqblock-error.o libqblock/libqblock-aio.o
>> +
>> +extra-obj-y= qemu-timer.o qemu-tool.o
>> +
>> +#there are symbol conflict in stub-obj-y with iohandler.o, so set new version
>> +stub-obj-new-y= stubs/get-fd.o stubs/fdset-get-fd.o stubs/fdset-find-fd.o \
>> +             stubs/fdset-remove-fd.o stubs/fdset-add-fd.o
>> +
>> +
>> +QEMU_OBJS= $(libqblock-obj-y) $(block-obj-y) $(oslib-obj-y) $(stub-obj-new-y) \
>> +           $(extra-obj-y)
>> +QEMU_OBJS_LIB= $(patsubst %.o, %.lo, $(QEMU_OBJS))
>> +
>> +QEMU_CFLAGS+= -I$(SRC_PATH) -I$(SRC_PATH)/include -I../
>> +#adding magic macro define for symbol hiding and exposing
>> +QEMU_CFLAGS+= -fvisibility=hidden -D LIBQB_BUILD
>> +
>> +#dependency libraries
>> +LIBS+= -lz $(LIBS_TOOLS)
>> +
>> +#header files to be installed
>> +libqblock_includedir= $(includedir)/qblock
>> +libqblock_srcpath= $(SRC_PATH)/libqblock
>> +libqblock-pub-headers= $(libqblock_srcpath)/libqblock.h \
>> +                       $(libqblock_srcpath)/libqblock-types.h \
>> +                       $(libqblock_srcpath)/libqblock-error.h
>> +
>> +#################################################################
>> +# Runtime rules
>> +#################################################################
>> +.PHONY: clean all libqblock.la libqblock.pc install-libqblock
>> +
>> +clean:
>> +	rm -f *.lo *.o *.d *.la *.pc
>> +	rm -rf .libs block trace audio fsdev hw net qapi qga qom slirp ui libqblock stubs backends
>> +
>> +all: libqblock.la libqblock.pc
>> +# Dummy command so that make thinks it has done something
>> +	@true
>> +
>> +libqblock.la: $(QEMU_OBJS_LIB)
>> +	$(call quiet-command,$(LIBTOOL) --mode=link --quiet --tag=CC $(CC) -rpath $(libdir) -o $@ $^ $(LIBS),"  lt LINK $@")
>> +
>> +libqblock.pc: $(libqblock_srcpath)/libqblock.pc.in
>> +	$(call quiet-command,sed -e 's|@LIBDIR@|$(libdir)|' \
>> +		-e 's|@INCLUDEDIR@|$(libqblock_includedir)|' \
>> +	    -e 's|@VERSION@|$(shell cat $(SRC_PATH)/VERSION)|' \
>> +		-e 's|@PREFIX@|$(prefix)|' \
>> +		< $(libqblock_srcpath)/libqblock.pc.in > libqblock.pc,\
>> +	"  GEN   $@")
>> +
>> +install-libqblock: libqblock.la libqblock.pc
>> +	$(INSTALL_DIR) "$(DESTDIR)$(libdir)"
>> +	$(INSTALL_DIR) "$(DESTDIR)$(libdir)/pkgconfig"
>> +	$(INSTALL_DIR) "$(DESTDIR)$(libqblock_includedir)"
>> +	$(LIBTOOL) --mode=install $(INSTALL_DATA) libqblock.la "$(DESTDIR)$(libdir)"
>> +	$(LIBTOOL) --mode=install $(INSTALL_DATA) libqblock.pc "$(DESTDIR)$(libdir)/pkgconfig"
>> +	$(LIBTOOL) --mode=install $(INSTALL_DATA) $(libqblock-pub-headers) "$(DESTDIR)$(libqblock_includedir)"
>> diff --git a/libqblock/libqblock-aio.c b/libqblock/libqblock-aio.c
>> new file mode 100644
>> index 0000000..605eee8
>> --- /dev/null
>> +++ b/libqblock/libqblock-aio.c
>> @@ -0,0 +1,81 @@
>> +/*
>> + * QEMU block layer library
>> + *
>> + * Copyright IBM, Corp. 2012
>> + *
>> + * Authors:
>> + *  Wenchao Xia   <xiawenc@linux.vnet.ibm.com>
>> + *
>> + * This work is licensed under the terms of the GNU LGPL, version 2 or later.
>> + * See the COPYING.LIB file in the top-level directory.
>> + *
>> + */
>
> Please move this file to patch 6.  I had a big "WTF" wondering how this
> could work :) before seeing that you then modified it in patch 6.
>
   OK to move it, but have a little problem, if it is removed then
this patch will fail in compile because symbol missing.

>> +#include <sys/syscall.h>
>> +
>> +#include "qemu-common.h"
>> +#include "qemu-aio.h"
>> +#include "main-loop.h"
>> +#include "compatfd.h"
>> +
>> +void qemu_notify_event(void)
>> +{
>> +    return;
>> +}
>> +
>> +QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
>> +{
>> +    return NULL;
>> +}
>> +
>> +void qemu_aio_flush(void)
>> +{
>> +    return;
>> +}
>> +
>> +bool qemu_aio_wait(void)
>> +{
>> +    return false;
>> +}
>> +
>> +#ifdef CONFIG_POSIX
>> +void qemu_aio_set_fd_handler(int fd,
>> +                             IOHandler *io_read,
>> +                             IOHandler *io_write,
>> +                             AioFlushHandler *io_flush,
>> +                             void *opaque)
>> +{
>> +    return;
>> +}
>> +#endif
>> +
>> +void qemu_aio_set_event_notifier(EventNotifier *notifier,
>> +                                 EventNotifierHandler *io_read,
>> +                                 AioFlushEventNotifierHandler *io_flush)
>> +{
>> +    return;
>> +}
>> +
>> +bool qemu_signalfd_available(void)
>> +{
>> +    return false;
>> +}
>> +
>> +typedef struct IOHandlerRecord IOHandlerRecord;
>> +
>> +int qemu_set_fd_handler2(int fd,
>> +                         IOCanReadHandler *fd_read_poll,
>> +                         IOHandler *fd_read,
>> +                         IOHandler *fd_write,
>> +                         void *opaque)
>> +{
>> +    return 0;
>> +}
>> +
>> +int qemu_set_fd_handler(int fd,
>> +                        IOHandler *fd_read,
>> +                        IOHandler *fd_write,
>> +                        void *opaque)
>> +{
>> +    return 0;
>> +}
>> diff --git a/libqblock/libqblock-error.c b/libqblock/libqblock-error.c
>> new file mode 100644
>> index 0000000..e69de29
>> diff --git a/libqblock/libqblock-error.h b/libqblock/libqblock-error.h
>> new file mode 100644
>> index 0000000..e69de29
>> diff --git a/libqblock/libqblock-types.h b/libqblock/libqblock-types.h
>> new file mode 100644
>> index 0000000..e69de29
>> diff --git a/libqblock/libqblock.c b/libqblock/libqblock.c
>> new file mode 100644
>> index 0000000..4c18c41
>> --- /dev/null
>> +++ b/libqblock/libqblock.c
>> @@ -0,0 +1,6 @@
>> +#include "libqblock.h"
>> +
>> +int libqb_test(void)
>> +{
>> +    return 0;
>> +}
>> diff --git a/libqblock/libqblock.h b/libqblock/libqblock.h
>> new file mode 100644
>> index 0000000..b0f9daf
>> --- /dev/null
>> +++ b/libqblock/libqblock.h
>> @@ -0,0 +1 @@
>> +__attribute__((visibility("default"))) int libqb_test(void);
>> diff --git a/libqblock/libqblock.pc.in b/libqblock/libqblock.pc.in
>> new file mode 100644
>> index 0000000..d2a7d06
>> --- /dev/null
>> +++ b/libqblock/libqblock.pc.in
>> @@ -0,0 +1,13 @@
>> +prefix=@PREFIX@
>> +exec_prefix=${prefix}
>> +libdir=@LIBDIR@
>> +includedir=@INCLUDEDIR@
>> +
>> +Name: qblock
>> +Description: QEMU block layer library
>> +Version: @VERSION@
>> +
>> +Requires:  rt gthread-2.0 glib-2.0 z curl cap-ng uuid
>> +Libs: -L${libdir} -lqblock
>> +Libs.private:
>> +Cflags: -I${includedir}
>> diff --git a/tests/Makefile b/tests/Makefile
>> index ef6c9f2..bc1a94c 100644
>> --- a/tests/Makefile
>> +++ b/tests/Makefile
>> @@ -84,6 +84,21 @@ check-qtest-$(CONFIG_POSIX)=$(foreach TARGET,$(TARGETS), $(check-qtest-$(TARGET)
>>   qtest-obj-y = tests/libqtest.o $(oslib-obj-y) libqemustub.a
>>   $(check-qtest-y): $(qtest-obj-y)
>>
>> +#libqblock build rules
>> +check-libqblock-$(CONFIG_LIBQBLOCK) = tests/check-libqblock-qcow2$(EXESUF)
>> +
>> +$(check-libqblock-y): QEMU_INCLUDES += -I$(SRC_PATH)/tests -I$(SRC_PATH)/$(LIBQBLOCK_DIR)
>> +LIBQBLOCK_TEST_DIR = tests/test_images
>> +LIBQBLOCK_DIR = libqblock
>
> Please just write libqblock instead of LIBQBLOCK_DIR.
>
OK.

>> +LIBQBLOCK_LA = $(LIBQBLOCK_DIR)/libqblock.la
>> +
>> +LTLINK_CHECK_LIBQBLOCK = $(call quiet-command, $(LIBTOOL) --mode=link --quiet --tag=CC \
>> +         $(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) \
>> +         -o $@ $(sort $(1)) $(LIBS), "lt LINK $(TARGET_DIR) $@")
>
> Please call this just "LTLINK", and remove the space between
> $(TARGET_DIR) and $@.
>
   OK.

>> +
>> +$(check-libqblock-y): %$(EXESUF): %.o
>> +	$(call LTLINK_CHECK_LIBQBLOCK, $^ $(LIBQBLOCK_LA))
>> +
>>   .PHONY: check-help
>>   check-help:
>>   	@echo "Regression testing targets:"
>> @@ -94,6 +109,7 @@ check-help:
>>   	@echo " make check-unit           Run qobject tests"
>>   	@echo " make check-block          Run block tests"
>>   	@echo " make check-report.html    Generates an HTML test report"
>> +	@echo " make check-libqblock      Run libqblock tests"
>>   	@echo " make check-clean          Clean the tests"
>>   	@echo
>>   	@echo "Please note that HTML reports do not regenerate if the unit tests"
>> @@ -126,6 +142,12 @@ $(patsubst %, check-report-qtest-%.xml, $(QTEST_TARGETS)): check-report-qtest-%.
>>   check-report-unit.xml: $(check-unit-y)
>>   	$(call quiet-command,gtester -q $(GTESTER_OPTIONS) -o $@ -m=$(SPEED) $^, "GTESTER $@")
>>
>> +# gtester tests with libqblock
>> +
>> +.PHONY: $(patsubst %, check-%, $(check-libqblock-y))
>> +$(patsubst %, check-%, $(check-libqblock-y)): check-%: %
>> +	$(call quiet-command, LIBQBLOCK_TEST_DIR=$(LIBQBLOCK_TEST_DIR) gtester $(GTESTER_OPTIONS) -m=$(SPEED) $*,"GTESTER $*")
>> +
>>   # Reports and overall runs
>>
>>   check-report.xml: $(patsubst %,check-report-qtest-%.xml, $(QTEST_TARGETS)) check-report-unit.xml
>> @@ -143,16 +165,19 @@ check-tests/qemu-iotests-quick.sh: tests/qemu-iotests-quick.sh qemu-img$(EXESUF)
>>
>>   # Consolidated targets
>>
>> -.PHONY: check-qtest check-unit check
>> +.PHONY: check-qtest check-unit check check-libqblock check-clean
>>   check-qtest: $(patsubst %,check-qtest-%, $(QTEST_TARGETS))
>>   check-unit: $(patsubst %,check-%, $(check-unit-y))
>>   check-block: $(patsubst %,check-%, $(check-block-y))
>> -check: check-unit check-qtest
>> +check-libqblock: $(patsubst %,check-%, $(check-libqblock-y))
>> +check: check-libqblock check-unit check-qtest
>>
>>   check-clean:
>>   	$(MAKE) -C tests/tcg clean
>>   	rm -f $(check-unit-y)
>>   	rm -f $(check-qtest-i386-y) $(check-qtest-x86_64-y) $(check-qtest-sparc64-y) $(check-qtest-sparc-y)
>>   	rm -f tests/*.o
>> +	rm -f $(check-libqblock-y)
>> +	rm -rf $(LIBQBLOCK_TEST_DIR)
>>
>>   -include $(wildcard tests/*.d)
>> diff --git a/tests/check-libqblock-qcow2.c b/tests/check-libqblock-qcow2.c
>> new file mode 100644
>> index 0000000..50a4df3
>> --- /dev/null
>> +++ b/tests/check-libqblock-qcow2.c
>> @@ -0,0 +1,6 @@
>> +#include "libqblock.h"
>> +int main(int argc, char **argv)
>> +{
>> +    libqb_test();
>> +    return 0;
>> +}
>>
>


-- 
Best Regards

Wenchao Xia

  reply	other threads:[~2012-11-27  3:08 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-24  9:27 [Qemu-devel] [PATCH V11 0/7] libqblock qemu block layer library Wenchao Xia
2012-11-24  9:27 ` [Qemu-devel] [PATCH V11 1/7] Build system fix distclean error for pixman Wenchao Xia
2012-11-24 21:02   ` Blue Swirl
2012-11-24  9:27 ` [Qemu-devel] [PATCH V11 2/7] Build system clean tests directory clearly Wenchao Xia
2012-11-24  9:27 ` [Qemu-devel] [PATCH V11 3/7] block export function path_has_protocol Wenchao Xia
2012-11-24  9:27 ` [Qemu-devel] [PATCH V11 4/7] libqblock build system Wenchao Xia
2012-11-26  7:36   ` Paolo Bonzini
2012-11-27  3:07     ` Wenchao Xia [this message]
2012-11-27  9:09       ` Paolo Bonzini
2012-11-24  9:27 ` [Qemu-devel] [PATCH V11 5/7] libqblock API design and type defines Wenchao Xia
2012-11-24  9:27 ` [Qemu-devel] [PATCH V11 6/7] libqblock API implement Wenchao Xia
2012-11-26  8:34   ` Paolo Bonzini
2012-11-27  3:22     ` Wenchao Xia
2012-11-27  9:11       ` Paolo Bonzini
2012-11-24  9:27 ` [Qemu-devel] [PATCH V11 7/7] libqblock test example Wenchao Xia

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=50B42E5F.4030607@linux.vnet.ibm.com \
    --to=xiawenc@linux.vnet.ibm.com \
    --cc=aliguori@us.ibm.com \
    --cc=blauwirbel@gmail.com \
    --cc=kwolf@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).