blob: 89e41b01afe497ad3d8d588eaaefbca4c145edaf [file] [log] [blame]
CC=gcc
SED=sed
CLANG_FORMAT=clang-format-3.9
CLANG_TIDY=clang-tidy-3.9
PREFIX = /usr
SYSCONFDIR = /etc
BINDIR = $(PREFIX)/bin
SRCFILES := xwl.c virtwl.h
XMLFILES := aura-shell.xml viewporter.xml xdg-shell-unstable-v6.xml linux-dmabuf-unstable-v1.xml drm.xml
AUXFILES := Makefile README LICENSE AUTHORS xwl@.service.in version.h.in xwlrc xwl.sh
ALLFILES := $(SRCFILES) $(XMLFILES) $(AUXFILES)
GIT_VERSION := $(shell git describe --abbrev=4 --dirty --always --tags)
DIST_VERSION := $(shell git describe --abbrev=0 --tags)
DIST_VERSION_BITS := $(subst ., ,$(DIST_VERSION))
DIST_VERSION_MAJOR := $(word 1,$(DIST_VERSION_BITS))
DIST_VERSION_MINOR := $(word 2,$(DIST_VERSION_BITS))
DIST_VERSION_MINOR_NEXT := $(shell expr $(DIST_VERSION_MINOR) + 1)
CFLAGS=-g -Wall `pkg-config --cflags xcb xcb-composite xcb-xfixes wayland-server wayland-client libsystemd gbm` -I. -DXWAYLAND_PATH=\"$(PREFIX)/bin\"
LDFLAGS=-lpthread -lm `pkg-config --libs xcb xcb-composite xcb-xfixes wayland-server wayland-client libsystemd gbm`
DEPS = xdg-shell-unstable-v6-client-protocol.h xdg-shell-unstable-v6-server-protocol.h aura-shell-client-protocol.h viewporter-client-protocol.h linux-dmabuf-unstable-v1-client-protocol.h drm-server-protocol.h version.h
OBJECTS = xwl.o xdg-shell-unstable-v6-protocol.o aura-shell-protocol.o viewporter-protocol.o linux-dmabuf-unstable-v1-protocol.o drm-protocol.o
all: xwl-run xwl@.service
xwl@.service: xwl@.service.in
$(SED) \
-e 's|@bindir[@]|$(BINDIR)|g' \
-e 's|@sysconfdir[@]|$(SYSCONFDIR)|g' \
-e 's|@version[@]|$(DIST_VERSION)|g' \
$< > $@
xwl-run: $(OBJECTS)
$(CC) $(OBJECTS) -o xwl-run $(LDFLAGS)
%-protocol.c: %.xml
wayland-scanner code < $< > $@
%-client-protocol.h: %.xml
wayland-scanner client-header < $< > $@
%-server-protocol.h: %.xml
wayland-scanner server-header < $< > $@
version.h: version.h.in
$(SED) -e 's|@version[@]|$(GIT_VERSION)|g' $< > $@
%.o: %.c
$(CC) -c -o $@ $< $(CFLAGS)
$(OBJECTS): $(DEPS)
.PHONY: all install uninstall update-version dist deb version-clean clean style check-style tidy
install: all
install -D xwl-run \
$(DESTDIR)$(PREFIX)/bin/xwl-run
install -D xwlrc $(DESTDIR)$(SYSCONFDIR)/xwlrc
install -m 644 -D xwl@.service \
$(DESTDIR)$(PREFIX)/lib/systemd/user/xwl@.service
install -m 644 -D xwl.sh $(DESTDIR)$(SYSCONFDIR)/profile.d/xwl.sh
uninstall:
rm -f $(DESTDIR)$(PREFIX)/bin/xwl-run
rm -f $(DESTDIR)$(SYSCONFDIR)/xwlrc
rm -f $(DESTDIR)$(PREFIX)/lib/systemd/user/xwl@.service
rm -f $(DESTDIR)$(SYSCONFDIR)/profile.d/xwl.sh
update-version: version-clean
dch -v $(DIST_VERSION_MAJOR).$(DIST_VERSION_MINOR_NEXT)-1
git commit -m 'debian/changelog: bump to version $(DIST_VERSION_MAJOR).$(DIST_VERSION_MINOR_NEXT)' debian/changelog
git tag $(DIST_VERSION_MAJOR).$(DIST_VERSION_MINOR_NEXT)
dist: version-clean $(DEPS)
mkdir -p xwl-$(DIST_VERSION)
cp -r $(ALLFILES) $(DEPS) debian xwl-$(DIST_VERSION)
tar czf xwl-$(DIST_VERSION).tar.gz xwl-$(DIST_VERSION)
rm -rf xwl-$(DIST_VERSION)
deb: dist
ln -sf xwl-$(DIST_VERSION).tar.gz xwl_$(DIST_VERSION).orig.tar.gz
tar xzf xwl-$(DIST_VERSION).tar.gz
cd xwl-$(DIST_VERSION) && debuild -i -us -uc -b
rm -rf xwl-$(DIST_VERSION) xwl_$(DIST_VERSION).orig.tar.gz
version-clean:
rm -f version.h
clean: version-clean
rm -f *~ *-protocol.c *-protocol.h *.o xwl-run xwl@.service \
xwl-*.tar.gz xwl*.deb xwl_*.build xwl_*.buildinfo xwl_*.changes
style: $(DEPS)
@for src in $(SRCFILES) ; do \
echo "Formatting $$src..."; \
$(CLANG_FORMAT) -i "$$src"; \
$(CLANG_TIDY) -checks='-*,readability-identifier-naming' \
-config="{CheckOptions: [ \
{ key: readability-identifier-naming.StructCase, value: lower_case }, \
{ key: readability-identifier-naming.FunctionCase, value: lower_case }, \
{ key: readability-identifier-naming.VariableCase, value: lower_case }, \
{ key: readability-identifier-naming.GlobalConstantCase, value: lower_case }, \
{ key: readability-identifier-naming.EnumConstantCase, value: UPPER_CASE } \
]}" "$$src"; \
done
@echo "Done"
check-style:
@for src in $(SRCFILES) ; do \
var=`$(CLANG_FORMAT) "$$src" | diff "$$src" - | wc -l`; \
if [ $$var -ne 0 ] ; then \
echo "$$src does not respect the coding style (diff: $$var lines)"; \
exit 1; \
fi; \
done
@echo "Style check passed"
tidy: $(DEPS)
@for src in $(SRCFILES); do \
echo "Running tidy on $$src..."; \
$(CLANG_TIDY) -checks="-*,modernize-use-auto,modernize-use-nullptr, \
readability-else-after-return,readability-simplify-boolean-expr, \
readability-redundant-member-init,modernize-use-default-member-init, \
modernize-use-equals-default,modernize-use-equals-delete, \
modernize-use-using,modernize-loop-convert, \
cppcoreguidelines-no-malloc,misc-redundant-expression" \
"$$src"; \
done
@echo "Done"