Fix manygen to work with msvc.

pull/342/head
Jussi Pakkanen 9 years ago
parent df37c79dc9
commit ec0a73b1e2
  1. 43
      test cases/common/103 manygen/subdir/manygen.py
  2. 8
      test cases/common/103 manygen/subdir/meson.build

@ -14,27 +14,30 @@ if not os.path.isdir(outdir):
sys.exit(1)
if shutil.which('cl'):
print('VS support not yet added.')
sys.exit(1)
libsuffix = '.lib'
is_vs = True
compiler = 'cl'
linker = 'lib'
else:
libsuffix = '.a'
is_vs = False
linker = 'ar'
compiler = shutil.which('gcc')
if compiler is None:
compiler = shutil.which('clang')
if compiler is None:
compiler = shutil.which('cc')
if compiler is None:
print('No known compilers found.')
sys.exit(1)
objsuffix = '.o'
libsuffix = '.a'
outo = os.path.join(outdir, funcname + objsuffix)
outa = os.path.join(outdir, funcname + libsuffix)
outh = os.path.join(outdir, funcname + '.h')
outc = os.path.join(outdir, funcname + '.c')
compiler = shutil.which('gcc')
if compiler is None:
compiler = shutil.which('clang')
if compiler is None:
compiler = shutil.which('cc')
if compiler is None:
print('No known compilers found.')
sys.exit(1)
linker = 'ar'
tmpc = 'diibadaaba.c'
tmpo = 'diibadaaba' + objsuffix
@ -55,15 +58,23 @@ open(tmpc, 'w').write('''int %s_in_obj() {
}
''' % funcname)
subprocess.check_call([compiler, '-c', '-o', outo, tmpc])
if is_vs:
subprocess.check_call([compiler, '/nologo', '/c', '/Fo' + outo, tmpc])
else:
subprocess.check_call([compiler, '-c', '-o', outo, tmpc])
open(tmpc, 'w').write('''int %s_in_lib() {
return 0;
}
''' % funcname)
subprocess.check_call([compiler, '-c', '-o', tmpo, tmpc])
subprocess.check_call([linker, 'csr', outa, tmpo])
if is_vs:
subprocess.check_call([compiler, '/nologo', '/c', '/Fo' + tmpo, tmpc])
subprocess.check_call([linker, '/NOLOGO', '/OUT:' + outa, tmpo])
else:
subprocess.check_call([compiler, '-c', '-o', tmpo, tmpc])
subprocess.check_call([linker, 'csr', outa, tmpo])
os.unlink(tmpo)
os.unlink(tmpc)

@ -1,7 +1,13 @@
gen = find_program('manygen.py')
if meson.get_compiler('c').get_id() == 'msvc'
outfiles = ['gen_func.lib', 'gen_func.c', 'gen_func.h', 'gen_func.o']
else
outfiles = ['gen_func.a', 'gen_func.c', 'gen_func.h', 'gen_func.o']
endif
generated = custom_target('manygen',
output : ['gen_func.a', 'gen_func.c', 'gen_func.h', 'gen_func.o'],
output : outfiles,
input : ['funcinfo.def'],
command : [gen, '@INPUT@', '@OUTDIR@'],
)

Loading…
Cancel
Save