Делимся spec-файлами (Программы, которых нет в репозиториях)

Cent OS, Scientific Linux

Модератор: Модераторы разделов

Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

Делимся spec-файлами

Сообщение alkesta »

Наверняка у многих есть чем поделиться.
Предлагаю в этой теме делится spec-файлами и патчами для интересных программ, которые по тем или иным причинам осуствуют в репозиториях.

В формате:

1. Название
2. Краткое описание программы
3. Ссылка на исходники
4. spec
5. патч (-и) если критичны для сборки.

Замечания исправления привествуются.
Спасибо сказали:
Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

Re: Делимся spec-файлами

Сообщение alkesta »

Fraunhofer FDK AAC Codec Library

Высококачественный open-source AAC-энкодер разработанный Fraunhofer IIS. Оффициальный релиз для Android. Имеет обвязку для ffmpeg ( --enable-libfdk-aac). Лицензия проприетарная - FDK License.


fdk-aac.spec:

Код: Выделить всё

Summary:        Fraunhofer FDK AAC is a high-quality open-source AAC codec library
Name:           fdk-aac
Version:        0.1.4
Release:        9%{?dist}
License:        FDK License
#The license included by Fraunhofer in the FDK source code specifically allows distribution in source or binary forms, but does not license patented technologies described by the source code. It goes on to say that it can only be distributed as authorized by patent licenses [6], which significantly impacts the earlier statement allowing distribution. For this reason, and a limitation on charging for software that includes the library, the license is considered non-free.
URL:            http://sourceforge.net/projects/opencore-amr
Source0:        http://downloads.sourceforge.net/opencore-amr/%{name}-%{version}.tar.gz


%description
The Fraunhofer FDK AAC Codec Library ("FDK AAC Codec") is software that
implements the MPEG Advanced Audio Coding ("AAC") encoding and decoding
scheme for digital audio.


%package        devel
Summary:        Development package for %{name}
Requires:       %{name} = %{version}-%{release}

%description    devel
The %{name}-devel package contains libraries and header files for
developing applications that use %{name}.



%prep
%setup -q


%build
#Explicitly force building in C++98 mode for Version: 0.1.4
export CXXFLAGS="-O2 -march=native -fno-exceptions -fno-rtti -std=c++98"
%configure \
  --disable-silent-rules \
  --disable-static
 # --enable-shared

make %{?_smp_mflags}

%install
make install DESTDIR=$RPM_BUILD_ROOT INSTALL="install -p"
find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'

%post -p /sbin/ldconfig

%postun -p /sbin/ldconfig

%files
%defattr(-,root,root,-)
%doc ChangeLog NOTICE
%{_libdir}/*.so.*

%files devel
%defattr(-,root,root,-)
%doc documentation/*.pdf
%dir %{_includedir}/fdk-aac
%{_includedir}/fdk-aac/*.h
%{_libdir}/*.so
%{_libdir}/pkgconfig/%{name}.pc

%changelog


Nero AAC Codec Pack

Пакет содержит консольные утилиты: качественный энкодер, декодер и утилита для работы с тегами MP4-файла.
Проприетарная лицензия не позволяет распостранение, но позволяет свободное использование в некоммерческих целях.
Утилиты бинарные (без исходников).


Архив с бинарниками: http://ftp6.nero.com/tools/NeroAACCodec-1.5.1.zip

NeroAACCodec.spec:

Код: Выделить всё

Name:           NeroAACCodec
Version:        1.5.1
Release:        1%{?dist}
Summary:        Nero Digital Audio Decoder/Encoder

License:        Nero AG license
URL:            http://www.nero.com/eng/company/about-nero/nero-aac-codec.php
Source0:        http://ftp6.nero.com/tools/%{name}-%{version}.zip

BuildRequires:  unzip
Requires:       glibc(x86-32) libstdc++(x86-32)

%description
Nero AAC Codec, formerly known as the Nero DIgital Audio Decoder/Encoder,
is a reference quality MPEG-4 & 3GPP audio codec.
This package includes the encoder, a decoder and a MP4 tagging utility.

%prep
%setup -q -c

%build

%install
mkdir -p %{buildroot}%{_bindir}/
cp -p linux/neroAac* %{buildroot}%{_bindir}/

%files
%attr(0644, root, root) %doc *.txt NeroAAC_tut.pdf
%attr(0755, root, root) %{_bindir}/neroAac*

%changelog
Спасибо сказали:
Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

Re: Делимся spec-файлами

Сообщение alkesta »

AtomicParlsey

Очень гибкая консольная утилита для чтения/записи метаданных mp4-фалов (m4a, m4b, m4p, m4v и mp4).

Исходники: http://sourceforge.net/projects/atomicpars....0.zip/download

AtomicParsley.spec

Код: Выделить всё

Name:               AtomicParsley
Version:            0.9.0
Release:            1%{?dist}
Summary:            Command-Line Program to Read and Set MP4 Metadata Tags

License:            GPLv2+
URL:                http://atomicparsley.sourceforge.net
Source0:            http://prdownloads.sourceforge.net/atomicparsley/%{name}-source-%{version}.zip
Patch0:             AtomicParsley-0.9.0-fix_bad_math.patch

BuildRequires:      glibc-devel libstdc++-devel
BuildRequires:      unzip

%description
AtomicParsley is a lightweight command line program that can read and set
metadata tags in MPEG-4 files & 3gp assets in 3GPP/3GPP2 files.

%prep
%setup -q -n "%{name}-source-%{version}"
%patch0

%__sed -i '
s/g++/$CXX/g;
s/-g//g;
s/-O2/$OPTFLAGS/g;
' build

%__sed -i '1aset -e' build

%build
CXX="%__cxx" \
OPTFLAGS="%{optflags} -Wall -Wno-deprecated -fno-strict-aliasing" \
./build

%install
%__install -D -m0755 %{name} "%{buildroot}%{_bindir}/%{name}"

%clean
%__rm -rf "%{buildroot}"

%files
%doc COPYING
%doc *.rtf
%{_bindir}/%{name}

%changelog



AtomicParsley-0.9.0-fix_bad_math.patch

Код: Выделить всё

--- AtomicParsley.cpp.orig    2006-09-15 19:22:34.000000000 +0300
+++ AtomicParsley.cpp    2013-08-11 11:32:29.655982772 +0300
@@ -1447,7 +1447,7 @@
     uint32_t atom_offsets = 0;
     char* uuid_outfile = (char*)calloc(1, sizeof(char)*MAXPATHLEN+1); //malloc a new string because it may be a cli arg for a specific output path
     if (output_path == NULL) {
-        char* orig_suffix = strrchr(originating_file, '.');
+        const char* orig_suffix = strrchr(originating_file, '.');
         if (orig_suffix == NULL) {
             fprintf(stdout, "AP warning: a file extension for the input file was not found.\n\tGlobbing onto original filename...\n");
             path_len = strlen(originating_file);
@@ -4030,21 +4030,21 @@
         //+8 so that 'free' can be accommodated; can't write a 'free' atom of length = 5 - min is 8; OR it disappears entirely
         if ( (int)udta_dynamics.max_usable_free_space >= userdata_difference + 8 ||
                userdata_difference <= -8 ||
-                     ( (int)udta_dynamics.max_usable_free_space >= 8 && -8 < userdata_difference < 0 ) ||
+                     ( (int)udta_dynamics.max_usable_free_space >= 8 && -8 < userdata_difference && userdata_difference< 0 ) ||
                      (int)udta_dynamics.max_usable_free_space == userdata_difference) {
             //fprintf(stdout, "Dynamically update possible: change = %i, free = %i\n", userdata_difference , udta_dynamics.max_usable_free_space);
             if (!moov_atom_was_mooved) { //only allow dynamic updating when moov precedes any mdat atoms...
                 udta_dynamics.dynamic_updating = true;
             } else {
                 //if there is insufficient padding when moov is rearranged to precede mdat, add default padding
-                if (pad_prefs.minimum_required_padding_size < udta_dynamics.max_usable_free_space < pad_prefs.default_padding_size) {
+                if (pad_prefs.minimum_required_padding_size < udta_dynamics.max_usable_free_space && udta_dynamics.max_usable_free_space < pad_prefs.default_padding_size) {
                     APar_ForcePadding(pad_prefs.default_padding_size);
                 }
                 APar_DetermineAtomLengths();
                 return;
             }
             //fprintf(stdout, "I'm here %u , %u, %i - %i\n", udta_dynamics.max_usable_free_space, pad_prefs.default_padding_size, udta_dynamics.free_atom_repository, udta_dynamics.free_atom_secondary_repository);
-            if (pad_prefs.minimum_required_padding_size < udta_dynamics.max_usable_free_space < pad_prefs.default_padding_size) {
+            if (pad_prefs.minimum_required_padding_size < udta_dynamics.max_usable_free_space && udta_dynamics.max_usable_free_space < pad_prefs.default_padding_size) {
                 APar_ForcePadding(pad_prefs.default_padding_size);
             }
             if (pad_prefs.minimum_required_padding_size > udta_dynamics.max_usable_free_space) {
@@ -4462,7 +4462,7 @@
 #endif

 void APar_DeriveNewPath(const char *filePath, char* temp_path, int output_type, const char* file_kind, char* forced_suffix, bool random_filename = true) {
-    char* suffix = NULL;
+    const char* suffix = NULL;
     if (forced_suffix == NULL) {
         suffix = strrchr(filePath, '.');
     } else {
@@ -4480,7 +4480,7 @@
         memcpy(temp_path, filePath, base_len);
         memcpy(temp_path + base_len, file_kind, strlen(file_kind));
 #else
-        char* file_name = strrchr(filePath, '/');
+        const char* file_name = strrchr(filePath, '/');
         size_t file_name_len = strlen(file_name);
         memcpy(temp_path, filePath, filepath_len-file_name_len+1);
         memcpy(temp_path + strlen(temp_path), ".", 1);
@@ -5006,7 +5006,7 @@
             free_modified_name = true;
             if (forced_suffix_type == FORCE_M4B_TYPE) { //using --stik Audiobook with --overWrite will change the original file's extension
                 uint16_t filename_len = strlen(m4aFile);
-                char* suffix = strrchr(m4aFile, '.');
+                const char* suffix = strrchr(m4aFile, '.');
                 memcpy(originating_file, m4aFile, filename_len+1 );
                 memcpy(originating_file + (filename_len - strlen(suffix) ), ".m4b", 5 );
             }
Спасибо сказали:
Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

Re: Делимся spec-файлами

Сообщение alkesta »

HandBrake

Отличный конвертер с графическим интерфейсом (имеет также интерфейс командной строки). Недавно появилась русская локализация графического интерфейса.

Скрипт получения исходников handbrake-snapshot.sh

Код: Выделить всё

#!/bin/bash

set -e

tmp=$(mktemp -d)

trap cleanup EXIT
cleanup() {
    set +e
    [ -z "$tmp" -o ! -d "$tmp" ] || rm -rf "$tmp"
}

unset CDPATH
pwd=$(pwd)
svn=$(date +%Y%m%d)

cd "$tmp"
svn co svn://svn.handbrake.fr/HandBrake/trunk HandBrake-$svn
revision=$(svnversion HandBrake-$svn)
tar Jcf "$pwd"/HandBrake-$svn.tar.xz HandBrake-$svn
cd - >/dev/null


HandBrake.spec

Код: Выделить всё

%global svndate 20130813
%global    svnrev 5675

Name:           HandBrake
Version:        0.9.9
Release:        1.%{svndate}svn%{?dist}
Summary:        A program to transcode DVDs and other sources to MPEG-4 and MKV

License:        GPLv2+
URL:            http://handbrake.fr/
Source0:        HandBrake-%{svndate}.tar.xz
Source1:        handbrake-snapshot.sh

BuildRequires:  intltool libtool
BuildRequires:  yasm
BuildRequires:  zlib-devel
BuildRequires:  bzip2-devel
BuildRequires:  fribidi-devel
# GUI Requirements
BuildRequires:  gtk3-devel
BuildRequires:  webkitgtk3-devel
BuildRequires:  dbus-glib-devel
BuildRequires:  libgudev1-devel
BuildRequires:  libnotify-devel
BuildRequires:  gstreamer1-devel
BuildRequires:  gstreamer1-plugins-base-devel
# Required for upcoming 0.9.9
BuildRequires:  libass-devel
BuildRequires:  libsamplerate-devel
BuildRequires:  libvorbis-devel
BuildRequires:  libtheora-devel

Requires:       hicolor-icon-theme

%description
HandBrake is an open-source, GPL-licensed, multiplatform, multithreaded video
transcoder, available for MacOS X, Linux and Windows.

%package gui
Summary:    A program to transcode DVDs and other sources to MPEG-4 and MKV
Group:        Applications/Multimedia
Provides:    %{name}-gtk = %{version}-%{release}
Obsoletes:    %{name}-gtk < %{version}-%{release}
Requires:    libdvdcss

%description gui
HandBrake is an open-source, GPL-licensed, multi-platform, multi-threaded
transcoder, available for MacOS X, Linux and Windows.

This is the GTK GUI (graphical user interface) version of HandBrake.


%package cli
Summary:    A program to transcode DVDs and other sources to MPEG-4 and MKV
Group:        Applications/Multimedia
Provides:    %{name} = %{version}-%{release}
Obsoletes:    %{name} < %{version}-%{release}
Requires:    libdvdcss

%description cli
HandBrake is an open-source, GPL-licensed, multi-platform, multi-threaded
transcoder, available for MacOS X, Linux and Windows.

This is the CLI (command line interface) version of HandBrake.

%prep
%setup -q -n %{name}-%{svndate}

%build
export CFLAGS="%{optflags}"
export CXXFLAGS="%{optflags}"
export LDFLAGS="%{optflags}"
./configure --launch

pushd build
make %{?_smp_mflags}

%install
mkdir _docs
iconv -f ISO-8859-1 -t UTF-8 CREDITS > _docs/CREDITS
iconv -f ISO-8859-1 -t UTF-8 THANKS > _docs/THANKS
cat > build/GNUmakefile.custom.defs <<EOF
CONF.args = --prefix=%{buildroot}%{_prefix}
PREFIX    = %{buildroot}%{_prefix}
PREFIX/   = %{buildroot}%{_prefix}/
EOF
make -C build install-strip
rm -f %{buildroot}%{_datadir}/icons/hicolor/icon-theme.cache
install -D -m 0644 gtk/src/hb-icon.16.png \
    %{buildroot}%{_datadir}/icons/hicolor/16x16/apps/hb-icon.png
install -D -m 0644 gtk/src/hb-icon.22.png \
    %{buildroot}%{_datadir}/icons/hicolor/22x22/apps/hb-icon.png
install -D -m 0644 gtk/src/hb-icon.24.png \
    %{buildroot}%{_datadir}/icons/hicolor/24x24/apps/hb-icon.png
install -D -m 0644 gtk/src/hb-icon.32.png \
    %{buildroot}%{_datadir}/icons/hicolor/32x32/apps/hb-icon.png
install -D -m 0644 gtk/src/hb-icon.48.png \
    %{buildroot}%{_datadir}/icons/hicolor/48x48/apps/hb-icon.png
install -D -m 0644 gtk/src/hb-icon.64.png \
    %{buildroot}%{_datadir}/icons/hicolor/64x64/apps/hb-icon.png
install -D -m 0644 gtk/src/hb-icon.128.png \
    %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/hb-icon.png
install -D -m 0644 gtk/src/hb-icon.256.png \
    %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/hb-icon.png
install -D -m 0644 gtk/src/hb-icon.512.png \
    %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/hb-icon.png
%find_lang ghb

%clean
rm -rf %{buildroot}

%post
/bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null || :
/usr/bin/update-desktop-database &> /dev/null || :

%postun
if [ $1 -eq 0 ] ; then
    /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null
    /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
fi
/usr/bin/update-desktop-database &> /dev/null || :

%files gui -f ghb.lang
%doc AUTHORS COPYING _docs/CREDITS NEWS _docs/THANKS TRANSLATIONS
%{_bindir}/ghb
%{_datadir}/applications/ghb.desktop
%{_datadir}/icons/hicolor/*/apps/hb-icon.png

%files cli
%doc AUTHORS COPYING _docs/CREDITS NEWS _docs/THANKS TRANSLATIONS
%{_bindir}/HandBrakeCLI

%changelog
Спасибо сказали:
Аватара пользователя
Vascom
Сообщения: 1699
ОС: Fedora 32

Re: Делимся spec-файлами

Сообщение Vascom »

Несколько замечаний:
1. Лучше не использовать макросы и переменные одновременно. Например вместо $RPM_BUILD_ROOT лучше использовать %{buildroot}.
2. В секции %install можно удалить rm -rf $RPM_BUILD_ROOT, это делается автоматом.
3. Секцию %clean тоже можно удалить.
4. В секции %files не надо использовать %defattr.
5. Вместо

Код: Выделить всё

export CFLAGS="%{optflags}"
export CXXFLAGS="%{optflags}"
export LDFLAGS="%{optflags}"
./configure

надо использовать макрос %configure
Спасибо сказали:
Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

Re: Делимся spec-файлами

Сообщение alkesta »

Vascom писал(а):
28.08.2013 16:24
Вместо

Код: Выделить всё

export CFLAGS="%{optflags}"
export CXXFLAGS="%{optflags}"
export LDFLAGS="%{optflags}"
./configure

надо использовать макрос %configure

Как именно? Простая замена не проходит:

Код: Выделить всё

configure.py: error: no such option: --host
Спасибо сказали:
Аватара пользователя
Vascom
Сообщения: 1699
ОС: Fedora 32

Re: Делимся spec-файлами

Сообщение Vascom »

Разве там по запуску ./configure запускается configure.py?
Спасибо сказали: