leocad/Makefile

181 lines
5.5 KiB
Makefile
Raw Normal View History

2011-09-07 21:06:51 +00:00
### ALL CONFIGURATION SHOULD BE IN CONFIG.MK, NOT HERE
include config.mk
### Module directories
MODULES := $(OSDIR) common
2012-02-11 01:14:46 +00:00
### Look for include files in each of the modules
CPPFLAGS += $(patsubst %,-I%,$(MODULES))
2013-01-06 19:24:25 +00:00
CPPFLAGS += -g -Wextra -Wall -Wno-unused-parameter
2011-09-07 21:06:51 +00:00
2012-02-11 01:14:46 +00:00
### Extra libraries if required
2011-09-07 21:06:51 +00:00
LIBS :=
2012-02-11 01:14:46 +00:00
### Each module will add to this
2011-09-07 21:06:51 +00:00
SRC :=
BIN := bin/leocad
OBJDIR := obj
2011-09-07 21:06:51 +00:00
2012-07-06 03:08:48 +00:00
ifeq ($(findstring $(MAKECMDGOALS), help config-help config clean veryclean source-tgz source-zip), )
2011-09-07 21:06:51 +00:00
-include $(OSDIR)/config.mk
2012-02-11 01:14:46 +00:00
endif
2011-09-07 21:06:51 +00:00
2012-02-11 01:14:46 +00:00
### Include the description for each module
2011-09-07 21:06:51 +00:00
include $(patsubst %,%/module.mk,$(MODULES))
2012-02-11 01:14:46 +00:00
### Determine the object files
OBJ := $(patsubst %.cpp,$(OBJDIR)/%.o,$(filter %.cpp,$(SRC)))
2011-09-07 21:06:51 +00:00
2012-02-11 01:14:46 +00:00
### Link the program
2013-01-12 19:53:29 +00:00
.PHONY: all static install
2011-09-07 21:06:51 +00:00
all: $(BIN)
static: bin/leocad.static
2012-02-11 01:14:46 +00:00
bin/leocad: $(OBJ) bin Makefile
@echo Linking $@
@$(CXX) -o $@ $(OBJ) $(LIBS) $(LDFLAGS)
2011-09-07 21:06:51 +00:00
2012-02-11 01:14:46 +00:00
bin/leocad.static: $(OBJ) bin Makefile
2011-09-07 21:06:51 +00:00
$(CXX) -static -o $@ $(OBJ) $(LIBS) $(LDFLAGS)
bin:
2012-02-11 01:14:46 +00:00
@mkdir bin
2011-09-07 21:06:51 +00:00
obj:
@mkdir $(OBJDIR) $(addprefix $(OBJDIR)/,$(MODULES))
2012-02-11 01:14:46 +00:00
### Include the C/C++ include dependencies
2012-07-06 03:08:48 +00:00
ifeq ($(findstring $(MAKECMDGOALS), help config-help config clean veryclean source-tgz source-zip), )
2011-09-07 21:06:51 +00:00
-include $(OBJ:.o=.d)
endif
2012-02-11 01:14:46 +00:00
### Calculate C/C++ include dependencies
$(OBJDIR)/%.d: %.cpp obj $(OSDIR)/config.mk
2012-02-11 01:14:46 +00:00
@$(CXX) -MM -MT '$(patsubst %.d,%.o, $@)' $(CXXFLAGS) $(CPPFLAGS) -w $< > $@
2011-09-07 21:06:51 +00:00
@[ -s $@ ] || rm -f $@
2012-02-11 01:14:46 +00:00
### Main compiler rule
$(OBJDIR)/%.o: %.cpp obj $(OSDIR)/config.mk
2012-02-11 01:14:46 +00:00
@echo $<
@$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o '$(patsubst %.cpp,%.o, $@)' $<
2011-09-07 21:06:51 +00:00
@[ -s $@ ] || rm -f $@
### Various cleaning functions
2013-01-06 15:39:40 +00:00
.PHONY: clean distclean veryclean spotless all
2011-09-07 21:06:51 +00:00
clean:
@[ ! -d $(OBJDIR) ] || find $(OBJDIR) -name \*.o | xargs rm -f
2011-09-07 21:06:51 +00:00
veryclean: clean
@rm -rf $(OBJDIR)
@rm -rf bin
@rm -rf arch $(OSDIR)/config.mk
2011-09-07 21:06:51 +00:00
2013-01-06 15:39:40 +00:00
distclean: veryclean
2011-09-07 21:06:51 +00:00
2012-02-11 01:14:46 +00:00
### Dependency stuff is done automatically, so these do nothing.
2011-09-07 21:06:51 +00:00
.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
### Rules to make various packaging
.PHONY: binary binary-tgz source-zip source-tgz source install
arch:
mkdir arch
2013-01-15 23:57:30 +00:00
desktop: obj
@echo "[Desktop Entry]" > $(OBJDIR)/leocad.desktop
@echo "Version=1.0" >> $(OBJDIR)/leocad.desktop
2013-01-15 23:57:30 +00:00
@echo "Name=LeoCAD" >> $(OBJDIR)/leocad.desktop
@echo "Comment=Create virtual LEGO models" >> $(OBJDIR)/leocad.desktop
@echo "Comment[nb]=Lag virtuelle LEGO-modeller" >> $(OBJDIR)/leocad.desktop
@echo "Comment[pt_BR]=Criar modelos virtuais de LEGO" >> $(OBJDIR)/leocad.desktop
@echo "Exec=$(DESTDIR)$(PREFIX)/bin/leocad %f" >> $(OBJDIR)/leocad.desktop
2013-01-15 23:57:30 +00:00
@echo "Terminal=false" >> $(OBJDIR)/leocad.desktop
@echo "Type=Application" >> $(OBJDIR)/leocad.desktop
2013-01-16 22:22:46 +00:00
@echo "Icon=$(DESTDIR)$(PREFIX)/share/pixmaps/leocad.svg" >> $(OBJDIR)/leocad.desktop
@echo "MimeType=application/vnd.leocad;application/x-ldraw;application/x-multi-part-ldraw;" >> $(OBJDIR)/leocad.desktop
2013-01-16 22:22:46 +00:00
@echo "Categories=Graphics;3DGraphics;Education;" >> $(OBJDIR)/leocad.desktop
2013-01-15 23:57:30 +00:00
install: $(BIN) desktop
2011-09-07 21:06:51 +00:00
install -d $(DESTDIR)$(PREFIX)/bin
install -c -m 0755 $(BIN) $(DESTDIR)$(PREFIX)/bin/
2013-01-12 19:53:29 +00:00
install -d $(DESTDIR)$(PREFIX)/share/man/man1
2011-09-07 21:06:51 +00:00
install -c -m 0644 docs/leocad.1 $(DESTDIR)$(PREFIX)/share/man/man1/
2013-01-12 19:53:29 +00:00
install -d $(DESTDIR)$(PREFIX)/share/leocad
2013-01-16 22:22:46 +00:00
install -c -m 0644 tools/icon/icon128.png $(DESTDIR)$(PREFIX)/share/leocad/icon.png
install -d $(DESTDIR)$(PREFIX)/share/applications
2013-01-15 23:57:30 +00:00
install -c -m 0644 $(OBJDIR)/leocad.desktop $(DESTDIR)$(PREFIX)/share/applications/
2013-01-16 22:22:46 +00:00
install -d $(DESTDIR)$(PREFIX)/share/pixmaps
install -c -m 0644 tools/icon/icon.svg $(DESTDIR)$(PREFIX)/share/pixmaps/leocad.svg
2013-01-18 00:49:21 +00:00
install -d $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/mimetypes/
rm -f $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/mimetypes/application-vnd.leocad.svg
ln -s $(DESTDIR)$(PREFIX)/share/pixmaps/leocad.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/mimetypes/application-vnd.leocad.svg
@-if test -z "$(DESTDIR)"; then \
gtk-update-icon-cache -f -t $(DESTDIR)$(PREFIX)/share/icons/hicolor; \
fi
install -d $(DESTDIR)$(PREFIX)/share/mime/packages
install -c -m 0644 linux/leocad-mime.xml $(DESTDIR)$(PREFIX)/share/mime/packages/
update-mime-database $(DESTDIR)$(PREFIX)/share/mime/
update-desktop-database
2011-09-07 21:06:51 +00:00
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)
2012-07-06 03:08:48 +00:00
arch/leocad-$(VERSION)-src.tgz: veryclean arch
2011-09-07 21:06:51 +00:00
rm -f $@
2012-07-06 03:08:48 +00:00
( cd .. ; tar --exclude=leocad/arch/\* --exclude=.svn -cvzf leocad/$@ leocad )
2011-09-07 21:06:51 +00:00
2012-07-06 03:08:48 +00:00
arch/leocad-$(VERSION)-src.zip: veryclean arch
2011-09-07 21:06:51 +00:00
rm -f $@
2012-07-06 03:08:48 +00:00
( cd .. ; zip -r leocad/$@ leocad -x '*/arch/*' -x '*/.svn/*' -x '*~' -x '*/core' -x '*/.#*')
2011-09-07 21:06:51 +00:00