diff --git a/.gitignore b/.gitignore index 0a80693..aa37e03 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -/bliss-0.72.zip -/bliss-0.73.zip +/bliss-*.zip +/*.tar.gz diff --git a/README.md b/README.md new file mode 100644 index 0000000..671fed1 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# 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. diff --git a/bliss-error.patch b/bliss-error.patch deleted file mode 100644 index cd0f545..0000000 --- a/bliss-error.patch +++ /dev/null @@ -1,471 +0,0 @@ ---- ./bliss.cc.orig 2015-09-01 10:23:10.000000000 -0600 -+++ ./bliss.cc 2015-09-04 15:04:09.946602735 -0600 -@@ -276,13 +276,16 @@ main(const int argc, const char** argv) - 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 @@ main(const int argc, const char** argv) - 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); ---- ./bliss_C.cc.orig 2015-09-01 10:23:10.000000000 -0600 -+++ ./bliss_C.cc 2015-09-04 15:04:09.945602814 -0600 -@@ -131,7 +131,7 @@ BlissGraph *bliss_permute(BlissGraph *gr - } - - extern "C" --void -+int - bliss_find_automorphisms(BlissGraph *graph, - void (*hook)(void *user_param, - unsigned int n, -@@ -142,7 +142,8 @@ bliss_find_automorphisms(BlissGraph *gra - 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 @@ bliss_find_automorphisms(BlissGraph *gra - stats->nof_generators = s.get_nof_generators(); - stats->max_level = s.get_max_level(); - } -+ return 1; - } - - -@@ -173,7 +175,7 @@ bliss_find_canonical_labeling(BlissGraph - - 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_C.h.orig 2015-09-01 10:23:10.000000000 -0600 -+++ ./bliss_C.h 2015-09-04 15:04:09.947602656 -0600 -@@ -156,6 +156,7 @@ unsigned int bliss_hash(BlissGraph *grap - * 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 @@ BlissGraph *bliss_permute(BlissGraph *gr - * 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 @@ bliss_find_automorphisms(BlissGraph *gra - * 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, ---- ./defs.cc.orig 2015-09-01 10:23:12.000000000 -0600 -+++ ./defs.cc 2015-09-04 15:04:09.947602656 -0600 -@@ -32,7 +32,6 @@ fatal_error(const char* fmt, ...) - vfprintf(stderr, fmt, ap); - fprintf(stderr, "\nAborting!\n"); - va_end(ap); -- exit(1); - } - - } ---- ./graph.cc.orig 2015-09-01 10:23:10.000000000 -0600 -+++ ./graph.cc 2015-09-04 15:04:09.927604245 -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 @@ AbstractGraph::reset_permutation(unsigne - *perm = i; - } - --bool --AbstractGraph::is_automorphism(unsigned int* const perm) --{ -- _INTERNAL_ERROR(); -- return false; --} -- --bool --AbstractGraph::is_automorphism(const std::vector& perm) const --{ -- _INTERNAL_ERROR(); -- return false; --} -- - - - -@@ -618,7 +607,7 @@ typedef struct { - } PathInfo; - - --void -+bool - AbstractGraph::search(const bool canonical, Stats& stats) - { - const unsigned int N = get_nof_vertices(); -@@ -658,7 +647,7 @@ AbstractGraph::search(const bool canonic - if(N == 0) - { - /* Nothing to do, return... */ -- return; -+ return true; - } - - /* Initialize the partition ... */ -@@ -696,10 +685,10 @@ AbstractGraph::search(const bool canonic - */ - 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 @@ AbstractGraph::search(const bool canonic - update_labeling(best_path_labeling); - /* Update statistics */ - stats.nof_leaf_nodes = 1; -- return; -+ return true; - } - - /* -@@ -718,20 +707,39 @@ AbstractGraph::search(const bool canonic - */ - 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 -@@ -1203,8 +1211,10 @@ AbstractGraph::search(const bool canonic - - #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 - - /* -@@ -1596,8 +1606,10 @@ AbstractGraph::search(const bool canonic - - #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; -@@ -1664,6 +1676,7 @@ AbstractGraph::search(const bool canonic - - - _INTERNAL_ERROR(); -+ return false; - - - handle_first_path_automorphism: -@@ -1699,8 +1712,10 @@ AbstractGraph::search(const bool canonic - - #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) -@@ -1747,12 +1762,13 @@ AbstractGraph::search(const bool canonic - /* 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, -@@ -1762,7 +1778,8 @@ AbstractGraph::find_automorphisms(Stats& - report_hook = hook; - report_user_param = user_param; - -- search(false, stats); -+ if (!search(false, stats)) -+ return false; - - if(first_path_labeling) - { -@@ -1774,6 +1791,7 @@ AbstractGraph::find_automorphisms(Stats& - free(best_path_labeling); - best_path_labeling = 0; - } -+ return true; - } - - -@@ -1788,7 +1806,8 @@ AbstractGraph::canonical_form(Stats& sta - report_hook = hook; - report_user_param = user_param; - -- search(true, stats); -+ if (!search(true, stats)) -+ return NULL; - - return best_path_labeling; - } -@@ -3479,15 +3498,17 @@ Digraph::initialize_certificate() - * Check whether perm is an automorphism. - * Slow, mainly for debugging and validation purposes. - */ --bool -+int - Digraph::is_automorphism(unsigned int* const perm) - { - std::set > edges1; - std::set > 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++) -@@ -3506,7 +3527,7 @@ Digraph::is_automorphism(unsigned int* c - ei++) - edges2.insert(*ei); - if(!(edges1 == edges2)) -- return false; -+ return 0; - - edges1.clear(); - for(std::vector::iterator ei = v1.edges_out.begin(); -@@ -3519,10 +3540,10 @@ Digraph::is_automorphism(unsigned int* c - ei++) - edges2.insert(*ei); - if(!(edges1 == edges2)) -- return false; -+ return 0; - } - -- return true; -+ return 1; - } - - bool -@@ -4337,8 +4358,10 @@ Graph* - 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()); -@@ -5278,15 +5301,17 @@ Graph::initialize_certificate() - * - *-------------------------------------------------------------------------*/ - --bool -+int - Graph::is_automorphism(unsigned int* const perm) - { - std::set > edges1; - std::set > 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++) -@@ -5306,10 +5331,10 @@ Graph::is_automorphism(unsigned int* con - edges2.insert(*ei); - - if(!(edges1 == edges2)) -- return false; -+ return 0; - } - -- return true; -+ return 1; - } - - ---- ./graph.hh.orig 2015-09-01 10:23:10.000000000 -0600 -+++ ./graph.hh 2015-09-04 15:09:17.261182632 -0600 -@@ -159,7 +159,7 @@ public: - * Check whether \a perm is an automorphism of this graph. - * Unoptimized, mainly for debugging purposes. - */ -- virtual bool is_automorphism(const std::vector& perm) const; -+ virtual bool is_automorphism(const std::vector& perm) const = 0; - - - /** Activate/deactivate failure recording. -@@ -211,8 +211,10 @@ public: - * 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), -@@ -232,6 +234,8 @@ public: - * 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, -@@ -436,7 +440,7 @@ protected: - 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 certificate_current_path; - std::vector certificate_first_path; -@@ -450,7 +454,11 @@ protected: - 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, -@@ -634,7 +642,7 @@ protected: - - 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); -@@ -875,7 +883,7 @@ protected: - - void initialize_certificate(); - -- bool is_automorphism(unsigned int* const perm); -+ int is_automorphism(unsigned int* const perm); - - void sort_edges(); - diff --git a/bliss-rehn.patch b/bliss-rehn.patch index f37eedb..8879561 100644 --- a/bliss-rehn.patch +++ b/bliss-rehn.patch @@ -1,23 +1,25 @@ ---- ./graph.cc.orig 2015-09-04 15:04:09.927604245 -0600 -+++ ./graph.cc 2015-09-04 15:09:46.999819514 -0600 -@@ -597,16 +597,6 @@ public: +--- 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 first_path_info; + ++public: + +- +- ++ /** ++ * Get an information vector about the first path. ++ */ ++ std::vector get_first_path_info() { return first_path_info; } + }; - -- -- --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 +--- 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 initialize_certificate(); std::vector search_stack; @@ -25,7 +27,9 @@ std::vector best_path_info; search_stack.clear(); -@@ -5477,7 +5466,7 @@ Graph::nucr_find_first_component(const u +--- 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 component.clear(); component_elements = 0; sh_return = 0; @@ -34,41 +38,3 @@ unsigned int sh_size = 0; unsigned int sh_nuconn = 0; ---- ./graph.hh.orig 2015-09-04 15:09:17.261182632 -0600 -+++ ./graph.hh 2015-09-04 15:09:47.001819355 -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; - - - /** -@@ -524,7 +527,7 @@ protected: - */ - unsigned int cr_component_elements; - -- -+ std::vector first_path_info; - - - }; -@@ -756,6 +759,10 @@ public: - void set_splitting_heuristic(const SplittingHeuristic shs) {sh = shs; } - - -+ /** -+ * Get an information vector about the first path. -+ */ -+ std::vector get_first_path_info() { return first_path_info; } - }; - - diff --git a/bliss.spec b/bliss.spec index b8d3d6a..9b1aacd 100644 --- a/bliss.spec +++ b/bliss.spec @@ -1,95 +1,112 @@ +%global giturl https://github.com/scipopt/Bliss + Name: bliss -Version: 0.73 -Release: 2%{?dist} +Version: 0.77 +Release: 11%{?dist} Summary: Compute automorphism groups and canonical labelings of graphs -License: LGPLv3 -URL: http://www.tcs.hut.fi/Software/bliss/ -Source0: http://www.tcs.hut.fi/Software/bliss/%{name}-%{version}.zip +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 # 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 -# 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 +# Patch from Thomas Rehn, sent upstream 28 Oct 2011. Fix one bug and add one # performance enhancement. -Patch1: bliss-rehn.patch +Patch: 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 Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: gmp-devel%{?_isa} -Provides: bundled(jquery) %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 %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 -%setup -q -%patch0 -%patch1 +%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 %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 -Wl,--as-needed \ - $RPM_LD_FLAGS -lgmp -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 -Wl,--as-needed \ - $RPM_LD_FLAGS -L. -lbliss -lgmp +%cmake -DUSE_GMP:BOOL=ON +%cmake_build # Build the documentation doxygen %install -# The Makefile has no install target. - -# Install the library -mkdir -p %{buildroot}%{_libdir} -cp -a libbliss.* %{buildroot}%{_libdir} - -# Install the header files -mkdir -p %{buildroot}%{_includedir}/bliss -cp -p *.h *.hh %{buildroot}%{_includedir}/bliss - -# Install the binary -mkdir -p %{buildroot}%{_bindir} -cp -p bliss %{buildroot}%{_bindir} +%cmake_install # 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 -%post libs -p /sbin/ldconfig - -%postun libs -p /sbin/ldconfig - %files %{_bindir}/bliss %{_mandir}/man1/bliss.1* @@ -98,12 +115,96 @@ 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.* +%{_libdir}/libbliss.so.2{,.*} %changelog +* Wed Jul 23 2025 Fedora Release Engineering - 0.77-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Thu Jan 16 2025 Fedora Release Engineering - 0.77-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Wed Jul 17 2024 Fedora Release Engineering - 0.77-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Thu Feb 22 2024 Jerry James - 0.77-8 +- Build the SCIP fork +- Do not build for 32-bit x86 + +* Tue Jan 23 2024 Fedora Release Engineering - 0.77-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 19 2024 Fedora Release Engineering - 0.77-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Wed Jul 19 2023 Fedora Release Engineering - 0.77-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Wed Jan 18 2023 Fedora Release Engineering - 0.77-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Mon Aug 15 2022 Jerry James - 0.77-3 +- Convert License tag to SPDX + +* Wed Jul 20 2022 Fedora Release Engineering - 0.77-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Wed Jan 19 2022 Fedora Release Engineering - 0.77-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Thu Oct 7 2021 Jerry James - 0.77-1 +- Version 0.77 +- Switch to new upstream URLs + +* Wed Jul 21 2021 Fedora Release Engineering - 0.73-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Mon Jul 19 2021 Jerry James - 0.73-15 +- Switch to github URLs + +* Tue Jan 26 2021 Fedora Release Engineering - 0.73-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Mon Dec 7 2020 Jerry James - 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 - 0.73-12 +- Second attempt - Rebuilt for + https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 27 2020 Fedora Release Engineering - 0.73-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue Jan 28 2020 Fedora Release Engineering - 0.73-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Wed Jul 24 2019 Fedora Release Engineering - 0.73-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Thu Jan 31 2019 Fedora Release Engineering - 0.73-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Thu Jul 12 2018 Fedora Release Engineering - 0.73-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Wed Feb 07 2018 Fedora Release Engineering - 0.73-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Wed Aug 02 2017 Fedora Release Engineering - 0.73-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 0.73-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Fri Feb 10 2017 Fedora Release Engineering - 0.73-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + * Wed Feb 03 2016 Fedora Release Engineering - 0.73-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild diff --git a/sources b/sources index ffd5c32..c2c1d11 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -72f2e310786923b5c398ba0fc40b42ce bliss-0.73.zip +SHA512 (Bliss-0.77.tar.gz) = 27bd44695f2c1f3dfcb2f39f75fea3f61db29dfde4bef545bd14017830cd3d399b2e448ae7a703a5886bd433b22f6eddfaa99618c8714340d366d8e387ae6583