aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.global.in1
-rw-r--r--src/pl/plperl/GNUmakefile6
-rw-r--r--src/pl/plperl/plperl.c28
-rw-r--r--src/tools/msvc/Mkvcbuild.pm21
4 files changed, 43 insertions, 13 deletions
diff --git a/src/Makefile.global.in b/src/Makefile.global.in
index b4c38e2f82d..e92b395376b 100644
--- a/src/Makefile.global.in
+++ b/src/Makefile.global.in
@@ -298,6 +298,7 @@ endif
perl_archlibexp = @perl_archlibexp@
perl_privlibexp = @perl_privlibexp@
perl_useshrplib = @perl_useshrplib@
+perl_embed_ccflags = @perl_embed_ccflags@
perl_embed_ldflags = @perl_embed_ldflags@
# Miscellaneous
diff --git a/src/pl/plperl/GNUmakefile b/src/pl/plperl/GNUmakefile
index 1e800a344c8..993b8f65558 100644
--- a/src/pl/plperl/GNUmakefile
+++ b/src/pl/plperl/GNUmakefile
@@ -22,7 +22,11 @@ override CPPFLAGS += -DPLPERL_HAVE_UID_GID
override CFLAGS += -Wno-comment
endif
-override CPPFLAGS := -I. -I$(srcdir) $(CPPFLAGS) -I$(perl_archlibexp)/CORE
+# Note: we need to make sure that the CORE directory is included last,
+# probably because it sometimes contains some header files with names
+# that clash with some of ours, or with some that we include, notably on
+# Windows.
+override CPPFLAGS := -I. -I$(srcdir) $(CPPFLAGS) $(perl_embed_ccflags) -I$(perl_archlibexp)/CORE
rpathdir = $(perl_archlibexp)/CORE
diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c
index ca85eb93afd..56d117bc96e 100644
--- a/src/pl/plperl/plperl.c
+++ b/src/pl/plperl/plperl.c
@@ -3176,12 +3176,18 @@ plperl_return_next_internal(SV *sv)
/*
* This is the first call to return_next in the current PL/Perl
- * function call, so memoize some lookups
+ * function call, so identify the output tuple descriptor and create a
+ * tuplestore to hold the result rows.
*/
if (prodesc->fn_retistuple)
(void) get_call_result_type(fcinfo, NULL, &tupdesc);
else
+ {
tupdesc = rsi->expectedDesc;
+ /* Protect assumption below that we return exactly one column */
+ if (tupdesc == NULL || tupdesc->natts != 1)
+ elog(ERROR, "expected single-column result descriptor for non-composite SETOF result");
+ }
/*
* Make sure the tuple_store and ret_tdesc are sufficiently
@@ -3231,20 +3237,20 @@ plperl_return_next_internal(SV *sv)
}
else
{
- Datum ret;
- bool isNull;
+ Datum ret[1];
+ bool isNull[1];
- ret = plperl_sv_to_datum(sv,
- prodesc->result_oid,
- -1,
- fcinfo,
- &prodesc->result_in_func,
- prodesc->result_typioparam,
- &isNull);
+ ret[0] = plperl_sv_to_datum(sv,
+ prodesc->result_oid,
+ -1,
+ fcinfo,
+ &prodesc->result_in_func,
+ prodesc->result_typioparam,
+ &isNull[0]);
tuplestore_putvalues(current_call_data->tuple_store,
current_call_data->ret_tdesc,
- &ret, &isNull);
+ ret, isNull);
}
MemoryContextSwitchTo(old_cxt);
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index ca317df98e5..d7b64a4046e 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -140,7 +140,26 @@ sub mkvcbuild
my $plperl =
$solution->AddProject('plperl', 'dll', 'PLs', 'src\pl\plperl');
$plperl->AddIncludeDir($solution->{options}->{perl} . '/lib/CORE');
- $plperl->AddDefine('PLPERL_HAVE_UID_GID');
+
+ # Add defines from Perl's ccflags; see PGAC_CHECK_PERL_EMBED_CCFLAGS
+ my @perl_embed_ccflags;
+ foreach my $f (split(" ",$Config{ccflags}))
+ {
+ if ($f =~ /^-D[^_]/)
+ {
+ $f =~ s/\-D//;
+ push(@perl_embed_ccflags, $f);
+ }
+ }
+
+ # XXX this probably is redundant now?
+ push(@perl_embed_ccflags, 'PLPERL_HAVE_UID_GID');
+
+ foreach my $f (@perl_embed_ccflags)
+ {
+ $plperl->AddDefine($f);
+ }
+
foreach my $xs ('SPI.xs', 'Util.xs')
{
(my $xsc = $xs) =~ s/\.xs/.c/;