My build of nnn with minor changes
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 
 
 

227 lignes
6.5 KiB

  1. VERSION = $(shell grep -m1 VERSION $(SRC) | cut -f 2 -d'"')
  2. PREFIX ?= /usr/local
  3. MANPREFIX ?= $(PREFIX)/share/man
  4. DESKTOPPREFIX ?= $(PREFIX)/share/applications
  5. DESKTOPICONPREFIX ?= $(PREFIX)/share/icons/hicolor
  6. STRIP ?= strip
  7. PKG_CONFIG ?= pkg-config
  8. INSTALL ?= install
  9. CP ?= cp
  10. CFLAGS_OPTIMIZATION ?= -O3
  11. O_DEBUG := 0 # debug binary
  12. O_NORL := 0 # no readline support
  13. O_PCRE := 0 # link with PCRE library
  14. O_NOLOC := 0 # no locale support
  15. O_NOMOUSE := 0 # no mouse support
  16. O_NOBATCH := 0 # no built-in batch renamer
  17. O_NOFIFO := 0 # no FIFO previewer support
  18. O_CTX8 := 0 # enable 8 contexts
  19. O_ICONS := 0 # support icons-in-terminal
  20. O_NERD := 0 # support icons-nerdfont
  21. O_QSORT := 0 # use Alexey Tourbin's QSORT implementation
  22. O_BENCH := 0 # benchmark mode (stops at first user input)
  23. O_NOSSN := 0 # enable session support
  24. O_NOUG := 0 # disable user, group name in status bar
  25. # convert targets to flags for backwards compatibility
  26. ifneq ($(filter debug,$(MAKECMDGOALS)),)
  27. O_DEBUG := 1
  28. endif
  29. ifneq ($(filter norl,$(MAKECMDGOALS)),)
  30. O_NORL := 1
  31. endif
  32. ifneq ($(filter noloc,$(MAKECMDGOALS)),)
  33. O_NORL := 1
  34. O_NOLOC := 1
  35. endif
  36. ifeq ($(O_DEBUG),1)
  37. CPPFLAGS += -DDBGMODE
  38. CFLAGS += -g
  39. endif
  40. ifeq ($(O_NORL),1)
  41. CPPFLAGS += -DNORL
  42. else ifeq ($(O_STATIC),1)
  43. CPPFLAGS += -DNORL
  44. else
  45. LDLIBS += -lreadline
  46. endif
  47. ifeq ($(O_PCRE),1)
  48. CPPFLAGS += -DPCRE
  49. LDLIBS += -lpcre
  50. endif
  51. ifeq ($(O_NOLOC),1)
  52. CPPFLAGS += -DNOLOCALE
  53. endif
  54. ifeq ($(O_NOMOUSE),1)
  55. CPPFLAGS += -DNOMOUSE
  56. endif
  57. ifeq ($(O_NOBATCH),1)
  58. CPPFLAGS += -DNOBATCH
  59. endif
  60. ifeq ($(O_NOFIFO),1)
  61. CPPFLAGS += -DNOFIFO
  62. endif
  63. ifeq ($(O_CTX8),1)
  64. CPPFLAGS += -DCTX8
  65. endif
  66. ifeq ($(O_ICONS),1)
  67. CPPFLAGS += -DICONS
  68. endif
  69. ifeq ($(O_NERD),1)
  70. CPPFLAGS += -DNERD
  71. endif
  72. ifeq ($(O_QSORT),1)
  73. CPPFLAGS += -DTOURBIN_QSORT
  74. endif
  75. ifeq ($(O_BENCH),1)
  76. CPPFLAGS += -DBENCH
  77. endif
  78. ifeq ($(O_NOSSN),1)
  79. CPPFLAGS += -DNOSSN
  80. endif
  81. ifeq ($(O_NOUG),1)
  82. CPPFLAGS += -DNOUG
  83. endif
  84. ifeq ($(shell $(PKG_CONFIG) ncursesw && echo 1),1)
  85. CFLAGS_CURSES ?= $(shell $(PKG_CONFIG) --cflags ncursesw)
  86. LDLIBS_CURSES ?= $(shell $(PKG_CONFIG) --libs ncursesw)
  87. else ifeq ($(shell $(PKG_CONFIG) ncurses && echo 1),1)
  88. CFLAGS_CURSES ?= $(shell $(PKG_CONFIG) --cflags ncurses)
  89. LDLIBS_CURSES ?= $(shell $(PKG_CONFIG) --libs ncurses)
  90. else
  91. LDLIBS_CURSES ?= -lncurses
  92. endif
  93. CFLAGS += -std=c11 -Wall -Wextra -Wshadow
  94. CFLAGS += $(CFLAGS_OPTIMIZATION)
  95. CFLAGS += $(CFLAGS_CURSES)
  96. LDLIBS += $(LDLIBS_CURSES)
  97. # static compilation needs libgpm development package
  98. ifeq ($(O_STATIC),1)
  99. LDFLAGS += -static
  100. LDLIBS += -lgpm
  101. endif
  102. DISTFILES = src nnn.1 Makefile README.md LICENSE
  103. SRC = src/nnn.c
  104. HEADERS = src/nnn.h
  105. BIN = nnn
  106. DESKTOPFILE = misc/desktop/nnn.desktop
  107. LOGOSVG = misc/logo/logo.svg
  108. LOGO64X64 = misc/logo/logo-64x64.png
  109. all: $(BIN)
  110. $(BIN): $(SRC) $(HEADERS)
  111. $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LDLIBS)
  112. # targets for backwards compatibility
  113. debug: $(BIN)
  114. norl: $(BIN)
  115. noloc: $(BIN)
  116. install-desktop: $(DESKTOPFILE)
  117. $(INSTALL) -m 0755 -d $(DESTDIR)$(DESKTOPPREFIX)
  118. $(INSTALL) -m 0644 $(DESKTOPFILE) $(DESTDIR)$(DESKTOPPREFIX)
  119. $(INSTALL) -m 0755 -d $(DESTDIR)$(DESKTOPICONPREFIX)/scalable/apps
  120. $(INSTALL) -m 0644 $(LOGOSVG) $(DESTDIR)$(DESKTOPICONPREFIX)/scalable/apps/nnn.svg
  121. $(INSTALL) -m 0755 -d $(DESTDIR)$(DESKTOPICONPREFIX)/64x64/apps
  122. $(INSTALL) -m 0644 $(LOGO64X64) $(DESTDIR)$(DESKTOPICONPREFIX)/64x64/apps/nnn.png
  123. uninstall-desktop:
  124. $(RM) $(DESTDIR)$(DESKTOPPREFIX)/$(DESKTOPFILE)
  125. $(RM) $(DESTDIR)$(DESKTOPICONPREFIX)/scalable/apps/nnn.svg
  126. $(RM) $(DESTDIR)$(DESKTOPICONPREFIX)/64x64/apps/nnn.png
  127. install: all
  128. $(INSTALL) -m 0755 -d $(DESTDIR)$(PREFIX)/bin
  129. $(INSTALL) -m 0755 $(BIN) $(DESTDIR)$(PREFIX)/bin
  130. $(INSTALL) -m 0755 -d $(DESTDIR)$(MANPREFIX)/man1
  131. $(INSTALL) -m 0644 $(BIN).1 $(DESTDIR)$(MANPREFIX)/man1
  132. uninstall:
  133. $(RM) $(DESTDIR)$(PREFIX)/bin/$(BIN)
  134. $(RM) $(DESTDIR)$(MANPREFIX)/man1/$(BIN).1
  135. strip: $(BIN)
  136. $(STRIP) $^
  137. upx: $(BIN)
  138. $(STRIP) $^
  139. upx -qqq $^
  140. static:
  141. # regular static binary
  142. make O_STATIC=1 strip
  143. mv $(BIN) $(BIN)-static
  144. # static binary with icons-in-terminal support
  145. make O_STATIC=1 O_ICONS=1 strip
  146. mv $(BIN) $(BIN)-icons-static
  147. # static binary with patched nerd font support
  148. make O_STATIC=1 O_NERD=1 strip
  149. mv $(BIN) $(BIN)-nerd-static
  150. dist:
  151. mkdir -p nnn-$(VERSION)
  152. $(CP) -r $(DISTFILES) nnn-$(VERSION)
  153. tar -cf - nnn-$(VERSION) | gzip > nnn-$(VERSION).tar.gz
  154. $(RM) -r nnn-$(VERSION)
  155. sign:
  156. git archive -o nnn-$(VERSION).tar.gz --format tar.gz --prefix=nnn-$(VERSION)/ v$(VERSION)
  157. gpg --detach-sign --yes nnn-$(VERSION).tar.gz
  158. rm -f nnn-$(VERSION).tar.gz
  159. upload-local: sign static
  160. $(eval ID=$(shell curl -s 'https://api.github.com/repos/jarun/nnn/releases/tags/v$(VERSION)' | jq .id))
  161. # upload sign file
  162. curl -XPOST 'https://uploads.github.com/repos/jarun/nnn/releases/$(ID)/assets?name=nnn-$(VERSION).tar.gz.sig' \
  163. -H 'Authorization: token $(NNN_SIG_UPLOAD_TOKEN)' -H 'Content-Type: application/pgp-signature' \
  164. --upload-file nnn-$(VERSION).tar.gz.sig
  165. tar -zcf $(BIN)-static-$(VERSION).x86_64.tar.gz $(BIN)-static
  166. # upx compress all static binaries
  167. upx -qqq $(BIN)-static
  168. upx -qqq $(BIN)-icons-static
  169. upx -qqq $(BIN)-nerd-static
  170. # upload static binary
  171. curl -XPOST 'https://uploads.github.com/repos/jarun/nnn/releases/$(ID)/assets?name=$(BIN)-static-$(VERSION).x86_64.tar.gz' \
  172. -H 'Authorization: token $(NNN_SIG_UPLOAD_TOKEN)' -H 'Content-Type: application/x-sharedlib' \
  173. --upload-file $(BIN)-static-$(VERSION).x86_64.tar.gz
  174. tar -zcf $(BIN)-icons-static-$(VERSION).x86_64.tar.gz $(BIN)-icons-static
  175. # upload icons-in-terminal compiled static binary
  176. curl -XPOST 'https://uploads.github.com/repos/jarun/nnn/releases/$(ID)/assets?name=$(BIN)-icons-static-$(VERSION).x86_64.tar.gz' \
  177. -H 'Authorization: token $(NNN_SIG_UPLOAD_TOKEN)' -H 'Content-Type: application/x-sharedlib' \
  178. --upload-file $(BIN)-icons-static-$(VERSION).x86_64.tar.gz
  179. # upload patched nerd font compiled static binary
  180. tar -zcf $(BIN)-nerd-static-$(VERSION).x86_64.tar.gz $(BIN)-nerd-static
  181. curl -XPOST 'https://uploads.github.com/repos/jarun/nnn/releases/$(ID)/assets?name=$(BIN)-nerd-static-$(VERSION).x86_64.tar.gz' \
  182. -H 'Authorization: token $(NNN_SIG_UPLOAD_TOKEN)' -H 'Content-Type: application/x-sharedlib' \
  183. --upload-file $(BIN)-nerd-static-$(VERSION).x86_64.tar.gz
  184. clean:
  185. $(RM) -f $(BIN) nnn-$(VERSION).tar.gz *.sig $(BIN)-static $(BIN)-static-$(VERSION).x86_64.tar.gz $(BIN)-icons-static $(BIN)-icons-static-$(VERSION).x86_64.tar.gz $(BIN)-nerd-static $(BIN)-nerd-static-$(VERSION).x86_64.tar.gz
  186. skip: ;
  187. .PHONY: all install uninstall strip static dist sign upload-local clean install-desktop uninstall-desktop