diff --git a/.github/workflows/install.yml b/.github/workflows/install.yml new file mode 100644 index 0000000..c3d037f --- /dev/null +++ b/.github/workflows/install.yml @@ -0,0 +1,54 @@ +name: Test install + +on: + push: + branches: + - main + paths: + - 'src/**' + - 'include/**' + - 'tools/src/**' + - 'Makefile' + - '*.mk' + - '.github/workflows/install.yml' + + pull_request: + paths: + - 'src/**' + - 'include/**' + - 'tools/src/**' + - 'Makefile' + - '*.mk' + - '.github/workflows/install.yml' + +jobs: + + install: + runs-on: ubuntu-latest + env: + CC: gcc + steps: + - name: install doxygen + run: sudo apt-get install doxygen + + - name: Check out RedisX + uses: actions/checkout@v4 + + - name: Check out xchange + uses: actions/checkout@v4 + with: + repository: Smithsonian/xchange + path: xchange + + - name: Build xchange dependency + run: | + make -C xchange shared + sudo make -C xchange install + + - name: Build RedisX distro + run: make distro + + - name: Install RedisX in default location + run: sudo make install + + diff --git a/Makefile b/Makefile index 62fae9c..089d495 100644 --- a/Makefile +++ b/Makefile @@ -36,6 +36,10 @@ LDFLAGS += -pthread .PHONY: all all: shared static $(DOC_TARGETS) check +# Build for distribution +.PHONY: distro +distro: shared $(DOC_TARGETS) + # Shared libraries (versioned and unversioned) .PHONY: shared shared: $(LIB)/libredisx.so @@ -95,6 +99,43 @@ Doxyfile.local: Doxyfile Makefile local-dox: README-redisx.md Doxyfile.local doxygen Doxyfile.local +# Default values for install locations +# See https://www.gnu.org/prep/standards/html_node/Directory-Variables.html +prefix ?= /usr +exec_prefix ?= $(prefix) +libdir ?= $(exec_prefix)/lib +includedir ?= $(prefix)/include +datarootdir ?= $(prefix)/share +datadir ?= $(datarootdir) +mydatadir ?= $(datadir)/redisx +docdir ?= $(datarootdir)/doc/redisx +htmldir ?= $(docdir)/html + +.PHONY: install +install: install-libs install-headers install-apidoc + +.PHONY: install-libs +install-libs: shared + @echo "installing libraries to $(libdir)" + install -d $(libdir) + install -m 755 -D $(LIB)/lib*.so* $(libdir)/ + +.PHONY: install-headers +install-headers: + @echo "installing headers to $(includedir)" + install -d $(includedir) + install -m 644 -D include/* $(includedir)/ + +.PHONY: install-apidoc +install-apidoc: $(DOC_TAGERTS) + @echo "installing API documentation to $(htmldir)" + install -d $(htmldir)/search + install -m 644 -D apidoc/html/search/* $(htmldir)/search/ + install -m 644 -D apidoc/html/*.* $(htmldir)/ + @echo "installing Doxygen tag file to $(docdir)" + install -d $(docdir) + install -m 644 -D apidoc/*.tag $(docdir)/ + # Built-in help screen for `make help` .PHONY: help help: @@ -108,6 +149,7 @@ help: @echo " local-dox Compiles local HTML API documentation using 'doxygen'." @echo " check Performs static analysis with 'cppcheck'." @echo " all All of the above." + @echo " install Install components (e.g. 'make prefix= install')" @echo " clean Removes intermediate products." @echo " distclean Deletes all generated files." @echo diff --git a/README.md b/README.md index 44356eb..b9c2843 100644 --- a/README.md +++ b/README.md @@ -119,6 +119,19 @@ After configuring, you can simply run `make`, which will build the `shared` (`li analysis via the `check` target. Or, you may build just the components you are interested in, by specifying the desired `make` target(s). (You can use `make help` to get a summary of the available `make` targets). +After building the library you can install the above components to the desired locations on your system. For a +system-wide install you may simply run: + +```bash + $ sudo make install +``` + +Or, to install in some other locations, you may set a prefix. For example to install under `/opt` instead, you can: + +```bash + $ sudo make prefix=/opt install +``` + -----------------------------------------------------------------------------