aboutsummaryrefslogtreecommitdiff
path: root/sysutils/samesame
diff options
context:
space:
mode:
authorMartin Wilke <miwi@FreeBSD.org>2009-11-17 14:53:46 +0000
committerMartin Wilke <miwi@FreeBSD.org>2009-11-17 14:53:46 +0000
commit6ce04c7fc34a068196485c74bc9000e678e570d3 (patch)
tree1f197044486af166816438ab7a719126ab3c9666 /sysutils/samesame
parent8bd36732f241e457ecb728deb70657e9e9efede5 (diff)
downloadports-6ce04c7fc34a068196485c74bc9000e678e570d3.tar.gz
ports-6ce04c7fc34a068196485c74bc9000e678e570d3.zip
Notes
Diffstat (limited to 'sysutils/samesame')
-rw-r--r--sysutils/samesame/Makefile10
-rw-r--r--sysutils/samesame/distinfo6
-rw-r--r--sysutils/samesame/files/patch-src-configure.h11
-rw-r--r--sysutils/samesame/files/patch-src-main.cpp17
-rw-r--r--sysutils/samesame/files/patch-src-matchmatrix.cpp94
-rw-r--r--sysutils/samesame/files/patch-src-matchmatrix.h59
-rw-r--r--sysutils/samesame/files/patch-src-sizegroup.cpp168
7 files changed, 357 insertions, 8 deletions
diff --git a/sysutils/samesame/Makefile b/sysutils/samesame/Makefile
index 391c7c5c1605..67f40f3b764b 100644
--- a/sysutils/samesame/Makefile
+++ b/sysutils/samesame/Makefile
@@ -5,7 +5,7 @@
# $FreeBSD$
PORTNAME= samesame
-PORTVERSION= 1.5
+PORTVERSION= 1.6
CATEGORIES= sysutils
MASTER_SITES= http://samesame.kruijff.org/ \
${MASTER_SITE_LOCAL}
@@ -30,8 +30,8 @@ CONFIGURE_ARGS= --mandir="${MANPREFIX}/man" --prefix="${PREFIX}" \
USE_BZIP2= yes
OPTIONS= DEBUG "Enables debugging support" Off \
- DISK_STORAGE "Allows temporarily storage paths on disk" On \
- LOGIC "Determine results by using logic when posible" On \
+ DISK_STORAGE "Allows temporarily storage on disk" Off \
+ LOW_MEMORY_PROFILE "Low memory profile reduces functionality" Off \
TEST "Run quality assurance test" Off
.include <bsd.port.pre.mk>
@@ -44,8 +44,8 @@ CONFIGURE_ARGS+= --enable-debug
CONFIGURE_ARGS+= --enable-disk-storage
.endif
-.if defined(WITHOUT_LOGIC)
-CONFIGURE_ARGS+= --disable-logic
+.if defined(WITH_LOW_MEMORY_PROFILE)
+CONFIGURE_ARGS+= --enable-low-memory-profile
.endif
regression-test: build
diff --git a/sysutils/samesame/distinfo b/sysutils/samesame/distinfo
index bb052624c707..26051055b820 100644
--- a/sysutils/samesame/distinfo
+++ b/sysutils/samesame/distinfo
@@ -1,3 +1,3 @@
-MD5 (samesame-1.5.tar.bz2) = 5443c04b1d9c624f4aff39b5acaa38ef
-SHA256 (samesame-1.5.tar.bz2) = e91a94d05a23b378269d6408d3f3102f3216a47a4d0408013ac124dc65796e54
-SIZE (samesame-1.5.tar.bz2) = 109837
+MD5 (samesame-1.6.tar.bz2) = 51dc947ff92934876f43a13851c5339f
+SHA256 (samesame-1.6.tar.bz2) = ad9af477390a3f4017dcfbc3bee646401d4138b2c648bae7668ca039b165cea1
+SIZE (samesame-1.6.tar.bz2) = 110794
diff --git a/sysutils/samesame/files/patch-src-configure.h b/sysutils/samesame/files/patch-src-configure.h
new file mode 100644
index 000000000000..b0b91b7c2896
--- /dev/null
+++ b/sysutils/samesame/files/patch-src-configure.h
@@ -0,0 +1,11 @@
+--- src/configure.h Sun Nov 15 02:23:34 2009
++++ src/configure.h Mon Nov 16 02:34:14 2009
+@@ -9,7 +9,7 @@
+ /* If READ_ONLY_ONCES is defined the code will read each file only ones.
+ * If READ_ONLY_ONCES is not defined the code will use less memory.
+ */
+-#ifdef LOW_MEMORY_PROFILE
++#ifndef LOW_MEMORY_PROFILE
+ #define READ_ONLY_ONCES
+ #endif // LOW_MEMORY_PROFILE
+
diff --git a/sysutils/samesame/files/patch-src-main.cpp b/sysutils/samesame/files/patch-src-main.cpp
new file mode 100644
index 000000000000..674fb30ae2c2
--- /dev/null
+++ b/sysutils/samesame/files/patch-src-main.cpp
@@ -0,0 +1,17 @@
+--- src/main.cpp Sun Nov 15 00:06:17 2009
++++ src/main.cpp Mon Nov 16 14:09:26 2009
+@@ -375,8 +375,12 @@
+ size_t oldMinSize = minSize;
+ Holder holder;
+
+- // Reserve 1M memory for later (better memory management)
+- char *dummy = new char[1048576];
++ // Reserve memory for later (better memory management)
++#ifdef LOW_MEMORY_PROFILE
++ char *dummy = new char[1048576]; // 1 MB
++#else // LOW_MEMORY_PROFILE
++ char *dummy = new char[5 * 1048576]; // 5 MB
++#endif // LOW_MEMORY_PROFILE
+
+ // Stage1 - reading the input
+ if (S_VERBOSE_LEVEL2(flags))
diff --git a/sysutils/samesame/files/patch-src-matchmatrix.cpp b/sysutils/samesame/files/patch-src-matchmatrix.cpp
new file mode 100644
index 000000000000..06ebd731081e
--- /dev/null
+++ b/sysutils/samesame/files/patch-src-matchmatrix.cpp
@@ -0,0 +1,94 @@
+--- src/matchmatrix.cpp Sat Nov 14 04:27:23 2009
++++ src/matchmatrix.cpp Mon Nov 16 02:34:10 2009
+@@ -98,6 +98,50 @@
+ return arr[i][j - i];
+ }
+
++size_t MatchMatrix::getEqual(size_t i) const throw()
++{
++ if (i > n)
++ {
++ fprintf(stderr, "%s:%u i (%u) must be smaller then %u\n",
++ __FILE__, __LINE__, i, n);
++ exit(EXIT_FAILURE);
++ }
++ return equal[i];
++}
++
++int MatchMatrix::getFd(size_t i) const throw()
++{
++ if (i > n)
++ {
++ fprintf(stderr, "%s:%u i (%u) must be smaller then %u\n",
++ __FILE__, __LINE__, i, n);
++ exit(EXIT_FAILURE);
++ }
++ return fd[i];
++}
++
++void *MatchMatrix::getMm(size_t i) const throw()
++{
++ if (i > n)
++ {
++ fprintf(stderr, "%s:%u i (%u) must be smaller then %u\n",
++ __FILE__, __LINE__, i, n);
++ exit(EXIT_FAILURE);
++ }
++ return mm[i];
++}
++
++void MatchMatrix::increaseEqual(size_t i) const throw()
++{
++ if (i > n)
++ {
++ fprintf(stderr, "%s:%u i (%u) must be smaller then %u\n",
++ __FILE__, __LINE__, i, n);
++ exit(EXIT_FAILURE);
++ }
++ ++equal[i];
++}
++
+ void MatchMatrix::set(size_t i, size_t j, int result) throw()
+ {
+ if (i > n)
+@@ -114,6 +158,40 @@
+ }
+ arr[i][j - i] = result;
+ }
++
++void MatchMatrix::setEqual(size_t i, size_t x) throw()
++{
++ if (i > n)
++ {
++ fprintf(stderr, "%s:%u i (%u) must be smaller then %u\n",
++ __FILE__, __LINE__, i, n);
++ exit(EXIT_FAILURE);
++ }
++ equal[i] = x;
++}
++
++int MatchMatrix::setFd(size_t i, int x) throw()
++{
++ if (i > n)
++ {
++ fprintf(stderr, "%s:%u i (%u) must be smaller then %u\n",
++ __FILE__, __LINE__, i, n);
++ exit(EXIT_FAILURE);
++ }
++ return fd[i] = x;
++}
++
++void MatchMatrix::setMm(size_t i, void *x) throw()
++{
++ if (i > n)
++ {
++ fprintf(stderr, "%s:%u i (%u) must be smaller then %u\n",
++ __FILE__, __LINE__, i, n);
++ exit(EXIT_FAILURE);
++ }
++ mm[i] = x;
++}
++
+ #endif // DEBUG
+
+ void MatchMatrix::reset(size_t n) throw()
diff --git a/sysutils/samesame/files/patch-src-matchmatrix.h b/sysutils/samesame/files/patch-src-matchmatrix.h
new file mode 100644
index 000000000000..513bdb1e84e2
--- /dev/null
+++ b/sysutils/samesame/files/patch-src-matchmatrix.h
@@ -0,0 +1,59 @@
+--- src/matchmatrix.h Fri Nov 13 18:44:01 2009
++++ src/matchmatrix.h Mon Nov 16 02:30:30 2009
+@@ -28,12 +28,11 @@
+ {
+ size_t n;
+ signed char **arr;
+-
+-public:
+ size_t *equal;
+ int *fd;
+ void **mm;
+-
++
++public:
+ /**
+ * Creates a MatchMatrix that is able to store the match results of
+ * n elements.
+@@ -46,12 +45,41 @@
+ int get(size_t i, size_t j) const throw()
+ { return arr[i][j - i]; }
+
++ size_t getEqual(size_t i) const throw()
++ { return equal[i]; }
++
++ int getFd(size_t i) const throw()
++ { return fd[i]; }
++
++ void *getMm(size_t i) const throw()
++ { return mm[i]; }
++
++ void increaseEqual(size_t i) const throw()
++ { ++equal[i]; }
++
+ void set(size_t i, size_t j, int result) throw()
+ { arr[i][j - i] = result; }
+
++ void setEqual(size_t i, size_t x) throw()
++ { equal[i] = x; }
++
++ int setFd(size_t i, int x) throw()
++ { return fd[i] = x; }
++
++ void setMm(size_t i, void *x) throw()
++ { mm[i] = x; }
+ #else // DEBUG
+ int get(size_t i, size_t j) const throw();
++ size_t getEqual(size_t i) const throw();
++ int getFd(size_t i) const throw();
++ void *getMm(size_t i) const throw();
++
++ void increaseEqual(size_t i) const throw();
++
+ void set(size_t i, size_t j, int result) throw();
++ void setEqual(size_t i, size_t x) throw();
++ int setFd(size_t i, int x) throw();
++ void setMm(size_t i, void *x) throw();
+ #endif // DEBUG
+
+ /**
diff --git a/sysutils/samesame/files/patch-src-sizegroup.cpp b/sysutils/samesame/files/patch-src-sizegroup.cpp
new file mode 100644
index 000000000000..be64dd869f17
--- /dev/null
+++ b/sysutils/samesame/files/patch-src-sizegroup.cpp
@@ -0,0 +1,168 @@
+--- src/sizegroup.cpp Sat Nov 14 23:34:59 2009
++++ src/sizegroup.cpp Mon Nov 16 02:29:51 2009
+@@ -36,7 +36,7 @@
+ static struct SameGroupBuffer
+ {
+ size_t n, size, pagesize;
+- char *buffer;
++ char *buf;
+
+ SameGroupBuffer();
+ ~SameGroupBuffer();
+@@ -53,12 +53,12 @@
+ #else // LOW_MEMORY_PROFILE
+ size = 1 << 24;
+ #endif // LOW_MEMORY_PROFILE
+- buffer = new char[size];
++ buf = new char[size];
+ }
+
+ SameGroupBuffer::~SameGroupBuffer()
+ {
+- delete buffer;
++ delete buf;
+ }
+
+ void SameGroupBuffer::setN(size_t n)
+@@ -77,7 +77,7 @@
+ exit(EXIT_FAILURE);
+ }
+ #endif // DEBUG
+- return buffer + index * pagesize;
++ return buf + index * pagesize;
+ }
+ #endif // READ_ONLY_ONCES
+
+@@ -136,7 +136,7 @@
+ __FILE__, __LINE__);
+ exit(EXIT_FAILURE);
+ }
+-#endif
++#endif // DEBUG
+ for (size_t i = 0; i < n; ++i)
+ hash[i]->sort(compareFilename);
+ #ifdef DEBUG
+@@ -147,7 +147,7 @@
+ __FILE__, __LINE__);
+ exit(EXIT_FAILURE);
+ }
+-#endif
++#endif // DEBUG
+ hash.sort(compare);
+ }
+
+@@ -188,8 +188,6 @@
+ int (&f)(const SizeGroup &, const FileGroup &, const Filename &,
+ const FileGroup &, const Filename &, int),
+ size_t fileSize, size_t &nIdenticals,
+-#ifndef READ_ONLY_ONCES
+-#endif // READ_ONLY_ONCES
+ int flags, size_t &i, size_t &j, size_t &n,
+ FileGroup &left, FileGroup &right)
+ {
+@@ -213,7 +211,7 @@
+
+ #ifndef READ_ONLY_ONCES
+ // Do a physically check if we couldn't use logic
+- if (!(result))
++ if (!result)
+ {
+ result = left.fcmp(right, fileSize);
+ if (result > 0 && result & FILE_IDENTICAL)
+@@ -306,10 +304,6 @@
+ * If READ_ONLY_ONCES is not defined the code will use less memory.
+ */
+ #ifdef READ_ONLY_ONCES
+- size_t *equal = match.equal;
+- int *fd = match.fd;
+- void **mm = match.mm;
+-
+ // Open files
+ buffer.setN(n);
+ for (size_t i = 0; i < n; ++i)
+@@ -333,12 +327,15 @@
+ if (preCheck != NULL && preCheck(*this, *hash[i], *hash[j]))
+ {
+ match.set(i, j, FILE_DIFFERENT);
+- ++equal[i], ++equal[j];
++ match.increaseEqual(i);
++ match.increaseEqual(j);
+ }
+
+ // Open files
+- if (equal[i] < n -1 && (fd[i] = hash[i]->open(O_RDONLY)) < 0)
++ if (match.getEqual(i) < n -1 &&
++ match.setFd(i, hash[i]->open(O_RDONLY)) < 0)
+ match.set(i, n-1, FILE_OPEN1_ERROR);
++
+ }
+
+ // Compare the files
+@@ -350,50 +347,51 @@
+
+ // read pages
+ for (size_t i = 0; i < n; ++i)
+- if (match.get(i, n-1) >= 0 && equal[i] < n - 1)
++ if (match.get(i, n-1) >= 0 && match.getEqual(i) < n - 1)
+ if (USE_MMAP(fileSize))
+ {
+- mm[i] = mmap(0, size, PROT_READ, MAP_SHARED, fd[i], offset);
+- mm[i] = mmap(0, size, PROT_READ, MAP_SHARED, fd[i], offset);
+- if (mm[i] == MAP_FAILED)
++ void *mm = mmap(0, size, PROT_READ, MAP_SHARED, match.getFd(i), offset);
++ match.setMm(i, mm);
++ if (mm == MAP_FAILED)
+ match.set(i, n-1, FILE_READ1_ERROR);
+- posix_madvise(mm[i], size, POSIX_MADV_WILLNEED);
++ posix_madvise(mm, size, POSIX_MADV_WILLNEED);
+ }
+- else if (read(fd[i], buffer[i], size) < 0)
++ else if (read(match.getFd(i), buffer[i], size) < 0)
+ match.set(i, n-1, FILE_READ1_ERROR);
+
+ // compare pages
+ for (size_t i = 0; i < n; ++i)
+ {
+- if (equal[i] == n - 1 || match.get(i, n-1) < 0)
++ if (match.getEqual(i) == n - 1 || match.get(i, n-1) < 0)
+ continue;
+ for (size_t j = i + 1; j < n; ++j)
+ if (match.get(i, j) == FILE_DIFFERENT)
+ continue;
+ else if (memcmp(
+- USE_MMAP(fileSize) ? mm[i] : buffer[i],
+- USE_MMAP(fileSize) ? mm[j] : buffer[j],
++ USE_MMAP(fileSize) ? match.getMm(i) : buffer[i],
++ USE_MMAP(fileSize) ? match.getMm(j) : buffer[j],
+ size) != 0)
+ {
+ match.set(i, j, FILE_DIFFERENT);
+- ++equal[i], ++equal[j];
++ match.increaseEqual(i);
++ match.increaseEqual(j);
+ }
+ }
+
+ // unread?
+ for (size_t i = 0; i < n; ++i)
+- if (mm[i] != NULL)
++ if (match.getMm(i) != NULL)
+ {
+- posix_madvise(mm[i], size, POSIX_MADV_NORMAL);
+- munmap(mm[i], size);
+- mm[i] = NULL;
++ posix_madvise(match.getMm(i), size, POSIX_MADV_NORMAL);
++ munmap(match.getMm(i), size);
++ match.setMm(i, NULL);
+ }
+ }
+
+ // close files
+ for (size_t i = 0; i < n; ++i)
+- if (fd[i] != 0)
+- close(fd[i]);
++ if (!match.getFd(i) != 0)
++ close(match.getFd(i));
+
+ // mark identicals
+ for (size_t i = 0; i < n; ++i)