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

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
        !           291: 6.  $ ./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>