From: František Dvořák Date: Wed, 9 Jul 2008 16:20:12 +0000 (+0000) Subject: C and C++ flavours for gsoap 2.7.10, older versions handled in the old way. X-Git-Tag: glite-security-gsoap-plugin_R_1_5_4_2~3 X-Git-Url: http://scientific.zcu.cz/git/?a=commitdiff_plain;h=f7e56b49f75774a60a6ff399330b95e0ea99a31b;p=jra1mw.git C and C++ flavours for gsoap 2.7.10, older versions handled in the old way. Added handy "clean" target. Changes/warning fixes in the plugin code due to C++ compatibility. C/C++ mixture test. --- diff --git a/org.glite.security.gsoap-plugin/Makefile b/org.glite.security.gsoap-plugin/Makefile index 71c3727..0c1ca59 100644 --- a/org.glite.security.gsoap-plugin/Makefile +++ b/org.glite.security.gsoap-plugin/Makefile @@ -15,17 +15,16 @@ nothrflavour=gcc32 thrflavour=gcc32pthr gsoap_prefix=/opt/gsoap -CC=gcc - -gsoap_versions?=2.6.2 2.7.0f 2.7.6b 2.7.9b 2.7.10 -gsoap_versions:=${shell if ! echo $gsoap_versions | grep "\<${gsoap_default_version}\>" >/dev/null; then echo "${gsoap_default_version} "; else echo ne; fi} ${gsoap_versions} +gsoap_versions_noflavours?=2.6.2 2.7.0f 2.7.6b 2.7.9b +gsoap_versions_flavours?=2.7.10 +gsoap_versions_flavours:=${shell if ! echo $gsoap_versions_flavours | grep "\<${gsoap_default_version}\>" >/dev/null; then echo "${gsoap_default_version} "; else echo ne; fi} ${gsoap_versions_flavours} -include Makefile.inc -include ../Makefile.inc GSPLUGIN_DEBUG?=no GSPLUGIN_VERSION_CHECKING?=yes - +CC=gcc offset=1 version_info:=-version-info ${shell \ @@ -40,6 +39,10 @@ ext_repository:=${shell if [ -d "${repository}/externals" ]; then \ gsoap_version=${gsoap_default_version} gsoap_prefix?=${ext_repository}/${gsoap_name}/${gsoap_version}/${gsoap_platform} +ifdef lang +langflavour:=_${lang} +langsuffix:=.${lang} +endif VPATH=${top_srcdir}/src:${top_srcdir}/test:${top_srcdir}/examples @@ -70,9 +73,16 @@ LDFLAGS:=${COVERAGE_FLAGS} COMPILE:=libtool --mode=compile ${CC} ${CFLAGS} COMPILEXX:=libtool --mode=compile ${CXX} ${CFLAGS} -LINK:=libtool --mode=link ${CC} -rpath ${stagedir}/lib ${LDFLAGS} -LINKXX:=PATH=${top_srcdir}/project/libtoolhack:${PATH} libtool --mode=link ${CXX} -rpath ${stagedir}/lib ${LDFLAGS} +LINK:=libtool --mode=link ${CC} -rpath ${stagedir}/lib ${LDFLAGS} +LINKXX:=libtool --mode=link ${CXX} -rpath ${stagedir}/lib ${LDFLAGS} INSTALL:=libtool --mode=install install +LINK_lang:=PATH=${top_srcdir}/project/libtoolhack:${PATH} libtool --mode=link ${CXX} -rpath ${stagedir}/lib ${LDFLAGS} +ifeq (${lang},c) +LINK_lang:=${LINK} +endif +ifeq (${lang},cxx) +LINK_lang:=${LINKXX} +endif GLOBUS_INC:= -I${globus_prefix}/include/${nothrflavour} GLOBUS_THR_INC:= -I${globus_prefix}/include/${thrflavour} @@ -92,6 +102,8 @@ EX_LIBS:= ${GLOBUS_LIBS} ${ARES_LIBS} EX_THRLIBS := ${GLOBUS_THR_LIBS} ${ARES_LIBS} HDRS:=glite_gss.h glite_gsplugin.h glite_gscompat.h +EXAMPLES:=wscalc_clt_ex wscalc_srv_ex wscalc_srv_ex2 +TESTS:=test_gss test_coverage test_cxx GSS_OBJS:=glite_gss.o GSS_LOBJS:=${GSS_OBJS:.o=.lo} @@ -103,10 +115,10 @@ GSS_THRSTATICLIB:=libglite_security_gss_${thrflavour}.a GSS_LTLIB:=libglite_security_gss_${nothrflavour}.la GSS_THRLTLIB:=libglite_security_gss_${thrflavour}.la -STATICLIB:=libglite_security_gsoap_plugin_${nothrflavour}.a -THRSTATICLIB:=libglite_security_gsoap_plugin_${thrflavour}.a -LTLIB:=libglite_security_gsoap_plugin_${nothrflavour}.la -THRLTLIB:=libglite_security_gsoap_plugin_${thrflavour}.la +STATICLIB:=libglite_security_gsoap_plugin_${nothrflavour}${langflavour}.a +THRSTATICLIB:=libglite_security_gsoap_plugin_${thrflavour}${langflavour}.a +LTLIB:=libglite_security_gsoap_plugin_${nothrflavour}${langflavour}.la +THRLTLIB:=libglite_security_gsoap_plugin_${thrflavour}${langflavour}.la ${GSS_STATICLIB}: ${GSS_OBJS} ar crv $@ ${GSS_OBJS} @@ -123,18 +135,19 @@ ${GSS_THRLTLIB}: ${GSS_THROBJS} ${LINK} ${version_info} -o $@ ${GSS_THRLOBJS} ${EX_THRLIBS} -OBJS:=${GSS_OBJS} glite_gsplugin.o +OBJS:=${GSS_OBJS} glite_gsplugin${langsuffix}.o LOBJS:=${OBJS:.o=.lo} THROBJS:=${OBJS:.o=.thr.o} THRLOBJS:=${OBJS:.o=.thr.lo} dotless_ver:=${shell echo ${gsoap_version} | tr -d '.'} -STATICLIB_S:=libglite_security_gsoap_plugin_${dotless_ver}_${nothrflavour}.a -THRSTATICLIB_S:=libglite_security_gsoap_plugin_${dotless_ver}_${thrflavour}.a -LTLIB_S:=libglite_security_gsoap_plugin_${dotless_ver}_${nothrflavour}.la -THRLTLIB_S:=libglite_security_gsoap_plugin_${dotless_ver}_${thrflavour}.la +STATICLIB_S:=libglite_security_gsoap_plugin_${dotless_ver}_${nothrflavour}${langflavour}.a +THRSTATICLIB_S:=libglite_security_gsoap_plugin_${dotless_ver}_${thrflavour}${langflavour}.a +LTLIB_S:=libglite_security_gsoap_plugin_${dotless_ver}_${nothrflavour}${langflavour}.la +THRLTLIB_S:=libglite_security_gsoap_plugin_${dotless_ver}_${thrflavour}${langflavour}.la +LTLIB_TEST_S:=libglite_security_gsoap_plugin_${dotless_ver}_${nothrflavour}_cxx.la -OBJS_S:=${GSS_OBJS} glite_gsplugin.o stdsoap2.o +OBJS_S:=${GSS_OBJS} glite_gsplugin${langsuffix}.o stdsoap2${langsuffix}.o LOBJS_S:=${OBJS_S:.o=.lo} THROBJS_S:=${OBJS_S:.o=.thr.o} THRLOBJS_S:=${OBJS_S:.o=.thr.lo} @@ -148,10 +161,10 @@ ${THRSTATICLIB}: ${THROBJS} ranlib $@ ${LTLIB}: ${OBJS} - PATH=${top_builddir}:${PATH} ${LINKXX} ${version_info} -o $@ ${LOBJS} ${EX_LIBS} + ${LINK_lang} ${version_info} -o $@ ${LOBJS} ${EX_LIBS} ${THRLTLIB}: ${THROBJS} - PATH=${top_builddir}:${PATH} ${LINKXX} ${version_info} -o $@ ${THRLOBJS} ${EX_THRLIBS} + ${LINK_lang} ${version_info} -o $@ ${THRLOBJS} ${EX_THRLIBS} ${STATICLIB_S}: ${OBJS_S} ar crv $@ ${OBJS_S} @@ -162,38 +175,49 @@ ${THRSTATICLIB_S}: ${THROBJS_S} ranlib $@ ${LTLIB_S}: ${OBJS_S} - PATH=${top_builddir}:${PATH} ${LINKXX} ${version_info} -o $@ ${LOBJS_S} ${EX_LIBS} + ${LINK_lang} ${version_info} -o $@ ${LOBJS_S} ${EX_LIBS} ${THRLTLIB_S}: ${THROBJS_S} - PATH=${top_builddir}:${PATH} ${LINKXX} ${version_info} -o $@ ${THRLOBJS_S} ${EX_THRLIBS} + ${LINK_lang} ${version_info} -o $@ ${THRLOBJS_S} ${EX_THRLIBS} all compile: \ ${GSS_STATICLIB} ${GSS_LTLIB} ${GSS_THRSTATICLIB} ${GSS_THRLTLIB} \ ${STATICLIB} ${LTLIB} ${THRSTATICLIB} ${THRLTLIB} \ all-libs-with-soap examples -check: compile check.gss +check: check.gss check.cxx -check.gss: test_gss +check.gss: ${GSS_LTLIB} test_gss # ./test_gss echo test_gss not run automatically util we have got some credentials +# C/C++ compatibility test +# (C flavour, gsoap 2.7.10 ==> C++ test fails) +check.cxx: + ${MAKE} lang=cxx ${LTLIB_TEST_S} test_cxx + ./test_cxx + test_gss: test_gss.o - PATH=${top_builddir}:${PATH} ${LINKXX} -o $@ test_gss.o ${GSS_LTLIB} ${TEST_LIBS} ${GLOBUS_LIBS} ${EX_LIBS} + ${LINKXX} -o $@ test_gss.o ${GSS_LTLIB} ${TEST_LIBS} ${GLOBUS_LIBS} ${EX_LIBS} test_coverage: -mkdir coverage cd coverage && $(MAKE) -f ../Makefile top_srcdir=../../ COVERAGE_FLAGS="-fprofile-arcs -ftest-coverage" check cd coverage && for i in ${OBJS}; do gcov -o .libs/ $$i ; done - -examples: wscalc_clt_ex wscalc_srv_ex wscalc_srv_ex2 +examples: ${EXAMPLES} all-libs-with-soap: - for v in ${gsoap_versions}; do \ + for v in ${gsoap_versions_noflavours}; do \ dir=`echo $$v | tr -d .`; \ mkdir $$dir; \ - ( cd $$dir && ${MAKE} -f ../Makefile gsoap_version=$$v top_srcdir=../.. libs-with-soap) ; \ + ( cd $$dir && ${MAKE} -f ../Makefile gsoap_version=$$v top_srcdir=../.. lang= libs-with-soap) ; \ + done + for v in ${gsoap_versions_flavours}; do \ + dir=`echo $$v | tr -d .`; \ + mkdir $$dir; \ + ( cd $$dir && ${MAKE} -f ../Makefile gsoap_version=$$v top_srcdir=../.. lang=c libs-with-soap) ; \ + ( cd $$dir && ${MAKE} -f ../Makefile gsoap_version=$$v top_srcdir=../.. lang=cxx libs-with-soap) ; \ done libs-with-soap: ${LTLIB_S} ${THRLTLIB_S} ${STATICLIB_S} ${THRSTATICLIB_S} @@ -229,26 +253,28 @@ WSCALC_SRV2_OBJS = wscalc_srv_ex2.o ${GSOAP_FPREFIX}C.o ${GSOAP_FPREFIX}Server.o wscalc_clt_ex.o wscalc_srv_ex.o wscalc_srv_ex2.o: ${GSOAP_FPREFIX}H.h wscalc_clt_ex: ${WSCALC_CLT_OBJS} ${LTLIB_S} - ${LINK} -o $@ ${WSCALC_CLT_OBJS} ${LTLIB_S} + ${LINK_lang} -o $@ ${WSCALC_CLT_OBJS} ${LTLIB_S} wscalc_srv_ex: ${WSCALC_SRV_OBJS} ${LTLIB_S} - ${LINK} -o $@ ${WSCALC_SRV_OBJS} ${LTLIB_S} + ${LINK_lang} -o $@ ${WSCALC_SRV_OBJS} ${LTLIB_S} wscalc_srv_ex2: ${WSCALC_SRV2_OBJS} ${LTLIB_S} - ${LINK} -o $@ ${WSCALC_SRV2_OBJS} ${LTLIB_S} + ${LINK_lang} -o $@ ${WSCALC_SRV2_OBJS} ${LTLIB_S} +test_cxx: test_gsplugin_cxx.o ${GSOAP_FPREFIX}C.cxx.o + ${LINKXX} -o $@ $+ ${LTLIB_TEST_S} soapcpp:=${shell if [ -x ${gsoap_prefix}/bin/soapcpp2 ]; then \ echo ${gsoap_prefix}/bin/soapcpp2; \ else echo ${gsoap_prefix}/soapcpp2; \ fi} -${GSOAP_FPREFIX}H.h ${GSOAP_FPREFIX}C.c ${GSOAP_FPREFIX}Server.c ${GSOAP_FPREFIX}Client.c ${GSOAP_FPREFIX}ServerLib.c ${GSOAP_FPREFIX}ClientLib.c: calc.h.S +${GSOAP_FPREFIX}H.h ${GSOAP_FPREFIX}C.c ${GSOAP_FPREFIX}Server.c ${GSOAP_FPREFIX}Client.c ${GSOAP_FPREFIX}ServerLib.c ${GSOAP_FPREFIX}ClientLib.c: calc.h.S ${soapcpp} -c -p ${GSOAP_FPREFIX} ${top_srcdir}/examples/calc.h.S wscalc_clt_ex.o: wscalc_clt_ex.c ${CC} -c ${CFLAGS} ${GLOBUS_INC} -o $@ $< - + doc: stage: @@ -277,32 +303,51 @@ install: if [ x${DOSTAGE} = xyes ]; then \ install -m 644 ${GSS_STATICLIB} ${GSS_THRSTATICLIB} ${PREFIX}/lib; \ fi - for v in ${gsoap_versions}; do \ - (cd `echo $$v | tr -d .` && ${MAKE} -f ../Makefile install-soaplib gsoap_version=$$v PREFIX=${PREFIX} top_srcdir=${top_srcdir}/..); \ + for v in ${gsoap_versions_noflavours}; do \ + (cd `echo $$v | tr -d .` && ${MAKE} -f ../Makefile install-soaplib gsoap_version=$$v lang= PREFIX=${PREFIX} top_srcdir=${top_srcdir}/..); \ + done + for v in ${gsoap_versions_flavours}; do \ + (cd `echo $$v | tr -d .` && ${MAKE} -f ../Makefile install-soaplib gsoap_version=$$v lang=c PREFIX=${PREFIX} top_srcdir=${top_srcdir}/..); \ + (cd `echo $$v | tr -d .` && ${MAKE} -f ../Makefile install-soaplib gsoap_version=$$v lang=cxx PREFIX=${PREFIX} top_srcdir=${top_srcdir}/..); \ done install-soaplib: ${INSTALL} -m 755 ${LTLIB_S} ${THRLTLIB_S} ${PREFIX}/lib clean: + rm -rvf *.c *.h *.xml *.nsmap *.o *.lo *.a *.la .libs ${EXAMPLES} ${TESTS} + rm -rvf CalcService.wsdl wscalc.xsd + rm -rvf log.xml project/ rpmbuild/ RPMS/ tgz/ + for v in ${gsoap_versions_noflavours} ${gsoap_versions_flavours}; do \ + rm -rvf `echo $$v | tr -d .`; \ + done -%.o: %.c +%.c.o: %.c ${COMPILE} ${GLOBUS_INC} -o $@ -c $< -stdsoap2.o: stdsoap2.c +%.cxx.o: %.c ${COMPILEXX} ${GLOBUS_INC} -o $@ -c $< +%.o: %.c + ${COMPILE} ${GLOBUS_INC} -o $@ -c $< + +%.c.thr.o: %.c + ${COMPILE} ${GLOBUS_THR_INC} -o $@ -c $< + +%.cxx.thr.o: %.c + ${COMPILEXX} ${GLOBUS_THR_INC} -o $@ -c $< + %.thr.o: %.c ${COMPILE} ${GLOBUS_THR_INC} -o $@ -c $< test_gss.o: %.o: %.cpp - ${CXX} -c ${CFLAGS} ${GLOBUS_INC} ${TEST_INC} $< + ${COMPILEXX} -c ${GLOBUS_INC} ${TEST_INC} $< + +test_gsplugin_cxx.o: %.o: %.cpp stdsoap2.h + ${COMPILEXX} -c ${GLOBUS_INC} $< -glite_gsplugin.o, glite_gsplugin.thr.o: soap_version.h +glite_gsplugin${langsuffix}.o glite_gsplugin${langsuffix}.thr.o: soap_version.h soap_version.h: stdsoap2.h head stdsoap2.h | \ perl -ne '/^stdsoap2.h\s+([0-9])\.([0-9])\.(\S+)\s.*/ && printf "#define GSOAP_VERSION %d%02d%02d\n#define GSOAP_MIN_VERSION \"$$3\"\n#ident \"soap_version.h $$1.$$2.$$3\"\n",$$1,$$2,$$3' >$@ - -glite_gsplugin.o: soap_version.h - diff --git a/org.glite.security.gsoap-plugin/src/glite_gsplugin.c b/org.glite.security.gsoap-plugin/src/glite_gsplugin.c index 4456b73..db80fec 100644 --- a/org.glite.security.gsoap-plugin/src/glite_gsplugin.c +++ b/org.glite.security.gsoap-plugin/src/glite_gsplugin.c @@ -117,7 +117,7 @@ glite_gsplugin_set_credential(glite_gsplugin_Context ctx, edg_wll_GssStatus gss_code; int ret; - ret = edg_wll_gss_acquire_cred_gsi(cert, key, &ctx->cred, NULL, &gss_code); + ret = edg_wll_gss_acquire_cred_gsi((char *)cert, (char *)key, &ctx->cred, NULL, &gss_code); if (ret) { /* XXX propagate error description */ return EINVAL; @@ -135,13 +135,13 @@ glite_gsplugin_set_credential(glite_gsplugin_Context ctx, int glite_gsplugin(struct soap *soap, struct soap_plugin *p, void *arg) { - int_plugin_data_t *pdata = malloc(sizeof(int_plugin_data_t)); + int_plugin_data_t *pdata = (int_plugin_data_t *)malloc(sizeof(int_plugin_data_t)); pdprintf(("GSLITE_GSPLUGIN: initializing gSOAP plugin\n")); if ( !pdata ) return ENOMEM; if ( arg ) { pdprintf(("GSLITE_GSPLUGIN: Context is given\n")); - pdata->ctx = arg; + pdata->ctx = (glite_gsplugin_Context)arg; pdata->def = 0; } else { @@ -257,7 +257,7 @@ glite_gsplugin_connect( } } - if ( !(ctx->connection = malloc(sizeof(*ctx->connection))) ) return errno; + if ( !(ctx->connection = (edg_wll_GssConnection *)malloc(sizeof(*ctx->connection))) ) return errno; ret = edg_wll_gss_connect(ctx->cred, host, port, ctx->timeout, @@ -337,9 +337,9 @@ glite_gsplugin_accept(struct soap *soap, int s, struct sockaddr *a, int *n) soap->errnum = 0; pdprintf(("GSLITE_GSPLUGIN: glite_gsplugin_accept()\n")); ctx = ((int_plugin_data_t *)soap_lookup_plugin(soap, plugin_id))->ctx; - if ( (conn = accept(s, (struct sockaddr *)&a, n)) < 0 ) return conn; + if ( (conn = accept(s, (struct sockaddr *)&a, (socklen_t *)n)) < 0 ) return conn; if ( !ctx->connection - && !(ctx->connection = malloc(sizeof(*ctx->connection))) ) { + && !(ctx->connection = (edg_wll_GssConnection *)malloc(sizeof(*ctx->connection))) ) { soap_set_receiver_error(soap, "malloc error", strerror(ENOMEM), ENOMEM); return SOAP_INVALID_SOCKET; } diff --git a/org.glite.security.gsoap-plugin/test/test_gsplugin_cxx.cpp b/org.glite.security.gsoap-plugin/test/test_gsplugin_cxx.cpp new file mode 100644 index 0000000..4caad45 --- /dev/null +++ b/org.glite.security.gsoap-plugin/test/test_gsplugin_cxx.cpp @@ -0,0 +1,46 @@ +#include + +#include "stdsoap2.h" +#include "glite_gsplugin.h" + +#define TEST_STR "123456789ABCDEF" + +int main() { + struct soap *mydlo = NULL; + glite_gsplugin_Context gsplugin_ctx = NULL; + int ok1, ok2; + + // test 1 - stdsoap2.c compatibility + if ((mydlo = soap_new()) == NULL) { + std::cerr << "Couldn't create soap" << std::endl; + return 1; + } + soap_set_endpoint(mydlo, TEST_STR); + std::cout << mydlo->endpoint << std::endl; + ok1 = strcmp(mydlo->endpoint, TEST_STR); + + // test 2 - glite_gsplugin.c compatibility + // + // not real test, just may crash in bad test case on calling + // soap->fdelete where will be other function + if ( glite_gsplugin_init_context(&gsplugin_ctx) ) { + std::cerr << "Couldn't create gSOAP plugin context" << std::endl; + goto err; + } + if (soap_register_plugin_arg(mydlo, glite_gsplugin, gsplugin_ctx)) { + std::cerr << "Couldn't register gSoap plugin" << std::endl; + goto err; + } + + soap_done(mydlo); + free(mydlo); + glite_gsplugin_free_context(gsplugin_ctx); + return ok1 && ok2; + +err: + if (gsplugin_ctx) glite_gsplugin_free_context(gsplugin_ctx); + if (mydlo) soap_destroy(mydlo); + return 1; +} + +Namespace namespaces[] = {{NULL, NULL, NULL, NULL}};