> As Duncan noted, the message is pretty clear in that the ODBC header files > are missing, which are required to compile RODBC from source. On RH based > Linuxen, this requires the installation of the unixODBC-devel RPM, much as > one would need to have other *-devel RPMs (eg. readline-devel) installed for > compiling many applications from source. >
Since a lot of R users may not be familiar with these header files, I think the configure script could go a step further in explaining why it was looking for these headers (to find an installed ODBC driver manager), and that it didn't find one. To illustrate what I mean, here is the result of running R CMD INSTALL on a system lacking an installed dsm where I swapped the order of the tests in configure.ac (see patch below) such that the library tests come before the header tests: > * installing *source* package 'RODBC' ... > checking for library containing SQLTables... no > configure: error: "no ODBC driver manager found" > ERROR: configuration failed for package 'RODBC' To me, that is a more helpful error message, because it makes it clear that you need to install an ODBC driver manager. Another example is found in the configure script for mysql-connector-odbc. Like RODBC, it requires an installed driver manager including header files. It can use either unixODBC or iodbc. Here is the result of running its configure script, without arguments, on a system without an installed driver manager: ... checking if driver should be linked against odbcinst library... yes checking for iodbc-config... no checking for SQL_ATTR_UNIXODBC_VERSION in sqlext.h... not found configure: error: no suitable driver manager selected or found Again, I think that is a better error message, if only because it includes the phrase "driver manager". ============== patch 1 -- swap order of tests in configure.ac =============== diff --git a/configure.ac b/configure.ac index 8f9fc6a..997da8a 100644 --- a/configure.ac +++ b/configure.ac @@ -62,13 +62,6 @@ if test -n "${ODBC_CONFIG}"; then fi CPPFLAGS="${CPPFLAGS} ${RODBC_CPPFLAGS}" -dnl Check the headers can be found -AC_CHECK_HEADERS(sql.h sqlext.h) -if test "${ac_cv_header_sql_h}" = no || - test "${ac_cv_header_sqlext_h}" = no; then - AC_MSG_ERROR("ODBC headers sql.h and sqlext.h not found") -fi - dnl search for a library containing an ODBC function if test [ -n "${odbc_mgr}" ] ; then AC_SEARCH_LIBS(SQLTables, ${odbc_mgr}, , @@ -78,6 +71,13 @@ else AC_MSG_ERROR("no ODBC driver manager found")) fi +dnl Check the headers can be found +AC_CHECK_HEADERS(sql.h sqlext.h) +if test "${ac_cv_header_sql_h}" = no || + test "${ac_cv_header_sqlext_h}" = no; then + AC_MSG_ERROR("ODBC headers sql.h and sqlext.h not found") +fi + dnl for 64-bit ODBC need SQL[U]LEN, and it is unclear where they are defined. AC_CHECK_TYPES([SQLLEN, SQLULEN], , , [# include <sql.h>]) dnl for unixODBC header ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.