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

