File: Makefile

package info (click to toggle)
elinks 0.19.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 24,348 kB
  • sloc: ansic: 174,714; cpp: 31,967; sh: 7,841; python: 4,039; perl: 2,183; javascript: 1,794; pascal: 1,720; makefile: 1,006; yacc: 295; lisp: 125; awk: 79; ruby: 70
file content (149 lines) | stat: -rw-r--r-- 5,630 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
top_builddir=..
include $(top_builddir)/Makefile.config

# We prefer the capitalized name for Project-Id-Version.
ifeq ($(PACKAGE), elinks)
PRETTY_PACKAGE = ELinks
else
PRETTY_PACKAGE = $(PACKAGE)
endif

# Where to install the catalog files.
localedir = $(datadir)/locale

# These are for some reason not added magically to the Makefile.
MSGMERGE = msgmerge
PERL = perl

# Name of the file containing the list of files to translate (used by
# xgettext) 
POTFILES_ABS_LIST = potfiles.list

POTFILES_REL = $(shell find $(top_srcdir)/src/ -name '*.[ch]' -o -name '*.cpp' -o -name options.inc -o -name 'actions-*.inc' | sort)

quiet_cmd_gmsgfmt = ' [$(PO_COLOR)GMSGFMT$(END_COLOR)]   $(RELPATH)$(@)'
      cmd_gmsgfmt = rm -f -- "$@" && $(GMSGFMT) --statistics -o "$@" -- "$<"


# Distributed elinks-*.tar.gz packages include po/*.gmo files, so that
# users can install ELinks even if they don't have a msgfmt program.
# However, if srcdir != builddir, then this Makefile ignores the *.gmo
# files in the srcdir and builds new ones in the builddir.
%.gmo: $(srcdir)%.po
	$(call ecmd,gmsgfmt)


### The default rule
#
# Note: Target `all-local' must not depend on target '$(srcdir)$(PACKAGE).pot',
# otherwise packages like GCC can not be built if only parts of the source have
# been downloaded.
#
# Note 2: We aren't gcc, we are ELinks. And I want that dependency ;-). --pasky
#
# Note 3: I changed my mind, it is really annoying if you just insert one line
# and suddenly you have tons of changes in all the .po files updating the line
# informations. --pasky
#
# $(CATALOGS) is empty if --disable-nls. Beats using *-(yes|no) targets.

all-local: $(CATALOGS)


### Creating the template po template file
#
# This pulls in _all_ .c and .h files in the src directory. Even files that has
# not been added to the git repo. Beware of junk entries!

$(POTFILES_ABS_LIST): $(POTFILES_REL)
	@( cd $(top_srcdir); \
	  find src/ -type f -name '*.[ch]' -o -name '*.cpp' -o -name options.inc -o -name 'actions-*.inc' | sort ) \
	 > $(POTFILES_ABS_LIST)

# xgettext --flag requires GNU gettext 0.13 or later;
# --msgid-bugs-address requires 0.12 or later.
$(srcdir)$(PACKAGE).pot: $(POTFILES_ABS_LIST) $(srcdir)perl/msgaccel-prepare
	$(XGETTEXT) --default-domain=$(PACKAGE) \
		    --directory=$(top_srcdir) \
		    --msgid-bugs-address=elinks-users@linuxfromscratch.org \
		    --add-comments --language=C \
		    --keyword=_ --keyword=N_ --keyword=n_:1,2 --keyword=N__ \
		    --flag=msg_text:2:c-format --flag=die:1:c-format \
		    --flag=secure_fprintf:2:c-format \
		    --flag=DBG:1:c-format --flag=elinks_debug:1:c-format \
		    --flag=WDBG:1:c-format --flag=elinks_wdebug:1:c-format \
		    --flag=ERROR:1:c-format --flag=elinks_error:1:c-format \
		    --flag=INTERNAL:1:c-format --flag=elinks_internal:1:c-format \
		    --flag=usrerror:1:c-format --flag=elinks_log:4:c-format \
		    --flag=LOG_ERR:1:c-format --flag=LOG_WARN:1:c-format \
		    --flag=LOG_INFO:1:c-format --flag=LOG_DBG:1:c-format \
		    --flag=assertm:2:c-format --flag=elinks_assertm:2:c-format \
		    --flag=add_format_to_string:2:c-format \
		    --flag=elinks_vsnprintf:3:c-format --flag=elinks_snprintf:3:c-format \
		    --flag=elinks_vasprintf:2:c-format --flag=elinks_asprintf:2:c-format \
		    --flag=vasprintfa:1:c-format --flag=asprintfa:1:c-format \
		    --flag=_:1:pass-c-format --flag=N_:1:pass-c-format \
		    --flag=n_:1:pass-c-format --flag=n_:2:pass-c-format \
		    --flag=N__:1:pass-c-format \
		    -f $(POTFILES_ABS_LIST)
	test -f $(PACKAGE).po
	$(PERL) -I"$(srcdir)perl" $(srcdir)perl/msgaccel-prepare -S"$(top_srcdir)" $(PACKAGE).po
# GNU gettext 0.17 supports xgettext --package-version but is GPLv3+.
# This rule already requires Perl so use that instead.
	$(PERL) -pi -e 's/(^"Project-Id-Version: )PACKAGE VERSION/$$1$(PRETTY_PACKAGE) $(VERSION)/i and $$found=1 unless $$found' $(PACKAGE).po
	mv -f $(PACKAGE).po $(srcdir)$(PACKAGE).pot


### Updating po and gmo files
#
# Update by merging all .po files with the .po template master file.
#
# It is possible to update only a single .po file by setting the PO variable to
# either <lang> or <lang>.po when calling make. Example: make update-po PO=is

update-po: Makefile $(srcdir)$(PACKAGE).pot
	@$(foreach lang,$(basename $(if $(strip $(PO)),$(PO),$(GMOFILES))), \
	  echo -n "$(lang): "; \
	  if $(MSGMERGE) $(srcdir)$(lang).po $(srcdir)$(PACKAGE).pot -o $(lang).new.po; then \
	    mv -f $(lang).new.po $(srcdir)$(lang).po; \
	  else \
	    echo "msgmerge failed!"; \
	    rm -f $(lang).new.po; \
	  fi; \
	)
	$(MAKE) update-gmo

update-gmo: Makefile $(GMOFILES)
	@:


### Check single or all po files
#

check-po:
	@-$(foreach lang,$(basename $(if $(strip $(PO)),$(PO),$(GMOFILES))), \
	  echo -n "$(lang): "; \
	  $(GMSGFMT) --check --check-accelerators="~" --verbose --statistics -o /dev/null $(srcdir)$(lang).po; \
	  $(PERL) -I"$(srcdir)perl" $(srcdir)perl/msgaccel-check $(srcdir)$(lang).po; \
	)

### Installation and distribution
#
# Use *-local targets to place and remove .gmo files.

install-local: all-local
	$(MKINSTALLDIRS) $(DESTDIR)$(localedir)
	@$(foreach lang,$(basename $(if $(strip $(PO)),$(PO),$(CATALOGS))), \
		$(MKINSTALLDIRS) $(DESTDIR)$(localedir)/$(lang)/LC_MESSAGES; \
		$(call ncmd,installdata,$(lang).gmo,$(DESTDIR)$(localedir)/$(lang)/LC_MESSAGES/$(PACKAGE).mo); \
	)

uninstall-local:
	@$(foreach lang,$(basename $(if $(strip $(PO)),$(PO),$(CATALOGS))), \
		$(call ncmd,uninstall,$(PACKAGE).mo,$(DESTDIR)$(localedir)/$(lang)/LC_MESSAGES); \
	)

clean-local:
	@rm -f $(PACKAGE).po *.new.po $(POTFILES_ABS_LIST)

include $(top_srcdir)/Makefile.lib