head 1.5; access; symbols pkgsrc-2026Q1:1.5.0.22 pkgsrc-2026Q1-base:1.5 pkgsrc-2025Q4:1.5.0.20 pkgsrc-2025Q4-base:1.5 pkgsrc-2025Q3:1.5.0.18 pkgsrc-2025Q3-base:1.5 pkgsrc-2025Q2:1.5.0.16 pkgsrc-2025Q2-base:1.5 pkgsrc-2025Q1:1.5.0.14 pkgsrc-2025Q1-base:1.5 pkgsrc-2024Q4:1.5.0.12 pkgsrc-2024Q4-base:1.5 pkgsrc-2024Q3:1.5.0.10 pkgsrc-2024Q3-base:1.5 pkgsrc-2024Q2:1.5.0.8 pkgsrc-2024Q2-base:1.5 pkgsrc-2024Q1:1.5.0.6 pkgsrc-2024Q1-base:1.5 pkgsrc-2023Q4:1.5.0.4 pkgsrc-2023Q4-base:1.5 pkgsrc-2023Q3:1.5.0.2 pkgsrc-2023Q3-base:1.5 pkgsrc-2023Q2:1.4.0.2 pkgsrc-2023Q2-base:1.4 pkgsrc-2023Q1:1.3.0.8 pkgsrc-2023Q1-base:1.3 pkgsrc-2022Q4:1.3.0.6 pkgsrc-2022Q4-base:1.3 pkgsrc-2022Q3:1.3.0.4 pkgsrc-2022Q3-base:1.3 pkgsrc-2022Q2:1.3.0.2 pkgsrc-2022Q2-base:1.3 pkgsrc-2022Q1:1.2.0.10 pkgsrc-2022Q1-base:1.2 pkgsrc-2021Q4:1.2.0.8 pkgsrc-2021Q4-base:1.2 pkgsrc-2021Q3:1.2.0.6 pkgsrc-2021Q3-base:1.2 pkgsrc-2021Q2:1.2.0.4 pkgsrc-2021Q2-base:1.2 pkgsrc-2021Q1:1.2.0.2 pkgsrc-2021Q1-base:1.2 pkgsrc-2020Q4:1.1.0.6 pkgsrc-2020Q4-base:1.1 pkgsrc-2020Q3:1.1.0.4 pkgsrc-2020Q3-base:1.1 pkgsrc-2020Q2:1.1.0.2 pkgsrc-2020Q2-base:1.1; locks; strict; comment @# @; 1.5 date 2023.07.13.06.21.47; author nia; state Exp; branches; next 1.4; commitid IaxJzNnnlD2KFBwE; 1.4 date 2023.04.27.08.12.44; author wiz; state Exp; branches; next 1.3; commitid Cpn2osklPUAhLImE; 1.3 date 2022.04.25.23.22.58; author tnn; state Exp; branches; next 1.2; commitid E17XFaWXg23XADBD; 1.2 date 2021.02.18.10.26.56; author wiz; state Exp; branches; next 1.1; commitid G2L9zhOfB6ey9bIC; 1.1 date 2020.04.14.14.07.50; author ryoon; state Exp; branches; next ; commitid wPGb0aXGpJ9glm4C; desc @@ 1.5 log @libstemmer: Libtoolize. Should help the build on various platforms. @ text @$NetBSD: patch-GNUmakefile,v 1.4 2023/04/27 08:12:44 wiz Exp $ * Libtoolize. --- GNUmakefile.orig 2021-11-10 02:42:18.000000000 +0000 +++ GNUmakefile @@@@ -159,23 +159,23 @@@@ ADA_SOURCES = $(libstemmer_algorithms:%= $(libstemmer_algorithms:%=$(ada_src_dir)/stemmer-%.adb) \ $(ada_src_dir)/stemmer-factory.ads $(ada_src_dir)/stemmer-factory.adb -COMPILER_OBJECTS=$(COMPILER_SOURCES:.c=.o) -RUNTIME_OBJECTS=$(RUNTIME_SOURCES:.c=.o) -LIBSTEMMER_OBJECTS=$(LIBSTEMMER_SOURCES:.c=.o) -LIBSTEMMER_UTF8_OBJECTS=$(LIBSTEMMER_UTF8_SOURCES:.c=.o) -STEMWORDS_OBJECTS=$(STEMWORDS_SOURCES:.c=.o) -STEMTEST_OBJECTS=$(STEMTEST_SOURCES:.c=.o) -C_LIB_OBJECTS = $(C_LIB_SOURCES:.c=.o) -C_OTHER_OBJECTS = $(C_OTHER_SOURCES:.c=.o) +COMPILER_OBJECTS=$(COMPILER_SOURCES:.c=.lo) +RUNTIME_OBJECTS=$(RUNTIME_SOURCES:.c=.lo) +LIBSTEMMER_OBJECTS=$(LIBSTEMMER_SOURCES:.c=.lo) +LIBSTEMMER_UTF8_OBJECTS=$(LIBSTEMMER_UTF8_SOURCES:.c=.lo) +STEMWORDS_OBJECTS=$(STEMWORDS_SOURCES:.c=.lo) +STEMTEST_OBJECTS=$(STEMTEST_SOURCES:.c=.lo) +C_LIB_OBJECTS = $(C_LIB_SOURCES:.c=.lo) +C_OTHER_OBJECTS = $(C_OTHER_SOURCES:.c=.lo) JAVA_CLASSES = $(JAVA_SOURCES:.java=.class) JAVA_RUNTIME_CLASSES=$(JAVARUNTIME_SOURCES:.java=.class) -CFLAGS=-O2 -W -Wall -Wmissing-prototypes -Wmissing-declarations -CPPFLAGS= +CFLAGS+=-fPIC -W -Wall -Wmissing-prototypes -Wmissing-declarations +CPPFLAGS+= INCLUDES=-Iinclude -all: snowball$(EXEEXT) libstemmer.a stemwords$(EXEEXT) $(C_OTHER_SOURCES) $(C_OTHER_HEADERS) $(C_OTHER_OBJECTS) +all: snowball$(EXEEXT) libstemmer.la stemwords$(EXEEXT) $(C_OTHER_SOURCES) $(C_OTHER_HEADERS) $(C_OTHER_OBJECTS) algorithms.mk: libstemmer/mkalgorithms.pl libstemmer/modules.txt libstemmer/mkalgorithms.pl algorithms.mk libstemmer/modules.txt @@@@ -204,7 +204,12 @@@@ clean: -rmdir $(js_output_dir) snowball$(EXEEXT): $(COMPILER_OBJECTS) - $(CC) $(CFLAGS) $(LDFLAGS) -o $@@ $^ + $(LIBTOOL) --quiet --tag=CC --mode=link $(CC) $(LDFLAGS) -o $@@ $^ + +.SUFFIXES: .lo + +.c.lo: + $(LIBTOOL) --quiet --tag=CC --mode=compile $(CC) $(CFLAGS) $(INCLUDES) $(CPPFLAGS) -o $@@ -c $< $(COMPILER_OBJECTS): $(COMPILER_HEADERS) @@@@ -214,28 +219,28 @@@@ libstemmer/libstemmer.c: libstemmer/libs libstemmer/libstemmer_utf8.c: libstemmer/libstemmer_c.in sed 's/@@MODULES_H@@/modules_utf8.h/' $^ >$@@ +libstemmer.la: libstemmer/libstemmer.lo $(RUNTIME_OBJECTS) $(C_LIB_OBJECTS) + $(LIBTOOL) --quiet --tag=CC --mode=link $(CC) $(LDFLAGS) -version-info 0:0 -rpath $(PREFIX)/lib -o $@@ $^ + libstemmer/modules.h libstemmer/mkinc.mak: libstemmer/mkmodules.pl libstemmer/modules.txt libstemmer/mkmodules.pl $@@ $(c_src_dir) libstemmer/modules.txt libstemmer/mkinc.mak libstemmer/modules_utf8.h libstemmer/mkinc_utf8.mak: libstemmer/mkmodules.pl libstemmer/modules.txt libstemmer/mkmodules.pl $@@ $(c_src_dir) libstemmer/modules.txt libstemmer/mkinc_utf8.mak utf8 -libstemmer/libstemmer.o: libstemmer/modules.h $(C_LIB_HEADERS) - -libstemmer.a: libstemmer/libstemmer.o $(RUNTIME_OBJECTS) $(C_LIB_OBJECTS) - $(AR) -cru $@@ $^ +libstemmer/libstemmer.lo: libstemmer/modules.h $(C_LIB_HEADERS) -examples/%.o: examples/%.c - $(CC) $(CFLAGS) $(INCLUDES) $(CPPFLAGS) -c -o $@@ $< +examples/%.lo: examples/%.c + $(LIBTOOL) --quiet --tag=CC --mode=compile $(CC) $(CFLAGS) $(INCLUDES) $(CPPFLAGS) -c -o $@@ $< stemwords$(EXEEXT): $(STEMWORDS_OBJECTS) libstemmer.a - $(CC) $(CFLAGS) $(LDFLAGS) -o $@@ $^ + $(LIBTOOL) --quiet --tag=CC --mode=link $(CC) $(LDFLAGS) -o $@@ $^ -tests/%.o: tests/%.c - $(CC) $(CFLAGS) $(INCLUDES) $(CPPFLAGS) -c -o $@@ $< +tests/%.lo: tests/%.c + $(LIBTOOL) --quiet --tag=CC --mode=compile $(CC) $(CFLAGS) $(INCLUDES) $(CPPFLAGS) -c -o $@@ $< stemtest$(EXEEXT): $(STEMTEST_OBJECTS) libstemmer.a - $(CC) $(CFLAGS) $(LDFLAGS) -o $@@ $^ + $(LIBTOOL) --quiet --tag=CC --mode=link $(CC) $(LDFLAGS) -o $@@ $^ csharp_stemwords$(EXEEXT): $(CSHARP_STEMWORDS_SOURCES) $(CSHARP_RUNTIME_SOURCES) $(CSHARP_SOURCES) $(MCS) -unsafe -target:exe -out:$@@ $(CSHARP_STEMWORDS_SOURCES) $(CSHARP_RUNTIME_SOURCES) $(CSHARP_SOURCES) @@@@ -274,8 +279,8 @@@@ $(c_src_dir)/stem_ISO_8859_2_%.c $(c_src echo "./snowball charsets/ISO-8859-2.sbl $< -o $${o} -eprefix $${l}_ISO_8859_2_ -r ../runtime"; \ ./snowball charsets/ISO-8859-2.sbl $< -o $${o} -eprefix $${l}_ISO_8859_2_ -r ../runtime -$(c_src_dir)/stem_%.o: $(c_src_dir)/stem_%.c $(c_src_dir)/stem_%.h - $(CC) $(CFLAGS) $(INCLUDES) $(CPPFLAGS) -c -o $@@ $< +$(c_src_dir)/stem_%.lo: $(c_src_dir)/stem_%.c $(c_src_dir)/stem_%.h + $(LIBTOOL) --quiet --tag=CC --mode=compile $(CC) $(CFLAGS) $(INCLUDES) $(CPPFLAGS) -c -o $@@ $< $(java_src_dir)/%Stemmer.java: algorithms/%.sbl snowball$(EXEEXT) @@mkdir -p $(java_src_dir) @ 1.4 log @libstemmer: update to 2.2.0. Snowball 2.2.0 (2021-11-10) =========================== New Code Generators ------------------- * Add Ada generator from Stephane Carrez (#135). Javascript ---------- * Fix generated code to use integer division rather than floating point division. Noted by David Corbett. Pascal ------ * Fix code generated for division. Previously real division was used and the generated code would fail to compile with a "Incompatible types" error. Noted by David Corbett. * Fix code generated for Snowball's `minint` and `maxint` constant. Python ------ * Python 2 is no longer actively supported, as proposed on the mailing list: https://lists.tartarus.org/pipermail/snowball-discuss/2021-August/001721.html * Fix code generated for division. Previously the Python code we generated used integer division but rounded negative fractions towards negative infinity rather than zero under Python 2, and under Python 3 used floating point division. Noted by David Corbett. Code Quality Improvements ------------------------- * C#: An `among` without functions is now generated as `static` and groupings are now generated as constant. Patches from James Turner in #146 and #147. Code generation improvements ---------------------------- * General: + Constant numeric subexpressions and constant numeric tests are now evaluated at Snowball compile time. Behavioural changes to existing algorithms ------------------------------------------ * german2: Fix handling of `qu` to match algorithm description. Previously the implementation erroneously did `skip 2` after `qu`. We suspect this was intended to skip the `qu` but that's already been done by the substring/among matching, so it actually skips an extra two characters. The implementation has always differed in this way, but there's no good reason to skip two extra characters here so overall it seems best to change the code to match the description. This change only affects the stemming of a single word in the sample vocabulary - `quae` which seems to actually be Latin rather than German. Optimisations to existing algorithms ------------------------------------ * arabic: Handle exception cases in the among they're exceptions to. * greek: Remove unused slice setting, handle exception cases in the among they're exceptions to, and turn `substring ... among ... or substring ... among ...` into a single `substring ... among ...` in cases where it is trivial to do so. * hindi: Eliminate the need for variable `p`. * irish: Minor optimisation in setting `pV` and `p1`. * yiddish: Make use of `among` more. Compiler -------- * Fix handling of `len` and `lenof` being declared as names. For compatibility with programs written for older Snowball versions len and lenof stop being tokens if declared as names. However this code didn't work correctly if the tokeniser's name buffer needed to be enlarged to hold the token name (i.e. 3 or 5 elements respectively). * Report a clearer error if `=` is used instead of `==` in an integer test. * Replace a single entry command list with its contents in the internal syntax tree. This puts things in a more canonical form, which helps subsequent optimisations. Build system ------------ * Support building on Microsoft Windows (using mingw+msys or a similar Unix-like environment). Patch from Jannick in #129. * Split out INCLUDES from CPPFLAGS so that CPPFLAGS can now be overridden by the user if required. Fixes #148, reported by Dominique Leuenberger. * Regenerate algorithms.mk only when needed rather than on every `make` run. libstemmer ---------- * The libstemmer static library now has a `.a` extension, rather than `.o`. Patch from Michal Vasilek in #150. Testsuite --------- * stemtest: Test that numbers and numeric codes aren't damaged by any of the algorithms. Regression test for #66. Fixes #81. * ada: Fix ada tests to fail if output differs. There was an extra `| head -300` compared to other languages, which meant that the exit code of `diff` was ignored. It seems more helpful (and is more consistent) not to limit how many differences are shown so just drop this addition. * go: Stop thinning testdata. It looks like we only are because the test harness code was based on that for rust, which was based on that for javascript, which was only thinning because it was reading everything into memory and the larger vocabulary lists were resulting in out of memory issues. * javascript: Speed up stemwords.js. Process input line-by-line rather than reading the whole file into memory, splitting, iterating, and creating an array with all the output, joining and writing out a single huge string. This also means we can stop thinning the test data for javascript, which we were only doing because the huge arabic test data file was causing out of memory errors. Also drop the -p option, which isn't useful here and complicates the code. * rust: Turn on optimisation in the makefile rather than the CI config. This makes the tests run in about 1/5 of the time and there's really no reason to be thinning the testdata for rust. Documentation ------------- * CONTRIBUTING.rst: Improve documentation for adding a new stemming algorithm. * Improve wording of Python docs. @ text @d1 1 a1 1 $NetBSD: patch-GNUmakefile,v 1.3 2022/04/25 23:22:58 tnn Exp $ d3 1 a3 1 * Build dynamic library, from archlinux. d7 20 a26 1 @@@@ -170,12 +170,12 @@@@ C_OTHER_OBJECTS = $(C_OTHER_SOURCES:.c=. d32 1 a32 1 +CFLAGS+=-O2 -W -Wall -Wmissing-prototypes -Wmissing-declarations d38 1 a38 1 +all: snowball$(EXEEXT) libstemmer.so stemwords$(EXEEXT) $(C_OTHER_SOURCES) $(C_OTHER_HEADERS) $(C_OTHER_OBJECTS) d42 15 a56 1 @@@@ -214,6 +214,9 @@@@ libstemmer/libstemmer.c: libstemmer/libs d60 2 a61 2 +libstemmer.so: libstemmer/libstemmer.o $(RUNTIME_OBJECTS) $(C_LIB_OBJECTS) + $(CC) $(CFLAGS) -shared $(LDFLAGS) -Wl,-soname,libstemmer.so.0 -Wl,--version-script=libstemmer/symbol.map -o $@@.0.0.0 $^ d66 40 @ 1.3 log @libstemmer: no -Wl,--version-script on SunOS @ text @d1 1 a1 1 $NetBSD: patch-GNUmakefile,v 1.2 2021/02/18 10:26:56 wiz Exp $ d5 1 a5 1 --- GNUmakefile.orig 2021-01-21 04:50:09.000000000 +0000 d7 1 a7 1 @@@@ -162,10 +162,10 @@@@ C_OTHER_OBJECTS = $(C_OTHER_SOURCES:.c=. d12 14 a25 12 -CPPFLAGS=-Iinclude +CFLAGS+=-fPIC -O2 -W -Wall -Wmissing-prototypes -Wmissing-declarations +CPPFLAGS+=-Iinclude -all: snowball libstemmer.o stemwords $(C_OTHER_SOURCES) $(C_OTHER_HEADERS) $(C_OTHER_OBJECTS) +all: snowball libstemmer.o libstemmer.so stemwords $(C_OTHER_SOURCES) $(C_OTHER_HEADERS) $(C_OTHER_OBJECTS) clean: rm -f $(COMPILER_OBJECTS) $(RUNTIME_OBJECTS) \ @@@@ -212,6 +212,9 @@@@ libstemmer/libstemmer.o: libstemmer/modu libstemmer.o: libstemmer/libstemmer.o $(RUNTIME_OBJECTS) $(C_LIB_OBJECTS) $(AR) -cru $@@ $^ d30 2 a31 2 stemwords: $(STEMWORDS_OBJECTS) libstemmer.o $(CC) $(CFLAGS) $(LDFLAGS) -o $@@ $^ @ 1.2 log @libstemmer: update to 2.1.0. Snowball 2.1.0 (2021-01-21) =========================== C/C++ ----- * Fix decoding of 4-byte UTF-8 sequences in `grouping` checks. This bug affected Unicode codepoints U+40000 to U+7FFFF and U+C0000 to U+FFFFF and doesn't affect any of the stemming algorithms we currently ship (#138, reported by Stephane Carrez). Python ------ * Fix snowballstemmer.algorithms() method (#132, reported by kkaiser). * Update code to generate trove language classifiers for PyPI. All the natural languages we previously had stemmers for have now been added to PyPI's list, but Armenian and Yiddish aren't on it. Patch from Dmitry Shachnev. Java ---- Code Quality Improvements ------------------------- * Suppress GCC warning in compiler code. * Use `const` pointers more in C runtime. * Only use spaces for indentation in javascript code. Change proposed by Emily Marigold Klassen in #123, and seems to be the modern Javascript norm. New Code Generators ------------------- * Add Ada generator from Stephane Carrez (#135). New Snowball Language Features ------------------------------ * `lenof` and `sizeof` can now be applied to a literal string, which can be useful if you want to do calculations on cursor values. This change actually simplifies the language a little, since you can now use a literal string in any read-only context which accepts a string variable. Code generation improvements ---------------------------- * General: + Fix bugs in the code generated to handle failure of `goto`, `gopast` or `try` inside `setlimit` or string-`$`. This affected all languages (though the issue with `try` wasn't present for C). These bugs don't affect any of the stemming algorithms we currently ship. Reported by Stefan Petkovic on snowball-discuss. + Change `hop` with a negative argument to work as documented. The manual says a negative argument to hop will raise signal f, but the implementation for all languages was actually to move the cursor in the opposite direction to `hop` with a positive argument. The implemented behaviour is problematic as it allows invalidating implicitly saved cursor values by modifying the string outside the current region, so we've decided it's best to fix the implementation to match the documentation. The only Snowball code we're aware of which relies on this was the original version of the new Yiddish stemming algorithm, which has been updated not to rely on this. The compiler now issues a warning for `hop` with a constant negative argument (internally now converted to `false`), and for `hop` with a constant zero argument (internally now converted to `true`). + Canonicalise `among` actions equivalent to `()` such as `(true)` which previously resulted in an extra case in the among, and for Python we'd generate invalid Python code (`if` or `elif` with an empty body). Bug revealed by Assaf Urieli's Yiddish stemmer in #137. + Eliminate variables whose values are never used - they no longer have corresponding member variables, etc, and no code is generated for any assignments to them. + Don't generate anything for an unused `grouping`. + Stop warning "grouping X defined but not used" for a `grouping` which is only used to define other another `grouping`. * C/C++: + Store booleans in same array as integers. This means each boolean is stored as an int instead of an unsigned char which means 4 bytes instead of 1, but we save a pointer (4 or 8 bytes) in struct SN_env which is a win for all the current stemmers. For an algorithm which uses both integers and booleans, we also save the overhead of allocating a block on the heap, and potentially improve data locality. + Eliminate duplicate generated C comment for sliceto. * Pascal: + Avoid generating unused variables. The Pascal code generated for the stemmers we ship is now warning free (tested with fpc 3.2.0). * Python: + End `if`-chain with `else` where possible, avoiding a redundant test of the variable being switched on. This optimisation kicks in for an `among` where all cases have commands. This change seems to speed up `make check_python_arabic` by a few percent. New stemming algorithms ----------------------- * Add Serbian stemmer from stef4np (#113). * Add Yiddish stemmer from Assaf Urieli (#137). * Add Armenian stemmer from Astghik Mkrtchyan. It's been on the website for over a decade, and included in Xapian for over 9 years without any negative feedback. Behavioural changes to existing algorithms ------------------------------------------ Optimisations to existing algorithms ------------------------------------ * kraaij_pohlmann: Use `$v = limit` instead of `do (tolimit setmark v)` since this generates simpler code, and also matches the code other algorithm implementations use. Probably for languages like C with optimising compilers the compiler will generate equivalent code anyway, but e.g. for Python this should be an improvement. Code clarity improvements to existing algorithms ------------------------------------------------ * hindi.sbl: Fix comment typo. Compiler -------- * Don't count `$x = x + 1` as initialising or using `x`, so it's now handled like `$x += 1` already is. * Comments are now only included in the generated code if command like option -comments is specified. The comments in the generated code are useful if you're trying to debug the compiler, and perhaps also if you are trying to debug your Snowball code, but for everyone else they just bloat the code which as the number of languages we support grows becomes more of an issue. * `-parentclassname` is not only for java and csharp so don't disable it if those backends are disabled. * `-syntax` now reports the value for each numeric literal. * Report location for excessive get nesting error. * Internally the compiler now represents negated literal numbers as a simple `c_number` rather than `c_neg` applied to a `c_number` with a positive value. This simplifies optimisations that want to check for a constant numeric expression. Build system ------------ * Link binaries with LDFLAGS if it's set, which is needed for some platform (e.g. OpenEmbedded). Patch from Andreas Müller (#120). * Add missing dependencies of algorithms.go rule. Testsuite --------- * C: Add stemtest for low-level regression tests. Documentation ------------- * Document a C99 compiler as a requirement for building the snowball compiler (but the C code it generates should still work with any ISO C compiler.) A few declarations mixed with code crept in some time ago (which nobody's complained about), so this is really just formally documenting a requirement which already existed. * README: Explain what Snowball is and what Stemming is (#131, reported by Sean Kelly). * CONTRIBUTING.rst: Expand section on adding a new generator. * For Python snowballstemmer module include global NEWS instead of Python-specific CHANGES.rst and use README.rst as the long description. Patch from Dmitry Shachnev (#119). * COPYING: Update and incorporate Python backend licensing information which was previously in a separate file. @ text @d1 1 a1 1 $NetBSD: patch-GNUmakefile,v 1.1 2020/04/14 14:07:50 ryoon Exp $ d26 1 a26 1 + $(CC) $(CFLAGS) -shared $(LDFLAGS) -Wl,-soname,libstemmer.so.0,-version-script,libstemmer/symbol.map -o $@@.0.0.0 $^ @ 1.1 log @textproc/libstemmer: import libstemmer-2.0.0 The snowball compiler and the stemming algorithms @ text @d1 1 a1 1 $NetBSD$ d5 1 a5 1 --- GNUmakefile.orig 2019-10-02 03:27:17.000000000 +0000 d7 1 a7 1 @@@@ -151,10 +151,10 @@@@ C_OTHER_OBJECTS = $(C_OTHER_SOURCES:.c=. d21 1 a21 10 @@@@ -179,7 +179,7 @@@@ clean: -rmdir $(js_output_dir) snowball: $(COMPILER_OBJECTS) - $(CC) $(CFLAGS) -o $@@ $^ + $(CC) $(CFLAGS) ${LDFLAGS} -o $@@ $^ $(COMPILER_OBJECTS): $(COMPILER_HEADERS) @@@@ -200,8 +200,11 @@@@ libstemmer/libstemmer.o: libstemmer/modu d29 1 a29 2 - $(CC) $(CFLAGS) -o $@@ $^ + $(CC) $(CFLAGS) ${LDFLAGS} -o $@@ $^ a30 2 csharp_stemwords: $(CSHARP_STEMWORDS_SOURCES) $(CSHARP_RUNTIME_SOURCES) $(CSHARP_SOURCES) $(MCS) -unsafe -target:exe -out:$@@ $(CSHARP_STEMWORDS_SOURCES) $(CSHARP_RUNTIME_SOURCES) $(CSHARP_SOURCES) @