aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorcbdev <cb@cbcdn.com>2019-12-10 23:28:02 +0100
committercbdev <cb@cbcdn.com>2019-12-10 23:28:02 +0100
commite517dbe783e65fdd1c80f5c917f8f924e2adfe8d (patch)
tree74bf446148b4e17a542fb8e728a8beb7ed87b3f2
parent31cc72f660513b033cc0621782586562bafab08e (diff)
downloadmidimonster-e517dbe783e65fdd1c80f5c917f8f924e2adfe8d.tar.gz
midimonster-e517dbe783e65fdd1c80f5c917f8f924e2adfe8d.tar.bz2
midimonster-e517dbe783e65fdd1c80f5c917f8f924e2adfe8d.zip
Implement rudimentary argument parsing
-rw-r--r--Makefile8
-rw-r--r--midimonster.c27
-rw-r--r--midimonster.h5
3 files changed, 36 insertions, 4 deletions
diff --git a/Makefile b/Makefile
index 8dab638..5183fa5 100644
--- a/Makefile
+++ b/Makefile
@@ -5,13 +5,19 @@ PREFIX ?= /usr
PLUGIN_INSTALL = $(PREFIX)/lib/midimonster
EXAMPLES ?= $(PREFIX)/share/midimonster
SYSTEM := $(shell uname -s)
+GITVERSION = $(shell git describe)
+# Default compilation CFLAGS
CFLAGS ?= -g -Wall -Wpedantic
+#CFLAGS += -DDEBUG
# Hide all non-API symbols for export
CFLAGS += -fvisibility=hidden
-#CFLAGS += -DDEBUG
midimonster: LDLIBS = -ldl
+# Replace version string with current git-describe if possible
+ifneq "$(GITVERSION)" ""
+midimonster: CFLAGS += "-DMIDIMONSTER_VERSION=\"$(GITVERSION)\""
+endif
# Work around strange linker passing convention differences in Linux and OSX
ifeq ($(SYSTEM),Linux)
diff --git a/midimonster.c b/midimonster.c
index e6c0842..67614d4 100644
--- a/midimonster.c
+++ b/midimonster.c
@@ -223,8 +223,12 @@ static void event_free(){
}
}
+static void version(){
+ fprintf(stderr, "MIDIMonster %s\n", MIDIMONSTER_VERSION);
+}
+
static int usage(char* fn){
- fprintf(stderr, "MIDIMonster v0.3\n");
+ version();
fprintf(stderr, "Usage:\n");
fprintf(stderr, "\t%s <configfile>\n", fn);
return EXIT_FAILURE;
@@ -263,6 +267,21 @@ static int platform_initialize(){
return 0;
}
+static int args_parse(int argc, char** argv, char** cfg_file){
+ size_t u;
+ for(u = 1; u < argc; u++){
+ if(!strcmp(argv[u], "-v") || !strcmp(argv[u], "--version")){
+ version();
+ return 1;
+ }
+
+ //if nothing else matches, it's probably the configuration file
+ *cfg_file = argv[u];
+ }
+
+ return 0;
+}
+
int main(int argc, char** argv){
fd_set all_fds, read_fds;
event_collection* secondary = NULL;
@@ -271,8 +290,10 @@ int main(int argc, char** argv){
managed_fd* signaled_fds = NULL;
int rv = EXIT_FAILURE, error, maxfd = -1;
char* cfg_file = DEFAULT_CFG;
- if(argc > 1){
- cfg_file = argv[1];
+
+ //parse commandline arguments
+ if(args_parse(argc, argv, &cfg_file)){
+ return EXIT_FAILURE;
}
if(platform_initialize()){
diff --git a/midimonster.h b/midimonster.h
index 5ce0c73..677eeee 100644
--- a/midimonster.h
+++ b/midimonster.h
@@ -5,6 +5,11 @@
#include <stdint.h>
#include <inttypes.h>
+/* Core version unless set by the build process */
+#ifndef MIDIMONSTER_VERSION
+ #define MIDIMONSTER_VERSION "v0.3-dist"
+#endif
+
/* API call attributes and visibilities */
#ifndef MM_API
#ifdef _WIN32