Makefile 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. CC := cc
  2. UNAME_S := $(shell uname -s)
  3. PKG_CONFIG ?= pkg-config
  4. PKG_DEPS := libxml-2.0 libcurl openssl
  5. ifeq ($(UNAME_S),Darwin)
  6. DEP_CFLAGS := $(shell $(PKG_CONFIG) --cflags $(PKG_DEPS) 2>/dev/null)
  7. DEP_LIBS := $(shell $(PKG_CONFIG) --libs $(PKG_DEPS) 2>/dev/null)
  8. CFLAGS := -Wall -Wextra -O2 -Isrc $(DEP_CFLAGS)
  9. LIBS := -lbeaker $(DEP_LIBS) -lpthread -lm
  10. else
  11. CFLAGS := -Wall -Wextra -O2 -Isrc -I/usr/include/libxml2
  12. LIBS := -lbeaker -lcurl -lxml2 -lpthread -lm -lssl -lcrypto
  13. endif
  14. LDFLAGS :=
  15. SRC_DIR := src
  16. BIN_DIR := bin
  17. OBJ_DIR := obj
  18. SRCS := $(shell find $(SRC_DIR) -name '*.c')
  19. OBJS := $(SRCS:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
  20. TARGET := $(BIN_DIR)/omnisearch
  21. all: $(TARGET)
  22. $(TARGET): $(OBJS)
  23. @mkdir -p $(BIN_DIR)
  24. $(CC) $(OBJS) -o $@ $(LDFLAGS) $(LIBS)
  25. @echo "Build complete: $(TARGET)"
  26. $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
  27. @mkdir -p $(dir $@)
  28. $(CC) $(CFLAGS) -c $< -o $@
  29. @echo "Compiled: $<"
  30. run: $(TARGET)
  31. ./$(TARGET)
  32. clean:
  33. rm -rf $(OBJ_DIR) $(BIN_DIR)
  34. @echo "Cleaned build artifacts"
  35. rebuild: clean all
  36. info:
  37. @echo "Compiler: $(CC)"
  38. @echo "CFlags: $(CFLAGS)"
  39. @echo ""
  40. @echo "Sources to compile:"
  41. @echo "$(SRCS)" | tr ' ' '\n'
  42. @echo ""
  43. @echo "Object files to generate:"
  44. @echo "$(OBJS)" | tr ' ' '\n'
  45. ifeq ($(UNAME_S),Darwin)
  46. PREFIX ?= /usr/local
  47. DATA_DIR ?= $(PREFIX)/etc/omnisearch
  48. CONF_DIR ?= $(DATA_DIR)
  49. VAR_DIR ?= $(PREFIX)/var/lib/omnisearch
  50. LOG_DIR ?= $(PREFIX)/var/log/omnisearch
  51. CACHE_DIR ?= $(PREFIX)/var/cache/omnisearch
  52. else
  53. PREFIX ?= /usr
  54. DATA_DIR ?= /etc/omnisearch
  55. CONF_DIR ?= /etc/omnisearch
  56. VAR_DIR ?= /var/lib/omnisearch
  57. LOG_DIR ?= /var/log/omnisearch
  58. CACHE_DIR ?= /var/cache/omnisearch
  59. endif
  60. INSTALL_BIN_DIR := $(PREFIX)/bin
  61. USER := omnisearch
  62. GROUP := omnisearch
  63. SYSTEMD_DIR := /etc/systemd/system
  64. OPENRC_DIR := /etc/init.d
  65. DINIT_DIR := /etc/dinit.d
  66. LAUNCHD_DIR ?= /Library/LaunchDaemons
  67. LAUNCHD_LABEL ?= monster.bwaaa.omnisearch
  68. LAUNCHD_PLIST := $(LAUNCHD_DIR)/$(LAUNCHD_LABEL).plist
  69. install:
  70. @echo "Available install targets:"
  71. @echo " make install-systemd"
  72. @echo " make install-openrc"
  73. @echo " make install-runit"
  74. @echo " make install-s6"
  75. @echo " make install-dinit"
  76. @if [ "$(UNAME_S)" = "Darwin" ]; then echo " make install-launchd"; fi
  77. @echo ""
  78. @echo "Example: doas/sudo make install-openrc"
  79. install-launchd: $(TARGET)
  80. @mkdir -p $(DATA_DIR)/templates $(DATA_DIR)/static $(INSTALL_BIN_DIR) $(LOG_DIR)
  81. @cp -rf templates/* $(DATA_DIR)/templates/
  82. @cp -rf static/* $(DATA_DIR)/static/
  83. @cp -n example-config.ini $(DATA_DIR)/config.ini || true
  84. install -m 755 $(TARGET) $(INSTALL_BIN_DIR)/omnisearch
  85. @mkdir -p $(LAUNCHD_DIR)
  86. @sed \
  87. -e 's|@INSTALL_BIN_DIR@|$(INSTALL_BIN_DIR)|g' \
  88. -e 's|@DATA_DIR@|$(DATA_DIR)|g' \
  89. -e 's|@LOG_DIR@|$(LOG_DIR)|g' \
  90. -e 's|@LAUNCHD_LABEL@|$(LAUNCHD_LABEL)|g' \
  91. init/launchd/omnisearch.plist.in > $(LAUNCHD_PLIST)
  92. @chmod 644 $(LAUNCHD_PLIST)
  93. @echo ""
  94. @echo "Config: $(DATA_DIR)/config.ini"
  95. @echo "Installed launchd plist to $(LAUNCHD_PLIST)"
  96. @echo "Load with: sudo launchctl bootstrap system $(LAUNCHD_PLIST)"
  97. @echo "Enable with: sudo launchctl enable system/$(LAUNCHD_LABEL)"
  98. @echo "Start with: sudo launchctl kickstart -k system/$(LAUNCHD_LABEL)"
  99. install-systemd: $(TARGET)
  100. @mkdir -p $(DATA_DIR)/templates $(DATA_DIR)/static $(LOG_DIR) $(CACHE_DIR)
  101. @cp -rf templates/* $(DATA_DIR)/templates/
  102. @cp -rf static/* $(DATA_DIR)/static/
  103. @cp -n example-config.ini $(DATA_DIR)/config.ini || true
  104. install -m 755 $(TARGET) $(INSTALL_BIN_DIR)/omnisearch
  105. @echo "Setting up user '$(USER)'..."
  106. @(grep -q '^$(GROUP):' /etc/group || groupadd $(GROUP)) 2>/dev/null || true
  107. @id -u $(USER) >/dev/null 2>&1 || useradd --system --home $(DATA_DIR) --shell /usr/sbin/nologin -g $(GROUP) $(USER)
  108. @chown -R $(USER):$(GROUP) $(LOG_DIR) $(CACHE_DIR) $(VAR_DIR) $(DATA_DIR) 2>/dev/null || true
  109. @chown $(USER):$(GROUP) $(DATA_DIR)/config.ini 2>/dev/null || true
  110. install -m 644 init/systemd/omnisearch.service $(SYSTEMD_DIR)/omnisearch.service
  111. @echo ""
  112. @echo "Config: $(DATA_DIR)/config.ini"
  113. @echo "Edit config with: nano $(DATA_DIR)/config.ini"
  114. @echo "Installed systemd service to $(SYSTEMD_DIR)/omnisearch.service"
  115. @echo "Run 'systemctl enable --now omnisearch' to start"
  116. install-openrc: $(TARGET)
  117. @mkdir -p $(DATA_DIR)/templates $(DATA_DIR)/static $(LOG_DIR) $(CACHE_DIR)
  118. @cp -rf templates/* $(DATA_DIR)/templates/
  119. @cp -rf static/* $(DATA_DIR)/static/
  120. @cp -n example-config.ini $(DATA_DIR)/config.ini || true
  121. install -m 755 $(TARGET) $(INSTALL_BIN_DIR)/omnisearch
  122. @echo "Setting up user '$(USER)'..."
  123. @(grep -q '^$(GROUP):' /etc/group || groupadd $(GROUP)) 2>/dev/null || true
  124. @id -u $(USER) >/dev/null 2>&1 || useradd --system --home $(DATA_DIR) --shell /usr/sbin/nologin -g $(GROUP) $(USER)
  125. @chown -R $(USER):$(GROUP) $(LOG_DIR) $(CACHE_DIR) $(VAR_DIR) $(DATA_DIR) 2>/dev/null || true
  126. @chown $(USER):$(GROUP) $(DATA_DIR)/config.ini 2>/dev/null || true
  127. install -m 755 init/openrc/omnisearch $(OPENRC_DIR)/omnisearch
  128. @echo ""
  129. @echo "Config: $(DATA_DIR)/config.ini"
  130. @echo "Edit config with: nano $(DATA_DIR)/config.ini"
  131. @echo "Installed openrc service to $(OPENRC_DIR)/omnisearch"
  132. @echo "Run 'rc-update add omnisearch default' to enable"
  133. install-runit: $(TARGET)
  134. @mkdir -p $(DATA_DIR)/templates $(DATA_DIR)/static $(LOG_DIR) $(CACHE_DIR)
  135. @cp -rf templates/* $(DATA_DIR)/templates/
  136. @cp -rf static/* $(DATA_DIR)/static/
  137. @cp -n example-config.ini $(DATA_DIR)/config.ini || true
  138. install -m 755 $(TARGET) $(INSTALL_BIN_DIR)/omnisearch
  139. @echo "Setting up user '$(USER)'..."
  140. @(grep -q '^$(GROUP):' /etc/group || groupadd $(GROUP)) 2>/dev/null || true
  141. @id -u $(USER) >/dev/null 2>&1 || useradd --system --home $(DATA_DIR) --shell /usr/sbin/nologin -g $(GROUP) $(USER)
  142. @chown -R $(USER):$(GROUP) $(LOG_DIR) $(CACHE_DIR) $(VAR_DIR) $(DATA_DIR) 2>/dev/null || true
  143. @chown $(USER):$(GROUP) $(DATA_DIR)/config.ini 2>/dev/null || true
  144. @mkdir -p /etc/service/omnisearch/log/supervise/control
  145. install -m 755 init/runit/run /etc/service/omnisearch/run
  146. install -m 755 init/runit/log/run /etc/service/omnisearch/log/run
  147. install -m 755 init/runit/log/run /etc/service/omnisearch/log/supervise/control
  148. @echo ""
  149. @echo "Config: $(DATA_DIR)/config.ini"
  150. @echo "Edit config with: nano $(DATA_DIR)/config.ini"
  151. @echo "Installed runit service to /etc/service/omnisearch"
  152. @echo "Service will start automatically"
  153. install-s6: $(TARGET)
  154. @mkdir -p $(DATA_DIR)/templates $(DATA_DIR)/static $(LOG_DIR) $(CACHE_DIR)
  155. @cp -rf templates/* $(DATA_DIR)/templates/
  156. @cp -rf static/* $(DATA_DIR)/static/
  157. @cp -n example-config.ini $(DATA_DIR)/config.ini || true
  158. install -m 755 $(TARGET) $(INSTALL_BIN_DIR)/omnisearch
  159. @echo "Setting up user '$(USER)'..."
  160. @(grep -q '^$(GROUP):' /etc/group || groupadd $(GROUP)) 2>/dev/null || true
  161. @id -u $(USER) >/dev/null 2>&1 || useradd --system --home $(DATA_DIR) --shell /usr/sbin/nologin -g $(GROUP) $(USER)
  162. @chown -R $(USER):$(GROUP) $(LOG_DIR) $(CACHE_DIR) $(VAR_DIR) $(DATA_DIR) 2>/dev/null || true
  163. @chown $(USER):$(GROUP) $(DATA_DIR)/config.ini 2>/dev/null || true
  164. @mkdir -p /var/service/omnisearch/log/supervise/control
  165. install -m 755 init/s6/run /var/service/omnisearch/run
  166. install -m 755 init/s6/log/run /var/service/omnisearch/log/run
  167. install -m 755 init/s6/log/run /var/service/omnisearch/log/supervise/control
  168. @echo ""
  169. @echo "Config: $(DATA_DIR)/config.ini"
  170. @echo "Edit config with: nano $(DATA_DIR)/config.ini"
  171. @echo "Installed s6 service to /var/service/omnisearch"
  172. @echo "Service will start automatically"
  173. install-dinit: $(TARGET)
  174. @mkdir -p $(DATA_DIR)/templates $(DATA_DIR)/static $(LOG_DIR) $(CACHE_DIR)
  175. @cp -rf templates/* $(DATA_DIR)/templates/
  176. @cp -rf static/* $(DATA_DIR)/static/
  177. @cp -n example-config.ini $(DATA_DIR)/config.ini || true
  178. install -m 755 $(TARGET) $(INSTALL_BIN_DIR)/omnisearch
  179. @echo "Setting up user '$(USER)'..."
  180. @(grep -q '^$(GROUP):' /etc/group || groupadd $(GROUP)) 2>/dev/null || true
  181. @id -u $(USER) >/dev/null 2>&1 || useradd --system --home $(DATA_DIR) --shell /usr/sbin/nologin -g $(GROUP) $(USER)
  182. @chown -R $(USER):$(GROUP) $(LOG_DIR) $(CACHE_DIR) $(VAR_DIR) $(DATA_DIR) 2>/dev/null || true
  183. @chown $(USER):$(GROUP) $(DATA_DIR)/config.ini 2>/dev/null || true
  184. install -m 644 init/dinit/omnisearch $(DINIT_DIR)/omnisearch
  185. @echo ""
  186. @echo "Config: $(DATA_DIR)/config.ini"
  187. @echo "Edit config with: nano $(DATA_DIR)/config.ini"
  188. @echo "Installed dinit service to $(DINIT_DIR)/omnisearch"
  189. @echo "Run 'dinitctl enable omnisearch' to start"
  190. uninstall:
  191. rm -f $(INSTALL_BIN_DIR)/omnisearch
  192. rm -rf $(DATA_DIR)
  193. rm -f $(SYSTEMD_DIR)/omnisearch.service
  194. rm -f $(OPENRC_DIR)/omnisearch
  195. rm -f $(DINIT_DIR)/omnisearch
  196. rm -rf /etc/service/omnisearch
  197. rm -rf /var/service/omnisearch
  198. @id -u $(USER) >/dev/null 2>&1 && userdel $(USER) 2>/dev/null || true
  199. @grep -q '^$(GROUP):' /etc/group 2>/dev/null && groupdel $(GROUP) 2>/dev/null || true
  200. @echo "Uninstalled omnisearch"
  201. .PHONY: all run clean rebuild info install install-launchd install-systemd install-openrc install-runit install-s6 install-dinit uninstall