Commit Graph

63 Commits

Author SHA1 Message Date
Marc Di Luzio
39ad076fa9 Refactor to store the initial governor state when gamemode is entered
Rather than when gamemoded is started. As see in Issue #52.

	A small refactor here to ensure things stay consistent, especially
	to stop storing a pointer from get_gov_state that might have had
	it's memory changed at some point, confusingly.
2018-05-15 16:37:09 +01:00
Marc Di Luzio
6d181f86bd Label master as 1.2-dev 2018-05-11 14:53:30 +01:00
Marc Di Luzio
8b9f4b9ac8 Correct a comment 2018-05-11 14:25:02 +01:00
Marc Di Luzio
da58061945 Add a note for dbus-user-session as seen in issues like #48 2018-05-11 08:59:51 +01:00
Marc Di Luzio
1592ada697 Warn users if no governor is found so they spot issues sooner
See issue 44
2018-05-11 08:53:42 +01:00
Marc Di Luzio
c9db0b2b8a Allow execution without any cpu governors to set - for issue #44 2018-05-11 08:51:56 +01:00
Marc Di Luzio
2fc900f1e4 Add to the changelog for commit 8bd9587e8 2018-05-01 15:46:22 +01:00
Marc Di Luzio
3d34444d79 Merge branch 'master' into 1.1RC 2018-05-01 15:45:57 +01:00
Marc Di Luzio
8bd9587e80 Provide a cascaded merge-overwrite config approach for #6
gamemoded will now load and merge settings from the following locations - arrays will merge and single settings will overwrite.

	1. /usr/share/gamemode/
	2. /etc/
	3. $XDG_CONFIG_HOME or $HOME/.config/
	4. $PWD
2018-05-01 15:42:54 +01:00
Marc Di Luzio
836aa6307b Merge branch 'master' into 1.1RC 2018-04-27 08:59:53 +01:00
Marc Di Luzio
ebe41657ff Build fix for meson 0.40.1 as seen in issue #32 2018-04-27 08:58:55 +01:00
Marc Di Luzio
b8b2b0415e Update to 1.1 ready for release 2018-04-25 15:50:05 +01:00
Marc Di Luzio
975d678ab7 Allow failure when finding functions that are new to the API
This allows a game using a newer client header than the installed gamemode to still function
2018-04-25 15:24:07 +01:00
Marc Di Luzio
3eea07255e Add gamemode_query_status and teach gamemoded '-s'
This allows the client to query the daemon about the status of gamemode.

	Returns the following:
		 0 if gamemode is inactive
		 1 if gamemode is active
		 2 if gamemode is active and this client is registered
		-1 if the query failed

	Passing -s to gamemoded will simply query and print the current status.

	Allows for more comprehensive testing when using 'gamemoded -r' as well as more reactionary program behaviour
2018-04-25 14:51:38 +01:00
Marc Di Luzio
2317bcde14 Teach gamemoded the '-r' option
This allows for easy requesting of gamemode and pausing for any signal

	Primarily useful for simple tests, but also functionally to allow enterning and exiting gamemode manually
2018-04-25 14:46:20 +01:00
Marc Di Luzio
03ee174fe6 Exclude submodules from the format suggestion 2018-04-25 14:45:51 +01:00
Marc Di Luzio
3a5050b175 Update README.md 2018-04-24 17:23:02 +01:00
Marc Di Luzio
633b7f7716 Update the current example config file 2018-04-24 17:14:12 +01:00
Marc Di Luzio
d42dd30e25 Fix format check 2018-04-24 17:09:06 +01:00
Marc Di Luzio
d26aac7147 Add support for user defined local script plugins
A much requested feature, this allows for providing custom scripts in the config file. An example in the man page is below and would trigger both a system notification, and allow control over a background crypto mining script automatically in gamemode.

	[custom]
	; Custom scripts (executed using the shell) when gamemode starts and ends
	start=notify-send "GameMode started"
	    /home/me/bin/stop_ethmining.sh

	end=notify-send "GameMode ended"
	    /home/me/bin/start_ethmining.sh

	Scripts are run with system() and do not have any special privilages, as with the rest of the daemon, custom scripts that require root will need their own permissions set up externally.

	This commit also renames two defines as they needed to be moved to the public interface.
2018-04-24 16:59:17 +01:00
Marc Di Luzio
ac58a59c9b Refactor the config gathering code to be reusable
This moves adding to lists and getting long values into resuable functions.

	It also fixes a couple other issues in the process:
		1. Logging now goes to the error channel and is labelled
		2. >Max length lines are properly handled, although this should never happen since inih has a 200 limit
2018-04-24 15:21:59 +01:00
Marc Di Luzio
14d671214f Add "reaper_freq" config setting in the "general" section
This simply allows control over the reaper thread frequency.

	Defaults to 5 as before.
2018-04-24 14:37:39 +01:00
Marc Di Luzio
c2432d6182 Add git to the install dependencies as seen in #36 2018-04-24 13:43:44 +01:00
Marc Di Luzio
a9ef55cba3 Fix the format check script by applying it to the previous commit
Rather than just to local changes, which doesn't work as intended
2018-04-16 17:52:48 +01:00
Marc Di Luzio
0e345d715d Apply clang-format to commit d26ac60 2018-04-16 17:46:32 +01:00
Marc Di Luzio
5cca341ec2 Rename variables and functions that had an underscore prefix
Ensures we conform better to C standards
2018-04-16 17:42:54 +01:00
Leonard
d26ac60da0 Minor C cleanup (#27)
* Minor C cleanup

 - some symbols can be made static:
    1. set_gov_state
    2. everything in gamemode_client.h
 - daemonize() can also take a const char*, since the name is only
   passed to printf() or syslog()
 - prevent shadowing of variables
 - use explicit (void) as parameter-list more consistently
 - use some more const.
   Move cast to more appropriate place and document that execv() behaves
   as if args where of type const *char and we trust on that.
 - example: Just use main(void), which is also an acceptable ISO-C decl
 - example: Use stderr for errors

* Fix -Wold-style-declaration issue
2018-04-16 17:21:35 +01:00
OlliC
ce64b59381 Integrated sd_notify to get status messages in systemd (#28)
* Integrated sd_notify to get status messages in systemd
* reset color attributes after use in string
2018-04-16 17:04:41 +01:00
OlliC
9870790fdd Added SIGTERM kill signal handling 2018-04-16 16:43:49 +01:00
Marc Di Luzio
34e6d076a8 Add a basic travis file for unit tests
Only code formatting implemented at the moment.

  Travis is currently Ubuntu 14.04, which is missing multiple library versions needed. Bootstrapping in Python 3.5, Meson and Ninja is possible, but can take a while, but also bootstrapping in libsystemd is one step too many for now as it takes a significant amount of time.
2018-04-13 14:32:02 +01:00
Marc Di Luzio
6fb5835f77 clang-format fix for commit 867e40497a 2018-04-13 14:03:16 +01:00
grmat
a5b0198ceb doc/examples: remove 'ninja' as explicit dep (#4)
as it's already required by meson.
Also use the default unit file path (/usr/lib/systemd/user/) for
packaged versions. /etc/systemd/user is intended for manually installed
services.

arch-meson is just a Meson wrapper with correct arch packaging prefixes set.
2018-04-13 10:28:00 +01:00
Marc Di Luzio
a5ceeaaa28 Update README.md
* Install off the 1.0 tag not master
* Generally remove some headers to clean up the view on GitHub
* Link to contributors page as we now have more than 2
2018-04-13 10:24:48 +01:00
Marc Di Luzio
867e40497a Fixes for #23 and #24, violations of the C standard 2018-04-12 10:47:42 +01:00
Bruno Thomsen
53eece339c README: added Fedora build requirements.
Signed-off-by: Bruno Thomsen <bruno.thomsen@gmail.com>
2018-04-11 10:14:33 +01:00
Casper
2b30165402 Prevent running bootstrap.sh as root 2018-04-11 09:58:22 +01:00
Marc Di Luzio
187364ad5d Update README.md
Add a note about distribution packages being preferable.
2018-04-10 14:59:21 +01:00
Ikey Doherty
8fb77e639d Ensure to set _GNU_SOURCE for POSIX compliance with signals
The systemd bus headers aren't setting a POSIX compliance level so we
define the catch-all to ensure the build doesn't error out, as seen with
issue #3. This is due to the reliance of `siginfo_t`, which requires a
minimum POSIX level of `199309L` when using glibc.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2018-04-10 14:09:39 +01:00
Ikey Doherty
69db9c2a61 Conformance: Update copyright range to include 2018
Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2018-04-10 13:23:38 +01:00
Ikey Doherty
f1195e22bf scripts: Add management scripts to make release process easier
To facilitate a proper release process we now have scripts to create
complete tarballs in the fasion of autotools, which will also include
the archived `inih` project. The net result is a completel tarball which
build systems can use in a reproducable fashion without requiring network
access to complete, thus improving security and ensuring consistency in
results between various distributions should subprojects update.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2018-04-10 13:23:38 +01:00
Ikey Doherty
17efeaa699 subprojects: Switch inih to a properly managed git submodule
This allows us to correctly manage inih version by manually updating it,
as opposed to relying on `HEAD` which will render each build unable to
reproduce across changes.

Additionally with submodules we can look to distribute complete tarballs
of the repository to facilitate build systems that ban networking for
security reasons (i.e. Solus).

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2018-04-10 13:23:38 +01:00
Ikey Doherty
b8316ffafb subprojects: Remove wrapper for the inih project
We can rely on git submodules to achieve this.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
2018-04-10 13:23:38 +01:00
Marc Di Luzio
4f14c807ba 1.0: Finalised for release
Updating the README.md to bring it ready for wider release:
* Removed some points that were more implementation details
* Added Contributions section
* Simplified the usage section
* Expanded initial explanation
* Fixed steam launch command to allow the overlay to still work

Others:
* Mark as 1.0
* Update the license file for 2018
1.0
2018-04-04 10:06:23 +01:00
Marc Di Luzio
759cbc3c40 Add config file parsing
Checks for a gamemode.ini in /usr/share/gamemode/ (or in the cwd for debugging)

	Currently allows for blacklisting and whitelisting clients based on rudimentary needle-haystack executable name checks

	See the example/gamemode.ini file for expected syntax

	Using the BSD licensed inih library (with additional meson.build file)
2018-03-23 16:59:15 +00:00
Marc Di Luzio
142246366f Add -h and -v and augment the usage text with option descriptions 2018-03-23 16:59:15 +00:00
Minze Zwerver
24a192d594 Added an example PKBUILD file for Arch 2018-03-23 16:59:15 +00:00
Marc Di Luzio
81cc0e9aa7 Add a man page
Possibly better to generate this with "ronn" or similar
2018-03-23 16:59:15 +00:00
Marc Di Luzio
7a3ae91781 Call pthread_rwlock_init on the rwlock
The spec says the results are undefined if an uninitialised
	read-write lock is used without being initialised, though
	evidently things were working out alright
2018-03-23 16:59:15 +00:00
Marc Di Luzio
72e24b5292 Update meson.build for 0.3 development 2018-03-23 16:59:13 +00:00
Marc Di Luzio
73fb3e97e6 Update README.md for 0.2 release
Add pkg-config for ubuntu
	Suggest using bootstrap script
	Change TODO section into a planned features section
	Add changelog file
2018-03-23 16:59:01 +00:00