diff --git a/recipes-connectivity/gpsd/gpsd-machine-conf_1.0.bb b/recipes-connectivity/gpsd/gpsd-machine-conf_1.0.bb new file mode 100644 index 0000000..d2058ba --- /dev/null +++ b/recipes-connectivity/gpsd/gpsd-machine-conf_1.0.bb @@ -0,0 +1,7 @@ +SUMMARY = "Machine specific gpsd config" +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/BSD;md5=3775480a712fc46a69647678acb234cb" + +# empty by default +# BSP layers can add stuff like meta-openmoko example: +# diff --git a/recipes-connectivity/gpsd/gpsd/0001-SConstruct-prefix-includepy-with-sysroot-and-drop-sy.patch b/recipes-connectivity/gpsd/gpsd/0001-SConstruct-prefix-includepy-with-sysroot-and-drop-sy.patch new file mode 100644 index 0000000..23ae5e5 --- /dev/null +++ b/recipes-connectivity/gpsd/gpsd/0001-SConstruct-prefix-includepy-with-sysroot-and-drop-sy.patch @@ -0,0 +1,79 @@ +From 5464d9e1bfd1a1c54338ec7c4148cad1b222ef93 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Tue, 24 Apr 2012 18:45:14 +0200 +Subject: [PATCH] SConstruct: prefix includepy with sysroot and drop sysroot + from python_lib_dir + +* without PYTHONPATH, distutil's sysconfig returns INCLUDEPY without sysroot prefix + and with PYTHONPATH from OE it's pointing to native python dir + + $ export PYTHONPATH=/OE/shr-core/tmp-eglibc/sysroots/om-gta02/usr/lib/python2.7/ + $ python + Python 2.7.2 (default, Apr 18 2012, 09:19:59) + [GCC 4.6.2] on linux2 + Type "help", "copyright", "credits" or "license" for more information. + >>> from distutils import sysconfig + >>> sysconfig.get_config_vars('INCLUDEPY') + ['/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/include/python2.7'] + >>> + $ unset PYTHONPATH + $ python + Python 2.7.2 (default, Apr 18 2012, 09:19:59) + [GCC 4.6.2] on linux2 + Type "help", "copyright", "credits" or "license" for more information. + >>> from distutils import sysconfig + >>> sysconfig.get_config_vars('INCLUDEPY') + ['/python2.7'] + >>> import sysconfig + >>> sysconfig.get_config_vars('INCLUDEPY') + ['/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/include/python2.7'] +* python_lib_dir = python_lib_dir.replace(env['sysroot'], '') + returns path to target sysroot + +Upstream-Status: Inappropriate [embedded specific] + +Signed-off-by: Martin Jansa +Signed-off-by: Peter A. Bigot + +--- + SConstruct | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/SConstruct b/SConstruct +index b8f3fb1..883e06d 100644 +--- a/SConstruct ++++ b/SConstruct +@@ -980,7 +980,7 @@ else: + + # Set up configuration for target Python + +-PYTHON_LIBDIR_CALL = 'sysconfig.get_python_lib()' ++PYTHON_LIBDIR_CALL = 'sysconfig.get_python_lib(plat_specific=1)' + + PYTHON_CONFIG_NAMES = ['CC', 'CXX', 'OPT', 'BASECFLAGS', + 'CCSHARED', 'LDSHARED', 'SO', 'INCLUDEPY', 'LDFLAGS'] +@@ -1506,7 +1506,7 @@ else: + LINK=ldshared, + SHLIBPREFIX="", + SHLIBSUFFIX=python_config['SO'], +- CPPPATH=[python_config['INCLUDEPY']], ++ CPPPATH=[os.path.normpath("%s/%s/%s/%s" % (env['sysroot'], env['prefix'], env['includedir'], python_config['INCLUDEPY']))] if env['sysroot'] else [python_config['INCLUDEPY']], + CPPFLAGS=python_config['OPT'], + CFLAGS=python_config['BASECFLAGS'], + CXXFLAGS=python_config['BASECFLAGS']) +@@ -1808,12 +1808,14 @@ if ((not env['debug'] and not env['profiling'] and not env['nostrip'] and + env.AddPostAction(binaryinstall, '$STRIP $TARGET') + + if env['python']: +- python_module_dir = str(python_libdir) + os.sep + 'gps' ++ python_module_dir = python_libdir.replace(env['sysroot'], '') + os.sep + 'gps' + python_extensions_install = python_env.Install(DESTDIR + python_module_dir, + python_built_extensions) + if ((not env['debug'] and not env['profiling'] and + not env['nostrip'] and not sys.platform.startswith('darwin'))): + python_env.AddPostAction(python_extensions_install, '$STRIP $TARGET') ++ env.AddPostAction(python_extensions_install, '$CHRPATH -r "%s" "$TARGET"' \ ++ % (python_libdir, )) + + python_modules_install = python_env.Install(DESTDIR + python_module_dir, + python_modules) diff --git a/recipes-connectivity/gpsd/gpsd/0001-gps_shm_close-Free-privdata.patch b/recipes-connectivity/gpsd/gpsd/0001-gps_shm_close-Free-privdata.patch new file mode 100644 index 0000000..9b38015 --- /dev/null +++ b/recipes-connectivity/gpsd/gpsd/0001-gps_shm_close-Free-privdata.patch @@ -0,0 +1,37 @@ +From 2a4b3bcde0d73a3a4a6644d5f944ac9d16023ba9 Mon Sep 17 00:00:00 2001 +From: Adrian Bunk +Date: Mon, 21 Oct 2019 13:53:25 +0300 +Subject: gps_shm_close: Free privdata + +Previously every open/close cycle leaked privdata. + +Signed-off-by: Adrian Bunk +Signed-off-by: Gary E. Miller + +Upstream-Status: Backport +--- + libgps_shm.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/libgps_shm.c b/libgps_shm.c +index d93972bba..12bb3760b 100644 +--- a/libgps_shm.c ++++ b/libgps_shm.c +@@ -163,8 +163,12 @@ int gps_shm_read(struct gps_data_t *gpsdata) + + void gps_shm_close(struct gps_data_t *gpsdata) + { +- if (PRIVATE(gpsdata) && PRIVATE(gpsdata)->shmseg != NULL) +- (void)shmdt((const void *)PRIVATE(gpsdata)->shmseg); ++ if (PRIVATE(gpsdata)) { ++ if (PRIVATE(gpsdata)->shmseg != NULL) ++ (void)shmdt((const void *)PRIVATE(gpsdata)->shmseg); ++ free(PRIVATE(gpsdata)); ++ gpsdata->privdata = NULL; ++ } + } + + int gps_shm_mainloop(struct gps_data_t *gpsdata, int timeout, +-- +2.20.1 + diff --git a/recipes-connectivity/gpsd/gpsd_3.17.bbappend b/recipes-connectivity/gpsd/gpsd_%.bbappend similarity index 91% rename from recipes-connectivity/gpsd/gpsd_3.17.bbappend rename to recipes-connectivity/gpsd/gpsd_%.bbappend index 512a70b..dc7bc07 100644 --- a/recipes-connectivity/gpsd/gpsd_3.17.bbappend +++ b/recipes-connectivity/gpsd/gpsd_%.bbappend @@ -1,7 +1,7 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/files:" SRC_URI_prepend = " \ file://gpsbaud.service \ - git://git.netmodule.intranet/nmsw/gpsd.git;protocol=ssh;user=gitea;branch=imu-integration \ + git://gitlab.com/netmodule/third-party/gpsd.git;protocol=ssh;user=git;branch=3.19/hancock \ file://60-ublox-neo.rules \ " SRC_URI_remove = "${SAVANNAH_GNU_MIRROR}/${BPN}/${BP}.tar.gz" diff --git a/recipes-connectivity/gpsd/gpsd_3.19.bb b/recipes-connectivity/gpsd/gpsd_3.19.bb new file mode 100644 index 0000000..9fdbbf2 --- /dev/null +++ b/recipes-connectivity/gpsd/gpsd_3.19.bb @@ -0,0 +1,137 @@ +SUMMARY = "A TCP/IP Daemon simplifying the communication with GPS devices" +SECTION = "console/network" +LICENSE = "BSD-2-Clause" +LIC_FILES_CHKSUM = "file://COPYING;md5=01764c35ae34d9521944bb6ab312af53" +DEPENDS = "dbus ncurses python python3 pps-tools" +PROVIDES = "virtual/gpsd" + +SRC_URI = "${SAVANNAH_GNU_MIRROR}/${BPN}/${BP}.tar.gz \ + file://0001-SConstruct-prefix-includepy-with-sysroot-and-drop-sy.patch \ + file://0001-gps_shm_close-Free-privdata.patch \ +" +SRC_URI[md5sum] = "b3bf88706794eb8e5f2c2543bf7ba87b" +SRC_URI[sha256sum] = "27dd24d45b2ac69baab7933da2bf6ae5fb0be90130f67e753c110a3477155f39" + +inherit scons update-rc.d python-dir pythonnative systemd update-alternatives + +INITSCRIPT_PACKAGES = "gpsd-conf" +INITSCRIPT_NAME = "gpsd" +INITSCRIPT_PARAMS = "defaults 35" + +SYSTEMD_OESCONS = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false',d)}" + +export STAGING_INCDIR +export STAGING_LIBDIR + +PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} usb" +PACKAGECONFIG[bluez] = "bluez='true',bluez='false',bluez5" +PACKAGECONFIG[qt] = "qt='yes' qt_versioned=5,qt='no',qtbase" +PACKAGECONFIG[usb] = "usb='true',usb='false',libusb1" +EXTRA_OESCONS = " \ + sysroot=${STAGING_DIR_TARGET} \ + libQgpsmm='false' \ + debug='false' \ + nostrip='true' \ + systemd='${SYSTEMD_OESCONS}' \ + libdir='${libdir}' \ + manbuild='false' \ + ${PACKAGECONFIG_CONFARGS} \ +" +# this cannot be used, because then chrpath is not found and only static lib is built +# target=${HOST_SYS} + +do_compile_prepend() { + export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}" + export PKG_CONFIG="PKG_CONFIG_SYSROOT_DIR=\"${PKG_CONFIG_SYSROOT_DIR}\" pkg-config" + export STAGING_PREFIX="${STAGING_DIR_HOST}/${prefix}" + export LINKFLAGS="${LDFLAGS}" +} + +do_install() { + export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}" + export PKG_CONFIG="PKG_CONFIG_SYSROOT_DIR=\"${PKG_CONFIG_SYSROOT_DIR}\" pkg-config" + export STAGING_PREFIX="${STAGING_DIR_HOST}/${prefix}" + export LINKFLAGS="${LDFLAGS}" + + export DESTDIR="${D}" + # prefix is used for RPATH and DESTDIR/prefix for instalation + ${STAGING_BINDIR_NATIVE}/scons prefix=${prefix} python_libdir=${libdir} install ${EXTRA_OESCONS} || \ + bbfatal "scons install execution failed." +} + +do_install_append() { + install -d ${D}/${sysconfdir}/init.d + install -m 0755 ${S}/packaging/deb/etc_init.d_gpsd ${D}/${sysconfdir}/init.d/gpsd + install -d ${D}/${sysconfdir}/default + install -m 0644 ${S}/packaging/deb/etc_default_gpsd ${D}/${sysconfdir}/default/gpsd.default + + #support for udev + install -d ${D}/${sysconfdir}/udev/rules.d + install -m 0644 ${S}/gpsd.rules ${D}/${sysconfdir}/udev/rules.d/ + install -d ${D}${base_libdir}/udev/ + install -m 0755 ${S}/gpsd.hotplug ${D}${base_libdir}/udev/ + + #support for python + install -d ${D}/${PYTHON_SITEPACKAGES_DIR}/gps + install -m 755 ${S}/gps/*.py ${D}/${PYTHON_SITEPACKAGES_DIR}/gps + + #support for systemd + install -d ${D}${systemd_unitdir}/system/ + install -m 0644 ${S}/systemd/${BPN}.service ${D}${systemd_unitdir}/system/${BPN}.service + sed -i -e 's,/usr/local,/usr,g' ${D}${systemd_unitdir}/system/${BPN}.service + install -m 0644 ${S}/systemd/${BPN}ctl@.service ${D}${systemd_unitdir}/system/${BPN}ctl@.service + sed -i -e 's,/usr/local,/usr,g' ${D}${systemd_unitdir}/system/${BPN}ctl@.service + install -m 0644 ${S}/systemd/${BPN}.socket ${D}${systemd_unitdir}/system/${BPN}.socket +} + +PACKAGES =+ "libgps libgpsd python-pygps gpsd-udev gpsd-conf gpsd-gpsctl gps-utils" + +RPROVIDES_${PN}-dbg += "python-pygps-dbg" + +FILES_${PN}-dev += "${libdir}/pkgconfdir/libgpsd.pc ${libdir}/pkgconfdir/libgps.pc \ + ${libdir}/libQgpsmm.prl" + +RDEPENDS_${PN} = "gpsd-gpsctl" +RRECOMMENDS_${PN} = "gpsd-conf gpsd-udev gpsd-machine-conf" + +SUMMARY_gpsd-udev = "udev relevant files to use gpsd hotplugging" +FILES_gpsd-udev = "${base_libdir}/udev ${sysconfdir}/udev/*" +RDEPENDS_gpsd-udev += "udev gpsd-conf" + +SUMMARY_libgpsd = "C service library used for communicating with gpsd" +FILES_libgpsd = "${libdir}/libgpsd.so.*" + +SUMMARY_libgps = "C service library used for communicating with gpsd" +FILES_libgps = "${libdir}/libgps.so.*" + +SUMMARY_gpsd-conf = "gpsd configuration files and init scripts" +FILES_gpsd-conf = "${sysconfdir}" +CONFFILES_gpsd-conf = "${sysconfdir}/default/gpsd.default" + +SUMMARY_gpsd-gpsctl = "Tool for tweaking GPS modes" +FILES_gpsd-gpsctl = "${bindir}/gpsctl" + +SUMMARY_gps-utils = "Utils used for simulating, monitoring,... a GPS" +# Python files are required for gps/fake, required for gpsfake. +FILES_gps-utils = "${bindir}/* ${libdir}/gps/*.py ${libdir}/gps/*.so" +RDEPENDS_gps-utils = "python-pygps" + +SUMMARY_python-pygps = "Python bindings to gpsd" +FILES_python-pygps = "${PYTHON_SITEPACKAGES_DIR}/* ${libdir}/gps/*.py ${libdir}/*.egg-info" +RDEPENDS_python-pygps = " \ + python-core \ + python-io \ + python-threading \ + python-terminal \ + gpsd \ + python-json" + +RPROVIDES_${PN} += "${PN}-systemd" +RREPLACES_${PN} += "${PN}-systemd" +RCONFLICTS_${PN} += "${PN}-systemd" +SYSTEMD_SERVICE_${PN} = "${BPN}.socket ${BPN}ctl@.service" + + +ALTERNATIVE_${PN} = "gpsd-defaults" +ALTERNATIVE_LINK_NAME[gpsd-defaults] = "${sysconfdir}/default/gpsd" +ALTERNATIVE_TARGET[gpsd-defaults] = "${sysconfdir}/default/gpsd.default"