Compare commits
No commits in common. "rawhide" and "f17" have entirely different histories.
6 changed files with 626 additions and 223 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -1,2 +1 @@
|
|||
/bliss-*.zip
|
||||
/*.tar.gz
|
||||
/bliss-0.72.zip
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
# bliss
|
||||
|
||||
Bliss is an open source tool for computing automorphism groups and
|
||||
canonical forms of graphs. It has both a command line user interface as
|
||||
well as C++ and C programming language APIs.
|
||||
511
bliss-error.patch
Normal file
511
bliss-error.patch
Normal file
|
|
@ -0,0 +1,511 @@
|
|||
--- ./graph.cc.orig 2011-05-12 06:29:46.000000000 -0600
|
||||
+++ ./graph.cc 2011-10-28 21:22:57.464203395 -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;
|
||||
-}
|
||||
-
|
||||
|
||||
|
||||
|
||||
@@ -618,7 +607,7 @@
|
||||
} PathInfo;
|
||||
|
||||
|
||||
-void
|
||||
+bool
|
||||
AbstractGraph::search(const bool canonical, Stats& stats)
|
||||
{
|
||||
const unsigned int N = get_nof_vertices();
|
||||
@@ -658,7 +647,7 @@
|
||||
if(N == 0)
|
||||
{
|
||||
/* Nothing to do, return... */
|
||||
- return;
|
||||
+ return true;
|
||||
}
|
||||
|
||||
/* Initialize the partition ... */
|
||||
@@ -696,10 +685,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 +699,7 @@
|
||||
update_labeling(best_path_labeling);
|
||||
/* Update statistics */
|
||||
stats.nof_leaf_nodes = 1;
|
||||
- return;
|
||||
+ return true;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -718,20 +707,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
|
||||
@@ -974,7 +982,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 +992,6 @@
|
||||
*ep < next_split_element and
|
||||
first_path_orbits.is_minimal_representative(*ep)) {
|
||||
next_split_element = *ep;
|
||||
- next_split_element_pos = ep;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1001,7 +1007,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 +1020,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 +1207,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 +1372,7 @@
|
||||
goto handle_first_path_automorphism;
|
||||
/* Should never get here because of CR:FP */
|
||||
_INTERNAL_ERROR();
|
||||
+ return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1598,8 +1605,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 +1675,7 @@
|
||||
|
||||
|
||||
_INTERNAL_ERROR();
|
||||
+ return false;
|
||||
|
||||
|
||||
handle_first_path_automorphism:
|
||||
@@ -1701,8 +1711,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 +1761,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 +1777,8 @@
|
||||
report_hook = hook;
|
||||
report_user_param = user_param;
|
||||
|
||||
- search(false, stats);
|
||||
+ if (!search(false, stats))
|
||||
+ return false;
|
||||
|
||||
if(first_path_labeling)
|
||||
{
|
||||
@@ -1776,6 +1790,7 @@
|
||||
free(best_path_labeling);
|
||||
best_path_labeling = 0;
|
||||
}
|
||||
+ return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -1790,7 +1805,8 @@
|
||||
report_hook = hook;
|
||||
report_user_param = user_param;
|
||||
|
||||
- search(true, stats);
|
||||
+ if (!search(true, stats))
|
||||
+ return NULL;
|
||||
|
||||
return best_path_labeling;
|
||||
}
|
||||
@@ -3480,15 +3496,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 +3525,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 +3538,10 @@
|
||||
ei++)
|
||||
edges2.insert(*ei);
|
||||
if(!(edges1 == edges2))
|
||||
- return false;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
- return true;
|
||||
+ return 1;
|
||||
}
|
||||
|
||||
bool
|
||||
@@ -4330,8 +4348,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 +5290,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 +5320,10 @@
|
||||
edges2.insert(*ei);
|
||||
|
||||
if(!(edges1 == edges2))
|
||||
- return false;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
- return true;
|
||||
+ return 1;
|
||||
}
|
||||
|
||||
|
||||
--- ./bliss_C.cc.orig 2011-05-12 06:29:46.000000000 -0600
|
||||
+++ ./bliss_C.cc 2011-10-28 21:22:39.428577545 -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();
|
||||
--- ./bliss.cc.orig 2011-05-12 06:29:46.000000000 -0600
|
||||
+++ ./bliss.cc 2011-10-28 21:22:39.429577524 -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);
|
||||
--- ./defs.cc.orig 2011-05-12 06:29:46.000000000 -0600
|
||||
+++ ./defs.cc 2011-10-28 21:22:39.429577524 -0600
|
||||
@@ -33,7 +33,6 @@
|
||||
vfprintf(stderr, fmt, ap);
|
||||
fprintf(stderr, "\nAborting!\n");
|
||||
va_end(ap);
|
||||
- exit(1);
|
||||
}
|
||||
|
||||
}
|
||||
--- ./bliss_C.h.orig 2011-05-12 06:29:46.000000000 -0600
|
||||
+++ ./bliss_C.h 2011-10-28 21:22:39.430577503 -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,
|
||||
--- ./graph.hh.orig 2011-05-12 06:29:46.000000000 -0600
|
||||
+++ ./graph.hh 2011-10-28 21:27:16.463811606 -0600
|
||||
@@ -270,7 +270,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 +284,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,
|
||||
@@ -362,7 +366,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 +431,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 +454,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,
|
||||
@@ -615,7 +623,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 +864,7 @@
|
||||
|
||||
void initialize_certificate();
|
||||
|
||||
- bool is_automorphism(unsigned int* const perm);
|
||||
+ int is_automorphism(unsigned int* const perm);
|
||||
|
||||
void sort_edges();
|
||||
|
||||
|
|
@ -1,25 +1,23 @@
|
|||
--- include/bliss/abstractgraph.hh.orig 2022-06-17 07:24:11.000000000 -0600
|
||||
+++ include/bliss/abstractgraph.hh 2023-02-01 09:32:06.289384074 -0700
|
||||
@@ -493,10 +493,14 @@ protected:
|
||||
*/
|
||||
unsigned int cr_component_elements;
|
||||
|
||||
+ std::vector<PathInfo> first_path_info;
|
||||
|
||||
+public:
|
||||
|
||||
-
|
||||
-
|
||||
+ /**
|
||||
+ * Get an information vector about the first path.
|
||||
+ */
|
||||
+ std::vector<PathInfo> get_first_path_info() { return first_path_info; }
|
||||
|
||||
--- ./graph.cc.orig 2012-03-16 10:55:45.139266642 -0600
|
||||
+++ ./graph.cc 2012-03-16 10:57:42.429090440 -0600
|
||||
@@ -597,16 +597,6 @@ public:
|
||||
};
|
||||
|
||||
--- src/abstractgraph.cc.orig 2022-06-17 07:24:11.000000000 -0600
|
||||
+++ src/abstractgraph.cc 2023-02-01 09:31:50.377694086 -0700
|
||||
@@ -745,7 +745,6 @@ AbstractGraph::search(const bool canonic
|
||||
|
||||
-
|
||||
-
|
||||
-typedef struct {
|
||||
- unsigned int splitting_element;
|
||||
- unsigned int certificate_index;
|
||||
- unsigned int subcertificate_length;
|
||||
- UintSeqHash eqref_hash;
|
||||
-} PathInfo;
|
||||
-
|
||||
-
|
||||
bool
|
||||
AbstractGraph::search(const bool canonical, Stats& stats)
|
||||
{
|
||||
@@ -753,7 +743,6 @@ AbstractGraph::search(const bool canonic
|
||||
initialize_certificate();
|
||||
|
||||
std::vector<TreeNode> search_stack;
|
||||
|
|
@ -27,9 +25,7 @@
|
|||
std::vector<PathInfo> best_path_info;
|
||||
|
||||
search_stack.clear();
|
||||
--- src/graph.cc.orig 2022-06-17 07:24:11.000000000 -0600
|
||||
+++ src/graph.cc 2023-02-01 09:32:06.290384054 -0700
|
||||
@@ -1551,7 +1551,7 @@ Graph::nucr_find_first_component(const u
|
||||
@@ -5466,7 +5455,7 @@ Graph::nucr_find_first_component(const u
|
||||
component.clear();
|
||||
component_elements = 0;
|
||||
sh_return = 0;
|
||||
|
|
@ -38,3 +34,41 @@
|
|||
unsigned int sh_size = 0;
|
||||
unsigned int sh_nuconn = 0;
|
||||
|
||||
--- ./graph.hh.orig 2012-03-16 10:55:45.153266622 -0600
|
||||
+++ ./graph.hh 2012-03-16 11:00:26.851843429 -0600
|
||||
@@ -109,9 +109,12 @@ public:
|
||||
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;
|
||||
|
||||
|
||||
/**
|
||||
@@ -355,7 +358,7 @@ protected:
|
||||
*/
|
||||
unsigned int cr_component_elements;
|
||||
|
||||
-
|
||||
+ std::vector<PathInfo> first_path_info;
|
||||
|
||||
|
||||
public:
|
||||
@@ -508,6 +511,10 @@ public:
|
||||
opt_use_long_prune = active;
|
||||
}
|
||||
|
||||
+ /**
|
||||
+ * Get an information vector about the first path.
|
||||
+ */
|
||||
+ std::vector<PathInfo> get_first_path_info() { return first_path_info; }
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
248
bliss.spec
248
bliss.spec
|
|
@ -1,111 +1,93 @@
|
|||
%global giturl https://github.com/scipopt/Bliss
|
||||
|
||||
Name: bliss
|
||||
Version: 0.77
|
||||
Release: 11%{?dist}
|
||||
Version: 0.72
|
||||
Release: 4%{?dist}
|
||||
Summary: Compute automorphism groups and canonical labelings of graphs
|
||||
|
||||
License: LGPL-3.0-only
|
||||
URL: https://users.aalto.fi/~tjunttil/bliss/
|
||||
VCS: git:%{giturl}.git
|
||||
Source0: %{giturl}/archive/v%{version}/Bliss-%{version}.tar.gz
|
||||
Group: Applications/Engineering
|
||||
License: GPLv3
|
||||
URL: http://www.tcs.hut.fi/Software/bliss/
|
||||
Source0: http://www.tcs.hut.fi/Software/bliss/%{name}-%{version}.zip
|
||||
# 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.
|
||||
Source1: bliss.1
|
||||
# Patch from Thomas Rehn, sent upstream 28 Oct 2011. Fix one bug and add one
|
||||
# Sent upstream 28 Oct 2011. Don't call exit() in library code.
|
||||
Patch0: bliss-error.patch
|
||||
# Patch from Thomas Rehn, also sent upstream. Fix one bug and add one
|
||||
# performance enhancement.
|
||||
Patch: bliss-rehn.patch
|
||||
Patch1: bliss-rehn.patch
|
||||
|
||||
# See https://fedoraproject.org/wiki/Changes/EncourageI686LeafRemoval
|
||||
ExcludeArch: %{ix86}
|
||||
|
||||
BuildRequires: cmake
|
||||
BuildRequires: doxygen
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: gmp-devel
|
||||
BuildRequires: make
|
||||
|
||||
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
|
||||
|
||||
%global sover %(echo %{version} | cut -d. -f1)
|
||||
|
||||
%description
|
||||
Bliss is an open source tool for computing automorphism groups and canonical
|
||||
forms of graphs. It has both a command line user interface as well as C++ and
|
||||
C programming language APIs.
|
||||
Bliss is an open source tool for computing automorphism groups and
|
||||
canonical forms of graphs. It has both a command line user interface as
|
||||
well as C++ and C programming language APIs.
|
||||
|
||||
%package devel
|
||||
# The content is LGPL-3.0-only. Other licenses are due to files installed by
|
||||
# doxygen.
|
||||
# html/bc_s.png: GPL-1.0-or-later
|
||||
# html/bdwn.png: GPL-1.0-or-later
|
||||
# html/closed.png: GPL-1.0-or-later
|
||||
# html/doc.png: GPL-1.0-or-later
|
||||
# html/doxygen.css: GPL-1.0-or-later
|
||||
# html/doxygen.svg: GPL-1.0-or-later
|
||||
# html/dynsections.js: MIT
|
||||
# html/folderclosed.png: GPL-1.0-or-later
|
||||
# html/folderopen.png: GPL-1.0-or-later
|
||||
# html/jquery.js: MIT
|
||||
# html/menu.js: MIT
|
||||
# html/menudata.js: MIT
|
||||
# html/nav_f.png: GPL-1.0-or-later
|
||||
# html/nav_g.png: GPL-1.0-or-later
|
||||
# html/nav_h.png: GPL-1.0-or-later
|
||||
# html/open.png: GPL-1.0-or-later
|
||||
# html/splitbar.png: GPL-1.0-or-later
|
||||
# html/sync_off.png: GPL-1.0-or-later
|
||||
# html/sync_on.png: GPL-1.0-or-later
|
||||
# html/tab_a.png: GPL-1.0-or-later
|
||||
# html/tab_b.png: GPL-1.0-or-later
|
||||
# html/tab_h.png: GPL-1.0-or-later
|
||||
# html/tab_s.png: GPL-1.0-or-later
|
||||
# html/tabs.css: GPL-1.0-or-later
|
||||
License: LGPL-3.0-only AND MIT AND GPL-1.0-or-later
|
||||
Summary: Headers and library files for developing with bliss
|
||||
Group: Development/Libraries
|
||||
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
|
||||
Requires: gmp-devel%{?_isa}
|
||||
|
||||
%description devel
|
||||
Headers and library files needed to develop applications that use the bliss
|
||||
library.
|
||||
Headers and library files needed to develop applications that use the
|
||||
bliss library.
|
||||
|
||||
%package libs
|
||||
Summary: Compute automorphism groups and canonical labelings of graphs
|
||||
Group: Development/Libraries
|
||||
|
||||
%description libs
|
||||
A command-line bliss tool to access the functionality of the bliss library.
|
||||
A command-line bliss tool to access the functionality of the bliss
|
||||
library.
|
||||
|
||||
%prep
|
||||
%autosetup -n Bliss-%{version} -p0
|
||||
|
||||
%conf
|
||||
# Do not override Fedora build flags. The last sagemath version added an
|
||||
# soname. Duplicate it for compatibility. Link the library with libgmp.
|
||||
# Hidden symbols hide ALL symbols, meaning we can't use the library.
|
||||
sed -e 's/ -O3//' \
|
||||
-e '/POSITION_INDEPENDENT/a\ \ VERSION 2.0.0 SOVERSION 2' \
|
||||
-e '/^install($/itarget_link_libraries(libbliss ${GMP_LIBRARIES})' \
|
||||
-e '/VISIBILITY/d' \
|
||||
-i CMakeLists.txt
|
||||
|
||||
# Fix installation directories
|
||||
if [ "%{_lib}" != "lib" ]; then
|
||||
sed -i 's,\(DESTINATION \)lib,\1%{_lib},' CMakeLists.txt
|
||||
fi
|
||||
%setup -q
|
||||
%patch0
|
||||
|
||||
%build
|
||||
%cmake -DUSE_GMP:BOOL=ON
|
||||
%cmake_build
|
||||
# The Makefile creates a static library, so we roll our own shared library
|
||||
# here instead. Also, avoid an unused direct dependency on libm.
|
||||
g++ $RPM_OPT_FLAGS -DBLISS_USE_GMP -fPIC -shared -o libbliss.so.%{version} \
|
||||
-Wl,-soname,libbliss.so.%{sover} defs.cc graph.cc partition.cc orbit.cc \
|
||||
uintseqhash.cc heap.cc timer.cc utils.cc bliss_C.cc -lgmp -Wl,--as-needed
|
||||
ln -s libbliss.so.%{version} libbliss.so.%{sover}
|
||||
ln -s libbliss.so.%{sover} libbliss.so
|
||||
|
||||
# The Makefile doesn't know how to link the binary against a shared library.
|
||||
# Also, once again avoid an unused direct dependency on libm.
|
||||
g++ $RPM_OPT_FLAGS -DBLISS_USE_GMP -o bliss bliss.cc -L. -lbliss -lgmp \
|
||||
-Wl,--as-needed
|
||||
|
||||
# Build the documentation
|
||||
doxygen
|
||||
|
||||
%install
|
||||
%cmake_install
|
||||
# The Makefile has no install target.
|
||||
|
||||
# Install the library
|
||||
mkdir -p $RPM_BUILD_ROOT%{_libdir}
|
||||
cp -a libbliss.* $RPM_BUILD_ROOT%{_libdir}
|
||||
|
||||
# Install the header files
|
||||
mkdir -p $RPM_BUILD_ROOT%{_includedir}/bliss
|
||||
cp -p *.h *.hh $RPM_BUILD_ROOT%{_includedir}/bliss
|
||||
|
||||
# Install the binary
|
||||
mkdir -p $RPM_BUILD_ROOT%{_bindir}
|
||||
cp -p bliss $RPM_BUILD_ROOT%{_bindir}
|
||||
|
||||
# Install the man page
|
||||
mkdir -p %{buildroot}%{_mandir}/man1
|
||||
sed 's/@VERSION@/%{version}/' %{SOURCE1} > %{buildroot}%{_mandir}/man1/bliss.1
|
||||
touch -r %{SOURCE1} %{buildroot}%{_mandir}/man1/bliss.1
|
||||
mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1
|
||||
cp -p %{SOURCE1} $RPM_BUILD_ROOT%{_mandir}/man1
|
||||
|
||||
%post libs -p /sbin/ldconfig
|
||||
|
||||
%postun libs -p /sbin/ldconfig
|
||||
|
||||
%files
|
||||
%{_bindir}/bliss
|
||||
|
|
@ -115,130 +97,12 @@ touch -r %{SOURCE1} %{buildroot}%{_mandir}/man1/bliss.1
|
|||
%doc html
|
||||
%{_includedir}/bliss
|
||||
%{_libdir}/libbliss.so
|
||||
%{_libdir}/cmake/Bliss/
|
||||
|
||||
%files libs
|
||||
%doc CHANGES.txt
|
||||
%license COPYING COPYING.LESSER
|
||||
%{_libdir}/libbliss.so.2{,.*}
|
||||
%doc COPYING.txt
|
||||
%{_libdir}/libbliss.so.*
|
||||
|
||||
%changelog
|
||||
* Wed Jul 23 2025 Fedora Release Engineering <releng@fedoraproject.org> - 0.77-11
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
|
||||
|
||||
* Thu Jan 16 2025 Fedora Release Engineering <releng@fedoraproject.org> - 0.77-10
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
|
||||
|
||||
* Wed Jul 17 2024 Fedora Release Engineering <releng@fedoraproject.org> - 0.77-9
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
|
||||
|
||||
* Thu Feb 22 2024 Jerry James <loganjerry@gmail.com> - 0.77-8
|
||||
- Build the SCIP fork
|
||||
- Do not build for 32-bit x86
|
||||
|
||||
* Tue Jan 23 2024 Fedora Release Engineering <releng@fedoraproject.org> - 0.77-7
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||
|
||||
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 0.77-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||
|
||||
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 0.77-5
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
|
||||
|
||||
* Wed Jan 18 2023 Fedora Release Engineering <releng@fedoraproject.org> - 0.77-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
|
||||
|
||||
* Mon Aug 15 2022 Jerry James <loganjerry@gmail.com> - 0.77-3
|
||||
- Convert License tag to SPDX
|
||||
|
||||
* Wed Jul 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 0.77-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
|
||||
|
||||
* Wed Jan 19 2022 Fedora Release Engineering <releng@fedoraproject.org> - 0.77-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
|
||||
|
||||
* Thu Oct 7 2021 Jerry James <loganjerry@gmail.com> - 0.77-1
|
||||
- Version 0.77
|
||||
- Switch to new upstream URLs
|
||||
|
||||
* Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.73-15
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
|
||||
|
||||
* Mon Jul 19 2021 Jerry James <loganjerry@gmail.com> - 0.73-15
|
||||
- Switch to github URLs
|
||||
|
||||
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.73-14
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
||||
|
||||
* Mon Dec 7 2020 Jerry James <loganjerry@gmail.com> - 0.73-13
|
||||
- Switch to using the sagemath sources
|
||||
- Drop -error patch; nobody else uses it and it changes the contract
|
||||
|
||||
* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.73-12
|
||||
- Second attempt - Rebuilt for
|
||||
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||
|
||||
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.73-11
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||
|
||||
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.73-10
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||
|
||||
* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.73-9
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||
|
||||
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.73-8
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||
|
||||
* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.73-7
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
|
||||
|
||||
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.73-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
|
||||
|
||||
* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.73-5
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
|
||||
|
||||
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.73-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
|
||||
|
||||
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.73-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
|
||||
|
||||
* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 0.73-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
|
||||
|
||||
* Sat Sep 19 2015 Jerry James <loganjerry@gmail.com> - 0.73-1
|
||||
- New upstream version
|
||||
|
||||
* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.72-13
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
|
||||
|
||||
* Sat May 02 2015 Kalev Lember <kalevlember@gmail.com> - 0.72-12
|
||||
- Rebuilt for GCC 5 C++11 ABI change
|
||||
|
||||
* Fri Mar 6 2015 Jerry James <loganjerry@gmail.com> - 0.72-11
|
||||
- Link with RPM_LD_FLAGS
|
||||
|
||||
* Wed Feb 11 2015 Jerry James <loganjerry@gmail.com> - 0.72-10
|
||||
- Note bundled jquery
|
||||
- Use license macro
|
||||
|
||||
* Fri Aug 15 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.72-9
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
|
||||
|
||||
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.72-8
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
|
||||
|
||||
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.72-7
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
|
||||
|
||||
* Wed Feb 13 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.72-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
|
||||
|
||||
* Wed Jul 18 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.72-5
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
|
||||
|
||||
* Fri Mar 16 2012 Jerry James <loganjerry@gmail.com> - 0.72-4
|
||||
- Apply bug fix and performance enhancement patch from Thomas Rehn
|
||||
|
||||
|
|
|
|||
2
sources
2
sources
|
|
@ -1 +1 @@
|
|||
SHA512 (Bliss-0.77.tar.gz) = 27bd44695f2c1f3dfcb2f39f75fea3f61db29dfde4bef545bd14017830cd3d399b2e448ae7a703a5886bd433b22f6eddfaa99618c8714340d366d8e387ae6583
|
||||
6f0e114944fa0863870b7f631850abb2 bliss-0.72.zip
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue