summaryrefslogtreecommitdiff
path: root/OMakefile
blob: 9bf9184f17f0f1bad3619d58613ff93457b813a1 (plain)
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
.PHONY: all install clean nuke buildenv ctan ctan-root tds tds-hier usage doc testenv

name		= rst

###############################################################################
# SOURCE
###############################################################################

doc_dir		= ./doc
src_dir		= ./src
misc_dir	= ./misc

## input
lua_src[]	= $(glob $(src_dir)/rst_*.lua)
tex_src		= $(src_dir)/t-rst.mkiv
script_src	= $(src_dir)/mtx-t-rst.lua
ifc_src		= $(misc_dir)/t-rst.xml

meta_files[]	= README.rst COPYING
build_files[]	= OMakeroot OMakefile $(doc_dir)/OMakefile
doc_src[]	= $(filter-out OMakefile, $(glob $(doc_dir)/*))

###############################################################################
# DIRECTORIES
###############################################################################

## The CTAN guys prefer the zipball to extract to a source directory with a
## flat structure containing all the files, and an accompanying TDS zipball
## at the root.
build_root	= ./build
doc_tree	= $(build_root)/doc/context/third/$(name)
tex_tree	= $(build_root)/tex/context/third/$(name)
ifc_tree	= $(build_root)/tex/context/interface/third
src_tree	= $(build_root)/source/context/$(name)/
script_tree	= $(build_root)/scripts/context/lua/third/$(name)
ctan_root	= $(build_root)/$(name)
doc_tmpdir	= $(build_root)/doc-tmp
tds_hier[] 	= $(doc_tree) $(tex_tree) $(script_tree) $(ifc_tree) $(src_tree)
tds_dirnames[]	= doc scripts tex
tds_dirs[]	= $(addprefix $(build_root)/,$(tds_dirnames))
test_dir	= ./testing

dirs[]		= $(build_root) $(ctan_root) $(tds_hier)

###############################################################################
# GENERATED
###############################################################################

ctan_zipfile	= $(name).zip
tds_zipfile	= $(name).tds.zip

manual_name	= manual
manual_pdf	= $(doc_tmpdir)/$(manual_name).pdf

ctan_zip	= $(build_root)/$(ctan_zipfile)
tds_zip		= $(build_root)/$(tds_zipfile)
pkgs		= $(ctan_zip) $(tds_zip)

###############################################################################
# TARGETS
###############################################################################

section
	OMakeFlags(-s)
	usage:
		echo "****************************** $(name) ******************************"
		echo
		echo " $(name) is distributed under the 2-clause BSD license. See the file"
		echo " COPYING in the root tree of this repository for details."
		echo
		echo "defined targets:"
		echo "    ctan      package for CTAN"
		echo "    tds       package as TDS directory hierarchy"
		echo
		echo "    doc       create module manual"
		echo
		echo "    testenv   create development environment in $(test_dir)"
		echo
		echo "    clean     remove temporary files"
		echo "    nuke      remove all created files"
		echo

ctan-root:
	mkdir(-p $(ctan_root))

tds-hier:
	#printvln(:: $(tds_hier))
	mkdir(-p $(tds_hier))

buildenv: ctan-root tds-hier

testenv:
	echo ":: creating test environment in $(test_dir)"
	mkdir(-p $(test_dir))
	## beware the foreach() syntax trap:
	##	http://lists.metaprl.org/pipermail/omake/2013-July/002256.html
	foreach(file => ..., $(glob $(src_dir)/*))
		symlink($(file), $(test_dir)/$(basename $(file)))
	foreach(file => ..., $(filter-out %OMakefile %.omc, $(glob $(doc_dir)/*)))
		symlink($(file), $(test_dir)/$(basename $(file)))
	foreach(file => ..., $(glob $(misc_dir)/*))
		symlink($(file), $(test_dir)/$(basename $(file)))

## nuke -- remove the entire build directory and packaged files
nuke:
	$(rm -rf -- $(build_root) $(pkgs) $(test_dir))

## clean -- leave the build directory, documentation and tarballs intact
clean: .PHONY/$(doc_tmpdir)/clean
	$(rm -rf -- $(tds_dirs) $(ctan_root))

## tds -- package according to TeX directory structure
tds: $(tds_zip)

## ctan -- package for CTAN upload
ctan: $(ctan_zip)

## PDF documentation
doc: .PHONY/$(doc_tmpdir)/manual

$(tds_zip): doc tds-hier
	$(echo $(name)> packaging as $@ with TDS directories)
	cp($(lua_src)     $(tex_tree))
	cp($(tex_src)     $(tex_tree))
	cp($(script_src)  $(script_tree))
	cp($(doc_src)     $(doc_tree))
	cp($(manual_pdf)  $(doc_tree))
	cp($(ifc_src)     $(ifc_tree))
	cp($(meta_files)  $(src_tree))
	cp($(build_files) $(src_tree))
	cd $(build_root) && zip -9 -r ./$(tds_zipfile) $(tds_dirnames)

$(ctan_zip): ctan-root $(tds_zip)
	$(echo $(name)> packaging as $@ for CTAN upload)
	cp($(lua_src)    $(ctan_root))
	cp($(script_src) $(ctan_root))
	cp($(tex_src)    $(ctan_root))
	cp($(doc_src)    $(ctan_root))
	cp($(manual_pdf) $(ctan_root))
	cp($(ifc_src)    $(ctan_root))
	cp($(meta_files) $(ctan_root))
	cd $(build_root) && zip -9 -r ./$(ctan_zipfile) $(name) $(tds_zipfile)

.DEFAULT: usage