xref: /aosp_15_r20/external/harfbuzz_ng/src/check-libstdc++.py (revision 2d1272b857b1f7575e6e246373e1cb218663db8a)
1*2d1272b8SAndroid Build Coastguard Worker#!/usr/bin/env python3
2*2d1272b8SAndroid Build Coastguard Worker
3*2d1272b8SAndroid Build Coastguard Workerimport sys, os, shutil, subprocess
4*2d1272b8SAndroid Build Coastguard Worker
5*2d1272b8SAndroid Build Coastguard Workeros.chdir (os.getenv ('srcdir', os.path.dirname (__file__)))
6*2d1272b8SAndroid Build Coastguard Worker
7*2d1272b8SAndroid Build Coastguard Workerlibs = os.getenv ('libs', '.libs')
8*2d1272b8SAndroid Build Coastguard Worker
9*2d1272b8SAndroid Build Coastguard Workerldd = os.getenv ('LDD', shutil.which ('ldd'))
10*2d1272b8SAndroid Build Coastguard Workerif not ldd:
11*2d1272b8SAndroid Build Coastguard Worker	otool = os.getenv ('OTOOL', shutil.which ('otool'))
12*2d1272b8SAndroid Build Coastguard Worker	if otool:
13*2d1272b8SAndroid Build Coastguard Worker		ldd = otool + ' -L'
14*2d1272b8SAndroid Build Coastguard Worker	else:
15*2d1272b8SAndroid Build Coastguard Worker		print ('check-libstdc++.py: \'ldd\' not found; skipping test')
16*2d1272b8SAndroid Build Coastguard Worker		sys.exit (77)
17*2d1272b8SAndroid Build Coastguard Worker
18*2d1272b8SAndroid Build Coastguard Workerstat = 0
19*2d1272b8SAndroid Build Coastguard Workertested = False
20*2d1272b8SAndroid Build Coastguard Worker
21*2d1272b8SAndroid Build Coastguard Worker# harfbuzz-icu links to libstdc++ because icu does.
22*2d1272b8SAndroid Build Coastguard Workerfor soname in ['harfbuzz', 'harfbuzz-subset', 'harfbuzz-gobject', 'harfbuzz-cairo']:
23*2d1272b8SAndroid Build Coastguard Worker	for suffix in ['so', 'dylib']:
24*2d1272b8SAndroid Build Coastguard Worker		so = os.path.join (libs, 'lib%s.%s' % (soname, suffix))
25*2d1272b8SAndroid Build Coastguard Worker		if not os.path.exists (so): continue
26*2d1272b8SAndroid Build Coastguard Worker
27*2d1272b8SAndroid Build Coastguard Worker		print ('Checking that we are not linking to libstdc++ or libc++ in %s' % so)
28*2d1272b8SAndroid Build Coastguard Worker		ldd_result = subprocess.check_output (ldd.split() + [so])
29*2d1272b8SAndroid Build Coastguard Worker		if (b'libstdc++' in ldd_result) or (b'libc++' in ldd_result):
30*2d1272b8SAndroid Build Coastguard Worker			print ('Ouch, %s is linked to libstdc++ or libc++' % so)
31*2d1272b8SAndroid Build Coastguard Worker			stat = 1
32*2d1272b8SAndroid Build Coastguard Worker
33*2d1272b8SAndroid Build Coastguard Worker		tested = True
34*2d1272b8SAndroid Build Coastguard Worker
35*2d1272b8SAndroid Build Coastguard Workerif not tested:
36*2d1272b8SAndroid Build Coastguard Worker	print ('check-libstdc++.py: libharfbuzz shared library not found; skipping test')
37*2d1272b8SAndroid Build Coastguard Worker	sys.exit (77)
38*2d1272b8SAndroid Build Coastguard Worker
39*2d1272b8SAndroid Build Coastguard Workersys.exit (stat)
40