|
@@ -0,0 +1,103 @@
|
|
|
+# LIBRARY-DIRECTORY-MAKEFILE
|
|
|
+# conventions:
|
|
|
+# - all subdirectories containing a "Makefile.inc" are considered sublibraries
|
|
|
+# exception: "progs/" and "tests/" subdirectories!
|
|
|
+# - all ".C", ".cpp" and ".c" files in the current directory are linked to a
|
|
|
+# library
|
|
|
+# - the library depends on all sublibraries
|
|
|
+# - the library name is created with $(LIBNAME), i.e. it will be somehow
|
|
|
+# related to the directory name and with the extension .a
|
|
|
+# (e.g. lib1/sublib -> lib1_sublib.a)
|
|
|
+# - the library will be added to the default build list ALL_LIBRARIES
|
|
|
+
|
|
|
+# --------------------------------
|
|
|
+# - remember the last subdirectory
|
|
|
+#
|
|
|
+# set the variable $(SUBDIR) correctly to the current subdirectory. this
|
|
|
+# variable can be used throughout the current makefile.inc. The many
|
|
|
+# SUBDIR_before, _add, and everything are only required so that we can recover
|
|
|
+# the previous content of SUBDIR before exitting the makefile.inc
|
|
|
+
|
|
|
+SUBDIR_add:=$(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
|
|
|
+SUBDIR_before:=$(SUBDIR)
|
|
|
+SUBDIR:=$(strip $(SUBDIR_add))
|
|
|
+SUBDIR_before_$(SUBDIR):=$(SUBDIR_before)
|
|
|
+ifeq "$(SUBDIR)" "./"
|
|
|
+SUBDIR:=
|
|
|
+endif
|
|
|
+
|
|
|
+# ------------------------
|
|
|
+# - include subdirectories
|
|
|
+#
|
|
|
+# note the variables $(SUBDIRS_OF_$(SUBDIR)) are required later on to recover
|
|
|
+# the dependencies automatically. if you handle dependencies on your own, you
|
|
|
+# can also dump the $(SUBDIRS_OF_$(SUBDIR)) variable, and include the
|
|
|
+# makefile.inc of the subdirectories on your own...
|
|
|
+
|
|
|
+SUBDIRS_OF_$(SUBDIR):=$(patsubst %/Makefile.inc,%,$(wildcard $(SUBDIR)*/Makefile.inc))
|
|
|
+include $(SUBDIRS_OF_$(SUBDIR):%=%/Makefile.inc)
|
|
|
+
|
|
|
+# ----------------------------
|
|
|
+# - include local dependencies
|
|
|
+#
|
|
|
+# you can specify libraries needed by the individual objects or by the whole
|
|
|
+# directory. the object specific additional libraries are only considered
|
|
|
+# when compiling the specific object files
|
|
|
+# TODO: update documentation...
|
|
|
+
|
|
|
+-include $(SUBDIR)libdepend.inc
|
|
|
+
|
|
|
+$(foreach d,$(filter-out %progs %tests,$(SUBDIRS_OF_$(SUBDIR))),$(eval $(call PKG_DEPEND_INT,$(d))))
|
|
|
+
|
|
|
+# ---------------------------
|
|
|
+# - objects in this directory
|
|
|
+#
|
|
|
+# the use of the variable $(OBJS) is not mandatory. it is mandatory however
|
|
|
+# to update $(ALL_OBJS) in a way that it contains the path and name of
|
|
|
+# all objects. otherwise we can not include the appropriate .d files.
|
|
|
+
|
|
|
+OBJS:=$(patsubst %.cpp,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.cpp))) \
|
|
|
+ $(patsubst %.C,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.C))) \
|
|
|
+ $(shell grep -ls Q_OBJECT $(SUBDIR)*.h | sed -e's@^@/@;s@.*/@$(OBJDIR)moc_@;s@\.h$$@.o@') \
|
|
|
+ $(patsubst %.c,$(OBJDIR)%.o,$(notdir $(wildcard $(SUBDIR)*.c)))
|
|
|
+ALL_OBJS += $(OBJS)
|
|
|
+
|
|
|
+# ----------------------------
|
|
|
+# - binaries in this directory
|
|
|
+#
|
|
|
+# output of binaries in this directory. none of the variables has to be used.
|
|
|
+# but everything you add to $(ALL_LIBRARIES) and $(ALL_BINARIES) will be
|
|
|
+# compiled with `make all`. be sure again to add the files with full path.
|
|
|
+
|
|
|
+LIBRARY_BASENAME:=$(call LIBNAME,$(SUBDIR))
|
|
|
+ifneq "$(SUBDIR)" ""
|
|
|
+ALL_LIBRARIES+=$(LIBDIR)$(LIBRARY_BASENAME).$(LINK_FILE_EXTENSION)
|
|
|
+endif
|
|
|
+
|
|
|
+# ---------------------
|
|
|
+# - binary dependencies
|
|
|
+#
|
|
|
+# there is no way of determining the binary dependencies automatically, so we
|
|
|
+# follow conventions. the current library depends on all sublibraries.
|
|
|
+# all other dependencies have to be added manually by specifying, that the
|
|
|
+# current .pc file depends on some other .pc file. binaries depending on
|
|
|
+# libraries should exclusivelly use the .pc files as well.
|
|
|
+
|
|
|
+ifeq "$(SKIP_BUILD_$(OBJDIR))" "1"
|
|
|
+$(LIBDIR)$(LIBRARY_BASENAME).a:
|
|
|
+else
|
|
|
+$(LIBDIR)$(LIBRARY_BASENAME).a:$(OBJS) \
|
|
|
+ $(call PRINT_INTLIB_DEPS,$(PKGDIR)$(LIBRARY_BASENAME).a,.$(LINK_FILE_EXTENSION))
|
|
|
+endif
|
|
|
+
|
|
|
+$(PKGDIR)$(LIBRARY_BASENAME).pc: \
|
|
|
+ $(call PRINT_INTLIB_DEPS,$(PKGDIR)$(LIBRARY_BASENAME).pc,.pc)
|
|
|
+
|
|
|
+# -------------------
|
|
|
+# - subdir management
|
|
|
+#
|
|
|
+# as the last step, always add this line to correctly recover the subdirectory
|
|
|
+# of the makefile including this one!
|
|
|
+
|
|
|
+SUBDIR:=$(SUBDIR_before_$(SUBDIR))
|
|
|
+
|