diff --git a/.gitignore b/.gitignore index aa37e03..8a01871 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ -/bliss-*.zip -/*.tar.gz +/bliss-0.72.zip diff --git a/README.md b/README.md deleted file mode 100644 index 671fed1..0000000 --- a/README.md +++ /dev/null @@ -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. diff --git a/bliss-error.patch b/bliss-error.patch new file mode 100644 index 0000000..efd77c5 --- /dev/null +++ b/bliss-error.patch @@ -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& 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 > 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++) +@@ -3507,7 +3525,7 @@ + ei++) + edges2.insert(*ei); + if(!(edges1 == edges2)) +- return false; ++ return 0; + + edges1.clear(); + for(std::vector::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 > 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++) +@@ -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 certificate_current_path; + std::vector 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& perm) const; ++ virtual bool is_automorphism(const std::vector& 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(); + diff --git a/bliss-rehn.patch b/bliss-rehn.patch index 8879561..4854338 100644 --- a/bliss-rehn.patch +++ b/bliss-rehn.patch @@ -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 first_path_info; - -+public: - -- -- -+ /** -+ * Get an information vector about the first path. -+ */ -+ std::vector 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 search_stack; @@ -27,9 +25,7 @@ std::vector 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 first_path_info; + + + public: +@@ -508,6 +511,10 @@ public: + opt_use_long_prune = active; + } + ++ /** ++ * 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 9b1aacd..5f80530 100644 --- a/bliss.spec +++ b/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 - 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 - -* Sat Sep 19 2015 Jerry James - 0.73-1 -- New upstream version - -* Wed Jun 17 2015 Fedora Release Engineering - 0.72-13 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Sat May 02 2015 Kalev Lember - 0.72-12 -- Rebuilt for GCC 5 C++11 ABI change - -* Fri Mar 6 2015 Jerry James - 0.72-11 -- Link with RPM_LD_FLAGS - -* Wed Feb 11 2015 Jerry James - 0.72-10 -- Note bundled jquery -- Use license macro - -* Fri Aug 15 2014 Fedora Release Engineering - 0.72-9 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild - -* Sat Jun 07 2014 Fedora Release Engineering - 0.72-8 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Sat Aug 03 2013 Fedora Release Engineering - 0.72-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild - -* Wed Feb 13 2013 Fedora Release Engineering - 0.72-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild - -* Wed Jul 18 2012 Fedora Release Engineering - 0.72-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild - * Fri Mar 16 2012 Jerry James - 0.72-4 - Apply bug fix and performance enhancement patch from Thomas Rehn diff --git a/sources b/sources index c2c1d11..e3aca36 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (Bliss-0.77.tar.gz) = 27bd44695f2c1f3dfcb2f39f75fea3f61db29dfde4bef545bd14017830cd3d399b2e448ae7a703a5886bd433b22f6eddfaa99618c8714340d366d8e387ae6583 +6f0e114944fa0863870b7f631850abb2 bliss-0.72.zip