Index: Makefile =================================================================== --- Makefile (revision 35927) +++ Makefile (revision 35928) @@ -61,7 +61,7 @@ include $(SRC)/tmpasm/Makefile.plugin # --- you shouldn't edit the lines below --- -OBJS = $(USER_OBJS) hooks.o $(DEFAULT_NOMAIN_OBJS) $(SCRIPT_OBJS) $(PARSER_OBJS) $(GENERATOR_OBJS) $(TMPASM_OBJS) $(C99_OBJS) $(PARSGEN_OBJS) $(MATH_OBJS) $(SOCKET_OBJS) $(USERPASS_OBJS) $(GUI_OBJS) $(SUL_OBJS) +OBJS = $(USER_OBJS) hooks.o librnd_ver.o $(DEFAULT_NOMAIN_OBJS) $(SCRIPT_OBJS) $(PARSER_OBJS) $(GENERATOR_OBJS) $(TMPASM_OBJS) $(C99_OBJS) $(PARSGEN_OBJS) $(MATH_OBJS) $(SOCKET_OBJS) $(USERPASS_OBJS) $(GUI_OBJS) $(SUL_OBJS) CFLAGS = $(USER_CFLAGS) $(DEFAULT_CFLAGS) $(SCRIPT_CFLAGS) $(PARSER_CFLAGS) $(GENERATOR_CFLAGS) $(TMPASM_CFLAGS) $(C99_CFLAGS) $(PARSGEN_CFLAGS) $(MATH_CFLAGS) $(SOCKET_CFLAGS) $(USERPASS_CFLAGS) $(GUI_CFLAGS) $(SUL_CFLAGS) $(MENULIB_CFLAGS) -I$(SRC)/default -I. -DLIBRND_PREFIX="$(LIBRND_PREFIX)" LDFLAGS = $(USER_LDFLAGS) $(DEFAULT_LDFLAGS) $(SCRIPT_LDFLAGS) $(PARSER_LDFLAGS) $(GENERATOR_LDFLAGS) $(TMPASM_LDFLAGS) $(C99_LDFLAGS) $(PARSGEN_LDFLAGS) $(MATH_LDFLAGS) $(SOCKET_LDFLAGS) $(USERPASS_LDFLAGS) $(GUI_LDFLAGS) $(SUL_LDFLAGS) $(MENULIB_LDFLAGS) Index: hooks.c =================================================================== --- hooks.c (revision 35927) +++ hooks.c (revision 35928) @@ -13,6 +13,9 @@ #define version "3.0.2-dev" +#define REQ_LIBRND_MAJOR 3 +#define REQ_LIBRND_MINOR 1 + #include #include @@ -99,6 +102,8 @@ put("/local/pcb/dot_pcb_rnd", ".pcb-rnd"); put("/local/pcb/librnd_prefix", TO_STR(LIBRND_PREFIX)); + librnd_ver_req_min(REQ_LIBRND_MAJOR, REQ_LIBRND_MINOR); + return 0; } Index: librnd_ver.c =================================================================== --- librnd_ver.c (nonexistent) +++ librnd_ver.c (revision 35928) @@ -0,0 +1,28 @@ +/* Has to be a separate compilation unit to firewall all the extra #defines + in librnd/config.h */ + +#include +#include "log.h" +#include + +unsigned long librnd_ver_get(int *major, int *minor, int *patch) +{ + if (major != NULL) *major = ((unsigned long)RND_API_VER & 0xFF0000UL) >> 16; + if (minor != NULL) *minor = ((unsigned long)RND_API_VER & 0x00FF00UL) >> 8; + if (patch != NULL) *patch = ((unsigned long)RND_API_VER & 0x0000FFUL); + return RND_API_VER; +} + +void librnd_ver_req_min(int exact_major, int min_minor) +{ + int major, minor, patch; + librnd_ver_get(&major, &minor, &patch); + if (major != exact_major) { + report("\n\nERROR: Your currently installed librnd version is %d.%d.%d but %d.x.x (>= %d.%d.0 and < %d.0.0) is required (major version mismatch)\n\n", major, minor, patch, exact_major, exact_major, min_minor, exact_major+1); + exit(1); + } + if (minor < min_minor) { + report("\n\nERROR: Your currently installed librnd version is %d.%d.%d but %d.%d.x (>= %d.%d.0 and < %d.0.0) is required (minor version mismatch)\n\n", major, minor, patch, exact_major, min_minor, exact_major, min_minor, exact_major+1); + exit(1); + } +}