summaryrefslogtreecommitdiff
path: root/wscript
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2010-11-23 14:33:46 +0200
committerVicent Marti <tanoku@gmail.com>2010-11-24 00:23:15 +0200
commit5dc2bee1538ad5fc50abb8dd84fb9237f184a217 (patch)
tree6b5f4a225028db5237a97223f366f17308698d8a /wscript
parente06551e51c02b015d587c83e97187805b7759f6a (diff)
downloadlibgit2-5dc2bee1538ad5fc50abb8dd84fb9237f184a217.tar.gz
Fix compilation in Win32
Currently, libgit2 compiles and passes all tests under MinGW, and compiles but fails the test suite on MSVC 2010. Signed-off-by: Vicent Marti <tanoku@gmail.com>
Diffstat (limited to 'wscript')
-rw-r--r--wscript112
1 files changed, 44 insertions, 68 deletions
diff --git a/wscript b/wscript
index 3925ec953..6e82e0e77 100644
--- a/wscript
+++ b/wscript
@@ -2,8 +2,10 @@ from waflib.Context import Context
from waflib.Build import BuildContext, CleanContext, \
InstallContext, UninstallContext
-CFLAGS = ["-g", "-O2", "-Wall", "-Wextra"]
-ALL_LIBS = ['z', 'crypto']
+CFLAGS_UNIX = ["-g", "-O2", "-Wall", "-Wextra"]
+CFLAGS_WIN32 = ['/TC', '/W4', '/RTC1', '/Zi', '/nologo']
+
+ALL_LIBS = ['z', 'crypto', 'pthread']
def options(opt):
opt.load('compiler_c')
@@ -15,8 +17,26 @@ def configure(conf):
# default configuration for C programs
conf.load('compiler_c')
+ zlib_name = 'z'
+
+ conf.env.CFLAGS = CFLAGS_UNIX
+
+ if conf.env.DEST_OS == 'win32':
+ conf.env.PLATFORM = 'win32'
+
+ if conf.env.CC_NAME == 'msvc':
+ conf.env.CFLAGS = CFLAGS_WIN32
+ conf.env.DEFINES += ['WIN32', '_DEBUG', '_LIB']
+ zlib_name = 'zdll'
+
+ elif conf.env.CC_NAME == 'gcc':
+ conf.check(features='c cprogram', lib='pthread', uselib_store='pthread')
+
+ else:
+ conf.env.PLATFORM = 'unix'
+
# check for Z lib
- conf.check(features='c cprogram', lib='z', uselib_store='z')
+ conf.check(features='c cprogram', lib=zlib_name, uselib_store='z')
if conf.options.sha1 not in ['openssl', 'ppc', 'builtin']:
ctx.fatal('Invalid SHA1 option')
@@ -24,6 +44,10 @@ def configure(conf):
# check for libcrypto (openssl) if we are using its SHA1 functions
if conf.options.sha1 == 'openssl':
conf.check_cfg(package='libcrypto', args=['--cflags', '--libs'], uselib_store='crypto')
+ conf.env.DEFINES += ['OPENSSL_SHA1']
+
+ elif conf.options.sha1 == 'ppc':
+ conf.env.DEFINES += ['PPC_SHA1']
conf.env.sha1 = conf.options.sha1
@@ -48,70 +72,21 @@ def build(bld):
Options.commands = [bld.cmd + '-shared', bld.cmd + '-static'] + Options.commands
def build_library(bld, lib_str):
- import sys
-
directory = bld.path
- #------------------------------
- # Default values
- #------------------------------
-
sources = directory.ant_glob('src/*.c')
- flags = CFLAGS
- defines = []
- visibility = True
- os = 'unix'
-
-
- #------------------------------
- # OS-dependant configuration
- #------------------------------
-
- # Windows 32 (MSVC) platform configuration
- if sys.platform == 'win32':
- # windows configuration
- flags = flags + ['-TC', '-W4', '-RTC1', '-Zi']
- defines = defines = ['WIN32', '_DEBUG', '_LIB']
- visibility = False
- os = 'win32'
-
- # Windows 32 Cygwin configuration
- # (assume a POSIX-compilant system)
- elif sys.platform == 'cygwin':
- visibility = False
-
- # Windows 32 MinGW configuration (TODO)
- elif sys.platform == 'mingw':
- pass
# Compile platform-dependant code
# E.g. src/unix/*.c
# src/win32/*.c
- sources = sources + directory.ant_glob('src/%s/*.c' % os)
+ sources = sources + directory.ant_glob('src/%s/*.c' % bld.env.PLATFORM)
- # Disable visibility on W32 platform
- if not visibility:
- flags.append('-fvisibility=hidden')
-
-
- #------------------------------
- # SHA1 Methods Source
- #------------------------------
-
- # OpenSSL library
- if bld.env.sha1 == "openssl":
- defines.append('OPENSSL_SHA1')
-
- # builtin PPC methods
- elif bld.env.sha1 == "ppc":
- defines.append('PPC_SHA1')
+ # SHA1 methods source
+ if bld.env.sha1 == "ppc":
sources.append('src/ppc/sha1.c')
-
- # default builtins
else:
sources.append('src/block-sha1/sha1.c')
-
#------------------------------
# Build the main library
#------------------------------
@@ -121,16 +96,12 @@ def build_library(bld, lib_str):
source=sources,
target='git2',
includes='src',
- cflags=flags,
- defines=defines,
install_path='${LIBDIR}',
- use=ALL_LIBS # link with all the libs we know (z, openssl);
- # this is ignored for static builds
- # and for libraries which have been disabled
+ use=ALL_LIBS #if lib_str == 'cshlib' else []
)
# On Unix systems, build the Pkg-config entry file
- if os == 'unix':
+ if bld.env.PLATFORM == 'unix':
bld(rule="""sed -e 's#@prefix@#$(prefix)#' -e 's#@libdir@#$(libdir)#' < ${SRC} > ${TGT}""",
source='libgit2.pc.in',
target='libgit2.pc',
@@ -171,7 +142,7 @@ def build_tests(bld):
includes=['src', 'tests'],
defines=['TEST_TOC="%s.toc"' % test_name],
stlib=['git2'], # link with the git2 static lib we've just compiled'
- stlibpath=directory.find_node('build/static/').abspath(),
+ stlibpath=[directory.find_node('build/static/').abspath(), directory.abspath()],
use=['test_helper'] + ALL_LIBS # link with all the libs we know
# libraries which are not enabled won't link
)
@@ -191,17 +162,22 @@ class _run_tests(Context):
fun = 'run_tests'
def run_tests(ctx):
- test_folder = ctx.path.make_node('tests/tmp/')
+ import shutil
- for test in ctx.path.ant_glob('build/tests/t????-*'):
- test_folder.delete()
- test_folder.mkdir()
+ failed = False
+ test_folder = ctx.path.make_node('tests/tmp/')
+ test_folder.mkdir()
+ test_glob = 'build/tests/t????-*'
+ for test in ctx.path.ant_glob(test_glob, excl='build/tests/*.manifest'):
if ctx.exec_command(test.abspath(), cwd=test_folder.abspath()) != 0:
- ctx.fatal('Test run failed')
+ failed = True
break
- test_folder.delete()
+ shutil.rmtree(test_folder.abspath())
+
+ if failed:
+ ctx.fatal('Test run failed')
CONTEXTS = {