%global libname Newtonsoft.Json
# mono is without any packagable debuginfo
%global debug_package %{nil}
%ifarch ppc64 ppc64le aarch64 armv7hl
# disable the tests for some arches because quite a number of them fail
%bcond_with tests
%else
%bcond_without tests
%endif
%define doc_license %{nil}
%define doc_license 1
%if 0%{?rhel}%{?fedora}
%if 0%{?rhel}
%if 0%{?rhel} < 7
%define doc_license 0
%endif
%else
%if 0%{?fedora} < 19
%define doc_license 0
%endif
%endif
%endif
%define license_files Doc/license.txt
Name: newtonsoft-json
Version: 9.0.1
Release: 8%{?dist}
Summary: Popular high-performance JSON framework
# almost all files are licensed as MIT/X11, but BSD for LinqBridge.cs
# (and LGPLv2.1+ for Tools/7-Zip, not used)
License: MIT and BSD
URL: http://www.newtonsoft.com/json
Source0: https://github.com/JamesNK/%{libname}/archive/%{version}.tar.gz#/%{name}-%{version}.tar.gz
Patch10: %{name}-tests-skip-samples.patch
Patch11: %{name}-nunit.patch
ExclusiveArch: %{mono_arches}
BuildRequires: mono-devel
BuildRequires: nunit2-devel
%description
%{libname} aka Json.NET is a popular high-performance JSON framework
%package devel
Summary: Development files for %{name}
Requires: %{name}%{?_isa} = %{version}-%{release}
%description devel
%{summary}.
%prep
%setup -q -n "%{libname}-%{version}"
#find Src -name \*.cs |xargs sed -i 's,\r\n,\n,'
#find Src -name \*.csproj |xargs sed -i 's,\r\n,\n,'
# E: wrong-script-interpreter
rm README.md
# sign the assembly to get a strong name, https://msdn.microsoft.com/en-us/library/xc31ft41.aspx
sed -i "s#false#true#g; s###g; s##Dynamic.snk#g;" Src/%{libname}/%{libname}.Net40.csproj
sed -i "s##SIGNED;#g" Src/%{libname}/%{libname}.Net40.csproj
sed -i "s#false#true#g; s###g; s##../%{libname}/Dynamic.snk#g;" Src/%{libname}.Tests/%{libname}.Tests.Net40.csproj
sed -i "s##SIGNED;#g" Src/%{libname}.Tests/%{libname}.Tests.Net40.csproj
# fix the public key, for Dynamic.snk
sed -i "s#PublicKey=0024000004800000940000000602000000240000525341310004000001000100f561df277c6c0b497d629032b410cdcf286e537c054724f7ffa0164345f62b3e642029d7a80cc351918955328c4adc8a048823ef90b0cf38ea7db0d729caf2b633c3babe08b0310198c1081995c19029bc675193744eab9d7345b8a67258ec17d112cebdbbb2a281487dceeafb9d83aa930f32103fbe1d2911425bc5744002c7#PublicKey=0024000004800000940000000602000000240000525341310004000001000100cbd8d53b9d7de30f1f1278f636ec462cf9c254991291e66ebb157a885638a517887633b898ccbcf0d5c5ff7be85a6abe9e765d0ac7cd33c68dac67e7e64530e8222101109f154ab14a941c490ac155cd1d4fcba0fabb49016b4ef28593b015cab5937da31172f03f67d09edda404b88a60023f062ae71d0b2e4438b74cc11dc9#g" Src/%{libname}/Properties/AssemblyInfo.cs
%if %{with tests}
# skip files with unmet dependencies (FSharp etc.), FIXME use nuget
%patch10
sed -i /DiscriminatedUnionConverterTests.cs/d "Src/%{libname}.Tests/%{libname}.Tests.Net40.csproj"
sed -i /Serialization.DependencyInjectionTests.cs/d "Src/%{libname}.Tests/%{libname}.Tests.Net40.csproj"
sed -i /Serialization.FSharpTests.cs/d "Src/%{libname}.Tests/%{libname}.Tests.Net40.csproj"
sed -i /Serialization.ImmutableCollectionsTests.cs/d "Src/%{libname}.Tests/%{libname}.Tests.Net40.csproj"
sed -i /TestObjects.Currency.cs/d "Src/%{libname}.Tests/%{libname}.Tests.Net40.csproj"
sed -i /TestObjects.Shape.cs/d "Src/%{libname}.Tests/%{libname}.Tests.Net40.csproj"
sed -i /Schema.JsonSchemaBuilderTests.cs/d "Src/%{libname}.Tests/%{libname}.Tests.Net40.csproj"
sed -i /Schema.JsonSchemaNodeTests.cs/d "Src/%{libname}.Tests/%{libname}.Tests.Net40.csproj"
#FIXME comment tests that fail or have errors
sed -i -r 's,public void Example\(,[Ignore("broken")] \0,' "Src/Newtonsoft.Json.Tests/Documentation/Samples/Linq/DeserializeWithLinq.cs"
sed -i -r 's,public void Example\(,[Ignore("broken")] \0,' "Src/Newtonsoft.Json.Tests/Documentation/Samples/Linq/SerializeWithLinq.cs"
sed -i -r 's,public void MemoryTraceWriterTest\(,[Ignore("broken")] \0,' "Src/Newtonsoft.Json.Tests/Documentation/TraceWriterTests.cs"
sed -i -r 's,public void ExceptionFromOverloadWithJValue\(,[Ignore("broken")] \0,' "Src/Newtonsoft.Json.Tests/Linq/LinqToJsonTest.cs"
sed -i -r 's,public void GenerateSchemaForDirectoryInfo\(,[Ignore("broken")] \0,' "Src/Newtonsoft.Json.Tests/Schema/JsonSchemaGeneratorTests.cs"
sed -i -r 's,public void EmitDefaultValueTest\(,[Ignore("broken")] \0,' "Src/Newtonsoft.Json.Tests/Serialization/DefaultValueHandlingTests.cs"
sed -i -r 's,public void CannotDeserializeArrayIntoLinqToJson\(,[Ignore("broken")] \0,' "Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs"
sed -i -r 's,public void MailMessageConverterTest\(,[Ignore("broken")] \0,' "Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs"
sed -i -r 's,public void MemoryTraceWriterDeserializeTest\(,[Ignore("broken")] \0,' "Src/Newtonsoft.Json.Tests/Serialization/TraceWriterTests.cs"
sed -i -r 's,public void MemoryTraceWriterSerializeTest\(,[Ignore("broken")] \0,' "Src/Newtonsoft.Json.Tests/Serialization/TraceWriterTests.cs"
sed -i -r 's,public void CreateGetWithBadObjectTarget\(,[Ignore("broken")] \0,' "Src/Newtonsoft.Json.Tests/Utilities/DynamicReflectionDelegateFactoryTests.cs"
sed -i -r 's,public void CreateSetWithBadObjectTarget\(,[Ignore("broken")] \0,' "Src/Newtonsoft.Json.Tests/Utilities/DynamicReflectionDelegateFactoryTests.cs"
sed -i -r 's,public void CreateSetWithBadObjectValue\(,[Ignore("broken")] \0,' "Src/Newtonsoft.Json.Tests/Utilities/DynamicReflectionDelegateFactoryTests.cs"
sed -i -r 's,public void CreateGetWithBadObjectTarget\(,[Ignore("broken")] \0,' "Src/Newtonsoft.Json.Tests/Utilities/ExpressionReflectionDelegateFactoryTests.cs"
sed -i -r 's,public void CreateSetWithBadObjectTarget\(,[Ignore("broken")] \0,' "Src/Newtonsoft.Json.Tests/Utilities/ExpressionReflectionDelegateFactoryTests.cs"
sed -i -r 's,public void CreateSetWithBadObjectValue\(,[Ignore("broken")] \0,' "Src/Newtonsoft.Json.Tests/Utilities/ExpressionReflectionDelegateFactoryTests.cs"
sed -i -r 's,public void DefaultConstructor_Abstract\(,[Ignore("broken")] \0,' "Src/Newtonsoft.Json.Tests/Utilities/ExpressionReflectionDelegateFactoryTests.cs"
# make sure that NUnit is properly referenced
%patch11
# we do not have FSharp available
for f in Converters/DiscriminatedUnionConverterTests.cs \
Serialization/FSharpTests.cs \
TestObjects/Currency.cs \
TestObjects/Shape.cs ; do
sed -i "s/using Microsoft\.FSharp.*;//g" "Src/%{libname}.Tests/${f}"
done
# The type `NUnit.Framework.IgnoreAttribute' does not contain a constructor that takes `0' arguments
sed -i 's/\[Ignore\]/[Ignore("Ignore")]/g' "Src/Newtonsoft.Json.Tests/JsonTextReaderTest.cs"
%endif
%build
pushd "Src/%{libname}"
xbuild /p:Configuration=Release "%{libname}.Net40.csproj"
%install
mkdir -p "%{buildroot}/%{_monogacdir}"
gacutil -i "Src/%{libname}/bin/Release/Net40/%{libname}.dll" -package "%{name}" -root "%{buildroot}/usr/lib"
# pkgconfig
mkdir -p "%{buildroot}/%{_libdir}/pkgconfig"
cat <>"%{buildroot}/%{_libdir}/pkgconfig/%{name}.pc"
Name: %{libname}
Description: %{summary}
Version: 9.0.1
Requires: mono
Libs: -r:%{_monodir}/%{name}/%{libname}.dll
Libraries=%{_monodir}/%{name}/%{libname}.dll
EOT
%check
%if 0%{?with tests}
pushd "Src/%{libname}.Tests"
xbuild /p:Configuration=Release "%{libname}.Tests.Net40.csproj"
nunit-console26 -labels bin/Release/Net40/*Tests.dll
#rm -r obj bin
%endif
%files
%if 0%{?doc_license}
%license %{license_files}
%else
%doc %{license_files}
%endif
%doc *.md Doc/readme.txt
%{_monogacdir}/%{libname}
%{_monodir}/%{name}
%files devel
%{_libdir}/pkgconfig/%{name}.pc
%changelog
* Tue Nov 07 2017 Tomasz Tomasik - 9.0.1-8
- Small SPEC file cleanups
- Rebuilt for EL7
* Fri Feb 10 2017 Fedora Release Engineering - 9.0.1-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Sat Nov 19 2016 Timotheus Pokorra - 9.0.1-6
- disable more tests so that it can be built on all arches
* Thu Oct 13 2016 Fedora Release Engineering - 9.0.1-5
- mono rebuild for aarch64 support
* Fri Sep 02 2016 Timotheus Pokorra - 9.0.1-4
- enable tests, disable 17 tests that are failing or produce errors (fixes #1354599)
* Fri Sep 02 2016 Timotheus Pokorra - 9.0.1-3
- fix the Newtonsoft.Json.Tests.dll to build. 17 tests are failing, so not enabling test yet
* Wed Aug 31 2016 Timotheus Pokorra - 9.0.1-2
- build with nunit2 package
* Mon Jul 11 2016 Raphael Groner - 9.0.1-1
- new version
* Fri Mar 25 2016 Raphael Groner - 8.0.3-1
- new version
* Sat Feb 06 2016 Raphael Groner - 8.0.2-1
- new version
* Thu Feb 04 2016 Fedora Release Engineering - 7.0.1-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Thu Dec 17 2015 Raphael Groner - 7.0.1-3
- readd pkgconfig, split into devel subpackage
* Thu Nov 26 2015 Raphael Groner - 7.0.1-2
- fix folders ownership
- remove obsolete generation of pkgconfig file
* Fri Oct 09 2015 Raphael Groner - 7.0.1-1
- initial