1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
# librsync
librsync implements the rolling-checksum algorithm of remote file
synchronization that was popularized by the rsync utility.
This algorithm transfers the differences between 2 files without
needing both files on the same system.
librsync does *not* implement the rsync wire protocol. If you want to talk to
an rsync server to transfer files you'll need to shell out to `rsync`. librsync
is for building other programs that transfer files as efficiently as rsync. You
can use librsync to make backup tools, distribute binary patches to programs,
or sync directories to a server or between peers.
This tree also produces the `rdiff` command-line tool that exposes the key
operations of librsync: generating file signatures, generating the delta from a
signature to a new file, and applying the delta to regenerate the new file
given the old file.
## Copyright
librsync is Copyright 1999-2014 Martin Pool and others.
librsync is distributed under the GNU LGPL v2.1 (see COPYING), which basically
means that you can dynamically link librsync into non-GPL programs, but you
must redistribute the librsync source, with any modifications you have made.
librsync contains the BLAKE2 hash algorithm, written by Samuel Neves and
released under the CC0 public domain
dedication, <http://creativecommons.org/publicdomain/zero/1.0/>.
## Contact
librsync's home is
- https://github.com/librsync/librsync/
- http://librsync.sourcefrog.net/
There are two mailing lists:
- https://groups.google.com/forum/#!forum/librsync-announce
- https://groups.google.com/forum/#!forum/librsync
There are some questions and answers about librsync on stackoverflow.com tagged
`librsync`. That is a good place to start if you have questions.
## Requirements
To build librsync you will need:
* A C compiler and appropriate headers and libraries
* Make
* popt command line parsing library
Available from http://rpm5.org/files/popt/
* automake, libtool, and autoconf
## Compiling
If you're building from a git tree you must first create the autoconf files:
$ ./autogen.sh
To build and test librsync then do
$ ./configure
$ make all check
You can also do what's called a `VPATH` build, where the build products are
kept separate from the source tree:
$ mkdir _build # for example
$ cd _build
$ ../configure && make check
After building you can install `rdiff` and `librsync` for system-wide use. The
destination is controlled by `--prefix` and related options to `./configure`.
$ sudo make install
## Note for Windows
With cygwin you can build using gcc as under a normal unix system. It
is also possible to compile under cygwin using MSVC++. You must have
environment variables needed by MSCV set using the Vcvars32.bat
script. With these variables set, you just do;
$ ./configure.msc
$ make all check
The PCbuild directory contains a project and pre-generated config
files for use with the MSVC++ IDE. This should be enought to compile
rdiff.exe without requiring cygwin.
## Library Versions
librsync uses the GNU libtool library versioning system, so the filename
does not correspond to the librsync release. To show the library release
and version, use the librsyncinfo tool. See libversions.txt for more
information.
## Platforms
librsync should be widely portable. Patches to fix portability bugs are
welcome.
## Documentation
Documentation for the rdiff command-line tool:
- http://librsync.sourcefrog.net/doc/rdiff.html
- http://librsync.sourcefrog.net/doc/rdiff.pdf
and for the library:
- http://librsync.sourcefrog.net/doc/librsync.html
- http://librsync.sourcefrog.net/doc/librsync.pdf
These are all produced from the source tree.
## Debugging
If you are using GNU libc, you might like to use
MALLOC_CHECK_=2 ./rdiff
to detect some allocation bugs.
librsync has annotations for the SPLINT static checking tool.
## Testing
You can run the tests with `make check`.
Tests are automatically run at https://travis-ci.org/librsync/librsync.
|