2 # Setup file for bzr-svn
3 # Copyright (C) 2005-2008 Jelmer Vernooij <jelmer@samba.org>
5 from distutils.core import setup
6 from distutils.extension import Extension
11 _libs = ['svn_subr-1', 'svn_client-1',
12 'svn_ra-1', 'svn_ra_dav-1', 'svn_ra_local-1', 'svn_ra_svn-1',
13 'svn_repos-1', 'svn_wc-1', 'svn_delta-1', 'svn_diff-1', 'svn_fs-1',
14 'svn_repos-1', 'svn_fs_fs-1', 'svn_fs_base-1']
16 def apr_build_data(self):
17 return (self._apr_include_dirs(), self._apr_lib_dirs(), '')
19 def svn_build_data(self):
20 return (self._svn_include_dirs(), self._svn_lib_dirs())
22 class PosixBuildData(BuildData):
23 class CommandException(Exception):
24 """Encapsulate exit status of apr-config execution"""
25 def __init__(self, msg, cmd, arg, status, val):
26 self.message = msg % (cmd, val)
27 super(CommandException, self).__init__(self.message)
32 return os.WIFEXITED(self.status) and os.WEXITSTATUS(self.status) == 127
34 def run_cmd(cmd, arg):
35 """Run specified command with given arguments, handling status"""
36 f = os.popen("'%s' %s" % (cmd, arg))
37 dir = f.read().rstrip("\n")
41 if os.WIFEXITED(status):
42 code = os.WEXITSTATUS(status)
45 raise CommandException("%s exited with status %d",
46 cmd, arg, status, code)
47 if os.WIFSIGNALED(status):
48 signal = os.WTERMSIG(status)
49 raise CommandException("%s killed by signal %d",
50 cmd, arg, status, signal)
51 raise CommandException("%s terminated abnormally (%d)",
52 cmd, arg, status, status)
55 apr_config_cmd = os.getenv("APR_CONFIG")
56 if apr_config_cmd is None:
57 cmds = ["apr-config", "apr-1-config", "/usr/local/apr/bin/apr-config",
58 "/usr/local/bin/apr-config"]
61 res = run_cmd(cmd, arg)
64 except CommandException, e:
68 raise Exception("apr-config not found."
69 " Please set APR_CONFIG environment variable")
71 res = run_cmd(apr_config_cmd, arg)
75 """Determine the APR header file location."""
76 includedir = apr_config("--includedir")
77 if not os.path.isdir(includedir):
78 raise Exception("APR development headers not found")
79 ldflags = filter(lambda x: x != "", apr_config("--link-ld").split(" "))
80 return (includedir, ldflags)
83 """Determine the Subversion header file location."""
84 basedirs = ["/usr/local", "/usr"]
85 for basedir in basedirs:
86 includedir = os.path.join(basedir, "include/subversion-1")
87 if os.path.isdir(includedir):
88 return (includedir, [os.path.join(basedir, "lib")])
89 raise Exception("Subversion development files not found")
91 def libify(self, libname):
94 class WindowsBuildData(BuildData):
97 for i, v in enumerate(self._libs):
98 self._libs[i] = 'lib' + v
99 self._libs = self._libs + ['libapr', 'libapriconv', 'libaprutil', 'intl3_svn', 'advapi32', 'shell32',
105 def _apr_include_dirs(self):
106 return [r"C:\src\svn-win32-1.4.6\include\apr",
107 r"C:\src\svn-win32-1.4.6\include\apr-utils",
108 r"c:\src\svn-win32-1.4.6\include\apr-iconv"]
109 def _apr_lib_dirs(self):
110 stub = r"C:\src\svn-win32-1.4.6\lib"
111 return [stub + r'\apr',
112 stub + r'\apr-iconv',
115 def _svn_include_dirs(self):
116 return [r"C:\src\svn-win32-1.4.6\include",
117 r"c:\src\svn-win32-libintl"]
118 def _svn_lib_dirs(self):
119 return [r"c:\src\svn-win32-1.4.6\lib",
120 r"c:\src\svn-win32-libintl\lib",
121 r"C:\src\db4-win32-4.4.20\lib",
122 r"C:\Program Files\Microsoft Visual C++ Toolkit 2003\lib"]
127 def libify(self, libname):
128 return ('lib' + libname )
157 deps = WindowsBuildData()
159 deps = PosixBuildData()
161 (apr_includedir, apr_libdir, apr_ldflags) = deps.apr_build_data()
162 (svn_includedir, svn_libdir) = deps.svn_build_data()
164 def SvnExtension(name, *args, **kwargs):
165 kwargs["include_dirs"] = apr_includedir + svn_includedir
166 kwargs["library_dirs"] = svn_libdir + apr_libdir
167 kwargs["extra_link_args"] = apr_ldflags
168 return Extension("bzrlib.plugins.svn.%s" % name, *args, **kwargs)
171 setup(name='bzr-svn',
172 description='Support for Subversion branches in Bazaar',
173 keywords='plugin bzr svn',
175 url='http://bazaar-vcs.org/BzrForeignBranches/Subversion',
176 download_url='http://bazaar-vcs.org/BzrSvn',
178 author='Jelmer Vernooij',
179 author_email='jelmer@samba.org',
181 This plugin adds support for branching off and
182 committing to Subversion repositories from
185 package_dir={'bzrlib.plugins.svn':'.',
186 'bzrlib.plugins.svn.tests':'tests'},
187 packages=['bzrlib.plugins.svn',
188 'bzrlib.plugins.svn.mapping3',
189 'bzrlib.plugins.svn.tests'],
191 SvnExtension("client", ["client.c", "editor.c", "util.c", "ra.c", "wc.c"], libraries=[deps.lib_list()[x] for x in
192 [SVN_CLIENT, SVN_SUBR, APR, SVN_WC, SVN_RA, LIB_INTL, SVN_DELTA, APR_UTIL, SHELL, ADVAPI, SVN_DIFF, SVN_RA_LOCAL, SVN_RA_DAV, SVN_RA_SVN,
193 SVN_FS, SVN_REPO, NEON, SVN_FS_FS, SVN_FS_BASE, WINSOCK, XML, BDB]]),
194 SvnExtension("ra", ["ra.c", "util.c", "editor.c"], libraries=[deps.lib_list()[x] for x in [SVN_RA, SVN_DELTA, SVN_SUBR,
195 APR, SVN_RA_LOCAL, SVN_RA_DAV, SVN_RA_SVN, LIB_INTL, APR_UTIL, XML, SHELL, ADVAPI, SVN_FS, SVN_REPO, NEON, WINSOCK, SVN_FS_FS, SVN_FS_BASE, BDB]]),
196 SvnExtension("repos", ["repos.c", "util.c"], libraries=[deps.lib_list()[x] for x in [SVN_REPO, SVN_SUBR,
197 APR, LIB_INTL, SVN_FS, SVN_DELTA, APR_UTIL, SHELL, ADVAPI, SVN_FS_FS, SVN_FS_BASE, ZLIB, BDB, XML]]),
198 SvnExtension("wc", ["wc.c", "util.c", "editor.c"], libraries=[deps.lib_list()[x] for x in [SVN_WC, SVN_SUBR,
199 APR, LIB_INTL, SVN_DELTA, SVN_DIFF, APR_UTIL, XML, SHELL, ADVAPI]]),