[med-svn] [Git][med-team/genomethreader][master] add patch to use Debian paths for resources

Sascha Steinbiss gitlab at salsa.debian.org
Sun Jan 12 10:43:50 GMT 2020



Sascha Steinbiss pushed to branch master at Debian Med / genomethreader


Commits:
edbfc9c4 by Sascha Steinbiss at 2020-01-12T11:43:29+01:00
add patch to use Debian paths for resources

- - - - -


2 changed files:

- + debian/patches/search-paths.patch
- debian/patches/series


Changes:

=====================================
debian/patches/search-paths.patch
=====================================
@@ -0,0 +1,348 @@
+--- a/src/gth/bssm_param.c
++++ b/src/gth/bssm_param.c
+@@ -29,6 +29,7 @@
+ #include "gth/gthprobdef.h"
+ #include "gth/gthspeciestab.h"
+ #include "gth/showbool.h"
++#include "libgenomethreader/findfile.h"
+ 
+ /*
+   This is a collection of functions associated with
+@@ -451,42 +452,7 @@
+   if (gt_file_exists(filename))
+     gt_str_append_cstr(path, filename);
+   else {
+-    if (strchr(filename, GT_PATH_SEPARATOR)) {
+-      gt_error_set(err, "filename \"%s\" contains illegal symbol '%c': the "
+-                        "path list specified by environment variable \"%s\" "
+-                        "cannot be searched for it", filename,
+-                        GT_PATH_SEPARATOR, BSSMENVNAME);
+-      had_err = -1;
+-    }
+-    /* check for file path in environment variable */
+-    if (!had_err)
+-      had_err = gt_file_find_in_env(path, filename, BSSMENVNAME, err);
+-    if (!had_err && !gt_str_length(path)) {
+-      gt_error_set(err, "file \"%s\" not found in directory list specified "
+-                        "by environment variable %s", filename, BSSMENVNAME);
+-      had_err = -1;
+-    }
+-    if (!had_err) {
+-      /* path found -> append filename */
+-      gt_str_append_char(path, GT_PATH_SEPARATOR);
+-      gt_str_append_cstr(path, filename);
+-    }
+-    else {
+-      /* check for file path relative to binary */
+-      int new_err = gt_file_find_exec_in_path(path, gt_error_get_progname(err),
+-                                              NULL);
+-      if (!new_err) {
+-        gt_assert(gt_str_length(path));
+-        gt_str_append_char(path, GT_PATH_SEPARATOR);
+-        gt_str_append_cstr(path, "bssm");
+-        gt_str_append_char(path, GT_PATH_SEPARATOR);
+-        gt_str_append_cstr(path, filename);
+-        if (gt_file_exists(gt_str_get(path))) {
+-          gt_error_unset(err);
+-          had_err = 0;
+-        }
+-      }
+-    }
++    had_err = gth_find_file(filename, BSSMENVNAME, "bssm", path, err);
+   }
+ 
+   if (!had_err) {
+--- a/src/gth/input.c
++++ b/src/gth/input.c
+@@ -30,6 +30,7 @@
+ #include "gth/input.h"
+ #include "gth/md5_cache.h"
+ #include "gth/parse_options.h"
++#include "libgenomethreader/findfile.h"
+ 
+ #define GTHFORWARD  1        /* run program to match forward */
+ #define GTHREVERSE  (1 << 1) /* run program to match reverse */
+@@ -653,45 +654,14 @@
+ {
+   GtStr *path = gt_str_new();
+   int had_err = 0;
++
+   if (gt_file_exists(scorematrixfile)) {
+     gt_str_set(path, scorematrixfile);
+     return path;
+   }
+-  if (strchr(scorematrixfile, GT_PATH_SEPARATOR)) {
+-    gt_error_set(err, "filename \"%s\" contains illegal symbol '%c': the path "
+-                      "list specified by environment variable \"%s\" cannot be "
+-                      "searched for it", scorematrixfile, GT_PATH_SEPARATOR,
+-                      GTHDATAENVNAME);
+-    had_err = -1;
+-  }
+-  if (!had_err)
+-    had_err = gt_file_find_in_env(path, scorematrixfile, GTHDATAENVNAME, err);
+-  if (!had_err && !gt_str_length(path)) {
+-    gt_error_set(err, "file \"%s\" not found in directory list specified by "
+-                 "environment variable %s", scorematrixfile, GTHDATAENVNAME);
+-    had_err = -1;
+-  }
+-  if (!had_err) {
+-    gt_assert(gt_str_length(path));
+-    /* path found -> append score matrix file name */
+-    gt_str_append_char(path, GT_PATH_SEPARATOR);
+-    gt_str_append_cstr(path, scorematrixfile);
+-  }
+-  else {
+-    /* check for file relative to binary */
+-    int new_err = gt_file_find_exec_in_path(path, gt_error_get_progname(err),
+-                                            NULL);
+-    if (!new_err) {
+-      gt_str_append_char(path, GT_PATH_SEPARATOR);
+-      gt_str_append_cstr(path, GTHDATADIRNAME);
+-      gt_str_append_char(path, GT_PATH_SEPARATOR);
+-      gt_str_append_cstr(path, scorematrixfile);
+-      if (gt_file_exists(gt_str_get(path))) {
+-        gt_error_unset(err);
+-        had_err = 0;
+-      }
+-    }
+-  }
++
++  had_err = gth_find_file(scorematrixfile, GTHDATAENVNAME, GTHDATADIRNAME, path,
++                          err);
+   if (had_err) {
+     gt_str_delete(path);
+     return NULL;
+--- /dev/null
++++ b/src/libgenomethreader/findfile.c
+@@ -0,0 +1,74 @@
++/*
++  Copyright (c) 2020 Sascha Steinbiss <sascha at steinbiss.name>
++
++  Permission to use, copy, modify, and distribute this software for any
++  purpose with or without fee is hereby granted, provided that the above
++  copyright notice and this permission notice appear in all copies.
++
++  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
++  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
++  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
++  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
++  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++*/
++
++#include "findfile.h"
++#include "core/fileutils_api.h"
++#include "core/compat_api.h"
++
++int gth_find_file(const char *filename, const char *envname,
++                  const char *dirname, GtStr *out, GtError *err)
++{
++  int had_err = 0;
++  const char **defaultpath;
++  static const char *defaultpaths[] = {
++    "/usr/share/genomethreader",
++    "/usr/local/share/genomethreader",
++    "/usr/lib/genomethreader",
++    "/usr/local/lib/genomethreader",
++    NULL
++  };
++
++  gt_str_reset(out);
++  /* check in directory given by envname */
++  if (getenv(envname)) {
++    gt_str_append_cstr(out, getenv(envname));
++    gt_str_append_char(out, GT_PATH_SEPARATOR);
++    gt_str_append_cstr(out, filename);
++    if (gt_file_exists(gt_str_get(out))) {
++      return 0;
++    }
++  }
++
++  /* check for file relative to binary */
++  gt_str_reset(out);
++  had_err = gt_file_find_exec_in_path(out, gt_error_get_progname(err), NULL);
++  if (!had_err) {
++    gt_str_append_char(out, GT_PATH_SEPARATOR);
++    gt_str_append_cstr(out, dirname);
++    gt_str_append_char(out, GT_PATH_SEPARATOR);
++    gt_str_append_cstr(out, filename);
++    if (gt_file_exists(gt_str_get(out))) {
++      return 0;
++    }
++  }
++  
++  /* check for file in set of default paths */
++  for (defaultpath = defaultpaths; *defaultpath; defaultpath++) {
++    gt_str_reset(out);
++    gt_str_append_cstr(out, *defaultpath);
++    gt_str_append_char(out, GT_PATH_SEPARATOR);
++    gt_str_append_cstr(out, dirname);
++    gt_str_append_char(out, GT_PATH_SEPARATOR);
++    gt_str_append_cstr(out, filename);
++    if (gt_file_exists(gt_str_get(out))) {
++      return 0;
++    }
++  }
++  
++  gt_error_set(err, "could not find file '%s' in any of the search paths",
++               filename);
++  return -1;
++}
+--- /dev/null
++++ b/src/libgenomethreader/findfile.h
+@@ -0,0 +1,26 @@
++/*
++  Copyright (c) 2020 Sascha Steinbiss <sascha at steinbiss.name>
++
++  Permission to use, copy, modify, and distribute this software for any
++  purpose with or without fee is hereby granted, provided that the above
++  copyright notice and this permission notice appear in all copies.
++
++  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
++  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
++  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
++  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
++  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++*/
++
++#ifndef GTH_FINDFILE_H
++#define GTH_FINDFILE_H
++
++#include "core/str_api.h"
++#include "core/error_api.h"
++
++int gth_find_file(const char *filename, const char *envname,
++                  const char *dirname, GtStr *out, GtError *err);
++                  
++#endif
+--- a/src/libgenomethreader/gthmkvtree.c
++++ b/src/libgenomethreader/gthmkvtree.c
+@@ -6,6 +6,7 @@
+ #include "core/ma_api.h"
+ #include "gth/gthdef.h"
+ #include "gth/gthoutput.h"
++#include "libgenomethreader/findfile.h"
+ #include "libgenomethreader/gthmkvtree.h"
+ #include "types.h"
+ #include "virtualdef.h"
+@@ -52,39 +53,14 @@
+ {
+   int rval, had_err = 0;
+   gt_error_check(err);
+-  if (!getenv(GTHDATAENVNAME)) {
+-    gt_error_set(err, "$%s not defined. Please set correctly", GTHDATAENVNAME);
+-    had_err = -1;
+-  }
++
++  GtStr *path = gt_str_new();
++  had_err = gth_find_file(mapping, GTHDATAENVNAME, GTHDATADIRNAME, path, err);
+   if (!had_err) {
+-    rval = snprintf(smapfile, PATH_MAX+1, "%s%c%s", getenv(GTHDATAENVNAME),
+-                    GT_PATH_SEPARATOR, mapping);
+-    gt_assert(rval < PATH_MAX + 1);
+-    if (!gt_file_exists(smapfile)) {
+-      gt_error_set(err, "cannot open smap file '%s'", smapfile);
+-      had_err = -1;
+-    }
+-  }
+-  if (had_err) {
+-    /* check for file relative to binary */
+-    GtStr *path;
+-    int new_err;
+-    path = gt_str_new();
+-    new_err = gt_file_find_exec_in_path(path, gt_error_get_progname(err), NULL);
+-    if (!new_err) {
+-      gt_str_append_char(path, GT_PATH_SEPARATOR);
+-      gt_str_append_cstr(path, GTHDATADIRNAME);
+-      gt_str_append_char(path, GT_PATH_SEPARATOR);
+-      gt_str_append_cstr(path, mapping);
+-      if (gt_file_exists(gt_str_get(path))) {
+-        rval = snprintf(smapfile, PATH_MAX+1, "%s", gt_str_get(path));
+-        gt_assert(rval < PATH_MAX + 1);
+-        gt_error_unset(err);
+-        had_err = 0;
+-      }
+-    }
+-    gt_str_delete(path);
++   rval = snprintf(smapfile, PATH_MAX+1, "%s", gt_str_get(path));
++   gt_assert(rval < PATH_MAX + 1);
+   }
++  gt_str_delete(path);
+   return had_err;
+ }
+ 
+--- a/src/libgenomethreader/gthpre.c
++++ b/src/libgenomethreader/gthpre.c
+@@ -11,6 +11,7 @@
+ #include "gth/gthdef.h"
+ #include "gth/gthoutput.h"
+ #include "gth/input.h"
++#include "libgenomethreader/findfile.h"
+ #include "libgenomethreader/gthmkvtree.h"
+ #include "libgenomethreader/gthpolyafunc.h"
+ #include "libgenomethreader/gthpre.h"
+@@ -301,49 +302,22 @@
+ 
+   /* create masked file if necessary */
+   if (createmaskedfile) {
+-    sprintf(dnafilename, "%s.%s", POLYA_FASTAFILENAME, DNASUFFIX);
+-    /* check if polyatail.dna exists */
+-    fp = scanpathsforfile(GTHDATAENVNAME, dnafilename); /* XXX */
+-    if (!fp) {
+-      gt_error_set(err, "file \"%s\" not found in $%s. Set correctly?",
+-                   dnafilename, GTHDATAENVNAME);
+-      had_err = -1;
+-    }
+-    if (!had_err /* XXX */ && DELETEFILEHANDLE(fp)) {
+-      fprintf(stderr,"%s\n", messagespace());
+-      exit(EXIT_FAILURE);
+-    }
+-
+-    /* call vmatch and save masked file */
+-    if (!had_err && !getenv(GTHDATAENVNAME)) {
+-      gt_error_set(err, "$%s not defined. Please set correctly",
+-                   GTHDATAENVNAME);
+-      had_err = -1;
+-    }
++    int rval = 0;
++    GtStr *path = gt_str_new();
+ 
++    sprintf(dnafilename, "%s.%s", POLYA_FASTAFILENAME, DNASUFFIX);
++    had_err = gth_find_file(dnafilename, GTHDATAENVNAME, GTHDATADIRNAME, path,
++                            err);
+     if (!had_err) {
+-      sprintf(dnafilename, "%s%c%s", getenv(GTHDATAENVNAME), GT_PATH_SEPARATOR,
+-              POLYA_FASTAFILENAME);
+-    }
+-    else {
+-      /* check for file relative to binary */
+-      GtStr *path;
+-      int new_err;
+-      path = gt_str_new();
+-      new_err = gt_file_find_exec_in_path(path, gt_error_get_progname(err),
+-                                          NULL);
+-      if (!new_err) {
+-        gt_str_append_char(path, GT_PATH_SEPARATOR);
+-        gt_str_append_cstr(path, GTHDATADIRNAME);
+-        if (gt_file_exists_and_is_dir(gt_str_get(path))) {
+-          sprintf(dnafilename, "%s%c%s", gt_str_get(path), GT_PATH_SEPARATOR,
+-                  POLYA_FASTAFILENAME);
+-          gt_error_unset(err);
+-          had_err = 0;
+-        }
+-      }
++       rval = snprintf(dnafilename, PATH_MAX+1, "%s", gt_str_get(path));
++       gt_assert(rval < PATH_MAX + 1);
++       /* clip off DNASUFFIX */
++       gt_assert(strlen(dnafilename) > 5);
++       dnafilename[strlen(dnafilename)-4] = '\0';
+     }
++    gt_str_delete(path);
+ 
++    /* call vmatch and save masked file */
+     if (!had_err) {
+       /* open file pointer for masked reference file */
+       fp = gt_fa_xfopen(maskedfilename, "w");


=====================================
debian/patches/series
=====================================
@@ -1,3 +1,4 @@
 debian-gt-libs.patch
 gt-path-fix.patch
 hardening.patch
+search-paths.patch



View it on GitLab: https://salsa.debian.org/med-team/genomethreader/commit/edbfc9c4e1d7b313974db6d5ae7d59c13476c914

-- 
View it on GitLab: https://salsa.debian.org/med-team/genomethreader/commit/edbfc9c4e1d7b313974db6d5ae7d59c13476c914
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20200112/7b4e59b7/attachment-0001.html>


More information about the debian-med-commit mailing list