cygport and CYGWIN-PATCHES

Charles Wilson cygwin@cwilson.fastmail.fm
Fri May 2 23:38:00 GMT 2008


Warren Young wrote:
> Yaakov (Cygwin Ports) wrote:
>> | Is there a way I can get Cygport to generate this patch for me?
>> You need to put these files into foo-ver-rel/CYGWIN-PATCHES/.
> 
> I actually stumbled across that earlier, but I convinced myself it 
> couldn't be the right way to do it.

Just try it.

> foo-ver-rel doesn't exist until after prep, so to copy these files in, 
> you have to run the prep...finish steps by hand, so you can insert them 
> between prep and compile, right? 

Yes.  Most of the time, almostall and all are /not/ for maintainers. 
They are for /other/ people, who for whatever reason want to build their 
own version. Maybe he edited the cygport file to add a different 
configure option -- or maybe his name is Volker Zell and he's testing 
your package after an ITP.

> I'm getting hung up on the existence 
> of the almostall and all commands: what's their value if you have to do 
> something outside of cygport between prep and compile?

I use 'all' only as a final step before uploading.  I've already done 
(incrementally, maybe several iterations) lots of 'build' and 'install' 
and 'pkg'...and then I noticed a problem, so I go fix it and try 'build' 
again.  And then there's that new doc file, so I edit the src_install 
for this release, and do 'install' and 'pkg' again...

After all that, it's a nice check to do:

cygport foo.cygport pkg
tar xvjf foo-src.tar.bz2
cygport foo.cygport finish
cygport foo.cygport almostall (or all)

I usually use 'almostall' because (a) I'm pretty sure I can't break 
'finish', and (b) that way, I still have the handy /dist directory for 
easy uploading.

I also use almostall when I'm about to start a new update:

cp foo-OLD.cygport foo-NEW.cygport
cp foo-OLD.src.patch foo-NEW.src.patch
cp foo-OLD.cygwin.patch foo-NEW.cygwin.patch
cygport foo-NEW.cygport almostall

and, if everything went well, I now how completely built version of 
foo-NEW to make my changes in...without clobbering my foo-OLD stuff.

> If cygport can do these steps for you, then I see the point of almostall 
> and all again.  If it doesn't do these things for you now, will you 
> accept a patch to make it do so?

To do...what, exactly?  The *first* time, when you're initially creating 
a brand new cygport, things are a little odd. How is cygport supposed to 
create, ex nihilo, your custom README and custom .hint files, and put 
them into CYGWIN-PATCHES? they don't exist, yet, at all. You have to 
write them.

Same thing with src patches? How is cygport suppost to know what patches 
are necessary to make your package compile on cygwin? You have to edit 
the src.

So, for a brand new cygport, you do
(a) cp /usr/share/cygport/sample.cygport foo-1.2.3-1.cygport
(b) edit your .cygport as needed. In this early stage, the most you'll 
probably have to do is fix SRC_DIR, and the various 
download/homepage/description entries.  That's enough for 'prep' to 
create a "blank slate" for you to work on.

cygport foo-1.2.3.cygport prep

(c) Then, once you've done that -- create your
   foo-1.2.3-1/CYGWIN-PATCHES/<stuff>
and edited the src code as appropriate in
   foo-1.2.3-1/src/foo-1.2.3/
so that 'build' and 'install' work the way you want them to (which may 
involve editing the .cygport again, and maybe customizing src_compile() 
and src_install()).

(d) you can do 'pkg' -- which will create, among other things,
   foo-1.2.3-1.src.patch
   foo-1.2.3-1.cygwin.patch
and then stuff them into a
   foo-1.2.3-1-src.tar.bz2

unpack THAT (or look in foo-1.2.3-1/patches/, and you now have your two 
patches. The .src.patch contains all of your changes to the source 
directory, excluding anything under CYGWIN-PATCHES.  The .cygwin.patch 
contains the full contents of all those new files you put into 
CYGWIN-PATCHES the first time around.

Now, 'cygport all' will just work. Hopefully.

--
Chuck



More information about the Cygwin-apps mailing list