1251881Speter               ======================================
2251881Speter                      INSTALLING SUBVERSION
3251881Speter                          A Quick Guide
4251881Speter               ======================================
5251881Speter
6369302Sdim$LastChangedDate: 2020-12-18 04:00:24 +0000 (Fri, 18 Dec 2020) $
7251881Speter
8251881Speter
9251881SpeterContents:
10251881Speter
11251881Speter     I. INTRODUCTION
12251881Speter       A. Audience
13251881Speter       B. Dependency Overview
14251881Speter       C. Dependencies in Detail
15251881Speter       D. Documentation
16251881Speter
17251881Speter    II. INSTALLATION
18289180Speter       A. Building from a Tarball
19251881Speter       B. Building the Latest Source under Unix
20251881Speter       C. Building under Unix in Different Directories
21251881Speter       D. Installing from a Zip or Installer File under Windows
22251881Speter       E. Building the Latest Source under Windows
23251881Speter
24251881Speter   III. BUILDING A SUBVERSION SERVER
25362181Sdim       A. Setting Up Apache Httpd
26362181Sdim       B. Making and Installing the Subversion Apache Server Module
27362181Sdim       C. Configuring Apache Httpd for Subversion
28251881Speter       D. Running and Testing
29251881Speter       E. Alternative:  'svnserve' and ra_svn
30251881Speter
31251881Speter    IV. PLATFORM-SPECIFIC ISSUES
32251881Speter       A. Windows XP
33251881Speter       B. Mac OS X
34251881Speter
35251881Speter     V. PROGRAMMING LANGUAGE BINDINGS (PYTHON, PERL, RUBY, JAVA)
36251881Speter
37251881Speter
38251881Speter
39251881SpeterI.    INTRODUCTION
40251881Speter      ============
41251881Speter
42251881Speter  A. Audience
43251881Speter
44251881Speter      This document is written for people who intend to build
45251881Speter      Subversion from source code.  Normally, the only people who do
46251881Speter      this are Subversion developers and package maintainers.
47251881Speter
48251881Speter      If neither of these labels fits you, we recommend you find an
49251881Speter      appropriate binary package of Subversion and install that.
50251881Speter      While the Subversion project doesn't officially release binary
51251881Speter      packages, a number of volunteers have made such packages
52251881Speter      available for different operating systems.  Most Linux and BSD
53251881Speter      distributions already have Subversion packages ready to go via
54251881Speter      standard packaging channels, and other volunteers have built
55251881Speter      'installers' for both Windows and OS X.  Visit this page for
56251881Speter      package links:
57251881Speter
58362181Sdim         https://subversion.apache.org/packages.html
59251881Speter
60251881Speter      For those of you who still wish to build from source, Subversion
61251881Speter      follows the Unix convention of "./configure && make", but it has
62251881Speter      a number of dependencies.
63251881Speter
64251881Speter
65251881Speter  B. Dependency Overview
66251881Speter
67251881Speter      You'll need the following build tools to compile Subversion:
68251881Speter
69251881Speter      * autoconf 2.59 or later (Unix only)
70251881Speter      * libtool 1.4 or later (Unix only)
71251881Speter      * a reasonable C compiler (gcc, Visual Studio, etc.)
72251881Speter
73251881Speter
74251881Speter      Subversion also depends on the following third-party libraries:
75251881Speter
76251881Speter      * libapr and libapr-util (REQUIRED for client and server)
77251881Speter
78251881Speter         The Apache Portable Runtime (APR) library provides an
79251881Speter         abstraction of operating-system level services such as file
80251881Speter         and network I/O, memory management, and so on.  It also
81251881Speter         provides convenience routines for things like hashtables,
82251881Speter         checksums, and argument processing.  While it was originally
83251881Speter         developed for the Apache HTTP server, APR is a standalone
84251881Speter         library used by Subversion and other products.  It is a
85251881Speter         critical dependency for all of Subversion; it's the layer
86251881Speter         that allows Subversion clients and servers to run on
87251881Speter         different operating systems.
88251881Speter
89251881Speter      * SQLite  (REQUIRED for client and server)
90251881Speter
91251881Speter         Subversion uses SQLite to manage some internal databases.
92251881Speter
93251881Speter      * libz  (REQUIRED for client and server)
94251881Speter
95251881Speter         Subversion uses zlib for compressing binary differences.
96251881Speter         These diff streams are used everywhere -- over the network,
97251881Speter         in the repository, and in the client's working copy.
98251881Speter
99362181Sdim      * utf8proc  (REQUIRED for client and server)
100362181Sdim      
101362181Sdim         Subversion uses utf8proc for UTF-8 support, including Unicode
102362181Sdim         normalization.
103251881Speter
104362181Sdim      * Apache Serf  (OPTIONAL for client)
105362181Sdim
106362181Sdim         The Apache Serf library allows the Subversion client to send HTTP
107251881Speter         requests.  This is necessary if you want your client to access
108251881Speter         a repository served by the Apache HTTP server.  There is an
109251881Speter         alternate 'svnserve' server as well, though, and clients
110251881Speter         automatically know how to speak the svnserve protocol.
111251881Speter         Thus it's not strictly necessary for your client to be able
112251881Speter         to speak HTTP... though we still recommend that your client
113251881Speter         be built to speak both HTTP and svnserve protocols.
114251881Speter
115251881Speter      * OpenSSL (OPTIONAL for client and server)
116251881Speter
117251881Speter         OpenSSL enables your client to access SSL-encrypted https://
118362181Sdim         URLs (using Apache Serf) in addition to unencrypted http:// URLs.
119251881Speter         To use SSL with Subversion's WebDAV server, Apache needs to be
120251881Speter         compiled with OpenSSL as well.
121251881Speter
122362181Sdim      * Netwide Assembler (OPTIONAL for client and server)
123251881Speter
124362181Sdim        The Netwide Assembler (NASM) is used to build the (optional)
125362181Sdim        assembler modules of OpenSSL.  As of OpenSSL 1.1.0 NASM is the
126362181Sdim        only supported assembler.
127251881Speter
128362181Sdim      * Berkeley DB (DEPRECATED and OPTIONAL for client and server)
129362181Sdim
130362181Sdim         When you create a repository, you have the option of
131362181Sdim         specifying a storage 'back-end' implementation.  Currently,
132362181Sdim         there are two options.  The newer and recommended one, known
133362181Sdim         as FSFS, does not require Berkeley DB.  FSFS stores data in a
134362181Sdim         flat filesystem.  The older implementation, known as BDB, has
135362181Sdim         been deprecated and is not recommended for new repositories,
136362181Sdim         but is still available.  BDB stores data in a Berkeley DB
137362181Sdim         database.  This back-end will only be available if the BDB
138362181Sdim         libraries are discovered at compile time.
139362181Sdim
140251881Speter      * libsasl (OPTIONAL for client and server)
141251881Speter
142251881Speter         If the Cyrus SASL library is detected at compile time, then
143251881Speter         the svn client (and svnserve server) will be able to utilize
144251881Speter         SASL to do various forms of authentication when speaking the
145251881Speter         svnserve protocol.
146251881Speter
147251881Speter      * Python, Perl, Java, Ruby  (OPTIONAL)
148251881Speter
149251881Speter         Subversion is mostly a collection of C libraries with
150251881Speter         well-defined APIs, with a small collection of programs that
151251881Speter         use the APIs.  If you want to build Subversion API bindings
152251881Speter         for other languages, you need to have those languages
153251881Speter         available at build time.
154251881Speter
155362181Sdim      * py3c (OPTIONAL, but REQUIRED for Python bindings)
156251881Speter
157362181Sdim        The Python 3 Compatibility Layer for C Extensions is required
158362181Sdim        to build the Python language bindings.
159362181Sdim
160362181Sdim      * KDE Framework 5, libsecret, GNOME Keyring (OPTIONAL for client)
161362181Sdim
162251881Speter         Subversion contains optional support for storing passwords in
163362181Sdim         KWallet via KDE Framework 5 libraries (preferred) or kdelibs4,
164362181Sdim         and GNOME Keyring via libsecret (preferred) or GNOME APIs.
165251881Speter
166289180Speter      * libmagic (OPTIONAL)
167251881Speter
168251881Speter         If the libmagic library is detected at compile time,
169251881Speter         it will be used to determine mime-types of binary files
170251881Speter         which are added to version control. Note that mime-types
171251881Speter         configured via auto-props or the mime-types-file option
172251881Speter         take precedence.
173251881Speter
174289180Speter
175289180Speter
176251881Speter  C. Dependencies in Detail
177251881Speter
178251881Speter      Subversion depends on a number of third party tools and libraries.
179251881Speter      Some of them are only required to run a Subversion server; others
180251881Speter      are necessary just for a Subversion client.  This section explains
181251881Speter      what other tools and libraries will be required so that Subversion
182251881Speter      can be built with the set of features you want.
183251881Speter
184251881Speter      On Unix systems, the './configure' script will tell you if you are
185251881Speter      missing the correct version of any of the required libraries or
186251881Speter      tools, so if you are in a real hurry to get building, you can skip
187251881Speter      straight to section II.  If you want to gather the pieces you will
188251881Speter      need before starting out, however, you should read the following.
189251881Speter
190251881Speter      If you're just installing a Subversion client, the Subversion
191251881Speter      team has created a script that downloads the minimal prerequisite
192251881Speter      libraries (Apache Portable Runtime, Sqlite, and Zlib).  The script,
193251881Speter      'get-deps.sh', is available in the same directory as this file.
194251881Speter      When run, it will place 'apr', 'apr-util', 'serf', 'zlib', and
195251881Speter      'sqlite-amalgamation' directories directly into your unpacked Subversion
196251881Speter      distribution.  With the exception of sqlite-amalgamation, they will
197251881Speter      still need to be configured, built and installed explicitly, and
198251881Speter      Subversion's own configure script may need to be told where to find
199251881Speter      them, if they were not installed in standard system locations.
200251881Speter
201362181Sdim      Note: there are optional dependencies (such as OpenSSL, swig, and httpd)
202251881Speter      which get-deps.sh does not download.
203251881Speter
204251881Speter      Note: Because previous builds of Subversion may have installed older
205251881Speter      versions of these libraries, you may want to run some of the cleanup
206251881Speter      commands described in section II.B before installing the following.
207251881Speter
208251881Speter
209369302Sdim      1.  Apache Portable Runtime 1.4 or newer  (REQUIRED)
210251881Speter
211251881Speter      Whenever you want to build any part of Subversion, you need the
212251881Speter      Apache Portable Runtime (APR) and the APR Utility (APR-util)
213251881Speter      libraries.
214251881Speter
215251881Speter      If you do not have a pre-installed APR and APR-util, you will need
216251881Speter      to get these yourself:
217251881Speter
218362181Sdim          https://apr.apache.org/download.cgi
219251881Speter
220251881Speter      On Unix systems, if you already have the APR libraries compiled and do
221251881Speter      not wish to regenerate them from source code, then Subversion needs to
222251881Speter      be able to find them.
223251881Speter
224251881Speter      There are a couple of options to "./configure" that tell it where
225251881Speter      to look for the APR and APR-util libraries. By default it will try
226251881Speter      to locate the libraries using apr-config and apu-config scripts.
227251881Speter      These scripts provide all the relevant information for the APR and
228251881Speter      APR-util installations.
229251881Speter
230251881Speter      If you want to specify the location of the APR library, you can use
231251881Speter      the "--with-apr=" option of "./configure". It should be able to find
232251881Speter      the apr-config script in the standard location under that directory
233251881Speter      (e.g. ${prefix}/bin).
234251881Speter
235251881Speter      Similarly, you can specify the location of APR-util using the
236251881Speter      "--with-apr-util=" option to "./configure". It will look for the
237251881Speter      apu-config script relative to that directory.
238251881Speter
239251881Speter      For example, if you want to use the APR libraries you built
240251881Speter      with the Apache httpd server, you could run:
241251881Speter
242251881Speter          $ ./configure --with-apr=/usr/local/apache2 \
243251881Speter            --with-apr-util=/usr/local/apache2  ...
244251881Speter
245251881Speter      Be sure to use a native Windows SVN client (as opposed to
246251881Speter      Cygwin's version) so that the .dsp files get carriage-returns at
247251881Speter      the ends of their lines.  Otherwise Visual Studio will complain
248251881Speter      that it doesn't recognize the .dsp files.
249251881Speter
250251881Speter      If you use APR libraries checked out from svn in an Unix
251251881Speter      environment, you need to run the 'buildconf' script in each
252251881Speter      library's directory, to regenerate the configure scripts and
253251881Speter      other files required for compiling the libraries:
254251881Speter
255251881Speter      $ cd apr; ./buildconf; ./configure ...; make; make install; cd ..
256251881Speter
257251881Speter      $ cd apr-util; ./buildconf; ./configure ...; make; make install; cd ..
258251881Speter
259251881Speter      Configure build and install both libraries before running Subversion's
260251881Speter      configure script.
261251881Speter
262251881Speter
263362181Sdim      2.  SQLite  (REQUIRED)
264251881Speter
265362181Sdim      Subversion requires SQLite version 3.8.2 or above.  You can meet this
266362181Sdim      dependency several ways:
267362181Sdim        * Use an SQLite amalgamation file.
268362181Sdim        * Specify an SQLite installation to use.
269362181Sdim        * Let Subversion find an installed SQLite.
270251881Speter
271362181Sdim      To use an SQLite-provided amalgamation, just drop sqlite3.c into
272362181Sdim      Subversion's sqlite-amalgamation/ directory, or point to it with the
273362181Sdim      --with-sqlite configure option.  This file also ships with the Subversion
274362181Sdim      dependencies distribution, or you can download it from SQLite:
275251881Speter
276362181Sdim          https://www.sqlite.org/download.html
277251881Speter
278251881Speter
279362181Sdim      3.  Zlib  (REQUIRED)
280362181Sdim
281362181Sdim      Subversion's binary-differencing engine depends on zlib for
282362181Sdim      compression.  Most Unix systems have libz pre-installed, but if
283362181Sdim      you need it, you can get it from
284362181Sdim
285362181Sdim          http://www.zlib.net/
286362181Sdim
287362181Sdim
288362181Sdim      4.  utf8proc  (REQUIRED)
289362181Sdim
290362181Sdim      Subversion uses utf8proc for UTF-8 support.  Configure will
291362181Sdim      attempt to locate utf8proc by default using pkg-config and known
292362181Sdim      paths.
293362181Sdim
294362181Sdim      If it is installed in a non-standard location, then use:
295362181Sdim
296362181Sdim        --with-utf8proc=/path/to/libutf8proc
297362181Sdim
298362181Sdim      Alternatively, a copy of utf8proc comes bundled with the
299362181Sdim      Subversion sources.  If configure should use the bundled copy,
300362181Sdim      use:
301362181Sdim
302362181Sdim        --with-utf8proc=internal
303362181Sdim
304362181Sdim
305362181Sdim      5.  autoconf 2.59 or newer (Unix only)
306362181Sdim
307251881Speter      This is required only if you plan to build from the latest source
308251881Speter      (see section II.B). Generally only developers would be doing this.
309251881Speter
310251881Speter
311362181Sdim      6.  libtool 1.4 or newer (Unix only)
312251881Speter
313251881Speter      This is required only if you plan to build from the latest source
314251881Speter      (see section II.B).
315251881Speter
316251881Speter      Note: Some systems (Solaris, for example) require libtool 1.4.3 or
317251881Speter      newer. The autogen.sh script knows about that.
318251881Speter
319251881Speter
320362181Sdim      7.  Apache Serf library 1.3.4 or newer (OPTIONAL)
321251881Speter
322251881Speter      If you want your client to be able to speak to an Apache
323251881Speter      server (via a http:// or https:// URL), you must link against
324362181Sdim      Apache Serf.  Though optional, we strongly recommend this.
325251881Speter
326251881Speter      In order to use ra_serf, you must install serf, and run Subversion's
327251881Speter      ./configure with the argument --with-serf.  If serf is installed in a
328251881Speter      non-standard place, you should use
329251881Speter
330251881Speter               --with-serf=/path/to/serf/install
331251881Speter
332251881Speter      instead.
333251881Speter
334362181Sdim      Apache Serf can be obtained via your system's package distribution
335362181Sdim      system or directly from https://serf.apache.org/.
336251881Speter
337362181Sdim      For more information on Apache Serf and Subversion's ra_serf, see the
338362181Sdim      file subversion/libsvn_ra_serf/README.
339251881Speter
340251881Speter
341362181Sdim      8.  OpenSSL  (OPTIONAL)
342362181Sdim
343362181Sdim      ### needs some updates. I think Apache Serf automagically handles
344251881Speter      ### finding OpenSSL, but we may need more docco here. and w.r.t
345251881Speter      ### zlib.
346251881Speter
347362181Sdim      The Apache Serf library has support for SSL encryption by relying on the
348251881Speter      OpenSSL library.
349251881Speter
350362181Sdim        a. Using OpenSSL on the client through Apache Serf
351251881Speter
352362181Sdim          On Unix systems, to build Apache Serf with OpenSSL, you need OpenSSL
353251881Speter          installed on your system, and you must add "--with-ssl" as a
354251881Speter          "./configure" parameter.  If your OpenSSL installation is hard
355362181Sdim          for Apache Serf to find, you may need to use
356362181Sdim          "--with-libs=/path/to/lib" in addition.  In particular, on Red Hat
357362181Sdim          (but not Fedora Core) it is necessary to specify
358362181Sdim          "--with-libs=/usr/kerberos" for OpenSSL to be found.  You can also
359362181Sdim          specify a path to the zlib library using "--with-libs".
360251881Speter
361251881Speter          Under Windows, you can specify the paths to these libraries by
362251881Speter          passing the options --with-zlib and --with-openssl to gen-make.py.
363251881Speter
364289180Speter        b. Using OpenSSL on the Apache server
365251881Speter
366251881Speter          You can also add support for these features to an Apache httpd
367251881Speter          server to be used for Subversion using the same support libraries.
368251881Speter          The Subversion build system will not provide them, however.  You
369251881Speter          add them by specifying parameters to the "./configure" script of
370251881Speter          the Apache Server instead.
371251881Speter
372251881Speter          For getting SSL on your server, you would add the "--enable-ssl"
373251881Speter          or "--with-ssl=/path/to/lib" option to Apache's "./configure"
374251881Speter          script.  Apache enables zlib support by default, but you can
375251881Speter          specify a nonstandard location for the library with the
376251881Speter          "--with-z=/path/to/dir" option.  Consult the Apache documentation
377251881Speter          for more details, and for other modules you may wish to install
378251881Speter          to enhance your Subversion server.
379251881Speter
380251881Speter      If you don't already have it, you can get a copy of OpenSSL,
381251881Speter      including instructions for building and packaging on both Unix
382251881Speter      systems and Windows, at:
383251881Speter
384362181Sdim          https://www.openssl.org/
385251881Speter
386251881Speter
387362181Sdim      9.  Berkeley DB 4.X  (DEPRECATED and OPTIONAL)
388251881Speter
389362181Sdim      You need the Berkeley DB libraries only if you are building a
390362181Sdim      Subversion server that supports the older BDB repository storage
391362181Sdim      back-end, or a Subversion client that can access local BDB
392362181Sdim      repositories via the file:// URI scheme.
393251881Speter
394362181Sdim      The BDB back-end has been deprecated and is not recommended for
395362181Sdim      new repositories.  BDB may be removed in Subversion 2.0.  We
396362181Sdim      recommend the newer FSFS back-end for all new repositories.
397362181Sdim      FSFS does not require the Berkeley DB libraries.
398251881Speter
399362181Sdim      If in doubt, the 'svnadmin info' command, added in Subversion
400362181Sdim      1.9, can identify whether an existing repository uses BDB or
401362181Sdim      FSFS.
402362181Sdim
403362181Sdim      The current recommended version of Berkeley DB is 4.4.20 or
404362181Sdim      newer, which brings auto-recovery functionality to the Berkeley
405362181Sdim      DB database environment.
406362181Sdim
407251881Speter      If you must use an older version of Berkeley DB, we *strongly*
408251881Speter      recommend using 4.3 or 4.2 over the 4.1 or 4.0 versions.  Not
409251881Speter      only are these significantly faster and more stable, but they
410251881Speter      also enable Subversion repositories to automatically clean up
411251881Speter      database journal files to save disk space.
412251881Speter
413251881Speter      You'll need Berkeley DB installed on your system.  You can
414251881Speter      get it from:
415251881Speter
416362181Sdim      http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/overview/index.html
417251881Speter
418251881Speter      If you have Berkeley DB installed in a place not searched by default
419251881Speter      for includes and libraries, add something like this:
420251881Speter
421251881Speter          --with-berkeley-db=db.h:/usr/local/include/db4.7:/usr/local/lib/db4.7:db-4.7
422251881Speter
423251881Speter      to your `configure' switches, and the build process will use the
424251881Speter      Berkeley DB header and library in the named directories.  You may
425251881Speter      need to use a different path, of course.  Note that in order for
426251881Speter      the detection to succeed, the dynamic linker must be able to find
427251881Speter      the libraries at configure time.
428251881Speter
429251881Speter      If you are on the Windows platform and want to build Subversion,
430251881Speter      a precompiled version of the Berkeley DB library is available for
431251881Speter      download at the Subversion web site "Documents & files" area:
432251881Speter
433251881Speter          http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=688
434251881Speter
435251881Speter      Look in the "Releases > Windows > Windows BDB" section.
436251881Speter
437251881Speter
438362181Sdim      10. Cyrus SASL library (OPTIONAL)
439251881Speter
440251881Speter      If the Simple Authentication and Security Layer (SASL) library
441251881Speter      is detected on your system, then the Subversion client and
442251881Speter      svnserve server can utilize its abilities for various forms of
443251881Speter      authentication.  To learn more about SASL or to get the source
444251881Speter      code, visit:
445251881Speter
446251881Speter         http://freshmeat.net/projects/cyrussasl/
447251881Speter
448251881Speter
449362181Sdim      11. Apache Web Server 2.2.X or newer  (OPTIONAL)
450251881Speter
451362181Sdim          (https://httpd.apache.org/download.cgi)
452251881Speter
453251881Speter      The Apache httpd server is one of two methods to make your Subversion
454251881Speter      repository available over a network - the other is a custom server
455251881Speter      program called svnserve, which requires no extra software packages.
456251881Speter      Building Subversion, the Apache server, and the modules that Apache
457251881Speter      needs to communicate with Subversion are complicated enough that there
458251881Speter      is a whole section at the end of this document that describes how it
459251881Speter      is done: See section III for details.
460251881Speter
461251881Speter
462362181Sdim      12. Python 3.x or newer (https://www.python.org/)  (OPTIONAL)
463251881Speter
464362181Sdim      Subversion does not require Python for its basic operation.
465362181Sdim      However, Python is required for building and testing Subversion
466362181Sdim      and for using Subversion's SWIG Python bindings or hook scripts
467362181Sdim      coded in Python.
468251881Speter
469362181Sdim      The majority of Subversion's test suite is written in Python, as
470362181Sdim      is part of Subversion's build system.
471251881Speter
472362181Sdim      In more detail, Python is required to do any of the following:
473289180Speter
474362181Sdim      * Use the SWIG Python bindings.
475362181Sdim      * Use the ctypes Python bindings.
476362181Sdim      * Use hook scripts coded in Python.
477362181Sdim      * Build Subversion from a tarball on Unix-like systems and run
478362181Sdim        Subversion's test suite as described in section II.B.
479362181Sdim      * Build Subversion on Windows as described in section II.E.
480362181Sdim      * Build Subversion from a working copy checked out from
481362181Sdim        Subversion's own repository (whether or not running the test
482362181Sdim        suite).
483362181Sdim      * Build the SWIG Python bindings.
484362181Sdim      * Build the ctypes Python bindings.
485362181Sdim      * Testing as described in section III.D.
486251881Speter
487362181Sdim      The Python bindings are used by:
488251881Speter
489362181Sdim      * Third-party programs (e.g., ViewVC)
490362181Sdim      * Scripts distributed with Subversion itself in the tools/
491362181Sdim        subdirectory.
492362181Sdim      * Any in-house scripts you may have.
493251881Speter
494362181Sdim      Python is NOT required to do any of the following:
495251881Speter
496362181Sdim      * Use the core command-line binaries (svn, svnadmin, svnsync,
497362181Sdim        etc.)
498362181Sdim      * Use Subversion's C libraries.
499362181Sdim      * Use any of Subversion's other language bindings.
500362181Sdim      * Build Subversion from a tarball on Unix-like systems without
501362181Sdim        running Subversion's test suite
502251881Speter
503362181Sdim      Although this section calls for Python 3.x, Subversion still
504362181Sdim      technically works with Python 2.7.  However, Support for Python
505362181Sdim      2.7 is being phased out.  As of 1 January 2020, Python 2.7 has
506362181Sdim      reached end of life.  All users are strongly encouraged to move
507362181Sdim      to Python 3.
508251881Speter
509369302Sdim      Note: If you are using a Subversion distribution tarball and want
510369302Sdim      to build the Python bindings for Python 2, you should rebuild
511369302Sdim      the build environment in non-release mode by running
512369302Sdim      'sh autogen.sh' before running the ./configure script; see
513369302Sdim      section II.B for more about autogen.sh.
514251881Speter
515369302Sdim
516362181Sdim      13. Perl 5.8 or newer (Windows only)  (OPTIONAL)
517251881Speter
518362181Sdim      To build Subversion under any of the MS Windows platforms, you
519362181Sdim      will also need Perl 5.8 or newer to run apr-util's w32locatedb.pl
520362181Sdim      script.
521251881Speter
522362181Sdim
523362181Sdim      14. pkg-config  (Unix only, OPTIONAL)
524362181Sdim
525251881Speter      Subversion uses pkg-config to find appropriate options used
526251881Speter      at build time.
527251881Speter
528251881Speter
529362181Sdim      15. D-Bus  (Unix only, OPTIONAL)
530251881Speter
531251881Speter      D-Bus is a message bus system. D-Bus is required for support for KWallet
532251881Speter      and GNOME Keyring. pkg-config is needed to find D-Bus headers and library.
533251881Speter
534251881Speter
535362181Sdim      16. Qt 5 or Qt 4  (Unix only, OPTIONAL)
536251881Speter
537251881Speter      Qt is a cross-platform application framework. QtCore, QtDBus and QtGui
538251881Speter      modules are required for support for KWallet. pkg-config is needed
539251881Speter      to find Qt headers and libraries.
540251881Speter
541251881Speter
542362181Sdim      17. KDE 5 Framework libraries or KDELibs 4  (Unix only, OPTIONAL)
543251881Speter
544251881Speter      Subversion contains optional support for storing passwords in KWallet.
545362181Sdim      Subversion will look for KF5Wallet, KF5CoreAddons, KF5I18n APIs by default,
546362181Sdim      and needs kf5-config to find them. The KDELibs 4 api is also supported.
547251881Speter      KDELibs contains core KDE libraries. Subversion uses libkdecore and libkdeui
548251881Speter      libraries when support for KWallet is enabled. kde4-config is used to get
549251881Speter      some necessary options. pkg-config, D-Bus and Qt 4 are also required.
550362181Sdim
551251881Speter      If you want to build support for KWallet, then pass the '--with-kwallet'
552251881Speter      option to `configure`. If KDE is installed in a non-standard prefix, then
553251881Speter      use:
554251881Speter
555251881Speter          --with-kwallet=/path/to/KDE/prefix
556251881Speter
557251881Speter
558362181Sdim      18. GLib 2  (Unix only, OPTIONAL)
559362181Sdim
560251881Speter      GLib is a general-purpose utility library. GLib is required for support
561251881Speter      for GNOME Keyring. pkg-config is needed to find GLib headers and library.
562251881Speter
563251881Speter
564362181Sdim      19. GNOME Keyring  (Unix only, OPTIONAL)
565251881Speter
566251881Speter      Subversion contains optional support for storing passwords in GNOME Keyring.
567251881Speter      pkg-config is needed to find GNOME Keyring headers and library. D-Bus and
568251881Speter      GLib are also required. If you want to build support for GNOME Keyring,
569251881Speter      then pass the '--with-gnome-keyring' option to `configure`.
570251881Speter
571251881Speter
572362181Sdim      20. Ctypesgen  (OPTIONAL)
573251881Speter
574251881Speter      Ctypesgen is Python wrapper generator for ctypes. It is used to generate
575251881Speter      a part of Subversion Ctypes Python bindings (CSVN). If you want to build
576251881Speter      CSVN, then pass the '--with-ctypesgen' option to `configure`. If ctypesgen.py
577251881Speter      is installed in a non-standard place, then use:
578251881Speter
579251881Speter          --with-ctypesgen=/path/to/ctypesgen.py
580251881Speter
581251881Speter      For more information on CSVN, see subversion/bindings/ctypes-python/README.
582251881Speter
583251881Speter
584362181Sdim      21. libmagic (OPTIONAL)
585362181Sdim
586251881Speter      Subversion's configure script attempts to find libmagic automatically.
587251881Speter      If it is installed in a non-standard location, then use:
588251881Speter
589251881Speter        --with-libmagic=/path/to/libmagic/prefix
590251881Speter
591251881Speter      The files include/magic.h and lib/libmagic.so.1.0 (or similar)
592251881Speter      are expected beneath this prefix directory. If they cannot be
593251881Speter      found Subversion will be compiled without support for libmagic.
594251881Speter
595251881Speter      If libmagic is installed but support for it should not be compiled
596251881Speter      in, then use:
597251881Speter      
598251881Speter        --with-libmagic=no
599251881Speter
600251881Speter      If configure should fail when libmagic is not present, but only
601251881Speter      the default locations should be searched, then use:
602251881Speter
603251881Speter        --with-libmagic
604251881Speter
605289180Speter
606362181Sdim      22. LZ4 (OPTIONAL)
607289180Speter
608362181Sdim      Subversion uses LZ4 compression libary version r129 or above. Configure
609362181Sdim      will attempt to locate the system library by default using pkg-config
610362181Sdim      and known paths.
611289180Speter
612362181Sdim      If it is installed in a non-standard location, then use:
613362181Sdim
614362181Sdim        --with-lz4=/path/to/liblz4
615362181Sdim
616362181Sdim      If configure should use the version bundled with the sources, use:
617362181Sdim        --with-lz4=internal
618362181Sdim
619362181Sdim
620362181Sdim      23. py3c (OPTIONAL)
621362181Sdim
622362181Sdim      Subversion uses the Python 3 Compatibility Layer for C
623362181Sdim      Extensions (py3c) library when building the Python language
624362181Sdim      bindings.
625362181Sdim      
626362181Sdim      As py3c is a header-only library, it is needed only to build the
627362181Sdim      bindings, not to use them.
628362181Sdim
629362181Sdim      Configure will attempt to locate py3c by default using
630362181Sdim      pkg-config and known paths.
631362181Sdim
632362181Sdim      If it is installed in a non-standard location, then use:
633362181Sdim
634362181Sdim          --with-py3c=/path/to/py3c/prefix
635362181Sdim
636362181Sdim      The library can be downloaded from GitHub:
637362181Sdim
638362181Sdim          https://github.com/encukou/py3c
639362181Sdim      
640362181Sdim      On Unix systems, you can also use the provided get-deps.sh
641362181Sdim      script to download py3c and several other dependencies; see the
642362181Sdim      top of section I.C for more about get-deps.sh.
643362181Sdim
644362181Sdim
645251881Speter  D. Documentation
646251881Speter
647251881Speter      The primary documentation for Subversion is the free book
648251881Speter      "Version Control with Subversion", a.k.a. "The Subversion Book",
649251881Speter      obtainable from http://svnbook.red-bean.com/.
650251881Speter
651251881Speter      Various additional documentation exists in the doc/ subdirectory of
652251881Speter      the Subversion source.  See the file doc/README for more information.
653251881Speter
654251881Speter
655251881Speter
656251881SpeterII.   INSTALLATION
657251881Speter      ============
658251881Speter
659289180Speter  A.  Building from a Tarball
660251881Speter      ------------------------------
661251881Speter
662251881Speter      1.  Building from a Tarball
663251881Speter
664251881Speter      Download the most recent distribution tarball from:
665251881Speter
666362181Sdim          https://subversion.apache.org/download/
667251881Speter
668251881Speter      Unpack it, and use the standard GNU procedure to compile:
669251881Speter
670251881Speter          $ ./configure
671251881Speter          $ make
672251881Speter          # make install
673251881Speter
674289180Speter      You can also run the full test suite by running 'make check'.  Even
675289180Speter      in successful runs, some tests will report XFAIL; that is normal.
676289180Speter      Failed runs are indicated by FAIL or XPASS results, or a non-zero exit
677289180Speter      code from "make check".
678251881Speter
679251881Speter
680251881Speter  B.  Building the Latest Source under Unix
681251881Speter      -------------------------------------
682251881Speter
683251881Speter      These instructions assume you have already installed Subversion
684251881Speter      and checked out a working copy of Subversion's own code --
685251881Speter      either the latest /trunk code, or some branch or tag.  You also
686251881Speter      need to have already installed whatever prerequisites that
687251881Speter      version of Subversion requires (if you haven't, the ./configure
688251881Speter      step should complain).
689251881Speter
690251881Speter      You can discard the directory created by the tarball; you're
691251881Speter      about to build the latest, greatest Subversion client.  This is
692251881Speter      the procedure Subversion developers use.
693251881Speter
694251881Speter      First off, if you have any Subversion libraries lying around
695251881Speter      from previous 'make installs', clean them up first!
696251881Speter
697251881Speter          # rm -f /usr/local/lib/libsvn*
698251881Speter          # rm -f /usr/local/lib/libapr*
699251881Speter          # rm -f /usr/local/lib/libserf*
700251881Speter
701251881Speter      Start the process by running "autogen.sh":
702251881Speter
703251881Speter          $ sh ./autogen.sh
704251881Speter
705251881Speter      This script will make sure you have all the necessary components
706251881Speter      available to build Subversion.  If any are missing, you will be
707289180Speter      told where to get them from.  (See the 'Dependency Overview' in
708251881Speter      section I.)
709251881Speter
710251881Speter      Note: if the command "autoconf" on your machine does not run
711251881Speter      autoconf 2.59 or later, but you do have a new enough autoconf
712251881Speter      available, then you can specify the correct one with the
713251881Speter      AUTOCONF variable.  (The AUTOHEADER variable is similar.)  This
714251881Speter      may be required on Debian GNU/Linux, where "autoconf" is
715251881Speter      actually a Perl script that attempts to guess which version is
716251881Speter      required -- because of the interaction between Subversion's and
717251881Speter      APR's configuration systems, the Perl script may get it wrong.
718251881Speter      So for example, you might need to do:
719251881Speter
720251881Speter          $ AUTOCONF=autoconf2.59 sh ./autogen.sh
721251881Speter
722251881Speter      Once you've prepared the working copy by running autogen.sh,
723251881Speter      just follow the usual configuration and build procedure:
724251881Speter
725251881Speter          $ ./configure
726251881Speter          $ make
727251881Speter          # make install
728251881Speter
729251881Speter      (Optionally, you might want to pass --enable-maintainer-mode to
730251881Speter      the ./configure script.  This enables debugging symbols in your
731251881Speter      binaries (among other things) and most Subversion developers use it.)
732251881Speter
733251881Speter      Since the resulting binary depends on shared libraries, the
734251881Speter      destination library directory must be identified in your
735251881Speter      operating system's library search path. That is in either
736251881Speter      /etc/ld.so.conf or $LD_LIBRARY_PATH for Linux systems and in
737251881Speter      /etc/rc.conf for FreeBSD, followed by a run of the 'ldconfig'
738251881Speter      program. Check your system documentation for details. By
739251881Speter      identifying the destination directory, Subversion will be able
740251881Speter      to dynamically load repository access plugins.  If you try to do
741251881Speter      a checkout and see an error like:
742251881Speter
743251881Speter      subversion/libsvn_ra/ra_loader.c:209: (apr_err=170000)
744251881Speter      svn: Unrecognized URL scheme 'https://svn.apache.org/repos/asf/subversion/trunk'
745251881Speter
746251881Speter      It probably means that the dynamic loader/linker can't find all
747251881Speter      of the libsvn_* libraries.
748251881Speter
749251881Speter
750251881Speter  C.  Building under Unix in Different Directories
751251881Speter      --------------------------------------------
752251881Speter
753251881Speter      It is possible to configure and build Subversion on Unix in a
754251881Speter      directory other than the working copy. For example
755251881Speter
756251881Speter          $ svn co https://svn.apache.org/repos/asf/subversion/trunk svn
757251881Speter          $ cd svn
758251881Speter          $ # get SQLite amalgamation if required
759251881Speter          $ chmod +x autogen.sh
760251881Speter          $ ./autogen.sh
761251881Speter          $ mkdir ../obj
762251881Speter          $ cd ../obj
763251881Speter          $ ../svn/configure [...with options as appropriate...]
764251881Speter          $ make
765251881Speter
766251881Speter      puts the Subversion working copy in the directory svn and builds
767251881Speter      it in a separate, parallel directory obj.
768251881Speter
769251881Speter      Why would you want to do this? Well there are a number of
770251881Speter      reasons...
771251881Speter
772251881Speter          *  You may prefer to avoid "polluting" the working copy with
773251881Speter             files generated during the build.
774251881Speter
775251881Speter          *  You may want to put the build directory and the working
776251881Speter             copy on different physical disks to improve performance.
777251881Speter
778251881Speter          *  You may want to separate source and object code and only
779251881Speter             backup the source.
780251881Speter
781251881Speter          *  You may want to remote mount the working copy on multiple
782251881Speter             machines, and build for different machines from the same
783251881Speter             working copy.
784251881Speter
785251881Speter          *  You may want to build multiple configurations from the
786251881Speter             same working copy.
787251881Speter
788251881Speter      The last reason above is possibly the most useful.  For instance
789251881Speter      you can have separate debug and optimized builds each using the
790251881Speter      same working copy. Or you may want a client-only build and a
791251881Speter      client-server build. Using multiple build directories you can
792251881Speter      rebuild any or all configurations after an edit without the need
793251881Speter      to either clean and reconfigure, or identify and copy changes
794251881Speter      into another working copy.
795251881Speter
796251881Speter
797251881Speter  D.  Installing from a Zip or Installer File under Windows
798362181Sdim      -----------------------------------------------------
799251881Speter
800251881Speter      Of all the ways of getting a Subversion client, this is the
801362181Sdim      easiest.  Download a Zip or self-extracting installer via:
802251881Speter
803362181Sdim      https://subversion.apache.org/packages.html#windows
804251881Speter
805362181Sdim      For a Zip file extract the DLLs and EXEs to a directory of your
806362181Sdim      choice. Included in the download are among other tools the SVN
807362181Sdim      client, the SVNADMIN administration tool and the SVNLOOK reporting
808362181Sdim      tool.
809251881Speter
810362181Sdim      You may want to add the bin directory in the Subversion folder to your
811362181Sdim      PATH environment variable so as to not have to use the full path when
812362181Sdim      running Subversion commands.
813251881Speter
814251881Speter      To test the installation, open a DOS box (run either "cmd" or
815251881Speter      "command" from the Start menu's "Run..." menu option), change to
816251881Speter      the directory you installed the executables into, and run:
817251881Speter
818251881Speter          C:\test>svn co https://svn.apache.org/repos/asf/subversion/trunk svn
819251881Speter
820251881Speter      This will get the latest Subversion sources and put them into the
821251881Speter      "svn" subdirectory.
822251881Speter
823251881Speter      If using a self-extracting .exe file, just run it instead of
824251881Speter      unzipping it, to install Subversion.
825251881Speter
826251881Speter  E.  Building the Latest Source under Windows
827251881Speter      ----------------------------------------
828251881Speter
829251881Speter  E.1 Prerequisites
830251881Speter
831362181Sdim      * Microsoft Visual Studio. Any recent (2005+) version containing the
832362181Sdim        Visual C++ component will work (E.g. Professional, Express, Community
833362181Sdim        Edition). Make sure you enable C++ support during setup.
834362181Sdim      * Python 2.7 or higher, downloaded from https://www.python.org/ which is
835251881Speter        used to generate the project files.
836362181Sdim      * Perl 5.8 or higher from https://www.perl.org/get.html
837362181Sdim      * Awk (from https://www.cs.princeton.edu/~bwk/btl.mirror/awk95.exe) is
838362181Sdim        needed to compile Apache.  Note that this is the actual awk program,
839362181Sdim        not an installer - just rename it to awk.exe and it is ready to use.
840251881Speter      * Apache apr, apr-util, and optionally apr-iconv libraries, version
841369302Sdim        1.4 or later (1.2 for apr-iconv). If you are building from a Subversion
842251881Speter        checkout and have not downloaded Apache 2, then get these 3 libraries
843362181Sdim        from https://www.apache.org/dist/apr/.
844362181Sdim      * SQLite 3.8.2 or higher from https://www.sqlite.org/download.html
845362181Sdim        (3.8.11.1 or higher recommended)
846362181Sdim      * ZLib 1.2 or higher is required and can be obtained from
847362181Sdim        http://www.zlib.net/
848362181Sdim      * Either a Subversion client binary from
849362181Sdim        https://subversion.apache.org/packages.html to do the initial checkout
850362181Sdim        of the Subversion source or the zip file source distribution.
851251881Speter
852251881Speter      Additional Options
853251881Speter
854362181Sdim      * [Optional] Apache Httpd 2 source, downloaded from
855362181Sdim        https://httpd.apache.org/download.cgi, these instructions assume
856251881Speter        version 2.0.58.  This is only needed for building the Subversion
857289180Speter        server Apache modules.  ### FIXME Apache 2.2 or greater required.
858362181Sdim      * [Optional] Berkeley DB for backend support of the server components
859362181Sdim        are available from
860362181Sdim        http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index-082944.html
861362181Sdim        (Version 4.4.20 or in specific cases some higher version recommended)
862289180Speter        For more information see Section I.C.7.
863362181Sdim      * [Optional] Openssl can be obtained from https://www.openssl.org/source/
864362181Sdim      * [Optional] NASM can be obtained from http://www.nasm.us/
865251881Speter      * [Optional] A modified version of GNU libintl, called
866251881Speter        svn-win32-libintl.zip, can be used for displaying localized
867251881Speter        messages. Available at:
868251881Speter        http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=2627
869251881Speter      * [Optional] GNU gettext for generating message catalog (.mo)
870251881Speter        files from message translations. You can get the latest
871251881Speter        binaries from http://gnuwin32.sourceforge.net/. You'll need the
872251881Speter        binaries (gettext-0.14.1-bin.zip) and dependencies
873251881Speter        (gettext-0.14.1-dep.zip).
874251881Speter
875251881Speter  E.2 Notes
876251881Speter
877362181Sdim      The Apache Serf library supports secure connections with OpenSSL
878362181Sdim      and on-the-wire compression with zlib. If you want to use the
879251881Speter      secure connections feature, you should pass the option
880289180Speter      "--with-openssl" to the gen-make.py script. See Section I.C.6 for
881251881Speter      more details.
882251881Speter
883251881Speter  E.3 Preparation
884251881Speter
885251881Speter      This section describes how to unpack the files to make a build tree.
886251881Speter
887251881Speter      * Make a directory SVN and cd into it.
888251881Speter      * Either checkout Subversion:
889251881Speter
890251881Speter          svn co https://svn.apache.org/repos/asf/subversion/trunk src-trunk
891251881Speter
892251881Speter        or unpack the zip file distribution and rename the directory to
893251881Speter        src-trunk.
894251881Speter
895251881Speter      * Install Visual Studio Environment. You either have to tell the
896251881Speter        installer to register environment variables or run VCVARS32.BAT
897251881Speter        before building anything.  If you are using a newer Visual Studio,
898289180Speter        use the 'Visual Studio 20xx Command Prompt' on the Start menu.
899251881Speter      * Install Python and add it to your path
900251881Speter      * Install Perl (it should add itself to the path)
901362181Sdim        ### Subversion doesn't need perl. Only some dependencies need it
902362181Sdim            (OpenSSL and some apr scripts)
903251881Speter      * Copy AWK (awk95.exe) to awk.exe (e.g. SVN\awk\awk.exe) and add
904251881Speter        the directory containing it (e.g. SVN\awk) to the path.
905362181Sdim        ### Subversion doesn't need awk. Only some dependencies need it
906362181Sdim            (some apr scripts)
907362181Sdim      * [Optional] Install NASM and add it to your path
908362181Sdim        ### Subversion doesn't need NASM. Only some dependencies need it
909362181Sdim            optionally (OpenSSL)
910289180Speter      * [Optional] If you checked out Subversion from the repository and want
911289180Speter        to build Subversion with http/https access support then install the
912362181Sdim        Apache Serf sources into SVN\src-trunk\serf.
913289180Speter      * [Optional] If you want BDB backend support, extract the Berkeley DB
914289180Speter        files into SVN\src-trunk\db4-win32. It's a good idea to add
915251881Speter        SVN\src-trunk\db4-win32\bin to your PATH, so that Subversion can find
916251881Speter        the Berkeley DB DLLs.
917251881Speter
918251881Speter        [NOTE: This binary package of Berkeley DB is provided for
919251881Speter            convenience only. Please don't address questions about
920251881Speter            Berkeley DB that aren't directly related to using Subversion
921251881Speter            to the project mailing list.]
922251881Speter
923251881Speter        If you build Berkeley DB from the source, you will have to copy
924251881Speter        the file db-x.x.x\build_win32\db.h to
925251881Speter        SVN\src-trunk\db4-win32\include, and all the import libraries to
926251881Speter        SVN\src-trunk\db4-win32\lib. Again, the DLLs should be somewhere in
927251881Speter        your path.
928362181Sdim        ### Just use --with-serf instead of the hardcoded path
929251881Speter
930289180Speter      * [Optional] If you want to build the server modules, extract Apache
931289180Speter        source into SVN\httpd-2.x.x.
932251881Speter      * If you are building from a checkout of Subversion, and you are NOT
933251881Speter        building Apache, then you will need the APR libraries.  Depending
934251881Speter        on how you got your version of APR, either:
935251881Speter          - Extract the APR, APR-util and APR-iconv source distributions into
936251881Speter            SVN\apr, SVN\apr-util, and SVN\apr-iconv respectively.
937251881Speter        Or:
938251881Speter          - Extract the apr, apr-util and apr-iconv directories from the
939251881Speter            srclib folder in the Apache httpd source into SVN\apr,
940251881Speter            SVN\apr-util, and SVN\apr-iconv respectively.
941362181Sdim        ### Just use --with-apr, etc. instead of the hardcoded paths
942251881Speter      * Extract the ZLib sources into SVN\zlib if you are not using the zlib
943251881Speter        included in the dependencies zip file.
944362181Sdim        ### Just use --with-zlib instead of the hardcoded path
945362181Sdim      * [Optional] If you want secure connection (https) client support extract
946362181Sdim        OpenSSL into SVN\openssl
947362181Sdim        ### And pass the path to both serf and gen-make.py
948289180Speter      * [Optional] If you want localized message support, extract
949289180Speter        svn-win32-libintl.zip into SVN\svn-win32-libintl and extract
950289180Speter        gettext-x.x.x-bin.zip and gettext-x.x.x-dep.zip into
951289180Speter        SVN\gettext-x.x.x-bin.
952362181Sdim        Add SVN\gettext-x.x.x-bin\bin to your path.        
953362181Sdim      * Download the SQLite amalgamation from
954362181Sdim        https://www.sqlite.org/download.html
955362181Sdim        and extract it into SVN\sqlite-amalgamation.
956362181Sdim        See I.C.12 for alternatives to using the amalgamation package.
957251881Speter
958251881Speter  E.4 Building the Binaries
959251881Speter
960362181Sdim      To build the binaries either follow these instructions.
961251881Speter
962251881Speter      Start in the SVN directory you created.
963251881Speter
964251881Speter      Set up the environment (commands should be one line even if wrapped here).
965251881Speter
966251881Speter      C:>set VER=trunk
967251881Speter      C:>set DIR=trunk
968289180Speter      C:>set BUILD_ROOT=C:\SVN
969362181Sdim      C:>set PYTHONDIR=C:\Python27
970251881Speter      C:>set AWKDIR=C:\SVN\Awk
971251881Speter      C:>set ASMDIR=C:\SVN\asm
972289180Speter      C:>set SDKINC="C:\Program Files\Microsoft SDK\include"
973289180Speter      C:>set SDKLIB="C:\Program Files\Microsoft SDK\lib"
974251881Speter      C:>set GETTEXTBIN=C:\SVN\gettext-0.14.1-bin\bin
975289180Speter      C:>PATH=%PATH%;%BUILD_ROOT%\src-%DIR%\db4-win32;%ASMDIR%;
976251881Speter              %PYTHONDIR%;%AWKDIR%;%GETTEXTBIN%
977251881Speter      C:>set INCLUDE=%SDKINC%;%INCLUDE%
978251881Speter      C:>set LIB=%SDKLIB%;%LIB%
979251881Speter
980362181Sdim      OpenSSL < 1.1.0
981251881Speter
982362181Sdim      C:>cd openssl
983251881Speter      C:>perl Configure VC-WIN32
984251881Speter  [*] C:>call ms\do_masm
985251881Speter      C:>nmake -f ms\ntdll.mak
986251881Speter      C:>cd out32dll
987251881Speter      C:>call ..\ms\test
988251881Speter      C:>cd ..\..
989251881Speter
990251881Speter      *Note: Use "call ms\do_nasm" if you have nasm instead of MASM, or
991251881Speter             "call ms\do_ms" if you don't have an assembler.
992362181Sdim             Also if you are using OpenSSL >= 1.0.0 masm is no longer
993362181Sdim             supported. You will have to use do_nasm or do_ms in this case.
994251881Speter
995362181Sdim      OpenSSL >= 1.1.0
996362181Sdim
997362181Sdim      C:>cd openssl
998362181Sdim      C:>perl Configure VC-WIN32
999362181Sdim      C:>nmake
1000362181Sdim      C:>nmake test
1001362181Sdim      C:>cd ..
1002362181Sdim
1003251881Speter      Apache 2
1004251881Speter
1005251881Speter      This step is only required for building the server dso modules.
1006251881Speter
1007362181Sdim      ### FIXME Apache 2.2 or greater required. Old build instructions for VC6.
1008362181Sdim
1009251881Speter      C:>set APACHEDIR=C:\Program Files\Apache Group\Apache2
1010251881Speter      C:>msdev httpd-2.0.58\apache.dsw /MAKE "BuildBin - Win32 Release"
1011251881Speter
1012289180Speter      APR
1013289180Speter
1014289180Speter      If you downloaded APR / APR-UTIL / APR_ICONV by source, you will have to
1015289180Speter      build these libraries first.
1016289180Speter      Building these libraries on Windows is straight forward and in most cases
1017289180Speter      as simple as issuing these two commands:
1018289180Speter
1019289180Speter      C:>nmake -f Makefile.win
1020289180Speter      C:>nmake -f Makefile.win install
1021289180Speter
1022362181Sdim      Please refer to the build instructions provided by the library source
1023289180Speter      for actual build instructions.
1024289180Speter
1025289180Speter      ZLib
1026289180Speter
1027289180Speter      If you downloaded the zlib source, you will have to build ZLib first.
1028289180Speter      Building ZLib using Visual Studio should be quite simple. Just open the
1029289180Speter      appropriate solution and build the project zlibstat using the IDE.
1030289180Speter
1031362181Sdim      Please refer to the build instructions provided by the library source
1032289180Speter      for actual build instructions.
1033289180Speter
1034289180Speter      Note that you'd make sure to define ZLIB_WINAPI in the ZLib config
1035289180Speter      header and move the lib-file into the zlib root-directory.
1036289180Speter
1037362181Sdim      Apache Serf
1038289180Speter
1039362181Sdim      ### Section about Apache Serf might be required/useful to add.
1040362181Sdim      ### scons is required too and Apache Serf needs to be configured prior to
1041362181Sdim      ### be able to build Subversion using:
1042289180Speter      ### scons APR=[PATH_TO_APR] APU=[PATH_TO_APU] OPENSSL=[PATH_TO_OPENSSL]
1043289180Speter      ### ZLIB=[PATH_TO_ZLIB] PREFIX=[PATH_TO_SERF_DEST]
1044289180Speter      ### scons check
1045289180Speter      ### scons install
1046289180Speter
1047251881Speter      Subversion
1048251881Speter
1049251881Speter      Things to note:
1050251881Speter
1051251881Speter      * If you don't want to build mod_dav_svn, omit the --with-httpd
1052251881Speter        option.  The zip file source distribution contains apr, apr-util and
1053251881Speter        apr-iconv in the default build location. If you have downloaded the
1054251881Speter        apr files yourself you will have to tell the generator where to find
1055251881Speter        the APR libraries; the options are --with-apr, --with-apr-util and
1056251881Speter        --with-apr-iconv.
1057251881Speter      * If you would like a debug build substitute Debug for Release in
1058362181Sdim        the msbuild command.
1059251881Speter      * There have been rumors that Subversion on Win32 can be built
1060251881Speter        using the latest cygwin, you probably don't want the zip file source
1061251881Speter        distribution though. ymmv.
1062362181Sdim      * You will also have to distribute the C runtime dll with the binaries.
1063362181Sdim        Also, since Apache/APR do not provide .vcproj files, you will need to
1064362181Sdim        convert the Apache/APR .dsp files to .vcproj files with Visual Studio
1065362181Sdim        before building -- just open the Apache .dsw file and answer 'Yes To
1066362181Sdim        All' when the conversion dialog pops up, or you can open the individual
1067362181Sdim        .dsp files and convert them one at a time.
1068251881Speter        The Apache/APR projects required by Subversion are:
1069251881Speter        apr-util\libaprutil.dsp, apr\libapr.dsp,
1070251881Speter        apr-iconv\libapriconv.dsp, apr-util\xml\expat\lib\xml.dsp,
1071251881Speter        apr-iconv\ccs\libapriconv_ccs_modules.dsp, and
1072251881Speter        apr-iconv\ces\libapriconv_ces_modules.dsp.
1073251881Speter      * If the server dso modules are being built and tested Apache must not
1074251881Speter        be running or the copy of the dso modules will fail.
1075251881Speter
1076251881Speter      C:>cd src-%DIR%
1077251881Speter
1078251881Speter      If Apache 2 has been built and the server modules are required then
1079251881Speter      gen-make.py will already have been run. If the source is from the zip
1080251881Speter      file, Apache 2 has not been built so gen-make.py must be run:
1081251881Speter
1082362181Sdim      C:>python gen-make.py --vsnet-version=20xx --with-berkeley-db=db4-win32
1083362181Sdim          --with-openssl=..\openssl --with-zlib=..\zlib
1084251881Speter          --with-libintl=..\svn-win32-libintl
1085251881Speter
1086251881Speter      Then build subversion:
1087251881Speter
1088362181Sdim      C:>msbuild subversion_vcnet.sln /t:__MORE__ /p:Configuration=Release
1089251881Speter      C:>cd ..
1090251881Speter
1091251881Speter      The binaries have now been built.
1092251881Speter
1093251881Speter  E.5 Packaging the binaries
1094251881Speter
1095251881Speter      You now need to copy the binaries ready to make the release zip
1096251881Speter      file. You also need to do this to run the tests as the new binaries
1097251881Speter      need to be in your path. You can use the build/win32/make_dist.py
1098251881Speter      script in the Subversion source directory to do that.
1099251881Speter
1100251881Speter      [TBD: Describe how to do this. Note dependencies on zip, jar, doxygen.]
1101251881Speter
1102251881Speter  E.6 Testing the Binaries
1103251881Speter      [TBD: It's been a long, long while since it was necessary to move
1104251881Speter            binaries around for testing. win-tests.py does that automagically.
1105251881Speter            Fix this section accordingly, and probably reorder, putting
1106251881Speter            the packaging at the end.]
1107251881Speter
1108251881Speter      The build process creates the binary test programs but it does not
1109251881Speter      copy the client tests into the release test area.
1110251881Speter
1111251881Speter      C:>cd src-%DIR%
1112251881Speter      C:>mkdir Release\subversion\tests\cmdline
1113251881Speter      C:>xcopy /S /Y subversion\tests\cmdline Release\subversion\tests\cmdline
1114251881Speter
1115251881Speter      If the server dso modules  have been built then copy the dso files and
1116251881Speter      dlls into the Apache modules directory.
1117251881Speter
1118251881Speter      C:>copy Release\subversion\mod_dav_svn\mod_dav_svn.so "%APACHEDIR%"\modules
1119251881Speter      C:>copy Release\subversion\mod_authz_svn\mod_authz_svn.so
1120251881Speter         "%APACHEDIR%"\modules
1121251881Speter      C:>copy svn-win32-%VER%\bin\intl.dll "%APACHEDIR%\bin"
1122251881Speter      C:>copy svn-win32-%VER%\bin\iconv.dll "%APACHEDIR%\bin"
1123251881Speter      C:>copy svn-win32-%VER%\bin\libdb42.dll "%APACHEDIR%\bin"
1124251881Speter      C:>cd ..
1125251881Speter
1126251881Speter      Put the svn-win32-trunk\bin directory at the start of your path so
1127251881Speter      you run the newly built binaries and not another version you might
1128251881Speter      have installed.
1129251881Speter
1130251881Speter      Then run the client tests:
1131251881Speter
1132289180Speter      C:>PATH=%BUILD_ROOT%\svn-win32-%VER%\bin;%PATH%
1133251881Speter      C:>cd src-%DIR%
1134251881Speter      C:>python win-tests.py -c -r -v
1135251881Speter
1136251881Speter      If the server dso modules were built configure Apache to use the
1137251881Speter      mod_dav_svn and mod_authz_svn modules by making sure these lines appear
1138251881Speter      uncommented in httpd.conf:
1139251881Speter
1140251881Speter        LoadModule dav_module         modules/mod_dav.so
1141251881Speter        LoadModule dav_fs_module      modules/mod_dav_fs.so
1142251881Speter        LoadModule dav_svn_module     modules/mod_dav_svn.so
1143251881Speter        LoadModule authz_svn_module   modules/mod_authz_svn.so
1144251881Speter
1145251881Speter      And further down the file add location directives to point to the
1146251881Speter      test repositories. Change the paths to the SVN directory you created
1147251881Speter      (paths should be on one line even if wrapped here):
1148251881Speter
1149251881Speter        <Location /svn-test-work/repositories>
1150251881Speter         DAV svn
1151251881Speter         SVNParentPath C:/SVN/src-trunk/Release/subversion/tests/cmdline/
1152251881Speter                       svn-test-work/repositories
1153251881Speter        </Location>
1154251881Speter
1155251881Speter        <Location /svn-test-work/local_tmp/repos>
1156251881Speter         DAV svn
1157251881Speter         SVNPath c:/SVN/src-trunk/Release/subversion/tests/cmdline/
1158251881Speter                 svn-test-work/local_tmp/repos
1159251881Speter        </Location>
1160251881Speter
1161251881Speter      Then restart Apache and run the tests:
1162251881Speter
1163251881Speter      C:>python win-tests.py -c -r -v -u http://localhost
1164251881Speter      C:>cd ..
1165251881Speter
1166251881SpeterIII.  BUILDING A SUBVERSION SERVER
1167251881Speter      ============================
1168251881Speter
1169251881Speter      Subversion has two servers you can choose from:  svnserve and
1170251881Speter      Apache.  svnserve is a small, lightweight server program that is
1171251881Speter      automatically compiled when you build Subversion's source.  Apache
1172251881Speter      is a more heavyweight HTTP server, but tends to have more features.
1173251881Speter
1174251881Speter      This section primarily focuses on how to build Apache and the
1175251881Speter      accompanying mod_dav_svn server module for it.  If you plan to use
1176251881Speter      svnserve instead, jump right to section E for a quick explanation.
1177251881Speter
1178251881Speter
1179362181Sdim  A.  Setting Up Apache Httpd
1180362181Sdim      -----------------------
1181251881Speter
1182362181Sdim      1.  Obtaining and Installing Apache Httpd 2
1183251881Speter
1184251881Speter      Subversion tries to compile against the latest released version
1185298845Sdim      of Apache httpd 2.2+.  The easiest thing for you to do is download
1186251881Speter      a source tarball of the latest release and unpack that.
1187251881Speter
1188298845Sdim      If you have questions about the Apache httpd 2.2 build, please consult
1189251881Speter      the httpd install documentation:
1190251881Speter
1191362181Sdim          https://httpd.apache.org/docs-2.2/install.html
1192251881Speter
1193251881Speter      At the top of the httpd tree:
1194251881Speter
1195251881Speter          $ ./buildconf
1196251881Speter          $ ./configure --enable-dav --enable-so --enable-maintainer-mode
1197251881Speter
1198251881Speter      The first arg says to build mod_dav.
1199251881Speter
1200251881Speter      The second arg says to enable shared module support which is needed
1201251881Speter      for a typical compile of mod_dav_svn (see below).
1202251881Speter
1203251881Speter      The third arg says to include debugging information.  If you
1204251881Speter      built Subversion with --enable-maintainer-mode, then you should
1205251881Speter      do the same for Apache; there can be problems if one was
1206251881Speter      compiled with debugging and the other without.
1207251881Speter
1208251881Speter      Note: if you have multiple db versions installed on your system,
1209251881Speter      Apache might link to a different one than Subversion, causing
1210251881Speter      failures when accessing the repository through Apache.  To prevent
1211251881Speter      this from happening, you have to tell Apache which db version to
1212251881Speter      use and where to find db.  Add --with-dbm=db4 and
1213251881Speter      --with-berkeley-db=/usr/local/BerkeleyDB.4.2 to the configure
1214251881Speter      line.  Make sure this is the same db as the one Subversion uses.
1215251881Speter      This note assumes you have installed Berkeley DB 4.2.52
1216251881Speter      at its default locations.  For more info about the db requirement,
1217289180Speter      see section I.C.7.
1218251881Speter
1219251881Speter      You may also want to include other modules in your build. Add
1220251881Speter      --enable-ssl to turn on SSL support, and --enable-deflate to turn on
1221251881Speter      compression support, for example.  Consult the Apache documentation
1222251881Speter      for more details.
1223251881Speter
1224251881Speter      All instructions below assume you configured Apache to install
1225251881Speter      in its default location, /usr/local/apache2/; substitute
1226251881Speter      appropriately if you chose some other location.
1227251881Speter
1228251881Speter      Compile and install apache:
1229251881Speter
1230251881Speter          $ make && make install
1231251881Speter
1232251881Speter
1233251881Speter  B.  Making and Installing the Subversion Apache Server Module
1234251881Speter      ---------------------------------------------------------
1235251881Speter
1236251881Speter      Go back into your subversion working copy and run ./autogen.sh if
1237298845Sdim      you need to.  Then, assuming Apache httpd 2.2 is installed in the
1238251881Speter      standard location, run:
1239251881Speter
1240251881Speter          $ ./configure
1241251881Speter
1242251881Speter      Note: do *not* configure subversion with "--disable-shared"!
1243251881Speter      mod_dav_svn *must* be built as a shared library, and it will
1244251881Speter      look for other libsvn_*.so libraries on your system.
1245251881Speter
1246251881Speter      If you see a warning message that the build of mod_dav_svn is
1247298845Sdim      being skipped, this may be because you have Apache httpd 2.x
1248251881Speter      installed in a non-standard location.  You can use the
1249251881Speter      "--with-apxs=" option to locate the apxs script:
1250251881Speter
1251251881Speter          $ ./configure --with-apxs=/usr/local/apache2/bin/apxs
1252251881Speter
1253251881Speter      Note: it *is* possible to build mod_dav_svn as a static library
1254251881Speter      and link it directly into Apache. Possible, but painful. Stick
1255251881Speter      with the shared library for now; if you can't, then ask.
1256251881Speter
1257251881Speter          $ rm /usr/local/lib/libsvn*
1258251881Speter
1259251881Speter      If you have old subversion libraries sitting on your system,
1260251881Speter      libtool will link them instead of the `fresh' ones in your tree.
1261251881Speter      Remove them before building subversion.
1262251881Speter
1263251881Speter          $ make clean && make && make install
1264251881Speter
1265251881Speter      After the make install, the Subversion shared libraries are in
1266251881Speter      /usr/local/lib/.  mod_dav_svn.so should be installed in
1267257936Speter      /usr/local/libexec/ (or elsewhere, such as /usr/local/apache2/modules/,
1268257936Speter      if you passed --with-apache-libexecdir to configure).
1269251881Speter
1270251881Speter
1271251881Speter      Section II.E explains how to build the server on Windows.
1272251881Speter
1273251881Speter
1274362181Sdim  C.  Configuring Apache Httpd for Subversion
1275362181Sdim      ---------------------------------------
1276251881Speter
1277251881Speter      The following section is an abbreviated version of the
1278251881Speter      information in the Subversion Book
1279251881Speter      (http://svnbook.red-bean.com).  Please read chapter 6 for more
1280251881Speter      details.
1281251881Speter
1282251881Speter      The following assumes you have already created a repository.
1283251881Speter      For documentation on how to do that, see README.
1284251881Speter
1285251881Speter      The following also assumes that you have modified
1286251881Speter      /usr/local/apache2/conf/httpd.conf to reflect your setup.
1287251881Speter      At a minimum you should look at the User, Group and ServerName
1288251881Speter      directives.  Full details on setting up apache can be found at:
1289362181Sdim      https://httpd.apache.org/docs-2.2/
1290251881Speter
1291251881Speter      First, your httpd.conf needs to load the mod_dav_svn module.
1292257936Speter      If you pass --enable-mod-activation to Subversion's configure,
1293257936Speter      'make install' target should automatically add this line for you.
1294257936Speter      In any case, if Apache HTTPD gives you an error like "Unknown
1295251881Speter      DAV provider: svn", then you may want to verify that this line
1296251881Speter      exists in your httpd.conf:
1297251881Speter
1298251881Speter         LoadModule dav_svn_module     modules/mod_dav_svn.so
1299251881Speter
1300251881Speter      NOTE: if you built mod_dav as a dynamic module as well, make sure
1301251881Speter      the above line appears after the one that loads mod_dav.so.
1302251881Speter
1303251881Speter      Next, add this to the *bottom* of your httpd.conf:
1304251881Speter
1305251881Speter      <Location /svn/repos>
1306251881Speter          DAV svn
1307251881Speter          SVNPath /absolute/path/to/repository
1308251881Speter      </Location>
1309251881Speter
1310251881Speter      This will give anyone unrestricted access to the repository.  If
1311251881Speter      you want limited access, read or write, you add these lines to
1312251881Speter      the Location block:
1313251881Speter
1314251881Speter          AuthType Basic
1315251881Speter          AuthName "Subversion repository"
1316251881Speter          AuthUserFile /my/svn/user/passwd/file
1317251881Speter
1318251881Speter      And:
1319251881Speter
1320251881Speter          a) For a read/write restricted repository:
1321251881Speter
1322251881Speter             Require valid-user
1323251881Speter
1324251881Speter          b) For a write restricted repository:
1325251881Speter
1326251881Speter             <LimitExcept GET PROPFIND OPTIONS REPORT>
1327251881Speter                 Require valid-user
1328251881Speter             </LimitExcept>
1329251881Speter
1330251881Speter          c) For separate restricted read and write access:
1331251881Speter
1332251881Speter             AuthGroupFile /my/svn/group/file
1333251881Speter
1334251881Speter             <LimitExcept GET PROPFIND OPTIONS REPORT>
1335251881Speter                 Require group svn_committers
1336251881Speter             </LimitExcept>
1337251881Speter
1338251881Speter             <Limit GET PROPFIND OPTIONS REPORT>
1339251881Speter                 Require group svn_committers
1340251881Speter                 Require group svn_readers
1341251881Speter             </Limit>
1342251881Speter
1343298845Sdim      ### FIXME Tutorials section refers to old 2.0 docs
1344251881Speter      These are only a few simple examples.  For a complete tutorial
1345251881Speter      on Apache access control, please consider taking a look at the
1346251881Speter      tutorials found under "Security" on the following page:
1347362181Sdim      https://httpd.apache.org/docs-2.0/misc/tutorials.html
1348251881Speter
1349251881Speter      In order for 'svn cp' to work (which is actually implemented as a
1350251881Speter      DAV COPY command), mod_dav needs to be able to determine the
1351251881Speter      hostname of the server.  A standard way of doing this is to use
1352251881Speter      Apache's ServerName directive to set the server's hostname.  Edit
1353251881Speter      your /usr/local/apache2/conf/httpd.conf to include:
1354251881Speter
1355251881Speter      ServerName svn.myserver.org
1356251881Speter
1357251881Speter      If you are using virtual hosting through Apache's NameVirtualHost
1358251881Speter      directive, you may need to use the ServerAlias directive to specify
1359251881Speter      additional names that your server is known by.
1360251881Speter
1361251881Speter      If you have configured mod_deflate to be in the server, you can enable
1362251881Speter      compression support for your repository by adding the following line
1363251881Speter      to your Location block:
1364251881Speter
1365251881Speter          SetOutputFilter DEFLATE
1366251881Speter
1367251881Speter
1368251881Speter      NOTE: If you are unfamiliar with an Apache directive, or not exactly
1369251881Speter      sure about what it does, don't hesitate to look it up in the
1370362181Sdim      documentation: https://httpd.apache.org/docs-2.2/mod/directives.html.
1371251881Speter
1372251881Speter      NOTE: Make sure that the user 'nobody' (or whatever UID the
1373251881Speter      httpd process runs as) has permission to read and write the
1374251881Speter      Berkeley DB files!  This is a very common problem.
1375251881Speter
1376251881Speter
1377251881Speter  D.  Running and Testing
1378251881Speter      -------------------
1379251881Speter
1380251881Speter      Fire up apache 2:
1381251881Speter
1382251881Speter          $ /usr/local/apache2/bin/apachectl stop
1383251881Speter          $ /usr/local/apache2/bin/apachectl start
1384251881Speter
1385251881Speter      Check /usr/local/apache2/logs/error_log to make sure it started
1386251881Speter      up okay.
1387251881Speter
1388251881Speter      Try doing a network checkout from the repository:
1389251881Speter
1390251881Speter          $ svn co http://localhost/svn/repos wc
1391251881Speter
1392251881Speter      The most common reason this might fail is permission problems
1393251881Speter      reading the repository db files.  If the checkout fails, make
1394251881Speter      sure that the httpd process has permission to read and write to
1395251881Speter      the repository.  You can see all of mod_dav_svn's complaints in
1396251881Speter      the Apache error logfile, /usr/local/apache2/logs/error_log.
1397251881Speter
1398251881Speter      To run the regression test suite for networked Subversion, see
1399251881Speter      the instructions in subversion/tests/cmdline/README.
1400251881Speter      For advice about tracing problems, see "Debugging the server" in
1401362181Sdim      https://subversion.apache.org/docs/community-guide/.
1402251881Speter
1403251881Speter
1404251881Speter  E.  Alternative:  'svnserve' and ra_svn
1405251881Speter      -----------------------------------
1406251881Speter
1407251881Speter      An alternative network layer is libsvn_ra_svn (on the client
1408251881Speter      side) and the 'svnserve' process on the server.  This is a
1409251881Speter      simple network layer that speaks a custom protocol over plain
1410251881Speter      TCP (documented in libsvn_ra_svn/protocol):
1411251881Speter
1412251881Speter         $ svnserve -d     # becomes a background daemon
1413251881Speter         $ svn checkout svn://localhost/usr/local/svn/repository
1414251881Speter
1415251881Speter      You can use the "-r" option to svnserve to set a logical root
1416251881Speter      for repositories, and the "-R" option to restrict connections to
1417251881Speter      read-only access.  ("Read-only" is a logical term here; svnserve
1418251881Speter      still needs write access to the database in this mode, but will
1419251881Speter      not allow commits or revprop changes.)
1420251881Speter
1421251881Speter      'svnserve' has built-in CRAM-MD5 authentication (so you can use
1422251881Speter      non-system accounts), and can also be tunneled over SSH (so you
1423251881Speter      can use existing system accounts).  It's also capable of using
1424251881Speter      Cyrus SASL if libsasl2 is detected at ./configure time.  Please
1425251881Speter      read chapter 6 in the Subversion Book
1426251881Speter      (http://svnbook.red-bean.com) for details on these features.
1427251881Speter
1428251881Speter
1429251881Speter
1430251881SpeterIV.   PLATFORM-SPECIFIC ISSUES
1431251881Speter      ========================
1432251881Speter
1433251881Speter  A.  Windows XP
1434251881Speter      ----------
1435251881Speter
1436251881Speter      There is an error in the Windows XP TCP/IP stack which causes
1437251881Speter      corruption in certain cases.  This problem is exposed only
1438251881Speter      through ra_dav.
1439251881Speter
1440251881Speter      The root of the matter is caused by duplicating file handles
1441251881Speter      between parent and child processes.  The httpd Apache group
1442251881Speter      explains this a lot better:
1443251881Speter
1444362181Sdim          https://www.apache.org/dist/httpd/binaries/win32/#xpbug
1445251881Speter
1446251881Speter      And there's an item about this in the Subversion FAQ:
1447251881Speter
1448362181Sdim          https://subversion.apache.org/faq.html#windows-xp-server
1449251881Speter
1450251881Speter      The only known workaround for now is to update to Windows XP
1451251881Speter      SP1 (or higher).
1452251881Speter
1453251881Speter
1454251881Speter  B.  Mac OS X
1455251881Speter      --------
1456251881Speter
1457251881Speter      [TBD: Describe BDB 4.0.x problem]
1458251881Speter
1459251881Speter
1460251881Speter
1461251881SpeterV.    PROGRAMMING LANGUAGE BINDINGS (PYTHON, PERL, RUBY, JAVA)
1462251881Speter      ========================================================
1463251881Speter
1464251881Speter      For Python, Perl and Ruby bindings, see the file
1465251881Speter
1466251881Speter          ./subversion/bindings/swig/INSTALL
1467251881Speter
1468251881Speter      For Java bindings, see the file
1469251881Speter
1470251881Speter          ./subversion/bindings/javahl/README
1471