melisa 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (166) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +53 -4
  3. data/ext/extconf.rb +33 -0
  4. data/ext/marisa-0.2.4/AUTHORS +1 -0
  5. data/ext/marisa-0.2.4/COPYING +32 -0
  6. data/ext/marisa-0.2.4/ChangeLog +0 -0
  7. data/ext/marisa-0.2.4/INSTALL +237 -0
  8. data/ext/marisa-0.2.4/Makefile.am +24 -0
  9. data/ext/marisa-0.2.4/Makefile.in +803 -0
  10. data/ext/marisa-0.2.4/NEWS +0 -0
  11. data/ext/marisa-0.2.4/README +63 -0
  12. data/ext/marisa-0.2.4/aclocal.m4 +976 -0
  13. data/ext/marisa-0.2.4/bindings/Makefile +16 -0
  14. data/ext/{marisa → marisa-0.2.4}/bindings/marisa-swig.cxx +0 -0
  15. data/ext/{marisa → marisa-0.2.4}/bindings/marisa-swig.h +0 -0
  16. data/ext/marisa-0.2.4/bindings/marisa-swig.i +28 -0
  17. data/ext/marisa-0.2.4/bindings/perl/Makefile.PL +7 -0
  18. data/ext/{marisa → marisa-0.2.4}/bindings/perl/marisa-swig.cxx +0 -0
  19. data/ext/{marisa → marisa-0.2.4}/bindings/perl/marisa-swig.h +0 -0
  20. data/ext/{marisa → marisa-0.2.4}/bindings/perl/marisa-swig_wrap.cxx +0 -0
  21. data/ext/marisa-0.2.4/bindings/perl/marisa.pm +297 -0
  22. data/ext/marisa-0.2.4/bindings/perl/sample.dic +0 -0
  23. data/ext/marisa-0.2.4/bindings/perl/sample.pl +62 -0
  24. data/ext/{marisa → marisa-0.2.4}/bindings/python/marisa-swig.cxx +0 -0
  25. data/ext/{marisa → marisa-0.2.4}/bindings/python/marisa-swig.h +0 -0
  26. data/ext/{marisa → marisa-0.2.4}/bindings/python/marisa-swig_wrap.cxx +0 -0
  27. data/ext/marisa-0.2.4/bindings/python/marisa.py +206 -0
  28. data/ext/marisa-0.2.4/bindings/python/sample.dic +0 -0
  29. data/ext/marisa-0.2.4/bindings/python/sample.py +57 -0
  30. data/ext/marisa-0.2.4/bindings/python/setup.py +9 -0
  31. data/ext/marisa-0.2.4/config.guess +1530 -0
  32. data/ext/marisa-0.2.4/config.sub +1773 -0
  33. data/ext/marisa-0.2.4/configure +17636 -0
  34. data/ext/marisa-0.2.4/configure.ac +172 -0
  35. data/ext/marisa-0.2.4/depcomp +688 -0
  36. data/ext/marisa-0.2.4/docs/readme.en.html +740 -0
  37. data/ext/marisa-0.2.4/docs/readme.ja.html +750 -0
  38. data/ext/marisa-0.2.4/docs/style.css +245 -0
  39. data/ext/marisa-0.2.4/install-sh +520 -0
  40. data/ext/marisa-0.2.4/lib/Makefile.am +57 -0
  41. data/ext/marisa-0.2.4/lib/Makefile.in +701 -0
  42. data/ext/{marisa → marisa-0.2.4}/lib/marisa.h +0 -0
  43. data/ext/{marisa → marisa-0.2.4}/lib/marisa/agent.cc +2 -2
  44. data/ext/{marisa → marisa-0.2.4}/lib/marisa/agent.h +2 -2
  45. data/ext/{marisa → marisa-0.2.4}/lib/marisa/base.h +3 -3
  46. data/ext/{marisa → marisa-0.2.4}/lib/marisa/exception.h +1 -1
  47. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/algorithm.h +1 -1
  48. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/algorithm/sort.h +1 -1
  49. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/intrin.h +1 -1
  50. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/io.h +3 -3
  51. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/io/mapper.cc +1 -1
  52. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/io/mapper.h +1 -1
  53. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/io/reader.cc +1 -1
  54. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/io/reader.h +1 -1
  55. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/io/writer.cc +1 -1
  56. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/io/writer.h +1 -1
  57. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/trie.h +2 -2
  58. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/trie/cache.h +1 -1
  59. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/trie/config.h +1 -1
  60. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/trie/entry.h +1 -1
  61. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/trie/header.h +1 -1
  62. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/trie/history.h +1 -1
  63. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/trie/key.h +1 -1
  64. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/trie/louds-trie.cc +5 -5
  65. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/trie/louds-trie.h +7 -7
  66. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/trie/range.h +1 -1
  67. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/trie/state.h +2 -2
  68. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/trie/tail.cc +3 -3
  69. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/trie/tail.h +3 -3
  70. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/vector.h +3 -3
  71. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/vector/bit-vector.cc +2 -2
  72. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/vector/bit-vector.h +2 -2
  73. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/vector/flat-vector.h +1 -1
  74. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/vector/pop-count.h +1 -1
  75. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/vector/rank-index.h +1 -1
  76. data/ext/{marisa → marisa-0.2.4}/lib/marisa/grimoire/vector/vector.h +1 -1
  77. data/ext/{marisa → marisa-0.2.4}/lib/marisa/iostream.h +0 -0
  78. data/ext/{marisa → marisa-0.2.4}/lib/marisa/key.h +1 -1
  79. data/ext/{marisa → marisa-0.2.4}/lib/marisa/keyset.cc +1 -1
  80. data/ext/{marisa → marisa-0.2.4}/lib/marisa/keyset.h +1 -1
  81. data/ext/{marisa → marisa-0.2.4}/lib/marisa/query.h +1 -1
  82. data/ext/{marisa → marisa-0.2.4}/lib/marisa/scoped-array.h +1 -1
  83. data/ext/{marisa → marisa-0.2.4}/lib/marisa/scoped-ptr.h +1 -1
  84. data/ext/{marisa → marisa-0.2.4}/lib/marisa/stdio.h +0 -0
  85. data/ext/{marisa → marisa-0.2.4}/lib/marisa/trie.cc +4 -4
  86. data/ext/{marisa → marisa-0.2.4}/lib/marisa/trie.h +2 -2
  87. data/ext/marisa-0.2.4/ltmain.sh +9661 -0
  88. data/ext/marisa-0.2.4/m4/libtool.m4 +8001 -0
  89. data/ext/marisa-0.2.4/m4/ltoptions.m4 +384 -0
  90. data/ext/marisa-0.2.4/m4/ltsugar.m4 +123 -0
  91. data/ext/marisa-0.2.4/m4/ltversion.m4 +23 -0
  92. data/ext/marisa-0.2.4/m4/lt~obsolete.m4 +98 -0
  93. data/ext/marisa-0.2.4/marisa.pc.in +11 -0
  94. data/ext/marisa-0.2.4/missing +331 -0
  95. data/ext/marisa-0.2.4/mkmf.log +288 -0
  96. data/ext/marisa-0.2.4/pkg/bin/marisa-benchmark +0 -0
  97. data/ext/marisa-0.2.4/pkg/bin/marisa-build +0 -0
  98. data/ext/marisa-0.2.4/pkg/bin/marisa-common-prefix-search +0 -0
  99. data/ext/marisa-0.2.4/pkg/bin/marisa-dump +0 -0
  100. data/ext/marisa-0.2.4/pkg/bin/marisa-lookup +0 -0
  101. data/ext/marisa-0.2.4/pkg/bin/marisa-predictive-search +0 -0
  102. data/ext/marisa-0.2.4/pkg/bin/marisa-reverse-lookup +0 -0
  103. data/ext/marisa-0.2.4/pkg/include/marisa.h +14 -0
  104. data/ext/marisa-0.2.4/pkg/include/marisa/agent.h +73 -0
  105. data/ext/marisa-0.2.4/pkg/include/marisa/base.h +193 -0
  106. data/ext/marisa-0.2.4/pkg/include/marisa/exception.h +82 -0
  107. data/ext/marisa-0.2.4/pkg/include/marisa/iostream.h +18 -0
  108. data/ext/marisa-0.2.4/pkg/include/marisa/key.h +85 -0
  109. data/ext/marisa-0.2.4/pkg/include/marisa/keyset.h +80 -0
  110. data/ext/marisa-0.2.4/pkg/include/marisa/query.h +71 -0
  111. data/ext/marisa-0.2.4/pkg/include/marisa/scoped-array.h +48 -0
  112. data/ext/marisa-0.2.4/pkg/include/marisa/scoped-ptr.h +52 -0
  113. data/ext/marisa-0.2.4/pkg/include/marisa/stdio.h +15 -0
  114. data/ext/marisa-0.2.4/pkg/include/marisa/trie.h +64 -0
  115. data/ext/marisa-0.2.4/pkg/lib/libmarisa.0.dylib +0 -0
  116. data/ext/marisa-0.2.4/pkg/lib/libmarisa.a +0 -0
  117. data/ext/marisa-0.2.4/pkg/lib/libmarisa.dylib +0 -0
  118. data/ext/marisa-0.2.4/pkg/lib/libmarisa.la +41 -0
  119. data/ext/marisa-0.2.4/pkg/lib/pkgconfig/marisa.pc +11 -0
  120. data/ext/marisa-0.2.4/tests/Makefile.am +27 -0
  121. data/ext/marisa-0.2.4/tests/Makefile.in +624 -0
  122. data/ext/{marisa → marisa-0.2.4}/tests/base-test.cc +0 -0
  123. data/ext/{marisa → marisa-0.2.4}/tests/io-test.cc +0 -0
  124. data/ext/{marisa → marisa-0.2.4}/tests/marisa-assert.h +0 -0
  125. data/ext/{marisa → marisa-0.2.4}/tests/marisa-test.cc +0 -0
  126. data/ext/{marisa → marisa-0.2.4}/tests/trie-test.cc +0 -0
  127. data/ext/{marisa → marisa-0.2.4}/tests/vector-test.cc +0 -0
  128. data/ext/marisa-0.2.4/tools/Makefile.am +39 -0
  129. data/ext/marisa-0.2.4/tools/Makefile.in +616 -0
  130. data/ext/{marisa → marisa-0.2.4}/tools/cmdopt.cc +0 -0
  131. data/ext/{marisa → marisa-0.2.4}/tools/cmdopt.h +0 -0
  132. data/ext/{marisa → marisa-0.2.4}/tools/marisa-benchmark.cc +0 -0
  133. data/ext/{marisa → marisa-0.2.4}/tools/marisa-build.cc +0 -0
  134. data/ext/{marisa → marisa-0.2.4}/tools/marisa-common-prefix-search.cc +0 -0
  135. data/ext/{marisa → marisa-0.2.4}/tools/marisa-dump.cc +0 -0
  136. data/ext/{marisa → marisa-0.2.4}/tools/marisa-lookup.cc +0 -0
  137. data/ext/{marisa → marisa-0.2.4}/tools/marisa-predictive-search.cc +0 -0
  138. data/ext/{marisa → marisa-0.2.4}/tools/marisa-reverse-lookup.cc +0 -0
  139. data/ext/marisa-0.2.4/vs2008/base-test/base-test.vcproj +200 -0
  140. data/ext/marisa-0.2.4/vs2008/io-test/io-test.vcproj +199 -0
  141. data/ext/marisa-0.2.4/vs2008/libmarisa/libmarisa.vcproj +347 -0
  142. data/ext/marisa-0.2.4/vs2008/marisa-benchmark/marisa-benchmark.vcproj +203 -0
  143. data/ext/marisa-0.2.4/vs2008/marisa-build/marisa-build.vcproj +203 -0
  144. data/ext/marisa-0.2.4/vs2008/marisa-common-prefix-search/marisa-common-prefix-search.vcproj +203 -0
  145. data/ext/marisa-0.2.4/vs2008/marisa-dump/marisa-dump.vcproj +203 -0
  146. data/ext/marisa-0.2.4/vs2008/marisa-lookup/marisa-lookup.vcproj +203 -0
  147. data/ext/marisa-0.2.4/vs2008/marisa-predictive-search/marisa-predictive-search.vcproj +203 -0
  148. data/ext/marisa-0.2.4/vs2008/marisa-reverse-lookup/marisa-reverse-lookup.vcproj +203 -0
  149. data/ext/marisa-0.2.4/vs2008/marisa-test/marisa-test.vcproj +199 -0
  150. data/ext/marisa-0.2.4/vs2008/trie-test/trie-test.vcproj +199 -0
  151. data/ext/marisa-0.2.4/vs2008/vector-test/vector-test.vcproj +199 -0
  152. data/ext/marisa-0.2.4/vs2008/vs2008.sln +123 -0
  153. data/ext/marisa-0.2.4/vs2008/vs2008.suo +0 -0
  154. data/ext/{marisa/bindings/ruby/marisa-swig.cxx → marisa-swig.cxx} +0 -0
  155. data/ext/{marisa/bindings/ruby/marisa-swig.h → marisa-swig.h} +0 -0
  156. data/ext/{marisa/bindings/ruby/marisa-swig_wrap.cxx → marisa-swig_wrap.cxx} +0 -0
  157. data/lib/melisa/bytes_trie.rb +5 -0
  158. data/lib/melisa/trie.rb +2 -0
  159. data/lib/melisa/version.rb +1 -1
  160. data/melisa.gemspec +7 -9
  161. data/spec/bytes_trie_spec.rb +6 -1
  162. data/spec/int_trie_spec.rb +5 -0
  163. data/spec/search_spec.rb +6 -7
  164. data/spec/trie_spec.rb +4 -4
  165. metadata +178 -121
  166. data/ext/marisa/bindings/ruby/extconf.rb +0 -5
@@ -0,0 +1,245 @@
1
+ @charset "utf-8";
2
+
3
+ * {
4
+ line-height: 140%;
5
+ margin: 0px;
6
+ padding: 0px;
7
+ }
8
+
9
+ body {
10
+ background: lightgray;
11
+ color: #222;
12
+ margin: 10px 20px;
13
+ }
14
+
15
+ a {
16
+ color: inherit;
17
+ text-decoration: none;
18
+ }
19
+ a:link {
20
+ color: #066;
21
+ padding: 0px 2px;
22
+ }
23
+ a:link:after {
24
+ content: "†";
25
+ }
26
+ a:visited {
27
+ color: #057;
28
+ padding: 0px 2px;
29
+ }
30
+ a:visited:after {
31
+ content: "†";
32
+ }
33
+ a:hover {
34
+ text-decoration: underline;
35
+ }
36
+ a[name]:hover {
37
+ color: inherit;
38
+ text-decoration: none;
39
+ }
40
+ a:active {
41
+ }
42
+ a[name]:active {
43
+ color: inherit;
44
+ padding: 0px;
45
+ }
46
+
47
+ ol {
48
+ list-style-position: outside;
49
+ margin-left: 2em;
50
+ }
51
+ ol ol {
52
+ list-style-position: outside;
53
+ margin-left: 1em;
54
+ }
55
+ ul {
56
+ list-style-position: outside;
57
+ margin-left: 2em;
58
+ }
59
+ ul ul {
60
+ list-style-position: outside;
61
+ margin-left: 1em;
62
+ }
63
+ li {
64
+ margin: 5px 0px;
65
+ }
66
+
67
+ code {
68
+ color: darkblue;
69
+ font-family: sans-serif;
70
+ font-style: normal;
71
+ padding: 0px 2px;
72
+ }
73
+ kbd {
74
+ color: darkgreen;
75
+ font-family: sans-serif;
76
+ font-style: normal;
77
+ padding: 0px 2px;
78
+ }
79
+ var {
80
+ color: darkred;
81
+ font-family: sans-serif;
82
+ font-style: normal;
83
+ padding: 0px 2px;
84
+ }
85
+ sup {
86
+ font-size: 75%;
87
+ }
88
+
89
+ div#header {
90
+ font-family: "Times New Roman";
91
+ padding: 5px 10px;
92
+ }
93
+ div#header div.left {
94
+ float: left;
95
+ }
96
+ div#header div.right {
97
+ float: right;
98
+ }
99
+ div#header div.end {
100
+ clear: both;
101
+ }
102
+
103
+ div#body {
104
+ background: white;
105
+ border: 1px solid black;
106
+ box-shadow: 1px 1px 5px gray;
107
+ -webkit-box-shadow: 1px 1px 5px gray;
108
+ -moz-box-shadow: 1px 1px 5px gray;
109
+ padding: 20px;
110
+ }
111
+
112
+ div#body h1 {
113
+ font-size: 150%;
114
+ margin: 10px;
115
+ text-align: center;
116
+ }
117
+
118
+ div#body p#authors {
119
+ font-weight: bold;
120
+ margin: 10px;
121
+ text-align: center;
122
+ }
123
+ div#body p#authors span.author {
124
+ margin: 0px 1em;
125
+ }
126
+
127
+ div#body p#abstract {
128
+ margin: 15px auto;
129
+ text-align: auto;
130
+ width: 75%;
131
+ }
132
+ div#body p#abstract span#heading {
133
+ font-family: "Times New Roman";
134
+ font-style: italic;
135
+ font-weight: bold;
136
+ margin-right: 0.5em;
137
+ }
138
+
139
+ div#body div.section {
140
+ clear: both;
141
+ margin: 5px 0px;
142
+ }
143
+ div#body div.section h2 {
144
+ background: honeydew;
145
+ border-bottom: 1px dashed darkgray;
146
+ color: #353;
147
+ font-size: 125%;
148
+ margin-top: 15px;
149
+ padding: 5px;
150
+ }
151
+
152
+ div#body div.section p {
153
+ margin: 5px 0px;
154
+ text-indent: 1em;
155
+ }
156
+
157
+ div#body div.section div.float {
158
+ box-shadow: 1px 1px 5px gray;
159
+ -webkit-box-shadow: 1px 1px 5px gray;
160
+ -moz-box-shadow: 1px 1px 5px gray;
161
+ clear: both;
162
+ float: right;
163
+ margin: 5px 0px 5px 10px;
164
+ max-width: 75%;
165
+ }
166
+ div#body div.section pre.code {
167
+ background: whitesmoke;
168
+ color: darkblue;
169
+ line-height: 125%;
170
+ overflow: auto;
171
+ padding: 5px 10px;
172
+ }
173
+ div#body div.section pre.console {
174
+ background: darkslategray;
175
+ color: white;
176
+ line-height: 125%;
177
+ overflow: auto;
178
+ padding: 5px 10px;
179
+ }
180
+
181
+ div#body div.section table {
182
+ background: whitesmoke;
183
+ border-collapse: separate;
184
+ border-spacing: 5px;
185
+ empty-cells: hide;
186
+ padding: 5px 10px;
187
+ }
188
+ div#body div.section table caption {
189
+ background: inherit;
190
+ padding-top: 5px;
191
+ }
192
+ div#body div.section table th {
193
+ background: white;
194
+ box-shadow: 1px 1px 3px gray;
195
+ -webkit-box-shadow: 1px 1px 3px gray;
196
+ -moz-box-shadow: 1px 1px 3px gray;
197
+ font-weight: normal;
198
+ padding: 0px 5px;
199
+ }
200
+ div#body div.section table td {
201
+ background: white;
202
+ box-shadow: 1px 1px 2px gray;
203
+ -webkit-box-shadow: 1px 1px 2px gray;
204
+ -moz-box-shadow: 1px 1px 2px gray;
205
+ padding: 0px 3px;
206
+ }
207
+
208
+ div#body div.section div.subsection {
209
+ clear: both;
210
+ margin: 5px 0px;
211
+ }
212
+ div#body div.section div.subsection h3 {
213
+ background: aliceblue;
214
+ border-bottom: 1px dashed lightgray;
215
+ color: #336;
216
+ font-size: 100%;
217
+ margin-top: 10px;
218
+ padding: 3px 5px;
219
+ }
220
+
221
+ div#body div.section div.subsubsection {
222
+ margin: 5px;
223
+ }
224
+ div#body div.section div.subsubsection h4 {
225
+ background: lavenderblush;
226
+ border-bottom: 1px dashed lightgray;
227
+ color: #336;
228
+ font-size: 100%;
229
+ margin-top: 10px;
230
+ padding: 3px 5px;
231
+ }
232
+
233
+ div#footer {
234
+ font-family: "Times New Roman";
235
+ padding: 5px 10px;
236
+ }
237
+ div#footer div.left {
238
+ float: left;
239
+ }
240
+ div#footer div.right {
241
+ float: right;
242
+ }
243
+ div#footer div.end {
244
+ clear: both;
245
+ }
@@ -0,0 +1,520 @@
1
+ #!/bin/sh
2
+ # install - install a program, script, or datafile
3
+
4
+ scriptversion=2009-04-28.21; # UTC
5
+
6
+ # This originates from X11R5 (mit/util/scripts/install.sh), which was
7
+ # later released in X11R6 (xc/config/util/install.sh) with the
8
+ # following copyright and license.
9
+ #
10
+ # Copyright (C) 1994 X Consortium
11
+ #
12
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ # of this software and associated documentation files (the "Software"), to
14
+ # deal in the Software without restriction, including without limitation the
15
+ # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
16
+ # sell copies of the Software, and to permit persons to whom the Software is
17
+ # furnished to do so, subject to the following conditions:
18
+ #
19
+ # The above copyright notice and this permission notice shall be included in
20
+ # all copies or substantial portions of the Software.
21
+ #
22
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
26
+ # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
27
+ # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28
+ #
29
+ # Except as contained in this notice, the name of the X Consortium shall not
30
+ # be used in advertising or otherwise to promote the sale, use or other deal-
31
+ # ings in this Software without prior written authorization from the X Consor-
32
+ # tium.
33
+ #
34
+ #
35
+ # FSF changes to this file are in the public domain.
36
+ #
37
+ # Calling this script install-sh is preferred over install.sh, to prevent
38
+ # `make' implicit rules from creating a file called install from it
39
+ # when there is no Makefile.
40
+ #
41
+ # This script is compatible with the BSD install script, but was written
42
+ # from scratch.
43
+
44
+ nl='
45
+ '
46
+ IFS=" "" $nl"
47
+
48
+ # set DOITPROG to echo to test this script
49
+
50
+ # Don't use :- since 4.3BSD and earlier shells don't like it.
51
+ doit=${DOITPROG-}
52
+ if test -z "$doit"; then
53
+ doit_exec=exec
54
+ else
55
+ doit_exec=$doit
56
+ fi
57
+
58
+ # Put in absolute file names if you don't have them in your path;
59
+ # or use environment vars.
60
+
61
+ chgrpprog=${CHGRPPROG-chgrp}
62
+ chmodprog=${CHMODPROG-chmod}
63
+ chownprog=${CHOWNPROG-chown}
64
+ cmpprog=${CMPPROG-cmp}
65
+ cpprog=${CPPROG-cp}
66
+ mkdirprog=${MKDIRPROG-mkdir}
67
+ mvprog=${MVPROG-mv}
68
+ rmprog=${RMPROG-rm}
69
+ stripprog=${STRIPPROG-strip}
70
+
71
+ posix_glob='?'
72
+ initialize_posix_glob='
73
+ test "$posix_glob" != "?" || {
74
+ if (set -f) 2>/dev/null; then
75
+ posix_glob=
76
+ else
77
+ posix_glob=:
78
+ fi
79
+ }
80
+ '
81
+
82
+ posix_mkdir=
83
+
84
+ # Desired mode of installed file.
85
+ mode=0755
86
+
87
+ chgrpcmd=
88
+ chmodcmd=$chmodprog
89
+ chowncmd=
90
+ mvcmd=$mvprog
91
+ rmcmd="$rmprog -f"
92
+ stripcmd=
93
+
94
+ src=
95
+ dst=
96
+ dir_arg=
97
+ dst_arg=
98
+
99
+ copy_on_change=false
100
+ no_target_directory=
101
+
102
+ usage="\
103
+ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
104
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
105
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
106
+ or: $0 [OPTION]... -d DIRECTORIES...
107
+
108
+ In the 1st form, copy SRCFILE to DSTFILE.
109
+ In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
110
+ In the 4th, create DIRECTORIES.
111
+
112
+ Options:
113
+ --help display this help and exit.
114
+ --version display version info and exit.
115
+
116
+ -c (ignored)
117
+ -C install only if different (preserve the last data modification time)
118
+ -d create directories instead of installing files.
119
+ -g GROUP $chgrpprog installed files to GROUP.
120
+ -m MODE $chmodprog installed files to MODE.
121
+ -o USER $chownprog installed files to USER.
122
+ -s $stripprog installed files.
123
+ -t DIRECTORY install into DIRECTORY.
124
+ -T report an error if DSTFILE is a directory.
125
+
126
+ Environment variables override the default commands:
127
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
128
+ RMPROG STRIPPROG
129
+ "
130
+
131
+ while test $# -ne 0; do
132
+ case $1 in
133
+ -c) ;;
134
+
135
+ -C) copy_on_change=true;;
136
+
137
+ -d) dir_arg=true;;
138
+
139
+ -g) chgrpcmd="$chgrpprog $2"
140
+ shift;;
141
+
142
+ --help) echo "$usage"; exit $?;;
143
+
144
+ -m) mode=$2
145
+ case $mode in
146
+ *' '* | *' '* | *'
147
+ '* | *'*'* | *'?'* | *'['*)
148
+ echo "$0: invalid mode: $mode" >&2
149
+ exit 1;;
150
+ esac
151
+ shift;;
152
+
153
+ -o) chowncmd="$chownprog $2"
154
+ shift;;
155
+
156
+ -s) stripcmd=$stripprog;;
157
+
158
+ -t) dst_arg=$2
159
+ shift;;
160
+
161
+ -T) no_target_directory=true;;
162
+
163
+ --version) echo "$0 $scriptversion"; exit $?;;
164
+
165
+ --) shift
166
+ break;;
167
+
168
+ -*) echo "$0: invalid option: $1" >&2
169
+ exit 1;;
170
+
171
+ *) break;;
172
+ esac
173
+ shift
174
+ done
175
+
176
+ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
177
+ # When -d is used, all remaining arguments are directories to create.
178
+ # When -t is used, the destination is already specified.
179
+ # Otherwise, the last argument is the destination. Remove it from $@.
180
+ for arg
181
+ do
182
+ if test -n "$dst_arg"; then
183
+ # $@ is not empty: it contains at least $arg.
184
+ set fnord "$@" "$dst_arg"
185
+ shift # fnord
186
+ fi
187
+ shift # arg
188
+ dst_arg=$arg
189
+ done
190
+ fi
191
+
192
+ if test $# -eq 0; then
193
+ if test -z "$dir_arg"; then
194
+ echo "$0: no input file specified." >&2
195
+ exit 1
196
+ fi
197
+ # It's OK to call `install-sh -d' without argument.
198
+ # This can happen when creating conditional directories.
199
+ exit 0
200
+ fi
201
+
202
+ if test -z "$dir_arg"; then
203
+ trap '(exit $?); exit' 1 2 13 15
204
+
205
+ # Set umask so as not to create temps with too-generous modes.
206
+ # However, 'strip' requires both read and write access to temps.
207
+ case $mode in
208
+ # Optimize common cases.
209
+ *644) cp_umask=133;;
210
+ *755) cp_umask=22;;
211
+
212
+ *[0-7])
213
+ if test -z "$stripcmd"; then
214
+ u_plus_rw=
215
+ else
216
+ u_plus_rw='% 200'
217
+ fi
218
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
219
+ *)
220
+ if test -z "$stripcmd"; then
221
+ u_plus_rw=
222
+ else
223
+ u_plus_rw=,u+rw
224
+ fi
225
+ cp_umask=$mode$u_plus_rw;;
226
+ esac
227
+ fi
228
+
229
+ for src
230
+ do
231
+ # Protect names starting with `-'.
232
+ case $src in
233
+ -*) src=./$src;;
234
+ esac
235
+
236
+ if test -n "$dir_arg"; then
237
+ dst=$src
238
+ dstdir=$dst
239
+ test -d "$dstdir"
240
+ dstdir_status=$?
241
+ else
242
+
243
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
244
+ # might cause directories to be created, which would be especially bad
245
+ # if $src (and thus $dsttmp) contains '*'.
246
+ if test ! -f "$src" && test ! -d "$src"; then
247
+ echo "$0: $src does not exist." >&2
248
+ exit 1
249
+ fi
250
+
251
+ if test -z "$dst_arg"; then
252
+ echo "$0: no destination specified." >&2
253
+ exit 1
254
+ fi
255
+
256
+ dst=$dst_arg
257
+ # Protect names starting with `-'.
258
+ case $dst in
259
+ -*) dst=./$dst;;
260
+ esac
261
+
262
+ # If destination is a directory, append the input filename; won't work
263
+ # if double slashes aren't ignored.
264
+ if test -d "$dst"; then
265
+ if test -n "$no_target_directory"; then
266
+ echo "$0: $dst_arg: Is a directory" >&2
267
+ exit 1
268
+ fi
269
+ dstdir=$dst
270
+ dst=$dstdir/`basename "$src"`
271
+ dstdir_status=0
272
+ else
273
+ # Prefer dirname, but fall back on a substitute if dirname fails.
274
+ dstdir=`
275
+ (dirname "$dst") 2>/dev/null ||
276
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
277
+ X"$dst" : 'X\(//\)[^/]' \| \
278
+ X"$dst" : 'X\(//\)$' \| \
279
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
280
+ echo X"$dst" |
281
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
282
+ s//\1/
283
+ q
284
+ }
285
+ /^X\(\/\/\)[^/].*/{
286
+ s//\1/
287
+ q
288
+ }
289
+ /^X\(\/\/\)$/{
290
+ s//\1/
291
+ q
292
+ }
293
+ /^X\(\/\).*/{
294
+ s//\1/
295
+ q
296
+ }
297
+ s/.*/./; q'
298
+ `
299
+
300
+ test -d "$dstdir"
301
+ dstdir_status=$?
302
+ fi
303
+ fi
304
+
305
+ obsolete_mkdir_used=false
306
+
307
+ if test $dstdir_status != 0; then
308
+ case $posix_mkdir in
309
+ '')
310
+ # Create intermediate dirs using mode 755 as modified by the umask.
311
+ # This is like FreeBSD 'install' as of 1997-10-28.
312
+ umask=`umask`
313
+ case $stripcmd.$umask in
314
+ # Optimize common cases.
315
+ *[2367][2367]) mkdir_umask=$umask;;
316
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
317
+
318
+ *[0-7])
319
+ mkdir_umask=`expr $umask + 22 \
320
+ - $umask % 100 % 40 + $umask % 20 \
321
+ - $umask % 10 % 4 + $umask % 2
322
+ `;;
323
+ *) mkdir_umask=$umask,go-w;;
324
+ esac
325
+
326
+ # With -d, create the new directory with the user-specified mode.
327
+ # Otherwise, rely on $mkdir_umask.
328
+ if test -n "$dir_arg"; then
329
+ mkdir_mode=-m$mode
330
+ else
331
+ mkdir_mode=
332
+ fi
333
+
334
+ posix_mkdir=false
335
+ case $umask in
336
+ *[123567][0-7][0-7])
337
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
338
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
339
+ ;;
340
+ *)
341
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
342
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
343
+
344
+ if (umask $mkdir_umask &&
345
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
346
+ then
347
+ if test -z "$dir_arg" || {
348
+ # Check for POSIX incompatibilities with -m.
349
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
350
+ # other-writeable bit of parent directory when it shouldn't.
351
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
352
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
353
+ case $ls_ld_tmpdir in
354
+ d????-?r-*) different_mode=700;;
355
+ d????-?--*) different_mode=755;;
356
+ *) false;;
357
+ esac &&
358
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
359
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
360
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
361
+ }
362
+ }
363
+ then posix_mkdir=:
364
+ fi
365
+ rmdir "$tmpdir/d" "$tmpdir"
366
+ else
367
+ # Remove any dirs left behind by ancient mkdir implementations.
368
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
369
+ fi
370
+ trap '' 0;;
371
+ esac;;
372
+ esac
373
+
374
+ if
375
+ $posix_mkdir && (
376
+ umask $mkdir_umask &&
377
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
378
+ )
379
+ then :
380
+ else
381
+
382
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
383
+ # or it failed possibly due to a race condition. Create the
384
+ # directory the slow way, step by step, checking for races as we go.
385
+
386
+ case $dstdir in
387
+ /*) prefix='/';;
388
+ -*) prefix='./';;
389
+ *) prefix='';;
390
+ esac
391
+
392
+ eval "$initialize_posix_glob"
393
+
394
+ oIFS=$IFS
395
+ IFS=/
396
+ $posix_glob set -f
397
+ set fnord $dstdir
398
+ shift
399
+ $posix_glob set +f
400
+ IFS=$oIFS
401
+
402
+ prefixes=
403
+
404
+ for d
405
+ do
406
+ test -z "$d" && continue
407
+
408
+ prefix=$prefix$d
409
+ if test -d "$prefix"; then
410
+ prefixes=
411
+ else
412
+ if $posix_mkdir; then
413
+ (umask=$mkdir_umask &&
414
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
415
+ # Don't fail if two instances are running concurrently.
416
+ test -d "$prefix" || exit 1
417
+ else
418
+ case $prefix in
419
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
420
+ *) qprefix=$prefix;;
421
+ esac
422
+ prefixes="$prefixes '$qprefix'"
423
+ fi
424
+ fi
425
+ prefix=$prefix/
426
+ done
427
+
428
+ if test -n "$prefixes"; then
429
+ # Don't fail if two instances are running concurrently.
430
+ (umask $mkdir_umask &&
431
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
432
+ test -d "$dstdir" || exit 1
433
+ obsolete_mkdir_used=true
434
+ fi
435
+ fi
436
+ fi
437
+
438
+ if test -n "$dir_arg"; then
439
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
440
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
441
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
442
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
443
+ else
444
+
445
+ # Make a couple of temp file names in the proper directory.
446
+ dsttmp=$dstdir/_inst.$$_
447
+ rmtmp=$dstdir/_rm.$$_
448
+
449
+ # Trap to clean up those temp files at exit.
450
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
451
+
452
+ # Copy the file name to the temp name.
453
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
454
+
455
+ # and set any options; do chmod last to preserve setuid bits.
456
+ #
457
+ # If any of these fail, we abort the whole thing. If we want to
458
+ # ignore errors from any of these, just make sure not to ignore
459
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
460
+ #
461
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
462
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
463
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
464
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
465
+
466
+ # If -C, don't bother to copy if it wouldn't change the file.
467
+ if $copy_on_change &&
468
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
469
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
470
+
471
+ eval "$initialize_posix_glob" &&
472
+ $posix_glob set -f &&
473
+ set X $old && old=:$2:$4:$5:$6 &&
474
+ set X $new && new=:$2:$4:$5:$6 &&
475
+ $posix_glob set +f &&
476
+
477
+ test "$old" = "$new" &&
478
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
479
+ then
480
+ rm -f "$dsttmp"
481
+ else
482
+ # Rename the file to the real destination.
483
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
484
+
485
+ # The rename failed, perhaps because mv can't rename something else
486
+ # to itself, or perhaps because mv is so ancient that it does not
487
+ # support -f.
488
+ {
489
+ # Now remove or move aside any old file at destination location.
490
+ # We try this two ways since rm can't unlink itself on some
491
+ # systems and the destination file might be busy for other
492
+ # reasons. In this case, the final cleanup might fail but the new
493
+ # file should still install successfully.
494
+ {
495
+ test ! -f "$dst" ||
496
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
497
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
498
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
499
+ } ||
500
+ { echo "$0: cannot unlink or rename $dst" >&2
501
+ (exit 1); exit 1
502
+ }
503
+ } &&
504
+
505
+ # Now rename the file to the real destination.
506
+ $doit $mvcmd "$dsttmp" "$dst"
507
+ }
508
+ fi || exit 1
509
+
510
+ trap '' 0
511
+ fi
512
+ done
513
+
514
+ # Local variables:
515
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
516
+ # time-stamp-start: "scriptversion="
517
+ # time-stamp-format: "%:y-%02m-%02d.%02H"
518
+ # time-stamp-time-zone: "UTC"
519
+ # time-stamp-end: "; # UTC"
520
+ # End: