make R package strict c99

This commit is contained in:
tqchen 2014-09-01 17:02:42 -07:00
parent 8863c520e7
commit a6ce55493d
5 changed files with 51 additions and 15 deletions

View File

@ -1,9 +1,9 @@
# package root # package root
PKGROOT=../../ PKGROOT=../../
# _*_ mode: Makefile; _*_ # _*_ mode: Makefile; _*_
PKG_CPPFLAGS= -DXGBOOST_CUSTOMIZE_MSG_ -DXGBOOST_CUSTOMIZE_PRNG_ -I$(PKGROOT) PKG_CPPFLAGS= -DXGBOOST_CUSTOMIZE_MSG_ -DXGBOOST_CUSTOMIZE_PRNG_ -DXGBOOST_STRICT_CXX98_ -I$(PKGROOT)
PKG_CXXFLAGS= $(SHLIB_OPENMP_CFLAGS) PKG_CXXFLAGS= $(SHLIB_OPENMP_CFLAGS)
PKG_LIBS = $(SHLIB_OPENMP_CFLAGS) PKG_LIBS = $(SHLIB_OPENMP_CFLAGS)
OBJECTS= xgboost_R.o $(PKGROOT)/wrapper/xgboost_wrapper.o $(PKGROOT)/src/io/io.o $(PKGROOT)/src/gbm/gbm.o $(PKGROOT)/src/tree/updater.o OBJECTS= xgboost_R.o xgboost_assert.o $(PKGROOT)/wrapper/xgboost_wrapper.o $(PKGROOT)/src/io/io.o $(PKGROOT)/src/gbm/gbm.o $(PKGROOT)/src/tree/updater.o

View File

@ -1,7 +1,7 @@
# package root # package root
PKGROOT=../../ PKGROOT=../../
# _*_ mode: Makefile; _*_ # _*_ mode: Makefile; _*_
PKG_CPPFLAGS= -DXGBOOST_CUSTOMIZE_MSG_ -DXGBOOST_CUSTOMIZE_PRNG_ -I$(PKGROOT) PKG_CPPFLAGS= -DXGBOOST_CUSTOMIZE_MSG_ -DXGBOOST_CUSTOMIZE_PRNG_ -DXGBOOST_STRICT_CXX98_ -I$(PKGROOT)
PKG_CXXFLAGS= $(SHLIB_OPENMP_CFLAGS) PKG_CXXFLAGS= $(SHLIB_OPENMP_CFLAGS)
PKG_LIBS = $(SHLIB_OPENMP_CFLAGS) PKG_LIBS = $(SHLIB_OPENMP_CFLAGS)
OBJECTS= xgboost_R.o $(PKGROOT)/wrapper/xgboost_wrapper.o $(PKGROOT)/src/io/io.o $(PKGROOT)/src/gbm/gbm.o $(PKGROOT)/src/tree/updater.o OBJECTS= xgboost_R.o xgboost_assert.o $(PKGROOT)/wrapper/xgboost_wrapper.o $(PKGROOT)/src/io/io.o $(PKGROOT)/src/gbm/gbm.o $(PKGROOT)/src/tree/updater.o

View File

@ -8,21 +8,22 @@
#include "src/utils/utils.h" #include "src/utils/utils.h"
#include "src/utils/omp.h" #include "src/utils/omp.h"
#include "src/utils/matrix_csr.h" #include "src/utils/matrix_csr.h"
using namespace xgboost; using namespace xgboost;
extern "C" {
void XGBoostAssert_R(int exp, const char *fmt, ...);
void XGBoostCheck_R(int exp, const char *fmt, ...);
}
// implements error handling // implements error handling
namespace xgboost { namespace xgboost {
namespace utils { namespace utils {
void HandleAssertError(const char *msg) { void (*Printf)(const char *fmt, ...) = Rprintf;
error("%s", msg); void (*Assert)(int exp, const char *fmt, ...) = XGBoostAssert_R;
} void (*Check)(int exp, const char *fmt, ...) = XGBoostCheck_R;
void HandleCheckError(const char *msg) { void (*Error)(const char *fmt, ...) = error;
error("%s", msg);
}
void HandlePrint(const char *msg) {
Rprintf("%s", msg);
}
} // namespace utils } // namespace utils
namespace random { namespace random {
void Seed(unsigned seed) { void Seed(unsigned seed) {
warning("parameter seed is ignored, please set random seed using set.seed"); warning("parameter seed is ignored, please set random seed using set.seed");

View File

@ -0,0 +1,25 @@
#include <stdio.h>
#include <stdarg.h>
#include <Rinternals.h>
// implements error handling
void XGBoostAssert_R(int exp, const char *fmt, ...) {
char buf[1024];
if (exp == 0) {
va_list args;
va_start(args, fmt);
vsprintf(buf, fmt, args);
va_end(args);
error("AssertError:%s\n", buf);
}
}
void XGBoostCheck_R(int exp, const char *fmt, ...) {
char buf[1024];
if (exp == 0) {
va_list args;
va_start(args, fmt);
vsprintf(buf, fmt, args);
va_end(args);
error("%s\n", buf);
}
}

View File

@ -70,14 +70,23 @@ inline void HandlePrint(const char *msg) {
printf("%s", msg); printf("%s", msg);
} }
#else #else
#ifndef XGBOOST_STRICT_CXX98__
// include declarations, some one must implement this // include declarations, some one must implement this
void HandleAssertError(const char *msg); void HandleAssertError(const char *msg);
void HandleCheckError(const char *msg); void HandleCheckError(const char *msg);
void HandlePrint(const char *msg); void HandlePrint(const char *msg);
#endif #endif
#endif
#ifdef XGBOOST_STRICT_CXX98_
// these function pointers are to be assigned
extern void (*Printf)(const char *fmt, ...);
extern void (*Assert)(int exp, const char *fmt, ...);
extern void (*Check)(int exp, const char *fmt, ...);
extern void (*Error)(const char *fmt, ...);
#else
/*! \brief printf, print message to the console */ /*! \brief printf, print message to the console */
inline void Printf(const char *fmt, ...) { inline void Printf(const char *fmt, ...) {
std::string msg(kPrintBuffer, '\0'); std::string msg(kPrintBuffer, '\0');
va_list args; va_list args;
va_start(args, fmt); va_start(args, fmt);
@ -121,6 +130,7 @@ inline void Error(const char *fmt, ...) {
HandleCheckError(msg.c_str()); HandleCheckError(msg.c_str());
} }
} }
#endif
/*! \brief replace fopen, report error when the file open fails */ /*! \brief replace fopen, report error when the file open fails */
inline FILE *FopenCheck(const char *fname, const char *flag) { inline FILE *FopenCheck(const char *fname, const char *flag) {