mirror of
https://git.proxmox.com/git/fwupd
synced 2025-08-07 16:06:06 +00:00
Add initial build files and enough code to launch a simple D-Bus daemon
This commit is contained in:
parent
863067a465
commit
8dbfb1c478
1
MAINTAINERS
Normal file
1
MAINTAINERS
Normal file
@ -0,0 +1 @@
|
|||||||
|
Richard Hughes <richard@hughsie.com>
|
76
Makefile.am
Normal file
76
Makefile.am
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
AUTOMAKE_OPTIONS = 1.7
|
||||||
|
|
||||||
|
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
|
||||||
|
|
||||||
|
SUBDIRS = \
|
||||||
|
po \
|
||||||
|
data \
|
||||||
|
man \
|
||||||
|
policy \
|
||||||
|
src
|
||||||
|
|
||||||
|
snapshot:
|
||||||
|
$(MAKE) dist distdir=$(PACKAGE)-$(VERSION)-`date +"%Y%m%d"`
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
COPYING \
|
||||||
|
MAINTAINERS \
|
||||||
|
AUTHORS \
|
||||||
|
README.md \
|
||||||
|
NEWS \
|
||||||
|
autogen.sh \
|
||||||
|
config.h \
|
||||||
|
intltool-extract.in \
|
||||||
|
intltool-merge.in \
|
||||||
|
intltool-update.in
|
||||||
|
|
||||||
|
MAINTAINERCLEANFILES = \
|
||||||
|
$(srcdir)/INSTALL \
|
||||||
|
$(srcdir)/ABOUT-NLS \
|
||||||
|
$(srcdir)/aclocal.m4 \
|
||||||
|
$(srcdir)/autoscan.log \
|
||||||
|
$(srcdir)/compile \
|
||||||
|
$(srcdir)/config.guess \
|
||||||
|
$(srcdir)/config.rpath \
|
||||||
|
$(srcdir)/config.h.in \
|
||||||
|
$(srcdir)/config.sub \
|
||||||
|
$(srcdir)/configure.scan \
|
||||||
|
$(srcdir)/depcomp \
|
||||||
|
$(srcdir)/install-sh \
|
||||||
|
$(srcdir)/ltmain.sh \
|
||||||
|
$(srcdir)/missing \
|
||||||
|
$(srcdir)/mkinstalldirs \
|
||||||
|
$(srcdir)/omf.make \
|
||||||
|
$(srcdir)/test-driver \
|
||||||
|
$(srcdir)/xmldocs.make \
|
||||||
|
$(srcdir)/gtk-doc.make \
|
||||||
|
$(srcdir)/ChangeLog \
|
||||||
|
$(srcdir)/po/Makefile.in.in~ \
|
||||||
|
$(srcdir)/fwupd-*.tar.* \
|
||||||
|
`find "$(srcdir)" -type f -name Makefile.in -print`
|
||||||
|
|
||||||
|
GITIGNOREFILES = \
|
||||||
|
.tx
|
||||||
|
|
||||||
|
distclean-local:
|
||||||
|
if test $(srdcir) = .; then :; else \
|
||||||
|
rm -f ChangeLog; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
ChangeLog:
|
||||||
|
@echo Creating $@
|
||||||
|
@if test -d "$(srcdir)/.git"; then \
|
||||||
|
(GIT_DIR=$(top_srcdir)/.git ./missing --run git log e197d80c8937c622f21f569457d1bbd05746d951.. --stat -M -C --name-status --date=short --no-color) | fmt --split-only > $@.tmp \
|
||||||
|
&& mv -f $@.tmp $@ \
|
||||||
|
|| ($(RM) $@.tmp; \
|
||||||
|
echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \
|
||||||
|
(test -f $@ || echo git-log is required to generate this file >> $@)); \
|
||||||
|
else \
|
||||||
|
test -f $@ || \
|
||||||
|
(echo A git checkout and git-log is required to generate ChangeLog >&2 && \
|
||||||
|
echo A git checkout and git-log is required to generate this file >> $@); \
|
||||||
|
fi
|
||||||
|
|
||||||
|
.PHONY: ChangeLog
|
||||||
|
|
||||||
|
-include $(top_srcdir)/git.mk
|
4
README.md
Normal file
4
README.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
fwupd
|
||||||
|
=====
|
||||||
|
|
||||||
|
fwupd is a simple daemon to allow session software to update UEFI firmware.
|
28
autogen.sh
Executable file
28
autogen.sh
Executable file
@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2015 Richard Hughes <richard@hughsie.com>
|
||||||
|
#
|
||||||
|
# Run this to generate all the initial makefiles, etc.
|
||||||
|
#
|
||||||
|
# Licensed under the GNU General Public License Version 2
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
|
||||||
|
test -n "$srcdir" || srcdir=`dirname "$0"`
|
||||||
|
test -n "$srcdir" || srcdir=.
|
||||||
|
|
||||||
|
olddir=`pwd`
|
||||||
|
cd "$srcdir"
|
||||||
|
|
||||||
|
AUTORECONF=`which autoreconf`
|
||||||
|
if test -z $AUTORECONF; then
|
||||||
|
echo "*** No autoreconf found, please install it ***"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
autopoint --force
|
||||||
|
ACLOCAL="${ACLOCAL-aclocal} $ACLOCAL_FLAGS" AUTOPOINT='intltoolize --automake --copy' autoreconf --force --install --verbose
|
||||||
|
|
||||||
|
cd "$olddir"
|
||||||
|
test -n "$NOCONFIGURE" || "$srcdir/configure" "$@"
|
117
configure.ac
Normal file
117
configure.ac
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
# Copyright (C) 2015 Richard Hughes <richard@hughsie.com>
|
||||||
|
AC_PREREQ(2.63)
|
||||||
|
|
||||||
|
AC_INIT([fwupd],[0.1.0],[http://www.freedesktop.org/software/fwupd/])
|
||||||
|
AC_CONFIG_SRCDIR(src)
|
||||||
|
AM_INIT_AUTOMAKE([1.9 no-dist-gzip dist-xz tar-ustar foreign])
|
||||||
|
AC_CONFIG_HEADERS([config.h])
|
||||||
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
|
AC_PROG_LIBTOOL
|
||||||
|
|
||||||
|
m4_ifdef([GOBJECT_INTROSPECTION_CHECK], [GOBJECT_INTROSPECTION_CHECK([0.9.8])])
|
||||||
|
AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = xyes)
|
||||||
|
GLIB_GSETTINGS
|
||||||
|
|
||||||
|
# enable nice build output on automake1.11
|
||||||
|
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
|
||||||
|
|
||||||
|
AS_ALL_LINGUAS
|
||||||
|
AC_PROG_CC
|
||||||
|
AC_PROG_INSTALL
|
||||||
|
LT_INIT
|
||||||
|
AM_PROG_CC_C_O
|
||||||
|
IT_PROG_INTLTOOL([0.35.0])
|
||||||
|
AC_PATH_PROG(XSLTPROC, xsltproc)
|
||||||
|
|
||||||
|
dnl ---------------------------------------------------------------------------
|
||||||
|
dnl - Extra verbose warning switches
|
||||||
|
dnl ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if test "$GCC" = "yes"; then
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wall"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wcast-align -Wno-uninitialized"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wmissing-declarations"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wpointer-arith"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wcast-align"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wwrite-strings"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Winit-self"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wreturn-type"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wformat-nonliteral"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wformat-security"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wmissing-include-dirs"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wmissing-format-attribute"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wclobbered"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wempty-body"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wignored-qualifiers"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wsign-compare"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wtype-limits"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wuninitialized"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Waggregate-return"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wdeclaration-after-statement"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wshadow"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wno-strict-aliasing"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Winline"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wmissing-parameter-type"
|
||||||
|
WARNINGFLAGS_C="$WARNINGFLAGS_C -Woverride-init"
|
||||||
|
else
|
||||||
|
WARNINGFLAGS_C=""
|
||||||
|
fi
|
||||||
|
AC_SUBST(WARNINGFLAGS_C)
|
||||||
|
|
||||||
|
dnl ---------------------------------------------------------------------------
|
||||||
|
dnl - gettext stuff
|
||||||
|
dnl ---------------------------------------------------------------------------
|
||||||
|
AM_GNU_GETTEXT_VERSION([0.17])
|
||||||
|
AM_GNU_GETTEXT([external])
|
||||||
|
|
||||||
|
GETTEXT_PACKAGE=AC_PACKAGE_NAME
|
||||||
|
AC_SUBST(GETTEXT_PACKAGE)
|
||||||
|
AC_DEFINE(GETTEXT_PACKAGE, "AC_PACKAGE_NAME", [foo])
|
||||||
|
|
||||||
|
# check for PIE (position independent executable) support
|
||||||
|
if test x$with_pic != xno; then
|
||||||
|
AX_CHECK_COMPILE_FLAG([-fPIE],
|
||||||
|
[AX_CHECK_LINK_FLAG([-fPIE -pie],
|
||||||
|
[PIE_CFLAGS="-fPIE" PIE_LDFLAGS="-pie"])])
|
||||||
|
AC_SUBST(PIE_CFLAGS)
|
||||||
|
AC_SUBST(PIE_LDFLAGS)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# check for full RELRO (relocation read-only) support
|
||||||
|
AX_CHECK_LINK_FLAG([-Wl,-z,relro,-z,now],
|
||||||
|
[RELRO_LDFLAGS="-Wl,-z,relro,-z,now"])
|
||||||
|
AC_SUBST([RELRO_LDFLAGS])
|
||||||
|
|
||||||
|
dnl ---------------------------------------------------------------------------
|
||||||
|
dnl - Check library dependencies
|
||||||
|
dnl ---------------------------------------------------------------------------
|
||||||
|
PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.36.0 gobject-2.0 gthread-2.0 gio-2.0 >= 2.25.9 gio-unix-2.0)
|
||||||
|
PKG_CHECK_MODULES(GUDEV, gudev-1.0)
|
||||||
|
PKG_CHECK_MODULES(POLKIT, polkit-gobject-1 >= 0.103)
|
||||||
|
AC_PATH_PROG(DOCBOOK2MAN, docbook2man)
|
||||||
|
|
||||||
|
dnl ---------------------------------------------------------------------------
|
||||||
|
dnl - Makefiles, etc.
|
||||||
|
dnl ---------------------------------------------------------------------------
|
||||||
|
AC_CONFIG_FILES([
|
||||||
|
Makefile
|
||||||
|
man/Makefile
|
||||||
|
data/Makefile
|
||||||
|
data/tests/Makefile
|
||||||
|
policy/Makefile
|
||||||
|
po/Makefile.in
|
||||||
|
src/Makefile
|
||||||
|
])
|
||||||
|
AC_OUTPUT
|
||||||
|
|
||||||
|
dnl ==========================================================================
|
||||||
|
echo "
|
||||||
|
fwupd $VERSION
|
||||||
|
=================
|
||||||
|
|
||||||
|
prefix: ${prefix}
|
||||||
|
datadir: ${datadir}
|
||||||
|
compiler: ${CC}
|
||||||
|
cflags: ${CFLAGS}
|
||||||
|
cppflags: ${CPPFLAGS}
|
||||||
|
"
|
51
contrib/fwupd.spec.in
Normal file
51
contrib/fwupd.spec.in
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
%define alphatag #ALPHATAG#
|
||||||
|
|
||||||
|
Summary: Firmware update daemon
|
||||||
|
Name: fwupd
|
||||||
|
Version: #VERSION#
|
||||||
|
Release: 0.#BUILD#%{?alphatag}%{?dist}
|
||||||
|
License: GPLv2+
|
||||||
|
URL: https://github.com/hughsie/fwupd
|
||||||
|
Source0: http://www.freedesktop.org/software/releases/%{name}-%{version}.tar.xz
|
||||||
|
|
||||||
|
BuildRequires: docbook-utils
|
||||||
|
BuildRequires: gettext
|
||||||
|
BuildRequires: glib2-devel
|
||||||
|
BuildRequires: intltool
|
||||||
|
BuildRequires: libgudev1-devel
|
||||||
|
BuildRequires: polkit-devel >= 0.103
|
||||||
|
|
||||||
|
%description
|
||||||
|
fwupd is a daemon to allow session software to update UEFI firmware.
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q
|
||||||
|
|
||||||
|
%build
|
||||||
|
%configure \
|
||||||
|
--disable-static \
|
||||||
|
--disable-rpath \
|
||||||
|
--disable-silent-rules \
|
||||||
|
--disable-dependency-tracking
|
||||||
|
|
||||||
|
make %{?_smp_mflags}
|
||||||
|
|
||||||
|
%install
|
||||||
|
make install DESTDIR=$RPM_BUILD_ROOT
|
||||||
|
|
||||||
|
%find_lang %{name}
|
||||||
|
|
||||||
|
%files -f %{name}.lang
|
||||||
|
%doc README.md AUTHORS NEWS COPYING
|
||||||
|
%{_libexecdir}/fwupd
|
||||||
|
%{_bindir}/fwupdmgr
|
||||||
|
%{_sysconfdir}/dbus-1/system.d/org.freedesktop.fwupd.conf
|
||||||
|
%{_datadir}/dbus-1/interfaces/org.freedesktop.fwupd.xml
|
||||||
|
%{_datadir}/polkit-1/actions/org.freedesktop.fwupd.policy
|
||||||
|
%{_datadir}/dbus-1/system-services/org.freedesktop.fwupd.service
|
||||||
|
%{_datadir}/man/man1/fwupdmgr.1.gz
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* #LONGDATE# Richard Hughes <richard@hughsie.com> #VERSION#-0.#BUILD##ALPHATAG#
|
||||||
|
- Update from git
|
||||||
|
|
20
data/Makefile.am
Normal file
20
data/Makefile.am
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
SUBDIRS = tests
|
||||||
|
|
||||||
|
dbusdir = $(sysconfdir)/dbus-1/system.d
|
||||||
|
dist_dbus_DATA = org.freedesktop.fwupd.conf
|
||||||
|
|
||||||
|
dbusservicemaindir = $(datadir)/dbus-1/system-services
|
||||||
|
dbusservicemain_in_files = org.freedesktop.fwupd.service.in
|
||||||
|
dbusservicemain_DATA = $(dbusservicemain_in_files:.service.in=.service)
|
||||||
|
$(dbusservicemain_DATA): $(dbusservicemain_in_files) Makefile
|
||||||
|
@sed -e "s|\@servicedir\@|$(libexecdir)|" $< | \
|
||||||
|
sed -e "s|\@daemon_user\@|$(daemon_user)|" > $@
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
$(dbusservicemain_in_files)
|
||||||
|
|
||||||
|
DISTCLEANFILES = \
|
||||||
|
$(dbusservicemain_DATA) \
|
||||||
|
$(systemdservicemain_DATA)
|
||||||
|
|
||||||
|
-include $(top_srcdir)/git.mk
|
29
data/org.freedesktop.fwupd.conf
Normal file
29
data/org.freedesktop.fwupd.conf
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->
|
||||||
|
|
||||||
|
<!DOCTYPE busconfig PUBLIC
|
||||||
|
"-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
|
||||||
|
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
|
||||||
|
<busconfig>
|
||||||
|
|
||||||
|
<!-- This configuration file specifies the required security policies
|
||||||
|
for the fwupd to work. -->
|
||||||
|
|
||||||
|
<!-- Only user root can own the fwupd service -->
|
||||||
|
<policy user="root">
|
||||||
|
<allow own="org.freedesktop.fwupd"/>
|
||||||
|
</policy>
|
||||||
|
|
||||||
|
<!-- Allow anyone to call into the service - we'll reject callers using PolicyKit -->
|
||||||
|
<policy context="default">
|
||||||
|
<allow send_destination="org.freedesktop.fwupd"
|
||||||
|
send_interface="org.freedesktop.fwupd"/>
|
||||||
|
<allow send_destination="org.freedesktop.fwupd"
|
||||||
|
send_interface="org.freedesktop.DBus.Properties"/>
|
||||||
|
<allow send_destination="org.freedesktop.fwupd"
|
||||||
|
send_interface="org.freedesktop.DBus.Introspectable"/>
|
||||||
|
<allow send_destination="org.freedesktop.fwupd"
|
||||||
|
send_interface="org.freedesktop.DBus.Peer"/>
|
||||||
|
</policy>
|
||||||
|
|
||||||
|
</busconfig>
|
||||||
|
|
4
data/org.freedesktop.fwupd.service.in
Normal file
4
data/org.freedesktop.fwupd.service.in
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[D-BUS Service]
|
||||||
|
Name=org.freedesktop.fwupd
|
||||||
|
Exec=@servicedir@/fwupd
|
||||||
|
#SystemdService=fwupd.service
|
5
data/tests/Makefile.am
Normal file
5
data/tests/Makefile.am
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
test_files =
|
||||||
|
|
||||||
|
EXTRA_DIST = $(test_files)
|
||||||
|
|
||||||
|
-include $(top_srcdir)/git.mk
|
200
git.mk
Normal file
200
git.mk
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
# git.mk
|
||||||
|
#
|
||||||
|
# Copyright 2009, Red Hat, Inc.
|
||||||
|
# Written by Behdad Esfahbod
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification,
|
||||||
|
# are permitted in any medium without royalty provided the copyright
|
||||||
|
# notice and this notice are preserved.
|
||||||
|
#
|
||||||
|
# The canonical source for this file is pango/git.mk, or whereever the
|
||||||
|
# header of pango/git.mk suggests in the future.
|
||||||
|
#
|
||||||
|
# To use in your project, import this file in your git repo's toplevel,
|
||||||
|
# then do "make -f git.mk". This modifies all Makefile.am files in
|
||||||
|
# your project to include git.mk.
|
||||||
|
#
|
||||||
|
# This enables automatic .gitignore generation. If you need to ignore
|
||||||
|
# more files, add them to the GITIGNOREFILES variable in your Makefile.am.
|
||||||
|
# But think twice before doing that. If a file has to be in .gitignore,
|
||||||
|
# chances are very high that it's a generated file and should be in one
|
||||||
|
# of MOSTLYCLEANFILES, CLEANFILES, DISTCLEANFILES, or MAINTAINERCLEANFILES.
|
||||||
|
#
|
||||||
|
# The only case that you need to manually add a file to GITIGNOREFILES is
|
||||||
|
# when remove files in one of mostlyclean-local, clean-local, distclean-local,
|
||||||
|
# or maintainer-clean-local.
|
||||||
|
#
|
||||||
|
# Note that for files like editor backup, etc, there are better places to
|
||||||
|
# ignore them. See "man gitignore".
|
||||||
|
#
|
||||||
|
# If "make maintainer-clean" removes the files but they are not recognized
|
||||||
|
# by this script (that is, if "git status" shows untracked files still), send
|
||||||
|
# me the output of "git status" as well as your Makefile.am and Makefile for
|
||||||
|
# the directories involved.
|
||||||
|
#
|
||||||
|
# For a list of toplevel files that should be in MAINTAINERCLEANFILES, see
|
||||||
|
# pango/Makefile.am.
|
||||||
|
#
|
||||||
|
# Don't EXTRA_DIST this file. It is supposed to only live in git clones,
|
||||||
|
# not tarballs. It serves no useful purpose in tarballs and clutters the
|
||||||
|
# build dir.
|
||||||
|
#
|
||||||
|
# This file knows how to handle autoconf, automake, libtool, gtk-doc,
|
||||||
|
# gnome-doc-utils, mallard, intltool, gsettings.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# KNOWN ISSUES:
|
||||||
|
#
|
||||||
|
# - Recursive configure doesn't work as $(top_srcdir)/git.mk inside the
|
||||||
|
# submodule doesn't find us. If you have configure.{in,ac} files in
|
||||||
|
# subdirs, add a proxy git.mk file in those dirs that simply does:
|
||||||
|
# "include $(top_srcdir)/../git.mk". Add more ..'s to your taste.
|
||||||
|
# And add those files to git. See vte/gnome-pty-helper/git.mk for
|
||||||
|
# example.
|
||||||
|
#
|
||||||
|
# ChangeLog
|
||||||
|
#
|
||||||
|
# - 2010-12-06 Add support for Mallard docs
|
||||||
|
# - 2010-12-06 Start this change log
|
||||||
|
|
||||||
|
git-all: git-mk-install
|
||||||
|
|
||||||
|
git-mk-install:
|
||||||
|
@echo Installing git makefile
|
||||||
|
@any_failed=; find $(top_srcdir) -name Makefile.am | while read x; do \
|
||||||
|
if grep 'include .*/git.mk' $$x >/dev/null; then \
|
||||||
|
echo $$x already includes git.mk; \
|
||||||
|
else \
|
||||||
|
failed=; \
|
||||||
|
echo "Updating $$x"; \
|
||||||
|
{ cat $$x; \
|
||||||
|
echo ''; \
|
||||||
|
echo '-include $$(top_srcdir)/git.mk'; \
|
||||||
|
} > $$x.tmp || failed=1; \
|
||||||
|
if test x$$failed = x; then \
|
||||||
|
mv $$x.tmp $$x || failed=1; \
|
||||||
|
fi; \
|
||||||
|
if test x$$failed = x; then : else \
|
||||||
|
echo Failed updating $$x; >&2 \
|
||||||
|
any_failed=1; \
|
||||||
|
fi; \
|
||||||
|
fi; done; test -z "$$any_failed"
|
||||||
|
|
||||||
|
.PHONY: git-all git-mk-install
|
||||||
|
|
||||||
|
|
||||||
|
### .gitignore generation
|
||||||
|
|
||||||
|
$(srcdir)/.gitignore: Makefile.am $(top_srcdir)/git.mk
|
||||||
|
$(AM_V_GEN) \
|
||||||
|
{ \
|
||||||
|
if test "x$(DOC_MODULE)" = x -o "x$(DOC_MAIN_SGML_FILE)" = x; then :; else \
|
||||||
|
for x in \
|
||||||
|
$(DOC_MODULE)-decl-list.txt \
|
||||||
|
$(DOC_MODULE)-decl.txt \
|
||||||
|
tmpl/$(DOC_MODULE)-unused.sgml \
|
||||||
|
"tmpl/*.bak" \
|
||||||
|
xml html \
|
||||||
|
; do echo /$$x; done; \
|
||||||
|
fi; \
|
||||||
|
if test "x$(DOC_MODULE)$(DOC_ID)" = x -o "x$(DOC_LINGUAS)" = x; then :; else \
|
||||||
|
for x in \
|
||||||
|
$(_DOC_C_DOCS) \
|
||||||
|
$(_DOC_LC_DOCS) \
|
||||||
|
$(_DOC_OMF_ALL) \
|
||||||
|
$(_DOC_DSK_ALL) \
|
||||||
|
$(_DOC_HTML_ALL) \
|
||||||
|
$(_DOC_MOFILES) \
|
||||||
|
$(_DOC_POFILES) \
|
||||||
|
$(DOC_H_FILE) \
|
||||||
|
"*/.xml2po.mo" \
|
||||||
|
"*/*.omf.out" \
|
||||||
|
; do echo /$$x; done; \
|
||||||
|
fi; \
|
||||||
|
if test "x$(gsettings_SCHEMAS)" = x; then :; else \
|
||||||
|
for x in \
|
||||||
|
$(gsettings_SCHEMAS:.xml=.valid) \
|
||||||
|
$(gsettings__enum_file) \
|
||||||
|
; do echo /$$x; done; \
|
||||||
|
fi; \
|
||||||
|
if test -f $(srcdir)/po/Makefile.in.in; then \
|
||||||
|
for x in \
|
||||||
|
po/Makefile.in.in \
|
||||||
|
po/Makefile.in \
|
||||||
|
po/Makefile \
|
||||||
|
po/POTFILES \
|
||||||
|
po/stamp-it \
|
||||||
|
po/.intltool-merge-cache \
|
||||||
|
"po/*.gmo" \
|
||||||
|
"po/*.mo" \
|
||||||
|
po/$(GETTEXT_PACKAGE).pot \
|
||||||
|
intltool-extract.in \
|
||||||
|
intltool-merge.in \
|
||||||
|
intltool-update.in \
|
||||||
|
; do echo /$$x; done; \
|
||||||
|
fi; \
|
||||||
|
if test -f $(srcdir)/configure; then \
|
||||||
|
for x in \
|
||||||
|
autom4te.cache \
|
||||||
|
configure \
|
||||||
|
config.h \
|
||||||
|
stamp-h1 \
|
||||||
|
libtool \
|
||||||
|
config.lt \
|
||||||
|
; do echo /$$x; done; \
|
||||||
|
fi; \
|
||||||
|
for x in \
|
||||||
|
.gitignore \
|
||||||
|
$(GITIGNOREFILES) \
|
||||||
|
$(CLEANFILES) \
|
||||||
|
$(PROGRAMS) \
|
||||||
|
$(check_PROGRAMS) \
|
||||||
|
$(EXTRA_PROGRAMS) \
|
||||||
|
$(LTLIBRARIES) \
|
||||||
|
so_locations \
|
||||||
|
.libs _libs \
|
||||||
|
$(MOSTLYCLEANFILES) \
|
||||||
|
"*.$(OBJEXT)" \
|
||||||
|
"*.lo" \
|
||||||
|
$(DISTCLEANFILES) \
|
||||||
|
$(am__CONFIG_DISTCLEAN_FILES) \
|
||||||
|
$(CONFIG_CLEAN_FILES) \
|
||||||
|
TAGS ID GTAGS GRTAGS GSYMS GPATH tags \
|
||||||
|
"*.tab.c" \
|
||||||
|
$(MAINTAINERCLEANFILES) \
|
||||||
|
$(BUILT_SOURCES) \
|
||||||
|
$(DEPDIR) \
|
||||||
|
Makefile \
|
||||||
|
Makefile.in \
|
||||||
|
"*.orig" \
|
||||||
|
"*.rej" \
|
||||||
|
"*.bak" \
|
||||||
|
"*~" \
|
||||||
|
".*.sw[nop]" \
|
||||||
|
".dirstamp" \
|
||||||
|
; do echo /$$x; done; \
|
||||||
|
} | \
|
||||||
|
sed "s@^/`echo "$(srcdir)" | sed 's/\(.\)/[\1]/g'`/@/@" | \
|
||||||
|
sed 's@/[.]/@/@g' | \
|
||||||
|
LC_ALL=C sort | uniq > $@.tmp && \
|
||||||
|
mv $@.tmp $@;
|
||||||
|
|
||||||
|
all: $(srcdir)/.gitignore gitignore-recurse-maybe
|
||||||
|
gitignore-recurse-maybe:
|
||||||
|
@if test "x$(SUBDIRS)" = "x$(DIST_SUBDIRS)"; then :; else \
|
||||||
|
$(MAKE) $(AM_MAKEFLAGS) gitignore-recurse; \
|
||||||
|
fi;
|
||||||
|
gitignore-recurse:
|
||||||
|
@for subdir in $(DIST_SUBDIRS); do \
|
||||||
|
case " $(SUBDIRS) " in \
|
||||||
|
*" $$subdir "*) :;; \
|
||||||
|
*) test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) .gitignore gitignore-recurse || echo "Skipping $$subdir");; \
|
||||||
|
esac; \
|
||||||
|
done
|
||||||
|
gitignore: $(srcdir)/.gitignore gitignore-recurse
|
||||||
|
|
||||||
|
maintainer-clean: gitignore-clean
|
||||||
|
gitignore-clean:
|
||||||
|
-rm -f $(srcdir)/.gitignore
|
||||||
|
|
||||||
|
.PHONY: gitignore-clean gitignore gitignore-recurse gitignore-recurse-maybe
|
1
m4/.gitignore
vendored
Normal file
1
m4/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
*.m4
|
24
m4/as-linguas.m4
Normal file
24
m4/as-linguas.m4
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Set ALL_ALL_LINGUAS based on the .po files present. Optional argument is the
|
||||||
|
# name of the po directory. $podir/LINGUAS.ignore can be used to ignore a
|
||||||
|
# subset of the po files.
|
||||||
|
|
||||||
|
AC_DEFUN([AS_ALL_LINGUAS],
|
||||||
|
[
|
||||||
|
AC_MSG_CHECKING([for linguas])
|
||||||
|
podir="m4_default([$1],[$srcdir/po])"
|
||||||
|
linguas=`cd $podir && ls *.po 2>/dev/null | awk 'BEGIN { FS="."; ORS=" " } { print $[]1 }'`
|
||||||
|
if test -f "$podir/LINGUAS.ignore"; then
|
||||||
|
ALL_LINGUAS="";
|
||||||
|
ignore_linguas=`sed -n -e 's/^\s\+\|\s\+$//g' -e '/^#/b' -e '/\S/!b' \
|
||||||
|
-e 's/\s\+/\n/g' -e p "$podir/LINGUAS.ignore"`;
|
||||||
|
for lang in $linguas; do
|
||||||
|
if ! echo "$ignore_linguas" | grep -q "^${lang}$"; then
|
||||||
|
ALL_LINGUAS="$ALL_LINGUAS $lang";
|
||||||
|
fi;
|
||||||
|
done;
|
||||||
|
else
|
||||||
|
ALL_LINGUAS="$linguas";
|
||||||
|
fi;
|
||||||
|
AC_SUBST([ALL_LINGUAS])
|
||||||
|
AC_MSG_RESULT($ALL_LINGUAS)
|
||||||
|
])
|
72
m4/ax_check_compile_flag.m4
Normal file
72
m4/ax_check_compile_flag.m4
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
# ===========================================================================
|
||||||
|
# http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
|
||||||
|
# ===========================================================================
|
||||||
|
#
|
||||||
|
# SYNOPSIS
|
||||||
|
#
|
||||||
|
# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS])
|
||||||
|
#
|
||||||
|
# DESCRIPTION
|
||||||
|
#
|
||||||
|
# Check whether the given FLAG works with the current language's compiler
|
||||||
|
# or gives an error. (Warnings, however, are ignored)
|
||||||
|
#
|
||||||
|
# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
|
||||||
|
# success/failure.
|
||||||
|
#
|
||||||
|
# If EXTRA-FLAGS is defined, it is added to the current language's default
|
||||||
|
# flags (e.g. CFLAGS) when the check is done. The check is thus made with
|
||||||
|
# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
|
||||||
|
# force the compiler to issue an error when a bad flag is given.
|
||||||
|
#
|
||||||
|
# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
|
||||||
|
# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
|
||||||
|
#
|
||||||
|
# LICENSE
|
||||||
|
#
|
||||||
|
# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
|
||||||
|
# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU General Public License as published by the
|
||||||
|
# Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
# option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||||
|
# Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along
|
||||||
|
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||||
|
# gives unlimited permission to copy, distribute and modify the configure
|
||||||
|
# scripts that are the output of Autoconf when processing the Macro. You
|
||||||
|
# need not follow the terms of the GNU General Public License when using
|
||||||
|
# or distributing such scripts, even though portions of the text of the
|
||||||
|
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||||
|
# all other use of the material that constitutes the Autoconf Macro.
|
||||||
|
#
|
||||||
|
# This special exception to the GPL applies to versions of the Autoconf
|
||||||
|
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||||
|
# modified version of the Autoconf Macro, you may extend this special
|
||||||
|
# exception to the GPL to apply to your modified version as well.
|
||||||
|
|
||||||
|
#serial 2
|
||||||
|
|
||||||
|
AC_DEFUN([AX_CHECK_COMPILE_FLAG],
|
||||||
|
[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX
|
||||||
|
AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
|
||||||
|
AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
|
||||||
|
ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
|
||||||
|
_AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
|
||||||
|
[AS_VAR_SET(CACHEVAR,[yes])],
|
||||||
|
[AS_VAR_SET(CACHEVAR,[no])])
|
||||||
|
_AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
|
||||||
|
AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes],
|
||||||
|
[m4_default([$2], :)],
|
||||||
|
[m4_default([$3], :)])
|
||||||
|
AS_VAR_POPDEF([CACHEVAR])dnl
|
||||||
|
])dnl AX_CHECK_COMPILE_FLAGS
|
71
m4/ax_check_link_flag.m4
Normal file
71
m4/ax_check_link_flag.m4
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
# ===========================================================================
|
||||||
|
# http://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html
|
||||||
|
# ===========================================================================
|
||||||
|
#
|
||||||
|
# SYNOPSIS
|
||||||
|
#
|
||||||
|
# AX_CHECK_LINK_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS])
|
||||||
|
#
|
||||||
|
# DESCRIPTION
|
||||||
|
#
|
||||||
|
# Check whether the given FLAG works with the linker or gives an error.
|
||||||
|
# (Warnings, however, are ignored)
|
||||||
|
#
|
||||||
|
# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
|
||||||
|
# success/failure.
|
||||||
|
#
|
||||||
|
# If EXTRA-FLAGS is defined, it is added to the linker's default flags
|
||||||
|
# when the check is done. The check is thus made with the flags: "LDFLAGS
|
||||||
|
# EXTRA-FLAGS FLAG". This can for example be used to force the linker to
|
||||||
|
# issue an error when a bad flag is given.
|
||||||
|
#
|
||||||
|
# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
|
||||||
|
# macro in sync with AX_CHECK_{PREPROC,COMPILE}_FLAG.
|
||||||
|
#
|
||||||
|
# LICENSE
|
||||||
|
#
|
||||||
|
# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
|
||||||
|
# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU General Public License as published by the
|
||||||
|
# Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
# option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||||
|
# Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along
|
||||||
|
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||||
|
# gives unlimited permission to copy, distribute and modify the configure
|
||||||
|
# scripts that are the output of Autoconf when processing the Macro. You
|
||||||
|
# need not follow the terms of the GNU General Public License when using
|
||||||
|
# or distributing such scripts, even though portions of the text of the
|
||||||
|
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||||
|
# all other use of the material that constitutes the Autoconf Macro.
|
||||||
|
#
|
||||||
|
# This special exception to the GPL applies to versions of the Autoconf
|
||||||
|
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||||
|
# modified version of the Autoconf Macro, you may extend this special
|
||||||
|
# exception to the GPL to apply to your modified version as well.
|
||||||
|
|
||||||
|
#serial 2
|
||||||
|
|
||||||
|
AC_DEFUN([AX_CHECK_LINK_FLAG],
|
||||||
|
[AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_ldflags_$4_$1])dnl
|
||||||
|
AC_CACHE_CHECK([whether the linker accepts $1], CACHEVAR, [
|
||||||
|
ax_check_save_flags=$LDFLAGS
|
||||||
|
LDFLAGS="$LDFLAGS $4 $1"
|
||||||
|
AC_LINK_IFELSE([AC_LANG_PROGRAM()],
|
||||||
|
[AS_VAR_SET(CACHEVAR,[yes])],
|
||||||
|
[AS_VAR_SET(CACHEVAR,[no])])
|
||||||
|
LDFLAGS=$ax_check_save_flags])
|
||||||
|
AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes],
|
||||||
|
[m4_default([$2], :)],
|
||||||
|
[m4_default([$3], :)])
|
||||||
|
AS_VAR_POPDEF([CACHEVAR])dnl
|
||||||
|
])dnl AX_CHECK_LINK_FLAGS
|
26
man/Makefile.am
Normal file
26
man/Makefile.am
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
man_MANS_DIST = \
|
||||||
|
fwupdmgr.1
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
fwupdmgr.sgml \
|
||||||
|
$(man_MANS_DIST)
|
||||||
|
|
||||||
|
man_MANS = \
|
||||||
|
$(man_MANS_DIST)
|
||||||
|
|
||||||
|
fwupdmgr.1: fwupdmgr.sgml
|
||||||
|
$(AM_V_GEN) \
|
||||||
|
docbook2man $? > /dev/null
|
||||||
|
|
||||||
|
MAINTAINERCLEANFILES = \
|
||||||
|
manpage.links \
|
||||||
|
manpage.log \
|
||||||
|
manpage.refs \
|
||||||
|
$(man_MANS)
|
||||||
|
|
||||||
|
clean-local :
|
||||||
|
rm -f *~
|
||||||
|
rm -f *.1
|
||||||
|
rm -f manpage.*
|
||||||
|
|
||||||
|
-include $(top_srcdir)/git.mk
|
113
man/fwupdmgr.sgml
Normal file
113
man/fwupdmgr.sgml
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
|
||||||
|
<!-- Please adjust the date whenever revising the manpage. -->
|
||||||
|
<!ENTITY date "<date>26 February,2015</date>">
|
||||||
|
<!ENTITY package "fwupdmgr">
|
||||||
|
<!ENTITY gnu "<acronym>GNU</acronym>">
|
||||||
|
<!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
|
||||||
|
]>
|
||||||
|
|
||||||
|
<refentry>
|
||||||
|
<refentryinfo>
|
||||||
|
<address>
|
||||||
|
<email>richard@hughsie.com</email>;
|
||||||
|
</address>
|
||||||
|
<author>
|
||||||
|
<firstname>Richard</firstname>
|
||||||
|
<surname>Hughes</surname>
|
||||||
|
</author>
|
||||||
|
<copyright>
|
||||||
|
<year>2015</year>
|
||||||
|
<holder>Richard Hughes</holder>
|
||||||
|
</copyright>
|
||||||
|
&date;
|
||||||
|
</refentryinfo>
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>fwupdmgr</refentrytitle>
|
||||||
|
<manvolnum>1</manvolnum>
|
||||||
|
</refmeta>
|
||||||
|
<refnamediv>
|
||||||
|
<refname>&package;</refname>
|
||||||
|
<refpurpose>fwupd client tool</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<cmdsynopsis>
|
||||||
|
<command>&package;</command>
|
||||||
|
<arg><option>--verbose</option></arg>
|
||||||
|
</cmdsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
<refsect1>
|
||||||
|
<title>DESCRIPTION</title>
|
||||||
|
<para>
|
||||||
|
This manual page documents briefly the <command>&package;</command> command.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
<command>&package;</command> allows an administrator to update firmware.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
<refsect1>
|
||||||
|
<title>OPTIONS</title>
|
||||||
|
<para>
|
||||||
|
This program follows the usual &gnu; command line syntax,
|
||||||
|
with long options starting with two dashes (`-'). A summary of
|
||||||
|
options is included below.
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<option>--help</option>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Show summary of options.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
<refsect1>
|
||||||
|
<title>COMMANDS</title>
|
||||||
|
<para>
|
||||||
|
This program takes commands with a variable number of arguments.
|
||||||
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<option>get-devices</option>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Get the list of hardware that supports firmware updates.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<option>update-offline</option>
|
||||||
|
<parameter>guid</parameter>
|
||||||
|
<parameter>filename</parameter>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Install the update the next time the computer is rebooted.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
<refsect1>
|
||||||
|
<title>AUTHOR</title>
|
||||||
|
<para>This manual page was written by Richard Hughes <email>richard@hughsie.com</email>.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
||||||
|
|
||||||
|
<!-- Keep this comment at the end of the file
|
||||||
|
Local variables:
|
||||||
|
mode: sgml
|
||||||
|
sgml-omittag:t
|
||||||
|
sgml-shorttag:t
|
||||||
|
sgml-minimize-attributes:nil
|
||||||
|
sgml-always-quote-attributes:t
|
||||||
|
sgml-indent-step:2
|
||||||
|
sgml-indent-data:t
|
||||||
|
sgml-parent-document:nil
|
||||||
|
sgml-default-dtd-file:nil
|
||||||
|
sgml-exposed-tags:nil
|
||||||
|
sgml-local-catalogs:nil
|
||||||
|
sgml-local-ecat-files:nil
|
||||||
|
End:
|
||||||
|
-->
|
10
po/.gitignore
vendored
Normal file
10
po/.gitignore
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
*.gmo
|
||||||
|
*.header
|
||||||
|
.intltool-merge-cache
|
||||||
|
Makefile.in.in
|
||||||
|
Makevars.template
|
||||||
|
POTFILES
|
||||||
|
Rules-quot
|
||||||
|
*.sed
|
||||||
|
*.sin
|
||||||
|
stamp-it
|
3
po/POTFILES.in
Normal file
3
po/POTFILES.in
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
policy/org.freedesktop.fwupd.policy.in
|
||||||
|
src/fu-main.c
|
||||||
|
src/fu-util.c
|
25
po/en_GB.po
Normal file
25
po/en_GB.po
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Richard Hughes <richard@hughsie.com>, 2015
|
||||||
|
# Robert Readman <robert_readman@hotmail.com>, 2013
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: fwupd\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2014-11-10 11:04+0000\n"
|
||||||
|
"PO-Revision-Date: 2014-11-10 11:04+0000\n"
|
||||||
|
"Last-Translator: Richard Hughes <richard@hughsie.com>\n"
|
||||||
|
"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/colord/language/en_GB/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: en_GB\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#. TRANSLATORS: this is a command alias
|
||||||
|
#, c-format
|
||||||
|
msgid "Alias to %s"
|
||||||
|
msgstr "Alias to %s"
|
12
policy/Makefile.am
Normal file
12
policy/Makefile.am
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
@INTLTOOL_POLICY_RULE@
|
||||||
|
polkit_policydir = $(datadir)/polkit-1/actions
|
||||||
|
polkit_policy_in_files = org.freedesktop.fwupd.policy.in
|
||||||
|
polkit_policy_DATA = $(polkit_policy_in_files:.policy.in=.policy)
|
||||||
|
#polkit_policy_DATA = \
|
||||||
|
# org.freedesktop.fwupd.policy
|
||||||
|
|
||||||
|
EXTRA_DIST = org.freedesktop.fwupd.policy.in
|
||||||
|
CLEANFILES = \
|
||||||
|
org.freedesktop.fwupd.policy
|
||||||
|
|
||||||
|
-include $(top_srcdir)/git.mk
|
32
policy/org.freedesktop.fwupd.policy.in
Normal file
32
policy/org.freedesktop.fwupd.policy.in
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE policyconfig PUBLIC
|
||||||
|
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
|
||||||
|
"http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
|
||||||
|
<policyconfig>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Policy definitions for fwupd actions.
|
||||||
|
Copyright (c) 2015 Richard Hughes <richard@hughsie.com>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<vendor>System firmware update</vendor>
|
||||||
|
<vendor_url>https://github.com/hughsie/fwupd</vendor_url>
|
||||||
|
<icon_name>application-vnd.iccprofile</icon_name>
|
||||||
|
|
||||||
|
<action id="org.freedesktop.fwupd.update">
|
||||||
|
<!-- SECURITY:
|
||||||
|
- Normal users require admin authentication to update firmware
|
||||||
|
- This should not be set to 'yes' as unprivileged users could then
|
||||||
|
update to hostile and unsigned firmware.
|
||||||
|
-->
|
||||||
|
<_description>Install system firmware update</_description>
|
||||||
|
<_message>Authentication is required to update the firmware on this machine</_message>
|
||||||
|
<icon_name>application-vnd.iccprofile</icon_name>
|
||||||
|
<defaults>
|
||||||
|
<allow_any>auth_admin</allow_any>
|
||||||
|
<allow_inactive>no</allow_inactive>
|
||||||
|
<allow_active>auth_admin_keep</allow_active>
|
||||||
|
</defaults>
|
||||||
|
</action>
|
||||||
|
|
||||||
|
</policyconfig>
|
89
src/Makefile.am
Normal file
89
src/Makefile.am
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
introspectiondir = $(datadir)/dbus-1/interfaces
|
||||||
|
dist_introspection_DATA = \
|
||||||
|
org.freedesktop.fwupd.xml
|
||||||
|
|
||||||
|
AM_CPPFLAGS = \
|
||||||
|
$(PIE_CFLAGS) \
|
||||||
|
$(GLIB_CFLAGS) \
|
||||||
|
$(POLKIT_CFLAGS) \
|
||||||
|
$(GUDEV_CFLAGS) \
|
||||||
|
-DG_LOG_DOMAIN=\"Fu\" \
|
||||||
|
-DLIBEXECDIR=\"$(libexecdir)\" \
|
||||||
|
-DLIBDIR=\"$(libdir)\" \
|
||||||
|
-DDATADIR=\"$(datadir)\" \
|
||||||
|
-DSYSCONFDIR=\""$(sysconfdir)"\" \
|
||||||
|
-DLOCALSTATEDIR=\""$(localstatedir)"\" \
|
||||||
|
-DVERSION="\"$(VERSION)\"" \
|
||||||
|
-DDAEMON_USER="\"$(daemon_user)\"" \
|
||||||
|
-DG_UDEV_API_IS_SUBJECT_TO_CHANGE \
|
||||||
|
-DLOCALEDIR=\""$(localedir)"\"
|
||||||
|
|
||||||
|
bin_PROGRAMS = fwupdmgr
|
||||||
|
|
||||||
|
fwupdmgr_SOURCES = \
|
||||||
|
fu-util.c
|
||||||
|
|
||||||
|
fwupdmgr_LDADD = \
|
||||||
|
$(GLIB_LIBS)
|
||||||
|
|
||||||
|
fwupdmgr_LDFLAGS = \
|
||||||
|
$(PIE_LDFLAGS)
|
||||||
|
|
||||||
|
fwupdmgr_CFLAGS = \
|
||||||
|
$(WARNINGFLAGS_C)
|
||||||
|
|
||||||
|
fu-resources.c: fwupd.gresource.xml $(dist_introspection_DATA)
|
||||||
|
$(AM_V_GEN) \
|
||||||
|
glib-compile-resources \
|
||||||
|
--sourcedir=$(srcdir) \
|
||||||
|
--sourcedir=$(top_builddir)/data \
|
||||||
|
--target=$@ \
|
||||||
|
--generate-source \
|
||||||
|
--c-name fu \
|
||||||
|
$(srcdir)/fwupd.gresource.xml
|
||||||
|
fu-resources.h: fwupd.gresource.xml
|
||||||
|
$(AM_V_GEN) \
|
||||||
|
glib-compile-resources \
|
||||||
|
--sourcedir=$(srcdir) \
|
||||||
|
--sourcedir=$(top_builddir)/data \
|
||||||
|
--target=$@ \
|
||||||
|
--generate-header \
|
||||||
|
--c-name fu \
|
||||||
|
$(srcdir)/fwupd.gresource.xml
|
||||||
|
|
||||||
|
libexec_PROGRAMS = \
|
||||||
|
fwupd
|
||||||
|
|
||||||
|
fwupd_SOURCES = \
|
||||||
|
fu-cleanup.h \
|
||||||
|
fu-common.h \
|
||||||
|
fu-device.c \
|
||||||
|
fu-device.h \
|
||||||
|
fu-provider-uefi.c \
|
||||||
|
fu-provider-uefi.h \
|
||||||
|
fu-resources.c \
|
||||||
|
fu-resources.h \
|
||||||
|
fu-main.c
|
||||||
|
|
||||||
|
fwupd_LDADD = \
|
||||||
|
$(POLKIT_LIBS) \
|
||||||
|
$(GUDEV_LIBS) \
|
||||||
|
$(GLIB_LIBS)
|
||||||
|
|
||||||
|
fwupd_LDFLAGS = \
|
||||||
|
$(PIE_LDFLAGS) \
|
||||||
|
$(RELRO_LDFLAGS)
|
||||||
|
|
||||||
|
fwupd_CFLAGS = \
|
||||||
|
$(WARNINGFLAGS_C)
|
||||||
|
|
||||||
|
BUILT_SOURCES = \
|
||||||
|
fu-resources.c \
|
||||||
|
fu-resources.h
|
||||||
|
|
||||||
|
CLEANFILES = $(BUILT_SOURCES) *.log *.trs
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
fwupd.gresource.xml
|
||||||
|
|
||||||
|
-include $(top_srcdir)/git.mk
|
91
src/fu-cleanup.h
Normal file
91
src/fu-cleanup.h
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 Colin Walters <walters@verbum.org>.
|
||||||
|
* Copyright (C) 2014-2015 Richard Hughes <richard@hughsie.com>
|
||||||
|
*
|
||||||
|
* Licensed under the GNU Lesser General Public License Version 2.1
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __FU_CLEANUP_H__
|
||||||
|
#define __FU_CLEANUP_H__
|
||||||
|
|
||||||
|
#include <gio/gio.h>
|
||||||
|
|
||||||
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
#define GS_DEFINE_CLEANUP_FUNCTION(Type, name, func) \
|
||||||
|
static inline void name (void *v) \
|
||||||
|
{ \
|
||||||
|
func (*(Type*)v); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define GS_DEFINE_CLEANUP_FUNCTION0(Type, name, func) \
|
||||||
|
static inline void name (void *v) \
|
||||||
|
{ \
|
||||||
|
if (*(Type*)v) \
|
||||||
|
func (*(Type*)v); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define GS_DEFINE_CLEANUP_FUNCTIONt(Type, name, func) \
|
||||||
|
static inline void name (void *v) \
|
||||||
|
{ \
|
||||||
|
if (*(Type*)v) \
|
||||||
|
func (*(Type*)v, TRUE); \
|
||||||
|
}
|
||||||
|
|
||||||
|
GS_DEFINE_CLEANUP_FUNCTION0(GArray*, gs_local_array_unref, g_array_unref)
|
||||||
|
GS_DEFINE_CLEANUP_FUNCTION0(GBytes*, gs_local_bytes_unref, g_bytes_unref)
|
||||||
|
GS_DEFINE_CLEANUP_FUNCTION0(GChecksum*, gs_local_checksum_free, g_checksum_free)
|
||||||
|
GS_DEFINE_CLEANUP_FUNCTION0(GDir*, gs_local_dir_close, g_dir_close)
|
||||||
|
GS_DEFINE_CLEANUP_FUNCTION0(GError*, gs_local_free_error, g_error_free)
|
||||||
|
GS_DEFINE_CLEANUP_FUNCTION0(GHashTable*, gs_local_hashtable_unref, g_hash_table_unref)
|
||||||
|
GS_DEFINE_CLEANUP_FUNCTION0(GKeyFile*, gs_local_keyfile_unref, g_key_file_unref)
|
||||||
|
GS_DEFINE_CLEANUP_FUNCTION0(GMarkupParseContext*, gs_local_markup_parse_context_unref, g_markup_parse_context_unref)
|
||||||
|
GS_DEFINE_CLEANUP_FUNCTION0(GObject*, gs_local_obj_unref, g_object_unref)
|
||||||
|
GS_DEFINE_CLEANUP_FUNCTION0(GPtrArray*, gs_local_ptrarray_unref, g_ptr_array_unref)
|
||||||
|
GS_DEFINE_CLEANUP_FUNCTION0(GTimer*, gs_local_destroy_timer, g_timer_destroy)
|
||||||
|
GS_DEFINE_CLEANUP_FUNCTION0(GVariantBuilder*, gs_local_variant_builder_unref, g_variant_builder_unref)
|
||||||
|
GS_DEFINE_CLEANUP_FUNCTION0(GVariant*, gs_local_variant_unref, g_variant_unref)
|
||||||
|
GS_DEFINE_CLEANUP_FUNCTION0(GVariantIter*, gs_local_variant_iter_free, g_variant_iter_free)
|
||||||
|
|
||||||
|
GS_DEFINE_CLEANUP_FUNCTIONt(GString*, gs_local_free_string, g_string_free)
|
||||||
|
|
||||||
|
GS_DEFINE_CLEANUP_FUNCTION(char**, gs_local_strfreev, g_strfreev)
|
||||||
|
GS_DEFINE_CLEANUP_FUNCTION(GList*, gs_local_free_list, g_list_free)
|
||||||
|
GS_DEFINE_CLEANUP_FUNCTION(void*, gs_local_free, g_free)
|
||||||
|
|
||||||
|
#define _cleanup_dir_close_ __attribute__ ((cleanup(gs_local_dir_close)))
|
||||||
|
#define _cleanup_timer_destroy_ __attribute__ ((cleanup(gs_local_destroy_timer)))
|
||||||
|
#define _cleanup_free_ __attribute__ ((cleanup(gs_local_free)))
|
||||||
|
#define _cleanup_checksum_free_ __attribute__ ((cleanup(gs_local_checksum_free)))
|
||||||
|
#define _cleanup_error_free_ __attribute__ ((cleanup(gs_local_free_error)))
|
||||||
|
#define _cleanup_list_free_ __attribute__ ((cleanup(gs_local_free_list)))
|
||||||
|
#define _cleanup_string_free_ __attribute__ ((cleanup(gs_local_free_string)))
|
||||||
|
#define _cleanup_strv_free_ __attribute__ ((cleanup(gs_local_strfreev)))
|
||||||
|
#define _cleanup_variant_iter_free_ __attribute__ ((cleanup(gs_local_variant_iter_free)))
|
||||||
|
#define _cleanup_array_unref_ __attribute__ ((cleanup(gs_local_array_unref)))
|
||||||
|
#define _cleanup_bytes_unref_ __attribute__ ((cleanup(gs_local_bytes_unref)))
|
||||||
|
#define _cleanup_hashtable_unref_ __attribute__ ((cleanup(gs_local_hashtable_unref)))
|
||||||
|
#define _cleanup_keyfile_unref_ __attribute__ ((cleanup(gs_local_keyfile_unref)))
|
||||||
|
#define _cleanup_markup_parse_context_unref_ __attribute__ ((cleanup(gs_local_markup_parse_context_unref)))
|
||||||
|
#define _cleanup_object_unref_ __attribute__ ((cleanup(gs_local_obj_unref)))
|
||||||
|
#define _cleanup_ptrarray_unref_ __attribute__ ((cleanup(gs_local_ptrarray_unref)))
|
||||||
|
#define _cleanup_variant_unref_ __attribute__ ((cleanup(gs_local_variant_unref)))
|
||||||
|
|
||||||
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif
|
29
src/fu-common.h
Normal file
29
src/fu-common.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
|
||||||
|
*
|
||||||
|
* Copyright (C) 2015 Richard Hughes <richard@hughsie.com>
|
||||||
|
*
|
||||||
|
* Licensed under the GNU General Public License Version 2
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __FU_COMMON_H
|
||||||
|
#define __FU_COMMON_H
|
||||||
|
|
||||||
|
#define FWUPD_DBUS_PATH "/"
|
||||||
|
#define FWUPD_DBUS_SERVICE "org.freedesktop.fwupd"
|
||||||
|
#define FWUPD_DBUS_INTERFACE "org.freedesktop.fwupd"
|
||||||
|
|
||||||
|
#endif /* __FU_COMMON_H */
|
173
src/fu-device.c
Normal file
173
src/fu-device.c
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
|
||||||
|
*
|
||||||
|
* Copyright (C) 2015 Richard Hughes <richard@hughsie.com>
|
||||||
|
*
|
||||||
|
* Licensed under the GNU General Public License Version 2
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <glib-object.h>
|
||||||
|
#include <gio/gio.h>
|
||||||
|
|
||||||
|
#include "fu-cleanup.h"
|
||||||
|
#include "fu-common.h"
|
||||||
|
#include "fu-device.h"
|
||||||
|
|
||||||
|
static void fu_device_finalize (GObject *object);
|
||||||
|
|
||||||
|
#define FU_DEVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), FU_TYPE_DEVICE, FuDevicePrivate))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FuDevicePrivate:
|
||||||
|
*
|
||||||
|
* Private #FuDevice data
|
||||||
|
**/
|
||||||
|
struct _FuDevicePrivate
|
||||||
|
{
|
||||||
|
gchar *id;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
SIGNAL_LAST
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
PROP_0,
|
||||||
|
PROP_ID,
|
||||||
|
PROP_LAST
|
||||||
|
};
|
||||||
|
|
||||||
|
G_DEFINE_TYPE (FuDevice, fu_device, G_TYPE_OBJECT)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_device_get_id:
|
||||||
|
**/
|
||||||
|
const gchar *
|
||||||
|
fu_device_get_id (FuDevice *device)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (FU_IS_DEVICE (device), NULL);
|
||||||
|
return device->priv->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_device_set_id:
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
fu_device_set_id (FuDevice *device, const gchar *id)
|
||||||
|
{
|
||||||
|
g_return_if_fail (FU_IS_DEVICE (device));
|
||||||
|
|
||||||
|
g_free (device->priv->id);
|
||||||
|
device->priv->id = g_strdup (id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_device_get_property:
|
||||||
|
**/
|
||||||
|
static void
|
||||||
|
fu_device_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
FuDevice *device = FU_DEVICE (object);
|
||||||
|
FuDevicePrivate *priv = device->priv;
|
||||||
|
|
||||||
|
switch (prop_id) {
|
||||||
|
case PROP_ID:
|
||||||
|
g_value_set_string (value, priv->id);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_device_set_property:
|
||||||
|
**/
|
||||||
|
static void
|
||||||
|
fu_device_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
FuDevice *device = FU_DEVICE (object);
|
||||||
|
FuDevicePrivate *priv = device->priv;
|
||||||
|
|
||||||
|
switch (prop_id) {
|
||||||
|
case PROP_ID:
|
||||||
|
g_free (priv->id);
|
||||||
|
priv->id = g_strdup (g_value_get_string (value));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_device_class_init:
|
||||||
|
**/
|
||||||
|
static void
|
||||||
|
fu_device_class_init (FuDeviceClass *klass)
|
||||||
|
{
|
||||||
|
GParamSpec *pspec;
|
||||||
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||||
|
object_class->finalize = fu_device_finalize;
|
||||||
|
object_class->get_property = fu_device_get_property;
|
||||||
|
object_class->set_property = fu_device_set_property;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FuDevice:id:
|
||||||
|
*/
|
||||||
|
pspec = g_param_spec_string ("id", NULL, NULL,
|
||||||
|
NULL,
|
||||||
|
G_PARAM_READWRITE);
|
||||||
|
g_object_class_install_property (object_class, PROP_ID, pspec);
|
||||||
|
|
||||||
|
g_type_class_add_private (klass, sizeof (FuDevicePrivate));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_device_init:
|
||||||
|
**/
|
||||||
|
static void
|
||||||
|
fu_device_init (FuDevice *device)
|
||||||
|
{
|
||||||
|
device->priv = FU_DEVICE_GET_PRIVATE (device);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_device_finalize:
|
||||||
|
**/
|
||||||
|
static void
|
||||||
|
fu_device_finalize (GObject *object)
|
||||||
|
{
|
||||||
|
FuDevice *device = FU_DEVICE (object);
|
||||||
|
FuDevicePrivate *priv = device->priv;
|
||||||
|
|
||||||
|
g_free (priv->id);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (fu_device_parent_class)->finalize (object);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_device_new:
|
||||||
|
**/
|
||||||
|
FuDevice *
|
||||||
|
fu_device_new (void)
|
||||||
|
{
|
||||||
|
FuDevice *device;
|
||||||
|
device = g_object_new (FU_TYPE_DEVICE, NULL);
|
||||||
|
return FU_DEVICE (device);
|
||||||
|
}
|
63
src/fu-device.h
Normal file
63
src/fu-device.h
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
|
||||||
|
*
|
||||||
|
* Copyright (C) 2015 Richard Hughes <richard@hughsie.com>
|
||||||
|
*
|
||||||
|
* Licensed under the GNU General Public License Version 2
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __FU_DEVICE_H
|
||||||
|
#define __FU_DEVICE_H
|
||||||
|
|
||||||
|
#include <glib-object.h>
|
||||||
|
|
||||||
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
#define FU_TYPE_DEVICE (fu_device_get_type ())
|
||||||
|
#define FU_DEVICE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), FU_TYPE_DEVICE, FuDevice))
|
||||||
|
#define FU_DEVICE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), FU_TYPE_DEVICE, FuDeviceClass))
|
||||||
|
#define FU_IS_DEVICE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), FU_TYPE_DEVICE))
|
||||||
|
#define FU_IS_DEVICE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), FU_TYPE_DEVICE))
|
||||||
|
#define FU_DEVICE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), FU_TYPE_DEVICE, FuDeviceClass))
|
||||||
|
#define FU_DEVICE_ERROR fu_device_error_quark()
|
||||||
|
|
||||||
|
typedef struct _FuDevicePrivate FuDevicePrivate;
|
||||||
|
typedef struct _FuDevice FuDevice;
|
||||||
|
typedef struct _FuDeviceClass FuDeviceClass;
|
||||||
|
|
||||||
|
struct _FuDevice
|
||||||
|
{
|
||||||
|
GObject parent;
|
||||||
|
FuDevicePrivate *priv;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _FuDeviceClass
|
||||||
|
{
|
||||||
|
GObjectClass parent_class;
|
||||||
|
};
|
||||||
|
|
||||||
|
GType fu_device_get_type (void);
|
||||||
|
FuDevice *fu_device_new (void);
|
||||||
|
|
||||||
|
/* accessors */
|
||||||
|
const gchar *fu_device_get_id (FuDevice *device);
|
||||||
|
void fu_device_set_id (FuDevice *device,
|
||||||
|
const gchar *id);
|
||||||
|
|
||||||
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __FU_DEVICE_H */
|
||||||
|
|
327
src/fu-main.c
Normal file
327
src/fu-main.c
Normal file
@ -0,0 +1,327 @@
|
|||||||
|
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
|
||||||
|
*
|
||||||
|
* Copyright (C) 2015 Richard Hughes <richard@hughsie.com>
|
||||||
|
*
|
||||||
|
* Licensed under the GNU General Public License Version 2
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <gio/gio.h>
|
||||||
|
#include <gio/gunixfdlist.h>
|
||||||
|
#include <glib/gi18n.h>
|
||||||
|
#include <locale.h>
|
||||||
|
|
||||||
|
#include "fu-cleanup.h"
|
||||||
|
#include "fu-common.h"
|
||||||
|
#include "fu-device.h"
|
||||||
|
#include "fu-provider-uefi.h"
|
||||||
|
#include "fu-resources.h"
|
||||||
|
|
||||||
|
#define FU_ERROR 1
|
||||||
|
#define FU_ERROR_INTERNAL 0
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
GDBusConnection *connection;
|
||||||
|
GDBusNodeInfo *introspection_daemon;
|
||||||
|
GMainLoop *loop;
|
||||||
|
GPtrArray *devices;
|
||||||
|
FuProviderUefi *provider_uefi;
|
||||||
|
} FuMainPrivate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_main_get_device_list_as_strv:
|
||||||
|
**/
|
||||||
|
static gchar **
|
||||||
|
fu_main_get_device_list_as_strv (FuMainPrivate *priv)
|
||||||
|
{
|
||||||
|
gchar **val;
|
||||||
|
guint i;
|
||||||
|
FuDevice *dev_tmp;
|
||||||
|
|
||||||
|
val = g_new0 (gchar *, priv->devices->len + 1);
|
||||||
|
for (i = 0; i < priv->devices->len; i++) {
|
||||||
|
dev_tmp = g_ptr_array_index (priv->devices, i);
|
||||||
|
val[i] = g_strdup (fu_device_get_id (dev_tmp));
|
||||||
|
}
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_main_daemon_method_call:
|
||||||
|
**/
|
||||||
|
static void
|
||||||
|
fu_main_daemon_method_call (GDBusConnection *connection, const gchar *sender,
|
||||||
|
const gchar *object_path, const gchar *interface_name,
|
||||||
|
const gchar *method_name, GVariant *parameters,
|
||||||
|
GDBusMethodInvocation *invocation, gpointer user_data)
|
||||||
|
{
|
||||||
|
FuMainPrivate *priv = (FuMainPrivate *) user_data;
|
||||||
|
GVariant *val;
|
||||||
|
|
||||||
|
/* return 'as' */
|
||||||
|
if (g_strcmp0 (method_name, "GetDevices") == 0) {
|
||||||
|
_cleanup_strv_free_ gchar **devices = NULL;
|
||||||
|
devices = fu_main_get_device_list_as_strv (priv);
|
||||||
|
val = g_variant_new ("(^as)", devices);
|
||||||
|
g_dbus_method_invocation_return_value (invocation, val);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* we suck */
|
||||||
|
g_dbus_method_invocation_return_error (invocation,
|
||||||
|
FU_ERROR,
|
||||||
|
FU_ERROR_INTERNAL,
|
||||||
|
"no such method %s",
|
||||||
|
method_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_main_daemon_get_property:
|
||||||
|
**/
|
||||||
|
static GVariant *
|
||||||
|
fu_main_daemon_get_property (GDBusConnection *connection_, const gchar *sender,
|
||||||
|
const gchar *object_path, const gchar *interface_name,
|
||||||
|
const gchar *property_name, GError **error,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
if (g_strcmp0 (property_name, "DaemonVersion") == 0)
|
||||||
|
return g_variant_new_string (VERSION);
|
||||||
|
|
||||||
|
/* return an error */
|
||||||
|
g_set_error (error,
|
||||||
|
FU_ERROR,
|
||||||
|
FU_ERROR_INTERNAL,
|
||||||
|
"failed to get daemon property %s",
|
||||||
|
property_name);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_main_on_bus_acquired_cb:
|
||||||
|
**/
|
||||||
|
static void
|
||||||
|
fu_main_on_bus_acquired_cb (GDBusConnection *connection,
|
||||||
|
const gchar *name,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
FuMainPrivate *priv = (FuMainPrivate *) user_data;
|
||||||
|
guint registration_id;
|
||||||
|
static const GDBusInterfaceVTable interface_vtable = {
|
||||||
|
fu_main_daemon_method_call,
|
||||||
|
fu_main_daemon_get_property,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
priv->connection = g_object_ref (connection);
|
||||||
|
registration_id = g_dbus_connection_register_object (connection,
|
||||||
|
FWUPD_DBUS_PATH,
|
||||||
|
priv->introspection_daemon->interfaces[0],
|
||||||
|
&interface_vtable,
|
||||||
|
priv, /* user_data */
|
||||||
|
NULL, /* user_data_free_func */
|
||||||
|
NULL); /* GError** */
|
||||||
|
g_assert (registration_id > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_main_on_name_acquired_cb:
|
||||||
|
**/
|
||||||
|
static void
|
||||||
|
fu_main_on_name_acquired_cb (GDBusConnection *connection,
|
||||||
|
const gchar *name,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
FuMainPrivate *priv = (FuMainPrivate *) user_data;
|
||||||
|
fu_provider_uefi_coldplug (priv->provider_uefi);
|
||||||
|
g_debug ("FuMain: acquired name: %s", name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_main_on_name_lost_cb:
|
||||||
|
**/
|
||||||
|
static void
|
||||||
|
fu_main_on_name_lost_cb (GDBusConnection *connection,
|
||||||
|
const gchar *name,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
FuMainPrivate *priv = (FuMainPrivate *) user_data;
|
||||||
|
g_debug ("FuMain: lost name: %s", name);
|
||||||
|
g_main_loop_quit (priv->loop);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_main_timed_exit_cb:
|
||||||
|
**/
|
||||||
|
static gboolean
|
||||||
|
fu_main_timed_exit_cb (gpointer user_data)
|
||||||
|
{
|
||||||
|
GMainLoop *loop = (GMainLoop *) user_data;
|
||||||
|
g_main_loop_quit (loop);
|
||||||
|
return G_SOURCE_REMOVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_main_load_introspection:
|
||||||
|
**/
|
||||||
|
static GDBusNodeInfo *
|
||||||
|
fu_main_load_introspection (const gchar *filename, GError **error)
|
||||||
|
{
|
||||||
|
_cleanup_bytes_unref_ GBytes *data = NULL;
|
||||||
|
_cleanup_free_ gchar *path = NULL;
|
||||||
|
|
||||||
|
/* lookup data */
|
||||||
|
path = g_build_filename ("/org/freedesktop/fwupd", filename, NULL);
|
||||||
|
data = g_resource_lookup_data (fu_get_resource (),
|
||||||
|
path,
|
||||||
|
G_RESOURCE_LOOKUP_FLAGS_NONE,
|
||||||
|
error);
|
||||||
|
if (data == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* build introspection from XML */
|
||||||
|
return g_dbus_node_info_new_for_xml (g_bytes_get_data (data, NULL), error);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cd_main_provider_device_added_cb:
|
||||||
|
**/
|
||||||
|
static void
|
||||||
|
cd_main_provider_device_added_cb (FuProviderUefi *provider_uefi,
|
||||||
|
FuDevice *device,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
FuMainPrivate *priv = (FuMainPrivate *) user_data;
|
||||||
|
g_ptr_array_add (priv->devices, g_object_ref (device));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cd_main_provider_device_removed_cb:
|
||||||
|
**/
|
||||||
|
static void
|
||||||
|
cd_main_provider_device_removed_cb (FuProviderUefi *provider_uefi,
|
||||||
|
FuDevice *device,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
FuMainPrivate *priv = (FuMainPrivate *) user_data;
|
||||||
|
g_ptr_array_remove (priv->devices, g_object_ref (device));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main:
|
||||||
|
**/
|
||||||
|
int
|
||||||
|
main (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
FuMainPrivate *priv = NULL;
|
||||||
|
gboolean immediate_exit = FALSE;
|
||||||
|
gboolean ret;
|
||||||
|
gboolean timed_exit = FALSE;
|
||||||
|
GOptionContext *context;
|
||||||
|
guint owner_id = 0;
|
||||||
|
guint retval = 1;
|
||||||
|
const GOptionEntry options[] = {
|
||||||
|
{ "timed-exit", '\0', 0, G_OPTION_ARG_NONE, &timed_exit,
|
||||||
|
/* TRANSLATORS: exit after we've started up, used for user profiling */
|
||||||
|
_("Exit after a small delay"), NULL },
|
||||||
|
{ "immediate-exit", '\0', 0, G_OPTION_ARG_NONE, &immediate_exit,
|
||||||
|
/* TRANSLATORS: exit straight away, used for automatic profiling */
|
||||||
|
_("Exit after the engine has loaded"), NULL },
|
||||||
|
{ NULL}
|
||||||
|
};
|
||||||
|
_cleanup_error_free_ GError *error = NULL;
|
||||||
|
|
||||||
|
setlocale (LC_ALL, "");
|
||||||
|
|
||||||
|
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
|
||||||
|
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
|
||||||
|
textdomain (GETTEXT_PACKAGE);
|
||||||
|
|
||||||
|
/* TRANSLATORS: program name */
|
||||||
|
g_set_application_name (_("Firmware Update"));
|
||||||
|
context = g_option_context_new (NULL);
|
||||||
|
g_option_context_add_main_entries (context, options, NULL);
|
||||||
|
g_option_context_set_summary (context, _("Firmware Update D-Bus Service"));
|
||||||
|
ret = g_option_context_parse (context, &argc, &argv, &error);
|
||||||
|
if (!ret) {
|
||||||
|
g_warning ("FuMain: failed to parse command line arguments: %s",
|
||||||
|
error->message);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* create new objects */
|
||||||
|
priv = g_new0 (FuMainPrivate, 1);
|
||||||
|
priv->devices = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
|
||||||
|
priv->loop = g_main_loop_new (NULL, FALSE);
|
||||||
|
priv->provider_uefi = fu_provider_uefi_new ();
|
||||||
|
g_signal_connect (priv->provider_uefi, "device-added",
|
||||||
|
G_CALLBACK (cd_main_provider_device_added_cb),
|
||||||
|
priv);
|
||||||
|
g_signal_connect (priv->provider_uefi, "device-removed",
|
||||||
|
G_CALLBACK (cd_main_provider_device_removed_cb),
|
||||||
|
priv);
|
||||||
|
|
||||||
|
/* load introspection from file */
|
||||||
|
priv->introspection_daemon = fu_main_load_introspection (FWUPD_DBUS_INTERFACE ".xml",
|
||||||
|
&error);
|
||||||
|
if (priv->introspection_daemon == NULL) {
|
||||||
|
g_warning ("FuMain: failed to load daemon introspection: %s",
|
||||||
|
error->message);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* own the object */
|
||||||
|
owner_id = g_bus_own_name (G_BUS_TYPE_SYSTEM,
|
||||||
|
FWUPD_DBUS_SERVICE,
|
||||||
|
G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT |
|
||||||
|
G_BUS_NAME_OWNER_FLAGS_REPLACE,
|
||||||
|
fu_main_on_bus_acquired_cb,
|
||||||
|
fu_main_on_name_acquired_cb,
|
||||||
|
fu_main_on_name_lost_cb,
|
||||||
|
priv, NULL);
|
||||||
|
|
||||||
|
/* Only timeout and close the mainloop if we have specified it
|
||||||
|
* on the command line */
|
||||||
|
if (immediate_exit)
|
||||||
|
g_idle_add (fu_main_timed_exit_cb, priv->loop);
|
||||||
|
else if (timed_exit)
|
||||||
|
g_timeout_add_seconds (5, fu_main_timed_exit_cb, priv->loop);
|
||||||
|
|
||||||
|
/* wait */
|
||||||
|
g_info ("Daemon ready for requests");
|
||||||
|
g_main_loop_run (priv->loop);
|
||||||
|
|
||||||
|
/* success */
|
||||||
|
retval = 0;
|
||||||
|
out:
|
||||||
|
g_option_context_free (context);
|
||||||
|
if (owner_id > 0)
|
||||||
|
g_bus_unown_name (owner_id);
|
||||||
|
if (priv != NULL) {
|
||||||
|
if (priv->loop != NULL)
|
||||||
|
g_main_loop_unref (priv->loop);
|
||||||
|
if (priv->connection != NULL)
|
||||||
|
g_object_unref (priv->connection);
|
||||||
|
if (priv->introspection_daemon != NULL)
|
||||||
|
g_dbus_node_info_unref (priv->introspection_daemon);
|
||||||
|
g_ptr_array_unref (priv->devices);
|
||||||
|
g_free (priv);
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
148
src/fu-provider-uefi.c
Normal file
148
src/fu-provider-uefi.c
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
|
||||||
|
*
|
||||||
|
* Copyright (C) 2015 Richard Hughes <richard@hughsie.com>
|
||||||
|
*
|
||||||
|
* Licensed under the GNU General Public License Version 2
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <glib-object.h>
|
||||||
|
#include <gio/gio.h>
|
||||||
|
|
||||||
|
#include "fu-cleanup.h"
|
||||||
|
#include "fu-device.h"
|
||||||
|
#include "fu-provider-uefi.h"
|
||||||
|
|
||||||
|
static void fu_provider_uefi_finalize (GObject *object);
|
||||||
|
|
||||||
|
#define FU_PROVIDER_UEFI_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), FU_TYPE_PROVIDER_UEFI, FuProviderUefiPrivate))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FuProviderUefiPrivate:
|
||||||
|
**/
|
||||||
|
struct _FuProviderUefiPrivate
|
||||||
|
{
|
||||||
|
GPtrArray *array_devices;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
SIGNAL_SENSOR_ADDED,
|
||||||
|
SIGNAL_SENSOR_REMOVED,
|
||||||
|
SIGNAL_LAST
|
||||||
|
};
|
||||||
|
|
||||||
|
static guint signals[SIGNAL_LAST] = { 0 };
|
||||||
|
|
||||||
|
G_DEFINE_TYPE (FuProviderUefi, fu_provider_uefi, G_TYPE_OBJECT)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_provider_uefi_get_by_id:
|
||||||
|
**/
|
||||||
|
static FuDevice *
|
||||||
|
fu_provider_uefi_get_by_id (FuProviderUefi *provider_uefi,
|
||||||
|
const gchar *device_id)
|
||||||
|
{
|
||||||
|
FuProviderUefiPrivate *priv = provider_uefi->priv;
|
||||||
|
FuDevice *device = NULL;
|
||||||
|
FuDevice *device_tmp;
|
||||||
|
guint i;
|
||||||
|
|
||||||
|
for (i = 0; i < priv->array_devices->len; i++) {
|
||||||
|
device_tmp = g_ptr_array_index (priv->array_devices, i);
|
||||||
|
if (g_strcmp0 (fu_device_get_id (device_tmp), device_id) == 0) {
|
||||||
|
device = g_object_ref (device_tmp);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return device;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_provider_uefi_coldplug:
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
fu_provider_uefi_coldplug (FuProviderUefi *provider_uefi)
|
||||||
|
{
|
||||||
|
_cleanup_object_unref_ FuDevice *dev = NULL;
|
||||||
|
|
||||||
|
//FIXME
|
||||||
|
g_debug ("Adding fake UEFI device");
|
||||||
|
dev = fu_device_new ();
|
||||||
|
fu_device_set_id (dev, "819b858e-c52c-402f-80e1-5b311b6c1959");
|
||||||
|
g_signal_emit (provider_uefi, signals[SIGNAL_SENSOR_ADDED], 0, dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_provider_uefi_class_init:
|
||||||
|
**/
|
||||||
|
static void
|
||||||
|
fu_provider_uefi_class_init (FuProviderUefiClass *klass)
|
||||||
|
{
|
||||||
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||||
|
object_class->finalize = fu_provider_uefi_finalize;
|
||||||
|
signals[SIGNAL_SENSOR_ADDED] =
|
||||||
|
g_signal_new ("device-added",
|
||||||
|
G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
|
||||||
|
G_STRUCT_OFFSET (FuProviderUefiClass, device_added),
|
||||||
|
NULL, NULL, g_cclosure_marshal_VOID__OBJECT,
|
||||||
|
G_TYPE_NONE, 1, FU_TYPE_DEVICE);
|
||||||
|
signals[SIGNAL_SENSOR_REMOVED] =
|
||||||
|
g_signal_new ("device-removed",
|
||||||
|
G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
|
||||||
|
G_STRUCT_OFFSET (FuProviderUefiClass, device_removed),
|
||||||
|
NULL, NULL, g_cclosure_marshal_VOID__OBJECT,
|
||||||
|
G_TYPE_NONE, 1, FU_TYPE_DEVICE);
|
||||||
|
|
||||||
|
g_type_class_add_private (klass, sizeof (FuProviderUefiPrivate));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_provider_uefi_init:
|
||||||
|
**/
|
||||||
|
static void
|
||||||
|
fu_provider_uefi_init (FuProviderUefi *provider_uefi)
|
||||||
|
{
|
||||||
|
provider_uefi->priv = FU_PROVIDER_UEFI_GET_PRIVATE (provider_uefi);
|
||||||
|
provider_uefi->priv->array_devices = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_provider_uefi_finalize:
|
||||||
|
**/
|
||||||
|
static void
|
||||||
|
fu_provider_uefi_finalize (GObject *object)
|
||||||
|
{
|
||||||
|
FuProviderUefi *provider_uefi = FU_PROVIDER_UEFI (object);
|
||||||
|
FuProviderUefiPrivate *priv = provider_uefi->priv;
|
||||||
|
|
||||||
|
g_ptr_array_unref (priv->array_devices);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (fu_provider_uefi_parent_class)->finalize (object);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_provider_uefi_new:
|
||||||
|
**/
|
||||||
|
FuProviderUefi *
|
||||||
|
fu_provider_uefi_new (void)
|
||||||
|
{
|
||||||
|
FuProviderUefi *provider_uefi;
|
||||||
|
provider_uefi = g_object_new (FU_TYPE_PROVIDER_UEFI, NULL);
|
||||||
|
return FU_PROVIDER_UEFI (provider_uefi);
|
||||||
|
}
|
||||||
|
|
65
src/fu-provider-uefi.h
Normal file
65
src/fu-provider-uefi.h
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
|
||||||
|
*
|
||||||
|
* Copyright (C) 2015 Richard Hughes <richard@hughsie.com>
|
||||||
|
*
|
||||||
|
* Licensed under the GNU General Public License Version 2
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __FU_PROVIDER_UEFI_H
|
||||||
|
#define __FU_PROVIDER_UEFI_H
|
||||||
|
|
||||||
|
#include <glib-object.h>
|
||||||
|
|
||||||
|
#include "fu-device.h"
|
||||||
|
#include "fu-provider-uefi.h"
|
||||||
|
|
||||||
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
#define FU_TYPE_PROVIDER_UEFI (fu_provider_uefi_get_type ())
|
||||||
|
#define FU_PROVIDER_UEFI(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), FU_TYPE_PROVIDER_UEFI, FuProviderUefi))
|
||||||
|
#define FU_PROVIDER_UEFI_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), FU_TYPE_PROVIDER_UEFI, FuProviderUefiClass))
|
||||||
|
#define FU_IS_PROVIDER_UEFI(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), FU_TYPE_PROVIDER_UEFI))
|
||||||
|
#define FU_IS_PROVIDER_UEFI_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), FU_TYPE_PROVIDER_UEFI))
|
||||||
|
#define FU_PROVIDER_UEFI_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), FU_TYPE_PROVIDER_UEFI, FuProviderUefiClass))
|
||||||
|
|
||||||
|
typedef struct _FuProviderUefiPrivate FuProviderUefiPrivate;
|
||||||
|
typedef struct _FuProviderUefi FuProviderUefi;
|
||||||
|
typedef struct _FuProviderUefiClass FuProviderUefiClass;
|
||||||
|
|
||||||
|
struct _FuProviderUefi
|
||||||
|
{
|
||||||
|
GObject parent;
|
||||||
|
FuProviderUefiPrivate *priv;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _FuProviderUefiClass
|
||||||
|
{
|
||||||
|
GObjectClass parent_class;
|
||||||
|
void (* device_added) (FuProviderUefi *provider_uefi,
|
||||||
|
FuDevice *device);
|
||||||
|
void (* device_removed) (FuProviderUefi *provider_uefi,
|
||||||
|
FuDevice *device);
|
||||||
|
};
|
||||||
|
|
||||||
|
GType fu_provider_uefi_get_type (void);
|
||||||
|
FuProviderUefi *fu_provider_uefi_new (void);
|
||||||
|
void fu_provider_uefi_coldplug (FuProviderUefi *provider_uefi);
|
||||||
|
|
||||||
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __FU_PROVIDER_UEFI_H */
|
||||||
|
|
345
src/fu-util.c
Normal file
345
src/fu-util.c
Normal file
@ -0,0 +1,345 @@
|
|||||||
|
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
|
||||||
|
*
|
||||||
|
* Copyright (C) 2015 Richard Hughes <richard@hughsie.com>
|
||||||
|
*
|
||||||
|
* Licensed under the GNU General Public License Version 2
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <glib/gi18n.h>
|
||||||
|
#include <gio/gio.h>
|
||||||
|
#include <locale.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "fu-cleanup.h"
|
||||||
|
#include "fu-common.h"
|
||||||
|
|
||||||
|
#define FU_ERROR 1
|
||||||
|
#define FU_ERROR_INVALID_ARGUMENTS 0
|
||||||
|
#define FU_ERROR_NO_SUCH_CMD 1
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
GOptionContext *context;
|
||||||
|
GPtrArray *cmd_array;
|
||||||
|
} FuUtilPrivate;
|
||||||
|
|
||||||
|
typedef gboolean (*FuUtilPrivateCb) (FuUtilPrivate *util,
|
||||||
|
gchar **values,
|
||||||
|
GError **error);
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
gchar *name;
|
||||||
|
gchar *arguments;
|
||||||
|
gchar *description;
|
||||||
|
FuUtilPrivateCb callback;
|
||||||
|
} FuUtilItem;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_util_item_free:
|
||||||
|
**/
|
||||||
|
static void
|
||||||
|
fu_util_item_free (FuUtilItem *item)
|
||||||
|
{
|
||||||
|
g_free (item->name);
|
||||||
|
g_free (item->arguments);
|
||||||
|
g_free (item->description);
|
||||||
|
g_free (item);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fu_sort_command_name_cb:
|
||||||
|
*/
|
||||||
|
static gint
|
||||||
|
fu_sort_command_name_cb (FuUtilItem **item1, FuUtilItem **item2)
|
||||||
|
{
|
||||||
|
return g_strcmp0 ((*item1)->name, (*item2)->name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_util_add:
|
||||||
|
**/
|
||||||
|
static void
|
||||||
|
fu_util_add (GPtrArray *array,
|
||||||
|
const gchar *name,
|
||||||
|
const gchar *arguments,
|
||||||
|
const gchar *description,
|
||||||
|
FuUtilPrivateCb callback)
|
||||||
|
{
|
||||||
|
guint i;
|
||||||
|
FuUtilItem *item;
|
||||||
|
_cleanup_strv_free_ gchar **names = NULL;
|
||||||
|
|
||||||
|
g_return_if_fail (name != NULL);
|
||||||
|
g_return_if_fail (description != NULL);
|
||||||
|
g_return_if_fail (callback != NULL);
|
||||||
|
|
||||||
|
/* add each one */
|
||||||
|
names = g_strsplit (name, ",", -1);
|
||||||
|
for (i = 0; names[i] != NULL; i++) {
|
||||||
|
item = g_new0 (FuUtilItem, 1);
|
||||||
|
item->name = g_strdup (names[i]);
|
||||||
|
if (i == 0) {
|
||||||
|
item->description = g_strdup (description);
|
||||||
|
} else {
|
||||||
|
/* TRANSLATORS: this is a command alias */
|
||||||
|
item->description = g_strdup_printf (_("Alias to %s"),
|
||||||
|
names[0]);
|
||||||
|
}
|
||||||
|
item->arguments = g_strdup (arguments);
|
||||||
|
item->callback = callback;
|
||||||
|
g_ptr_array_add (array, item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_util_get_descriptions:
|
||||||
|
**/
|
||||||
|
static gchar *
|
||||||
|
fu_util_get_descriptions (GPtrArray *array)
|
||||||
|
{
|
||||||
|
guint i;
|
||||||
|
guint j;
|
||||||
|
guint len;
|
||||||
|
const guint max_len = 35;
|
||||||
|
FuUtilItem *item;
|
||||||
|
GString *string;
|
||||||
|
|
||||||
|
/* print each command */
|
||||||
|
string = g_string_new ("");
|
||||||
|
for (i = 0; i < array->len; i++) {
|
||||||
|
item = g_ptr_array_index (array, i);
|
||||||
|
g_string_append (string, " ");
|
||||||
|
g_string_append (string, item->name);
|
||||||
|
len = strlen (item->name) + 2;
|
||||||
|
if (item->arguments != NULL) {
|
||||||
|
g_string_append (string, " ");
|
||||||
|
g_string_append (string, item->arguments);
|
||||||
|
len += strlen (item->arguments) + 1;
|
||||||
|
}
|
||||||
|
if (len < max_len) {
|
||||||
|
for (j = len; j < max_len + 1; j++)
|
||||||
|
g_string_append_c (string, ' ');
|
||||||
|
g_string_append (string, item->description);
|
||||||
|
g_string_append_c (string, '\n');
|
||||||
|
} else {
|
||||||
|
g_string_append_c (string, '\n');
|
||||||
|
for (j = 0; j < max_len + 1; j++)
|
||||||
|
g_string_append_c (string, ' ');
|
||||||
|
g_string_append (string, item->description);
|
||||||
|
g_string_append_c (string, '\n');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* remove trailing newline */
|
||||||
|
if (string->len > 0)
|
||||||
|
g_string_set_size (string, string->len - 1);
|
||||||
|
|
||||||
|
return g_string_free (string, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_util_run:
|
||||||
|
**/
|
||||||
|
static gboolean
|
||||||
|
fu_util_run (FuUtilPrivate *priv, const gchar *command, gchar **values, GError **error)
|
||||||
|
{
|
||||||
|
guint i;
|
||||||
|
FuUtilItem *item;
|
||||||
|
_cleanup_string_free_ GString *string = NULL;
|
||||||
|
|
||||||
|
/* find command */
|
||||||
|
for (i = 0; i < priv->cmd_array->len; i++) {
|
||||||
|
item = g_ptr_array_index (priv->cmd_array, i);
|
||||||
|
if (g_strcmp0 (item->name, command) == 0)
|
||||||
|
return item->callback (priv, values, error);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* not found */
|
||||||
|
string = g_string_new ("");
|
||||||
|
/* TRANSLATORS: error message */
|
||||||
|
g_string_append_printf (string, "%s\n",
|
||||||
|
_("Command not found, valid commands are:"));
|
||||||
|
for (i = 0; i < priv->cmd_array->len; i++) {
|
||||||
|
item = g_ptr_array_index (priv->cmd_array, i);
|
||||||
|
g_string_append_printf (string, " * %s %s\n",
|
||||||
|
item->name,
|
||||||
|
item->arguments ? item->arguments : "");
|
||||||
|
}
|
||||||
|
g_set_error_literal (error, FU_ERROR, FU_ERROR_NO_SUCH_CMD, string->str);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_util_get_devices:
|
||||||
|
**/
|
||||||
|
static gboolean
|
||||||
|
fu_util_get_devices (FuUtilPrivate *priv, gchar **values, GError **error)
|
||||||
|
{
|
||||||
|
_cleanup_object_unref_ GDBusConnection *conn = NULL;
|
||||||
|
_cleanup_object_unref_ GDBusProxy *proxy = NULL;
|
||||||
|
_cleanup_variant_unref_ GVariant *val = NULL;
|
||||||
|
const gchar **guids = NULL;
|
||||||
|
guint i;
|
||||||
|
|
||||||
|
conn = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, error);
|
||||||
|
if (conn == NULL)
|
||||||
|
return FALSE;
|
||||||
|
proxy = g_dbus_proxy_new_sync (conn,
|
||||||
|
G_DBUS_PROXY_FLAGS_NONE,
|
||||||
|
NULL,
|
||||||
|
FWUPD_DBUS_SERVICE,
|
||||||
|
FWUPD_DBUS_PATH,
|
||||||
|
FWUPD_DBUS_INTERFACE,
|
||||||
|
NULL,
|
||||||
|
error);
|
||||||
|
if (proxy == NULL)
|
||||||
|
return FALSE;
|
||||||
|
val = g_dbus_proxy_call_sync (proxy,
|
||||||
|
"GetDevices",
|
||||||
|
NULL,
|
||||||
|
G_DBUS_CALL_FLAGS_NONE,
|
||||||
|
-1,
|
||||||
|
NULL,
|
||||||
|
error);
|
||||||
|
if (val == NULL)
|
||||||
|
return FALSE;
|
||||||
|
g_variant_get (val, "(^a&s)", &guids);
|
||||||
|
g_assert (guids != NULL);
|
||||||
|
if (guids[0] == NULL)
|
||||||
|
g_print ("No hardware detected with firmware update capaility\n");
|
||||||
|
for (i = 0; guids[i] != NULL; i++)
|
||||||
|
g_print ("%i: %s\n", i, guids[i]);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_util_update_offline:
|
||||||
|
**/
|
||||||
|
static gboolean
|
||||||
|
fu_util_update_offline (FuUtilPrivate *priv, gchar **values, GError **error)
|
||||||
|
{
|
||||||
|
//FIXME
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fu_util_ignore_cb:
|
||||||
|
**/
|
||||||
|
static void
|
||||||
|
fu_util_ignore_cb (const gchar *log_domain, GLogLevelFlags log_level,
|
||||||
|
const gchar *message, gpointer user_data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main:
|
||||||
|
**/
|
||||||
|
int
|
||||||
|
main (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
FuUtilPrivate *priv;
|
||||||
|
gboolean ret;
|
||||||
|
gboolean verbose = FALSE;
|
||||||
|
guint retval = 1;
|
||||||
|
_cleanup_error_free_ GError *error = NULL;
|
||||||
|
_cleanup_free_ gchar *cmd_descriptions = NULL;
|
||||||
|
const GOptionEntry options[] = {
|
||||||
|
{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
|
||||||
|
/* TRANSLATORS: command line option */
|
||||||
|
_("Show extra debugging information"), NULL },
|
||||||
|
{ NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
setlocale (LC_ALL, "");
|
||||||
|
|
||||||
|
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
|
||||||
|
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
|
||||||
|
textdomain (GETTEXT_PACKAGE);
|
||||||
|
|
||||||
|
/* create helper object */
|
||||||
|
priv = g_new0 (FuUtilPrivate, 1);
|
||||||
|
|
||||||
|
/* add commands */
|
||||||
|
priv->cmd_array = g_ptr_array_new_with_free_func ((GDestroyNotify) fu_util_item_free);
|
||||||
|
fu_util_add (priv->cmd_array,
|
||||||
|
"get-devices",
|
||||||
|
NULL,
|
||||||
|
/* TRANSLATORS: command description */
|
||||||
|
_("Get all devices that support firmware updates"),
|
||||||
|
fu_util_get_devices);
|
||||||
|
fu_util_add (priv->cmd_array,
|
||||||
|
"update-offline",
|
||||||
|
NULL,
|
||||||
|
/* TRANSLATORS: command description */
|
||||||
|
_("Install the update the next time the computer is rebooted"),
|
||||||
|
fu_util_update_offline);
|
||||||
|
|
||||||
|
/* sort by command name */
|
||||||
|
g_ptr_array_sort (priv->cmd_array,
|
||||||
|
(GCompareFunc) fu_sort_command_name_cb);
|
||||||
|
|
||||||
|
/* get a list of the commands */
|
||||||
|
priv->context = g_option_context_new (NULL);
|
||||||
|
cmd_descriptions = fu_util_get_descriptions (priv->cmd_array);
|
||||||
|
g_option_context_set_summary (priv->context, cmd_descriptions);
|
||||||
|
|
||||||
|
/* TRANSLATORS: program name */
|
||||||
|
g_set_application_name (_("Firmware Update"));
|
||||||
|
g_option_context_add_main_entries (priv->context, options, NULL);
|
||||||
|
ret = g_option_context_parse (priv->context, &argc, &argv, &error);
|
||||||
|
if (!ret) {
|
||||||
|
/* TRANSLATORS: the user didn't read the man page */
|
||||||
|
g_print ("%s: %s\n", _("Failed to parse arguments"),
|
||||||
|
error->message);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set verbose? */
|
||||||
|
if (verbose) {
|
||||||
|
g_setenv ("FWUPD_VERBOSE", "1", FALSE);
|
||||||
|
} else {
|
||||||
|
g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,
|
||||||
|
fu_util_ignore_cb, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* run the specified command */
|
||||||
|
ret = fu_util_run (priv, argv[1], (gchar**) &argv[2], &error);
|
||||||
|
if (!ret) {
|
||||||
|
if (g_error_matches (error, FU_ERROR, FU_ERROR_NO_SUCH_CMD)) {
|
||||||
|
_cleanup_free_ gchar *tmp = NULL;
|
||||||
|
tmp = g_option_context_get_help (priv->context, TRUE, NULL);
|
||||||
|
g_print ("%s", tmp);
|
||||||
|
} else {
|
||||||
|
g_print ("%s\n", error->message);
|
||||||
|
}
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* success */
|
||||||
|
retval = 0;
|
||||||
|
out:
|
||||||
|
if (priv != NULL) {
|
||||||
|
if (priv->cmd_array != NULL)
|
||||||
|
g_ptr_array_unref (priv->cmd_array);
|
||||||
|
g_option_context_free (priv->context);
|
||||||
|
g_free (priv);
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
6
src/fwupd.gresource.xml
Normal file
6
src/fwupd.gresource.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<gresources>
|
||||||
|
<gresource prefix="/org/freedesktop/fwupd">
|
||||||
|
<file preprocess="xml-stripblanks" compressed="true">org.freedesktop.fwupd.xml</file>
|
||||||
|
</gresource>
|
||||||
|
</gresources>
|
84
src/org.freedesktop.fwupd.xml
Normal file
84
src/org.freedesktop.fwupd.xml
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
<!DOCTYPE node PUBLIC
|
||||||
|
"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
||||||
|
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||||
|
<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
|
||||||
|
<interface name='org.freedesktop.fwupd'>
|
||||||
|
<doc:doc>
|
||||||
|
<doc:description>
|
||||||
|
<doc:para>
|
||||||
|
The interface used for quering firmware for the system.
|
||||||
|
</doc:para>
|
||||||
|
</doc:description>
|
||||||
|
</doc:doc>
|
||||||
|
|
||||||
|
<!--***********************************************************-->
|
||||||
|
<property name='DaemonVersion' type='s' access='read'>
|
||||||
|
<doc:doc>
|
||||||
|
<doc:description>
|
||||||
|
<doc:para>
|
||||||
|
The daemon version.
|
||||||
|
</doc:para>
|
||||||
|
</doc:description>
|
||||||
|
</doc:doc>
|
||||||
|
</property>
|
||||||
|
|
||||||
|
<!--***********************************************************-->
|
||||||
|
<method name='GetDevices'>
|
||||||
|
<doc:doc>
|
||||||
|
<doc:description>
|
||||||
|
<doc:para>
|
||||||
|
Gets a list of all the devices that support UEFI firmware upgrading.
|
||||||
|
</doc:para>
|
||||||
|
</doc:description>
|
||||||
|
</doc:doc>
|
||||||
|
<arg type='as' name='devices' direction='out'>
|
||||||
|
<doc:doc>
|
||||||
|
<doc:summary>
|
||||||
|
<doc:para>An array of GUIDs.</doc:para>
|
||||||
|
</doc:summary>
|
||||||
|
</doc:doc>
|
||||||
|
</arg>
|
||||||
|
</method>
|
||||||
|
|
||||||
|
<!--***********************************************************-->
|
||||||
|
<method name='UpdateOffline'>
|
||||||
|
<doc:doc>
|
||||||
|
<doc:description>
|
||||||
|
<doc:para>
|
||||||
|
Schedules an update to be done offline.
|
||||||
|
</doc:para>
|
||||||
|
</doc:description>
|
||||||
|
</doc:doc>
|
||||||
|
<arg type='s' name='guid' direction='in'>
|
||||||
|
<doc:doc>
|
||||||
|
<doc:summary>
|
||||||
|
<doc:para>A GUID of the hardware to update.</doc:para>
|
||||||
|
</doc:summary>
|
||||||
|
</doc:doc>
|
||||||
|
</arg>
|
||||||
|
<arg type='h' name='handle' direction='in'>
|
||||||
|
<doc:doc>
|
||||||
|
<doc:summary>
|
||||||
|
<doc:para>
|
||||||
|
An index into the array of file descriptors that may have
|
||||||
|
been sent with the DBus message.
|
||||||
|
</doc:para>
|
||||||
|
</doc:summary>
|
||||||
|
</doc:doc>
|
||||||
|
</arg>
|
||||||
|
</method>
|
||||||
|
|
||||||
|
<!--***********************************************************-->
|
||||||
|
<signal name='Changed'>
|
||||||
|
<doc:doc>
|
||||||
|
<doc:description>
|
||||||
|
<doc:para>
|
||||||
|
Some value on the interface or the number of devices or
|
||||||
|
profiles has changed.
|
||||||
|
</doc:para>
|
||||||
|
</doc:description>
|
||||||
|
</doc:doc>
|
||||||
|
</signal>
|
||||||
|
|
||||||
|
</interface>
|
||||||
|
</node>
|
Loading…
Reference in New Issue
Block a user