Skip to content

Commit 766ca8a

Browse files
Implement new options -o, -j, -class-file-path, -java-file-path (#99)
1 parent 626f49c commit 766ca8a

25 files changed

+475
-228
lines changed

.github/workflows/codeql.yml

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# For most projects, this workflow file will not need changing; you simply need
2+
# to commit it to your repository.
3+
#
4+
# You may wish to alter this file to override the set of languages analyzed,
5+
# or to provide custom queries or build logic.
6+
#
7+
# ******** NOTE ********
8+
# We have attempted to detect the languages in your repository. Please check
9+
# the `language` matrix defined below to confirm you have the correct set of
10+
# supported CodeQL languages.
11+
#
12+
name: "CodeQL"
13+
14+
on:
15+
push:
16+
branches: [ "develop" ]
17+
pull_request:
18+
# The branches below must be a subset of the branches above
19+
branches: [ "develop" ]
20+
21+
jobs:
22+
analyze:
23+
name: Analyze
24+
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
25+
permissions:
26+
actions: read
27+
contents: read
28+
security-events: write
29+
30+
strategy:
31+
fail-fast: false
32+
matrix:
33+
language: [ 'cpp', 'java' ]
34+
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
35+
# Use only 'java' to analyze code written in Java, Kotlin or both
36+
# Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
37+
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
38+
39+
steps:
40+
- name: Checkout repository
41+
uses: actions/checkout@v3
42+
43+
# Initializes the CodeQL tools for scanning.
44+
- name: Initialize CodeQL
45+
uses: github/codeql-action/init@v2
46+
with:
47+
languages: ${{ matrix.language }}
48+
# If you wish to specify custom queries, you can do so here or in a config file.
49+
# By default, queries listed here will override any specified in a config file.
50+
# Prefix the list here with "+" to use these queries and those in the config file.
51+
52+
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
53+
# queries: security-extended,security-and-quality
54+
55+
56+
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
57+
# If this step fails, then you should remove it and run the build manually (see below)
58+
# - name: Autobuild
59+
# uses: github/codeql-action/autobuild@v2
60+
61+
- name: Install dependencies on Ubuntu 22.04
62+
run: |
63+
sudo apt-get update -y
64+
sudo apt-get install -y default-jdk build-essential bison flex gettext texinfo automake autoconf
65+
66+
- name: Install opensource COBOL 4J
67+
run: |
68+
mkdir ~/.java_lib
69+
curl -L -o ~/.java_lib/sqlite.jar https://github.com/xerial/sqlite-jdbc/releases/download/3.36.0.3/sqlite-jdbc-3.36.0.3.jar
70+
export CLASSPATH=":$HOME/.java_lib/sqlite.jar"
71+
./configure --prefix=/usr/
72+
make
73+
sudo make install
74+
export CLASSPATH=":/usr/lib/opensourcecobol4j/libcobj.jar:$HOME/.java_lib/sqlite.jar"
75+
76+
# ℹ️ Command-line programs to run using the OS shell.
77+
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
78+
79+
# If the Autobuild fails above, remove it and uncomment the following three lines.
80+
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
81+
82+
# - run: |
83+
# echo "Run, Build Application using script"
84+
# ./location_of_script_within_repo/buildscript.sh
85+
86+
- name: Perform CodeQL Analysis
87+
uses: github/codeql-action/analyze@v2
88+
with:
89+
category: "/language:${{matrix.language}}"

cobj/cobj.c

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,8 @@ static pid_t cob_process_id = 0;
229229
static int strip_output = 0;
230230
static int gflag_set = 0;
231231

232-
static char *output_name;
232+
static char *output_name = NULL;
233+
static char *java_source_dir = NULL;
233234

234235
static const char *cob_tmpdir; /* /tmp */
235236

@@ -248,7 +249,7 @@ static cob_sighandler_t intsig = NULL;
248249
static cob_sighandler_t qutsig = NULL;
249250
#endif
250251

251-
static const char short_options[] = "hVvECbmxgwo:t:I:L:l:D:";
252+
static const char short_options[] = "hVvECbmxgwo:j:t:I:L:l:D:";
252253

253254
static const struct option long_options[] = {
254255
{"help", no_argument, NULL, 'h'},
@@ -264,6 +265,8 @@ static const struct option long_options[] = {
264265
{"std", required_argument, NULL, '$'},
265266
{"conf", required_argument, NULL, '&'},
266267
{"debug", no_argument, NULL, 'd'},
268+
{"class-file-dir", optional_argument, NULL, 'o'},
269+
{"java-source-dir", optional_argument, NULL, 'j'},
267270
{"ext", required_argument, NULL, 'e'},
268271
{"free", no_argument, &cb_source_format, CB_FORMAT_FREE},
269272
{"free_1col_aster", no_argument, &cb_source_format,
@@ -762,6 +765,10 @@ static void cobc_print_usage(void) {
762765
puts(_(" -free_1col_aster Use free(1col_aster) source "
763766
"format"));
764767
puts(_(" -g Enable Java compiler debug"));
768+
puts(_(" -o <dir> Place class files into <dir>"));
769+
puts(_(" -class-file-dir=<dir> Place class files into <dir>"));
770+
puts(_(" -j <dir> Place java files into <dir>"));
771+
puts(_(" -java-source-dir=<dir> Place java files into <dir>"));
765772
puts(_(" -E Preprocess only; do not compile "
766773
"or link"));
767774
puts(_(" -C Translation only; convert COBOL "
@@ -827,6 +834,18 @@ static int process_command_line(const int argc, char *argv[]) {
827834
}
828835
}
829836

837+
/*while(c = getopt(argc, argv, short_options)) {
838+
switch(c) {
839+
case 'o':
840+
output_name = strdup(optarg);
841+
break;
842+
843+
case 'j':
844+
java_source_dir = strdup(optarg);
845+
break;
846+
}
847+
}*/
848+
830849
while ((c = getopt_long_only(argc, argv, short_options, long_options,
831850
&idx)) >= 0) {
832851
switch (c) {
@@ -916,10 +935,17 @@ static int process_command_line(const int argc, char *argv[]) {
916935
break;
917936

918937
case 'o':
919-
/* -o : Output file */
938+
/* -o : the directory where class files are stored */
939+
/* -class-file-dir : the directory where class files are stored */
920940
output_name = strdup(optarg);
921941
break;
922942

943+
case 'j':
944+
/* -j : the directory where java files are stored */
945+
/* -java-file-dir : the directory where java files are stored */
946+
java_source_dir = strdup(optarg);
947+
break;
948+
923949
case 'g':
924950
/* -g : Generate C debug code */
925951
save_csrc = 1;
@@ -1593,7 +1619,8 @@ static int process_translate(struct filename *fn) {
15931619
for (int i = 0; i < PROGRAM_ID_LIST_MAX_LEN; ++i) {
15941620
program_id_list[i] = NULL;
15951621
}
1596-
codegen(p, 0, program_id_list);
1622+
codegen(p, 0, program_id_list,
1623+
java_source_dir == NULL ? "./" : java_source_dir);
15971624

15981625
return 0;
15991626
}
@@ -1616,7 +1643,10 @@ static int process_compile(struct filename *fn) {
16161643
}
16171644

16181645
for (char **program_id = program_id_list; *program_id; ++program_id) {
1619-
sprintf(buff, "javac %s -encoding SJIS -d . %s.java", cob_java_flags,
1646+
char *java_source_dir_a = java_source_dir == NULL ? "./" : java_source_dir;
1647+
char *output_name_a = output_name == NULL ? "./" : output_name;
1648+
sprintf(buff, "javac %s -encoding SJIS -sourcepath %s -d %s %s/%s.java",
1649+
cob_java_flags, java_source_dir_a, output_name_a, java_source_dir_a,
16201650
*program_id);
16211651
ret = process(buff);
16221652
}

cobj/codegen.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5512,8 +5512,8 @@ void joutput_execution_entry_func() {
55125512
joutput_line("}");
55135513
}
55145514

5515-
void codegen(struct cb_program *prog, const int nested,
5516-
char **program_id_list) {
5515+
void codegen(struct cb_program *prog, const int nested, char **program_id_list,
5516+
char *java_source_dir) {
55175517
int i;
55185518
cb_tree l;
55195519
struct field_list *k;
@@ -5545,8 +5545,8 @@ void codegen(struct cb_program *prog, const int nested,
55455545

55465546
// modify 8/29 11:00
55475547
joutput_target = yyout;
5548-
char java_file_name[64];
5549-
sprintf(java_file_name, "%s.java", prog->program_id);
5548+
char java_file_name[1024];
5549+
sprintf(java_file_name, "%s/%s.java", java_source_dir, prog->program_id);
55505550
*program_id_list = (char *)prog->program_id;
55515551
joutput_target = fopen(java_file_name, "w");
55525552

@@ -5834,7 +5834,7 @@ void codegen(struct cb_program *prog, const int nested,
58345834
joutput_line("}");
58355835
fclose(joutput_target);
58365836
++program_id_list;
5837-
codegen(prog->next_program, 1, program_id_list);
5837+
codegen(prog->next_program, 1, program_id_list, java_source_dir);
58385838
return;
58395839
}
58405840

cobj/tree.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1568,7 +1568,7 @@ extern void cobc_tree_cast_error(cb_tree x, const char *filen,
15681568

15691569
/* codegen.c */
15701570
extern void codegen(struct cb_program *prog, const int nested,
1571-
char **program_id_list);
1571+
char **program_id_list, char *java_source_dir);
15721572

15731573
/* scanner.l */
15741574
extern void cb_set_in_procedure(void);

tests/Makefile.am

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,8 @@ command_line_options_DEPENDENCIES = \
153153
command-line-options.src/fserial-variable.at \
154154
command-line-options.src/fshort-variable.at \
155155
command-line-options.src/java-package.at \
156-
command-line-options.src/edit-code-command.at
156+
command-line-options.src/edit-code-command.at \
157+
command-line-options.src/file-path.at
157158

158159
misc_DEPENDENCIES = \
159160
misc.src/signed-comp3.at \

tests/Makefile.in

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,8 @@ command_line_options_DEPENDENCIES = \
694694
command-line-options.src/fserial-variable.at \
695695
command-line-options.src/fshort-variable.at \
696696
command-line-options.src/java-package.at \
697-
command-line-options.src/edit-code-command.at
697+
command-line-options.src/edit-code-command.at \
698+
command-line-options.src/file-path.at
698699

699700
misc_DEPENDENCIES = \
700701
misc.src/signed-comp3.at \

tests/command-line-options.at

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@ m4_include([ftrace-ftraceall.at])
1414
m4_include([fsyntax-only.at])
1515
m4_include([fserial-variable.at])
1616
m4_include([fshort-variable.at])
17+
m4_include([file-path.at])
1718

1819
# m4_include([edit-code-command.at])
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
AT_SETUP([file-path options])
2+
3+
AT_DATA([prog.cbl], [
4+
IDENTIFICATION DIVISION.
5+
PROGRAM-ID. prog.
6+
DATA DIVISION.
7+
WORKING-STORAGE SECTION.
8+
PROCEDURE DIVISION.
9+
DISPLAY "HELLO".
10+
])
11+
12+
AT_CHECK([mkdir class_dir java_dir sub])
13+
14+
AT_CHECK([${COBJ} -j java_dir prog.cbl])
15+
AT_CHECK([test -e java_dir/prog.java])
16+
AT_CHECK([test -e prog.class])
17+
AT_CHECK([test ! -e prog.java])
18+
AT_CHECK([rm -f *.java *.class class_dir/* java_dir/*])
19+
20+
AT_CHECK([${COBJ} -java-source-dir=java_dir prog.cbl])
21+
AT_CHECK([test -e java_dir/prog.java])
22+
AT_CHECK([test -e prog.class])
23+
AT_CHECK([test ! -e prog.java])
24+
AT_CHECK([rm -f *.java *.class class_dir/* java_dir/*])
25+
26+
AT_CHECK([${COBJ} -o class_dir prog.cbl])
27+
AT_CHECK([test -e prog.java])
28+
AT_CHECK([test -e class_dir/prog.class])
29+
AT_CHECK([test ! -e prog.class])
30+
AT_CHECK([rm -f *.java *.class class_dir/* java_dir/*])
31+
32+
AT_CHECK([${COBJ} -class-file-dir=class_dir prog.cbl])
33+
AT_CHECK([test -e prog.java])
34+
AT_CHECK([test -e class_dir/prog.class])
35+
AT_CHECK([test ! -e prog.class])
36+
AT_CHECK([rm -f *.java *.class class_dir/* java_dir/*])
37+
38+
AT_CHECK(${COBJ} -j java_dir -o class_dir prog.cbl)
39+
AT_CHECK([test -e java_dir/prog.java])
40+
AT_CHECK([test ! -e prog.java])
41+
AT_CHECK([test -e class_dir/prog.class])
42+
AT_CHECK([test ! -e prog.class])
43+
AT_CHECK([rm -f *.java *.class class_dir/* java_dir/*])
44+
45+
# compile in sub/
46+
AT_CHECK([cd sub && ${COBJ} -j ../java_dir ../prog.cbl])
47+
AT_CHECK([test -e java_dir/prog.java])
48+
AT_CHECK([test -e sub/prog.class])
49+
AT_CHECK([test ! -e sub/prog.java])
50+
AT_CHECK([test ! -e prog.java])
51+
AT_CHECK([rm -f *.java *.class class_dir/* java_dir/* sub/*])
52+
53+
AT_CHECK([cd sub && ${COBJ} -java-source-dir=../java_dir ../prog.cbl])
54+
AT_CHECK([test -e java_dir/prog.java])
55+
AT_CHECK([test -e sub/prog.class])
56+
AT_CHECK([test ! -e prog.java])
57+
AT_CHECK([test ! -e sub/prog.java])
58+
AT_CHECK([rm -f *.java *.class class_dir/* java_dir/* sub/*])
59+
60+
AT_CHECK([cd sub && ${COBJ} -o ../class_dir ../prog.cbl])
61+
AT_CHECK([test -e sub/prog.java])
62+
AT_CHECK([test -e class_dir/prog.class])
63+
AT_CHECK([test ! -e prog.class])
64+
AT_CHECK([test ! -e sub/prog.class])
65+
AT_CHECK([rm -f *.java *.class class_dir/* java_dir/* sub/*])
66+
67+
AT_CHECK([cd sub && ${COBJ} -class-file-dir=../class_dir ../prog.cbl])
68+
AT_CHECK([test -e sub/prog.java])
69+
AT_CHECK([test -e class_dir/prog.class])
70+
AT_CHECK([test ! -e prog.class])
71+
AT_CHECK([test ! -e sub/prog.class])
72+
AT_CHECK([rm -f *.java *.class class_dir/* java_dir/* sub/*])
73+
74+
AT_CHECK([cd sub && ${COBJ} -j ../java_dir -o ../class_dir ../prog.cbl])
75+
AT_CHECK([test -e java_dir/prog.java])
76+
AT_CHECK([test ! -e prog.java])
77+
AT_CHECK([test ! -e sub/prog.java])
78+
AT_CHECK([test -e class_dir/prog.class])
79+
AT_CHECK([test ! -e prog.class])
80+
AT_CHECK([test ! -e sub/prog.class])
81+
AT_CHECK([rm -f *.java *.class class_dir/* java_dir/* sub/*])
82+
83+
# with -C option
84+
85+
AT_CHECK([${COBJ} -C -j java_dir prog.cbl])
86+
AT_CHECK([test -e java_dir/prog.java])
87+
AT_CHECK([test ! -e prog.class])
88+
AT_CHECK([test ! -e prog.java])
89+
AT_CHECK([rm -f *.java *.class class_dir/* java_dir/*])
90+
91+
AT_CHECK([${COBJ} -C -java-source-dir=java_dir prog.cbl])
92+
AT_CHECK([test -e java_dir/prog.java])
93+
AT_CHECK([test ! -e prog.class])
94+
AT_CHECK([test ! -e prog.java])
95+
AT_CHECK([rm -f *.java *.class class_dir/* java_dir/*])
96+
97+
AT_CHECK([${COBJ} -C -j java_dir -o class_dir prog.cbl])
98+
AT_CHECK([test -e java_dir/prog.java])
99+
AT_CHECK([test ! -e prog.class])
100+
AT_CHECK([test ! -e class_dir/prog.class])
101+
AT_CHECK([test ! -e prog.java])
102+
AT_CHECK([rm -f *.java *.class class_dir/* java_dir/*])
103+
104+
AT_CHECK([${COBJ} -C -java-source-dir=java_dir -o class_dir prog.cbl])
105+
AT_CHECK([test -e java_dir/prog.java])
106+
AT_CHECK([test ! -e prog.class])
107+
AT_CHECK([test ! -e class_dir/prog.class])
108+
AT_CHECK([test ! -e prog.java])
109+
AT_CHECK([rm -f *.java *.class class_dir/* java_dir/*])
110+
111+
AT_CHECK([${COBJ} -C -j java_dir -class-file-dir=class_dir prog.cbl])
112+
AT_CHECK([test -e java_dir/prog.java])
113+
AT_CHECK([test ! -e prog.class])
114+
AT_CHECK([test ! -e class_dir/prog.class])
115+
AT_CHECK([test ! -e prog.java])
116+
AT_CHECK([rm -f *.java *.class class_dir/* java_dir/*])
117+
118+
AT_CHECK([${COBJ} -C -java-source-dir=java_dir -class-file-dir=class_dir prog.cbl])
119+
AT_CHECK([test -e java_dir/prog.java])
120+
AT_CHECK([test ! -e prog.class])
121+
AT_CHECK([test ! -e class_dir/prog.class])
122+
AT_CHECK([test ! -e prog.java])
123+
AT_CHECK([rm -f *.java *.class class_dir/* java_dir/*])
124+
125+
AT_CLEANUP

0 commit comments

Comments
 (0)