mirror of
https://github.com/abraunegg/onedrive
synced 2026-03-14 14:35:46 +01:00
Implement full “Display Manager Integration” support for both GNOME and KDE desktop environments. This new feature allows the OneDrive Client for Linux to detect the active desktop session and automatically: * Register the configured sync_dir as a “special place” or sidebar entry within the file manager (Nautilus on GNOME; Dolphin on KDE). * Apply a custom “onedrive” folder icon to the synchronisation directory when the installed icon theme supports it. * Cleanly install and uninstall required resources (icons, bookmarks, file manager integration) via the Makefile’s install and uninstall targets, thereby supporting system-wide installations, packaging workflows, and per-user installs. * Introduce a new configuration option display_manager_integration (boolean) to enable or disable this integration behaviour at runtime. * Update documentation and usage guidance to clearly explain what “Display Manager Integration” means, what this client implements (sidebar entry + icon) and what features remain out-of-scope (context menus, overlay badges, tray icons). * Ensure safe, idempotent integration logic for both GNOME and KDE (bookmark manipulation, icon theme detection, cache refresh) with fallbacks and minimal dependencies. With this merge, users installing via make install or system packages will benefit from enhanced desktop usability: the OneDrive folder appears visibly and intuitively within their standard file manager sidebar, making access and identification simpler. At the same time, the core sync engine remains focused on reliable file synchronisation, with the desktop integration layer remaining optional and disabled by default unless explicitly enabled via configuration.
189 lines
6.5 KiB
Makefile
189 lines
6.5 KiB
Makefile
package = @PACKAGE_NAME@
|
|
version = @PACKAGE_VERSION@
|
|
prefix = @prefix@
|
|
# we don't use @exec_prefix@ because it usually contains '${prefix}' literally
|
|
# but we use @prefix@/bin/onedrive in the systemd unit files which are generated
|
|
# from the configure script.
|
|
# Thus, set exec_prefix unconditionally to prefix
|
|
# Alternative approach would be add dep on sed, and do manual generation in the Makefile.
|
|
# exec_prefix = @exec_prefix@
|
|
exec_prefix = @prefix@
|
|
datarootdir = @datarootdir@
|
|
datadir = @datadir@
|
|
srcdir = @srcdir@
|
|
bindir = @bindir@
|
|
mandir = @mandir@
|
|
sysconfdir = @sysconfdir@
|
|
docdir = $(datadir)/doc/$(package)
|
|
VPATH = @srcdir@
|
|
INSTALL = @INSTALL@
|
|
|
|
# Icon install locations (system-wide hicolor theme)
|
|
ICON_THEMEDIR = $(datadir)/icons/hicolor
|
|
ICON_PLACES_DIR = $(ICON_THEMEDIR)/scalable/places
|
|
ICON_SOURCE_SVG = contrib/images/onedrive.svg
|
|
ICON_TARGET_SVG = onedrive.svg
|
|
|
|
NOTIFICATIONS = @NOTIFICATIONS@
|
|
HAVE_SYSTEMD = @HAVE_SYSTEMD@
|
|
systemduserunitdir = @systemduserunitdir@
|
|
systemdsystemunitdir = @systemdsystemunitdir@
|
|
all_libs = @curl_LIBS@ @sqlite_LIBS@ @dbus_LIBS@ @notify_LIBS@ @bsd_inotify_LIBS@ @dynamic_linker_LIBS@
|
|
COMPLETIONS = @COMPLETIONS@
|
|
BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
|
|
ZSH_COMPLETION_DIR = @ZSH_COMPLETION_DIR@
|
|
FISH_COMPLETION_DIR = @FISH_COMPLETION_DIR@
|
|
DEBUG = @DEBUG@
|
|
|
|
DC = @DC@
|
|
DCFLAGS = @DCFLAGS@
|
|
DEBUG_DCFLAGS = @DEBUG_DCFLAGS@
|
|
RELEASE_DCFLAGS = @RELEASE_DCFLAGS@
|
|
VERSION_DCFLAG = @VERSION_DCFLAG@
|
|
LINKER_DCFLAG = @LINKER_DCFLAG@
|
|
OUTPUT_DCFLAG = @OUTPUT_DCFLAG@
|
|
WERROR_DCFLAG = @WERROR_DCFLAG@
|
|
|
|
DCFLAGS += $(WERROR_DCFLAG)
|
|
ifeq ($(DEBUG),yes)
|
|
DCFLAGS += $(DEBUG_DCFLAGS)
|
|
else
|
|
DCFLAGS += $(RELEASE_DCFLAGS)
|
|
endif
|
|
|
|
ifeq ($(NOTIFICATIONS),yes)
|
|
GUI_NOTIFICATIONS = $(addprefix $(VERSION_DCFLAG)=,NoPragma NoGdk Notifications)
|
|
endif
|
|
|
|
system_unit_files = contrib/systemd/onedrive@.service
|
|
user_unit_files = contrib/systemd/onedrive.service
|
|
|
|
DOCFILES = readme.md config LICENSE changelog.md docs/advanced-usage.md docs/application-config-options.md docs/application-security.md docs/business-shared-items.md docs/client-architecture.md docs/contributing.md docs/docker.md docs/install.md docs/national-cloud-deployments.md docs/podman.md docs/privacy-policy.md docs/sharepoint-libraries.md docs/terms-of-service.md docs/ubuntu-package-install.md docs/usage.md docs/known-issues.md docs/webhooks.md
|
|
|
|
ifneq ("$(wildcard /etc/redhat-release)","")
|
|
RHEL = $(shell cat /etc/redhat-release | grep -E "(Red Hat Enterprise Linux|CentOS|AlmaLinux)" | wc -l)
|
|
RHEL_VERSION = $(shell rpm --eval "%{rhel}")
|
|
else
|
|
RHEL = 0
|
|
RHEL_VERSION = 0
|
|
endif
|
|
|
|
SOURCES = \
|
|
src/main.d \
|
|
src/config.d \
|
|
src/log.d \
|
|
src/util.d \
|
|
src/qxor.d \
|
|
src/curlEngine.d \
|
|
src/onedrive.d \
|
|
src/webhook.d \
|
|
src/sync.d \
|
|
src/itemdb.d \
|
|
src/sqlite.d \
|
|
src/clientSideFiltering.d \
|
|
src/monitor.d \
|
|
src/arsd/cgi.d \
|
|
src/xattr.d \
|
|
src/intune.d \
|
|
src/socketio.d \
|
|
src/curlWebsockets.d
|
|
|
|
ifeq ($(NOTIFICATIONS),yes)
|
|
SOURCES += src/notifications/notify.d src/notifications/dnotify.d
|
|
endif
|
|
|
|
all: onedrive
|
|
|
|
clean:
|
|
rm -f onedrive onedrive.o version
|
|
rm -rf autom4te.cache
|
|
rm -f config.log config.status
|
|
|
|
# Remove files generated via ./configure
|
|
distclean: clean
|
|
rm -f Makefile contrib/pacman/PKGBUILD contrib/spec/onedrive.spec onedrive.1 $(system_unit_files) $(user_unit_files)
|
|
|
|
onedrive: $(SOURCES)
|
|
if [ -f .git/HEAD ] ; then \
|
|
git describe --tags > version ; \
|
|
else \
|
|
echo $(version) > version ; \
|
|
fi
|
|
$(DC) -J. $(GUI_NOTIFICATIONS) $(DCFLAGS) $^ $(addprefix $(LINKER_DCFLAG),$(all_libs)) $(OUTPUT_DCFLAG)$@
|
|
|
|
install: all
|
|
mkdir -p $(DESTDIR)$(bindir)
|
|
$(INSTALL) onedrive $(DESTDIR)$(bindir)/onedrive
|
|
mkdir -p $(DESTDIR)$(mandir)/man1
|
|
$(INSTALL) -m 0644 onedrive.1 $(DESTDIR)$(mandir)/man1/onedrive.1
|
|
mkdir -p $(DESTDIR)$(sysconfdir)/logrotate.d
|
|
$(INSTALL) -m 0644 contrib/logrotate/onedrive.logrotate $(DESTDIR)$(sysconfdir)/logrotate.d/onedrive
|
|
mkdir -p $(DESTDIR)$(docdir)
|
|
for file in $(DOCFILES); do \
|
|
$(INSTALL) -m 0644 $$file $(DESTDIR)$(docdir); \
|
|
done
|
|
ifeq ($(HAVE_SYSTEMD),yes)
|
|
mkdir -p $(DESTDIR)$(systemduserunitdir)
|
|
mkdir -p $(DESTDIR)$(systemdsystemunitdir)
|
|
ifeq ($(RHEL),1)
|
|
$(INSTALL) -m 0644 $(system_unit_files) $(DESTDIR)$(systemdsystemunitdir)
|
|
$(INSTALL) -m 0644 $(user_unit_files) $(DESTDIR)$(systemdsystemunitdir)
|
|
else
|
|
$(INSTALL) -m 0644 $(system_unit_files) $(DESTDIR)$(systemdsystemunitdir)
|
|
$(INSTALL) -m 0644 $(user_unit_files) $(DESTDIR)$(systemduserunitdir)
|
|
endif
|
|
else
|
|
ifeq ($(RHEL_VERSION),6)
|
|
$(INSTALL) contrib/init.d/onedrive.init $(DESTDIR)/etc/init.d/onedrive
|
|
$(INSTALL) contrib/init.d/onedrive_service.sh $(DESTDIR)$(bindir)/onedrive_service.sh
|
|
endif
|
|
endif
|
|
ifeq ($(COMPLETIONS),yes)
|
|
mkdir -p $(DESTDIR)$(ZSH_COMPLETION_DIR)
|
|
$(INSTALL) -m 0644 contrib/completions/complete.zsh $(DESTDIR)$(ZSH_COMPLETION_DIR)/_onedrive
|
|
mkdir -p $(DESTDIR)$(BASH_COMPLETION_DIR)
|
|
$(INSTALL) -m 0644 contrib/completions/complete.bash $(DESTDIR)$(BASH_COMPLETION_DIR)/onedrive
|
|
mkdir -p $(DESTDIR)$(FISH_COMPLETION_DIR)
|
|
$(INSTALL) -m 0644 contrib/completions/complete.fish $(DESTDIR)$(FISH_COMPLETION_DIR)/onedrive.fish
|
|
endif
|
|
# --- OneDrive folder icon (hicolor) ---
|
|
mkdir -p $(DESTDIR)$(ICON_PLACES_DIR)
|
|
$(INSTALL) -m 0644 $(ICON_SOURCE_SVG) $(DESTDIR)$(ICON_PLACES_DIR)/$(ICON_TARGET_SVG)
|
|
# Refresh icon cache only when installing to the live system (not during staged DESTDIR installs)
|
|
# and only if the theme directory is a proper theme (has index.theme)
|
|
if [ -z "$(DESTDIR)" ] && command -v gtk-update-icon-cache >/dev/null 2>&1 \
|
|
&& [ -f "$(ICON_THEMEDIR)/index.theme" ]; then \
|
|
gtk-update-icon-cache -q "$(ICON_THEMEDIR)"; \
|
|
fi
|
|
|
|
|
|
uninstall:
|
|
rm -f $(DESTDIR)$(bindir)/onedrive
|
|
rm -f $(DESTDIR)$(mandir)/man1/onedrive.1
|
|
rm -f $(DESTDIR)$(sysconfdir)/logrotate.d/onedrive
|
|
ifeq ($(HAVE_SYSTEMD),yes)
|
|
ifeq ($(RHEL),1)
|
|
rm -f $(DESTDIR)$(systemdsystemunitdir)/onedrive*.service
|
|
else
|
|
rm -f $(DESTDIR)$(systemdsystemunitdir)/onedrive*.service
|
|
rm -f $(DESTDIR)$(systemduserunitdir)/onedrive*.service
|
|
endif
|
|
else
|
|
ifeq ($(RHEL_VERSION),6)
|
|
rm -f $(DESTDIR)/etc/init.d/onedrive
|
|
rm -f $(DESTDIR)$(bindir)/onedrive_service.sh
|
|
endif
|
|
endif
|
|
for i in $(DOCFILES) ; do rm -f $(DESTDIR)$(docdir)/$$i ; done
|
|
ifeq ($(COMPLETIONS),yes)
|
|
rm -f $(DESTDIR)$(ZSH_COMPLETION_DIR)/_onedrive
|
|
rm -f $(DESTDIR)$(BASH_COMPLETION_DIR)/onedrive
|
|
rm -f $(DESTDIR)$(FISH_COMPLETION_DIR)/onedrive.fish
|
|
endif
|
|
# --- OneDrive folder icon (hicolor) ---
|
|
rm -f $(DESTDIR)$(ICON_PLACES_DIR)/$(ICON_TARGET_SVG)
|
|
# Refresh icon cache if removing from the live system and index.theme exists
|
|
if [ -z "$(DESTDIR)" ] && command -v gtk-update-icon-cache >/dev/null 2>&1 \
|
|
&& [ -f "$(ICON_THEMEDIR)/index.theme" ]; then \
|
|
gtk-update-icon-cache -q "$(ICON_THEMEDIR)"; \
|
|
fi
|