Ya un peu de
getosreldate(3) et un peu d'environnement aussi 
Un extrait de [tt]src/usr.sbin/pkg_install/add/main.c:
Code:struct {
int lowver; /* Lowest version number to match */
int hiver; /* Highest version number to match */
const char *directory; /* Directory it lives in */
} releases[] = {
{ 410000, 410000, "/packages-4.1-release" },
{ 420000, 420000, "/packages-4.2-release" },
{ 430000, 430000, "/packages-4.3-release" },
{ 440000, 440000, "/packages-4.4-release" },
{ 450000, 450000, "/packages-4.5-release" },
{ 460000, 460001, "/packages-4.6-release" },
{ 460002, 460099, "/packages-4.6.2-release" },
{ 470000, 470099, "/packages-4.7-release" },
{ 480000, 480099, "/packages-4.8-release" },
{ 490000, 490099, "/packages-4.9-release" },
{ 491000, 491099, "/packages-4.10-release" },
{ 492000, 492099, "/packages-4.11-release" },
{ 500000, 500099, "/packages-5.0-release" },
{ 501000, 501099, "/packages-5.1-release" },
{ 502000, 502009, "/packages-5.2-release" },
{ 502010, 502099, "/packages-5.2.1-release" },
{ 503000, 503099, "/packages-5.3-release" },
{ 300000, 399000, "/packages-3-stable" },
{ 400000, 499000, "/packages-4-stable" },
{ 502100, 502128, "/packages-5-current" },
{ 503000, 599000, "/packages-5-stable" },
{ 600000, 699000, "/packages-6-current" },
{ 0, 9999999, "/" },
{ 0, 0, NULL }
};
et la fonction elle-même:
Code:static char *
getpackagesite(void)
{
int reldate, i;
static char sitepath[MAXPATHLEN];
struct utsname u;
if (getenv("PACKAGESITE")) {
if (strlcpy(sitepath, getenv("PACKAGESITE"), sizeof(sitepath))
>= sizeof(sitepath))
return NULL;
return sitepath;
}
if (getenv("PACKAGEROOT")) {
if (strlcpy(sitepath, getenv("PACKAGEROOT"), sizeof(sitepath))
>= sizeof(sitepath))
return NULL;
} else {
if (strlcat(sitepath, "http://fireflybsd.com", sizeof(sitepath))
>= sizeof(sitepath))
return NULL;
}
if (strlcat(sitepath, "/packages", sizeof(sitepath))
>= sizeof(sitepath))
return NULL;
#if 0
uname(&u);
if (strlcat(sitepath, u.machine, sizeof(sitepath)) >= sizeof(sitepath))
return NULL;
#endif
reldate = getosreldate();
for(i = 0; releases[i].directory != NULL; i++) {
if (reldate >= releases[i].lowver && reldate <= releases[i].hiver) {
if (strlcat(sitepath, releases[i].directory, sizeof(sitepath))
>= sizeof(sitepath))
return NULL;
break;
}
}
if (strlcat(sitepath, "/Latest/", sizeof(sitepath)) >= sizeof(sitepath))
return NULL;
return sitepath;
}
C'est sur DragonFly, mais je doute que ça ait changé sur FreeBSD depuis (hormis le suivi des nouvelles versions, bien sûr).
T'as essayé d'utiliser
$PACKAGEROOT aussi ?