diff options
Diffstat (limited to 'sci-libs/bliss/files')
-rw-r--r-- | sci-libs/bliss/files/bliss-0.72-autotools.patch | 159 | ||||
-rw-r--r-- | sci-libs/bliss/files/bliss-0.72-fedora.patch | 648 |
2 files changed, 807 insertions, 0 deletions
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 index 000000000000..d30c51622e2e --- /dev/null +++ b/sci-libs/bliss/files/bliss-0.72-autotools.patch @@ -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 index 000000000000..e1f8b6685109 --- /dev/null +++ b/sci-libs/bliss/files/bliss-0.72-fedora.patch @@ -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(); + |