3.0alpha24: make bug (or more...)

Andrew Bartlett abartlet at samba.org
Fri May 16 00:57:01 GMT 2003


On Fri, 2003-05-16 at 05:40, David Lee wrote:
> On Thu, 15 May 2003, David Lee wrote:
> 
> > I grabbed 3.0alpha24 this morning and began to build it, and quickly hit a
> > bug.  (Our platform is Sun/Solaris8 but the bug is a general one.)  I
> > logged a patch (bugzilla 83), but it looks as though one bug leads to
> > another and so on...
> >
> > The problem (or connected string of them) probably won't affect a simple
> > "builddir == srcdir" configuration.
> >
> >
> > But for those sites (e.g. with multiple architectures) which use multiple
> > "builddir", separate from each other and from "srcdir", the start of this
> > potentially long string is immediately evident.
> >
> > [...]
> > For the curious:
> >
> >   cd source
> >   mkdir builddir_1
> >   cd builddir_1
> >   ../configure  <... your favourite --options>
> >   make
> >
> >
> > The "make" will fail, unable to write "smbd/build_options.c" because
> > directory "builddir_1/smbd" does not exist.  That is easily fixed by the
> > one-line patch in bugzilla 83.
> >
> >
> > But then the fun starts, and the string seems to get longer, as it cannot
> > completely build "include/proto.h".  (And I think there is a philosophical
> > mistake in its trying to build it in "$(srcdir)": it ought to be in
> > "$(builddir)".  Etc.)
> 
> Further to my message above.
> 
> At the time I sent it, I had already done some work, but it had seemed
> that each step forward revealed two or more further steps that would need
> to be taken.  At the time, it was looking increasingly worrying.
> 
> Anyway.  I think I've fixed it, and (I hope) done so reasonably cleanly.
> 
> To re-iterate:  The problem almost certainly only affects sites where
> "builddir != srcdir".  (If your site has them equal, then you may
> reasonably be wondering what the fuss is about!)
> 
> Four files are affected:
>    Makefile.in
>    script/mkproto.sh
>    configure.in
>    nsswitch/winbindd.h
> 
> The trigger is that "proto.h" doesn't build under these circumstances
> ("builddir != srcdir"), because it needs to reference the new (at alpha24)
> "smbd/build_options.c" file.  Quite rightly, this is built in $(builddir).
> But it (a ".c") file is now in with ".o" files and so is isolated from the
> other ".c" sources.

OK - that's a bug then.  Just make it not reference that file, and
include the prototype of the single externally callable function in our
other headers.

> The first part of the solution is to rework Makefile.in's calling of
> script/mkproto.sh and the latter's internal detail.  Hitherto Makefile.in
> had invoked script/mkproto.sh with a mixture of mostly ".o" but the
> occasional ".c" (the new "smbd/build_options.c").  mkproto.sh had then
> simply translated ".o" suffixes to ".c" and prepended with "$(srcdir)".
> But that was incorrect for the unusually (but correctly) placed
> "smbd/build_options.c".
> 
> So I have tidied that up.  Those name transformations are now done within
> the Makefile, which knows this idiosyncracy.  Its call of script/mkproto.sh
> is now with the ".c" files and their correct locations: usually $(srcdir),
> but in the case of "smbd/build_options.c", this is $(builddir).
> 
> Also, within Makefile.in I had to separate out "smbd/build_options"
> references because of the its ".c" file's "special case" location.

Sounds good.  Once you have done that, it's easy to drop from
PROTO_OBJS.

> Another problem of Makefile's invocation of "mkproto.sh" was that it was
> putting the output files relative to $(srcdir): the wrong place, which
> could potentially break multiple builds.
> 
> So I have now arranged for it to be run in the context of, and placing its
> output relative to, $(builddir) instead.  The rest of the Makefile's
> (correct) use of $(srcdir) and $(builddir) makes this correction
> transparent.
> 
> A side-effect within "mkproto.sh" of its now being in the $(builddir)
> context is that the location of "mkproto.awk", a $(srcdir) item, now needs
> explicitly stating within it.  But this varies according to the relative
> positioning of $(srcdir) and $(builddir).
> 
> Accordingly, "mkproto.sh" is renamed to "mkproto.sh.in" and a
> corresponding one line change applied in "configure.in".
> 
> Basically this then built, although it did expose one weakness in one
> compilation, trivially fixed by redefining an "include" with
> "nsswitch/winbindd.h".
> 
> 
> I attach four "diff -u".
> 
> 1. Makefile.in
> 2. scripts/mkproto.sh :  Note that this should be renamed to a ".in"
> 3. configure.in (to account for rename of "scripts/mkproto.sh")
> 4. nsswitch/winbindd.h

Apart from the need to just manually prototype the build_options stuff,
this patch looks good.  For one extra header prototype, it's not worth
the special case in the script.

Andrew Bartlett

-- 
Andrew Bartlett                                 abartlet at pcug.org.au
Manager, Authentication Subsystems, Samba Team  abartlet at samba.org
Student Network Administrator, Hawker College   abartlet at hawkerc.net
http://samba.org     http://build.samba.org     http://hawkerc.net
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : http://lists.samba.org/archive/samba-technical/attachments/20030516/7ea95c78/attachment.bin


More information about the samba-technical mailing list