-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmakefile
115 lines (93 loc) · 3.13 KB
/
makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# Proximoth Makefile
# Author: TechnicalUserX
# Project
PROJECT=proximoth
# Versioning
VERSION_MAJOR=1
VERSION_MINOR=0
VERSION_PATCH=0
VERSION_RELEASE=stable
# Date
DATE=21/10/2023
ifneq ("${VERSION_RELEASE}","stable")
VERSION=${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}-${VERSION_RELEASE}
else
VERSION=${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}
endif
# Miscellaneous
MKDIR_P=mkdir -p
# Source files, headers, objects
SRC_EXT=c
HDR_EXT=h
OBJ_EXT=o
SRC_DIR=src
HDR_DIR=include
SRC = $(shell find $(SRC_DIR) -type f -name "*.${SRC_EXT}")
OBJ = $(patsubst $(SRC_DIR)/%, $(BUILD_OBJ_DIR)/%, $(SRC:.${SRC_EXT}=.${OBJ_EXT}))
MAN_DIR=docs
IMG_DIR=images
TEST_DIR=tests
# Building
BUILD_DIR=build
BUILD_OBJ_DIR=${BUILD_DIR}/obj
BUILD_BIN_DIR=${BUILD_DIR}/bin
BUILD_HDR_DIR=${BUILD_DIR}/include
BUILD_MAN_DIR=${BUILD_DIR}/docs
# Manual Pages
MAN_SEC=1
MAN_PAGE=${BUILD_MAN_DIR}/${PROJECT}.${MAN_SEC}
# Installing
ifeq ("${PROXIMOTH_INSTALL}","nonlocal")
INSTALL_PREFIX=/usr
else
INSTALL_PREFIX=/usr/local
endif
INSTALL_BIN_DIR=${INSTALL_PREFIX}/bin
INSTALL_MAN_DIR=${INSTALL_PREFIX}/share/man/man1
INSTALL_DOC_DIR=${INSTALL_PREFIX}/share/doc/${PROJECT}
# Compilation
CC=gcc
CFLAGS=-Wall -Werror -Wpedantic -std=c11 -I${HDR_DIR} -I${BUILD_HDR_DIR}
LDFLAGS=-lpcap -lm -pthread
# Version Header
VERSION_HDR=${BUILD_HDR_DIR}/${PROJECT}/version/version.${HDR_EXT}
# Recipies
${PROJECT}: ${VERSION_HDR} ${OBJ} ${MAN_PAGE}
@$(shell if ! [ -d ${BUILD_BIN_DIR} ]; then ${MKDIR_P} ${BUILD_BIN_DIR}; fi)
@${CC} ${FLAGS} ${OBJ} ${LDFLAGS} -o ${BUILD_BIN_DIR}/${PROJECT}
${BUILD_OBJ_DIR}/%.${OBJ_EXT}: ${SRC_DIR}/%.${SRC_EXT}
@$(shell if ! [ -d $(dir $@) ]; then ${MKDIR_P} $(dir $@); fi)
@${CC} ${CFLAGS} -c $< -o $@
${VERSION_HDR}:
@$(shell if ! [ -d ${BUILD_HDR_DIR}/${PROJECT}/version ]; then ${MKDIR_P} ${BUILD_HDR_DIR}/${PROJECT}/version; fi)
@sed -e 's/@PROXIMOTH_VERSION_CONFIG@/${VERSION}/g' \
-e 's/@PROXIMOTH_VERSION_MAJOR_CONFIG@/${VERSION_MAJOR}/g' \
-e 's/@PROXIMOTH_VERSION_MINOR_CONFIG@/${VERSION_MINOR}/g' \
-e 's/@PROXIMOTH_VERSION_PATCH_CONFIG@/${VERSION_PATCH}/g' \
-e 's/@PROXIMOTH_VERSION_RELEASE_CONFIG@/${VERSION_RELEASE}/g' \
${HDR_DIR}/version.${HDR_EXT}.in > $@
${MAN_PAGE}:
ifneq (${PROXIMOTH_DOCKER},true)
$(shell if ! [ -d ${BUILD_MAN_DIR} ]; then ${MKDIR_P} ${BUILD_MAN_DIR}; fi)
@sed -e 's/@PROXIMOTH_VERSION@/${VERSION}/g' \
-e 's#@PROXIMOTH_DATE@#${DATE}#g' \
${MAN_DIR}/${PROJECT}.${MAN_SEC}.in > $@
@gzip -k ${BUILD_MAN_DIR}/${PROJECT}.${MAN_SEC}
endif
build: ${PROJECT}
version: ${VERSION_HDR}
clean:
@rm -rf ${BUILD_DIR}
install:
@install -D ${BUILD_BIN_DIR}/${PROJECT} --target-directory ${DESTDIR}${INSTALL_BIN_DIR}
ifneq (${PROXIMOTH_DOCKER},true)
@install -D ${BUILD_MAN_DIR}/${PROJECT}.${MAN_SEC}.gz --target-directory ${DESTDIR}${INSTALL_MAN_DIR}
@install -D ${IMG_DIR}/* --target-directory ${DESTDIR}${INSTALL_DOC_DIR}/${IMG_DIR}
@install -D LICENSE --target-directory ${DESTDIR}${INSTALL_DOC_DIR}
endif
uninstall:
@rm -f ${DESTDIR}${INSTALL_BIN_DIR}/${PROJECT}
ifneq (${PROXIMOTH_DOCKER},true)
@rm -f ${DESTDIR}${INSTALL_MAN_DIR}/${PROJECT}.${MAN_SEC}.gz
@rm -rf ${DESTDIR}${INSTALL_DOC_DIR}
endif