[ovs-dev] [PATCH v3 3/6] makefile: create destdir when generating files
Ben Pfaff
blp at ovn.org
Thu Aug 3 01:57:43 UTC 2017
On Wed, Aug 02, 2017 at 09:41:34PM -0400, Aaron Conole wrote:
> Ben Pfaff <blp at ovn.org> writes:
>
> > On Wed, Aug 02, 2017 at 05:25:36PM -0400, Aaron Conole wrote:
> >> Ben Pfaff <blp at ovn.org> writes:
> >>
> >> > On Tue, Aug 01, 2017 at 06:05:40PM -0400, Aaron Conole wrote:
> >> >> When intermediary files are generated, the destination directory is assumed
> >> >> to exist. This has worked so far because most files are built prior to
> >> >> the dist-packaging step. However, any files which require rebuild after
> >> >> the packaging step may end up in failure if the output directory is not
> >> >> available. This commit adds a 'mkdir -p' before generating the output files.
> >> >>
> >> >> Signed-off-by: Aaron Conole <aconole at redhat.com>
> >> >
> >> > Thanks for working on the makefiles.
> >> >
> >> > What's an example of a file for which this makes a difference? I'm
> >> > having trouble understanding when this helps.
> >>
> >> Thanks for reviewing, Ben!
> >>
> >> The next patch in the series adds an example of this. I should have put
> >> that into the commit message as well.
> >>
> >> I'll go over the effect I observed, and maybe there's a better way to do
> >> it:
> >>
> >> 1. I added a 'preprocessor' to be able to have dpdk vs. non-dpdk
> >> functionality in generated files (ex: the vswitchd service file)
> >>
> >> 2. I execute `./configure --with-dpdk` and observe that the correct
> >> lines are included. So far so good.
> >>
> >> 3. I completely clean the tree, and do a `./configure` without
> >> specifying dpdk. The lines are not included, and still so far so
> >> good.
> >>
> >> 4. I use the resulting distribution (made with make dist) to build,
> >> doing `./configure --with-dpdk`. Now, I would think the file should
> >> have the correct lines included, but it does not.
> >>
> >> To resolve this, I tried adding the generated file as BUILT_SOURCES, but
> >> experienced errors when doing a `make distcheck`, since the $(srcdir)
> >> directory is read only. So, I implemented the approach where I added
> >> $(builddir)/config.status which would behave as I expect, but for the
> >> fact that the sed will do a redirect into a subdirectory that isn't
> >> created.
> >>
> >> I'm sure a better way could exist, but I don't know it.
> >>
> >> I guess that's a long-winded (apologies) way of saying there are
> >> currently no examples in tree - this commit adds one.
> >
> > I think that the root of the problem here is that we're distributing a
> > generated file, and it's made worse because that generated file depends
> > on the build-time configuration. That's a recipe for Autoconf/Automake
> > hell.
> >
> > Ideally, we'd stop distributing a generated file entirely. It's a
> > little complicated for packaging because we want to fill in part of the
> > packaging based on what's in OVS, but the straightforward way to do that
> > is to generate the packaging as part of the OVS build, but the OVS build
> > is what the packaging is supposed to do anyway. (Frankly I wish that
> > OVS didn't come with its own packaging--that would solve lots of
> > problems.)
> >
> > What if the spec files themselves did the editing of the service file,
> > instead of doing it from OVS? That would solve this particular problem
> > because we wouldn't need to have a generated file in the OVS tree (just
> > the source file).
>
> I could try that. It would probably shrink this series a bit, so that's
> an added benefit. I'll see what I can cook up.
Thanks for humoring me.
More information about the dev
mailing list