-
-
Notifications
You must be signed in to change notification settings - Fork 13.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
postgresql: improve fake pg_config in default output
This fixes some build systems which look up the location of pg_config via the location of the postgres binary itself, e.g. timescaledb, instead of calling pg_config which is on PATH. Since the -dev output is correctly placed before the default output of postgresql in PATH, we can rely on that and call "pg_config" from the default output's fake script. Only do that, when the one on PATH is actually a different file, though, to prevent infinite loops. Resolves #341408
- Loading branch information
1 parent
eb709dd
commit 9761c71
Showing
2 changed files
with
40 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
# The real pg_config needs to be in the same path as the "postgres" binary | ||
# to return proper paths. However, we want it in the -dev output to prevent | ||
# cyclic references and to prevent blowing up the runtime closure. Thus, we | ||
# have wrapped -dev/bin/pg_config to fake its argv0 to be in the default | ||
# output. Unfortunately, pg_config tries to be smart and tries to find itself - | ||
# which will then fail with: | ||
# pg_config: could not find own program executable | ||
# To counter this, we're creating *this* fake pg_config script and put it into | ||
# the default output. The real pg_config is happy. | ||
# Some extensions, e.g. timescaledb, use the reverse logic and look for pg_config | ||
# in the same path as the "postgres" binary to support multi-version-installs. | ||
# Thus, they will end up calling this script during build, even though the real | ||
# pg_config would be available on PATH, provided by nativeBuildInputs. To help | ||
# this case, we're checking whether *this* script is the same as the one available | ||
# in PATH, and if not we're redirecting the call there. | ||
# If this script is called directly, we can't do anything except to error out. | ||
|
||
# compares "path of *this* script" with "path of pg_config on PATH" | ||
if [[ "$(readlink -f -- "$0")" != "$(readlink -f -- "$(type -P pg_config)")" ]]; then | ||
# There is a different pg_config in PATH, let's call this instead. | ||
# This happens when the -dev output has been put in native build | ||
# inputs and allows us to call the real pg_config without referencing | ||
# the -dev output itself. | ||
pg_config "$@" | ||
else | ||
# This will happen if either *this* script is the first on PATH or if there was | ||
# no pg_config on PATH at all. | ||
echo The real pg_config can be found in the -dev output. | ||
exit 1 | ||
fi |