(Moving discussion to macports-dev from macports-users)

On Apr 17, 2010, at 03:49, Scott Haneda wrote:

> This seems to be the most common of the expressions used:
>    (\d+(?:\.\d+)*)
> Has that been determined the preferred method of making that match?

I believe that's part of the livecheck.regex Anthony decided he prefers. I 
personally tend to use (\[0-9.\]+) which is less-precise but simpler to type. 
Either way it would have to be adapted if the software in question uses e.g. 
letters or dashes or underscores in its version numbers. In the end, it's 
whatever works for this port's particular situation, and whatever's likely to 
continue working in the future (based on what you can learn about the types of 
version numbers and filenames the project has used in the past).

My favorite livecheck which you've probably seen me add to many ports is:

livecheck.type regex
livecheck.regex ${name}-(\[0-9.\]+)\\.tar

This checks the project's homepage (the default livecheck.url is ${homepage}); 
this works great if they always put a link to download the current version on 
their homepage. Usually I'll change it to check the master_sites:

livecheck.url [lindex ${master_sites} 0]

This works great if the first URL in the project's master_sites has a directory 
listing, which for many projects it does. I prefer this to checking the 
homepage, in case the project forgets to update its homepage when a new version 
is posted.

Why do I use [lindex ${master_sites} 0] instead of just ${master_sites}? This 
ensures the livecheck doesn't blow up if the port has multiple master_sites 
defined. Should you still do this if the port only has a single master_sites 
entry defined? I say yes, because then the livecheck won't start failing down 
the road when someone else comes along later and decides to add a second 
master_sites entry.

Why do I end the livecheck.regex with \\.tar instead of ${extract.suffix}? 
Because \\.tar covers both .tar.gz and .tar.bz2; I've seen projects switch from 
one to the other and I wouldn't want to miss a new version because of that. If 
the project uses .tgz, .zip, or another suffix for its downloads, I might then 
use ${extract.suffix}.

Note that with my regex I do need to put *something* after the version number 
match, because if I don't, and the homepage says something like "We released 
version 1.2.3." then the version matched would be "1.2.3." and not "1.2.3" like 
we want. With Anthony's more-precise regex, this wouldn't happen.


> Could you walk me through port "mowitz"
> I look at that Portfile and I see the download url is:
>    http://siag.nu/pub/mowitz/
> If I go to that url, it is 404, I then combine it all to test it:
>    http://siag.nu/pub/mowitz/Mowitz-0.3.1
> 
> 404 also.

They appear to be having server problems. I reported the problem to the contact 
address listed at the bottom of their web page, which is what you should do if 
you encounter similar problems in the future.


> I do not know the commands to do a test download, so I tried:
>    $sudo port -yv install mowitz

I'll admit I haven't used "-y" before but as Joshua said, just use "sudo port 
-d fetch mowitz".


> Did I pick a dead port to start on?

Problematic server, anyway; hopefully they'll have that sorted out soon and you 
can try again.


> If you got from a to k, then you are half there, and must have picked up some 
> tricks along the way.

Don't get me wrong: from a thru k, there were about 300 ports I couldn't / 
didn't update. For many I was unable to locate the project's current homepage 
or download URL, so the ports are probably dead. For others, I couldn't get the 
latest version to build. For others, as you said, I couldn't find a URL on the 
project's homepage that would tell me the current version from which I could 
construct a livecheck. For others, I couldn't build their dependencies. And so 
on. So there's still plenty to do in a thru k but I at least gave it a first 
pass.


> Would you mind walking me through your process of one port, so I know how to 
> do this in a fast way.

Ok, let me pick one from my to-do list and see what happens.


altermime seems to have been updated (port version: 0.3.6, new version: 0.3.10)

Search for tickets with altermime in the summary... none found. Go to 
homepage... exists... shows 0.3.10 is indeed the current version. It's over a 
year old, so maybe the project relocated elsewhere and started doing releases 
there... Google "altermime"... first hit is the homepage we already have on 
file. So I guess not, I guess 0.3.10 is all there is.

cd $(port dir altermime)
edit Portfile

("edit" is TextWrangler's command-line helper; if you use BBEdit, the command 
is "bbedit". Other editors probably have their own commands for this.)

I see the Portfile contains tabs. I want to conform to the Portfile's existing 
whitespace conventions. My editor defaults to 4 spaces per tab... looks ok. Try 
8 spaces per tab... no, looks worse. Go back to 4 spaces per tab. Set editor to 
not auto-expand tabs.

Edit the version line so it reads 0.3.10.

sudo port -d checksum | edit
Password:

Type password. 
Copy 3 checksum lines to Portfile. Change the spaces in those lines back to 
tabs matching the portfile's existing whitespace.

sudo port -d install

Fails:

cc -Wall -Werror -g -I. -O2  -c qpe.c
cc1: warnings being treated as errors
qpe.c: In function 'qp_encode':
qpe.c:100: warning: format '%d' expects type 'int', but argument 3 has type 
'size_t'

So they've asked to be shown all warnings, and for warnings to be treated as 
errors, and they have a problem in their code that triggers a warning. I don't 
care about this warning so want to remove -Werror from the CFLAGS.

cd work/altermime-0.3.10/
edit Makefile

I see they set CFLAGS explicitly, overwriting whatever might be sent in by me 
via environment variables. I could still send in my own CFLAGS as a make 
argument, but then I'd be overwriting their CFLAGS, which look specific to the 
way they build this software so I don't want to do that.

sudo cp -p Makefile{,.orig}
edit Makefile

Change the Makefile to make it append to the existing CFLAGS in the environment 
variable instead of overwriting them, and remove -Werror and the stuff we 
already pass in in our CFLAGS, like -O2.

diff -u Makefile{.orig,} > /tmp/p
cd ../..
ls

There's no "files" directory so I'll have to make one.

mkdir files
mv /tmp/p files/patch-Makefile.diff

edit Portfile

Add the line "patchfiles patch-Makefile.diff", and add 
CFLAGS="${configure.cflags}" to the build.env.

I also see we're not UsingTheRightCompiler because this port has "use_configure 
no" and doesn't do anything to fix it manually. I'll fix it by adding 
CC=${configure.cc} to the build.env. If the Makefile had defined a value for 
CC, I would have instead passed it in build.args to override their value 
(otherwise their value would have overridden ours).

Note: ${configure.cflags} is in quotes because it is likely there will be a 
space in this value. ${configure.cc} is not in quotes because it's just the 
path to the compiler which won't contain a space.

I'll remove the build.target line which isn't doing anything useful here. (The 
default build.target is "all" and the Makefile does define an "all" target so 
we'll just use that.)

sudo port -d install

Works! Check that something reasonable got installed.

port contents

Looks ok. Does it run without crashing?

altermime --version
alterMIME v0.3.10 (November-2008) by Paul L Daniels - 
http://www.pldaniels.com/altermime

Looks ok. Schedule the patchfile for addition.

svn add files/

Make sure all the changes I'm about to commit look reasonable.

svn di

Yup, looks good, commit it.

svn ci -m "altermime: update to 0.3.10 and ensure we're UsingTheRightCompiler"

http://trac.macports.org/changeset/66619

I don't actually need this software so I'll uninstall it to save space.

sudo port uninstall


>> Of course, it's easier to fix if you're a committer and don't have to file a 
>> ticket for each one. :/
> 
> You certainly said it.  What if I did a large batch, could I just send you 
> the folders, or is that way out of procedure?

It might be ok, but since I (or whoever) would have to evaluate and commit each 
one separately, don't send a huge batch because that'll be intimidating. :)

But you know, as you see above, every port has its own quirks. If I were filing 
a ticket for updating altermime, there might have been some discussion about 
the best way to handle one or the other of the situations I detailed above. I 
wouldn't want a ticket to be for more than one port and to have various 
different ports' discussions intermingled. If you have a handful of ports where 
you're just fixing their livecheck and nothing else, that's probably ok to file 
as a single ticket with either a single patchfile or multiple patchfiles 
attached, but if we're updating port versions, especially of unmaintained ports 
where considerable time may have passed since the port was last updated and 
thus considerably more could be expected to go wrong when doing so, let's keep 
it at one port per ticket.



_______________________________________________
macports-dev mailing list
macports-dev@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macports-dev

Reply via email to