+PROG = odot
+VERSION ?= 0.2.1
+
SHELL = /bin/bash
+
DESTDIR ?=
-PREFIX = $(DESTDIR)/usr
-BINDIR = $(PREFIX)/bin
-MANDIR = $(PREFIX)/share/man/man1
+PREFIX ?= $(DESTDIR)/usr
+BINDIR ?= $(PREFIX)/bin
+LIBDIR ?= $(PREFIX)/lib
+MANDIR ?= $(PREFIX)/share/man/man1
-PROG = odot
+FILES ?= $(wildcard *.c)
+HEADERS ?= $(wildcard *.h)
+OBJECTS ?= $(wildcard *.o)
CC ?= gcc
-CFILE = $(PROG).c database.c actions.c function.c
-HEADER = $(PROG).h sqlite3.h
-OBJECTS = $(PROG).o database.o actions.o function.o sqlite3.o
-LDFLAGS += -L .
-LDLIBS += -lpthread
-CFLAGS += -O3
+CFLAGS += -O2 -std=c17 -pipe
WARNINGS ?= -Werror -Wall -Wextra -Wpedantic -Wno-unused
-CPPFLAGS += $(CPPFLAGX) -I .
-ALL_CFLAGS = $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(LDLIBS) $(WARNINGS)
+CPPFLAGS += -I .
+LDFLAGS += -L .
+LDLIBS +=
+ALL_FLAGS = $(CPPFLAGS) $(CFLAGS) $(WARNINGS) $(LDFLAGS) $(LDLIBS)
-build: $(CFILE) $(HEADER) sqlite3.c
- $(CC) $(CFILE) sqlite3.c $(ALL_CFLAGS) -o $(PROG)
+.PHONY: all
+all: $(FILES) $(HEADERS)
+ $(CC) $(FILES) $(ALL_FLAGS) -o $(PROG)
-sql: sqlite3.c
- $(CC) sqlite3.c $(ALL_CFLAGS) -c
+.PHONY: install
+install: $(PROG) $(PROG).1
+ install -CDTm 755 $(PROG) $(BINDIR)/$(PROG)
+ [[ -e $(PROG).1 ]] && gzip -fc $(PROG).1 > $(MANDIR)/$(PROG).1.gz
-header: $(HEADER)
- $(CC) $(HEADER) $(ALL_CFLAGS) -c
+.PHONY: tar
+tar: $(FILES) $(HEADERS) $(PROG).1 Makefile README LICENSE
+ tar -g gzip -cf $(PROG)-$(VERSION).tar.gz $(FILES) $(HEADERS) $(PROG).1 Makefile README LICENSE
-compile: $(CFILE)
- $(CC) $(CFILE) $(ALL_CFLAGS) -c
+.PHONY: compile
+compile: $(FILES)
+ $(CC) $(FILES) $(ALL_FLAGS) -c
+.PHONY: link
link: $(OBJECTS)
- $(CC) $(OBJECTS) $(ALL_CFLAGS) -o $(PROG)
+ $(CC) $(OBJECTS) $(ALL_FLAGS) -o $(PROG)
-sqlbuild: $(CFILE) $(HEADER) sqlite3.o
- $(CC) $(CFILE) sqlite3.o $(ALL_CFLAGS) -o $(PROG)
+.PHONY: assemble
+assemble: $(FILES)
+ $(CC) $(FILES) $(ALL_FLAGS) -S
-install: $(CFILE) $(HEADER) sqlite3.c
- $(CC) $(CFILE) sqlite3.c $(ALL_CFLAGS) -o $(PROG)
- install -CDTm 755 $(PROG) $(BINDIR)/$(PROG)
- gzip -cf $(PROG).1 > $(PROG).1.gz
- install -CDTm 644 $(PROG).1.gz $(MANDIR)/$(PROG).1
-
-debug: $(CFILE) $(HEADER)
- $(CC) $(CFILE) sqlite3.o $(CFLAGS) -ggdb3 -Og -o $(PROG)
+.PHONY: debug
+debug: $(FILES)
+ $(CC) $(FILES) $(ALL_FLAGS) -ggdb3 -Og -o $(PROG)
+.PHONY: clean
clean:
+ [[ -f $(BINDIR)/$(PROG) ]] && rm $(BINDIR)/$(PROG)
[[ -f $(PROG) ]] && rm $(PROG)
- [[ -f $(DESTDIR)/$(PROG) ]] && sudo rm $(BINDIR)/$(PROG)
-
-dbclean:
- rm *.db
Task manager written in C
Installation:
+
+ Download source files
+ $ curl "https://download.huck.website/odot-[VERSION].tar.gz" > odot.tar.gz
- - Arch Linux: Available in the AUR
+ Unpack source files
+ $ tar -xzvf odot.tar.gz
+ $ cd odot
- - Manual:
-
- # Make and enter directory for odot
- $ mkdir odot && cd odot
-
- # Download source files
- $ curl "https://download.huck.website/odot-[VERSION].tar.gz" > odot-[VERSION].tar.gz
-
- # Optional: Download and check pgp signature
- $ curl "https://download.huck.website/odot-[VERSION].tar.gz.sig" > odot-[VERSION].tar.gz.sig
- $ curl "https://download.huck.website/pub.asc" > huck.asc
- $ gpg --import huck.asc
- $ gpg --verify odot-[VERSION].tar.gz.sig odot-[VERSION].tar.gz
-
- # Unpack source files
- $ tar -xzvf odot-[VERSION].tar.gz
-
- # Build odot
- Global install:
- $ sudo make install
- Local install:
- $ make clean sql build
-
+ Build odot
+ $ make && sudo make install
Usage:
Examples:
Add a task to default group:
- $ odot new task
+ $ odot new "task"
Show tasks in default group:
$ odot show
Add a task to a group called newgroup:
- $ odot new -g newgroup things to do
+ $ odot new -g newgroup "things to do"
Finish a task and show other completed tasks:
- $ odot done thing I did -d
+ $ odot done "thing I did" -d
Show all completed tasks in a group called tasks:
$ odot show -dg tasks
$ odot show -da
Remove a task from database (completely removes task from memory, useful for typos):
- $ odot remove task I want to forget
+ $ odot remove "task I want to forget"