blob: 0d2a90f7a5466a42138b69c5db49196d62a66b89 [file] [log] [blame]
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