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