Makefile 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. # On Linux, TARGET can be Gtk2 (default) or Qt5
  2. # On FreeBSD, TARGET can be Gtk2 (default) or Qt5
  3. # On Windows, TARGET can be Win32 (default) or Qt5
  4. BGRABITMAP_DIR := bgrabitmap
  5. BGRACONTROLS_DIR := bgracontrols
  6. ifeq ($(OS),Windows_NT) # true for Windows_NT or later
  7. SHELL := C:/Windows/System32/cmd.exe /c
  8. UNAME := Windows
  9. COPY := winmake\copyfile
  10. REMOVE := winmake\remove
  11. REMOVEDIR := winmake\removedir
  12. CREATEDIR := winmake\createdir
  13. ECHOFILE := type
  14. THEN := &
  15. RUN :=
  16. NOERROR :=
  17. else
  18. UNAME := $(shell uname)
  19. ifeq ($(UNAME),FreeBSD)
  20. SHELL := /usr/local/bin/bash
  21. else
  22. SHELL := /bin/bash
  23. endif
  24. COPY := cp
  25. REMOVE := rm -f
  26. REMOVEDIR := rm -rf
  27. CREATEDIR := mkdir -p
  28. ECHOFILE := cat
  29. THEN := ;
  30. RUN := ./
  31. NOERROR := 2>/dev/null
  32. endif
  33. lazdir := $(shell $(ECHOFILE) lazdir $(NOERROR))
  34. fpcbin := $(shell $(ECHOFILE) fpcbin $(NOERROR))
  35. package := lazpaint
  36. ifeq ($(UNAME),Linux)
  37. TARGET ?= Gtk2
  38. prefix := $(shell $(ECHOFILE) prefix $(NOERROR))
  39. ifeq ($(MULTIBIN),1)
  40. package := lazpaint-$(shell echo $(TARGET) | tr A-Z a-z)
  41. prefix := /../$(package)$(prefix)
  42. endif
  43. USER_DIR = $(DESTDIR)$(prefix)
  44. BIN_DIR = $(USER_DIR)/bin
  45. SHARE_DIR=$(USER_DIR)/share
  46. RESOURCE_DIR=$(SHARE_DIR)/lazpaint
  47. ICON_DIR=$(SHARE_DIR)/icons/hicolor
  48. SOURCE_BIN_DIR=lazpaint/release/bin
  49. SOURCE_SCRIPT_DIR=resources/scripts
  50. SOURCE_ICON_DIR=resources/icon
  51. SOURCE_DEBIAN_UPSTREAM=lazpaint/release/debian
  52. ICON:=lazpaint/lazpaint.ico
  53. ICONS=$(shell identify $(ICON) | awk -F '[[]|[]] | ' '{ printf "[%s]=%s ", $$2, $$4 }')
  54. EXTRACTED_ICONS_DIR=resources/icon
  55. EXTRACTED_ICONS=16x16 24x24 32x32 48x48 96x96 128x128 256x256
  56. PO_FILES:=$(shell find "$(SOURCE_BIN_DIR)/i18n" -maxdepth 1 -type f -name *.po -printf "\"%f\" ")
  57. MODEL_FILES:=$(shell find "$(SOURCE_BIN_DIR)/models" -maxdepth 1 -type f -printf "\"%f\" ")
  58. SCRIPT_FILES:=$(shell find "$(SOURCE_SCRIPT_DIR)" -maxdepth 1 -type f -name *.py -printf "\"%f\" ")
  59. SCRIPT_RUNTIME_FILES:=$(shell find "$(SOURCE_SCRIPT_DIR)/lazpaint" -maxdepth 1 -type f -name *.py -printf "\"%f\" ")
  60. LAZARUSDIRECTORIES:="-Fu$(lazdir)/*" "-Fi$(lazdir)/*" "-Fu$(lazdir)/components/printers/unix" "-Fi$(lazdir)/components/printers/unix" "-Fu$(lazdir)/packager/registration" "-Fi$(lazdir)/packager/registration" "-Fu$(lazdir)/components/*" "-Fi$(lazdir)/components/*" "-Fu$(lazdir)/lcl/forms" "-Fi$(lazdir)/lcl/forms" "-Fu$(lazdir)/lcl/widgetset" "-Fi$(lazdir)/lcl/widgetset" "-Fu$(lazdir)/interfaces/*" "-Fi$(lazdir)/interfaces/*" "-Fu$(lazdir)/lcl/nonwin32" "-Fi$(lazdir)/lcl/nonwin32" "-Fu$(lazdir)/lcl/interfaces/gtk2" "-Fi$(lazdir)/lcl/interfaces/gtk2" "-Fu$(lazdir)/lcl/components/*" "-Fi$(lazdir)/lcl/components/*" "-Fu$(lazdir)/lcl/include" "-Fi$(lazdir)/lcl/include" "-Fu$(lazdir)/lcl" "-Fi$(lazdir)/lcl"
  61. endif
  62. ifeq ($(UNAME),FreeBSD)
  63. TARGET ?= Gtk2
  64. LAZARUSDIRECTORIES:="-Fu$(lazdir)/*" "-Fi$(lazdir)/*" "-Fu$(lazdir)/components/printers/unix" "-Fi$(lazdir)/components/printers/unix" "-Fu$(lazdir)/packager/registration" "-Fi$(lazdir)/packager/registration" "-Fu$(lazdir)/components/*" "-Fi$(lazdir)/components/*" "-Fu$(lazdir)/lcl/forms" "-Fi$(lazdir)/lcl/forms" "-Fu$(lazdir)/lcl/widgetset" "-Fi$(lazdir)/lcl/widgetset" "-Fu$(lazdir)/interfaces/*" "-Fi$(lazdir)/interfaces/*" "-Fu$(lazdir)/lcl/nonwin32" "-Fi$(lazdir)/lcl/nonwin32" "-Fu$(lazdir)/lcl/interfaces/gtk2" "-Fi$(lazdir)/lcl/interfaces/gtk2" "-Fu$(lazdir)/lcl/components/*" "-Fi$(lazdir)/lcl/components/*" "-Fu$(lazdir)/lcl/include" "-Fi$(lazdir)/lcl/include" "-Fu$(lazdir)/lcl" "-Fi$(lazdir)/lcl"
  65. endif
  66. ifeq ($(UNAME),Windows)
  67. TARGET ?= Win32
  68. LAZARUSDIRECTORIES:="-Fu$(lazdir)/*" "-Fi$(lazdir)/*" "-Fu$(lazdir)/components/printers/win32" "-Fi$(lazdir)/components/printers/win32" "-Fu$(lazdir)/packager/registration" "-Fi$(lazdir)/packager/registration" "-Fu$(lazdir)/components/*" "-Fi$(lazdir)/components/*" "-Fu$(lazdir)/lcl/forms" "-Fi$(lazdir)/lcl/forms" "-Fu$(lazdir)/lcl/widgetset" "-Fi$(lazdir)/lcl/widgetset" "-Fu$(lazdir)/interfaces/*" "-Fi$(lazdir)/interfaces/*" "-Fu$(lazdir)/lcl/interfaces/win32" "-Fi$(lazdir)/lcl/interfaces/win32" "-Fu$(lazdir)/lcl/components/*" "-Fi$(lazdir)/lcl/components/*" "-Fu$(lazdir)/lcl/include" "-Fi$(lazdir)/lcl/include" "-Fu$(lazdir)/lcl" "-Fi$(lazdir)/lcl"
  69. endif
  70. # determine buildmode/interface
  71. BUILDMODE:=Release
  72. INTERFACE:=LCL$(shell echo $(TARGET) | tr A-Z a-z)
  73. ifeq ($(TARGET),Qt5)
  74. BUILDMODE:=ReleaseQt5
  75. endif
  76. # Lazarus custom packages explicitely compiled
  77. ifeq "$(FOREIGN_LPK)" "1"
  78. FOREIGN_PACKAGES=$(BGRABITMAP_DIR)/bgrabitmappack.lpk $(BGRACONTROLS_DIR)/bgracontrols.lpk
  79. endif
  80. all: compile
  81. install: prefix
  82. ifeq ($(UNAME),Windows)
  83. echo "Under Windows, use installation generated by InnoSetup with lazpaint/release/windows/lazpaint.iss"
  84. endif
  85. ifeq ($(UNAME),Linux)
  86. install -D "$(SOURCE_BIN_DIR)/$(package)" "$(BIN_DIR)/lazpaint"
  87. for f in $(PO_FILES); do install -D --mode=0644 "$(SOURCE_BIN_DIR)/i18n/$$f" "$(RESOURCE_DIR)/i18n/$$f"; done
  88. for f in $(MODEL_FILES); do install -D --mode=0644 "$(SOURCE_BIN_DIR)/models/$$f" "${RESOURCE_DIR}/models/$$f"; done
  89. for f in $(SCRIPT_FILES); do install -D --mode=0644 "$(SOURCE_SCRIPT_DIR)/$$f" "${RESOURCE_DIR}/scripts/$$f"; done
  90. for f in $(SCRIPT_RUNTIME_FILES); do install -D --mode=0644 "$(SOURCE_SCRIPT_DIR)/lazpaint/$$f" "${RESOURCE_DIR}/scripts/lazpaint/$$f"; done
  91. install -D "$(SOURCE_DEBIAN_UPSTREAM)/applications/lazpaint.desktop" "$(SHARE_DIR)/applications/lazpaint.desktop"
  92. install -D "$(EXTRACTED_ICONS_DIR)/48x48.png" "$(SHARE_DIR)/pixmaps/lazpaint.png"
  93. for s in $(EXTRACTED_ICONS); do install -D --mode=0644 "$(EXTRACTED_ICONS_DIR)/$$s.png" "$(ICON_DIR)/$$s/apps/lazpaint.png"; done
  94. install -d "$(SHARE_DIR)/man/man1"
  95. gzip -9 -n -c "$(SOURCE_DEBIAN_UPSTREAM)/man/man1/lazpaint.1" >"$(SHARE_DIR)/man/man1/lazpaint.1.gz"
  96. chmod 0644 "$(SHARE_DIR)/man/man1/lazpaint.1.gz"
  97. endif
  98. uninstall: prefix
  99. ifeq ($(UNAME),Windows)
  100. echo "Under Windows, go to Add/Remove programs to uninstall"
  101. endif
  102. ifeq ($(UNAME),Linux)
  103. $(REMOVE) $(BIN_DIR)/lazpaint
  104. $(REMOVEDIR) $(RESOURCE_DIR)
  105. $(REMOVE) "$(SHARE_DIR)/applications/lazpaint.desktop"
  106. $(REMOVE) "$(SHARE_DIR)/pixmaps/lazpaint.png"
  107. for s in $(EXTRACTED_ICONS); do $(REMOVE) $(ICON_DIR)/$$s/apps/lazpaint.png; done
  108. $(REMOVE) "$(SHARE_DIR)/man/man1/lazpaint.1.gz"
  109. endif
  110. distclean: clean clean_configure
  111. clean: clean_bgrabitmap clean_bgracontrols clean_lazpaint
  112. clean_configure:
  113. $(REMOVE) "prefix"
  114. $(REMOVE) "lazdir"
  115. $(REMOVE) "fpcbin"
  116. clean_icons:
  117. $(REMOVEDIR) "icons"
  118. clean_bgrabitmap:
  119. $(REMOVEDIR) "$(BGRABITMAP_DIR)/lib"
  120. $(REMOVEDIR) "$(BGRABITMAP_DIR)/backup"
  121. clean_bgracontrols:
  122. $(REMOVEDIR) "$(BGRACONTROLS_DIR)/lib"
  123. $(REMOVEDIR) "$(BGRACONTROLS_DIR)/backup"
  124. clean_lazpaint:
  125. $(REMOVEDIR) "lazpaintcontrols/lib"
  126. $(REMOVEDIR) "lazpaint/debug"
  127. $(REMOVEDIR) "lazpaint/release/lib"
  128. $(REMOVE) "lazpaint/lazpaint.res"
  129. ifeq ($(UNAME),Windows)
  130. $(REMOVE) "lazpaint/release/bin/lazpaint.exe"
  131. $(REMOVE) "lazpaint/release/bin/lazpaint32.exe"
  132. $(REMOVE) "lazpaint/release/bin/lazpaint64.exe"
  133. else
  134. $(REMOVE) "lazpaint/release/bin/lazpaint"
  135. $(REMOVE) "lazpaint/release/bin/lazpaint32"
  136. $(REMOVE) "lazpaint/release/bin/lazpaint64"
  137. $(REMOVE) "lazpaint/release/bin/lazpaint-gtk2"
  138. $(REMOVE) "lazpaint/release/bin/lazpaint-qt5"
  139. endif
  140. $(REMOVEDIR) "lazpaint/backup"
  141. $(REMOVEDIR) "lazpaint/test_embedded/backup"
  142. compile: lazdir lazpaint
  143. force:
  144. #lazbuild or fpc will determine what to recompile
  145. lazpaint: force $(FOREIGN_PACKAGES) lazpaintcontrols/lazpaintcontrols.lpk lazpaint/lazpaint.lpi
  146. ifeq "$(lazdir)" ""
  147. lazbuild -B -r --build-mode=$(BUILDMODE) $(FOREIGN_PACKAGES) lazpaintcontrols/lazpaintcontrols.lpk lazpaint/lazpaint.lpi
  148. else
  149. $(COPY) "resources/lazpaint.res" "lazpaint/lazpaint.res"
  150. $(CREATEDIR) "lazpaint/release/lib"
  151. cd lazpaint $(THEN) $(fpcbin) -B -orelease/lazpaint -Fu./buttons -Fi./buttons -Fu./image -Fi./image -Fu./cursors -Fi./cursors -Fu./buttons -Fi./buttons -Fu./* -Fi./* -Fu../$(BGRACONTROLS_DIR) -Fi../$(BGRACONTROLS_DIR) -Fu../$(BGRABITMAP_DIR) -Fi../$(BGRABITMAP_DIR) $(LAZARUSDIRECTORIES) -MObjFPC -Scgi -Cg -OoREGVAR -Xs -XX -l -vewnhibq -O1 -CX -vi -FUrelease/lib/ -dLCL -d$(INTERFACE) lazpaint.lpr
  152. endif
  153. ifeq ($(MULTIBIN),1)
  154. mv "$(SOURCE_BIN_DIR)/lazpaint" "$(SOURCE_BIN_DIR)/$(package)"
  155. endif
  156. icons:
  157. ifneq ($(UNAME),Windows)
  158. $(CREATEDIR) -p icons
  159. declare -A icons=($(ICONS)); for i in "$${!icons[@]}"; do convert $(ICON)[$$i] $(SOURCE_ICON_DIR)/$${icons[$$i]}.png; done
  160. endif