#!/bin/bash -e # # Copyright (c) 2018 Apple Inc. All rights reserved. # # @APPLE_APACHE_LICENSE_HEADER_START@ # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # @APPLE_APACHE_LICENSE_HEADER_END@ # test "$ACTION" = install || exit 0 list_objc_syms () { nm -arch $1 -nU ${DSTROOT}/usr/lib/system/libdispatch.dylib | grep _OBJC | cut -d' ' -f3 } list_mutable_data_syms () { nm -arch $1 -m ${DSTROOT}/usr/lib/system/libdispatch.dylib |grep __DATA|egrep -v '(__const|__crash_info)'|sed 's/^.* //' } list_objc_order () { grep '^_OBJC' "${SCRIPT_INPUT_FILE_0}" } list_dirty_order () { grep '^[^#]' "${SCRIPT_INPUT_FILE_1}" } list_clean_order () { grep '^[^#]' "${SCRIPT_INPUT_FILE_2}" } fail= case "$PLATFORM_NAME" in *simulator) exit 0;; *) ;; esac if comm -12 <(list_dirty_order | sort) <(list_clean_order | sort) | grep .; then echo 1>&2 "error: *** SYMBOLS CAN'T BE BOTH CLEAN AND DIRTY ***" comm 1>&2 -12 <(list_dirty_order | sort) <(list_clean_order | sort) fail=t fi for arch in $ARCHS; do if test "$PLATFORM_NAME" = macosx -a "$arch" = i386; then continue fi if list_mutable_data_syms $arch | sort | uniq -c | grep -qvw 1; then echo 1>&2 "error: *** DUPLICATED SYMBOL NAMES FOR SLICE $arch ***" list_mutable_data_syms $arch | sort | uniq -c | grep -qw 1 1>&2 fail=t fi if comm -23 <(list_mutable_data_syms $arch | sort) <((list_dirty_order; list_clean_order) | sort) | grep -q .; then echo 1>&2 "error: *** SYMBOLS NOT MARKED CLEAN OR DIRTY FOR SLICE $arch ***" comm 1>&2 -23 <(list_mutable_data_syms $arch | sort) <((list_dirty_order; list_clean_order) | sort) fail=t fi if comm -13 <(list_mutable_data_syms $arch | sort) <((list_dirty_order; list_clean_order) | sort) | grep -q .; then echo 1>&2 "warning: *** Found unknown symbols in dirty/clean files for slice $arch ***" comm 1>&2 -13 <(list_mutable_data_syms $arch | sort) <((list_dirty_order; list_clean_order) | sort) fi if ! cmp -s <(list_objc_syms $arch) <(list_objc_order); then echo 1>&2 "error: *** SYMBOL ORDER IS NOT WHAT IS EXPECTED FOR SLICE $arch ***" diff 1>&2 -U100 <(list_objc_syms $arch) <(list_objc_order) || fail=t fi done test -z "$fail"