./bootstrap
./configure
The bootstrap script will use autotools to set up the build environment and
create the configure
script.
Use ./configure --help
for options. Use --prefix
to make an install in your
home directory. This is necessary to test Python scripts. The systemd user unit
directory should be set to avoid writing to the system location.
Systemd will look for the unit files in ~/.config/systemd/user
so this
directory can be used as a target if the unit files will be used. Otherwise the
location can be set to no
to disable the systemd files.
Example:
./configure --prefix="${HOME}/redshift/root" \
--with-systemduserunitdir="${HOME}/.config/systemd/user"
Now, build the files:
make
The main redshift program can be run at this point. To install to the prefix directory run:
make install
You can now run the Python script. Example:
"${HOME}/redshift/root/bin/redshift-gtk"
-
autotools, gettext
-
intltool, libtool
-
libdrm (Optional, for DRM support)
-
libxcb, libxcb-randr (Optional, for RandR support)
-
libX11, libXxf86vm (Optional, for VidMode support)
-
Glib 2 (Optional, for GeoClue2 support)
-
GTK+ 3 (Optional, for GUI config tool)
-
Python 3, pygobject, pyxdg (Optional, for GUI support)
-
appindicator (Optional, for Ubuntu-style GUI status icon)
Ubuntu users will find all these dependencies in the packages listed in
.travis.yml
.
Redshift follows roughly the Linux coding style described at https://www.kernel.org/doc/Documentation/CodingStyle. Some specific rules to note are:
- Lines should not be longer than 80 characters in new code. If lines are longer than this the code could likely be improved by moving some parts to a smaller function.
- All structures are typedef'ed.
- Avoid "Yoda" conditions; they make the logic unnecessarily hard to comprehend.
- Avoid multiline if-statements without braces; either use a single line or add the braces.
- Use only C-style comments (
/* */
).
- Create a topic branch for your specific changes. You can base this off the
master branch or a specific version tag if you prefer
(
git co -b topic master
). - Create a commit for each logical change on the topic branch. The commit log
must contain a one line description (max. 80 characters long). If you cannot
describe the commit in 80 characters you should probably split it up into
multiple commits. The first line can be followed by a blank line and a longer
description (split lines at 80 chars.) for more complex commits. If the
commit fixes a known issue, mention the issue number in the first line
(
Fix #11: ...
). - The topic branch itself should tackle one problem. Feel free to create many topic branches and pull requests if you have many different patches. Putting them into one branch makes it harder to review the code.
- Push the topic branch to Github, find it on github.com and create a pull
request to the master branch of this repository. If you are making a bug fix
for a specific release, you can create a pull request to the release branch
instead (e.g.
release-1.9
). - Discussion will ensue. If you are not prepared to partake in the discussion or further improve your patch for inclusion, please say so and someone else may be able to take on responsibility for your patch. Otherwise we will assume that you will be open to criticism and suggestions for improvements and that you will take responsibility for further improving the patch. You can add further commits to your topic branch and they will automatically be added to the pull request when you push them to Github.
- You may be asked to rebase the patch on the master branch if your patch conflicts with recent changes to the master branch. However, if there is no conflict, there is no reason to rebase. Please do not merge the master back into your topic branch as that will convolute the history unnecessarily.
- Finally, when your patch has been refined, you may be asked to squash small commits into larger commits. This is simply so that the project history is clean and easy to follow. Remember that each commit should be able to stand on its own, be able to compile and function normally. Commits that fix a small error or adds a few comments to a previous commit should normally just be squashed into that larger commit.
If you want to learn more about the Git branching model that we use please see
https://nvie.com/posts/a-successful-git-branching-model/ but note that we use
the master
branch as develop
.
You can contribute translations directly at
Redshift Translations on
Launchpad. Updated translations will be pulled back into the po
files on
GitHub before a release is made.
- Select a commit in master to branch from, or if making a bugfix release use
previous release tag as base (e.g. for
1.9.1
, use1.9
as the base). - Create release branch
release-X.Y
. - Apply any bugfixes for the release.
- Import updated translations from Launchpad and commit. Remember to update the
po/LINGUAS
file if new languages were added. - Update the version string in
configure.ac
and create entry in NEWS. - Run
make distcheck
. - Commit and tag release (
vX.Y
orvX.Y.Z
). - Push the new tag to GitHub and also upload the source dist file.
Also remember to check before release that:
- The Windows build is okay.
- The build files for Linux distributions are updated.
Run make dist-xz
and copy the .tar.xz
file to ~/rpmbuild/SOURCES
. Then
run:
rpmbuild -ba contrib/redshift.spec
If successful, this will place RPMs in ~/rpmbuild/RPMS
.
Install MinGW and run configure
using the following command line. Use
i686-w64-mingw32
as the host for 32-bit builds.
./configure --disable-drm --disable-randr --disable-vidmode --enable-wingdi \
--disable-quartz --disable-geoclue2 --disable-corelocation --disable-gui \
--disable-ubuntu --host=x86_64-w64-mingw32
- The verbose flag is (currently) only held in redshift.c; thus, write all verbose debugging messages there.