SQLite-Paket für Freetz erstellen

dogge101

Gesperrt
Mitglied seit
24 Jun 2009
Beiträge
234
Punkte für Reaktionen
0
Punkte
0
Ich versuche mich gerade an diesem Paket. Habe dazu ein paar Fragen.

  1. Soll ich das paket nach make/sqlite3/ oder nach make/libs/sqlite3/ packen?
  2. Kann ich in einer sqlite3/sqlite3.mk Datei das Binary und die Bibliotheken packen?
 
Meiner Meinung nach pflegst du am besten die libs und das Binary einzeln ein. Dann nämlich können andere Apps vllt. irgendwann einmal die Bibliotheken davon mit nutzen, ohne dass sie noch einmal eingebaut werden, denn dann wird schlicht eine Dependency gesetzt, und gut ist.
 
Also, einmal in make/sqlite/ und die Bibliotheken in make/libs/. Macht Sinn.
 
Hi.
Schau mal in make/curl/curl.mk. Da ist auch Binary und Lib kombiniert.

MfG Oliver
 
Ah. Danke.

Das Binary kompiliert schon mal :)
 
Wenn ich jetzt 'make menuconfig' aufrufe, bekomme ich folgende Meldung:

Code:
freetz@freetz-linux:~/freetz-trunk$ make menuconfig
make/sqlite/Config.in:3:warning: 'select' used by config symbol 'FREETZ_PACKAGE_SQLITE' refer to undefined symbol 'FREETZ_LIB_libsqlite'
#
# using defaults found in .config
#
make: *** [menuconfig] Fehler 1

freetz@freetz-linux:~/freetz-trunk$

Wo ist der Fehler?

Anbei noch ein 'svn diff make/{sqlite,Config.in}':
Code:
Index: make/sqlite/Makefile.in
===================================================================
--- make/sqlite/Makefile.in     (Revision 0)
+++ make/sqlite/Makefile.in     (Revision 0)
@@ -0,0 +1,3 @@
+ifeq ($(strip $(FREETZ_PACKAGE_SQLITE)),y)
+PACKAGES+=sqlite
+endif
Index: make/sqlite/sqlite.mk
===================================================================
--- make/sqlite/sqlite.mk       (Revision 0)
+++ make/sqlite/sqlite.mk       (Revision 0)
@@ -0,0 +1,59 @@
+$(call PKG_INIT_BIN, 3.6.16)
+$(PKG)_LIB_VERSION:=0.8.6
+$(PKG)_SOURCE:=$(pkg)-$($(PKG)_VERSION).tar.gz
+$(PKG)_SITE:=http://www.sqlite.org
+$(PKG)_BINARY:=$($(PKG)_DIR)/.libs/sqlite3
+$(PKG)_TARGET_BINARY:=$($(PKG)_DEST_DIR)/usr/bin/sqlite3
+$(PKG)_LIB_BINARY:=$($(PKG)_DIR)/lib/.libs/libsqlite3.so.$($(PKG)_LIB_VERSION)
+$(PKG)_LIB_STAGING_BINARY:=$(TARGET_TOOLCHAIN_STAGING_DIR)/usr/lib/libsqlite3.so.$($(PKG)_LIB_VERSION)
+$(PKG)_LIB_TARGET_BINARY:=root/usr/lib/libsqlite3.so.$($(PKG)_LIB_VERSION)
+
+$(PKG)_CONFIGURE_OPTIONS += --enable-shared
+$(PKG)_CONFIGURE_OPTIONS += --enable-static
+$(PKG)_CONFIGURE_OPTIONS += --disable-readline
+$(PKG)_CONFIGURE_OPTIONS += LIBS="-lpthread"
+
+
+$(PKG_SOURCE_DOWNLOAD)
+$(PKG_UNPACKED)
+$(PKG_CONFIGURED_CONFIGURE)
+
+$($(PKG)_BINARY): $($(PKG)_DIR)/.configured
+       PATH="$(TARGET_PATH)" \
+               $(MAKE) -C $(SQLITE_DIR) \
+               CC="$(TARGET_CC)" \
+               CFLAGS="$(TARGET_CFLAGS)"
+
+$($(PKG)_LIB_STAGING_BINARY): $($(PKG)_LIB_BINARY)
+       PATH=$(TARGET_PATH) \
+               $(MAKE) -C $(CURL_DIR) \
+               DESTDIR="$(TARGET_TOOLCHAIN_STAGING_DIR)" \
+               install
+       $(PKG_FIX_LIBTOOL_LA) \
+               $(TARGET_TOOLCHAIN_STAGING_DIR)/usr/lib/pkgconfig/sqlite3.pc \
+               $(TARGET_TOOLCHAIN_STAGING_DIR)/usr/lib/libsqlite3.la
+
+$($(PKG)_TARGET_BINARY): $($(PKG)_BINARY)
+       $(INSTALL_BINARY_STRIP)
+
+$($(PKG)_LIB_TARGET_BINARY): $($(PKG)_LIB_STAGING_BINARY)
+       mkdir -p $(dir $@)
+       cp -a $(TARGET_TOOLCHAIN_STAGING_DIR)/usr/lib/libsqlite3*.so* root/usr/lib
+       $(TARGET_STRIP) $@
+
+$(pkg):
+
+$(pkg)-precompiled: $($(PKG)_TARGET_BINARY)
+
+$(pkg)-clean:
+       -$(MAKE) -C $(SQLITE_DIR) clean
+       $(RM) -r $(TARGET_TOOLCHAIN_STAGING_DIR)/usr/lib/libsqlite3* \
+               $(TARGET_TOOLCHAIN_STAGING_DIR)/lib/pkgconfig/sqlite3.pc \
+               $(TARGET_TOOLCHAIN_STAGING_DIR)/usr/include/sqlite \
+               $(TARGET_TOOLCHAIN_STAGING_DIR)/usr/bin/sqlite3*
+
+$(pkg)-uninstall:
+       $(RM) $(SQLITE_TARGET_BINARY)
+       $(RM) root/usr/lib/libsqlite3*.so*
+
+$(PKG_FINISH)
Index: make/sqlite/Config.in
===================================================================
--- make/sqlite/Config.in       (Revision 0)
+++ make/sqlite/Config.in       (Revision 0)
@@ -0,0 +1,7 @@
+config FREETZ_PACKAGE_SQLITE
+       bool "SQLite (v3.x) database engine (CLI)"
+       select FREETZ_LIB_libsqlite
+       default n
+       help
+               SQLite is a small C library that implements a self-contained, embeddable,
+               zero-configuration SQL database engine.
Index: make/Config.in
===================================================================
--- make/Config.in      (Revision 3483)
+++ make/Config.in      (Arbeitskopie)
@@ -73,6 +73,7 @@
 endmenu
 
 menu "Testing"
+source make/sqlite/Config.in
 source make/apache/Config.in
 source make/bash/Config.in
 source make/bfusb/Config.in
 
Code:
make/sqlite/Config.in:3:warning: 'select' used by config symbol 'FREETZ_PACKAGE_SQLITE' refer to undefined symbol 'FREETZ_LIB_libsqlite'

Die Meldung ist doch schon relativ deutlich?
Wo hast Du denn 'FREETZ_LIB_libsqlite' definiert? Entweder gar nicht, oder in einer Datei, die nicht mit eingelesen wird.

Die Trennung in Library und Binary ist sinnvoll, wenn nicht jeder das Binary braucht. Du mußt dann aber auch irgendwo die Config-Option für die Library definieren.
 
Ich möchte das Binary und die Bibliothek aber nicht trennen. Deshalb hab ich make/curl/curl.mk als Template genommen. So wie mir Olli den Tipp gegeben hat.

Bearbeitet: Ok. Ein Bug gefunden. Der Kompilierprozess geht jetzt schon weiter :)
 
Zuletzt bearbeitet:
Es ist geschafft :) Mein erstes Programm (SQLite) ist für Freetz kompiliert.

Ich hänge mal den Patch an. Schaut doch mal drüber was man noch verbessern könnte.

Bearbeitet: Hmm, warum wird nicht das Prefix /usr verwendet? Stattdessen wird in $(TARGET_TOOLCHAIN_STAGING_DIR)/bin/sqlite3 installiert :(
 

Anhänge

  • sqlite.diff.txt
    3.6 KB · Aufrufe: 24
Zuletzt bearbeitet:
Hi.
Das sieht schon sehr gut aus. Bis auf 2 Sachen. :)
Code:
$(PKG)_CONFIGURE_OPTIONS += --disable-readline
Ich hab das jetzt nicht auf der Box probiert. Ist das auch ohne curses bedienbar?
Code:
$(PKG)_CONFIGURE_OPTIONS += LIBS="-lpthread"
Brauchst du das? Bei mir funktioniert es auch ohne diese Zeile.

Bei mir ist /usr ein Symlink auf ./

MfG Oliver
 
Grr. Jetzt funktioniert es nicht mehr :(

Wenn ich den Patch aus dem Anhang mit 'patch -p0 < sqlite.diff.txt' anwende und dann 'make menuconfig' auswähle und Bin auswähle erhalte ich bei einem 'grep sqlite .config' nur folgendes:

Code:
freetz@freetz-linux:~/freetz$ grep sqlite .config
FREETZ_LIB_libsqlite=y
freetz@freetz-linux:~/freetz$

In menuconfig wurde aber auch das Bin unter Testing ausgewählt. Was kann ich jetzt machen?
 
Danke. Manchmal sieht mal den Wald vor lauter Bäumen nicht mehr :)

Weniger gut ist, dass das source/sqlite-3.6.16/.libs/sqlite3 Binary immer noch nicht nach root/usr/bin/sqlite3 kopiert wird. In build/modified/filesystem/usr/bin/sqlite3 ist es drin.
 
Zuletzt bearbeitet:
Das passt schon alles so wie es ist. Kannst du bitte meine Fragen beantworten?

MfG Oliver
 
Echt? Gut, dann werde ich das mal auf der Box testen.
 
Ich gebe mich geschalgen.

AVM hat schon eine eigene SQLite (3.6.13) Lib für den Mediaserver drin. Leider ohne SQLite CLI. Der Quellcode wurde laut olistudent von AVM nicht veröffentlicht.

Olistudent meinte, man könne die AVM SQLite ersetzen. Das ist mir zu viel Aufwand und da kenne ich mich auch nicht aus. Fraglich ist dann natürlich, ob der mediaserver noch laufen würde.

Ich gebe an dieser Stelle auf. Wer will und genug Zeit hat, kann sich ja daran versuchen. Den Patch findet ihr als Anhang in Beitrag Nr. 9 in diesem Thread.
 
Ich checke das mal ein. Dann kann man immer noch schauen was man mit der libsqlite von AVM macht. Ich hab grad gesehen, dass die einen anderen Namen hat. Daher sollte es nicht zu Konflikten kommen.

Mfg Oliver

edit: http://trac.freetz.org/changeset/3489
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.