mirror of
https://github.com/leozide/leocad
synced 2025-01-30 20:34:56 +01:00
153 lines
3.5 KiB
Makefile
153 lines
3.5 KiB
Makefile
|
### ALL CONFIGURATION SHOULD BE IN CONFIG.MK, NOT HERE
|
||
|
include config.mk
|
||
|
|
||
|
### Module directories
|
||
|
MODULES := $(OSDIR) common
|
||
|
|
||
|
### look for include files in
|
||
|
### each of the modules
|
||
|
CPPFLAGS += $(patsubst %,-I%,$(MODULES)) $(OS)
|
||
|
CPPFLAGS += -g
|
||
|
|
||
|
### extra libraries if required
|
||
|
LIBS :=
|
||
|
|
||
|
### each module will add to this
|
||
|
SRC :=
|
||
|
|
||
|
BIN := bin/leocad
|
||
|
|
||
|
-include $(OSDIR)/config.mk
|
||
|
|
||
|
### include the description for
|
||
|
### each module
|
||
|
include $(patsubst %,%/module.mk,$(MODULES))
|
||
|
|
||
|
### determine the object files
|
||
|
OBJ := \
|
||
|
$(patsubst %.c,%.o,$(filter %.c,$(SRC))) \
|
||
|
$(patsubst %.cpp,%.o,$(filter %.cpp,$(SRC)))
|
||
|
|
||
|
### link the program
|
||
|
.PHONY: all static
|
||
|
|
||
|
all: $(BIN)
|
||
|
|
||
|
static: bin/leocad.static
|
||
|
|
||
|
bin/leocad: $(OBJ) bin
|
||
|
$(CXX) -o $@ $(OBJ) $(LIBS) $(LDFLAGS)
|
||
|
|
||
|
bin/leocad.static: $(OBJ) bin
|
||
|
$(CXX) -static -o $@ $(OBJ) $(LIBS) $(LDFLAGS)
|
||
|
|
||
|
bin:
|
||
|
mkdir bin
|
||
|
|
||
|
### include the C/C++ include
|
||
|
### dependencies
|
||
|
ifeq ($(findstring $(MAKECMDGOALS), help config-help config clean veryclean spotless), )
|
||
|
-include $(OBJ:.o=.d)
|
||
|
endif
|
||
|
|
||
|
### calculate C/C++ include
|
||
|
### dependencies
|
||
|
%.d: %.c
|
||
|
@[ -s $(OSDIR)/config.h ] || $(MAKE) config
|
||
|
@$(CC) -MM -MT '$(patsubst %.d,%.o, $@)' $(CFLAGS) $(CPPFLAGS) -w $< > $@
|
||
|
@[ -s $@ ] || rm -f $@
|
||
|
|
||
|
%.d: %.cpp
|
||
|
@[ -s $(OSDIR)/config.h ] || $(MAKE) config
|
||
|
@$(CXX) -MM -MT '$(patsubst %.d,%.o, $@)' $(CXXFLAGS) $(CPPFLAGS) -w $< > $@
|
||
|
@[ -s $@ ] || rm -f $@
|
||
|
|
||
|
### Various cleaning functions
|
||
|
.PHONY: clean veryclean spotless all
|
||
|
|
||
|
clean:
|
||
|
find $(MODULES) -name \*.o | xargs rm -f
|
||
|
|
||
|
veryclean: clean
|
||
|
find $(MODULES) -name \*.d | xargs rm -f
|
||
|
rm -rf bin
|
||
|
|
||
|
spotless: veryclean
|
||
|
rm -rf arch $(OSDIR)/config.mk $(OSDIR)/config.h
|
||
|
|
||
|
|
||
|
### dependency stuff is done automatically, so these do nothing.
|
||
|
.PHONY: dep depend
|
||
|
|
||
|
|
||
|
### Help function
|
||
|
.PHONY: help
|
||
|
|
||
|
help:
|
||
|
@echo 'Possible Targets are:'
|
||
|
@echo ' help (this is it)'
|
||
|
@echo ' all'
|
||
|
@echo ' install'
|
||
|
@echo ' binary'
|
||
|
@echo ' source'
|
||
|
@echo ' (binary and source can be called as'
|
||
|
@echo ' a -zip or -tgz variants)'
|
||
|
@echo ' clean'
|
||
|
@echo ' veryclean'
|
||
|
@echo ' spotless'
|
||
|
@echo
|
||
|
|
||
|
### Rules to make various packaging
|
||
|
.PHONY: binary binary-tgz source-zip source-tgz source install
|
||
|
|
||
|
arch:
|
||
|
mkdir arch
|
||
|
|
||
|
install: $(BIN)
|
||
|
install -d $(DESTDIR)$(PREFIX)/bin
|
||
|
install -d $(DESTDIR)$(PREFIX)/share/man/man1
|
||
|
install -c -m 0755 $(BIN) $(DESTDIR)$(PREFIX)/bin/
|
||
|
install -c -m 0644 docs/leocad.1 $(DESTDIR)$(PREFIX)/share/man/man1/
|
||
|
|
||
|
binary: binary-zip binary-tgz
|
||
|
|
||
|
binary-zip: arch/leocad-$(VERSION)-linux.zip
|
||
|
|
||
|
binary-tgz: arch/leocad-$(VERSION)-linux.tgz
|
||
|
|
||
|
source: source-tgz source-zip
|
||
|
|
||
|
source-tgz: arch/leocad-$(VERSION)-src.tgz
|
||
|
|
||
|
source-zip: arch/leocad-$(VERSION)-src.zip
|
||
|
|
||
|
### Create a directory with the files needed for a binary package
|
||
|
package-dir: arch all
|
||
|
mkdir leocad-$(VERSION)
|
||
|
cp bin/leocad leocad-$(VERSION)
|
||
|
cp CREDITS.txt leocad-$(VERSION)/CREDITS
|
||
|
cp README.txt leocad-$(VERSION)/README
|
||
|
cp docs/INSTALL.txt leocad-$(VERSION)/INSTALL
|
||
|
cp docs/LINUX.txt leocad-$(VERSION)/LINUX
|
||
|
cp docs/leocad.1 leocad-$(VERSION)
|
||
|
|
||
|
arch/leocad-$(VERSION)-linux.zip: package-dir
|
||
|
rm -f $@
|
||
|
zip -r $@ leocad-$(VERSION)
|
||
|
rm -rf leocad-$(VERSION)
|
||
|
|
||
|
arch/leocad-$(VERSION)-linux.tgz: package-dir
|
||
|
rm -f $@
|
||
|
tar -cvzf $@ leocad-$(VERSION)
|
||
|
rm -rf leocad-$(VERSION)
|
||
|
|
||
|
arch/leocad-$(VERSION)-src.tgz: arch veryclean
|
||
|
rm -f $@
|
||
|
( cd .. ; tar --exclude=leocad/arch/\* --exclude=CVS \
|
||
|
-cvzf leocad/$@ leocad )
|
||
|
|
||
|
arch/leocad-$(VERSION)-src.zip: arch veryclean
|
||
|
rm -f $@
|
||
|
( cd .. ; zip -r leocad/$@ leocad -x '*/arch/*' -x '*/CVS/*' -x '*~' -x '*/core' -x '*/.#*')
|
||
|
|