summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--LICENSE22
-rw-r--r--Makefile26
-rw-r--r--README.md15
-rwxr-xr-xconfigure56
-rwxr-xr-xconfigure-functions.sh351
-rw-r--r--data/dbus/.gitignore (renamed from dbus/.gitignore)0
-rw-r--r--data/dbus/config/io.mainframe.shopsystem.AudioPlayer.conf (renamed from dbus/config/io.mainframe.shopsystem.AudioPlayer.conf)0
-rw-r--r--data/dbus/config/io.mainframe.shopsystem.Config.conf (renamed from dbus/config/io.mainframe.shopsystem.Config.conf)0
-rw-r--r--data/dbus/config/io.mainframe.shopsystem.Database.conf (renamed from dbus/config/io.mainframe.shopsystem.Database.conf)0
-rw-r--r--data/dbus/config/io.mainframe.shopsystem.InputDevice.conf (renamed from dbus/config/io.mainframe.shopsystem.InputDevice.conf)0
-rw-r--r--data/dbus/config/io.mainframe.shopsystem.InvoicePDF.conf (renamed from dbus/config/io.mainframe.shopsystem.InvoicePDF.conf)0
-rw-r--r--data/dbus/config/io.mainframe.shopsystem.Mail.conf (renamed from dbus/config/io.mainframe.shopsystem.Mail.conf)0
-rw-r--r--data/dbus/config/io.mainframe.shopsystem.PGP.conf (renamed from dbus/config/io.mainframe.shopsystem.PGP.conf)0
-rw-r--r--data/dbus/config/io.mainframe.shopsystem.ScannerSession.conf (renamed from dbus/config/io.mainframe.shopsystem.ScannerSession.conf)0
-rw-r--r--data/dbus/config/io.mainframe.shopsystem.SerialDevice.conf (renamed from dbus/config/io.mainframe.shopsystem.SerialDevice.conf)0
-rw-r--r--data/dbus/config/io.mainframe.shopsystem.StockPDF.conf (renamed from dbus/config/io.mainframe.shopsystem.StockPDF.conf)0
-rw-r--r--data/dbus/io.mainframe.shopsystem.AudioPlayer.service.in (renamed from dbus/io.mainframe.shopsystem.AudioPlayer.service.in)2
-rw-r--r--data/dbus/io.mainframe.shopsystem.Config.service.in (renamed from dbus/io.mainframe.shopsystem.Config.service.in)2
-rw-r--r--data/dbus/io.mainframe.shopsystem.Database.service.in (renamed from dbus/io.mainframe.shopsystem.Database.service.in)2
-rw-r--r--data/dbus/io.mainframe.shopsystem.InputDevice.service.in (renamed from dbus/io.mainframe.shopsystem.InputDevice.service.in)2
-rw-r--r--data/dbus/io.mainframe.shopsystem.InvoicePDF.service.in (renamed from dbus/io.mainframe.shopsystem.InvoicePDF.service.in)2
-rw-r--r--data/dbus/io.mainframe.shopsystem.Mail.service.in (renamed from dbus/io.mainframe.shopsystem.Mail.service.in)2
-rw-r--r--data/dbus/io.mainframe.shopsystem.PGP.service.in (renamed from dbus/io.mainframe.shopsystem.PGP.service.in)2
-rw-r--r--data/dbus/io.mainframe.shopsystem.ScannerSession.service.in (renamed from dbus/io.mainframe.shopsystem.ScannerSession.service.in)2
-rw-r--r--data/dbus/io.mainframe.shopsystem.SerialDevice.service.in (renamed from dbus/io.mainframe.shopsystem.SerialDevice.service.in)2
-rw-r--r--data/dbus/io.mainframe.shopsystem.StockPDF.service.in (renamed from dbus/io.mainframe.shopsystem.StockPDF.service.in)2
-rw-r--r--data/dbus/meson.build28
-rw-r--r--data/invoice/footer-line.svg (renamed from invoice/footer-line.svg)0
-rw-r--r--data/invoice/invoice.final.html (renamed from invoice/invoice.final.html)0
-rw-r--r--data/invoice/invoice.final.txt (renamed from invoice/invoice.final.txt)0
-rw-r--r--data/invoice/invoice.temporary.html (renamed from invoice/invoice.temporary.html)0
-rw-r--r--data/invoice/invoice.temporary.txt (renamed from invoice/invoice.temporary.txt)0
-rw-r--r--data/invoice/logo.svg (renamed from invoice/logo.svg)0
-rw-r--r--data/invoice/pdf-template.txt (renamed from invoice/pdf-template.txt)0
-rw-r--r--data/invoice/treasurer.mail.txt (renamed from invoice/treasurer.mail.txt)0
-rw-r--r--data/invoice/vat.html (renamed from invoice/vat.html)0
-rw-r--r--data/invoice/vat.txt (renamed from invoice/vat.txt)0
-rw-r--r--data/logo.txt (renamed from logo.txt)0
-rw-r--r--data/meson.build10
-rw-r--r--data/po/LINGUAS1
-rw-r--r--data/po/POTFILES47
-rw-r--r--data/po/de.po (renamed from locale/de.po)260
-rw-r--r--data/po/meson.build2
-rw-r--r--data/po/shopsystem.pot475
-rw-r--r--data/sounds/system/LICENSE (renamed from sounds/system/LICENSE)0
-rw-r--r--data/sounds/system/error.ogg (renamed from sounds/system/error.ogg)bin15582 -> 15582 bytes
-rw-r--r--data/sounds/system/shutdown.ogg (renamed from sounds/system/shutdown.ogg)bin35991 -> 35991 bytes
-rw-r--r--data/sounds/system/startup.ogg (renamed from sounds/system/startup.ogg)bin23405 -> 23405 bytes
-rw-r--r--data/sounds/user/beep/LICENSE (renamed from sounds/user/beep/LICENSE)0
-rw-r--r--data/sounds/user/beep/error/buzzer.ogg (renamed from sounds/user/beep/error/buzzer.ogg)bin27153 -> 27153 bytes
-rw-r--r--data/sounds/user/beep/login/toycaralarm.ogg (renamed from sounds/user/beep/login/toycaralarm.ogg)bin8737 -> 8737 bytes
-rw-r--r--data/sounds/user/beep/logout/cha ching.ogg (renamed from sounds/user/beep/logout/cha ching.ogg)bin31476 -> 31476 bytes
-rw-r--r--data/sounds/user/beep/purchase/beep.ogg (renamed from sounds/user/beep/purchase/beep.ogg)bin5665 -> 5665 bytes
-rw-r--r--data/sounds/user/beep/purchase/camera.ogg (renamed from sounds/user/beep/purchase/camera.ogg)bin14605 -> 14605 bytes
-rw-r--r--data/sounds/user/dude/LICENSE (renamed from sounds/user/dude/LICENSE)0
-rw-r--r--data/sounds/user/dude/error/I broke something.ogg (renamed from sounds/user/dude/error/I broke something.ogg)bin76434 -> 76434 bytes
-rw-r--r--data/sounds/user/dude/login/hey dude, whats up man.ogg (renamed from sounds/user/dude/login/hey dude, whats up man.ogg)bin57447 -> 57447 bytes
-rw-r--r--data/sounds/user/dude/logout/bye.ogg (renamed from sounds/user/dude/logout/bye.ogg)bin27610 -> 27610 bytes
-rw-r--r--data/sounds/user/dude/purchase/yeah man.ogg (renamed from sounds/user/dude/purchase/yeah man.ogg)bin38743 -> 38743 bytes
-rw-r--r--data/sounds/user/girlfriend/LICENSE (renamed from sounds/user/girlfriend/LICENSE)0
-rw-r--r--data/sounds/user/girlfriend/error/no, no, forget it.ogg (renamed from sounds/user/girlfriend/error/no, no, forget it.ogg)bin26872 -> 26872 bytes
-rw-r--r--data/sounds/user/girlfriend/login/hello.ogg (renamed from sounds/user/girlfriend/login/hello.ogg)bin9918 -> 9918 bytes
-rw-r--r--data/sounds/user/girlfriend/login/we need to talk about this.ogg (renamed from sounds/user/girlfriend/login/we need to talk about this.ogg)bin37918 -> 37918 bytes
-rw-r--r--data/sounds/user/girlfriend/logout/get out, get outta here.ogg (renamed from sounds/user/girlfriend/logout/get out, get outta here.ogg)bin29444 -> 29444 bytes
-rw-r--r--data/sounds/user/girlfriend/logout/i dont have time for this.ogg (renamed from sounds/user/girlfriend/logout/i dont have time for this.ogg)bin34138 -> 34138 bytes
-rw-r--r--data/sounds/user/girlfriend/logout/why dont you just leave then.ogg (renamed from sounds/user/girlfriend/logout/why dont you just leave then.ogg)bin35918 -> 35918 bytes
-rw-r--r--data/sounds/user/girlfriend/purchase/code accepted.ogg (renamed from sounds/user/girlfriend/purchase/code accepted.ogg)bin17678 -> 17678 bytes
-rw-r--r--data/sounds/user/girlfriend/purchase/yeah so what.ogg (renamed from sounds/user/girlfriend/purchase/yeah so what.ogg)bin25896 -> 25896 bytes
-rw-r--r--data/sounds/user/japanese/LICENSE (renamed from sounds/user/japanese/LICENSE)0
-rw-r--r--data/sounds/user/japanese/error/no, iie.ogg (renamed from sounds/user/japanese/error/no, iie.ogg)bin13226 -> 13226 bytes
-rw-r--r--data/sounds/user/japanese/error/sumimasen.ogg (renamed from sounds/user/japanese/error/sumimasen.ogg)bin19912 -> 19912 bytes
-rw-r--r--data/sounds/user/japanese/login/hello.ogg (renamed from sounds/user/japanese/login/hello.ogg)bin20760 -> 20760 bytes
-rw-r--r--data/sounds/user/japanese/logout/goodbye.ogg (renamed from sounds/user/japanese/logout/goodbye.ogg)bin20223 -> 20223 bytes
-rw-r--r--data/sounds/user/japanese/purchase/domo-arigato.ogg (renamed from sounds/user/japanese/purchase/domo-arigato.ogg)bin12280 -> 12280 bytes
-rw-r--r--data/sounds/user/japanese/purchase/domo.ogg (renamed from sounds/user/japanese/purchase/domo.ogg)bin8290 -> 8290 bytes
-rw-r--r--data/sounds/user/robot/LICENSE (renamed from sounds/user/robot/LICENSE)0
-rw-r--r--data/sounds/user/robot/error/critical error.ogg (renamed from sounds/user/robot/error/critical error.ogg)bin21345 -> 21345 bytes
-rw-r--r--data/sounds/user/robot/login/login accepted.ogg (renamed from sounds/user/robot/login/login accepted.ogg)bin32165 -> 32165 bytes
-rw-r--r--data/sounds/user/robot/logout/terminating.ogg (renamed from sounds/user/robot/logout/terminating.ogg)bin18148 -> 18148 bytes
-rw-r--r--data/sounds/user/robot/purchase/accepted.ogg (renamed from sounds/user/robot/purchase/accepted.ogg)bin16324 -> 16324 bytes
-rw-r--r--data/sounds/user/sexy/LICENSE (renamed from sounds/user/sexy/LICENSE)0
-rw-r--r--data/sounds/user/sexy/error/error.ogg (renamed from sounds/user/sexy/error/error.ogg)bin15582 -> 15582 bytes
-rw-r--r--data/sounds/user/sexy/login/welcome back sexy bitch.ogg (renamed from sounds/user/sexy/login/welcome back sexy bitch.ogg)bin56041 -> 56041 bytes
-rw-r--r--data/sounds/user/sexy/logout/well if thats how you feel.ogg (renamed from sounds/user/sexy/logout/well if thats how you feel.ogg)bin36308 -> 36308 bytes
-rw-r--r--data/sounds/user/sexy/logout/what about me.ogg (renamed from sounds/user/sexy/logout/what about me.ogg)bin26986 -> 26986 bytes
-rw-r--r--data/sounds/user/sexy/purchase/do it again.ogg (renamed from sounds/user/sexy/purchase/do it again.ogg)bin65485 -> 65485 bytes
-rw-r--r--data/sounds/user/sexy/purchase/what is next.ogg (renamed from sounds/user/sexy/purchase/what is next.ogg)bin19297 -> 19297 bytes
-rw-r--r--data/sounds/user/sexy/purchase/yes, master.ogg (renamed from sounds/user/sexy/purchase/yes, master.ogg)bin24812 -> 24812 bytes
-rw-r--r--data/sounds/user/sexy/purchase/your will is my command.ogg (renamed from sounds/user/sexy/purchase/your will is my command.ogg)bin41467 -> 41467 bytes
-rw-r--r--data/systemd/meson.build18
-rw-r--r--data/systemd/shopsystem-display-on-off.service.in (renamed from systemd/shopsystem-display-on-off.service)2
-rw-r--r--data/systemd/shopsystem-input-device.service.in (renamed from systemd/shopsystem-input-device.service)2
-rw-r--r--data/systemd/shopsystem-mail-backup.service.in (renamed from systemd/shopsystem-mail-backup.service)2
-rw-r--r--data/systemd/shopsystem-mail-backup.timer (renamed from systemd/shopsystem-mail-backup.timer)0
-rw-r--r--data/systemd/shopsystem-mail-daily-invoice.service.in (renamed from systemd/shopsystem-mail-daily-invoice.service)2
-rw-r--r--data/systemd/shopsystem-mail-daily-invoice.timer (renamed from systemd/shopsystem-mail-daily-invoice.timer)0
-rw-r--r--data/systemd/shopsystem-mail-monthly-invoice.service.in (renamed from systemd/shopsystem-mail-monthly-invoice.service)2
-rw-r--r--data/systemd/shopsystem-mail-monthly-invoice.timer (renamed from systemd/shopsystem-mail-monthly-invoice.timer)0
-rw-r--r--data/systemd/shopsystem-ui.service.in (renamed from systemd/shopsystem-ui.service)2
-rw-r--r--data/systemd/shopsystem-web.service.in (renamed from systemd/shopsystem-web.service)2
-rw-r--r--data/templates/aliases/index.html (renamed from templates/aliases/index.html)0
-rw-r--r--data/templates/aliases/new.html (renamed from templates/aliases/new.html)0
-rw-r--r--data/templates/base.html (renamed from templates/base.html)0
-rw-r--r--data/templates/cashbox/add.html (renamed from templates/cashbox/add.html)0
-rw-r--r--data/templates/cashbox/detail.html (renamed from templates/cashbox/detail.html)0
-rw-r--r--data/templates/cashbox/index.html (renamed from templates/cashbox/index.html)0
-rw-r--r--data/templates/cashbox/selection.html (renamed from templates/cashbox/selection.html)0
-rw-r--r--data/templates/css/base.css (renamed from templates/css/base.css)0
-rw-r--r--data/templates/css/bootstrap.css (renamed from templates/css/bootstrap.css)0
-rw-r--r--data/templates/errors/400.html (renamed from templates/errors/400.html)0
-rw-r--r--data/templates/errors/403.html (renamed from templates/errors/403.html)0
-rw-r--r--data/templates/errors/todo.html (renamed from templates/errors/todo.html)0
-rw-r--r--data/templates/img/glyphicons-halflings-white.png (renamed from templates/img/glyphicons-halflings-white.png)bin8777 -> 8777 bytes
-rw-r--r--data/templates/img/glyphicons-halflings.png (renamed from templates/img/glyphicons-halflings.png)bin12799 -> 12799 bytes
-rw-r--r--data/templates/index.html (renamed from templates/index.html)0
-rw-r--r--data/templates/js/bootstrap.js (renamed from templates/js/bootstrap.js)0
-rw-r--r--data/templates/js/code39.js (renamed from templates/js/code39.js)0
-rw-r--r--data/templates/js/jquery.flot.js (renamed from templates/js/jquery.flot.js)0
-rw-r--r--data/templates/js/jquery.flot.navigate.js (renamed from templates/js/jquery.flot.navigate.js)0
-rw-r--r--data/templates/js/jquery.flot.pie.js (renamed from templates/js/jquery.flot.pie.js)0
-rw-r--r--data/templates/js/jquery.flot.selection.js (renamed from templates/js/jquery.flot.selection.js)0
-rw-r--r--data/templates/js/jquery.js (renamed from templates/js/jquery.js)0
-rw-r--r--data/templates/js/jquery.mousewheel.js (renamed from templates/js/jquery.mousewheel.js)0
-rw-r--r--data/templates/js/sorttable.js (renamed from templates/js/sorttable.js)0
-rw-r--r--data/templates/logout.html (renamed from templates/logout.html)0
-rw-r--r--data/templates/menu.html (renamed from templates/menu.html)0
-rw-r--r--data/templates/menu_login.html (renamed from templates/menu_login.html)0
-rw-r--r--data/templates/menu_logout.html (renamed from templates/menu_logout.html)0
-rw-r--r--data/templates/products/bestbefore.html (renamed from templates/products/bestbefore.html)0
-rw-r--r--data/templates/products/entry.html (renamed from templates/products/entry.html)0
-rw-r--r--data/templates/products/index.html (renamed from templates/products/index.html)0
-rw-r--r--data/templates/products/new.html (renamed from templates/products/new.html)0
-rw-r--r--data/templates/products/newprice.html (renamed from templates/products/newprice.html)0
-rw-r--r--data/templates/products/restock.html (renamed from templates/products/restock.html)0
-rw-r--r--data/templates/stats/index.html (renamed from templates/stats/index.html)0
-rw-r--r--data/templates/stats/profit_per_day.html (renamed from templates/stats/profit_per_day.html)0
-rw-r--r--data/templates/stats/profit_per_product.html (renamed from templates/stats/profit_per_product.html)0
-rw-r--r--data/templates/stats/profit_per_weekday.html (renamed from templates/stats/profit_per_weekday.html)0
-rw-r--r--data/templates/stats/stock.html (renamed from templates/stats/stock.html)0
-rw-r--r--data/templates/users/entry.html (renamed from templates/users/entry.html)0
-rw-r--r--data/templates/users/import-pgp.html (renamed from templates/users/import-pgp.html)0
-rw-r--r--data/templates/users/import.html (renamed from templates/users/import.html)0
-rw-r--r--data/templates/users/index.html (renamed from templates/users/index.html)0
-rw-r--r--data/templates/users/invoice.html (renamed from templates/users/invoice.html)0
-rw-r--r--data/udev/meson.build6
-rw-r--r--data/udev/shopsystem-input-device-rfid.rules (renamed from systemd/shopsystem-input-device-rfid.rules)0
-rw-r--r--data/udev/shopsystem-input-device.rules (renamed from systemd/shopsystem-input-device.rules)0
-rw-r--r--dbus/Makefile27
-rw-r--r--dbus/config/Makefile15
-rw-r--r--meson.build3
-rw-r--r--src/Makefile9
-rw-r--r--src/audio/Makefile10
-rw-r--r--src/backup/Makefile10
-rw-r--r--src/cli/Makefile10
-rw-r--r--src/config/Makefile10
-rw-r--r--src/curses-ui/Makefile10
-rw-r--r--src/database/Makefile10
-rw-r--r--src/input-device/Makefile10
-rw-r--r--src/invoice/Makefile13
-rw-r--r--src/libcairobarcode/Makefile11
-rw-r--r--src/mail/Makefile10
-rw-r--r--src/meson.build52
-rw-r--r--src/pdf-invoice/Makefile13
-rw-r--r--src/pdf-stock/Makefile20
-rw-r--r--src/pgp/Makefile10
-rw-r--r--src/scanner-session/Makefile10
-rw-r--r--src/serial-device/Makefile10
-rw-r--r--src/web/Makefile10
-rw-r--r--systemd/Makefile23
170 files changed, 815 insertions, 843 deletions
diff --git a/.gitignore b/.gitignore
index 026f4b8..af5ca8c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+build/
gnupg/
*.swp
shop.db
diff --git a/LICENSE b/LICENSE
index 1f0b9a1..400c4a1 100644
--- a/LICENSE
+++ b/LICENSE
@@ -2,40 +2,40 @@ Files: *
Copyright: 2012-2013, Sebastian Reichel <sre@ring0.de>
License: ISC
-Files: templates/js/sorttable.js
+Files: data/templates/js/sorttable.js
Copyright: 2007, Stuart Langridge <sil@kryogenix.org>
License: Expat
-Files: templates/js/jquery.js
+Files: data/templates/js/jquery.js
Copyright: 2012, jQuery Foundation and contributors
License: Expat
-Files: templates/js/jquery.mousewheel.js
+Files: data/templates/js/jquery.mousewheel.js
Copyright: 2011, Brandon Aaron (http://brandonaaron.net)
License: Expat
-Files: templates/js/jquery.flot.js
- templates/js/jquery.flot.navigate.js
- templates/js/jquery.flot.selection.js
+Files: data/templates/js/jquery.flot.js
+ data/templates/js/jquery.flot.navigate.js
+ data/templates/js/jquery.flot.selection.js
Copyright: 2007-2012, Ole Laursen
2007-2012, IOLA
2008, Three Dub Media (http://threedubmedia.com)
License: Expat
-Files: templates/js/jquery.flot.pie.js
+Files: data/templates/js/jquery.flot.pie.js
Copyright: 2009, Brian Medendorp
2009, btburnett3
2009, Anthony Aragues
2009, Xavi Ivars
License: Expat
-Files: templates/css/bootstrap.css
- templates/js/bootstrap.js
+Files: data/templates/css/bootstrap.css
+ data/templates/js/bootstrap.js
Copyright: Bootstrap
License: Apache-2.0
-Files: templates/img/glyphicons-halflings.png
- templates/img/glyphicons-halflings-white.png
+Files: data/templates/img/glyphicons-halflings.png
+ data/templates/img/glyphicons-halflings-white.png
Copyright: Glyphicons
License: CC-BY-3.0
diff --git a/Makefile b/Makefile
index ee08cef..2b0da03 100644
--- a/Makefile
+++ b/Makefile
@@ -1,24 +1,20 @@
-all:
- @cd src && make --no-print-directory all
+all: compile gettext
-gettext: locale/de/LC_MESSAGES/shopsystem.mo
+build:
+ meson build
-locale/de/LC_MESSAGES/shopsystem.mo: locale/de.po
- install -d locale/de/LC_MESSAGES/
- msgfmt -o $@ $<
+compile: build
+ cd build && ninja
-locale/%.po: locale/messages.pot
- msgmerge -N --backup=off --update $@ $<
+gettext: build
+ cd build && ninja shopsystem-pot
+ cd build && ninja shopsystem-update-po
-locale/messages.pot: */*/*.vala
- xgettext --language=vala --from-code=utf-8 --keyword=_ --escape --sort-output -o $@ */*/*.vala
+install: build
+ cd build && DESTDIR=`pwd`/tmpinst ninja install
clean:
- @cd src && make --no-print-directory clean
-
-install:
- @cd src && make --no-print-directory install
- @cd dbus && make --no-print-directory install
+ rm -rf build
shop.db: sql/tables.sql sql/views.sql sql/trigger.sql
@for file in $^ ; do \
diff --git a/README.md b/README.md
index 8c8dd87..fa67d0b 100644
--- a/README.md
+++ b/README.md
@@ -51,17 +51,12 @@ but you need to modify a few things.
* adduser "shop" with homedir in /home/shop
* clone git repository into /home/shop/serial-barcode-scanner
-=== Build the Software ===
+=== Build and Install the Software ===
- * ./configure
- * make shop.db
- * make
-
-=== DBus Configuration ===
-
- * cd dbus
- * make
- * sudo make install
+ * meson build --prefix /usr
+ * cd build
+ * ninja
+ * ninja install
=== Systemd ===
diff --git a/configure b/configure
deleted file mode 100755
index cdadf59..0000000
--- a/configure
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/sh
-. ./configure-functions.sh
-
-NAME="serial-barcode-scanner"
-AUTHOR="Sebastian Reichel <sre@ring0.de>"
-VERSION="0.1"
-
-check_dependencies() {
- VALA_VERSION=`valac --api-version`
- GPGME_VERSION=`gpgme-config --version`
- ESMTP_VERSION=`libesmtp-config --version`
-
- echo "Checking software dependencies:"
- check_prg_version valac 0.16 $VALA_VERSION "force"
-
- echo "Checking library dependencies:"
- check_pkg_version ncursesw 5.9 "force"
- check_pkg_version gee-0.8 0.6 "force"
- check_pkg_version gio-2.0 2.36 "force"
- check_pkg_version gmime-3.0 3.0 "force"
- check_prg_version gpgme 1.2 $GPGME_VERSION "force"
- check_pkg_version gstreamer-1.0 1.0 "force"
- check_pkg_version libarchive 3.0 "force"
- check_prg_version libesmtp 0.1 $ESMTP_VERSION "force"
- check_pkg_version librsvg-2.0 2.36 "force"
- check_pkg_version libsoup-2.4 2.48 "force"
- check_pkg_version pangocairo 1.32 "force"
- check_pkg_version sqlite3 3.7 "force"
- check_pkg_version libssl 1.0.0 "force"
-
- echo "Checking font dependencies:"
- check_font LMSans10 "force"
- check_font LMRoman10 "force"
-}
-
-extra_options() {
- case $1 in
- *)
- DESC="not available"
- CMD="not-available"
- esac
-}
-
-BASE=`dirname $0`
-
-check_parameters $@
-check_compiler
-check_install
-check_pkgconfig
-
-check_dependencies
-
-create_config $BASE/config.mk VALAC
-create_header $BASE/config.h VERSION
-
-final_report CC PREFIX
diff --git a/configure-functions.sh b/configure-functions.sh
deleted file mode 100755
index e003e5d..0000000
--- a/configure-functions.sh
+++ /dev/null
@@ -1,351 +0,0 @@
-#!/bin/sh
-# MIT license
-# Copyright 2009-2010 Sebastian Reichel <sre@ring0.de>
-
-# These are default values for some configurable things
-if [ "x$CC" = "x" ] ; then
- CC=gcc
-fi;
-
-if [ "x$VALAC" = "x" ] ; then
- VALAC=valac
-fi;
-
-if [ "x$INSTALL" = "x" ] ; then
- INSTALL=install
-fi;
-
-if [ "x$PKGCONFIG" = "x" ] ; then
- PKGCONFIG=pkg-config
-fi;
-
-PREFIX=/usr/local
-INSTALL_DATA=`echo ${INSTALL} -m 644`
-INSTALL_PROGRAM=`echo ${INSTALL} -m 755 -s`
-INSTALL_DIR=`echo ${INSTALL} -d`
-
-# This awk script is derived from autotools
-awk_verscmp='
- # Use only awk features that work with 7th edition Unix awk (1978).
- # My, what an old awk you have, Mr. Solaris!
- END {
- while (length(v1) && length(v2)) {
- # Set d1 to be the next thing to compare from v1, and likewise for d2.
- # Normally this is a single character, but if v1 and v2 contain digits,
- # compare them as integers and fractions as strverscmp does.
- if (v1 ~ /^[0-9]/ && v2 ~ /^[0-9]/) {
- # Split v1 and v2 into their leading digit string components d1 and d2,
- # and advance v1 and v2 past the leading digit strings.
- for (len1 = 1; substr(v1, len1 + 1) ~ /^[0-9]/; len1++) continue
- for (len2 = 1; substr(v2, len2 + 1) ~ /^[0-9]/; len2++) continue
- d1 = substr(v1, 1, len1); v1 = substr(v1, len1 + 1)
- d2 = substr(v2, 1, len2); v2 = substr(v2, len2 + 1)
- if (d1 ~ /^0/) {
- if (d2 ~ /^0/) {
- # Compare two fractions.
- while (d1 ~ /^0/ && d2 ~ /^0/) {
- d1 = substr(d1, 2); len1--
- d2 = substr(d2, 2); len2--
- }
- if (len1 != len2 && ! (len1 && len2 && substr(d1, 1, 1) == substr(d2, 1, 1))) {
- # The two components differ in length, and the common prefix
- # contains only leading zeros. Consider the longer to be less.
- d1 = -len1
- d2 = -len2
- } else {
- # Otherwise, compare as strings.
- d1 = "x" d1
- d2 = "x" d2
- }
- } else {
- # A fraction is less than an integer.
- exit 1
- }
- } else {
- if (d2 ~ /^0/) {
- # An integer is greater than a fraction.
- exit 2
- } else {
- # Compare two integers.
- d1 += 0
- d2 += 0
- }
- }
- } else {
- # The normal case, without worrying about digits.
- d1 = substr(v1, 1, 1); v1 = substr(v1, 2)
- d2 = substr(v2, 1, 1); v2 = substr(v2, 2)
- }
- if (d1 < d2) exit 1
- if (d1 > d2) exit 2
- }
- # Beware Solaris /usr/xgp4/bin/awk (at least through Solaris 10),
- # which mishandles some comparisons of empty strings to integers.
- if (length(v2)) exit 1
- if (length(v1)) exit 2
- }
-'
-
-show_usage() {
- echo "'configure' configures $1 to adapt to many kinds of systems."
- echo "Usage: ./configure [OPTION]... [VAR=VALUE]..."
- echo
- echo "To assign environment variables (e.g. CC, CFLAGS, ...), specify them"
- echo "as VAR=VALUE. See below for descriptions of some of the useful variables."
- echo
- echo "Defaults for the options are specified in brackets."
- echo
- echo "Options:"
-
- echo " -h, --help display this help and exit"
- echo " -v, --version display version information and exit"
- echo " --prefix=PREFIX install files in PREFIX [/usr/local]"
- echo " --debug enable debug build (-g flag)"
- echo " --colored enable colored build"
-
- for parameter in `extra_options list-all` ; do
- extra_options $parameter
- printf " %-27s $DESC\n" $parameter
- done
-
- echo
- echo "Some influential environment variables:"
- echo " CC C compiler command"
- echo " VALAC Vala compiler"
- echo " CFLAGS C compiler flags, e.g. -I<header dir>"
- echo " LDFLAGS linker flags, e.g. -L<lib dir>"
- echo " INSTALL install binary"
- echo " PKGCONFIG pkg-config binary"
- echo
- echo "Report bugs to: $2"
- exit 0
-}
-
-show_version() {
- echo "$1 version $2"
- echo "Originally written by $3"
- exit 0
-}
-
-check_parameters() {
- while : ; do
- [ -z "$1" ] && break
- parse_options $1
- shift
- done
-
- if [ "$UNKNOWN_FLAG" = "1" ] ; then
- echo
- fi
-}
-
-parse_options() {
- flag=`echo $1 | cut -d = -f 1`
- value=`echo $1 | awk 'BEGIN{FS="=";}{print $2}'`
-
- case $flag in
- "-h"|"--help")
- show_usage "$NAME" "$AUTHOR"; ;;
- "-v"|"--version")
- show_version "$NAME" "$VERSION" "$AUTHOR"; ;;
- "--debug")
- DEBUG="yes"; ;;
- "--colored")
- COLOR="yes"; ;;
- "--prefix")
- PREFIX="$value"; ;;
- "CC")
- CC="$value"; ;;
- "CFLAGS")
- CFLAGS="$value"; ;;
- "LDFLAGS")
- LDFLAGS="$value"; ;;
- "INSTALL")
- INSTALL="$value"; ;;
- "PKGCONFIG")
- PKGCONFIG="$value"; ;;
- "VALAC")
- VALAC="$value"; ;;
- *)
- extra_options $flag $value
- if [ "$CMD" != "not-available" ] ; then
- eval "$CMD"
- else
- echo "WARNING: unknown flag '$1'." >&2
- UNKNOWN_FLAG=1
- fi;;
- esac
-}
-
-check_prg_version() {
- printf " %-34s" "$1..."
-
- if [ "$4" = "disable" ] ; then
- echo "disabled"
- return 0
- fi
-
- if [ "$3" = "" ] ; then
- echo "missing"
- if [ "$4" != "force" ] ; then
- return 0
- else
- exit 1
- fi
- fi
-
- echo "$3"
-
- awk "$awk_verscmp" v1="$2" v2="$3" /dev/null
- if [ "$?" = "2" ] ; then
- echo "Please install at least $2 to use this feature"
- if [ "$4" != "force" ] ; then
- return 0
- else
- exit 1
- fi
- fi
-
- return 1
-}
-
-check_pkg_version() {
- printf " %-34s" "$1..."
-
- if [ "$3" = "disable" ] ; then
- echo "disabled"
- return 0
- fi
-
- pkg-config --exists $1
- if [ "$?" = "1" ] ; then
- echo "missing"
- if [ "$3" != "force" ] ; then
- return 0
- else
- exit 1
- fi
- fi
-
- echo `pkg-config --modversion $1`
-
- pkg-config --atleast-version "$2" "$1"
- if [ "$?" = "1" ] ; then
- echo "Please install at least $2"
- if [ "$3" != "force" ] ; then
- return 0
- else
- exit 1
- fi
- fi
-
- return 1
-}
-
-check_font() {
- name="$1"
-
- printf " %-34s" "$1..."
-
- for file in /etc/fonts/conf.avail/*; do
- grep -q "$name" "$file"
- if [ $? -eq 0 ] ; then
- echo "available"
- return 1
- fi
- done
-
- echo "MISSING"
-
- if [ "$2" != "force" ] ; then
- return 0
- else
- exit 1
- fi
-}
-
-check_compiler() {
- printf "Checking compiler... "
- echo 'main(){}' > test.c
- ${CC} ${CFLAGS} ${LDFLAGS} -o a.out test.c >/dev/null 2>&1
- if [ ! $? = 0 ]; then
- echo failed
- exit 1
- else
- echo works
- fi
- rm -f a.out test.c
-}
-
-check_install() {
- printf "Checking install... "
- if [ -x `which ${INSTALL}` ] ; then
- echo available
- else
- echo missing
- exit 1
- fi
-}
-
-check_pkgconfig() {
- printf "Checking pkg-config... "
- if [ -x `which ${PKGCONFIG}` ] ; then
- echo `${PKGCONFIG} --version`
- else
- echo missing
- exit 1
- fi
-}
-
-create_config() {
- FILE=$1
- shift
- printf "Creating %-26s" $FILE...
- rm -f $FILE && touch $FILE
-
- # Some standard variables
- echo DEBUG=$DEBUG >> $FILE
- echo COLOR=$COLOR >> $FILE
- echo CC=$CC >> $FILE
- echo CFLAGS=$CFLAGS >> $FILE
- echo LDFLAGS=$LDFLAGS >> $FILE
- echo PREFIX=$PREFIX >> $FILE
- echo PKGCONFIG=$PKGCONFIG >> $FILE
- echo INSTALL=$INSTALL >> $FILE
- echo INSTALL_DATA=$INSTALL_DATA >> $FILE
- echo INSTALL_PROGRAM=$INSTALL_PROGRAM >> $FILE
- echo INSTALL_DIR=$INSTALL_DIR >> $FILE
-
- for option in $@ ; do
- value=`echo \\$$option`
- value=`eval echo $value`
- echo $option=$value >> $FILE
- done
-
- echo "done"
-}
-
-create_header() {
- FILE=$1
- shift
- printf "Creating %-26s" $FILE...
- rm -f $FILE && touch $FILE
-
- for option in $@ ; do
- value=`echo \\$$option`
- value=`eval echo $value`
- echo "#define $option \"$value\"" >> $FILE
- done
-
- echo "done"
-}
-
-final_report() {
- echo
- echo "Final Report:"
- for option in $@ ; do
- value=`echo \\$$option`
- value=`eval echo $value`
- printf " %-10s = %s\n" $option $value
- done
-}
diff --git a/dbus/.gitignore b/data/dbus/.gitignore
index 0e3ad1b..0e3ad1b 100644
--- a/dbus/.gitignore
+++ b/data/dbus/.gitignore
diff --git a/dbus/config/io.mainframe.shopsystem.AudioPlayer.conf b/data/dbus/config/io.mainframe.shopsystem.AudioPlayer.conf
index b8c11c0..b8c11c0 100644
--- a/dbus/config/io.mainframe.shopsystem.AudioPlayer.conf
+++ b/data/dbus/config/io.mainframe.shopsystem.AudioPlayer.conf
diff --git a/dbus/config/io.mainframe.shopsystem.Config.conf b/data/dbus/config/io.mainframe.shopsystem.Config.conf
index 41e5cb6..41e5cb6 100644
--- a/dbus/config/io.mainframe.shopsystem.Config.conf
+++ b/data/dbus/config/io.mainframe.shopsystem.Config.conf
diff --git a/dbus/config/io.mainframe.shopsystem.Database.conf b/data/dbus/config/io.mainframe.shopsystem.Database.conf
index 61bde19..61bde19 100644
--- a/dbus/config/io.mainframe.shopsystem.Database.conf
+++ b/data/dbus/config/io.mainframe.shopsystem.Database.conf
diff --git a/dbus/config/io.mainframe.shopsystem.InputDevice.conf b/data/dbus/config/io.mainframe.shopsystem.InputDevice.conf
index 15ad43d..15ad43d 100644
--- a/dbus/config/io.mainframe.shopsystem.InputDevice.conf
+++ b/data/dbus/config/io.mainframe.shopsystem.InputDevice.conf
diff --git a/dbus/config/io.mainframe.shopsystem.InvoicePDF.conf b/data/dbus/config/io.mainframe.shopsystem.InvoicePDF.conf
index 6ec4610..6ec4610 100644
--- a/dbus/config/io.mainframe.shopsystem.InvoicePDF.conf
+++ b/data/dbus/config/io.mainframe.shopsystem.InvoicePDF.conf
diff --git a/dbus/config/io.mainframe.shopsystem.Mail.conf b/data/dbus/config/io.mainframe.shopsystem.Mail.conf
index e48e264..e48e264 100644
--- a/dbus/config/io.mainframe.shopsystem.Mail.conf
+++ b/data/dbus/config/io.mainframe.shopsystem.Mail.conf
diff --git a/dbus/config/io.mainframe.shopsystem.PGP.conf b/data/dbus/config/io.mainframe.shopsystem.PGP.conf
index ab2f8b2..ab2f8b2 100644
--- a/dbus/config/io.mainframe.shopsystem.PGP.conf
+++ b/data/dbus/config/io.mainframe.shopsystem.PGP.conf
diff --git a/dbus/config/io.mainframe.shopsystem.ScannerSession.conf b/data/dbus/config/io.mainframe.shopsystem.ScannerSession.conf
index 49c4eb1..49c4eb1 100644
--- a/dbus/config/io.mainframe.shopsystem.ScannerSession.conf
+++ b/data/dbus/config/io.mainframe.shopsystem.ScannerSession.conf
diff --git a/dbus/config/io.mainframe.shopsystem.SerialDevice.conf b/data/dbus/config/io.mainframe.shopsystem.SerialDevice.conf
index d849ef4..d849ef4 100644
--- a/dbus/config/io.mainframe.shopsystem.SerialDevice.conf
+++ b/data/dbus/config/io.mainframe.shopsystem.SerialDevice.conf
diff --git a/dbus/config/io.mainframe.shopsystem.StockPDF.conf b/data/dbus/config/io.mainframe.shopsystem.StockPDF.conf
index 8cf0fdc..8cf0fdc 100644
--- a/dbus/config/io.mainframe.shopsystem.StockPDF.conf
+++ b/data/dbus/config/io.mainframe.shopsystem.StockPDF.conf
diff --git a/dbus/io.mainframe.shopsystem.AudioPlayer.service.in b/data/dbus/io.mainframe.shopsystem.AudioPlayer.service.in
index b6a0c83..6aa6a6f 100644
--- a/dbus/io.mainframe.shopsystem.AudioPlayer.service.in
+++ b/data/dbus/io.mainframe.shopsystem.AudioPlayer.service.in
@@ -1,4 +1,4 @@
[D-BUS Service]
Name=io.mainframe.shopsystem.AudioPlayer
-Exec=${PATH}/audio/audio
+Exec=@PATH@/shop-audio
User=shop
diff --git a/dbus/io.mainframe.shopsystem.Config.service.in b/data/dbus/io.mainframe.shopsystem.Config.service.in
index 8203523..52e4cf7 100644
--- a/dbus/io.mainframe.shopsystem.Config.service.in
+++ b/data/dbus/io.mainframe.shopsystem.Config.service.in
@@ -1,4 +1,4 @@
[D-BUS Service]
Name=io.mainframe.shopsystem.Config
-Exec=${PATH}/config/config
+Exec=@PATH@/shop-config
User=shop
diff --git a/dbus/io.mainframe.shopsystem.Database.service.in b/data/dbus/io.mainframe.shopsystem.Database.service.in
index 1461477..89112dc 100644
--- a/dbus/io.mainframe.shopsystem.Database.service.in
+++ b/data/dbus/io.mainframe.shopsystem.Database.service.in
@@ -1,4 +1,4 @@
[D-BUS Service]
Name=io.mainframe.shopsystem.Database
-Exec=${PATH}/database/database
+Exec=@PATH@/shop-database
User=shop
diff --git a/dbus/io.mainframe.shopsystem.InputDevice.service.in b/data/dbus/io.mainframe.shopsystem.InputDevice.service.in
index b761d7d..1584d8d 100644
--- a/dbus/io.mainframe.shopsystem.InputDevice.service.in
+++ b/data/dbus/io.mainframe.shopsystem.InputDevice.service.in
@@ -1,4 +1,4 @@
[D-BUS Service]
Name=io.mainframe.shopsystem.InputDevice
-Exec=${PATH}/input-device/input-device
+Exec=@PATH@/shop-input-device
User=shop
diff --git a/dbus/io.mainframe.shopsystem.InvoicePDF.service.in b/data/dbus/io.mainframe.shopsystem.InvoicePDF.service.in
index 9da0a00..2516d4e 100644
--- a/dbus/io.mainframe.shopsystem.InvoicePDF.service.in
+++ b/data/dbus/io.mainframe.shopsystem.InvoicePDF.service.in
@@ -1,4 +1,4 @@
[D-BUS Service]
Name=io.mainframe.shopsystem.InvoicePDF
-Exec=${PATH}/pdf-invoice/pdf-invoice
+Exec=@PATH@/shop-pdf-invoice
User=shop
diff --git a/dbus/io.mainframe.shopsystem.Mail.service.in b/data/dbus/io.mainframe.shopsystem.Mail.service.in
index 1f0d2d1..694f579 100644
--- a/dbus/io.mainframe.shopsystem.Mail.service.in
+++ b/data/dbus/io.mainframe.shopsystem.Mail.service.in
@@ -1,4 +1,4 @@
[D-BUS Service]
Name=io.mainframe.shopsystem.Mail
-Exec=${PATH}/mail/mailer
+Exec=@PATH@/shop-mailer
User=shop
diff --git a/dbus/io.mainframe.shopsystem.PGP.service.in b/data/dbus/io.mainframe.shopsystem.PGP.service.in
index 3c5dc88..7c61f63 100644
--- a/dbus/io.mainframe.shopsystem.PGP.service.in
+++ b/data/dbus/io.mainframe.shopsystem.PGP.service.in
@@ -1,4 +1,4 @@
[D-BUS Service]
Name=io.mainframe.shopsystem.PGP
-Exec=${PATH}/pgp/pgp
+Exec=@PATH@/shop-pgp
User=shop
diff --git a/dbus/io.mainframe.shopsystem.ScannerSession.service.in b/data/dbus/io.mainframe.shopsystem.ScannerSession.service.in
index 974d33c..231ae21 100644
--- a/dbus/io.mainframe.shopsystem.ScannerSession.service.in
+++ b/data/dbus/io.mainframe.shopsystem.ScannerSession.service.in
@@ -1,4 +1,4 @@
[D-BUS Service]
Name=io.mainframe.shopsystem.ScannerSession
-Exec=${PATH}/scanner-session/scanner-session
+Exec=@PATH@/shop-scanner-session
User=shop
diff --git a/dbus/io.mainframe.shopsystem.SerialDevice.service.in b/data/dbus/io.mainframe.shopsystem.SerialDevice.service.in
index 3cac817..7433606 100644
--- a/dbus/io.mainframe.shopsystem.SerialDevice.service.in
+++ b/data/dbus/io.mainframe.shopsystem.SerialDevice.service.in
@@ -1,4 +1,4 @@
[D-BUS Service]
Name=io.mainframe.shopsystem.SerialDevice
-Exec=${PATH}/serial-device/serial-device
+Exec=@PATH@/shop-serial-device
User=shop
diff --git a/dbus/io.mainframe.shopsystem.StockPDF.service.in b/data/dbus/io.mainframe.shopsystem.StockPDF.service.in
index 06b2953..d1a3b5e 100644
--- a/dbus/io.mainframe.shopsystem.StockPDF.service.in
+++ b/data/dbus/io.mainframe.shopsystem.StockPDF.service.in
@@ -1,4 +1,4 @@
[D-BUS Service]
Name=io.mainframe.shopsystem.StockPDF
-Exec=${PATH}/pdf-stock/pdf-stock
+Exec=@PATH@/shop-pdf-stock
User=shop
diff --git a/data/dbus/meson.build b/data/dbus/meson.build
new file mode 100644
index 0000000..e8c529e
--- /dev/null
+++ b/data/dbus/meson.build
@@ -0,0 +1,28 @@
+bindir = join_paths(get_option('prefix'), get_option('bindir'))
+dbusdir = join_paths(get_option('prefix'), get_option('datadir'), 'dbus-1', 'system-services')
+dbuscfgdir = join_paths(get_option('sysconfdir'), 'dbus-1', 'system.d')
+
+cfg = configuration_data()
+cfg.set('PATH', bindir)
+
+configure_file(input: 'io.mainframe.shopsystem.AudioPlayer.service.in', output: 'io.mainframe.shopsystem.AudioPlayer.service', configuration: cfg, install_dir: dbusdir)
+configure_file(input: 'io.mainframe.shopsystem.Config.service.in', output: 'io.mainframe.shopsystem.Config.service', configuration: cfg, install_dir: dbusdir)
+configure_file(input: 'io.mainframe.shopsystem.Database.service.in', output: 'io.mainframe.shopsystem.Database.service', configuration: cfg, install_dir: dbusdir)
+configure_file(input: 'io.mainframe.shopsystem.InputDevice.service.in', output: 'io.mainframe.shopsystem.InputDevice.service', configuration: cfg, install_dir: dbusdir)
+configure_file(input: 'io.mainframe.shopsystem.InvoicePDF.service.in', output: 'io.mainframe.shopsystem.InvoicePDF.service', configuration: cfg, install_dir: dbusdir)
+configure_file(input: 'io.mainframe.shopsystem.Mail.service.in', output: 'io.mainframe.shopsystem.Mail.service', configuration: cfg, install_dir: dbusdir)
+configure_file(input: 'io.mainframe.shopsystem.PGP.service.in', output: 'io.mainframe.shopsystem.PGP.service', configuration: cfg, install_dir: dbusdir)
+configure_file(input: 'io.mainframe.shopsystem.ScannerSession.service.in', output: 'io.mainframe.shopsystem.ScannerSession.service', configuration: cfg, install_dir: dbusdir)
+configure_file(input: 'io.mainframe.shopsystem.SerialDevice.service.in', output: 'io.mainframe.shopsystem.SerialDevice.service', configuration: cfg, install_dir: dbusdir)
+configure_file(input: 'io.mainframe.shopsystem.StockPDF.service.in', output: 'io.mainframe.shopsystem.StockPDF.service', configuration: cfg, install_dir: dbusdir)
+
+install_data('config/io.mainframe.shopsystem.AudioPlayer.conf', install_dir: dbuscfgdir)
+install_data('config/io.mainframe.shopsystem.Config.conf', install_dir: dbuscfgdir)
+install_data('config/io.mainframe.shopsystem.Database.conf', install_dir: dbuscfgdir)
+install_data('config/io.mainframe.shopsystem.InputDevice.conf', install_dir: dbuscfgdir)
+install_data('config/io.mainframe.shopsystem.InvoicePDF.conf', install_dir: dbuscfgdir)
+install_data('config/io.mainframe.shopsystem.Mail.conf', install_dir: dbuscfgdir)
+install_data('config/io.mainframe.shopsystem.PGP.conf', install_dir: dbuscfgdir)
+install_data('config/io.mainframe.shopsystem.ScannerSession.conf', install_dir: dbuscfgdir)
+install_data('config/io.mainframe.shopsystem.SerialDevice.conf', install_dir: dbuscfgdir)
+install_data('config/io.mainframe.shopsystem.StockPDF.conf', install_dir: dbuscfgdir)
diff --git a/invoice/footer-line.svg b/data/invoice/footer-line.svg
index eafdffe..eafdffe 100644
--- a/invoice/footer-line.svg
+++ b/data/invoice/footer-line.svg
diff --git a/invoice/invoice.final.html b/data/invoice/invoice.final.html
index 3856231..3856231 100644
--- a/invoice/invoice.final.html
+++ b/data/invoice/invoice.final.html
diff --git a/invoice/invoice.final.txt b/data/invoice/invoice.final.txt
index 80e60b8..80e60b8 100644
--- a/invoice/invoice.final.txt
+++ b/data/invoice/invoice.final.txt
diff --git a/invoice/invoice.temporary.html b/data/invoice/invoice.temporary.html
index 26dc216..26dc216 100644
--- a/invoice/invoice.temporary.html
+++ b/data/invoice/invoice.temporary.html
diff --git a/invoice/invoice.temporary.txt b/data/invoice/invoice.temporary.txt
index bf21c51..bf21c51 100644
--- a/invoice/invoice.temporary.txt
+++ b/data/invoice/invoice.temporary.txt
diff --git a/invoice/logo.svg b/data/invoice/logo.svg
index 81e97a9..81e97a9 100644
--- a/invoice/logo.svg
+++ b/data/invoice/logo.svg
diff --git a/invoice/pdf-template.txt b/data/invoice/pdf-template.txt
index 9da8a9a..9da8a9a 100644
--- a/invoice/pdf-template.txt
+++ b/data/invoice/pdf-template.txt
diff --git a/invoice/treasurer.mail.txt b/data/invoice/treasurer.mail.txt
index 6c9c6ac..6c9c6ac 100644
--- a/invoice/treasurer.mail.txt
+++ b/data/invoice/treasurer.mail.txt
diff --git a/invoice/vat.html b/data/invoice/vat.html
index 245ec27..245ec27 100644
--- a/invoice/vat.html
+++ b/data/invoice/vat.html
diff --git a/invoice/vat.txt b/data/invoice/vat.txt
index d1ee957..d1ee957 100644
--- a/invoice/vat.txt
+++ b/data/invoice/vat.txt
diff --git a/logo.txt b/data/logo.txt
index ee57aa1..ee57aa1 100644
--- a/logo.txt
+++ b/data/logo.txt
diff --git a/data/meson.build b/data/meson.build
new file mode 100644
index 0000000..a1441b4
--- /dev/null
+++ b/data/meson.build
@@ -0,0 +1,10 @@
+datadir = join_paths(get_option('prefix'), get_option('datadir'), 'shopsystem')
+
+install_data('logo.txt', install_dir: datadir)
+install_subdir('sounds', install_dir: datadir)
+install_subdir('templates', install_dir: datadir)
+install_subdir('invoice', install_dir: datadir)
+subdir('dbus')
+subdir('po')
+subdir('systemd')
+subdir('udev')
diff --git a/data/po/LINGUAS b/data/po/LINGUAS
new file mode 100644
index 0000000..7673daa
--- /dev/null
+++ b/data/po/LINGUAS
@@ -0,0 +1 @@
+de
diff --git a/data/po/POTFILES b/data/po/POTFILES
new file mode 100644
index 0000000..33e1f6a
--- /dev/null
+++ b/data/po/POTFILES
@@ -0,0 +1,47 @@
+audio/audio.vala
+audio/main.vala
+backup/main.vala
+cli/cli.vala
+cli/main.vala
+config/config.vala
+config/main.vala
+curses-ui/clock.vala
+curses-ui/curses-ui.vala
+curses-ui/dialog.vala
+curses-ui/logo.vala
+curses-ui/main.vala
+curses-ui/message_box.vala
+curses-ui/message_box_overlay.vala
+curses-ui/numbers.vala
+curses-ui/status.vala
+database/database.vala
+database/main.vala
+graph-data.vala
+input-device/input-device.vala
+input-device/main.vala
+invoice/invoice.vala
+invoice/main.vala
+invoice/single.vala
+libcairobarcode/code39.vala
+libcairobarcode/ean.vala
+libcairobarcode/error.vala
+mail/mail.vala
+mail/mailer.vala
+mail/main.vala
+pdf-invoice/main.vala
+pdf-invoice/pdf-invoice.vala
+pdf-invoice/test.vala
+pdf-stock/main.vala
+pdf-stock/pdf-stock.vala
+pdf-stock/test.vala
+pgp/main.vala
+pgp/pgp.vala
+scanner-session/main.vala
+scanner-session/scannersession.vala
+serial-device/main.vala
+serial-device/serial-device.vala
+web/csv.vala
+web/main.vala
+web/template.vala
+web/web.vala
+web/websession.vala
diff --git a/locale/de.po b/data/po/de.po
index 6aca21f..f70e4ce 100644
--- a/locale/de.po
+++ b/data/po/de.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: shopsystem 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-06-28 23:13+0200\n"
+"POT-Creation-Date: 2018-06-29 01:20+0200\n"
"PO-Revision-Date: 2018-06-28 21:14+0200\n"
"Last-Translator: Sebastian Reichel <sre@ring0.de>\n"
"Language-Team: German\n"
@@ -14,7 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/curses-ui/message_box.vala:52
+#: curses-ui/message_box.vala:52
msgid ""
"\n"
"Date Changed: "
@@ -22,303 +22,299 @@ msgstr ""
"\n"
"Datumswechsel: "
-#: src/scanner-session/scannersession.vala:289
+#: scanner-session/scannersession.vala:289
#, c-format
msgid "%s bought %d items for %s €"
msgstr "%s hat gerade %d Posten für %s € gekauft"
-#: src/web/template.vala:53 src/web/template.vala:55 src/web/template.vala:57
-#: src/web/template.vala:59 src/web/template.vala:82
+#: web/template.vala:53 web/template.vala:55 web/template.vala:57
+#: web/template.vala:59 web/template.vala:82
#, c-format
msgid "%s could not be loaded!"
msgstr "%s konnte nicht geladen werden!"
-#: src/web/template.vala:40 src/web/template.vala:43 src/web/template.vala:46
-#: src/web/template.vala:49 src/web/template.vala:78
+#: web/template.vala:40 web/template.vala:43 web/template.vala:46
+#: web/template.vala:49 web/template.vala:78
#, c-format
msgid "%s not found!"
msgstr "%s wurde nicht gefunden!"
-#: src/pdf-invoice/pdf-invoice.vala:591
+#: pdf-invoice/pdf-invoice.vala:591
#, c-format
msgid "Article name \"%s\" does not fit on a single page!"
msgstr "Artikelname \"%s\" passt nicht auf eine Seite"
-#: src/serial-device/serial-device.vala:39
+#: serial-device/serial-device.vala:39
msgid "Can't read lock file!\n"
msgstr "Konnte Lock-Datei nicht lesen\n"
-#: src/audio/audio.vala:38
+#: audio/audio.vala:38
msgid "Cannot find alsa GStreamer plugin"
msgstr "GStreamer Plugin für ALSA konnte nicht gefunden werden"
-#: src/audio/audio.vala:42
+#: audio/audio.vala:42
msgid "Cannot find playbin2 GStreamer plugin"
msgstr "GStreamer Plugin playbin2 konnte nicht gefunden werden"
-#: src/audio/main.vala:39 src/database/main.vala:29
-#: src/input-device/main.vala:31 src/pdf-invoice/main.vala:30
-#: src/pgp/main.vala:35 src/serial-device/main.vala:29
+#: audio/main.vala:39 database/main.vala:29 input-device/main.vala:31
+#: pdf-invoice/main.vala:30 pgp/main.vala:35 serial-device/main.vala:29
#, c-format
msgid "Config Error: %s\n"
msgstr "Konfigurationsfehler: %s\n"
-#: src/serial-device/serial-device.vala:211
+#: serial-device/serial-device.vala:211
#, c-format
msgid "Convert Error: %s"
msgstr "Konvertierungsfehler"
-#: src/audio/main.vala:30 src/cli/main.vala:37 src/config/main.vala:32
-#: src/database/main.vala:40 src/input-device/main.vala:42
-#: src/pdf-invoice/main.vala:39 src/pdf-stock/main.vala:26 src/pgp/main.vala:44
-#: src/scanner-session/main.vala:28 src/serial-device/main.vala:40
+#: audio/main.vala:30 cli/main.vala:37 config/main.vala:32
+#: database/main.vala:40 input-device/main.vala:42 pdf-invoice/main.vala:39
+#: pdf-stock/main.vala:26 pgp/main.vala:44 scanner-session/main.vala:28
+#: serial-device/main.vala:40
msgid "Could not acquire name\n"
msgstr "Konnte DBus Namen nicht erlangen\n"
-#: src/input-device/input-device.vala:40
-#: src/serial-device/serial-device.vala:165
+#: input-device/input-device.vala:40 serial-device/serial-device.vala:165
msgid "Could not bind IOChannel"
msgstr "IOChannel Verbindung konnte nicht hergestellt werden"
-#: src/serial-device/serial-device.vala:59
+#: serial-device/serial-device.vala:59
#, c-format
msgid "Could not create lock file: %s!\n"
msgstr "Konnte Lock-Datei nicht erstellen: %s!\n"
-#: src/pdf-invoice/pdf-invoice.vala:81
+#: pdf-invoice/pdf-invoice.vala:81
#, c-format
msgid "Could not load SVG: %s\n"
msgstr "Konnte SVG nicht laden: %s\n"
-#: src/config/config.vala:26
+#: config/config.vala:26
#, c-format
msgid "Could not load configuration file: %s"
msgstr "Konnte Konfigurationsdatei nicht laden: %s"
-#: src/invoice/invoice.vala:338 src/pdf-invoice/pdf-invoice.vala:379
+#: invoice/invoice.vala:338 pdf-invoice/pdf-invoice.vala:379
#, c-format
msgid "Could not open VAT template: %s"
msgstr "Konnte VAT-Template nicht öffnen: %s"
-#: src/serial-device/serial-device.vala:55
+#: serial-device/serial-device.vala:55
msgid "Could not open device!\n"
msgstr "Konnte Gerätedatei nicht öffnen!\n"
-#: src/invoice/invoice.vala:252 src/invoice/invoice.vala:319
+#: invoice/invoice.vala:252 invoice/invoice.vala:319
#, c-format
msgid "Could not open invoice template: %s"
msgstr "Konnte Rechnungs-Template nicht öffnen: %s"
-#: src/audio/main.vala:53 src/cli/main.vala:68 src/config/main.vala:43
-#: src/database/main.vala:51 src/input-device/main.vala:53
-#: src/input-device/main.vala:58 src/pdf-stock/main.vala:37
-#: src/pgp/main.vala:55 src/scanner-session/main.vala:41
-#: src/serial-device/main.vala:51
+#: audio/main.vala:53 cli/main.vala:68 config/main.vala:43
+#: database/main.vala:51 input-device/main.vala:53 input-device/main.vala:58
+#: pdf-stock/main.vala:37 pgp/main.vala:55 scanner-session/main.vala:41
+#: serial-device/main.vala:51
msgid "Could not register service\n"
msgstr "Konnte DBus-Service nicht registrieren\n"
-#: src/pdf-invoice/main.vala:50
+#: pdf-invoice/main.vala:50
#, c-format
msgid "Could not register service: %s\n"
msgstr "Konnte DBus-Servicenicht registieren: %s\n"
-#: src/web/web.vala:1482
+#: web/web.vala:1482
msgid "Could not setup webserver!"
msgstr "Konnte Webserver nicht konfigurieren!"
-#: src/web/main.vala:64
+#: web/main.vala:64
#, c-format
msgid "Could not start Webserver: %s\n"
msgstr "Konnte Webserver nicht starten: %s\n"
-#: src/scanner-session/scannersession.vala:300
+#: pdf-stock/test.vala:26 scanner-session/scannersession.vala:300
#, c-format
msgid "DBus Error: %s"
msgstr "DBus Fehler: %s"
-#: src/audio/main.vala:41 src/database/main.vala:31
-#: src/input-device/main.vala:33 src/pdf-invoice/main.vala:26
-#: src/pgp/main.vala:31 src/serial-device/main.vala:31 src/web/main.vala:51
+#: audio/main.vala:41 database/main.vala:31 input-device/main.vala:33
+#: pdf-invoice/main.vala:26 pgp/main.vala:31 serial-device/main.vala:31
+#: web/main.vala:51
#, c-format
msgid "DBus Error: %s\n"
msgstr "DBus Fehler: %s\n"
-#: src/scanner-session/scannersession.vala:304
+#: scanner-session/scannersession.vala:304
#, c-format
msgid "Database Error: %s"
msgstr "Datenbank Fehler: %s"
-#: src/scanner-session/scannersession.vala:66
+#: scanner-session/scannersession.vala:66
#, c-format
msgid "Error (user=%d): %s"
msgstr "Fehler (Nutzer %d): %s"
-#: src/cli/main.vala:51
+#: cli/main.vala:51
#, c-format
msgid "Error sending command: %s"
msgstr "Fehler beim senden des Kommandos: %s"
-#: src/pgp/pgp.vala:123
+#: pgp/pgp.vala:123
msgid "Error!\n"
msgstr "Fehler!\n"
-#: src/curses-ui/logo.vala:44 src/scanner-session/scannersession.vala:178
-#: src/scanner-session/scannersession.vala:225
+#: curses-ui/logo.vala:44 scanner-session/scannersession.vala:178
+#: scanner-session/scannersession.vala:225
#, c-format
msgid "Error: %s"
msgstr "Fehler: %s"
-#: src/backup/main.vala:41 src/invoice/main.vala:51 src/invoice/main.vala:58
-#: src/invoice/single.vala:51 src/invoice/single.vala:58 src/mail/main.vala:26
-#: src/web/web.vala:1143
+#: backup/main.vala:41 invoice/main.vala:51 invoice/main.vala:58
+#: invoice/single.vala:51 invoice/single.vala:58 mail/main.vala:26
+#: web/web.vala:1143
#, c-format
msgid "Error: %s\n"
msgstr "Fehler: %s\n"
-#: src/mail/main.vala:35
+#: mail/main.vala:35
msgid "Error: Could not acquire name\n"
msgstr "Fehler: Konnte DBus-Namen nicht bekommen\n"
-#: src/mail/main.vala:47
+#: mail/main.vala:47
msgid "Error: Could not register service\n"
msgstr "Fehler: Konnte DBus-Service nicht registrieren\n"
-#: src/database/database.vala:81
+#: database/database.vala:81
msgid "Error: could not open database!"
msgstr "Fehler: Konnte Datenbank nicht öffnen!"
-#: src/database/database.vala:28
+#: database/database.vala:28
#, c-format
msgid "Error: could not prepare statement: %s"
msgstr "Fehler: Konnte SQL-Anweisung nicht erstellen: %s"
-#: src/scanner-session/scannersession.vala:174
-#: src/scanner-session/scannersession.vala:221
+#: scanner-session/scannersession.vala:174
+#: scanner-session/scannersession.vala:221
#, c-format
msgid "Error: unknown product: %llu"
msgstr "Fehler: unbekanntes Produkt: %llu"
-#: src/serial-device/serial-device.vala:163
+#: serial-device/serial-device.vala:163
msgid "Failed to set encoding"
msgstr "Fehler beim setzten der Zeichenkodierung"
-#: src/curses-ui/logo.vala:31
+#: curses-ui/logo.vala:31
#, c-format
msgid "File '%s' doesn't exist.\n"
msgstr "Datei '%s' existiert nicht.\n"
-#: src/input-device/input-device.vala:43 src/pdf-stock/test.vala:24
+#: input-device/input-device.vala:43 pdf-stock/test.vala:24
#, c-format
msgid "File Error: %s"
msgstr "Datei Fehler: %s"
-#: src/pdf-invoice/pdf-invoice.vala:387
+#: pdf-invoice/pdf-invoice.vala:387
#, c-format
msgid "File Error: %s\n"
msgstr "Datei Fehler: %s\n"
-#: src/scanner-session/scannersession.vala:20
+#: scanner-session/scannersession.vala:20
msgid "Guest"
msgstr "Gast"
-#: src/pdf-stock/test.vala:22 src/scanner-session/scannersession.vala:302
+#: pdf-stock/test.vala:22 scanner-session/scannersession.vala:302
#, c-format
msgid "IO Error: %s"
msgstr "EA Fehler: %s"
-#: src/audio/main.vala:37 src/curses-ui/main.vala:60 src/database/main.vala:27
-#: src/input-device/main.vala:29 src/pdf-invoice/main.vala:28
-#: src/pgp/main.vala:33 src/scanner-session/scannersession.vala:49
-#: src/serial-device/main.vala:27 src/web/main.vala:47
+#: audio/main.vala:37 curses-ui/main.vala:60 database/main.vala:27
+#: input-device/main.vala:29 pdf-invoice/main.vala:28 pgp/main.vala:33
+#: scanner-session/scannersession.vala:49 serial-device/main.vala:27
+#: web/main.vala:47
#, c-format
msgid "IO Error: %s\n"
msgstr "EA Fehler: %s\n"
-#: src/serial-device/serial-device.vala:207
+#: serial-device/serial-device.vala:207
#, c-format
msgid "IOChannel Error: %s"
msgstr "IOChannel Fehler: %s"
-#: src/serial-device/serial-device.vala:168
+#: serial-device/serial-device.vala:168
#, c-format
msgid "IOChannel: %s"
msgstr "IOChannel: %s"
-#: src/input-device/input-device.vala:27
+#: input-device/input-device.vala:27
msgid "Ignoring InputDevice!\n"
msgstr "Eingabegerät wird ignoriert\n"
-#: src/scanner-session/scannersession.vala:168
-#: src/scanner-session/scannersession.vala:215
+#: scanner-session/scannersession.vala:168
+#: scanner-session/scannersession.vala:215
msgid "Internal Error!"
msgstr "Interner Fehler!"
-#: src/web/main.vala:44 src/web/main.vala:49
+#: web/main.vala:44 web/main.vala:49
#, c-format
msgid "KeyFile Error: %s\n"
msgstr "Schlüsseldatei Fehler: %s\n"
-#: src/scanner-session/scannersession.vala:149
+#: scanner-session/scannersession.vala:149
msgid "Login as GUEST"
msgstr "Login als Gast"
-#: src/scanner-session/scannersession.vala:141
+#: scanner-session/scannersession.vala:141
#, c-format
msgid "Login failed (User ID = %d)"
msgstr "Login fehlgeschlagen (User ID = %d)"
-#: src/scanner-session/scannersession.vala:155
+#: scanner-session/scannersession.vala:155
msgid "Login failed as GUEST"
msgstr "Gast-Login fehlgeschlagen"
-#: src/web/websession.vala:165
+#: web/websession.vala:165
#, c-format
msgid "Login for user id %d failed\n"
msgstr "Login für Benutzer %d fehlgeschlagen\n"
-#: src/scanner-session/scannersession.vala:135
+#: scanner-session/scannersession.vala:135
#, c-format
msgid "Login: %s (%d)"
msgstr "Login: %s (%d)"
-#: src/input-device/input-device.vala:215
-#: src/serial-device/serial-device.vala:189
+#: input-device/input-device.vala:215 serial-device/serial-device.vala:189
msgid "Lost device"
msgstr "Gerät verloren"
-#: src/pdf-invoice/pdf-invoice.vala:628
+#: pdf-invoice/pdf-invoice.vala:628
msgid "No invoice ID given!"
msgstr "Keine Rechnungsnummer übergeben!"
-#: src/pdf-invoice/pdf-invoice.vala:631
+#: pdf-invoice/pdf-invoice.vala:631
msgid "No invoice data given!"
msgstr "Keine Rechnungsdaten übergeben!"
-#: src/pdf-invoice/pdf-invoice.vala:634
+#: pdf-invoice/pdf-invoice.vala:634
msgid "No invoice date given!"
msgstr "Kein Rechnungsdatum übergeben!"
-#: src/pdf-invoice/pdf-invoice.vala:637
+#: pdf-invoice/pdf-invoice.vala:637
msgid "No invoice recipient given!"
msgstr "Kein Rechnungsempfänger übergeben!"
-#: src/scanner-session/scannersession.vala:253
+#: scanner-session/scannersession.vala:253
msgid "No more Items on your Shopping Cart"
msgstr "Keine weiteren Gegenstände im Einkaufswagen"
-#: src/mail/mailer.vala:141 src/mail/mailer.vala:149
+#: mail/mailer.vala:141 mail/mailer.vala:149
msgid "No such mail"
msgstr "Mail wurde nicht gefunden"
-#: src/database/database.vala:611
+#: database/database.vala:611
msgid "No such session available in database!"
msgstr "Keine solche Session in der Datenbank verfügbar!"
-#: src/database/database.vala:710 src/database/database.vala:722
+#: database/database.vala:710 database/database.vala:722
msgid "No such user available in database!"
msgstr "Kein solcher Nutzer in der Datenbank verfügbar!"
-#: src/cli/main.vala:25
+#: cli/main.vala:25
#, c-format
msgid ""
"Nothing to send.\n"
@@ -329,153 +325,153 @@ msgstr ""
"Benutzung: %s <Kommandos zum senden...>\n"
"Beispiel: %s \"USER 1\" \"LOGOUT\"\n"
-#: src/invoice/main.vala:20
+#: invoice/main.vala:20
msgid "Possible values for <temporary>: temporary, final\n"
msgstr "Mögliche Werte für <temporary>: temporary, final\n"
-#: src/pdf-invoice/pdf-invoice.vala:471
+#: pdf-invoice/pdf-invoice.vala:471
msgid "Prices > 9999.99€ are not supported!"
msgstr "Preise > 9999,99€ werden nicht unterstützt!"
-#: src/database/database.vala:487
+#: database/database.vala:487
#, c-format
msgid "Remove purchase of %s"
msgstr "Einkaufsposten %s wurde entfernt"
-#: src/mail/mailer.vala:180
+#: mail/mailer.vala:180
#, c-format
msgid "Reply from SMTP-Server: %s"
msgstr "Antwort vom SMTP-Server: %s"
-#: src/cli/cli.vala:24
+#: cli/cli.vala:24
#, c-format
msgid "Sending: %s\n"
msgstr "Sende: %s\n"
-#: src/curses-ui/main.vala:72
+#: curses-ui/main.vala:72
msgid "Shop System has been started"
msgstr "Shop System wurde gestartet"
-#: src/curses-ui/main.vala:78
+#: curses-ui/main.vala:78
msgid "Stopping Shop System"
msgstr "Shop System wird gestoppt"
-#: src/web/main.vala:55
+#: web/main.vala:55
#, c-format
msgid "TLS certificate: %s\n"
msgstr "TLS Zertifikat: %s\n"
-#: src/web/main.vala:56
+#: web/main.vala:56
#, c-format
msgid "TLS private key: %s\n"
msgstr "TLS Privater Schlüssel: %s\n"
-#: src/invoice/invoice.vala:314
+#: invoice/invoice.vala:314
msgid "Unknown MessageType"
msgstr "Unbekannter Nachrichten Typ"
-#: src/invoice/main.vala:19
+#: invoice/main.vala:19
#, c-format
msgid "Usage: %s <temporary> [timestamp]\n"
msgstr "Benutzung: %s <temporary> [timestamp]\n"
-#: src/web/main.vala:54
+#: web/main.vala:54
#, c-format
msgid "Web Server Port: %u\n"
msgstr "Webserver Port: %u\n"
-#: src/pdf-invoice/pdf-invoice.vala:475
+#: pdf-invoice/pdf-invoice.vala:475
msgid "Years after 9999 are not supported!"
msgstr "Jahre nach 9999 werden nicht unterstützt!"
-#: src/scanner-session/scannersession.vala:240
+#: scanner-session/scannersession.vala:240
#, c-format
msgid "article added to shopping card: %s (%s €)"
msgstr "Artikel %s (%s €) wurde zum Warenkorb hinzugefügt"
-#: src/scanner-session/scannersession.vala:189
+#: scanner-session/scannersession.vala:189
#, c-format
msgid "article info: %s (Member: %s €, Guest: %s €"
msgstr "Artikelinfo: %s (Mitglied: %s €, Gast: %s €"
-#: src/input-device/input-device.vala:249
+#: input-device/input-device.vala:249
#, c-format
msgid "barcode: %s\n"
msgstr "Barcode: %s\n"
-#: src/mail/mailer.vala:107
+#: mail/mailer.vala:107
msgid "could not configure STARTTLS"
msgstr "Konnte STARTTLS nicht konfigurieren"
-#: src/web/template.vala:61 src/web/template.vala:84
+#: web/template.vala:61 web/template.vala:84
msgid "could not load templates!"
msgstr "Konnte Templates nicht laden!"
-#: src/curses-ui/main.vala:27 src/curses-ui/main.vala:29
+#: curses-ui/main.vala:27 curses-ui/main.vala:29
#, c-format
msgid "could not play audio: %s"
msgstr "Konnte Audio Datei nicht abspielen: %s"
-#: src/mail/mailer.vala:99
+#: mail/mailer.vala:99
msgid "could not setup server"
msgstr "Konnte Server nicht konfigurieren"
-#: src/mail/mailer.vala:176
+#: mail/mailer.vala:176
msgid "eSMTP: Start Session failed!"
msgstr "eSMTP: Session Start fehlgeschlagen!"
-#: src/database/database.vala:370 src/database/database.vala:387
-#: src/database/database.vala:403 src/database/database.vala:419
-#: src/database/database.vala:435 src/database/database.vala:448
-#: src/database/database.vala:470 src/database/database.vala:492
-#: src/database/database.vala:500 src/database/database.vala:527
-#: src/database/database.vala:541 src/database/database.vala:556
-#: src/database/database.vala:583 src/database/database.vala:591
-#: src/database/database.vala:601 src/database/database.vala:638
-#: src/database/database.vala:675 src/database/database.vala:689
-#: src/database/database.vala:700 src/database/database.vala:737
-#: src/database/database.vala:765 src/database/database.vala:884
-#: src/database/database.vala:892 src/database/database.vala:913
-#: src/database/database.vala:919 src/database/database.vala:927
-#: src/database/database.vala:1028 src/database/database.vala:1079
-#: src/database/database.vala:1129 src/database/database.vala:1212
+#: database/database.vala:370 database/database.vala:387
+#: database/database.vala:403 database/database.vala:419
+#: database/database.vala:435 database/database.vala:448
+#: database/database.vala:470 database/database.vala:492
+#: database/database.vala:500 database/database.vala:527
+#: database/database.vala:541 database/database.vala:556
+#: database/database.vala:583 database/database.vala:591
+#: database/database.vala:601 database/database.vala:638
+#: database/database.vala:675 database/database.vala:689
+#: database/database.vala:700 database/database.vala:737
+#: database/database.vala:765 database/database.vala:884
+#: database/database.vala:892 database/database.vala:913
+#: database/database.vala:919 database/database.vala:927
+#: database/database.vala:1028 database/database.vala:1079
+#: database/database.vala:1129 database/database.vala:1212
#, c-format
msgid "internal error: %d"
msgstr "Interner Fehler: %d"
-#: src/scanner-session/scannersession.vala:249
+#: scanner-session/scannersession.vala:249
#, c-format
msgid "removed last Item from Shopping Cart: %s"
msgstr "Letzter Posten wurde aus dem Warenkorb entfernt: %s"
-#: src/serial-device/serial-device.vala:43
+#: serial-device/serial-device.vala:43
msgid "serial device is locked!\n"
msgstr "Serielles Gerät ist blockiert!\n"
-#: src/mail/mailer.vala:79
+#: mail/mailer.vala:79
msgid "server or port configuration is missing"
msgstr "Server oder Port Konfiguration fehlt"
-#: src/input-device/input-device.vala:224
+#: input-device/input-device.vala:224
msgid "short read!\n"
msgstr "Unvollständige Daten aus Gerätedatei gelesen\n"
-#: src/database/database.vala:490
+#: database/database.vala:490
msgid "undo not possible without purchases"
msgstr "Rückgängig nicht möglich ohne Einkäufe"
-#: src/database/database.vala:385 src/database/database.vala:401
-#: src/database/database.vala:417 src/database/database.vala:433
-#: src/database/database.vala:468
+#: database/database.vala:385 database/database.vala:401
+#: database/database.vala:417 database/database.vala:433
+#: database/database.vala:468
#, c-format
msgid "unknown product: %llu"
msgstr "Unbekanntes Produkt: %llu"
-#: src/database/database.vala:1210
+#: database/database.vala:1210
#, c-format
msgid "unknown rfid: %s"
msgstr "Unbekannter RFID: %s"
-#: src/database/database.vala:636
+#: database/database.vala:636
msgid "user not found"
msgstr "User nicht gefunden"
diff --git a/data/po/meson.build b/data/po/meson.build
new file mode 100644
index 0000000..387ab1d
--- /dev/null
+++ b/data/po/meson.build
@@ -0,0 +1,2 @@
+i18n = import('i18n')
+i18n.gettext(meson.project_name(), args: ['--directory='+join_paths(meson.source_root(), 'src'), '--language=vala', '--from-code=utf-8', '--keyword=_', '--escape', '--sort-output'])
diff --git a/data/po/shopsystem.pot b/data/po/shopsystem.pot
new file mode 100644
index 0000000..abab319
--- /dev/null
+++ b/data/po/shopsystem.pot
@@ -0,0 +1,475 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the shopsystem package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: shopsystem\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-06-29 01:20+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: curses-ui/message_box.vala:52
+msgid ""
+"\n"
+"Date Changed: "
+msgstr ""
+
+#: scanner-session/scannersession.vala:289
+#, c-format
+msgid "%s bought %d items for %s \342\202\254"
+msgstr ""
+
+#: web/template.vala:53 web/template.vala:55 web/template.vala:57
+#: web/template.vala:59 web/template.vala:82
+#, c-format
+msgid "%s could not be loaded!"
+msgstr ""
+
+#: web/template.vala:40 web/template.vala:43 web/template.vala:46
+#: web/template.vala:49 web/template.vala:78
+#, c-format
+msgid "%s not found!"
+msgstr ""
+
+#: pdf-invoice/pdf-invoice.vala:591
+#, c-format
+msgid "Article name \"%s\" does not fit on a single page!"
+msgstr ""
+
+#: serial-device/serial-device.vala:39
+msgid "Can't read lock file!\n"
+msgstr ""
+
+#: audio/audio.vala:38
+msgid "Cannot find alsa GStreamer plugin"
+msgstr ""
+
+#: audio/audio.vala:42
+msgid "Cannot find playbin2 GStreamer plugin"
+msgstr ""
+
+#: audio/main.vala:39 database/main.vala:29 input-device/main.vala:31
+#: pdf-invoice/main.vala:30 pgp/main.vala:35 serial-device/main.vala:29
+#, c-format
+msgid "Config Error: %s\n"
+msgstr ""
+
+#: serial-device/serial-device.vala:211
+#, c-format
+msgid "Convert Error: %s"
+msgstr ""
+
+#: audio/main.vala:30 cli/main.vala:37 config/main.vala:32
+#: database/main.vala:40 input-device/main.vala:42 pdf-invoice/main.vala:39
+#: pdf-stock/main.vala:26 pgp/main.vala:44 scanner-session/main.vala:28
+#: serial-device/main.vala:40
+msgid "Could not acquire name\n"
+msgstr ""
+
+#: input-device/input-device.vala:40 serial-device/serial-device.vala:165
+msgid "Could not bind IOChannel"
+msgstr ""
+
+#: serial-device/serial-device.vala:59
+#, c-format
+msgid "Could not create lock file: %s!\n"
+msgstr ""
+
+#: pdf-invoice/pdf-invoice.vala:81
+#, c-format
+msgid "Could not load SVG: %s\n"
+msgstr ""
+
+#: config/config.vala:26
+#, c-format
+msgid "Could not load configuration file: %s"
+msgstr ""
+
+#: invoice/invoice.vala:338 pdf-invoice/pdf-invoice.vala:379
+#, c-format
+msgid "Could not open VAT template: %s"
+msgstr ""
+
+#: serial-device/serial-device.vala:55
+msgid "Could not open device!\n"
+msgstr ""
+
+#: invoice/invoice.vala:252 invoice/invoice.vala:319
+#, c-format
+msgid "Could not open invoice template: %s"
+msgstr ""
+
+#: audio/main.vala:53 cli/main.vala:68 config/main.vala:43
+#: database/main.vala:51 input-device/main.vala:53 input-device/main.vala:58
+#: pdf-stock/main.vala:37 pgp/main.vala:55 scanner-session/main.vala:41
+#: serial-device/main.vala:51
+msgid "Could not register service\n"
+msgstr ""
+
+#: pdf-invoice/main.vala:50
+#, c-format
+msgid "Could not register service: %s\n"
+msgstr ""
+
+#: web/web.vala:1482
+msgid "Could not setup webserver!"
+msgstr ""
+
+#: web/main.vala:64
+#, c-format
+msgid "Could not start Webserver: %s\n"
+msgstr ""
+
+#: pdf-stock/test.vala:26 scanner-session/scannersession.vala:300
+#, c-format
+msgid "DBus Error: %s"
+msgstr ""
+
+#: audio/main.vala:41 database/main.vala:31 input-device/main.vala:33
+#: pdf-invoice/main.vala:26 pgp/main.vala:31 serial-device/main.vala:31
+#: web/main.vala:51
+#, c-format
+msgid "DBus Error: %s\n"
+msgstr ""
+
+#: scanner-session/scannersession.vala:304
+#, c-format
+msgid "Database Error: %s"
+msgstr ""
+
+#: scanner-session/scannersession.vala:66
+#, c-format
+msgid "Error (user=%d): %s"
+msgstr ""
+
+#: cli/main.vala:51
+#, c-format
+msgid "Error sending command: %s"
+msgstr ""
+
+#: pgp/pgp.vala:123
+msgid "Error!\n"
+msgstr ""
+
+#: curses-ui/logo.vala:44 scanner-session/scannersession.vala:178
+#: scanner-session/scannersession.vala:225
+#, c-format
+msgid "Error: %s"
+msgstr ""
+
+#: backup/main.vala:41 invoice/main.vala:51 invoice/main.vala:58
+#: invoice/single.vala:51 invoice/single.vala:58 mail/main.vala:26
+#: web/web.vala:1143
+#, c-format
+msgid "Error: %s\n"
+msgstr ""
+
+#: mail/main.vala:35
+msgid "Error: Could not acquire name\n"
+msgstr ""
+
+#: mail/main.vala:47
+msgid "Error: Could not register service\n"
+msgstr ""
+
+#: database/database.vala:81
+msgid "Error: could not open database!"
+msgstr ""
+
+#: database/database.vala:28
+#, c-format
+msgid "Error: could not prepare statement: %s"
+msgstr ""
+
+#: scanner-session/scannersession.vala:174
+#: scanner-session/scannersession.vala:221
+#, c-format
+msgid "Error: unknown product: %llu"
+msgstr ""
+
+#: serial-device/serial-device.vala:163
+msgid "Failed to set encoding"
+msgstr ""
+
+#: curses-ui/logo.vala:31
+#, c-format
+msgid "File '%s' doesn't exist.\n"
+msgstr ""
+
+#: input-device/input-device.vala:43 pdf-stock/test.vala:24
+#, c-format
+msgid "File Error: %s"
+msgstr ""
+
+#: pdf-invoice/pdf-invoice.vala:387
+#, c-format
+msgid "File Error: %s\n"
+msgstr ""
+
+#: scanner-session/scannersession.vala:20
+msgid "Guest"
+msgstr ""
+
+#: pdf-stock/test.vala:22 scanner-session/scannersession.vala:302
+#, c-format
+msgid "IO Error: %s"
+msgstr ""
+
+#: audio/main.vala:37 curses-ui/main.vala:60 database/main.vala:27
+#: input-device/main.vala:29 pdf-invoice/main.vala:28 pgp/main.vala:33
+#: scanner-session/scannersession.vala:49 serial-device/main.vala:27
+#: web/main.vala:47
+#, c-format
+msgid "IO Error: %s\n"
+msgstr ""
+
+#: serial-device/serial-device.vala:207
+#, c-format
+msgid "IOChannel Error: %s"
+msgstr ""
+
+#: serial-device/serial-device.vala:168
+#, c-format
+msgid "IOChannel: %s"
+msgstr ""
+
+#: input-device/input-device.vala:27
+msgid "Ignoring InputDevice!\n"
+msgstr ""
+
+#: scanner-session/scannersession.vala:168
+#: scanner-session/scannersession.vala:215
+msgid "Internal Error!"
+msgstr ""
+
+#: web/main.vala:44 web/main.vala:49
+#, c-format
+msgid "KeyFile Error: %s\n"
+msgstr ""
+
+#: scanner-session/scannersession.vala:149
+msgid "Login as GUEST"
+msgstr ""
+
+#: scanner-session/scannersession.vala:141
+#, c-format
+msgid "Login failed (User ID = %d)"
+msgstr ""
+
+#: scanner-session/scannersession.vala:155
+msgid "Login failed as GUEST"
+msgstr ""
+
+#: web/websession.vala:165
+#, c-format
+msgid "Login for user id %d failed\n"
+msgstr ""
+
+#: scanner-session/scannersession.vala:135
+#, c-format
+msgid "Login: %s (%d)"
+msgstr ""
+
+#: input-device/input-device.vala:215 serial-device/serial-device.vala:189
+msgid "Lost device"
+msgstr ""
+
+#: pdf-invoice/pdf-invoice.vala:628
+msgid "No invoice ID given!"
+msgstr ""
+
+#: pdf-invoice/pdf-invoice.vala:631
+msgid "No invoice data given!"
+msgstr ""
+
+#: pdf-invoice/pdf-invoice.vala:634
+msgid "No invoice date given!"
+msgstr ""
+
+#: pdf-invoice/pdf-invoice.vala:637
+msgid "No invoice recipient given!"
+msgstr ""
+
+#: scanner-session/scannersession.vala:253
+msgid "No more Items on your Shopping Cart"
+msgstr ""
+
+#: mail/mailer.vala:141 mail/mailer.vala:149
+msgid "No such mail"
+msgstr ""
+
+#: database/database.vala:611
+msgid "No such session available in database!"
+msgstr ""
+
+#: database/database.vala:710 database/database.vala:722
+msgid "No such user available in database!"
+msgstr ""
+
+#: cli/main.vala:25
+#, c-format
+msgid ""
+"Nothing to send.\n"
+"Usage: %s <commands to send...>\n"
+"Example: %s \"USER 1\" \"LOGOUT\"\n"
+msgstr ""
+
+#: invoice/main.vala:20
+msgid "Possible values for <temporary>: temporary, final\n"
+msgstr ""
+
+#: pdf-invoice/pdf-invoice.vala:471
+msgid "Prices > 9999.99\342\202\254 are not supported!"
+msgstr ""
+
+#: database/database.vala:487
+#, c-format
+msgid "Remove purchase of %s"
+msgstr ""
+
+#: mail/mailer.vala:180
+#, c-format
+msgid "Reply from SMTP-Server: %s"
+msgstr ""
+
+#: cli/cli.vala:24
+#, c-format
+msgid "Sending: %s\n"
+msgstr ""
+
+#: curses-ui/main.vala:72
+msgid "Shop System has been started"
+msgstr ""
+
+#: curses-ui/main.vala:78
+msgid "Stopping Shop System"
+msgstr ""
+
+#: web/main.vala:55
+#, c-format
+msgid "TLS certificate: %s\n"
+msgstr ""
+
+#: web/main.vala:56
+#, c-format
+msgid "TLS private key: %s\n"
+msgstr ""
+
+#: invoice/invoice.vala:314
+msgid "Unknown MessageType"
+msgstr ""
+
+#: invoice/main.vala:19
+#, c-format
+msgid "Usage: %s <temporary> [timestamp]\n"
+msgstr ""
+
+#: web/main.vala:54
+#, c-format
+msgid "Web Server Port: %u\n"
+msgstr ""
+
+#: pdf-invoice/pdf-invoice.vala:475
+msgid "Years after 9999 are not supported!"
+msgstr ""
+
+#: scanner-session/scannersession.vala:240
+#, c-format
+msgid "article added to shopping card: %s (%s \342\202\254)"
+msgstr ""
+
+#: scanner-session/scannersession.vala:189
+#, c-format
+msgid "article info: %s (Member: %s \342\202\254, Guest: %s \342\202\254"
+msgstr ""
+
+#: input-device/input-device.vala:249
+#, c-format
+msgid "barcode: %s\n"
+msgstr ""
+
+#: mail/mailer.vala:107
+msgid "could not configure STARTTLS"
+msgstr ""
+
+#: web/template.vala:61 web/template.vala:84
+msgid "could not load templates!"
+msgstr ""
+
+#: curses-ui/main.vala:27 curses-ui/main.vala:29
+#, c-format
+msgid "could not play audio: %s"
+msgstr ""
+
+#: mail/mailer.vala:99
+msgid "could not setup server"
+msgstr ""
+
+#: mail/mailer.vala:176
+msgid "eSMTP: Start Session failed!"
+msgstr ""
+
+#: database/database.vala:370 database/database.vala:387
+#: database/database.vala:403 database/database.vala:419
+#: database/database.vala:435 database/database.vala:448
+#: database/database.vala:470 database/database.vala:492
+#: database/database.vala:500 database/database.vala:527
+#: database/database.vala:541 database/database.vala:556
+#: database/database.vala:583 database/database.vala:591
+#: database/database.vala:601 database/database.vala:638
+#: database/database.vala:675 database/database.vala:689
+#: database/database.vala:700 database/database.vala:737
+#: database/database.vala:765 database/database.vala:884
+#: database/database.vala:892 database/database.vala:913
+#: database/database.vala:919 database/database.vala:927
+#: database/database.vala:1028 database/database.vala:1079
+#: database/database.vala:1129 database/database.vala:1212
+#, c-format
+msgid "internal error: %d"
+msgstr ""
+
+#: scanner-session/scannersession.vala:249
+#, c-format
+msgid "removed last Item from Shopping Cart: %s"
+msgstr ""
+
+#: serial-device/serial-device.vala:43
+msgid "serial device is locked!\n"
+msgstr ""
+
+#: mail/mailer.vala:79
+msgid "server or port configuration is missing"
+msgstr ""
+
+#: input-device/input-device.vala:224
+msgid "short read!\n"
+msgstr ""
+
+#: database/database.vala:490
+msgid "undo not possible without purchases"
+msgstr ""
+
+#: database/database.vala:385 database/database.vala:401
+#: database/database.vala:417 database/database.vala:433
+#: database/database.vala:468
+#, c-format
+msgid "unknown product: %llu"
+msgstr ""
+
+#: database/database.vala:1210
+#, c-format
+msgid "unknown rfid: %s"
+msgstr ""
+
+#: database/database.vala:636
+msgid "user not found"
+msgstr ""
diff --git a/sounds/system/LICENSE b/data/sounds/system/LICENSE
index db764a9..db764a9 100644
--- a/sounds/system/LICENSE
+++ b/data/sounds/system/LICENSE
diff --git a/sounds/system/error.ogg b/data/sounds/system/error.ogg
index f34f375..f34f375 100644
--- a/sounds/system/error.ogg
+++ b/data/sounds/system/error.ogg
Binary files differ
diff --git a/sounds/system/shutdown.ogg b/data/sounds/system/shutdown.ogg
index 2560efd..2560efd 100644
--- a/sounds/system/shutdown.ogg
+++ b/data/sounds/system/shutdown.ogg
Binary files differ
diff --git a/sounds/system/startup.ogg b/data/sounds/system/startup.ogg
index 31649ff..31649ff 100644
--- a/sounds/system/startup.ogg
+++ b/data/sounds/system/startup.ogg
Binary files differ
diff --git a/sounds/user/beep/LICENSE b/data/sounds/user/beep/LICENSE
index a0acd3d..a0acd3d 100644
--- a/sounds/user/beep/LICENSE
+++ b/data/sounds/user/beep/LICENSE
diff --git a/sounds/user/beep/error/buzzer.ogg b/data/sounds/user/beep/error/buzzer.ogg
index eebd2fa..eebd2fa 100644
--- a/sounds/user/beep/error/buzzer.ogg
+++ b/data/sounds/user/beep/error/buzzer.ogg
Binary files differ
diff --git a/sounds/user/beep/login/toycaralarm.ogg b/data/sounds/user/beep/login/toycaralarm.ogg
index 817a4c9..817a4c9 100644
--- a/sounds/user/beep/login/toycaralarm.ogg
+++ b/data/sounds/user/beep/login/toycaralarm.ogg
Binary files differ
diff --git a/sounds/user/beep/logout/cha ching.ogg b/data/sounds/user/beep/logout/cha ching.ogg
index 4c6d88d..4c6d88d 100644
--- a/sounds/user/beep/logout/cha ching.ogg
+++ b/data/sounds/user/beep/logout/cha ching.ogg
Binary files differ
diff --git a/sounds/user/beep/purchase/beep.ogg b/data/sounds/user/beep/purchase/beep.ogg
index e3dbad4..e3dbad4 100644
--- a/sounds/user/beep/purchase/beep.ogg
+++ b/data/sounds/user/beep/purchase/beep.ogg
Binary files differ
diff --git a/sounds/user/beep/purchase/camera.ogg b/data/sounds/user/beep/purchase/camera.ogg
index 41373d4..41373d4 100644
--- a/sounds/user/beep/purchase/camera.ogg
+++ b/data/sounds/user/beep/purchase/camera.ogg
Binary files differ
diff --git a/sounds/user/dude/LICENSE b/data/sounds/user/dude/LICENSE
index 3b65ddd..3b65ddd 100644
--- a/sounds/user/dude/LICENSE
+++ b/data/sounds/user/dude/LICENSE
diff --git a/sounds/user/dude/error/I broke something.ogg b/data/sounds/user/dude/error/I broke something.ogg
index ae8c298..ae8c298 100644
--- a/sounds/user/dude/error/I broke something.ogg
+++ b/data/sounds/user/dude/error/I broke something.ogg
Binary files differ
diff --git a/sounds/user/dude/login/hey dude, whats up man.ogg b/data/sounds/user/dude/login/hey dude, whats up man.ogg
index 8b6d7b5..8b6d7b5 100644
--- a/sounds/user/dude/login/hey dude, whats up man.ogg
+++ b/data/sounds/user/dude/login/hey dude, whats up man.ogg
Binary files differ
diff --git a/sounds/user/dude/logout/bye.ogg b/data/sounds/user/dude/logout/bye.ogg
index de62d3b..de62d3b 100644
--- a/sounds/user/dude/logout/bye.ogg
+++ b/data/sounds/user/dude/logout/bye.ogg
Binary files differ
diff --git a/sounds/user/dude/purchase/yeah man.ogg b/data/sounds/user/dude/purchase/yeah man.ogg
index b3c2d09..b3c2d09 100644
--- a/sounds/user/dude/purchase/yeah man.ogg
+++ b/data/sounds/user/dude/purchase/yeah man.ogg
Binary files differ
diff --git a/sounds/user/girlfriend/LICENSE b/data/sounds/user/girlfriend/LICENSE
index 9153012..9153012 100644
--- a/sounds/user/girlfriend/LICENSE
+++ b/data/sounds/user/girlfriend/LICENSE
diff --git a/sounds/user/girlfriend/error/no, no, forget it.ogg b/data/sounds/user/girlfriend/error/no, no, forget it.ogg
index 825f24b..825f24b 100644
--- a/sounds/user/girlfriend/error/no, no, forget it.ogg
+++ b/data/sounds/user/girlfriend/error/no, no, forget it.ogg
Binary files differ
diff --git a/sounds/user/girlfriend/login/hello.ogg b/data/sounds/user/girlfriend/login/hello.ogg
index 7c76e4d..7c76e4d 100644
--- a/sounds/user/girlfriend/login/hello.ogg
+++ b/data/sounds/user/girlfriend/login/hello.ogg
Binary files differ
diff --git a/sounds/user/girlfriend/login/we need to talk about this.ogg b/data/sounds/user/girlfriend/login/we need to talk about this.ogg
index 2df048f..2df048f 100644
--- a/sounds/user/girlfriend/login/we need to talk about this.ogg
+++ b/data/sounds/user/girlfriend/login/we need to talk about this.ogg
Binary files differ
diff --git a/sounds/user/girlfriend/logout/get out, get outta here.ogg b/data/sounds/user/girlfriend/logout/get out, get outta here.ogg
index c305d26..c305d26 100644
--- a/sounds/user/girlfriend/logout/get out, get outta here.ogg
+++ b/data/sounds/user/girlfriend/logout/get out, get outta here.ogg
Binary files differ
diff --git a/sounds/user/girlfriend/logout/i dont have time for this.ogg b/data/sounds/user/girlfriend/logout/i dont have time for this.ogg
index 77b0fce..77b0fce 100644
--- a/sounds/user/girlfriend/logout/i dont have time for this.ogg
+++ b/data/sounds/user/girlfriend/logout/i dont have time for this.ogg
Binary files differ
diff --git a/sounds/user/girlfriend/logout/why dont you just leave then.ogg b/data/sounds/user/girlfriend/logout/why dont you just leave then.ogg
index eac83c8..eac83c8 100644
--- a/sounds/user/girlfriend/logout/why dont you just leave then.ogg
+++ b/data/sounds/user/girlfriend/logout/why dont you just leave then.ogg
Binary files differ
diff --git a/sounds/user/girlfriend/purchase/code accepted.ogg b/data/sounds/user/girlfriend/purchase/code accepted.ogg
index 34dc3d4..34dc3d4 100644
--- a/sounds/user/girlfriend/purchase/code accepted.ogg
+++ b/data/sounds/user/girlfriend/purchase/code accepted.ogg
Binary files differ
diff --git a/sounds/user/girlfriend/purchase/yeah so what.ogg b/data/sounds/user/girlfriend/purchase/yeah so what.ogg
index c488a26..c488a26 100644
--- a/sounds/user/girlfriend/purchase/yeah so what.ogg
+++ b/data/sounds/user/girlfriend/purchase/yeah so what.ogg
Binary files differ
diff --git a/sounds/user/japanese/LICENSE b/data/sounds/user/japanese/LICENSE
index d0a0fbe..d0a0fbe 100644
--- a/sounds/user/japanese/LICENSE
+++ b/data/sounds/user/japanese/LICENSE
diff --git a/sounds/user/japanese/error/no, iie.ogg b/data/sounds/user/japanese/error/no, iie.ogg
index 286d0fd..286d0fd 100644
--- a/sounds/user/japanese/error/no, iie.ogg
+++ b/data/sounds/user/japanese/error/no, iie.ogg
Binary files differ
diff --git a/sounds/user/japanese/error/sumimasen.ogg b/data/sounds/user/japanese/error/sumimasen.ogg
index 0ae16ee..0ae16ee 100644
--- a/sounds/user/japanese/error/sumimasen.ogg
+++ b/data/sounds/user/japanese/error/sumimasen.ogg
Binary files differ
diff --git a/sounds/user/japanese/login/hello.ogg b/data/sounds/user/japanese/login/hello.ogg
index 951eb5a..951eb5a 100644
--- a/sounds/user/japanese/login/hello.ogg
+++ b/data/sounds/user/japanese/login/hello.ogg
Binary files differ
diff --git a/sounds/user/japanese/logout/goodbye.ogg b/data/sounds/user/japanese/logout/goodbye.ogg
index 270d838..270d838 100644
--- a/sounds/user/japanese/logout/goodbye.ogg
+++ b/data/sounds/user/japanese/logout/goodbye.ogg
Binary files differ
diff --git a/sounds/user/japanese/purchase/domo-arigato.ogg b/data/sounds/user/japanese/purchase/domo-arigato.ogg
index bd74be5..bd74be5 100644
--- a/sounds/user/japanese/purchase/domo-arigato.ogg
+++ b/data/sounds/user/japanese/purchase/domo-arigato.ogg
Binary files differ
diff --git a/sounds/user/japanese/purchase/domo.ogg b/data/sounds/user/japanese/purchase/domo.ogg
index 24724c7..24724c7 100644
--- a/sounds/user/japanese/purchase/domo.ogg
+++ b/data/sounds/user/japanese/purchase/domo.ogg
Binary files differ
diff --git a/sounds/user/robot/LICENSE b/data/sounds/user/robot/LICENSE
index ac119af..ac119af 100644
--- a/sounds/user/robot/LICENSE
+++ b/data/sounds/user/robot/LICENSE
diff --git a/sounds/user/robot/error/critical error.ogg b/data/sounds/user/robot/error/critical error.ogg
index f3abfcd..f3abfcd 100644
--- a/sounds/user/robot/error/critical error.ogg
+++ b/data/sounds/user/robot/error/critical error.ogg
Binary files differ
diff --git a/sounds/user/robot/login/login accepted.ogg b/data/sounds/user/robot/login/login accepted.ogg
index 90e0e48..90e0e48 100644
--- a/sounds/user/robot/login/login accepted.ogg
+++ b/data/sounds/user/robot/login/login accepted.ogg
Binary files differ
diff --git a/sounds/user/robot/logout/terminating.ogg b/data/sounds/user/robot/logout/terminating.ogg
index dccb6d6..dccb6d6 100644
--- a/sounds/user/robot/logout/terminating.ogg
+++ b/data/sounds/user/robot/logout/terminating.ogg
Binary files differ
diff --git a/sounds/user/robot/purchase/accepted.ogg b/data/sounds/user/robot/purchase/accepted.ogg
index b980230..b980230 100644
--- a/sounds/user/robot/purchase/accepted.ogg
+++ b/data/sounds/user/robot/purchase/accepted.ogg
Binary files differ
diff --git a/sounds/user/sexy/LICENSE b/data/sounds/user/sexy/LICENSE
index 99238dc..99238dc 100644
--- a/sounds/user/sexy/LICENSE
+++ b/data/sounds/user/sexy/LICENSE
diff --git a/sounds/user/sexy/error/error.ogg b/data/sounds/user/sexy/error/error.ogg
index bd0f41d..bd0f41d 100644
--- a/sounds/user/sexy/error/error.ogg
+++ b/data/sounds/user/sexy/error/error.ogg
Binary files differ
diff --git a/sounds/user/sexy/login/welcome back sexy bitch.ogg b/data/sounds/user/sexy/login/welcome back sexy bitch.ogg
index 77fc7ac..77fc7ac 100644
--- a/sounds/user/sexy/login/welcome back sexy bitch.ogg
+++ b/data/sounds/user/sexy/login/welcome back sexy bitch.ogg
Binary files differ
diff --git a/sounds/user/sexy/logout/well if thats how you feel.ogg b/data/sounds/user/sexy/logout/well if thats how you feel.ogg
index 30fb42c..30fb42c 100644
--- a/sounds/user/sexy/logout/well if thats how you feel.ogg
+++ b/data/sounds/user/sexy/logout/well if thats how you feel.ogg
Binary files differ
diff --git a/sounds/user/sexy/logout/what about me.ogg b/data/sounds/user/sexy/logout/what about me.ogg
index 9ed10db..9ed10db 100644
--- a/sounds/user/sexy/logout/what about me.ogg
+++ b/data/sounds/user/sexy/logout/what about me.ogg
Binary files differ
diff --git a/sounds/user/sexy/purchase/do it again.ogg b/data/sounds/user/sexy/purchase/do it again.ogg
index 6465c60..6465c60 100644
--- a/sounds/user/sexy/purchase/do it again.ogg
+++ b/data/sounds/user/sexy/purchase/do it again.ogg
Binary files differ
diff --git a/sounds/user/sexy/purchase/what is next.ogg b/data/sounds/user/sexy/purchase/what is next.ogg
index e3d3927..e3d3927 100644
--- a/sounds/user/sexy/purchase/what is next.ogg
+++ b/data/sounds/user/sexy/purchase/what is next.ogg
Binary files differ
diff --git a/sounds/user/sexy/purchase/yes, master.ogg b/data/sounds/user/sexy/purchase/yes, master.ogg
index f0723a1..f0723a1 100644
--- a/sounds/user/sexy/purchase/yes, master.ogg
+++ b/data/sounds/user/sexy/purchase/yes, master.ogg
Binary files differ
diff --git a/sounds/user/sexy/purchase/your will is my command.ogg b/data/sounds/user/sexy/purchase/your will is my command.ogg
index 3f07616..3f07616 100644
--- a/sounds/user/sexy/purchase/your will is my command.ogg
+++ b/data/sounds/user/sexy/purchase/your will is my command.ogg
Binary files differ
diff --git a/data/systemd/meson.build b/data/systemd/meson.build
new file mode 100644
index 0000000..cd68b1b
--- /dev/null
+++ b/data/systemd/meson.build
@@ -0,0 +1,18 @@
+systemd = dependency('systemd')
+systemdsystemunitdir = systemd.get_pkgconfig_variable('systemdsystemunitdir')
+bindir = join_paths(get_option('prefix'), get_option('bindir'))
+
+cfg = configuration_data()
+cfg.set('PATH', bindir)
+
+install_data('shopsystem-mail-daily-invoice.timer', install_dir: systemdsystemunitdir)
+install_data('shopsystem-mail-monthly-invoice.timer', install_dir: systemdsystemunitdir)
+install_data('shopsystem-mail-backup.timer', install_dir: systemdsystemunitdir)
+
+configure_file(input: 'shopsystem-input-device.service.in', output: 'shopsystem-input-device.service', configuration: cfg, install_dir: systemdsystemunitdir)
+configure_file(input: 'shopsystem-mail-backup.service.in', output: 'shopsystem-mail-backup.service', configuration: cfg, install_dir: systemdsystemunitdir)
+configure_file(input: 'shopsystem-mail-daily-invoice.service.in', output: 'shopsystem-mail-daily-invoice.service', configuration: cfg, install_dir: systemdsystemunitdir)
+configure_file(input: 'shopsystem-mail-monthly-invoice.service.in', output: 'shopsystem-mail-monthly-invoice.service', configuration: cfg, install_dir: systemdsystemunitdir)
+configure_file(input: 'shopsystem-ui.service.in', output: 'shopsystem-ui.service', configuration: cfg, install_dir: systemdsystemunitdir)
+configure_file(input: 'shopsystem-web.service.in', output: 'shopsystem-web.service', configuration: cfg, install_dir: systemdsystemunitdir)
+configure_file(input: 'shopsystem-display-on-off.service.in', output: 'shopsystem-display-on-off.service', configuration: cfg, install_dir: systemdsystemunitdir)
diff --git a/systemd/shopsystem-display-on-off.service b/data/systemd/shopsystem-display-on-off.service.in
index dfa6f0c..05787a8 100644
--- a/systemd/shopsystem-display-on-off.service
+++ b/data/systemd/shopsystem-display-on-off.service.in
@@ -4,7 +4,7 @@ After=systemd-user-sessions.service
[Service]
Type=simple
-ExecStart=/home/shop/serial-barcode-scanner/src/display-on-off/display-on-off.sh
+ExecStart=@PATH@/display-on-off.sh
Restart=always
RestartSec=10
diff --git a/systemd/shopsystem-input-device.service b/data/systemd/shopsystem-input-device.service.in
index 3fec267..d343318 100644
--- a/systemd/shopsystem-input-device.service
+++ b/data/systemd/shopsystem-input-device.service.in
@@ -11,7 +11,7 @@ User=shop
Group=shop
Restart=always
RestartSec=10
-ExecStart=/home/shop/serial-barcode-scanner/src/input-device/input-device
+ExecStart=@PATH@/shop-input-device
StandardInput=tty
StandardOutput=tty
TTYPath=/dev/tty3
diff --git a/systemd/shopsystem-mail-backup.service b/data/systemd/shopsystem-mail-backup.service.in
index 9521242..1f55a17 100644
--- a/systemd/shopsystem-mail-backup.service
+++ b/data/systemd/shopsystem-mail-backup.service.in
@@ -8,5 +8,5 @@ Before=shutdown.target
Type=oneshot
User=shop
Group=shop
-ExecStart=/home/shop/serial-barcode-scanner/src/backup/backup
+ExecStart=@PATH@/shop-backup
IOSchedulingClass=idle
diff --git a/systemd/shopsystem-mail-backup.timer b/data/systemd/shopsystem-mail-backup.timer
index b0c18a2..b0c18a2 100644
--- a/systemd/shopsystem-mail-backup.timer
+++ b/data/systemd/shopsystem-mail-backup.timer
diff --git a/systemd/shopsystem-mail-daily-invoice.service b/data/systemd/shopsystem-mail-daily-invoice.service.in
index 3cce03e..a14918d 100644
--- a/systemd/shopsystem-mail-daily-invoice.service
+++ b/data/systemd/shopsystem-mail-daily-invoice.service.in
@@ -7,7 +7,7 @@ Conflicts=shutdown.target
Type=oneshot
User=shop
Group=shop
-ExecStart=/home/shop/serial-barcode-scanner/src/invoice/invoice temporary
+ExecStart=@PATH@/shop-invoice temporary
StandardOutput=journal
StandardError=journal
IOSchedulingClass=idle
diff --git a/systemd/shopsystem-mail-daily-invoice.timer b/data/systemd/shopsystem-mail-daily-invoice.timer
index 8688d03..8688d03 100644
--- a/systemd/shopsystem-mail-daily-invoice.timer
+++ b/data/systemd/shopsystem-mail-daily-invoice.timer
diff --git a/systemd/shopsystem-mail-monthly-invoice.service b/data/systemd/shopsystem-mail-monthly-invoice.service.in
index dd217b3..8e0321c 100644
--- a/systemd/shopsystem-mail-monthly-invoice.service
+++ b/data/systemd/shopsystem-mail-monthly-invoice.service.in
@@ -7,7 +7,7 @@ Conflicts=shutdown.target
Type=oneshot
User=shop
Group=shop
-ExecStart=/home/shop/serial-barcode-scanner/src/invoice/invoice final
+ExecStart=@PATH@/shop-invoice final
StandardOutput=journal
StandardError=journal
IOSchedulingClass=idle
diff --git a/systemd/shopsystem-mail-monthly-invoice.timer b/data/systemd/shopsystem-mail-monthly-invoice.timer
index a29d964..a29d964 100644
--- a/systemd/shopsystem-mail-monthly-invoice.timer
+++ b/data/systemd/shopsystem-mail-monthly-invoice.timer
diff --git a/systemd/shopsystem-ui.service b/data/systemd/shopsystem-ui.service.in
index 9641d16..c4bd3a7 100644
--- a/systemd/shopsystem-ui.service
+++ b/data/systemd/shopsystem-ui.service.in
@@ -5,7 +5,7 @@ Description=Shop System UI
User=shop
Group=shop
Type=simple
-ExecStart=/home/shop/serial-barcode-scanner/src/curses-ui/curses-ui
+ExecStart=@PATH@/shop-curses-ui
StandardInput=tty
StandardOutput=tty
TTYPath=/dev/tty3
diff --git a/systemd/shopsystem-web.service b/data/systemd/shopsystem-web.service.in
index 8393863..5707a02 100644
--- a/systemd/shopsystem-web.service
+++ b/data/systemd/shopsystem-web.service.in
@@ -5,7 +5,7 @@ Description=Shop System Web Interface
User=shop
Group=shop
Type=simple
-ExecStart=/home/shop/serial-barcode-scanner/src/web/web
+ExecStart=@PATH@/shop-web
StandardInput=null
StandardOutput=journal
diff --git a/templates/aliases/index.html b/data/templates/aliases/index.html
index c914968..c914968 100644
--- a/templates/aliases/index.html
+++ b/data/templates/aliases/index.html
diff --git a/templates/aliases/new.html b/data/templates/aliases/new.html
index 34b610e..34b610e 100644
--- a/templates/aliases/new.html
+++ b/data/templates/aliases/new.html
diff --git a/templates/base.html b/data/templates/base.html
index 1870d0f..1870d0f 100644
--- a/templates/base.html
+++ b/data/templates/base.html
diff --git a/templates/cashbox/add.html b/data/templates/cashbox/add.html
index 6e26f00..6e26f00 100644
--- a/templates/cashbox/add.html
+++ b/data/templates/cashbox/add.html
diff --git a/templates/cashbox/detail.html b/data/templates/cashbox/detail.html
index 41d057a..41d057a 100644
--- a/templates/cashbox/detail.html
+++ b/data/templates/cashbox/detail.html
diff --git a/templates/cashbox/index.html b/data/templates/cashbox/index.html
index d5a03a0..d5a03a0 100644
--- a/templates/cashbox/index.html
+++ b/data/templates/cashbox/index.html
diff --git a/templates/cashbox/selection.html b/data/templates/cashbox/selection.html
index e15ee75..e15ee75 100644
--- a/templates/cashbox/selection.html
+++ b/data/templates/cashbox/selection.html
diff --git a/templates/css/base.css b/data/templates/css/base.css
index e273808..e273808 100644
--- a/templates/css/base.css
+++ b/data/templates/css/base.css
diff --git a/templates/css/bootstrap.css b/data/templates/css/bootstrap.css
index 5b7fe7e..5b7fe7e 100644
--- a/templates/css/bootstrap.css
+++ b/data/templates/css/bootstrap.css
diff --git a/templates/errors/400.html b/data/templates/errors/400.html
index 5a8ec3b..5a8ec3b 100644
--- a/templates/errors/400.html
+++ b/data/templates/errors/400.html
diff --git a/templates/errors/403.html b/data/templates/errors/403.html
index 94763d7..94763d7 100644
--- a/templates/errors/403.html
+++ b/data/templates/errors/403.html
diff --git a/templates/errors/todo.html b/data/templates/errors/todo.html
index a494f55..a494f55 100644
--- a/templates/errors/todo.html
+++ b/data/templates/errors/todo.html
diff --git a/templates/img/glyphicons-halflings-white.png b/data/templates/img/glyphicons-halflings-white.png
index 3bf6484..3bf6484 100644
--- a/templates/img/glyphicons-halflings-white.png
+++ b/data/templates/img/glyphicons-halflings-white.png
Binary files differ
diff --git a/templates/img/glyphicons-halflings.png b/data/templates/img/glyphicons-halflings.png
index a996999..a996999 100644
--- a/templates/img/glyphicons-halflings.png
+++ b/data/templates/img/glyphicons-halflings.png
Binary files differ
diff --git a/templates/index.html b/data/templates/index.html
index bee2d95..bee2d95 100644
--- a/templates/index.html
+++ b/data/templates/index.html
diff --git a/templates/js/bootstrap.js b/data/templates/js/bootstrap.js
index 44109f6..44109f6 100644
--- a/templates/js/bootstrap.js
+++ b/data/templates/js/bootstrap.js
diff --git a/templates/js/code39.js b/data/templates/js/code39.js
index 6028854..6028854 100644
--- a/templates/js/code39.js
+++ b/data/templates/js/code39.js
diff --git a/templates/js/jquery.flot.js b/data/templates/js/jquery.flot.js
index aabc544..aabc544 100644
--- a/templates/js/jquery.flot.js
+++ b/data/templates/js/jquery.flot.js
diff --git a/templates/js/jquery.flot.navigate.js b/data/templates/js/jquery.flot.navigate.js
index 34d799d..34d799d 100644
--- a/templates/js/jquery.flot.navigate.js
+++ b/data/templates/js/jquery.flot.navigate.js
diff --git a/templates/js/jquery.flot.pie.js b/data/templates/js/jquery.flot.pie.js
index b46c03c..b46c03c 100644
--- a/templates/js/jquery.flot.pie.js
+++ b/data/templates/js/jquery.flot.pie.js
diff --git a/templates/js/jquery.flot.selection.js b/data/templates/js/jquery.flot.selection.js
index 7f7b326..7f7b326 100644
--- a/templates/js/jquery.flot.selection.js
+++ b/data/templates/js/jquery.flot.selection.js
diff --git a/templates/js/jquery.js b/data/templates/js/jquery.js
index 1c3aa82..1c3aa82 100644
--- a/templates/js/jquery.js
+++ b/data/templates/js/jquery.js
diff --git a/templates/js/jquery.mousewheel.js b/data/templates/js/jquery.mousewheel.js
index 38b6095..38b6095 100644
--- a/templates/js/jquery.mousewheel.js
+++ b/data/templates/js/jquery.mousewheel.js
diff --git a/templates/js/sorttable.js b/data/templates/js/sorttable.js
index 2b8e422..2b8e422 100644
--- a/templates/js/sorttable.js
+++ b/data/templates/js/sorttable.js
diff --git a/templates/logout.html b/data/templates/logout.html
index 4f6856a..4f6856a 100644
--- a/templates/logout.html
+++ b/data/templates/logout.html
diff --git a/templates/menu.html b/data/templates/menu.html
index 01b61df..01b61df 100644
--- a/templates/menu.html
+++ b/data/templates/menu.html
diff --git a/templates/menu_login.html b/data/templates/menu_login.html
index 3a1f34f..3a1f34f 100644
--- a/templates/menu_login.html
+++ b/data/templates/menu_login.html
diff --git a/templates/menu_logout.html b/data/templates/menu_logout.html
index e93d470..e93d470 100644
--- a/templates/menu_logout.html
+++ b/data/templates/menu_logout.html
diff --git a/templates/products/bestbefore.html b/data/templates/products/bestbefore.html
index dbc7f47..dbc7f47 100644
--- a/templates/products/bestbefore.html
+++ b/data/templates/products/bestbefore.html
diff --git a/templates/products/entry.html b/data/templates/products/entry.html
index 05c1dce..05c1dce 100644
--- a/templates/products/entry.html
+++ b/data/templates/products/entry.html
diff --git a/templates/products/index.html b/data/templates/products/index.html
index d80adbd..d80adbd 100644
--- a/templates/products/index.html
+++ b/data/templates/products/index.html
diff --git a/templates/products/new.html b/data/templates/products/new.html
index e38bd7b..e38bd7b 100644
--- a/templates/products/new.html
+++ b/data/templates/products/new.html
diff --git a/templates/products/newprice.html b/data/templates/products/newprice.html
index c46d439..c46d439 100644
--- a/templates/products/newprice.html
+++ b/data/templates/products/newprice.html
diff --git a/templates/products/restock.html b/data/templates/products/restock.html
index 70926c5..70926c5 100644
--- a/templates/products/restock.html
+++ b/data/templates/products/restock.html
diff --git a/templates/stats/index.html b/data/templates/stats/index.html
index 987c90f..987c90f 100644
--- a/templates/stats/index.html
+++ b/data/templates/stats/index.html
diff --git a/templates/stats/profit_per_day.html b/data/templates/stats/profit_per_day.html
index 5af05dc..5af05dc 100644
--- a/templates/stats/profit_per_day.html
+++ b/data/templates/stats/profit_per_day.html
diff --git a/templates/stats/profit_per_product.html b/data/templates/stats/profit_per_product.html
index 7d8b50f..7d8b50f 100644
--- a/templates/stats/profit_per_product.html
+++ b/data/templates/stats/profit_per_product.html
diff --git a/templates/stats/profit_per_weekday.html b/data/templates/stats/profit_per_weekday.html
index d9f3e43..d9f3e43 100644
--- a/templates/stats/profit_per_weekday.html
+++ b/data/templates/stats/profit_per_weekday.html
diff --git a/templates/stats/stock.html b/data/templates/stats/stock.html
index 710bf60..710bf60 100644
--- a/templates/stats/stock.html
+++ b/data/templates/stats/stock.html
diff --git a/templates/users/entry.html b/data/templates/users/entry.html
index b1477c7..b1477c7 100644
--- a/templates/users/entry.html
+++ b/data/templates/users/entry.html
diff --git a/templates/users/import-pgp.html b/data/templates/users/import-pgp.html
index 57a5d64..57a5d64 100644
--- a/templates/users/import-pgp.html
+++ b/data/templates/users/import-pgp.html
diff --git a/templates/users/import.html b/data/templates/users/import.html
index 1a0e6ef..1a0e6ef 100644
--- a/templates/users/import.html
+++ b/data/templates/users/import.html
diff --git a/templates/users/index.html b/data/templates/users/index.html
index 246e523..246e523 100644
--- a/templates/users/index.html
+++ b/data/templates/users/index.html
diff --git a/templates/users/invoice.html b/data/templates/users/invoice.html
index 9a3c1a3..9a3c1a3 100644
--- a/templates/users/invoice.html
+++ b/data/templates/users/invoice.html
diff --git a/data/udev/meson.build b/data/udev/meson.build
new file mode 100644
index 0000000..4cda433
--- /dev/null
+++ b/data/udev/meson.build
@@ -0,0 +1,6 @@
+udev = dependency('udev')
+udevdir = udev.get_pkgconfig_variable('udevdir')
+rulesdir = join_paths(udevdir, 'rules.d')
+
+install_data('shopsystem-input-device-rfid.rules', install_dir: rulesdir)
+install_data('shopsystem-input-device.rules', install_dir: rulesdir)
diff --git a/systemd/shopsystem-input-device-rfid.rules b/data/udev/shopsystem-input-device-rfid.rules
index aebfbea..aebfbea 100644
--- a/systemd/shopsystem-input-device-rfid.rules
+++ b/data/udev/shopsystem-input-device-rfid.rules
diff --git a/systemd/shopsystem-input-device.rules b/data/udev/shopsystem-input-device.rules
index 7e6bfa2..7e6bfa2 100644
--- a/systemd/shopsystem-input-device.rules
+++ b/data/udev/shopsystem-input-device.rules
diff --git a/dbus/Makefile b/dbus/Makefile
deleted file mode 100644
index 31d22b3..0000000
--- a/dbus/Makefile
+++ /dev/null
@@ -1,27 +0,0 @@
-SERVICEFILESIN=$(wildcard *.service.in)
-SERVICEFILES=$(basename ${SERVICEFILESIN})
-INSTALLPATH=/usr/share/dbus-1/system-services/
-BINARYPATH=$(realpath $(dir $(lastword $(MAKEFILE_LIST)))/../src)
-ESCAPEDBINARYPATH=
-
-%.service: %.service.in
- @echo [GEN] $@
- @sed "s~\$${PATH}~${BINARYPATH}~g" $< > $@
-
-all: ${SERVICEFILES}
-
-install: ${SERVICEFILES}
- @echo Installing DBus service files into ${INSTALLPATH}...
- @mkdir -p ${INSTALLPATH}
- @$(foreach file,${SERVICEFILES},install -m644 ${file} ${INSTALLPATH}/${file};)
- @cd config && make install
-
-uninstall:
- @echo Remove DBus service files from ${INSTALLPATH}...
- @$(foreach file,${SERVICEFILES},rm -f ${INSTALLPATH}/${file};)
- @cd config && make uninstall
-
-clean:
- @rm -f ${SERVICEFILES}
-
-.PHONY: all clean install uninstall
diff --git a/dbus/config/Makefile b/dbus/config/Makefile
deleted file mode 100644
index 99083ab..0000000
--- a/dbus/config/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-CONFIGFILES=$(wildcard *.conf)
-INSTALLPATH=/etc/dbus-1/system.d
-
-all:
-
-install: ${CONFIGFILES}
- @echo Installing DBus config files into ${INSTALLPATH}...
- @mkdir -p ${INSTALLPATH}
- @$(foreach file,${CONFIGFILES},install -m644 ${file} ${INSTALLPATH}/${file};)
-
-uninstall:
- @echo Remove DBus config files from ${INSTALLPATH}...
- @$(foreach file,${CONFIGFILES},rm -f ${INSTALLPATH}/${file};)
-
-.PHONY: all install uninstall
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..65f2a90
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,3 @@
+project('shopsystem', 'c', 'vala', version: '0.1', license: 'ISC')
+subdir('src')
+subdir('data')
diff --git a/src/Makefile b/src/Makefile
deleted file mode 100644
index d5bb40f..0000000
--- a/src/Makefile
+++ /dev/null
@@ -1,9 +0,0 @@
-DAEMONS=audio backup cli config curses-ui database input-device invoice mail pdf-invoice pdf-stock pgp scanner-session serial-device input-device web
-
-all:
- @$(foreach dir,$(DAEMONS),cd $(dir) && echo "Building $(dir)..." && make --no-print-directory all ; cd ..;)
-
-clean:
- @$(foreach dir,$(DAEMONS),cd $(dir) && make --no-print-directory clean ; cd ..;)
-
-.PHONY: all clean
diff --git a/src/audio/Makefile b/src/audio/Makefile
deleted file mode 100644
index 31d373d..0000000
--- a/src/audio/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-all: audio
- @echo > /dev/null
-
-audio: main.vala audio.vala audio-interface.vala ../config/config-interface.vala
- valac -X -D'GETTEXT_PACKAGE="shopsystem"' -X -w -o $@ --pkg gstreamer-1.0 --pkg gio-2.0 $^
-
-clean:
- rm -rf audio
-
-.PHONY: all clean
diff --git a/src/backup/Makefile b/src/backup/Makefile
deleted file mode 100644
index f2594c2..0000000
--- a/src/backup/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-all: backup
- @echo > /dev/null
-
-backup: main.vala ../mail/mailer-interface.vala ../config/config-interface.vala
- valac -X -D'GETTEXT_PACKAGE="shopsystem"' -X -w -o $@ --pkg gio-2.0 $^
-
-clean:
- rm -f backup
-
-.PHONY: all clean
diff --git a/src/cli/Makefile b/src/cli/Makefile
deleted file mode 100644
index a66ce8f..0000000
--- a/src/cli/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-all: cli
- @echo > /dev/null
-
-cli: main.vala cli.vala cli-interface.vala ../config/config-interface.vala
- valac -X -D'GETTEXT_PACKAGE="shopsystem"' -X -w -o $@ --pkg linux --pkg posix --pkg gio-2.0 $^
-
-clean:
- rm -rf cli
-
-.PHONY: all clean
diff --git a/src/config/Makefile b/src/config/Makefile
deleted file mode 100644
index bda0cbb..0000000
--- a/src/config/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-all: config
- @echo > /dev/null
-
-config: main.vala config.vala config-interface.vala
- valac -X -D'GETTEXT_PACKAGE="shopsystem"' -X -w -o $@ --pkg gio-2.0 $^
-
-clean:
- rm -rf config
-
-.PHONY: all clean
diff --git a/src/curses-ui/Makefile b/src/curses-ui/Makefile
deleted file mode 100644
index 2fa44b3..0000000
--- a/src/curses-ui/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-all: curses-ui
- @echo > /dev/null
-
-curses-ui: *.vala ../audio/audio-interface.vala ../scanner-session/scannersession-interface.vala ../config/config-interface.vala
- valac -X -D'GETTEXT_PACKAGE="shopsystem"' -X -w -o $@ --pkg curses -X -lncursesw --pkg posix --pkg gio-2.0 $^
-
-clean:
- rm -rf curses-ui
-
-.PHONY: all clean
diff --git a/src/database/Makefile b/src/database/Makefile
deleted file mode 100644
index 9e2956e..0000000
--- a/src/database/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-all: database
- @echo > /dev/null
-
-database: main.vala database.vala db-interface.vala ../config/config-interface.vala ../price.vapi
- valac -X -D'GETTEXT_PACKAGE="shopsystem"' -X -w -o $@ --pkg sqlite3 --pkg gee-0.8 --pkg gio-2.0 $^
-
-clean:
- rm -rf database
-
-.PHONY: all clean
diff --git a/src/input-device/Makefile b/src/input-device/Makefile
deleted file mode 100644
index 5e501df..0000000
--- a/src/input-device/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-all: input-device
- @echo > /dev/null
-
-input-device: main.vala input-device.vala input-device-interface.vala ../config/config-interface.vala
- valac -X -D'GETTEXT_PACKAGE="shopsystem"' -X -w -o $@ --pkg linux --pkg posix --pkg gio-2.0 $^
-
-clean:
- rm -rf input-device
-
-.PHONY: all clean
diff --git a/src/invoice/Makefile b/src/invoice/Makefile
deleted file mode 100644
index d8d72c0..0000000
--- a/src/invoice/Makefile
+++ /dev/null
@@ -1,13 +0,0 @@
-all: invoice single-invoice
- @echo > /dev/null
-
-invoice: main.vala invoice.vala ../mail/mailer-interface.vala ../pdf-invoice/pdf-invoice-interface.vala ../database/db-interface.vala ../config/config-interface.vala ../price.vapi
- valac -X -D'GETTEXT_PACKAGE="shopsystem"' -X -w -o $@ --pkg gio-2.0 $^
-
-single-invoice: single.vala invoice.vala ../mail/mailer-interface.vala ../pdf-invoice/pdf-invoice-interface.vala ../database/db-interface.vala ../config/config-interface.vala ../price.vapi
- valac -X -D'GETTEXT_PACKAGE="shopsystem"' -X -w -o $@ --pkg gio-2.0 $^
-
-clean:
- rm -f invoice single-invoice
-
-.PHONY: all clean
diff --git a/src/libcairobarcode/Makefile b/src/libcairobarcode/Makefile
deleted file mode 100644
index b51cf30..0000000
--- a/src/libcairobarcode/Makefile
+++ /dev/null
@@ -1,11 +0,0 @@
-include ../config.mk
-
-all: libcairobarcode.so
-
-libcairobarcode.so: ean.vala code39.vala error.vala
- ${VALAC} -o $@ -H libcairobarcode.h --library libcairobarcode -X -fPIC -X -shared --pkg cairo $^
-
-clean:
- rm -f libcairobarcode.h libcairobarcode.so libcairobarcode.vapi
-
-.PHONY: all clean
diff --git a/src/mail/Makefile b/src/mail/Makefile
deleted file mode 100644
index 70e9b5a..0000000
--- a/src/mail/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-all: mailer
- @echo > /dev/null
-
-mailer: main.vala mailer.vala mail.vala mailer-interface.vala ../config/config-interface.vala
- valac -X -D'GETTEXT_PACKAGE="shopsystem"' -X -w -o $@ --vapidir=../../vapi --pkg posix --pkg libesmtp --pkg gio-2.0 --pkg gmime-3.0 -X -D_GNU_SOURCE -X -lesmtp -X -lssl -X -lcrypto -X -ldl -X -pthread $^
-
-clean:
- rm -f mailer
-
-.PHONY: all clean
diff --git a/src/meson.build b/src/meson.build
new file mode 100644
index 0000000..e65d3a3
--- /dev/null
+++ b/src/meson.build
@@ -0,0 +1,52 @@
+add_project_arguments(['--vapidir', join_paths(meson.current_source_dir(), '..', 'vapi')], language: 'vala')
+add_project_arguments('-DGETTEXT_PACKAGE="shopsystem"', language:'c')
+
+glib_dep = dependency('glib-2.0')
+gobject_dep = dependency('gobject-2.0')
+gio_dep = dependency('gio-2.0')
+gstreamer_dep = dependency('gstreamer-1.0')
+gee_dep = dependency('gee-0.8')
+sqlite_dep = dependency('sqlite3')
+gmime_dep = dependency('gmime-3.0')
+rsvg_dep = dependency('librsvg-2.0')
+pangocairo_dep = dependency('pangocairo')
+cairo_dep = dependency('cairo')
+archive_dep = dependency('libarchive')
+soup_dep = dependency('libsoup-2.4')
+
+gpgme_lib = meson.get_compiler('c').find_library('gpgme')
+gpgme_vapi = meson.get_compiler('vala').find_library('gpgme', dirs: join_paths(meson.current_source_dir(), '..', 'vapi'))
+gpgerror_vapi = meson.get_compiler('vala').find_library('gpg-error', dirs: join_paths(meson.current_source_dir(), '..', 'vapi'))
+gpgme_dep = declare_dependency(dependencies: [gpgme_lib, gpgme_vapi, gpgerror_vapi])
+
+esmtp_lib = meson.get_compiler('c').find_library('libesmtp')
+esmtp_vapi = meson.get_compiler('vala').find_library('libesmtp')
+esmtp_dep = declare_dependency(dependencies: [esmtp_lib, esmtp_vapi])
+
+curses_lib = meson.get_compiler('c').find_library('ncursesw')
+curses_vapi = meson.get_compiler('vala').find_library('curses')
+curses_dep = declare_dependency(dependencies: [curses_lib, curses_vapi])
+
+gdk_dep = meson.get_compiler('vala').find_library('gdk-2.0') # gdk is only needed for librsvg vapi, not really used, so we only check for the vapi file
+posix_dep = meson.get_compiler('vala').find_library('posix')
+linux_dep = meson.get_compiler('vala').find_library('linux')
+
+libcairobarcode = library('libcairobarcode', ['libcairobarcode/ean.vala', 'libcairobarcode/code39.vala', 'libcairobarcode/error.vala'], dependencies: [gio_dep, cairo_dep], install: true, install_dir: [true, true, true])
+executable('shop-audio', ['audio/main.vala', 'audio/audio.vala', 'audio/audio-interface.vala', 'config/config-interface.vala'], dependencies :[gio_dep, gstreamer_dep], install: true)
+executable('shop-backup', ['backup/main.vala', 'mail/mailer-interface.vala', 'config/config-interface.vala'], dependencies: [gio_dep], install: true)
+executable('shop-cli', ['cli/main.vala', 'cli/cli.vala', 'cli/cli-interface.vala', 'config/config-interface.vala'], dependencies: [gio_dep], install: true)
+executable('shop-config', ['config/main.vala', 'config/config.vala', 'config/config-interface.vala'], dependencies: [gio_dep], install: true)
+executable('shop-curses-ui', ['curses-ui/clock.vala', 'curses-ui/curses-ui.vala', 'curses-ui/dialog.vala', 'curses-ui/logo.vala', 'curses-ui/main.vala', 'curses-ui/message_box.vala', 'curses-ui/message_box_overlay.vala', 'curses-ui/numbers.vala', 'curses-ui/status.vala', 'audio/audio-interface.vala', 'scanner-session/scannersession-interface.vala', 'config/config-interface.vala'], dependencies: [gio_dep, posix_dep, curses_dep], install: true)
+executable('shop-database', ['database/main.vala', 'database/database.vala', 'database/db-interface.vala', 'config/config-interface.vala', 'price.vapi'], dependencies: [gio_dep, gee_dep, sqlite_dep], install: true)
+executable('shop-input-device', ['input-device/main.vala', 'input-device/input-device.vala', 'input-device/input-device-interface.vala', 'config/config-interface.vala'], dependencies: [gio_dep, linux_dep], install: true)
+executable('shop-invoice', ['invoice/main.vala', 'invoice/invoice.vala', 'mail/mailer-interface.vala', 'pdf-invoice/pdf-invoice-interface.vala', 'database/db-interface.vala', 'config/config-interface.vala', 'price.vapi'], dependencies: [gio_dep], install: true)
+executable('shop-single-invoice', ['invoice/single.vala', 'invoice/invoice.vala', 'mail/mailer-interface.vala', 'pdf-invoice/pdf-invoice-interface.vala', 'database/db-interface.vala', 'config/config-interface.vala', 'price.vapi'], dependencies: [gio_dep], install: true)
+executable('shop-mailer', ['mail/main.vala', 'mail/mailer.vala', 'mail/mail.vala', 'mail/mailer-interface.vala', 'config/config-interface.vala'], dependencies: [gio_dep, posix_dep, esmtp_dep, gmime_dep], install: true)
+executable('shop-pdf-invoice', ['pdf-invoice/main.vala', 'pdf-invoice/pdf-invoice.vala', 'pdf-invoice/pdf-invoice-interface.vala', 'config/config-interface.vala', 'database/db-interface.vala', 'price.vapi'], dependencies: [gio_dep, pangocairo_dep, rsvg_dep, gdk_dep, posix_dep], install: true)
+executable('shop-test-pdf-invoice', ['pdf-invoice/test.vala', 'pdf-invoice/pdf-invoice-interface.vala', 'database/db-interface.vala', 'price.vapi'], dependencies: [gio_dep, pangocairo_dep, rsvg_dep, gdk_dep, posix_dep], install: true)
+executable('shop-pdf-stock', ['pdf-stock/main.vala', 'pdf-stock/pdf-stock.vala', 'database/db-interface.vala', 'price.vapi'], dependencies: [gio_dep, pangocairo_dep, cairo_dep, posix_dep], link_with: libcairobarcode, install: true)
+executable('shop-test-pdf-stock', ['pdf-stock/test.vala', 'pdf-stock/pdf-stock-interface.vala'], dependencies: [gio_dep], install: true)
+executable('shop-pgp', ['pgp/main.vala', 'pgp/pgp.vala', 'pgp/pgp-interface.vala', 'config/config-interface.vala'], dependencies: [gio_dep, gpgme_dep, archive_dep], c_args: ['-D_FILE_OFFSET_BITS=64'], install: true)
+executable('shop-scanner-session', ['scanner-session/main.vala', 'scanner-session/scannersession.vala', 'scanner-session/scannersession-interface.vala', 'database/db-interface.vala', 'input-device/input-device-interface.vala', 'cli/cli-interface.vala', 'audio/audio-interface.vala', 'price.vapi'], dependencies: [gio_dep], install: true)
+executable('shop-serial-device', ['serial-device/main.vala', 'serial-device/serial-device.vala', 'config/config-interface.vala'], dependencies: [gio_dep, linux_dep], install: true)
+executable('shop-web', ['web/main.vala', 'web/web.vala', 'web/websession.vala', 'web/csv.vala', 'web/template.vala', 'database/db-interface.vala', 'pgp/pgp-interface.vala', 'price.vapi', 'config/config-interface.vala', 'audio/audio-interface.vala'], dependencies: [gio_dep, gee_dep, soup_dep, posix_dep], install: true)
diff --git a/src/pdf-invoice/Makefile b/src/pdf-invoice/Makefile
deleted file mode 100644
index 91b8522..0000000
--- a/src/pdf-invoice/Makefile
+++ /dev/null
@@ -1,13 +0,0 @@
-all: pdf-invoice
- @echo > /dev/null
-
-pdf-invoice: main.vala pdf-invoice.vala pdf-invoice-interface.vala ../config/config-interface.vala ../database/db-interface.vala ../price.vapi
- valac -X -D'GETTEXT_PACKAGE="shopsystem"' -X -w -g -o $@ --pkg pangocairo --pkg librsvg-2.0 --pkg posix --pkg gdk-2.0 --pkg gio-2.0 $^
-
-test: pdf-invoice-interface.vala ../database/db-interface.vala test.vala ../price.vapi
- valac -X -D'GETTEXT_PACKAGE="shopsystem"' -X -w -o $@ --pkg gio-2.0 $^
-
-clean:
- rm -rf pdf-invoice test
-
-.PHONY: all clean
diff --git a/src/pdf-stock/Makefile b/src/pdf-stock/Makefile
deleted file mode 100644
index 4e8f472..0000000
--- a/src/pdf-stock/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-include ../../config.mk
-
-LIBCAIROBARCODE=-X -I../libcairobarcode -X -L../libcairobarcode -X -lcairobarcode
-
-all: pdf-stock
- @echo > /dev/null
-
-pdf-stock: main.vala pdf-stock.vala ../database/db-interface.vala ../price.vapi ../libcairobarcode/libcairobarcode.vapi
- ${VALAC} -X -D'GETTEXT_PACKAGE="shopsystem"' -X -w ${LIBCAIROBARCODE} -o $@ --pkg cairo --pkg pangocairo --pkg gio-2.0 --pkg posix $^
-
-test: test.vala pdf-stock-interface.vala
- ${VALAC} -X -D'GETTEXT_PACKAGE="shopsystem"' -X -w -o $@ --pkg gio-2.0 $^
-
-run: pdf-stock
- LD_LIBRARY_PATH=../libcairobarcode ./pdf-stock
-
-clean:
- rm -rf pdf-stock test
-
-.PHONY: all clean run
diff --git a/src/pgp/Makefile b/src/pgp/Makefile
deleted file mode 100644
index 5faa80f..0000000
--- a/src/pgp/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-all: pgp
- @echo > /dev/null
-
-pgp: main.vala pgp.vala pgp-interface.vala ../config/config-interface.vala
- valac -X -D'GETTEXT_PACKAGE="shopsystem"' --Xcc="-D_FILE_OFFSET_BITS=64" -X -w -o $@ --vapidir ../../vapi -X -lgpgme --pkg gpgme --pkg gio-2.0 --pkg libarchive $^
-
-clean:
- rm -rf pgp
-
-.PHONY: all clean
diff --git a/src/scanner-session/Makefile b/src/scanner-session/Makefile
deleted file mode 100644
index 28f0ea8..0000000
--- a/src/scanner-session/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-all: scanner-session
- @echo > /dev/null
-
-scanner-session: main.vala scannersession.vala scannersession-interface.vala ../database/db-interface.vala ../input-device/input-device-interface.vala ../cli/cli-interface.vala ../audio/audio-interface.vala ../price.vapi
- valac -X -D'GETTEXT_PACKAGE="shopsystem"' -X -w -o $@ --pkg gio-2.0 $^
-
-clean:
- rm -rf scanner-session
-
-.PHONY: all clean
diff --git a/src/serial-device/Makefile b/src/serial-device/Makefile
deleted file mode 100644
index 9c810ea..0000000
--- a/src/serial-device/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-all: serial-device
- @echo > /dev/null
-
-serial-device: main.vala serial-device.vala ../input-device/input-device-interface.vala ../config/config-interface.vala
- valac -X -D'GETTEXT_PACKAGE="shopsystem"' -X -w -o $@ --pkg linux --pkg posix --pkg gio-2.0 $^
-
-clean:
- rm -rf serial-device
-
-.PHONY: all clean
diff --git a/src/web/Makefile b/src/web/Makefile
deleted file mode 100644
index 22d7bbc..0000000
--- a/src/web/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-all: web
- @echo > /dev/null
-
-web: main.vala web.vala websession.vala csv.vala template.vala ../database/db-interface.vala ../pgp/pgp-interface.vala ../price.vapi ../config/config-interface.vala ../audio/audio-interface.vala
- valac -X -D'GETTEXT_PACKAGE="shopsystem"' -X -w -o $@ --vapidir=../../vapi --enable-experimental --pkg gee-0.8 --pkg gio-2.0 --pkg libsoup-2.4 --pkg posix $^
-
-clean:
- rm -rf web
-
-.PHONY: all clean
diff --git a/systemd/Makefile b/systemd/Makefile
deleted file mode 100644
index b4dc1c1..0000000
--- a/systemd/Makefile
+++ /dev/null
@@ -1,23 +0,0 @@
-INSTALLPATH=/lib/systemd/system/
-UDEVPATH=/lib/udev/rules.d/
-SERVICEFILES=$(wildcard *.service)
-TIMERFILES=$(wildcard *.timer)
-RULESFILES=$(wildcard *.timer)
-
-install: ${SERVICEFILES} ${TIMERFILES} ${RULESFILES}
- @echo Installing systemd files into ${INSTALLPATH}...
- @mkdir -p ${INSTALLPATH}
- @$(foreach file,${SERVICEFILES},install -m644 ${file} ${INSTALLPATH}/${file};)
- @$(foreach file,${TIMERFILES},install -m644 ${file} ${INSTALLPATH}/${file};)
- @echo Installing udev files into ${UDEVPATH}...
- @mkdir -p ${UDEVPATH}
- @$(foreach file,${RULESFILES},install -m644 ${file} ${UDEVPATH}/${file};)
-
-uninstall:
- @echo Remove systemd files from ${INSTALLPATH}...
- @$(foreach file,${SERVICEFILES},rm -f ${INSTALLPATH}/${file};)
- @$(foreach file,${TIMERFILES},rm -f ${INSTALLPATH}/${file};)
- @echo Remove udev files from ${UDEVPATH}...
- @$(foreach file,${RULESFILES},rm -f ${UDEVPATH}/${file};)
-
-.PHONY: install uninstall