2163
|
1 #! /bin/sh |
|
2 # |
|
3 # mkoctfile -- create a .oct file suitable for dynamic linking by |
|
4 # Octave. |
|
5 |
3051
|
6 # Exit immediately on any error. |
|
7 |
2163
|
8 set -e |
|
9 |
3051
|
10 # Default values for these variables are filled in when Octave is |
|
11 # compiled. |
|
12 |
|
13 : ${CPPFLAGS=%CPPFLAGS%} |
|
14 : ${INCFLAGS=%INCFLAGS%} |
|
15 : ${F77=%F77%} |
|
16 : ${FFLAGS=%FFLAGS%} |
|
17 : ${FPICFLAG=%FPICFLAG%} |
|
18 : ${CC=%CC%} |
|
19 : ${CFLAGS=%CFLAGS%} |
|
20 : ${CPICFLAG=%CPICFLAG%} |
|
21 : ${CXX=%CXX%} |
|
22 : ${CXXFLAGS=%CXXFLAGS%} |
|
23 : ${CXXPICFLAG=%CXXPICFLAG%} |
|
24 : ${HOST_CXXFLAGS=%HOST_CXXFLAGS%} |
|
25 : ${NO_IMPLICIT_TEMPLATES=%NO_IMPLICIT_TEMPLATES%} |
|
26 : ${GCC_IEEE_FP_FLAG=%GCC_IEEE_FP_FLAG%} |
|
27 |
|
28 : ${SH_LD=%SH_LD%} |
|
29 : ${SH_LDFLAGS=%SH_LDFLAGS%} |
|
30 |
|
31 : ${ALL_FFLAGS="$FFLAGS"} |
|
32 |
|
33 : ${ALL_CFLAGS="$INCFLAGS $GCC_IEEE_FP_FLAG $CFLAGS"} |
|
34 |
|
35 : ${ALL_CXXFLAGS="$INCFLAGS $HOST_CXXFLAGS $NO_IMPLICIT_TEMPLATES $GCC_IEEE_FP_FLAG $CXXFLAGS"} |
|
36 |
|
37 # Local variables. |
|
38 |
|
39 usage_msg="usage: mkoctfile [options] file ..." |
|
40 |
|
41 cfiles= |
|
42 ccfiles= |
|
43 f77files= |
|
44 objfiles= |
|
45 octfiles= |
|
46 octfile= |
|
47 ldflags= |
|
48 dbg=: |
|
49 strip= |
|
50 |
|
51 if [ $# -eq 0 ]; then |
|
52 echo $usage_msg |
|
53 exit 1; |
2163
|
54 fi |
|
55 |
3051
|
56 while [ $# -gt 0 ]; do |
|
57 file= |
|
58 case "$1" in |
|
59 *.c) |
|
60 file=$1 |
|
61 cfiles="$cfiles $file" |
|
62 ;; |
|
63 *.cc | *.C | *.cpp) |
|
64 file=$1 |
|
65 ccfiles="$ccfiles $file" |
|
66 ;; |
|
67 *.f | *.F) |
|
68 file=$1 |
|
69 f77files="$f77files $file" |
|
70 ;; |
|
71 *.o) |
|
72 file=$1 |
|
73 objfiles="$objfiles $file" |
|
74 ;; |
|
75 -d | --debug) |
|
76 dbg=echo |
|
77 ;; |
|
78 -h | -? | --help) |
|
79 echo $usage_msg |
|
80 cat << EOF |
2163
|
81 |
3051
|
82 Options: |
|
83 |
|
84 -h, -? --help Print this message. |
|
85 -v, --verbose Echo commands as they are executed. |
|
86 -o FILE, --ouput FILE Output file name. Default extension is .oct. |
|
87 -lLIB Add library LIB to link command. |
|
88 |
|
89 FILE Compile or link FILE. Recognized file types are: |
|
90 |
|
91 .c C source |
|
92 .cc C++ source |
|
93 .C C++ source |
|
94 .cpp C++ source |
|
95 .f Fortran source |
|
96 .F Fortran source |
|
97 .o object file |
2163
|
98 |
3051
|
99 EOF |
|
100 exit 0 |
|
101 ;; |
|
102 -o | --output) |
|
103 shift |
|
104 if [ $# -gt 0 ]; then |
|
105 octfile=`echo $1 | sed 's,\.[^.]*$,,'`.oct |
|
106 else |
|
107 echo "mkoctfile: output file name missing" |
|
108 fi |
|
109 ;; |
|
110 -*) |
|
111 ldflags="$ldflags $1";; |
|
112 "") |
|
113 break |
|
114 ;; |
|
115 *) |
|
116 echo "mkoctfile: unrecognized argument $1" |
|
117 exit 1 |
|
118 ;; |
|
119 esac |
|
120 if [ -n "$file" ]; then |
|
121 if [ -z "$octfile" ]; then |
|
122 octfile=`echo $file | sed 's,\.[^.]*$,,'`.oct |
|
123 fi |
|
124 fi |
|
125 shift |
|
126 done |
2163
|
127 |
3051
|
128 # Compile Fortran, C, and C++ files. Add the name of each object file |
|
129 # that is produced to the overall list of object files. |
2163
|
130 |
3051
|
131 if [ -n "$f77files" ]; then |
|
132 for f in $f77files; do |
|
133 case $f in |
|
134 *.f) |
|
135 b=`echo $f | sed 's,\.f$,,'` |
|
136 ;; |
|
137 *.F) |
|
138 b=`echo $f | sed 's,\.F$,,'` |
|
139 ;; |
|
140 esac |
|
141 o=$b.o |
|
142 objfiles="$objfiles $o" |
|
143 $dbg $F77 -c $FPICFLAG $ALL_FFLAGS $f -o $o |
|
144 eval $F77 -c $FPICFLAG $ALL_FFLAGS $f -o $o |
|
145 done |
|
146 fi |
2163
|
147 |
3051
|
148 if [ -n "$cfiles" ]; then |
|
149 for f in $cfiles; do |
|
150 b=`echo $f | sed 's,\.c$,,'` |
|
151 o=$b.o |
|
152 objfiles="$objfiles $o" |
|
153 $dbg $CC -c $CPPFLAGS $CPICFLAG $ALL_CFLAGS $f -o $o |
|
154 eval $CC -c $CPPFLAGS $CPICFLAG $ALL_CFLAGS $f -o $o |
|
155 done |
|
156 fi |
2163
|
157 |
3051
|
158 if [ -n "$ccfiles" ]; then |
|
159 for f in $ccfiles; do |
|
160 case $f in |
|
161 *.cc) |
|
162 b=`echo $f | sed 's,\.cc$,,'` |
|
163 ;; |
|
164 *.C) |
|
165 b=`echo $f | sed 's,\.C$,,'` |
|
166 ;; |
|
167 *.cpp) |
|
168 b=`echo $f | sed 's,\.cpp$,,'` |
|
169 ;; |
|
170 esac |
|
171 o=$b.o |
|
172 objfiles="$objfiles $o" |
|
173 $dbg $CXX -c $CPPFLAGS $CXXPICFLAG $ALL_CXXFLAGS $f -o $o |
|
174 eval $CXX -c $CPPFLAGS $CXXPICFLAG $ALL_CXXFLAGS $f -o $o |
|
175 done |
|
176 fi |
|
177 |
|
178 # Link all the object files. |
|
179 |
|
180 $dbg $SH_LD $SH_LDFLAGS -o $octfile $objfiles |
|
181 eval $SH_LD $SH_LDFLAGS -o $octfile $objfiles |