blob: 7436d59bd5159e5178d91d49b2370f561c341146 [file] [log] [blame]
Stephan Herrmann7b7062f2010-04-01 19:56:59 +00001#!/bin/bash
2############################################################################################################################################################
3# This file is part of "Object Teams Development Tooling"-Software
4#
5# Copyright 2003, 2006 Fraunhofer Gesellschaft, Munich, Germany,
6# for its Fraunhofer Institute and Computer Architecture and Software
7# Technology (FIRST), Berlin, Germany and Technical University Berlin,
8# Germany.
9#
10# All rights reserved. This program and the accompanying materials
11# are made available under the terms of the Eclipse Public License v1.0
12# which accompanies this distribution, and is available at
13# http://www.eclipse.org/legal/epl-v10.html
14#
15#
16# Contributors:
17# Fraunhofer FIRST - Initial API and implementation
18# Technical University Berlin - Initial API and implementation
19#
20# Dieses Script erzeugt aus der java.g Datei alle automatisch generierbaren Dateien
21# und kopiert diese an die richtigen Stellen innerhalb der aktuellen Sourcen
22# Das Script benötigt den Ordner "OTDTCore"
23# Das Script benötigt die Datei "objectteams.g" welche aus dem Eclipse Quellcode extrahiert werden kann.
24# Zu Beginn des Vorganges wird eine Kopie aller Dateien die in den Sourcen verändert werden erstellt
25
26############################################################################################################################################################
27
28JIKESPG_HOME=${JIKESPG_HOME:-/usr/bin}
29export JIKESPG_HOME
30
31# please adjust:
Stephan Herrmann0e6e6d72010-09-12 13:10:25 +000032JDTCORE_JAR=/home/local/eclipse-SDK-3.6/plugins/org.eclipse.jdt.core_3.6.0.v_A58.jar
Stephan Herrmann7b7062f2010-04-01 19:56:59 +000033
34
35
36if test $# -ne 2
37then
38 echo "Achtung: JIKESPG_HOME muss KORREKT gesetzt sein!"
39 echo "Aufruf: generateOTParser.sh <grammatik> <eclipse-projekt-OTDTCore-verzeichnis>"
40 echo "Bsp: generateOTParser.sh objectteams.g OTDTCore"
41 echo "(im Verzeichnis des Skripts aufzurufen)."
42 exit
43fi
44
45GRAMMAR=`readlink -f "$1"`
46SOURCE=`readlink -f "$2"`
47
48if test -f $JIKESPG_HOME/jikespg
49then
50 echo "jikespg wurde gefunden"
51else
52 echo "JIKESPG_HOME/jikespg konnte nicht gefunden werden"
53 exit
54fi
55
56if test -f $GRAMMAR
57then
58 echo "Verwende Grammatik:" $GRAMMAR
59else
60 echo "Fehler: Grammatik" $GRAMMAR "konnte nicht gefunden werden!"
61 echo "Aufruf: generateOTParser.sh <grammatik> <eclipse-projekt-OTDTCore-verzeichnis>"
62 exit
63fi
64
65if test -d $SOURCE
66then
67 echo "Verwende Eclipse-Sourcen:" $SOURCE
68else
69 echo "Fehler: Eclipse-Sourcen" $SOURCE "konnten nicht gefunden werden!"
70 echo "Aufruf: generateOTParser.sh <grammatik> <eclipse-projekt-OTDTCore-verzeichnis>"
71 exit
72fi
73
74echo "Initiales Aufräumen"
75if test -d output
76then
77 rm -r output
78fi
79
80if test -d backup
81then
82 rm -r backup
83fi
84
85echo "Leere Verzeichnisse erzeugen"
86mkdir output
87mkdir backup
88
89echo "Original Dateien vor der Anpassung aus Sourcen holen"
90
91if test -f $SOURCE/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java
92then
93 cp $SOURCE/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java output
94else
95 exit
96fi
97
98if test -f $SOURCE/compiler/org/eclipse/jdt/internal/compiler/parser/TerminalTokens.java
99then
100 cp $SOURCE/compiler/org/eclipse/jdt/internal/compiler/parser/TerminalTokens.java output
101else
102 exit
103fi
104
105if test -f $SOURCE/compiler/org/eclipse/jdt/internal/compiler/parser/ParserBasicInformation.java
106then
107 cp $SOURCE/compiler/org/eclipse/jdt/internal/compiler/parser/ParserBasicInformation.java output
108else
109 exit
110fi
111
112echo "Eine Kopie der Originaldateien die verändert werden im Ordner backup erzeugen"
113cp $SOURCE/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java backup
114cp $SOURCE/compiler/org/eclipse/jdt/internal/compiler/parser/TerminalTokens.java backup
115cp $SOURCE/compiler/org/eclipse/jdt/internal/compiler/parser/ParserBasicInformation.java backup
116cp $SOURCE/compiler/org/eclipse/jdt/internal/compiler/parser/parser?.rsc backup
117cp $SOURCE/compiler/org/eclipse/jdt/internal/compiler/parser/readableNames.properties backup
118
119cp $GRAMMAR output
120
121############################################################################################################################################################
122cd output
123echo "Parsergenerator starten"
124islalr=`$JIKESPG_HOME/jikespg $GRAMMAR | tee /tmp/jikes.log | grep grammar`
125
126if [ "$islalr" = "This grammar is LALR(1)." ]
127then
128 echo "Grammatik ist LALR(1)."
129else
130 echo "Grammatik ist nicht korrekt!"
131 exit
132fi
133
134chmod 644 *
135
136#echo "Konstanten von javasym.java umbenennen"
137cat javasym.java | sed -e s/TokenName\$eof/TokenNameEOF/g -e s/TokenName\$error/TokenNameERROR/g > javasym_tmp.java
138rm javasym.java
139mv javasym_tmp.java javasym.java
140cd ..
141############################################################################################################################################################
142cd output
143echo "Alles unnötige wegschneiden: javadef.java"
144cat javadef.java | awk '{
145 if($0 ~ /^[ \t]*{[ \t]*$/ ){
146 while((getline nextline) == 1 && nextline !~ /^[ \t]*}.*$/){
147 print nextline ;
148 }
149 print "}" ;
150 }
151}
152' > javadef_tmp.java
153
154echo "Alles unnötige wegschneiden: ParserBasicInformation.java"
155cat ParserBasicInformation.java | awk '{
156 if($0 ~ /^.*{[ \t]*$/ ){
157 print $0;
158 while((getline nextline) == 1 && nextline !~ /^[ \t]*}[ \t]*$/){
159 nextline="" ;
160 }
161 while((getline nextline) == 1 ){
162 print nextline ;
163 }
164 } else {
165 print $0
166 }
167}
168' > ParserBasicInformation_tmp.java
169
170echo "Kopiere den Inhalt von javadef.java nach ParserBasicInformation.java"
171cat ParserBasicInformation_tmp.java javadef_tmp.java > ParserBasicInformation.java
172cd ..
173############################################################################################################################################################
174cd output
175echo "Alles unnötige wegschneiden: JavaAction.java"
176cat JavaAction.java | awk '{\
177 if($0 !~ /^[ \t]*\/\/ This method is part of an automatic generation : do NOT edit-modify[ \t]*$/ ){\
178 print $0\
179 }\
180}\
181' > JavaAction_tmp.java
182
183echo "Ersetze die Methode consumeRule gegen das Token TMP_CUT_OUT"
184cat Parser.java | awk '{
185 if($0 ~ /^[ \t]*protected void consumeRule\(int act\) \{[ \t]*$/ ){
186 while((getline nextline) == 1 && nextline !~ /^[ \t]*}[ \t]*$/){
187 nextline="" ;
188 }
189 while((getline nextline) == 1 && nextline !~ /^[ \t]*}[ \t]*$/){
190 nextline="" ;
191 }
192 print "TMP_CUT_OUT";
193 while((getline nextline) == 1 ){
194 print nextline ;
195 }
196 } else {
197 print $0
198 }
199}
200' > Parser_tmp.java
201
202cat Parser_tmp.java | awk '{
203 if($0 ~ /^TMP_CUT_OUT$/ ){
204 while((getline nextline) == 1){
205 nextline="" ;
206 }
207 } else {
208 print $0
209 }
210}
211' > Parser_1_tmp.java
212
213cat Parser_tmp.java | awk '{
214 if($0 ~ /^TMP_CUT_OUT$/ ){
215 while((getline nextline) == 1){
216 print nextline;
217 }
218 }
219}
220' > Parser_2_tmp.java
221
222echo "Kopiere den Inhalt von JavaAction.java nach Parser.java"
223cat Parser_1_tmp.java JavaAction_tmp.java Parser_2_tmp.java > Parser.java
224cd ..
225############################################################################################################################################################
226cd output
227echo "Alles unnötige wegschneiden: TerminalTokens.java"
228cat TerminalTokens.java | awk '{
229 if($0 ~ /^[ \t]*public interface TerminalTokens \{[ \t]*$/ ){
230 print $0
231 while((getline nextline) == 1 && nextline !~ /^[ \t]*int[ \t]*$/){
232 print nextline ;
233 }
234 print nextline ;
235 while((getline nextline) == 1 && nextline !~ /^[ \t]*int[ \t]*$/){
236 print nextline ;
237 }
238 print nextline ;
239
240 while((getline nextline) == 1 ){
241 nextline ="";
242 }
243
244 } else {
245 print $0
246 }
247}
248' > TerminalTokens_tmp.java
249
250echo "Alles unnötige wegschneiden: javasym.java"
251cat javasym.java | awk '{
252 if($0 ~ /^[ \t]*public final static int[ \t]*$/ ){
253 while((getline nextline) == 1 ){
254 print nextline ;
255 }
256 }
257}
258' > javasym_tmp.java
259
260
261echo "Kopiere den Inhalt von javasym.java nach TerminalTokens.java"
262cat TerminalTokens_tmp.java javasym_tmp.java > TerminalTokens.java
263cd ..
264############################################################################################################################################################
265cd output
266
267cp ../UpdateParserFiles.java .
268if [ -z ${JDTCORE_JAR} ]
269then
270 if test -f ${ECLIPSE_HOME}/plugins/org.eclipse.jdt.core_3.0.0/jdtcore.jar
271 then
272 JDTCORE_JAR=${ECLIPSE_HOME}/plugins/org.eclipse.jdt.core_3.0.0/jdtcore.jar
273 else
274 echo "FEHLER: jdtcore.jar nicht gefunden!"
275 echo "Bitte Umgebungsvariable ECLIPSE_HOME setzen."
276 exit
277 fi
278fi
279echo "Verwende jdtcore.jar aus ${JDTCORE_JAR}"
280#cp ${JDTCORE_JAR} .
281echo "UpdateParserFiles kompilieren"
282javac -classpath ${JDTCORE_JAR} UpdateParserFiles.java
283echo "Ressourcendateien erzeugen (*.rsc)"
284java -classpath .:${JDTCORE_JAR} UpdateParserFiles javadcl.java javahdr.java
285
286cd ..
287
288############################################################################################################################################################
289echo "Alle zu aktualisierenden Classfiles entfernen (Parser/TerminalTokens/ParserBasicInformation)"
290if test -f $SOURCE/bin/org/eclipse/jdt/internal/compiler/parser/Parser.class
291then
292 rm $SOURCE/bin/org/eclipse/jdt/internal/compiler/parser/Parser.class
293fi
294
295if test -f $SOURCE/bin/org/eclipse/jdt/internal/compiler/parser/TerminalTokens.class
296then
297 rm $SOURCE/bin/org/eclipse/jdt/internal/compiler/parser/TerminalTokens.class
298fi
299
300if test -f $SOURCE/bin/org/eclipse/jdt/internal/compiler/parser/ParserBasicInformation.class
301then
302 rm $SOURCE/bin/org/eclipse/jdt/internal/compiler/parser/ParserBasicInformation.class
303fi
304
305#################################################################################################################
306echo "Die originalen Dateien werden in den Sourcen durch die neu generierten ersetzt"
307cp output/Parser.java $SOURCE/compiler/org/eclipse/jdt/internal/compiler/parser
308cp output/TerminalTokens.java $SOURCE/compiler/org/eclipse/jdt/internal/compiler/parser
309cp output/ParserBasicInformation.java $SOURCE/compiler/org/eclipse/jdt/internal/compiler/parser
310cp output/parser*.rsc $SOURCE/compiler/org/eclipse/jdt/internal/compiler/parser
311cp output/parser*.rsc $SOURCE/bin/org/eclipse/jdt/internal/compiler/parser
312cp output/readableNames.properties $SOURCE/compiler/org/eclipse/jdt/internal/compiler/parser
313cp output/readableNames.properties $SOURCE/bin/org/eclipse/jdt/internal/compiler/parser
314############################################################################################################################################################
315#echo "Eclipse Build ausfhren mit Optionen build -os linux -ws motif"
316#cd $SOURCE
317#build -os linux -ws motif
318#cd ..
319############################################################################################################################################################
320#echo "Alle nicht mehr benötigten bzw temporären Dateien entfernen"
321#rm -rf output
322############################################################################################################################################################
323#echo "Eclipse starten"
324#cd $SOURCE
325#eclipse
326############################################################################################################################################################
327echo "Fertig"
328echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
329echo "Bitte fhren sie ein 'Refresh' im Eclipse Package Explorer aus"
330echo "Da Eclipse die Abhängigkeiten zu den geänderten Interfaces sonst nicht aktualisiert"