1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-11-04 08:17:17 -05:00
elinks/Makefile.lib
Jonas Fonseca db99a74777 Add support for out-of-tree builds
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 ...
2005-10-20 03:49:40 +02:00

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