7e8fe8f632e2d8b0295232cb728bb3682e126fd7
[navit-package] / debian / patches / libgps-2.90-fix-1
1 To cope both with libgps18 and libgps19
2 Index: navit/configure.in
3 ===================================================================
4 --- navit.orig/configure.in     2009-12-20 00:33:10.000000000 +0100
5 +++ navit/configure.in  2009-12-20 00:33:10.000000000 +0100
6 @@ -773,7 +773,17 @@
7  AC_ARG_ENABLE(vehicle-gpsd, [  --disable-vehicle-gpsd              disable vehicle type gpsd], vehicle_gpsd=$enableval;vehicle_gpsd_reason="configure parameter")
8  if test "x${vehicle_gpsd}" = xyes
9  then
10 -       AC_CHECK_HEADER(gps.h, AC_DEFINE([HAVE_LIBGPS],[],Define to 1 if you have the <gps.h> header file.) GPSD_LIBS="-lgps", vehicle_gpsd=no; vehicle_gpsd_reason="no gps.h" )
11 +       PKG_CHECK_MODULES([GPSD], [libgps], have_libgps="yes", have_libgps="no")
12 +       if test "x$have_libgps" = "xyes"; then
13 +               AC_DEFINE([HAVE_LIBGPS],[],Define to 1 if you have libgps.)
14 +               PKG_CHECK_MODULES([LIBGPS19], [libgps >= 2.90], have_libgps19="yes", have_libgps19="no")
15 +               if test "x$have_libgps19" = "xyes"; then
16 +                       AC_DEFINE([HAVE_LIBGPS19],[],Define to 1 if you have libgps19.)
17 +               fi
18 +       else
19 +               vehicle_gpsd=no; vehicle_gpsd_reason="no libgps"
20 +       fi
21 +dnl    AC_CHECK_HEADER(gps.h, AC_DEFINE([HAVE_LIBGPS],[],Define to 1 if you have the <gps.h> header file.) GPSD_LIBS="-lgps", vehicle_gpsd=no; vehicle_gpsd_reason="no gps.h" )
22  fi
23  AC_SUBST(GPSD_CFLAGS)
24  AC_SUBST(GPSD_LIBS)
25 Index: navit/navit/attr_def.h
26 ===================================================================
27 --- navit.orig/navit/attr_def.h 2009-12-20 00:33:02.000000000 +0100
28 +++ navit/navit/attr_def.h      2009-12-20 00:33:10.000000000 +0100
29 @@ -226,7 +226,9 @@
30  ATTR(gc_type)
31  ATTR(layout)
32  ATTR(position_nmea)
33 +#ifndef HAVE_LIBGPS19
34  ATTR(gpsd_query)
35 +#endif
36  ATTR(on_eof)
37  ATTR(command)
38  ATTR(src)
39 Index: navit/navit/vehicle/gpsd/vehicle_gpsd.c
40 ===================================================================
41 --- navit.orig/navit/vehicle/gpsd/vehicle_gpsd.c        2009-12-20 00:33:02.000000000 +0100
42 +++ navit/navit/vehicle/gpsd/vehicle_gpsd.c     2009-12-20 00:33:10.000000000 +0100
43 @@ -36,7 +36,9 @@
44  
45  static struct vehicle_priv {
46         char *source;
47 +#ifndef HAVE_LIBGPS19
48         char *gpsd_query;
49 +#endif
50         struct callback_list *cbl;
51         struct callback *cb;
52         struct event_watch *evwatch;
53 @@ -69,8 +71,12 @@
54  static void vehicle_gpsd_io(struct vehicle_priv *priv);
55  
56  static void
57 +#ifdef HAVE_LIBGPS19
58 +vehicle_gpsd_callback(struct gps_data_t *data, char *buf, size_t len)
59 +#else
60  vehicle_gpsd_callback(struct gps_data_t *data, char *buf, size_t len,
61                       int level)
62 +#endif
63  {
64         char *pos,*nmea_data_buf;
65          int i=0,sats_signal=0;
66 @@ -108,16 +114,32 @@
67                 data->set &= ~ALTITUDE_SET;
68         }
69         if (data->set & SATELLITE_SET) {
70 +#ifdef HAVE_LIBGPS19
71 +                if(data->satellites_visible > 0) {
72 +#else
73                  if(data->satellites > 0) {
74 +#endif
75                          sats_signal=0;
76 +#ifdef HAVE_LIBGPS19
77 +                        for( i=0;i<data->satellites_visible;i++) {
78 +#else
79                          for( i=0;i<data->satellites;i++) {
80 +#endif
81                                 if (data->ss[i] > 0)
82                                          sats_signal++;
83                          }
84                  }
85 +#ifdef HAVE_LIBGPS19
86 +               if (priv->sats_used != data->satellites_used || priv->sats != data->satellites_visible || priv->sats_signal != sats_signal ) {
87 +#else
88                 if (priv->sats_used != data->satellites_used || priv->sats != data->satellites || priv->sats_signal != sats_signal ) {
89 +#endif
90                         priv->sats_used = data->satellites_used;
91 +#ifdef HAVE_LIBGPS19
92 +                       priv->sats = data->satellites_visible;
93 +#else
94                         priv->sats = data->satellites;
95 +#endif
96                          priv->sats_signal = sats_signal;
97                         callback_list_call_attr_0(priv->cbl, attr_position_sats);
98                 }
99 @@ -135,10 +157,17 @@
100                 priv->fix_time = data->fix.time;
101                 data->set &= ~TIME_SET;
102         }
103 +#ifdef HAVE_LIBGPS19
104 +       if (data->set & DOP_SET) {
105 +               dbg(1, "pdop : %g\n", data->dop.pdop);
106 +               priv->hdop = data->dop.pdop;
107 +               data->set &= ~DOP_SET;
108 +#else
109         if (data->set & PDOP_SET) {
110                 dbg(1, "pdop : %g\n", data->pdop);
111                 priv->hdop = data->hdop;
112                 data->set &= ~PDOP_SET;
113 +#endif
114         }
115         if (data->set & LATLON_SET) {
116                 priv->geo.lat = data->fix.latitude;
117 @@ -180,7 +209,11 @@
118                 dbg(0,"gps_open failed for '%s'. Retrying in %d seconds. Have you started gpsd?\n", priv->source, priv->retry_interval);
119                 return TRUE;
120         }
121 +#ifdef HAVE_LIBGPS19
122 +       gps_stream(priv->gps, WATCH_ENABLE, NULL);
123 +#else
124         gps_query(priv->gps, priv->gpsd_query);
125 +#endif
126         gps_set_raw_hook(priv->gps, vehicle_gpsd_callback);
127         priv->cb = callback_new_1(callback_cast(vehicle_gpsd_io), priv);
128         priv->evwatch = event_add_watch((void *)priv->gps->gps_fd, event_watch_cond_read, priv->cb);
129 @@ -268,8 +301,10 @@
130         vehicle_gpsd_close(priv);
131         if (priv->source)
132                 g_free(priv->source);
133 +#ifndef HAVE_LIBGPS19
134         if (priv->gpsd_query)
135                 g_free(priv->gpsd_query);
136 +#endif
137         g_free(priv);
138  }
139  
140 @@ -350,12 +385,17 @@
141                       *cbl, struct attr **attrs)
142  {
143         struct vehicle_priv *ret;
144 +#ifdef HAVE_LIBGPS19
145 +       struct attr *source, *retry_int;
146 +#else
147         struct attr *source, *query, *retry_int;
148 +#endif
149  
150         dbg(1, "enter\n");
151         source = attr_search(attrs, NULL, attr_source);
152         ret = g_new0(struct vehicle_priv, 1);
153         ret->source = g_strdup(source->u.str);
154 +#ifndef HAVE_LIBGPS19
155         query = attr_search(attrs, NULL, attr_gpsd_query);
156         if (query) {
157                 ret->gpsd_query = g_strconcat(query->u.str, "\n", NULL);
158 @@ -363,6 +403,7 @@
159                 ret->gpsd_query = g_strdup("w+x\n");
160         }
161         dbg(1,"Format string for gpsd_query: %s\n",ret->gpsd_query);
162 +#endif
163         retry_int = attr_search(attrs, NULL, attr_retry_interval);
164         if (retry_int) {
165                 ret->retry_interval = retry_int->u.num;