changes in pgport etc doesn't cause client programs to be relinked

Поиск
Список
Период
Сортировка
От Andres Freund
Тема changes in pgport etc doesn't cause client programs to be relinked
Дата
Msg-id 20211026180454.xcjmu3kwmn3tka57@alap3.anarazel.de
обсуждение исходный текст
Ответы Re: changes in pgport etc doesn't cause client programs to be relinked  (Andres Freund <andres@anarazel.de>)
Список 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 $@$(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



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Andrew Dunstan
Дата:
Сообщение: Re: pg_dump versus ancient server versions
Следующее
От: Arjan van de Ven
Дата:
Сообщение: Re: src/port/snprintf.c: Optimize the common base=10 case in fmtint