From 4cecdc2dbe24a209ce2b77b4b7e005260a0fcca5 Mon Sep 17 00:00:00 2001 From: Dewey Dunnington Date: Wed, 11 Oct 2023 09:10:25 -0300 Subject: [PATCH] fix(r): Build with __USE_MINGW_ANSI_STDIO to enable use of lld in format strings (#1180) Closes #1113. The mingw headers appear to be a little inconsistent with respect to the definitions of `PRId64` and the format check attribute. I think this fix it the least intrusive way to deal with that but I'm open to thoughts! --- c/driver/common/utils.h | 7 ++++--- r/adbcpostgresql/src/Makevars.win | 2 +- r/adbcsqlite/configure | 7 ++++++- r/adbcsqlite/configure.win | 2 +- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/c/driver/common/utils.h b/c/driver/common/utils.h index e3d81cb0f6..1ac6a42a4d 100644 --- a/c/driver/common/utils.h +++ b/c/driver/common/utils.h @@ -30,9 +30,10 @@ extern "C" { int AdbcStatusCodeToErrno(AdbcStatusCode code); -// The printf checking attribute doesn't work properly on gcc 4.8 -// and results in spurious compiler warnings -#if defined(__clang__) || (defined(__GNUC__) && __GNUC__ >= 5) +// If using mingw's c99-compliant printf, we need a different format-checking attribute +#if defined(__USE_MINGW_ANSI_STDIO) && defined(__MINGW_PRINTF_FORMAT) +#define ADBC_CHECK_PRINTF_ATTRIBUTE __attribute__((format(__MINGW_PRINTF_FORMAT, 2, 3))) +#elif defined(__GNUC__) #define ADBC_CHECK_PRINTF_ATTRIBUTE __attribute__((format(printf, 2, 3))) #else #define ADBC_CHECK_PRINTF_ATTRIBUTE diff --git a/r/adbcpostgresql/src/Makevars.win b/r/adbcpostgresql/src/Makevars.win index 0b4ab3c557..e98dc0917b 100644 --- a/r/adbcpostgresql/src/Makevars.win +++ b/r/adbcpostgresql/src/Makevars.win @@ -17,7 +17,7 @@ VERSION = 13.2.0 RWINLIB = ../windows/libpq-$(VERSION) -PKG_CPPFLAGS = -I$(RWINLIB)/include -I../src -DADBC_EXPORT="" +PKG_CPPFLAGS = -I$(RWINLIB)/include -I../src -DADBC_EXPORT="" -D__USE_MINGW_ANSI_STDIO PKG_LIBS = -L$(RWINLIB)/lib${R_ARCH}${CRT} \ -lpq -lpgport -lpgcommon -lssl -lcrypto -lwsock32 -lsecur32 -lws2_32 -lgdi32 -lcrypt32 -lwldap32 diff --git a/r/adbcsqlite/configure b/r/adbcsqlite/configure index 084aa224e8..95f48e83db 100755 --- a/r/adbcsqlite/configure +++ b/r/adbcsqlite/configure @@ -40,7 +40,7 @@ echo "Testing R CMD SHLIB with $PKG_CPPFLAGS $PKG_LIBS -lsqlite3" PKG_CPPFLAGS="$PKG_CPPFLAGS" PKG_LIBS="$PKG_LIBS -lsqlite3" \ $R_HOME/bin/R CMD SHLIB tools/test.c -o sqlite_test >sqlite_test.log 2>&1 -if [ $? -ne 0 ] || [ ! -z "$FORCE_VENDORED_SQLITE3"]; then +if [ $? -ne 0 ] || [ ! -z "$FORCE_VENDORED_SQLITE3" ]; then echo "Forcing vendored sqlite3 or #include /-lsqlite3 failed:" cat sqlite_test.log @@ -52,6 +52,11 @@ else PKG_LIBS="$PKG_LIBS -lsqlite3" fi +# Add mingw printf flag if on Windows +if [ ! -z "$R_ADBC_SQLITE_ON_WINDOWS" ]; then + PKG_CPPFLAGS="$PKG_CPPFLAGS -D__USE_MINGW_ANSI_STDIO" +fi + rm -f tools/test.o sqlite_test sqlite_test.log || true sed \ diff --git a/r/adbcsqlite/configure.win b/r/adbcsqlite/configure.win index 105bb7f4ba..336156dba9 100755 --- a/r/adbcsqlite/configure.win +++ b/r/adbcsqlite/configure.win @@ -16,4 +16,4 @@ # under the License. # Just call the original configure script -./configure +R_ADBC_SQLITE_ON_WINDOWS=1 ./configure