www.delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2008/04/26/21:54:33

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: <announce DOT 48113324 DOT 7040007 AT cwilson DOT fastmail DOT fm> <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>
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
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 <arg1> <arg2> ... <argN>

   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 <arg1> <arg2> ... <argN>
 
 		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--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019