1#!/usr/bin/perl
2# *************************************************************
3#
4#  Licensed to the Apache Software Foundation (ASF) under one
5#  or more contributor license agreements.  See the NOTICE file
6#  distributed with this work for additional information
7#  regarding copyright ownership.  The ASF licenses this file
8#  to you under the Apache License, Version 2.0 (the
9#  "License"); you may not use this file except in compliance
10#  with the License.  You may obtain a copy of the License at
11#
12#    http://www.apache.org/licenses/LICENSE-2.0
13#
14#  Unless required by applicable law or agreed to in writing,
15#  software distributed under the License is distributed on an
16#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17#  KIND, either express or implied.  See the License for the
18#  specific language governing permissions and limitations
19#  under the License.
20#
21# *************************************************************
22
23use File::Find;
24use File::Basename;
25
26# creates the help2 makefile for a given
27# directory including all help xhp files
28# in that and the subordinate directories
29# Only help files with the following
30#
31# status values are included:
32# PUBLISH DEPRECATED
33#
34# The following status values are
35# disregarded:
36# DRAFT FINAL STALLED
37
38$makefiletemplate = 'helpers/makefile.template';
39$linkmakefiletemplate = 'helpers/linkmakefile.template';
40$prj = "helpcontent2";
41$helpdirprefix = "$prj/source/";
42
43undef @sbasic;
44undef @scalc;
45undef @schart;
46undef @sdraw;
47undef @shared;
48undef @simpress;
49undef @smath;
50undef @swriter;
51
52$params = join "|", "",@ARGV,"";
53($params =~ /-dir/) ? ($startdir = $params) =~ (s/.*-dir=([^\|]*).*$/$1/gs) : (($startdir = `pwd`) =~ s/\n//gs);
54($startdir = $startdir."/source/text") if ($startdir =~ /$prj$/);
55($params =~ /-linkdir/) ? ($linkdir = $params) =~ (s/.*-linkdir=([^\|]*).*$/$1/gs) : (($linkdir = `pwd`) =~ s/\n//gs);
56($linkdir = $linkdir."/util") if ($linkdir =~ /$prj$/);
57$recursive = $params =~ /-recursive/ || 0;
58$all = $params =~ /-all/ || 0;
59
60if (open TMPL, $makefiletemplate) {
61	undef $/;
62	$tmpl = <TMPL>;
63	close TMPL;
64} else {
65	&terminate("Cannot open $makefiletemplate");
66}
67
68if (open LINKTMPL, $linkmakefiletemplate) {
69	undef $/;
70	$linktmpl = <LINKTMPL>;
71	close LINKTMPL;
72} else {
73	&terminate("Cannot open $linkmakefiletemplate");
74}
75
76print "Start Directory: $startdir\n";
77print "Link Directory : $linkdir\n";
78print "Recursive      : ". ($recursive ? "yes" : "no") . "\n";
79print "All files      : ". ($all ? "yes" : "no") . "\n";
80
81if ($recursive) {
82	find(sub{push @dirs, $File::Find::name if (-d and ($File::Find::name!~/\/CVS/));},$startdir);
83} else {
84	push @dirs, $startdir;
85}
86
87#print join "\n", @dirs;
88#die;
89
90for $d(@dirs) {
91	opendir DIR, $d;
92	@files = grep {/xhp$/} readdir DIR;
93	undef @files2;
94	closedir DIR;
95
96	($helpdir = $d) =~ s/.*\/$helpdirprefix/source\//gis;
97
98	($package = $helpdir) =~ s/^source\///gi;
99
100	($target = $package) =~ s/\//_/g; $target =~ s/_$//;
101	($module = $package) =~ s/^\/*text\/([^\/]+)\/*.*$/$1/;
102
103	for $f(@files) {
104		($n,$p,$e) = fileparse($f,".xhp");
105		if (not $all) {
106			if (open XML, $d.'/'.$f) {
107				undef $/;
108				($status = <XML>) =~ s/.*<topic[^>]*status="([^"]*)"[^>]*>.*$/$1/gs;
109				close XML;
110			} else {
111				die "Error: Cannot open ${d}/$f:$!\n";
112			}
113			if ($status =~ /(DEPRECATED|PUBLISH)/i) {
114				($p2=$package) =~ s,/,\$/,gis;
115				push @{$module}, $p2.'$/'.$n.'.xhp';
116				push @files2, '    '.$n.'.xhp ';
117			}
118		} else {
119			($p2=$package) =~ s,/,\$/,gis;
120			push @{$module}, $p2.'$/'.$n.'.xhp';
121			push @files2, '   '.$n.'.xhp ';
122		}
123	}
124
125	printf "%s: %4d files, %4d included in makefile -> ",$d,scalar @files,scalar @files2;
126
127	if (scalar @files2 > 0) { # don't write makefiles where there are no files to make
128		($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
129
130		$auth = "script";
131		$date = sprintf "%4d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon,$mday,$hour,$min,$sec;
132		$prj = '..$/' x ((split "/", $helpdir) -1); $prj = $prj . "..";
133
134
135		$xhpfiles = join "\\\n", sort @files2;
136
137		($makefile = $tmpl) =~ s/%([^%]*)%/$$1/gise;
138
139		if (open(MK, ">$d/makefile.mk")) {
140			print MK $makefile;
141			close MK;
142			print "makefile created\n";
143		} else {
144			&terminate("Cannot write to ${d}/makefile.mk\n");
145		}
146	} else {
147		print "NO makefile created\n";
148	}
149}
150
151@sbasic = sort @sbasic;
152@schart = sort @schart;
153@scalc = sort @scalc;
154@shared = sort @shared;
155@sdraw = sort @sdraw;
156@simpress = sort @simpress;
157@smath = sort @smath;
158@swriter = sort @swriter;
159
160# now create the link makefiles
161
162#----------------------------------
163# sbasic
164	$module = "sbasic";
165
166	$linkaddedfiles = <<"LAF";
167   -add $module.cfg \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/$module.cfg \\
168   -add $module.tree \$(COMMONMISC)\$/LANGUAGE\$/$module.tree \\
169   -add $module.jar  \$(COMMONBIN)\$/xhp_${module}_LANGUAGE.zip
170LAF
171
172	$linkaddeddeps = <<"LAD";
173   \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/$module.cfg \\
174   \$(COMMONMISC)\$/LANGUAGE\$/$module.tree \\
175   \$(COMMONBIN)\$/xhp_${module}_LANGUAGE.zip
176LAD
177
178	$linklinkfiles = '';
179	for (@sbasic) {	$linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
180	for (@shared) {	$linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
181
182	$auth = "script";
183	$date = sprintf "%4d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon,$mday,$hour,$min,$sec;
184	$prj = '..$/..' ;
185
186	($linkmakefile = $linktmpl) =~ s/%([^%]*)%/$$1/gise;
187	&writelinkmakefile($module,$linkmakefile);
188
189
190#-------------------------------------
191# scalc
192	$module = "scalc";
193
194	$linkaddedfiles = <<"LAF";
195   -add $module.cfg \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/$module.cfg \\
196   -add $module.tree \$(COMMONMISC)\$/LANGUAGE\$/$module.tree \\
197   -add $module.jar  \$(COMMONBIN)\$/xhp_${module}_LANGUAGE.zip
198LAF
199
200	$linkaddeddeps = <<"LAD";
201   \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/$module.cfg \\
202   \$(COMMONMISC)\$/LANGUAGE\$/$module.tree \\
203   \$(COMMONBIN)\$/xhp_${module}_LANGUAGE.zip
204LAD
205
206	$linklinkfiles = '';
207	for (@scalc)  { $linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
208	for (@shared) {	$linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
209	for (@schart) {	$linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
210
211	$auth = "script";
212	$date = sprintf "%4d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon,$mday,$hour,$min,$sec;
213	$prj = '..$/..' ;
214
215	($linkmakefile = $linktmpl) =~ s/%([^%]*)%/$$1/gise;
216	&writelinkmakefile($module,$linkmakefile);
217
218#--------------------------------
219# schart
220	$module = "schart";
221
222	$linkaddedfiles = <<"LAF";
223   -add $module.cfg \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/$module.cfg \\
224   -add $module.tree \$(COMMONMISC)\$/LANGUAGE\$/$module.tree \\
225   -add $module.jar  \$(COMMONBIN)\$/xhp_${module}_LANGUAGE.zip
226LAF
227
228	$linkaddeddeps = <<"LAD";
229   \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/$module.cfg \\
230   \$(COMMONMISC)\$/LANGUAGE\$/$module.tree \\
231   \$(COMMONBIN)\$/xhp_${module}_LANGUAGE.zip
232LAD
233
234	$linklinkfiles = '';
235
236	for (@shared) {	$linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
237	for (@schart) {	$linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
238
239
240	$auth = "script";
241	$date = sprintf "%4d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon,$mday,$hour,$min,$sec;
242	$prj = '..$/..' ;
243
244	($linkmakefile = $linktmpl) =~ s/%([^%]*)%/$$1/gise;
245	&writelinkmakefile($module,$linkmakefile);
246
247#------------------------------
248# sdraw
249	$module = "sdraw";
250
251	$linkaddedfiles = <<"LAF";
252   -add $module.cfg \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/$module.cfg \\
253   -add $module.jar  \$(COMMONBIN)\$/xhp_${module}_LANGUAGE.zip
254LAF
255
256	$linkaddeddeps = <<"LAD";
257   \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/$module.cfg \\
258   \$(COMMONBIN)\$/xhp_${module}_LANGUAGE.zip
259LAD
260
261	$linklinkfiles = '';
262	for (@sdraw) {	$linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
263	for (@simpress) {	$linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
264	for (@shared) {	$linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
265	for (@schart) {	$linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
266
267	$auth = "script";
268	$date = sprintf "%4d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon,$mday,$hour,$min,$sec;
269	$prj = '..$/..' ;
270
271	($linkmakefile = $linktmpl) =~ s/%([^%]*)%/$$1/gise;
272	&writelinkmakefile($module,$linkmakefile);
273
274#-------------------------------------
275# shared
276
277	$module = "shared";
278
279	$linkaddedfiles = <<"LAF";
280   -add $module.tree \$(COMMONMISC)\$/LANGUAGE\$/$module.tree \\
281   -add $module.jar  \$(COMMONBIN)\$/xhp_${module}_LANGUAGE.zip \\
282   -add default.css  \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/default.css \\
283   -add highcontrast1.css  \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/highcontrast1.css \\
284   -add highcontrast2.css  \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/highcontrast2.css \\
285   -add highcontrastwhite.css  \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/highcontrastwhite.css \\
286   -add highcontrastblack.css  \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/highcontrastblack.css \\
287   -add err.html  \$(COMMONMISC)\$/LANGUAGE\$/text\$/shared\$/05\$/err_html.xhp
288LAF
289
290	$linkaddeddeps = <<"LAD";
291   \$(COMMONMISC)\$/LANGUAGE\$/$module.tree \\
292   \$(COMMONBIN)\$/xhp_${module}_LANGUAGE.zip \\
293   \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/default.css \\
294   \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/highcontrast1.css \\
295   \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/highcontrast2.css \\
296   \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/highcontrastwhite.css \\
297   \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/highcontrastblack.css \\
298   \$(COMMONMISC)\$/LANGUAGE\$/text\$/shared\$/05\$/err_html.xhp
299LAD
300
301	$linklinkfiles = '';
302
303	$auth = "script";
304	$date = sprintf "%4d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon,$mday,$hour,$min,$sec;
305	$prj = '..$/..' ;
306
307	($linkmakefile = $linktmpl) =~ s/%([^%]*)%/$$1/gise;
308	&writelinkmakefile($module,$linkmakefile);
309
310#-------------------------------
311# simpress
312	$module = "simpress";
313
314	$linkaddedfiles = <<"LAF";
315   -add $module.cfg \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/$module.cfg \\
316   -add $module.tree \$(COMMONMISC)\$/LANGUAGE\$/$module.tree \\
317   -add $module.jar  \$(COMMONBIN)\$/xhp_${module}_LANGUAGE.zip
318LAF
319
320	$linkaddeddeps = <<"LAD";
321   \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/$module.cfg \\
322   \$(COMMONMISC)\$/LANGUAGE\$/$module.tree \\
323   \$(COMMONBIN)\$/xhp_${module}_LANGUAGE.zip
324LAD
325
326	$linklinkfiles = '';
327
328	for (@sdraw) {	$linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
329	for (@simpress) {	$linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
330	for (@shared) {	$linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
331	for (@schart) {	$linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
332
333	$auth = "script";
334	$date = sprintf "%4d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon,$mday,$hour,$min,$sec;
335	$prj = '..$/..' ;
336
337	($linkmakefile = $linktmpl) =~ s/%([^%]*)%/$$1/gise;
338	&writelinkmakefile($module,$linkmakefile);
339
340#-------------------------------------
341# smath
342	$module = "smath";
343
344	$linkaddedfiles = <<"LAF";
345   -add $module.cfg \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/$module.cfg \\
346   -add $module.tree \$(COMMONMISC)\$/LANGUAGE\$/$module.tree \\
347   -add $module.jar  \$(COMMONBIN)\$/xhp_${module}_LANGUAGE.zip
348LAF
349
350	$linkaddeddeps = <<"LAD";
351   \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/$module.cfg \\
352   \$(COMMONMISC)\$/LANGUAGE\$/$module.tree \\
353   \$(COMMONBIN)\$/xhp_${module}_LANGUAGE.zip
354LAD
355
356	$linklinkfiles = '';
357	for (@smath) {	$linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
358	for (@shared) {	$linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
359
360	$auth = "script";
361	$date = sprintf "%4d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon,$mday,$hour,$min,$sec;
362	$prj = '..$/..' ;
363
364	($linkmakefile = $linktmpl) =~ s/%([^%]*)%/$$1/gise;
365	&writelinkmakefile($module,$linkmakefile);
366
367#-------------------------------
368# swriter
369	$module = "swriter";
370
371	$linkaddedfiles = <<"LAF";
372   -add $module.cfg \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/$module.cfg \\
373   -add $module.tree \$(COMMONMISC)\$/LANGUAGE\$/$module.tree \\
374   -add $module.jar  \$(COMMONBIN)\$/xhp_${module}_LANGUAGE.zip
375LAF
376
377	$linkaddeddeps = <<"LAD";
378   \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/$module.cfg \\
379   \$(COMMONMISC)\$/LANGUAGE\$/$module.tree \\
380   \$(COMMONBIN)\$/xhp_${module}_LANGUAGE.zip
381LAD
382
383	$linklinkfiles = '';
384	for (@swriter) {	$linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
385	for (@shared) {	$linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
386	for (@schart) {	$linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
387	$auth = "script";
388	$date = sprintf "%4d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon,$mday,$hour,$min,$sec;
389	$prj = '..$/..' ;
390
391	($linkmakefile = $linktmpl) =~ s/%([^%]*)%/$$1/gise;
392	&writelinkmakefile($module,$linkmakefile);
393
394#-------------------------------
395# sdatabase
396	$module = "sdatabase";
397
398	$linkaddedfiles = <<"LAF";
399   -add $module.cfg \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/$module.cfg \\
400   -add $module.jar  \$(COMMONBIN)\$/xhp_${module}_LANGUAGE.zip
401LAF
402
403	$linkaddeddeps = <<"LAD";
404   \$(PRJ)\$/source\$/auxiliary\$/LANGUAGE\$/$module.cfg \\
405   \$(COMMONBIN)\$/xhp_${module}_LANGUAGE.zip
406LAD
407
408	$linklinkfiles = '';
409	for (@shared) {	$linklinkfiles = $linklinkfiles . "   $_ \\\n";	}
410	$auth = "script";
411	$date = sprintf "%4d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon,$mday,$hour,$min,$sec;
412	$prj = '..$/..' ;
413
414	($linkmakefile = $linktmpl) =~ s/%([^%]*)%/$$1/gise;
415
416	# remove zip1 targets
417	$linkmakefile =~ s,\n(ZIP1LIST=.*)\n,\nZIP1LIST=\$(LANGDIR)\$/text\$/shared\$/explorer\$/database\$/main.xhp\n,gi;
418	&writelinkmakefile($module,$linkmakefile);
419
420
421
422print "sbasic: $#sbasic\n";
423print "scalc : $#scalc\n";
424print "schart: $#schart\n";
425print "sdraw : $#sdraw\n";
426print "shared: $#shared\n";
427print "simpr : $#simpress\n";
428print "smath : $#smath\n";
429print "swrit : $#swriter\n";
430print "sdbase: $#sdatabase\n";
431
432sub terminate {
433	$err = shift;
434	print "$err\n\n";
435	$msg = <<"MSG";
436createmakefile.pl -dir=[directory name] -linkdir=[directory name] [-recursive] [-all]
437  -dir        Directory to start
438  -linkdir    Directory to write the link makefiles
439  -recursive  Write makefiles recursively
440  -all        include files with all status values
441MSG
442	die "$msg\n";
443}
444
445
446sub writelinkmakefile {
447	$module = shift;
448	$content = shift;
449	if (open(MK, ">$linkdir/$module/makefile.mk")) {
450		print MK $content;
451		close MK;
452	} else {
453		&terminate("Cannot write makefile to ${linkdir}/$module\n");
454	}
455}
456