diff --git a/require.c b/require.c index 3541550af86035ababa68bc87d9bf11c93cc4185..584da63799a2a6d54ae7aab17e76e23a2dcffc05 100644 --- a/require.c +++ b/require.c @@ -13,7 +13,11 @@ #include <epicsVersion.h> #ifndef BASE_VERSION /* This is R3.14.* */ +#include <iocsh.h> extern int iocshCmd (const char *cmd); +#include <dbAccess.h> +#include <epicsExit.h> +#include <epicsExport.h> #endif int dbLoadDatabase(char *filename, char *path, char *substitutions); @@ -246,3 +250,32 @@ int libversionShow(char* pattern) symEach(sysSymTbl, (FUNCPTR)printIfLibversion, (int)pattern); return OK; } + +#ifndef BASE_VERSION +static const iocshArg requireArg0 = { "module", iocshArgString }; +static const iocshArg requireArg1 = { "version", iocshArgString }; +static const iocshArg * const requireArgs[2] = { &requireArg0, &requireArg1 }; +static const iocshFuncDef requireDef = { "require", 2, requireArgs }; +static void requireFunc (const iocshArgBuf *args) +{ + if (require (args[0].sval, args[1].sval) != 0 + && !interruptAccept) + { + /* require failed in startup script before iocInit */ + fprintf (stderr, "Aborting startup script\n"); + epicsExit (1); + } +} + +static void requireRegister(void) +{ + static int firstTime = 1; + if (firstTime) { + iocshRegister (&requireDef, requireFunc); + firstTime = 0; + } +} + +epicsExportRegistrar(requireRegister); + +#endif diff --git a/require.dbd b/require.dbd new file mode 100644 index 0000000000000000000000000000000000000000..fd7c58b7cc99c3ff8b408598b7c7821280c8c4e7 --- /dev/null +++ b/require.dbd @@ -0,0 +1 @@ +registrar(requireRegister)