copmiled PrintBuildNameList
authorThomas Walker Lynch <xtujpz@reasoningtechnology.com>
Mon, 5 Aug 2024 14:49:00 +0000 (14:49 +0000)
committerThomas Walker Lynch <xtujpz@reasoningtechnology.com>
Mon, 5 Aug 2024 14:49:00 +0000 (14:49 +0000)
developer/build.gradle [deleted file]
developer/deprecated/build.gradle [new file with mode: 0644]
developer/deprecated/makefil_clean [new file with mode: 0644]
developer/executor/PrintRuleNameList [new file with mode: 0755]
developer/executor/make
developer/makefile

diff --git a/developer/build.gradle b/developer/build.gradle
deleted file mode 100644 (file)
index 50966c6..0000000
+++ /dev/null
@@ -1,269 +0,0 @@
-// OpenAI assisted generation from the makefile .. a start on a gradle build file
-
-plugins {
-    id 'java'
-}
-
-group 'com.example'
-version '1.0-SNAPSHOT'
-
-sourceCompatibility = 1.8
-
-repositories {
-    mavenCentral()
-}
-
-dependencies {
-    implementation 'org.antlr:antlr4:4.9.2'  // Include the ANTLR runtime library
-    testImplementation 'junit:junit:4.12'    // Include JUnit for testing
-}
-
-// Define environment variables
-def javaHome = System.getenv('JAVA_HOME')
-def antlrJar = file(System.getenv('ANTLR_JAR'))
-
-// Define directories
-def antlrPrimaryDir = 'ANTLR'
-def antlrInDir = "${antlrPrimaryDir}"
-def antlrOutDir = 'javac/ANTLR'
-def antlrOutDirParent = 'javac'
-def tempDir = 'temporary'
-def executorDir = 'executor'
-def jvmOutDir = 'jvm'
-
-// Define program paths
-def programPrintRuleNameList = "${executorDir}/PrintRuleNameList"
-def programSyntaxTreeTest = "${executorDir}/SyntaxTree_Test"
-def programSyntaxTree20240412 = "${executorDir}/SyntaxTree_20240412"
-
-// Define grammar files
-def grammarFiles = fileTree(dir: antlrInDir, include: '**/*.g4')
-
-// Task to set up directories
-task setup {
-    doLast {
-        mkdir antlrInDir
-        mkdir antlrOutDirParent
-        mkdir 'javac'
-        mkdir jvmOutDir
-        mkdir executorDir
-        mkdir 'test'
-        mkdir 'deprecated'
-        mkdir 'experiment'
-        mkdir 'documentation'
-        mkdir tempDir
-    }
-}
-
-// Function to generate grammar tasks
-def generateGrammarTask(String grammarName) {
-    task "generate${grammarName}Grammar" {
-        inputs.file file("${antlrInDir}/${grammarName}.g4")
-        outputs.dir antlrOutDir
-
-        doLast {
-            println "Generating grammar files for: ${grammarName}"
-            exec {
-                commandLine "${javaHome}/bin/java", '-jar', antlrJar, '-Dlanguage=Java', '-visitor', '-o', antlrOutDirParent, file("${antlrInDir}/${grammarName}.g4")
-            }
-        }
-    }
-}
-
-// Generate grammar tasks for each grammar file
-grammarFiles.each { File file ->
-    def grammarName = file.name.replace('.g4', '')
-    generateGrammarTask(grammarName)
-}
-
-// Define source sets
-sourceSets {
-    main {
-        java {
-            srcDirs = ['javac', antlrOutDir]
-        }
-    }
-}
-
-// Task to compile Java files
-task compileJava(type: JavaCompile) {
-    source = sourceSets.main.java
-    classpath = sourceSets.main.compileClasspath
-    destinationDir = file(jvmOutDir)
-}
-
-// Task to build JAR file
-task buildJar(type: Jar) {
-    from compileJava.destinationDir
-    archiveBaseName.set('project')
-    destinationDirectory.set(file(jvmOutDir))
-}
-
-// Task to create an executable script
-task createScript {
-    dependsOn buildJar
-
-    doLast {
-        def jarFile = buildJar.archiveFile.get().asFile
-        def scriptFile = file("${executorDir}/${project.name}")
-
-        scriptFile.text = """#!/usr/bin/env bash
-${javaHome}/bin/java -cp ${jarFile} ${project.name}
-"""
-        scriptFile.setExecutable(true)
-    }
-}
-
-// Task to clean generated files
-task clean(type: Delete) {
-    delete antlrOutDir
-    delete jvmOutDir
-    delete tempDir
-    delete programPrintRuleNameList
-    delete programSyntaxTreeTest
-    delete programSyntaxTree20240412
-    delete fileTree(dir: executorDir, exclude: '.githolder')
-}
-
-// Task to print version information
-task printVersion {
-    doLast {
-        println "ANTLR Jar: ${antlrJar.name}"
-        println "Java version: ${javaHome}/bin/java -version".execute().text
-        println "Jar version: ${javaHome}/bin/jar --version".execute().text
-        println "Gradle version: ${gradle.gradleVersion}"
-    }
-}
-
-// Default tasks
-defaultTasks 'setup', 'generateGQLGrammar', 'compileJava', 'buildJar', 'createScript'
-
-// Set encoding for JavaCompile tasks
-tasks.withType(JavaCompile) {
-    options.encoding = 'UTF-8'
-}
-
-// Task to build everything
-task all {
-    dependsOn setup, 'generateGQLGrammar', compileJava, buildJar, createScript
-}
-
-// Task to generate grammar files
-task grammar {
-    dependsOn setup, 'generateGQLGrammar'
-}
-
-// Task to compile Java files
-task java {
-    dependsOn setup, compileJava
-}
-
-// Task to clean temporary files
-task cleanTemporary(type: Delete) {
-    delete tempDir
-}
-
-// Task to clean all files
-task cleanAll {
-    dependsOn clean
-}
-
-// Task to clean all files except program files
-task cleanAllMinus {
-    doLast {
-        delete tempDir
-        delete antlrOutDir
-        delete fileTree(dir: jvmOutDir, include: '**/*.class')
-    }
-}
-
-// Task to clean program files
-task cleanProgram {
-    doLast {
-        delete programPrintRuleNameList
-        delete programSyntaxTreeTest
-        delete programSyntaxTree20240412
-    }
-}
-
-// Task to clean class files
-task cleanClass {
-    doLast {
-        delete fileTree(dir: jvmOutDir, include: '**/*.class')
-    }
-}
-
-// Task to clean grammar files
-task cleanGrammar {
-    doLast {
-        delete fileTree(dir: antlrOutDir, include: '**/*.java')
-    }
-}
-
-// Task to clean a specific program
-task cleanProgramSpecific {
-    doLast {
-        def programName = project.findProperty('program') ?: ''
-        if (programName) {
-            delete fileTree(dir: jvmOutDir, include: "${programName}.jar")
-            delete fileTree(dir: executorDir, include: "${programName}")
-        } else {
-            println "Usage: gradle cleanProgramSpecific -Pprogram=<name>"
-        }
-    }
-}
-
-// Task to clean a specific program and everything else
-task cleanProgramPlusSpecific {
-    doLast {
-        def programName = project.findProperty('program') ?: ''
-        if (programName) {
-            delete fileTree(dir: jvmOutDir, include: "${programName}.jar")
-            delete fileTree(dir: executorDir, include: "${programName}")
-            delete tempDir
-            delete antlrOutDir
-        } else {
-            println "Usage: gradle cleanProgramPlusSpecific -Pprogram=<name>"
-        }
-    }
-}
-
-// Task to clean a specific program and everything else except program files
-task cleanProgramMinusSpecific {
-    doLast {
-        def programName = project.findProperty('program') ?: ''
-        if (programName) {
-            delete fileTree(dir: jvmOutDir, include: "${programName}.jar")
-            delete fileTree(dir: executorDir, include: "${programName}")
-            delete tempDir
-            delete fileTree(dir: jvmOutDir, include: '**/*.class')
-        } else {
-            println "Usage: gradle cleanProgramMinusSpecific -Pprogram=<name>"
-        }
-    }
-}
-
-// Task to clean a specific grammar
-task cleanGrammarSpecific {
-    doLast {
-        def grammarName = project.findProperty('grammar') ?: ''
-        if (grammarName) {
-            delete fileTree(dir: antlrOutDir, include: "${grammarName}*")
-        } else {
-            println "Usage: gradle cleanGrammarSpecific -Pgrammar=<name>"
-        }
-    }
-}
-
-// Define tasks for each program
-task buildPrintRuleNameList {
-    dependsOn setup, 'generateGQLGrammar', compileJava
-}
-
-task buildSyntaxTreeTest {
-    dependsOn setup, 'generateSyntaxTreeGrammar', compileJava
-}
-
-task buildSyntaxTree20240412 {
-    dependsOn setup, 'generateSyntaxTree20240412Grammar', compileJava
-}
diff --git a/developer/deprecated/build.gradle b/developer/deprecated/build.gradle
new file mode 100644 (file)
index 0000000..50966c6
--- /dev/null
@@ -0,0 +1,269 @@
+// OpenAI assisted generation from the makefile .. a start on a gradle build file
+
+plugins {
+    id 'java'
+}
+
+group 'com.example'
+version '1.0-SNAPSHOT'
+
+sourceCompatibility = 1.8
+
+repositories {
+    mavenCentral()
+}
+
+dependencies {
+    implementation 'org.antlr:antlr4:4.9.2'  // Include the ANTLR runtime library
+    testImplementation 'junit:junit:4.12'    // Include JUnit for testing
+}
+
+// Define environment variables
+def javaHome = System.getenv('JAVA_HOME')
+def antlrJar = file(System.getenv('ANTLR_JAR'))
+
+// Define directories
+def antlrPrimaryDir = 'ANTLR'
+def antlrInDir = "${antlrPrimaryDir}"
+def antlrOutDir = 'javac/ANTLR'
+def antlrOutDirParent = 'javac'
+def tempDir = 'temporary'
+def executorDir = 'executor'
+def jvmOutDir = 'jvm'
+
+// Define program paths
+def programPrintRuleNameList = "${executorDir}/PrintRuleNameList"
+def programSyntaxTreeTest = "${executorDir}/SyntaxTree_Test"
+def programSyntaxTree20240412 = "${executorDir}/SyntaxTree_20240412"
+
+// Define grammar files
+def grammarFiles = fileTree(dir: antlrInDir, include: '**/*.g4')
+
+// Task to set up directories
+task setup {
+    doLast {
+        mkdir antlrInDir
+        mkdir antlrOutDirParent
+        mkdir 'javac'
+        mkdir jvmOutDir
+        mkdir executorDir
+        mkdir 'test'
+        mkdir 'deprecated'
+        mkdir 'experiment'
+        mkdir 'documentation'
+        mkdir tempDir
+    }
+}
+
+// Function to generate grammar tasks
+def generateGrammarTask(String grammarName) {
+    task "generate${grammarName}Grammar" {
+        inputs.file file("${antlrInDir}/${grammarName}.g4")
+        outputs.dir antlrOutDir
+
+        doLast {
+            println "Generating grammar files for: ${grammarName}"
+            exec {
+                commandLine "${javaHome}/bin/java", '-jar', antlrJar, '-Dlanguage=Java', '-visitor', '-o', antlrOutDirParent, file("${antlrInDir}/${grammarName}.g4")
+            }
+        }
+    }
+}
+
+// Generate grammar tasks for each grammar file
+grammarFiles.each { File file ->
+    def grammarName = file.name.replace('.g4', '')
+    generateGrammarTask(grammarName)
+}
+
+// Define source sets
+sourceSets {
+    main {
+        java {
+            srcDirs = ['javac', antlrOutDir]
+        }
+    }
+}
+
+// Task to compile Java files
+task compileJava(type: JavaCompile) {
+    source = sourceSets.main.java
+    classpath = sourceSets.main.compileClasspath
+    destinationDir = file(jvmOutDir)
+}
+
+// Task to build JAR file
+task buildJar(type: Jar) {
+    from compileJava.destinationDir
+    archiveBaseName.set('project')
+    destinationDirectory.set(file(jvmOutDir))
+}
+
+// Task to create an executable script
+task createScript {
+    dependsOn buildJar
+
+    doLast {
+        def jarFile = buildJar.archiveFile.get().asFile
+        def scriptFile = file("${executorDir}/${project.name}")
+
+        scriptFile.text = """#!/usr/bin/env bash
+${javaHome}/bin/java -cp ${jarFile} ${project.name}
+"""
+        scriptFile.setExecutable(true)
+    }
+}
+
+// Task to clean generated files
+task clean(type: Delete) {
+    delete antlrOutDir
+    delete jvmOutDir
+    delete tempDir
+    delete programPrintRuleNameList
+    delete programSyntaxTreeTest
+    delete programSyntaxTree20240412
+    delete fileTree(dir: executorDir, exclude: '.githolder')
+}
+
+// Task to print version information
+task printVersion {
+    doLast {
+        println "ANTLR Jar: ${antlrJar.name}"
+        println "Java version: ${javaHome}/bin/java -version".execute().text
+        println "Jar version: ${javaHome}/bin/jar --version".execute().text
+        println "Gradle version: ${gradle.gradleVersion}"
+    }
+}
+
+// Default tasks
+defaultTasks 'setup', 'generateGQLGrammar', 'compileJava', 'buildJar', 'createScript'
+
+// Set encoding for JavaCompile tasks
+tasks.withType(JavaCompile) {
+    options.encoding = 'UTF-8'
+}
+
+// Task to build everything
+task all {
+    dependsOn setup, 'generateGQLGrammar', compileJava, buildJar, createScript
+}
+
+// Task to generate grammar files
+task grammar {
+    dependsOn setup, 'generateGQLGrammar'
+}
+
+// Task to compile Java files
+task java {
+    dependsOn setup, compileJava
+}
+
+// Task to clean temporary files
+task cleanTemporary(type: Delete) {
+    delete tempDir
+}
+
+// Task to clean all files
+task cleanAll {
+    dependsOn clean
+}
+
+// Task to clean all files except program files
+task cleanAllMinus {
+    doLast {
+        delete tempDir
+        delete antlrOutDir
+        delete fileTree(dir: jvmOutDir, include: '**/*.class')
+    }
+}
+
+// Task to clean program files
+task cleanProgram {
+    doLast {
+        delete programPrintRuleNameList
+        delete programSyntaxTreeTest
+        delete programSyntaxTree20240412
+    }
+}
+
+// Task to clean class files
+task cleanClass {
+    doLast {
+        delete fileTree(dir: jvmOutDir, include: '**/*.class')
+    }
+}
+
+// Task to clean grammar files
+task cleanGrammar {
+    doLast {
+        delete fileTree(dir: antlrOutDir, include: '**/*.java')
+    }
+}
+
+// Task to clean a specific program
+task cleanProgramSpecific {
+    doLast {
+        def programName = project.findProperty('program') ?: ''
+        if (programName) {
+            delete fileTree(dir: jvmOutDir, include: "${programName}.jar")
+            delete fileTree(dir: executorDir, include: "${programName}")
+        } else {
+            println "Usage: gradle cleanProgramSpecific -Pprogram=<name>"
+        }
+    }
+}
+
+// Task to clean a specific program and everything else
+task cleanProgramPlusSpecific {
+    doLast {
+        def programName = project.findProperty('program') ?: ''
+        if (programName) {
+            delete fileTree(dir: jvmOutDir, include: "${programName}.jar")
+            delete fileTree(dir: executorDir, include: "${programName}")
+            delete tempDir
+            delete antlrOutDir
+        } else {
+            println "Usage: gradle cleanProgramPlusSpecific -Pprogram=<name>"
+        }
+    }
+}
+
+// Task to clean a specific program and everything else except program files
+task cleanProgramMinusSpecific {
+    doLast {
+        def programName = project.findProperty('program') ?: ''
+        if (programName) {
+            delete fileTree(dir: jvmOutDir, include: "${programName}.jar")
+            delete fileTree(dir: executorDir, include: "${programName}")
+            delete tempDir
+            delete fileTree(dir: jvmOutDir, include: '**/*.class')
+        } else {
+            println "Usage: gradle cleanProgramMinusSpecific -Pprogram=<name>"
+        }
+    }
+}
+
+// Task to clean a specific grammar
+task cleanGrammarSpecific {
+    doLast {
+        def grammarName = project.findProperty('grammar') ?: ''
+        if (grammarName) {
+            delete fileTree(dir: antlrOutDir, include: "${grammarName}*")
+        } else {
+            println "Usage: gradle cleanGrammarSpecific -Pgrammar=<name>"
+        }
+    }
+}
+
+// Define tasks for each program
+task buildPrintRuleNameList {
+    dependsOn setup, 'generateGQLGrammar', compileJava
+}
+
+task buildSyntaxTreeTest {
+    dependsOn setup, 'generateSyntaxTreeGrammar', compileJava
+}
+
+task buildSyntaxTree20240412 {
+    dependsOn setup, 'generateSyntaxTree20240412Grammar', compileJava
+}
diff --git a/developer/deprecated/makefil_clean b/developer/deprecated/makefil_clean
new file mode 100644 (file)
index 0000000..7cc647e
--- /dev/null
@@ -0,0 +1,105 @@
+# 1. clean:temporary  - removes files from ./temporary
+# 2. General clean targets:
+#      clean:all  - removes all things make built, and thus can be replaced by running make again.
+#      clean:all-   (minus after the all)  same as clean:all except for the program files (and their .jar if any)
+#      clean:program -  all program files, i.e. ./exector/<program>   and ./jvm/<program.jar>  for all programs.
+#      clean:class - class files
+#      clean:grammar - all generated grammar files
+     
+# 2. 
+#     clean:program:<name>
+#     similear to clean:program, but only for the named program
+
+#     clean:program+:<name>
+#     bascially clean:all but only for the named program
+
+#     clean:program-:<mame>
+#     baiscally clean:all- but only for the named program
+
+# 3. clean:grammar:<name>
+#     siimilar to clean:grammar, but only for the named grammar        
+
+# Function to clean a list of files
+# Accepts a list of files as an argument and deletes the files in the list
+# without complaining if a file is not found
+define clean_files
+  echo "Cleaning files: $1";\
+  for file in $1; do \
+    if [ -e "$$file" ]; then \
+      echo rm -f "$$file"; \
+      rm -f "$$file"; \
+    fi; \
+  done
+endef
+
+
+# Function to clean the contents of a directory
+# Accepts a directory as an argument, checks that the argument is not empty,
+# ensures the directory exists, and then deletes the contents of the directory
+# (excluding a file called .githolder)
+define clean_directory
+  if [ -z "$1" ]; then \
+    echo "Error: Directory argument is empty"; \
+  elif [ ! -d "$1" ]; then \
+    echo "Error: Directory $1 does not exist"; \
+  else \
+    : echo "Cleaning directory: $1"; \
+    find "$1" -mindepth 1 -maxdepth 1 ! -name '.githolder' -exec rm -rf {} +; \
+    touch "$1/.githolder"; \
+  fi
+endef
+
+# Function to handle individual cleaning
+# Accepts a single option and removes the appropriate files
+define do_clean
+  echo "Cleaning files for option: $1";\
+  if [ "$1" = "" ]; then \
+    echo "Usage: make clean:< all[-] | program[+/-][:<name>] | grammar[:<name>] | class | temp[orary] >"; \
+  elif [ "$1" = "temporary" -o "$1" = "temp" ]; then \
+    $(call clean_directory,$(TEMP_DIR)); \
+  elif [ "$1" = "all" ]; then \
+    $(call clean_directory,$(TEMP_DIR)); \
+    $(call clean_files,$(ANTLR_OUT_FPL)); \
+    $(call clean_files,$(JAVA_COMP_OUT_FPL)); \
+    $(call clean_files,$(PROGRAM_FPL)); \
+  elif [ "$1" = "all-" ]; then \
+    $(call clean_directory,$(TEMP_DIR)); \
+    $(call clean_files,$(ANTLR_OUT_FPL)); \
+    $(call clean_files,$(JAVA_COMP_OUT_PRIMARY_FPL)); \
+  elif [ "$1" = "program" ]; then \
+    $(call clean_files,$(PROGRAM_FPL)); \
+  elif [ "$1" = "class" ]; then \
+    $(call clean_files,$(JAVA_COMP_OUT_FPL)); \
+  elif [ "$1" = "grammar" ]; then \
+    $(call clean_files,$(ANTLR_OUT_FPL)); \
+  elif [ "$1" = "program:"* ]; then \
+    program_name=$${1#program:}; \
+    $(call clean_files,$(JAVA_COMP_OUT_DIR)/$${program_name}.jar executor/$${program_name}); \
+  elif [ "$1" = "program+:"* ]; then \
+    program_name=$${1#program+:}; \
+    $(call clean_files,$(JAVA_COMP_OUT_DIR)/$${program_name}.jar executor/$${program_name}); \
+    $(call clean_directory,$(TEMP_DIR)); \
+    $(call clean_files,$(ANTLR_OUT_FPL)); \
+  elif [ "$1" = "program-:"* ]; then \
+    program_name=$${1#program-:}; \
+    $(call clean_files,$(JAVA_COMP_OUT_DIR)/$${program_name}.jar executor/$${program_name}); \
+    $(call clean_directory,$(TEMP_DIR)); \
+    $(call clean_files,$(JAVA_COMP_OUT_PRIMARY_FPL)); \
+  elif [ "$1" = "grammar:"* ]; then \
+    grammar_name=$${1#grammar:}; \
+    $(call clean_files,$(ANTLR_OUT_DIR)/$${grammar_name}*); \
+  else \
+    echo "Unknown clean option: $1"; \
+  fi
+endef
+
+# Default clean target
+.PHONY: clean
+clean:
+       @echo "Usage: make clean:< all[-] | program[+/-][:<name>] | grammar[:<name>] | class | temp[orary] >"
+
+# Clean specific program or option
+# Calls the do_clean function with the pattern as an argument
+.PHONY: clean\:%
+clean\:%:
+       @$(call do_clean,$*)
diff --git a/developer/executor/PrintRuleNameList b/developer/executor/PrintRuleNameList
new file mode 100755 (executable)
index 0000000..9114f23
--- /dev/null
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+/var/user_data/Thomas-developer/GQL_to_Cypher/tool/jdk-22.0.1+8/bin/java -cp jvm/PrintRuleNameList.jar PrintRuleNameList
index 2902fcf..34112ba 100755 (executable)
@@ -2,5 +2,5 @@
 
 cd "$REPO_HOME"/developer || { echo "Failed to change directory to" "$REPO_HOME"/developer; exit 1; }
 
-/usr/bin/make -k $@
+/usr/bin/make --no-builtin-rules --keep-going $@
 
index 8b2ccb2..a7c70f9 100644 (file)
@@ -119,9 +119,9 @@ all: setup $(PROGRAM_FPL)
 grammar: setup $(ANTLR_OUT_FPL)
 
 # specific programs or program versions:
-PrintRuleNameList: $(PrintRuleNameList)
-SyntaxTree_Test: $(ANTLR_OUT_SyntaxTree_Test_FPL) $(SyntaxTree_Test)
-SyntaxTree_20240412: $(ANTLR_OUT_SyntaxTree_20240412_FPL) $(SyntaxTree_20240412)
+PrintRuleNameList: $(PROGRAM_PrintRuleNameList)
+SyntaxTree_Test: $(ANTLR_OUT_SyntaxTree_Test_FPL) $(PROGRAM_SyntaxTree_Test)
+SyntaxTree_20240412: $(ANTLR_OUT_SyntaxTree_20240412_FPL) $(PROGRAM_SyntaxTree_20240412)
 
 # Specific grammar targets. Run them like this:
 # > make <grammar_name>
@@ -213,7 +213,7 @@ setup:
 # Accepts a list of files as an argument and deletes the files in the list
 # without complaining if a file is not found
 define clean_files
-  @echo "Cleaning files: $1";\
+  echo "Cleaning files: $1";\
   for file in $1; do \
     if [ -e "$$file" ]; then \
       echo rm -f "$$file"; \
@@ -311,16 +311,31 @@ $(ANTLR_OUT_DIR)/%Visitor.java: $(ANTLR_IN_DIR)/%.g4
        @echo "making grammar from:" $<
        $(JAVA_INTERP) -jar $(ANTLR_JAR) -Dlanguage=Java -visitor -o $(ANTLR_OUT_DIR_PARENT) $<
 
-# Generic recipe for building .jar files and placing scripts in the executor directory
 $(JAVA_COMP_OUT_DIR)/%.jar: $(JAVA_COMP_IN_PRIMARY_DIR)/%.java
        @echo "Building $*..."
        $(JAVA_COMP) -d $(JAVA_COMP_OUT_DIR) -sourcepath $(JAVA_COMP_IN_DL) $<
        $(JAVA_ARCHIVE) cf $@ -C $(JVM_IN_DIR) $*.class
+       @echo "Created $@"
 
+.PRECIOUS: $(JAVA_COMP_OUT_DIR)/%.jar
 executor/%: $(JAVA_COMP_OUT_DIR)/%.jar
        @echo "Creating script for $*..."
-       echo "#!/usr/bin/env bash\n$(JAVA_INTERP) -cp $@ $*" > executor/$*
+       @echo "#!/usr/bin/env bash" > executor/$*
+       @echo "$(JAVA_INTERP) -cp $< $*" >> executor/$*
        chmod +x executor/$*
+       @echo "Created script executor/$*"
+
+# # Generic recipe for building .jar files and placing scripts in the executor directory
+# $(JAVA_COMP_OUT_DIR)/%.jar: $(JAVA_COMP_IN_PRIMARY_DIR)/%.java
+#      @echo "Building $*..."
+#      $(JAVA_COMP) -d $(JAVA_COMP_OUT_DIR) -sourcepath $(JAVA_COMP_IN_DL) $<
+#      $(JAVA_ARCHIVE) cf $@ -C $(JVM_IN_DIR) $*.class
+
+# executor/%: $(JAVA_COMP_OUT_DIR)/%.jar
+#      @echo "Creating script for $*..."
+#      @echo "#!/usr/bin/env bash" > executor/$*
+#      @echo "$(JAVA_INTERP) -cp $< $*" >> executor/$*
+#      chmod +x executor/$*
 
 
 # LocalWords:  makefile