X-Recipient: archive-cygwin AT delorie DOT com X-Spam-Check-By: sourceware.org Message-ID: <4813DCB6.4010002@cwilson.fastmail.fm> Date: Sat, 26 Apr 2008 21:53:58 -0400 From: cygwin AT cwilson DOT fastmail DOT fm User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.12) Gecko/20080213 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666 MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: Re: cygport missing features after 0.3.9 References: <48113B20 DOT 4060305 AT users DOT sourceforge DOT net> <4811437C DOT 6090405 AT cwilson DOT fastmail DOT fm> <481152E1 DOT 80808 AT users DOT sourceforge DOT net> <481253CC DOT 8050909 AT cwilson DOT fastmail DOT fm> In-Reply-To: <481253CC.8050909@cwilson.fastmail.fm> Content-Type: multipart/mixed; boundary="------------010106060903030504060809" Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com --------------010106060903030504060809 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit >> Are there any other features you still need? See attached, against current cygport cvs. cygport-cvs-topdir.patch: lib/cvs.cygclass (cvs_fetch): allow cygports to specify a "-d ${CVS_DIR}" argument by defining the CVS_DIR variable. Otherwise, the module directory name is used, as previously. This is useful if the desired source code is not a top-level module in the cvs repository (e.g. libgeotiff). cygport-postinst-hook.patch: bin/cygport.in (__src_prep): (__src_postinst_hook_exec): call unstable function src_postinst_hook if it is defined. This can be useful if, for instance, the default docdir usr/share/doc/${PN}-${PV} is not appropriate, and should be "corrected" prior to packaging. See the rxvt-unicode-X cygport for an example. (main command parsing case statement) [postinst*]: call __src_postinst_hook_exec after __src_postinst. (main command parsing case statement) [inst*]: call __src_postinst_hook_exec after __src_postinst. (main command parsing case statement) [almostall, all]: ditto, as part of __stage Installing. cygport-custom-cmds.patch: Adds new command line options: custom-show display a list of all functions callable via customN-* customN-* where * is the name of an function declared by cygport, and N is a digit, 0..9, that indicates the number of additional arguments to remove from the command line, and pass to the target function as its arguments. That is, custom0-__show_help will call __show_help() with no arguments, while custom1-error "an error message" will call error() with "an error message" as its argument. Try experimenting with: customN-custom_dummy ... Used in conjunction with the (separable) testsuites in the cvs cygport. cygport.in (custom_dummy): public N-ary function that prints all N arguments to stdout. Used for demonstration purposes. (__custom_dummy_core): private support function for custom_dummy. N-ary function that simply all N arguments to stdout. (__show_help): add documentation for custom-show and customN-* commands. (main command parsing case statement) [custom-show]: add new command. Shows all public functions available in the current cygport that can be called using the customN-* command. (main command parsing case statement) [customN-*]: add new command(s). -- Chuck --------------010106060903030504060809 Content-Type: text/plain; name="cygport-custom-cmds.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="cygport-custom-cmds.patch" Index: bin/cygport.in =================================================================== RCS file: /cvsroot/cygwin-ports/cygport/bin/cygport.in,v retrieving revision 1.106 diff -u -r1.106 cygport.in --- bin/cygport.in 23 Apr 2008 14:43:48 -0000 1.106 +++ bin/cygport.in 27 Apr 2008 01:29:28 -0000 @@ -134,6 +134,17 @@ finish delete the working directory almostall run all of the above, excluding finish all run all of the above, including finish + custom-show display a list of all functions callable via customN-* + customN-* where * is the name of an function declared by cygport, + and N is a digit, 0..9, that indicates the number + of additional arguments to remove from the command line, + and pass to the target function as its arguments. That is, + custom0-__show_help + will call __show_help() with no arguments, while + custom1-error "an error message" + will call error() with "an error message" as its argument. + Try experimenting with: + customN-custom_dummy ... See ${_privdocdir}/README for further instructions. @@ -1573,10 +1584,14 @@ # DESCRIPTION # HOMEPAGE # +# public: +# custom_dummy +# # private: # __list_deps # __list_files # __show_info +# __custom_dummy_core # ################################################################################ @@ -1623,9 +1638,27 @@ ) } +__custom_dummy_core() { + local -i my_c=0 + local -i my_argc=$# + + while (( my_c < my_argc )) + do + my_c+=1 + echo "${my_c}: $1" + shift + done +} + +custom_dummy() { + inform "custom_dummy called with $# args" + __custom_dummy_core "$@" +} + # protect functions +export -f custom_dummy readonly -f __list_files __list_deps __show_info - +readonly -f custom_dummy __custom_dummy_core ################################################################################ # @@ -2173,6 +2206,7 @@ error "When defining PKG_NAMES, the first package should be ${PN}."; fi + ################################################################################ # # End of functions @@ -2180,6 +2214,10 @@ ################################################################################ declare -i arg_n=2 +declare -i custom_arg_n +declare -i custom_argc +declare -a custom_args +declare -x custom_cmd while (( arg_n < argc )) do @@ -2256,6 +2294,46 @@ __finish; _status=$?; ;; + custom-show) + for fnc in $(set | sed -n '/()/s/()//p') + do + if test "$(type -t ${fnc})" == "function" + then + echo " ${fnc}" + fi + done + ;; + custom0-* | custom1-* | custom2-* | custom3-* | custom4-* | \ + custom5-* | custom6-* | custom7-* | custom8-* | custom9-* ) + custom_argc=${argv[${arg_n}]:6:1} + custom_cmd=${argv[${arg_n}]:8} + if [ -z "${custom_cmd}" ] + then + error "${argv[${arg_n}]}* command has no target following the 'custom${custom_argc}-'" + fi + + # consume arguments + custom_arg_n=0 + while (( custom_arg_n < custom_argc )) && (( arg_n+1 < argc )) + do + arg_n+=1 + custom_args[${custom_arg_n}]="${argv[${arg_n}]}" + custom_arg_n+=1 + done + if (( custom_arg_n < custom_argc )) + then + error "custom${custom_argc} command ${custom_cmd}: not enough arguments" + fi + + if test "$(type -t ${custom_cmd})" == "function" + then + __stage ${custom_cmd} && eval "${custom_cmd} ${custom_args[@]}" + _status=$?; + else + error "${custom_cmd} is not a shell function" + fi + unset custom_args + ;; help) __show_help; exit 0; --------------010106060903030504060809 Content-Type: text/plain; name="cygport-cvs-topdir.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="cygport-cvs-topdir.patch" Index: lib/cvs.cygclass =================================================================== RCS file: /cvsroot/cygwin-ports/cygport/lib/cvs.cygclass,v retrieving revision 1.11 diff -u -r1.11 cvs.cygclass --- lib/cvs.cygclass 11 Mar 2008 03:47:36 -0000 1.11 +++ lib/cvs.cygclass 27 Apr 2008 01:16:26 -0000 @@ -40,6 +40,7 @@ cvs_fetch() { local cvs_branch local cvs_date + local cvs_topdir check_prog_req cvs @@ -53,10 +54,17 @@ cvs_date="-D ${CVS_DATE}" fi + cvs_topdir="${CVS_MODULE}" + if defined CVS_DIR + then + cvs_dir="-d ${CVS_DIR}" + cvs_topdir="${CVS_DIR}" + fi + # T likely doesn't exist at this point, so create it first mkdir -p ${T} cd ${T} - verbose cvs -d ${CVS_URI} checkout ${cvs_branch} ${cvs_date} ${CVS_MODULE} + verbose cvs -d ${CVS_URI} checkout ${cvs_branch} ${cvs_date} ${cvs_dir} ${CVS_MODULE} - tar jcf ${top}/${cvs_tarball} --exclude=CVS --exclude=.cvsignore ${CVS_MODULE} + tar jcf ${top}/${cvs_tarball} --exclude=CVS --exclude=.cvsignore ${cvs_topdir} } --------------010106060903030504060809 Content-Type: text/plain; name="cygport-postinst-hook.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="cygport-postinst-hook.patch" Index: bin/cygport.in =================================================================== RCS file: /cvsroot/cygwin-ports/cygport/bin/cygport.in,v retrieving revision 1.106 diff -u -r1.106 cygport.in --- bin/cygport.in 23 Apr 2008 14:43:48 -0000 1.106 +++ bin/cygport.in 27 Apr 2008 01:22:43 -0000 @@ -1179,6 +1179,7 @@ # mutable: # USE_DESTDIR # src_install +# src_postinst_hook # # public: # cyginstall @@ -1193,6 +1194,7 @@ # _exeinto_dir # _insinto_dir # __prepinstalldirs +# __src_postinst_hook_exec # ################################################################################ @@ -1296,6 +1298,20 @@ esac } +# src_postinst_hook is an optional function that may be +# defined to modify the cygport 'install' sequence. If defined, +# it is called after the automatic "postinst" function. This +# can be useful if, for instance, the default docdir: +# usr/share/doc/${PN}-${PV} +# is not appropriate, and should be "corrected" prior to +# packaging. See the rxvt-unicode-X cygport for an example. +__src_postinst_hook_exec() { + if __check_function src_postinst_hook + then + __check_unstable src_postinst_hook + fi +} + # provides a default src_install # will be overridden by cygclasses or cygports as necessary src_install() { @@ -2209,11 +2225,11 @@ ;; inst*) __stage Installing; - (__prepinstalldirs && src_install && __src_postinst) 2>&1 | tee ${installlog}; + (__prepinstalldirs && src_install && __src_postinst && __src_postinst_hook_exec) 2>&1 | tee ${installlog}; _status=$?; ;; postinst*) - __src_postinst; + __src_postinst && __src_postinst_hook_exec; _status=$?; ;; list) @@ -2244,14 +2260,14 @@ almostall) __stage Preparing && __src_prep && \ __stage Compiling && src_compile 2>&1 | tee ${compilelog} && \ - __stage Installing && (__prepinstalldirs && src_install && __src_postinst) 2>&1 | tee ${installlog} && \ + __stage Installing && (__prepinstalldirs && src_install && __src_postinst && __src_postinst_hook_exec) 2>&1 | tee ${installlog} && \ __stage Packaging && (__pkg_binpkg && __pkg_pkgcheck && __pkg_srcpkg && __pkg_dist) 2>&1 | tee ${pkglog} _status=$?; ;; all) __stage Preparing && __src_prep && \ __stage Compiling && src_compile 2>&1 | tee ${compilelog} && \ - __stage Installing && (__prepinstalldirs && src_install && __src_postinst) 2>&1 | tee ${installlog} && \ + __stage Installing && (__prepinstalldirs && src_install && __src_postinst && __src_postinst_hook_exec) 2>&1 | tee ${installlog} && \ __stage Packaging && (__pkg_binpkg && __pkg_pkgcheck && __pkg_srcpkg && __pkg_dist) 2>&1 | tee ${pkglog} && \ __finish; _status=$?; --------------010106060903030504060809 Content-Type: text/plain; charset=us-ascii -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/ --------------010106060903030504060809--