4 echo "Usage: $0 <archs> <variants> <outputdir> <sdkroot> <srcroot>" 1>&2
14 LIBSYS
="${SDKROOT}/usr/local/lib/system"
15 LSYS
="${SDKROOT}/usr/lib/system"
17 mkdir -p "${OUTPUTDIR}"
19 for arch
in ${ARCHS}; do
20 for variant
in ${VARIANTS}; do
21 OUTPUTFILE
="${OUTPUTDIR}/linker_arguments.${arch}.${variant}.txt"
22 TEMPDIR
="${OUTPUTDIR}/linker_arguments_tmp"
26 ACTUALLIBS
="${TEMPDIR}/${arch}.${variant}.actuallibs"
27 ALLLIBS
="${TEMPDIR}/${arch}.${variant}.alllibs"
28 FROMUSRLIBSYSTEM
="${TEMPDIR}/${arch}.${variant}.fromusrlibsystem"
29 FROMUSRLOCALLIBSYSTEM
="${TEMPDIR}/${arch}.${variant}.fromusrlocallibsystem"
30 INUSRLIBSYSTEM
="${TEMPDIR}/${arch}.${variant}.inusrlibsystem"
31 INUSRLOCALLIBSYSTEM
="${TEMPDIR}/${arch}.${variant}.inusrlocallibsystem"
32 MISSINGLIBS
="${TEMPDIR}/${arch}.${variant}.missinglibs"
33 POSSIBLEUSRLOCALLIBSYSTEM
="${TEMPDIR}/${arch}.${variant}.possibleusrlocallibsystem"
34 OPTIONALLIBS
="${SRCROOT}/optionallibs"
35 REQUIREDLIBS
="${SRCROOT}/requiredlibs"
37 if [ ${variant} = "normal" ]; then
45 cat ${REQUIREDLIBS} ${OPTIONALLIBS} | sort > ${ALLLIBS}
47 # Strip away variant information to do presence checks
48 # non-normal variants can always link against normal clients
49 cd ${LSYS} && ls lib
*.dylib
| sed -E -e 's/_(debug|profile|static)\././' | while read l
; do
50 xcrun
-sdk "${SDKROOT}" lipo
"${LSYS}/${l}" -verify_arch "${arch}" 2>/dev
/null
54 done | sed -E -e 's/^lib//' -e 's/\..*$$//' | sort -u > ${INUSRLIBSYSTEM}
55 cd ${LIBSYS} && ls lib
*.a
| sed -E -e 's/_(debug|profile|static)\././' | while read l
; do
56 xcrun
-sdk "${SDKROOT}" lipo
"${LIBSYS}/${l}" -verify_arch "${arch}" 2>/dev
/null
60 done | sed -E -e 's/^lib//' -e 's/\..*$$//' | sort -u > ${INUSRLOCALLIBSYSTEM}
61 comm -12 ${ALLLIBS} ${INUSRLIBSYSTEM} > ${FROMUSRLIBSYSTEM}
62 comm -12 ${ALLLIBS} ${INUSRLOCALLIBSYSTEM} > ${POSSIBLEUSRLOCALLIBSYSTEM}
63 comm -13 ${FROMUSRLIBSYSTEM} ${POSSIBLEUSRLOCALLIBSYSTEM} > ${FROMUSRLOCALLIBSYSTEM}
64 cat ${FROMUSRLIBSYSTEM} ${FROMUSRLOCALLIBSYSTEM} | sort > ${ACTUALLIBS}
65 comm -23 ${REQUIREDLIBS} ${ACTUALLIBS} > ${MISSINGLIBS}
67 if [ -s ${MISSINGLIBS} ]; then
68 echo '*** missing required libs ***'
73 cat ${FROMUSRLIBSYSTEM} | while read lib
; do
74 echo "-Wl,-reexport-l${lib}"
75 done >> "${OUTPUTFILE}"
77 # Allow static archives to degrade to their non-variant versions
78 cat ${FROMUSRLOCALLIBSYSTEM} | while read lib
; do
79 LPATH
="${LIBSYS}/lib${lib}${SUFFIX}.a"
80 xcrun
-sdk "${SDKROOT}" lipo
"${LPATH}" -verify_arch "${arch}" 2>/dev
/null
82 LPATH
="${LIBSYS}/lib${lib}.a"
84 echo "-Wl,-force_load,${LPATH}"
85 done >> "${OUTPUTFILE}"
87 echo "Final contents of ${OUTPUTFILE}:"
92 MARKERFILE
="${OUTPUTDIR}/linker_arguments_changed.c"
94 for arch
in ${ARCHS}; do
95 for variant
in ${VARIANTS}; do
96 OUTPUTFILE
="${OUTPUTDIR}/linker_arguments.${arch}.${variant}.txt"
99 done | shasum
| sed 's,^,// ,' > "${MARKERFILE}"