|
|
#!/bin/sh
givup() { echo $* exit 1}
usage() {echo "$0 --extname=module [--proto=file] [--stubs=file] [--xml[=file]]"echo " [--full-xml] [--no-help]"echo ""echo " --extname=module module is the name of your extension"echo " --proto=file file contains prototypes of functions to create"echo " --stubs=file generate only function stubs in file"echo " --xml generate xml documentation to be added to phpdoc-cvs"echo " --full-xml generate xml documentation for a self-contained extension"echo " (not yet implemented)"echo " --no-help don't try to be nice and create comments in the code"echo " and helper functions to test if the module compiled"exit 1}
if test $# = 0; then usagefi
while test $# -gt 0; do case "$1" in -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac
case $1 in --extname=?*) extname=$optarg EXTNAME=`echo $extname | tr [a-z] [A-Z]` ;; --proto=?*) proto=$optarg ;; --stubs=*) stubs=yes stubfile=$optarg ;; --xml) xml="yes" ;; --xml=?*) xml=$optarg ;; --full-xml) full_xml="yes" ;; --no-help) no_help="yes" ;; *) usage ;; esac shiftdone
if test -d "$extname" ; then givup "Directory $extname already exists."fi
test -f ext_skel || givup "ext_skel must be in the current directory"test -d skeleton || givup "subdirectory skeleton does not exist or is not directory"
if echo '\c' | grep -s c >/dev/null 2>&1then ECHO_N="echo -n" ECHO_C=""else ECHO_N="echo" ECHO_C='\c'fi
if test -z "$stubs"; then echo "Creating directory $extname" stubfile=$extname"/function_stubs" mkdir $extname || givup "Cannot create directory $extname"fi
if test -n "$proto"; then 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 ./skeleton/create_stubsfi
if test -z "$stubs"; then cd $extname chmod 755 .
$ECHO_N "Creating basic files:$ECHO_C"
$ECHO_N " config.m4$ECHO_C"cat >config.m4 <<eofdnl \$Id\$dnl config.m4 for extension $extname
dnl Comments in this file start with the string 'dnl'.dnl Remove where necessary. This file will not workdnl without editing.
dnl If your extension references something external, use with:
dnl PHP_ARG_WITH($extname, for $extname support,dnl Make sure that the comment is aligned:dnl [ --with-$extname Include $extname support])
dnl Otherwise use enable:
dnl PHP_ARG_ENABLE($extname, whether to enable $extname support,dnl Make sure that the comment is aligned:dnl [ --enable-$extname Enable $extname support])
if test "\$PHP_$EXTNAME" != "no"; then dnl Write more examples of tests here...
dnl # --with-$extname -> check with-path dnl SEARCH_PATH="/usr/local /usr" # you might want to change this dnl SEARCH_FOR="/include/$extname.h" # you most likely want to change this dnl if test -r \$PHP_$EXTNAME/$SEARCH_FOR; then # path given as parameter dnl ${EXTNAME}_DIR=\$PHP_$EXTNAME dnl else # search default path list dnl AC_MSG_CHECKING([for $extname files in default path]) dnl for i in \$SEARCH_PATH ; do dnl if test -r \$i/\$SEARCH_FOR; then dnl ${EXTNAME}_DIR=\$i dnl AC_MSG_RESULT(found in \$i) dnl fi dnl done dnl fi dnl dnl if test -z "\$${EXTNAME}_DIR"; then dnl AC_MSG_RESULT([not found]) dnl AC_MSG_ERROR([Please reinstall the $extname distribution]) dnl fi
dnl # --with-$extname -> add include path dnl PHP_ADD_INCLUDE(\$${EXTNAME}_DIR/include)
dnl # --with-$extname -> chech for lib and symbol presence dnl LIBNAME=$extname # you may want to change this dnl LIBSYMBOL=$extname # you most likely want to change this
dnl PHP_CHECK_LIBRARY(\$LIBNAME,\$LIBSYMBOL, dnl [ dnl PHP_ADD_LIBRARY_WITH_PATH(\$LIBNAME, \$${EXTNAME}_DIR/lib, ${EXTNAME}_SHARED_LIBADD) dnl AC_DEFINE(HAVE_${EXTNAME}LIB,1,[ ]) dnl ],[ dnl AC_MSG_ERROR([wrong $extname lib version or lib not found]) dnl ],[ dnl -L\$${EXTNAME}_DIR/lib -lm -ldl dnl ]) dnl dnl PHP_SUBST(${EXTNAME}_SHARED_LIBADD)
PHP_NEW_EXTENSION($extname, $extname.c, \$ext_shared)fieof
$ECHO_N " .cvsignore$ECHO_C"cat >.cvsignore <<eof.deps*.lo*.laeof
$ECHO_N " $extname.c$ECHO_C"echo "s/extname/$extname/g" > sedscriptecho "s/EXTNAME/$EXTNAME/g" >> sedscriptecho '/__function_entries_here__/r function_entries' >> sedscriptecho '/__function_stubs_here__/r function_stubs' >> sedscriptecho '/__header_here__/r ../../header' >> sedscriptecho '/__footer_here__/r ../../footer' >> sedscriptecho '/__function_entries_here__/D' >> sedscriptecho '/__function_stubs_here__/D' >> sedscriptecho '/__header_here__/D' >> sedscriptecho '/__footer_here__/D' >> sedscriptif [ ! -z "$no_help" ]; then echo "/confirm_$extname_compiled/D" >> sedscript echo '/Remove the following/,/^\*\//D' >> sedscript echo 's/[[:space:]]\/\*.\+\*\///' >> sedscript echo 's/^\/\*.*\*\/$//' >> sedscript echo '/^[[:space:]]*\/\*/,/^[[:space:]]*\*\//D' >> sedscriptfi
sed -f sedscript <../skeleton/skeleton.c > $extname.c
$ECHO_N " php_$extname.h$ECHO_C"echo "s/extname/$extname/g" > sedscriptecho "s/EXTNAME/$EXTNAME/g" >> sedscriptecho '/__function_declarations_here__/r function_declarations' >> sedscriptecho '/__header_here__/r ../../header' >> sedscriptecho '/__footer_here__/r ../../footer' >> sedscriptecho '/__function_declarations_here__/D' >> sedscriptecho '/__header_here__/D' >> sedscriptecho '/__footer_here__/D' >> sedscriptif [ ! -z "$no_help" ]; then echo "/confirm_$extname_compiled/D" >> sedscript echo 's/[[:space:]]\/\*.\+\*\///' >> sedscript echo 's/^\/\*.*\*\/$//' >> sedscript echo '/^[[:space:]]*\/\*/,/^[[:space:]]*\*\//D' >> sedscriptfised -f sedscript <../skeleton/php_skeleton.h > php_$extname.h
$ECHO_N " CREDITS$ECHO_C"echo "s/extname/$extname/g" > sedscriptsed -f sedscript <../skeleton/CREDITS > CREDITS
$ECHO_N " EXPERIMENTAL$ECHO_C"echo "s/extname/$extname/g" > sedscriptsed -f sedscript <../skeleton/EXPERIMENTAL > EXPERIMENTAL
$ECHO_N " tests/001.phpt$ECHO_C"mkdir tests || givup "Cannot create tests directory"chmod 755 testssed -f sedscript <../skeleton/tests/001.phpt > tests/001.phpt
if test -z "$stubs" && test -z "$no_help"; then $ECHO_N " $extname.php$ECHO_C" sed \ -e "s/extname/$extname/g" \ <../skeleton/skeleton.php \ > $extname.phpfi
rm sedscript
if test -n "$proto"; then if test -z "$stubs"; then rm function_entries rm function_declarations rm function_stubs fi if test -f function_warning; then rm function_warning warning="NOTE! Because some arguments to functions were resources, the code generatedcannot yet be compiled without editing. Please consider this to be step 4.5in the instructions above. " fifi
find . -type f | xargs chmod 644 find . -type d | xargs chmod 755fi
echo " [done]."
if test -z "$no_help" && test -z "$stubs"; then cat <<eof
To use your new extension, you will have to execute the following steps:
1. $ cd ..2. $ vi ext/$extname/config.m43. $ ./buildconf4. $ ./configure --[with|enable]-$extname5. $ make6. $ ./php -f ext/$extname/$extname.php7. $ vi ext/$extname/$extname.c8. $ make
Repeat steps 3-6 until you are satisfied with ext/$extname/config.m4 andstep 6 confirms that your module is compiled into PHP. Then, start writingcode and repeat the last two steps as often as necessary.$warningeoffi
|