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 OUTPUTCONFIG
="${OUTPUTDIR}/config.${arch}.${variant}.h"
23 TEMPDIR
="${OUTPUTDIR}/linker_arguments_tmp"
27 ACTUALLIBS
="${TEMPDIR}/${arch}.${variant}.actuallibs"
28 ALLLIBS
="${TEMPDIR}/${arch}.${variant}.alllibs"
29 FROMUSRLIBSYSTEM
="${TEMPDIR}/${arch}.${variant}.fromusrlibsystem"
30 FROMUSRLOCALLIBSYSTEM
="${TEMPDIR}/${arch}.${variant}.fromusrlocallibsystem"
31 INUSRLIBSYSTEM
="${TEMPDIR}/${arch}.${variant}.inusrlibsystem"
32 INUSRLOCALLIBSYSTEM
="${TEMPDIR}/${arch}.${variant}.inusrlocallibsystem"
33 MISSINGLIBS
="${TEMPDIR}/${arch}.${variant}.missinglibs"
34 POSSIBLEUSRLOCALLIBSYSTEM
="${TEMPDIR}/${arch}.${variant}.possibleusrlocallibsystem"
35 OPTIONALLIBS
="${SRCROOT}/optionallibs"
36 REQUIREDLIBS
="${SRCROOT}/requiredlibs"
38 if [ ${variant} = "normal" ]; then
46 cat ${REQUIREDLIBS} ${OPTIONALLIBS} | sort > ${ALLLIBS}
48 # Strip away variant information to do presence checks
49 # non-normal variants can always link against normal clients
50 cd ${LSYS} && ls lib
*.dylib
| sed -E -e 's/_(debug|profile|static)\././' | while read l
; do
51 xcrun
-sdk "${SDKROOT}" lipo
"${LSYS}/${l}" -verify_arch "${arch}" 2>/dev
/null
55 done | sed -E -e 's/^lib//' -e 's/\..*$$//' | sort -u > ${INUSRLIBSYSTEM}
56 cd ${LIBSYS} && ls lib
*.a
| sed -E -e 's/_(debug|profile|static)\././' | while read l
; do
57 xcrun
-sdk "${SDKROOT}" lipo
"${LIBSYS}/${l}" -verify_arch "${arch}" 2>/dev
/null
61 done | sed -E -e 's/^lib//' -e 's/\..*$$//' | sort -u > ${INUSRLOCALLIBSYSTEM}
64 for lib
in ${line} ; do
65 egrep "^${lib}$" ${INUSRLIBSYSTEM} && break
67 done < ${ALLLIBS} > ${FROMUSRLIBSYSTEM}
70 for lib
in ${line} ; do
71 egrep "^${lib}$" ${INUSRLOCALLIBSYSTEM} && break
73 done < ${ALLLIBS} > ${POSSIBLEUSRLOCALLIBSYSTEM}
75 comm -13 ${FROMUSRLIBSYSTEM} ${POSSIBLEUSRLOCALLIBSYSTEM} > ${FROMUSRLOCALLIBSYSTEM}
76 cat ${FROMUSRLIBSYSTEM} ${FROMUSRLOCALLIBSYSTEM} | sort > ${ACTUALLIBS}
80 for lib
in ${line} ; do
81 egrep -q "^${lib}$" ${ACTUALLIBS} && found
=1
83 [[ $found == 0 ]] && echo ${line}
84 done < ${REQUIREDLIBS} > ${MISSINGLIBS}
86 if [ -s ${MISSINGLIBS} ]; then
87 echo '*** missing required libs ***'
92 cat ${FROMUSRLIBSYSTEM} | while read lib
; do
93 echo "#define HAVE_"$(echo "${lib/_sim/}" | tr 'a-z' 'A-Z')" 1"
94 done >> "${OUTPUTCONFIG}"
96 cat ${FROMUSRLIBSYSTEM} | while read lib
; do
97 echo "-Wl,-reexport-l${lib}"
98 done >> "${OUTPUTFILE}"
100 # Allow static archives to degrade to their non-variant versions
101 cat ${FROMUSRLOCALLIBSYSTEM} | while read lib
; do
102 LPATH
="${LIBSYS}/lib${lib}${SUFFIX}.a"
103 xcrun
-sdk "${SDKROOT}" lipo
"${LPATH}" -verify_arch "${arch}" 2>/dev
/null
104 if [ $?
-ne 0 ]; then
105 LPATH
="${LIBSYS}/lib${lib}.a"
107 echo "-Wl,-force_load,${LPATH}"
108 done >> "${OUTPUTFILE}"
110 echo "Final contents of ${OUTPUTFILE}:"
115 MARKERFILE
="${OUTPUTDIR}/linker_arguments_changed.c"
117 for arch
in ${ARCHS}; do
118 for variant
in ${VARIANTS}; do
119 OUTPUTFILE
="${OUTPUTDIR}/linker_arguments.${arch}.${variant}.txt"
122 done | shasum
| sed 's,^,// ,' > "${MARKERFILE}"