Skip to content

Commit eb8a8d2

Browse files
Build-speedup rebased to develop
1 parent 76d233a commit eb8a8d2

34 files changed

+325
-150
lines changed

build.gradle.kts

-4
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,6 @@ tasks.create("buildWeb") {
7171
dependsOn("docs:buildHtmlBySections")
7272
dependsOn("copyHtml")
7373
dependsOn("buildJs")
74-
75-
//finalizedBy("web:clean", "docs:clean")
7674
}
7775

7876
tasks.create("buildWebFullOnly") {
@@ -98,8 +96,6 @@ tasks.create("buildPdf") {
9896
dependsOn("docs:buildPdf")
9997
dependsOn("docs:buildPdfBySections")
10098
dependsOn("copyPdf")
101-
102-
finalizedBy("web:clean", "docs:clean")
10399
}
104100

105101
tasks.create<ShellExec>("syncGrammarWithKotlinGrammarApache2Repo") {

docs/build.gradle.kts

+44-38
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ sourceSets {
5454

5555
dependencies {
5656
implementation("ru.spbstu:g4-to-ebnf:0.0.0.4")
57-
implementation("ru.spbstu:kotlin-pandoc:0.0.13")
57+
implementation("ru.spbstu:kotlin-pandoc:0.0.15")
5858
implementation("ru.spbstu:simple-diagrammer:0.0.0.7")
5959
implementation("com.github.ajalt:clikt:1.7.0")
6060
implementation("com.zaxxer:nuprocess:2.0.1")
@@ -65,30 +65,13 @@ tasks.withType<KotlinCompile> {
6565
kotlinOptions.jvmTarget = "1.8"
6666
}
6767

68-
tasks.create<ShellExec>("buildPdf") {
69-
group = "internal"
70-
71-
dependsOn("convertGrammar")
72-
73-
doFirst {
74-
workingDir = File(scriptsDir)
75-
command = getScriptText("buildPdf")
76-
77-
File(pdfBuildDir).mkdirs()
78-
}
79-
}
80-
81-
tasks.create<ShellExec>("buildPdfBySections") {
82-
group = "internal"
83-
84-
dependsOn("convertGrammar")
85-
86-
doFirst {
87-
workingDir = File(scriptsDir)
88-
command = getScriptText("buildPdfBySections")
89-
90-
Paths.get("$pdfBuildDir/sections").toFile().apply { deleteRecursively(); mkdirs() }
91-
}
68+
tasks.create<Jar>("filtersJar") {
69+
from(
70+
sourceSets.main.get().output,
71+
*configurations.runtimeClasspath.get().map { if (it.isDirectory()) it else zipTree(it) }.toTypedArray()
72+
)
73+
archiveFileName.set("filters.jar")
74+
with(tasks.jar.get())
9275
}
9376

9477
tasks.create<JavaExec>("convertGrammar") {
@@ -97,37 +80,60 @@ tasks.create<JavaExec>("convertGrammar") {
9780
val parserGrammar = "KotlinParser.g4"
9881
val outputFile = "./src/md/kotlin.core/grammar.generated.md"
9982

83+
inputs.files("$grammarsDir/$lexerGrammar", "$grammarsDir/$parserGrammar")
10084
outputs.file(outputFile)
10185

10286
classpath = sourceSets["main"].runtimeClasspath
10387
main = "org.jetbrains.kotlin.spec.ConvertGrammarKt"
10488
args = listOf("-d", grammarsDir, "-l", lexerGrammar, "-p", parserGrammar, "-o", outputFile)
10589
}
10690

107-
tasks.create<ShellExec>("buildHtml") {
91+
tasks.create("prepareShell") {
10892
group = "internal"
10993

110-
dependsOn("convertGrammar")
94+
val disableTODOS = project.findProperty("disableTODOS") != null
95+
val enableStaticMath = project.findProperty("enableStaticMath") != null
11196

112-
doFirst {
113-
workingDir = File(scriptsDir)
114-
command = getScriptText("buildHtml")
97+
if (enableStaticMath) {
98+
dependsOn(":kotlinNpmInstall") // we need npm to install Katex to run it
99+
}
115100

116-
File(htmlBuildDir).mkdirs()
101+
doFirst {
102+
val res = with(StringBuilder()) {
103+
appendln("PROJECT_DIR=$projectDir")
104+
if (disableTODOS) appendln("TODO_OPTION=--disable-todos")
105+
else appendln("TODO_OPTION=--enable-todos")
106+
107+
if (enableStaticMath) {
108+
appendln("STATIC_MATH_OPTION=--enable-static-math")
109+
appendln("KATEX_BIN_OPTION=\"--katex=${rootProject.buildDir}/js/node_modules/.bin/katex\"")
110+
}
111+
else appendln("STATIC_MATH_OPTION=--disable-static-math")
112+
}
113+
114+
File("$buildDir/prepare.sh").writeText("$res")
117115
}
116+
118117
}
119118

120-
tasks.create<ShellExec>("buildHtmlBySections") {
119+
tasks.create("buildPdf") {
121120
group = "internal"
121+
dependsOn("pdf:build")
122+
}
122123

123-
dependsOn("convertGrammar")
124+
tasks.create("buildPdfBySections") {
125+
group = "internal"
126+
dependsOn("pdfSections:build")
127+
}
124128

125-
doFirst {
126-
workingDir = File(scriptsDir)
127-
command = getScriptText("buildHtmlBySections")
129+
tasks.create("buildHtml") {
130+
group = "internal"
131+
dependsOn("html:build")
132+
}
128133

129-
Paths.get(htmlBuildDir).toFile().apply { deleteRecursively(); mkdirs() }
130-
}
134+
tasks.create("buildHtmlBySections") {
135+
group = "internal"
136+
dependsOn("htmlSections:build")
131137
}
132138

133139
tasks.create<JavaExec>("execute") {

docs/html/build.gradle.kts

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
val htmlBuildDir = "${project.parent?.buildDir}/spec/html"
2+
val scriptsDir = "${project.parent?.projectDir}/scripts/build"
3+
4+
tasks.create<Exec>("build") {
5+
group = "internal"
6+
7+
inputs.dir("${project.parent?.projectDir}/src/md/kotlin.core")
8+
9+
dependsOn(":docs:prepareShell")
10+
dependsOn(":docs:convertGrammar")
11+
dependsOn(":docs:filtersJar")
12+
13+
environment["PROJECT_DIR"] = project.parent?.projectDir!!
14+
15+
doFirst {
16+
workingDir = File(scriptsDir)
17+
commandLine = listOf("bash", "$scriptsDir/buildHtml.sh")
18+
19+
File(htmlBuildDir).mkdirs()
20+
}
21+
}

docs/htmlSections/build.gradle.kts

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import java.nio.file.Paths
2+
3+
val htmlBuildDir = "${project.parent?.buildDir}/spec/html"
4+
val scriptsDir = "${project.parent?.projectDir}/scripts/build"
5+
6+
tasks.create<Exec>("build") {
7+
group = "internal"
8+
9+
inputs.dir("${project.parent?.projectDir}/src/md/kotlin.core")
10+
11+
dependsOn(":docs:prepareShell")
12+
dependsOn(":docs:convertGrammar")
13+
dependsOn(":docs:filtersJar")
14+
15+
environment["PROJECT_DIR"] = project.parent?.projectDir!!
16+
17+
doFirst {
18+
workingDir = File(scriptsDir)
19+
commandLine = listOf("bash", "$scriptsDir/buildHtmlBySections.sh")
20+
21+
Paths.get(htmlBuildDir).toFile().apply { deleteRecursively(); mkdirs() }
22+
}
23+
}

docs/pdf/build.gradle.kts

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
val pdfBuildDir = "${project.parent?.buildDir}/spec/pdf"
2+
val scriptsDir = "${project.parent?.projectDir}/scripts/build"
3+
4+
tasks.create<Exec>("build") {
5+
group = "internal"
6+
7+
inputs.dir("${project.parent?.projectDir}/src/md/kotlin.core")
8+
outputs.files("${pdfBuildDir}/kotlin-spec.pdf")
9+
10+
dependsOn(":docs:prepareShell")
11+
dependsOn(":docs:convertGrammar")
12+
dependsOn(":docs:filtersJar")
13+
14+
environment["PROJECT_DIR"] = project.parent?.projectDir!!
15+
16+
doFirst {
17+
workingDir = File(scriptsDir)
18+
commandLine = listOf("bash", "$scriptsDir/buildPdf.sh")
19+
20+
File(pdfBuildDir).mkdirs()
21+
}
22+
}

docs/pdfSections/build.gradle.kts

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import java.nio.file.Paths
2+
3+
val pdfBuildDir = "${project.parent?.buildDir}/spec/pdf"
4+
val scriptsDir = "${project.parent?.projectDir}/scripts/build"
5+
6+
tasks.create<Exec>("build") {
7+
group = "internal"
8+
9+
inputs.dir("${project.parent?.projectDir}/src/md/kotlin.core")
10+
11+
dependsOn(":docs:prepareShell")
12+
dependsOn(":docs:convertGrammar")
13+
dependsOn(":docs:filtersJar")
14+
15+
environment["PROJECT_DIR"] = project.parent?.projectDir!!
16+
17+
doFirst {
18+
workingDir = File(scriptsDir)
19+
commandLine = listOf("bash", "$scriptsDir/buildPdfBySections.sh")
20+
21+
22+
Paths.get("$pdfBuildDir/sections").toFile().apply { deleteRecursively(); mkdirs() }
23+
}
24+
}

docs/scripts/build/buildHtml.sh

+4-8
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,21 @@
11
source directories.sh
2+
source ${BUILD_DIR}/prepare.sh
23
source settings.sh
34

45
init_settings "html"
56

67
export PROJECT_DIR
78
export TODO_OPTION
89
export STATIC_MATH_OPTION
10+
export KATEX_BIN_OPTION
911

1012
cd ${PROJECT_DIR}/src/md
1113

1214
gpp -H ./index.md | pandoc \
13-
--filter ${FILTERS_DIR}/processTodoFilter.sh \
14-
--filter ${FILTERS_DIR}/markSentencesFilter.sh \
15-
--filter ${FILTERS_DIR}/copyPasteFilter.sh \
16-
--filter ${FILTERS_DIR}/inlineDiagramFilter.sh \
17-
--filter ${FILTERS_DIR}/mathInCodeFilter.sh \
18-
--filter ${FILTERS_DIR}/brokenReferencesReportFilter.sh \
19-
--filter ${FILTERS_DIR}/inlineKatexFilter.sh \
15+
--filter ${FILTERS_DIR}/compoundFilter.sh \
2016
${PREAMBLE_OPTIONS} \
2117
${COMMON_PANDOC_OPTIONS} \
2218
${FORMAT_PANDOC_OPTIONS} \
2319
${TOC_PANDOC_OPTIONS} \
2420
${HTML_ASSETS_OPTIONS} \
25-
-o ${BUILD_DIR}/html/kotlin-spec.html
21+
-o ${BUILD_DIR}/spec/html/kotlin-spec.html
+8-15
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,35 @@
11
source directories.sh
2+
source ${BUILD_DIR}/prepare.sh
23
source settings.sh
34

45
init_settings "html"
56

67
export PROJECT_DIR
78
export TODO_OPTION
89
export STATIC_MATH_OPTION
10+
export KATEX_BIN_OPTION
911

1012
cd ${PROJECT_DIR}/src/md
1113

12-
TMP_DIR=${BUILD_DIR}/~tmp
14+
TMP_DIR=${BUILD_DIR}/~tmp/html
1315

1416
mkdir -p $TMP_DIR
1517

16-
touch $TMP_DIR/p0
17-
touch $TMP_DIR/p1
18-
1918
gpp -H ./index.md \
20-
| pandoc ${PREAMBLE_OPTIONS} ${COMMON_PANDOC_OPTIONS} ${FORMAT_PANDOC_OPTIONS} -t json >$TMP_DIR/p1 \
21-
&& bash ${FILTERS_DIR}/processTodoFilter.sh html <$TMP_DIR/p1 >$TMP_DIR/p0 \
22-
&& bash ${FILTERS_DIR}/markSentencesFilter.sh html <$TMP_DIR/p0 >$TMP_DIR/p1 \
23-
&& bash ${FILTERS_DIR}/copyPasteFilter.sh html <$TMP_DIR/p1 >$TMP_DIR/p0 \
24-
&& bash ${FILTERS_DIR}/inlineDiagramFilter.sh html <$TMP_DIR/p0 >$TMP_DIR/p1 \
25-
&& bash ${FILTERS_DIR}/mathInCodeFilter.sh html <$TMP_DIR/p1 >$TMP_DIR/p0 \
26-
&& bash ${FILTERS_DIR}/brokenReferencesReportFilter.sh html <$TMP_DIR/p0 >$TMP_DIR/p1 \
27-
&& bash ${FILTERS_DIR}/inlineKatexFilter.sh html <$TMP_DIR/p1 >$TMP_DIR/p0 \
28-
&& bash ${FILTERS_DIR}/splitSections.sh --output-directory=$TMP_DIR --generate-toc <$TMP_DIR/p0
19+
| pandoc ${PREAMBLE_OPTIONS} ${COMMON_PANDOC_OPTIONS} ${FORMAT_PANDOC_OPTIONS} -t json \
20+
| bash ${FILTERS_DIR}/compoundFilter.sh html --split --output-directory=$TMP_DIR --generate-toc
2921

3022
mkdir -p ${BUILD_DIR}/html
3123

3224
for f in $TMP_DIR/*.json;
3325
do \
34-
pandoc \
26+
(pandoc \
3527
${PREAMBLE_OPTIONS} \
3628
${COMMON_PANDOC_OPTIONS} \
3729
$f \
3830
${HTML_ASSETS_OPTIONS} \
39-
-o ${BUILD_DIR}/html/"$(basename "$f" .json).html";
31+
-o ${BUILD_DIR}/spec/html/"$(basename "$f" .json).html") &
4032
done
33+
wait
4134

4235
rm -rf $TMP_DIR

docs/scripts/build/buildPdf.sh

+6-7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
source directories.sh
2+
source ${BUILD_DIR}/prepare.sh
23
source settings.sh
34

45
init_settings "pdf"
@@ -7,19 +8,17 @@ export PROJECT_DIR
78
export TODO_OPTION
89
export STATIC_MATH_OPTION
910

11+
IMAGE_DIR_OPTION="--image-directory=${BUILD_DIR}/pdf/images"
12+
export IMAGE_DIR_OPTION
13+
1014
cd ${PROJECT_DIR}/src/md
1115

1216
gpp -H ./index.md | pandoc \
13-
--filter ${FILTERS_DIR}/processTodoFilter.sh \
14-
--filter ${FILTERS_DIR}/markSentencesFilter.sh \
15-
--filter ${FILTERS_DIR}/copyPasteFilter.sh \
16-
--filter ${FILTERS_DIR}/inlineDiagramFilter.sh \
17-
--filter ${FILTERS_DIR}/mathInCodeFilter.sh \
18-
--filter ${FILTERS_DIR}/brokenReferencesReportFilter.sh \
17+
--filter ${FILTERS_DIR}/compoundFilter.sh \
1918
${PREAMBLE_OPTIONS} \
2019
${COMMON_PANDOC_OPTIONS} \
2120
${FORMAT_PANDOC_OPTIONS} \
2221
${TOC_PANDOC_OPTIONS} \
2322
--variable documentclass=book \
2423
--number-sections \
25-
-o ${BUILD_DIR}/pdf/kotlin-spec.pdf
24+
-o ${BUILD_DIR}/spec/pdf/kotlin-spec.pdf
+9-14
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
source directories.sh
2+
source ${BUILD_DIR}/prepare.sh
23
source settings.sh
34

45
init_settings "pdf"
@@ -9,34 +10,28 @@ export STATIC_MATH_OPTION
910

1011
cd ${PROJECT_DIR}/src/md
1112

12-
TMP_DIR=${BUILD_DIR}/~tmp
13+
TMP_DIR=${BUILD_DIR}/~tmp/pdf
1314

14-
mkdir -p $TMP_DIR
15+
export IMAGE_DIR_OPTION="--image-directory=${TMP_DIR}/pdf/images"
1516

16-
touch $TMP_DIR/p0
17-
touch $TMP_DIR/p1
17+
mkdir -p $TMP_DIR
1818

1919
gpp -H ./index.md \
20-
| pandoc ${PREAMBLE_OPTIONS} ${COMMON_PANDOC_OPTIONS} ${FORMAT_PANDOC_OPTIONS} -t json >$TMP_DIR/p1 \
21-
&& bash ${FILTERS_DIR}/processTodoFilter.sh latex <$TMP_DIR/p1 >$TMP_DIR/p0 \
22-
&& bash ${FILTERS_DIR}/markSentencesFilter.sh latex <$TMP_DIR/p0 >$TMP_DIR/p1 \
23-
&& bash ${FILTERS_DIR}/copyPasteFilter.sh latex <$TMP_DIR/p1 >$TMP_DIR/p0 \
24-
&& bash ${FILTERS_DIR}/inlineDiagramFilter.sh latex <$TMP_DIR/p0 >$TMP_DIR/p1 \
25-
&& bash ${FILTERS_DIR}/mathInCodeFilter.sh latex <$TMP_DIR/p1 >$TMP_DIR/p0 \
26-
&& bash ${FILTERS_DIR}/brokenReferencesReportFilter.sh latex <$TMP_DIR/p0 >$TMP_DIR/p1 \
27-
&& bash ${FILTERS_DIR}/splitSections.sh --output-directory=$TMP_DIR --format=latex <$TMP_DIR/p1
20+
| pandoc ${PREAMBLE_OPTIONS} ${COMMON_PANDOC_OPTIONS} ${FORMAT_PANDOC_OPTIONS} -t json \
21+
| bash ${FILTERS_DIR}/compoundFilter.sh latex --split --output-directory=$TMP_DIR
2822

2923
mkdir -p ${BUILD_DIR}/pdf/sections
3024

3125
for f in $TMP_DIR/*.json;
3226
do \
33-
pandoc \
27+
(pandoc \
3428
${PREAMBLE_OPTIONS} \
3529
${COMMON_PANDOC_OPTIONS} \
3630
$f \
3731
--variable documentclass=book \
3832
--number-sections \
39-
-o ${BUILD_DIR}/pdf/sections/"$(basename "$f" .json).pdf";
33+
-o ${BUILD_DIR}/spec/pdf/sections/"$(basename "$f" .json).pdf") &
4034
done
35+
wait
4136

4237
rm -rf $TMP_DIR

docs/scripts/build/directories.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ export PROJECT_DIR
22

33
SECTIONS_DIR="$PROJECT_DIR/src/md/kotlin.core"
44
FILTERS_DIR="$PROJECT_DIR/scripts/filters"
5-
BUILD_DIR="$PROJECT_DIR/build/spec"
5+
BUILD_DIR="$PROJECT_DIR/build"

0 commit comments

Comments
 (0)