Don't rely on -fPIC being ignored where it's meaningless

clang considers it an error to try to use -fPIC for a windows target

v2:
'' isn't consistently elided, use []
pull/4573/head
Jon Turney 6 years ago
parent 6700a8bfd7
commit 65160a969e
No known key found for this signature in database
GPG Key ID: C7C86F0370285C81
  1. 6
      run_unittests.py
  2. 6
      test cases/common/143 C and CPP link/meson.build
  3. 8
      test cases/common/59 exe static shared/meson.build

@ -2165,7 +2165,9 @@ int main(int argc, char **argv) {
'/NOLOGO', '/DLL', '/DEBUG', '/IMPLIB:' + impfile, '/NOLOGO', '/DLL', '/DEBUG', '/IMPLIB:' + impfile,
'/OUT:' + outfile, objectfile] '/OUT:' + outfile, objectfile]
else: else:
extra_args += ['-fPIC'] if not (compiler.compiler_type.is_windows_compiler or
compiler.compiler_type.is_osx_compiler):
extra_args += ['-fPIC']
link_cmd = compiler.get_exelist() + ['-shared', '-o', outfile, objectfile] link_cmd = compiler.get_exelist() + ['-shared', '-o', outfile, objectfile]
if not mesonbuild.mesonlib.is_osx(): if not mesonbuild.mesonlib.is_osx():
link_cmd += ['-Wl,-soname=' + os.path.basename(outfile)] link_cmd += ['-Wl,-soname=' + os.path.basename(outfile)]
@ -3495,7 +3497,7 @@ class LinuxlikeTests(BasePlatformTests):
is true and not when it is false. This can't be an ordinary test case is true and not when it is false. This can't be an ordinary test case
because we need to inspect the compiler database. because we need to inspect the compiler database.
''' '''
if is_cygwin() or is_osx(): if is_windows() or is_cygwin() or is_osx():
raise unittest.SkipTest('PIC not relevant') raise unittest.SkipTest('PIC not relevant')
testdir = os.path.join(self.common_test_dir, '3 static') testdir = os.path.join(self.common_test_dir, '3 static')

@ -36,7 +36,11 @@ if cxx.get_argument_syntax() == 'msvc'
compile_cmd = ['/c', '@INPUT@', '/Fo@OUTPUT@'] compile_cmd = ['/c', '@INPUT@', '/Fo@OUTPUT@']
stlib_cmd = [static_linker, '/OUT:@OUTPUT@', '@INPUT@'] stlib_cmd = [static_linker, '/OUT:@OUTPUT@', '@INPUT@']
else else
compile_cmd = ['-c', '-fPIC', '@INPUT@', '-o', '@OUTPUT@'] picflag = []
if not ['darwin', 'windows'].contains(host_machine.system())
picflag = ['-fPIC']
endif
compile_cmd = ['-c', picflag, '@INPUT@', '-o', '@OUTPUT@']
stlib_cmd = ['ar', 'csr', '@OUTPUT@', '@INPUT@'] stlib_cmd = ['ar', 'csr', '@OUTPUT@', '@INPUT@']
endif endif

@ -1,8 +1,12 @@
project('statchain', 'c') project('statchain', 'c')
subdir('subdir') subdir('subdir')
# Test that -fPIC in c_args is also accepted # Test that -fPIC in c_args is also accepted (on platforms where it's permitted)
statlib2 = static_library('stat2', 'stat2.c', c_args : '-fPIC', pic : false) picflag = []
if not ['darwin', 'windows'].contains(host_machine.system())
picflag = ['-fPIC']
endif
statlib2 = static_library('stat2', 'stat2.c', c_args : picflag, pic : false)
# Test that pic is needed for both direct and indirect static library # Test that pic is needed for both direct and indirect static library
# dependencies of shared libraries (on Linux and BSD) # dependencies of shared libraries (on Linux and BSD)
statlib = static_library('stat', 'stat.c', link_with : [shlib, statlib2], pic : true) statlib = static_library('stat', 'stat.c', link_with : [shlib, statlib2], pic : true)

Loading…
Cancel
Save