LIBTOOL=libtool

# defines source files and vpaths
include Sources

DEPENDS=$(SOURCES:.cpp=.d)

# What source objects are we building?
OBJECTS=$(SOURCES:.cpp=.o)

.PHONY: all clean cleandeps cleanobjs cleanlib libnoise libnoise.so libnoise.so.0

# hooks for future makefiles being able to make multiple SOs, or older SOs
libnoise: libnoise.so libnoise.a libnoise.la
libnoise.so: libnoise.so.0
libnoise.so.0: libnoise.so.0.3

# Real build targets
libnoise.so.0.3: $(OBJECTS)
	$(LIBTOOL) --mode=link $(CXX) $(LDFLAGS) -shared -Wl,-soname=libnoise.so.0 -o $@ $(OBJECTS:.o=.lo)

libnoise.a: $(OBJECTS)
	$(LIBTOOL) --mode=link $(CXX) $(LDFLAGS) -o $@ $(OBJECTS)
libnoise.la: $(OBJECTS)
	$(LIBTOOL) --mode=link $(CXX) $(LDFLAGS) -o $@ $(OBJECTS:.o=.lo)

clean:	cleandeps cleanobjs cleanlib
cleandeps:
	-rm $(DEPENDS)
cleanobjs:
	-rm $(OBJECTS)
	-rm $(OBJECTS:.o=.lo) #clean up after libtool
	-rm -rf .libs model/.libs module/.libs
cleanlib:
	-rm libnoise.so.0.3
	-rm libnoise.a
	-rm libnoise.la

# Utility rules
# Generates dependancy files:
%.d: %.cpp
	@set -e; rm -f $@; \
         $(CXX) -MM $(CPPFLAGS) $< > $@.$$$$; \
         sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
         rm -f $@.$$$$

# C and C++ libtool (rather than raw CXX/CC) use
%.o %.lo: %.cpp
	$(LIBTOOL) --mode=compile $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $(@:.lo=.o)

%.o %.lo: %.c
	$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $(@:.lo=.o)

# If dependancies have never been built this will produce a horde of
# "file not found" warnings and *then* build the deps.  Very odd.
include $(DEPENDS)
