1##
2# Makefile for lsof
3##
4# Allan Nathanson <ajn@apple.com>
5##
6
7# Project info
8Project  = lsof
9UserType = Administrator
10ToolType = Commands
11
12# It's a GNU Source project
13# Well, not really but we can make it work.
14GnuNoChown = YES
15GnuAfterInstall = add_supporting_files
16include $(MAKEFILEPATH)/CoreOS/ReleaseControl/GNUSource.make
17
18Install_Target = install-strip
19
20Configure = $(BuildDirectory)/Configure
21Configure_Flags = -n darwin
22
23UNIQUE := $(shell echo $$$$)
24
25##
26# The "Configure" script wants to create symlinks within the source
27# tree. Since we're not supposed to modify the sources we'll create
28# a 'shadow tree' and use that directory instead.
29##
30lazy_install_source:: install-patched-source
31
32##
33# Change the "Configure" script
34##
35
36LSOF_CONFIGURE  = $(OBJROOT)/Configure
37LSOF_MAKEFILE3  = $(OBJROOT)/dialects/darwin/libproc/Makefile
38
39install-patched-source: shadow_source
40	$(_v) echo "*** patching Configure"
41	$(_v) $(CAT) $(LSOF_CONFIGURE)						>  /tmp/build.lsof.$(UNIQUE)
42	$(_v) echo '/^[ 	]*900|1000|1100|1200|1300)/n'			>  /tmp/build.lsof.$(UNIQUE)-ed
43	$(_v) echo '/^[ 	]*;;/i'						>> /tmp/build.lsof.$(UNIQUE)-ed
44	$(_v) echo '      if [ -n "$${SDKROOT}" ]; then'			>> /tmp/build.lsof.$(UNIQUE)-ed
45	$(_v) echo '        LSOF_AR="`xcrun -sdk $${SDKROOT} -find ar` cr"'	>> /tmp/build.lsof.$(UNIQUE)-ed
46	$(_v) echo '        LSOF_CC="`xcrun -sdk $${SDKROOT} -find cc`"'	>> /tmp/build.lsof.$(UNIQUE)-ed
47	$(_v) echo '        LSOF_CFGF="$$LSOF_CFGF -isysroot $${SDKROOT}"'	>> /tmp/build.lsof.$(UNIQUE)-ed
48	$(_v) echo '        LSOF_INCLUDE="$${SDKROOT}/usr/include"'		>> /tmp/build.lsof.$(UNIQUE)-ed
49	$(_v) echo '        LSOF_RANLIB="`xcrun -sdk $${SDKROOT} -find ranlib`"'>> /tmp/build.lsof.$(UNIQUE)-ed
50	$(_v) echo '      else'							>> /tmp/build.lsof.$(UNIQUE)-ed
51	$(_v) echo '        LSOF_AR="`xcrun -sdk / -find ar` cr"'		>> /tmp/build.lsof.$(UNIQUE)-ed
52	$(_v) echo '        LSOF_CC="`xcrun -sdk / -find cc`"'			>> /tmp/build.lsof.$(UNIQUE)-ed
53	$(_v) echo '        LSOF_RANLIB="`xcrun -sdk / -find ranlib`"'		>> /tmp/build.lsof.$(UNIQUE)-ed
54	$(_v) echo '      fi'							>> /tmp/build.lsof.$(UNIQUE)-ed
55	$(_v) echo '.'								>> /tmp/build.lsof.$(UNIQUE)-ed
56	$(_v) echo '/^[ 	]*1400)/n'					>> /tmp/build.lsof.$(UNIQUE)-ed
57	$(_v) echo '/^[ 	]*;;/i'						>> /tmp/build.lsof.$(UNIQUE)-ed
58	$(_v) echo '      LSOF_UNSUP=""'					>> /tmp/build.lsof.$(UNIQUE)-ed
59	$(_v) echo '      LSOF_TSTBIGF=" "'					>> /tmp/build.lsof.$(UNIQUE)-ed
60	$(_v) echo '      if [ -n "$${SDKROOT}" ]; then'			>> /tmp/build.lsof.$(UNIQUE)-ed
61	$(_v) echo '        LSOF_AR="`xcrun -sdk $${SDKROOT} -find ar` cr"'	>> /tmp/build.lsof.$(UNIQUE)-ed
62	$(_v) echo '        LSOF_CC="`xcrun -sdk $${SDKROOT} -find cc`"'	>> /tmp/build.lsof.$(UNIQUE)-ed
63	$(_v) echo '        LSOF_CFGF="$$LSOF_CFGF -isysroot $${SDKROOT}"'	>> /tmp/build.lsof.$(UNIQUE)-ed
64	$(_v) echo '        LSOF_INCLUDE="$${SDKROOT}/usr/include"'		>> /tmp/build.lsof.$(UNIQUE)-ed
65	$(_v) echo '        LSOF_RANLIB="`xcrun -sdk $${SDKROOT} -find ranlib`"'>> /tmp/build.lsof.$(UNIQUE)-ed
66	$(_v) echo '      else'							>> /tmp/build.lsof.$(UNIQUE)-ed
67	$(_v) echo '        LSOF_CC="`xcrun -sdk / -find cc`"'			>> /tmp/build.lsof.$(UNIQUE)-ed
68	$(_v) echo '      fi'							>> /tmp/build.lsof.$(UNIQUE)-ed
69	$(_v) echo '.'								>> /tmp/build.lsof.$(UNIQUE)-ed
70	$(_v) echo '/^.* -mdynamic-no-pic/d'					>> /tmp/build.lsof.$(UNIQUE)-ed
71	$(_v) echo '.,$$s/DARWIN_XNU_HEADERS/SDKROOT/'				>> /tmp/build.lsof.$(UNIQUE)-ed
72	$(_v) echo '/^#include <time.h>/n'					>> /tmp/build.lsof.$(UNIQUE)-ed
73	$(_v) echo '/^main(){/i'						>> /tmp/build.lsof.$(UNIQUE)-ed
74	$(_v) echo 'int'							>> /tmp/build.lsof.$(UNIQUE)-ed
75	$(_v) echo '.'								>> /tmp/build.lsof.$(UNIQUE)-ed
76	$(_v) echo 'w'								>> /tmp/build.lsof.$(UNIQUE)-ed
77	$(_v) ed - /tmp/build.lsof.$(UNIQUE)					<  /tmp/build.lsof.$(UNIQUE)-ed	\
78										>  /dev/null
79	$(_v) $(RM) /tmp/build.lsof.$(UNIQUE)-ed
80	$(_v) $(MV) /tmp/build.lsof.$(UNIQUE) $(LSOF_CONFIGURE)
81	$(_v) $(CHMOD) +x $(LSOF_CONFIGURE)
82
83	$(_v) echo "*** patching dialects/darwin/libproc/Makefile"
84	$(_v) $(CAT) $(LSOF_MAKEFILE3) |							\
85		$(SED)	-E									\
86			-e 's@(#define[ 	]+LSOF_CC[ 	]+)"@\1"" // "@'		\
87			-e 's@(#define[ 	]+LSOF_CCDATE[ 	]+)"@\1"" // "@'		\
88			-e 's@(#define[ 	]+LSOF_CCFLAGS[ 	]+)"@\1"" // "@'	\
89			-e 's@(#define[ 	]+LSOF_CCV[ 	]+)"@\1"" // "@'		\
90			-e 's@(#define[ 	]+LSOF_HOST[ 	]+)"@\1"" // "@'		\
91			-e 's@(#define[ 	]+LSOF_LDFLAGS[ 	]+)"@\1"" // "@'	\
92			-e 's@(#define[ 	]+LSOF_LOGNAME[ 	]+)"@\1"" // "@'	\
93			-e 's@(#define[ 	]+LSOF_SYSINFO[ 	]+)"@\1"" // "@'	\
94			-e 's@(#define[ 	]+LSOF_USER[ 	]+)"@\1"" // "@'		\
95		> /tmp/build.lsof.$(UNIQUE)
96	$(_v) $(RM) $(LSOF_MAKEFILE3)
97	$(_v) $(MV) /tmp/build.lsof.$(UNIQUE) $(LSOF_MAKEFILE3)
98
99##
100# Change a few of compile time definitions
101##
102
103LSOF_MAKEFILE   = $(OBJROOT)/Makefile
104LSOF_MAKEFILE2  = $(OBJROOT)/lib/Makefile
105LSOF_MACHINE_H1 = $(OBJROOT)/dialects/darwin/kmem/machine.h
106LSOF_MACHINE_H2 = $(OBJROOT)/dialects/darwin/libproc/machine.h
107
108ConfigStamp2 = $(ConfigStamp)2
109
110configure:: $(ConfigStamp2)
111
112$(ConfigStamp2): $(ConfigStamp)
113	$(_v) echo "*** patching Makefile"
114	$(_v) $(CAT) $(LSOF_MAKEFILE) |								\
115		$(SED)	-e 's@^\(DEBUG=	\).*@\1 -Os -g@'					\
116			-e 's@^\(DS=	\).*@\1 '`xcrun -sdk $${SDKROOT} -find dsymutil`'@'	\
117		> /tmp/build.lsof.$(UNIQUE)
118	$(_v) $(RM) $(LSOF_MAKEFILE)
119	$(_v) $(MV) /tmp/build.lsof.$(UNIQUE) $(LSOF_MAKEFILE)
120
121	$(_v) echo "*** patching lib/Makefile"
122	$(_v) $(CAT) $(LSOF_MAKEFILE2) |					\
123		$(SED)	-e 's@^\(DEBUG=	\).*@\1 -Os -g@'			\
124		> /tmp/build.lsof.$(UNIQUE)
125	$(_v) $(RM) $(LSOF_MAKEFILE2)
126	$(_v) $(MV) /tmp/build.lsof.$(UNIQUE) $(LSOF_MAKEFILE2)
127
128	$(_v) echo "*** patching dialects/darwin/kmem/machine.h"
129	$(_v) $(CAT) $(LSOF_MACHINE_H1) |					\
130		$(SED)	-e 's@^.*\(#define.*HASSECURITY.*1\).*@\1@'		\
131			-e 's@^.*\(#define.*HASKERNIDCK.*1\).*@/* \1 */@'	\
132		> /tmp/build.lsof.$(UNIQUE)
133	$(_v) $(RM) $(LSOF_MACHINE_H1)
134	$(_v) $(MV) /tmp/build.lsof.$(UNIQUE) $(LSOF_MACHINE_H1)
135
136	$(_v) echo "*** patching dialects/darwin/libproc/machine.h"
137	$(_v) $(CAT) $(LSOF_MACHINE_H2) |					\
138		$(SED)	-e 's@^.*\(#define.*HASKERNIDCK.*1\).*@/* \1 */@'	\
139		> /tmp/build.lsof.$(UNIQUE)
140	$(_v) $(RM) $(LSOF_MACHINE_H2)
141	$(_v) $(MV) /tmp/build.lsof.$(UNIQUE) $(LSOF_MACHINE_H2)
142
143	$(_v) $(TOUCH) $(ConfigStamp2)
144
145# Open Source support files
146OSV = ${DSTROOT}/usr/local/OpenSourceVersions
147OSL = ${DSTROOT}/usr/local/OpenSourceLicenses
148
149add_supporting_files:
150	@echo "Adding Open Source support files"
151	$(_v) $(MKDIR) ${OSV}
152	$(_v) $(INSTALL_FILE) $(SRCROOT)/${Project}.plist ${OSV}/${Project}.plist
153	$(_v) $(MKDIR) ${OSL}
154	$(_v) $(CAT) ${SRCROOT}/lsof/00README				\
155		| $(SED) -n -e '/^License/,/\*\//p'			\
156		> ${OSL}/${Project}.txt
157	$(_v) echo ""										>> ${OSL}/${Project}.txt
158	$(_v) echo "In addition, the following copyright is included with the files"		>> ${OSL}/${Project}.txt
159	$(_v) echo "associated with the \"darwin\" dialect that use the <libproc.h> APIs."	>> ${OSL}/${Project}.txt
160	$(_v) echo ""										>> ${OSL}/${Project}.txt
161	$(_v) $(CAT) ${SRCROOT}/lsof/dialects/darwin/libproc/dproc.c	\
162		| $(SED) -n -e '6,34p'					\
163		| $(SED)    -e 's/^/    /'				\
164		>> ${OSL}/${Project}.txt
165	$(_v) $(CHOWN) $(Install_File_User):$(Install_File_Group) ${OSL}/${Project}.txt
166	$(_v) $(CHMOD) $(Install_File_Mode) ${OSL}/${Project}.txt
167