Makefile 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. COREPATH=../../../src
  2. #include $(COREPATH)/Makefile.defs
  3. CFG2TXT=../../scripts/cdefs2doc/dump_rpcs.pl
  4. CFG2DOCBOOK=../../scripts/cdefs2doc/dump_rpcs.pl
  5. # output directory for generated txt files
  6. txt_output_dir=.
  7. # output directory for generated docbook xml files
  8. docbook_output_dir=docbook
  9. # list of files containing rpc defs in the following format:
  10. # <filename>:<cfg_grp_name>
  11. # can be easily updated by adding the output of:
  12. # make diff-list (which obeys grp_exclude and file_exclude)
  13. # or completely regenerated by replacing files_list with the output of:
  14. # make gen-files-list
  15. # NOTE: suffix duplicated modules located in modules_s with '_s' to
  16. # avoid file naming conflicts
  17. #
  18. files_list= \
  19. $(COREPATH)/core/core_cmd.c:core \
  20. $(COREPATH)/modules/app_jsdt/app_jsdt_api.c:app_jsdt \
  21. $(COREPATH)/modules/app_lua/app_lua_mod.c:app_lua \
  22. $(COREPATH)/modules/app_perl/app_perl_mod.c:app_perl \
  23. $(COREPATH)/modules/app_sqlang/app_sqlang_api.c:app_sqlang \
  24. $(COREPATH)/modules/auth_ephemeral/auth_ephemeral_mod.c:auth_ephemeral \
  25. $(COREPATH)/modules/auth_xkeys/auth_xkeys.c:auth_xkeys \
  26. $(COREPATH)/modules/benchmark/benchmark.c:benchmark \
  27. $(COREPATH)/modules/call_obj/call_obj_mod.c:call_obj \
  28. $(COREPATH)/modules/carrierroute/carrierroute.c:carrierroute \
  29. $(COREPATH)/modules/cdp/cdp_rpc.c:cdp \
  30. $(COREPATH)/modules/cfg_rpc/cfg_rpc.c:cfg_rpc \
  31. $(COREPATH)/modules/cfgt/cfgt_int.c:cfgt \
  32. $(COREPATH)/modules/cfgutils/cfgutils.c:cfgutils \
  33. $(COREPATH)/modules/cnxcc/cnxcc_mod.c:cnxcc \
  34. $(COREPATH)/modules/corex/corex_rpc.c:corex \
  35. $(COREPATH)/modules/counters/counters.c:counters \
  36. $(COREPATH)/modules/cplc/cpl_loader.c:cplc \
  37. $(COREPATH)/modules/ctl/ctl.c:ctl \
  38. $(COREPATH)/modules/db_berkeley/db_berkeley.c:db_berkeley \
  39. $(COREPATH)/modules/db_flatstore/flat_rpc.c:db_flatstore \
  40. $(COREPATH)/modules/db_flatstore/km_flatstore_mod.c:db_flatstore \
  41. $(COREPATH)/modules/db_text/db_text.c:db_text \
  42. $(COREPATH)/modules/debugger/debugger_api.c:debugger \
  43. $(COREPATH)/modules/dialog/dialog.c:dialog \
  44. $(COREPATH)/modules/dialplan/dialplan.c:dialplan \
  45. $(COREPATH)/modules/dispatcher/dispatcher.c:dispatcher \
  46. $(COREPATH)/modules/dmq/dmq.c:dmq \
  47. $(COREPATH)/modules/domain/domain_mod.c:domain \
  48. $(COREPATH)/modules/drouting/drouting.c:drouting \
  49. $(COREPATH)/modules/htable/htable.c:htable \
  50. $(COREPATH)/modules/http_client/curlrpc.c:http_client \
  51. $(COREPATH)/modules/imc/imc.c:imc \
  52. $(COREPATH)/modules/ims_dialog/ims_dialog.c:ims_dialog \
  53. $(COREPATH)/modules/ims_registrar_scscf/reg_rpc.c:ims_registrar_scscf \
  54. $(COREPATH)/modules/ims_usrloc_pcscf/ul_rpc.c:ims_usrloc_pcscf \
  55. $(COREPATH)/modules/ims_usrloc_scscf/ul_rpc.c:ims_usrloc_scscf \
  56. $(COREPATH)/modules/jsonrpcs/jsonrpcs_mod.c:jsonrpcs \
  57. $(COREPATH)/modules/keepalive/keepalive_rpc.c:keepalive \
  58. $(COREPATH)/modules/kex/core_stats.c:kex \
  59. $(COREPATH)/modules/kex/mod_stats.c:kex \
  60. $(COREPATH)/modules/kex/pkg_stats.c:kex \
  61. $(COREPATH)/modules/lcr/lcr_rpc.c:lcr \
  62. $(COREPATH)/modules/malloc_test/malloc_test.c:malloc_test \
  63. $(COREPATH)/modules/matrix/matrix.c:matrix \
  64. $(COREPATH)/modules/mqueue/mqueue_mod.c:mqueue \
  65. $(COREPATH)/modules/msrp/msrp_cmap.c:msrp \
  66. $(COREPATH)/modules/mtree/mtree_mod.c:mtree \
  67. $(COREPATH)/modules/nathelper/nathelper.c:nathelper \
  68. $(COREPATH)/modules/pdb/pdb.c:pdb \
  69. $(COREPATH)/modules/pdt/pdt.c:pdt \
  70. $(COREPATH)/modules/permissions/permissions.c:permissions \
  71. $(COREPATH)/modules/pike/pike_rpc.c:pike \
  72. $(COREPATH)/modules/pipelimit/pipelimit.c:pipelimit \
  73. $(COREPATH)/modules/prefix_route/pr_rpc.c:prefix_route \
  74. $(COREPATH)/modules/presence/presence.c:presence \
  75. $(COREPATH)/modules/pua/pua.c:pua \
  76. $(COREPATH)/modules/pua_rpc/pua_rpc.c:pua_rpc \
  77. $(COREPATH)/modules/pv/pv.c:pv \
  78. $(COREPATH)/modules/ratelimit/ratelimit.c:ratelimit \
  79. $(COREPATH)/modules/regex/regex_mod.c:regex \
  80. $(COREPATH)/modules/rls/rls.c:rls \
  81. $(COREPATH)/modules/rtpengine/rtpengine.c:rtpengine \
  82. $(COREPATH)/modules/rtpproxy/rtpproxy.c:rtpproxy \
  83. $(COREPATH)/modules/sca/sca.c:sca \
  84. $(COREPATH)/modules/sctp/sctp_rpc.c:sctp \
  85. $(COREPATH)/modules/sipcapture/sipcapture.c:sipcapture \
  86. $(COREPATH)/modules/siptrace/siptrace.c:siptrace \
  87. $(COREPATH)/modules/sl/sl_stats.c:sl \
  88. $(COREPATH)/modules/statsc/statsc_mod.c:statsc \
  89. $(COREPATH)/modules/tls/tls_rpc.c:tls \
  90. $(COREPATH)/modules/tm/tm.c:tm \
  91. $(COREPATH)/modules/tsilo/ts_rpc.c:tsilo \
  92. $(COREPATH)/modules/uac/uac_reg.c:uac \
  93. $(COREPATH)/modules/uid_domain/domain_rpc.c:uid_domain \
  94. $(COREPATH)/modules/uid_gflags/uid_gflags.c:uid_gflags \
  95. $(COREPATH)/modules/userblacklist/userblacklist.c:userblacklist \
  96. $(COREPATH)/modules/usrloc/ul_rpc.c:usrloc \
  97. $(COREPATH)/modules/websocket/websocket.c:websocket \
  98. $(COREPATH)/modules/xcap_client/xcap_client.c:xcap_client \
  99. $(COREPATH)/modules/xhttp_pi/xhttp_pi.c:xhttp_pi
  100. # list of excluded groups
  101. grp_exclude=pa
  102. # list of file prefixes to exclude (full path needed)
  103. file_exclude=$(COREPATH)/obsolete
  104. # special per file group overrides
  105. # format= grp_filename=... ,where filename does not contain the extension
  106. # e.g.:
  107. # grp_f_tcp_options=tcp
  108. # grp_f_sctp_options=sctp
  109. # special per group group name overrides
  110. # e.g.:
  111. # grp_g_maxfwd=mf
  112. # override auto-detected group if set to 1 (else the group is used inside the
  113. # file only if it cannot be aut-odetected)
  114. ifeq ($(group_override),1)
  115. override force_grp=force-
  116. else
  117. override force_grp=
  118. endif
  119. # command used for gcc (contains extra includes)
  120. gcc=gcc
  121. #-I$(COREPATH)/lib -I$(COREPATH) -I/usr/include/libxml2
  122. # defines used by gcc
  123. c_defsX=-DNAME='\"kamailio\"' -DVERSION='\"5.1.0-dev3\"' -DARCH='\"x86_64\"' \
  124. -DOS='linux_' -DOS_QUOTED='\"linux\"' -DCOMPILER='\"gcc 4.9.2\"' \
  125. -D__CPU_x86_64 -D__OS_linux -DSER_VER=5001000 \
  126. -DCFG_DIR='\"/usr/local/etc/kamailio/\"' \
  127. -DRUN_DIR='\"/var/run/kamailio/\"' -DPKG_MALLOC -DSHM_MEM -DSHM_MMAP \
  128. -DDNS_IP_HACK -DUSE_MCAST -DUSE_TCP -DDISABLE_NAGLE -DHAVE_RESOLV_RES \
  129. -DUSE_DNS_CACHE -DUSE_DNS_FAILOVER -DUSE_DST_BLACKLIST -DUSE_NAPTR \
  130. -DWITH_XAVP -DMEM_JOIN_FREE -DF_MALLOC -DQ_MALLOC -DTLSF_MALLOC \
  131. -DDBG_SR_MEMORY -DUSE_TLS -DTLS_HOOKS -DUSE_CORE_STATS -DSTATISTICS \
  132. -DMALLOC_STATS -DWITH_AS_SUPPORT -DUSE_SCTP -DFAST_LOCK -DADAPTIVE_WAIT \
  133. -DADAPTIVE_WAIT_LOOPS=1024 -DCC_GCC_LIKE_ASM -DHAVE_GETHOSTBYNAME2 \
  134. -DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD -DHAVE_MSG_NOSIGNAL \
  135. -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_ALLOCA_H -DHAVE_TIMEGM \
  136. -DHAVE_SCHED_SETSCHEDULER -DHAVE_IP_MREQN -DHAVE_EPOLL -DHAVE_SIGIO_RT \
  137. -DSIGINFO64_WORKARROUND -DUSE_FUTEX -DHAVE_SELECT
  138. c_defs=$(subst ^^,='\",$(subst ",\"',$(subst =",^^,$(shell make -s -C ../../../src printcdefs))))
  139. c_defs+= -DMOD_NAME='\"rpcgen\"'
  140. c_defs+= -I$(COREPATH)/modules/app_sqlang/squirrel/include
  141. # common makefile vars used in defs
  142. LOCALBASE=/usr/local
  143. SYSBASE=/usr
  144. filter_files=$(filter-out $(addsuffix %,$(file_exclude)),\
  145. $(filter-out $(addprefix %:,$(grp_exclude)),$(1)))
  146. #filtered files list
  147. flist=$(call filter_files,$(files_list))
  148. # throws an error if input is not in the format filename:grp
  149. check_fname_grp=$(if $(filter-out 2,$(words $(subst :, ,$(1)))),\
  150. $(error bad format "$(1)", it should be filename:grp))
  151. # get prereq from file:grp (get_prereq(file:grp) => file)
  152. get_prereq=$(firstword $(subst :, ,$(1)))
  153. # get grp from file:grp (get_grp(file:grp) => grp)
  154. get_listed_grp=$(word 2, $(subst :, ,$(1)))
  155. # get module interface define
  156. get_modiface=$(word 3, $(subst :, ,$(1)))
  157. find_modiface=$(if $(findstring modules,$(1)),$(shell make -s -C $(dir $(1)) printmiface),-DNONE)
  158. # get base file name from file:grp: get_bname(file:grp)
  159. # => basename(file) without extension (e.g. get_bname(foo/bar.c:x) => bar)
  160. #
  161. get_bname=$(basename $(notdir $(call get_prereq,$(1))))
  162. #get grp from file:grp, using the overrides
  163. get_grp=$(strip $(if $(grp_f_$(call get_bname,$(1))), \
  164. $(grp_f_$(call get_bname,$(1))),\
  165. $(if $(grp_g_$(call get_listed_grp,$(1))),\
  166. $(grp_g_$(call get_listed_grp,$(1))),\
  167. $(call get_listed_grp,$(1))) ) )
  168. # get target from file:grp (get_target(file:grp) => rpc_grp.txt)
  169. get_target=rpc_$(call get_grp,$(1))
  170. # $(LF) definition (do not remove)
  171. define LF
  172. endef
  173. # get all the lines containing DEFS or INCLUDES definitions from the Makefile.
  174. # WARNING: does not work with all sed implementation (tested with GNU sed).
  175. # It uses a hack to restore the LFs (LFs are removed by $(shell)): LFs are
  176. # replaced with '^LF^' and then ^LF^ is subst'ed back to a real LF.
  177. get_make_idefs=$(subst ^LF^,$(LF),$(shell sed \
  178. -ne '/^[\t ]*\(DEFS\|INCLUDES\)[\t ]*[+:]\?=.*[^\]$$/H'\
  179. -ne '/^[\t ]*\(DEFS\|INCLUDES\)[\t ]*[+:]\?=.*\\$$/,/\(^$$\)\|\([^\]$$\)/H'\
  180. -ne '$${g;s/\n/^LF^/g;p}'\
  181. < $(1)/Makefile ))
  182. # get all the lines from the makefile containing variable definitions.
  183. # It will also return conditionals and try to filter out possible rules.
  184. # WARNING: does not work with all sed implementation (tested with GNU sed).
  185. # It uses a hack to restore the LFs (LFs are removed by $(shell)): LFs are
  186. # replaced with '^LF^' and then ^LF^ is subst'ed back to a real LF.
  187. get_make_vars=$(subst ^LF^,$(LF),$(shell sed -n \
  188. -e ': start' \
  189. -e '/^\(ifeq\|ifneq\|else\|endif\)[\t ]*\($$\|.*[^\]$$\)/{H;b end}' \
  190. -e '/^\(ifeq\|ifneq\|else\|endif\)[\t ]\+.*[\]$$/,/[^\]$$/{H;b end}' \
  191. -e '/^[a-zA-Z._/$$][a-zA-Z0-9._()/$$ \t-]*:\([^=]\|$$\)/b eat_rule' \
  192. -e '/^[\t ]*[A-Za-z._][A-Za-z0-9._-]*[\t ]*[+:]\?=.*[^\]$$/{H;b end}' \
  193. -e '/^[\t ]*[A-Za-z._][A-Za-z0-9._-]*[\t ]*[+:]\?=.*\\$$/,/\(^$$\)\|\([^\]$$\)/{H;b end}' \
  194. -e ': end' \
  195. -e '$${g;s/\n/^LF^/g;p}'\
  196. -e 'b' \
  197. -e ': eat_rule' \
  198. -e '$$b end' \
  199. -e 'n' \
  200. -e '/^[a-zA-Z._/$$][a-zA-Z0-9._()/$$ \t-]*:\([^=]\|$$\)/b eat_rule' \
  201. -e '/^[\t]/b eat_rule' \
  202. -e 'b start' \
  203. < $(1)/Makefile ))
  204. define mk_rules
  205. $(call check_fname_grp, $(1))
  206. #$$(info generating rpc_$$(call get_grp,$(1)).txt: $$(call get_prereq,$(1)))
  207. DEFS:=
  208. INCLUDES:=
  209. # extract all the includes and defs from the module makefile and
  210. # evaluate them
  211. $$(eval $$(call get_make_vars,$$(dir $$(call get_prereq,$(1)))))
  212. # override COREPATH (we know better)
  213. COREPATH=../../../src
  214. # save the result in a per group e_idefs_<grp_name> var
  215. $$(eval e_idefs_$$(call get_grp,$(1)):=$$(DEFS) $$(INCLUDES))
  216. # debugging:
  217. #$$(info eval: $$(call get_make_vars,$$(dir $$(call get_prereq,$(1)))))
  218. #$$(info e_idefs_$$(call get_grp,$(1))=$$(e_idefs_$$(call get_grp,$(1))))
  219. $(txt_output_dir)/$$(call get_target,$(1)).txt: \
  220. $$(call get_prereq,$(1)) Makefile $(CFG2TXT)
  221. $(CFG2TXT) --file $$< --$(force_grp)grp=$$(call get_grp,$(1)) \
  222. --gcc="$(gcc)" --txt \
  223. --defs="$(c_defs) $$(call get_modiface,$(1)) $$(e_idefs_$$(call get_grp,$(1)))" \
  224. > "$$@" || (rm -f "$$@"; exit 1)
  225. $(docbook_output_dir)/$$(call get_target,$(1)).xml: \
  226. $$(call get_prereq,$(1)) Makefile $(CFG2TXT)
  227. $(CFG2DOCBOOK) --file $$< --$(force_grp)grp=$$(call get_grp,$(1)) \
  228. --gcc="$(gcc)" --docbook \
  229. --defs="$(c_defs) $$(e_idefs_$$(call get_grp,$(1)))" \
  230. > "$$@" || (rm -f "$$@"; exit 1)
  231. clean_$$(call get_target,$(1)).txt:
  232. rm -f "$(txt_output_dir)/$$(call get_target,$(1)).txt"
  233. clean_$$(call get_target,$(1)).xml:
  234. rm -f "$(docbook_output_dir)/$$(call get_target,$(1)).xml"
  235. txt: $(txt_output_dir)/$$(call get_target,$(1)).txt
  236. docbook: $(docbook_output_dir)/$$(call get_target,$(1)).xml
  237. clean_txt: clean_$$(call get_target,$(1)).txt
  238. clean_docbook: clean_$$(call get_target,$(1)).xml
  239. endef
  240. find_rpc_files_cmd= find $(COREPATH) -type f -name "*.c" \
  241. -exec grep "rpc_export_t[ ][a-zA-Z0-9_]*\[\][ ]*=" /dev/null {} \; \
  242. | cut -d: -f1
  243. # shell command to generate a file:grp list from a list of files
  244. # grp will be the modulename if the file is in a module directory or
  245. # the file name with the extension and _cmd, cmd_ or _rpc stripped out of
  246. # it.
  247. # output: list of " "filename":"grpname
  248. gen_file_grp_cmd=\
  249. sed -e "s!\(.*/modules[^/]*/\([^/][^/]*\)/.*\)! \1:\2!" \
  250. -e "s!^\([^ ].*/\([^/.]*\)[^/]*$$\)!\1:\2!" \
  251. -e "s!^\([^ :]*\):\(.*\)_cmd[_]*!\1:\2!" \
  252. -e "s!^\([^ :]*\):\(.*\)cmd[_]*!\1:\2!" \
  253. -e "s!^\([^ :]*\):\(.*\)_rpc[_]*!\1:\2!"
  254. # special vars for generating the list of files or updates
  255. found_lst=$(shell $(find_rpc_files_cmd) | $(gen_file_grp_cmd))
  256. # filtered found lst
  257. f_found_lst=$(call filter_files,$(found_lst))
  258. diff_lst=$(filter-out $(flist),$(f_found_lst))
  259. get_core_files=$(filter-out $(COREPATH)/modules% $(COREPATH)/lib%,$(1))
  260. sort_files=$(sort $(call get_core_files,$(1)))\
  261. $(sort $(filter-out $(call get_core_files,$(1)),$(1)))
  262. # replace $(COREPATH) with the text "$(COREPATH)"
  263. subst_corepath=$(patsubst $(patsubst %/,%,$(COREPATH))/%,\$$(COREPATH)/%,$(1))
  264. # help will be the default rule (on-purpose since without having a patched
  265. # GCC:TranslationUnit module, make all won't work)
  266. .PHONY: help
  267. help:
  268. @echo "To regenerate $(foreach f,$(flist),$(call get_target,$f).{txt,xml})"
  269. @echo "type: $(MAKE) all ."
  270. @echo "or to regenerate all the rpc lists by searching all"
  271. @echo " the source files for definitions, type: $(MAKE) autogen ."
  272. @echo "NOTE: you need the GCC:TranslationUnit perl module with an "
  273. @echo "extra patch applied (see $(CFG2TXT) --patch)."
  274. .PHONY: txt
  275. txt:
  276. .PHONY: docbook
  277. docbook:
  278. .PHONY: clean_txt
  279. clean_txt:
  280. .PHONY: clean_docbook
  281. clean_docbook:
  282. .PHONY: all
  283. all: txt $(docbook_output_dir)/rpc_list.xml
  284. .PHONY: clean
  285. clean: clean_txt clean_docbook
  286. @rm -f $(docbook_output_dir)/rpc_list.xml
  287. .PHONY: proper
  288. proper:
  289. @rm -f $(txt_output_dir)/rpc_*.txt
  290. @rm -f $(docbook_output_dir)/rpc_*.xml
  291. repo_ver="Kamailio "\
  292. "git-$(shell git rev-parse --verify --short=6 HEAD 2>/dev/null)"
  293. ifeq ($(repo_ver),git-)
  294. repo_ver="Kamailio unknown"
  295. endif
  296. $(docbook_output_dir)/rpc_list.xml: Makefile \
  297. $(foreach f,$(flist),$(docbook_output_dir)/$(call get_target,$f).xml)
  298. @echo '<?xml version="1.0" encoding="UTF-8"?>' >$@
  299. @echo '<!-- this file is autogenerated, do not edit! -->' >>$@
  300. @echo '<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"' >>$@
  301. @echo ' "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"' >>$@
  302. @echo ' [ <!ENTITY % local.common.attrib' >>$@
  303. @echo " \"xmlns:xi CDATA #FIXED 'http://www.w3.org/2001/XInclude'\">]">>$@
  304. @echo '>' >>$@
  305. @echo '<book id="rpc_list"'\
  306. 'xmlns:xi="http://www.w3.org/2001/XInclude">' >>$@
  307. @echo ' <title>RPC Commands List</title>' >>$@
  308. @echo ' <bookinfo>' >>$@
  309. @echo ' <productname class="trade">kamailio.org</productname>' >>$@
  310. @echo ' <authorgroup>' >>$@
  311. @echo ' <author>' >>$@
  312. @echo ' <firstname>Kamailio</firstname>' >>$@
  313. @echo ' <surname>Development Team</surname>' >>$@
  314. @echo ' <affiliation><orgname>https://www.kamailio.org</orgname></affiliation>' >>$@
  315. @echo ' <address>[email protected]</address>' >>$@
  316. @echo ' </author>' >>$@
  317. @echo ' </authorgroup>' >>$@
  318. @echo ' <copyright>' >>$@
  319. @echo ' <year>2008-2017</year>' >>$@
  320. @echo ' <holder>Kamailio Project</holder>' >>$@
  321. @echo ' </copyright>' >>$@
  322. @echo ' </bookinfo>' >>$@
  323. @$(foreach f,$(flist),\
  324. echo ' <xi:include'\
  325. 'href="'$(call get_target,$f).xml'"/>' \
  326. >>$@ ; )
  327. @echo '</book>' >>$@
  328. # finds all the files containing cfg defs
  329. .PHONY: find
  330. find:
  331. @$(find_rpc_files_cmd)
  332. # print the list of the autogenerated files
  333. .PHONY: print-lst
  334. print-lst:
  335. @$(find_rpc_files_cmd) | $(gen_file_grp_cmd)
  336. #
  337. .PHONY: gen-file-list
  338. .PHONY: gen-files_list
  339. .PHONY: gen_files_list
  340. gen-file-list gen-files-list gen_files_list:
  341. @$(foreach f,$(call subst_corepath,$(call sort_files,$(f_found_lst))),\
  342. echo "$f \\";)
  343. print-modifaces:
  344. @$(foreach f,$(call sort_files,$(f_found_lst)),\
  345. echo "$(call subst_corepath,$(f)):$(call find_modiface, $(f)) \\";)
  346. .PHONY: check-list
  347. .PHONY: update-list
  348. .PHONY: diff-list
  349. check-list update-list diff-list:
  350. @$(foreach f,$(call subst_corepath,$(call sort_files,$(diff_lst))),\
  351. echo "$f \\";)
  352. # try to generate the docs from all the sources
  353. .PHONY: autogen
  354. autogen:
  355. @$(MAKE) all files_list="$(call sort_files,$(f_found_lst))"
  356. $(foreach f,$(flist),$(eval $(call mk_rules,$(f))))