summaryrefslogtreecommitdiff
path: root/src/Makefile.OSX
blob: 11ea91b3eb17c81cd8235da4cc5d9e6ef983d01f (plain)
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
#
# Notes:
#
#   * Compilation Defines:
#
#     MACOS_DYLD_INTERPOSE
#         - Use dlyd interposing instead of name-based function interception
#           (required since macOS Monterey)
#
#     FAKE_SLEEP
#         - Also intercept sleep(), nanosleep(), usleep(), alarm(), [p]poll()
#
#     FAKE_SETTIME
#         - Intercept clock_settime(), settimeofday(), and adjtime()
#
#     FAKE_PID
#         - Enable faked values for getpid() calls through FAKETIME_FAKEPID
#
#     FAKE_RANDOM
#         - Intercept getentropy(). Dangerous for production use.
#           See README about FAKE_RANDOM.
#
#     FAKE_STAT
#         - Enables time faking also for files' timestamps.
#
#     FAKE_FILE_TIMESTAMPS, FAKE_UTIME
#         - Enables time faking for the utime* functions.  If enabled via
#           FAKE_FILE_TIMESTAMPS, the faking is opt-in at runtime using
#           with the FAKE_UTIME environment variable. If enabled via
#           FAKE_UTIME, the faking is opt-out at runtime. Requires FAKE_STAT.
#
#     PTHREAD
#         - Define this to enable multithreading support.
#
#     PTHREAD_SINGLETHREADED_TIME
#         - Define this if you want to single-thread time() ... there ARE
#           possible caching side-effects in a multithreaded environment
#           without this, but the performance impact may require you to
#           try it unsynchronized.
#
#   * Compilation addition: second libMT target added for building the pthread-
#     enabled library as a separate library
#
#   * Compilation switch change: previous versions compiled using '-nostartfiles'
#     This is no longer the case since there is a 'startup' constructor for the library
#     which is used to activate the start-at times when specified. This also initializes
#     the dynamic disabling of the FAKE_STAT calls.
#
# By default, libfaketime will be compiled for your system's default architecture.
# To build for a different architecture, add -arch flags to CFLAGS and LDFLAGS.
#
# default to clang to support thread local variables
CC ?= clang
INSTALL ?= install

PREFIX ?= /usr/local

CFLAGS += -DFAKE_SLEEP -DFAKE_INTERNAL_CALLS -DPREFIX='"'${PREFIX}'"' $(FAKETIME_COMPILE_CFLAGS) -DMACOS_DYLD_INTERPOSE -DFAKE_SETTIME
LIB_LDFLAGS += -dynamiclib -current_version 0.9.9 -compatibility_version 0.7

SONAME = 1
LIBS = libfaketime.${SONAME}.dylib
BINS = faketime

all: ${LIBS} ${BINS}

libfaketime.${SONAME}.dylib: libfaketime.c
	${CC} -o $@ ${CFLAGS} ${LDFLAGS} ${LIB_LDFLAGS} -install_name ${PREFIX}/lib/faketime/$@ $<

faketime: faketime.c
	${CC} -o $@ ${CFLAGS} ${LDFLAGS} $<

clean:
	@rm -f ${OBJ} ${LIBS} ${BINS}

distclean: clean
	@echo

install: ${LIBS} ${BINS}
	@echo
	@echo "Copying the faketime libraries to ${DESTDIR}${PREFIX}/lib/faketime and the faketime wrapper script to ${DESTDIR}${PREFIX}/bin ..."
	$(INSTALL) -dm0755 "${DESTDIR}${PREFIX}/lib/faketime/"
	$(INSTALL) -m0644 ${LIBS} "${DESTDIR}${PREFIX}/lib/faketime/"
	$(INSTALL) -dm0755 "${DESTDIR}${PREFIX}/bin"
	$(INSTALL) -m0755 faketime "${DESTDIR}${PREFIX}/bin/faketime"

uninstall:
	for f in ${LIBS}; do rm -f "${DESTDIR}${PREFIX}/lib/faketime/$$f"; done
	rmdir "${DESTDIR}${PREFIX}/lib/faketime"
	rm -f "${DESTDIR}${PREFIX}/bin/faketime"

.PHONY: all clean distclean install uninstall