cake
/
libp7
Archived
1
0
Fork 1
This repository has been archived on 2024-03-16. You can view files and clone it, but cannot push or open issues or pull requests.
libp7/Makefile

110 lines
3.2 KiB
Makefile
Executable File

#******************************************************************************#
# _____ _ #
# Makefile |_ _|__ _ _| |__ ___ _ _ #
# | Project : libp7 | |/ _ \| | | | '_ \ / _ \ | | | #
# | | (_) | |_| | | | | __/ |_| | #
# By: thomas <thomas@touhey.fr> |_|\___/ \__,_|_| |_|\___|\__, |.fr #
# Last updated: 2016/05/12 01:14:00 |___/ #
# #
#******************************************************************************#
# INCLUDE VARS
include Makefile.vars
# DEDUCED VARS
ALLOBJ = $(foreach mod,$(MODULES),$(SRC_$(mod):%=$(OBJDIR)/$(mod)/%.o))
ALLMAN = $(foreach s,$(MAN_SECTIONS),$(MAN_$(s):%=$(MANDIR)/man$(s)/%.$(s)))
# TARGETS
## General targets
## - Make it all
all: lib$(NAME).so
## Library-specific targets
## - Make a module object directory
$(MODULES:%=$(OBJDIR)/%):
$(MD) $@
## - Make a module object out of a module source file
define make-moduleobj-rule
$(OBJDIR)/$1/%.o: $(SRCDIR)/$1/%.c | $(OBJDIR)/$1
$(CC) -c -o $$@ $$< $(CFLAGS)
endef
$(foreach mod,$(MODULES), \
$(eval $(call make-moduleobj-rule,$(mod))))
## - Make the dynamic library
lib$(NAME).so: $(ALLOBJ)
$(LD) -o $@ $^ $(LDFLAGS)
## - Remove object files
clean:
$(RM) $(ALLOBJ)
## - Clean and remove final library
fclean: clean
$(RM) lib$(NAME).a lib$(NAME).so.$(VERSION) lib$(NAME).so
## - Remake library
re: fclean all
## - Install header
define make-installinc-rule
install-$(INCDIR)/$1.h: $(INCDIR)/$1.h
$(INST) -D -m 644 $(INCDIR)/$1.h $(IINCDIR)/$1.h
endef
$(foreach inc,$(INCPUB), \
$(eval $(call make-installinc-rule,$(inc))))
## - Install library
install: $(INCPUB:%=install-$(INCDIR)/%.h)
$(INST) -D -m 644 lib$(NAME).so $(ILIBDIR)/lib$(NAME).so.$(VERSION)
$(LN) lib$(NAME).so.$(VERSION) $(ILIBDIR)/lib$(NAME).so
$(if $(INSTALL_UDEV_RULE),$(INST) -D -m 644 udev.rules $(UDEVDIR)/60-casio-usb.rules)
## - Uninstall library
uninstall:
$(RM) $(ILIBDIR)/lib$(NAME).a $(ILIBDIR)/lib$(NAME).so*
$(RM) $(UDEVDIR)/60-casio-usb.rules
## - Reinstall library
reinstall: uninstall install
## Documentation related
## - Make manpages directories
$(MAN_SECTIONS:%=$(MANDIR)/man%):
$(MD) $@
## - Make-A-Manpage
define make-manpage-rule
$(MANDIR)/man$1/%.$1: $(DOCDIR)/%.$1.txt | $(MANDIR)/man$1
$(A2X) -f manpage -D $$| $$<
endef
$(foreach section, $(MAN_SECTIONS), \
$(eval $(call make-manpage-rule,$(section))))
## - Make all manpages
all-doc: $(ALLMAN)
## - Remove all manpages
clean-doc:
$(RM) $(ALLMAN)
## - Install-A-Manpage
define make-installmanpage-rule
install-$1-%:| $(MANDIR)/man$1/%.$1
$(INST) -D -m 644 $(MANDIR)/man$1/$$*.$1 $(IMANDIR)/man$1/$$*.$1
$(GZIP) $(IMANDIR)/man$1/$$*.$1
endef
$(foreach section, $(MAN_SECTIONS), \
$(eval $(call make-installmanpage-rule,$(section))))
## - Install manpages
install-doc: $(foreach s,$(MAN_SECTIONS),$(MAN_$(s):%=install-$(s)-%))
## PHONY
.PHONY: all clean fclean re $(INCPUB:%=install-$(INCDIR)/%.h) install
.PHONY: uninstall reinstall
.PHONY: all-doc clean-doc $(MAN_SECTIONS:%=install-%-%) install-doc
# END OF FILE