Source: garmin-forerunner-tools Severity: normal Tags: patch User: [email protected] Usertags: ppc64el
Dear Maintainer, Although the package builds with no errors on ppc64el, it does not create the *.so files. That, for instance, blocks garmin-plugin build. In order to make it work, an autoreconf is needed. Thus, in the patch attached, autoreconf is being enabled, but in order to do so, it was necessary to add the directory python to the source tree. That directory was pulled from the svn repository of garmin-forerunner-tools project. Thanks and regards. -- System Information: Debian Release: jessie/sid APT prefers unstable APT policy: (500, 'unstable') Architecture: ppc64el (ppc64le) Kernel: Linux 3.16-trunk-powerpc64le (SMP w/32 CPU cores) Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968) Shell: /bin/sh linked to /bin/dash
diff -Nru garmin-forerunner-tools-0.10repacked/debian/changelog garmin-forerunner-tools-0.10repacked/debian/changelog --- garmin-forerunner-tools-0.10repacked/debian/changelog 2013-08-26 19:07:59.000000000 +0000 +++ garmin-forerunner-tools-0.10repacked/debian/changelog 2014-09-10 13:15:06.000000000 +0000 @@ -1,3 +1,12 @@ +garmin-forerunner-tools (0.10repacked-4ppc64el1) UNRELEASED; urgency=medium + + * debian/rules: added dh_autoreconf and dh_autoreconf_clean + * debian/control: replaced autotools-dev by dh-autoreconf + * patch python_dir_from_upstream: creates a directory python, needed when + running autoreconf + + -- Fernando Seiti Furusato <[email protected]> Wed, 10 Sep 2014 13:12:22 +0000 + garmin-forerunner-tools (0.10repacked-4) unstable; urgency=low * patch gcc4.8: Fix Segmentation Fault when compiled with gcc4.8 diff -Nru garmin-forerunner-tools-0.10repacked/debian/control garmin-forerunner-tools-0.10repacked/debian/control --- garmin-forerunner-tools-0.10repacked/debian/control 2013-08-26 19:07:59.000000000 +0000 +++ garmin-forerunner-tools-0.10repacked/debian/control 2014-09-10 13:05:48.000000000 +0000 @@ -5,7 +5,7 @@ Uploaders: Noèl Köthe <[email protected]>, Ralf Treinen <[email protected]>, Christian Perrier <[email protected]> -Build-Depends: debhelper (>= 5.0.45), autotools-dev, libusb-dev +Build-Depends: debhelper (>= 5.0.45), dh-autoreconf, libusb-dev Standards-Version: 3.9.4 Homepage: http://garmintools.googlecode.com Vcs-Git: git://git.debian.org/git/pkg-running/garmin-forerunner-tools.git diff -Nru garmin-forerunner-tools-0.10repacked/debian/patches/python_dir_from_upstream.patch garmin-forerunner-tools-0.10repacked/debian/patches/python_dir_from_upstream.patch --- garmin-forerunner-tools-0.10repacked/debian/patches/python_dir_from_upstream.patch 1970-01-01 00:00:00.000000000 +0000 +++ garmin-forerunner-tools-0.10repacked/debian/patches/python_dir_from_upstream.patch 2014-09-10 13:10:31.000000000 +0000 @@ -0,0 +1,752 @@ +--- /dev/null ++++ garmin-forerunner-tools-0.10repacked/python/Makefile.am +@@ -0,0 +1,12 @@ ++ ++EXTRA_DIST = setup.py garmintools ++ ++clean: ++ rm -rf build ++ ++all: ++ python setup.py build --usb_libs="@USB_LIBS@" --usb_cflags="@USB_CFLAGS@" --libdir=$(libdir) ++ ++install-exec-hook: ++ python setup.py install --prefix=$(DESTDIR)/$(prefix) ++ +--- /dev/null ++++ garmin-forerunner-tools-0.10repacked/python/Makefile.in +@@ -0,0 +1,339 @@ ++# Makefile.in generated by automake 1.10.1 from Makefile.am. ++# @configure_input@ ++ ++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, ++# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. ++# This Makefile.in is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++@SET_MAKE@ ++VPATH = @srcdir@ ++pkgdatadir = $(datadir)/@PACKAGE@ ++pkglibdir = $(libdir)/@PACKAGE@ ++pkgincludedir = $(includedir)/@PACKAGE@ ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) ++NORMAL_INSTALL = : ++PRE_INSTALL = : ++POST_INSTALL = : ++NORMAL_UNINSTALL = : ++PRE_UNINSTALL = : ++POST_UNINSTALL = : ++build_triplet = @build@ ++host_triplet = @host@ ++subdir = python ++DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/configure.ac ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++mkinstalldirs = $(install_sh) -d ++CONFIG_HEADER = $(top_builddir)/src/config.h ++CONFIG_CLEAN_FILES = ++SOURCES = ++DIST_SOURCES = ++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ++ACLOCAL = @ACLOCAL@ ++AMTAR = @AMTAR@ ++AR = @AR@ ++AUTOCONF = @AUTOCONF@ ++AUTOHEADER = @AUTOHEADER@ ++AUTOMAKE = @AUTOMAKE@ ++AWK = @AWK@ ++CC = @CC@ ++CCDEPMODE = @CCDEPMODE@ ++CFLAGS = @CFLAGS@ ++CPP = @CPP@ ++CPPFLAGS = @CPPFLAGS@ ++CXX = @CXX@ ++CXXCPP = @CXXCPP@ ++CXXDEPMODE = @CXXDEPMODE@ ++CXXFLAGS = @CXXFLAGS@ ++CYGPATH_W = @CYGPATH_W@ ++DEFS = @DEFS@ ++DEPDIR = @DEPDIR@ ++DSYMUTIL = @DSYMUTIL@ ++ECHO = @ECHO@ ++ECHO_C = @ECHO_C@ ++ECHO_N = @ECHO_N@ ++ECHO_T = @ECHO_T@ ++EGREP = @EGREP@ ++EXEEXT = @EXEEXT@ ++F77 = @F77@ ++FFLAGS = @FFLAGS@ ++GREP = @GREP@ ++HAVE_PYTHON = @HAVE_PYTHON@ ++INSTALL = @INSTALL@ ++INSTALL_DATA = @INSTALL_DATA@ ++INSTALL_PROGRAM = @INSTALL_PROGRAM@ ++INSTALL_SCRIPT = @INSTALL_SCRIPT@ ++INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ ++LDFLAGS = @LDFLAGS@ ++LIBOBJS = @LIBOBJS@ ++LIBS = @LIBS@ ++LIBTOOL = @LIBTOOL@ ++LIBUSB_CONFIG = @LIBUSB_CONFIG@ ++LN_S = @LN_S@ ++LTLIBOBJS = @LTLIBOBJS@ ++MAKEINFO = @MAKEINFO@ ++MKDIR_P = @MKDIR_P@ ++NMEDIT = @NMEDIT@ ++OBJEXT = @OBJEXT@ ++PACKAGE = @PACKAGE@ ++PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ ++PACKAGE_NAME = @PACKAGE_NAME@ ++PACKAGE_STRING = @PACKAGE_STRING@ ++PACKAGE_TARNAME = @PACKAGE_TARNAME@ ++PACKAGE_VERSION = @PACKAGE_VERSION@ ++PATH_SEPARATOR = @PATH_SEPARATOR@ ++PROG_LIBS = @PROG_LIBS@ ++PYTHON_SUBDIRS = @PYTHON_SUBDIRS@ ++RANLIB = @RANLIB@ ++SED = @SED@ ++SET_MAKE = @SET_MAKE@ ++SHELL = @SHELL@ ++STRIP = @STRIP@ ++USB_CFLAGS = @USB_CFLAGS@ ++USB_LIBS = @USB_LIBS@ ++VERSION = @VERSION@ ++abs_builddir = @abs_builddir@ ++abs_srcdir = @abs_srcdir@ ++abs_top_builddir = @abs_top_builddir@ ++abs_top_srcdir = @abs_top_srcdir@ ++ac_ct_CC = @ac_ct_CC@ ++ac_ct_CXX = @ac_ct_CXX@ ++ac_ct_F77 = @ac_ct_F77@ ++am__include = @am__include@ ++am__leading_dot = @am__leading_dot@ ++am__quote = @am__quote@ ++am__tar = @am__tar@ ++am__untar = @am__untar@ ++bindir = @bindir@ ++build = @build@ ++build_alias = @build_alias@ ++build_cpu = @build_cpu@ ++build_os = @build_os@ ++build_vendor = @build_vendor@ ++builddir = @builddir@ ++datadir = @datadir@ ++datarootdir = @datarootdir@ ++docdir = @docdir@ ++dvidir = @dvidir@ ++exec_prefix = @exec_prefix@ ++host = @host@ ++host_alias = @host_alias@ ++host_cpu = @host_cpu@ ++host_os = @host_os@ ++host_vendor = @host_vendor@ ++htmldir = @htmldir@ ++includedir = @includedir@ ++infodir = @infodir@ ++install_sh = @install_sh@ ++libdir = @libdir@ ++libexecdir = @libexecdir@ ++localedir = @localedir@ ++localstatedir = @localstatedir@ ++mandir = @mandir@ ++mkdir_p = @mkdir_p@ ++oldincludedir = @oldincludedir@ ++pdfdir = @pdfdir@ ++prefix = @prefix@ ++program_transform_name = @program_transform_name@ ++psdir = @psdir@ ++sbindir = @sbindir@ ++sharedstatedir = @sharedstatedir@ ++srcdir = @srcdir@ ++sysconfdir = @sysconfdir@ ++target_alias = @target_alias@ ++top_builddir = @top_builddir@ ++top_srcdir = @top_srcdir@ ++EXTRA_DIST = setup.py garmintools ++all: all-am ++ ++.SUFFIXES: ++$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) ++ @for dep in $?; do \ ++ case '$(am__configure_deps)' in \ ++ *$$dep*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ ++ && exit 0; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu python/Makefile'; \ ++ cd $(top_srcdir) && \ ++ $(AUTOMAKE) --gnu python/Makefile ++.PRECIOUS: Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ ++ esac; ++ ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++ ++$(top_srcdir)/configure: $(am__configure_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(ACLOCAL_M4): $(am__aclocal_m4_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++ ++mostlyclean-libtool: ++ -rm -f *.lo ++ ++clean-libtool: ++ -rm -rf .libs _libs ++tags: TAGS ++TAGS: ++ ++ctags: CTAGS ++CTAGS: ++ ++ ++distdir: $(DISTFILES) ++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ list='$(DISTFILES)'; \ ++ dist_files=`for file in $$list; do echo $$file; done | \ ++ sed -e "s|^$$srcdirstrip/||;t" \ ++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ ++ case $$dist_files in \ ++ */*) $(MKDIR_P) `echo "$$dist_files" | \ ++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ ++ sort -u` ;; \ ++ esac; \ ++ for file in $$dist_files; do \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ if test -d $$d/$$file; then \ ++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ ++ fi; \ ++ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ ++ else \ ++ test -f $(distdir)/$$file \ ++ || cp -p $$d/$$file $(distdir)/$$file \ ++ || exit 1; \ ++ fi; \ ++ done ++check-am: all-am ++check: check-am ++all-am: Makefile ++installdirs: ++install: install-am ++install-exec: install-exec-am ++install-data: install-data-am ++uninstall: uninstall-am ++ ++install-am: all-am ++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am ++ ++installcheck: installcheck-am ++install-strip: ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ `test -z '$(STRIP)' || \ ++ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install ++mostlyclean-generic: ++ ++clean-generic: ++ ++distclean-generic: ++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) ++ ++maintainer-clean-generic: ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean-am: clean-generic clean-libtool mostlyclean-am ++ ++distclean: distclean-am ++ -rm -f Makefile ++distclean-am: clean-am distclean-generic ++ ++dvi: dvi-am ++ ++dvi-am: ++ ++html: html-am ++ ++info: info-am ++ ++info-am: ++ ++install-data-am: ++ ++install-dvi: install-dvi-am ++ ++install-exec-am: ++ @$(NORMAL_INSTALL) ++ $(MAKE) $(AM_MAKEFLAGS) install-exec-hook ++ ++install-html: install-html-am ++ ++install-info: install-info-am ++ ++install-man: ++ ++install-pdf: install-pdf-am ++ ++install-ps: install-ps-am ++ ++installcheck-am: ++ ++maintainer-clean: maintainer-clean-am ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic ++ ++mostlyclean: mostlyclean-am ++ ++mostlyclean-am: mostlyclean-generic mostlyclean-libtool ++ ++pdf: pdf-am ++ ++pdf-am: ++ ++ps: ps-am ++ ++ps-am: ++ ++uninstall-am: ++ ++.MAKE: install-am install-exec-am install-strip ++ ++.PHONY: all all-am check check-am clean clean-generic clean-libtool \ ++ distclean distclean-generic distclean-libtool distdir dvi \ ++ dvi-am html html-am info info-am install install-am \ ++ install-data install-data-am install-dvi install-dvi-am \ ++ install-exec install-exec-am install-exec-hook install-html \ ++ install-html-am install-info install-info-am install-man \ ++ install-pdf install-pdf-am install-ps install-ps-am \ ++ install-strip installcheck installcheck-am installdirs \ ++ maintainer-clean maintainer-clean-generic mostlyclean \ ++ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ ++ uninstall uninstall-am ++ ++ ++clean: ++ rm -rf build ++ ++all: ++ python setup.py build --usb_libs="@USB_LIBS@" --usb_cflags="@USB_CFLAGS@" --libdir=$(libdir) ++ ++install-exec-hook: ++ python setup.py install --prefix=$(DESTDIR)/$(prefix) ++# Tell versions [3.59,3.63) of GNU make to not export all variables. ++# Otherwise a system limit (for SysV at least) may be exceeded. ++.NOEXPORT: +--- /dev/null ++++ garmin-forerunner-tools-0.10repacked/python/garmintools/__init__.py +@@ -0,0 +1,5 @@ ++ ++from pygarmin import * ++ ++ ++ +--- /dev/null ++++ garmin-forerunner-tools-0.10repacked/python/pygarmin.c +@@ -0,0 +1,332 @@ ++#include <Python.h> ++#include <stdio.h> ++#include "garmin.h" ++ ++ ++int verbose = 0; ++ ++ ++/* Toggle the state of the verbose flag and return the new value */ ++ ++static PyObject* toggle_verbose(PyObject* obj, PyObject* args) ++{ ++ verbose = (int) ! verbose; ++ return PyBool_FromLong(verbose); ++} ++ ++ ++/* Return the current state of the verbose flag */ ++ ++static PyObject* get_verbose(PyObject* obj, PyObject* args) ++{ ++ return PyBool_FromLong(verbose); ++} ++ ++ ++/* Initialize the garmin unit and hanlde errors */ ++ ++bool initialize_garmin(garmin_unit* garmin) ++{ ++ int init_code = garmin_init(garmin, verbose); ++ ++ switch (init_code) ++ { ++ case 0 : ++ PyErr_SetString(PyExc_RuntimeError, "Garmin unit could not be opened."); ++ return 0; ++ ++ default: ++ return 1; ++ } ++} ++ ++ ++/* Return information about the attached garmin unit */ ++ ++static PyObject* get_info(PyObject* obj, PyObject* args) ++{ ++ garmin_unit garmin; ++ ++ if (!initialize_garmin(&garmin)) ++ return NULL; ++ ++ PyObject* dict = PyDict_New(); ++ ++ uint32 unit_id = garmin.id; ++ PyDict_SetItem(dict, PyString_FromString("unit_id"), PyLong_FromUnsignedLong(unit_id)); ++ ++ uint16 product_id = garmin.product.product_id; ++ PyDict_SetItem(dict, PyString_FromString("product_id"), PyInt_FromLong(product_id)); ++ ++ double software_version = garmin.product.software_version / 100.0; ++ PyDict_SetItem(dict, PyString_FromString("software_version"), PyFloat_FromDouble(software_version)); ++ ++ char* product_description = garmin.product.product_description; ++ PyDict_SetItem(dict, PyString_FromString("description"), PyString_FromString(product_description)); ++ ++ garmin_close(&garmin); ++ ++ return Py_BuildValue("N", dict); ++} ++ ++ ++/* Return all run data from the attached garmin unit as python dictionary */ ++ ++static PyObject* get_runs(PyObject* obj, PyObject* args) ++{ ++ garmin_unit garmin; ++ ++ if (!initialize_garmin(&garmin)) ++ return NULL; ++ ++ garmin_data * data; ++ ++ if ( (data = garmin_get(&garmin, GET_RUNS)) == NULL ) ++ { ++ PyErr_SetString(PyExc_RuntimeError, "Unable to extract any data."); ++ return NULL; ++ } ++ ++ /* ++ We should have a list with three elements: ++ 1) The runs (which identify the track and lap indices) ++ 2) The laps (which are related to the runs) ++ 3) The tracks (which are related to the runs) ++ */ ++ ++ garmin_data * tmpdata; ++ garmin_list * runs = NULL; ++ garmin_list * laps = NULL; ++ garmin_list * tracks = NULL; ++ ++ tmpdata = garmin_list_data(data, 0); ++ if ( tmpdata == NULL ) ++ { ++ PyErr_SetString(PyExc_RuntimeError, "Toplevel data missing element 0 (runs)"); ++ return NULL; ++ } ++ ++ runs = tmpdata->data; ++ if ( runs == NULL ) ++ { ++ PyErr_SetString(PyExc_RuntimeError, "No runs extracted."); ++ return NULL; ++ } ++ ++ tmpdata = garmin_list_data(data, 1); ++ if ( tmpdata == NULL ) ++ { ++ PyErr_SetString(PyExc_RuntimeError, "Toplevel data missing element 1 (laps)"); ++ return NULL; ++ } ++ ++ laps = tmpdata->data; ++ if ( laps == NULL ) ++ { ++ PyErr_SetString(PyExc_RuntimeError, "No laps extracted."); ++ return NULL; ++ } ++ ++ tmpdata = garmin_list_data(data, 2); ++ if ( tmpdata == NULL ) ++ { ++ PyErr_SetString(PyExc_RuntimeError, "Toplevel data missing element 2 (tracks)"); ++ return NULL; ++ } ++ ++ tracks = tmpdata->data; ++ if ( tracks == NULL ) ++ { ++ PyErr_SetString(PyExc_RuntimeError, "No tracks extracted."); ++ return NULL; ++ } ++ ++ garmin_list_node * n; ++ garmin_list_node * m; ++ garmin_list_node * o; ++ uint32 trk; ++ uint32 f_lap; ++ uint32 l_lap; ++ uint32 l_idx; ++ time_type start; ++ ++ /* Print some debug output if requested. */ ++ if ( verbose != 0 ) ++ { ++ for ( m = laps->head; m != NULL; m = m->next ) ++ { ++ if ( get_lap_index(m->data,&l_idx) != 0 ) ++ printf("[garmin] lap: index [%d]\n", l_idx); ++ else ++ printf("[garmin] lap: index [??]\n"); ++ } ++ } ++ ++ /* For each run, get its laps and track points. */ ++ ++ PyObject* dict = PyDict_New(); ++ ++ for ( n = runs->head; n != NULL; n = n->next ) ++ { ++ if ( get_run_track_lap_info(n->data, &trk, &f_lap, &l_lap) != 0 ) ++ { ++ time_type f_lap_start = 0; ++ ++ PyObject* run = PyDict_New(); ++ PyObject* rlaps = PyDict_New(); ++ ++ PyDict_SetItem(run, PyString_FromString("track"), Py_BuildValue("i", trk)); ++ PyDict_SetItem(run, PyString_FromString("first_lap"), Py_BuildValue("i", f_lap)); ++ PyDict_SetItem(run, PyString_FromString("last_lap"), Py_BuildValue("i", l_lap)); ++ PyDict_SetItem(run, PyString_FromString("type"), Py_BuildValue("i", (int)n->data->type)); ++ ++ /* TODO: ++ Implement something similar for the other run types, D1000 and D1010 ++ See src/run.c get_run_track_lap_info() for more information ++ */ ++ ++ if (n->data->type == data_D1009) ++ { ++ D1009 * d1009; ++ d1009 = n->data->data; ++ PyDict_SetItem(run, PyString_FromString("multisport"), PyBool_FromLong(d1009->multisport)); ++ switch (d1009->sport_type) ++ { ++ case D1000_running: ++ PyDict_SetItem(run, PyString_FromString("sport"), PyString_FromString("running")); ++ break; ++ case D1000_biking: ++ PyDict_SetItem(run, PyString_FromString("sport"), PyString_FromString("biking")); ++ break; ++ case D1000_other: ++ PyDict_SetItem(run, PyString_FromString("sport"), PyString_FromString("other")); ++ break; ++ } ++ } ++ ++ if (verbose != 0) ++ printf("[garmin] run: track [%d], laps [%d:%d]\n",trk,f_lap,l_lap); ++ ++ for ( m = laps->head; m != NULL; m = m->next ) ++ { ++ if ( get_lap_index(m->data, &l_idx) != 0 ) ++ { ++ if ( l_idx >= f_lap && l_idx <= l_lap ) ++ { ++ PyObject* lap = PyDict_New(); ++ ++ if (verbose != 0) ++ printf("[garmin] lap [%d] falls within laps [%d:%d]\n", l_idx,f_lap,l_lap); ++ ++ start = 0; ++ get_lap_start_time(m->data, &start); ++ ++ if (start != 0) ++ { ++ if (l_idx == f_lap) ++ f_lap_start = start; ++ ++ PyDict_SetItem(lap, PyString_FromString("start_time"), Py_BuildValue("i", (int)start)); ++ PyDict_SetItem(lap, PyString_FromString("type"), Py_BuildValue("i", (int)m->data->type)); ++ ++ if (m->data->type == data_D1015) ++ { ++ D1015 * d1015; ++ d1015 = m->data->data; ++ PyDict_SetItem(lap, PyString_FromString("duration"), Py_BuildValue("i", d1015->total_time)); ++ PyDict_SetItem(lap, PyString_FromString("distance"), Py_BuildValue("f", d1015->total_dist)); ++ PyDict_SetItem(lap, PyString_FromString("max_speed"), Py_BuildValue("f", d1015->max_speed)); ++ } ++ ++ PyObject * points = PyList_New(0); ++ ++ bool have_track = 0; ++ bool done = 0; ++ ++ for ( o = tracks->head; o != NULL; o = o->next ) ++ { ++ if ( o->data != NULL ) ++ { ++ if (o->data->type == data_D311) ++ { ++ if ( ! have_track ) ++ { ++ D311 * d311; ++ d311 = o->data->data; ++ if ( d311->index == trk ) ++ have_track = 1; ++ } ++ else /* We've reached the end of the track */ ++ done = 1; ++ } ++ ++ else if (o->data->type == data_D304 && have_track) ++ { ++ D304 * d304; ++ d304 = o->data->data; ++ PyObject* point = PyDict_New(); ++ ++ if (d304->posn.lat != 2147483647 && d304->posn.lon != 2147483647) ++ { ++ PyDict_SetItem(point, PyString_FromString("position"), Py_BuildValue("(ff)", SEMI2DEG(d304->posn.lat), SEMI2DEG(d304->posn.lon))); ++ PyDict_SetItem(point, PyString_FromString("type"), Py_BuildValue("i", (int)o->data->type)); ++ PyDict_SetItem(point, PyString_FromString("time"), Py_BuildValue("f", (float)(d304->time + TIME_OFFSET))); ++ PyDict_SetItem(point, PyString_FromString("distance"), Py_BuildValue("f", d304->distance)); ++ PyDict_SetItem(point, PyString_FromString("altitude"), Py_BuildValue("f", d304->alt)); ++ PyDict_SetItem(point, PyString_FromString("heart_rate"), Py_BuildValue("i", d304->heart_rate)); ++ ++ if (d304->cadence != 255) ++ PyDict_SetItem(point, PyString_FromString("cadence"), Py_BuildValue("i", d304->cadence)); ++ ++ PyList_Append(points, Py_BuildValue("N", point)); ++ } ++ } ++ ++ else if (have_track) ++ printf("get_track: point type %d invalid!\n",o->data->type); ++ } ++ ++ if ( done ) break; ++ } ++ PyDict_SetItem(lap, PyString_FromString("points"), Py_BuildValue("N", points)); ++ } ++ else ++ PyErr_Warn(PyExc_Warning, "Start time of first lap not found."); ++ ++ PyDict_SetItem(rlaps, PyString_FromFormat("%d", (int)l_idx), Py_BuildValue("N", lap)); ++ } ++ } ++ } ++ PyDict_SetItem(run, PyString_FromString("laps"), Py_BuildValue("N", rlaps)); ++ PyDict_SetItem(dict, PyString_FromFormat("%d", (int)f_lap_start), Py_BuildValue("N", run)); ++ } ++ } ++ ++ garmin_free_data(data); ++ garmin_close(&garmin); ++ ++ return Py_BuildValue("N", dict); ++} ++ ++ ++/* Assign python names to the exported functions */ ++ ++static PyMethodDef MethodTable[] = { ++ {"toggle_verbose", toggle_verbose, METH_VARARGS, "Toggle verbose flag and return its new state, True if turned on, False else."}, ++ {"get_verbose", get_verbose, METH_VARARGS, "Return the current state of the verbose flag, True if turned on, False else."}, ++ {"get_info", get_info, METH_VARARGS, "Return a dictionary with information about the attached unit."}, ++ {"get_runs", get_runs, METH_VARARGS, "Return a dictionary with all runs stored on the attached unit."}, ++ {NULL, NULL, 0, NULL} ++}; ++ ++ ++/* Initialize pygarmin as python extension */ ++ ++PyMODINIT_FUNC initpygarmin(void) ++{ ++ PyObject* module = 0; ++ module = Py_InitModule3("pygarmin", MethodTable, "Python bindings for garmintools"); ++ ++ if (module == 0) ++ PyErr_SetString(PyExc_RuntimeError, "Failure on Py_InitModule3."); ++} +--- /dev/null ++++ garmin-forerunner-tools-0.10repacked/python/setup.py +@@ -0,0 +1,49 @@ ++#! /usr/bin/env python ++ ++import sys ++ ++sources = ['pygarmin.c'] ++include_dirs = ['../src'] ++library_dirs = [] ++libraries = ['garmin'] ++ ++argv = [] ++ ++for arg in sys.argv : ++ ++ usb_libs = arg.split('--usb_libs=') ++ if len(usb_libs) == 2 and usb_libs[0] == '' and usb_libs[1] != '' : ++ for lib in usb_libs[1].split(' ') : ++ if lib[1] == 'L' : ++ library_dirs.append(lib.replace('-L', '')) ++ if lib[1] == 'l' : ++ libraries.append(lib.replace('-l', '')) ++ ++ usb_cflags = arg.split('--usb_cflags=') ++ if len(usb_cflags) == 2 and usb_cflags[0] == '' and usb_cflags[1] != '' : ++ for cflag in usb_cflags[1].split(' ') : ++ if cflag[1] == 'I' : ++ include_dirs.append(cflag.replace('-I', '')) ++ ++ libdir = arg.split('--libdir=') ++ if len(libdir) == 2 and libdir[0] == '' and libdir[1] != '' : ++ library_dirs.append(libdir[1]) ++ ++ if arg.count("--prefix=") == 1 : ++ argv = [arg] ++ ++sys.argv = sys.argv[0:2] + argv ++ ++from distutils.core import setup, Extension ++ ++extension = Extension('garmintools.pygarmin', ++ include_dirs = include_dirs, ++ libraries = libraries, ++ library_dirs = library_dirs, ++ sources = sources) ++ ++setup (name = 'garmintools', ++ version = '0.1', ++ description = 'Python bindings for garmintools', ++ ext_modules = [extension], ++ packages = ['garmintools']) diff -Nru garmin-forerunner-tools-0.10repacked/debian/patches/series garmin-forerunner-tools-0.10repacked/debian/patches/series --- garmin-forerunner-tools-0.10repacked/debian/patches/series 2013-08-26 19:07:59.000000000 +0000 +++ garmin-forerunner-tools-0.10repacked/debian/patches/series 2014-09-10 13:10:26.000000000 +0000 @@ -2,3 +2,4 @@ hurd_no_path_max exit_on_unpack_failure gcc4.8 +python_dir_from_upstream.patch diff -Nru garmin-forerunner-tools-0.10repacked/debian/rules garmin-forerunner-tools-0.10repacked/debian/rules --- garmin-forerunner-tools-0.10repacked/debian/rules 2013-08-26 19:07:59.000000000 +0000 +++ garmin-forerunner-tools-0.10repacked/debian/rules 2014-09-10 13:05:22.000000000 +0000 @@ -17,10 +17,7 @@ config.status: configure dh_testdir - [ -h config.guess ] || { mv config.guess config.guess.upstream; \ - ln -s /usr/share/misc/config.guess; } - [ -h config.sub ] || { mv config.sub config.sub.upstream; \ - ln -s /usr/share/misc/config.sub; } + dh_autoreconf ./configure --host=$(DEB_HOST_GNU_TYPE) \ --build=$(DEB_BUILD_GNU_TYPE) \ --prefix=/usr \ @@ -41,8 +38,7 @@ dh_testroot rm -f build-stamp [ ! -e Makefile ] || $(MAKE) distclean - [ ! -h config.guess ] || mv config.guess.upstream config.guess - [ ! -h config.sub ] || mv config.sub.upstream config.sub + dh_autoreconf_clean -rm config.status config.log Makefile dh_clean

