fixed some build glitches

This commit is contained in:
hyung-hwan 2012-11-01 07:22:15 +00:00
parent 3b9f0ab14e
commit b062a1fd30
8 changed files with 21 additions and 381 deletions

View File

@ -4,7 +4,7 @@ AM_CPPFLAGS = \
-I$(top_builddir)/include \ -I$(top_builddir)/include \
-I$(top_srcdir)/include \ -I$(top_srcdir)/include \
-I$(includedir) \ -I$(includedir) \
-DDEFAULT_MODDIR=\"$(libdir)/qse\" -DDEFAULT_MODDIR=\"$(libdir)/qse\" $(LTDLINCL)
#####################################################################3 #####################################################################3
@ -12,7 +12,7 @@ bin_PROGRAMS = qseawk
qseawk_SOURCES = awk.c qseawk_SOURCES = awk.c
qseawk_LDFLAGS = -L../../lib/awk -L../../lib/cmn -L$(libdir) qseawk_LDFLAGS = -L../../lib/awk -L../../lib/cmn -L$(libdir)
qseawk_LDADD = -lqseawk -lqsecmn $(LIBM) qseawk_LDADD = -lqseawk -lqsecmn $(LIBM) $(LIBLTDL)
if WIN32 if WIN32
if WCHAR if WCHAR

View File

@ -57,7 +57,8 @@ am_qseawk_OBJECTS = awk.$(OBJEXT)
qseawk_OBJECTS = $(am_qseawk_OBJECTS) qseawk_OBJECTS = $(am_qseawk_OBJECTS)
am__DEPENDENCIES_1 = am__DEPENDENCIES_1 =
@WCHAR_TRUE@@WIN32_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) @WCHAR_TRUE@@WIN32_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
qseawk_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) qseawk_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_2)
qseawk_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ qseawk_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(qseawk_LDFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(qseawk_LDFLAGS) \
$(LDFLAGS) -o $@ $(LDFLAGS) -o $@
@ -255,11 +256,11 @@ AM_CPPFLAGS = \
-I$(top_builddir)/include \ -I$(top_builddir)/include \
-I$(top_srcdir)/include \ -I$(top_srcdir)/include \
-I$(includedir) \ -I$(includedir) \
-DDEFAULT_MODDIR=\"$(libdir)/qse\" -DDEFAULT_MODDIR=\"$(libdir)/qse\" $(LTDLINCL)
qseawk_SOURCES = awk.c qseawk_SOURCES = awk.c
qseawk_LDFLAGS = -L../../lib/awk -L../../lib/cmn -L$(libdir) qseawk_LDFLAGS = -L../../lib/awk -L../../lib/cmn -L$(libdir)
qseawk_LDADD = -lqseawk -lqsecmn $(LIBM) $(am__append_1) qseawk_LDADD = -lqseawk -lqsecmn $(LIBM) $(LIBLTDL) $(am__append_1)
all: all-am all: all-am
.SUFFIXES: .SUFFIXES:

View File

@ -15,13 +15,6 @@ if ENABLE_CXX
lib_LTLIBRARIES += libqseawkxx.la lib_LTLIBRARIES += libqseawkxx.la
libqseawkxx_la_SOURCES = Awk.cpp StdAwk.cpp libqseawkxx_la_SOURCES = Awk.cpp StdAwk.cpp
libqseawkxx_la_LDFLAGS = -L. -L../cmn -L$(libdir) -version-info 1:0:0 -no-undefined libqseawkxx_la_LDFLAGS = -L. -L../cmn -L$(libdir) -version-info 1:0:0 -no-undefined
libqseawkxx_la_LIBADD = -lqseawk -lqsecmn $(LIBM) libqseawkxx_la_LIBADD = -lqseawk -lqsecmn $(LIBM) $(LIBLTDL)
endif endif
if HAVE_C_MPI
lib_LTLIBRARIES += libqseawkmp.la
libqseawkmp_la_CPPFLAGS = $(AM_CPPFLAGS) $(MPI_CFLAGS)
libqseawkmp_la_SOURCES = mpi.c
libqseawkmp_la_LDFLAGS = -L. -L../cmn -L$(libdir) -version-info 1:0:0 -no-undefined $(MPI_CLDFLAGS)
libqseawkmp_la_LIBADD = -lqseawk -lqsecmn $(LIBM)
endif

View File

@ -35,7 +35,6 @@ POST_UNINSTALL = :
build_triplet = @build@ build_triplet = @build@
host_triplet = @host@ host_triplet = @host@
@ENABLE_CXX_TRUE@am__append_1 = libqseawkxx.la @ENABLE_CXX_TRUE@am__append_1 = libqseawkxx.la
@HAVE_C_MPI_TRUE@am__append_2 = libqseawkmp.la
subdir = lib/awk subdir = lib/awk
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@ -89,15 +88,8 @@ libqseawk_la_OBJECTS = $(am_libqseawk_la_OBJECTS)
libqseawk_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ libqseawk_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(libqseawk_la_LDFLAGS) $(LDFLAGS) -o $@ $(libqseawk_la_LDFLAGS) $(LDFLAGS) -o $@
@HAVE_C_MPI_TRUE@libqseawkmp_la_DEPENDENCIES = $(am__DEPENDENCIES_1) @ENABLE_CXX_TRUE@libqseawkxx_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
am__libqseawkmp_la_SOURCES_DIST = mpi.c @ENABLE_CXX_TRUE@ $(am__DEPENDENCIES_1)
@HAVE_C_MPI_TRUE@am_libqseawkmp_la_OBJECTS = libqseawkmp_la-mpi.lo
libqseawkmp_la_OBJECTS = $(am_libqseawkmp_la_OBJECTS)
libqseawkmp_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(libqseawkmp_la_LDFLAGS) $(LDFLAGS) -o $@
@HAVE_C_MPI_TRUE@am_libqseawkmp_la_rpath = -rpath $(libdir)
@ENABLE_CXX_TRUE@libqseawkxx_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__libqseawkxx_la_SOURCES_DIST = Awk.cpp StdAwk.cpp am__libqseawkxx_la_SOURCES_DIST = Awk.cpp StdAwk.cpp
@ENABLE_CXX_TRUE@am_libqseawkxx_la_OBJECTS = Awk.lo StdAwk.lo @ENABLE_CXX_TRUE@am_libqseawkxx_la_OBJECTS = Awk.lo StdAwk.lo
libqseawkxx_la_OBJECTS = $(am_libqseawkxx_la_OBJECTS) libqseawkxx_la_OBJECTS = $(am_libqseawkxx_la_OBJECTS)
@ -127,10 +119,8 @@ CXXLD = $(CXX)
CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@ $(LDFLAGS) -o $@
SOURCES = $(libqseawk_la_SOURCES) $(libqseawkmp_la_SOURCES) \ SOURCES = $(libqseawk_la_SOURCES) $(libqseawkxx_la_SOURCES)
$(libqseawkxx_la_SOURCES)
DIST_SOURCES = $(libqseawk_la_SOURCES) \ DIST_SOURCES = $(libqseawk_la_SOURCES) \
$(am__libqseawkmp_la_SOURCES_DIST) \
$(am__libqseawkxx_la_SOURCES_DIST) $(am__libqseawkxx_la_SOURCES_DIST)
ETAGS = etags ETAGS = etags
CTAGS = ctags CTAGS = ctags
@ -313,17 +303,13 @@ AM_CPPFLAGS = \
-I$(includedir) \ -I$(includedir) \
-DDEFAULT_MODDIR=\"$(libdir)/qse\" $(LTDLINCL) -DDEFAULT_MODDIR=\"$(libdir)/qse\" $(LTDLINCL)
lib_LTLIBRARIES = libqseawk.la $(am__append_1) $(am__append_2) lib_LTLIBRARIES = libqseawk.la $(am__append_1)
libqseawk_la_SOURCES = awk.c err.c tree.c parse.c run.c rec.c val.c fnc.c misc.c rio.c std.c awk.h err.h rio.h val.h fnc.h misc.h parse.h run.h tree.h libqseawk_la_SOURCES = awk.c err.c tree.c parse.c run.c rec.c val.c fnc.c misc.c rio.c std.c awk.h err.h rio.h val.h fnc.h misc.h parse.h run.h tree.h
libqseawk_la_LDFLAGS = -L../cmn -L$(libdir) -version-info 1:0:0 -no-undefined libqseawk_la_LDFLAGS = -L../cmn -L$(libdir) -version-info 1:0:0 -no-undefined
libqseawk_la_LIBADD = -lqsecmn $(LIBM) $(LIBLTDL) libqseawk_la_LIBADD = -lqsecmn $(LIBM) $(LIBLTDL)
@ENABLE_CXX_TRUE@libqseawkxx_la_SOURCES = Awk.cpp StdAwk.cpp @ENABLE_CXX_TRUE@libqseawkxx_la_SOURCES = Awk.cpp StdAwk.cpp
@ENABLE_CXX_TRUE@libqseawkxx_la_LDFLAGS = -L. -L../cmn -L$(libdir) -version-info 1:0:0 -no-undefined @ENABLE_CXX_TRUE@libqseawkxx_la_LDFLAGS = -L. -L../cmn -L$(libdir) -version-info 1:0:0 -no-undefined
@ENABLE_CXX_TRUE@libqseawkxx_la_LIBADD = -lqseawk -lqsecmn $(LIBM) @ENABLE_CXX_TRUE@libqseawkxx_la_LIBADD = -lqseawk -lqsecmn $(LIBM) $(LIBLTDL)
@HAVE_C_MPI_TRUE@libqseawkmp_la_CPPFLAGS = $(AM_CPPFLAGS) $(MPI_CFLAGS)
@HAVE_C_MPI_TRUE@libqseawkmp_la_SOURCES = mpi.c
@HAVE_C_MPI_TRUE@libqseawkmp_la_LDFLAGS = -L. -L../cmn -L$(libdir) -version-info 1:0:0 -no-undefined $(MPI_CLDFLAGS)
@HAVE_C_MPI_TRUE@libqseawkmp_la_LIBADD = -lqseawk -lqsecmn $(LIBM)
all: all-am all: all-am
.SUFFIXES: .SUFFIXES:
@ -391,8 +377,6 @@ clean-libLTLIBRARIES:
done done
libqseawk.la: $(libqseawk_la_OBJECTS) $(libqseawk_la_DEPENDENCIES) $(EXTRA_libqseawk_la_DEPENDENCIES) libqseawk.la: $(libqseawk_la_OBJECTS) $(libqseawk_la_DEPENDENCIES) $(EXTRA_libqseawk_la_DEPENDENCIES)
$(libqseawk_la_LINK) -rpath $(libdir) $(libqseawk_la_OBJECTS) $(libqseawk_la_LIBADD) $(LIBS) $(libqseawk_la_LINK) -rpath $(libdir) $(libqseawk_la_OBJECTS) $(libqseawk_la_LIBADD) $(LIBS)
libqseawkmp.la: $(libqseawkmp_la_OBJECTS) $(libqseawkmp_la_DEPENDENCIES) $(EXTRA_libqseawkmp_la_DEPENDENCIES)
$(libqseawkmp_la_LINK) $(am_libqseawkmp_la_rpath) $(libqseawkmp_la_OBJECTS) $(libqseawkmp_la_LIBADD) $(LIBS)
libqseawkxx.la: $(libqseawkxx_la_OBJECTS) $(libqseawkxx_la_DEPENDENCIES) $(EXTRA_libqseawkxx_la_DEPENDENCIES) libqseawkxx.la: $(libqseawkxx_la_OBJECTS) $(libqseawkxx_la_DEPENDENCIES) $(EXTRA_libqseawkxx_la_DEPENDENCIES)
$(libqseawkxx_la_LINK) $(am_libqseawkxx_la_rpath) $(libqseawkxx_la_OBJECTS) $(libqseawkxx_la_LIBADD) $(LIBS) $(libqseawkxx_la_LINK) $(am_libqseawkxx_la_rpath) $(libqseawkxx_la_OBJECTS) $(libqseawkxx_la_LIBADD) $(LIBS)
@ -407,7 +391,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/awk.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/awk.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/err.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/err.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnc.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqseawkmp_la-mpi.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec.Plo@am__quote@
@ -438,13 +421,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
libqseawkmp_la-mpi.lo: mpi.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseawkmp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libqseawkmp_la-mpi.lo -MD -MP -MF $(DEPDIR)/libqseawkmp_la-mpi.Tpo -c -o libqseawkmp_la-mpi.lo `test -f 'mpi.c' || echo '$(srcdir)/'`mpi.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libqseawkmp_la-mpi.Tpo $(DEPDIR)/libqseawkmp_la-mpi.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mpi.c' object='libqseawkmp_la-mpi.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseawkmp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libqseawkmp_la-mpi.lo `test -f 'mpi.c' || echo '$(srcdir)/'`mpi.c
.cpp.o: .cpp.o:
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po

View File

@ -1,337 +0,0 @@
/*
* $Id$
*
Copyright 2006-2012 Chung, Hyung-Hwan.
This file is part of QSE.
QSE is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation, either version 3 of
the License, or (at your option) any later version.
QSE is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with QSE. If not, see <http://www.gnu.org/licenses/>.
*/
#include <qse/awk/mpi.h>
#include <qse/cmn/mbwc.h>
#include "../cmn/mem.h"
#include <mpi.h>
typedef struct xtn_t xtn_t;
struct xtn_t
{
int gbl_mpi[9];
};
typedef struct rxtn_t rxtn_t;
struct rxtn_t
{
MPI_Comm comm;
int size;
int rank;
};
qse_awk_t* qse_awk_openmpi (qse_size_t xtnsize)
{
return qse_awk_openmpiwithmmgr (QSE_MMGR_GETDFL(), xtnsize);
}
static int add_functions (qse_awk_t* awk);
qse_awk_t* qse_awk_openmpiwithmmgr (qse_mmgr_t* mmgr, qse_size_t xtnsize)
{
qse_awk_t* awk;
awk = qse_awk_openstdwithmmgr (
QSE_MMGR_GETDFL(), QSE_SIZEOF(xtn_t) + xtnsize);
if (awk)
{
xtn_t* xtn;
qse_size_t i;
xtn = (xtn_t*) qse_awk_getxtnstd (awk);
QSE_MEMSET (xtn, 0, QSE_SIZEOF(*xtn));
xtn->gbl_mpi[0] = qse_awk_addgbl (awk, QSE_T("MPI_HOST"), 8);
xtn->gbl_mpi[1] = qse_awk_addgbl (awk, QSE_T("MPI_SIZE"), 8);
xtn->gbl_mpi[2] = qse_awk_addgbl (awk, QSE_T("MPI_RANK"), 8);
xtn->gbl_mpi[3] = qse_awk_addgbl (awk, QSE_T("MPI_REDUCE_MIN"), 14);
xtn->gbl_mpi[4] = qse_awk_addgbl (awk, QSE_T("MPI_REDUCE_MAX"), 14);
xtn->gbl_mpi[5] = qse_awk_addgbl (awk, QSE_T("MPI_REDUCE_SUM"), 14);
xtn->gbl_mpi[6] = qse_awk_addgbl (awk, QSE_T("MPI_REDUCE_PROD"), 15);
xtn->gbl_mpi[7] = qse_awk_addgbl (awk, QSE_T("MPI_REDUCE_LAND"), 15);
xtn->gbl_mpi[8] = qse_awk_addgbl (awk, QSE_T("MPI_REDUCE_LOR"), 14);
for (i = 0; i < QSE_COUNTOF(xtn->gbl_mpi); i++)
{
if (xtn->gbl_mpi[i] <= -1)
{
qse_awk_close (awk);
return QSE_NULL;
}
}
if (add_functions (awk) <= -1)
{
qse_awk_close (awk);
return QSE_NULL;
}
}
return awk;
}
void* qse_awk_getxtnmpi (qse_awk_t* awk)
{
return (void*)((xtn_t*)qse_awk_getxtnstd(awk) + 1);
}
int qse_awk_parsempi (
qse_awk_t* awk, qse_awk_parsempi_t* in, qse_awk_parsempi_t* out)
{
return qse_awk_parsestd (awk, in, out);
}
qse_awk_rtx_t* qse_awk_rtx_openmpi (
qse_awk_t* awk,
qse_size_t xtnsize,
const qse_char_t* id,
const qse_char_t*const icf[],
const qse_char_t*const ocf[],
qse_cmgr_t* cmgr)
{
qse_awk_rtx_t* rtx;
rtx = qse_awk_rtx_openstd (
awk, QSE_SIZEOF(rxtn_t) + xtnsize, id, icf, ocf, cmgr);
if (rtx)
{
xtn_t* xtn;
rxtn_t* rxtn;
qse_size_t i;
xtn = (xtn_t*) qse_awk_getxtnstd (awk);
rxtn = (rxtn_t*) qse_awk_rtx_getxtnstd (rtx);
QSE_MEMSET (rxtn, 0, QSE_SIZEOF(*rxtn));
rxtn->comm = MPI_COMM_WORLD;
/* set the value of some MPI constants */
for (i = 0; i < QSE_COUNTOF(xtn->gbl_mpi); i++)
{
int iv;
qse_awk_val_t* v_tmp;
switch (i)
{
case 0: /* MPI_HOST */
{
char buf[MPI_MAX_PROCESSOR_NAME];
qse_mcstr_t mcstr;
if (MPI_Get_processor_name(buf, &mcstr.len) != MPI_SUCCESS)
{
qse_awk_rtx_close (rtx);
qse_awk_seterrnum (awk, QSE_AWK_ESYSERR, QSE_NULL);
return QSE_NULL;
}
mcstr.ptr = buf;
v_tmp = qse_awk_rtx_makestrvalwithmcstr (rtx, &mcstr);
break;
}
case 1: /* MPI_SIZE */
if (MPI_Comm_size (rxtn->comm, &rxtn->size) != MPI_SUCCESS)
{
qse_awk_rtx_close (rtx);
qse_awk_seterrnum (awk, QSE_AWK_ESYSERR, QSE_NULL);
return QSE_NULL;
}
v_tmp = qse_awk_rtx_makeintval (rtx, rxtn->size);
break;
case 2: /* MPI_RANK */
if (MPI_Comm_rank (rxtn->comm, &rxtn->rank) != MPI_SUCCESS)
{
qse_awk_rtx_close (rtx);
qse_awk_seterrnum (awk, QSE_AWK_ESYSERR, QSE_NULL);
return QSE_NULL;
}
v_tmp = qse_awk_rtx_makeintval (rtx, rxtn->rank);
break;
default: /* MPI_REDUCE_XXXX */
v_tmp = qse_awk_rtx_makeintval (rtx, i - 3);
break;
}
if (v_tmp == QSE_NULL)
{
qse_awk_rtx_close (rtx);
return QSE_NULL;
}
qse_awk_rtx_refupval (rtx, v_tmp);
qse_awk_rtx_setgbl (rtx, xtn->gbl_mpi[i], v_tmp);
qse_awk_rtx_refdownval (rtx, v_tmp);
}
}
return rtx;
}
void* qse_awk_rtx_getxtnmpi (qse_awk_rtx_t* rtx)
{
return (void*)((rxtn_t*)qse_awk_rtx_getxtnstd(rtx) + 1);
}
qse_cmgr_t* qse_awk_rtx_getcmgrmpi (
qse_awk_rtx_t* rtx, const qse_char_t* ioname)
{
return qse_awk_rtx_getcmgrstd (rtx, ioname);
}
static int fnc_hash (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
{
qse_size_t nargs;
qse_awk_val_t* tmp, * a0;
qse_long_t hv;
nargs = qse_awk_rtx_getnargs (rtx);
QSE_ASSERT (nargs == 1);
a0 = qse_awk_rtx_getarg (rtx, 0);
hv = qse_awk_rtx_hashval (rtx, a0);
tmp = qse_awk_rtx_makeintval (rtx, hv);
if (tmp == QSE_NULL) return -1;
qse_awk_rtx_setretval (rtx, tmp);
return 0;
}
static int fnc_assign (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
{
qse_size_t nargs;
qse_awk_val_t* tmp, * a0;
qse_long_t lv;
rxtn_t* rxtn;
qse_awk_nrflt_t nrflt;
rxtn = (rxtn_t*) qse_awk_rtx_getxtnstd (rtx);
nargs = qse_awk_rtx_getnargs (rtx);
QSE_ASSERT (nargs == 1);
a0 = qse_awk_rtx_getarg (rtx, 0);
if (qse_awk_rtx_valtolong (rtx, a0, &lv) <= -1) return -1;
tmp = qse_awk_rtx_makeintval (rtx, lv);
nrflt.limit = lv;
nrflt.size = rxtn->size;
nrflt.rank = rxtn->rank;
qse_awk_rtx_setnrflt (rtx, &nrflt);
if (tmp == QSE_NULL) return -1;
qse_awk_rtx_setretval (rtx, tmp);
return 0;
}
static int fnc_reduce (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
{
qse_size_t nargs;
qse_awk_val_t* tmp, * a0, * a1;
qse_long_t opidx, lv;
qse_flt_t rv;
int n;
rxtn_t* rxtn;
static MPI_Op optab[] =
{
MPI_MIN,
MPI_MAX,
MPI_SUM,
MPI_PROD,
MPI_LAND,
MPI_LOR
};
rxtn = (rxtn_t*) qse_awk_rtx_getxtnstd (rtx);
nargs = qse_awk_rtx_getnargs (rtx);
QSE_ASSERT (nargs == 2);
a0 = qse_awk_rtx_getarg (rtx, 0);
a1 = qse_awk_rtx_getarg (rtx, 1);
if (qse_awk_rtx_valtolong (rtx, a1, &opidx) <= -1) return -1;
if (opidx < 0 || opidx >= QSE_COUNTOF(optab)) goto softfail;
if ((n = qse_awk_rtx_valtonum (rtx, a0, &lv, &rv)) <= -1) return -1;
/* TODO: determine it to be MPI_LONG or MPI_INT, OR MPI_LONG_LONG_INT depending on the size of qse_long_t */
/* TODO: how to tell normal -1 from the soft failure??? */
if (n == 0)
{
qse_long_t lout;
if (MPI_Allreduce (&lv, &lout, 1, MPI_LONG_LONG_INT, optab[opidx], rxtn->comm) != MPI_SUCCESS) goto softfail;
tmp = qse_awk_rtx_makeintval (rtx, lout);
}
else
{
qse_flt_t fout;
if (MPI_Allreduce (&rv, &fout, 1, MPI_LONG_DOUBLE, optab[opidx], rxtn->comm) != MPI_SUCCESS) goto softfail;
tmp = qse_awk_rtx_makefltval (rtx, fout);
}
if (tmp == QSE_NULL) return -1;
qse_awk_rtx_setretval (rtx, tmp);
return 0;
softfail:
tmp = qse_awk_rtx_makeintval (rtx, (qse_long_t)-1);
if (tmp == QSE_NULL) return -1;
qse_awk_rtx_setretval (rtx, tmp);
return 0;
}
static int fnc_barrier (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
{
int x;
qse_awk_val_t* tmp;
rxtn_t* rxtn;
rxtn = (rxtn_t*) qse_awk_rtx_getxtnstd (rtx);
x = (MPI_Barrier (rxtn->comm) == MPI_SUCCESS)? 0: -1;
tmp = qse_awk_rtx_makeintval (rtx, x);
if (tmp == QSE_NULL) return -1;
qse_awk_rtx_setretval (rtx, tmp);
return 0;
}
static int add_functions (qse_awk_t* awk)
{
if (qse_awk_addfnc (awk, QSE_T("mpi_hash"), 8, 0, 1, 1, QSE_NULL, fnc_hash) == QSE_NULL) return -1;
if (qse_awk_addfnc (awk, QSE_T("mpi_assign"), 10, 0, 1, 1, QSE_NULL, fnc_assign) == QSE_NULL) return -1;
if (qse_awk_addfnc (awk, QSE_T("mpi_reduce"), 10, 0, 2, 2, QSE_NULL, fnc_reduce) == QSE_NULL) return -1;
if (qse_awk_addfnc (awk, QSE_T("mpi_barrier"), 11, 0, 0, 0, QSE_NULL, fnc_barrier) == QSE_NULL) return -1;
return 0;
}

View File

@ -443,7 +443,12 @@ static int cgi_add_env (
qse_env_insertmbs (env, QSE_MT("DOCUMENT_ROOT"), docroot); qse_env_insertmbs (env, QSE_MT("DOCUMENT_ROOT"), docroot);
if (suffix && suffix[0] != QSE_MT('\0')) if (suffix && suffix[0] != QSE_MT('\0'))
{ {
const qse_mchar_t* tmp[3] = { docroot, suffix, QSE_NULL}; const qse_mchar_t* tmp[3];
tmp[0] = docroot;
tmp[1] = suffix;
tmp[2] = QSE_NULL;
qse_env_insertmbs (env, QSE_MT("PATH_INFO"), suffix); qse_env_insertmbs (env, QSE_MT("PATH_INFO"), suffix);
qse_env_insertmbsa (env, QSE_MT("PATH_TRANSLATED"), tmp); qse_env_insertmbsa (env, QSE_MT("PATH_TRANSLATED"), tmp);
} }

View File

@ -591,11 +591,13 @@ IP_TRANSPRENT is needed for:
len = qse_nwifindextombs (server->nwif, tmp, QSE_COUNTOF(tmp)); len = qse_nwifindextombs (server->nwif, tmp, QSE_COUNTOF(tmp));
#if defined(SO_BINDTODEVICE)
if (len <= 0 || setsockopt (fd, SOL_SOCKET, SO_BINDTODEVICE, tmp, len) <= -1) if (len <= 0 || setsockopt (fd, SOL_SOCKET, SO_BINDTODEVICE, tmp, len) <= -1)
{ {
/* TODO: logging ... */ /* TODO: logging ... */
goto oops; goto oops;
} }
#endif
} }
/* Solaris 8 returns EINVAL if QSE_SIZEOF(addr) is passed in as the /* Solaris 8 returns EINVAL if QSE_SIZEOF(addr) is passed in as the

View File

@ -142,7 +142,7 @@ qse_httpd_task_t* qse_httpd_entask_text (
qse_httpd_client_t* client, qse_httpd_client_t* client,
qse_httpd_task_t* pred, qse_httpd_task_t* pred,
const qse_mchar_t* ptr, const qse_mchar_t* ptr,
qse_size_t len; qse_size_t len
); );
#ifdef __cplusplus #ifdef __cplusplus