Re: [sqlite] loading extension csv.c

2020-02-07 Thread Richard Damon

On 2/7/20 3:14 PM, Jens Alfke wrote:



On Feb 7, 2020, at 9:11 AM, chiahui chen  wrote:

/usr/include/sqlite3ext.h:437:53: note: expanded from macro
'sqlite3_vsnprintf'

#define sqlite3_vsnprintf  sqlite3_api->vsnprintf

   ~~~  ^

/usr/include/secure/_stdio.h:75:3: note: expanded from macro 'vsnprintf'

  __builtin___vsnprintf_chk (str, len, 0, __darwin_obsz(str), format, ap)

  ^

This appears to be your problem. The system header  is 
defining `vsnprintf` as a macro that expands to a compiler builtin. This is 
conflicting with a struct field named `vsnprintf` in the SQLite extension API.

I've never heard of  before, although it does exist in the macOS SDK. 
Looking through the normal , it does include that header at the end:

#if defined (__GNUC__) && _FORTIFY_SOURCE > 0 && !defined (__cplusplus)
/* Security checking functions.  */
#include 
#endif

So it looks like the trigger is that you're somehow building with 
_FORTIFY_SOURCE defined, and the others are not.

Anyway, I think you could work around the problem by editing csv.c and 
inserting something like this at the top:
#include 
#undef vsnprintf
Or else figuring out how to turn off _FORTIFY_SOURCE.

—Jens

PS: Your use of `gcc` in the command line confused me briefly — turns out `gcc` 
on macOS is simply an alias for `cc`, so it invokes Clang. If you really want 
GCC for some reason you'd have to install it yourself and put it in your $PATH 
before /usr/bin.

It looks like that header (sys/_stdio.h) is non-conforming. The C 
Standard does allow the stdio.h header to define a macro for the name 
vsnprintf, but that macro must be a *function-like* macro (7.1.4p1 in 
the C17 Standard) which it appears not to be (as that shouldn't cause a 
problem with the shown code).


--
Richard Damon

___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] loading extension csv.c

2020-02-07 Thread Jens Alfke


> On Feb 7, 2020, at 9:11 AM, chiahui chen  wrote:
> 
> /usr/include/sqlite3ext.h:437:53: note: expanded from macro
> 'sqlite3_vsnprintf'
> 
> #define sqlite3_vsnprintf  sqlite3_api->vsnprintf
> 
>   ~~~  ^
> 
> /usr/include/secure/_stdio.h:75:3: note: expanded from macro 'vsnprintf'
> 
>  __builtin___vsnprintf_chk (str, len, 0, __darwin_obsz(str), format, ap)
> 
>  ^

This appears to be your problem. The system header  is 
defining `vsnprintf` as a macro that expands to a compiler builtin. This is 
conflicting with a struct field named `vsnprintf` in the SQLite extension API.

I've never heard of  before, although it does exist in the macOS 
SDK. Looking through the normal , it does include that header at the 
end:

#if defined (__GNUC__) && _FORTIFY_SOURCE > 0 && !defined (__cplusplus)
/* Security checking functions.  */
#include 
#endif

So it looks like the trigger is that you're somehow building with 
_FORTIFY_SOURCE defined, and the others are not.

Anyway, I think you could work around the problem by editing csv.c and 
inserting something like this at the top:
#include 
#undef vsnprintf
Or else figuring out how to turn off _FORTIFY_SOURCE.

—Jens

PS: Your use of `gcc` in the command line confused me briefly — turns out `gcc` 
on macOS is simply an alias for `cc`, so it invokes Clang. If you really want 
GCC for some reason you'd have to install it yourself and put it in your $PATH 
before /usr/bin.
___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] loading extension csv.c

2020-02-07 Thread chiahui chen
Hi Dr. Hipp,

Thank you very much. I tried the suggested solution. sqlite3 was
downloaded  and compiled.
Then ran : gcc -g -l. -fPIC -dynamiclib ./ext/csv.c -o csv.dylib
the same errors occurred again.

./ext/csv.c:115:3: error: no member named '__builtin___vsnprintf_chk' in
'struct sqlite3_api_routines'

  sqlite3_vsnprintf(CSV_MXERR, p->zErr, zFormat, ap);

  ^

/usr/include/sqlite3ext.h:437:53: note: expanded from macro
'sqlite3_vsnprintf'

#define sqlite3_vsnprintf  sqlite3_api->vsnprintf

   ~~~  ^

/usr/include/secure/_stdio.h:75:3: note: expanded from macro 'vsnprintf'

  __builtin___vsnprintf_chk (str, len, 0, __darwin_obsz(str), format, ap)

  ^

./ext/csv.c:115:21: warning: incompatible integer to pointer conversion
passing 'int' to parameter of type

  'const void *' [-Wint-conversion]

  sqlite3_vsnprintf(CSV_MXERR, p->zErr, zFormat, ap);

^

./ext/csv.c:67:19: note: expanded from macro 'CSV_MXERR'

#define CSV_MXERR 200

  ^~~

/usr/include/secure/_stdio.h:75:57: note: expanded from macro 'vsnprintf'

  __builtin___vsnprintf_chk (str, len, 0, __darwin_obsz(str), format, ap)

^~~

/usr/include/secure/_common.h:39:54: note: expanded from macro
'__darwin_obsz'

#define __darwin_obsz(object) __builtin_object_size (object,
_USE_FORTIFY_LEVEL > 1 ? 1 : 0)

 ^~

./ext/csv.c:568:5: error: use of undeclared identifier 'sqlite3_str'

sqlite3_str *pStr = sqlite3_str_new(0);

^

./ext/csv.c:568:18: error: use of undeclared identifier 'pStr'

sqlite3_str *pStr = sqlite3_str_new(0);

 ^

./ext/csv.c:568:25: warning: implicit declaration of function
'sqlite3_str_new' is invalid in C99

  [-Wimplicit-function-declaration]

sqlite3_str *pStr = sqlite3_str_new(0);

^

./ext/csv.c:571:5: warning: implicit declaration of function
'sqlite3_str_appendf' is invalid in C99

  [-Wimplicit-function-declaration]

sqlite3_str_appendf(pStr, "CREATE TABLE x(");

^

./ext/csv.c:571:25: error: use of undeclared identifier 'pStr'

sqlite3_str_appendf(pStr, "CREATE TABLE x(");

^

./ext/csv.c:581:29: error: use of undeclared identifier 'pStr'

sqlite3_str_appendf(pStr, "%sc%d TEXT", zSep, iCol);

^

./ext/csv.c:588:31: error: use of undeclared identifier 'pStr'

  sqlite3_str_appendf(pStr,"%s\"%w\" TEXT", zSep, z);

  ^

./ext/csv.c:597:31: error: use of undeclared identifier 'pStr'

  sqlite3_str_appendf(pStr,"%sc%d TEXT", zSep, ++iCol);

  ^

./ext/csv.c:603:25: error: use of undeclared identifier 'pStr'

sqlite3_str_appendf(pStr, ")");

^

./ext/csv.c:604:18: warning: implicit declaration of function
'sqlite3_str_finish' is invalid in C99

  [-Wimplicit-function-declaration]

CSV_SCHEMA = sqlite3_str_finish(pStr);

 ^

./ext/csv.c:604:37: error: use of undeclared identifier 'pStr'

CSV_SCHEMA = sqlite3_str_finish(pStr);

^

./ext/csv.c:643:27: error: use of undeclared identifier
'SQLITE_VTAB_DIRECTONLY'

  sqlite3_vtab_config(db, SQLITE_VTAB_DIRECTONLY);

  ^

4 warnings and 10 errors generated.

Here is Mac terminal sqlite3 compiling process if it can shed light on the
extension compiling errors.

./configure && make

checking for a BSD-compatible install... /usr/bin/install -c

checking whether build environment is sane... yes

checking for a thread-safe mkdir -p... ./install-sh -c -d

checking for gawk... no

checking for mawk... no

checking for nawk... no

checking for awk... awk

checking whether make sets $(MAKE)... yes

checking whether make supports nested variables... yes

checking for style of include used by make... GNU

checking for gcc... gcc

checking whether the C compiler works... yes

checking for C compiler default output file name... a.out

checking for suffix of executables...

checking whether we are cross compiling... no

checking for suffix of object files... o

checking whether we are using the GNU C compiler... yes

checking whether gcc accepts -g... yes

checking for gcc option to accept ISO C89... none needed

checking whether gcc understands -c and -o together... yes

checking dependency style of gcc... gcc3

checking for special C compiler options needed for large files... no

checking for _FILE_OFFSET_BITS value needed for large files... no

checking for gcc... (cached) gcc

checking whether we are using the GNU C compiler... (cached) yes

checking whether gcc accepts -g... (cached) yes

checking for gcc option to accept ISO C89... (cached) none needed

checking whether gcc understands -c and -o together... (cached) yes

checking dependency style 

Re: [sqlite] loading extension csv.c

2020-02-07 Thread Rolf Ade

> On 2/7/20, chiahui chen  wrote:
>>
>> I tried the suggested solution. sqlite3 was
>> downloaded  and compiled.
>> Then ran : gcc -g -l. -fPIC -dynamiclib ./ext/csv.c -o csv.dylib
 ^^^

Is this a typo? This should read

gcc -I. 

>> the same errors occurred again.
>>
>> Is there any suggestion? Just in case if my Mac operating system provides
>> some info (macOS High Sierra version 10.13.6)
>>
___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] loading extension csv.c

2020-02-07 Thread Richard Hipp
On 2/7/20, chiahui chen  wrote:
>
> I tried the suggested solution. sqlite3 was
> downloaded  and compiled.
> Then ran : gcc -g -l. -fPIC -dynamiclib ./ext/csv.c -o csv.dylib
> the same errors occurred again.
>
> Is there any suggestion? Just in case if my Mac operating system provides
> some info (macOS High Sierra version 10.13.6)
>

That command works fine for me on my iMac.  I have no idea why it is
failing for you.

-- 
D. Richard Hipp
d...@sqlite.org
___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] loading extension csv.c

2020-02-06 Thread Richard Hipp
On 2/6/20, chiahui chen  wrote:
> Hi,
>
> After few attempts to load csv extension, (already tried
>
> gcc -arch x86_64 -g -fPIC -dynamiclib csv.c -o csv.dylib
>
> and
>
> gcc  -g -fPIC -dynamiclib csv.c -o csv.dylib
> )
> Mac terminal returns errors as followings:

I don't know what is causing your errors.  But I can show you what
works for me, on a Mac:

(1) Unpack the SQLite source-code tarball for version 3.31.1

(2) Run:  ./configure && make

(3) Run:  gcc -g -I. -fPIC -dynamiclib ext/misc/csv.c -o csv.dylib

(4) Run: ./sqlite3

(5) Within the SQLite command-line shell, do:  .load ./csv

I suspect that the -I. is the option that you need, so that the build
will pick up a proper sqlite3ext.h file, and not whatever sqlite3ext.h
file that Apple has installed.  But that is just my guess.

-- 
D. Richard Hipp
d...@sqlite.org
___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


[sqlite] loading extension csv.c

2020-02-06 Thread chiahui chen
Hi,

After few attempts to load csv extension, (already tried

gcc -arch x86_64 -g -fPIC -dynamiclib csv.c -o csv.dylib

and

gcc  -g -fPIC -dynamiclib csv.c -o csv.dylib
)
Mac terminal returns errors as followings:

csv.c:115:3: error: no member named '__builtin___vsnprintf_chk' in 'struct
sqlite3_api_routines'

  sqlite3_vsnprintf(CSV_MXERR, p->zErr, zFormat, ap);

  ^

/usr/include/sqlite3ext.h:437:53: note: expanded from macro
'sqlite3_vsnprintf'

#define sqlite3_vsnprintf  sqlite3_api->vsnprintf

   ~~~  ^

/usr/include/secure/_stdio.h:75:3: note: expanded from macro 'vsnprintf'

  __builtin___vsnprintf_chk (str, len, 0, __darwin_obsz(str), format, ap)

  ^

csv.c:115:21: warning: incompatible integer to pointer conversion passing
'int' to parameter of type 'const void *' [-Wint-conversion]

  sqlite3_vsnprintf(CSV_MXERR, p->zErr, zFormat, ap);

^

csv.c:67:19: note: expanded from macro 'CSV_MXERR'

#define CSV_MXERR 200

  ^~~

/usr/include/secure/_stdio.h:75:57: note: expanded from macro 'vsnprintf'

  __builtin___vsnprintf_chk (str, len, 0, __darwin_obsz(str), format, ap)

^~~

/usr/include/secure/_common.h:39:54: note: expanded from macro
'__darwin_obsz'

#define __darwin_obsz(object) __builtin_object_size (object,
_USE_FORTIFY_LEVEL > 1 ? 1 : 0)

 ^~

csv.c:568:5: error: use of undeclared identifier 'sqlite3_str'

sqlite3_str *pStr = sqlite3_str_new(0);

^

csv.c:568:18: error: use of undeclared identifier 'pStr'

sqlite3_str *pStr = sqlite3_str_new(0);

 ^

csv.c:568:25: warning: implicit declaration of function 'sqlite3_str_new'
is invalid in C99 [-Wimplicit-function-declaration]

sqlite3_str *pStr = sqlite3_str_new(0);

^

csv.c:571:5: warning: implicit declaration of function
'sqlite3_str_appendf' is invalid in C99 [-Wimplicit-function-declaration]

sqlite3_str_appendf(pStr, "CREATE TABLE x(");

^

csv.c:571:25: error: use of undeclared identifier 'pStr'

sqlite3_str_appendf(pStr, "CREATE TABLE x(");

^

csv.c:581:29: error: use of undeclared identifier 'pStr'

sqlite3_str_appendf(pStr, "%sc%d TEXT", zSep, iCol);

^

csv.c:588:31: error: use of undeclared identifier 'pStr'

  sqlite3_str_appendf(pStr,"%s\"%w\" TEXT", zSep, z);

  ^

csv.c:597:31: error: use of undeclared identifier 'pStr'

  sqlite3_str_appendf(pStr,"%sc%d TEXT", zSep, ++iCol);

  ^

csv.c:603:25: error: use of undeclared identifier 'pStr'

sqlite3_str_appendf(pStr, ")");

^

csv.c:604:18: warning: implicit declaration of function
'sqlite3_str_finish' is invalid in C99 [-Wimplicit-function-declaration]

CSV_SCHEMA = sqlite3_str_finish(pStr);

 ^

csv.c:604:37: error: use of undeclared identifier 'pStr'

CSV_SCHEMA = sqlite3_str_finish(pStr);

^

csv.c:643:27: error: use of undeclared identifier 'SQLITE_VTAB_DIRECTONLY'

  sqlite3_vtab_config(db, SQLITE_VTAB_DIRECTONLY);

  ^

4 warnings and 10 errors generated.

Can someone kindly explain why?
Is there any other step /modification required or even change needed to be
made, prior to compiling or loading an extension in general?

In case there is something I missed while compiling sqlite, here is how I
initially compiled it:

cc -DSQLITE_SOUNDEX -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS5
-DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_RTREE -o sqlite3
shell.c sqlite3.c

Thank you in advance.

Osman
___
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users