-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathMakefile
106 lines (82 loc) · 2.99 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
CC ?= cc
AR ?= ar
LN ?= ln
RANLIB ?= ranlib
INSTALL ?= install
MEMO_PREFIX ?=
MEMO_SUB_PREFIX ?= /usr
LIBDIR ?= $(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/lib
INCLUDEDIR ?= $(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/include
DEFAULT_INTERPRETER ?= /bin/sh
SOVER := 1
SRC := execl.c execv.c get_new_argv.c posix_spawn.c system.c utils.c
PWD_SRC := getgrent.c getpwent.c pwcache.c getusershell.c
WRAP_SRC := fake_getgrent.c fake_getpwent.c fake_getusershell.c
ifeq ($(shell uname -s), Linux)
CFLAGS += -fPIE -fPIC
endif
ifeq ($(DEBUG),1)
CFLAGS += -g3
endif
LIBIOSEXEC_PREFIXED_ROOT ?= 0
SHEBANG_REDIRECT_PATH ?= /
ifeq ($(LIBIOSEXEC_PREFIXED_ROOT),1)
SRC += $(PWD_SRC)
else
SRC += $(WRAP_SRC)
endif
CFLAGS += -D_PW_NAME_LEN=MAXLOGNAME -DLIBIOSEXEC_INTERNAL -DLIBIOSEXEC_PREFIXED_ROOT=$(LIBIOSEXEC_PREFIXED_ROOT) -DDEFAULT_INTERPRETER='"$(DEFAULT_INTERPRETER)"'
DEFAULT_PATH ?= /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games
all: libiosexec.$(SOVER).dylib libiosexec.a
%.o: %.c libiosexec_private.h
$(CC) -c $(CFLAGS) -fvisibility=hidden $<
libiosexec_private.h: libiosexec_private.h.in
sed -e "s|@DEFAULT_PATH@|$(shell printf "%s\n" "$(DEFAULT_PATH)" | tr ':' '\n' | sed "p; s|^|$(SHEBANG_REDIRECT_PATH)|" | tr '\n' ':' | sed 's|:$$|\n|')|" -e "s|@SHEBANG_REDIRECT_PATH@|$(SHEBANG_REDIRECT_PATH)|" $^ > $@
libiosexec.$(SOVER).dylib: $(SRC:%.c=%.o)
ifeq ($(shell uname -s), Linux)
$(CC) $(CFLAGS) $(LDFLAGS) -fvisibility=hidden -DLIBIOSEXEC_INTERNAL -lbsd -shared -o $@ $^
else ifeq ($(shell uname -s), Darwin)
$(CC) $(CFLAGS) $(LDFLAGS) -fvisibility=hidden -DLIBIOSEXEC_INTERNAL -install_name $(LIBDIR)/$@ -shared -o $@ $^
endif
libiosexec.a: $(SRC:%.c=%.o)
$(AR) cru $@ $^
$(RANLIB) $@
TEST_progs := tests/t_ie_execve \
tests/t_ie_execv \
tests/t_ie_execle \
tests/t_ie_execl \
tests/t_ie_execvpe \
tests/t_ie_execvp \
tests/t_ie_execlp \
tests/t_ie_posix_spawn \
tests/t_ie_posix_spawnp \
tests/t_ie_system
TEST_scripts := tests/scripts/empty.sh \
tests/scripts/normal.sh \
tests/scripts/normalwitharg.sh \
tests/scripts/normalwithmultipleargs.sh
%: %.c libiosexec.a
$(CC) -I. $(CFLAGS) $(LDFLAGS) -o $@ $^
check: $(TEST_progs)
success=0; \
PATH="$(PATH):$(PWD)/tests/scripts"; \
for test in $^; do \
for script in $(TEST_scripts); do \
printf '%s %s... ' $$(basename $$test) $$(basename $$script); \
if $$test $$script; then \
printf 'success\n'; \
else \
success=1; \
printf 'FAILED!\n'; \
fi; \
done; \
done; \
exit $$success
install: all
$(INSTALL) -Dm644 libiosexec.$(SOVER).dylib $(DESTDIR)$(LIBDIR)/libiosexec.$(SOVER).dylib
$(LN) -sf libiosexec.$(SOVER).dylib $(DESTDIR)$(LIBDIR)/libiosexec.dylib
$(INSTALL) -Dm644 libiosexec.a $(DESTDIR)$(LIBDIR)/libiosexec.a
$(INSTALL) -Dm644 libiosexec.h $(DESTDIR)$(INCLUDEDIR)/libiosexec.h
clean:
rm -rf libiosexec.$(SOVER).dylib libiosexec.a *.o tests/test tests/*.dSYM *.dSYM libiosexec_private.h $(TEST_progs)
.PHONY: all clean install