summaryrefslogtreecommitdiff
path: root/wscript
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2010-11-21 02:59:53 +0200
committerVicent Marti <tanoku@gmail.com>2010-11-24 00:23:14 +0200
commitb2898c4500466e5385102a82e4e686792219c1be (patch)
tree4f5efa2d3583e12dba60816152c494fc7717d599 /wscript
parent357547fa1261b435c0f974aa8e839eb83247956d (diff)
downloadlibgit2-b2898c4500466e5385102a82e4e686792219c1be.tar.gz
Add more features to the build system
- Windows 32 compilation - Test system - Shared and static libraries Signed-off-by: Vicent Marti <tanoku@gmail.com>
Diffstat (limited to 'wscript')
-rw-r--r--wscript102
1 files changed, 87 insertions, 15 deletions
diff --git a/wscript b/wscript
index 0e514c8d1..0cc14d413 100644
--- a/wscript
+++ b/wscript
@@ -1,8 +1,14 @@
+from waflib.Context import Context
+from waflib.Build import BuildContext, CleanContext, \
+ InstallContext, UninstallContext
+
CFLAGS = ["-g", "-O2", "-Wall", "-Wextra"]
def options(opt):
opt.load('compiler_c')
- opt.add_option('--sha1', action='store', default='builtin', help='TODO')
+ opt.add_option('--sha1', action='store', default='builtin',
+ help="Use the builtin SHA1 routines (--sha1=builtin), the\
+PPC optimized version (--sha1=ppc) or the SHA1 functions from OpenSSH (--sha1=openssh)")
def configure(conf):
conf.load('compiler_c')
@@ -12,11 +18,19 @@ def configure(conf):
conf.env.sha1 = conf.options.sha1
-
def build(bld):
- import glob, sys
+ import sys
+
+ libs = { 'static' : 'cstlib', 'shared' : 'cshlib' }
- sources = glob.glob('src/*.c')
+ if bld.variant not in libs:
+ from waflib import Options
+ Options.commands = [bld.cmd + '-shared', bld.cmd + '-static'] + Options.commands
+ return
+
+ directory = bld.path
+
+ sources = directory.ant_glob('src/*.c')
flags = CFLAGS
defines = []
visibility = True
@@ -48,23 +62,81 @@ def build(bld):
if not visibility:
flags.append('-fvisibility=hidden')
- sources = sources + glob.glob('src/%s/*.c' % os)
+ sources = sources + directory.ant_glob('src/%s/*.c' % os)
- bld.stlib(
+ bld(features='c ' + libs[bld.variant],
source=sources,
target='git2',
includes='src',
cflags=flags,
- defines=defines
+ defines=defines,
+ inst_to='${LIBDIR}'
)
- bld.shlib(
- source=sources,
- target='git2',
- includes='src',
- cflags=flags,
- defines=defines
- )
+ bld.install_files('${PREFIX}/include/git', directory.ant_glob('src/git/*.h'))
+ if os == "unix":
+ bld.install_files('${PREFIX}/lib/pkgconfig', 'libgit2.pc')
+
+
+class _test(BuildContext):
+ cmd = 'test'
+ fun = 'test'
+
+def test(bld):
+ from waflib import Options
+ Options.commands = ['build-static', 'build-tests', 'run-tests'] + Options.commands
+
+class _build_tests(BuildContext):
+ cmd = 'build-tests'
+ fun = 'build_tests'
+ variant = 'tests'
+
+def build_tests(bld):
+ import os
+
+ directory = bld.path
+ bld.objects(source=['tests/test_helpers.c', 'tests/test_lib.c'], includes=['src', 'tests'], target='test_helper')
+
+ for test_file in directory.ant_glob('tests/t????-*.c'):
+ test_name, _ = os.path.splitext(os.path.basename(test_file.abspath()))
+
+ test_toc_file = directory.make_node('tests/%s.toc' % test_name)
+ if bld.cmd == 'clean':
+ test_toc_file.delete()
+ else:
+ test_toc = bld.cmd_and_log(['grep', 'BEGIN_TEST', test_file.abspath()], quiet=True)
+ test_toc_file.write(test_toc)
+
+ bld.program(
+ source=[test_file, 'tests/test_main.c'],
+ target=test_name,
+ includes=['src', 'tests'],
+ defines=['TEST_TOC="%s.toc"' % test_name],
+ stlib=['git2', 'z'],
+ stlibpath=[directory.abspath(), 'build'],
+ use='test_helper')
+
+class _run_tests(Context):
+ cmd = 'run-tests'
+ fun = 'run_tests'
+
+def run_tests(ctx):
+ test_folder = ctx.path.make_node('tests/tmp/')
+
+ for test in ctx.path.ant_glob('build/tests/t????-*'):
+ test_folder.delete()
+ test_folder.mkdir()
+
+ if ctx.exec_command(test.abspath(), cwd=test_folder.abspath()) != 0:
+ ctx.fatal('Test run failed')
+ break
+
+ test_folder.delete()
- bld.install_files('${PREFIX}/include/git', glob.glob('src/git/*.h'))
+for var in ('static', 'shared'):
+ for ctx in (BuildContext, CleanContext, InstallContext, UninstallContext):
+ name = ctx.__name__.replace('Context', '').lower()
+ class _genclass(ctx):
+ cmd = name + '-' + var
+ variant = var