[llvm] r230812 - Discourage in-source autoconf builds (as we already do for the cmake build)

Jonathan Roelofs jonathan at codesourcery.com
Wed Mar 25 13:30:49 PDT 2015



On 3/25/15 2:11 PM, Eric Christopher wrote:
>
>
> On Tue, Mar 24, 2015 at 11:31 PM Nick Lewycky <nicholas at mxc.ca
> <mailto:nicholas at mxc.ca>> wrote:
>
>     Eric Christopher wrote:
>      >
>      >
>      > On Tue, Mar 10, 2015 at 9:39 AM Jonathan Roelofs
>      > <jonathan at codesourcery.com <mailto:jonathan at codesourcery.com>
>     <mailto:jonathan at codesourcery.__com
>     <mailto:jonathan at codesourcery.com>>> wrote:
>      >
>      >
>      >
>      >     On 2/28/15 11:01 PM, Nick Lewycky wrote:
>      >      > Eric Christopher wrote:
>      >      >>
>      >      >>
>      >      >> On Sat, Feb 28, 2015 at 11:45 AM Nick Lewycky
>     <nicholas at mxc.ca <mailto:nicholas at mxc.ca>
>      >     <mailto:nicholas at mxc.ca <mailto:nicholas at mxc.ca>>
>      >      >> <mailto:nicholas at mxc.ca <mailto:nicholas at mxc.ca>
>     <mailto:nicholas at mxc.ca <mailto:nicholas at mxc.ca>>>> wrote:
>      >      >>
>      >      >>     Jonathan Roelofs wrote:
>      >      >> > Author: jroelofs
>      >      >> > Date: Fri Feb 27 17:35:47 2015
>      >      >> > New Revision: 230812
>      >      >> >
>      >      >> > URL: http://llvm.org/viewvc/llvm-
>     project?rev=230812&view=rev
>      >      >> <http://llvm.org/viewvc/llvm- project?rev=230812&view=rev
>      >     <http://llvm.org/viewvc/llvm-__project?rev=230812&view=rev
>     <http://llvm.org/viewvc/llvm-project?rev=230812&view=rev>>>
>      >      >> > Log:
>      >      >> > Discourage in-source autoconf builds (as we already do
>     for the
>      >      >>     cmake build)
>      >      >>
>      >      >>     I have reverted this patch. Please explain yourselves.
>      >      >>
>      >      >>
>      >      >> Pretty rude way of putting it but sure.
>      >      >
>      >      > Hey, sorry. I was upset, and neither of you deserved that
>     sort of
>      >     tone.
>      >      > I'm truly sorry, and thank you for taking the time to write an
>      >      > explanation in spite of my poor attitude!
>      >     Sorry about my end of this too. I had assumed there was
>     consensus on
>      >     this from discussing it on #llvm. I probably should have
>     mailed the list
>      >     first explaining what I had intended to do.
>      >      >
>      >      >> Best practices.
>      >      >>
>      >      >> https://www.sourceware.org/ autobook/autobook/autobook_14.
>      >     html#SEC14
>      >
>       <https://www.sourceware.org/__autobook/autobook/autobook_14.__html#SEC14 <https://www.sourceware.org/autobook/autobook/autobook_14.html#SEC14>>
>      >      >>
>      >      >> In general you want to keep your source directory pristine
>      >     (readonly)
>      >      >> and configuring inside the source directory is fraught with
>      >     problems.
>      >     +1
>      >
>      >     This is a small step toward allowing the source dir to be
>     kept readonly
>      >     during builds.
>      >      >
>      >      > Got it.
>      >      >
>      >      > If it matters, I've been using this configuration for a long
>      >     time, and I
>      >      > haven't seen any glitch for years, though I do remember a time
>      >     when that
>      >      > wasn't true. I understand why it risks continuing problems.
>      >      >
>      >      > The two main things I get from in-tree builds are that I
>     can grep
>      >      > through the source including the generated source,
>      >     This one you can work around (somewhat) by doing a
>      >     subdirectory-of-source build, i.e.:
>      >
>      >         $ svn co http://llvm.org/svn/llvm- project/llvm/trunk
>      >     <http://llvm.org/svn/llvm-__project/llvm/trunk
>     <http://llvm.org/svn/llvm-project/llvm/trunk>> llvm
>      >         $ mkdir -p llvm/build && cd llvm/build
>      >         $ ../configure [options]
>      >
>      >      > and that I can rename
>      >      > the directory trees. Out of tree builds bake in a
>     directory name.
>      >     Doesn't this just mean that renames have to happen in two
>     steps (i.e.
>      >     rename the src version of the dir, then rename the build
>     version of the
>      >     dir)? Or is there something fundamentally different here that I'm
>      >     missing?
>      >      > I can
>      >      > try this again and see whether it's still a problem, or if
>     there's
>      >      > something we can fix here.
>      >      >
>      >      >> This also ensures that the occasional report I get of someone
>      >     not being
>      >      >> able to do a make distclean in the source directory will go
>      >     away. I will
>      >      >> also take a working make distclean if you'd like to do
>     that instead
>      >      >> (though, obviously, I'd prefer the current patch).
>      >      >
>      >      > Reducing support burden is a perfectly reasonable reason. As
>      >     someone who
>      >      > uses this configuration, I find that I very rarely run
>     make clean and
>      >      > don't think I've tried make distclean. I would not be
>     surprised
>      >     to learn
>      >      > that I've accidentally learned to avoid the things that
>     don't work.
>      >      >
>      >      > As you've probably already surmised, I'm not super
>     interested in
>      >     writing
>      >      > a patch that fixes "make distclean". :) Which I guess
>     means that
>      >     you can
>      >     :) Especially with the whole "autotools is going away once we
>     have
>      >     feature parity with the cmake build" push.
>      >      > ignore me and un-revert? I do have one review comment
>     though, please
>      >      > change the error message from "discouraged" to "are no longer
>      >      > supported". In part, I was confused by the combination of
>     the term
>      >      > discouragement (in the error message and in the commit
>     log) with
>      >     a hard
>      >      > error.
>      >     Sorry about that... how about "In-source builds are not
>     allowed. Please
>      >     configure from a separate build directory."? This would
>     better match the
>      >     message printed by the cmake build in this situation.
>      >
>      >
>      > This works for me. Nick?
>
>     That text is fine with me. I was thinking, there's three things we
>     should do for this deprecation.
>
>     We should make sure the documentation never shows an objdir==srcdir
>     build. I just spent a while looking at this, and it looks like this is
>     essentially done already. A couple places show "./configure".
>         -
>     http://llvm.org/docs/FAQ.html#__the-configure-script-finds-__the-right-c-compiler-but-it-__uses-the-llvm-tools-from-a-__previous-build-what-do-i-do
>     <http://llvm.org/docs/FAQ.html#the-configure-script-finds-the-right-c-compiler-but-it-uses-the-llvm-tools-from-a-previous-build-what-do-i-do>
>         - http://llvm.org/docs/__HowToBuildOnARM.html
>     <http://llvm.org/docs/HowToBuildOnARM.html> (the second time)
>     Special mention to http://llvm.org/docs/__GoldPlugin.html
>     <http://llvm.org/docs/GoldPlugin.html> which does show
>     "./configure" but for building your autotooled project not for building
>     llvm. (I also found
>     http://llvm.org/docs/__TestSuiteMakefileGuide.html
>     <http://llvm.org/docs/TestSuiteMakefileGuide.html>
>     which doesn't seem to have any links pointing to it, and still describes
>     building and installing llvm-gcc ... yet it shows an objdir != srcdir
>     build!)
>
>     Second, if possible, it'd be nice to have some instructions for how to
>     migrate from an in-tree build to an out of tree build. Realistically the
>     answer may turn out to be "svn diff > tmp.patch", but I thought I'd ask
>     in case you think this is doable.
>
>     $ mv llvm-commit llvm-commit-src
>     $ mkdir llvm-commit
>     $ cd llvm-commit
>     $ mv ../llvm-commit-src/ src
>     $ mkdir build
>     $ cd build
>     $ ../src/configure
>     configure: error: Already configured in ../src
>
>     $ cd ../src/
>     $ make distclean
>     Makefile:151: /home/nicholas/llvm-commit/__Makefile.rules: No such
>     file or
>     directory
>     make: *** No rule to make target
>     '/home/nicholas/llvm-commit/__Makefile.rules'.  Stop.
>
>     Though honestly I think if I'm going to go through the effort to switch
>     to out of tree builds, I'm going to switch to CMake while I'm at it.
>
>     Finally, it'd be nice to let people know in advance on that this is
>     going to be actively broken, just in case I'm not actually the last
>     person using this configuration. I don't think it needs anything as
>     large as the C++11 transition, just a post to llvm-dev and wait for
>     feedback (screams) no longer than a week?
>
>
> SGTM. Jonathan?
Works for me.

I'll try to fix those docs issues this weekend, and a followup "we're 
planning on breaking this, here's migration instructions", once they've 
been taken care of.

To encourage feedback I could even make in-source builds print out a 
warning that points to the aforementioned message during that time period.


Jon
>
> -eric
>
>     Nick
>
>      >
>      > -eric
>      >
>      >
>      >     Cheers,
>      >
>      >     Jon
>      >      >
>      >      > Nick
>      >      >
>      >      >>
>      >      >> -eric
>      >      >>
>      >      >>
>      >      >> >
>      >      >> > http://reviews.llvm.org/D7961
>      >      >> >
>      >      >> > Modified:
>      >      >> >      llvm/trunk/autoconf/configure. ac
>     <http://configure.ac>
>      >      >> >      llvm/trunk/configure
>      >      >> >
>      >      >> > Modified: llvm/trunk/autoconf/configure. ac
>     <http://configure.ac>
>      >      >> > URL: http://llvm.org/viewvc/llvm-
>     project/llvm/trunk/autoconf/
>      >      >> configure.ac?rev=230812&r1=
>     <http://configure.ac?rev=230812&r1=>
>     <http://configure.ac?rev=__230812&r1=
>     <http://configure.ac?rev=230812&r1=>>
>      >     230811&r2=230812&view=diff
>      >      >>
>      >      >> <http://llvm.org/viewvc/llvm- project/llvm/trunk/autoconf/
>      > configure.ac?rev=230812&r1= <http://configure.ac?rev=230812&r1=>
>     230811&r2=230812&view=diff
>      >
>       <http://llvm.org/viewvc/llvm-__project/llvm/trunk/autoconf/__configure.ac?rev=230812&r1=__230811&r2=230812&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/autoconf/configure.ac?rev=230812&r1=230811&r2=230812&view=diff>>>
>      >      >>
>      >      >> > ==============================
>     ==============================
>      >      >>     ==================
>      >      >> > --- llvm/trunk/autoconf/configure. ac <http://configure.ac>
>      >      >>     (original)
>      >      >> > +++ llvm/trunk/autoconf/configure. ac
>     <http://configure.ac> Fri
>      >      >>     Feb 27 17:35:47 2015
>      >      >> > @@ -73,6 +73,11 @@ if test ${srcdir} != "." ; then
>      >      >> >     fi
>      >      >> >   fi
>      >      >> >
>      >      >> > +dnl Quit if it is an in-source build
>      >      >> > +if test ${srcdir} == "." ; then
>      >      >> > +  AC_MSG_ERROR([In-source builds are discouraged.
>     Configure from
>      >      >>     a separate build directory.])
>      >      >> > +fi
>      >      >> > +
>      >      >> >   dnl Default to empty (i.e. assigning the null string
>     to) CFLAGS
>      >      >>     and CXXFLAGS,
>      >      >> >   dnl instead of the autoconf default (for example, '-g
>     -O2' for
>      >      >>     CC=gcc).
>      >      >> >   : ${CFLAGS=}
>      >      >> >
>      >      >> > Modified: llvm/trunk/configure
>      >      >> > URL: http://llvm.org/viewvc/llvm-
>     project/llvm/trunk/configure?
>      >      >>     rev=230812&r1=230811&r2= 230812&view=diff
>      >      >>
>      >      >> <http://llvm.org/viewvc/llvm- project/llvm/trunk/configure?
>      >     rev=230812&r1=230811&r2= 230812&view=diff
>      >
>       <http://llvm.org/viewvc/llvm-__project/llvm/trunk/configure?__rev=230812&r1=230811&r2=__230812&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/configure?rev=230812&r1=230811&r2=230812&view=diff>>>
>      >      >>
>      >      >> > ==============================
>     ==============================
>      >      >>     ==================
>      >      >> > --- llvm/trunk/configure (original)
>      >      >> > +++ llvm/trunk/configure Fri Feb 27 17:35:47 2015
>      >      >> > @@ -1999,6 +1999,12 @@ echo "$as_me: error: Already
>     configured
>      >      >> >     fi
>      >      >> >   fi
>      >      >> >
>      >      >> > +if test ${srcdir} == "." ; then
>      >      >> > +  { { echo "$as_me:$LINENO: error: In-source builds are
>      >      >>     discouraged. Configure from a separate build
>     directory.">&5
>      >      >> > +echo "$as_me: error: In-source builds are discouraged.
>     Configure
>      >      >>     from a separate build directory.">&2;}
>      >      >> > +   { (exit 1); exit 1; }; }
>      >      >> > +fi
>      >      >> > +
>      >      >> >   : ${CFLAGS=}
>      >      >> >   : ${CXXFLAGS=}
>      >      >> >
>      >      >> >
>      >      >> >
>      >      >> > ______________________________ _________________
>      >      >> > llvm-commits mailing list
>      >      >> > llvm-commits at cs.uiuc.edu
>     <mailto:llvm-commits at cs.uiuc.edu> <mailto:llvm-commits at cs.uiuc.__edu
>     <mailto:llvm-commits at cs.uiuc.edu>>
>      >     <mailto:llvm-commits at cs.uiuc <mailto:llvm-commits at cs.uiuc>.
>     edu <mailto:llvm-commits at cs.uiuc.__edu
>     <mailto:llvm-commits at cs.uiuc.edu>>>
>      >      >> > http://lists.cs.uiuc.edu/ mailman/listinfo/llvm-commits
>      >      >> <http://lists.cs.uiuc.edu/ mailman/listinfo/llvm-commits
>      >     <http://lists.cs.uiuc.edu/__mailman/listinfo/llvm-commits
>     <http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits>>__>
>      >      >> >
>      >      >>
>      >      >
>      >
>      >     --
>      >     Jon Roelofs
>      > jonathan at codesourcery.com <mailto:jonathan at codesourcery.com>
>     <mailto:jonathan at codesourcery.__com <mailto:jonathan at codesourcery.com>>
>      >     CodeSourcery / Mentor Embedded
>      >
>

-- 
Jon Roelofs
jonathan at codesourcery.com
CodeSourcery / Mentor Embedded



More information about the llvm-commits mailing list