OUTPUT_DIR = build
+CFLAGS = -Ilibwebsockets/include -Llibwebsockets/lib
+can_compile = $(shell set -x; if echo '$(1)' | $(CC) $(CFLAGS) -c -xc - -o /dev/null >/dev/null 2>&1; then echo yes; fi)
+HAVE_RFID := $(call can_compile,\#include <uFCoder.h>)
+
+ifeq ($(HAVE_RFID),yes)
+all: mtrfid
+else
+$(warning Compiling without RFID support)
+endif
+
mtrfid_SRCS = signal_exit.c mt_rfid.c
mtrfid_LIBS = -lev -luFCoder-armhf
mtkeys_SRCS = signal_exit.c mt_keys.c
mtkeys_LIBS = -lev
-mtaio_SRCS = signal_exit.c mt_rfid.c mt_keys.c mt_server.c mt_aio.c
-mtaio_LIBS = -lev -luFCoder-armhf -lwebsockets
-mtaio_DEFS = -DNO_MAIN
+mtaio_SRCS = signal_exit.c mt_keys.c mt_server.c mt_aio.c
+mtaio_LIBS = -lev -lwebsockets
+mtaio_DEFS = -DNO_MAIN -DHAVE_RFID=$(if $(HAVE_RFID),1,0)
+
+ifeq ($(HAVE_RFID),yes)
+mtaio_SRCS += mt_rfid.c
+mtaio_LIBS += -luFCoder-armhf
+endif
-all: mtrfid mtserver mtkeys mtaio
+all: mtserver mtkeys mtaio
.PHONY: clean
#include <ev.h>
-// reader open parameters, see uFR manual
-#define UFR_READER_TYPE 1 // uFR type (1Mbps)
-#define UFR_PORT_INTERFACE 1 // serial; auto->ftdi->FAIL
-#define UFR_PORT_NAME "/dev/ttyUSB0" // reader device
-#define UFR_ASYNC_BAUD_RATE 1000000 // 1Mbps, otherwise UFR_COMMUNICATION_BREAK
-
-#define UFR_BEEP // define this to annoy people
-
typedef struct ev_io_ufr {
ev_io w; // fd watcher
char uid_data[24]; // store uid here (uid is 10 bytes max)
int fd; // print JSON output here
} mt_rfid_t;
+#if HAVE_RFID
+
+// reader open parameters, see uFR manual
+#define UFR_READER_TYPE 1 // uFR type (1Mbps)
+#define UFR_PORT_INTERFACE 1 // serial; auto->ftdi->FAIL
+#define UFR_PORT_NAME "/dev/ttyUSB0" // reader device
+#define UFR_ASYNC_BAUD_RATE 1000000 // 1Mbps, otherwise UFR_COMMUNICATION_BREAK
+
+#define UFR_BEEP // define this to annoy people
+
// connect to the reader, add self to loop and make it write to fd
// return 0 on success, negative number otherwise
int mt_rfid_init(mt_rfid_t *self, struct ev_loop *loop, int fd);
// disconnect from reader
void mt_rfid_deinit(mt_rfid_t *self);
+#else
+
+#define mt_rfid_init(self, loop, fd) 0
+#define mt_rfid_deinit(self) 0
+
+#endif /* HAVE_RFID */
+
#endif