My build of nnn with minor changes
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

227 行
6.7 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 ($(strip $(O_DEBUG)),1)
  37. CPPFLAGS += -DDBGMODE
  38. CFLAGS += -g
  39. endif
  40. ifeq ($(strip $(O_NORL)),1)
  41. CPPFLAGS += -DNORL
  42. else ifeq ($(strip $(O_STATIC)),1)
  43. CPPFLAGS += -DNORL
  44. else
  45. LDLIBS += -lreadline
  46. endif
  47. ifeq ($(strip $(O_PCRE)),1)
  48. CPPFLAGS += -DPCRE
  49. LDLIBS += -lpcre
  50. endif
  51. ifeq ($(strip $(O_NOLOC)),1)
  52. CPPFLAGS += -DNOLOCALE
  53. endif
  54. ifeq ($(strip $(O_NOMOUSE)),1)
  55. CPPFLAGS += -DNOMOUSE
  56. endif
  57. ifeq ($(strip $(O_NOBATCH)),1)
  58. CPPFLAGS += -DNOBATCH
  59. endif
  60. ifeq ($(strip $(O_NOFIFO)),1)
  61. CPPFLAGS += -DNOFIFO
  62. endif
  63. ifeq ($(strip $(O_CTX8)),1)
  64. CPPFLAGS += -DCTX8
  65. endif
  66. ifeq ($(strip $(O_ICONS)),1)
  67. CPPFLAGS += -DICONS
  68. endif
  69. ifeq ($(strip $(O_NERD)),1)
  70. CPPFLAGS += -DNERD
  71. endif
  72. ifeq ($(strip $(O_QSORT)),1)
  73. CPPFLAGS += -DTOURBIN_QSORT
  74. endif
  75. ifeq ($(strip $(O_BENCH)),1)
  76. CPPFLAGS += -DBENCH
  77. endif
  78. ifeq ($(strip $(O_NOSSN)),1)
  79. CPPFLAGS += -DNOSSN
  80. endif
  81. ifeq ($(strip $(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 ($(strip $(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