about summary refs log blame commit diff
path: root/Makefile.lib
blob: 449f19ad506fd9f3e76c9fc960a351546fbbc307 (plain) (tree)
1
2
3
4
5
6
7
8
9
10



                                          


         
                                                                                                       

        
                                                                                                  






                                    

                                                           








                                                                         

                                   
                       

                                               







                                   

                                                           








                                                                                                    

                                   
                            

                                               


     









                                                                                             







                            
default: all

here = $(dir $(lastword $(MAKEFILE_LIST)))

QUIET = @

%.o: %.cc
	$(QUIET) $(CXX) -o $@ -c $< -g -fPIC $(CXXFLAGS) $($@_CXXFLAGS) -MMD -MF $(basename $@).dep -MP

%.o: %.c
	$(QUIET) $(CC) -o $@ -c $< -g -fPIC $(CFLAGS) $($@_CFLAGS) -MMD -MF $(basename $@).dep -MP


# Generate Make rules for libraries.
libs_list :=

define LIBS_template =
  _d := $$($(1)_DIR)
  _srcs := $$(foreach src, $$($(1)_SOURCES), $$(_d)$$(src))
  _objs := $$(addsuffix .o, $$(basename $$(_srcs)))
  _libs := $$(foreach lib, $$($(1)_LIBS), $$(lib).a)
  _lib := $$(_d)$(1).a

  $$(_lib): $$(_objs)
	$(QUIET) ar crs $$@ $$?

  # Propagate CXXFLAGS to the individual object files.
  $$(foreach obj, $$(_objs), $$(eval $$(obj)_CXXFLAGS=$$($(1)_CXXFLAGS)))

  include $$(wildcard $$(_d)/*.dep)

  libs_list += $$(_lib)
  clean_list += $$(_d)*.a $$(_d)*.o $$(_d)*.dep
  dist_files += $$(_srcs)
endef


# Generate Make rules for programs.
programs_list :=

define PROGRAMS_template =
  _d := $$($(1)_DIR)
  _srcs := $$(foreach src, $$($(1)_SOURCES), $$(_d)$$(src))
  _objs := $$(addsuffix .o, $$(basename $$(_srcs)))
  _libs := $$(foreach lib, $$($(1)_LIBS), $$($$(lib)_DIR)$$(lib).a)
  _prog := $$(_d)$(1)

  $$(_prog): $$(_objs) $$(_libs)
	$(QUIET) g++ -o $$@ $$^ $$($(1)_LDFLAGS) $$(foreach lib, $$($(1)_LIBS), $$($$(lib)_LDFLAGS))

  # Propagate CXXFLAGS to the individual object files.
  $$(foreach obj, $$(_objs), $$(eval $$(obj)_CXXFLAGS=$$($(1)_CXXFLAGS)))

  include $$(wildcard $$(_d)/*.dep)

  programs_list += $$(_prog)
  clean_list += $$(_prog) $$(_d)*.o $$(_d)*.dep
  dist_files += $$(_srcs)
endef


# Distributing stuff.
dist_files :=

dist_name = $(PACKAGE_NAME)-$(PACKAGE_VERSION)

dist:
	@echo $(dist_files)
	$(QUIET) tar cvfj $(dist_name).tar.bz2 $(dist_files) --transform 's,^,$(dist_name)/,'


# Cleaning stuff.
clean_list :=

clean:
	rm -fv $(clean_list)

dryclean:
	@echo $(clean_list)