diff --git a/Makefile b/Makefile index d2f6b09..3a93916 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,13 @@ +V=1 +VDEVEL=$(shell test -d .git && git describe 2>/dev/null) + +ifneq "$(VDEVEL)" "" +V=$(VDEVEL) +endif + CXX := $(CXX) -std=c++11 -base_CXXFLAGS = -Wall -Wextra -pedantic -O2 -g +base_CXXFLAGS = -Wall -Wextra -pedantic -O2 -g -DPONYMIX_VERSION=\"$(V)\" base_LIBS = -lm libpulse_CXXFLAGS = $(shell pkg-config --cflags libpulse) @@ -35,6 +42,5 @@ install: ponymix clean: $(RM) ponymix pulse.o -V=$(shell if test -d .git; then git describe; fi) dist: git archive --format=tar --prefix=ponymix-$(V)/ HEAD | gzip -9 > ponymix-$(V).tar.gz diff --git a/bash-completion b/bash-completion index fc71557..ead700b 100644 --- a/bash-completion +++ b/bash-completion @@ -10,7 +10,7 @@ in_array() { _ponymix() { local flags='-h --help -c --card -d --device -t --devtype -N --notify --source --input --sink --output - --sink-input --source-output' + --sink-input --source-output -V --version' local types='sink sink-input source source-output' local verbs=(help defaults set-default list list-short list-cards list-cards-short get-volume set-volume diff --git a/ponymix.cc b/ponymix.cc index a378ed0..d20aeb5 100644 --- a/ponymix.cc +++ b/ponymix.cc @@ -473,10 +473,16 @@ static const std::pair& string_to_command( return *match; } +static void version() { + fputs("ponymix v" PONYMIX_VERSION "\n", stdout); + exit(EXIT_SUCCESS); +} + static void usage() { printf("usage: %s [options] ...\n", program_invocation_short_name); fputs("\nOptions:\n" - " -h, --help display this help and exit\n\n" + " -h, --help display this help and exit\n" + " -V, --version display program version and exit\n\n" " -c, --card CARD target card (index or name)\n" " -d, --device DEVICE target device (index or name)\n" @@ -559,6 +565,7 @@ bool parse_options(int argc, char** argv) { { "help", no_argument, 0, 'h' }, { "notify", no_argument, 0, 'N' }, { "type", required_argument, 0, 't' }, + { "version", no_argument, 0, 'V' }, { "sink", no_argument, 0, 0x100 }, { "output", no_argument, 0, 0x101 }, { "source", no_argument, 0, 0x102 }, @@ -569,7 +576,7 @@ bool parse_options(int argc, char** argv) { }; for (;;) { - int opt = getopt_long(argc, argv, "c:d:hNt:", opts, nullptr); + int opt = getopt_long(argc, argv, "c:d:hNt:V", opts, nullptr); if (opt == -1) break; @@ -590,6 +597,9 @@ bool parse_options(int argc, char** argv) { opt_devtype = string_to_devtype_or_die(optarg); opt_listrestrict = true; break; + case 'V': + version(); + break; case 0x100: case 0x101: opt_devtype = DEVTYPE_SINK; diff --git a/zsh-completion b/zsh-completion index 4a08a59..c16fbd6 100644 --- a/zsh-completion +++ b/zsh-completion @@ -107,6 +107,8 @@ else '(-c --card -d --device)'{-d,--device}'[Select Device]:devices:_devices' \ - '(help)' \ {-h,--help}'[display this help and exit]' \ + - '(version)' \ + {-V,--version}'[display program version and exit]' \ - '(sink)' \ '--sink[alias to type sink]' \ '--output[alias to type sink]' \