]> git.saurik.com Git - apt.git/commitdiff
Static lib support
authorArch Librarian <arch@canonical.com>
Mon, 20 Sep 2004 16:51:39 +0000 (16:51 +0000)
committerArch Librarian <arch@canonical.com>
Mon, 20 Sep 2004 16:51:39 +0000 (16:51 +0000)
Author: jgg
Date: 1998-11-24 01:09:49 GMT
Static lib support

buildlib/defaults.mak
buildlib/library.mak
buildlib/staticlibrary.mak [new file with mode: 0644]

index f03236018da5a3f49fdb8ae4c1bc3727becf3829..754da1b6fb4d3d22424beb281d751ed05ed71ffa 100644 (file)
@@ -64,6 +64,10 @@ MANPAGE_H = $(BASE)/buildlib/manpage.mak
 PROGRAM_H = $(BASE)/buildlib/program.mak
 COPY_H = $(BASE)/buildlib/copy.mak
 
+ifdef STATICLIBS
+LIBRARY_H += $(BASE)/buildlib/staticlibrary.mak
+endif
+
 # Source location control
 # SUBDIRS specifies sub components of the module that
 # may be located in subdrictories of the source dir. 
@@ -105,14 +109,14 @@ $(INCLUDE)/%.h $(addprefix $(INCLUDE)/,$(addsuffix /%.h,$(HEADER_TARGETDIRS))) :
 # Compile rules are expected to call this macro after calling the compiler
 ifdef INLINEDEPFLAG
  define DoDep
-       sed -e "1s/.*:/$(subst /,\\/,$@):/" $(basename $(@F)).d > $(DEP)/$(basename $(@F)).d
+       sed -e "1s/.*:/$(subst /,\\/,$@):/" $(basename $(@F)).d > $(DEP)/$(@F).d
        -rm -f $(basename $(@F)).d
  endef
 else
  ifdef DEPFLAG
   define DoDep
        $(CXX) $(DEPFLAG) $(CPPFLAGS) -o $@ $<
-       sed -e "1s/.*:/$(subst /,\\/,$@):/" $(basename $(@F)).d > $(DEP)/$(basename $(@F)).d
+       sed -e "1s/.*:/$(subst /,\\/,$@):/" $(basename $(@F)).d > $(DEP)/$(@F).d
        -rm -f $(basename $(@F)).d
   endef
  else
index 4ac3760dc2e422c8063daa53337debb75fbb632a..8c8c2fa7ae4439ed02b63963bda3d3d7778c1447 100644 (file)
 # Some local definitions
 LOCAL := lib$(LIBRARY).so.$(MAJOR).$(MINOR)
 $(LOCAL)-OBJS := $(addprefix $(OBJ)/,$(addsuffix .opic,$(notdir $(basename $(SOURCE)))))
-$(LOCAL)-DEP := $(addprefix $(DEP)/,$(addsuffix .d,$(notdir $(basename $(SOURCE)))))
+$(LOCAL)-DEP := $(addprefix $(DEP)/,$(addsuffix .opic.d,$(notdir $(basename $(SOURCE)))))
 $(LOCAL)-HEADERS := $(addprefix $(INCLUDE)/,$(HEADERS))
 $(LOCAL)-SONAME := lib$(LIBRARY).so.$(MAJOR)
 $(LOCAL)-SLIBS := $(SLIBS)
+$(LOCAL)-LIBRARY := $(LIBARARY)
 
 # Install the command hooks
 headers: $($(LOCAL)-HEADERS)
@@ -33,7 +34,7 @@ veryclean: veryclean/$(LOCAL)
 clean/$(LOCAL):
        -rm -f $($(@F)-OBJS) $($(@F)-DEP)
 veryclean/$(LOCAL): clean/$(LOCAL)
-       -rm -f $($(@F)-HEADERS) $(LIB)/lib$(LIBRARY).so*
+       -rm -f $($(@F)-HEADERS) $(LIB)/lib$($(@F)-LIBRARY).so*
 
 # Build rules for the two symlinks
 .PHONY: $(LIB)/lib$(LIBRARY).so.$(MAJOR) $(LIB)/lib$(LIBRARY).so
diff --git a/buildlib/staticlibrary.mak b/buildlib/staticlibrary.mak
new file mode 100644 (file)
index 0000000..998ca5b
--- /dev/null
@@ -0,0 +1,54 @@
+# -*- make -*-
+
+# This creates a static library.
+
+# Input
+# $(SOURCE) - The source code to use
+# $(HEADERS) - Exported header files and private header files
+# $(LIBRARY) - The name of the library without lib or .so 
+
+# All output is writtin to .o files in the build directory
+
+# See defaults.mak for information about LOCAL
+
+# Some local definitions
+LOCAL := lib$(LIBRARY).a
+$(LOCAL)-OBJS := $(addprefix $(OBJ)/,$(addsuffix .o,$(notdir $(basename $(SOURCE)))))
+$(LOCAL)-DEP := $(addprefix $(DEP)/,$(addsuffix .o.d,$(notdir $(basename $(SOURCE)))))
+$(LOCAL)-HEADERS := $(addprefix $(INCLUDE)/,$(HEADERS))
+$(LOCAL)-LIB := $(LIB)/lib$(LIBRARY).a
+
+# Install the command hooks
+headers: $($(LOCAL)-HEADERS)
+library: $($(LOCAL)-LIB)
+clean: clean/$(LOCAL)
+veryclean: veryclean/$(LOCAL)
+
+# The clean rules
+.PHONY: clean/$(LOCAL) veryclean/$(LOCAL)
+clean/$(LOCAL):
+       -rm -f $($(@F)-OBJS) $($(@F)-DEP)
+veryclean/$(LOCAL): clean/$(LOCAL)
+       -rm -f $($(@F)-HEADERS) $($(@F)-LIB)
+
+# Build rules for the two symlinks
+.PHONY: $($(LOCAL)-LIB)
+       
+# The binary build rule
+$($(LOCAL)-LIB): $($(LOCAL)-HEADERS) $($(LOCAL)-OBJS)
+       echo Building library $@
+       -rm $@ > /dev/null 2>&1
+       $(AR) cq $@ $(filter %.o,$^)
+
+# Compilation rules
+vpath %.cc $(SUBDIRS)
+$(OBJ)/%.o: %.cc
+       echo Compiling $< to $@
+       $(CXX) -c $(INLINEDEPFLAG) $(CPPFLAGS) $(CXXFLAGS) -o $@ $<
+       $(DoDep)
+
+# Include the dependencies that are available
+The_DFiles = $(wildcard $($(LOCAL)-DEP))
+ifneq ($(words $(The_DFiles)),0)
+include $(The_DFiles)
+endif