From 225bcfb08f7951e076d05ec9c8491968b6be004f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Michael=20B=C3=BCsch?= Date: Sat, 30 Oct 2010 19:36:44 +0000 Subject: [PATCH] Add gpxview SVN-Revision: 23724 --- desktop/apps/gpxview/Makefile | 58 +++ .../gpxview/patches/100-cross-compile.patch | 25 ++ .../patches/200-fix-parallel-build.patch | 30 ++ .../300-remove-gnome-vfs-dependency.patch | 347 ++++++++++++++++++ 4 files changed, 460 insertions(+) create mode 100644 desktop/apps/gpxview/Makefile create mode 100644 desktop/apps/gpxview/patches/100-cross-compile.patch create mode 100644 desktop/apps/gpxview/patches/200-fix-parallel-build.patch create mode 100644 desktop/apps/gpxview/patches/300-remove-gnome-vfs-dependency.patch diff --git a/desktop/apps/gpxview/Makefile b/desktop/apps/gpxview/Makefile new file mode 100644 index 0000000..94b5ba6 --- /dev/null +++ b/desktop/apps/gpxview/Makefile @@ -0,0 +1,58 @@ +# +# Copyright (C) 2010 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=gpxview +PKG_VERSION_BASE:=0.9.1 +PKG_VERSION_SUFFIX:=-1 +PKG_VERSION:=$(PKG_VERSION_BASE)$(PKG_VERSION_SUFFIX) +PKG_RELEASE:=1 + +PKG_SOURCE:=gpxview_$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=http://repository.maemo.org/extras/pool/chinook/free/source/g/gpxview/ +PKG_MD5SUM:=7c29b4cbfb1a54c1abe559c63e0a79db +PKG_INSTALL:=1 +PKG_BUILD_PARALLEL:=1 +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION_BASE) + +include $(INCLUDE_DIR)/package.mk + +define Package/gpxview + SECTION:=xorg-app + CATEGORY:=Xorg + SUBMENU:=app + TITLE:=GPXView Geocaching app + MAINTAINER:=Michael Buesch + URL:=http://www.harbaum.org/till/maemo/index.shtml#gpxview + DEPENDS:=+gpsd +libxml2 +libcurl +libsoup +gtkhtml +gtk2 +libintl +libiconv +endef + +define Package/gpxview/description + GPXView is a viewer for Geocaching.com GPX files and a simple GPS navigation software. +endef + +EXTRA_CFLAGS:= \ + -I$(STAGING_DIR)/usr/lib/libintl/include \ + -I$(STAGING_DIR)/usr/lib/libiconv/include + +EXTRA_LDFLAGS:= \ + -L$(STAGING_DIR)/usr/lib/libintl/lib \ + -L$(STAGING_DIR)/usr/lib/libiconv/lib \ + -Wl,-rpath-link=$(STAGING_DIR)/usr/lib \ + -Wl,-rpath=/usr/lib/ + +MAKE_INSTALL_FLAGS+= \ + bindir="/bin" + +define Package/gpxview/install + $(INSTALL_DIR) $(1)/usr/bin $(1)/usr/share/gpxview + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/gpxview $(1)/usr/bin/ + $(CP) $(PKG_INSTALL_DIR)/usr/share/gpxview $(1)/usr/share/ +endef + +$(eval $(call BuildPackage,gpxview)) diff --git a/desktop/apps/gpxview/patches/100-cross-compile.patch b/desktop/apps/gpxview/patches/100-cross-compile.patch new file mode 100644 index 0000000..63d088d --- /dev/null +++ b/desktop/apps/gpxview/patches/100-cross-compile.patch @@ -0,0 +1,25 @@ +--- + src/Makefile.in | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- gpxview-0.9.1.orig/src/Makefile.in ++++ gpxview-0.9.1/src/Makefile.in +@@ -33,15 +33,15 @@ OBJS = main.o gpx.o goto.o gps.o misc.o + + DEFS = -DVERSION=\"$(VERSION)\" -DPREFIX=\"$(prefix)\" -DICONPATH=\"$(datadir)/$(APP)/\" -DAPP=\"$(APP)\" + CFLAGS = -Wall -O2 $(DEFS) @CFLAGS@ +-LDFLAGS = @LIBS@ -lz ++LDFLAGS = @LDFLAGS@ @LIBS@ -lz + + all: $(APP) + + %.o: %.c Makefile +- gcc $(CFLAGS) -o $@ -c $< ++ $(CC) $(CFLAGS) -o $@ -c $< + + $(APP): $(OBJS) +- gcc -o $@ $(OBJS) $(LDFLAGS) ++ $(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS) + + install: + install -d $(DESTDIR)$(prefix)$(bindir) diff --git a/desktop/apps/gpxview/patches/200-fix-parallel-build.patch b/desktop/apps/gpxview/patches/200-fix-parallel-build.patch new file mode 100644 index 0000000..377329a --- /dev/null +++ b/desktop/apps/gpxview/patches/200-fix-parallel-build.patch @@ -0,0 +1,30 @@ +--- + Makefile.in | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +--- gpxview-0.9.1.orig/Makefile.in ++++ gpxview-0.9.1/Makefile.in +@@ -20,17 +20,17 @@ APP = @PACKAGE@ + VERSION = $${VERSION_PREFIX}@PACKAGE_VERSION@$${VERSION_SUFFIX} + + all: +- cd src && make +- cd data && make ++ $(MAKE) -C src ++ $(MAKE) -C data + + install: +- cd src && make install +- cd data && make install ++ $(MAKE) -C src install ++ $(MAKE) -C data install + + clean: + rm -f *~ \#*\# *.bak *-stamp +- cd src && make clean +- cd data && make clean ++ $(MAKE) -C src clean ++ $(MAKE) -C data clean + + distclean: clean + rm -f Makefile src/Makefile data/Makefile config.log config.status diff --git a/desktop/apps/gpxview/patches/300-remove-gnome-vfs-dependency.patch b/desktop/apps/gpxview/patches/300-remove-gnome-vfs-dependency.patch new file mode 100644 index 0000000..8cd40e6 --- /dev/null +++ b/desktop/apps/gpxview/patches/300-remove-gnome-vfs-dependency.patch @@ -0,0 +1,347 @@ +--- + configure | 6 ++++ + src/gps.c | 74 +++++++++++++++++++++++++++++++++++++++------------------- + src/gps.h | 3 -- + src/gpx.c | 31 +++++++++++------------- + src/gpxview.h | 3 -- + src/html.c | 15 +++++++---- + src/main.c | 5 --- + src/misc.c | 5 --- + 8 files changed, 83 insertions(+), 59 deletions(-) + +--- gpxview-0.9.1.orig/src/main.c ++++ gpxview-0.9.1/src/main.c +@@ -2058,7 +2058,6 @@ void cleanup(appdata_t *appdata) { + if(appdata->tools_menu) submenu_cleanup(appdata->tools_menu); + #endif + +- gnome_vfs_shutdown(); + icons_free(); + gps_release(appdata); + +@@ -2398,10 +2397,6 @@ int main(int argc, char *argv[]) { + + icons_init(); + +- if(!gnome_vfs_init()) { +- g_error("Gnome VFS init failed\n"); +- } +- + #ifdef USE_MAEMO + /* Create the hildon program and setup the title */ + appdata.program = HILDON_PROGRAM(hildon_program_get_instance()); +--- gpxview-0.9.1.orig/src/misc.c ++++ gpxview-0.9.1/src/misc.c +@@ -1036,12 +1036,9 @@ void dist_entry_set(GtkWidget *widget, f + + #ifndef USE_MAEMO + #ifdef ENABLE_BROWSER_INTERFACE +-#include + + int browser_url(appdata_t *appdata, char *url) { +- /* taken from gnome-open, part of libgnome */ +- GError *err = NULL; +- gnome_url_show(url, &err); ++ printf("GPXView WARNING: browser_url() not implemented\n"); + return 0; + } + #endif +--- gpxview-0.9.1.orig/src/gpxview.h ++++ gpxview-0.9.1/src/gpxview.h +@@ -79,9 +79,6 @@ + #include + #include + +-#include +-#include +- + /* all include appdata_t relies on go here ... */ + #include "gpx.h" + #include "settings.h" +--- gpxview-0.9.1.orig/src/html.c ++++ gpxview-0.9.1/src/html.c +@@ -87,15 +87,19 @@ void release_load_context(GThread *self, + gpointer loader_thread(gpointer data) { + GThread *self = g_thread_self(); + +- GnomeVFSResult result; +- GnomeVFSHandle *handle; +- char buffer[4096]; +- GnomeVFSFileSize bytes_read; ++// GnomeVFSResult result; ++// GnomeVFSHandle *handle; ++// char buffer[4096]; ++// GnomeVFSFileSize bytes_read; + + load_context_t *context = (load_context_t*)data; + + printf("%p: loader thread for %s running\n", self, context->url); ++ printf("GPXView WARNING: Function not implemented\n"); ++ release_load_context(self, context); ++ return NULL; + ++#if 0 + result = gnome_vfs_open(&handle, context->url, GNOME_VFS_OPEN_READ); + if(result != GNOME_VFS_OK) { + g_print("%p: open error: %s\n", self, gnome_vfs_result_to_string(result)); +@@ -143,6 +147,7 @@ gpointer loader_thread(gpointer data) { + printf("%p: loader thread successfully finished\n", self); + release_load_context(self, context); + return NULL; ++#endif + } + + #ifdef ENABLE_BROWSER_INTERFACE +@@ -175,7 +180,7 @@ static void on_link_clicked(GtkHTML *htm + static void on_request_url(GtkHTML *html, const gchar *url, + GtkHTMLStream *stream, gpointer data) { + char buffer[4096]; +- GnomeVFSFileSize bytes_read; ++ ssize_t bytes_read; + + http_context_t *context = (http_context_t*)data; + +--- gpxview-0.9.1.orig/src/gpx.c ++++ gpxview-0.9.1/src/gpx.c +@@ -21,6 +21,8 @@ + #include + #include + #include ++#include ++#include + + #include + #include +@@ -1262,10 +1264,8 @@ gpx_t *gpx_parse(gpx_dialog_t *dialog, c + + /* scan entire directory */ + gpx_t *gpx_parse_dir(gpx_dialog_t *dialog, char *dirname, char *username) { +- GnomeVFSResult result; +- GnomeVFSDirectoryHandle *handle; +- GnomeVFSFileInfo *finfo = gnome_vfs_file_info_new();; +- ++ DIR *dir; ++ struct dirent dirent_buf, *dirent; + gpx_t *gpx = NULL; + + /* show busy dialog */ +@@ -1274,27 +1274,27 @@ gpx_t *gpx_parse_dir(gpx_dialog_t *dialo + + LIBXML_TEST_VERSION; + +- result = gnome_vfs_directory_open(&handle, dirname, +- GNOME_VFS_FILE_INFO_DEFAULT); +- +- if(result != GNOME_VFS_OK) { ++ dir = opendir(dirname); ++ if (!dir) { + errorf("Unable to open directory \"%s\":\n%s", +- dirname, gnome_vfs_result_to_string(result)); ++ dirname, strerror(errno)); + return NULL; + } + +- while(GNOME_VFS_OK == gnome_vfs_directory_read_next(handle, finfo)) { +- if(finfo->type == GNOME_VFS_FILE_TYPE_REGULAR) { +- char *ext = finfo->name+strlen(finfo->name)-4; ++ while (readdir_r(dir, &dirent_buf, &dirent) == 0) { ++ if (dirent->d_type == DT_REG) { ++ if (strlen(dirent->d_name) <= 4) ++ continue; ++ char *ext = dirent->d_name+strlen(dirent->d_name)-4; + + /* check if file ends with .gpx or .loc */ + if((strcasecmp(ext, ".gpx") == 0) || (strcasecmp(ext, ".loc") == 0)) { +- char *filename = malloc(strlen(dirname)+strlen(finfo->name)+2); ++ char *filename = malloc(strlen(dirname)+strlen(dirent->d_name)+2); + + strcpy(filename, dirname); + if(strlastchr(filename) != '/') + strcat(filename, "/"); +- strcat(filename, finfo->name); ++ strcat(filename, dirent->d_name); + + xmlTextReaderPtr reader = xmlReaderForFile(filename, NULL, 0); + if (reader != NULL) { +@@ -1328,8 +1328,7 @@ gpx_t *gpx_parse_dir(gpx_dialog_t *dialo + gpx->name = strdup(n); + } + +- gnome_vfs_file_info_unref(finfo); +- gnome_vfs_directory_close(handle); ++ closedir(dir); + + return gpx; + } +--- gpxview-0.9.1.orig/src/gps.c ++++ gpxview-0.9.1/src/gps.c +@@ -20,6 +20,11 @@ + #include + #include + #include ++#include ++#include ++#include ++#include ++#include + + #include "gpxview.h" + +@@ -112,7 +117,11 @@ float gps_get_eph(appdata_t *appdata) { + } + + static int gps_connect(gps_state_t *gps_state) { +- GnomeVFSResult vfs_result; ++ struct hostent hbuf, *h; ++ struct sockaddr_in addr; ++ struct timeval timeout; ++ char buffer[2048]; ++ int err; + #ifdef USE_MAEMO + char errstr[256] = ""; + +@@ -138,10 +147,8 @@ static int gps_connect(gps_state_t *gps_ + /* Create a socket to interact with GPSD. */ + + int retries = 5; +- while(retries && +- (GNOME_VFS_OK != (vfs_result = gnome_vfs_inet_connection_create( +- &gps_state->iconn, GPSD_HOST, GPSD_PORT, NULL)))) { +- printf("gps: Error creating connection to GPSD, retrying ...\n"); ++ while(retries && ((gps_state->socket = socket(AF_INET, SOCK_STREAM, 0)) < 0)) { ++ printf("gps: Error creating GPSD socket, retrying ...\n"); + + retries--; + sleep(1); +@@ -153,9 +160,8 @@ static int gps_connect(gps_state_t *gps_ + } + + retries = 5; +- while(retries && ((gps_state->socket = +- gnome_vfs_inet_connection_to_socket(gps_state->iconn)) == NULL)) { +- printf("gps: Error creating connecting GPSD socket, retrying ...\n"); ++ while(retries && gethostbyname_r(GPSD_HOST, &hbuf, buffer, sizeof(buffer), &h, &err)) { ++ printf("gps: Error resolving GPSD hostname, retrying ...\n"); + + retries--; + sleep(1); +@@ -166,10 +172,34 @@ static int gps_connect(gps_state_t *gps_ + return -1; + } + +- GTimeVal timeout = { 10, 0 }; +- if(GNOME_VFS_OK != (vfs_result = gnome_vfs_socket_set_timeout( +- gps_state->socket, &timeout, NULL))) { +- printf("gps: Error setting GPSD timeout\n"); ++ memset(&addr, 0, sizeof(addr)); ++ addr.sin_family = AF_INET; ++ memcpy(&addr.sin_addr.s_addr, h->h_addr, h->h_length); ++ addr.sin_port = htons(GPSD_PORT); ++ ++ retries = 5; ++ while(retries && (connect(gps_state->socket, (struct sockaddr *)&addr, sizeof(addr)) < 0)) { ++ printf("gps: Error connecting to GPSD, retrying ...\n"); ++ ++ retries--; ++ sleep(1); ++ } ++ ++ if(!retries) { ++ printf("gps: Finally failed ...\n"); ++ return -1; ++ } ++ ++ timeout.tv_sec = 10; ++ timeout.tv_usec = 0; ++ if(setsockopt(gps_state->socket, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)) < 0) { ++ printf("gps: Error setting GPSD send timeout\n"); ++ return -1; ++ } ++ timeout.tv_sec = 10; ++ timeout.tv_usec = 0; ++ if(setsockopt(gps_state->socket, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)) < 0) { ++ printf("gps: Error setting GPSD receive timeout\n"); + return -1; + } + +@@ -358,8 +388,7 @@ static gboolean gps_idle_cb(gpointer dat + } + + gpointer gps_thread(gpointer data) { +- GnomeVFSFileSize bytes_read; +- GnomeVFSResult vfs_result; ++ ssize_t bytes; + char str[512]; + appdata_t *appdata = (appdata_t*)data; + int cnt=1000; +@@ -384,21 +413,18 @@ gpointer gps_thread(gpointer data) { + const char *msg; + if(!cnt) msg = msg_sat; + else msg = msg_pos; +- +- if(GNOME_VFS_OK == +- (vfs_result = gnome_vfs_socket_write(appdata->gps_state->socket, +- msg, strlen(msg)+1, &bytes_read, NULL))) { ++ ++ if ((bytes = write(appdata->gps_state->socket, msg, strlen(msg)+1)) > 0) { + + /* update every second, wait here to make sure a complete */ + /* reply is received */ + if(cnt <= 1) usleep(500000); + else sleep(1); + +- if(bytes_read == (strlen(msg)+1)) { +- vfs_result = gnome_vfs_socket_read(appdata->gps_state->socket, +- str, sizeof(str)-1, &bytes_read, NULL); +- if(vfs_result == GNOME_VFS_OK) { +- str[bytes_read] = 0; ++ if(bytes == (strlen(msg)+1)) { ++ bytes = read(appdata->gps_state->socket, str, sizeof(str)-1); ++ if (bytes > 0) { ++ str[bytes] = 0; + + // printf("gps: msg: %s (%d)\n", str, strlen(str)); + +@@ -419,7 +445,7 @@ gpointer gps_thread(gpointer data) { + } else { + if(connected) { + printf("gps: stopping GPS connection due to user request\n"); +- gnome_vfs_inet_connection_destroy(appdata->gps_state->iconn, NULL); ++ close(appdata->gps_state->socket); + + #ifdef USE_MAEMO + gpsbt_stop(&appdata->gps_state->context); +--- gpxview-0.9.1.orig/src/gps.h ++++ gpxview-0.9.1/src/gps.h +@@ -111,8 +111,7 @@ typedef struct gps_state { + + GThread* thread_p; + GMutex *mutex; +- GnomeVFSInetConnection *iconn; +- GnomeVFSSocket *socket; ++ int socket; + + struct gps_data_t gpsdata; + #else +--- gpxview-0.9.1.orig/configure ++++ gpxview-0.9.1/configure +@@ -3156,6 +3156,9 @@ fi + + + ++pkg_failed=no ++pkg_cv_gnome_vfs_module_CFLAGS= ++pkg_cv_gnome_vfs_module_LIBS= + if test $pkg_failed = yes; then + + if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then +@@ -4699,6 +4702,9 @@ fi + + + ++pkg_failed=no ++pkg_cv_gnome2_CFLAGS= ++pkg_cv_gnome2_LIBS= + if test $pkg_failed = yes; then + + if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then -- 2.30.2