diff --git a/.gitignore b/.gitignore
index e49cefa..d0a90d7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-/ugene-1.*.tar.gz
+/ugene-free-*.tar.gz
diff --git a/create-ugene-free-tarball.sh b/create-ugene-free-tarball.sh
new file mode 100644
index 0000000..b07b9af
--- /dev/null
+++ b/create-ugene-free-tarball.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+set -e
+set -x
+
+umask 0022
+
+VERSION=${VERSION:-40.1}
+FEDORA_TAR_VERSION=${VERSION}
+
+REPONAME=ugene
+TARNAME=${REPONAME}
+
+SOURCE_TOP_URL=https://github.com/ugeneunipro/${REPONAME}/archive/
+
+CURRENT_DIR=$(pwd)
+TMPDIR=$(mktemp -d /var/tmp/${REPONAME}-XXXXXX)
+
+
+pushd $TMPDIR
+
+TARBALL_NAME=${TARNAME}-${FEDORA_TAR_VERSION}.tar.gz
+SOURCE_URL=${SOURCE_TOP_URL}/${VERSION}/${TARBALL_NAME}
+
+wget -N ${SOURCE_URL}
+rm -rf ${TARNAME}-${VERSION}
+tar xzf ${TARBALL_NAME}
+
+pushd ${TARNAME}-${VERSION}
+
+echo "Removing nonfree code"
+for NONFREE in \
+ src/plugins_3rdparty/psipred
+do
+ rm -rf $NONFREE
+done
+
+echo "done"
+popd
+
+tar czf ${TARNAME}-free-${FEDORA_TAR_VERSION}.tar.gz ${TARNAME}-${VERSION}/
+mv ${TARNAME}-free-${FEDORA_TAR_VERSION}.tar.gz ${CURRENT_DIR}/
+
+popd
+rm -rf $TMPDIR
+
diff --git a/create-ugene-git-bare-tarball.sh b/create-ugene-git-bare-tarball.sh
new file mode 100644
index 0000000..e1c57aa
--- /dev/null
+++ b/create-ugene-git-bare-tarball.sh
@@ -0,0 +1,49 @@
+#!/bin/bash
+
+set -x
+set -e
+
+REPONAME=ugene
+GITURL=https://github.com/ugeneunipro/${REPONAME}.git
+
+DATE=$(date '+%Y%m%d')
+TIME=$(date '+%H%M')
+
+TARNAME=${REPONAME}-free-${DATE}T${TIME}.tar.gz
+
+PWDDIR=$(pwd)
+TMPDIR=$(mktemp -d $(pwd)/tmp-${REPONAME}-XXXXXX)
+pushd $TMPDIR
+
+git clone --depth 30 --no-single-branch --mirror $GITURL
+
+pushd ${REPONAME}.git
+
+git log 2>&1 | head -n 5 > git-log-orig.txt
+#grep version README.md
+
+# remove non-free part
+for NONFREE in \
+ src/plugins_3rdparty/psipred
+do
+ env FILTER_BRANCH_SQUELCH_WARNING=1 \
+ git filter-branch --index-filter "git rm -r --cached --ignore-unmatch $NONFREE" -- --all
+done
+
+# And again show git head info
+git log 2>&1 | head -n 5
+#grep version README.md
+echo
+
+# Here again show original git head infob
+cat git-log-orig.txt
+echo
+rm -f git-log-orig.txt
+
+popd
+
+tar czf ${TARNAME} ${REPONAME}.git/
+
+cp -p ${TARNAME} $PWDDIR
+popd
+rm -rf $TMPDIR
diff --git a/sources b/sources
index 8440f4a..76e7d22 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (ugene-1.29.0.tar.gz) = 7c4c1e93c6e614cf3e0f71fd82455587815b2c9ab03b0ca86533e97b3d3087c1f9ad8bfa94f73b6487abb5d1afc9578c943cf71f9bce139e5d7dea8568bcc78e
+SHA512 (ugene-free-53.0.tar.gz) = 233c857d9a0ea42005efaa53e5ba5162e76a149f01d7406a73bd9215b96c096b3c379cc3b14c7d7b83c61df5ea2435412f6d43c71aef84b23d1d683d5a172b30
diff --git a/ugene-1.29.0-qt510.patch b/ugene-1.29.0-qt510.patch
deleted file mode 100644
index aff096a..0000000
--- a/ugene-1.29.0-qt510.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff -ur ugene-1.29.0/src/plugins/external_tool_support/src/bowtie2/Bowtie2Settings.ui ugene-1.29.0-qt510/src/plugins/external_tool_support/src/bowtie2/Bowtie2Settings.ui
---- ugene-1.29.0/src/plugins/external_tool_support/src/bowtie2/Bowtie2Settings.ui 2017-12-28 08:12:07.000000000 +0100
-+++ ugene-1.29.0-qt510/src/plugins/external_tool_support/src/bowtie2/Bowtie2Settings.ui 2018-01-02 20:00:20.526488538 +0100
-@@ -254,9 +254,6 @@
-
- Disallow gaps (--gbar)
-
--
--
--
-
-
-
diff --git a/ugene-40.1-libs_3rdparty-breakpad-arch-port.patch b/ugene-40.1-libs_3rdparty-breakpad-arch-port.patch
new file mode 100644
index 0000000..cf06c23
--- /dev/null
+++ b/ugene-40.1-libs_3rdparty-breakpad-arch-port.patch
@@ -0,0 +1,183 @@
+--- ugene-40.1/src/libs_3rdparty/breakpad/src/client/linux/dump_writer_common/thread_info.cc.port 2021-10-11 15:41:23.000000000 +0900
++++ ugene-40.1/src/libs_3rdparty/breakpad/src/client/linux/dump_writer_common/thread_info.cc 2021-11-09 11:04:57.375470034 +0900
+@@ -270,9 +270,19 @@ void ThreadInfo::FillCPUContext(RawConte
+ out->float_save.fir = mcontext.fpc_eir;
+ #endif
+ }
++
++#else
++uintptr_t ThreadInfo::GetInstructionPointer() const {
++ return 0;
++}
++
++void ThreadInfo::FillCPUContext(RawContextCPU* out) const {
++}
++
+ #endif // __mips__
+
+ void ThreadInfo::GetGeneralPurposeRegisters(void** gp_regs, size_t* size) {
++#if defined(__i386) || defined(__x86_64) || defined(__ARM_EABI__) || defined(__aarch64__) || defined(__mips__)
+ assert(gp_regs || size);
+ #if defined(__mips__)
+ if (gp_regs)
+@@ -285,9 +295,11 @@ void ThreadInfo::GetGeneralPurposeRegist
+ if (size)
+ *size = sizeof(regs);
+ #endif
++#endif
+ }
+
+ void ThreadInfo::GetFloatingPointRegisters(void** fp_regs, size_t* size) {
++#if defined(__i386) || defined(__x86_64) || defined(__ARM_EABI__) || defined(__aarch64__) || defined(__mips__)
+ assert(fp_regs || size);
+ #if defined(__mips__)
+ if (fp_regs)
+@@ -300,6 +312,7 @@ void ThreadInfo::GetFloatingPointRegiste
+ if (size)
+ *size = sizeof(fpregs);
+ #endif
++#endif
+ }
+
+ } // namespace google_breakpad
+--- ugene-40.1/src/libs_3rdparty/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc.port 2021-11-09 12:13:14.526068539 +0900
++++ ugene-40.1/src/libs_3rdparty/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc 2021-11-09 12:13:47.079160354 +0900
+@@ -254,6 +254,16 @@ void UContextReader::FillCPUContext(RawC
+ out->float_save.fir = uc->uc_mcontext.fpc_eir; // Unused.
+ #endif
+ }
++
++#else
++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
++ return 0;
++}
++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) {
++ return 0;
++}
++void UContextReader::FillCPUContext(RawContextCPU* out, const ucontext_t* uc) {
++}
+ #endif
+
+ } // namespace google_breakpad
+--- ugene-40.1/src/libs_3rdparty/breakpad/src/client/linux/handler/exception_handler.cc.port 2021-11-09 11:04:57.135469882 +0900
++++ ugene-40.1/src/libs_3rdparty/breakpad/src/client/linux/handler/exception_handler.cc 2021-11-09 12:06:47.875738562 +0900
+@@ -442,6 +442,7 @@ int ExceptionHandler::ThreadEntry(void*
+ // This function runs in a compromised context: see the top of the file.
+ // Runs on the crashing thread.
+ bool ExceptionHandler::HandleSignal(int /*sig*/, siginfo_t* info, void* uc) {
++#if defined(__i386) || defined(__x86_64) || defined(__ARM_EABI__) || defined(__aarch64__) || defined(__mips__)
+ if (filter_ && !filter_(callback_context_))
+ return false;
+
+@@ -483,6 +484,9 @@ bool ExceptionHandler::HandleSignal(int
+ }
+ }
+ return GenerateDump(&g_crash_context_);
++#else
++ return false;
++#endif
+ }
+
+ // This is a public interface to HandleSignal that allows the client to
+@@ -661,6 +665,7 @@ bool ExceptionHandler::WriteMinidump(con
+ __attribute__((optimize("no-omit-frame-pointer")))
+ #endif
+ bool ExceptionHandler::WriteMinidump() {
++#if defined(__i386) || defined(__x86_64) || defined(__ARM_EABI__) || defined(__aarch64__) || defined(__mips__)
+ if (!IsOutOfProcess() && !minidump_descriptor_.IsFD() &&
+ !minidump_descriptor_.IsMicrodumpOnConsole()) {
+ // Update the path of the minidump so that this can be called multiple times
+@@ -735,6 +740,9 @@ bool ExceptionHandler::WriteMinidump() {
+ #endif
+
+ return GenerateDump(&context);
++#else
++ return false;
++#endif
+ }
+
+ void ExceptionHandler::AddMappingInfo(const string& name,
+--- ugene-40.1/src/libs_3rdparty/breakpad/src/client/linux/microdump_writer/microdump_writer.cc.port 2021-10-11 15:41:23.000000000 +0900
++++ ugene-40.1/src/libs_3rdparty/breakpad/src/client/linux/microdump_writer/microdump_writer.cc 2021-11-09 12:20:24.529281407 +0900
+@@ -338,7 +338,7 @@ class MicrodumpWriter {
+ # error "This mips ABI is currently not supported (n32)"
+ #endif
+ #else
+-#error "This code has not been ported to your platform yet"
++ const char kArch[] = "unknown";
+ #endif
+
+ LogAppend("O ");
+@@ -409,11 +409,15 @@ class MicrodumpWriter {
+ void DumpCPUState() {
+ RawContextCPU cpu;
+ my_memset(&cpu, 0, sizeof(RawContextCPU));
++#if !defined(__i386__) && !defined(__x86_64) && !defined(__aarch64__)
++ UContextReader::FillCPUContext(&cpu, ucontext_);
++#else
+ #if !defined(__ARM_EABI__) && !defined(__mips__)
+ UContextReader::FillCPUContext(&cpu, ucontext_, float_state_);
+ #else
+ UContextReader::FillCPUContext(&cpu, ucontext_);
+ #endif
++#endif
+ LogAppend("C ");
+ LogAppend(&cpu, sizeof(cpu));
+ LogCommitLine();
+--- ugene-40.1/src/libs_3rdparty/breakpad/src/client/linux/minidump_writer/linux_dumper.h.port 2021-10-11 15:41:23.000000000 +0900
++++ ugene-40.1/src/libs_3rdparty/breakpad/src/client/linux/minidump_writer/linux_dumper.h 2021-11-09 11:04:57.384470040 +0900
+@@ -63,6 +63,7 @@ namespace google_breakpad {
+ (defined(__mips__) && _MIPS_SIM == _ABIO32)
+ typedef Elf32_auxv_t elf_aux_entry;
+ #elif defined(__x86_64) || defined(__aarch64__) || \
++ defined(__powerpc64__) || defined(__s390x__) || \
+ (defined(__mips__) && _MIPS_SIM != _ABIO32)
+ typedef Elf64_auxv_t elf_aux_entry;
+ #endif
+--- ugene-40.1/src/libs_3rdparty/breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.cc.port 2021-10-11 15:41:23.000000000 +0900
++++ ugene-40.1/src/libs_3rdparty/breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.cc 2021-11-09 11:04:57.384470040 +0900
+@@ -198,6 +198,7 @@ bool LinuxPtraceDumper::ReadRegisters(Th
+ // these members are set to -1. Returns true iff all three members are
+ // available.
+ bool LinuxPtraceDumper::GetThreadInfoByIndex(size_t index, ThreadInfo* info) {
++#if defined(__i386) || defined(__x86_64) || defined(__ARM_EABI__) || defined(__aarch64__) || defined(__mips__)
+ if (index >= threads_.size())
+ return false;
+
+@@ -304,6 +305,9 @@ bool LinuxPtraceDumper::GetThreadInfoByI
+ info->stack_pointer = reinterpret_cast(stack_pointer);
+
+ return true;
++#else
++ return false;
++#endif
+ }
+
+ bool LinuxPtraceDumper::IsPostMortem() const {
+--- ugene-40.1/src/libs_3rdparty/breakpad/src/client/linux/minidump_writer/minidump_writer.cc.port 2021-10-11 15:41:23.000000000 +0900
++++ ugene-40.1/src/libs_3rdparty/breakpad/src/client/linux/minidump_writer/minidump_writer.cc 2021-11-09 12:20:06.954231835 +0900
+@@ -468,11 +468,15 @@ class MinidumpWriter {
+ if (!cpu.Allocate())
+ return false;
+ my_memset(cpu.get(), 0, sizeof(RawContextCPU));
++#if !defined(__i386__) && !defined(__x86_64) && !defined(__aarch64__)
++ UContextReader::FillCPUContext(cpu.get(), ucontext_);
++#else
+ #if !defined(__ARM_EABI__) && !defined(__mips__)
+ UContextReader::FillCPUContext(cpu.get(), ucontext_, float_state_);
+ #else
+ UContextReader::FillCPUContext(cpu.get(), ucontext_);
+ #endif
++#endif
+ thread.thread_context = cpu.location();
+ crashing_thread_context_ = cpu.location();
+ } else {
+@@ -1206,7 +1210,7 @@ class MinidumpWriter {
+ return true;
+ }
+ #else
+-# error "Unsupported CPU"
++ bool WriteCPUInformation(MDRawSystemInfo* sys_info) { return false; }
+ #endif
+
+ bool WriteFile(MDLocationDescriptor* result, const char* filename) {
diff --git a/ugene-40.1-libs_3rdparty-breakpad-unwind-nonsupported-arch.patch b/ugene-40.1-libs_3rdparty-breakpad-unwind-nonsupported-arch.patch
new file mode 100644
index 0000000..10bcf83
--- /dev/null
+++ b/ugene-40.1-libs_3rdparty-breakpad-unwind-nonsupported-arch.patch
@@ -0,0 +1,11 @@
+--- ugene-40.1/src/libs_3rdparty/breakpad/src/client/linux/dump_writer_common/raw_context_cpu.h.unwind 2021-10-11 15:41:23.000000000 +0900
++++ ugene-40.1/src/libs_3rdparty/breakpad/src/client/linux/dump_writer_common/raw_context_cpu.h 2021-11-08 20:15:01.057998601 +0900
+@@ -45,7 +45,7 @@ typedef MDRawContextARM64_Old RawContext
+ #elif defined(__mips__)
+ typedef MDRawContextMIPS RawContextCPU;
+ #else
+-#error "This code has not been ported to your platform yet."
++typedef unsigned long RawContextCPU;
+ #endif
+
+ } // namespace google_breakpad
diff --git a/ugene-40.1-qbswap-bigendian-workaround.patch b/ugene-40.1-qbswap-bigendian-workaround.patch
new file mode 100644
index 0000000..baa1c50
--- /dev/null
+++ b/ugene-40.1-qbswap-bigendian-workaround.patch
@@ -0,0 +1,45 @@
+--- ugene-40.1/src/corelibs/U2Core/src/io/ZlibAdapter.cpp.char_bigen 2021-10-11 15:41:23.000000000 +0900
++++ ugene-40.1/src/corelibs/U2Core/src/io/ZlibAdapter.cpp 2021-11-09 16:41:07.802412220 +0900
+@@ -29,6 +29,12 @@
+
+ #include "LocalFileAdapter.h"
+
++QT_BEGIN_NAMESPACE
++#if defined(Q_BYTE_ORDER) && Q_BYTE_ORDER == Q_BIG_ENDIAN
++template <> inline Q_DECL_CONSTEXPR char qbswap(char source) { return source; }
++#endif
++QT_END_NAMESPACE
++
+ namespace U2 {
+
+ class GzipUtil {
+--- ugene-40.1/src/corelibs/U2Core/src/util/DatatypeSerializeUtils.cpp.char_bigen 2021-10-11 15:41:23.000000000 +0900
++++ ugene-40.1/src/corelibs/U2Core/src/util/DatatypeSerializeUtils.cpp 2021-11-09 14:55:12.703372481 +0900
+@@ -31,6 +31,12 @@
+ #include
+ #include
+
++QT_BEGIN_NAMESPACE
++#if defined(Q_BYTE_ORDER) && Q_BYTE_ORDER == Q_BIG_ENDIAN
++template <> inline Q_DECL_CONSTEXPR char qbswap(char source) { return source; }
++#endif
++QT_END_NAMESPACE
++
+ namespace U2 {
+
+ const QString DNAChromatogramSerializer::ID = "chroma_1.14";
+--- ugene-40.1/src/libs_3rdparty/samtools/src/SamtoolsAdapter.cpp.char_bigen 2021-10-11 15:41:23.000000000 +0900
++++ ugene-40.1/src/libs_3rdparty/samtools/src/SamtoolsAdapter.cpp 2021-11-09 16:40:41.872455587 +0900
+@@ -27,6 +27,12 @@
+ #include
+ #include
+
++QT_BEGIN_NAMESPACE
++#if defined(Q_BYTE_ORDER) && Q_BYTE_ORDER == Q_BIG_ENDIAN
++template <> inline Q_DECL_CONSTEXPR char qbswap(char source) { return source; }
++#endif
++QT_END_NAMESPACE
++
+ extern "C" {
+ #include "samtools_core/htslib/cram/cram_samtools.h"
+ }
diff --git a/ugene-44.x-libs_3rdparty-breakpad-sys_mmap_use_system_mmap.patch b/ugene-44.x-libs_3rdparty-breakpad-sys_mmap_use_system_mmap.patch
new file mode 100644
index 0000000..5497653
--- /dev/null
+++ b/ugene-44.x-libs_3rdparty-breakpad-sys_mmap_use_system_mmap.patch
@@ -0,0 +1,105 @@
+--- ugene-40.1/src/libs_3rdparty/breakpad/src/common/memory_allocator.h.sys_mmap 2021-10-11 15:41:23.000000000 +0900
++++ ugene-40.1/src/libs_3rdparty/breakpad/src/common/memory_allocator.h 2021-11-08 22:21:13.962461668 +0900
+@@ -42,11 +42,14 @@
+ #include
+ #endif
+
+-#ifdef __APPLE__
++#if defined(__APPLE__) || defined(__linux__)
+ #define sys_mmap mmap
+ #define sys_munmap munmap
++#if !defined(__linux__)
+ #define MAP_ANONYMOUS MAP_ANON
+-#else
++#endif
++#endif
++#if ! defined(__APPLE__)
+ #include "third_party/lss/linux_syscall_support.h"
+ #endif
+
+--- ugene-42.x/src/libs_3rdparty/breakpad/src/third_party/lss/linux_syscall_support.h.sys_mmap 2021-10-11 15:41:23.000000000 +0900
++++ ugene-42.x/src/libs_3rdparty/breakpad/src/third_party/lss/linux_syscall_support.h 2021-11-09 00:46:06.363362301 +0900
+@@ -86,10 +86,7 @@
+ * on Linux.
+ * Porting to other related platforms should not be difficult.
+ */
+-#if (defined(__i386__) || defined(__x86_64__) || defined(__ARM_ARCH_3__) || \
+- defined(__mips__) || defined(__PPC__) || defined(__ARM_EABI__) || \
+- defined(__aarch64__) || defined(__s390__) || defined(__e2k__)) \
+- && (defined(__linux) || defined(__ANDROID__))
++#if defined(__linux) || defined(__ANDROID__)
+
+ #ifndef SYS_CPLUSPLUS
+ #ifdef __cplusplus
+@@ -108,15 +105,21 @@ extern "C" {
+ #include
+ #include
+ #include
+-#include
+ #include
+ #include
+ #include
++#include
+ #include
++#include
+ #include
+ #include
++#include
+ #include
+
++#ifndef __linux__
++#ifndef __linux__
++#ifndef __linux__
++
+ #ifdef __mips__
+ /* Include definitions of the ABI currently in use. */
+ #ifdef __ANDROID__
+@@ -4859,6 +4862,48 @@ struct kernel_statfs {
+ #pragma pop_macro("pwrite64")
+ #pragma pop_macro("getdents64")
+
++#endif
++#endif
++#endif
++#ifdef __linux__
++#define sys_open open
++#define sys_close close
++#define sys_lseek lseek
++#define sys_write ::write
++#define sys_read read
++#define sys_pipe pipe
++#define sys_tgkill tgkill
++#define sys_gettid gettid
++#define sys_prctl prctl
++#define sys_clone clone
++#define sys_waitpid waitpid
++#define sys_sigaltstack sigaltstack
++#define sys_getpid getpid
++#define sys_ptrace(a,b,c,d) ptrace((enum __ptrace_request)a,b,c,d)
++#define sys_stat stat
++#define sys_sendmsg sendmsg
++#define sys_getdents getdents64
++#define sys_readlink readlink
++#define sys_fstat fstat
++#define sys_fstat64 fstat64
++#define sys_mmap mmap
++#define sys_munmap munmap
++#define kernel_iovec iovec
++#define kernel_msghdr msghdr
++#define kernel_stat stat
++#define kernel_stat64 stat64
++#define kernel_dirent linux_dirent64
++
++struct linux_dirent64 {
++ ino64_t d_ino; /* 64-bit inode number */
++ off64_t d_off; /* 64-bit offset to next structure */
++ unsigned short d_reclen; /* Size of this dirent */
++ unsigned char d_type; /* File type */
++ char d_name[]; /* Filename (null-terminated) */
++};
++
++#endif
++
+ #if defined(__cplusplus) && !defined(SYS_CPLUSPLUS)
+ }
+ #endif
diff --git a/ugene-47.x-git-plgins-smith_waterman-nonsse2-arch.patch b/ugene-47.x-git-plgins-smith_waterman-nonsse2-arch.patch
new file mode 100644
index 0000000..7ba07ff
--- /dev/null
+++ b/ugene-47.x-git-plgins-smith_waterman-nonsse2-arch.patch
@@ -0,0 +1,30 @@
+--- ugene-40.1/src/plugins/smith_waterman/src/SmithWatermanAlgorithmSSE2.cpp.sse_2 2021-11-11 15:42:19.591500062 +0900
++++ ugene-40.1/src/plugins/smith_waterman/src/SmithWatermanAlgorithmSSE2.cpp 2021-11-11 15:42:26.385496818 +0900
+@@ -23,6 +23,7 @@
+ * MA 02110-1301, USA.
+ */
+
++#if defined(__SSE2__)
+ #include
+ #include
+
+@@ -1214,3 +1215,4 @@
+ }
+
+ } // namespace U2
++#endif
+--- ugene-40.1/src/plugins/smith_waterman/src/SmithWatermanAlgorithmSSE2.h.sse_2 2021-11-11 15:42:19.592500061 +0900
++++ ugene-40.1/src/plugins/smith_waterman/src/SmithWatermanAlgorithmSSE2.h 2021-11-11 15:42:26.385496818 +0900
+@@ -21,6 +21,7 @@
+
+ #pragma once
+
++#if defined(__SSE2__)
+ #include
+
+ #include "SmithWatermanAlgorithm.h"
+@@ -52,3 +53,4 @@
+ };
+
+ } // namespace U2
++#endif
diff --git a/ugene-47.x-plugins_3rdparty-hmm2-nosse-arch.patch b/ugene-47.x-plugins_3rdparty-hmm2-nosse-arch.patch
new file mode 100644
index 0000000..974f41c
--- /dev/null
+++ b/ugene-47.x-plugins_3rdparty-hmm2-nosse-arch.patch
@@ -0,0 +1,36 @@
+--- ugene-40.1/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialogController.cpp.sse 2021-10-11 15:41:23.000000000 +0900
++++ ugene-40.1/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialogController.cpp 2021-11-09 01:34:30.052988784 +0900
+@@ -81,7 +81,9 @@
+ QWidget* w = createController->getWidget();
+ auto l = qobject_cast(layout());
+ l->insertWidget(1, w);
++#if defined (__SSE2__)
+ algoCombo->addItem(tr("SSE optimized"), HMMSearchAlgo_SSEOptimized);
++#endif
+ algoCombo->addItem(tr("Conservative"), HMMSearchAlgo_Conservative);
+
+ okButton = buttonBox->button(QDialogButtonBox::Ok);
+--- ugene-42.0/src/plugins_3rdparty/hmm2/src/u_search/uhmmsearch_sse.cpp.sse 2022-03-09 15:37:14.586340751 +0900
++++ ugene-42.0/src/plugins_3rdparty/hmm2/src/u_search/uhmmsearch_sse.cpp 2022-03-09 15:47:23.559077800 +0900
+@@ -1,4 +1,5 @@
+ #include
++#if defined (__SSE2__)
+ #include
+ #include
+
+@@ -488,3 +489,4 @@ QList sseScoring(unsigned char* d
+
+ return results;
+ }
++#endif
+--- ugene-40.1/src/plugins_3rdparty/hmm2/src/u_search/uhmmsearch_sse.h.sse 2021-10-11 15:41:23.000000000 +0900
++++ ugene-40.1/src/plugins_3rdparty/hmm2/src/u_search/uhmmsearch_sse.h 2021-11-09 01:34:30.052988784 +0900
+@@ -1,6 +1,8 @@
+ #ifndef __HMMSEARCH_SSE_H__
+ #define __HMMSEARCH_SSE_H__
+
++#if defined(__SSE2__)
+ QList sseScoring(unsigned char* dsq, int seqlen, plan7_s* hmm, HMMSeqGranulation* gr, U2::TaskStateInfo& ti);
++#endif
+
+ #endif // __HMMSEARCH_SSE_H__
diff --git a/ugene-49.1-narrowing-for-unsigned-char.patch b/ugene-49.1-narrowing-for-unsigned-char.patch
new file mode 100644
index 0000000..a37bc35
--- /dev/null
+++ b/ugene-49.1-narrowing-for-unsigned-char.patch
@@ -0,0 +1,22 @@
+--- ugene-49.1/src/plugins_3rdparty/ball/src/include/BALL/DATATYPE/hashGrid.h.orig 2023-11-26 02:17:11.000000000 +0900
++++ ugene-49.1/src/plugins_3rdparty/ball/src/include/BALL/DATATYPE/hashGrid.h 2024-01-22 16:42:22.536722206 +0900
+@@ -37,7 +37,7 @@ namespace BALL
+ {
+ namespace __private
+ {
+- extern const char BALL_EXPORT neighbour_table_[27][3];
++ extern const signed char BALL_EXPORT neighbour_table_[27][3];
+ }
+
+ template class HashGrid3;
+--- ugene-49.1/src/plugins_3rdparty/ball/src/source/DATATYPE/hashGrid.cpp.orig 2023-11-26 02:17:11.000000000 +0900
++++ ugene-49.1/src/plugins_3rdparty/ball/src/source/DATATYPE/hashGrid.cpp 2024-01-22 16:42:28.199724474 +0900
+@@ -9,7 +9,7 @@ namespace BALL
+ {
+ namespace __private
+ {
+- const char neighbour_table_[27][3] =
++ const signed char neighbour_table_[27][3] =
+ {
+ { 0, 0, 0 }, { 0, 0, -1 }, { 0, 0, 1 },
+ { 0, -1, -1 }, { 0, -1, 0 }, { 0, -1, 1 },
diff --git a/ugene-50.x-aarch64-neon-impl-not-yet.patch b/ugene-50.x-aarch64-neon-impl-not-yet.patch
new file mode 100644
index 0000000..d21b04b
--- /dev/null
+++ b/ugene-50.x-aarch64-neon-impl-not-yet.patch
@@ -0,0 +1,26 @@
+diff --git a/src/libs_3rdparty/samtools/src/samtools_core/htslib/htscodecs/htscodecs/rANS_static4x16pr.c b/src/libs_3rdparty/samtools/src/samtools_core/htslib/htscodecs/htscodecs/rANS_static4x16pr.c
+index be907d85b..820d43cf0 100644
+--- a/src/libs_3rdparty/samtools/src/samtools_core/htslib/htscodecs/htscodecs/rANS_static4x16pr.c
++++ b/src/libs_3rdparty/samtools/src/samtools_core/htslib/htscodecs/htscodecs/rANS_static4x16pr.c
+@@ -1068,8 +1068,8 @@ unsigned char *(*rans_enc_func(int do_simd, int order))
+ if (do_simd) {
+ if ((rans_cpu & RANS_CPU_ENC_NEON) && have_neon())
+ return order & 1
+- ? rans_compress_O1_32x16_neon
+- : rans_compress_O0_32x16_neon;
++ ? rans_compress_O1_32x16
++ : rans_compress_O0_32x16;
+ else
+ return order & 1
+ ? rans_compress_O1_32x16
+@@ -1091,8 +1091,8 @@ unsigned char *(*rans_dec_func(int do_simd, int order))
+ if (do_simd) {
+ if ((rans_cpu & RANS_CPU_DEC_NEON) && have_neon())
+ return order & 1
+- ? rans_uncompress_O1_32x16_neon
+- : rans_uncompress_O0_32x16_neon;
++ ? rans_uncompress_O1_32x16
++ : rans_uncompress_O0_32x16;
+ else
+ return order & 1
+ ? rans_uncompress_O1_32x16
diff --git a/ugene-52.1.x-RegionSelectorController-overload.patch b/ugene-52.1.x-RegionSelectorController-overload.patch
new file mode 100644
index 0000000..ebc5ad2
--- /dev/null
+++ b/ugene-52.1.x-RegionSelectorController-overload.patch
@@ -0,0 +1,13 @@
+diff --git a/src/corelibs/U2Gui/src/util/RegionSelectorController.cpp b/src/corelibs/U2Gui/src/util/RegionSelectorController.cpp
+index f052b9122..d0fdfeb0d 100644
+--- a/src/corelibs/U2Gui/src/util/RegionSelectorController.cpp
++++ b/src/corelibs/U2Gui/src/util/RegionSelectorController.cpp
+@@ -339,7 +339,7 @@ void RegionSelectorController::connectSlots() {
+
+ connect(gui.startLineEdit, &QLineEdit::textEdited, this, &RegionSelectorController::sl_onRegionChanged);
+ connect(gui.endLineEdit, &QLineEdit::textEdited, this, &RegionSelectorController::sl_onRegionChanged);
+- connect(gui.presetsComboBox, &QComboBox::activated, this, &RegionSelectorController::sl_onPresetChanged);
++ connect(gui.presetsComboBox, QOverload::of(&QComboBox::activated), this, &RegionSelectorController::sl_onPresetChanged);
+
+ if (settings.selection != nullptr) {
+ connect(settings.selection, SIGNAL(si_onSelectionChanged(GSelection*)), SLOT(sl_onSelectionChanged(GSelection*)));
diff --git a/ugene-52.x-s390x-platform-macro.patch b/ugene-52.x-s390x-platform-macro.patch
new file mode 100644
index 0000000..72ca2de
--- /dev/null
+++ b/ugene-52.x-s390x-platform-macro.patch
@@ -0,0 +1,27 @@
+diff --git a/src/libs_3rdparty/qtscript/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h b/src/libs_3rdparty/qtscript/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h
+index a4695a261..ec063f1ee 100644
+--- a/src/libs_3rdparty/qtscript/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h
++++ b/src/libs_3rdparty/qtscript/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h
+@@ -407,6 +407,13 @@
+ #define WTF_CPU_RISCV32 1
+ #endif
+
++/* CPU(IBM z system) */
++#if defined(__s390x__) || defined(__s390__)
++#define WTF_CPU_S390X 1
++#define WTF_CPU_BIG_ENDIAN 1
++#endif
++
++
+ /* ==== OS() - underlying operating system; only to be used for mandated low-level services like
+ virtual memory, not to choose a GUI toolkit ==== */
+
+@@ -960,6 +967,8 @@
+ #if !defined(WTF_USE_JSVALUE64) && !defined(WTF_USE_JSVALUE32) && !defined(WTF_USE_JSVALUE32_64)
+ #if (CPU(X86_64) && !CPU(X32) && (OS(UNIX) || OS(WINDOWS) || OS(SOLARIS) || OS(HPUX))) || (CPU(IA64) && !CPU(IA64_32)) || CPU(ALPHA) || CPU(AIX64) || CPU(SPARC64) || CPU(MIPS64) || CPU(AARCH64) || CPU(RISCV64)
+ #define WTF_USE_JSVALUE64 1
++#elif (CPU(S390X))
++#define WTF_USE_JSVALUE64 1
+ #elif CPU(ARM) || CPU(PPC64) || CPU(RISCV32)
+ #define WTF_USE_JSVALUE32 1
+ #elif OS(WINDOWS) && COMPILER(MINGW)
diff --git a/ugene.spec b/ugene.spec
index 4596958..7390734 100644
--- a/ugene.spec
+++ b/ugene.spec
@@ -1,40 +1,118 @@
-Name: ugene
-Summary: Integrated bioinformatics toolkit
-Version: 1.29.0
-Release: 6%{?dist}
+%global use_release_branch 0
+
+%if 0%{?use_release_branch} < 1
+# master
+%global gitdate 20251211
+%global gitcommit b50ca792f254939978f0ffd3126e3d9ab770a10a
+# New git commit with non-free part removed using "git filter-branch"
+%global gitcommit_free 7e674061492924b3dfbc884c4c9503ecab9887b2
+%else
+# currently 41.0 branch
+%global gitdate 20250313
+%global gitcommit c0dffab5a15e01c026f80cf0a7033b08112a355f
+# New git commit with non-free part using "git filter-branch"
+%global gitcommit_free b0631c54cc0603a88793ed5d6ee02dec196b823e
+%endif
+
+
+%global shortcommit %(c=%{gitcommit}; echo ${c:0:7})
+%global git_version %{gitdate}git%{shortcommit}
+
+%global tarballdate 20251211
+%global tarballtime 2210
+
+%global use_release 1
+%global use_gitbare 0
+
+%if 0%{?use_gitbare} < 1
+# force
+%global use_release 1
+%endif
+
+%if 0%{?use_release} >= 1
+%global GIT true
+%else
+%global GIT git
+%endif
+
+%global mainver 53.0
+%undefine prever
+
+%if 0%{?use_release} >= 1
+%global fedoraver %{mainver}%{?prever:~%{prerpmver}}
+%endif
+%if 0%{?use_gitbare} >= 1
+%global fedoraver %{mainver}%{?git_version:^%{git_version}}
+%endif
+
+
+Name: ugene
+Summary: Integrated bioinformatics toolkit
+
+Version: %{fedoraver}
+Release: 1%{?dist}
+
#The entire source code is GPLv2+ except:
#file src/libs_3rdparty/qtbindings_core/src/qtscriptconcurrent.h which is GPLv2
#files in src/plugins_3rdparty/script_debuger/src/qtscriptdebug/ which are GPLv2
-License: GPLv2+ and GPLv2
-Group: Applications/Engineering
-URL: http://ugene.unipro.ru
-Source0: http://ugene.unipro.ru/downloads/%{name}-%{version}.tar.gz
-# Fix FTBFS with Qt 5.10
-Patch0: ugene-1.29.0-qt510.patch
+# Automatically converted from old format: GPLv2+ and GPLv2 - review is highly recommended.
+License: GPL-2.0-or-later AND GPL-2.0-only
+URL: http://ugene.net
+%if 0%{?use_release} >= 1
+#Source0: https://github.com/ugeneunipro/ugene/archive/%{mainver}.tar.gz/#/%{name}-%{mainver}.tar.gz
+# Removing non-free part
+Source0: %{name}-free-%{mainver}.tar.gz
+# Source0 is created by # env VERSION=%%{mainver} source ./%{SOURCE1}
+%endif
+%if 0%{?use_gitbare} >= 1
+Source0: %{name}-free-%{tarballdate}T%{tarballtime}.tar.gz
+%endif
+Source1: create-ugene-free-tarball.sh
+Source2: create-%{name}-git-bare-tarball.sh
+# This is not installed
+Source10: ugene.wrapper
+Patch1: ugene-49.1-narrowing-for-unsigned-char.patch
+Patch3: ugene-52.1.x-RegionSelectorController-overload.patch
+# Currently distro-specific
+Patch102: ugene-44.x-libs_3rdparty-breakpad-sys_mmap_use_system_mmap.patch
+Patch103: ugene-40.1-libs_3rdparty-breakpad-unwind-nonsupported-arch.patch
+Patch104: ugene-47.x-plugins_3rdparty-hmm2-nosse-arch.patch
+Patch105: ugene-40.1-libs_3rdparty-breakpad-arch-port.patch
+Patch106: ugene-47.x-git-plgins-smith_waterman-nonsse2-arch.patch
+Patch107: ugene-40.1-qbswap-bigendian-workaround.patch
+Patch109: ugene-50.x-aarch64-neon-impl-not-yet.patch
+Patch110: ugene-52.x-s390x-platform-macro.patch
-BuildRequires: desktop-file-utils
-BuildRequires: mesa-libGLU-devel
-BuildRequires: procps-devel
-BuildRequires: qt5-qtbase-devel qt5-qtbase-private-devel
-BuildRequires: qt5-qtbase-mysql
-BuildRequires: qt5-qtmultimedia-devel
-BuildRequires: qt5-qtscript-devel
-BuildRequires: qt5-qtsensors-devel
-BuildRequires: qt5-qtsvg-devel
-BuildRequires: qt5-qttools-devel
-BuildRequires: qt5-qtwebchannel-devel
-BuildRequires: qt5-qtwebkit-devel
-BuildRequires: qt5-qtxmlpatterns-devel
-BuildRequires: zlib-devel
+BuildRequires: make
+BuildRequires: gcc-c++
+BuildRequires: desktop-file-utils
-BuildConflicts: qt-devel
+%if 0%{?use_gitbare} >= 1
+BuildRequires: %{_bindir}/git
+%endif
-#We need strict versions of qt for correct work of src/libs_3rdparty/qtbindings_*
-%{?_qt5:Requires: %{_qt5}%{?_isa} = %{_qt5_version}}
+BuildRequires: cmake(Qt5Core)
+BuildRequires: cmake(Qt5Gui)
+BuildRequires: cmake(Qt5LinguistTools)
+BuildRequires: cmake(Qt5Network)
+BuildRequires: cmake(Qt5NetworkAuth)
+BuildRequires: cmake(Qt5PrintSupport)
+BuildRequires: cmake(Qt5Script)
+BuildRequires: cmake(Qt5ScriptTools)
+BuildRequires: cmake(Qt5Sql)
+BuildRequires: cmake(Qt5Svg)
+BuildRequires: cmake(Qt5Test)
+BuildRequires: cmake(Qt5WebSockets)
+BuildRequires: cmake(Qt5Widgets)
+BuildRequires: cmake(Qt5Xml)
-Provides: bundled(sqlite)
-Provides: bundled(samtools)
-ExclusiveArch: %{ix86} x86_64
+BuildRequires: pkgconfig(gl)
+BuildRequires: pkgconfig(glu)
+BuildRequires: pkgconfig(sqlite3)
+BuildRequires: pkgconfig(xtst)
+BuildRequires: pkgconfig(zlib)
+
+Provides: bundled(samtools) = 0.1.18
%description
Unipro UGENE is a cross-platform visual environment for DNA and protein
@@ -44,42 +122,349 @@ complex analysis of the genomic data. One of the main features of UGENE
is a designer for custom bioinformatics workflows.
%prep
+%if 0%{?use_release} >= 1
%setup -q
-%patch0 -p1 -b .qt510
+%endif
+
+%if 0%{?use_gitbare} >= 1
+%setup -q -c -n %{name}-%{mainver}%{?git_version:-%{git_version}} -T -a 0
+git clone ./%{name}.git/
+cd %{name}
+cp -a [A-Z]* ..
+
+git checkout -b %{mainver}-fedora %{gitcommit_free}
+git config user.name "%{name} Fedora maintainer"
+git config user.email "%{name}-maintainers@fedoraproject.org"
+%endif
+%patch -P1 -p1 -b .narrow
+ %GIT commit -m "Fix narrowing on arch where default char is unsigned" -a
+%patch -P3 -p1 -b .include
+ %GIT commit -m "RegionSelectorController: specify overloaded function" -a
+%patch -P102 -p1 -b .sys_mmap -Z
+ %GIT commit -m "libs_3rdparty/breakpad: use C function instead of directly using syscall assemble code" -a
+%patch -P103 -p1 -b .unwind -Z
+ %GIT commit -m "libs_3rdparty/breakpad: workaround for arch not supporting unwind" -a
+%patch -P104 -p1 -b .sse -Z
+ %GIT commit -m "plugins_3rdparty/hmm2: support architecture not supporting SSE2" -a
+%patch -P105 -p1 -b .port -Z
+ %GIT commit -m "libs_3rdparty/breakpad: workaround for arch not ported by the upstream" -a
+%patch -P106 -p1 -b .sse_2 -Z
+ %GIT commit -m "plugins/smith_waterman: support architecture not supporting SSE2" -a
+%patch -P107 -p1 -b .char_bigen -Z
+ %GIT commit -m "src/corelibs/U2Core et al.: Workaround for Qt qbswap issue on Q_BIG_ENDIAN" -a
+%if 1
+%patch -P109 -p1 -b .neon -Z
+ %GIT commit -m "neon impl not yet available" -a
+%endif
+%patch -P110 -p1 -b .s390x_macro -Z
+ %GIT commit -m "define s390x related macro" -a
+
+# Kill system-provided 3rd-party libs
+sed -i CMakeLists.txt \
+ -e '\@add_subdirectory.*libs_3rdparty/sqlite3@d' \
+ -e '\@add_subdirectory.*libs_3rdparty/zlib@d' \
+ %{nil}
+rm -rf src/libs_3rdparty/{sqlite3,zlib}
+rm -rf src/include/3rdparty/{sqlite3,zlib}
+ %GIT rm -r -f src/libs_3rdparty/{sqlite3,zlib} || true
+ %GIT rm -r -f src/include/3rdparty/{sqlite3,zlib} || true
+ %GIT commit -m "kill system-provided 3rd-party libs" -a
+grep -rl --exclude-dir=.git 3rdparty/zlib/zlib.h . | \
+ xargs sed -i 's|3rdparty/zlib/zlib.h|zlib.h|'
+grep -rl --exclude-dir=.git 3rdparty/sqlite3/sqlite3.h . | \
+ xargs sed -i 's|3rdparty/sqlite3/sqlite3.h|sqlite3.h|'
+find . -name CMakeLists.txt | \
+ xargs sed -i \
+ -e 's|zlib|z|' \
+ -e 's|ugenedb|sqlite3|' \
+ %{nil}
+ %GIT commit -m "fix system provided header path" -a
+
+sed -i.nonfree CMakeLists.txt -e '\@add_subdirectory.*plugins_3rdparty/psipred@d'
+ %GIT commit -m "remove nonfree code" -a
+
+# Remove -Werror
+sed -i CMakeLists.txt -e '\@" -Werror=@d'
+ %GIT commit -m "remove -Werror" -a
+
+# Enable some deprecated API
+sed -i CMakeLists.txt -e '\@QT_DISABLE_DEPRECATED_BEFORE=@s|0x050F00|0x050000|'
+ %GIT commit -m "enable some deprecated API" -a
%build
-%{qmake_qt5} -r \
- INSTALL_BINDIR=%{_bindir} \
- INSTALL_LIBDIR=%{_libdir} \
- INSTALL_DATADIR=%{_datadir} \
- INSTALL_MANDIR=%{_mandir} \
-%if 0%{?_ugene_with_non_free}
- UGENE_WITHOUT_NON_FREE=0 \
-%else
- UGENE_WITHOUT_NON_FREE=1 \
+%if 0%{?use_gitbare} >= 1
+cd %{name}
%endif
- UGENE_EXCLUDE_LIST_ENABLED=1
+export QT_DIR=%{_libdir}/qt5
+export LD_LIBRARY_PATH=$(pwd)/%{_vpath_builddir}/dist
-make %{?_smp_mflags}
+%cmake \
+ -DCMAKE_SKIP_RPATH=TRUE \
+ %{nil}
+%cmake_build
%install
-make install INSTALL_ROOT=%{buildroot}
-desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop
+%if 0%{?use_gitbare} >= 1
+cd %{name}
+%endif
+
+%cmake_install
+
+# Install all files manually...
+# 0. Documents
+cp -a \
+ LICENSE.3rd_party.txt \
+ LICENSE.txt \
+ ..
+
+pushd %_vpath_builddir
+
+# 1-0 bindir
+mkdir -p %{buildroot}%{_bindir}
+install -cpm 0755 %{SOURCE10} %{buildroot}%{_bindir}/%{name}
+
+# 1-1 libraries
+mkdir -p %{buildroot}%{_libdir}/%{name}
+cp -a dist/* %{buildroot}%{_libdir}/%{name}/
+rm -f %{buildroot}%{_libdir}/%{name}/*.a
+
+# Back to the top directory
+popd
+
+# 1-2 data files
+mkdir -p %{buildroot}%{_datadir}/%{name}/
+cp -a data %{buildroot}%{_datadir}/%{name}
+ln -sf ../../../%{_datadir}/%{name}/data %{buildroot}%{_libdir}/%{name}/data
+
+pushd ./etc/shared
+# 1-11 hicolor
+mkdir -p %{buildroot}%{_datadir}/icons/hicolor/32x32/mimetypes/
+cp -p application-x-ugene-ext.png %{buildroot}/%{_datadir}/icons/hicolor/32x32/mimetypes/
+
+# 1-12 mime
+mkdir -p %{buildroot}%{_datadir}/mime/packages
+cp -p application-x-ugene.xml %{buildroot}/%{_datadir}/mime/packages
+
+# 1-13 man file
+mkdir -p %{buildroot}%{_mandir}/man1
+cp -p %{name}.1* %{buildroot}/%{_mandir}/man1
+
+# 1-14 desktop files
+mkdir -p %{buildroot}%{_datadir}/applications/
+cp -p %{name}.desktop %{buildroot}/%{_datadir}/applications/
+
+# 1-15 icons
+mkdir -p %{buildroot}%{_datadir}/pixmaps
+cp -p %{name}.{png,xpm} %{buildroot}%{_datadir}/pixmaps
+popd
+
+%check
+desktop-file-validate %{buildroot}%{_datadir}/applications/%{name}.desktop
%files
-%{!?_licensedir:%global license %%doc}
-%license COPYRIGHT LICENSE.txt LICENSE.3rd_party.txt
-%{_bindir}/*
-%{_libdir}/%{name}/
+%license LICENSE.txt
+%license LICENSE.3rd_party.txt
+
+%{_bindir}/%{name}
+
+%dir %{_libdir}/%{name}/
+%{_libdir}/%{name}/lib*.so
+
+%dir %{_libdir}/%{name}/plugins/
+%{_libdir}/%{name}/plugins/*.license
+%{_libdir}/%{name}/plugins/*.plugin
+%{_libdir}/%{name}/plugins/lib*.so
+
+%{_libdir}/%{name}/transl_*.qm
+
+%{_libdir}/%{name}/%{name}
+%{_libdir}/%{name}/%{name}cl
+%{_libdir}/%{name}/%{name}m
+%{_libdir}/%{name}/%{name}ui
+%{_libdir}/%{name}/plugins_checker
+
+%dir %{_datadir}/%{name}/
+%{_datadir}/%{name}/data/
+%{_libdir}/%{name}/data
+
%{_datadir}/applications/%{name}.desktop
%{_datadir}/pixmaps/ugene.*
-%{_datadir}/icons/hicolor/*/*/*
+%{_datadir}/icons/hicolor/32x32/mimetypes/application-x-ugene-ext.png
+
%{_datadir}/mime/packages/*.xml
-%{_datadir}/%{name}/
-%{_mandir}/man1/*
+%{_mandir}/man1/%{name}.1*
%changelog
+* Sun Nov 30 2025 Mamoru TASAKA - 53.0-1
+- 53.0
+
+* Fri Jul 25 2025 Fedora Release Engineering - 52.1-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
+
+* Fri Jul 18 2025 Mamoru TASAKA - 52.1-2
+- Fix data files symlink
+
+* Thu May 08 2025 Mamoru TASAKA - 52.1-1
+- 52.1
+
+* Fri Jan 24 2025 Mamoru TASAKA - 52.0-1
+- 52.0
+
+* Fri Jan 17 2025 Mamoru TASAKA - 51.0-2
+- Support C23 strict function prototype
+
+* Thu Sep 26 2024 Mamoru TASAKA - 51.0-1
+- 51.0
+
+* Wed Aug 7 2024 Miroslav Suchý - 50.0-3
+- convert license to SPDX
+
+* Sat Jul 20 2024 Fedora Release Engineering - 50.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
+
+* Sun Apr 14 2024 Mamoru TASAKA - 50.0-1
+- 50.0
+
+* Sat Jan 27 2024 Fedora Release Engineering - 49.1-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
+
+* Mon Jan 22 2024 Mamoru TASAKA - 49.1-2
+- Fix -Wnarrowing on non x86(-64) arch detected by gcc14
+
+* Tue Nov 28 2023 Mamoru TASAKA - 49.1-1
+- 49.1
+
+* Thu Nov 9 2023 Mamoru TASAKA - 49.0-1
+- 49.0
+
+* Tue Sep 5 2023 Mamoru TASAKA - 48.1-1
+- 48.1
+
+* Thu Aug 10 2023 Mamoru TASAKA - 48.0-1
+- 48.0
+
+* Sat Jul 22 2023 Mamoru TASAKA - 47.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
+
+* Tue May 23 2023 Mamoru TASAKA - 47.0-1
+- 47.0
+
+* Fri Feb 24 2023 Mamoru TASAKA - 46.0-1
+- 46.0
+
+* Sat Jan 21 2023 Fedora Release Engineering - 45.1-2.1
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
+
+* Wed Jan 18 2023 Mamoru TASAKA - 45.1-2
+- Header file inclusion fix for gcc13
+
+* Sun Jan 1 2023 Mamoru TASAKA - 45.1-1
+- A Happy New Year 45.1 release
+
+* Tue Dec 20 2022 Florian Weimer - 45.0-2
+- Apply upstream patch to fix C99 compatibility issue
+
+* Sun Nov 20 2022 Mamoru TASAKA - 45.0-1
+- 45.0
+
+* Sun Aug 21 2022 Mamoru TASAKA - 44.0-1
+- 44.0
+
+* Sat Jul 23 2022 Fedora Release Engineering - 43.0-2.1
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
+
+* Mon Jun 6 2022 Mamoru TASAKA - 43.0-1
+- 43.0
+
+* Wed Mar 9 2022 Mamoru TASAKA - 42.0-1
+- 42.0
+
+* Sat Jan 22 2022 Fedora Release Engineering - 41.0-1.1
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
+* Sat Dec 4 2021 Mamoru TASAKA - 41.0-1
+- 41.0
+
+* Wed Nov 17 2021 Mamoru TASAKA - 40.1-2
+- Surely remove nonfree code from tarball
+
+* Tue Nov 9 2021 Mamoru TASAKA - 40.1-1
+- 40.1
+
+* Fri Jul 23 2021 Fedora Release Engineering - 34.0-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
+* Wed Jan 27 2021 Fedora Release Engineering - 34.0-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Mon Nov 23 07:55:33 CET 2020 Jan Grulich - 34.0-5
+- rebuild (qt5)
+
+* Sun Oct 18 2020 Jeff Law - 34.0-4
+- Fix missing #includes for gcc-11
+
+* Fri Sep 11 2020 Jan Grulich - 34.0-3
+- rebuild (qt5)
+
+* Wed Jul 29 2020 Fedora Release Engineering - 34.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Wed Apr 15 2020 Rex Dieter - 34.0-1
+- ugene-34.0
+- update Source0 URL
+- no longer uses qt5 private api (yay)
+- use %%check
+
+* Mon Apr 06 2020 Rex Dieter - 33.0-13
+- rebuild (qt5)
+
+* Fri Jan 31 2020 Fedora Release Engineering - 33.0-12
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Mon Dec 09 2019 Jan Grulich - 33.0-11
+- rebuild (qt5)
+
+* Sat Oct 05 2019 Yuliya Algaer - 33.0-10
+- New release
+
+* Wed Sep 25 2019 Jan Grulich - 1.31.1-7
+- rebuild (qt5)
+- workaround FTBFS using -fpermissive (#1736931)
+
+* Sat Jul 27 2019 Fedora Release Engineering - 1.31.1-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
+* Mon Jun 17 2019 Jan Grulich - 1.31.1-5
+- rebuild (qt5)
+
+* Sun Mar 03 2019 Rex Dieter - 1.31.1-4
+- rebuild (qt5)
+
+* Sun Feb 03 2019 Fedora Release Engineering - 1.31.1-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
+* Thu Dec 13 2018 Rex Dieter - 1.31.1-2
+- rebuild (qt5)
+
+* Thu Oct 25 2018 Yuliya Algaer - 1.31.1-1
+- New upstream release
+
+* Fri Aug 24 2018 Yuliya Algaer - 1.31.0-6
+- New upstream release
+
+* Sat Jul 14 2018 Fedora Release Engineering - 1.30.0-25
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
+* Thu Jun 21 2018 Rex Dieter - 1.30.0-24
+- rebuild (qt5)
+
+* Mon Jun 11 2018 Yuliya Algaer - 1.30.0-23
+- New upstream release
+
+* Sun May 27 2018 Rex Dieter - 1.29.0-7
+- rebuild (qt5)
+
* Wed Feb 14 2018 Jan Grulich - 1.29.0-6
- rebuild (qt5)
diff --git a/ugene.wrapper b/ugene.wrapper
new file mode 100644
index 0000000..00f8788
--- /dev/null
+++ b/ugene.wrapper
@@ -0,0 +1,4 @@
+#!/usr/bin/bash
+LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/ugene
+export LD_LIBRARY_PATH
+/usr/lib64/ugene/ugene "$@"