diff --git a/.gitignore b/.gitignore index 9f1e1f9..f121a3d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ /build/ +/build-*/ +/dist/ *.o *.so *.swp diff --git a/CMakeLists.txt b/CMakeLists.txt index 1c3fcfa..f9c8031 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.20) -project(obs-webkit-browser VERSION 0.1.0 LANGUAGES C CXX) +project(obs-webkit-browser VERSION 1.1.0 LANGUAGES C CXX) include(GNUInstallDirs) find_package(PkgConfig REQUIRED) diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..3eb0242 --- /dev/null +++ b/Makefile @@ -0,0 +1,57 @@ +PROJECT_NAME := obs-webkit-browser +VERSION := $(shell sed -n '/^project.* VERSION / { s/^project.* VERSION //; s/ .*//; p; }' CMakeLists.txt) +ARCH := $(shell uname -m) + +BUILD_DIR ?= build-release +DIST_DIR ?= dist +STAGE_DIR ?= $(BUILD_DIR)/stage +INSTALL_PREFIX ?= /usr +ARCHIVE_NAME := $(PROJECT_NAME)-$(VERSION)-linux-$(ARCH).tar.gz +ARCHIVE_PATH := $(abspath $(DIST_DIR)/$(ARCHIVE_NAME)) +PLUGIN_STAGE_DIR := $(STAGE_DIR)/$(PROJECT_NAME) +PLUGIN_BIN_DIR := $(PLUGIN_STAGE_DIR)/bin/64bit +PLUGIN_DATA_DIR := $(PLUGIN_STAGE_DIR)/data + +CMAKE ?= $(if $(wildcard /usr/bin/cmake),/usr/bin/cmake,cmake) +CTEST ?= $(if $(wildcard /usr/bin/ctest),/usr/bin/ctest,ctest) + +.PHONY: all configure build test install stage archive clean + +all: build + +configure: + $(CMAKE) -S . -B $(BUILD_DIR) -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=$(INSTALL_PREFIX) + +build: configure + $(CMAKE) --build $(BUILD_DIR) + +test: build + $(CTEST) --test-dir $(BUILD_DIR) --output-on-failure + +install: build + $(CMAKE) --install $(BUILD_DIR) --strip + +stage: test + $(CMAKE) -E remove_directory $(STAGE_DIR) + $(CMAKE) -E make_directory $(PLUGIN_BIN_DIR) + $(CMAKE) -E make_directory $(PLUGIN_DATA_DIR)/locale + $(CMAKE) -E copy_if_different \ + $(BUILD_DIR)/obs-webkit-browser.so $(PLUGIN_BIN_DIR)/obs-webkit-browser.so + $(CMAKE) -E copy_if_different \ + $(BUILD_DIR)/obs-webkit-renderer $(PLUGIN_DATA_DIR)/obs-webkit-renderer + $(CMAKE) -E copy_if_different \ + data/locale/en-US.ini data/locale/ru-RU.ini $(PLUGIN_DATA_DIR)/locale/ + +archive: stage + $(CMAKE) -E make_directory $(DIST_DIR) + cd $(STAGE_DIR) && $(CMAKE) -E tar cfvz $(ARCHIVE_PATH) --format=gnutar $(PROJECT_NAME) + $(CMAKE) -E sha256sum $(ARCHIVE_PATH) >$(ARCHIVE_PATH).sha256 + @echo + @echo "Archive: $(ARCHIVE_PATH)" + @echo "SHA-256: $(ARCHIVE_PATH).sha256" + +clean: + $(CMAKE) -E remove_directory $(BUILD_DIR) + $(CMAKE) -E remove_directory $(DIST_DIR) diff --git a/README.md b/README.md index c6981e6..ccfd7b6 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,32 @@ doas /usr/bin/cmake --install build --prefix /usr Если OBS установлен в нестандартный prefix, задайте при конфигурации `OBS_PLUGIN_DIR` и `OBS_PLUGIN_DATA_DIR`. +## Архив для публикации + +После установки зависимостей используйте отдельные цели `Makefile`: + +```sh +make build +make test +doas make install +make archive +``` + +`make build` собирает Release-версию, `make test` запускает тесты, +`doas make install` устанавливает плагин в `/usr`, а `make archive` запускает +сборку и тесты, после чего создаёт пакет без установки файлов в систему. +Готовый архив `obs-webkit-browser--linux-.tar.gz` и файл с его +SHA-256 будут записаны в каталог `dist/`. Внутри нет абсолютных путей: архив +содержит только пользовательскую структуру плагина +`obs-webkit-browser/{bin/64bit,data}`. Установить её можно напрямую в каталог +пользовательских плагинов OBS: + +```sh +mkdir -p ~/.config/obs-studio/plugins +tar -xzf dist/obs-webkit-browser--linux-.tar.gz \ + -C ~/.config/obs-studio/plugins +``` + ## Почему WebKitGTK, а не WPE WPE архитектурно подходит лучше всего, но пакет `wpewebkit` отсутствует в актуальном