Skip to content

Commit b3a0d83

Browse files
committed
Move snowball_create.sql creation into perl file
This is in preparation for building postgres with meson / ninja. We already have duplicated code for this between the make and msvc builds. Adding a third copy seems like a bad plan, thus move the generation into a perl script. As we don't want to rely on perl being available for builds from tarballs, generate the file during distprep. Author: Peter Eisentraut <peter@eisentraut.org> Author: Andres Freund <andres@anarazel.de> Discussion: https://postgr.es/m/5e216522-ba3c-f0e6-7f97-5276d0270029@enterprisedb.com
1 parent db0a272 commit b3a0d83

File tree

3 files changed

+179
-111
lines changed

3 files changed

+179
-111
lines changed

src/backend/snowball/Makefile

Lines changed: 28 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -72,40 +72,22 @@ OBJS += \
7272
stem_UTF_8_turkish.o \
7373
stem_UTF_8_yiddish.o
7474

75-
# first column is language name and also name of dictionary for not-all-ASCII
76-
# words, second is name of dictionary for all-ASCII words
77-
# Note order dependency: use of some other language as ASCII dictionary
78-
# must come after creation of that language
79-
LANGUAGES= \
80-
arabic arabic \
81-
armenian armenian \
82-
basque basque \
83-
catalan catalan \
84-
danish danish \
85-
dutch dutch \
86-
english english \
87-
finnish finnish \
88-
french french \
89-
german german \
90-
greek greek \
91-
hindi english \
92-
hungarian hungarian \
93-
indonesian indonesian \
94-
irish irish \
95-
italian italian \
96-
lithuanian lithuanian \
97-
nepali nepali \
98-
norwegian norwegian \
99-
portuguese portuguese \
100-
romanian romanian \
101-
russian english \
102-
serbian serbian \
103-
spanish spanish \
104-
swedish swedish \
105-
tamil tamil \
106-
turkish turkish \
107-
yiddish yiddish
108-
75+
stop_files = \
76+
danish.stop \
77+
dutch.stop \
78+
english.stop \
79+
finnish.stop \
80+
french.stop \
81+
german.stop \
82+
hungarian.stop \
83+
italian.stop \
84+
nepali.stop \
85+
norwegian.stop \
86+
portuguese.stop \
87+
russian.stop \
88+
spanish.stop \
89+
swedish.stop \
90+
turkish.stop
10991

11092
SQLSCRIPT= snowball_create.sql
11193
DICTDIR=tsearch_data
@@ -119,56 +101,24 @@ all: all-shared-lib $(SQLSCRIPT)
119101

120102
include $(top_srcdir)/src/Makefile.shlib
121103

122-
$(SQLSCRIPT): Makefile snowball_func.sql.in snowball.sql.in
123-
echo '-- Language-specific snowball dictionaries' > $@
124-
cat $(srcdir)/snowball_func.sql.in >> $@
125-
@set -e; \
126-
set $(LANGUAGES) ; \
127-
while [ "$$#" -gt 0 ] ; \
128-
do \
129-
lang=$$1; shift; \
130-
nonascdictname=$$lang; \
131-
ascdictname=$$1; shift; \
132-
if [ -s $(srcdir)/stopwords/$${lang}.stop ] ; then \
133-
stop=", StopWords=$${lang}" ; \
134-
else \
135-
stop=""; \
136-
fi; \
137-
cat $(srcdir)/snowball.sql.in | \
138-
sed -e "s#_LANGNAME_#$$lang#g" | \
139-
sed -e "s#_DICTNAME_#$${lang}_stem#g" | \
140-
sed -e "s#_CFGNAME_#$$lang#g" | \
141-
sed -e "s#_ASCDICTNAME_#$${ascdictname}_stem#g" | \
142-
sed -e "s#_NONASCDICTNAME_#$${nonascdictname}_stem#g" | \
143-
sed -e "s#_STOPWORDS_#$$stop#g" ; \
144-
done >> $@
104+
$(SQLSCRIPT): snowball_create.pl snowball_func.sql.in snowball.sql.in
105+
$(PERL) $< --input ${srcdir} --outdir .
106+
107+
distprep: $(SQLSCRIPT)
145108

146109
install: all installdirs install-lib
147110
$(INSTALL_DATA) $(SQLSCRIPT) '$(DESTDIR)$(datadir)'
148-
@set -e; \
149-
set $(LANGUAGES) ; \
150-
while [ "$$#" -gt 0 ] ; \
151-
do \
152-
lang=$$1; shift; shift; \
153-
if [ -s $(srcdir)/stopwords/$${lang}.stop ] ; then \
154-
$(INSTALL_DATA) $(srcdir)/stopwords/$${lang}.stop '$(DESTDIR)$(datadir)/$(DICTDIR)' ; \
155-
fi \
156-
done
111+
$(INSTALL_DATA) $(addprefix $(srcdir)/stopwords/,$(stop_files)) '$(DESTDIR)$(datadir)/$(DICTDIR)'
157112

158113
installdirs: installdirs-lib
159114
$(MKDIR_P) '$(DESTDIR)$(datadir)' '$(DESTDIR)$(datadir)/$(DICTDIR)'
160115

161116
uninstall: uninstall-lib
162117
rm -f '$(DESTDIR)$(datadir)/$(SQLSCRIPT)'
163-
@set -e; \
164-
set $(LANGUAGES) ; \
165-
while [ "$$#" -gt 0 ] ; \
166-
do \
167-
lang=$$1; shift; shift; \
168-
if [ -s $(srcdir)/stopwords/$${lang}.stop ] ; then \
169-
rm -f '$(DESTDIR)$(datadir)/$(DICTDIR)/'$${lang}.stop ; \
170-
fi \
171-
done
172-
173-
clean distclean maintainer-clean: clean-lib
174-
rm -f $(OBJS) $(SQLSCRIPT)
118+
rm -f $(addprefix '$(DESTDIR)$(datadir)/$(DICTDIR)/',$(stop_files))
119+
120+
clean distclean: clean-lib
121+
rm -f $(OBJS)
122+
123+
maintainer-clean: distclean
124+
rm -f $(SQLSCRIPT)
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
#!/usr/bin/perl
2+
3+
use strict;
4+
use warnings;
5+
use Getopt::Long;
6+
7+
my $outdir_path = '';
8+
my $makefile_path = '';
9+
my $input_path = '';
10+
my $depfile;
11+
12+
our @languages = qw(
13+
arabic
14+
armenian
15+
basque
16+
catalan
17+
danish
18+
dutch
19+
english
20+
finnish
21+
french
22+
german
23+
greek
24+
hindi
25+
hungarian
26+
indonesian
27+
irish
28+
italian
29+
lithuanian
30+
nepali
31+
norwegian
32+
portuguese
33+
romanian
34+
russian
35+
serbian
36+
spanish
37+
swedish
38+
tamil
39+
turkish
40+
yiddish
41+
);
42+
43+
# Names of alternative dictionaries for all-ASCII words. If not
44+
# listed, the language itself is used. Note order dependency: Use of
45+
# some other language as ASCII dictionary must come after creation of
46+
# that language, so the "backup" language must be listed earlier in
47+
# @languages.
48+
49+
our %ascii_languages = (
50+
'hindi' => 'english',
51+
'russian' => 'english',
52+
);
53+
54+
GetOptions(
55+
'depfile' => \$depfile,
56+
'outdir:s' => \$outdir_path,
57+
'input:s' => \$input_path) || usage();
58+
59+
# Make sure input_path ends in a slash if needed.
60+
if ($input_path ne '' && substr($input_path, -1) ne '/')
61+
{
62+
$outdir_path .= '/';
63+
}
64+
65+
# Make sure outdir_path ends in a slash if needed.
66+
if ($outdir_path ne '' && substr($outdir_path, -1) ne '/')
67+
{
68+
$outdir_path .= '/';
69+
}
70+
71+
GenerateTsearchFiles();
72+
73+
sub usage
74+
{
75+
die <<EOM;
76+
Usage: snowball_create.pl --input/-i <path> --outdir/-o <path>
77+
--depfile Write dependency file
78+
--outdir Output directory (default '.')
79+
--input Input directory
80+
81+
snowball_create.pl creates snowball.sql from snowball.sql.in
82+
EOM
83+
}
84+
85+
sub GenerateTsearchFiles
86+
{
87+
my $target = shift;
88+
my $outdir_file = "$outdir_path/snowball_create.sql";
89+
90+
my $F;
91+
my $D;
92+
my $tmpl = read_file("$input_path/snowball.sql.in");
93+
94+
if ($depfile)
95+
{
96+
open($D, '>', "$outdir_path/snowball_create.dep")
97+
|| die "Could not write snowball_create.dep";
98+
}
99+
100+
print $D "$outdir_file: $input_path/snowball.sql.in\n" if $depfile;
101+
print $D "$outdir_file: $input_path/snowball_func.sql.in\n" if $depfile;
102+
103+
open($F, '>', $outdir_file)
104+
|| die "Could not write snowball_create.sql";
105+
106+
print $F "-- Language-specific snowball dictionaries\n";
107+
108+
print $F read_file("$input_path/snowball_func.sql.in");
109+
110+
foreach my $lang (@languages)
111+
{
112+
my $asclang = $ascii_languages{$lang} || $lang;
113+
my $txt = $tmpl;
114+
my $stop = '';
115+
my $stopword_path = "$input_path/stopwords/$lang.stop";
116+
117+
if (-s "$stopword_path")
118+
{
119+
$stop = ", StopWords=$lang";
120+
121+
print $D "$outdir_file: $stopword_path\n" if $depfile;
122+
}
123+
124+
$txt =~ s#_LANGNAME_#${lang}#gs;
125+
$txt =~ s#_DICTNAME_#${lang}_stem#gs;
126+
$txt =~ s#_CFGNAME_#${lang}#gs;
127+
$txt =~ s#_ASCDICTNAME_#${asclang}_stem#gs;
128+
$txt =~ s#_NONASCDICTNAME_#${lang}_stem#gs;
129+
$txt =~ s#_STOPWORDS_#$stop#gs;
130+
print $F $txt;
131+
}
132+
close($F);
133+
close($D) if $depfile;
134+
return;
135+
}
136+
137+
138+
sub read_file
139+
{
140+
my $filename = shift;
141+
my $F;
142+
local $/ = undef;
143+
open($F, '<', $filename) || die "Could not open file $filename\n";
144+
my $txt = <$F>;
145+
close($F);
146+
147+
return $txt;
148+
}

src/tools/msvc/Install.pm

Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -389,39 +389,9 @@ sub GenerateTsearchFiles
389389
my $target = shift;
390390

391391
print "Generating tsearch script...";
392-
my $F;
393-
my $tmpl = read_file('src/backend/snowball/snowball.sql.in');
394-
my $mf = read_file('src/backend/snowball/Makefile');
395-
$mf =~ s{\\\r?\n}{}g;
396-
$mf =~ /^LANGUAGES\s*=\s*(.*)$/m
397-
|| die "Could not find LANGUAGES line in snowball Makefile\n";
398-
my @pieces = split /\s+/, $1;
399-
open($F, '>', "$target/share/snowball_create.sql")
400-
|| die "Could not write snowball_create.sql";
401-
print $F read_file('src/backend/snowball/snowball_func.sql.in');
402-
403-
while ($#pieces > 0)
404-
{
405-
my $lang = shift @pieces || last;
406-
my $asclang = shift @pieces || last;
407-
my $txt = $tmpl;
408-
my $stop = '';
409-
410-
if (-s "src/backend/snowball/stopwords/$lang.stop")
411-
{
412-
$stop = ", StopWords=$lang";
413-
}
414-
415-
$txt =~ s#_LANGNAME_#${lang}#gs;
416-
$txt =~ s#_DICTNAME_#${lang}_stem#gs;
417-
$txt =~ s#_CFGNAME_#${lang}#gs;
418-
$txt =~ s#_ASCDICTNAME_#${asclang}_stem#gs;
419-
$txt =~ s#_NONASCDICTNAME_#${lang}_stem#gs;
420-
$txt =~ s#_STOPWORDS_#$stop#gs;
421-
print $F $txt;
422-
print ".";
423-
}
424-
close($F);
392+
system('perl', 'src/backend/snowball/snowball_create.pl',
393+
'--input', 'src/backend/snowball/',
394+
'--outdir', "$target/share/");
425395
print "\n";
426396
return;
427397
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy