Annotation of embedaddon/php/ext/ext_skel, revision 1.1.1.2

1.1       misho       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
1.1.1.2 ! misho     291: 6.  $ ./sapi/cli/php -f ext/$extname/$extname.php
1.1       misho     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>