diff --git a/.fmf/version b/.fmf/version new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/.gitignore b/.gitignore index 3afce3b..692b3d2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,13 @@ /opencc-0.1.2.tar.gz /opencc-0.2.0.tar.gz /opencc-0.3.0.tar.gz +/opencc-0.4.0.tar.gz +/opencc-0.4.3.tar.gz +/OpenCC-ver.1.0.2.tar.gz +/OpenCC-ver.1.0.3.tar.gz +/OpenCC-ver.1.0.5.tar.gz +/OpenCC-ver.1.1.1.tar.gz +/OpenCC-ver.1.1.2.tar.gz +/OpenCC-ver.1.1.4.tar.gz +/OpenCC-ver.1.1.7.tar.gz +/OpenCC-ver.1.1.9.tar.gz diff --git a/opencc-check-bounds.patch b/opencc-check-bounds.patch new file mode 100644 index 0000000..9ed7c20 --- /dev/null +++ b/opencc-check-bounds.patch @@ -0,0 +1,35 @@ +Index: OpenCC-ver.1.0.5/src/BinaryDict.cpp +=================================================================== +--- OpenCC-ver.1.0.5.orig/src/BinaryDict.cpp ++++ OpenCC-ver.1.0.5/src/BinaryDict.cpp +@@ -63,6 +63,12 @@ void BinaryDict::SerializeToFile(FILE* f + } + + BinaryDictPtr BinaryDict::NewFromFile(FILE* fp) { ++ size_t offsetBound, savedOffset; ++ savedOffset = ftell(fp); ++ fseek(fp, 0L, SEEK_END); ++ offsetBound = ftell(fp) - savedOffset; ++ fseek(fp, savedOffset, SEEK_SET); ++ + BinaryDictPtr dict(new BinaryDict(LexiconPtr(new Lexicon))); + + // Number of items +@@ -109,7 +115,7 @@ BinaryDictPtr BinaryDict::NewFromFile(FI + // Key offset + size_t keyOffset; + unitsRead = fread(&keyOffset, sizeof(size_t), 1, fp); +- if (unitsRead != 1) { ++ if (unitsRead != 1 || keyOffset >= offsetBound) { + throw InvalidFormat("Invalid OpenCC binary dictionary (keyOffset)"); + } + const char* key = dict->keyBuffer.c_str() + keyOffset; +@@ -118,7 +124,7 @@ BinaryDictPtr BinaryDict::NewFromFile(FI + for (size_t j = 0; j < numValues; j++) { + size_t valueOffset; + unitsRead = fread(&valueOffset, sizeof(size_t), 1, fp); +- if (unitsRead != 1) { ++ if (unitsRead != 1 || valueOffset >= offsetBound) { + throw InvalidFormat("Invalid OpenCC binary dictionary (valueOffset)"); + } + const char* value = dict->valueBuffer.c_str() + valueOffset; diff --git a/opencc-fixes-cmake-vars.patch b/opencc-fixes-cmake-vars.patch new file mode 100644 index 0000000..296a784 --- /dev/null +++ b/opencc-fixes-cmake-vars.patch @@ -0,0 +1,30 @@ +commit 01d0b4c88711daf697223be1aee78940f82b983e +Author: Peng Wu +Date: Mon Aug 11 16:22:12 2025 +0800 + + Update for https://fedoraproject.org/wiki/Changes/CMake_drop_install_vars + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index b79e5b5..d5974f1 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -21,6 +21,7 @@ cmake_minimum_required(VERSION 3.5) + set (PACKAGE_NAME opencc) + project (${PACKAGE_NAME} CXX) + include (CTest) ++include(GNUInstallDirs) + + ######## Options + option(BUILD_DOCUMENTATION "Use Doxygen to create the HTML based API documentation" OFF) +@@ -78,6 +79,11 @@ endif() + + ######## Directory + ++set(LIB_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}" CACHE PATH "") ++if(CMAKE_INSTALL_LIBDIR MATCHES "lib64$") ++ set(LIB_SUFFIX 64) ++endif() ++ + set (DIR_PREFIX ${CMAKE_INSTALL_PREFIX}) + set (DIR_INCLUDE ${DIR_PREFIX}/include) + set (DIR_SHARE ${DIR_PREFIX}/share) diff --git a/opencc-fixes-cmake.patch b/opencc-fixes-cmake.patch new file mode 100644 index 0000000..237ac13 --- /dev/null +++ b/opencc-fixes-cmake.patch @@ -0,0 +1,22 @@ +Index: OpenCC-ver.1.1.9/CMakeLists.txt +=================================================================== +--- OpenCC-ver.1.1.9.orig/CMakeLists.txt ++++ OpenCC-ver.1.1.9/CMakeLists.txt +@@ -154,7 +154,7 @@ add_definitions( + + if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + add_definitions( +- -std=c++14 ++ -std=c++17 + -Wall + ) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread") +@@ -163,7 +163,7 @@ if ("${CMAKE_CXX_COMPILER_ID}" MATCHES " + endif () + elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + add_definitions( +- -std=c++14 ++ -std=c++17 + -Wall + ) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread") diff --git a/opencc-fixes-compile.patch b/opencc-fixes-compile.patch new file mode 100644 index 0000000..fe7e4a8 --- /dev/null +++ b/opencc-fixes-compile.patch @@ -0,0 +1,13 @@ +Index: OpenCC-ver.1.1.9/src/SerializedValues.hpp +=================================================================== +--- OpenCC-ver.1.1.9.orig/src/SerializedValues.hpp ++++ OpenCC-ver.1.1.9/src/SerializedValues.hpp +@@ -18,6 +18,8 @@ + + #pragma once + ++#include ++ + #include "Common.hpp" + #include "SerializableDict.hpp" + diff --git a/opencc-fixes-crash.patch b/opencc-fixes-crash.patch new file mode 100644 index 0000000..ab0cd9f --- /dev/null +++ b/opencc-fixes-crash.patch @@ -0,0 +1,44 @@ +commit cfe3ced00bbf764f68f10222b9d2a6367c2c3f82 +Author: Peng Wu +Date: Tue Mar 25 13:43:05 2025 +0800 + + Fix crash when read the config file + +diff --git a/src/Config.cpp b/src/Config.cpp +index a8392b1..5c768c0 100644 +--- a/src/Config.cpp ++++ b/src/Config.cpp +@@ -16,6 +16,7 @@ + * limitations under the License. + */ + ++#include + #include + #include + #include +@@ -216,6 +217,16 @@ std::string GetParentDirectory(const std::string& path) { + return path.substr(0, pos + 1); + } + ++bool isRegularFile(const std::string& path) { ++ struct stat info; ++ ++ if (stat(path.c_str(), &info) != 0) ++ return false; ++ ++ // Check if it's a regular file ++ return (info.st_mode & S_IFMT) == S_IFREG; ++} ++ + } // namespace + + Config::Config() : internal(new ConfigInternal()) {} +@@ -241,6 +252,8 @@ ConverterPtr Config::NewFromFile(const std::string& fileName, + impl->paths.push_back(PACKAGE_DATA_DIRECTORY); + } + std::string prefixedFileName = impl->FindConfigFile(fileName); ++ if (!isRegularFile(prefixedFileName)) ++ throw FileNotFound(prefixedFileName); + std::ifstream ifs(UTF8Util::GetPlatformString(prefixedFileName)); + std::string content(std::istreambuf_iterator(ifs), + (std::istreambuf_iterator())); diff --git a/opencc-fixes-ctest.patch b/opencc-fixes-ctest.patch deleted file mode 100644 index b2bba2b..0000000 --- a/opencc-fixes-ctest.patch +++ /dev/null @@ -1,35 +0,0 @@ -commit e299154d7e43f793e21fbfdb8a7735215f84b2ed -Author: Kan-Ru Chen -Date: Sat Dec 17 19:53:08 2011 +0800 - - Fix `make test' in a clean system - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 8c4cb6d..c52b0f1 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -20,6 +20,7 @@ - cmake_minimum_required(VERSION 2.8) - set (PACKAGE_NAME opencc) - project (${PACKAGE_NAME} C) -+include (CTest) - enable_testing() - - ######## Package information -diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt -index 5eaadf8..31c4e56 100644 ---- a/data/CMakeLists.txt -+++ b/data/CMakeLists.txt -@@ -92,4 +92,10 @@ install( - ${CHINA_DICT_FILES} - DESTINATION - ${DIR_SHARE_OPENCC} --) -\ No newline at end of file -+) -+ -+if (BUILD_TESTING) -+ foreach (DICT ${TAIWAN_DICT_FILES} ${CHINA_DICT_FILES}) -+ configure_file(${DICT} ${PROJECT_BINARY_DIR}/data COPYONLY) -+ endforeach (DICT) -+endif (BUILD_TESTING) diff --git a/opencc.spec b/opencc.spec index dbcfc05..5b031c6 100644 --- a/opencc.spec +++ b/opencc.spec @@ -1,24 +1,37 @@ Name: opencc -Version: 0.3.0 -Release: 1%{?dist} +Version: 1.1.9 +Release: 5%{?dist} Summary: Libraries for Simplified-Traditional Chinese Conversion -License: ASL 2.0 -Group: System Environment/Libraries -URL: http://code.google.com/p/open-chinese-convert/ -Source0: http://open-chinese-convert.googlecode.com/files/%{name}-%{version}.tar.gz -Patch0: opencc-fixes-ctest.patch +License: Apache-2.0 +URL: https://github.com/BYVoid/OpenCC +Source0: https://github.com/BYVoid/OpenCC/archive/ver.%{version}.tar.gz#/OpenCC-ver.%{version}.tar.gz +Patch0: opencc-fixes-compile.patch +Patch1: opencc-fixes-crash.patch +Patch2: opencc-fixes-cmake.patch +Patch3: opencc-fixes-cmake-vars.patch +BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: cmake +BuildRequires: doxygen +BuildRequires: python3 +BuildRequires: marisa-devel +BuildRequires: rapidjson-devel %description OpenCC is a library for converting characters and phrases between Traditional Chinese and Simplified Chinese. +%package doc +Summary: Documentation for OpenCC +Requires: %{name} = %{version}-%{release} + +%description doc +Doxygen generated documentation for OpenCC. + %package tools Summary: Command line tools for OpenCC -Group: Applications/Text Requires: %{name} = %{version}-%{release} %description tools @@ -28,7 +41,6 @@ for building dictionaries. %package devel Summary: Development files for OpenCC -Group: Development/Libraries Requires: %{name} = %{version}-%{release} %description devel @@ -37,48 +49,196 @@ developing applications that use %{name}. %prep -%setup -q -%patch0 -p1 -b .ctest +%autosetup -n OpenCC-ver.%{version} -p1 %build -%cmake . -DENABLE_GETTEXT:BOOL=ON -make VERBOSE=1 %{?_smp_mflags} +%cmake -DENABLE_GETTEXT:BOOL=ON -DBUILD_DOCUMENTATION:BOOL=ON -DUSE_SYSTEM_MARISA:BOOL=ON -DUSE_SYSTEM_RAPIDJSON:BOOL=ON +%cmake_build %install -make install DESTDIR=$RPM_BUILD_ROOT -rm -f $RPM_BUILD_ROOT%{_libdir}/*.a +%cmake_install %check -ctest +%ctest -%find_lang %{name} +#%find_lang %{name} -%post -p /sbin/ldconfig - -%postun -p /sbin/ldconfig - -%files -f %{name}.lang -%defattr(-,root,root,-) -%doc AUTHORS COPYING README +%files +%doc AUTHORS LICENSE README.md %{_libdir}/lib*.so.* %{_datadir}/opencc/ +%exclude %{_datadir}/opencc/doc + +%files doc +%{_datadir}/opencc/doc %files tools -%defattr(-,root,root,-) %{_bindir}/* -%{_datadir}/man/man1/* %files devel -%defattr(-,root,root,-) %{_includedir}/* %{_libdir}/*.so %{_libdir}/pkgconfig/*.pc +%{_libdir}/cmake/opencc/OpenCC*.cmake %changelog +* Thu Aug 21 2025 Peng Wu - 1.1.9-5 +- Update CI tests +- Resolves: RHBZ#2382996 + +* Tue Aug 12 2025 Peng Wu - 1.1.9-4 +- Update for https://fedoraproject.org/wiki/Changes/CMake_drop_install_vars +- Resolves: RHBZ#2381327 + +* Thu Jul 24 2025 Fedora Release Engineering - 1.1.9-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Thu Jul 17 2025 Peng Wu - 1.1.9-2 +- Update for marisa 0.3.0 + +* Thu Feb 6 2025 Peng Wu - 1.1.9-1 +- Update to 1.1.9 +- Resolves: RHBZ#2340967 + +* Fri Jan 17 2025 Fedora Release Engineering - 1.1.7-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Thu Jul 18 2024 Fedora Release Engineering - 1.1.7-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Fri Feb 2 2024 Peng Wu - 1.1.7-1 +- Update to 1.1.7 +- Resolves: RHBZ#2261417 + +* Thu Jan 25 2024 Fedora Release Engineering - 1.1.4-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sun Jan 21 2024 Fedora Release Engineering - 1.1.4-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Thu Jul 20 2023 Fedora Release Engineering - 1.1.4-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Thu May 18 2023 Peng Wu - 1.1.4-3 +- Migrate to SPDX license + +* Thu Jan 19 2023 Fedora Release Engineering - 1.1.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Fri Oct 21 2022 Peng Wu - 1.1.4-1 +- Update to 1.1.4 + +* Fri Jul 22 2022 Fedora Release Engineering - 1.1.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Thu Jan 20 2022 Fedora Release Engineering - 1.1.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Mon Aug 2 2021 Peng Wu - 1.1.2-1 +- Update to 1.1.2 + +* Thu Jul 22 2021 Fedora Release Engineering - 1.1.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Tue Jan 26 2021 Fedora Release Engineering - 1.1.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Tue Aug 4 2020 Peng Wu - 1.1.1-1 +- Update to 1.1.1 + +* Sat Aug 01 2020 Fedora Release Engineering - 1.0.5-8 +- Second attempt - Rebuilt for + https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue Jul 28 2020 Fedora Release Engineering - 1.0.5-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Wed Jan 29 2020 Fedora Release Engineering - 1.0.5-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Jul 25 2019 Fedora Release Engineering - 1.0.5-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Fri Feb 01 2019 Fedora Release Engineering - 1.0.5-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Wed Oct 17 2018 Peng Wu - 1.0.5-3 +- Security fix for CVE-2018-16982 + +* Fri Jul 13 2018 Fedora Release Engineering - 1.0.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Thu Jun 28 2018 Peng Wu - 1.0.5-1 +- Update to 1.0.5 + +* Mon Mar 19 2018 Iryna Shcherbina - 1.0.3-7 +- Update Python 2 dependency declarations to new packaging standards + (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) + +* Thu Feb 08 2018 Fedora Release Engineering - 1.0.3-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Thu Aug 03 2017 Fedora Release Engineering - 1.0.3-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 1.0.3-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Mon May 15 2017 Fedora Release Engineering - 1.0.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_27_Mass_Rebuild + +* Sat Feb 11 2017 Fedora Release Engineering - 1.0.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Tue Feb 16 2016 Peng Wu - 1.0.3-1 +- Update to 1.0.3 + +* Thu Feb 04 2016 Fedora Release Engineering - 1.0.2-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Wed Jun 17 2015 Fedora Release Engineering - 1.0.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Sat May 02 2015 Kalev Lember - 1.0.2-3 +- Rebuilt for GCC 5 C++11 ABI change + +* Mon Jan 19 2015 Peng Wu - 1.0.2-2 +- Fixes postun script + +* Tue Jan 6 2015 Peng Wu - 1.0.2-1 +- Update to 1.0.2 + +* Sun Aug 17 2014 Fedora Release Engineering - 0.4.3-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sat Jun 07 2014 Fedora Release Engineering - 0.4.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Sat Aug 03 2013 Fedora Release Engineering - 0.4.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Tue May 28 2013 Peng Wu - 0.4.3-1 +- Update to 0.4.3 + +* Mon Mar 4 2013 Peng Wu - 0.4.0-1 +- Update to 0.4.0 + +* Thu Feb 14 2013 Fedora Release Engineering - 0.3.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Wed Aug 22 2012 Peng Wu - 0.3.0-4 +- Fixes Download URL + +* Mon Jul 23 2012 Peng Wu - 0.3.0-3 +- Fixes cmake + +* Fri Jul 20 2012 Fedora Release Engineering - 0.3.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + * Thu Feb 02 2012 Peng Wu - 0.3.0-1 - Update to 0.3.0, and fixes ctest -* Tue Feb 1 2012 Peter Robinson - 0.2.0-6 +* Wed Feb 1 2012 Peter Robinson - 0.2.0-6 - Drop unnessary ExclusiveArch directive * Fri Jan 13 2012 Fedora Release Engineering - 0.2.0-5 diff --git a/plans/basic.fmf b/plans/basic.fmf new file mode 100644 index 0000000..c1627f9 --- /dev/null +++ b/plans/basic.fmf @@ -0,0 +1,5 @@ +summary: Basic smoke test +discover: + how: fmf +execute: + how: tmt diff --git a/sources b/sources index cb9e7fb..cf36ac9 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -84462870e5d491da24bb33a5fb494911 opencc-0.3.0.tar.gz +SHA512 (OpenCC-ver.1.1.9.tar.gz) = 713cf00931d7616994eb455eef3bc893096b5cd6d42b346aa1130591752d9612891ea3ed035bd7bd4ec7df1c90425e86375f5b3337fac11663c656c79a8f33e9 diff --git a/tests/main.fmf b/tests/main.fmf new file mode 100644 index 0000000..e1bf8b4 --- /dev/null +++ b/tests/main.fmf @@ -0,0 +1,5 @@ +test: ./runtest.sh +duration: 50m +framework: beakerlib +require: + - opencc-tools diff --git a/tests/runtest.sh b/tests/runtest.sh new file mode 100755 index 0000000..87b6793 --- /dev/null +++ b/tests/runtest.sh @@ -0,0 +1,25 @@ +#!/bin/bash +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +rlJournalStart + rlPhaseStartSetup + rlShowPackageVersion opencc + rlRun -t -l "VERSION=$(rpm -q opencc --queryformat='%{version}')" 0 "Get VERSION" + FEDORA_VERSION=$(rlGetDistroRelease) + rlLog "FEDORA_VERSION=${DISTRO_RELEASE}" + rlRun "tmp=\$(mktemp -d)" 0 "Create tmp directory" + rlRun "pushd $tmp" + rlPhaseEnd + + rlPhaseStartTest + rlRun "set -o pipefail" + rlRun "echo '测试'>input.txt" 0 "Generate input.txt" + rlRun "opencc -i input.txt -o output.txt" 0 "Run opencc tool" + rlRun "grep '測試' output.txt" 0 "Check output.txt" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $tmp" 0 "Remove tmp directory" + rlPhaseEnd +rlJournalEnd