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 a6a56b2 commit 2a24a58
Show file tree
Hide file tree
Showing 3 changed files with 116 additions and 0 deletions.
60 changes: 60 additions & 0 deletions .github/workflows/install.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
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 xchange
uses: actions/checkout@v4
with:
repository: Smithsonian/xchange
path: xchange

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

- name: Build xchange dependency
run: |
make -C xchange shared
sudo make -C xchange install
- name: Build RedisX dependency
run: |
make -C redisx shared
sudo make -C redisx install
- name: Build smax-clib distro
run: make distro

- name: Install smax-clib in default location
run: sudo make install
44 changes: 44 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ export
.PHONY: all
all: shared static tools $(DOC_TARGETS) check

# Build for distribution
.PHONY: distro
distro: shared $(DOC_TARGETS)

# Shared libraries (versioned and unversioned)
.PHONY: shared
shared: $(LIB)/libsmax.so
Expand Down Expand Up @@ -99,6 +103,45 @@ Doxyfile.local: Doxyfile Makefile
local-dox: README-smax.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)/smax-clib
docdir ?= $(datarootdir)/doc/smax-clib
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 @@ -113,6 +156,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
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,18 @@ 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
```

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

Expand Down

0 comments on commit 2a24a58

Please sign in to comment.