mirror of https://github.com/xemu-project/xemu.git
Use hxtool for qemu-img command list
Use hxtool to generate the 'command syntax' section of qemu-img's help message, and the corresponding section of the texinfo documentation. This has the side-effect of adding 'check' to this list of commands in the texinfo documentation. Signed-off-by: Stuart Brady <stuart.brady@gmail.com>
This commit is contained in:
parent
3a2eeac0c9
commit
153859be1a
|
@ -19,6 +19,8 @@ qemu-nbd
|
||||||
qemu-nbd.8
|
qemu-nbd.8
|
||||||
qemu-nbd.pod
|
qemu-nbd.pod
|
||||||
qemu-options.texi
|
qemu-options.texi
|
||||||
|
qemu-img-cmds.texi
|
||||||
|
qemu-img-cmds.h
|
||||||
qemu-io
|
qemu-io
|
||||||
.gdbinit
|
.gdbinit
|
||||||
*.a
|
*.a
|
||||||
|
|
14
Makefile
14
Makefile
|
@ -238,6 +238,8 @@ libqemu_user.a: $(USER_OBJS)
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
|
qemu-img.o: qemu-img-cmds.h
|
||||||
|
|
||||||
qemu-img$(EXESUF): qemu-img.o qemu-tool.o tool-osdep.o $(BLOCK_OBJS)
|
qemu-img$(EXESUF): qemu-img.o qemu-tool.o tool-osdep.o $(BLOCK_OBJS)
|
||||||
|
|
||||||
qemu-nbd$(EXESUF): qemu-nbd.o qemu-tool.o tool-osdep.o $(BLOCK_OBJS)
|
qemu-nbd$(EXESUF): qemu-nbd.o qemu-tool.o tool-osdep.o $(BLOCK_OBJS)
|
||||||
|
@ -246,6 +248,9 @@ qemu-io$(EXESUF): qemu-io.o qemu-tool.o tool-osdep.o cmd.o $(BLOCK_OBJS)
|
||||||
|
|
||||||
qemu-img$(EXESUF) qemu-nbd$(EXESUF) qemu-io$(EXESUF): LIBS += -lz
|
qemu-img$(EXESUF) qemu-nbd$(EXESUF) qemu-io$(EXESUF): LIBS += -lz
|
||||||
|
|
||||||
|
qemu-img-cmds.h: $(SRC_PATH)/qemu-img-cmds.hx
|
||||||
|
$(call quiet-command,sh $(SRC_PATH)/hxtool -h < $< > $@," GEN $@")
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
# avoid old build problems by removing potentially incorrect old files
|
# avoid old build problems by removing potentially incorrect old files
|
||||||
rm -f config.mak config.h op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h
|
rm -f config.mak config.h op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h
|
||||||
|
@ -257,7 +262,7 @@ clean:
|
||||||
done
|
done
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
rm -f config-host.mak config-host.h $(DOCS) qemu-options.texi
|
rm -f config-host.mak config-host.h $(DOCS) qemu-options.texi qemu-img-cmds.texi
|
||||||
rm -f qemu-{doc,tech}.{info,aux,cp,dvi,fn,info,ky,log,pg,toc,tp,vr}
|
rm -f qemu-{doc,tech}.{info,aux,cp,dvi,fn,info,ky,log,pg,toc,tp,vr}
|
||||||
for d in $(TARGET_DIRS) libhw32 libhw64; do \
|
for d in $(TARGET_DIRS) libhw32 libhw64; do \
|
||||||
rm -rf $$d || exit 1 ; \
|
rm -rf $$d || exit 1 ; \
|
||||||
|
@ -335,13 +340,16 @@ qemu-options.texi: $(SRC_PATH)/qemu-options.hx
|
||||||
qemu-monitor.texi: $(SRC_PATH)/qemu-monitor.hx
|
qemu-monitor.texi: $(SRC_PATH)/qemu-monitor.hx
|
||||||
$(call quiet-command,sh $(SRC_PATH)/hxtool -t < $< > $@," GEN $@")
|
$(call quiet-command,sh $(SRC_PATH)/hxtool -t < $< > $@," GEN $@")
|
||||||
|
|
||||||
|
qemu-img-cmds.texi: $(SRC_PATH)/qemu-img-cmds.hx
|
||||||
|
$(call quiet-command,sh $(SRC_PATH)/hxtool -t < $< > $@," GEN $@")
|
||||||
|
|
||||||
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi
|
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi
|
||||||
$(call quiet-command, \
|
$(call quiet-command, \
|
||||||
perl -Ww -- $(SRC_PATH)/texi2pod.pl $< qemu.pod && \
|
perl -Ww -- $(SRC_PATH)/texi2pod.pl $< qemu.pod && \
|
||||||
pod2man --section=1 --center=" " --release=" " qemu.pod > $@, \
|
pod2man --section=1 --center=" " --release=" " qemu.pod > $@, \
|
||||||
" GEN $@")
|
" GEN $@")
|
||||||
|
|
||||||
qemu-img.1: qemu-img.texi
|
qemu-img.1: qemu-img.texi qemu-img-cmds.texi
|
||||||
$(call quiet-command, \
|
$(call quiet-command, \
|
||||||
perl -Ww -- $(SRC_PATH)/texi2pod.pl $< qemu-img.pod && \
|
perl -Ww -- $(SRC_PATH)/texi2pod.pl $< qemu-img.pod && \
|
||||||
pod2man --section=1 --center=" " --release=" " qemu-img.pod > $@, \
|
pod2man --section=1 --center=" " --release=" " qemu-img.pod > $@, \
|
||||||
|
@ -359,7 +367,7 @@ dvi: qemu-doc.dvi qemu-tech.dvi
|
||||||
|
|
||||||
html: qemu-doc.html qemu-tech.html
|
html: qemu-doc.html qemu-tech.html
|
||||||
|
|
||||||
qemu-doc.dvi qemu-doc.html qemu-doc.info: qemu-img.texi qemu-nbd.texi qemu-options.texi qemu-monitor.texi
|
qemu-doc.dvi qemu-doc.html qemu-doc.info: qemu-img.texi qemu-nbd.texi qemu-options.texi qemu-monitor.texi qemu-img-cmds.texi
|
||||||
|
|
||||||
VERSION ?= $(shell cat VERSION)
|
VERSION ?= $(shell cat VERSION)
|
||||||
FILE = qemu-$(VERSION)
|
FILE = qemu-$(VERSION)
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
HXCOMM Use DEFHEADING() to define headings in both help text and texi
|
||||||
|
HXCOMM Text between STEXI and ETEXI are copied to texi version and
|
||||||
|
HXCOMM discarded from C version
|
||||||
|
HXCOMM DEF(command, callback, arg_string) is used to construct
|
||||||
|
HXCOMM command structures and help message.
|
||||||
|
HXCOMM HXCOMM can be used for comments, discarded from both texi and C
|
||||||
|
|
||||||
|
STEXI
|
||||||
|
@table @option
|
||||||
|
STEXI
|
||||||
|
|
||||||
|
DEF("check", img_check,
|
||||||
|
"check [-f fmt] filename")
|
||||||
|
STEXI
|
||||||
|
@item check [-f @var{fmt}] @var{filename}
|
||||||
|
ETEXI
|
||||||
|
|
||||||
|
DEF("create", img_create,
|
||||||
|
"create [-F fmt] [-b base_image] [-f fmt] [-o options] filename [size]")
|
||||||
|
STEXI
|
||||||
|
@item create [-F @var{base_fmt}] [-b @var{base_image}] [-f @var{fmt}] [-o @var{options}] @var{filename} [@var{size}]
|
||||||
|
ETEXI
|
||||||
|
|
||||||
|
DEF("commit", img_commit,
|
||||||
|
"commit [-f fmt] filename")
|
||||||
|
STEXI
|
||||||
|
@item commit [-f @var{fmt}] @var{filename}
|
||||||
|
ETEXI
|
||||||
|
|
||||||
|
DEF("convert", img_convert,
|
||||||
|
"convert [-c] [-f fmt] [-O output_fmt] [-o options] [-B output_base_image] filename [filename2 [...]] output_filename")
|
||||||
|
STEXI
|
||||||
|
@item convert [-c] [-f @var{fmt}] [-O @var{output_fmt}] [-o @var{options}] [-B @var{output_base_image}] @var{filename} [@var{filename2} [...]] @var{output_filename}
|
||||||
|
ETEXI
|
||||||
|
|
||||||
|
DEF("info", img_info,
|
||||||
|
"info [-f fmt] filename")
|
||||||
|
STEXI
|
||||||
|
@item info [-f @var{fmt}] @var{filename}
|
||||||
|
ETEXI
|
||||||
|
|
||||||
|
DEF("snapshot", img_snapshot,
|
||||||
|
"snapshot [-l | -a snapshot | -c snapshot | -d snapshot] filename")
|
||||||
|
STEXI
|
||||||
|
@item snapshot [-l | -a @var{snapshot} | -c @var{snapshot} | -d @var{snapshot}] @var{filename}
|
||||||
|
@end table
|
||||||
|
ETEXI
|
67
qemu-img.c
67
qemu-img.c
|
@ -31,6 +31,11 @@
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef struct img_cmd_t {
|
||||||
|
const char *name;
|
||||||
|
int (*handler)(int argc, char **argv);
|
||||||
|
} img_cmd_t;
|
||||||
|
|
||||||
/* Default to cache=writeback as data integrity is not important for qemu-tcg. */
|
/* Default to cache=writeback as data integrity is not important for qemu-tcg. */
|
||||||
#define BRDV_O_FLAGS BDRV_O_CACHE_WB
|
#define BRDV_O_FLAGS BDRV_O_CACHE_WB
|
||||||
|
|
||||||
|
@ -58,12 +63,11 @@ static void help(void)
|
||||||
"QEMU disk image utility\n"
|
"QEMU disk image utility\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Command syntax:\n"
|
"Command syntax:\n"
|
||||||
" check [-f fmt] filename\n"
|
#define DEF(option, callback, arg_string) \
|
||||||
" create [-F fmt] [-b base_image] [-f fmt] [-o options] filename [size]\n"
|
" " arg_string "\n"
|
||||||
" commit [-f fmt] filename\n"
|
#include "qemu-img-cmds.h"
|
||||||
" convert [-c] [-f fmt] [-O output_fmt] [-o options] [-B output_base_image] filename [filename2 [...]] output_filename\n"
|
#undef DEF
|
||||||
" info [-f fmt] filename\n"
|
#undef GEN_DOCS
|
||||||
" snapshot [-l | -a snapshot | -c snapshot | -d snapshot] filename\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"Command parameters:\n"
|
"Command parameters:\n"
|
||||||
" 'filename' is a disk image filename\n"
|
" 'filename' is a disk image filename\n"
|
||||||
|
@ -919,7 +923,7 @@ static int img_info(int argc, char **argv)
|
||||||
#define SNAPSHOT_APPLY 3
|
#define SNAPSHOT_APPLY 3
|
||||||
#define SNAPSHOT_DELETE 4
|
#define SNAPSHOT_DELETE 4
|
||||||
|
|
||||||
static void img_snapshot(int argc, char **argv)
|
static int img_snapshot(int argc, char **argv)
|
||||||
{
|
{
|
||||||
BlockDriverState *bs;
|
BlockDriverState *bs;
|
||||||
QEMUSnapshotInfo sn;
|
QEMUSnapshotInfo sn;
|
||||||
|
@ -936,18 +940,18 @@ static void img_snapshot(int argc, char **argv)
|
||||||
switch(c) {
|
switch(c) {
|
||||||
case 'h':
|
case 'h':
|
||||||
help();
|
help();
|
||||||
return;
|
return 0;
|
||||||
case 'l':
|
case 'l':
|
||||||
if (action) {
|
if (action) {
|
||||||
help();
|
help();
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
action = SNAPSHOT_LIST;
|
action = SNAPSHOT_LIST;
|
||||||
break;
|
break;
|
||||||
case 'a':
|
case 'a':
|
||||||
if (action) {
|
if (action) {
|
||||||
help();
|
help();
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
action = SNAPSHOT_APPLY;
|
action = SNAPSHOT_APPLY;
|
||||||
snapshot_name = optarg;
|
snapshot_name = optarg;
|
||||||
|
@ -955,7 +959,7 @@ static void img_snapshot(int argc, char **argv)
|
||||||
case 'c':
|
case 'c':
|
||||||
if (action) {
|
if (action) {
|
||||||
help();
|
help();
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
action = SNAPSHOT_CREATE;
|
action = SNAPSHOT_CREATE;
|
||||||
snapshot_name = optarg;
|
snapshot_name = optarg;
|
||||||
|
@ -963,7 +967,7 @@ static void img_snapshot(int argc, char **argv)
|
||||||
case 'd':
|
case 'd':
|
||||||
if (action) {
|
if (action) {
|
||||||
help();
|
help();
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
action = SNAPSHOT_DELETE;
|
action = SNAPSHOT_DELETE;
|
||||||
snapshot_name = optarg;
|
snapshot_name = optarg;
|
||||||
|
@ -1021,31 +1025,38 @@ static void img_snapshot(int argc, char **argv)
|
||||||
|
|
||||||
/* Cleanup */
|
/* Cleanup */
|
||||||
bdrv_delete(bs);
|
bdrv_delete(bs);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const img_cmd_t img_cmds[] = {
|
||||||
|
#define DEF(option, callback, arg_string) \
|
||||||
|
{ option, callback },
|
||||||
|
#include "qemu-img-cmds.h"
|
||||||
|
#undef DEF
|
||||||
|
#undef GEN_DOCS
|
||||||
|
{ NULL, NULL, },
|
||||||
|
};
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
const char *cmd;
|
const img_cmd_t *cmd;
|
||||||
|
const char *cmdname;
|
||||||
|
|
||||||
bdrv_init();
|
bdrv_init();
|
||||||
if (argc < 2)
|
if (argc < 2)
|
||||||
help();
|
help();
|
||||||
cmd = argv[1];
|
cmdname = argv[1];
|
||||||
argc--; argv++;
|
argc--; argv++;
|
||||||
if (!strcmp(cmd, "create")) {
|
|
||||||
img_create(argc, argv);
|
/* find the command */
|
||||||
} else if (!strcmp(cmd, "check")) {
|
for(cmd = img_cmds; cmd->name != NULL; cmd++) {
|
||||||
img_check(argc, argv);
|
if (!strcmp(cmdname, cmd->name)) {
|
||||||
} else if (!strcmp(cmd, "commit")) {
|
return cmd->handler(argc, argv);
|
||||||
img_commit(argc, argv);
|
}
|
||||||
} else if (!strcmp(cmd, "convert")) {
|
|
||||||
img_convert(argc, argv);
|
|
||||||
} else if (!strcmp(cmd, "info")) {
|
|
||||||
img_info(argc, argv);
|
|
||||||
} else if (!strcmp(cmd, "snapshot")) {
|
|
||||||
img_snapshot(argc, argv);
|
|
||||||
} else {
|
|
||||||
help();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* not found */
|
||||||
|
help();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,13 +7,8 @@ usage: qemu-img command [command options]
|
||||||
@c man begin OPTIONS
|
@c man begin OPTIONS
|
||||||
|
|
||||||
The following commands are supported:
|
The following commands are supported:
|
||||||
@table @option
|
|
||||||
@item create [-F @var{base_fmt}] [-b @var{base_image}] [-f @var{fmt}] [-o @var{options}] @var{filename} [@var{size}]
|
@include qemu-img-cmds.texi
|
||||||
@item commit [-f @var{fmt}] @var{filename}
|
|
||||||
@item convert [-c] [-f @var{fmt}] [-O @var{output_fmt}] [-o @var{options}] [-B @var{output_base_image}] @var{filename} [@var{filename2} [...]] @var{output_filename}
|
|
||||||
@item info [-f @var{fmt}] @var{filename}
|
|
||||||
@item snapshot [-l | -a @var{snapshot} | -c @var{snapshot} | -d @var{snapshot}] @var{filename}
|
|
||||||
@end table
|
|
||||||
|
|
||||||
Command parameters:
|
Command parameters:
|
||||||
@table @var
|
@table @var
|
||||||
|
|
Loading…
Reference in New Issue