[Patch v4 1/3] doc: build and install doxygen api docs
[notmuch-archives.git] / f3 / cdef99abe09e9f8b2a47ba7d4bc01518044781
1 Return-Path: <amdragon@mit.edu>\r
2 X-Original-To: notmuch@notmuchmail.org\r
3 Delivered-To: notmuch@notmuchmail.org\r
4 Received: from localhost (localhost [127.0.0.1])\r
5         by olra.theworths.org (Postfix) with ESMTP id 80B47431FAF\r
6         for <notmuch@notmuchmail.org>; Tue, 27 Nov 2012 20:54:07 -0800 (PST)\r
7 X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
8 X-Spam-Flag: NO\r
9 X-Spam-Score: -0.7\r
10 X-Spam-Level: \r
11 X-Spam-Status: No, score=-0.7 tagged_above=-999 required=5\r
12         tests=[RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled\r
13 Received: from olra.theworths.org ([127.0.0.1])\r
14         by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
15         with ESMTP id 7rvna3POiVqy for <notmuch@notmuchmail.org>;\r
16         Tue, 27 Nov 2012 20:54:07 -0800 (PST)\r
17 Received: from dmz-mailsec-scanner-8.mit.edu (DMZ-MAILSEC-SCANNER-8.MIT.EDU\r
18         [18.7.68.37])\r
19         by olra.theworths.org (Postfix) with ESMTP id CDE8C431FAE\r
20         for <notmuch@notmuchmail.org>; Tue, 27 Nov 2012 20:54:06 -0800 (PST)\r
21 X-AuditID: 12074425-b7f526d000002c4d-be-50b598ed2429\r
22 Received: from mailhub-auth-2.mit.edu ( [18.7.62.36])\r
23         by dmz-mailsec-scanner-8.mit.edu (Symantec Messaging Gateway) with SMTP\r
24         id CF.62.11341.DE895B05; Tue, 27 Nov 2012 23:54:05 -0500 (EST)\r
25 Received: from outgoing.mit.edu (OUTGOING-AUTH.MIT.EDU [18.7.22.103])\r
26         by mailhub-auth-2.mit.edu (8.13.8/8.9.2) with ESMTP id qAS4s48O023495; \r
27         Tue, 27 Nov 2012 23:54:04 -0500\r
28 Received: from drake.dyndns.org\r
29         (209-6-116-242.c3-0.arl-ubr1.sbo-arl.ma.cable.rcn.com\r
30         [209.6.116.242]) (authenticated bits=0)\r
31         (User authenticated as amdragon@ATHENA.MIT.EDU)\r
32         by outgoing.mit.edu (8.13.6/8.12.4) with ESMTP id qAS4s22p011546\r
33         (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT);\r
34         Tue, 27 Nov 2012 23:54:04 -0500 (EST)\r
35 Received: from amthrax by drake.dyndns.org with local (Exim 4.77)\r
36         (envelope-from <amdragon@mit.edu>)\r
37         id 1TdZes-0005R1-CE; Tue, 27 Nov 2012 23:54:02 -0500\r
38 From: Austin Clements <amdragon@MIT.EDU>\r
39 To: notmuch@notmuchmail.org\r
40 Subject: [PATCH] test: Use associative arrays to track external prereqs\r
41 Date: Tue, 27 Nov 2012 23:54:01 -0500\r
42 Message-Id: <1354078441-20788-1-git-send-email-amdragon@mit.edu>\r
43 X-Mailer: git-send-email 1.7.10.4\r
44 X-Brightmail-Tracker:\r
45  H4sIAAAAAAAAA+NgFprJIsWRmVeSWpSXmKPExsUixG6novt2xtYAg5XvhC2u35zJ7MDo8WzV\r
46         LeYAxigum5TUnMyy1CJ9uwSujFcH6gsuSFQ0HPZtYNwm0sXIySEhYCJx4fw1dghbTOLCvfVs\r
47         XYxcHEIC+xglrnUeZYRwNjBKXDl9nRnCecQkMfl0N5Qzl1HizYRTbCD9bAIaEtv2L2cEsUUE\r
48         pCV23p3N2sXIwcEsoCbxp0sFJCws4C7x8OFnsBIWAVWJJbOWsILYvAIOEmsuPYE6Q1Gi+9kE\r
49         tgmMvAsYGVYxyqbkVunmJmbmFKcm6xYnJ+blpRbpWujlZpbopaaUbmIEh4CL6g7GCYeUDjEK\r
50         cDAq8fA+MN8aIMSaWFZcmXuIUZKDSUmU980koBBfUn5KZUZicUZ8UWlOavEhRgkOZiURXp42\r
51         oBxvSmJlVWpRPkxKmoNFSZz3RspNfyGB9MSS1OzU1ILUIpisDAeHkgTvmulAjYJFqempFWmZ\r
52         OSUIaSYOTpDhPEDDW0BqeIsLEnOLM9Mh8qcYFaXEebeBJARAEhmleXC9sBh9xSgO9Iowbw9I\r
53         FQ8wvuG6XwENZgIanHx9I8jgkkSElFQDo94PIe3Dn3+fvSp+TV/0k9l/vouFyeEHjuz5uyb6\r
54         XYX82dpLux/WT3wtujB/3a+zdm37/QObT9/+G6LFMW16pN7Z1efKl88Vvqia8nje+6zLgrtv\r
55         NdzyVkpbycqePId36ecVnGb8Vyc1Lor6zxY/6+ibtQ/Xli+5quLP5c/36eEmlQ2Ms0tig1Yo\r
56         sRRnJBpqMRcVJwIAX+SCQKwCAAA=\r
57 X-BeenThere: notmuch@notmuchmail.org\r
58 X-Mailman-Version: 2.1.13\r
59 Precedence: list\r
60 List-Id: "Use and development of the notmuch mail system."\r
61         <notmuch.notmuchmail.org>\r
62 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
63         <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
64 List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
65 List-Post: <mailto:notmuch@notmuchmail.org>\r
66 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
67 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
68         <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
69 X-List-Received-Date: Wed, 28 Nov 2012 04:54:07 -0000\r
70 \r
71 Previously, the test framework generated a variable name for each\r
72 external prereq as a poor man's associative array.  Unfortunately,\r
73 prereqs names may not be legal variable names, leading to\r
74 unintelligible bash errors like\r
75   test_missing_external_prereq_emacsclient.emacs24_=t: command not found\r
76 \r
77 Using proper associative arrays to track prereqs, in addition to being\r
78 much cleaner than generating variable names and using grep to\r
79 carefully construct unique string lists, removes restrictions on\r
80 prereq names.\r
81 ---\r
82  test/test-lib.sh |   24 ++++++++++++++----------\r
83  1 file changed, 14 insertions(+), 10 deletions(-)\r
84 \r
85 diff --git a/test/test-lib.sh b/test/test-lib.sh\r
86 index 77063a4..f169785 100644\r
87 --- a/test/test-lib.sh\r
88 +++ b/test/test-lib.sh\r
89 @@ -625,18 +625,22 @@ test_have_prereq () {\r
90         esac\r
91  }\r
92  \r
93 +declare -A test_missing_external_prereq_\r
94 +declare -A test_subtest_missing_external_prereq_\r
95 +\r
96  # declare prerequisite for the given external binary\r
97  test_declare_external_prereq () {\r
98         binary="$1"\r
99         test "$#" = 2 && name=$2 || name="$binary(1)"\r
100  \r
101 -       hash $binary 2>/dev/null || eval "\r
102 -       test_missing_external_prereq_${binary}_=t\r
103 +       if ! hash $binary 2>/dev/null; then\r
104 +               test_missing_external_prereq_["${binary}"]=t\r
105 +               eval "\r
106  $binary () {\r
107 -       echo -n \"\$test_subtest_missing_external_prereqs_ \" | grep -qe \" $name \" ||\r
108 -       test_subtest_missing_external_prereqs_=\"\$test_subtest_missing_external_prereqs_ $name\"\r
109 +       test_subtest_missing_external_prereq_[\"${name}\"]=t\r
110         false\r
111  }"\r
112 +       fi\r
113  }\r
114  \r
115  # Explicitly require external prerequisite.  Useful when binary is\r
116 @@ -644,7 +648,7 @@ $binary () {\r
117  # Returns success if dependency is available, failure otherwise.\r
118  test_require_external_prereq () {\r
119         binary="$1"\r
120 -       if [ "$(eval echo -n \$test_missing_external_prereq_${binary}_)" = t ]; then\r
121 +       if [[ ${test_missing_external_prereq_["${binary}"]} == t ]]; then\r
122                 # dependency is missing, call the replacement function to note it\r
123                 eval "$binary"\r
124         else\r
125 @@ -737,9 +741,9 @@ test_skip () {\r
126  }\r
127  \r
128  test_check_missing_external_prereqs_ () {\r
129 -       if test -n "$test_subtest_missing_external_prereqs_"; then\r
130 -               say_color skip >&1 "missing prerequisites:"\r
131 -               echo "$test_subtest_missing_external_prereqs_" >&1\r
132 +       if [[ ${#test_subtest_missing_external_prereq_[@]} != 0 ]]; then\r
133 +               say_color skip >&1 "missing prerequisites: "\r
134 +               echo ${!test_subtest_missing_external_prereq_[@]} >&1\r
135                 test_report_skip_ "$@"\r
136         else\r
137                 false\r
138 @@ -1022,7 +1026,7 @@ test_python() {\r
139         # most others as /usr/bin/python. So first try python2, and fallback to\r
140         # python if python2 doesn't exist.\r
141         cmd=python2\r
142 -       [[ "$test_missing_external_prereq_python2_" = t ]] && cmd=python\r
143 +       [[ ${test_missing_external_prereq_[python2]} == t ]] && cmd=python\r
144  \r
145         (echo "import sys; _orig_stdout=sys.stdout; sys.stdout=open('OUTPUT', 'w')"; cat) \\r
146                 | $cmd -\r
147 @@ -1064,7 +1068,7 @@ test_reset_state_ () {\r
148         test -z "$test_init_done_" && test_init_\r
149  \r
150         test_subtest_known_broken_=\r
151 -       test_subtest_missing_external_prereqs_=\r
152 +       test_subtest_missing_external_prereq_=()\r
153  }\r
154  \r
155  # called once before the first subtest\r
156 -- \r
157 1.7.10.4\r
158 \r