Re: pg_preadv() and pg_pwritev()
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Sergey Shinderuk <s.shinderuk@postgrespro.ru>
Cc: Thomas Munro <thomas.munro@gmail.com>,
pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2021-01-15T01:45:06Z
Lists: pgsql-hackers
Attachments
- fix-sysroot-selection.patch (text/x-diff) patch
Sergey Shinderuk <s.shinderuk@postgrespro.ru> writes: > On 15.01.2021 01:13, Tom Lane wrote: >> Also, after re-reading [1] I am not at all excited about trying to >> remove the -isysroot switches from our *FLAGS. What I propose to do >> is keep that, but improve our mechanism for choosing a default value >> for PG_SYSROOT. It looks like first trying "xcrun --show-sdk-path", >> and falling back to "xcodebuild -version -sdk macosx Path" if that >> doesn't yield a valid path, is more likely to give a working build >> than relying entirely on xcodebuild. Maybe there's a case for trying >> "xcrun --sdk macosx --show-sdk-path" in between; in my tests that >> seemed noticeably faster than invoking xcodebuild, and I've not yet >> seen a case where it gave a different answer. > I spent quite some time trying to understand / reverse engineer the > logic behind xcrun's default SDK selection. Yeah, I wasted a fair amount of time on that too, going so far as to ktrace xcrun (as I gather you did too). I'm not any more enlightened than you are about exactly how it's making the choice. > Oh, that's weird! Nevertheless I like you suggestion to call "xcrun" > from "configure". Anyway, after re-reading the previous thread, something I like about the current behavior is that it tends to produce a version-numbered sysroot path, ie something ending in "MacOSX11.1.sdk" or whatever. One of the hazards we're trying to avoid is some parts of a PG installation being built against one SDK version while other parts are built against another. The typical behavior of "xcrun --show-sdk-path" seems to be to produce a path ending in "MacOSX.sdk", which defeats that. So I think we should accept the path only if it contains a version number, and otherwise move on to the other probe commands. Hence, I propose the attached. This works as far as I can tell to fix the problem you're seeing. regards, tom lane
Commits
-
Improve our heuristic for selecting PG_SYSROOT on macOS.
- 3934543c2bb0 9.5.25 landed
- fc6d08b27a33 9.6.21 landed
- 5fa060c8f593 10.16 landed
- 046c8facecee 11.11 landed
- f5d044eaeff0 12.6 landed
- f44ae4db5fec 13.2 landed
- 4823621db312 14.0 landed
-
Move our p{read,write}v replacements into their own files.
- 0d56acfbaa79 14.0 landed
-
Don't use elog() in src/port/pwrite.c.
- df10ac625c16 14.0 landed
-
Use vectored I/O to fill new WAL segments.
- ce6a71fa5300 14.0 landed
-
Provide pg_preadv() and pg_pwritev().
- 13a021f3e8c9 14.0 landed