From: | Andres Freund <andres(at)anarazel(dot)de> |
---|---|
To: | pgsql-hackers(at)postgresql(dot)org |
Subject: | changes in pgport etc doesn't cause client programs to be relinked |
Date: | 2021-10-26 18:04:54 |
Message-ID: | 20211026180454.xcjmu3kwmn3tka57@alap3.anarazel.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi,
our make dependencies currently are insufficient to trigger client binaries to
be relinked when pgport/pgcommon/libpq/... changes.
To reproduce, you can use something like:
touch ~/src/postgresql/src/port/snprintf.c && make -j48 2>&1|grep 'gcc.*pgbench'
which won't show anything, whereas e.g.
touch ~/src/postgresql/src/include/postgres_fe.h && make -j48 2>&1|grep 'gcc.*pgbench'
will.
The reason for that is that currently client programs only have order-only
dependencies on pgport:
pgbench: $(OBJS) | submake-libpq submake-libpgport submake-libpgfeutils
$(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $(at)$(X)
which will dutifully cause pgport to be rebuilt. But then we won't actually
rebuild $client_program, because it's just an order-only dependency [1].
The same problem does *not* exist for the backend, because there we add
pgport/pgcommon to OBJS, which will cause them to be proper dependencies.
This does explain some mysterious issues I had over the years with changes
occasionally requiring a clean/build cycle to fully take. It's especially
confusing because after a build cycle one ends up with a build partially using
the old and partially the new libraries.
I unfortunately don't see a localized fix for this. Afaict we'd need to change
all client build rules to also have a dependency on the library?
Greetings,
Andres Freund
[1] https://www.gnu.org/software/make/manual/html_node/Prerequisite-Types.html
From | Date | Subject | |
---|---|---|---|
Next Message | Arjan van de Ven | 2021-10-26 18:13:14 | Re: src/port/snprintf.c: Optimize the common base=10 case in fmtint |
Previous Message | Andrew Dunstan | 2021-10-26 17:59:34 | Re: pg_dump versus ancient server versions |