X-Spam-Check-By: sourceware.org Message-ID: <4550A390.50103@cwilson.fastmail.fm> Date: Tue, 07 Nov 2006 10:17:36 -0500 From: Charles Wilson User-Agent: Thunderbird 1.5.0.7 (Windows/20060909) MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: [patch] cygport enhancement Content-Type: multipart/mixed; boundary="------------070100000405070806030608" Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm 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 --------------070100000405070806030608 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit At present, if you use cvs|svn|git cygclass, you can only have one SRC_URI. This patch does three related things (1) relaxes that restriction slightly. Now, the *first* SRC_URI corresponds to the tarball created from the remote repository checkout via CVS_URI/SVN_URI/GIT_URI. The other entries in SRC_URI may be mirror, http, or ftp URIs -- or local files (see #2, next). (2) Sometimes, .src.patch and .cygwin.patch just aren't enough. If SRC_URI contains multiple URI's, then only the first one need be cvs|svn|git|mirror|http|ftp. The others are now allowed to be simple files; 'cygport get' will warn, not error, if it fails to recognize the download protocol of the 2nd...Nth URI. (3) If SRC_URI contains extra patches, then you need some way to apply them -- and src_prep() is protected. Implement overridable (and no-op by default) functions src_prep_init_hook() src_prep_fini_hook(). The former is called just after all SRC_URIs are unpacked; the latter at the end of src_prep (e.g after the .src.patch and .cygwin.patch are applied). These changes were necessary to support building jpeg (using the autotoolized source package at sourceforge, and the lossless compression patch from simplesystems, and the debian lossless-crop patch[locally modified to apply cleanly after the simplesystems change]): ----------------------%<------------------- ... CVS_URI=":pserver:anonymous AT libjpeg DOT cvs DOT sourceforge DOT net:/cvsroot/libjpeg" CVS_DATE="2006-03-01" PD=${CVS_DATE//-} CVS_MODULE=lib${PN} inherit cvs SRC_URI="${PN}-${PV}-${PD}.tar.bz2 \ ftp://ftp.simplesystems.org/pub/ImageMagick/delegates/ljpeg-6b.tar.gz \ jpegv6b-losslesscrop-after-ljpeg.patch" SRC_DIR="lib${PN}" ... src_prep_init_hook() { cd ${origsrcdir} mv testimgl* ${SRC_DIR}/ cd ${SRC_DIR} apply_patch ${origsrcdir}/ljpeg-6b.patch apply_patch jpegv6b-losslesscrop-after-ljpeg.patch } ----------------------%<------------------- -- Chuck P.S. Ping on relocatable patch? 2006-11-07 Charles Wilson <...> * bin/cygport.in (src_fetch_auto): new function. Autodetects protocol of passed-in URI (mirror|http|ftp) and errors if no recognized protocol detected (src_fetch_auto_warn): new function. Autodetects protocol of passed-in URI (mirror|http|ftp) and issues a warning if no recognized protocol detected (src_fetch): call src_fetch_auto_warn for 2nd..Nth SRC_URI regardless of download method (cvs|svn|git|mirror|http|ftp) of first SRC_URI. If !(cvs|svn|git), call src_fetch_auto for first SRC_URI -- which will error if first SRC_URI's protocol is unrecognized. (src_prep_init_hook): new function. no-op. (src_prep_fini_hook): new function. no-op. (src_prep): call src_prep_init_hook and src_prep_fini_hook. * lib/cvs.cygclass: extract first name from SRC_URI and use that to generate tarball name. Ensure that working directory is unchanged by a call to cvs_fetch. * lib/svn.cygclass: extract first name from SRC_URI and use that to generate tarball name. Ensure that working directory is unchanged by a call to svn_fetch. * lib/git.cygclass: extract first name from SRC_URI and use that to generate tarball name. Ensure that working directory is unchanged by a call to git_fetch. --------------070100000405070806030608 Content-Type: text/plain; name="cygport-mixedmode.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="cygport-mixedmode.patch" Index: bin/cygport.in =================================================================== RCS file: /cvsroot/cygwin-ports/cygport/bin/cygport.in,v retrieving revision 1.26 diff -u -r1.26 cygport.in --- bin/cygport.in 18 Oct 2006 04:27:31 -0000 1.26 +++ bin/cygport.in 7 Nov 2006 14:49:16 -0000 @@ -344,31 +344,54 @@ error "Could not download ${1##*/}"; } +# attempts to fetch $1, auto-detecting download method +# among (mirror, http, ftp) +src_fetch_auto() { + local uri="$1" + case ${uri%/*} in + mirror:*) mirror_fetch ${uri} ;; + http:*|ftp:*) fetch ${uri} || error "Download ${uri##*/} failed" ;; + ${uri}|.) error "Invalid download URI ${uri}" ;; + esac +} +src_fetch_auto_warn() { + local uri="$1" + case ${uri%/*} in + mirror:*) mirror_fetch ${uri} ;; + http:*|ftp:*) fetch ${uri} || error "Download ${uri##*/} failed" ;; + ${uri}|.) warning "Invalid download URI ${uri}" ;; + esac +} + # downloads sources from Internet if not present src_fetch() { local uri; + local first_src_uri; + local rest_src_uri; cd ${top}; + first_src_uri="${SRC_URI%% *}" + rest_src_uri="${SRC_URI##${first_src_uri}}" if [ -n "${_USE_CVS_FETCH}" ] then - cvs_fetch; + cvs_fetch; # only fetches the first SRC_URI elif [ -n "${_USE_SVN_FETCH}" ] then - svn_fetch; + svn_fetch; # only fetches the first SRC_URI elif [ -n "${_USE_GIT_FETCH}" ] then - git_fetch; + git_fetch; # only fetches the first SRC_URI else - for uri in ${SRC_URI} - do - case ${uri%/*} in - mirror:*) mirror_fetch ${uri} ;; - http:*|ftp:*) fetch ${uri} || error "Download ${uri##*/} failed" ;; - ${uri}|.) error "Invalid download URI ${uri}" ;; - esac - done + # only fetch the first SRC_URI and report error on failure + src_fetch_auto "${first_src_uri}" fi + + # for the rest, only warn if not value URL (mirror|http|ftp) + for uri in ${rest_src_uri} + do + src_fetch_auto_warn "${uri}" + done } # unpacks the original package source archive @@ -530,6 +553,12 @@ fi } +src_prep_init_hook() { + : +} +src_prep_fini_hook() { + : +} src_prep() { local sigext; local src_pkg; @@ -581,6 +610,8 @@ fi __step "Preparing working source directory"; + src_prep_init_hook + cd ${top} cp -fpr ${origsrcdir}/* ${srcdir}; @@ -593,6 +624,10 @@ then apply_patch ${top}/${cygwin_patchfile} ${top}/${src_patchfile}; fi + + cd ${top} + src_prep_fini_hook + cd ${S} } # protect functions Index: lib/cvs.cygclass =================================================================== RCS file: /cvsroot/cygwin-ports/cygport/lib/cvs.cygclass,v retrieving revision 1.1.1.1 diff -u -r1.1.1.1 cvs.cygclass --- lib/cvs.cygclass 14 Jun 2006 01:16:16 -0000 1.1.1.1 +++ lib/cvs.cygclass 7 Nov 2006 14:49:16 -0000 @@ -23,6 +23,7 @@ cvs_fetch() { local cvs_branch local cvs_date + local first_src_uri check_prog_req cvs @@ -41,5 +42,7 @@ cd ${T} verbose cvs -d ${CVS_URI} checkout ${cvs_branch} ${cvs_date} ${CVS_MODULE} - tar jcf ${top}/${SRC_URI} --exclude=CVS --exclude=.cvsignore ${CVS_MODULE} + first_src_uri=${SRC_URI%% *} + tar jcf ${top}/${first_src_uri} --exclude=CVS --exclude=.cvsignore ${CVS_MODULE} + cd ${top} } Index: lib/git.cygclass =================================================================== RCS file: /cvsroot/cygwin-ports/cygport/lib/git.cygclass,v retrieving revision 1.2 diff -u -r1.2 git.cygclass --- lib/git.cygclass 18 Aug 2006 01:33:22 -0000 1.2 +++ lib/git.cygclass 7 Nov 2006 14:49:16 -0000 @@ -23,6 +23,7 @@ SRC_DIR="${GIT_MODULE}" git_fetch() { + local first_src_uri check_prog_req git # T likely doesn't exist at this point, so create it first @@ -36,5 +37,7 @@ cd ${T} fi - tar jcf ${top}/${SRC_URI} --exclude=.git ${GIT_MODULE} + first_src_uri=${SRC_URI%% *} + tar jcf ${top}/${first_src_uri} --exclude=.git ${GIT_MODULE} + cd ${top} } Index: lib/svn.cygclass =================================================================== RCS file: /cvsroot/cygwin-ports/cygport/lib/svn.cygclass,v retrieving revision 1.1.1.1 diff -u -r1.1.1.1 svn.cygclass --- lib/svn.cygclass 14 Jun 2006 01:16:17 -0000 1.1.1.1 +++ lib/svn.cygclass 7 Nov 2006 14:49:17 -0000 @@ -23,6 +23,7 @@ svn_fetch() { local svn_rev + local first_src_uri check_prog_req svn subversion @@ -39,5 +40,7 @@ cd ${T} verbose svn checkout ${SVN_URI} ${svn_rev} - tar jcf ${top}/${SRC_URI} --exclude=.svn ${SVN_MODULE} + first_src_uri=${SRC_URI%% *} + tar jcf ${top}/${first_src_uri} --exclude=.svn ${SVN_MODULE} + cd ${top} } --------------070100000405070806030608 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/ --------------070100000405070806030608--