Mercurial > dive4elements > river
annotate contrib/make_flys_release/README @ 9272:1d59da89b00d
Fixed: fix_analysis_year function fo datacage closed current database connection.
building datacage now wrapepd in transaction
author | gernotbelger |
---|---|
date | Thu, 19 Jul 2018 16:37:04 +0200 |
parents | 7346b73a0271 |
children | ec324fd51bb0 |
rev | line source |
---|---|
4065
9d404069f361
Added build script for FLYS release.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
1 Konfiguration: |
9d404069f361
Added build script for FLYS release.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
2 ============== |
5253
6064ab3984b3
Update documentation
Andre Heinecke <aheinecke@intevation.de>
parents:
5220
diff
changeset
|
3 Zur konfiguration des make_release scripts können umgebungsvariablen |
6064ab3984b3
Update documentation
Andre Heinecke <aheinecke@intevation.de>
parents:
5220
diff
changeset
|
4 verwendet werden oder man ändert die entsprechenden Variablen im Script. |
4065
9d404069f361
Added build script for FLYS release.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
5 |
5253
6064ab3984b3
Update documentation
Andre Heinecke <aheinecke@intevation.de>
parents:
5220
diff
changeset
|
6 Wichtige variablen sind: |
6064ab3984b3
Update documentation
Andre Heinecke <aheinecke@intevation.de>
parents:
5220
diff
changeset
|
7 FLYS_SOURCE_DIR |
6064ab3984b3
Update documentation
Andre Heinecke <aheinecke@intevation.de>
parents:
5220
diff
changeset
|
8 DEVELOPER |
6064ab3984b3
Update documentation
Andre Heinecke <aheinecke@intevation.de>
parents:
5220
diff
changeset
|
9 DEFAULT_WD |
4065
9d404069f361
Added build script for FLYS release.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
10 |
8495
dc0351c5d098
Artifact-server config in release script: remove installation specific defaults and give the possibility to overwrite any config-file.
Tom Gottfried <tom@intevation.de>
parents:
8464
diff
changeset
|
11 Artefakt-Server-Konfiguration: |
dc0351c5d098
Artifact-server config in release script: remove installation specific defaults and give the possibility to overwrite any config-file.
Tom Gottfried <tom@intevation.de>
parents:
8464
diff
changeset
|
12 SERVER_CONF: Pfad zu einem Verzeichnis, dessen Inhalt in das 'conf'-Verzeichnis |
dc0351c5d098
Artifact-server config in release script: remove installation specific defaults and give the possibility to overwrite any config-file.
Tom Gottfried <tom@intevation.de>
parents:
8464
diff
changeset
|
13 des Artefakt-Servers kopiert wird um Default-Konfigurations- |
dc0351c5d098
Artifact-server config in release script: remove installation specific defaults and give the possibility to overwrite any config-file.
Tom Gottfried <tom@intevation.de>
parents:
8464
diff
changeset
|
14 Dateien zu überschreiben. Die Zeichenkette 'D4E_VERSION' wird in |
dc0351c5d098
Artifact-server config in release script: remove installation specific defaults and give the possibility to overwrite any config-file.
Tom Gottfried <tom@intevation.de>
parents:
8464
diff
changeset
|
15 den so gegebenen Konfigurationsdateien durch die beim Aufruf des |
dc0351c5d098
Artifact-server config in release script: remove installation specific defaults and give the possibility to overwrite any config-file.
Tom Gottfried <tom@intevation.de>
parents:
8464
diff
changeset
|
16 Skriptes angegebene Version ersetzt. |
5253
6064ab3984b3
Update documentation
Andre Heinecke <aheinecke@intevation.de>
parents:
5220
diff
changeset
|
17 |
8495
dc0351c5d098
Artifact-server config in release script: remove installation specific defaults and give the possibility to overwrite any config-file.
Tom Gottfried <tom@intevation.de>
parents:
8464
diff
changeset
|
18 Mit folgenden Umgebungsvariablen können auch einzelne Teile der Artefakt- |
8501
c8d633c0971b
Release script: remove installation specific defaults and give the possibility to overwrite any config-file in WEB-INF.
Tom Gottfried <tom@intevation.de>
parents:
8495
diff
changeset
|
19 Server-Konfiguration angepasst werden (dies geschieht bevor die Default- |
8495
dc0351c5d098
Artifact-server config in release script: remove installation specific defaults and give the possibility to overwrite any config-file.
Tom Gottfried <tom@intevation.de>
parents:
8464
diff
changeset
|
20 Konfigurations-Dateien überschrieben werden!): |
8501
c8d633c0971b
Release script: remove installation specific defaults and give the possibility to overwrite any config-file in WEB-INF.
Tom Gottfried <tom@intevation.de>
parents:
8495
diff
changeset
|
21 DGM_PATH: Prefix für die in der Backend-Datenbank gespeicherten Pfade zu |
c8d633c0971b
Release script: remove installation specific defaults and give the possibility to overwrite any config-file in WEB-INF.
Tom Gottfried <tom@intevation.de>
parents:
8495
diff
changeset
|
22 den digitalen Gelände-Modellen. |
c8d633c0971b
Release script: remove installation specific defaults and give the possibility to overwrite any config-file in WEB-INF.
Tom Gottfried <tom@intevation.de>
parents:
8495
diff
changeset
|
23 WIKI_URL: URL für die Online-Hilfe (auch für Client-Konfiguration) |
4065
9d404069f361
Added build script for FLYS release.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
24 |
8501
c8d633c0971b
Release script: remove installation specific defaults and give the possibility to overwrite any config-file in WEB-INF.
Tom Gottfried <tom@intevation.de>
parents:
8495
diff
changeset
|
25 WEBINF: Pfad zu einem Verzeichnis, dessen Inhalt in das |
c8d633c0971b
Release script: remove installation specific defaults and give the possibility to overwrite any config-file in WEB-INF.
Tom Gottfried <tom@intevation.de>
parents:
8495
diff
changeset
|
26 'WEB-INF'-Verzeichnis des GWT-Clients kopiert wird um |
c8d633c0971b
Release script: remove installation specific defaults and give the possibility to overwrite any config-file in WEB-INF.
Tom Gottfried <tom@intevation.de>
parents:
8495
diff
changeset
|
27 Default-Konfigurations-Dateien zu überschreiben. Die Zeichenkette |
c8d633c0971b
Release script: remove installation specific defaults and give the possibility to overwrite any config-file in WEB-INF.
Tom Gottfried <tom@intevation.de>
parents:
8495
diff
changeset
|
28 'D4E_VERSION' wird in den so gegebenen Konfigurationsdateien durch |
c8d633c0971b
Release script: remove installation specific defaults and give the possibility to overwrite any config-file in WEB-INF.
Tom Gottfried <tom@intevation.de>
parents:
8495
diff
changeset
|
29 die beim Aufruf des Skriptes angegebene Version ersetzt. |
8523
e3f032870e7a
Release script: build binaries for publication when tagging and slightly mavenize the whole process.
Tom Gottfried <tom@intevation.de>
parents:
8501
diff
changeset
|
30 CLIENT_CONF Pfad zu einer Datei, mit der |
e3f032870e7a
Release script: build binaries for publication when tagging and slightly mavenize the whole process.
Tom Gottfried <tom@intevation.de>
parents:
8501
diff
changeset
|
31 gwt-client/src/main/java/org/dive4elements/river/client/client/config.xml |
e3f032870e7a
Release script: build binaries for publication when tagging and slightly mavenize the whole process.
Tom Gottfried <tom@intevation.de>
parents:
8501
diff
changeset
|
32 ersetzt wird. |
6163
233113b02cab
Handle FEATURES_XML environment setting
Andre Heinecke <aheinecke@intevation.de>
parents:
5960
diff
changeset
|
33 |
4065
9d404069f361
Added build script for FLYS release.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
34 Prozess: |
9d404069f361
Added build script for FLYS release.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
35 ======== |
5900
8698e3284b7a
Update after renaming and remove the binary artifact-database and common
Andre Heinecke <aheinecke@intevation.de>
parents:
5618
diff
changeset
|
36 Als erstes muss man eine halbwegs aktuelle version von artifacts-common |
8698e3284b7a
Update after renaming and remove the binary artifact-database and common
Andre Heinecke <aheinecke@intevation.de>
parents:
5618
diff
changeset
|
37 und artifacts-database in dem h2 verzeichnis verlinken. |
8698e3284b7a
Update after renaming and remove the binary artifact-database and common
Andre Heinecke <aheinecke@intevation.de>
parents:
5618
diff
changeset
|
38 |
8698e3284b7a
Update after renaming and remove the binary artifact-database and common
Andre Heinecke <aheinecke@intevation.de>
parents:
5618
diff
changeset
|
39 Beispiel: |
8698e3284b7a
Update after renaming and remove the binary artifact-database and common
Andre Heinecke <aheinecke@intevation.de>
parents:
5618
diff
changeset
|
40 cd h2 |
8698e3284b7a
Update after renaming and remove the binary artifact-database and common
Andre Heinecke <aheinecke@intevation.de>
parents:
5618
diff
changeset
|
41 ln -s ~/.m2/repository/org/dive4elements/artifacts-common/1.0-SNAPSHOT/artifacts-common-1.0-SNAPSHOT.jar |
8698e3284b7a
Update after renaming and remove the binary artifact-database and common
Andre Heinecke <aheinecke@intevation.de>
parents:
5618
diff
changeset
|
42 ln -s ~/.m2/repository/org/dive4elements/artifact-database/1.0-SNAPSHOT/artifact-database-1.0-SNAPSHOT.jar |
8698e3284b7a
Update after renaming and remove the binary artifact-database and common
Andre Heinecke <aheinecke@intevation.de>
parents:
5618
diff
changeset
|
43 |
4065
9d404069f361
Added build script for FLYS release.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
44 Nachdem die Konfigurationen angepasst wurden, kann das Skript mittels |
5253
6064ab3984b3
Update documentation
Andre Heinecke <aheinecke@intevation.de>
parents:
5220
diff
changeset
|
45 sh make_release.sh VERSION |
7996
c4bf75f82ffc
Allow building Release from specific branch. Beware that branches to not get different ports automatically.
Tom Gottfried <tom@intevation.de>
parents:
6163
diff
changeset
|
46 von der Konsole gestartet werden. VERSION kann dabei ein Tag oder der Name |
c4bf75f82ffc
Allow building Release from specific branch. Beware that branches to not get different ports automatically.
Tom Gottfried <tom@intevation.de>
parents:
6163
diff
changeset
|
47 eines Branches sein. Anschließend werden die Quellen des |
4065
9d404069f361
Added build script for FLYS release.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
48 dive4elements, des HTTP-Clients und von FLYS über SSH aus dem HG Repository |
5253
6064ab3984b3
Update documentation
Andre Heinecke <aheinecke@intevation.de>
parents:
5220
diff
changeset
|
49 ausgecheckt und in FLYS_SOURCE_DIR abgelegt. |
6064ab3984b3
Update documentation
Andre Heinecke <aheinecke@intevation.de>
parents:
5220
diff
changeset
|
50 |
7996
c4bf75f82ffc
Allow building Release from specific branch. Beware that branches to not get different ports automatically.
Tom Gottfried <tom@intevation.de>
parents:
6163
diff
changeset
|
51 |
5253
6064ab3984b3
Update documentation
Andre Heinecke <aheinecke@intevation.de>
parents:
5220
diff
changeset
|
52 Wenn mit der option -t zusätzlich ausgewählt wird diese version zu taggen |
6064ab3984b3
Update documentation
Andre Heinecke <aheinecke@intevation.de>
parents:
5220
diff
changeset
|
53 muss in der make_flys_release.sh der entsprechende accountname zum pushen |
6064ab3984b3
Update documentation
Andre Heinecke <aheinecke@intevation.de>
parents:
5220
diff
changeset
|
54 des tags als DEVELOPER angegeben werden. |
4065
9d404069f361
Added build script for FLYS release.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
55 |
9d404069f361
Added build script for FLYS release.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
56 Für den Client wird OpenLayers-2.11 heruntergeladen und in den Client |
9d404069f361
Added build script for FLYS release.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
57 verschoben. Zurzeit wird das komplette OpenLayers-2.11 Verzeichnis in den Client |
9d404069f361
Added build script for FLYS release.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
58 verschoben. Dies ist jedoch nur für die Entwicklung sinnvoll. |
9d404069f361
Added build script for FLYS release.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
59 |
9d404069f361
Added build script for FLYS release.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
60 Das Resultat des Skripts ist ein tar.gz, welches zwei Verzeichnisses beinhaltet: |
9d404069f361
Added build script for FLYS release.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
61 `server` und `client`. Im Server sind alle Konfigurationen sowie notwendige |
9d404069f361
Added build script for FLYS release.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
62 Bibliotheken zum Starten des FLYS Servers enthalten. Im Client ist lediglich das |
9d404069f361
Added build script for FLYS release.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
63 WAR Archiv für einen Servlet Container (z.B. Tomcat) enthalten. |
5097
415ac9bc5a56
Add importer packaging script and some doc about it
Andre Heinecke <aheinecke@intevation.de>
parents:
4065
diff
changeset
|
64 |
415ac9bc5a56
Add importer packaging script and some doc about it
Andre Heinecke <aheinecke@intevation.de>
parents:
4065
diff
changeset
|
65 Importer: |
415ac9bc5a56
Add importer packaging script and some doc about it
Andre Heinecke <aheinecke@intevation.de>
parents:
4065
diff
changeset
|
66 ========= |
5179
4355b4cecef8
Improve importer packaging by just expecting a tarball with
Andre Heinecke <aheinecke@intevation.de>
parents:
5097
diff
changeset
|
67 Das script um den Importer zu bauen und zu paketieren liegt unter |
4355b4cecef8
Improve importer packaging by just expecting a tarball with
Andre Heinecke <aheinecke@intevation.de>
parents:
5097
diff
changeset
|
68 bin/make-importer-package.sh |
4355b4cecef8
Improve importer packaging by just expecting a tarball with
Andre Heinecke <aheinecke@intevation.de>
parents:
5097
diff
changeset
|
69 Dieses muss man anpassen und ein paar pfade setzen |
5097
415ac9bc5a56
Add importer packaging script and some doc about it
Andre Heinecke <aheinecke@intevation.de>
parents:
4065
diff
changeset
|
70 |
5266
de4c12b02374
Add some Intevation specific deployment advice.
Andre Heinecke <aheinecke@intevation.de>
parents:
5253
diff
changeset
|
71 Deployment: |
de4c12b02374
Add some Intevation specific deployment advice.
Andre Heinecke <aheinecke@intevation.de>
parents:
5253
diff
changeset
|
72 =========== |
de4c12b02374
Add some Intevation specific deployment advice.
Andre Heinecke <aheinecke@intevation.de>
parents:
5253
diff
changeset
|
73 Der tarball kann auf ein Zielsystem übertragen werden und dort entpackt werden. |
8464
5dd6cc9fec1e
Add possibility to pack install-script in release tarball.
Tom Gottfried <tom@intevation.de>
parents:
7996
diff
changeset
|
74 Bei den Testsystemen der Intevation ist der Ort der Installationen |
5266
de4c12b02374
Add some Intevation specific deployment advice.
Andre Heinecke <aheinecke@intevation.de>
parents:
5253
diff
changeset
|
75 üblicherweise /opt/flys/flys-version |
de4c12b02374
Add some Intevation specific deployment advice.
Andre Heinecke <aheinecke@intevation.de>
parents:
5253
diff
changeset
|
76 |
de4c12b02374
Add some Intevation specific deployment advice.
Andre Heinecke <aheinecke@intevation.de>
parents:
5253
diff
changeset
|
77 Anschließend deployt man den flys-client im webapps verzeichnis von tomcat |
de4c12b02374
Add some Intevation specific deployment advice.
Andre Heinecke <aheinecke@intevation.de>
parents:
5253
diff
changeset
|
78 (z.b. /usr/share/tomcat6/webapps ) |
de4c12b02374
Add some Intevation specific deployment advice.
Andre Heinecke <aheinecke@intevation.de>
parents:
5253
diff
changeset
|
79 ggf. in WEB-INF die web.xml überprüfen / anpassen. |
de4c12b02374
Add some Intevation specific deployment advice.
Andre Heinecke <aheinecke@intevation.de>
parents:
5253
diff
changeset
|
80 |
de4c12b02374
Add some Intevation specific deployment advice.
Andre Heinecke <aheinecke@intevation.de>
parents:
5253
diff
changeset
|
81 Bei einer konfiguration mit apache vhosts ist nun noch ein entsprechender |
de4c12b02374
Add some Intevation specific deployment advice.
Andre Heinecke <aheinecke@intevation.de>
parents:
5253
diff
changeset
|
82 vhost in der apache konfiguration einzurichten. |
de4c12b02374
Add some Intevation specific deployment advice.
Andre Heinecke <aheinecke@intevation.de>
parents:
5253
diff
changeset
|
83 |
de4c12b02374
Add some Intevation specific deployment advice.
Andre Heinecke <aheinecke@intevation.de>
parents:
5253
diff
changeset
|
84 Anschließend muss man noch sicher stellen das passende wms scripte im |
de4c12b02374
Add some Intevation specific deployment advice.
Andre Heinecke <aheinecke@intevation.de>
parents:
5253
diff
changeset
|
85 mapserver verfügbar sind. In /srv/www/cgi-bin müssen entsprechende |
de4c12b02374
Add some Intevation specific deployment advice.
Andre Heinecke <aheinecke@intevation.de>
parents:
5253
diff
changeset
|
86 river-wms und user-wms dateien liegen die auf die korrekte aktuelle version verweisen. |
5618
d03171f66511
Expand doc for river-wms and user-wms and add note about oracle
Andre Heinecke <aheinecke@intevation.de>
parents:
5530
diff
changeset
|
87 Hinweis: |
d03171f66511
Expand doc for river-wms and user-wms and add note about oracle
Andre Heinecke <aheinecke@intevation.de>
parents:
5530
diff
changeset
|
88 Für Oracle muss in diesen scripten die NLS_LANG umgebungsvariable auf UTF-8 gesetzt werden. |
d03171f66511
Expand doc for river-wms and user-wms and add note about oracle
Andre Heinecke <aheinecke@intevation.de>
parents:
5530
diff
changeset
|
89 Beispiel für ein user-wms script: |
d03171f66511
Expand doc for river-wms and user-wms and add note about oracle
Andre Heinecke <aheinecke@intevation.de>
parents:
5530
diff
changeset
|
90 |
d03171f66511
Expand doc for river-wms and user-wms and add note about oracle
Andre Heinecke <aheinecke@intevation.de>
parents:
5530
diff
changeset
|
91 #!/bin/sh |
d03171f66511
Expand doc for river-wms and user-wms and add note about oracle
Andre Heinecke <aheinecke@intevation.de>
parents:
5530
diff
changeset
|
92 export LC_ALL="de_DE.UTF-8" |
d03171f66511
Expand doc for river-wms and user-wms and add note about oracle
Andre Heinecke <aheinecke@intevation.de>
parents:
5530
diff
changeset
|
93 export NLS_LANG=".AL32UTF8" |
d03171f66511
Expand doc for river-wms and user-wms and add note about oracle
Andre Heinecke <aheinecke@intevation.de>
parents:
5530
diff
changeset
|
94 export MS_MAPFILE=/opt/flys/current/server/flys.map |
d03171f66511
Expand doc for river-wms and user-wms and add note about oracle
Andre Heinecke <aheinecke@intevation.de>
parents:
5530
diff
changeset
|
95 /srv/www/cgi-bin/mapserv |
d03171f66511
Expand doc for river-wms and user-wms and add note about oracle
Andre Heinecke <aheinecke@intevation.de>
parents:
5530
diff
changeset
|
96 |
5266
de4c12b02374
Add some Intevation specific deployment advice.
Andre Heinecke <aheinecke@intevation.de>
parents:
5253
diff
changeset
|
97 Die WMS urls sind in server/conf/floodmap.xml und server/conf/rivermap.xml konfiguriert. |
de4c12b02374
Add some Intevation specific deployment advice.
Andre Heinecke <aheinecke@intevation.de>
parents:
5253
diff
changeset
|
98 |
5326
555835611acd
Add documentation about dgm-path option
Andre Heinecke <aheinecke@intevation.de>
parents:
5268
diff
changeset
|
99 In server/conf/conf.xml muss dgm-path angepasst werden um an die richtige stelle |
555835611acd
Add documentation about dgm-path option
Andre Heinecke <aheinecke@intevation.de>
parents:
5268
diff
changeset
|
100 zu zeigen an der im dateisystem die dgm's liegen. |
555835611acd
Add documentation about dgm-path option
Andre Heinecke <aheinecke@intevation.de>
parents:
5268
diff
changeset
|
101 Wichtig: Der Pfad muss mit einem / enden |
555835611acd
Add documentation about dgm-path option
Andre Heinecke <aheinecke@intevation.de>
parents:
5268
diff
changeset
|
102 |
8464
5dd6cc9fec1e
Add possibility to pack install-script in release tarball.
Tom Gottfried <tom@intevation.de>
parents:
7996
diff
changeset
|
103 Die bis hierhin beschriebenen Tätigkeiten nach dem Entpacken des Tarballs |
5dd6cc9fec1e
Add possibility to pack install-script in release tarball.
Tom Gottfried <tom@intevation.de>
parents:
7996
diff
changeset
|
104 können auch mittels eines Skriptes automatisiert bzw. für bestimmte Systeme |
5dd6cc9fec1e
Add possibility to pack install-script in release tarball.
Tom Gottfried <tom@intevation.de>
parents:
7996
diff
changeset
|
105 angepasst werden. |
5dd6cc9fec1e
Add possibility to pack install-script in release tarball.
Tom Gottfried <tom@intevation.de>
parents:
7996
diff
changeset
|
106 Über die Umgebungsvariable INSTALL kann ein Pfad zu einem solchen Skript |
5dd6cc9fec1e
Add possibility to pack install-script in release tarball.
Tom Gottfried <tom@intevation.de>
parents:
7996
diff
changeset
|
107 angegeben werden, dass dann mit in den Tarball gepackt wird. |
5dd6cc9fec1e
Add possibility to pack install-script in release tarball.
Tom Gottfried <tom@intevation.de>
parents:
7996
diff
changeset
|
108 |
5266
de4c12b02374
Add some Intevation specific deployment advice.
Andre Heinecke <aheinecke@intevation.de>
parents:
5253
diff
changeset
|
109 Nun kann man den server starten. Dazu in das entsprechende server verzeichnis wechseln |
de4c12b02374
Add some Intevation specific deployment advice.
Andre Heinecke <aheinecke@intevation.de>
parents:
5253
diff
changeset
|
110 und ./bin/run ausführen. Der server muss mit diesem arbeitsverzeichnis gestartet werden. |
5960
75803c9eb63b
Fix print configuration, in the config flys is still flys
Andre Heinecke <aheinecke@intevation.de>
parents:
5900
diff
changeset
|
111 |
75803c9eb63b
Fix print configuration, in the config flys is still flys
Andre Heinecke <aheinecke@intevation.de>
parents:
5900
diff
changeset
|
112 '<,'>s/void \(.*\)(\(.*\));/void \1(\2) {\r d->\1(\2);\r}\r |