1: #!/bin/sh
2:
3: givup() {
4: echo $*
5: exit 1
6: }
7:
8: usage() {
9: echo "$0 --extname=module [--proto=file] [--stubs=file] [--xml[=file]]"
10: echo " [--skel=dir] [--full-xml] [--no-help]"
11: echo ""
12: echo " --extname=module module is the name of your extension"
13: echo " --proto=file file contains prototypes of functions to create"
14: echo " --stubs=file generate only function stubs in file"
15: echo " --xml generate xml documentation to be added to phpdoc-cvs"
16: echo " --skel=dir path to the skeleton directory"
17: echo " --full-xml generate xml documentation for a self-contained extension"
18: echo " (not yet implemented)"
19: echo " --no-help don't try to be nice and create comments in the code"
20: echo " and helper functions to test if the module compiled"
21: exit 1
22: }
23:
24: if test $# = 0; then
25: usage
26: fi
27:
28: while test $# -gt 0; do
29: case "$1" in
30: -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
31: *) optarg= ;;
32: esac
33:
34: case $1 in
35: --extname=?*)
36: extname=$optarg
37: EXTNAME=`echo $extname | tr "[:lower:]" "[:upper:]"`
38: ;;
39: --proto=?*)
40: proto=$optarg
41: ;;
42: --stubs=*)
43: stubs=yes
44: stubfile=$optarg
45: ;;
46: --xml)
47: xml="yes"
48: ;;
49: --xml=?*)
50: xml=$optarg
51: ;;
52: --full-xml)
53: full_xml="yes"
54: ;;
55: --no-help)
56: no_help="yes"
57: ;;
58: --skel=?*)
59: skel_dir=$optarg
60: ;;
61: *)
62: usage
63: ;;
64: esac
65: shift
66: done
67:
68: if test -d "$extname" ; then
69: givup "Directory $extname already exists."
70: fi
71:
72: if test -z "$skel_dir"; then
73: skel_dir="skeleton"
74: fi
75:
76: ## convert skel_dir to full path
77: skel_dir=`cd $skel_dir && pwd`
78:
79: test -d $skel_dir || givup "directory $skel_dir does not exist or is not directory"
80:
81: if echo '\c' | grep -s c >/dev/null 2>&1
82: then
83: ECHO_N="echo -n"
84: ECHO_C=""
85: else
86: ECHO_N="echo"
87: ECHO_C='\c'
88: fi
89:
90: if test -z "$stubs"; then
91: echo "Creating directory $extname"
92: stubfile=$extname"/function_stubs"
93: mkdir $extname || givup "Cannot create directory $extname"
94: fi
95:
96: if test -n "$proto"; then
97: cat $proto | awk -v extname=$extname -v stubs=$stubs -v stubfile=$stubfile -v xml=$xml -v full_xml=$full_xml -v i_know_what_to_do_shut_up_i_dont_need_your_help_mode=$no_help -f $skel_dir/create_stubs
98: fi
99:
100: if test -z "$stubs"; then
101: cd $extname
102: chmod 755 .
103:
104: $ECHO_N "Creating basic files:$ECHO_C"
105:
106: $ECHO_N " config.m4$ECHO_C"
107: cat >config.m4 <<eof
108: dnl \$Id\$
109: dnl config.m4 for extension $extname
110:
111: dnl Comments in this file start with the string 'dnl'.
112: dnl Remove where necessary. This file will not work
113: dnl without editing.
114:
115: dnl If your extension references something external, use with:
116:
117: dnl PHP_ARG_WITH($extname, for $extname support,
118: dnl Make sure that the comment is aligned:
119: dnl [ --with-$extname Include $extname support])
120:
121: dnl Otherwise use enable:
122:
123: dnl PHP_ARG_ENABLE($extname, whether to enable $extname support,
124: dnl Make sure that the comment is aligned:
125: dnl [ --enable-$extname Enable $extname support])
126:
127: if test "\$PHP_$EXTNAME" != "no"; then
128: dnl Write more examples of tests here...
129:
130: dnl # --with-$extname -> check with-path
131: dnl SEARCH_PATH="/usr/local /usr" # you might want to change this
132: dnl SEARCH_FOR="/include/$extname.h" # you most likely want to change this
133: dnl if test -r \$PHP_$EXTNAME/\$SEARCH_FOR; then # path given as parameter
134: dnl ${EXTNAME}_DIR=\$PHP_$EXTNAME
135: dnl else # search default path list
136: dnl AC_MSG_CHECKING([for $extname files in default path])
137: dnl for i in \$SEARCH_PATH ; do
138: dnl if test -r \$i/\$SEARCH_FOR; then
139: dnl ${EXTNAME}_DIR=\$i
140: dnl AC_MSG_RESULT(found in \$i)
141: dnl fi
142: dnl done
143: dnl fi
144: dnl
145: dnl if test -z "\$${EXTNAME}_DIR"; then
146: dnl AC_MSG_RESULT([not found])
147: dnl AC_MSG_ERROR([Please reinstall the $extname distribution])
148: dnl fi
149:
150: dnl # --with-$extname -> add include path
151: dnl PHP_ADD_INCLUDE(\$${EXTNAME}_DIR/include)
152:
153: dnl # --with-$extname -> check for lib and symbol presence
154: dnl LIBNAME=$extname # you may want to change this
155: dnl LIBSYMBOL=$extname # you most likely want to change this
156:
157: dnl PHP_CHECK_LIBRARY(\$LIBNAME,\$LIBSYMBOL,
158: dnl [
159: dnl PHP_ADD_LIBRARY_WITH_PATH(\$LIBNAME, \$${EXTNAME}_DIR/lib, ${EXTNAME}_SHARED_LIBADD)
160: dnl AC_DEFINE(HAVE_${EXTNAME}LIB,1,[ ])
161: dnl ],[
162: dnl AC_MSG_ERROR([wrong $extname lib version or lib not found])
163: dnl ],[
164: dnl -L\$${EXTNAME}_DIR/lib -lm
165: dnl ])
166: dnl
167: dnl PHP_SUBST(${EXTNAME}_SHARED_LIBADD)
168:
169: PHP_NEW_EXTENSION($extname, $extname.c, \$ext_shared)
170: fi
171: eof
172:
173: $ECHO_N " config.w32$ECHO_C"
174: cat >config.w32 <<eof
175: // \$Id\$
176: // vim:ft=javascript
177:
178: // If your extension references something external, use ARG_WITH
179: // ARG_WITH("$extname", "for $extname support", "no");
180:
181: // Otherwise, use ARG_ENABLE
182: // ARG_ENABLE("$extname", "enable $extname support", "no");
183:
184: if (PHP_$EXTNAME != "no") {
185: EXTENSION("$extname", "$extname.c");
186: }
187:
188: eof
189:
190: $ECHO_N " .svnignore$ECHO_C"
191: cat >.svnignore <<eof
192: .deps
193: *.lo
194: *.la
195: eof
196:
197: $ECHO_N " $extname.c$ECHO_C"
198: echo "s/extname/$extname/g" > sedscript
199: echo "s/EXTNAME/$EXTNAME/g" >> sedscript
200: echo '/__function_entries_here__/r function_entries' >> sedscript
201: echo '/__function_stubs_here__/r function_stubs' >> sedscript
202: echo '/__header_here__/r ../../header' >> sedscript
203: echo '/__footer_here__/r ../../footer' >> sedscript
204: echo '/__function_entries_here__/D' >> sedscript
205: echo '/__function_stubs_here__/D' >> sedscript
206: echo '/__header_here__/D' >> sedscript
207: echo '/__footer_here__/D' >> sedscript
208: if [ ! -z "$no_help" ]; then
209: echo "/confirm_$extname_compiled/D" >> sedscript
210: echo '/Remove the following/,/^\*\//D' >> sedscript
211: echo 's/[[:space:]]\/\*.\+\*\///' >> sedscript
212: echo 's/^\/\*.*\*\/$//' >> sedscript
213: echo '/^[[:space:]]*\/\*/,/^[[:space:]]*\*\//D' >> sedscript
214: fi
215:
216: sed -f sedscript < $skel_dir/skeleton.c > $extname.c
217:
218:
219: $ECHO_N " php_$extname.h$ECHO_C"
220: echo "s/extname/$extname/g" > sedscript
221: echo "s/EXTNAME/$EXTNAME/g" >> sedscript
222: echo '/__function_declarations_here__/r function_declarations' >> sedscript
223: echo '/__header_here__/r ../../header' >> sedscript
224: echo '/__footer_here__/r ../../footer' >> sedscript
225: echo '/__function_declarations_here__/D' >> sedscript
226: echo '/__header_here__/D' >> sedscript
227: echo '/__footer_here__/D' >> sedscript
228: if [ ! -z "$no_help" ]; then
229: echo "/confirm_$extname_compiled/D" >> sedscript
230: echo 's/[[:space:]]\/\*.\+\*\///' >> sedscript
231: echo 's/^\/\*.*\*\/$//' >> sedscript
232: echo '/^[[:space:]]*\/\*/,/^[[:space:]]*\*\//D' >> sedscript
233: fi
234: sed -f sedscript <$skel_dir/php_skeleton.h > php_$extname.h
235:
236: $ECHO_N " CREDITS$ECHO_C"
237: echo "s/extname/$extname/g" > sedscript
238: sed -f sedscript <$skel_dir/CREDITS > CREDITS
239:
240: $ECHO_N " EXPERIMENTAL$ECHO_C"
241: echo "s/extname/$extname/g" > sedscript
242: sed -f sedscript <$skel_dir/EXPERIMENTAL > EXPERIMENTAL
243:
244: $ECHO_N " tests/001.phpt$ECHO_C"
245: mkdir tests || givup "Cannot create tests directory"
246: chmod 755 tests
247: sed -f sedscript <$skel_dir/tests/001.phpt > tests/001.phpt
248:
249: if test -z "$stubs" && test -z "$no_help"; then
250: $ECHO_N " $extname.php$ECHO_C"
251: sed \
252: -e "s/extname/$extname/g" \
253: <$skel_dir/skeleton.php \
254: > $extname.php
255: fi
256:
257: rm sedscript
258:
259: if test -n "$proto"; then
260: if test -z "$stubs"; then
261: rm function_entries
262: rm function_declarations
263: rm function_stubs
264: fi
265: if test -f function_warning; then
266: rm function_warning
267: warning="
268: NOTE! Because some arguments to functions were resources, the code generated
269: cannot yet be compiled without editing. Please consider this to be step 4.5
270: in the instructions above.
271: "
272: fi
273: fi
274:
275: find . -type f | xargs chmod 644
276: find . -type d | xargs chmod 755
277: fi
278:
279: echo " [done]."
280:
281: if test -z "$no_help" && test -z "$stubs"; then
282: cat <<eof
283:
284: To use your new extension, you will have to execute the following steps:
285:
286: 1. $ cd ..
287: 2. $ vi ext/$extname/config.m4
288: 3. $ ./buildconf
289: 4. $ ./configure --[with|enable]-$extname
290: 5. $ make
291: 6. $ ./sapi/cli/php -f ext/$extname/$extname.php
292: 7. $ vi ext/$extname/$extname.c
293: 8. $ make
294:
295: Repeat steps 3-6 until you are satisfied with ext/$extname/config.m4 and
296: step 6 confirms that your module is compiled into PHP. Then, start writing
297: code and repeat the last two steps as often as necessary.
298: $warning
299: eof
300: fi
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>