KerberosCFMGlue.jam [plain text]
# CFMVectorGlue <file>.s <file>.c <file>.exp : <file>.pbexp
# Runs CFMVectorGlue to create CFM glue files from a PB export file
KERBEROSCFMGLUE = "$(SRCROOT)/../../Common/Scripts/KerberosCFMGlue.pl" ;
rule KerberosCFMGlue
{
DEPENDS "$(1)" : "$(2)" ;
DEPENDS "$(1)" : "$(KERBEROSCFMGLUE)" ;
Clean.Remove clean : "$(1)" ;
}
actions KerberosCFMGlue
{
mkdir -p "$(1[1]:D)" ;
mkdir -p "$(1[2]:D)" ;
mkdir -p "$(1[3]:D)" ;
perl "$(KERBEROSCFMGLUE)" --out-assembly "$(1[1])" --out-source "$(1[2])" --out-export "$(1[3])" "$(2[1])"
}
# VerifyExportsAreSupersetOfKfM4 <target> : <superset> <subset>
rule VerifyExportsAreSupersetOfKfM4
{
ALWAYS "$(1)" ;
}
actions VerifyExportsAreSupersetOfKfM4
{
Sort1="$(2[1]:D=$(Intermediates)).sort1"
Sort2="$(2[1]:D=$(Intermediates)).sort2"
sort "$(2[1])" | uniq > "${Sort1}"
sort "$(2[2])" | uniq > "${Sort2}"
RemovedSymbols=`diff "${Sort1}" "${Sort2}" | grep -e '^> [^#].*$'`
if [ -z "${RemovedSymbols}" ]; then
exit 0
else
echo "ERROR! The following symbols are needed by CFM bridges and are not exported:"
echo "${RemovedSymbols}"
exit 1
fi
}
# SafeCopy <destination> : <source>
# where the leaf names of <destination> and <source> are the same
# and ditto is to be used to insure resources are preserved.
rule SafeCopy
{
DEPENDS "$(1)" : "$(2)" ;
Clean clean "$(1)" ;
}
actions together piecemeal SafeCopy
{
mkdir -p "$(1:D)"
/usr/bin/ditto -rsrcFork "$(2)" "$(1)"
}
Intermediates = "$(BUILT_PRODUCTS_DIR)/Kerberos.intermediates" ;
KerberosCFMGlueSources = "$(SRCROOT)/../../KerberosCFMGlue/Sources" ;
KerberosCFMGlueBinaries = "$(SRCROOT)/../../KerberosCFMGlue/Binaries" ;
InstallDir = "$(DSTROOT)/System/Library/CFMSupport" ;
# Check to make sure that we haven't removed any symbols used by CFM Bridges
VerifyExportsAreSupersetOfKfM4 all : "$(Intermediates)/Kerberos.exp" "$(KerberosCFMGlueSources)/KerberosCFMGlue.exp" ;
# Install the CFM Glue:
SafeCopy "$(InstallDir)/Kerberos" : "$(KerberosCFMGlueBinaries)/Kerberos" ;
DEPENDS install : all "$(InstallDir)/Kerberos" ;
NOCARE installhdrs ;
NOTFILE installhdrs ;