summaryrefslogtreecommitdiffstats
path: root/Makefile
blob: be897fe117dba41522b1d069775209e16bef304a (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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130

export TSNIF_INCLUDE  = $(CURDIR)/include
export TSNIF_AUTOCONF = $(TSNIF_INCLUDE)/autoconf.make
include $(TSNIF_AUTOCONF)

# looks like DESTDIR is a standard, but prioritize ROOTDIR anyway
ifdef DESTDIR
ifndef ROOTDIR
ROOTDIR=$(DESTDIR)
endif
endif


ifneq ($(findstring $(MAKEFLAGS),w),w)
PRINT_DIR = --no-print-directory
else # "make -w"
NO_SUBDIR = :
endif

# nice output definition
# Mostly copied from kernel and git makefiles.

ifndef V
	QUIET_CC          = @echo "  CC" $@;
	QUIET_LD          = @echo "  LD" $@;
	QUIET_LEX         = @echo "  LE" $@;
	QUIET_YACC        = @echo "  YA" $@;
	QUIET_DEP         = @echo "  DEP" $@;
	QUIET_GEN         = @echo "  GEN" $@;
	QUIET_ASCIIDOC    = @echo "  ASCIIDOC" $@;
	QUIET_XMLTO       = @echo "  XMLTO" $@;

define install
	@echo -n "  INSTALL " `echo $(ROOTDIR)$2/$(notdir $1) | sed 's:[/]\+:/:g'` ; \
	mkdir -p $(ROOTDIR)$2; \
	install -m "ugo+$3" $1 $(ROOTDIR)$2; echo
endef
define remove
	@echo "  CLEAN  " $1; $(RM) -rf $1
endef
else
define remove
	$(RM) -rf $1
endef
define install
	mkdir -p $(ROOTDIR)$2; \
	install -m "ugo+$3" $1 $(ROOTDIR)$2; echo
endef
endif


.PHONY: all clean install release snapshot package tags cscope .FORCE-TSNIF-CFLAGS

all::

ifneq ($(MAKECMDGOALS),clean)
-include deps.make
endif

# main building schema
# Module subdir (src) are supposed to fill PROGRAMS and
# OBJS variables, and rule to link the module. The top makefile
# will do the rest.

PROGRAMS=
OBJS=

include src/Makefile

ALL_CFLAGS=-fPIC -Wall -Isrc -D_GNU_SOURCE -I$(TSNIF_INCLUDE)

%.o: %.c TSNIF-CFLAGS
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) $<

all:: $(PROGRAMS) TSNIF-CFLAGS

clean::
	$(call remove, $(OBJS) $(PROGRAMS))
	$(call remove, deps.make)

mrproper::
	git clean -xdf

snapshot:
	@$(MAKE) $(PRINT_DIR) package PKG_VER=$(CONFIG_TSNIF_VER)-`date "+%m%d%Y"`

release:
	@$(MAKE) $(PRINT_DIR) package PKG_VER=$(CONFIG_TSNIF_VER)

package:
	$(QUIET_PKG)rm -f tsnif-$(PKG_VER); ln -s . tsnif-$(PKG_VER); \
	echo "tsnif-$(PKG_VER)"; \
	for i in `find . -type f | cut -c 3- | grep -v git`; do \
		git checkout $$i > /dev/null 2>&1; \
		if [ x"$$?" == x"0" ]; then \
			echo "tsnif-$(PKG_VER)/$$i"; \
		fi; \
	done | tar cjvf tsnif-$(PKG_VER).tar.bz2 -T- > /dev/null 2>&1

# dependencies
# The gcc -M depedencies generation needs to repaired to include
# subdirectory name within the target.. at least I haven't find any
# gcc option to do that.

deps.make:
	$(QUIET_DEP)$(RM) -f deps.make; \
	(for obj in $(OBJS); do \
	src=`echo $$obj | sed "s/\.o/.c/"`; \
	$(CC) $(ALL_CFLAGS) -M -MT$$obj $$src;  \
	done) > deps.make

# utilities
tags:
	$(QUIET_GEN)$(RM) -f tags; \
	$(FIND) . -name '*.[hc]' -print | xargs ctags -a

cscope:
	$(QUIET_GEN)$(RM) -f cscope*; \
	$(FIND) . -name '*.[hc]' -print > cscope.files; \
	cscope -b -icscope.files

# detect prefix and cflags changes
TRACK_CFLAGS = $(subst ','\'',$(ALL_CFLAGS)):\
             $(prefix):$(exec_prefix):$(bindir):$(libdir):$(sysconfdir) #'

TSNIF-CFLAGS: .FORCE-TSNIF-CFLAGS
	@FLAGS='$(TRACK_CFLAGS)'; \
	if test x"$$FLAGS" != x"`cat TSNIF-CFLAGS 2>/dev/null`" ; then \
		echo "$$FLAGS" >TSNIF-CFLAGS; \
	fi