static gboolean gnm_glpk_start (GnmSolver *sol, WorkbookControl *wbc, GError **err, GnmGlpk *lp) { GnmSubSolver *subsol = GNM_SUB_SOLVER (sol); gboolean ok; gchar *argv[9]; int argc = 0; GnmSolverParameters *param = sol->params; const char *binary; g_return_val_if_fail (sol->status == GNM_SOLVER_STATUS_PREPARED, FALSE); binary = gnm_conf_get_plugin_glpk_glpsol_path (); if (binary == NULL || *binary == 0) binary = SOLVER_PROGRAM; argv[argc++] = (gchar *)binary; argv[argc++] = (gchar *)(param->options.automatic_scaling ? "--scale" : "--noscale"); argv[argc++] = (gchar *)"--write"; argv[argc++] = lp->result_filename; if (lp->ranges_filename) { argv[argc++] = (gchar *)"--ranges"; argv[argc++] = lp->ranges_filename; } argv[argc++] = (gchar *)"--cpxlp"; argv[argc++] = subsol->program_filename; argv[argc] = NULL; g_assert (argc < (int)G_N_ELEMENTS (argv)); ok = gnm_sub_solver_spawn (subsol, argv, cb_child_setup, NULL, NULL, NULL, NULL, NULL, err); if (!ok && err && g_error_matches (*err, G_SPAWN_ERROR, G_SPAWN_ERROR_NOENT)) { g_clear_error (err); g_set_error (err, G_SPAWN_ERROR, G_SPAWN_ERROR_NOENT, _("The %s program was not found. You can either " "install it or use another solver. " "For more information see %s"), SOLVER_PROGRAM, SOLVER_URL); } return ok; }
static gboolean gnm_lpsolve_start (GnmSolver *sol, WorkbookControl *wbc, GError **err, GnmLPSolve *lp) { GnmSubSolver *subsol = GNM_SUB_SOLVER (sol); gboolean ok; gchar *argv[5]; int argc = 0; GnmSolverParameters *param = sol->params; g_return_val_if_fail (sol->status == GNM_SOLVER_STATUS_PREPARED, FALSE); argv[argc++] = (gchar *)SOLVER_PROGRAM; argv[argc++] = (gchar *)"-i"; argv[argc++] = (gchar *)(param->options.automatic_scaling ? "-s1" : "-s0"); argv[argc++] = subsol->program_filename; argv[argc] = NULL; g_assert (argc < (int)G_N_ELEMENTS (argv)); ok = gnm_sub_solver_spawn (subsol, argv, cb_child_setup, NULL, (GIOFunc)cb_read_stdout, lp, NULL, NULL, err); if (!ok && err && g_error_matches (*err, G_SPAWN_ERROR, G_SPAWN_ERROR_NOENT)) { g_clear_error (err); g_set_error (err, G_SPAWN_ERROR, G_SPAWN_ERROR_NOENT, _("The %s program was not found. You can either " "install it or use another solver. " "For more information see %s"), SOLVER_PROGRAM, SOLVER_URL); } return ok; }