Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit c4a2ffe

Browse files
committed
Provide DLLEXPORT markers for C functions via PG_FUNCTION_INFO_V1 macro.
This isn't really necessary for our own code, because we use a .DEF file in MSVC builds (see gendef.pl), or --export-all-symbols in MinGW and Cygwin builds, to ensure that all global symbols in loadable modules will be exported on Windows. However, third-party authors might use different build processes that need this marker, and it's harmless enough for our own builds. To some extent, this is an oversight in commit e7128e8, so back-patch to 9.4 where that was added. Laurenz Albe Discussion: <A737B7A37273E048B164557ADEF4A58B539300BD@ntex2010a.host.magwien.gv.at>
1 parent 3ccc153 commit c4a2ffe

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

src/include/fmgr.h

+9-3
Original file line numberDiff line numberDiff line change
@@ -344,11 +344,17 @@ typedef const Pg_finfo_record *(*PGFInfoFunction) (void);
344344

345345
/*
346346
* Macro to build an info function associated with the given function name.
347-
* Win32 loadable functions usually link with 'dlltool --export-all', but it
348-
* doesn't hurt to add PGDLLIMPORT in case they don't.
347+
*
348+
* As a convenience, also provide an "extern" declaration for the given
349+
* function name, so that writers of C functions need not write that too.
350+
*
351+
* On Windows, the function and info function must be exported. Our normal
352+
* build processes take care of that via .DEF files or --export-all-symbols.
353+
* We add PGDLLEXPORT nonetheless so that C functions built with a
354+
* different build process are guaranteed to be exported.
349355
*/
350356
#define PG_FUNCTION_INFO_V1(funcname) \
351-
Datum funcname(PG_FUNCTION_ARGS); \
357+
extern PGDLLEXPORT Datum funcname(PG_FUNCTION_ARGS); \
352358
extern PGDLLEXPORT const Pg_finfo_record * CppConcat(pg_finfo_,funcname)(void); \
353359
const Pg_finfo_record * \
354360
CppConcat(pg_finfo_,funcname) (void) \

0 commit comments

Comments
 (0)