File: check-order.sh

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (90 lines) | stat: -rw-r--r-- 2,796 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/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"