mirror of
https://github.com/rkd77/elinks.git
synced 2024-11-04 08:17:17 -05:00
db99a74777
Involves prefixing with $(srcdir) to some of the build rule variables. For the builddir we create Makefiles which simply include the srcdir Makefile. Add list make rule to get list of Makefiles to generate (find will get it wrong for builddirs nested in srcdir). There are still a few minor issues like the file paths echoed during make install ...
135 lines
3.5 KiB
Makefile
135 lines
3.5 KiB
Makefile
### The build commands and verbosity
|
|
|
|
# If we are verbose, we will show commands prefixed by $(Q) (which acts as
|
|
# @ in the non-verbose mode), and we will show the "real" cmds instead of
|
|
# their quiet versions (which are used in the non-verbose mode).
|
|
# Inspired by the Linux kernel build system.
|
|
ifdef V
|
|
Q =
|
|
quiet =
|
|
mquiet = masq_
|
|
else
|
|
Q = @
|
|
quiet = quiet_
|
|
mquiet = quiet_
|
|
endif
|
|
|
|
# Show the command (quiet or non-quiet version based on the assignment
|
|
# just above) and then execute it.
|
|
ncmd = $(if $($(quiet)cmd_$(1)),echo $($(quiet)cmd_$(1)) &&) $(cmd_$(1))
|
|
cmd = @$(if $($(quiet)cmd_$(1)),echo $($(quiet)cmd_$(1)) &&) $(cmd_$(1))
|
|
mcmd = @$(if $($(mquiet)cmd_$(1)),echo $($(mquiet)cmd_$(1)) &&) $(cmd_$(1))
|
|
|
|
quiet_cmd_compile = ' [CC] $(RELPATH)$@'
|
|
masq_cmd_compile = $(COMPILE) -c $<
|
|
cmd_compile = $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
|
|
|
|
# Rule to compile a set of .o files into one .o file
|
|
quiet_cmd_ld_objs = " [LD] $(RELPATH)$@"
|
|
cmd_ld_objs = $(LD) -r -o $@ $(filter $(OBJS), $^) \
|
|
$(foreach subdir,$(sort $(filter-out src,$(SUBDIRS))), \
|
|
`test -e $(subdir)/lib.o && echo $(subdir)/lib.o`)
|
|
|
|
quiet_cmd_link = ' [LINK] $(RELPATH)$@'
|
|
cmd_link = $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
|
|
# Recursive make
|
|
quiet_cmd_recmake = "[MAKE $$target] $(RELPATH)$$subdir"
|
|
cmd_recmake = $(MAKE) -C $$subdir $$target
|
|
|
|
quiet_cmd_installdata = " [INSTALL] $(RELPATH)$(2) -> $(3)"
|
|
cmd_installdata = $(INSTALL_DATA) $(2) $(3)
|
|
|
|
quiet_cmd_installprog = " [INSTALL] $(RELPATH)$(2) -> $(3)"
|
|
cmd_installprog = $(INSTALL_PROGRAM) $(2) $(3)
|
|
|
|
|
|
|
|
### Internal build rules
|
|
|
|
DEP_FILES_1 = $(foreach src,$(OBJS),.deps/$(src))
|
|
DEP_FILES = $(DEP_FILES_1:%.o=%.P)
|
|
|
|
DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
|
|
|
|
ifdef OBJS
|
|
-include $(DEP_FILES)
|
|
endif
|
|
|
|
%.o: $(srcdir)%.c
|
|
$(call mcmd,compile)
|
|
@-cp .deps/$(*F).pp .deps/$(*F).P; \
|
|
tr ' ' '\012' < .deps/$(*F).pp \
|
|
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
|
|
>> .deps/$(*F).P; \
|
|
rm .deps/$(*F).pp
|
|
|
|
ifdef SUBDIRS-yes
|
|
SUBDIRS += $(SUBDIRS-yes)
|
|
endif
|
|
|
|
ifdef OBJS-yes
|
|
OBJS += $(OBJS-yes)
|
|
endif
|
|
|
|
ifdef OBJS
|
|
lib.o: $(sort $(OBJS))
|
|
$(call cmd,ld_objs)
|
|
|
|
LIB_O = lib.o
|
|
CLEAN += $(OBJS) $(LIB_O)
|
|
endif
|
|
|
|
CLEAN += $(PROG)
|
|
|
|
all-default: $(LIB_O) $(PROGS) $(MAN1) $(MAN5)
|
|
|
|
list-default:
|
|
@echo '$(RELPATH)Makefile'
|
|
|
|
clean-default:
|
|
-test -z "$(CLEAN)" || $(RM) $(CLEAN)
|
|
|
|
install-default: all-default
|
|
ifdef PROGS
|
|
$(MKINSTALLDIRS) $(DESTDIR)$(bindir)
|
|
$(foreach file,$(PROGS), \
|
|
$(call ncmd,installprog,$(file),$(DESTDIR)$(bindir));)
|
|
endif
|
|
ifdef MAN1
|
|
$(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man1
|
|
$(foreach file,$(MAN1), \
|
|
$(call ncmd,installdata,$(file),$(DESTDIR)$(mandir)/man1);)
|
|
endif
|
|
ifdef MAN5
|
|
$(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man5
|
|
$(foreach file,$(MAN5), \
|
|
$(call ncmd,installdata,$(file),$(DESTDIR)$(mandir)/man5);)
|
|
endif
|
|
|
|
# Recursion:
|
|
|
|
.PHONY: all-recursive install-recursive clean-recursive list-recursive
|
|
all-recursive install-recursive clean-recursive list-recursive:
|
|
ifdef SUBDIRS
|
|
@target=`echo $@ | sed s/-recursive//`; \
|
|
for subdir in $(sort $(SUBDIRS)); do \
|
|
$(call ncmd,recmake) || exit 1; \
|
|
done
|
|
endif
|
|
|
|
all: all-recursive all-default all-local
|
|
install: install-recursive install-default install-local
|
|
clean: clean-recursive clean-default clean-local
|
|
list: list-recursive list-default
|
|
|
|
all-local:
|
|
install-local:
|
|
clean-local:
|
|
|
|
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
|
# Otherwise a system limit (for SysV at least) may be exceeded.
|
|
.NOEXPORT:
|
|
|
|
# vim:syntax=make
|