Re: narwhal and PGDLLIMPORT
Andres Freund <andres@2ndquadrant.com>
From: Andres Freund <andres@2ndquadrant.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Marco Atzeri <marco.atzeri@gmail.com>, pgsql-hackers@postgresql.org
Date: 2014-02-15T15:30:29Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
MinGW: Link with shell32.dll instead of shfolder.dll.
- 53566fc0940c 9.5.0 cited
-
Centralize getopt-related declarations in a new header file pg_getopt.h.
- 60ff2fdd9970 9.4.0 cited
-
Get rid of use of dlltool in Mingw builds.
- 846e91e0223c 9.4.0 cited
-
Export a few more symbols required for test_shm_mq module.
- 7d7eee8bb702 9.4.0 cited
-
Export set_latch_on_sigusr1 symbol for Windows.
- 708c529c7fde 9.4.0 cited
-
Use SHGetFolderPath instead of SHGetSpecialFolderPath to find the
- 889f03812916 8.1.0 cited
On 2014-02-15 10:16:50 -0500, Tom Lane wrote: > Andres Freund <andres@2ndquadrant.com> writes: > > On 2014-02-12 14:11:10 -0500, Tom Lane wrote: > >> Marco Atzeri <marco.atzeri@gmail.com> writes: > >>> from /usr/include/getopt.h > >>> extern char __declspec(dllimport) *optarg; /* argument associated > >>> with option */ > > >> Hm. All of our files that use getopt also do > >> extern char *optarg; > > > So, now that brolga is revived, this unsurprisingly causes breakage > > there after the --disable-auto-export change. ISTM the easiest way to > > deal with this is to just adorn all those with a PGDLLIMPORT? > > Uh, no, because that's backwards: we'd need the __declspec(dllimport) > in the backend code. Yuck, it's even uglier than that. On normal windows it's not actually the platform's getopt() that ends up getting really used, but the one from port/... # mingw has adopted a GNU-centric interpretation of optind/optreset, # so always use our version on Windows. if test "$PORTNAME" = "win32"; then AC_LIBOBJ(getopt) AC_LIBOBJ(getopt_long) fi > The best thing probably is not to have the duplicate declarations on > platforms that don't need 'em. Unfortunately, I seem to recall that > the current coding was arrived at to forestall link problems on weird > platforms that *had* these symbols declared and yet we needed externs > anyway. We might have to do something as ugly as "#ifndef CYGWIN". Hm, according to a quick blame, they are there unconditionally since at least 2000 (c.f. a70e74b06 moving them around). So it very well might be that that reasoning isn't current anymore. One ugly thing to do is to fall back to the port implementation of getopt on cygwin as well... That'd still have the warning parade tho. Greetings, Andres Freund -- Andres Freund http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services