Move in from science overlay
authorThomas Kahle <tomka@gentoo.org>
Mon, 9 Mar 2015 12:51:43 +0000 (12:51 +0000)
committerThomas Kahle <tomka@gentoo.org>
Mon, 9 Mar 2015 12:51:43 +0000 (12:51 +0000)
Package-Manager: portage-2.2.14/cvs/Linux x86_64
Manifest-Sign-Key: 0x565C32BC

sci-libs/bliss/ChangeLog [new file with mode: 0644]
sci-libs/bliss/Manifest [new file with mode: 0644]
sci-libs/bliss/bliss-0.72.ebuild [new file with mode: 0644]
sci-libs/bliss/files/bliss-0.72-autotools.patch [new file with mode: 0644]
sci-libs/bliss/files/bliss-0.72-fedora.patch [new file with mode: 0644]
sci-libs/bliss/metadata.xml [new file with mode: 0644]

diff --git a/sci-libs/bliss/ChangeLog b/sci-libs/bliss/ChangeLog
new file mode 100644 (file)
index 0000000..7041e05
--- /dev/null
@@ -0,0 +1,14 @@
+
+  11 Jul 2013; Christoph Junghans <ottxor@gentoo.org>
+  files/bliss-0.72-autotools.patch:
+  install heads into a bliss subdir
+
+  28 Apr 2013; Christoph Junghans <ottxor@gentoo.org> bliss-0.72.ebuild:
+  remove la files, added static-libs use flag
+
+*bliss-0.72 (28 Apr 2013)
+
+  28 Apr 2013; Christoph Junghans <ottxor@gentoo.org> +bliss-0.72.ebuild,
+  +files/bliss-0.72-autotools.patch, +files/bliss-0.72-fedora.patch,
+  +metadata.xml:
+  initial commit
diff --git a/sci-libs/bliss/Manifest b/sci-libs/bliss/Manifest
new file mode 100644 (file)
index 0000000..23c7764
--- /dev/null
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA256
+
+AUX bliss-0.72-autotools.patch 4355 SHA256 5813b72e6879349c4c2009a81345c58ffc3a29c2b04e47d20e00085eb8166701 SHA512 50c5dc906e3aa83a628d9ca0cad6d5fcfd38d5bd422349dcba6c1af79f6561c5d9a9d2deb705a47dca40db4f7ee266a5a0f637c4eee020f0a143e60404f25de2 WHIRLPOOL ac579d6d9e8ceafd4f2d0bccc1500129923513c45391ccef7c4850c5b64e13f84de81736cabf0e2f7a5029bd515380024d294b9ba9b12bdc6e6d56feb77ddc21
+AUX bliss-0.72-fedora.patch 17789 SHA256 a8aaa3da7afef064c437cc309ab3e1c4bd31090b0aa8493f7f3d961db83fa3f5 SHA512 8313f07b1b50abd8cb45e4cd0a84d6f9971967ca2f46520f53c41db6fb4141c3d07ba4b913bffa0a7cad9b9fd8f63de843bb0836c71c52c08af233032f54e0b8 WHIRLPOOL 29b879afd0015d91a72256cc25bd71749607bca8176fb671ada06f24bbb5d09cf23bf08e6c6cba10b793c095181da63fe0c74ac8849ffeb96c55dd346f113ba2
+DIST bliss-0.72.zip 90970 SHA256 528d192b1e30722fc60f5f12c9d6c12b374d838198ae7f18fb41bedabf735ed3 SHA512 a09b3cea26e3ff5f5733f10bfaadaf6fb5a3f443e1cc306fad16af2f7b4cd97c90652315f911a324d6d71426a3d098cd5c7e5721f69c599fe2e0d6d34caa0ef5 WHIRLPOOL afbc41c04e843d383a2da8d5e26ec2882c847e8e5f1e71c05f884396fcc79eab764df628523336b88e0c6ef4fbf073a52870e2c68ded428002d9391894cb53d6
+EBUILD bliss-0.72.ebuild 989 SHA256 a6ea56b442f5e8c97ae45887a596e2e16f3b694d2272d5f3de0e303055172128 SHA512 e751cd76dd007e3a27575a3f4e8132592cb94c1cecf6d9863fec5c9f48da38248ac8146638dfa9ae030550f78a7c1584a10002286351ad43e567cd109e9e1f1e WHIRLPOOL 4d2c765641cbbf7a082cb59efabdec6aa0ba0be9bece8499a75716cb44ab422151e51071126a807af1a74681d32255eacaf51f539e69170952e3af5f6887acb9
+MISC ChangeLog 452 SHA256 c747befd39738afea11be1d379dabbdf68971f18961d60e68b2d2331cd11935b SHA512 60f78abc0283ad65a1ddabc78dcabf045a971374bce371a3b83a49b4f5cf5c4dd87a9a2e1c94fc7ac5f133cb40c92494a1ee2868a6ac893ed41117f1e0d173c3 WHIRLPOOL 56d9152e36cb8921563171a1bf67494154b56f9736c260feee20d2532f5e5642d5b198b0b09688b8a6f689ee48234193dcc5798f71bbe3dff987f96af3d923b1
+MISC metadata.xml 346 SHA256 12dc49f702d2db5c76ebcc6e6f98b23619bd0d1dde617290da271f3f833dd117 SHA512 2b5a1e98febf6014111d3a0e6ecadd46ee52db3df3012bc68c4d4d1bee108ff4bcdaea320fb3c7c5687e204e144783a06ed84afc242552781edba0bdf8c79c82 WHIRLPOOL 67783b9bfa4b372daf19a1c22bacaa6ea908e843a8b00ee337ed7367c2f7c26a1fd8365bfb76528e4a3b9ae48925359c5561fcdb779d0c59ab6c7304baa73c7f
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2
+
+iF4EAREIAAYFAlT9l70ACgkQid6yGVZcMrx9dgD/V4mlJjG1plNCYSKgJViZkJCF
+QOHqT/Iapib41eZC30sBAIaSHzu8RYexrp85P8ibYwa+We0Rto9VKwuEz1eTcbge
+=CYay
+-----END PGP SIGNATURE-----
diff --git a/sci-libs/bliss/bliss-0.72.ebuild b/sci-libs/bliss/bliss-0.72.ebuild
new file mode 100644 (file)
index 0000000..5c2d35c
--- /dev/null
@@ -0,0 +1,43 @@
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/sci-libs/bliss/bliss-0.72.ebuild,v 1.1 2015/03/09 12:51:38 tomka Exp $
+
+EAPI=5
+
+inherit autotools-utils
+
+SRC_URI="http://www.tcs.hut.fi/Software/${PN}/${P}.zip"
+DESCRIPTION="A Tool for Computing Automorphism Groups and Canonical Labelings of Graphs"
+HOMEPAGE="http://www.tcs.hut.fi/Software/bliss/index.shtml"
+
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="doc gmp static-libs"
+
+RDEPEND="gmp? ( dev-libs/gmp )"
+
+DEPEND="${RDEPEND}
+       doc? ( app-doc/doxygen )"
+
+AUTOTOOLS_AUTORECONF=1
+AUTOTOOLS_PRUNE_LIBTOOL_FILES="all" #comes with pkg-config file
+
+PATCHES=(
+       "${FILESDIR}/${P}-fedora.patch"
+       "${FILESDIR}/${P}-autotools.patch"
+)
+
+src_configure() {
+       local myeconfargs=( $(use_with gmp) )
+       autotools-utils_src_configure
+}
+
+src_install() {
+       autotools-utils_src_install
+       if use doc; then
+               cd "${BUILD_DIR}"
+               emake html
+               dohtml -r html
+       fi
+}
diff --git a/sci-libs/bliss/files/bliss-0.72-autotools.patch b/sci-libs/bliss/files/bliss-0.72-autotools.patch
new file mode 100644 (file)
index 0000000..d30c516
--- /dev/null
@@ -0,0 +1,159 @@
+Replace simple Makefile by autotools
+- allow shared library
+- parallel build
+- added pkg-config support
+
+Author: Christoph Junghans <ottxor@gentoo.org>
+
+diff -Naur bliss-0.72-fedora/config/.dummy bliss-0.72/config/.dummy
+--- bliss-0.72-fedora/config/.dummy    1969-12-31 17:00:00.000000000 -0700
++++ bliss-0.72/config/.dummy   2013-04-28 14:43:06.143760368 -0600
+@@ -0,0 +1 @@
++Dummy file to make patch create config dir, which is needed for autotools
+diff -Naur bliss-0.72-fedora/configure.ac bliss-0.72/configure.ac
+--- bliss-0.72-fedora/configure.ac     1969-12-31 17:00:00.000000000 -0700
++++ bliss-0.72/configure.ac    2013-04-28 14:40:42.283242722 -0600
+@@ -0,0 +1,31 @@
++AC_PREREQ([2.65])
++AC_INIT([bliss], [0.72], [Tommi.Junttil@kk.fi])
++
++AC_CONFIG_AUX_DIR(config)
++AC_CONFIG_MACRO_DIR(config)
++
++AM_INIT_AUTOMAKE([1.8 foreign])
++
++SHARED_VERSION_INFO="1:0:0"
++AC_SUBST(SHARED_VERSION_INFO)
++
++# Checks for programs.
++AC_PROG_CXX
++
++LT_INIT
++# Checks for libraries.
++AC_ARG_WITH([gmp],
++  [AS_HELP_STRING([--with-gmp], [enable support for GNU Multiple Precision Arithmetic Library @<:@default=check@:>@])],
++  [], [with_readline=no])
++AS_IF([test "x$with_readline" != xno],
++  [AC_CHECK_HEADERS([gmp.h],,AC_MSG_ERROR([Cannot find gmp.h header]))
++    AC_CHECK_LIB([gmp],_init,,AC_MSG_ERROR([Cannot find gmp library]))
++    AC_SUBST([GMP],[-lgmp])
++    [CPPFLAGS="$CPPFLAGS -DBLISS_USE_GMP"]])
++
++AC_CHECK_PROG(DOXYGEN,doxygen,doxygen,no)
++AM_CONDITIONAL(HAVE_DOXYGEN,[test .$DOXYGEN != .no])
++
++AC_CONFIG_FILES([Makefile])
++AC_CONFIG_FILES([bliss.pc])
++AC_OUTPUT
+diff -Naur bliss-0.72-fedora/bliss.pc.in bliss-0.72/bliss.pc.in
+--- bliss-0.72-fedora/bliss.pc.in      1969-12-31 17:00:00.000000000 -0700
++++ bliss-0.72/bliss.pc.in     2013-04-28 14:40:54.223285686 -0600
+@@ -0,0 +1,13 @@
++prefix=@prefix@
++exec_prefix=@exec_prefix@
++libdir=@libdir@
++includedir=@includedir@
++
++Name: bliss
++Description: Library for Computing Automorphism Groups and Canonical Labelings of Graphs 
++URL: http://www.tcs.hut.fi/Software/bliss/index.shtml
++Version: @VERSION@
++Requires: 
++Libs: -L${libdir} -lbliss @GMP@
++Libs.private: -lm
++Cflags: -I${includedir}
+diff -Naur bliss-0.72-fedora/Makefile bliss-0.72/Makefile
+--- bliss-0.72-fedora/Makefile 2013-04-28 14:40:10.543128514 -0600
++++ bliss-0.72/Makefile        1969-12-31 17:00:00.000000000 -0700
+@@ -1,57 +0,0 @@
+-CFLAGS = -I.
+-CFLAGS += -g
+-#CFLAGS += -pg
+-CFLAGS += -Wall
+-CFLAGS += --pedantic
+-CFLAGS += -O9
+-#CFLAGS += -DBLISS_DEBUG
+-CFLAGS += -fPIC
+-
+-SRCS = defs.cc graph.cc partition.cc orbit.cc uintseqhash.cc heap.cc
+-SRCS += timer.cc utils.cc bliss_C.cc
+-
+-OBJS = $(addsuffix .o, $(basename $(SRCS)))
+-
+-GMPOBJS = $(addsuffix g,  $(OBJS))
+-
+-LIB =
+-#LIB += /usr/lib/ccmalloc.o -ldl
+-
+-CC = g++
+-RANLIB = ranlib
+-AR = ar
+-BLISSLIB = libbliss.a
+-
+-gmp:  LIB += -lgmp
+-gmp:  CFLAGS += -DBLISS_USE_GMP
+-
+-normal:       bliss
+-gmp:  bliss_gmp
+-
+-
+-all:: lib bliss
+-
+-%.o %.og:     %.cc
+-      $(CC) $(CFLAGS) -c -o $@ $<
+-
+-lib: $(OBJS)
+-      rm -f $(BLISSLIB)
+-      $(AR) cr $(BLISSLIB) $(OBJS)
+-      $(RANLIB) $(BLISSLIB)
+-
+-lib_gmp: $(GMPOBJS)
+-      rm -f $(BLISSLIB)
+-      $(AR) cr $(BLISSLIB) $(GMPOBJS)
+-      $(RANLIB) $(BLISSLIB)
+-
+-bliss: bliss.o lib $(OBJS)
+-      $(CC) $(CFLAGS) -o bliss bliss.o $(OBJS) $(LIB)
+-
+-bliss_gmp: bliss.og lib_gmp $(GMPOBJS)
+-      $(CC) $(CFLAGS) -o bliss bliss.og $(GMPOBJS) $(LIB)
+-
+-
+-clean:
+-      rm -f bliss $(BLISSLIB) $(OBJS) bliss.o $(GMPOBJS) bliss.og
+-
+-# DO NOT DELETE
+diff -Naur bliss-0.72-fedora/Makefile.am bliss-0.72/Makefile.am
+--- bliss-0.72-fedora/Makefile.am      1969-12-31 17:00:00.000000000 -0700
++++ bliss-0.72/Makefile.am     2013-04-28 14:47:26.944698789 -0600
+@@ -0,0 +1,30 @@
++ACLOCAL_AMFLAGS = -I config
++
++lib_LTLIBRARIES = libbliss.la
++
++libbliss_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@
++libbliss_la_SOURCES = \
++      defs.cc graph.cc partition.cc orbit.cc uintseqhash.cc heap.cc \
++      timer.cc utils.cc bliss_C.cc
++
++pkginclude_HEADERS = \
++      bignum.hh bliss_C.h defs.hh graph.hh heap.hh kqueue.hh kstack.hh \
++      orbit.hh partition.hh timer.hh uintseqhash.hh utils.hh
++
++bin_PROGRAMS = bliss
++bliss_SOURCES = bliss.cc
++bliss_LDADD = libbliss.la
++dist_man1_MANS = bliss.1
++
++pkgconfigdir = $(libdir)/pkgconfig
++pkgconfig_DATA = bliss.pc
++
++html-local: Doxyfile
++if HAVE_DOXYGEN
++      $(DOXYGEN) $(srcdir)/Doxyfile
++else
++      @echo "doxygen was not found, please re-run configure"
++endif
++
++clean-local:
++      -rm -rf html
diff --git a/sci-libs/bliss/files/bliss-0.72-fedora.patch b/sci-libs/bliss/files/bliss-0.72-fedora.patch
new file mode 100644 (file)
index 0000000..e1f8b66
--- /dev/null
@@ -0,0 +1,648 @@
+Pulled on 28-04-13 from
+http://pkgs.fedoraproject.org/cgit/bliss.git/tree/
+
+- Man page written by Jerry James using text borrowed from the sources.
+  The man page therefore has the same copyright and license as the sources.
+- Don't call exit() in library code.
+- Patch from Thomas Rehn, also sent upstream.  Fix one bug and add one
+   performance enhancement.
+
+diff -Naur bliss-0.72.orig/bliss.1 bliss-0.72/bliss.1
+--- bliss-0.72.orig/bliss.1    1969-12-31 17:00:00.000000000 -0700
++++ bliss-0.72/bliss.1 2013-04-28 14:35:37.000000000 -0600
+@@ -0,0 +1,55 @@
++.TH "BLISS" "1" "@VERSION@" "Tommi Junttila & Petteri Kaski" "User Commands"
++.SH "NAME"
++bliss \- Compute automorphism groups and canonical labelings of graphs
++.SH "SYNOPSIS"
++.B bliss
++[\fIOPTIONS\fR] [<\fIGRAPH FILE\fR>]
++.SH "DESCRIPTION"
++.PP
++Bliss is an open source tool for computing automorphism groups and
++canonical forms of graphs.  The graphs are specified in DIMACS format.
++.TP
++\fB\-directed\fR
++the input graph is directed
++.TP
++\fB\-can\fR
++compute canonical form
++.TP
++\fB\-ocan\fR=\fIf\fR
++compute canonical form and output it in file \fIf\fR
++.TP
++\fB\-v\fR=\fIN\fR
++set verbosity level to N [N >= 0, default: 1]
++.TP
++\fB\-sh\fR=\fIX\fR
++select splitting heuristics, where X is:
++.TS
++tab(;);
++R L.
++f;first non-singleton cell
++fl;first largest non-singleton cell
++fs;first smallest non-singleton cell
++fm;first maximally non-trivially connected non-singleton cell
++flm;first largest maximally non-trivially connected
++;non-singleton cell
++fsm;first smallest maximally non-trivially connected
++;non-singleton cell (default)
++.TE
++.TP
++\fB\-fr\fR=\fIX\fR
++use failure recording? [X=y/n, default: y]
++.TP
++\fB\-cr\fR=\fIX\fR
++use component recursion? [X=y/n, default: y]
++.TP
++\fB\-version\fR
++print the version number and exit
++.TP
++\fB\-help\fR
++print this help and exit
++.SH "AUTHORS"
++Bliss was written by Tommi Junttila <Tommi.Junttila@tkk.fi> and
++Petteri Kaski <petteri.kaski@aalto.fi>.
++.PP
++This man page was written by Jerry James <loganjerry@gmail.com>.
++It is distributed under the same terms as bliss.
+diff -Naur bliss-0.72.orig/bliss.cc bliss-0.72/bliss.cc
+--- bliss-0.72.orig/bliss.cc   2013-04-28 14:35:20.582085167 -0600
++++ bliss-0.72/bliss.cc        2013-04-28 14:36:28.792330603 -0600
+@@ -276,13 +276,16 @@
+   if(opt_canonize == false)
+     {
+       /* No canonical labeling, only automorphism group */
+-      g->find_automorphisms(stats, &report_aut, stdout);
++      if (!g->find_automorphisms(stats, &report_aut, stdout))
++      exit(1);
+     }
+   else
+     {
+       /* Canonical labeling and automorphism group */
+       const unsigned int* cl = g->canonical_form(stats, &report_aut, stdout);
+ 
++      if (!cl)
++      exit(1);
+       fprintf(stdout, "Canonical labeling: ");
+       bliss::print_permutation(stdout, g->get_nof_vertices(), cl, 1);
+       fprintf(stdout, "\n");
+@@ -290,6 +293,8 @@
+       if(opt_output_can_file)
+       {
+         bliss::AbstractGraph* cf = g->permute(cl);
++        if (!cf)
++          exit(1);
+         FILE* const fp = fopen(opt_output_can_file, "w");
+         if(!fp)
+           _fatal("Cannot open '%s' for outputting the canonical form, aborting", opt_output_can_file);
+diff -Naur bliss-0.72.orig/bliss_C.cc bliss-0.72/bliss_C.cc
+--- bliss-0.72.orig/bliss_C.cc 2013-04-28 14:35:20.582085167 -0600
++++ bliss-0.72/bliss_C.cc      2013-04-28 14:36:28.792330603 -0600
+@@ -131,7 +131,7 @@
+ }
+ 
+ extern "C"
+-void
++int
+ bliss_find_automorphisms(BlissGraph *graph,
+                        void (*hook)(void *user_param,
+                                     unsigned int n,
+@@ -142,7 +142,8 @@
+   bliss::Stats s;
+   assert(graph);
+   assert(graph->g);
+-  graph->g->find_automorphisms(s, hook, hook_user_param);
++  if (!graph->g->find_automorphisms(s, hook, hook_user_param))
++    return 0;
+ 
+   if(stats)
+     {
+@@ -154,6 +155,7 @@
+       stats->nof_generators = s.get_nof_generators();
+       stats->max_level = s.get_max_level();
+     }
++  return 1;
+ }
+ 
+ 
+@@ -173,7 +175,7 @@
+   
+   canonical_labeling = graph->g->canonical_form(s, hook, hook_user_param);
+ 
+-  if(stats)
++  if(canonical_labeling && stats)
+     {
+       stats->group_size_approx = s.get_group_size_approx();
+       stats->nof_nodes = s.get_nof_nodes();
+diff -Naur bliss-0.72.orig/bliss_C.h bliss-0.72/bliss_C.h
+--- bliss-0.72.orig/bliss_C.h  2013-04-28 14:35:20.582085167 -0600
++++ bliss-0.72/bliss_C.h       2013-04-28 14:36:28.792330603 -0600
+@@ -156,6 +156,7 @@
+  * The argument \a perm should be an array of
+  * N=bliss::bliss_get_nof_vertices(\a graph) elements describing
+  * a bijection on {0,...,N-1}.
++ * Returns NULL if insufficient memory or internal error.
+  */
+ BlissGraph *bliss_permute(BlissGraph *graph, const unsigned int *perm);
+ 
+@@ -174,8 +175,9 @@
+  * if you want to use the automorphism later, you have to take a copy of it.
+  * Do not call bliss_* functions in the hook.
+  * If \a stats is non-null, then some search statistics are copied there.
++ * \return nonzero if successful, zero if insufficient memory or internal error
+  */
+-void
++int
+ bliss_find_automorphisms(BlissGraph *graph,
+                        void (*hook)(void *user_param,
+                                     unsigned int N,
+@@ -194,6 +196,7 @@
+  * then bliss_permute() with the returned canonical labeling.
+  * Note that the computed canonical version may depend on the applied version
+  * of bliss.
++ * Returns NULL if insufficient memory or internal error.
+  */
+ const unsigned int *
+ bliss_find_canonical_labeling(BlissGraph *graph,
+diff -Naur bliss-0.72.orig/defs.cc bliss-0.72/defs.cc
+--- bliss-0.72.orig/defs.cc    2013-04-28 14:35:20.582085167 -0600
++++ bliss-0.72/defs.cc 2013-04-28 14:36:28.792330603 -0600
+@@ -33,7 +33,6 @@
+   vfprintf(stderr, fmt, ap);
+   fprintf(stderr, "\nAborting!\n");
+   va_end(ap);
+-  exit(1);
+ }
+ 
+ }
+diff -Naur bliss-0.72.orig/graph.cc bliss-0.72/graph.cc
+--- bliss-0.72.orig/graph.cc   2013-04-28 14:35:20.582085167 -0600
++++ bliss-0.72/graph.cc        2013-04-28 14:37:16.162501050 -0600
+@@ -34,7 +34,10 @@
+ namespace bliss {
+ 
+ #define _INTERNAL_ERROR() fatal_error("%s:%d: internal error",__FILE__,__LINE__)
+-#define _OUT_OF_MEMORY() fatal_error("%s:%d: out of memory",__FILE__,__LINE__)
++#define _OUT_OF_MEMORY(label) do {                            \
++    fatal_error("%s:%d: out of memory",__FILE__,__LINE__);    \
++    goto label;                                                       \
++  } while (0)
+ 
+ /*-------------------------------------------------------------------------
+  *
+@@ -279,20 +282,6 @@
+     *perm = i;
+ }
+ 
+-bool
+-AbstractGraph::is_automorphism(unsigned int* const perm)
+-{
+-  _INTERNAL_ERROR();
+-  return false;
+-}
+-
+-bool
+-AbstractGraph::is_automorphism(const std::vector<unsigned int>& perm) const
+-{
+-  _INTERNAL_ERROR();
+-  return false;
+-}
+-
+ 
+ 
+ 
+@@ -608,17 +597,7 @@
+ };
+ 
+ 
+-
+-
+-typedef struct {
+-  unsigned int splitting_element;
+-  unsigned int certificate_index;
+-  unsigned int subcertificate_length;
+-  UintSeqHash eqref_hash;
+-} PathInfo;
+-
+-
+-void
++bool
+ AbstractGraph::search(const bool canonical, Stats& stats)
+ {
+   const unsigned int N = get_nof_vertices();
+@@ -658,7 +637,7 @@
+   if(N == 0)
+     {
+       /* Nothing to do, return... */
+-      return;
++      return true;
+     }
+ 
+   /* Initialize the partition ... */
+@@ -696,10 +675,10 @@
+    */
+   if(first_path_labeling) free(first_path_labeling);
+   first_path_labeling = (unsigned int*)calloc(N, sizeof(unsigned int));
+-  if(!first_path_labeling) _OUT_OF_MEMORY();
++  if(!first_path_labeling) _OUT_OF_MEMORY(oom1);
+   if(best_path_labeling) free(best_path_labeling);
+   best_path_labeling = (unsigned int*)calloc(N, sizeof(unsigned int));
+-  if(!best_path_labeling) _OUT_OF_MEMORY();
++  if(!best_path_labeling) _OUT_OF_MEMORY(oom2);
+ 
+   /*
+    * Is the initial partition discrete?
+@@ -710,7 +689,7 @@
+       update_labeling(best_path_labeling);
+       /* Update statistics */
+       stats.nof_leaf_nodes = 1;
+-      return;
++      return true;
+     }
+ 
+   /*
+@@ -718,20 +697,39 @@
+    */
+   if(first_path_labeling_inv) free(first_path_labeling_inv);
+   first_path_labeling_inv = (unsigned int*)calloc(N, sizeof(unsigned int));
+-  if(!first_path_labeling_inv) _OUT_OF_MEMORY();
++  if(!first_path_labeling_inv) _OUT_OF_MEMORY(oom3);
+   if(best_path_labeling_inv) free(best_path_labeling_inv);
+   best_path_labeling_inv = (unsigned int*)calloc(N, sizeof(unsigned int));
+-  if(!best_path_labeling_inv) _OUT_OF_MEMORY();
++  if(!best_path_labeling_inv) _OUT_OF_MEMORY(oom4);
+ 
+   /*
+    * Allocate space for the automorphisms
+    */
+   if(first_path_automorphism) free(first_path_automorphism);
+   first_path_automorphism = (unsigned int*)malloc(N * sizeof(unsigned int));
+-  if(!first_path_automorphism) _OUT_OF_MEMORY();
++  if(!first_path_automorphism) _OUT_OF_MEMORY(oom5);
+   if(best_path_automorphism) free(best_path_automorphism);
+   best_path_automorphism = (unsigned int*)malloc(N * sizeof(unsigned int));
+-  if(!best_path_automorphism) _OUT_OF_MEMORY();
++  if(!best_path_automorphism) {
++    _OUT_OF_MEMORY(oom6);
++  oom6:
++    free(first_path_automorphism);
++    first_path_automorphism = NULL;
++  oom5:
++    free(best_path_labeling_inv);
++    best_path_labeling_inv = NULL;
++  oom4:
++    free(first_path_labeling_inv);
++    first_path_labeling_inv = NULL;
++  oom3:
++    free(best_path_labeling);
++    best_path_labeling = NULL;
++  oom2:
++    free(first_path_labeling);
++    first_path_labeling = NULL;
++  oom1:
++    return false;
++  }
+ 
+   /*
+    * Initialize orbit information so that all vertices are in their own orbits
+@@ -745,7 +743,6 @@
+   initialize_certificate();
+ 
+   std::vector<TreeNode> search_stack;
+-  std::vector<PathInfo> first_path_info;
+   std::vector<PathInfo> best_path_info;
+ 
+   search_stack.clear();
+@@ -974,7 +971,6 @@
+        */
+       {
+       unsigned int  next_split_element = UINT_MAX;
+-      unsigned int* next_split_element_pos = 0;
+       unsigned int* ep = p.elements + cell->first;
+       if(current_node.fp_on)
+         {
+@@ -985,7 +981,6 @@
+                *ep < next_split_element and
+                first_path_orbits.is_minimal_representative(*ep)) {
+               next_split_element = *ep;
+-              next_split_element_pos = ep;
+             }
+           }
+         }
+@@ -1001,7 +996,6 @@
+                 current_node.long_prune_redundant.find(*ep) ==
+                 current_node.long_prune_redundant.end())) {
+               next_split_element = *ep;
+-              next_split_element_pos = ep;
+             }
+           }
+         }
+@@ -1015,7 +1009,6 @@
+                 current_node.long_prune_redundant.find(*ep) ==
+                 current_node.long_prune_redundant.end())) {
+               next_split_element = *ep;
+-              next_split_element_pos = ep;
+             }
+           }
+         }
+@@ -1203,8 +1196,10 @@
+ 
+ #if defined(BLISS_VERIFY_EQUITABLEDNESS)
+       /* The new partition should be equitable */
+-      if(!is_equitable())
++      if(!is_equitable()) {
+       fatal_error("consistency check failed - partition after refinement is not equitable");
++      return false;
++      }
+ #endif
+ 
+       /*
+@@ -1366,6 +1361,7 @@
+                         goto handle_first_path_automorphism;
+                       /* Should never get here because of CR:FP */
+                       _INTERNAL_ERROR();
++                      return false;
+                     }
+                 }
+ 
+@@ -1598,8 +1594,10 @@
+       
+ #if defined(BLISS_VERIFY_AUTOMORPHISMS)
+       /* Verify that it really is an automorphism */
+-      if(!is_automorphism(best_path_automorphism))
++      if(!is_automorphism(best_path_automorphism)) {
+         fatal_error("Best path automorhism validation check failed");
++        return false;
++      }
+ #endif
+       
+       unsigned int gca_level_with_first = 0;
+@@ -1666,6 +1664,7 @@
+ 
+ 
+       _INTERNAL_ERROR();
++      return false;
+ 
+       
+     handle_first_path_automorphism:
+@@ -1701,8 +1700,10 @@
+ 
+ #if defined(BLISS_VERIFY_AUTOMORPHISMS)
+       /* Verify that it really is an automorphism */
+-      if(!is_automorphism(first_path_automorphism))
++      if(!is_automorphism(first_path_automorphism)) {
+       fatal_error("First path automorphism validation check failed");
++      return false;
++      }
+ #endif
+       
+       if(opt_use_long_prune)
+@@ -1749,12 +1750,13 @@
+   /* Release component recursion data in partition */
+   if(opt_use_comprec)
+     p.cr_free();
++  return true;
+ }
+ 
+ 
+ 
+ 
+-void
++bool
+ AbstractGraph::find_automorphisms(Stats& stats,
+                                 void (*hook)(void *user_param,
+                                              unsigned int n,
+@@ -1764,7 +1766,8 @@
+   report_hook = hook;
+   report_user_param = user_param;
+ 
+-  search(false, stats);
++  if (!search(false, stats))
++    return false;
+ 
+   if(first_path_labeling)
+     {
+@@ -1776,6 +1779,7 @@
+       free(best_path_labeling);
+       best_path_labeling = 0;
+     }
++  return true;
+ }
+ 
+ 
+@@ -1790,7 +1794,8 @@
+   report_hook = hook;
+   report_user_param = user_param;
+ 
+-  search(true, stats);
++  if (!search(true, stats))
++    return NULL;
+ 
+   return best_path_labeling;
+ }
+@@ -3480,15 +3485,17 @@
+  * Check whether perm is an automorphism.
+  * Slow, mainly for debugging and validation purposes.
+  */
+-bool
++int
+ Digraph::is_automorphism(unsigned int* const perm)
+ {
+   std::set<unsigned int, std::less<unsigned int> > edges1;
+   std::set<unsigned int, std::less<unsigned int> > edges2;
+ 
+ #if defined(BLISS_CONSISTENCY_CHECKS)
+-  if(!is_permutation(get_nof_vertices(), perm))
++  if(!is_permutation(get_nof_vertices(), perm)) {
+     _INTERNAL_ERROR();
++    return -1;
++  }
+ #endif
+ 
+   for(unsigned int i = 0; i < get_nof_vertices(); i++)
+@@ -3507,7 +3514,7 @@
+         ei++)
+       edges2.insert(*ei);
+       if(!(edges1 == edges2))
+-      return false;
++      return 0;
+ 
+       edges1.clear();
+       for(std::vector<unsigned int>::iterator ei = v1.edges_out.begin();
+@@ -3520,10 +3527,10 @@
+         ei++)
+       edges2.insert(*ei);
+       if(!(edges1 == edges2))
+-      return false;
++      return 0;
+     }
+ 
+-  return true;
++  return 1;
+ }
+ 
+ bool
+@@ -4330,8 +4337,10 @@
+ Graph::permute(const unsigned int* perm) const
+ {
+ #if defined(BLISS_CONSISTENCY_CHECKS)
+-  if(!is_permutation(get_nof_vertices(), perm))
++  if(!is_permutation(get_nof_vertices(), perm)) {
+     _INTERNAL_ERROR();
++    return NULL;
++  }
+ #endif
+ 
+   Graph* const g = new Graph(get_nof_vertices());
+@@ -5270,15 +5279,17 @@
+  *
+  *-------------------------------------------------------------------------*/
+ 
+-bool
++int
+ Graph::is_automorphism(unsigned int* const perm)
+ {
+   std::set<unsigned int, std::less<unsigned int> > edges1;
+   std::set<unsigned int, std::less<unsigned int> > edges2;
+ 
+ #if defined(BLISS_CONSISTENCY_CHECKS)
+-  if(!is_permutation(get_nof_vertices(), perm))
++  if(!is_permutation(get_nof_vertices(), perm)) {
+     _INTERNAL_ERROR();
++    return -1;
++  }
+ #endif
+ 
+   for(unsigned int i = 0; i < get_nof_vertices(); i++)
+@@ -5298,10 +5309,10 @@
+       edges2.insert(*ei);
+ 
+       if(!(edges1 == edges2))
+-      return false;
++      return 0;
+     }
+ 
+-  return true;
++  return 1;
+ }
+ 
+ 
+@@ -5444,7 +5455,7 @@
+   component.clear();
+   component_elements = 0;
+   sh_return = 0;
+-  unsigned int sh_first  = 0;
++  unsigned int sh_first  = 1 << 31;
+   unsigned int sh_size   = 0;
+   unsigned int sh_nuconn = 0;
+ 
+diff -Naur bliss-0.72.orig/graph.hh bliss-0.72/graph.hh
+--- bliss-0.72.orig/graph.hh   2013-04-28 14:35:20.582085167 -0600
++++ bliss-0.72/graph.hh        2013-04-28 14:37:16.162501050 -0600
+@@ -109,9 +109,12 @@
+   unsigned long int get_max_level() const {return max_level;}
+ };
+ 
+-
+-
+-
++typedef struct {
++  unsigned int splitting_element;
++  unsigned int certificate_index;
++  unsigned int subcertificate_length;
++  UintSeqHash eqref_hash;
++} PathInfo;
+ 
+ 
+ /**
+@@ -270,7 +273,7 @@
+   void reset_permutation(unsigned int *perm);
+ 
+   /* Mainly for debugging purposes */
+-  virtual bool is_automorphism(unsigned int* const perm);
++  virtual int is_automorphism(unsigned int* const perm) = 0;
+ 
+   std::vector<unsigned int> certificate_current_path;
+   std::vector<unsigned int> certificate_first_path;
+@@ -284,7 +287,11 @@
+   virtual Partition::Cell* find_next_cell_to_be_splitted(Partition::Cell *cell) = 0;
+ 
+ 
+-  void search(const bool canonical, Stats &stats);
++  /**
++   * \return true if successful, false if insufficient memory to complete or
++   * other internal error
++   */
++  bool search(const bool canonical, Stats &stats);
+ 
+ 
+   void (*report_hook)(void *user_param,
+@@ -351,7 +358,7 @@
+    */
+   unsigned int cr_component_elements;
+ 
+-
++  std::vector<PathInfo> first_path_info;
+ 
+ 
+ public:
+@@ -362,7 +369,7 @@
+    * Check whether \a perm is an automorphism of this graph.
+    * Unoptimized, mainly for debugging purposes.
+    */
+-  virtual bool is_automorphism(const std::vector<unsigned int>& perm) const;
++  virtual bool is_automorphism(const std::vector<unsigned int>& perm) const = 0;
+ 
+ 
+ 
+@@ -427,8 +434,10 @@
+    * if you want to use the automorphism later, you have to take a copy of it.
+    * Do not call any member functions in the hook.
+    * The search statistics are copied in \a stats.
++   * \return true if successful, false if insufficient memory to search or
++   * other internal error.
+    */
+-  void find_automorphisms(Stats& stats,
++  bool find_automorphisms(Stats& stats,
+                         void (*hook)(void* user_param,
+                                      unsigned int n,
+                                      const unsigned int* aut),
+@@ -448,6 +457,8 @@
+    * Note that the computed canonical version may depend on the applied version
+    * of bliss as well as on some other options (for instance, the splitting
+    * heuristic selected with bliss::Graph::set_splitting_heuristic()).
++   * This function returns NULL if there is insufficient memory, or another
++   * internal error occurs.
+    */
+   const unsigned int* canonical_form(Stats& stats,
+                                    void (*hook)(void* user_param,
+@@ -500,6 +511,10 @@
+     opt_use_long_prune = active;
+   }
+ 
++  /**
++   * Get an information vector about the first path.
++   */
++  std::vector<PathInfo> get_first_path_info() { return first_path_info; }
+ };
+ 
+ 
+@@ -615,7 +630,7 @@
+ 
+   void initialize_certificate();
+   
+-  bool is_automorphism(unsigned int* const perm);
++  int is_automorphism(unsigned int* const perm);
+ 
+ 
+   bool nucr_find_first_component(const unsigned int level);
+@@ -856,7 +871,7 @@
+ 
+   void initialize_certificate();
+ 
+-  bool is_automorphism(unsigned int* const perm);
++  int is_automorphism(unsigned int* const perm);
+ 
+   void sort_edges();
+ 
diff --git a/sci-libs/bliss/metadata.xml b/sci-libs/bliss/metadata.xml
new file mode 100644 (file)
index 0000000..a86587f
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+       <herd>sci</herd>
+       <maintainer>
+               <email>ottxor@gentoo.org</email>
+               <name>Christoph Junghans</name>
+       </maintainer>
+       <maintainer>
+               <email>tomka@gentoo.org</email>
+               <name>Thomas Kahle</name>
+       </maintainer>
+</pkgmetadata>