diff options
author | David Seifert <soap@gentoo.org> | 2016-11-19 16:29:31 +0100 |
---|---|---|
committer | David Seifert <soap@gentoo.org> | 2016-11-19 18:03:02 +0100 |
commit | a474ab0de01ae126ebfd16f834fbe01951da9ad4 (patch) | |
tree | 8ad2c55f6afa2a02c04aae232da751b9367e225a /sci-biology/meme | |
parent | net-im/jabberd2: Drop old vulnerable versions (bug #539534) (diff) | |
download | gentoo-a474ab0de01ae126ebfd16f834fbe01951da9ad4.tar.gz gentoo-a474ab0de01ae126ebfd16f834fbe01951da9ad4.tar.bz2 gentoo-a474ab0de01ae126ebfd16f834fbe01951da9ad4.zip |
sci-biology/meme: Version bump to 4.11.2_p2
Gentoo-bug: 599860
* EAPI=6
* Install documentation and examples correctly
* Install perl and python modules correctly
* Add missing perl runtime dependencies
Package-Manager: portage-2.3.2
Diffstat (limited to 'sci-biology/meme')
-rw-r--r-- | sci-biology/meme/Manifest | 1 | ||||
-rw-r--r-- | sci-biology/meme/files/meme-4.11.2_p2-fix-build-system.patch | 323 | ||||
-rw-r--r-- | sci-biology/meme/files/meme-4.11.2_p2-patch1.patch | 383 | ||||
-rw-r--r-- | sci-biology/meme/files/meme-4.11.2_p2-patch2.patch | 54 | ||||
-rw-r--r-- | sci-biology/meme/meme-4.11.2_p2.ebuild | 111 |
5 files changed, 872 insertions, 0 deletions
diff --git a/sci-biology/meme/Manifest b/sci-biology/meme/Manifest index 3ed08610b06e..4496d777cb23 100644 --- a/sci-biology/meme/Manifest +++ b/sci-biology/meme/Manifest @@ -1 +1,2 @@ +DIST meme_4.11.2.tar.gz 18004930 SHA256 6e3ff843366588ea13fa8060306be9e2c144521912dfb268f03638003bcdd581 SHA512 c97c3815e71e2fb5491548152f00688cdfbf4365f6027657e0ffc68e5d96cdd10a4708e0882ab7a5a61d78d93113c925cf5bb300fbe93fa4b2961becef497894 WHIRLPOOL 6b77d7832342658d5cf546af0b005b59664c811d25a0412df765a15a8c80a75d9618a1f9966c9a2824750eced6605b534d41199382a6f2641e7430540ba19fcf DIST meme_4.8.1.tar.gz 8703632 SHA256 c3ad3ca26bc2a7130c5eceb64e1745275c317a5469e98fc8759a9e56babccb8c SHA512 31833169ffa9bd82387d1872be40b0fc4312f4a05bb7abb84daf372244ce3f2a68c89c96722c0453f7bcd9eb4fc84fd3d66e1278af55d556715b94b0df5f87ba WHIRLPOOL 4b5e8968e6964479081d1fe036ff3aa7a50dc56bafc0031890d2e47dbdc8e0273e62ffe01800d8908b2fa9824a4766254bb0fd94003d9ca14784073d5357793e diff --git a/sci-biology/meme/files/meme-4.11.2_p2-fix-build-system.patch b/sci-biology/meme/files/meme-4.11.2_p2-fix-build-system.patch new file mode 100644 index 000000000000..0f3349c9583e --- /dev/null +++ b/sci-biology/meme/files/meme-4.11.2_p2-fix-build-system.patch @@ -0,0 +1,323 @@ +Fix and modernise build system +* Remove all *FLAGS setting, just append to the user-supplied ones +* Add --enable-doc and --enable-examples configure flags +* Install documentation and examples in correct directories +* Discover libxml2 and libxslt dependencies using PKG_CHECK_MODULES +* Install python and perl modules correctly + +--- a/configure.ac ++++ b/configure.ac +@@ -76,61 +76,9 @@ + AM_CONDITIONAL(WANT_STRLCPY, test ["$have_strlcpy" = no]) + + # Check for compiler-specific settings +-LARGE_FILE_SUPPORT=`getconf LFS_CFLAGS` +-if test "${GCC}" = "yes"; then +- ac_cc_opt="-O3" +- ac_cc_debug_opt="-O0" +- ac_cc_warn="-Wall -Wno-unused" +- ac_cc_debug="-ggdb" +- # Check for OS X llvm (clang) compiler +- if `gcc --version |grep llvm >/dev/null`; then +- ac_cc_debug="-g" +- fi +- CFLAGS="-std="gnu89" $ac_cc_warn -DUNIX -D__USE_FIXED_PROTOTYPES__ $LARGE_FILE_SUPPORT" +-else +- ac_cc_opt="-O" +- ac_cc_debug_opt="" +- ac_cc_warn="" +- ac_cc_debug="-g" +- CFLAGS="$ac_cc_warn -DUNIX -D__USE_FIXED_PROTOTYPES__ $LARGE_FILE_SUPPORT" +-fi +- +-# Set up default libxml2 settings +-# check for installed copy of libxml2 +-build_libxml2="yes" +-if test -n "$XML2_CONFIG"; then +- # Require at least version 2.6 +- required_libxml2_version="2006000" +- LIBXML2_VERSION="`$XML2_CONFIG --version | \ +- awk 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'`" +- if test -n "$LIBXML2_VERSION" && \ +- test "$LIBXML2_VERSION" -ge "$required_libxml2_version"; then +- build_libxml2="no" +- LIBXML2_LIBS="`$XML2_CONFIG --libs`" +- LIBXML2_CFLAGS="`$XML2_CONFIG --cflags`" +- fi +-fi +-if test -z "$LIBXML2_LIBS"; then +- AC_MSG_WARN([libxml2 library not found]) +- LIBXML2_LIBS="\${top_builddir}/src/libxml2/libxml2.la" +- LIBXML2_CFLAGS="-I\${top_srcdir}/src/libxml2/include" +-fi +- +-# Set up default libxslt settings +-# check for installed copy of libxslt +-build_libxslt="yes" +-if test -n "$XSLT_CONFIG"; then +- build_libxslt="no" +- LIBXSLT_LIBS="`$XSLT_CONFIG --libs` -lexslt" +- LIBXSLT_CFLAGS="`$XSLT_CONFIG --cflags`" +-fi +-if test -z "$LIBXSLT_LIBS"; then +- AC_MSG_WARN([libxslt library not found]) +- LIBEXSLT_LIBS="\${top_builddir}/src/libexslt/libexslt.la" +- LIBXSLT_LIBS="\${top_builddir}/src/libxslt/libxslt.la" +- LIBEXSLT_CFLAGS="-I\${top_srcdir}/src/libexslt" +- LIBXSLT_CFLAGS="-I\${top_srcdir}/src/" +-fi ++AC_SYS_LARGEFILE ++CFLAGS="-std=gnu89 -Wall -Wno-unused ${CFLAGS}" ++CPPFLAGS="-DUNIX -D__USE_FIXED_PROTOTYPES__ ${CPPFLAGS}" + + # who is installing + USER=`whoami` +@@ -279,6 +227,16 @@ + AM_CONDITIONAL(PARALLEL, test ["$parallel" != no]) + AM_CONDITIONAL(PARALLEL_IS_LAM, test -n ["$lammpi"]) + ++dnl Documentation ++AC_ARG_ENABLE([doc], ++ AS_HELP_STRING([--enable-doc], [Enable installation of documentation])) ++AM_CONDITIONAL([ENABLE_DOC], [test "x$enable_doc" = "xyes"]) ++ ++dnl Examples ++AC_ARG_ENABLE([examples], ++ AS_HELP_STRING([--enable-examples], [Enable installation of examples])) ++AM_CONDITIONAL([ENABLE_EXAMPLES], [test "x$enable_examples" = "xyes"]) ++ + AC_ARG_ENABLE( + webservice, + [ --enable-webservice=deploy_dir Deploy the MEME service on an existing Opal 2.5+ installation], +@@ -309,24 +267,35 @@ + AM_CONDITIONAL(WEBEITHER, test ["x$OPAL_DEPLOY" != "x" -o "x$OPAL_URL" != "xno"]) + + # enable building of included libxml2 +-AC_ARG_ENABLE( +- build_libxml2, +- [ --enable-build-libxml2 Build included version of libxml2. Default is to use pre-existing locally installed copy.], +- build_libxml2=$enableval; \ +- LIBXML2_LIBS="\${top_builddir}/src/libxml2/libxml2.la"; \ +- LIBXML2_CFLAGS="-I\${top_srcdir}/src/libxml2/include" , ) +-AM_CONDITIONAL(BUILD_LIBXML2, test ["$build_libxml2" = yes]) ++AC_ARG_ENABLE([build-libxml2], ++ AS_HELP_STRING([--enable-build-libxml2], [Build included version of libxml2. Default is to use pre-existing locally installed copy.])) ++AS_IF([test "x$enable_build_libxml2" = "xyes"], [ ++ dnl Enable building of bundled libs ++ LIBXML2_CFLAGS="-I\${top_srcdir}/src/libxml2/include" ++ LIBXML2_LIBS="\${top_builddir}/src/libxml2/libxml2.la" ++ ],[ ++ dnl Use system libraries ++ PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6]) ++]) ++AM_CONDITIONAL([BUILD_LIBXML2], [test "x$enable_build_libxml2" = "xyes"]) ++ + + # enable building of included libxslt +-AC_ARG_ENABLE( +- build_libxslt, +- [ --enable-build-libxslt Build included version of libxslt. Default is to use pre-existing locally installed copy.], +- build_libxslt=$enableval; \ +- LIBEXSLT_LIBS="\${top_builddir}/src/libexslt/libexslt.la"; \ +- LIBXSLT_LIBS="\${top_builddir}/src/libxslt/libxslt.la"; \ +- LIBEXSLT_CFLAGS="-I\${top_srcdir}/src/libexslt"; \ +- LIBXSLT_CFLAGS="-I\${top_srcdir}/src/" , ) +-AM_CONDITIONAL(BUILD_LIBXSLT, test ["$build_libxslt" = yes]) ++AC_ARG_ENABLE([build-libxslt], ++ AS_HELP_STRING([--enable-build-libxslt], [Build included version of libxslt. Default is to use pre-existing locally installed copy.])) ++AS_IF([test "x$enable_build_libxslt" = "xyes"], [ ++ dnl Enable building of bundled libs ++ LIBXSLT_CFLAGS="-I\${top_srcdir}/src/" ++ LIBXSLT_LIBS="\${top_builddir}/src/libxslt/libxslt.la" ++ ++ LIBEXSLT_CFLAGS="-I\${top_srcdir}/src/libexslt" ++ LIBEXSLT_LIBS="\${top_builddir}/src/libexslt/libexslt.la" ++ ],[ ++ dnl Use system libraries ++ PKG_CHECK_MODULES([LIBXSLT], [libxslt]) ++ PKG_CHECK_MODULES([LIBEXSLT], [libexslt]) ++]) ++AM_CONDITIONAL([BUILD_LIBXSLT], [test "x$enable_build_libxslt" = "xyes"]) + + # set website url + AC_ARG_WITH( +@@ -427,13 +396,13 @@ + [AC_PATH_PROG(PERL, perl)]) + AC_DEFINE_UNQUOTED(PERL, "$PERL", [Path to Perl] ) + ++AC_ARG_WITH([perl-dir], ++ AS_HELP_STRING([--with-perl-dir], [Perl modules directory]), [perlmoddir="$with_perl_dir"], [perlmoddir="lib/perl"]) ++AC_SUBST([perlmoddir]) ++ ++ + # set path to Python +-AC_ARG_WITH( +- python, +- [ --with-python=NAME Set path to Python. Default is to take from user's PATH.], +- [PYTHON=$withval], +- [AC_PATH_PROG(PYTHON, python)]) +-AC_DEFINE_UNQUOTED(PYTHON, "$PYTHON", [Path to Python] ) ++AM_PATH_PYTHON + + # set path to convert utility + AC_ARG_WITH( +@@ -586,13 +555,15 @@ + Configuration parameters + ======================== + +- Install path: ${prefix} ++ Install path (prefix): ${prefix} + Install UID: ${MEME_USER} + Version: ${VERSION} +- C compiler: ${CC} +- C compiler flags: ${CFLAGS} +- Linker: ${LD} +- Special Libs: ${LIBS} ++ C compiler (CC): ${CC} ++ C compiler flags (CFLAGS): ${CFLAGS} ++ C preproc flags (CPPFLAGS): ${CPPFLAGS} ++ Linker (LD): ${LD} ++ Linker flags (LDFLAGS): ${LDFLAGS} ++ Special Libs (LIBS): ${LIBS} + MPICC ${MPICC} + MPIRUN ${MPIRUN} + MPI_CMD ${MPI_CMD} +--- a/doc/css/Makefile.am ++++ b/doc/css/Makefile.am +@@ -5,7 +5,7 @@ + + EXTRA_DIST = $(NORMAL_FILES) + +-if ! WEBSITE +-doccssdir = $(prefix)/doc/css ++if ENABLE_DOC ++doccssdir = $(htmldir)/css + doccss_DATA = $(NORMAL_FILES) + endif +--- a/doc/examples/compute_prior_dist_example_output_files/Makefile.am ++++ b/doc/examples/compute_prior_dist_example_output_files/Makefile.am +@@ -7,8 +7,8 @@ + EXAMPLES = \ + prior.dist.txt + +-if ! WEBSITE +-exdir = $(prefix)/doc/examples/compute_prior_dist_example_output_files ++if ENABLE_EXAMPLES ++exdir = $(docdir)/examples/compute_prior_dist_example_output_files + ex_DATA = $(EXAMPLES) + endif + +--- a/doc/examples/Makefile.am ++++ b/doc/examples/Makefile.am +@@ -22,8 +22,8 @@ + # load the EXAMPLE_OUTPUT_FILES variable + include examples.mk + +-if ! WEBSITE +-exdir = $(prefix)/doc/examples ++if ENABLE_EXAMPLES ++exdir = $(docdir)/examples + nobase_dist_ex_DATA = $(EXAMPLES) $(EXAMPLE_OUTPUT_FILES) + endif + +--- a/doc/examples/sample_opal_scripts/Makefile.am ++++ b/doc/examples/sample_opal_scripts/Makefile.am +@@ -15,8 +15,8 @@ + MemeClient.pl \ + MemeClient.py + +-if ! WEBSITE +-exdir = $(prefix)/doc/examples/sample_opal_scripts ++if ENABLE_EXAMPLES ++exdir = $(docdir)/examples/sample_opal_scripts + ex_DATA = $(EXAMPLES) + endif + +--- a/doc/images/Makefile.am ++++ b/doc/images/Makefile.am +@@ -30,8 +30,8 @@ + + MEME_IMAGES = $(PROGRAM_ICONS) $(OTHER_IMAGES) + +-if ! WEBSITE +-memeimgdir = $(prefix)/doc/images ++if ENABLE_DOC ++memeimgdir = $(htmldir)/images + memeimg_DATA = $(MEME_IMAGES) + endif + +--- a/doc/js/Makefile.am ++++ b/doc/js/Makefile.am +@@ -41,8 +41,8 @@ + + BUILT_SOURCES = $(BUILT_FILES) + +-if ! WEBSITE +-docjsdir = $(prefix)/doc/js ++if ENABLE_DOC ++docjsdir = $(htmldir)/js + docjs_DATA = $(NORMAL_FILES) $(BUILT_FILES) $(SYMLINK_FILES) + endif + +--- a/doc/Makefile.am ++++ b/doc/Makefile.am +@@ -129,8 +129,8 @@ + update-sequence-db.html \ + ismb94.pdf + +-if ! WEBSITE +-memedocdir = $(prefix)/doc ++if ENABLE_DOC ++memedocdir = $(htmldir) + memedoc_DATA = $(NORMAL_FILES) + endif + +--- a/scripts/Makefile.am ++++ b/scripts/Makefile.am +@@ -22,8 +22,8 @@ + -e 's%@WHICHJAVA@%$(JAVA)%' \ + -e 's%@WHICHCONVERT@%$(CONVERT)%' \ + -e 's%@WHICHGHOSTSCRIPT@%$(GHOSTSCRIPT)%' \ +- -e 's%@PERLLIBDIR@%$(libdir)/perl%' \ +- -e 's%@PYTHONLIBDIR@%$(libdir)/python%' \ ++ -e 's%@PERLLIBDIR@%$(perlmoddir)%' \ ++ -e 's%@PYTHONLIBDIR@%$(pythondir)%' \ + -e 's%@JAVALIBDIR@%$(libdir)/java%' \ + -e 's%@LAM_BIN@%$(LAMBIN)%' \ + -e 's%@APPCONFIGDIR@%$(sysconfdir)%' \ +@@ -62,7 +62,7 @@ + DiffXML.pm \ + HypergeometricDynProg.pm + +-perlmoddir=$(libdir)/perl ++perlmoddir = $(exec_prefix)/@perlmoddir@ + perlmod_SCRIPTS = \ + $(BUILT_PERL_MOD) \ + $(NORMAL_PERL_MOD) +@@ -76,8 +76,7 @@ + hypergeometric.py \ + sequence.py + +-pythonlibdir=$(libdir)/python +-pythonlib_SCRIPTS = \ ++python_PYTHON = \ + $(BUILT_PYTHON_LIB) \ + $(NORMAL_PYTHON_LIB) + +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -19,7 +19,13 @@ + ARCHIVE_REVISION = $(shell cat ../ARCHIVE_REVISION) + ARCHIVE_DATE = $(shell cat ../ARCHIVE_DATE) + +-SUBDIRS = filters libxml2 libxslt libexslt . parallel ++SUBDIRS = filters . parallel ++if BUILD_LIBXML2 ++SUBDIRS += libxml2 ++endif ++if BUILD_LIBXSLT ++SUBDIRS += libxslt libexslt ++endif + + BUILT_SOURCES = dir.h projrel.h + diff --git a/sci-biology/meme/files/meme-4.11.2_p2-patch1.patch b/sci-biology/meme/files/meme-4.11.2_p2-patch1.patch new file mode 100644 index 000000000000..30a182f8f43a --- /dev/null +++ b/sci-biology/meme/files/meme-4.11.2_p2-patch1.patch @@ -0,0 +1,383 @@ +--- a/doc/alphabet-format.html ++++ b/doc/alphabet-format.html +@@ -233,7 +233,7 @@ + providing a reference on the meaning of the symbols used. If present, the + symbol name must be the second field.</p> + <p>The "<span class="pdat">name</span>" follows the rules of +- <a href="qstr">quoted text</a>.</p> ++ <a href="#qstr">quoted text</a>.</p> + </div> + <h5>color</h5> + <div class="indent"> +--- a/doc/release-notes.html ++++ b/doc/release-notes.html +@@ -14,8 +14,26 @@ + <h2>Motif-based sequence analysis tools</h2> + </div> + <h2>MEME Suite Release Notes</h2> ++ <hr> ++ <b>MEME version 4.11.2 patch 1 -- June 16, 2016</b> ++ <ul> ++ <li> ++ <b>Bug fixes</b> ++ <ul> ++ <li> ++ Fixed bug in MCAST 4.11.2 that caused it to prematurely truncate ++ reading the sequence file. ++ </li> ++ <li> ++ Modified MEME to fall back to a simple Dirichlet prior when ++ using DNA or a custom alphabet with a prior that requires ++ a prior library, but no prior libray is specified. ++ </li> ++ </ul ++ </li> ++ </ul> ++ <p> + <hr> +- <p> + <b>MEME version 4.11.2 -- May 5 2016</b> + </p> + <ul> +--- a/src/fasta-io.c ++++ b/src/fasta-io.c +@@ -14,6 +14,7 @@ + #include "alphabet.h" + #include "fasta-io.h" + #include "io.h" ++#include "seq-reader-from-fasta.h" + #include "prior-reader-from-psp.h" + #include "seq.h" + +@@ -159,61 +160,6 @@ + } + + /**************************************************************************** +- * Read raw sequence until a new sequence is encountered or too many letters +- * are read. The new sequence is appended to the end of the given +- * sequence. +- * +- * Return: Was the sequence read completely? +- ****************************************************************************/ +-static BOOLEAN_T read_raw_sequence_from_reader( +- DATA_BLOCK_READER_T *fasta_reader, // Sequence source +- char* name, // Sequence ID (used in error messages). +- ALPH_T* alph, // Alphabet in use +- unsigned int offset, // Current position in raw_sequence. +- unsigned int max_chars, // Maximum chars in raw_sequence. +- char* raw_sequence // Pre-allocated sequence. +-) { +- // tlb; change a_char to integer so it will compile on SGI +- int a_char; +- int start_update; +- BOOLEAN_T return_value = TRUE; +- +- // Start at the end of the given sequence. +- assert(offset < max_chars); +- +- DATA_BLOCK_T *seq_block = new_sequence_block(max_chars - offset); +- return_value = !fasta_reader->get_next_block(fasta_reader, seq_block); +- +- char *seq_buffer = get_sequence_from_data_block(seq_block); +- size_t seq_buffer_size = get_num_read_into_data_block(seq_block); +- int i; +- for (i = 0; i < seq_buffer_size; ++i) { +- a_char = seq_buffer[i]; +- // Skip non-alphabetic characters. +- if (!isalnum(a_char) && a_char != '-' && a_char != '*' && a_char != '.') { +- if ((a_char != ' ') && (a_char != '\t') && (a_char != '\n') && (a_char != '\r')) { +- fprintf(stderr, "Warning: Skipping character %c in sequence %s.\n", +- a_char, name); +- } +- } else { +- // skip check if unknown alph +- if (alph != NULL && !alph_is_known(alph, a_char)) { +- fprintf(stderr, "Warning: Converting illegal character %c to %c ", +- a_char, alph_wildcard(alph)); +- fprintf(stderr, "in sequence %s.\n", name); +- a_char = alph_wildcard(alph); +- } +- raw_sequence[offset] = (char) a_char; +- ++offset; +- } +- } +- +- raw_sequence[offset] = '\0'; +- free_data_block(seq_block); +- return(return_value); +-} +- +-/**************************************************************************** + * Read one sequence from a file in Fasta format. + * + * Return: Was a sequence successfully read? +@@ -320,44 +266,6 @@ + } + + /**************************************************************************** +- * Read up to max_chars letters of one sequence from a DATA_BLOCK_T readder +- * and copy them in to the raw sequence in the SEQ_T object starting at the +- * given buffer offset. +- ****************************************************************************/ +-void read_one_fasta_segment_from_reader( +- DATA_BLOCK_READER_T *fasta_reader, +- size_t max_size, +- size_t buffer_offset, +- SEQ_T *sequence +-) { +- +- assert(sequence != NULL); +- assert(get_seq_length(sequence) <= max_size); +- +- // Get the raw sequence buffer from the SEQ_T +- char *raw_sequence = get_raw_sequence(sequence); +- if (raw_sequence == NULL) { +- // Allocate space for raw sequence if not done yet. +- raw_sequence = mm_malloc(sizeof(char) * max_size + 1); +- raw_sequence[0] = 0; +- } +- +- // Read a block of sequence charaters into the +- // raw sequence buffer for the SEQ_T. +- char *name = get_seq_name(sequence); +- BOOLEAN_T is_complete = read_raw_sequence_from_reader( +- fasta_reader, +- name, +- NULL, //FIXME this is dodgy, need a proper way of getting the alphabet. The fasta_reader has it but it is not accessable! +- buffer_offset, +- max_size, +- raw_sequence +- ); +- set_raw_sequence(raw_sequence, is_complete, sequence); +- +-} +- +-/**************************************************************************** + * Read all the sequences from a FASTA file at once. + Multiple files can be appended by calling this more than once. + ****************************************************************************/ +--- a/src/fasta-io.h ++++ b/src/fasta-io.h +@@ -43,19 +43,6 @@ + ); + + /**************************************************************************** +- * Read up to max_chars letters of one sequence from a DATA_BLOCK_T readder +- * and copy them in to the raw sequence in the SEQ_T object starting at the +- * given buffer offset. +- ****************************************************************************/ +-void read_one_fasta_segment_from_reader( +- DATA_BLOCK_READER_T *fasta_reader, +- size_t max_size, +- size_t buffer_offset, +- SEQ_T* sequence +-); +- +- +-/**************************************************************************** + * Read all the sequences from a file in Fasta format. + ****************************************************************************/ + void read_many_fastas +--- a/src/init.c ++++ b/src/init.c +@@ -767,10 +767,16 @@ + if (alph_is_builtin_protein(alph)) { // default mixture prior for proteins + plib_name = make_path_to_file(get_meme_etc_dir(), PROTEIN_PLIB); + } else { +- fprintf(stderr, "The prior library must be specified for DNA or custom " +- "alphabets when specifiying a prior type of 'dmix', 'mega' " +- "or 'megap'."); +- exit(1); ++ fprintf( ++ stderr, ++ "WARNING: When using DNA or a custom alphabet, " ++ "and specifiying a prior type of\n" ++ "'dmix', 'mega' or 'megap', a prior library must be provided.\n" ++ "No prior library was provided, so a simple Dirichlet prior will be used.\n" ++ ); ++ prior = "dirichlet"; ++ ptype = Dirichlet; ++ if (beta <= 0) beta = 0.01; // default b = 0.01 for simple Dirichlet + } + } + } +--- a/src/seq-reader-from-fasta.c ++++ b/src/seq-reader-from-fasta.c +@@ -639,11 +639,140 @@ + return fasta_reader->current_position; + } + ++ ++/**************************************************************************** ++ * Read up to max_chars letters of one sequence from a DATA_BLOCK_T readder ++ * and copy them in to the raw sequence in the SEQ_T object starting at the ++ * given buffer offset. ++ ****************************************************************************/ ++void read_one_fasta_segment_from_reader( ++ DATA_BLOCK_READER_T *fasta_reader, ++ size_t max_size, ++ size_t offset, ++ SEQ_T *sequence ++) { ++ ++ ++ assert(sequence != NULL); ++ assert(offset < max_size); ++ ++ // Get the raw sequence buffer from the SEQ_T ++ char *raw_sequence = get_raw_sequence(sequence); ++ if (raw_sequence == NULL) { ++ // Allocate space for raw sequence if not done yet. ++ raw_sequence = mm_malloc(sizeof(char) * max_size + 1); ++ raw_sequence[0] = 0; ++ } ++ ++ // Read a block of sequence charaters into the ++ // raw sequence buffer for the SEQ_T, starting at offset. ++ BOOLEAN_T is_complete = read_raw_sequence_from_reader( ++ fasta_reader, ++ max_size - offset, ++ raw_sequence + offset ++ ); ++ set_raw_sequence(raw_sequence, is_complete, sequence); ++} ++ ++/**************************************************************************** ++ * Read raw sequence until a new sequence is encountered or too many letters ++ * are read. ++ * ++ * Return: Was the sequence read completely? ++ ****************************************************************************/ ++BOOLEAN_T read_raw_sequence_from_reader( ++ DATA_BLOCK_READER_T *reader, // Sequence source ++ unsigned int max_chars, // Maximum chars in raw_sequence. ++ char* raw_sequence // Pre-allocated sequence buffer. ++) { ++ ++ SEQ_READER_FROM_FASTA_T *fasta_reader ++ = (SEQ_READER_FROM_FASTA_T *) get_data_block_reader_data(reader); ++ ++ // Read sequence into temp. buffer from the sequence file. ++ char buffer[max_chars]; ++ long start_file_pos = ftell(fasta_reader->fasta_file); ++ size_t seq_index = 0; ++ size_t total_read = 0; ++ while (seq_index < max_chars) { ++ ++ size_t num_char_read = fread( ++ buffer, ++ sizeof(char), ++ max_chars - seq_index, ++ fasta_reader->fasta_file ++ ); ++ fasta_reader->current_position += num_char_read; ++ total_read += num_char_read; ++ ++ if (feof(fasta_reader->fasta_file)) { ++ fasta_reader->at_end_of_file = TRUE; ++ } ++ else if (num_char_read < (max_chars - seq_index)) { ++ die( ++ "Error while reading sequence from file:%s.\nError message: %s\n", ++ fasta_reader->filename, ++ strerror(ferror(fasta_reader->fasta_file)) ++ ); ++ } ++ ++ size_t i; ++ for(i = 0; i < num_char_read; ++i) { ++ char c = buffer[i]; ++ assert(c != 0); ++ if (isspace(c)) { ++ // Skip over white space ++ fasta_reader->at_start_of_line = (c == '\n'); ++ } ++ else if (c == '>' && fasta_reader->at_start_of_line == TRUE) { ++ // We found the start of a new sequence while trying ++ // to fill the buffer. Leave the buffer incomplete. ++ // and wind back the file ++ fseek(fasta_reader->fasta_file, start_file_pos + i - 1, SEEK_SET); ++ fasta_reader->current_position = start_file_pos + i - 1; ++ fasta_reader->at_end_of_seq = TRUE; ++ fasta_reader->at_start_of_line = FALSE; ++ fasta_reader->at_end_of_file = FALSE; ++ break; ++ } ++ else { ++ fasta_reader->at_start_of_line = FALSE; ++ // Check that character is legal in alphabet. ++ // If not, replace with wild card character. ++ if (alph_is_known(fasta_reader->alphabet, c)) { ++ raw_sequence[seq_index] = c; ++ } ++ else { ++ raw_sequence[seq_index] = alph_wildcard(fasta_reader->alphabet); ++ fprintf( ++ stderr, ++ "Warning: %c is not a valid character in %s alphabet.\n" ++ " Converting %c to %c.\n", ++ c, ++ alph_name(fasta_reader->alphabet), ++ c, ++ raw_sequence[i] ++ ); ++ } ++ ++seq_index; ++ } ++ } ++ if (fasta_reader->at_end_of_seq | fasta_reader->at_end_of_file) { ++ break; ++ } ++ } ++ ++ raw_sequence[seq_index] = '\0'; ++ return(fasta_reader->at_end_of_seq | fasta_reader->at_end_of_file); ++} ++ + /****************************************************************************** +- * Fills in the next data block for the sequence. +- * During the first call for the sequence it fills in the full data block. +- * On successive calls, shifts the sequence in the block down one position +- * and reads one more character. ++ * Populates the data block for the with the next block of sequence. ++ * ++ * During the first call for the sequence it fills in a buffer from a file, ++ * The sequence pointer in the data block is set to point at the start of the buffer. ++ * On successive calls, the sequence pointer in the block is shifted down one position ++ * in the buffer. When the end of the buffer is reached, it is filled again from the file. + * + * Returns TRUE if it was able to completely fill the block, FALSE if + * the next sequence or EOF was reached before the block was filled. +--- a/src/seq-reader-from-fasta.h ++++ b/src/seq-reader-from-fasta.h +@@ -37,5 +37,30 @@ + int * end_ptr // end position of sequence (chr:\d+-(\d+)) + ); + ++/**************************************************************************** ++ * Read raw sequence until a new sequence is encountered or too many letters ++ * are read. ++ * ++ * Return: Was the sequence read completely? ++ ****************************************************************************/ ++BOOLEAN_T read_raw_sequence_from_reader( ++ DATA_BLOCK_READER_T *fasta_reader, // Sequence source ++ unsigned int max_chars, // Maximum chars in raw_sequence. ++ char* raw_sequence // Pre-allocated sequence. ++); ++ ++/**************************************************************************** ++ * Read up to max_chars letters of one sequence from a DATA_BLOCK_T readder ++ * and copy them in to the raw sequence in the SEQ_T object starting at the ++ * given buffer offset. ++ ****************************************************************************/ ++void read_one_fasta_segment_from_reader( ++ DATA_BLOCK_READER_T *reader, ++ size_t max_size, ++ size_t offset, ++ SEQ_T *sequence ++); ++ ++ + size_t get_current_pos_from_seq_reader_from_fasta(DATA_BLOCK_READER_T *reader); + #endif diff --git a/sci-biology/meme/files/meme-4.11.2_p2-patch2.patch b/sci-biology/meme/files/meme-4.11.2_p2-patch2.patch new file mode 100644 index 000000000000..498d1df7b664 --- /dev/null +++ b/sci-biology/meme/files/meme-4.11.2_p2-patch2.patch @@ -0,0 +1,54 @@ +--- a/doc/release-notes.html ++++ b/doc/release-notes.html +@@ -15,6 +15,21 @@ + </div> + <h2>MEME Suite Release Notes</h2> + <hr> ++ <b>MEME version 4.11.2 patch 2 -- October 24, 2016</b> ++ <ul> ++ <li> ++ <b>Bug fixes</b> ++ <ul> ++ <li> ++ Fixed bug in handling of RNA-like custom alphabets. ++ </li> ++ <li> ++ Fixed bug in MAST -comp option. ++ </li> ++ </ul ++ </li> ++ </ul> ++ <hr> + <b>MEME version 4.11.2 patch 1 -- June 16, 2016</b> + <ul> + <li> +--- a/src/alph-in.c ++++ b/src/alph-in.c +@@ -1044,7 +1044,7 @@ + lookup[0] = sym->complement; + comp2 = (ALPH_SYM_T*)rbtree_get(reader->merged, lookup); + } +- if (comp1 != comp2) { ++ if (comp1 && (comp1 != comp2)) { + add_msg(reader, parmsg_create(SEVERITY_ERROR, -1, -1, -1, + "not like %s alphabet as %c complement rules are incorrect", + ext_name, req_syms[i])); +--- a/src/mast-util.c ++++ b/src/mast-util.c +@@ -740,14 +740,14 @@ + + // create the frequency array + alph = xlate ? xlate_dest_alph(xlate) : alph; +- freq = allocate_array(alph_size_core(alph)); ++ freq = allocate_array(alph_size_full(alph)); + init_array(0, freq); + + // count the number of letters of each type + if (xlate) { + for (n=0; sequence[n]; n++) { + i = xlate_index(xlate, false, sequence+n); +- if (i > 0 && i < alph_size_core(alph)) incr_array_item(i, 1, freq); ++ if (i > 0 && i < alph_size_full(alph)) incr_array_item(i, 1, freq); + } + } else { + for (n=0; sequence[n]; n++) { diff --git a/sci-biology/meme/meme-4.11.2_p2.ebuild b/sci-biology/meme/meme-4.11.2_p2.ebuild new file mode 100644 index 000000000000..4eb826065500 --- /dev/null +++ b/sci-biology/meme/meme-4.11.2_p2.ebuild @@ -0,0 +1,111 @@ +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=6 + +PYTHON_COMPAT=( python2_7 ) + +inherit autotools perl-functions python-single-r1 versionator + +MY_PV=$(get_version_component_range 1-3) +MY_P=${PN}_${MY_PV} + +DESCRIPTION="The MEME/MAST system - Motif discovery and search" +HOMEPAGE="http://meme-suite.org/tools/meme" +SRC_URI="http://meme-suite.org/meme-software/${MY_PV}/${MY_P}.tar.gz" + +LICENSE="meme" +SLOT="0" +KEYWORDS="~amd64 ~x86" +IUSE="debug doc examples mpi" + +RDEPEND=" + ${PYTHON_DEPS} + app-shells/tcsh + dev-libs/libxml2:2 + dev-libs/libxslt + sys-libs/zlib + app-text/ghostscript-gpl + media-gfx/imagemagick + dev-lang/perl:= + dev-perl/HTML-Parser + dev-perl/HTML-Template + dev-perl/Log-Log4perl + dev-perl/Math-CDF + dev-perl/XML-Compile-SOAP + dev-perl/XML-Compile-WSDL11 + dev-perl/XML-Parser + dev-perl/XML-Simple + virtual/perl-Data-Dumper + virtual/perl-Exporter + virtual/perl-File-Path + virtual/perl-File-Spec + virtual/perl-File-Temp + virtual/perl-Getopt-Long + virtual/perl-Scalar-List-Utils + virtual/perl-Time-HiRes + mpi? ( virtual/mpi )" +DEPEND="${RDEPEND}" +REQUIRED_USE="${PYTHON_REQUIRED_USE}" + +S="${WORKDIR}/${MY_P}" +PATCHES=( + "${FILESDIR}"/${PN}-4.11.2_p2-patch1.patch + "${FILESDIR}"/${PN}-4.11.2_p2-patch2.patch + "${FILESDIR}"/${PN}-4.11.2_p2-fix-build-system.patch +) + +pkg_setup() { + python-single-r1_pkg_setup + perl_set_version +} + +src_prepare() { + default + eautoreconf +} + +src_configure() { + econf \ + --sysconfdir="${EPREFIX}"/etc/${PN} \ + --with-logs="${EPREFIX}"/var/log/${PN} \ + --with-perl=perl \ + --with-convert=convert \ + --with-gs=gs \ + --disable-build-libxml2 \ + --disable-build-libxslt \ + $(use_enable debug) \ + $(use_enable doc) \ + $(use_enable examples) \ + $(use_enable !mpi serial) \ + --with-perl-dir="${VENDOR_LIB#${EPREFIX}/usr}" \ + PYTHON="${EPYTHON}" + + # delete bundled libs, just to be sure. These need + # to be removed after econf, else AC_OUTPUT will fail + rm -r src/{libxml2,lib{,e}xslt} || die +} + +src_test() { + # bug #297070 + emake -j1 test +} + +src_install() { + default + docompress -x /usr/share/doc/${PF}/examples + + # prefix all binaries with 'meme-', in order + # to prevent collisions, bug 455010 + cd "${ED%/}"/usr/bin/ || die + local i + for i in *; do + if [[ $i != meme-* ]]; then + mv {,meme-}"${i}" || die + fi + done + + diropts -m ugo+rwxt -o root + keepdir /var/log/meme +} |