Esempio n. 1
0
DllExport int STDCALL C__hisCallSolver(void* Cptr)
{
   int rc = 1;
   char buffer[1024];
   gamshighs_t* gh;
   HighsStatus status;

   gh = (gamshighs_t*)Cptr;
   assert(gh->gmo != NULL);
   assert(gh->gev != NULL);

   gevLogStatPChar(gh->gev, "HiGHS " XQUOTE(HIGHS_VERSION_MAJOR) "." XQUOTE(HIGHS_VERSION_MINOR) "." XQUOTE(HIGHS_VERSION_PATCH) " [date: " HIGHS_COMPILATION_DATE ", git hash: " HIGHS_GITHASH "]\n");
   gevLogStatPChar(gh->gev, "Copyright (c) 2019 ERGO-Code under MIT licence terms.\n");

   gmoModelStatSet(gh->gmo, gmoModelStat_NoSolutionReturned);
   gmoSolveStatSet(gh->gmo, gmoSolveStat_SystemErr);

   /* get the problem into a normal form */
   gmoObjStyleSet(gh->gmo, gmoObjType_Fun);
   gmoObjReformSet(gh->gmo, 1);
   gmoIndexBaseSet(gh->gmo, 0);
   gmoSetNRowPerm(gh->gmo); /* hide =N= rows */
   gmoMinfSet(gh->gmo, -HIGHS_CONST_INF);
   gmoPinfSet(gh->gmo,  HIGHS_CONST_INF);

   if( setupOptions(gh) )
      goto TERMINATE;

   if( setupProblem(gh) )
      goto TERMINATE;

   gevTimeSetStart(gh->gev);

   /* solve the problem */
   status = gh->highs->run();

   /* pass solution, status, etc back to GMO */
   if( processSolve(gh, status) )
      goto TERMINATE;

   rc = 0;
TERMINATE:

   delete gh->lp;
   gh->lp = NULL;

   delete gh->highs;
   gh->highs= NULL;

   delete gh->options;
   gh->options = NULL;

   return rc;
}
Esempio n. 2
0
xapi params_report()
{
  enter;

  // log execution parameters under PARAMS
  logf(L_PARAMS, "%11spid                    =%u"   , ""  , g_params.pid);
  logf(L_PARAMS, "%11sppid                   =%u"   , ""  , g_params.ppid);
  logf(L_PARAMS, "%11spgid                   =%u"   , ""  , g_params.pgid);
  logf(L_PARAMS, "%11sexedir                 =%s"   , ""  , g_params.exedir);
  logf(L_PARAMS, "%11sprocessors             =%ld"  , ""  , g_params.procs);
  logf(L_PARAMS, "%11sipcdir                 =%s"   , ""  , XQUOTE(FABIPCDIR));

  finally : coda;
}
Esempio n. 3
0
static xapi usage(int valid, int version, int help, int logs)
{
  enter;

  printf(
"xunit : test runner\n"
);
if(version)
{
  printf(" fab-" XQUOTE(FABVERSIONS)
#if DEVEL
  "+DEVEL"
#elif DEBUG
  "+DEBUG"
#endif
    " @ " XQUOTE(BUILDSTAMP)
    "\n"
  );
}
if(help)
{
  printf(
"\n"
"usage : xunit [ [ option ] [ logexpr ] [ /path/to/object ] ] ...\n"
"\n"
" --help    : this message\n"
" --version : version information\n"
" --logs    : logger configuration\n"
"\n"
"----------------- [ options ] --------------------------------------------------------------------\n"
"\n"
#if DEBUG || DEVEL
" --backtrace-pithy   (default) produce a summary of the callstack upon failure\n"
" --backtrace-full              produce a complete description of the callstack upon failure\n"
#endif
  );
}

if(logs)
{
printf(
"\n"
"----------------- [ logs ] -----------------------------------------------------------------------\n"
"\n"
);

  fatal(logger_filter_pushs, 0, "+LOGGER");
  fatal(logger_categories_report);
  fatal(logger_filter_pop, 0);
}

printf(
"\n"
"For more information visit http://fabutil.org\n"
"\n"
);

exit(!valid);

  finally : coda;
}
Esempio n. 4
0
File: main.c Progetto: hossbeast/fab
static xapi xmain()
{
  enter;

#if DEVEL
  char space[512];
#endif
  char * fabw_path = 0;
  const command * cmd = 0;

  memblk * mb = 0;
  fab_client * client = 0;
  fab_request * request = 0;
  int fd = -1;

#if DEBUG || DEVEL
  // this check is omitted in DEBUG/DEVEL mode because valgrind requires non-setgid and non-setuid executables
#else
  // this executable MUST BE OWNED by fabsys:fabsys and have u+s and g+s permissions
  if(strcmp(g_euid_name, "fabsys") || strcmp(g_egid_name, "fabsys"))
  {
    xapi_info_pushf("real", "r:%s/%d:%s/%d", g_ruid_name, g_ruid, g_rgid_name, g_rgid);
    xapi_info_pushf("effective", "e:%s/%d:%s/%d", g_euid_name, g_euid, g_egid_name, g_egid);
    fail(MAIN_EXEPERMS);
  }
#endif

#if DEBUG || DEVEL
  logs(L_IPC, "started");
#endif

  // parse cmdline arguments
  fatal(args_parse, &cmd);
  fatal(args_report, cmd);

  // ensure fabd can write to my stdout/stderr
  fatal(xfchmod, 1, 0777);
  fatal(xfchmod, 2, 0777);

#if DEVEL
  snprintf(space, sizeof(space), "%s/../fabw/fabw.devel", g_params.exedir);
  fabw_path = space;
#endif

  fatal(fab_client_create, &client, ".", XQUOTE(FABIPCDIR), fabw_path);

#if 0
  // kill the existing fabd instance, if any
  if(changed credentials)
    fatal(client_terminate);
#endif

  fatal(fab_client_prepare, client);
  fatal(fab_client_launchp, client);

  fatal(memblk_mk, &mb);
  fatal(args_collate, cmd, mb, &request);
  fatal(fab_client_make_request, client, mb, request);

finally:
  if(XAPI_UNWINDING)
  {
    if(XAPI_ERRVAL == FAB_NODAEMON)
    {
#if DEBUG || DEVEL
      // fabd exited - check for a coredump
#endif
    }
    else if(XAPI_ERRVAL == MAIN_BADARGS || XAPI_ERRVAL == MAIN_NOCOMMAND)
    {
      fatal(args_usage, cmd, 1, 1);
    }
  }

  // locals
  fatal(ixclose, &fd);
  fatal(fab_client_dispose, &client);
  memblk_free(mb);

  // module teardown
  fatal(build_command_cleanup);
coda;
}
Esempio n. 5
0
int main(int argc, char** argv, char ** envp)
{
  enter;

  xapi R = 0;
  char space[512];
  char * fabw_path = 0;
  const command * cmd = 0;

  memblk * mb = 0;
  fab_client * client = 0;
  fab_request * request = 0;

  int fd = -1;
  size_t tracesz = 0;

  // libraries
  fatal(fab_load);
  fatal(logger_load);
  fatal(valyria_load);
  fatal(narrator_load);
  fatal(xlinux_load);

  xapi_errtab_register(perrtab_MAIN);

  // logging
  fatal(logging_setup);
  fatal(logger_arguments_setup, envp);
  fatal(logger_finalize);

  // modules
  fatal(params_setup);
  fatal(params_report);
  fatal(sigbank_setup, "fab");

  // parse cmdline arguments
  fatal(args_parse, &cmd);
  fatal(args_report, cmd);

  // ensure fabd can write to my stdout/stderr
  fatal(xfchmod, 1, 0777);
  fatal(xfchmod, 2, 0777);

#if DEVEL
  snprintf(space, sizeof(space), "%s/../fabw/fabw.devel", g_params.exedir);
  fabw_path = space;
#endif

  fatal(fab_client_create, &client, ".", XQUOTE(FABIPCDIR), fabw_path);

#if DEBUG || DEVEL
  logs(L_IPC, "started");
#endif

#if 0
  // possibly kill the existing fabd instance, if any
  if(changed credentials)
    fatal(client_terminate);
#endif

  fatal(fab_client_prepare, client);
  fatal(fab_client_launchp, client);

  fatal(memblk_mk, &mb);
  fatal(args_collate, cmd, mb, &request);
  fatal(fab_client_make_request, client, mb, request);

finally:
#if DEBUG || DEVEL
  if(log_would(L_IPC))
  {
    xapi_infos("name", "fab");
    xapi_infof("pid", "%ld", (long)getpid());
    if(client)
      xapi_infos("hash", fab_client_gethash(client));
  }
#endif

  if(XAPI_UNWINDING)
  {
    if(XAPI_ERRVAL == FAB_FABDEXIT || XAPI_ERRVAL == FAB_UNSUCCESS)
    {
      // on orderly shutdown fabd has already backtraced to our stdout
    }
    else
    {
#if DEBUG || DEVEL || XAPI
      tracesz = xapi_trace_full(space, sizeof(space));
#else
      tracesz = xapi_trace_pithy(space, sizeof(space));
#endif

      xlogw(L_ERROR, L_RED, space, tracesz);
    }

    if(XAPI_ERRVAL == MAIN_BADARGS)
    {
      fatal(args_usage, cmd, 0, 0);
    }
  }

  // locals
  fatal(ixclose, &fd);
  fatal(fab_client_dispose, &client);
  memblk_free(mb);

  // module teardown
  sigbank_teardown();
  params_teardown();
  fatal(build_command_cleanup);

  // libraries
  fatal(fab_unload);
  fatal(logger_unload);
  fatal(valyria_unload);
  fatal(narrator_unload);
  fatal(xlinux_unload);

conclude(&R);
  xapi_teardown();

  return !!R;
}