1# Makefile 2 3.PHONY: build all install installsrc installhdrs test check Makefile testexcldebug 4PRODUCT=regressions 5 6TESTDIRS := . 7 8HFILES := $(shell find $(TESTDIRS) -type f -name \*.h -print) 9ALL_CFILES := $(shell find $(TESTDIRS) -type f -name \*.c -print) 10ALL_CXXFILES := $(shell find $(TESTDIRS) -type f -name \*.cpp -print) 11ALL_MFILES := $(shell find $(TESTDIRS) -type f -name \*.m -print) 12SHFILES := $(shell find $(TESTDIRS) -type f -name \*.sh -print) 13TFILES := $(shell find $(TESTDIRS) -type f -name \*.t -print) 14 15PAREN := ( 16CTESTS := $(shell grep -l 'main[ \t]*$(PAREN)' $(ALL_CFILES) /dev/null) 17CXXTESTS := $(shell grep -l 'main[ \t]*$(PAREN)' $(ALL_CXXFILES) /dev/null) 18MTESTS := $(shell grep -l 'main[ \t]*$(PAREN)' $(ALL_MFILES) /dev/null) 19SHTESTS := $(SHFILES) 20 21EXCLSTR := NO_AUTOMATED_TESTING 22EXCL_CTESTS := $(shell grep -l $(EXCLSTR) $(CTESTS) /dev/null) 23EXCL_CXXTESTS := $(shell grep -l $(EXCLSTR) $(CXXTESTS) /dev/null) 24EXCL_MTESTS := $(shell grep -l $(EXCLSTR) $(MTESTS) /dev/null) 25EXCL_SHTESTS := $(shell grep -l $(EXCLSTR) $(SHTESTS) /dev/null) 26EXCL_TESTS := $(EXCL_CTESTS) $(EXCL_CXXTESTS) $(EXCL_MTESTS) $(EXCL_SHTESTS) 27 28CFILES = $(filter-out $(CTESTS),$(ALL_CFILES)) 29CXXFILES = $(filter-out $(CXXTESTS),$(ALL_CXXFILES)) 30MFILES = $(filter-out $(MTESTS),$(ALL_MFILES)) 31 32BUILT_PRODUCTS_DIR ?= $(shell echo $(LOCAL_BUILD_DIR)) 33ifeq "" "$(BUILT_PRODUCTS_DIR)" 34 BUILT_PRODUCTS_DIR = $(SYMROOT) 35 ifeq "" "$(BUILT_PRODUCTS_DIR)" 36 BUILT_PRODUCTS_DIR = build 37 endif 38endif 39SYMROOT ?= $(BUILT_PRODUCTS_DIR) 40OBJROOT ?= $(BUILT_PRODUCTS_DIR)/intermediates/$(PRODUCT).build 41SRCROOT ?= $(shell /bin/pwd) 42DSTROOT ?= "" 43 44INSTALLDIR := $(DSTROOT)/usr/local/bin 45 46SRCFILES := Makefile $(HFILES) $(CTESTS) $(CFILES) $(CXXTESTS) $(CXXFILES) $(MTESTS) $(MFILES) 47 48BUILT_CTARGETS := $(addprefix $(BUILT_PRODUCTS_DIR)/,$(notdir $(basename $(CTESTS)))) 49BUILT_CXXTARGETS := $(addprefix $(BUILT_PRODUCTS_DIR)/,$(notdir $(basename $(CXXTESTS)))) 50BUILT_MTARGETS := $(addprefix $(BUILT_PRODUCTS_DIR)/,$(notdir $(basename $(MTESTS)))) 51BUILT_TARGETS := $(BUILT_CTARGETS) $(BUILT_CXXTARGETS) $(BUILT_MTARGETS) 52EXCL_TARGETS := $(addprefix $(BUILT_PRODUCTS_DIR)/, $(notdir $(basename $(EXCL_TESTS)))) 53TEST_TARGETS := $(filter-out $(EXCL_TARGETS),$(BUILT_TARGETS)) 54 55COFILES := $(addprefix $(OBJROOT)/,$(addsuffix .o, $(basename $(CFILES)))) 56CXXOFILES := $(addprefix $(OBJROOT)/,$(addsuffix .o, $(basename $(CXXFILES)))) 57MOFILES := $(addprefix $(OBJROOT)/,$(addsuffix .o, $(basename $(MFILES)))) 58OFILES := $(COFILES) $(CXXOFILES) $(MOFILES) 59 60TEST_COFILES := $(addprefix $(OBJROOT)/,$(addsuffix .o, $(basename $(CTESTS)))) 61TEST_CXXOFILES := $(addprefix $(OBJROOT)/,$(addsuffix .o, $(basename $(CXXTESTS)))) 62TEST_MOFILES := $(addprefix $(OBJROOT)/,$(addsuffix .o, $(basename $(MTESTS)))) 63TEST_OFILES := $(TEST_COFILES) $(TEST_CXXOFILES) $(TEST_MOFILES) 64 65OBJDIRS := $(sort $(OBJROOT) $(dir $(OFILES) $(TEST_OFILES))) 66 67# 68# Assume final load with cc, not ld 69# 70 71C_FRAMEWORK_SEARCH_PATHS = $(BUILT_PRODUCTS_DIR) 72CPP_FRAMEWORK_SEARCH_PATHS = $(BUILT_PRODUCTS_DIR) \ 73 /System/Library/PrivateFrameworks /usr/local/SecurityPieces/Frameworks 74M_FRAMEWORK_SEARCH_PATHS = $(BUILT_PRODUCTS_DIR) \ 75 /System/Library/PrivateFrameworks 76STD_HEADER_SEARCH_PATHS = $(SRCROOT)/test 77STD_LIBARY_SEARCH_PATHS = $(BUILT_PRODUCTS_DIR) 78 79ALL_HEADER_SEARCH_PATHS = $(HEADER_SEARCH_PATHS) $(STD_HEADER_SEARCH_PATHS) 80ALL_LIBARY_SEARCH_PATHS = $(LIBARY_SEARCH_PATHS) $(STD_LIBARY_SEARCH_PATHS) 81 82STD_LIBRARIES = 83ALL_LIBRARIES = $(STD_LIBRARIES) $(LIBRARIES:lib%.a=%) 84 85C_FRAMEWORKS = Security CoreFoundation 86CPP_FRAMEWORKS = $(C_FRAMEWORKS) #security_utilities 87M_FRAMEWORKS = $(C_FRAMEWORKS) SecurityFoundation Foundation 88 89C_FINCLUDES = $(addprefix -F,$(C_FRAMEWORK_SEARCH_PATHS) \ 90 $(FRAMEWORK_SEARCH_PATHS)) 91CPP_FINCLUDES = $(addprefix -F,$(CPP_FRAMEWORK_SEARCH_PATHS) \ 92 $(FRAMEWORK_SEARCH_PATHS)) 93M_FINCLUDES = $(addprefix -F,$(M_FRAMEWORK_SEARCH_PATHS) \ 94 $(FRAMEWORK_SEARCH_PATHS)) 95ALL_INCLUDES = $(addprefix -I,$(ALL_HEADER_SEARCH_PATHS)) 96 97# 98# Override this from the make command line to add e.g. -lMallocDebug 99# 100CMDLINE_LDFLAGS= 101 102# 103C_LDFLAGS = $(CMDLINE_LDFLAGS) \ 104 $(C_FINCLUDES) \ 105 $(addprefix -framework ,$(C_FRAMEWORKS) $(FRAMEWORKS)) \ 106 $(addprefix -L,$(ALL_LIBARY_SEARCH_PATHS)) \ 107 $(addprefix -l,$(ALL_LIBARIES)) \ 108 $(OTHER_LDFLAGS) 109CPP_LDFLAGS = $(CMDLINE_LDFLAGS) \ 110 $(CPP_FINCLUDES) \ 111 $(addprefix -framework ,$(CPP_FRAMEWORKS) $(FRAMEWORKS)) \ 112 $(addprefix -L,$(ALL_LIBARY_SEARCH_PATHS)) \ 113 $(addprefix -l,$(ALL_LIBARIES)) \ 114 $(OTHER_LDFLAGS) /usr/local/lib/libsecurity_utilities.a 115M_LDFLAGS = $(CMDLINE_LDFLAGS) \ 116 $(M_FINCLUDES) \ 117 $(addprefix -framework ,$(M_FRAMEWORKS) $(FRAMEWORKS)) \ 118 $(addprefix -L,$(ALL_LIBARY_SEARCH_PATHS)) \ 119 $(addprefix -l,$(ALL_LIBARIES)) \ 120 $(OTHER_LDFLAGS) 121 122###WARNING_CFLAGS = -Wno-four-char-constants -Wall -Werror 123WARNING_CFLAGS = -Wno-four-char-constants -Wall -Wno-deprecated-declarations 124STD_CFLAGS= -g 125DEBUG_CFLAGS= 126 127ALL_CFLAGS = $(C_FINCLUDES) $(ALL_INCLUDES) $(STD_CFLAGS) \ 128 $(WARNING_CFLAGS) $(OTHER_CFLAGS) $(DEBUG_CFLAGS) 129ALL_CXXFLAGS = $(CPP_FINCLUDES) $(ALL_INCLUDES) $(STD_CFLAGS) \ 130 $(WARNING_CFLAGS) $(OTHER_CXXFLAGS) $(DEBUG_CFLAGS) 131ALL_MFLAGS = $(M_FINCLUDES) $(ALL_INCLUDES) $(STD_CFLAGS) \ 132 $(WARNING_CFLAGS) $(OTHER_CFLAGS) $(DEBUG_CFLAGS) 133 134build: $(OTHER_DEPENDENCIES) $(OBJDIRS) $(BUILT_TARGETS) 135 136all: build 137 138ppc64: 139 make CMDLINE_LDFLAGS="-arch ppc64" DEBUG_CFLAGS="-arch ppc64" 140 141install: build 142 install -d -m 0755 $(INSTALLDIR) 143 install -p -m 0755 $(BUILT_TARGETS) $(INSTALLDIR) 144 145installhdrs: 146 147installsrc: 148 mkdir $(DSTROOT) 149 150clean: 151 rm -f $(BUILT_TARGETS) $(OFILES) $(TEST_OFILES) $(OTHER_TO_CLEAN) 152# echo rm -rf $(OBJDIRS) 153 154test: build 155 @perl -Iinc -e 'use MyHarness; Test::Harness::runtests @ARGV;' $(sort $(TEST_TARGETS)) $(sort $(TFILES)) 156 157testexcldebug: build 158 @echo EXCL_CTESTS: $(EXCL_CTESTS) 159 @echo EXCL_CXXTESTS: $(EXCL_CXXTESTS) 160 @echo EXCL_MTESTS: $(EXCL_MTESTS) 161 @echo EXCL_SHTESTS: $(EXCL_SHTESTS) 162 @echo EXCL_TESTS: $(EXCL_TESTS) 163 @echo BUILT_TARGETS: $(BUILT_TARGETS) 164 @echo TEST_TARGETS: $(TEST_TARGETS) 165 166LOCAL_OFILES := $(addsuffix .o, $(basename $(CFILES) $(CXXFILES) $(MFILES))) 167OFILES := $(LOCAL_OFILES:%=$(OBJROOT)/%) 168 169$(BUILT_CTARGETS): $(COFILES) $(TEST_COFILES) 170 $(CC) -o $@ $(filter %/$(notdir $@).o,$(TEST_COFILES)) $(OFILES) $(C_LDFLAGS) 171 172$(BUILT_CXXTARGETS): $(COFILES) $(CXXOFILES) $(TEST_CXXOFILES) 173 $(CXX) -o $@ $(filter %/$(notdir $@).o,$(TEST_CXXOFILES)) $(OFILES) $(CPP_LDFLAGS) 174 175$(BUILT_MTARGETS): $(COFILES) $(MOFILES) $(TEST_MOFILES) 176 $(CC) -o $@ $(filter %/$(notdir $@).o,$(TEST_MOFILES)) $(OFILES) $(M_LDFLAGS) 177 178$(OBJDIRS): 179 @mkdir -p $@ 180 181$(OBJROOT)/%.o: %.c 182 $(CC) $(ALL_CFLAGS) -c -o $(OBJROOT)/$*.o $< 183 184$(OBJROOT)/%.o: %.cpp 185 $(CXX) $(ALL_CXXFLAGS) -c -o $(OBJROOT)/$*.o $< 186 187$(OBJROOT)/%.o: %.m 188 $(CC) $(ALL_MFLAGS) -c -o $(OBJROOT)/$*.o $< 189 190$(OFILES) $(TEST_OFILES): $(HFILES) 191