Compare commits

...
Sign in to create a new pull request.

32 commits

Author SHA1 Message Date
Jerry James
3e2499ac3e Reflow the description text
- Be more precise about globbing in %files
2026-01-11 18:45:55 -07:00
Jerry James
53d3b70b3f Version 1.23 2025-08-09 09:56:46 -06:00
Jerry James
f425986493 Convert to %autorelease and %autochangelog
[skip changelog]
2025-08-09 09:50:46 -06:00
Fedora Release Engineering
7855c6c77b Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-23 18:24:16 +00:00
Fedora Release Engineering
8e0b948290 Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild 2025-01-16 13:56:33 +00:00
Jerry James
23f5583a84 Move configuration steps to %conf 2025-01-13 14:19:28 -07:00
Fedora Release Engineering
54f46e700b Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild 2024-07-17 19:28:56 +00:00
Fedora Release Engineering
453952be78 Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-24 07:27:32 +00:00
Fedora Release Engineering
bc40b2d6ed Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-19 15:39:36 +00:00
Fedora Release Engineering
03b37bfcf2 Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-07-19 15:52:24 +00:00
Fedora Release Engineering
5caa4802a4 Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-01-19 00:01:54 +00:00
Jerry James
a818cfe96c Convert License tag to SPDX. 2022-12-20 13:46:10 -07:00
Fedora Release Engineering
48a67a8d34 Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-07-20 23:06:27 +00:00
Jerry James
0f6afabef9 Add README.md. 2022-07-20 08:52:55 -06:00
Fedora Release Engineering
4453fafed4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-01-19 23:22:33 +00:00
Fedora Release Engineering
b5d770ce8f - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2021-07-21 19:36:08 +00:00
Fedora Release Engineering
522edf3c08 - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2021-07-21 14:38:38 +00:00
Jerry James
91a6548969 Version 1.22.
- New URLs.
- Drop upstreamed -sagemath patch.
- Use autotools to build.
2021-06-17 09:59:37 -06:00
Fedora Release Engineering
9d37b15cb5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2021-01-26 02:06:25 +00:00
Tom Stellard
6e94492919 Add BuildRequires: make
https://fedoraproject.org/wiki/Changes/Remove_make_from_BuildRoot
2021-01-12 05:59:43 +00:00
Fedora Release Engineering
5806ae0f82 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2020-07-27 14:06:27 +00:00
Fedora Release Engineering
28f8615ef9 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2020-01-28 14:13:21 +00:00
Fedora Release Engineering
6142a27f52 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2019-07-24 20:25:30 +00:00
Fedora Release Engineering
33a8d9a6dc - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2019-01-31 15:45:14 +00:00
Igor Gnatenko
5d1bed98d3 Remove obsolete Group tag
References: https://fedoraproject.org/wiki/Changes/Remove_Group_Tag
2019-01-28 20:23:57 +01:00
Igor Gnatenko
0ad62b0189
Remove obsolete ldconfig scriptlets
References: https://fedoraproject.org/wiki/Changes/RemoveObsoleteScriptlets
Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
2019-01-22 18:38:39 +01:00
Igor Gnatenko
2bccea2e1a
Add missing BuildRequires on gcc
/var/tmp/rpm-tmp.fRKpdg: line 34: gcc: command not found

References: https://bugzilla.redhat.com/show_bug.cgi?id=1606863
Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
2018-07-24 16:36:27 +02:00
Fedora Release Engineering
87cc0c9d31 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2018-07-12 21:53:13 +00:00
Fedora Release Engineering
9e7a5a3c86 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2018-02-07 05:07:27 +00:00
Fedora Release Engineering
d929f22084 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild 2017-08-02 18:52:21 +00:00
Fedora Release Engineering
58ef1f5c5f - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild 2017-07-26 04:58:43 +00:00
Fedora Release Engineering
6799448f08 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild 2017-02-10 07:35:18 +00:00
11 changed files with 160 additions and 664 deletions

2
.gitignore vendored
View file

@ -1,4 +1,4 @@
/cliquer-1.21.tar.gz
/cliquer-*.tar.gz
/cliquer.pdf
/cliquer_bm.pdf
/cliquer_fm.pdf

6
README.md Normal file
View file

@ -0,0 +1,6 @@
# cliquer
[Cliquer](https://users.aalto.fi/~pat/cliquer.html) is a set of C routines for
finding cliques in an arbitrary weighted graph. It uses an exact
branch-and-bound algorithm developed by Patric Östergård. It is designed with
the aim of being efficient while still being flexible and easy to use.

24
basic.c
View file

@ -1,24 +0,0 @@
#include <stdio.h>
#include "cliquer.h"
int main(int argc, char *argv[]) {
graph_t *g;
set_t s;
if (argc!=2) {
fprintf(stderr,"%s <dimacs_file>\n",argv[0]);
return 1;
}
g=graph_read_dimacs_file(argv[1]);
if (g==NULL)
return 1;
ASSERT(graph_test(g,stderr));
s=clique_find_single(g,0,0,FALSE,NULL);
set_print(s);
return 0;
}

102
changelog Normal file
View file

@ -0,0 +1,102 @@
* Wed Jul 23 2025 Fedora Release Engineering <releng@fedoraproject.org> - 1.22-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Thu Jan 16 2025 Fedora Release Engineering <releng@fedoraproject.org> - 1.22-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Wed Jul 17 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.22-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.22-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.22-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.22-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.22-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Tue Dec 20 2022 Jerry James <loganjerry@gmail.com> - 1.22-4
- Convert License tag to SPDX
* Wed Jul 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.22-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Wed Jan 19 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.22-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.22-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Thu Jun 17 2021 Jerry James <loganjerry@gmail.com> - 1.22-1
- Version 1.22
- New URLs
- Drop upstreamed -sagemath patch
- Use autotools to build
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.21-20
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.21-19
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.21-18
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.21-17
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.21-16
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.21-15
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.21-14
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.21-13
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.21-12
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.21-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1.21-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.21-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Sat Aug 16 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.21-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.21-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.21-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
* Wed Feb 13 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.21-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
* Wed Aug 15 2012 pcpa <paulo.cesar.pereira.de.andrade@gmail.com> - 1.21-4
- Do not hardcode version in shell commands (#825494)
- Correct permission of generated library and binary (#825494)
* Tue Aug 14 2012 pcpa <paulo.cesar.pereira.de.andrade@gmail.com> - 1.21-3
- Remove %%defattr from spec (#825494)
- Correct mixed spaces and tabs in spec (#825494)
- Correct FSF address (#825494)
- Update information about sagemath patches to upstream cliquer (#825494)
* Sat May 26 2012 pcpa <paulo.cesar.pereira.de.andrade@gmail.com> - 1.21-2
- Add sagemath patch interface
* Wed Nov 16 2011 Jerry James <loganjerry@gmail.com> - 1.21-1
- Initial RPM

33
cl.h
View file

@ -1,33 +0,0 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#ifdef ENABLE_LONG_OPTIONS
#include <getopt.h>
#endif
#include "cliquer.h"
#define TRYFORHELP "Try `%s -h' for more information.\n",argv[0]
void printhelp(char *prog);
void read_options(int argc, char **argv);
void print_search(graph_t *g);
boolean record_clique_func(set_t s,graph_t *g,clique_options *opts);
boolean print_clique_func(set_t s,graph_t *g,clique_options *opts);
void print_clique(set_t s,graph_t *g);
// As the global variables remain between two SAGE call, they
// have to be reset each time
void sage_reset_global_variables();
// The opt structure has to be initialised in each SAGE function
clique_options * sage_init_clique_opt();
// Computes a maximum clique of the graph g and return its size
// The table list contains the ID of the vertices
int sage_clique_max(graph_t *g,int **list);
int sage_all_clique_max(graph_t *g,int **list);
int sage_clique_number(graph_t *g);

View file

@ -1,178 +0,0 @@
diff -up cliquer-1.21/cl.c.orig cliquer-1.21/cl.c
--- cliquer-1.21/cl.c.orig 2012-05-09 01:22:23.361598133 -0300
+++ cliquer-1.21/cl.c 2012-05-09 01:26:12.768606918 -0300
@@ -3,17 +3,21 @@
#include <stdlib.h>
#include <unistd.h>
+#ifdef MAIN
#ifdef ENABLE_LONG_OPTIONS
#include <getopt.h>
#endif
+#endif
#include "cliquer.h"
#define TRYFORHELP "Try `%s -h' for more information.\n",argv[0]
+#ifdef MAIN
void printhelp(char *prog);
void read_options(int argc, char **argv);
+#endif
void print_search(graph_t *g);
boolean record_clique_func(set_t s,graph_t *g,clique_options *opts);
boolean print_clique_func(set_t s,graph_t *g,clique_options *opts);
@@ -39,7 +43,131 @@ static set_t *clique_list;
static int clique_count=0;
static int clique_list_size=0;
+// As the global variables remain between two SAGE call, they
+// have to be reset each time
+void sage_reset_global_variables(){
+ find_all=FALSE;
+ min_weight=0;
+ min_weight_set=FALSE;
+ max_weight=0;
+ max_weight_set=FALSE;
+ maximal=FALSE;
+ unweighted=FALSE;
+ number1=TRUE;
+ quiet=0;
+ only_weight=FALSE;
+ clique_count=0;
+ clique_list_size=0;
+}
+
+
+// The opt structure has to be initialised in each SAGE function
+clique_options * sage_init_clique_opt(){
+ sage_reset_global_variables();
+ clique_options *opts;
+ quiet++;
+ opts=malloc(sizeof(clique_options));
+ if (quiet)
+ opts->time_function=NULL;
+ else
+ opts->time_function=clique_print_time;
+ opts->output=stderr;
+ opts->reorder_function=reorder;
+ opts->reorder_map=NULL;
+ // Without commenting these lines the sage_all_clique_max
+ // function does not work correctly
+
+ /*
+ if (quiet)
+ opts->user_function=print_clique_func;
+ else
+ */
+ opts->user_function=record_clique_func;
+ opts->user_data=NULL;
+ opts->clique_list=NULL;
+ opts->clique_list_length=0;
+ return opts;
+}
+
+
+// Computes a maximum clique of the graph g and return its size
+// The table list contains the ID of the vertices
+int sage_clique_max(graph_t *g,int **list){
+ sage_reset_global_variables();
+ quiet++;
+ find_all=FALSE;
+ maximal=TRUE;
+ number1=FALSE;
+ set_t s;
+ int i,l;
+ s=clique_unweighted_find_single(g,min_weight,
+ max_weight,maximal,
+ sage_init_clique_opt());
+
+ // Writing the answer into a int [] to be read by Sage
+ int size=set_size(s);
+ *list=malloc(sizeof(int)*size);
+ l=0;
+ for (i=0; i<SET_MAX_SIZE(s); i++) {
+ if (SET_CONTAINS(s,i)) {
+ *((*list)+l)=i;
+ l++;
+ }
+ }
+ return size;
+}
+
+int sage_all_clique_max(graph_t *g,int **list){
+ sage_reset_global_variables();
+ /*
+ find_all=TRUE;
+ find_all=FALSE;
+ only_weight=TRUE;
+ maximal=TRUE;
+
+ quiet++;
+ */
+ // graph_print(g);
+ quiet++;
+ find_all=TRUE;
+ maximal=TRUE;
+ number1=FALSE;
+ int i,j,l;
+
+ clique_unweighted_find_all(g,min_weight,max_weight,
+ maximal,sage_init_clique_opt());
+
+ int size=set_size(clique_list[0]);
+ *list=malloc(sizeof(int)*(size+1)*clique_count);
+ l=0;
+
+ for (j=0; j<clique_count; j++) {
+ for (i=0; i<SET_MAX_SIZE(clique_list[j]); i++) {
+ if (SET_CONTAINS(clique_list[j],i)) {
+ *((*list)+l)=i;
+ l++;
+ }
+ }
+ *((*list)+l)=-1;
+ l++;
+ }
+ return (1+size)*clique_count;
+}
+
+
+int sage_clique_number(graph_t *g){
+ sage_reset_global_variables();
+ find_all=FALSE;
+ only_weight=TRUE;
+ maximal=TRUE;
+ number1=FALSE;
+ clique_options *opts;
+ opts=sage_init_clique_opt();
+ return clique_unweighted_max_weight(g,opts);
+}
+
+#ifdef MAIN
int main(int argc, char **argv) {
FILE *fp;
graph_t *g;
@@ -332,7 +460,7 @@ void read_options(int argc, char **argv)
file=argv[optind];
return;
}
-
+#endif /* MAIN */
/*
* Prints a line to stderr indicating what is being searched for.
diff -up cliquer-1.21/graph.c.orig cliquer-1.21/graph.c
--- cliquer-1.21/graph.c.orig 2012-05-09 01:22:35.617598603 -0300
+++ cliquer-1.21/graph.c 2012-05-09 01:22:53.578599291 -0300
@@ -359,7 +359,7 @@ graph_t *graph_read_dimacs(FILE *fp) {
* (mainly generator-specific information) are ignored silently,
* for all others a warning message is printed to stderr.
*/
-static boolean parse_input(char *str,graph_t *g) {
+boolean parse_input(char *str,graph_t *g) {
int i,j,w;
char tmp[16];

View file

@ -1,110 +1,82 @@
Name: cliquer
Version: 1.21
Release: 10%{?dist}
Version: 1.23
Release: %autorelease
Summary: Find cliques in arbitrary weighted graphs
Group: Applications/Engineering
License: GPLv2+
URL: http://users.tkk.fi/pat/cliquer.html
Source0: http://users.tkk.fi/~pat/%{name}/%{name}-%{version}.tar.gz
Source1: http://users.tkk.fi/~pat/%{name}/%{name}_fm.pdf
Source2: http://users.tkk.fi/~pat/%{name}/%{name}.pdf
Source3: http://users.tkk.fi/~pat/%{name}/%{name}_bm.pdf
Source4: http://users.tkk.fi/~pat/%{name}/basic.c
Source5: http://users.tkk.fi/~pat/%{name}/hamming.c
Source6: http://users.tkk.fi/~pat/%{name}/poly.c
Source7: http://users.tkk.fi/~pat/%{name}/tetromino.h
License: GPL-2.0-or-later
URL: https://users.aalto.fi/~pat/cliquer.html
Source0: https://github.com/dimpase/autocliquer/releases/download/v%{version}/%{name}-%{version}.tar.gz
Source1: http://users.aalto.fi/~pat/%{name}/%{name}_fm.pdf
Source2: http://users.aalto.fi/~pat/%{name}/%{name}.pdf
Source3: http://users.aalto.fi/~pat/%{name}/%{name}_bm.pdf
# Man page formatting by Jerry James, text from the sources
Source8: %{name}.1
# Sagemath patches and extra files. History can be found in related tracs at:
# http://trac.sagemath.org/sage_trac/ticket/6355
# http://trac.sagemath.org/sage_trac/ticket/5793
# A private email was also sent to cliquer author asking for any comments
# on Fedora cliquer review request and sagemath patches.
Source9: cl.h
Patch0: %{name}-sagemath.patch
Source4: %{name}.1
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
BuildRequires: gcc
BuildRequires: make
%description
The main cliquer package contains a command-line interface to the
cliquer library. Note that the upstream binary name is "cl", which is
too generic for Fedora. Therefore, the binary is named "cliquer".
The main cliquer package contains a command-line interface to the cliquer
library. Note that the upstream binary name is "cl", which is too generic for
Fedora. Therefore, the binary is named "cliquer".
%package libs
Summary: Library to find cliques in arbitrary weighted graphs
Group: Development/Libraries
%description libs
Cliquer is a set of C routines for finding cliques in an arbitrary
weighted graph. It uses an exact branch-and-bound algorithm developed
by Patric Östergård. It is designed with the aim of being efficient
while still being flexible and easy to use.
Cliquer is a set of C routines for finding cliques in an arbitrary weighted
graph. It uses an exact branch-and-bound algorithm developed by Patric
Östergård. It is designed with the aim of being efficient while still being
flexible and easy to use.
%package devel
Summary: Development files for cliquer
Group: Development/Libraries
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
%description devel
Development files for cliquer.
%prep
%setup -q
%autosetup -p1
cp -p %{SOURCE1} %{SOURCE2} %{SOURCE3} .
%patch0 -p1
mkdir example
sed 's|"cliquer.h"|<cliquer/cliquer.h>|' %{SOURCE4} > example/basic.c
sed 's|"cliquer.h"|<cliquer/cliquer.h>|' %{SOURCE5} > example/hamming.c
sed 's|"cliquer.h"|<cliquer/cliquer.h>|' %{SOURCE6} > example/poly.c
cp -p %{SOURCE7} example
%conf
sed -i \
's/59 Temple Place, Suite 330, Boston, MA 02111-1307/51 Franklin Street, Suite 500, Boston, MA 02110-1335/' \
LICENSE
COPYING
%build
# The distributed Makefile just builds a binary named "cl". However, the
# examples show that the internal code is clearly meant to be used as a
# library. So we build a library by hand.
gcc ${RPM_OPT_FLAGS} -fPIC -c cl.c
gcc ${RPM_OPT_FLAGS} -fPIC -c cliquer.c
gcc ${RPM_OPT_FLAGS} -fPIC -c graph.c
gcc ${RPM_OPT_FLAGS} -fPIC -c reorder.c
gcc ${RPM_OPT_FLAGS} -fPIC -shared -o libcliquer.so.%{version} \
-Wl,-soname=libcliquer.so.1 cl.o cliquer.o graph.o reorder.o
ln -s libcliquer.so.%{version} libcliquer.so.1
ln -s libcliquer.so.1 libcliquer.so
%configure --disable-static --disable-silent-rules
# Now build the binary
gcc ${RPM_OPT_FLAGS} -DENABLE_LONG_OPTIONS -DMAIN -c cl.c
gcc ${RPM_OPT_FLAGS} -o cliquer cl.o -L. -lcliquer
# Get rid of undesirable hardcoded rpaths; workaround libtool reordering
# -Wl,--as-needed after all the libraries.
sed -e 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' \
-e 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' \
-e 's|CC="\(.*g..\)"|CC="\1 -Wl,--as-needed"|' \
-i libtool
%make_build
%install
# Install the library
mkdir -p $RPM_BUILD_ROOT%{_libdir}
cp -pP libcliquer.so* $RPM_BUILD_ROOT%{_libdir}
chmod 0755 $RPM_BUILD_ROOT%{_libdir}/libcliquer.so.%{version}
%make_install
# Install the binary
mkdir -p $RPM_BUILD_ROOT%{_bindir}
install -m 0755 -p cliquer $RPM_BUILD_ROOT%{_bindir}/cliquer
# Add missing executable bit
chmod 0755 %{buildroot}%{_libdir}/libcliquer.so.1.*
# Install the header file
mkdir -p $RPM_BUILD_ROOT%{_includedir}/cliquer
cp -p %{SOURCE9} cliquer.h cliquerconf.h graph.h misc.h reorder.h set.h $RPM_BUILD_ROOT%{_includedir}/cliquer
# We do not want to install the examples
rm -fr %{buildroot}%{_datadir}/%{name}
# The name "cl" is very short and ambiguous
mv %{buildroot}%{_bindir}/cl %{buildroot}%{_bindir}/%{name}
# Install the man page
mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1
cp -p %{SOURCE8} $RPM_BUILD_ROOT%{_mandir}/man1
mkdir -p %{buildroot}%{_mandir}/man1
cp -p %{SOURCE4} %{buildroot}%{_mandir}/man1
%check
LD_LIBRARY_PATH=. make test CFLAGS="${RPM_OPT_FLAGS}"
%post libs -p /sbin/ldconfig
%postun libs -p /sbin/ldconfig
LD_LIBRARY_PATH=$PWD make test
%files
%doc cliquer*.pdf
@ -112,44 +84,14 @@ LD_LIBRARY_PATH=. make test CFLAGS="${RPM_OPT_FLAGS}"
%{_mandir}/man1/*
%files libs
%doc ChangeLog LICENSE README example
%{_libdir}/libcliquer.so.*
%doc ChangeLog README
%license COPYING
%{_libdir}/libcliquer.so.1{,.*}
%files devel
%{_includedir}/%{name}/
%{_libdir}/libcliquer.so
%{_libdir}/pkgconfig/libcliquer.pc
%changelog
* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1.21-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.21-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Sat Aug 16 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.21-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.21-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.21-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
* Wed Feb 13 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.21-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
* Wed Aug 15 2012 pcpa <paulo.cesar.pereira.de.andrade@gmail.com> - 1.21-4
- Do not hardcode version in shell commands (#825494)
- Correct permission of generated library and binary (#825494)
* Tue Aug 14 2012 pcpa <paulo.cesar.pereira.de.andrade@gmail.com> - 1.21-3
- Remove %%defattr from spec (#825494)
- Correct mixed spaces and tabs in spec (#825494)
- Correct FSF address (#825494)
- Update information about sagemath patches to upstream cliquer (#825494)
* Sat May 26 2012 pcpa <paulo.cesar.pereira.de.andrade@gmail.com> - 1.21-2
- Add sagemath patch interface
* Wed Nov 16 2011 Jerry James <loganjerry@gmail.com> - 1.21-1
- Initial RPM
%autochangelog

View file

@ -1,46 +0,0 @@
#include <stdio.h>
#include "cliquer.h"
/* Function for determining the Hamming distance between
two words, c1 and c2, of length n */
int distance(int c1, int c2, int n) {
int i, c, d;
d = 0;
c = c1 ^ c2;
for (i = 0; i < n; i++) {
if(c & 1) d++;
c >>= 1;
}
return d;
}
int main(int argc, char *argv[]) {
int i, j;
int n, M, d;
int order;
int nr;
graph_t *g;
if (argc!=4) {
fprintf(stderr,"%s <length> <size> <dist>\n",argv[0]);
return 1;
}
n = atoi(argv[1]);
M = atoi(argv[2]);
d = atoi(argv[3]);
/* no timer */
clique_default_options->time_function = NULL;
order = 1 << n;
g = graph_new(order);
for (i = 0; i < order; i++)
for (j = i+1; j < order; j++)
if(distance(i,j,n) >= d)
GRAPH_ADD_EDGE(g,i,j);
nr = clique_find_all(g,M,M,FALSE,clique_default_options);
printf("Number of codes: %d\n",nr);
return 0;
}

169
poly.c
View file

@ -1,169 +0,0 @@
/* poly.c (needs tetromino.h)
This program demonstrates packing
tetrominoes (pieces made of four squares of equal size arranged
with coincident sides) on an n x m board so that no more tetrominoes
can fit. It takes four command-line arguments:
poly n m min max
where n and m are the dimensions of the board and min and max are
passed to clique_find_all as the number of pieces to fit on the
board. For example,
poly 5 5 3 3
prints all the ways to fit three tetrominoes on a 5 x 5 board so that
no other tetrominoes could fit, and
poly 6 5 0 0
finds all the ways to fit as many pieces as possible on a 6 x 5 board.
This program was inspired by Solomon W. Golomb's Puzzle Column
"Placing Pentominoes on Boards" in the IEEE Information Theory Society
Newsletter, Vol. 52, No. 2, June 2002, p. 7. */
#include <stdio.h>
#include <stdlib.h>
#include "cliquer.h"
#define POLYSIZE 4
struct polynomino {
char *name;
int sizex, sizey;
char block[POLYSIZE*POLYSIZE+1];
};
#include "tetromino.h"
#define VALUE(p,x,y) ((p)*boardsize+(y)*boardx+(x))
#define PIECE(p) ((p)/(boardsize))
#define POSX(p) ((p)%boardx)
#define POSY(p) (((p)%(boardsize))/boardx)
static int boardx,boardy;
static int boardsize;
static int minpieces;
static int maxpieces;
static graph_t *generate_graph(void);
static boolean print_clique(set_t s, graph_t *g, clique_options *opts);
int main(int argc, char *argv[]) {
graph_t *g;
if (argc!=5) {
fprintf(stderr,"%s <size_x> <size_y> <min_pieces> "
"<max_pieces>\n",argv[0]);
return 1;
}
boardx=atoi(argv[1]);
boardy=atoi(argv[2]);
boardsize=boardx*boardy;
minpieces=atoi(argv[3]);
maxpieces=atoi(argv[4]);
if ((boardx <= 0) || (boardy <= 0) || (maxpieces<0) || (minpieces<0)) {
fprintf(stderr,"Illegal arguments.\n");
return 1;
}
printf("Gen graph...\n");
g=generate_graph();
printf("Testing...\n");
graph_test(g,stdout);
clique_default_options->output=stderr;
clique_default_options->user_function=print_clique;
clique_find_all(g,minpieces,maxpieces,TRUE,NULL);
return 0;
}
static boolean collides(int t1, int x1, int y1, int t2, int x2, int y2) {
int x,y;
for (x=MAX(x1,x2); x<MIN(x1+tetromino[t1].sizex,
x2+tetromino[t2].sizex); x++)
for (y=MAX(y1,y2); y<MIN(y1+tetromino[t1].sizey,
y2+tetromino[t2].sizey); y++)
if (tetromino[t1].block[(y-y1)*POLYSIZE+(x-x1)]=='#' &&
tetromino[t2].block[(y-y2)*POLYSIZE+(x-x2)]=='#')
return TRUE;
return FALSE;
}
static graph_t *generate_graph(void) {
graph_t *g;
int t1,t2,x1,x2,y1,y2;
g=graph_new(TETROMINOS*boardsize);
for (t1=0; t1<TETROMINOS; t1++) {
for (x1=0; x1<boardx; x1++) {
if (x1+tetromino[t1].sizex > boardx)
break;
for (y1=0; y1<boardy; y1++) {
if (y1+tetromino[t1].sizey > boardy)
break;
for (t2=0; t2<TETROMINOS; t2++) {
for (x2=0; x2<boardx; x2++) {
if (x2+tetromino[t2].sizex > boardx)
break;
for (y2=0; y2<boardy; y2++) {
if (y2+tetromino[t2].sizey > boardy)
break;
if (!collides(t1,x1,y1,t2,x2,y2))
GRAPH_ADD_EDGE(g,
VALUE(t1,x1,y1),
VALUE(t2,x2,y2));
}
}
}
}
}
}
return g;
}
static boolean print_clique(set_t s, graph_t *g, clique_options *opts) {
static char *buf=NULL;
int i,j,c,n;
int t,x,y;
if (buf==NULL) {
buf=malloc((boardx*2+1)*boardy+10);
}
c=0;
for (i=0; i<boardy; i++) {
for (j=0; j<boardx; j++) {
buf[c++]='.';
buf[c++]=' ';
}
buf[c++]='\n';
}
buf[c]=0;
n=-1;
c='A';
while ((n=set_return_next(s,n)) >= 0) {
t=PIECE(n);
x=POSX(n);
y=POSY(n);
if (x+tetromino[t].sizex > boardx)
return TRUE;
if (y+tetromino[t].sizey > boardy)
return TRUE;
for (i=0; i<POLYSIZE; i++) {
for (j=0; j<POLYSIZE; j++) {
if (tetromino[t].block[i+j*POLYSIZE]=='#') {
buf[(j+y)*(boardx*2+1)+(i+x)*2]=c;
}
}
}
c++;
}
printf("%d pieces:\n%s\n",set_size(s),buf);
return TRUE;
}

View file

@ -1,4 +1,4 @@
ac65de2c89134abe2be36542b9465b16 cliquer-1.21.tar.gz
92d68e23b023f5abf16da3e5b0636c1b cliquer.pdf
a8b8aa86460da3f68b9b403bb09bf0e0 cliquer_bm.pdf
7eb3790632ef86c7363b684e24e8b21c cliquer_fm.pdf
SHA512 (cliquer-1.23.tar.gz) = ba3af2de31bfc34a742af7ee6edead648b0acc2b47c2afcc3a408ffb651c4d424778bf1aa41dd843a3028c7d30f4daa15b15964b8fac2e1b36686eebc85acf3c
SHA512 (cliquer.pdf) = 00d0bbcef826b301a563121868aa63fc420857b162211c74c5d09750f6a6e3a17cf184b783b2517f7af87296c896f55073331d608799101d0377f679269d9f36
SHA512 (cliquer_bm.pdf) = 50a4114e99c806b2149d9397fb6cb78a45d9be12b6fabe9b787cee180a593ce12d47698056f4c4a387ee99fea099c9517441d05b8fbc346bc2a86777d2dfed6d
SHA512 (cliquer_fm.pdf) = a82947612f79aef90f6343f1c4d50977f42bd26c3548965092b9dcffd1003a525beeef5631fe85c5f5a779938e9f608b4cc6baffd75379d1ed92b48309cae9df

View file

@ -1,104 +0,0 @@
#define TETROMINOS 19
struct polynomino tetromino[TETROMINOS] = {
{ "straight", 1,4,
"# "
"# "
"# "
"# " },
{ "straight 90deg", 4,1,
"####"
" "
" "
" " },
{ "l", 2,3,
"# "
"# "
"## "
" " },
{ "l 90deg", 3,2,
" # "
"### "
" "
" " },
{ "l 180deg", 2,3,
"## "
" # "
" # "
" " },
{ "l 270deg", 3,2,
"### "
"# "
" "
" " },
{ "l mirror", 2,3,
" # "
" # "
"## "
" " },
{ "l mirror 90deg", 3,2,
"### "
" # "
" "
" " },
{ "l mirror 180deg", 2,3,
"## "
"# "
"# "
" " },
{ "l mirror 270deg", 3,2,
"# "
"### "
" "
" " },
{ "t", 3,2,
"### "
" # "
" "
" " },
{ "t 90 deg", 2,3,
"# "
"## "
"# "
" " },
{ "t 180 deg", 3,2,
" # "
"### "
" "
" " },
{ "t 270 deg", 2,3,
" # "
"## "
" # "
" " },
{ "square", 2,2,
"## "
"## "
" "
" " },
{ "skew", 3,2,
"## "
" ## "
" "
" " },
{ "skew 90deg", 2,3,
" # "
"## "
"# "
" " },
{ "skew mirror", 3,2,
" ## "
"## "
" "
" " },
{ "skew mirror 90deg", 2,3,
"# "
"## "
" # "
" " }
};