Skip to content

Commit

Permalink
Add make install with support for prefix and GNU standard locations
Browse files Browse the repository at this point in the history
  • Loading branch information
attipaci committed Nov 12, 2024
1 parent 0b79a74 commit aa2ea2d
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 0 deletions.
49 changes: 49 additions & 0 deletions .github/workflows/install.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
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
XCHANGE: xchange
steps:
- name: Check out RedisX
uses: actions/checkout@v4

- name: Check out xchange
uses: actions/checkout@v4
with:
repository: Smithsonian/xchange
path: xchange

- name: install doxygen
run: sudo apt-get install doxygen

- name: Build xchange shared libs
run: make -C xchange shared

- name: Install to default location
run: sudo make install

38 changes: 38 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,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: local-dox
@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:
Expand All @@ -108,6 +145,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=<path> install')"
@echo " clean Removes intermediate products."
@echo " distclean Deletes all generated files."
@echo
Expand Down
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
```

-----------------------------------------------------------------------------

<a name="linking"></a>
Expand Down

0 comments on commit aa2ea2d

Please sign in to comment.