Selaa lähdekoodia

Add macOS build and launchd install support

Else 14 tuntia sitten
vanhempi
sitoutus
3b17d8a766
3 muutettua tiedostoa jossa 100 lisäystä ja 11 poistoa
  1. 54 8
      Makefile
  2. 18 3
      README.md
  3. 28 0
      init/launchd/omnisearch.plist.in

+ 54 - 8
Makefile

@@ -1,8 +1,19 @@
 CC      := cc
+UNAME_S := $(shell uname -s)
+PKG_CONFIG ?= pkg-config
+PKG_DEPS   := libxml-2.0 libcurl openssl
+
+ifeq ($(UNAME_S),Darwin)
+DEP_CFLAGS := $(shell $(PKG_CONFIG) --cflags $(PKG_DEPS) 2>/dev/null)
+DEP_LIBS   := $(shell $(PKG_CONFIG) --libs $(PKG_DEPS) 2>/dev/null)
+CFLAGS  := -Wall -Wextra -O2 -Isrc $(DEP_CFLAGS)
+LIBS    := -lbeaker $(DEP_LIBS) -lpthread -lm
+else
 CFLAGS  := -Wall -Wextra -O2 -Isrc -I/usr/include/libxml2
-LDFLAGS :=
-
 LIBS    := -lbeaker -lcurl -lxml2 -lpthread -lm -lssl -lcrypto
+endif
+
+LDFLAGS :=
 
 SRC_DIR := src
 BIN_DIR := bin
@@ -44,19 +55,32 @@ info:
 	@echo "Object files to generate:"
 	@echo "$(OBJS)" | tr ' ' '\n'
 
+ifeq ($(UNAME_S),Darwin)
+PREFIX      ?= /usr/local
+DATA_DIR    ?= $(PREFIX)/etc/omnisearch
+CONF_DIR    ?= $(DATA_DIR)
+VAR_DIR     ?= $(PREFIX)/var/lib/omnisearch
+LOG_DIR     ?= $(PREFIX)/var/log/omnisearch
+CACHE_DIR   ?= $(PREFIX)/var/cache/omnisearch
+else
 PREFIX      ?= /usr
+DATA_DIR    ?= /etc/omnisearch
+CONF_DIR    ?= /etc/omnisearch
+VAR_DIR     ?= /var/lib/omnisearch
+LOG_DIR     ?= /var/log/omnisearch
+CACHE_DIR   ?= /var/cache/omnisearch
+endif
+
 INSTALL_BIN_DIR := $(PREFIX)/bin
-DATA_DIR    := /etc/omnisearch
-CONF_DIR    := /etc/omnisearch
-VAR_DIR     := /var/lib/omnisearch
-LOG_DIR     := /var/log/omnisearch
-CACHE_DIR   := /var/cache/omnisearch
 USER        := omnisearch
 GROUP       := omnisearch
 
 SYSTEMD_DIR := /etc/systemd/system
 OPENRC_DIR  := /etc/init.d
 DINIT_DIR   := /etc/dinit.d
+LAUNCHD_DIR ?= /Library/LaunchDaemons
+LAUNCHD_LABEL ?= monster.bwaaa.omnisearch
+LAUNCHD_PLIST := $(LAUNCHD_DIR)/$(LAUNCHD_LABEL).plist
 
 install:
 	@echo "Available install targets:"
@@ -65,9 +89,31 @@ install:
 	@echo "  make install-runit"
 	@echo "  make install-s6"
 	@echo "  make install-dinit"
+	@if [ "$(UNAME_S)" = "Darwin" ]; then echo "  make install-launchd"; fi
 	@echo ""
 	@echo "Example: doas/sudo make install-openrc"
 
+install-launchd: $(TARGET)
+	@mkdir -p $(DATA_DIR)/templates $(DATA_DIR)/static $(INSTALL_BIN_DIR) $(LOG_DIR)
+	@cp -rf templates/* $(DATA_DIR)/templates/
+	@cp -rf static/* $(DATA_DIR)/static/
+	@cp -n example-config.ini $(DATA_DIR)/config.ini || true
+	install -m 755 $(TARGET) $(INSTALL_BIN_DIR)/omnisearch
+	@mkdir -p $(LAUNCHD_DIR)
+	@sed \
+		-e 's|@INSTALL_BIN_DIR@|$(INSTALL_BIN_DIR)|g' \
+		-e 's|@DATA_DIR@|$(DATA_DIR)|g' \
+		-e 's|@LOG_DIR@|$(LOG_DIR)|g' \
+		-e 's|@LAUNCHD_LABEL@|$(LAUNCHD_LABEL)|g' \
+		init/launchd/omnisearch.plist.in > $(LAUNCHD_PLIST)
+	@chmod 644 $(LAUNCHD_PLIST)
+	@echo ""
+	@echo "Config: $(DATA_DIR)/config.ini"
+	@echo "Installed launchd plist to $(LAUNCHD_PLIST)"
+	@echo "Load with: sudo launchctl bootstrap system $(LAUNCHD_PLIST)"
+	@echo "Enable with: sudo launchctl enable system/$(LAUNCHD_LABEL)"
+	@echo "Start with: sudo launchctl kickstart -k system/$(LAUNCHD_LABEL)"
+
 install-systemd: $(TARGET)
 	@mkdir -p $(DATA_DIR)/templates $(DATA_DIR)/static $(LOG_DIR) $(CACHE_DIR)
 	@cp -rf templates/* $(DATA_DIR)/templates/
@@ -176,4 +222,4 @@ uninstall:
 	@grep -q '^$(GROUP):' /etc/group 2>/dev/null && groupdel $(GROUP) 2>/dev/null || true
 	@echo "Uninstalled omnisearch"
 
-.PHONY: all run clean rebuild info install install-systemd install-openrc install-runit install-s6 install-dinit uninstall
+.PHONY: all run clean rebuild info install install-launchd install-systemd install-openrc install-runit install-s6 install-dinit uninstall

+ 18 - 3
README.md

@@ -6,7 +6,7 @@ A modern lightweight metasearch engine with a clean design written in C.
 I request that none of this code, in part or in full, be hosted on GitHub, SourceForge, or any other proprietary platform. This request is made out of respect for both me, the developer and for you, the user.
 
 ## Configuration
-Create a config.ini, there is an example included in the root. Or if you installed omnisearch, edit the config file at `/etc/omnisearch/config.ini`.
+Create a config.ini, there is an example included in the root. Or if you installed omnisearch, edit the installed config file.
 
 ## Dependencies
 - libxml2
@@ -46,13 +46,27 @@ Depending on your system, you may first need to install libcurl and libxml2.
 # xbps-install -S libxml2-devel libcurl-devel
 ```
 
+### macOS (Homebrew)
+```
+$ brew install libxml2 curl openssl pkg-config
+```
+
+### macOS (MacPorts)
+```
+# port install libxml2 curl openssl3 pkgconfig
+```
+
+On macOS the build uses `pkg-config` to discover `libxml2`, `libcurl` and OpenSSL flags.
+
 Install libbeaker:
 ```
 $ git clone https://git.bwaaa.monster/beaker
 $ cd beaker
-$ make
 # make install
 ```
+
+On macOS `beaker` installs to `/usr/local/` by default and installs `libbeaker.dylib`.
+
 And then install omnisearch:
 ```
 $ git clone https://git.bwaaa.monster/omnisearch
@@ -60,7 +74,8 @@ $ cd omnisearch
 $ make
 # make install-<init>
 ```
-Replace `<init>` with your init system (openrc,systemd,runit,s6,dinit)
+Replace `<init>` with your init system (`openrc`, `systemd`, `runit`, `s6`, `dinit`, `launchd`).
+On macOS, use `install-launchd`.
 
 ## Hosting
 Run it normally behind a reverse proxy (like nginx)

+ 28 - 0
init/launchd/omnisearch.plist.in

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+  <key>Label</key>
+  <string>@LAUNCHD_LABEL@</string>
+
+  <key>ProgramArguments</key>
+  <array>
+    <string>@INSTALL_BIN_DIR@/omnisearch</string>
+  </array>
+
+  <key>WorkingDirectory</key>
+  <string>@DATA_DIR@</string>
+
+  <key>RunAtLoad</key>
+  <true/>
+
+  <key>KeepAlive</key>
+  <true/>
+
+  <key>StandardOutPath</key>
+  <string>@LOG_DIR@/omnisearch.log</string>
+
+  <key>StandardErrorPath</key>
+  <string>@LOG_DIR@/omnisearch.err</string>
+</dict>
+</plist>