123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- From aef33b66df0ad6f085dc55b50d7847e0b8a2ccd8 Mon Sep 17 00:00:00 2001
- From: Dario Binacchi <dario.binacchi@amarulasolutions.com>
- Date: Wed, 17 Jul 2024 14:53:35 +0200
- Subject: [PATCH] Fix building when only writer support is enabled
- The compilation of the following code, which links the zxing-cpp library
- built with only the writer (encoder) support, raises the following
- linking errors:
- using namespace ZXing;
- int main(void)
- {
- std::string str = "01";
- BitHacks::NumberOfLeadingZeros(0);
- auto writer = MultiFormatWriter(BarcodeFormat::Code128);
- writer.setEncoding(CharacterSet::UTF8);
- writer.setMargin(0);
- auto matrix = writer.encode(str, 0, 0 /*scaledImageWidth, pixelHeight*/);
- return EXIT_SUCCESS;
- }
- arm-buildroot-linux-uclibcgnueabihf/bin/ld:host/arm-buildroot-linux-uclibcgnueabihf/sysroot/usr/lib/libZXing.so:
- undefined reference to `ZXing::TextDecoder::GuessEncoding(unsigned char const*, unsigned int, ZXing::CharacterSet)'
- arm-buildroot-linux-uclibcgnueabihf/bin/ld: host/arm-buildroot-linux-uclibcgnueabihf/sysroot/usr/lib/libZXing.so:
- undefined reference to `ZXing::HRIFromGS1[abi:cxx11](std::basic_string_view<char, std::char_traits<char> >)'
- arm-buildroot-linux-uclibcgnueabihf/bin/ld: host/arm-buildroot-linux-uclibcgnueabihf/sysroot/usr/lib/libZXing.so:
- undefined reference to `ZXing::TextDecoder::Append(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned char const*, unsigned int, ZXing::CharacterSet, bool)'
- arm-buildroot-linux-uclibcgnueabihf/bin/ld: host/arm-buildroot-linux-uclibcgnueabihf/sysroot/usr/lib/libZXing.so:
- undefined reference to `ZXing::HRIFromISO15434[abi:cxx11](std::basic_string_view<char, std::char_traits<char> >)'
- collect2: error: ld returned 1 exit status
- The patch fixes these errors.
- Co-Developed-by: Francesco Nicoletta Puzzillo <francesco.nicolettap@amarula>
- Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
- Upstream: backport from upstream https://github.com/zxing-cpp/zxing-cpp/pull/811
- ---
- core/src/Content.cpp | 4 ++++
- core/src/Content.h | 6 ++++++
- core/src/DecoderResult.h | 2 ++
- core/src/GTIN.cpp | 2 ++
- core/src/GTIN.h | 2 ++
- 5 files changed, 16 insertions(+)
- diff --git a/core/src/Content.cpp b/core/src/Content.cpp
- index 4d3c44657cf9..569d4e35614a 100644
- --- a/core/src/Content.cpp
- +++ b/core/src/Content.cpp
- @@ -93,6 +93,7 @@ bool Content::canProcess() const
- return std::all_of(encodings.begin(), encodings.end(), [](Encoding e) { return CanProcess(e.eci); });
- }
-
- +#ifdef ZXING_READERS
- std::string Content::render(bool withECI) const
- {
- if (empty() || !canProcess())
- @@ -165,6 +166,7 @@ std::wstring Content::utfW() const
- {
- return FromUtf8(render(false));
- }
- +#endif // ZXING_READERS
-
- ByteArray Content::bytesECI() const
- {
- @@ -188,6 +190,7 @@ ByteArray Content::bytesECI() const
- return ByteArray(res);
- }
-
- +#ifdef ZXING_READERS
- CharacterSet Content::guessEncoding() const
- {
- // assemble all blocks with unknown encoding
- @@ -236,5 +239,6 @@ ContentType Content::type() const
-
- return ContentType::Mixed;
- }
- +#endif // ZXING_READERS
-
- } // namespace ZXing
- diff --git a/core/src/Content.h b/core/src/Content.h
- index 99e5a01e7140..aa77bda94d54 100644
- --- a/core/src/Content.h
- +++ b/core/src/Content.h
- @@ -38,7 +38,9 @@ class Content
- void ForEachECIBlock(FUNC f) const;
-
- void switchEncoding(ECI eci, bool isECI);
- +#ifdef ZXING_READERS
- std::string render(bool withECI) const;
- +#endif // ZXING_READERS
-
- public:
- struct Encoding
- @@ -75,13 +77,17 @@ public:
- bool empty() const { return bytes.empty(); }
- bool canProcess() const;
-
- +#ifdef ZXING_READERS
- std::string text(TextMode mode) const;
- std::wstring utfW() const; // utf16 or utf32 depending on the platform, i.e. on size_of(wchar_t)
- std::string utf8() const { return render(false); }
- +#endif // ZXING_READERS
-
- ByteArray bytesECI() const;
- +#ifdef ZXING_READERS
- CharacterSet guessEncoding() const;
- ContentType type() const;
- +#endif // ZXING_READERS
- };
-
- } // ZXing
- diff --git a/core/src/DecoderResult.h b/core/src/DecoderResult.h
- index 02b285084195..3117b03a923a 100644
- --- a/core/src/DecoderResult.h
- +++ b/core/src/DecoderResult.h
- @@ -50,7 +50,9 @@ public:
- Content&& content() && { return std::move(_content); }
-
- // to keep the unit tests happy for now:
- +#ifdef ZXING_READERS
- std::wstring text() const { return _content.utfW(); }
- +#endif // ZXING_READERS
- std::string symbologyIdentifier() const { return _content.symbology.toString(false); }
-
- // Simple macro to set up getter/setter methods that save lots of boilerplate.
- diff --git a/core/src/GTIN.cpp b/core/src/GTIN.cpp
- index 256855a03070..690901062301 100644
- --- a/core/src/GTIN.cpp
- +++ b/core/src/GTIN.cpp
- @@ -199,6 +199,7 @@ std::string LookupCountryIdentifier(const std::string& GTIN, const BarcodeFormat
- return it != std::end(COUNTRIES) && prefix >= it->first && prefix <= it->last ? it->id : std::string();
- }
-
- +#ifdef ZXING_READERS
- std::string EanAddOn(const Result& result)
- {
- if (!(BarcodeFormat::EAN13 | BarcodeFormat::UPCA | BarcodeFormat::UPCE | BarcodeFormat::EAN8)
- @@ -208,6 +209,7 @@ std::string EanAddOn(const Result& result)
- auto pos = txt.find(' ');
- return pos != std::string::npos ? std::string(txt.substr(pos + 1)) : std::string();
- }
- +#endif // ZXING_READERS
-
- std::string IssueNr(const std::string& ean2AddOn)
- {
- diff --git a/core/src/GTIN.h b/core/src/GTIN.h
- index d56b604e5f71..9af0b01200ce 100644
- --- a/core/src/GTIN.h
- +++ b/core/src/GTIN.h
- @@ -47,7 +47,9 @@ bool IsCheckDigitValid(const std::basic_string<T>& s)
- */
- std::string LookupCountryIdentifier(const std::string& GTIN, const BarcodeFormat format = BarcodeFormat::None);
-
- +#ifdef ZXING_READERS
- std::string EanAddOn(const Result& result);
- +#endif // ZXING_READERS
-
- std::string IssueNr(const std::string& ean2AddOn);
- std::string Price(const std::string& ean5AddOn);
- --
- 2.43.0
|