Bug 61840 - Port sysutils/cdrdao might corrupt package database
Summary: Port sysutils/cdrdao might corrupt package database
Status: Closed FIXED
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: Any Any
: Normal Affects Only Me
Assignee: freebsd-ports-bugs (Nobody)
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2004-01-24 17:10 UTC by Heiner
Modified: 2004-01-25 20:48 UTC (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Heiner 2004-01-24 17:10:17 UTC
The port cdrdao might corrupt the package database. See How-To-Repeat secti=
on.=20
The reason is the dynamic calculation of the dependencies. If gnomelibs is=
=20
not installed during installation of cdrdao but installed lateron, all port=
s=20
depending on cdrdao also depend on gnome--, which is not necessarily=20
installed!

Fix: 

There are two obvious fixes:
1. Follow the instructions in http://www.freebsd.org/gnome/docs/porting.htm=
l.=20
Note, that the example of dynamic dependencies

=2Eif ${HAVE_GNOME:Mgnomepanel}!=3D""
    USE_GNOME+=3D gnomeprefix gnomepanel
    CONFIGURE_ARGS+=3D    --with-gnome
    PKGNAMESUFFIX=3D  -gnome
    PLIST_SUB=3D  DATADIR=3D"share/gnome"
=2Eelse
    CONFIGURE_ARGS+=3D    --without-gnome
    PLIST_SUB=3D  DATADIR=3D"share"
=2Eendif

does NOT contain any LIB_DEPENDS!! The current Makefile of cdrdao contains =
two=20
of them:

=2Eif ${HAVE_GNOME:Mgnomelibs} !=3D ""
USE_GNOME=3D		gnomelibs
LIB_DEPENDS+=3D		gtkmm.2:${PORTSDIR}/x11-toolkits/gtk--
LIB_DEPENDS+=3D		gnomemm-1.2.10:${PORTSDIR}/x11-toolkits/gnome--
CONFIGURE_ARGS=3D		--with-gtkmm-prefix=3D${X11BASE}
PKGNAMESUFFIX?=3D		-gnome
PLIST_SUB=3D		GNOME=3D""
MAN1+=3D			gcdmaster.1
=2Eelse
CONFIGURE_ARGS=3D		--with-gtkmm-prefix=3D${NONEXISTENT}
PLIST_SUB=3D		GNOME=3D"@comment "
_WITHOUT_GNOME=3D		yes
=2Eendif

They cause the problem. Converting them into USE_GNOME requires a change of=
=20
bsd.gnome.mk as well but fixes the problem

2. A better fix is to follow the cvsup example. Here two ports exist (cvsup=
=20
and cvsup-withoutgui), where the second points to the first. On cdrdao I=20
recommend to create a port cdrdao, which depends on the gnome stuff only, i=
f=20
the environment variable WITH_GNOME is set. A second port cdrdao-gnome sets=
=20
it and points to cdrdao. Then all dependending ports, which do not need gui=
=20
stuff, point to cdrdao and the user can decide, which one he needs.
How-To-Repeat: 1. Make sure, that pkgdb -F reports no error.
2. pkg_deinstall -f the ports gnomelibs, cdrdao, gnome-- and k3b, if they a=
re=20
installed.
3. portinstall gnomelibs, cdrdao and k3b in this order. Note that gnome-- i=
s=20
installed automatically by cdrdao.
4. pkgdb -F reports no error. Everything is fine.
5. repeat step 2
6. portinstall cdrdao, gnomelibs and k3b in this order. Note that gnome-- i=
s=20
NOT installed automatically by cdrdao
7. pkgdb -F reports a missing dependency (k3b -> gnome--). The package=20
database is corrupt!
Comment 1 Pav Lucistnik freebsd_committer freebsd_triage 2004-01-25 20:46:33 UTC
State Changed
From-To: open->closed

Corruption was caused by your invalid usage of pkg_deinstall -f, 
where -f flag stands for forcibly removal of package, leaving 
other packages which depends on it broken.