LibreSplit/Makefile
2024-06-03 14:50:49 +01:00

77 lines
2.5 KiB
Makefile

BIN := libresplit
INC := `pkg-config --cflags gtk+-3.0 x11 jansson luajit`
CFLAGS := -std=gnu99 -O2 -pthread -Wall -Wno-unused-parameter
LDFLAGS := `pkg-config --libs gtk+-3.0 x11 jansson luajit`
SRC_DIR := ./src
OBJ_DIR := ./obj
# Obtain list of source files and create list of object files
SOURCES := $(wildcard $(SRC_DIR)/*.c)
COMPONENTS := $(wildcard $(SRC_DIR)/component/*.c)
OBJECTS := $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SOURCES)) \
$(patsubst $(SRC_DIR)/component/%.c, $(OBJ_DIR)/%.o, $(COMPONENTS))
DESTDIR :=
PREFIX := /usr/local
APP := libresplit.desktop
ICON := libresplit
SCHEMA := libresplit.gschema.xml
ifdef DESTDIR
update_icon_cache :=
compile_schemas :=
else
update_icon_cache := gtk-update-icon-cache -f -t $(PREFIX)/share/icons/hicolor
compile_schemas := glib-compile-schemas $(PREFIX)/share/glib-2.0/schemas
endif
all: main.h $(BIN)
# Rule to link object files to create executable
$(BIN): $(OBJECTS)
gcc $(CFLAGS) $^ $(LDFLAGS) -o $@
# Rule to compile C source files to object files
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c | $(OBJ_DIR)
gcc $(INC) $(CFLAGS) -c -o $@ $<
# Rule to compile C component source files to object files
$(OBJ_DIR)/%.o: $(SRC_DIR)/component/%.c | $(OBJ_DIR)
gcc $(INC) $(CFLAGS) -c -o $@ $<
$(OBJ_DIR):
mkdir -p $(OBJ_DIR)
main.h: $(SRC_DIR)/main.css
xxd --include $(SRC_DIR)/main.css > $(SRC_DIR)/main.h || ($(RM) $(SRC_DIR)/main.h; false)
install: all
install -Dm755 $(BIN) $(DESTDIR)$(PREFIX)/bin/$(BIN)
install -Dm644 $(APP) $(DESTDIR)$(PREFIX)/share/applications/$(APP)
for size in 16 22 24 32 36 48 64 72 96 128 256 512; do \
mkdir -p $(DESTDIR)$(PREFIX)/share/icons/hicolor/"$$size"x"$$size"/apps ; \
rsvg-convert -w "$$size" -h "$$size" -f png -o $(DESTDIR)$(PREFIX)/share/icons/hicolor/"$$size"x"$$size"/apps/$(ICON).png $(ICON).svg ; \
done
$(update_icon_cache)
install -Dm644 $(SCHEMA) $(DESTDIR)$(PREFIX)/share/glib-2.0/schemas/$(SCHEMA)
$(compile_schemas)
uninstall:
$(RM) $(DESTDIR)$(PREFIX)/bin/$(BIN)
$(RM) $(DESTDIR)$(PREFIX)/share/applications/$(APP)
for size in 16 22 24 32 36 48 64 72 96 128 256 512; do \
$(RM) $(DESTDIR)$(PREFIX)/share/icons/hicolor/"$$size"x"$$size"/apps/$(ICON).png ; \
done
remove-schema:
$(RM) $(DESTDIR)$(PREFIX)/share/glib-2.0/schemas/$(SCHEMA)
$(compile_schemas)
clean:
$(RM) -r $(BIN) $(OBJ_DIR) $(SRC_DIR)/main.h
format:
clang-format -i $(SOURCES) $(COMPONENTS) $(SRC_DIR)/*.h $(SRC_DIR)/component/*.h
.PHONY: all main.h install uninstall remove-schema clean