Re: Include SQLite3 source upon buildworld

From: Archimedes Gaviola <archimedes.gaviola_at_gmail.com>
Date: Sat, 26 Nov 2022 16:26:40 UTC
On Sat, Nov 26, 2022 at 5:24 PM Archimedes Gaviola <
archimedes.gaviola@gmail.com> wrote:

>
>
> On Wed, Nov 16, 2022 at 10:06 AM Archimedes Gaviola <
> archimedes.gaviola@gmail.com> wrote:
>
>>
>>
>> On Wed, Nov 16, 2022 at 1:48 AM Xin LI <delphij@gmail.com> wrote:
>>
>>>
>>>
>>> On Tue, Nov 15, 2022 at 5:16 AM Archimedes Gaviola <
>>> archimedes.gaviola@gmail.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> There's an SQLite3 source located in the /usr/src/contrib/sqlite3. Is
>>>> there a way to include this upon buildworld so that I can run the binary
>>>> after compiling?
>>>>
>>>
>> Hi Xin Li,
>>
>>
>>> Yes and no.
>>>
>>> Yes -- you can always compile shell.c source and link against the
>>> library; the code is there, just the BSD make build glues are missing.
>>>
>>
>> Okay, nice! I'm so glad that it can be done. My goal is to make SQLite3
>> be part of the base system in a customized FreeBSD build to make it
>> embedded. I am checking the version and it's updated 3.93.3 as I'm using
>> the 14.0-CURRENT. I need to figure-out this BSD make and glues you've
>> mentioned to make this happen.
>>
>> No -- the omission is intentional: the library is meant to be used by the
>>> base system as a "private library", which gives us the flexibility to not
>>> give a stable API/ABI promise and to only build with options that the base
>>> system needed (to reduce attack surface), so that when we make an update,
>>> it will be a "wholesale" update and user applications are not broken, even
>>> if sqlite3 update have introduced one.  Users who want sqlite3 should
>>> really install it from ports (databases/sqlite3) or package.
>>>
>>
>> Oh I see, now I know its purpose. Currently, I have my system installed
>> with SQLite3 via package install 'pkg install sqlite3' and it works very
>> well but because this time I want something embeddable. It so happened that
>> I was checking the source and surprisingly found sqlite3. Anyway, let me
>> explore and try.
>>
>> Thanks and best regards,
>> Archimedes
>>
>
> Hi Xin LI,
>
> I added the new sqlite3 folder in the /usr/src/usr.bin/sqlite3 with the
> Makefile file as content and then reference the /usr/src/contrib/sqlite3
> directory as source.
>
> root@generic:/usr/src/usr.bin/sqlite3 # ls -la
> total 16
> drwxr-xr-x    2 root  wheel   512 Nov 26 12:46 .
> drwxr-xr-x  279 root  wheel  5120 Nov 26 12:46 ..
> -rw-r--r--    1 root  wheel   295 Nov 26 16:50 Makefile
>
> root@generic:/usr/src/usr.bin/sqlite3 # cat Makefile
> # $FreeBSD$
>
> .include <src.opts.mk>
>
> SQLITE= ${SRCTOP}/contrib/sqlite3
> .PATH:  ${SQLITE}
>
> PROG= sqlite3
> MK_MAN=no
> SRCS= sqlite3.c
> INCS= shell.c sqlite3.h
>
> WARNS?= 3
> CFLAGS+=        -I${SQLITE} \
>                 -DSQLITE_THREADSAFE=0 \
>                 -DSQLITE_OMIT_LOAD_EXTENSION
>
> .include <bsd.prog.mk>
>
> and perform the 'make' command. However, I encountered this error -> ld:
> error: undefined symbol: main as referenced to the crt1_c.c:72
> (/usr/src/lib/csu/aarch64/crt1_c.c:72) file.
>
> root@generic:/usr/src/usr.bin/sqlite3 # make
> cc  -O2 -pipe -fno-common -I/usr/src/contrib/sqlite3
>  -DSQLITE_THREADSAFE=1  -DSQLITE_OMIT_LOAD_EXTENSION   -fPIE -g -gz=zlib
> -MD  -MF.depend.sqlite3.o -MTsqlite3.o -std=gnu99 -Wno-format-zero-length
> -fstack-protector-strong -Wsystem-headers -Werror -Wall -Wno-format-y2k -W
> -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes
> -Wpointer-arith -Wno-uninitialized -Wno-pointer-sign -Wno-empty-body
> -Wno-string-plus-int -Wno-unused-const-variable
> -Wno-error=unused-but-set-variable -Wno-tautological-compare
> -Wno-unused-value -Wno-parentheses-equality -Wno-unused-function
> -Wno-enum-conversion -Wno-unused-local-typedef
> -Wno-address-of-packed-member  -Qunused-arguments    -c
> /usr/src/contrib/sqlite3/sqlite3.c -o sqlite3.o
> cc -O2 -pipe -fno-common -I/usr/src/contrib/sqlite3 -DSQLITE_THREADSAFE=1
> -DSQLITE_OMIT_LOAD_EXTENSION -fPIE -g -gz=zlib -std=gnu99
> -Wno-format-zero-length -fstack-protector-strong -Wsystem-headers -Werror
> -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes
> -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Wno-pointer-sign
> -Wno-empty-body -Wno-string-plus-int -Wno-unused-const-variable
> -Wno-error=unused-but-set-variable -Wno-tautological-compare
> -Wno-unused-value -Wno-parentheses-equality -Wno-unused-function
> -Wno-enum-conversion -Wno-unused-local-typedef
> -Wno-address-of-packed-member -Qunused-arguments  -Wl,-zrelro -pie   -o
> sqlite3.full sqlite3.o  -L/usr/obj/usr/src/arm64.aarch64/lib/libthr
> -lpthread
> ld: error: undefined symbol: main
> >>> referenced by crt1_c.c:72 (/usr/src/lib/csu/aarch64/crt1_c.c:72)
> >>>               /usr/lib/Scrt1.o:(__start)
> cc: error: linker command failed with exit code 1 (use -v to see
> invocation)
> *** Error code 1
>
> Stop.
> make: stopped in /usr/src/usr.bin/sqlite3
>
> Not sure if I missed something or if something goes wrong with my Makefile
> content construction. I basically followed from here
> https://www.sqlite.org/howtocompile.html and then proved the source to
> compile successfully.
>
> root@generic:/usr/src/contrib/sqlite3 # pwd
> /usr/src/contrib/sqlite3
> root@generic:/usr/src/contrib/sqlite3 # ls -lah
> total 11364
> drwxr-xr-x   3 root  wheel   1.0K Oct 27 08:06 .
> drwxr-xr-x  89 root  wheel   2.0K Nov 26 13:01 ..
> -rw-r--r--   1 root  wheel    15K Oct 27 08:06 INSTALL
> -rw-r--r--   1 root  wheel   729B Oct 27 08:06 Makefile.am
> -rw-r--r--   1 root  wheel   547B Oct 27 08:06 Makefile.fallback
> -rw-r--r--   1 root  wheel    37K Oct 27 08:06 Makefile.in
> -rw-r--r--   1 root  wheel    28K Oct 27 08:06 Makefile.msc
> -rw-r--r--   1 root  wheel   3.5K Oct 27 08:06 README.txt
> -rw-r--r--   1 root  wheel   7.1K Oct 27 08:06 Replace.cs
> -rw-r--r--   1 root  wheel   365K Oct 27 08:06 aclocal.m4
> -rwxr-xr-x   1 root  wheel   7.2K Oct 27 08:06 compile
> -rwxr-xr-x   1 root  wheel    48K Oct 27 08:06 config.guess
> -rwxr-xr-x   1 root  wheel    35K Oct 27 08:06 config.sub
> -rwxr-xr-x   1 root  wheel   485K Oct 27 08:06 configure
> -rw-r--r--   1 root  wheel   8.5K Oct 27 08:06 configure.ac
> -rwxr-xr-x   1 root  wheel    23K Oct 27 08:06 depcomp
> -rwxr-xr-x   1 root  wheel    15K Oct 27 08:06 install-sh
> -rwxr-xr-x   1 root  wheel   320K Oct 27 08:06 ltmain.sh
> -rwxr-xr-x   1 root  wheel   6.7K Oct 27 08:06 missing
> -rw-r--r--   1 root  wheel   717K Oct 27 08:06 shell.c
> -rw-r--r--   1 root  wheel   8.7K Oct 27 08:06 sqlite3.1
> -rw-r--r--   1 root  wheel   8.2M Oct 27 08:06 sqlite3.c
> -rw-r--r--   1 root  wheel   599K Oct 27 08:06 sqlite3.h
> -rw-r--r--   1 root  wheel   267B Oct 27 08:06 sqlite3.pc.in
> -rw-r--r--   1 root  wheel   1.9K Oct 27 08:06 sqlite3.rc
> -rw-r--r--   1 root  wheel    36K Oct 27 08:06 sqlite3ext.h
> -rw-r--r--   1 root  wheel    78B Oct 27 08:06 sqlite3rc.h
> drwxr-xr-x   6 root  wheel   512B Oct 27 08:06 tea
>
> root@generic:/usr/src/contrib/sqlite3 # cc -DSQLITE_THREADSAFE=0
> -DSQLITE_OMIT_LOAD_EXTENSION shell.c sqlite3.c -o sqlite3
>
> I've manually invoked the first compilation command inside the sqlite3
> source directory and it works just fine as seen below.
>
> root@generic:/usr/src/contrib/sqlite3 # cc  -O2 -pipe -fno-common
> -I/usr/src/contrib/sqlite3  -DSQLITE_THREADSAFE=0
>  -DSQLITE_OMIT_LOAD_EXTENSION -fPIE -g -gz=zlib -MD  -MF.depend.sqlite3.o
> -MTsqlite3.o -std=gnu99 -Wno-format-zero-length -fstack-protector-strong
> -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter
> -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized
> -Wno-pointer-sign -Wno-empty-body -Wno-string-plus-int
> -Wno-unused-const-variable -Wno-error=unused-but-set-variable
> -Wno-tautological-compare -Wno-unused-value -Wno-parentheses-equality
> -Wno-unused-function -Wno-enum-conversion -Wno-unused-local-typedef
> -Wno-address-of-packed-member  -Qunused-arguments -c
> /usr/src/contrib/sqlite3/sqlite3.c -o sqlite3.o
>
> The second compilation command below seems to break even when compiled
> manually.
>
> cc -O2 -pipe -fno-common -I/usr/src/contrib/sqlite3 -DSQLITE_THREADSAFE=1
> -DSQLITE_OMIT_LOAD_EXTENSION -fPIE -g -gz=zlib -std=gnu99
> -Wno-format-zero-length -fstack-protector-strong -Wsystem-headers -Werror
> -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes
> -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized -Wno-pointer-sign
> -Wno-empty-body -Wno-string-plus-int -Wno-unused-const-variable
> -Wno-error=unused-but-set-variable -Wno-tautological-compare
> -Wno-unused-value -Wno-parentheses-equality -Wno-unused-function
> -Wno-enum-conversion -Wno-unused-local-typedef
> -Wno-address-of-packed-member -Qunused-arguments  -Wl,-zrelro -pie   -o
> sqlite3.full sqlite3.o  -L/usr/obj/usr/src/arm64.aarch64/lib/libthr
> -lpthread
> ld: error: undefined symbol: main
> >>> referenced by crt1_c.c:72 (/usr/src/lib/csu/aarch64/crt1_c.c:72)
> >>>               /usr/lib/Scrt1.o:(__start)
> cc: error: linker command failed with exit code 1 (use -v to see
> invocation)
> *** Error code 1
>
> Stop.
> make: stopped in /usr/src/usr.bin/sqlite3
>
> Just want to solicit if you have an idea of this particular problem or you
> might have encountered this problem before?
>
> Thanks and best regards,
> Archimedes
>

Hi Xin Li,

Kindly ignore my query as it has been resolved as I've posted recently here
https://lists.freebsd.org/archives/freebsd-current/2022-November/002905.html
.

Thanks and best regards,
Archimedes


>
>
>
>
>
>
>
>
>>
>>
>