Add separate commands for all possible actions The build script now supports all the required features Signed-off-by: Vicent Marti <tanoku@gmail.com>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
diff --git a/wscript b/wscript
index 0cc14d4..873bb96 100644
--- a/wscript
+++ b/wscript
@@ -7,8 +7,8 @@ CFLAGS = ["-g", "-O2", "-Wall", "-Wextra"]
def options(opt):
opt.load('compiler_c')
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)")
+ help="Use the builtin SHA1 routines (builtin), the \
+PPC optimized version (ppc) or the SHA1 functions from OpenSSH (openssh)")
def configure(conf):
conf.load('compiler_c')
@@ -19,14 +19,22 @@ def configure(conf):
conf.env.sha1 = conf.options.sha1
def build(bld):
- import sys
- libs = { 'static' : 'cstlib', 'shared' : 'cshlib' }
+ if bld.variant == 'static':
+ build_library(bld, 'cstlib')
+
+ elif bld.variant == 'shared':
+ build_library(bld, 'cshlib')
+
+ elif bld.variant == 'tests':
+ build_tests(bld)
- if bld.variant not in libs:
+ else:
from waflib import Options
Options.commands = [bld.cmd + '-shared', bld.cmd + '-static'] + Options.commands
- return
+
+def build_library(bld, lib_str):
+ import sys
directory = bld.path
@@ -64,36 +72,30 @@ def build(bld):
sources = sources + directory.ant_glob('src/%s/*.c' % os)
- bld(features='c ' + libs[bld.variant],
+ bld(features=['c', lib_str],
source=sources,
target='git2',
includes='src',
cflags=flags,
defines=defines,
- inst_to='${LIBDIR}'
+ install_path='${LIBDIR}',
)
- bld.install_files('${PREFIX}/include/git', directory.ant_glob('src/git/*.h'))
- if os == "unix":
- bld.install_files('${PREFIX}/lib/pkgconfig', 'libgit2.pc')
-
+ if os == 'unix':
+ bld(rule="""sed -e 's#@prefix@#$(prefix)#' -e 's#@libdir@#$(libdir)#' < ${SRC} > ${TGT}""",
+ source='libgit2.pc.in',
+ target='libgit2.pc',
+ install_path='${LIBDIR}/pkgconfig',
+ )
-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'
+ bld.install_files('${PREFIX}/include/git', directory.ant_glob('src/git/*.h'))
def build_tests(bld):
import os
+ if bld.is_install:
+ return
+
directory = bld.path
bld.objects(source=['tests/test_helpers.c', 'tests/test_lib.c'], includes=['src', 'tests'], target='test_helper')
@@ -101,9 +103,9 @@ def build_tests(bld):
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':
+ if bld.cmd == 'clean-tests':
test_toc_file.delete()
- else:
+ elif bld.cmd == 'build-tests':
test_toc = bld.cmd_and_log(['grep', 'BEGIN_TEST', test_file.abspath()], quiet=True)
test_toc_file.write(test_toc)
@@ -113,9 +115,19 @@ def build_tests(bld):
includes=['src', 'tests'],
defines=['TEST_TOC="%s.toc"' % test_name],
stlib=['git2', 'z'],
- stlibpath=[directory.abspath(), 'build'],
+ stlibpath=directory.find_node('build/static/').abspath(),
use='test_helper')
+
+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 _run_tests(Context):
cmd = 'run-tests'
fun = 'run_tests'
@@ -133,10 +145,31 @@ def run_tests(ctx):
test_folder.delete()
-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
+
+CONTEXTS = {
+ 'build' : BuildContext,
+ 'clean' : CleanContext,
+ 'install' : InstallContext,
+ 'uninstall' : UninstallContext
+}
+
+def build_command(command):
+ ctx, var = command.split('-')
+ class _gen_command(CONTEXTS[ctx]):
+ cmd = command
+ variant = var
+
+build_command('build-static')
+build_command('build-shared')
+build_command('build-tests')
+
+build_command('clean-static')
+build_command('clean-shared')
+build_command('clean-tests')
+
+build_command('install-static')
+build_command('install-shared')
+
+build_command('uninstall-static')
+build_command('uninstall-shared')