git.fiddlerwoaroof.com
Raw Blame History
CXXFLAGS += -fPIC -fno-stack-protector -std=c++11
CFLAGS += -fPIC -fno-stack-protector
LDFLAGS_COMMON = -lpam

ifeq ($(UNAME_S), Linux)
    LDFLAGS = $(LDFLAGS_COMMON) -l:libssl.a -l:libcrypto.a -ldl -lz
else
    LDFLAGS = $(LDFLAGS_COMMON) @LIBS@
endif

INTEGRATION_OBJS = sys_syslog.o sys_fstream.o sys_unistd.o sys_pwd.o sys_pam.o \
                   sys_stdlib.o sys_time.o
OBJS = dual_control.o request.o validator.o conversation.o user.o token.o logger.o session.o installer.o system.o generator.o base32.o random_source.o
TEST_SOURCES := $(wildcard *_test.cc)
TESTS := $(patsubst %.cc,%.out,$(TEST_SOURCES))
TESTRUNS := $(patsubst %.out,RUN_%,$(TESTS))

MODULELIB = pam_dual_control.so

UNAME_S := $(shell uname -s)

.PHONY: all
all: .depend dual_control.a dual_control

.PHONY: version
version:
	@echo COMPILER VERSION --------------------------------
	$(CXX) --version

dual_control.a: dual_control.o dual_control_integrate.o $(OBJS) $(INTEGRATION_OBJS)
	ar rvs $@ $^
	ranlib $@

dual_control: dual_control_tool.o $(OBJS) $(INTEGRATION_OBJS)
	$(CXX) $(CXXFLAGS) $(CPPFLAGS)  -o $@ $^ $(LDFLAGS)


.PHONY: clean
clean:
	@rm -f *.o *.a
	@rm -f *.out
	@rm ./.depend

.PHONY: distclean
distclean: clean
	@git clean -xdf

.depend: $(OBJS:.o=.cc) $(TEST_SOURCES)
	rm -f ./.depend
	$(CXX) -std=c++11 -MM $^ > ./.depend;

-include .depend

%_test.out: %_test.o $(OBJS)
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -o $@ $^ $(LDFLAGS)

RUN_%: %.out
	@echo running $<
	@./$<

.PHONY: test
test: $(TESTRUNS)
	@echo Tests Passing

.PHONY: install
install: $(OBJS) $(INTEGRATION_OBJS)
ifeq ($(UNAME_S), Linux)
	$(CXX) -lpam -shared -o $(DESTDIR)@PAM_MODULE_DIRECTORY@/$(MODULELIB) dual_control_integrate.o $(OBJS) $(INTEGRATION_OBJS) -l:libssl.a -l:libcrypto.a -ldl -lz
else
	@echo installation recipe not known for $(UNAME_S)
endif
	mkdir -p $(DESTDIR)/@bindir@
	cp dual_control $(DESTDIR)/@bindir@/
	cp setup_user_account.sh $(DESTDIR)/@bindir@/
	chmod a+x $(DESTDIR)/@bindir@/dual_control

.PHONY: format
format:
	@./format.sh *.cc *.h