admesh 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/ext/admesh/admesh/AUTHORS +11 -0
  3. data/ext/admesh/admesh/COPYING +339 -0
  4. data/ext/admesh/admesh/ChangeLog +143 -0
  5. data/ext/admesh/admesh/ChangeLog.old +42 -0
  6. data/ext/admesh/admesh/INSTALL +14 -0
  7. data/ext/admesh/admesh/Makefile.am +62 -0
  8. data/ext/admesh/admesh/Makefile.in +1100 -0
  9. data/ext/admesh/admesh/README.md +115 -0
  10. data/ext/admesh/admesh/aclocal.m4 +1183 -0
  11. data/ext/admesh/admesh/admesh-doc.txt +475 -0
  12. data/ext/admesh/admesh/admesh.1 +173 -0
  13. data/ext/admesh/admesh/block.stl +86 -0
  14. data/ext/admesh/admesh/compile +347 -0
  15. data/ext/admesh/admesh/config.guess +1420 -0
  16. data/ext/admesh/admesh/config.h.in +65 -0
  17. data/ext/admesh/admesh/config.sub +1798 -0
  18. data/ext/admesh/admesh/configure +14671 -0
  19. data/ext/admesh/admesh/configure.ac +90 -0
  20. data/ext/admesh/admesh/depcomp +791 -0
  21. data/ext/admesh/admesh/install-sh +527 -0
  22. data/ext/admesh/admesh/libadmesh.pc.in +11 -0
  23. data/ext/admesh/admesh/ltmain.sh +9655 -0
  24. data/ext/admesh/admesh/m4/libtool.m4 +7992 -0
  25. data/ext/admesh/admesh/m4/ltoptions.m4 +384 -0
  26. data/ext/admesh/admesh/m4/ltsugar.m4 +123 -0
  27. data/ext/admesh/admesh/m4/ltversion.m4 +23 -0
  28. data/ext/admesh/admesh/m4/lt~obsolete.m4 +98 -0
  29. data/ext/admesh/admesh/missing +215 -0
  30. data/ext/admesh/admesh/src/admesh.c +425 -0
  31. data/ext/admesh/admesh/src/connect.c +971 -0
  32. data/ext/admesh/admesh/src/normals.c +333 -0
  33. data/ext/admesh/admesh/src/shared.c +262 -0
  34. data/ext/admesh/admesh/src/stl.h +201 -0
  35. data/ext/admesh/admesh/src/stl_io.c +479 -0
  36. data/ext/admesh/admesh/src/stlinit.c +377 -0
  37. data/ext/admesh/admesh/src/util.c +557 -0
  38. data/ext/admesh/extconf.rb +14 -0
  39. data/lib/admesh.rb +40 -0
  40. metadata +84 -0
@@ -0,0 +1,173 @@
1
+ .TH ADMESH "1" 21/10/2013 "User Commands"
2
+ .SH NAME
3
+ ADMesh - a program for processing triangulated solid meshes
4
+ .SH SYNOPSIS
5
+ .B admesh
6
+ [\fIOPTION\fR]... \fIfile\fR
7
+ .SH DESCRIPTION
8
+ ADMesh is a program for processing triangulated solid meshes. Currently, ADMesh only reads the STL file format that is used for rapid prototyping applications, although it can write STL, VRML, OFF, and DXF files.
9
+
10
+ By default, ADMesh performs all of the mesh checking and repairing options
11
+ on the input file. This means that is checks exact, nearby,
12
+ remove-unconnected, fill-holes, normal-directions, and normal-values. The
13
+ file type (ASCII or binary) is automatically detected. The input file is
14
+ not modified unless it is specified by the \fB--write\fP option. If the following
15
+ command line was input:
16
+
17
+ .B admesh sphere.stl
18
+
19
+ The file sphere.stl would be opened and read, it would be checked and fixed
20
+ if necessary, and the results of processing would be printed out. The
21
+ results would not be saved.
22
+
23
+ The default value for tolerance is the length of the shortest edge of the
24
+ mesh. The default number of iterations is 2, and the default increment is
25
+ 0.01% of the diameter of a sphere that encloses the entire mesh.
26
+
27
+ If any of the options \fB--exact\fP, \fB--nearby\fP, \fB--remove-unconnected\fP, \fB--fill-holes\fP,
28
+ \fB--normal-directions\fP, \fB--reverse-all\fP, \fB--normal-values\fP, or \fB--no-check\fP are
29
+ given, then no other checks besides that one will be done unless they are
30
+ specified or unless they are required by ADMesh before the specified check
31
+ can be done. For example the following command line:
32
+
33
+ .B admesh --remove-unconnected sphere.stl
34
+
35
+ would first do an exact check because it is required, and then the
36
+ unconnected facets would be removed. The results would be printed and no
37
+ other checks would be done.
38
+ .SH OPTIONS
39
+ .TP
40
+ \fB\-\-x\-rotate\fR=\fIangle\fR
41
+ Rotate CCW about x\-axis by angle degrees
42
+ .TP
43
+ \fB\-\-y\-rotate\fR=\fIangle\fR
44
+ Rotate CCW about y\-axis by angle degrees
45
+ .TP
46
+ \fB\-\-z\-rotate\fR=\fIangle\fR
47
+ Rotate CCW about z\-axis by angle degrees
48
+ .TP
49
+ \fB\-\-xy\-mirror\fR
50
+ Mirror about the xy plane
51
+ .TP
52
+ \fB\-\-yz\-mirror\fR
53
+ Mirror about the yz plane
54
+ .TP
55
+ \fB\-\-xz\-mirror\fR
56
+ Mirror about the xz plane
57
+ .TP
58
+ \fB\-\-scale\fR=\fIfactor\fR
59
+ Scale the file by factor (multiply by factor)
60
+ .TP
61
+ \fB\-\-translate\fR=\fIx\fR,y,z
62
+ Translate the file to x, y, and z
63
+ .TP
64
+ \fB\-\-merge\fR=\fIname\fR
65
+ Merge file called name with input file
66
+ .TP
67
+ \fB\-e\fR, \fB\-\-exact\fR
68
+ Only check for perfectly matched edges
69
+ .TP
70
+ \fB\-n\fR, \fB\-\-nearby\fR
71
+ Find and connect nearby facets. Correct bad facets
72
+ .TP
73
+ \fB\-t\fR, \fB\-\-tolerance\fR=\fItol\fR
74
+ Initial tolerance to use for nearby check = tol
75
+ .TP
76
+ \fB\-i\fR, \fB\-\-iterations\fR=\fIi\fR
77
+ Number of iterations for nearby check = i
78
+ .TP
79
+ \fB\-m\fR, \fB\-\-increment\fR=\fIinc\fR
80
+ Amount to increment tolerance after iteration=inc
81
+ .HP
82
+ \fB\-u\fR, \fB\-\-remove\-unconnected\fR Remove facets that have 0 neighbors
83
+ .TP
84
+ \fB\-f\fR, \fB\-\-fill\-holes\fR
85
+ Add facets to fill holes
86
+ .TP
87
+ \fB\-d\fR, \fB\-\-normal\-directions\fR
88
+ Check and fix direction of normals(ie cw, ccw)
89
+ .TP
90
+ \fB\-\-reverse\-all\fR
91
+ Reverse the directions of all facets and normals
92
+ .TP
93
+ \fB\-v\fR, \fB\-\-normal\-values\fR
94
+ Check and fix normal values
95
+ .TP
96
+ \fB\-c\fR, \fB\-\-no\-check\fR
97
+ Don't do any check on input file
98
+ .TP
99
+ \fB\-b\fR, \fB\-\-write\-binary\-stl\fR=\fIname\fR
100
+ Output a binary STL file called name
101
+ .TP
102
+ \fB\-a\fR, \fB\-\-write\-ascii\-stl\fR=\fIname\fR
103
+ Output an ascii STL file called name
104
+ .TP
105
+ \fB\-\-write\-off\fR=\fIname\fR
106
+ Output a Geomview OFF format file called name
107
+ .TP
108
+ \fB\-\-write\-dxf\fR=\fIname\fR
109
+ Output a DXF format file called name
110
+ .TP
111
+ \fB\-\-write\-vrml\fR=\fIname\fR
112
+ Output a VRML format file called name
113
+ .TP
114
+ \fB\-\-help\fR
115
+ Display this help and exit
116
+ .TP
117
+ \fB\-\-version\fR
118
+ Output version information and exit
119
+ .PP
120
+ The functions are executed in the same order as the options shown here.
121
+ So check here to find what happens if, for example, \fB\-\-translate\fR and \fB\-\-merge\fR
122
+ options are specified together. The order of the options specified on the
123
+ command line is not important.
124
+ .SH EXAMPLES
125
+ To perform all checks except for nearby, the following command line would be
126
+ used:
127
+
128
+ .B admesh --exact --remove-unconnected --fill-holes --normal-directions --normal-values sphere.stl
129
+
130
+ Actually, since the \fBexact\fP check is required by ADMesh before
131
+ \fBremove-unconnected\fP, and \fBremove-unconnected\fP is required before \fB--fill-holes\fP,
132
+ the above command line could be shortened as follows with the same results:
133
+
134
+ .B admesh --fill-holes --normal-directions --normal-values sphere.stl
135
+
136
+ And again the same results could be achieved using the short options:
137
+
138
+ .B admesh -fudev sphere.stl
139
+
140
+ or
141
+
142
+ .B admesh -fdv sphere.stl
143
+
144
+ The following command lines do the same thing:
145
+
146
+ .B admesh sphere.stl
147
+
148
+ .B admesh -fundev sphere.stl
149
+
150
+ .B admesh -f -u -n -d -e -v sphere.stl
151
+
152
+ since the \fB-fundev\fP options are implied by default. To eliminate one of the
153
+ checks, just remove the letter of the check to eliminate from the "word" fundev.
154
+ .SH SEE ALSO
155
+ For more information about the options and output read
156
+ .B admesh-doc.txt
157
+ - it is usually located in /usr/share/doc/admesh-x.xx dir.
158
+ .SH COPYRIGHT
159
+ Copyright (C) 1995, 1996 Anthony D. Martin <amartin@engr.csulb.edu>
160
+
161
+ This program is free software; you can redistribute it and/or modify
162
+ it under the terms of the GNU General Public License as published by
163
+ the Free Software Foundation; either version 2 of the License, or
164
+ (at your option) any later version.
165
+
166
+ This program is distributed in the hope that it will be useful,
167
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
168
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
169
+ GNU General Public License for more details.
170
+
171
+ You should have received a copy of the GNU General Public License along
172
+ with this program; if not, write to the Free Software Foundation, Inc.,
173
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@@ -0,0 +1,86 @@
1
+ SOLID Untitled1
2
+ FACET NORMAL 0.00000000E+00 0.00000000E+00 1.00000000E+00
3
+ OUTER LOOP
4
+ VERTEX -1.96850394E+00 1.96850394E+00 1.96850394E+00
5
+ VERTEX -1.96850394E+00 -1.96850394E+00 1.96850394E+00
6
+ VERTEX 1.96850394E+00 -1.96850394E+00 1.96850394E+00
7
+ ENDLOOP
8
+ ENDFACET
9
+ FACET NORMAL 0.00000000E+00 -0.00000000E+00 1.00000000E+00
10
+ OUTER LOOP
11
+ VERTEX 1.96850394E+00 -1.96850394E+00 1.96850394E+00
12
+ VERTEX 1.96850394E+00 1.96850394E+00 1.96850394E+00
13
+ VERTEX -1.96850394E+00 1.96850394E+00 1.96850394E+00
14
+ ENDLOOP
15
+ ENDFACET
16
+ FACET NORMAL 0.00000000E+00 -0.00000000E+00 -1.00000000E+00
17
+ OUTER LOOP
18
+ VERTEX 1.96850394E+00 1.96850394E+00 -1.96850394E+00
19
+ VERTEX 1.96850394E+00 -1.96850394E+00 -1.96850394E+00
20
+ VERTEX -1.96850394E+00 -1.96850394E+00 -1.96850394E+00
21
+ ENDLOOP
22
+ ENDFACET
23
+ FACET NORMAL 0.00000000E+00 0.00000000E+00 -1.00000000E+00
24
+ OUTER LOOP
25
+ VERTEX -1.96850394E+00 -1.96850394E+00 -1.96850394E+00
26
+ VERTEX -1.96850394E+00 1.96850394E+00 -1.96850394E+00
27
+ VERTEX 1.96850394E+00 1.96850394E+00 -1.96850394E+00
28
+ ENDLOOP
29
+ ENDFACET
30
+ FACET NORMAL -1.00000000E+00 0.00000000E+00 0.00000000E+00
31
+ OUTER LOOP
32
+ VERTEX -1.96850394E+00 1.96850394E+00 -1.96850394E+00
33
+ VERTEX -1.96850394E+00 -1.96850394E+00 -1.96850394E+00
34
+ VERTEX -1.96850394E+00 -1.96850394E+00 1.96850394E+00
35
+ ENDLOOP
36
+ ENDFACET
37
+ FACET NORMAL -1.00000000E+00 0.00000000E+00 0.00000000E+00
38
+ OUTER LOOP
39
+ VERTEX -1.96850394E+00 -1.96850394E+00 1.96850394E+00
40
+ VERTEX -1.96850394E+00 1.96850394E+00 1.96850394E+00
41
+ VERTEX -1.96850394E+00 1.96850394E+00 -1.96850394E+00
42
+ ENDLOOP
43
+ ENDFACET
44
+ FACET NORMAL 1.00000000E+00 0.00000000E+00 0.00000000E+00
45
+ OUTER LOOP
46
+ VERTEX 1.96850394E+00 1.96850394E+00 1.96850394E+00
47
+ VERTEX 1.96850394E+00 -1.96850394E+00 1.96850394E+00
48
+ VERTEX 1.96850394E+00 -1.96850394E+00 -1.96850394E+00
49
+ ENDLOOP
50
+ ENDFACET
51
+ FACET NORMAL 1.00000000E+00 0.00000000E+00 0.00000000E+00
52
+ OUTER LOOP
53
+ VERTEX 1.96850394E+00 -1.96850394E+00 -1.96850394E+00
54
+ VERTEX 1.96850394E+00 1.96850394E+00 -1.96850394E+00
55
+ VERTEX 1.96850394E+00 1.96850394E+00 1.96850394E+00
56
+ ENDLOOP
57
+ ENDFACET
58
+ FACET NORMAL 0.00000000E+00 -1.00000000E+00 0.00000000E+00
59
+ OUTER LOOP
60
+ VERTEX -1.96850394E+00 -1.96850394E+00 1.96850394E+00
61
+ VERTEX -1.96850394E+00 -1.96850394E+00 -1.96850394E+00
62
+ VERTEX 1.96850394E+00 -1.96850394E+00 -1.96850394E+00
63
+ ENDLOOP
64
+ ENDFACET
65
+ FACET NORMAL 0.00000000E+00 -1.00000000E+00 0.00000000E+00
66
+ OUTER LOOP
67
+ VERTEX 1.96850394E+00 -1.96850394E+00 -1.96850394E+00
68
+ VERTEX 1.96850394E+00 -1.96850394E+00 1.96850394E+00
69
+ VERTEX -1.96850394E+00 -1.96850394E+00 1.96850394E+00
70
+ ENDLOOP
71
+ ENDFACET
72
+ FACET NORMAL 0.00000000E+00 1.00000000E+00 0.00000000E+00
73
+ OUTER LOOP
74
+ VERTEX -1.96850394E+00 1.96850394E+00 -1.96850394E+00
75
+ VERTEX -1.96850394E+00 1.96850394E+00 1.96850394E+00
76
+ VERTEX 1.96850394E+00 1.96850394E+00 1.96850394E+00
77
+ ENDLOOP
78
+ ENDFACET
79
+ FACET NORMAL 0.00000000E+00 1.00000000E+00 0.00000000E+00
80
+ OUTER LOOP
81
+ VERTEX 1.96850394E+00 1.96850394E+00 1.96850394E+00
82
+ VERTEX 1.96850394E+00 1.96850394E+00 -1.96850394E+00
83
+ VERTEX -1.96850394E+00 1.96850394E+00 -1.96850394E+00
84
+ ENDLOOP
85
+ ENDFACET
86
+ ENDSOLID Untitled1
@@ -0,0 +1,347 @@
1
+ #! /bin/sh
2
+ # Wrapper for compilers which do not understand '-c -o'.
3
+
4
+ scriptversion=2012-10-14.11; # UTC
5
+
6
+ # Copyright (C) 1999-2013 Free Software Foundation, Inc.
7
+ # Written by Tom Tromey <tromey@cygnus.com>.
8
+ #
9
+ # This program is free software; you can redistribute it and/or modify
10
+ # it under the terms of the GNU General Public License as published by
11
+ # the Free Software Foundation; either version 2, or (at your option)
12
+ # any later version.
13
+ #
14
+ # This program is distributed in the hope that it will be useful,
15
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
+ # GNU General Public License for more details.
18
+ #
19
+ # You should have received a copy of the GNU General Public License
20
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
21
+
22
+ # As a special exception to the GNU General Public License, if you
23
+ # distribute this file as part of a program that contains a
24
+ # configuration script generated by Autoconf, you may include it under
25
+ # the same distribution terms that you use for the rest of that program.
26
+
27
+ # This file is maintained in Automake, please report
28
+ # bugs to <bug-automake@gnu.org> or send patches to
29
+ # <automake-patches@gnu.org>.
30
+
31
+ nl='
32
+ '
33
+
34
+ # We need space, tab and new line, in precisely that order. Quoting is
35
+ # there to prevent tools from complaining about whitespace usage.
36
+ IFS=" "" $nl"
37
+
38
+ file_conv=
39
+
40
+ # func_file_conv build_file lazy
41
+ # Convert a $build file to $host form and store it in $file
42
+ # Currently only supports Windows hosts. If the determined conversion
43
+ # type is listed in (the comma separated) LAZY, no conversion will
44
+ # take place.
45
+ func_file_conv ()
46
+ {
47
+ file=$1
48
+ case $file in
49
+ / | /[!/]*) # absolute file, and not a UNC file
50
+ if test -z "$file_conv"; then
51
+ # lazily determine how to convert abs files
52
+ case `uname -s` in
53
+ MINGW*)
54
+ file_conv=mingw
55
+ ;;
56
+ CYGWIN*)
57
+ file_conv=cygwin
58
+ ;;
59
+ *)
60
+ file_conv=wine
61
+ ;;
62
+ esac
63
+ fi
64
+ case $file_conv/,$2, in
65
+ *,$file_conv,*)
66
+ ;;
67
+ mingw/*)
68
+ file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
69
+ ;;
70
+ cygwin/*)
71
+ file=`cygpath -m "$file" || echo "$file"`
72
+ ;;
73
+ wine/*)
74
+ file=`winepath -w "$file" || echo "$file"`
75
+ ;;
76
+ esac
77
+ ;;
78
+ esac
79
+ }
80
+
81
+ # func_cl_dashL linkdir
82
+ # Make cl look for libraries in LINKDIR
83
+ func_cl_dashL ()
84
+ {
85
+ func_file_conv "$1"
86
+ if test -z "$lib_path"; then
87
+ lib_path=$file
88
+ else
89
+ lib_path="$lib_path;$file"
90
+ fi
91
+ linker_opts="$linker_opts -LIBPATH:$file"
92
+ }
93
+
94
+ # func_cl_dashl library
95
+ # Do a library search-path lookup for cl
96
+ func_cl_dashl ()
97
+ {
98
+ lib=$1
99
+ found=no
100
+ save_IFS=$IFS
101
+ IFS=';'
102
+ for dir in $lib_path $LIB
103
+ do
104
+ IFS=$save_IFS
105
+ if $shared && test -f "$dir/$lib.dll.lib"; then
106
+ found=yes
107
+ lib=$dir/$lib.dll.lib
108
+ break
109
+ fi
110
+ if test -f "$dir/$lib.lib"; then
111
+ found=yes
112
+ lib=$dir/$lib.lib
113
+ break
114
+ fi
115
+ if test -f "$dir/lib$lib.a"; then
116
+ found=yes
117
+ lib=$dir/lib$lib.a
118
+ break
119
+ fi
120
+ done
121
+ IFS=$save_IFS
122
+
123
+ if test "$found" != yes; then
124
+ lib=$lib.lib
125
+ fi
126
+ }
127
+
128
+ # func_cl_wrapper cl arg...
129
+ # Adjust compile command to suit cl
130
+ func_cl_wrapper ()
131
+ {
132
+ # Assume a capable shell
133
+ lib_path=
134
+ shared=:
135
+ linker_opts=
136
+ for arg
137
+ do
138
+ if test -n "$eat"; then
139
+ eat=
140
+ else
141
+ case $1 in
142
+ -o)
143
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
144
+ eat=1
145
+ case $2 in
146
+ *.o | *.[oO][bB][jJ])
147
+ func_file_conv "$2"
148
+ set x "$@" -Fo"$file"
149
+ shift
150
+ ;;
151
+ *)
152
+ func_file_conv "$2"
153
+ set x "$@" -Fe"$file"
154
+ shift
155
+ ;;
156
+ esac
157
+ ;;
158
+ -I)
159
+ eat=1
160
+ func_file_conv "$2" mingw
161
+ set x "$@" -I"$file"
162
+ shift
163
+ ;;
164
+ -I*)
165
+ func_file_conv "${1#-I}" mingw
166
+ set x "$@" -I"$file"
167
+ shift
168
+ ;;
169
+ -l)
170
+ eat=1
171
+ func_cl_dashl "$2"
172
+ set x "$@" "$lib"
173
+ shift
174
+ ;;
175
+ -l*)
176
+ func_cl_dashl "${1#-l}"
177
+ set x "$@" "$lib"
178
+ shift
179
+ ;;
180
+ -L)
181
+ eat=1
182
+ func_cl_dashL "$2"
183
+ ;;
184
+ -L*)
185
+ func_cl_dashL "${1#-L}"
186
+ ;;
187
+ -static)
188
+ shared=false
189
+ ;;
190
+ -Wl,*)
191
+ arg=${1#-Wl,}
192
+ save_ifs="$IFS"; IFS=','
193
+ for flag in $arg; do
194
+ IFS="$save_ifs"
195
+ linker_opts="$linker_opts $flag"
196
+ done
197
+ IFS="$save_ifs"
198
+ ;;
199
+ -Xlinker)
200
+ eat=1
201
+ linker_opts="$linker_opts $2"
202
+ ;;
203
+ -*)
204
+ set x "$@" "$1"
205
+ shift
206
+ ;;
207
+ *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
208
+ func_file_conv "$1"
209
+ set x "$@" -Tp"$file"
210
+ shift
211
+ ;;
212
+ *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
213
+ func_file_conv "$1" mingw
214
+ set x "$@" "$file"
215
+ shift
216
+ ;;
217
+ *)
218
+ set x "$@" "$1"
219
+ shift
220
+ ;;
221
+ esac
222
+ fi
223
+ shift
224
+ done
225
+ if test -n "$linker_opts"; then
226
+ linker_opts="-link$linker_opts"
227
+ fi
228
+ exec "$@" $linker_opts
229
+ exit 1
230
+ }
231
+
232
+ eat=
233
+
234
+ case $1 in
235
+ '')
236
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
237
+ exit 1;
238
+ ;;
239
+ -h | --h*)
240
+ cat <<\EOF
241
+ Usage: compile [--help] [--version] PROGRAM [ARGS]
242
+
243
+ Wrapper for compilers which do not understand '-c -o'.
244
+ Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
245
+ arguments, and rename the output as expected.
246
+
247
+ If you are trying to build a whole package this is not the
248
+ right script to run: please start by reading the file 'INSTALL'.
249
+
250
+ Report bugs to <bug-automake@gnu.org>.
251
+ EOF
252
+ exit $?
253
+ ;;
254
+ -v | --v*)
255
+ echo "compile $scriptversion"
256
+ exit $?
257
+ ;;
258
+ cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
259
+ func_cl_wrapper "$@" # Doesn't return...
260
+ ;;
261
+ esac
262
+
263
+ ofile=
264
+ cfile=
265
+
266
+ for arg
267
+ do
268
+ if test -n "$eat"; then
269
+ eat=
270
+ else
271
+ case $1 in
272
+ -o)
273
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
274
+ # So we strip '-o arg' only if arg is an object.
275
+ eat=1
276
+ case $2 in
277
+ *.o | *.obj)
278
+ ofile=$2
279
+ ;;
280
+ *)
281
+ set x "$@" -o "$2"
282
+ shift
283
+ ;;
284
+ esac
285
+ ;;
286
+ *.c)
287
+ cfile=$1
288
+ set x "$@" "$1"
289
+ shift
290
+ ;;
291
+ *)
292
+ set x "$@" "$1"
293
+ shift
294
+ ;;
295
+ esac
296
+ fi
297
+ shift
298
+ done
299
+
300
+ if test -z "$ofile" || test -z "$cfile"; then
301
+ # If no '-o' option was seen then we might have been invoked from a
302
+ # pattern rule where we don't need one. That is ok -- this is a
303
+ # normal compilation that the losing compiler can handle. If no
304
+ # '.c' file was seen then we are probably linking. That is also
305
+ # ok.
306
+ exec "$@"
307
+ fi
308
+
309
+ # Name of file we expect compiler to create.
310
+ cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
311
+
312
+ # Create the lock directory.
313
+ # Note: use '[/\\:.-]' here to ensure that we don't use the same name
314
+ # that we are using for the .o file. Also, base the name on the expected
315
+ # object file name, since that is what matters with a parallel build.
316
+ lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
317
+ while true; do
318
+ if mkdir "$lockdir" >/dev/null 2>&1; then
319
+ break
320
+ fi
321
+ sleep 1
322
+ done
323
+ # FIXME: race condition here if user kills between mkdir and trap.
324
+ trap "rmdir '$lockdir'; exit 1" 1 2 15
325
+
326
+ # Run the compile.
327
+ "$@"
328
+ ret=$?
329
+
330
+ if test -f "$cofile"; then
331
+ test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
332
+ elif test -f "${cofile}bj"; then
333
+ test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
334
+ fi
335
+
336
+ rmdir "$lockdir"
337
+ exit $ret
338
+
339
+ # Local Variables:
340
+ # mode: shell-script
341
+ # sh-indentation: 2
342
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
343
+ # time-stamp-start: "scriptversion="
344
+ # time-stamp-format: "%:y-%02m-%02d.%02H"
345
+ # time-stamp-time-zone: "UTC"
346
+ # time-stamp-end: "; # UTC"
347
+ # End: