THAT WORKED! Oh my word, I've spent so much time digging through this. Thank you! The script still isn't detected the ICU lib correctly (it's possible I might be doing something wrong), but the case insensitive search is working now. Thank you so much!
- Patrick On Apr 25, 2023 at 12:21 AM -0500, Troy A. Griffitts <scr...@crosswire.org>, wrote: > Hi Stephan, > > Have a go with SWORD SVN. > > I wonder if ICU detection in trunk can handle the latest versions of > libicu-dev on your Ubuntu box. > > svn co https://crosswire.org/svn/sword/trunk sword > > Thanks for looking into this. > > Also, you may wish to compile the examples/cmdline/search.cpp as is and see > if you get the same results. > > Blessings, > > Troy > > > > On April 24, 2023 9:58:48 PM MST, Patrick Stephan <pstephan1...@gmail.com> > > wrote: > > > If it helps... I am attempting to compile the library with ICU: > > > ``` > > > RUN cd sword-1.9.0 && ./usrinst.sh --enable-shared --with-icu > > > --with-icuregex > > > ``` > > > > > > However, it would appear that the compilation process is not detecting > > > ICU correctly. > > > > > > Here are all the libraries being installed via apt-get on top of the base > > > Ubuntu 22.04 image (I incorrectly mentioned before that it was Ubuntu > > > 20.04): > > > > > > gnupg gosu curl ca-certificates zip unzip git > > > supervisor sqlite3 libcap2-bin libpng-dev python2 > > > dnsutils subversion build-essential autotools-dev > > > pkg-config libz-dev libclucene-dev libicu-dev > > > libcurl4-gnutls-dev libtool m4 automake cmake zlib1g-dev > > > > > > And here is the output of the `./usrinst.sh --enable-shared --with-icu > > > --with-icuregex` command: > > > > > > checking build system type... aarch64-unknown-linux-gnu > > > checking host system type... aarch64-unknown-linux-gnu > > > checking target system type... aarch64-unknown-linux-gnu > > > checking for a BSD-compatible install... /usr/bin/install -c > > > checking whether build environment is sane... yes > > > checking for a thread-safe mkdir -p... /usr/bin/mkdir -p > > > checking for gawk... no > > > checking for mawk... mawk > > > checking whether make sets $(MAKE)... yes > > > checking whether make supports nested variables... yes > > > checking for gcc... gcc > > > checking whether the C compiler works... yes > > > checking for C compiler default output file name... a.out > > > checking for suffix of executables... > > > checking whether we are cross compiling... no > > > checking for suffix of object files... o > > > checking whether we are using the GNU C compiler... yes > > > checking whether gcc accepts -g... yes > > > checking for gcc option to accept ISO C89... none needed > > > checking whether gcc understands -c and -o together... yes > > > checking whether make supports the include directive... yes (GNU style) > > > checking dependency style of gcc... gcc3 > > > checking for g++... g++ > > > checking whether we are using the GNU C++ compiler... yes > > > checking whether g++ accepts -g... yes > > > checking dependency style of g++... gcc3 > > > checking how to print strings... printf > > > checking for a sed that does not truncate output... /usr/bin/sed > > > checking for grep that handles long lines and -e... /usr/bin/grep > > > checking for egrep... /usr/bin/grep -E > > > checking for fgrep... /usr/bin/grep -F > > > checking for ld used by gcc... /usr/bin/ld > > > checking if the linker (/usr/bin/ld) is GNU ld... yes > > > checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B > > > checking the name lister (/usr/bin/nm -B) interface... BSD nm > > > checking whether ln -s works... yes > > > checking the maximum length of command line arguments... 1572864 > > > checking how to convert aarch64-unknown-linux-gnu file names to > > > aarch64-unknown-linux-gnu format... func_convert_file_noop > > > checking how to convert aarch64-unknown-linux-gnu file names to toolchain > > > format... func_convert_file_noop > > > checking for /usr/bin/ld option to reload object files... -r > > > checking for objdump... objdump > > > checking how to recognize dependent libraries... pass_all > > > checking for dlltool... dlltool > > > checking how to associate runtime and link libraries... printf %s\n > > > checking for ar... ar > > > checking for archiver @FILE support... @ > > > checking for strip... strip > > > checking for ranlib... ranlib > > > checking command to parse /usr/bin/nm -B output from gcc object... ok > > > checking for sysroot... no > > > checking for a working dd... /usr/bin/dd > > > checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1 > > > checking for mt... no > > > checking if : is a manifest tool... no > > > checking how to run the C preprocessor... gcc -E > > > checking for ANSI C header files... yes > > > checking for sys/types.h... yes > > > checking for sys/stat.h... yes > > > checking for stdlib.h... yes > > > checking for string.h... yes > > > checking for memory.h... yes > > > checking for strings.h... yes > > > checking for inttypes.h... yes > > > checking for stdint.h... yes > > > checking for unistd.h... yes > > > checking for dlfcn.h... yes > > > checking for objdir... .libs > > > checking if gcc supports -fno-rtti -fno-exceptions... no > > > checking for gcc option to produce PIC... -fPIC -DPIC > > > checking if gcc PIC flag -fPIC -DPIC works... yes > > > checking if gcc static flag -static works... yes > > > checking if gcc supports -c -o file.o... yes > > > checking if gcc supports -c -o file.o... (cached) yes > > > checking whether the gcc linker (/usr/bin/ld) supports shared > > > libraries... yes > > > checking whether -lc should be explicitly linked in... no > > > checking dynamic linker characteristics... GNU/Linux ld.so > > > checking how to hardcode library paths into programs... immediate > > > checking whether stripping libraries is possible... yes > > > checking if libtool supports shared libraries... yes > > > checking whether to build shared libraries... yes > > > checking whether to build static libraries... yes > > > checking how to run the C++ preprocessor... g++ -E > > > checking for ld used by g++... /usr/bin/ld > > > checking if the linker (/usr/bin/ld) is GNU ld... yes > > > checking whether the g++ linker (/usr/bin/ld) supports shared > > > libraries... yes > > > checking for g++ option to produce PIC... -fPIC -DPIC > > > checking if g++ PIC flag -fPIC -DPIC works... yes > > > checking if g++ static flag -static works... yes > > > checking if g++ supports -c -o file.o... yes > > > checking if g++ supports -c -o file.o... (cached) yes > > > checking whether the g++ linker (/usr/bin/ld) supports shared > > > libraries... yes > > > checking dynamic linker characteristics... (cached) GNU/Linux ld.so > > > checking how to hardcode library paths into programs... immediate > > > checking whether byte ordering is bigendian... no > > > checking for pkg-config... /usr/bin/pkg-config > > > checking pkg-config is at least version 0.9.0... yes > > > checking for CLUCENE2... yes > > > checking whether to enable maintainer-specific portions of Makefiles... no > > > checking for compress in -lz... yes > > > checking for library containing regexec... none required > > > configure: Using system regex.h > > > checking for cppunit-config... no > > > checking for Cppunit - version >= 1.8.0... checking for pkg-config... > > > (cached) /usr/bin/pkg-config > > > checking pkg-config is at least version PKG_CONFIG... yes > > > checking for icu-config... no > > > *** The icu-config script installed by icu could not be found > > > *** compiling without ICU support > > > checking for curl-config... /usr/bin/curl-config > > > curl found - remote install options available > > > clucene 2.x found - lucene searching options available > > > checking for main in -lxapian... no > > > checking for vsnprintf... yes > > > checking compiler warnings > > > WARNING_CHECK: -Wno-address > > > WARNING_CHECK: -Wno-nonnull-compare > > > WARNINGS_OFF: -Wno-address -Wno-nonnull-compare > > > ./configure: line 18206: test: too many arguments > > > checking that generated files are newer than configure... done > > > configure: creating ./config.status > > > config.status: creating Makefile > > > config.status: creating lib/Makefile > > > config.status: creating tests/Makefile > > > config.status: creating tests/testsuite/Makefile > > > config.status: creating tests/cppunit/Makefile > > > config.status: creating utilities/Makefile > > > config.status: creating examples/Makefile > > > config.status: creating examples/cmdline/Makefile > > > config.status: creating examples/tasks/Makefile > > > config.status: creating utilities/diatheke/Makefile > > > config.status: creating sword.pc > > > config.status: creating include/swversion.h > > > config.status: creating sword.spec > > > config.status: creating include/config.h > > > config.status: executing depfiles commands > > > config.status: executing libtool commands > > > > > > > > > Configuration: > > > > > > Settings: > > > LIBDIR: /usr/lib > > > DEBUG: yes > > > PROFILE: no > > > BUILD TESTS: yes > > > BUILD EXAMPLES: no > > > BUILD UTILITIES: yes > > > STRIP LOG DEBUG: no > > > STRIP LOG INFO: no > > > > > > Dependencies for standard use: > > > REGEX: yes > > > ZLIB: yes > > > LIBICU: no > > > LIBCURL: yes > > > CLUCENE-CORE: yes 2.x > > > > > > Optional / Experimental: > > > LIBCURL SFTP: yes > > > BZIP2: no > > > XZ: no > > > ICUSWORD: no > > > ICU-REGEX: requested; but using ICU not enabled > > > CXX11-REGEX: no > > > CXX11-TIME: yes > > > XAPIAN-CORE: no > > > GAPI: no > > > > > > > > > > > > Configured to NOT write a global /etc/sword.conf on 'make install'. > > > If this is the first time you've installed sword, be sure to run > > > 'make install_config' if you would like a basic configuration installed > > > > > > Next you might try something like: > > > > > > make > > > sudo make install > > > # (and optionally) > > > sudo make install_config > > > make register > > > > > > -------------------------------------------- > > > > > > I think the issue has to do with the changes in the ICU package in more > > > recent versions of Ubuntu, but It's getting too late for me to further > > > investigate. I'll keep digging tomorrow unless someone with deeper > > > knowledge replies with the answer. > > > > > > - Patrick > > > On Apr 24, 2023 at 11:07 PM -0500, Patrick Stephan > > > <pstephan1...@gmail.com>, wrote: > > > > So I've been digging into this a bit, and it would appear that the > > > > `toUpper()` method on the SWBuf class isn't working. I did a little > > > > hacking on the SWModule class and dropped in some debugging `printf` > > > > calls to see what was going on and why I wasn't getting my expected > > > > results. Here are I print out the word being queried: > > > > > > > > ``` > > > > printf("word check: %s\n", words[i].toUpper().c_str()); > > > > ``` > > > > > > > > And here is the result: > > > > > > > > ``` > > > > word check: God > > > > ``` > > > > > > > > I'm doing this in between lines 771 and 772 in `swmodule.cpp`. I did > > > > the same type of thing on the `textBuf` in the search method and no > > > > casing is changed. Any thoughts on all this? > > > > > > > > I am wondering if it has to do with the more modern OS that I am using. > > > > I am attempting this on Ubuntu 20.04, and Sword 1.9.0 (which is the > > > > latest version best I can tell) is over 2 years old. > > > > > > > > That brings me to the next question: What is the development status on > > > > this? Is it being actively worked on? I would be willing to get > > > > involved, but I am only just now learning C/C++, So I would need some > > > > hand-holding, so-to-speak, to get me up to speed. > > > > > > > > > > > > - Patrick > > > > On Apr 19, 2023 at 10:32 AM -0500, Patrick Stephan > > > > <pstephan1...@gmail.com>, wrote: > > > > > I am new to c/c++ and to this library, so I could be misunderstanding > > > > > how the module search system works, but I think I may have found a > > > > > bug? > > > > > > > > > > Here is my code: > > > > > ``` > > > > > #include "vector" > > > > > #include "swmgr.h" > > > > > #include "swmodule.h" > > > > > #include "markupfiltmgr.h" > > > > > #include "modules.h" > > > > > #include "php_sword.h" > > > > > > > > > > #if defined(USECXX11REGEX) > > > > > #include <regex> > > > > > #ifndef REG_ICASE > > > > > #define REG_ICASE std::regex::icase > > > > > #endif > > > > > #elif defined(USEICUREGEX) > > > > > #include <unicode/regex.h> > > > > > #ifndef REG_ICASE > > > > > #define REG_ICASE UREGEX_CASE_INSENSITIVE > > > > > #endif > > > > > #else > > > > > #include <regex.h> > > > > > #endif > > > > > > > > > > using namespace::sword; > > > > > > > > > > // unrelated function here... > > > > > > > > > > int sword_search_module(char* module_name, char* search_string) { > > > > > SWMgr mgr(new MarkupFilterMgr(FMT_XHTML)); > > > > > > > > > > // mgr.setGlobalOption("Headings", "On"); > > > > > // mgr.setGlobalOption("Strong's Numbers", "Off"); > > > > > // mgr.setGlobalOption("Lemmas", "Off"); > > > > > // mgr.setGlobalOption("Greek Accents", "Off"); > > > > > // mgr.setGlobalOption("Footnotes", "On"); > > > > > // mgr.setGlobalOption("Cross-references", "On"); > > > > > > > > > > mgr.setGlobalOption("Headings", "Off"); > > > > > mgr.setGlobalOption("Strong's Numbers", "Off"); > > > > > mgr.setGlobalOption("Lemmas", "Off"); > > > > > mgr.setGlobalOption("Greek Accents", "Off"); > > > > > mgr.setGlobalOption("Footnotes", "Off"); > > > > > mgr.setGlobalOption("Cross-references", "Off"); > > > > > > > > > > SWModule *module = mgr.getModule(module_name); > > > > > > > > > > /* > > > > > * >=0 - regex; (for backward compat, if > 0 then used as > > > > > additional REGEX FLAGS) > > > > > * -1 - phrase > > > > > * -2 - multiword > > > > > * -3 - entryAttrib (eg. Word//Lemma./G1234/) (Lemma with dot > > > > > means check components (Lemma.[1-9]) also) > > > > > * -4 - clucene > > > > > * -5 - multilemma window; flags = window size > > > > > */ > > > > > > > > > > ListKey results = module->search(search_string, -2, REG_ICASE); > > > > > > > > > > for (int i = 0; i < results.getCount(); i++) { > > > > > module->setKey(results.getElement()); > > > > > std::cout > > > > > << results.getText() > > > > > << " - " > > > > > << module->renderText() > > > > > << std::endl; > > > > > results.increment(); > > > > > } > > > > > > > > > > return results.getCount(); > > > > > } > > > > > ``` > > > > > > > > > > Given that code, If I run a search for "so loved god" against the KJV > > > > > module, I get 3 verses: Hosea 2:23, Hosea 3:1, and I Timothy 6:2. I'm > > > > > not sure why I Tim 6:2 is listed because it contains niether "so", > > > > > nor "god". There are also a slew of verses that are expected to show > > > > > up but don't (like John 3:16), presumably because the > > > > > case-insensitive flag `SEARCHFLAG_STRICTBOUNDARIES | REG_ICASE > > > > > ` isn't working. BTW, I am compiling my code against Ubuntu 20.04 and > > > > > `REG_ICASE` resolves to `2`. > > > > > > > > > > Also, If I include the `SEARCHFLAG_STRICTBOUNDARIES` flag like so: > > > > > `SEARCHFLAG_STRICTBOUNDARIES | REG_ICASE`, and search for 'god so > > > > > loved', I get no results, further enforcing my theory that the > > > > > `REG_ICASE` flag isn't doing anything. If I search for 'God so loved' > > > > > then I get 6 results. I am, however expecting 10. Here are the verses > > > > > that are not returned that I expect to: > > > > > > > > > > • Nehemiah 13:26 > > > > > • Galatians 2:20 > > > > > • 2 Peter 1:17 > > > > > • I John 4:10 > > > > > > > > > > I have also tried with replacing the if/else block at the top with > > > > > just `#include "regex.h"`. But that makes no difference. > > > > > Thank you for any help > > > > > > > > > > - Patrick > -- > Sent from my Android device with K-9 Mail. Please excuse my brevity.
_______________________________________________ sword-devel mailing list: sword-devel@crosswire.org http://crosswire.org/mailman/listinfo/sword-devel Instructions to unsubscribe/change your settings at above page