Diary of a geek

June 2005
Mon Tue Wed Thu Fri Sat Sun
   
21
     

Andrew Pollock

Categories

Other people's blogs

Subscribe

RSS feed

Contact me

JavaScript required


Tuesday, 21 June 2005

Complying with Policy 10.1 is harder than it looks

I've been bashing on dhcp3 just a bit lately. The current thing I'm working on is bringing the Standards-Version up to the present day. Using the upgrading checklist that comes with debian-policy (which is mighty handy I might add), I've gotten to the stuff in section 10.1 first referred to by Policy version 3.5.7.0, namely the stuff about supporting building packages with the optional use of DEB_BUILD_OPTIONS.

The snippet in 10.1 makes it look a lot easier than it really is.

Certainly, I think the argus-server source package already had a pile of

     CFLAGS = -Wall -g
     INSTALL = install
     INSTALL_FILE    = $(INSTALL) -p    -o root -g root  -m  644
     INSTALL_PROGRAM = $(INSTALL) -p    -o root -g root  -m  755
     INSTALL_SCRIPT  = $(INSTALL) -p    -o root -g root  -m  755
     INSTALL_DIR     = $(INSTALL) -p -d -o root -g root  -m  755
     
     ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
     CFLAGS += -O0
     else
     CFLAGS += -O2
     endif
     ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
     INSTALL_PROGRAM += -s
     endif
type stuff in debian/rules when I inherited it, but I only discovered how ineffectual this is on its own when I tried to add it to the debian/rules for dhcp3, and did some closer inspection of what was really going on.

Basically, setting CFLAGS in debian/rules isn't worth a pinch of shit unless you pass it to the call to ./configure like

./configure CFLAGS="$(CFLAGS)"
even then, all bets are off as to how it's going to work, depending on the upstream Makefile.

Again, using the Argus source package as my benchmark, I'd always casually eyeballed the build logs, seen lots of "gcc -O2" going on, and assumed it was because of my CFLAGS in debian/rules.

Wrong.

As it happened, the upstream Makefile was already using -O2. On closer inspection, there was no -Wall, so my CFLAGS in debian/rules wasn't being used at all.

So I fixed (for Argus) by passing CFLAGS to the ./configure invocation. Next problem is that because the upstream Makefile is using -O2, I'm now actually passing -O2 twice. The downside of this is that if a user builds the package with "DEB_BUILD_OPTS=noopt", it's going to pass "CFLAGS=-O0 -Wall" to gcc, along with the -O2 in the upstream Makefile, and $DEITY only knows what optimisation level it's going to actually use.

I think to do things properly, I'm going to have to patch the -O2 out of the upstream Makefile (for Argus).

Coming back to the DHCP package, it's weird. The configure script isn't actually a GNU autoconf configure script, so passing it a CFLAGS argument does diddley-squat. If I invoke make with a CFLAGS environment variable, it overrides the options passed to the compiler in the Makefile, which most importantly includes a whole bunch of -I's, so the build fails completely. So I'm not quite sure how I'm going to implement DEB_BUILD_OPTS support for this sucker just yet.

[06:28] [debian] [permalink]