Thread: pgsql/src/backend/parser (Makefile)

pgsql/src/backend/parser (Makefile)

From
Thomas Lockhart
Date:
  Date: Friday, July 14, 2000 @ 11:32:04
Author: thomas

Update of /home/projects/pgsql/cvsroot/pgsql/src/backend/parser
     from hub.org:/home/projects/pgsql/developers/thomas/CURRENT/pgsql/src/backend/parser

Modified Files:
    Makefile

-----------------------------  Log Message  -----------------------------

Include rule to build include/parser/parse.h since nothing else can
 build in this directory otherwise :(


Re: pgsql/src/backend/parser (Makefile)

From
Peter Eisentraut
Date:
Thomas Lockhart writes:

> Update of /home/projects/pgsql/cvsroot/pgsql/src/backend/parser
>      from hub.org:/home/projects/pgsql/developers/thomas/CURRENT/pgsql/src/backend/parser
>
> Modified Files:
>     Makefile

> Include rule to build include/parser/parse.h since nothing else can
>  build in this directory otherwise :(

Actually, this is not quite correct because include/parser/parse.h should
be a symlink to, not a copy of, the original file.  I don't quite
understand either.  If you make all in the backend tree then the
include/parser/parse.h should always be up to date with the
backend/parser/parse.h version.  Or do you build backend/parser before
*anything* else?


--
Peter Eisentraut                  Sernanders väg 10:115
peter_e@gmx.net                   75262 Uppsala
http://yi.org/peter-e/            Sweden


Re: pgsql/src/backend/parser (Makefile)

From
Tom Lane
Date:
Peter Eisentraut <peter_e@gmx.net> writes:
> Actually, this is not quite correct because include/parser/parse.h should
> be a symlink to, not a copy of, the original file.  I don't quite
> understand either.  If you make all in the backend tree then the
> include/parser/parse.h should always be up to date with the
> backend/parser/parse.h version.  Or do you build backend/parser before
> *anything* else?

No, he wants to be able to edit gram.y (changing parse.h) and other
files (using parse.h) in parser, then do a "make" in that directory to
see if it compiles.  As things were, he had to start the make at backend
top level just to see if the parser compiles, because there was no other
way to get include/parser/parse.h up to date.  But you might be right
that a symlink would be a better answer.

            regards, tom lane

Re: pgsql/src/backend/parser (Makefile)

From
Thomas Lockhart
Date:
> > Actually, this is not quite correct because include/parser/parse.h should
> > be a symlink to, not a copy of, the original file.  I don't quite
> > understand either.  If you make all in the backend tree then the
> > include/parser/parse.h should always be up to date with the
> > backend/parser/parse.h version.  Or do you build backend/parser before
> > *anything* else?
> No, he wants to be able to edit gram.y (changing parse.h) and other
> files (using parse.h) in parser, then do a "make" in that directory to
> see if it compiles.  As things were, he had to start the make at backend
> top level just to see if the parser compiles, because there was no other
> way to get include/parser/parse.h up to date.  But you might be right
> that a symlink would be a better answer.

Yup, that's the scenario. Another possibility would be to use more "-I"
arguments during compilation, then flattening the directory structure in
the #include statements. Then a "-I." would let me build locally.

afaik we rely on file copying rather than simlinks everywhere else, but
if that isn't the case then a simlink here would be just fine.

                - Thomas

Re: pgsql/src/backend/parser (Makefile)

From
Peter Eisentraut
Date:
Tom Lane writes:

> No, he wants to be able to edit gram.y (changing parse.h) and other
> files (using parse.h) in parser, then do a "make" in that directory to
> see if it compiles.  As things were, he had to start the make at backend
> top level just to see if the parser compiles, because there was no other
> way to get include/parser/parse.h up to date.  But you might be right
> that a symlink would be a better answer.

Some of the files in backend/parser include fmgroids.h, so in order to
build anything there you have to build the backend at least once before
you start fiddling with the parser. Once you have done that there will be
a symlink from backend/parser/parse.h to include/parser/parse.h, so
whatever you recompile backend/parser locally the changes to parse.h get
propagated automatically.

The only thing this change would work around is if you do

- fresh source
- configure
- cd src/backend/parser
- make

but that won't work anyway, as I mentioned.


--
Peter Eisentraut                  Sernanders väg 10:115
peter_e@gmx.net                   75262 Uppsala
http://yi.org/peter-e/            Sweden


Re: pgsql/src/backend/parser (Makefile)

From
Tom Lane
Date:
Peter Eisentraut <peter_e@gmx.net> writes:
> Some of the files in backend/parser include fmgroids.h, so in order to
> build anything there you have to build the backend at least once before
> you start fiddling with the parser.

Right.

> Once you have done that there will be
> a symlink from backend/parser/parse.h to include/parser/parse.h, so
> whatever you recompile backend/parser locally the changes to parse.h get
> propagated automatically.

Was it a symlink already?  I thought I recalled it being a hard link or
a copy.

There might also be a dependency issue, ie does make realize that
updating backend/parser/parse.h means it has to recompile files
that are shown as depending on include/parser/parse.h.  Offhand it
seems that this will fail to work unless backend/parser/Makefile
has a rule that makes the latter dependent on the former.

            regards, tom lane

Re: pgsql/src/backend/parser (Makefile)

From
Peter Eisentraut
Date:
Tom Lane writes:

> Was it a symlink already?  I thought I recalled it being a hard link or
> a copy.

We're moving ahead fast. :)

> There might also be a dependency issue, ie does make realize that
> updating backend/parser/parse.h means it has to recompile files
> that are shown as depending on include/parser/parse.h.

It seems to be a stat() vs lstat() issue; the symlink is automatically
up-to-date because when make inspects it it will find the timestamp of the
underlying file. So the answer to your question seems to be yes.


$ ls
Makefile
$ cat Makefile
first: second
        touch $@

second: third
        ln -s $< $@
$ touch third
$ make
ln -s third second
touch first
$ touch third
$ make
touch first


--
Peter Eisentraut                  Sernanders väg 10:115
peter_e@gmx.net                   75262 Uppsala
http://yi.org/peter-e/            Sweden


Re: pgsql/src/backend/parser (Makefile)

From
Tom Lane
Date:
Peter Eisentraut <peter_e@gmx.net> writes:
> Tom Lane writes:
>> There might also be a dependency issue, ie does make realize that
>> updating backend/parser/parse.h means it has to recompile files
>> that are shown as depending on include/parser/parse.h.

> It seems to be a stat() vs lstat() issue; the symlink is automatically
> up-to-date because when make inspects it it will find the timestamp of the
> underlying file. So the answer to your question seems to be yes.

Your example misses the point though, because the symlink can be seen to
be out of date when Make starts up.  If make runs a rule to update
backend/parser/parse.h, will it know *in the same run* that this implies
running rules that are dependent on include/parser/parse.h, or will it
already have decided it does not have to run those rules?  Seems
particularly dangerous in a parallel-make situation.

            regards, tom lane