From 1bbc9776dbdf19417c05814300541b4dda0c603b Mon Sep 17 00:00:00 2001 From: Thomas Walker Lynch Date: Thu, 12 Sep 2024 02:18:43 +0000 Subject: [PATCH] build of tools bash scripts replaced by gradle build file --- .gitignore | 2 +- {temporary => Erebus}/.gitignore | 0 build.gradle | 145 ++++++++++++++++++ developer/.gitignore | 5 - developer/Erebus/.gitignore | 4 + developer/{deprecated => Lethe}/.githolder | 0 .../{deprecated => Lethe}/Hibou_build.gradle | 0 developer/{deprecated => Lethe}/build.gradle | 0 developer/{deprecated => Lethe}/make | 0 .../{deprecated => Lethe}/makefile-project.mk | 0 .../{deprecated => Lethe}/makefile-tool.mk | 0 .../{deprecated => Lethe}/makefile-top.mk | 0 developer/{executor => }/build.gradle | 0 developer/executor/gradle | 2 +- developer/javac/ANTLR/.gitignore | 4 + developer/jvm/.gitignore | 4 + developer/ologist/#emacs.txt# | 30 ---- developer/ologist/emacs.txt | 18 ++- executor/env_dev | 7 - ologist/gradle_notes.txt | 30 ++++ ologist/log.md | 18 +++ settings.gradle | 1 + 22 files changed, 222 insertions(+), 48 deletions(-) rename {temporary => Erebus}/.gitignore (100%) create mode 100644 build.gradle delete mode 100644 developer/.gitignore create mode 100644 developer/Erebus/.gitignore rename developer/{deprecated => Lethe}/.githolder (100%) rename developer/{deprecated => Lethe}/Hibou_build.gradle (100%) rename developer/{deprecated => Lethe}/build.gradle (100%) rename developer/{deprecated => Lethe}/make (100%) rename developer/{deprecated => Lethe}/makefile-project.mk (100%) rename developer/{deprecated => Lethe}/makefile-tool.mk (100%) rename developer/{deprecated => Lethe}/makefile-top.mk (100%) rename developer/{executor => }/build.gradle (100%) create mode 100644 developer/javac/ANTLR/.gitignore create mode 100644 developer/jvm/.gitignore delete mode 100644 developer/ologist/#emacs.txt# create mode 100644 ologist/gradle_notes.txt diff --git a/.gitignore b/.gitignore index 762861f..02b640c 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,4 @@ #*# *~ a.out - +.gradle/ diff --git a/temporary/.gitignore b/Erebus/.gitignore similarity index 100% rename from temporary/.gitignore rename to Erebus/.gitignore diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..ec3a5bb --- /dev/null +++ b/build.gradle @@ -0,0 +1,145 @@ + +defaultTasks 'installTools' + +/*-------------------------------------------------------------------------------- + + Configuration variables + +*/ + +// project structure +def repoHome = rootDir +def toolDir = "${repoHome}/tool" +def upstreamDir = "${toolDir}/upstream" +def executorDir = "${toolDir}/executor" +def erebusDir = file("${rootDir}/Erebus") + +// tool versions +def antlrVersion = '4.11.1' +def jdkVersion = '22.0.1' +def jdkBuild = '8' + +// The urls for upstream files +def antlrUrl = "https://www.antlr.org/download/antlr-${antlrVersion}-complete.jar" +def jdkUrl = "https://github.com/adoptium/temurin22-binaries/releases/download/jdk-${jdkVersion}%2B${jdkBuild}/OpenJDK22U-jdk_x64_linux_hotspot_${jdkVersion}_${jdkBuild}.tar.gz" + +task installAntlr { + doLast { + def antlrJar = file("${upstreamDir}/antlr-${antlrVersion}-complete.jar") + def antlrExecutorJar = file("${executorDir}/antlr-${antlrVersion}-complete.jar") + + mkdir(upstreamDir) + mkdir(executorDir) + + if (!antlrJar.exists()) { + println "Downloading ANTLR..." + new URL(antlrUrl).withInputStream { i -> antlrJar.withOutputStream { it << i } } + } + + if (!antlrExecutorJar.exists()) { + copy { + from antlrJar + into executorDir + } + println "ANTLR installed in executor." + } else { + println "ANTLR already installed." + } + } +} + +task installJava { + doLast { + def jdkTar = file("${upstreamDir}/jdk-${jdkVersion}.tar.gz") + def jdkDir = file("${toolDir}/jdk-${jdkVersion}+${jdkBuild}") + + mkdir(upstreamDir) + mkdir(toolDir) + + if (!jdkTar.exists()) { + println "Downloading JDK..." + new URL(jdkUrl).withInputStream { i -> jdkTar.withOutputStream { it << i } } + } + + if (!jdkDir.exists()) { + println "Extracting JDK..." + copy { + from tarTree(resources.gzip(jdkTar)) + into toolDir + } + println "JDK installed." + } else { + println "JDK already installed." + } + + // Set JAVA_HOME and test Java installation + def javaHome = file("${jdkDir}") + if (!javaHome.exists()) { + throw new GradleException("JDK extraction failed.") + } + + // variables saved for use in subproject build scripts + project.ext.javaHome = jdkDir + + println "Java installation complete." + } +} + +// Add a task to install both tools +task installTools { + dependsOn installAntlr, installJava +} + +// Ensure all subprojects depend on the tool installation +subprojects { + afterEvaluate { project -> + project.tasks.each { task -> + task.dependsOn ':installTools' + } + } +} + +task cleanTool { + description = 'Cleans the installed tools (but not upstream files)' + doLast { + // Define the directories or files to clean + def toolDirs = [ + file("${rootDir}/tool/bin"), + file("${rootDir}/tool/executor"), + file("${rootDir}/tool/jdk-22.0.1+8") + ] + + // Delete the tool directories + toolDirs.each { dir -> + if (dir.exists()) { + println "Deleting ${dir}..." + delete dir + } + } + + println " ./tool cleaned." + } +} + +task cleanErebus { + description = "Cleans the project level temporary directory 'Erebus'" + + doLast { + if (erebusDir.exists()) { + erebusDir.eachFile { file -> + if (file.name != '.gitignore') { + if (file.isDirectory()) { + file.deleteDir() + } else { + file.delete() + } + } + } + println "Erebus directory cleaned, except for .gitignore." + } else { + println "Erebus directory does not exist." + } + } +} + + diff --git a/developer/.gitignore b/developer/.gitignore deleted file mode 100644 index fd21199..0000000 --- a/developer/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ - -/jvm/ -/javac/ANTLR/ -/temporary/ - diff --git a/developer/Erebus/.gitignore b/developer/Erebus/.gitignore new file mode 100644 index 0000000..2db43ed --- /dev/null +++ b/developer/Erebus/.gitignore @@ -0,0 +1,4 @@ + +* +!/.gitignore + diff --git a/developer/deprecated/.githolder b/developer/Lethe/.githolder similarity index 100% rename from developer/deprecated/.githolder rename to developer/Lethe/.githolder diff --git a/developer/deprecated/Hibou_build.gradle b/developer/Lethe/Hibou_build.gradle similarity index 100% rename from developer/deprecated/Hibou_build.gradle rename to developer/Lethe/Hibou_build.gradle diff --git a/developer/deprecated/build.gradle b/developer/Lethe/build.gradle similarity index 100% rename from developer/deprecated/build.gradle rename to developer/Lethe/build.gradle diff --git a/developer/deprecated/make b/developer/Lethe/make similarity index 100% rename from developer/deprecated/make rename to developer/Lethe/make diff --git a/developer/deprecated/makefile-project.mk b/developer/Lethe/makefile-project.mk similarity index 100% rename from developer/deprecated/makefile-project.mk rename to developer/Lethe/makefile-project.mk diff --git a/developer/deprecated/makefile-tool.mk b/developer/Lethe/makefile-tool.mk similarity index 100% rename from developer/deprecated/makefile-tool.mk rename to developer/Lethe/makefile-tool.mk diff --git a/developer/deprecated/makefile-top.mk b/developer/Lethe/makefile-top.mk similarity index 100% rename from developer/deprecated/makefile-top.mk rename to developer/Lethe/makefile-top.mk diff --git a/developer/executor/build.gradle b/developer/build.gradle similarity index 100% rename from developer/executor/build.gradle rename to developer/build.gradle diff --git a/developer/executor/gradle b/developer/executor/gradle index 9bd00ef..60ca7d7 100755 --- a/developer/executor/gradle +++ b/developer/executor/gradle @@ -12,4 +12,4 @@ cd "$DEVELOPER_HOME" # in case there have been edits to the environment source "${EXECUTOR_IN_DIR}"/env_build -"${GRADLE_HOME}"/bin/gradle -b "${EXECUTOR_IN_DIR}"/build.gradle "$@" +"${GRADLE_HOME}"/bin/gradle --project-dir ${REPO_HOME} "$@" diff --git a/developer/javac/ANTLR/.gitignore b/developer/javac/ANTLR/.gitignore new file mode 100644 index 0000000..2db43ed --- /dev/null +++ b/developer/javac/ANTLR/.gitignore @@ -0,0 +1,4 @@ + +* +!/.gitignore + diff --git a/developer/jvm/.gitignore b/developer/jvm/.gitignore new file mode 100644 index 0000000..2db43ed --- /dev/null +++ b/developer/jvm/.gitignore @@ -0,0 +1,4 @@ + +* +!/.gitignore + diff --git a/developer/ologist/#emacs.txt# b/developer/ologist/#emacs.txt# deleted file mode 100644 index 7eaf367..0000000 --- a/developer/ologist/#emacs.txt# +++ /dev/null @@ -1,30 +0,0 @@ - - -antlr-mode.el -> .emacs.d -(autoload 'antlr-mode "antlr-mode" "Major mode for editing ANTLR grammars." t) -(add-to-list 'auto-mode-alist '("\\.g4\\'" . antlr-mode)) - -un M-x package-install gradle-mode. -(require 'gradle-mode) -(gradle-mode 1) - -C-c C-g b to run gradle build -C-c C-g t to run gradle test -C-c C-g s to run a single test -C-c C-g d to run a Gradle command with the daemon - -Run M-x package-install RET groovy-mode RET. -(require 'groovy-mode) -(add-to-list 'auto-mode-alist '("\\.gradle\\'" . groovy-mode)) - -(electric-indent-mode 1) -Run M-x package-install RET auto-indent-mode RET. - -(require 'auto-indent-mode) -(auto-indent-global-mode) - - -(defun my-groovy-mode-hook () - (setq groovy-indent-offset 2)) ;; Set indentation level to 2 spaces - -(add-hook 'groovy-mode-hook 'my-groovy-mode-hook) \ No newline at end of file diff --git a/developer/ologist/emacs.txt b/developer/ologist/emacs.txt index c7b6404..ba4be63 100644 --- a/developer/ologist/emacs.txt +++ b/developer/ologist/emacs.txt @@ -13,12 +13,22 @@ C-c C-g t to run gradle test C-c C-g s to run a single test C-c C-g d to run a Gradle command with the daemon -Run M-x package-install RET groovy-mode RET. +(package-install groovy-mode) (require 'groovy-mode) (add-to-list 'auto-mode-alist '("\\.gradle\\'" . groovy-mode)) -(electric-indent-mode 1) -Run M-x package-install RET auto-indent-mode RET. +;; buffer must be reloaded for it to work +(package-install 'auto-indent-mode) (require 'auto-indent-mode) -(auto-indent-global-mode) + +(add-hook 'groovy-mode-hook 'auto-indent-mode) +(add-hook 'groovy-mode-hook + (lambda () + (setq tab-width 2) + (setq groovy-indent-offset 2) + (auto-indent-mode t))) ;; Enable auto-indent-mode + +(electric-indent-mode 1) +(auto-indent-global-mode nil) + diff --git a/executor/env_dev b/executor/env_dev index 20983a4..fa64f82 100644 --- a/executor/env_dev +++ b/executor/env_dev @@ -13,21 +13,14 @@ if [ -z "$REPO_HOME" ]; then fi export DEVELOPER_HOME="$REPO_HOME/developer" - -export JAVA_HOME="$REPO_HOME/tool/jdk-22.0.1+8" export GRADLE_HOME="$REPO_HOME/tool/gradle-8.10-rc-1" -export ANTLR_JAR="$REPO_HOME/tool/executor/antlr-4.11.1-complete.jar" export PATH=\ "$DEVELOPER_HOME"/executor\ :"$REPO_HOME"/tool/executor\ -:"$JAVA_HOME"/bin\ :"$GRADLE_HOME"/bin\ :"$PATH" -export GRADLE_OPTS="--settings-file $REPO_HOME/settings.gradle" - - cd "$DEVELOPER_HOME" # This is helpful so that cut and paste from the makefile to the shell can be used for testing. diff --git a/ologist/gradle_notes.txt b/ologist/gradle_notes.txt new file mode 100644 index 0000000..c09e2a2 --- /dev/null +++ b/ologist/gradle_notes.txt @@ -0,0 +1,30 @@ + +gradle + +1. This is risky software. + + It searches for its files, thus traverses the directory tree. + + It access the internet for data. + + The installer downloads binaries from the site. It is not distributed as a repo + with Fedora, Debian, or .. anything else. + + It has access to everyone's projects. Big honeypot. + + +2. Java + + Gradle is a Java program so it needs the JVM to run. + + Gradle is being used to install most of the tools. + + It does not install Gradle of course. There is a bash script for that. + + We assume that Gradle is using a version of Java on the system. But it will + still install a specific version of Java required by the project build. + `gradle.parameters` sets the version number for the build Java. The build + Java will be installed under the 'tools' directory. + + + diff --git a/ologist/log.md b/ologist/log.md index e421a8e..2dc2a77 100644 --- a/ologist/log.md +++ b/ologist/log.md @@ -28,4 +28,22 @@ a pretty good job of that already.) categories were created manually. I wonder if categories are necessary, but they can't hurt, and as they are done I will keep them. +2024-09-11 + + I have tried, have a working example of, a synthesis approach, where one + program synthesizes another program that does the syntax annotation. + + Also worked on reducing the GQL grammar by abstracting it. For example + creating one token that stands for all terminal symbols. Though not sure what + the advantage is of working with the abstracted grammar instead of the + original, as we will have to make a distinction among the various rules that + collapsed together before generating the output. + + Now trying to apply rewrite rules to transform tree T0 to tree T1. + + Make does not chain pattern rules, which is causing problems. Everyone in + Javaland apparently is using Maven or Gradle, so switching over to Gradle. + + diff --git a/settings.gradle b/settings.gradle index bd233ed..9f75513 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,4 @@ +// settings.gradle rootProject.name = 'GQL_to_Cypher' -- 2.20.1