1 mike 1.1 #!/bin/bash
2
3 ##==============================================================================
4 ##
5 ## Check arguments
6 ##
7 ##==============================================================================
8
9 if [ "$#" = "0" ]; then
10 echo "Usage: $0 (lib|cshlib|cxxshlib|cprog|cxxprog) [OPTIONS]"
11 echo "Try --help for help."
12 exit 1
13 fi
14
15 case $1 in
16 -*)
17 ;;
18 *)
19 TYPE=$1
20 shift 1
21 esac
22 mike 1.1
23 ##==============================================================================
24 ##
25 ## Get command line arguments.
26 ##
27 ##==============================================================================
28
29 for opt
30 do
31
32 arg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
33
34 case $opt in
35
36 -h | --help)
37 HELP=1
38 ;;
39
40 --top=*)
41 TOP=$arg
42 ;;
43 mike 1.1
44 --project=*)
45 PROJECT=$arg
46 ;;
47
48 --guid=*)
49 GUID=$arg
50 ;;
51
52 --sources=*)
53 SOURCES=$arg
54 ;;
55
56 --headers=*)
57 HEADERS=$arg
58 ;;
59
60 --defines=*)
61 DEFINES=$arg
62 ;;
63
64 mike 1.1 --includes=*)
65 INCLUDES=$arg
66 ;;
67
68 --libraries=*)
69 LIBRARIES=$arg
70 ;;
71
72 *)
73 echo "$0: unknown option: $opt"
74 exit 1
75 ;;
76
77 esac
78 done
79
80 ##==============================================================================
81 ##
82 ## Print the help message
83 ##
84 ##==============================================================================
85 mike 1.1
86 if [ "$HELP" = "1" ]; then
87
88 cat<<EOF
89
90 Usage: $0 (lib|cshlib|cxxshlib|cprog|cxxprog) [OPTIONS]
91
92 OVERVIEW:
93 This script generates a makefile (called 'GNUmakefile').
94
95 OPTIONS:
96 -h, --help Print this help message.
97 --top Relative directory that contains 'configure' script.
98 --project Name of project (defaults to current directory name).
99 --guid GUID for this project (generated by default).
100 --sources List of source files (defaults to *.c and *.cpp).
101 --headers List of headers files (defaults to *.h).
102 --defines List macros definitions.
103 --includes List of include paths (relative to current directory).
104 --libraries List of dependent library names.
105
106 mike 1.1 EOF
107
108 exit 0
109
110 fi
111
112 ##==============================================================================
113 ##
114 ## $TYPE
115 ##
116 ##==============================================================================
117
118 case $TYPE in
119 lib)
120 TYPE=LIBRARY
121 ;;
122 cshlib)
123 TYPE=CSHLIBRARY
124 ;;
125 cxxshlib)
126 TYPE=CXXSHLIBRARY
127 mike 1.1 ;;
128 cprog)
129 TYPE=CPROGRAM
130 ;;
131 cxxprog)
132 TYPE=CXXPROGRAM
133 ;;
134 *)
135 echo "$0: unknown or missing type argument: '$TYPE'"
136 echo ""
137 exit 1
138 ;;
139 esac
140
141 ##==============================================================================
142 ##
143 ## $TOP
144 ##
145 ##==============================================================================
146
147 if [ "$TOP" == "" ]; then
148 mike 1.1 if [ -f "../configure" ]; then
149 TOP=..
150 fi
151 if [ -f "../../configure" ]; then
152 TOP=../..
153 fi
154 if [ -f "../../../configure" ]; then
155 TOP=../../..
156 fi
157 if [ -f "../../../../configure" ]; then
158 TOP=../../../..
159 fi
160 if [ -f "../../../../../configure" ]; then
161 TOP=../../../../..
162 fi
163 if [ -f "../../../../../../configure" ]; then
164 TOP=../../../../../..
165 fi
166 if [ -f "../../../../../../../configure" ]; then
167 TOP=../../../../../../..
168 fi
169 mike 1.1
170 if [ "$TOP" == "" ]; then
171 echo "$0: unable to find top (please use --top option)"
172 exit 1
173 fi
174 fi
175
176 ##==============================================================================
177 ##
178 ## $PROJECT
179 ##
180 ##==============================================================================
181
182 if [ "$PROJECT" = "" ]; then
183 TMP=`pwd`
184 PROJECT=`basename $TMP`
185 fi
186
187 ##==============================================================================
188 ##
189 ## $GUID
190 mike 1.1 ##
191 ##==============================================================================
192
193 if [ "$GUID" = "" ]; then
194 GUID=`uuidgen | tr abcdef ABCDEF`
195 fi
196
197 ##==============================================================================
198 ##
199 ## $SOURCES
200 ##
201 ##==============================================================================
202
203 if [ "$SOURCES" = "" ]; then
204 SOURCES="`ls *.c 2> /dev/null``ls *.cpp 2> /dev/null`"
205 fi
206
207 ##==============================================================================
208 ##
209 ## $HEADERS
210 ##
211 mike 1.1 ##==============================================================================
212
213 if [ "$HEADERS" = "" ]; then
214 HEADERS="`ls *.h 2> /dev/null`"
215 fi
216
217 ##==============================================================================
218 ##
219 ## Write 'GNUmakefile'
220 ##
221 ##==============================================================================
222
223 cat > GNUmakefile <<END
224 TOP = $TOP
225 include \$(TOP)/config.mak
226
227 $TYPE = $PROJECT
228
229 GUID = $GUID
230
231 SOURCES = $SOURCES
232 mike 1.1
233 HEADERS = $HEADERS
234
235 DEFINES = $DEFINES
236
237 INCLUDES = \$(TOP) \$(TOP)/common $INCLUDES
238
239 LIBRARIES = $LIBRARIES
240
241 include \$(TOP)/mak/rules.mak
242 END
243
244 echo "Created GNUmakefile"
|