%global soversion 0 Name: diff-match-patch %global srcname %(n=%{name}; echo ${n//-/_}) Version: 20121119 Release: 1%{?dist} Summary: Robust algorithms to perform the operations for synchronizing plain text License: ASL 2.0 URL: https://code.google.com/p/google-diff-match-patch/ Source0: https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/google-diff-match-patch/diff_match_patch_%{version}.zip BuildRequires: gcc-c++ BuildRequires: cmake BuildRequires: make BuildRequires: cmake(Qt5Core) %global _description \ The Diff Match and Patch libraries offer robust algorithms to perform\ the operations required for synchronizing plain text. %description %{_description} %package devel Summary: Development files for %{name} Requires: %{name}%{?_isa} = %{?epoch:%{epoch}}%{version}-%{release} %description devel %{summary}. %package -n js-%{name} Summary: %{summary} BuildArch: noarch BuildRequires: web-assets-devel # To minify BuildRequires: closure-compiler Requires: web-assets-filesystem %description -n js-%{name} %{_description} JavaScript version. %package -n python2-%{name} Summary: %{summary} %{?python_provide:%python_provide python2-%{name}} BuildArch: noarch BuildRequires: python2-devel BuildRequires: python2-setuptools %description -n python2-%{name} %{_description} Python 2 version. %package -n python3-%{name} Summary: %{summary} %{?python_provide:%python_provide python3-%{name}} BuildArch: noarch BuildRequires: python3-devel BuildRequires: python3-setuptools %description -n python3-%{name} %{_description} Python 3 version. %prep %autosetup -n %{srcname}_%{version} mkdir cpp/%{_target_platform}/ sed -i -e "s|toAscii(|toLatin1(|g" cpp/*.cpp cat > cpp/CMakeLists.txt << EOF cmake_minimum_required(VERSION 2.8.5) project(%{name} CXX) include(GNUInstallDirs) find_package(Qt5Core REQUIRED) add_library(%{srcname} %{srcname}.cpp) target_link_libraries(%{srcname} Qt5::Core) set_target_properties(%{srcname} PROPERTIES VERSION %{soversion}.%{version} SOVERSION %{soversion} PUBLIC_HEADER %{srcname}.h) install(TARGETS %{srcname} PUBLIC_HEADER DESTINATION \${CMAKE_INSTALL_INCLUDEDIR} RUNTIME DESTINATION \${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION \${CMAKE_INSTALL_LIBDIR}) enable_testing() add_executable(%{srcname}_test %{srcname}_test.cpp) target_link_libraries(%{srcname}_test %{srcname} Qt5::Core) add_test(%{name}-test %{srcname}_test) EOF mkdir python cat > python/setup.py << EOF from setuptools import setup ARGS = dict( name="%{name}", version="%{version}", description="The Diff Match and Patch libraries offer robust algorithms " "to perform the operations required for synchronizing plain " "text.", url="%{url}", author="Neil Fraser", author_email="fraser@google.com", license="Apache-2.0", classifiers=[ "Development Status :: 6 - Mature" "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.4", "Programming Language :: Python :: 2.5", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.0", "Programming Language :: Python :: 3.1", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Topic :: Text Processing", ], keywords="diff match patch", packages=["%{srcname}"], test_suite="%{srcname}.%{srcname}_test", ) if __name__ == "__main__": setup(**ARGS) EOF for d in python{2,3}; do pushd $d mkdir %{srcname} mv *.py %{srcname}/ ln -s ../python/setup.py popd done pushd javascript mv %{srcname}_uncompressed.js %{srcname}.js sed -i -e "s|%{srcname}\.js|%{srcname}.min.js|g" %{srcname}_test.html sed -i -e "s|%{srcname}_uncompressed\.js|%{srcname}.js|g" %{srcname}_test.html sed -r -i -e 's|src="(%{srcname}(\.min)?\.js)"|src="%{_jsdir}/\1"|' %{srcname}_test.html popd sed -i -e 's|\.\./javascript|%{_jsdir}|' demos/*.html %build pushd cpp/%{_target_platform}/ %cmake .. popd %make_build -C cpp/%{_target_platform}/ pushd python2 %py2_build popd pushd python3 %py3_build popd closure-compiler --js javascript/%{srcname}.js --js_output_file javascript/%{srcname}.min.js %install %make_install -C cpp/%{_target_platform}/ pushd python2 %py2_install popd pushd python3 %py3_install popd for f in %{srcname}.js %{srcname}.min.js; do install -Dpm0644 javascript/$f %{buildroot}%{_jsdir}/$f done %check make test -C cpp/%{_target_platform}/ ARGS="-V" pushd python2 %{__python2} setup.py test popd pushd python3 %{__python3} setup.py test popd %files %license COPYING %{_libdir}/lib%{srcname}.so.* %files devel %{_includedir}/%{srcname}.h %{_libdir}/lib%{srcname}.so %files -n js-%{name} %license COPYING %doc javascript/%{srcname}_test.{js,html} %doc demos %{_jsdir}/%{srcname}.js %{_jsdir}/%{srcname}.min.js %files -n python2-%{name} %license COPYING %{python2_sitelib}/%{srcname}-*.egg-info/ %{python2_sitelib}/%{srcname}/ %files -n python3-%{name} %license COPYING %{python3_sitelib}/%{srcname}-*.egg-info/ %{python3_sitelib}/%{srcname}/ %changelog * Sat Aug 27 2016 Igor Gnatenko - 20121119-1 - Initial package