aboutsummaryrefslogtreecommitdiff
path: root/multimedia/olive
diff options
context:
space:
mode:
authorBloyburt <alexpen@startmail.com>2022-08-25 22:45:40 +0100
committerWilly Sudiarto Raharjo <willysr@slackbuilds.org>2022-08-27 22:50:31 +0700
commitf388a2c15495b01541701aa227db0055f66adc77 (patch)
tree5c509ecb87a4f81e7fdd84aa8d0d0f0c70ec7191 /multimedia/olive
parentc45fa88c8cafd49585f68d2df067a7dc453de6fe (diff)
multimedia/olive: Added (Olive Video Editor)
Signed-off-by: Dave Woodfall <dave@slackbuilds.org> Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
Diffstat (limited to 'multimedia/olive')
-rw-r--r--multimedia/olive/README19
-rw-r--r--multimedia/olive/doinst.sh14
-rw-r--r--multimedia/olive/olive-0.1.2-FlowLayout.patch12
-rw-r--r--multimedia/olive/olive-0.1.2-QFontMetrics.patch121
-rw-r--r--multimedia/olive/olive-0.1.2-QPainterPath.patch44
-rw-r--r--multimedia/olive/olive-0.1.2-QWheelEvent.patch21
-rw-r--r--multimedia/olive/olive-0.1.2-appdata-desktop.patch24
-rw-r--r--multimedia/olive/olive-0.1.2-cacher.patch24
-rw-r--r--multimedia/olive/olive-0.1.2-clickablelabel.patch14
-rw-r--r--multimedia/olive/olive-0.1.2-proxygenerator.patch18
-rw-r--r--multimedia/olive/olive.SlackBuild109
-rw-r--r--multimedia/olive/olive.info10
-rw-r--r--multimedia/olive/slack-desc19
13 files changed, 449 insertions, 0 deletions
diff --git a/multimedia/olive/README b/multimedia/olive/README
new file mode 100644
index 000000000000..ef98d61e26a2
--- /dev/null
+++ b/multimedia/olive/README
@@ -0,0 +1,19 @@
+Olive is a cross-platform video editing application licensed under
+the GNU GPL version 3. The plan of the development team is to combine
+complete colour managment, a fast and high-fidelity float-based
+render pipeline, node-based compositing and audio-mixing, and a
+highly efficient automated disk cache all together in one program.
+
+It should be noted that Olive is still in the early alpha stages of
+development, and thus should not be used for serious projects; if you
+do choose to use Olive for any serious projects, frequent backups of
+said projects are highly recommended.
+
+This SlackBuild packages an older version of Olive (0.1.2), which is
+the latest stable version as of this writing.
+
+The patches in this SlackBuild were originally written by Tércio
+Martins for Arch's Olive AUR, and have been graciously re-used here
+with his permission.
+
+Homepage: https://olivevideoeditor.org/
diff --git a/multimedia/olive/doinst.sh b/multimedia/olive/doinst.sh
new file mode 100644
index 000000000000..262eb5a9e5eb
--- /dev/null
+++ b/multimedia/olive/doinst.sh
@@ -0,0 +1,14 @@
+if [ -x /usr/bin/update-desktop-database ]; then
+ /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1
+fi
+
+if [ -x /usr/bin/update-mime-database ]; then
+ /usr/bin/update-mime-database usr/share/mime >/dev/null 2>&1
+fi
+
+# If other icon themes are installed, then add to/modify this as needed
+if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then
+ if [ -x /usr/bin/gtk-update-icon-cache ]; then
+ /usr/bin/gtk-update-icon-cache -f usr/share/icons/hicolor >/dev/null 2>&1
+ fi
+fi
diff --git a/multimedia/olive/olive-0.1.2-FlowLayout.patch b/multimedia/olive/olive-0.1.2-FlowLayout.patch
new file mode 100644
index 000000000000..cde40310e93e
--- /dev/null
+++ b/multimedia/olive/olive-0.1.2-FlowLayout.patch
@@ -0,0 +1,12 @@
+diff --unified --recursive --text olive-0.1.2-orig/ui/flowlayout.cpp olive-0.1.2-new/ui/flowlayout.cpp
+--- olive-0.1.2-orig/ui/flowlayout.cpp 2019-11-11 03:05:02.000000000 -0300
++++ olive-0.1.2-new/ui/flowlayout.cpp 2020-06-23 18:29:57.338203268 -0300
+@@ -114,7 +114,7 @@
+
+ Qt::Orientations FlowLayout::expandingDirections() const
+ {
+- return 0;
++ return { };
+ }
+
+ bool FlowLayout::hasHeightForWidth() const
diff --git a/multimedia/olive/olive-0.1.2-QFontMetrics.patch b/multimedia/olive/olive-0.1.2-QFontMetrics.patch
new file mode 100644
index 000000000000..3731aad17b6d
--- /dev/null
+++ b/multimedia/olive/olive-0.1.2-QFontMetrics.patch
@@ -0,0 +1,121 @@
+diff --unified --recursive --text olive-0.1.2-orig/effects/internal/texteffect.cpp olive-0.1.2-new/effects/internal/texteffect.cpp
+--- olive-0.1.2-orig/effects/internal/texteffect.cpp 2019-11-11 03:05:02.000000000 -0300
++++ olive-0.1.2-new/effects/internal/texteffect.cpp 2020-06-23 17:41:00.714422192 -0300
+@@ -183,11 +183,11 @@
+ if (word_wrap_field->GetBoolAt(timecode)) {
+ for (int i=0;i<lines.size();i++) {
+ QString s(lines.at(i));
+- if (fm.width(s) > width) {
++ if (fm.horizontalAdvance(s) > width) {
+ int last_space_index = 0;
+ for (int j=0;j<s.length();j++) {
+ if (s.at(j) == ' ') {
+- if (fm.width(s.left(j)) > width) {
++ if (fm.horizontalAdvance(s.left(j)) > width) {
+ break;
+ } else {
+ last_space_index = j;
+@@ -211,11 +211,11 @@
+
+ switch (halign_field->GetValueAt(timecode).toInt()) {
+ case Qt::AlignLeft: text_x = 0; break;
+- case Qt::AlignRight: text_x = width - fm.width(lines.at(i)); break;
++ case Qt::AlignRight: text_x = width - fm.horizontalAdvance(lines.at(i)); break;
+ case Qt::AlignJustify:
+ // add spaces until the string is too big
+ text_x = 0;
+- while (fm.width(lines.at(i)) < width) {
++ while (fm.horizontalAdvance(lines.at(i)) < width) {
+ bool space = false;
+ QString spaced(lines.at(i));
+ for (int i=0;i<spaced.length();i++) {
+@@ -228,7 +228,7 @@
+ while (i < spaced.length() && spaced.at(i) == ' ') i++;
+ }
+ }
+- if (fm.width(spaced) > width || !space) {
++ if (fm.horizontalAdvance(spaced) > width || !space) {
+ break;
+ } else {
+ lines[i] = spaced;
+@@ -237,7 +237,7 @@
+ break;
+ case Qt::AlignHCenter:
+ default:
+- text_x = (width/2) - (fm.width(lines.at(i))/2);
++ text_x = (width/2) - (fm.horizontalAdvance(lines.at(i))/2);
+ break;
+ }
+
+diff --unified --recursive --text olive-0.1.2-orig/effects/internal/timecodeeffect.cpp olive-0.1.2-new/effects/internal/timecodeeffect.cpp
+--- olive-0.1.2-orig/effects/internal/timecodeeffect.cpp 2019-11-11 03:05:02.000000000 -0300
++++ olive-0.1.2-new/effects/internal/timecodeeffect.cpp 2020-06-23 17:41:51.815020590 -0300
+@@ -117,7 +117,7 @@
+
+ int text_x, text_y, rect_y, offset_x, offset_y;
+ int text_height = fm.height();
+- int text_width = fm.width(display_timecode);
++ int text_width = fm.horizontalAdvance(display_timecode);
+ QColor background_color = color_bg_val->GetColorAt(timecode);
+ int alpha_val = qCeil(bg_alpha->GetDoubleAt(timecode)*2.55);
+ background_color.setAlpha(alpha_val);
+diff --unified --recursive --text olive-0.1.2-orig/ui/graphview.cpp olive-0.1.2-new/ui/graphview.cpp
+--- olive-0.1.2-orig/ui/graphview.cpp 2019-11-11 03:05:02.000000000 -0300
++++ olive-0.1.2-new/ui/graphview.cpp 2020-06-23 17:38:31.572539882 -0300
+@@ -175,7 +175,7 @@
+ void GraphView::draw_line_text(QPainter &p, bool vert, int line_no, int line_pos, int next_line_pos) {
+ // draws last line's text
+ QString str = QString::number(line_no*kGraphSize);
+- int text_sz = vert ? fontMetrics().height() : fontMetrics().width(str);
++ int text_sz = vert ? fontMetrics().height() : fontMetrics().horizontalAdvance(str);
+ if (text_sz < (next_line_pos - line_pos)) {
+ QRect text_rect = vert ? QRect(0, line_pos-50, 50, 50) : QRect(line_pos, height()-50, 50, 50);
+ p.drawText(text_rect, Qt::AlignBottom | Qt::AlignLeft, str);
+diff --unified --recursive --text olive-0.1.2-orig/ui/sourceiconview.cpp olive-0.1.2-new/ui/sourceiconview.cpp
+--- olive-0.1.2-orig/ui/sourceiconview.cpp 2019-11-11 03:05:02.000000000 -0300
++++ olive-0.1.2-new/ui/sourceiconview.cpp 2020-06-23 17:42:48.155657141 -0300
+@@ -140,7 +140,7 @@
+ painter->setPen(text_fgcolor);
+
+ QString duration_str = index.data(Qt::UserRole).toString();
+- int timecode_width = fm.width(duration_str);
++ int timecode_width = fm.horizontalAdvance(duration_str);
+ int max_name_width = option.rect.width();
+
+ if (timecode_width < option.rect.width() / 2) {
+diff --unified --recursive --text olive-0.1.2-orig/ui/timelineheader.cpp olive-0.1.2-new/ui/timelineheader.cpp
+--- olive-0.1.2-orig/ui/timelineheader.cpp 2019-11-11 03:05:02.000000000 -0300
++++ olive-0.1.2-new/ui/timelineheader.cpp 2020-06-23 17:43:45.496282517 -0300
+@@ -390,7 +390,7 @@
+ bool draw_text = false;
+ if (text_enabled && lineX-textWidth > lastTextBoundary) {
+ timecode = frame_to_timecode(frame + in_visible, olive::CurrentConfig.timecode_view, viewer->seq->frame_rate);
+- fullTextWidth = fm.width(timecode);
++ fullTextWidth = fm.horizontalAdvance(timecode);
+ textWidth = fullTextWidth>>1;
+
+ text_x = lineX;
+diff --unified --recursive --text olive-0.1.2-orig/ui/timelinewidget.cpp olive-0.1.2-new/ui/timelinewidget.cpp
+--- olive-0.1.2-orig/ui/timelinewidget.cpp 2019-11-11 03:05:02.000000000 -0300
++++ olive-0.1.2-new/ui/timelinewidget.cpp 2020-06-23 17:39:05.582988929 -0300
+@@ -3162,7 +3162,7 @@
+ }
+ if (clip->linked.size() > 0) {
+ int underline_y = olive::timeline::kClipTextPadding + p.fontMetrics().height() + clip_rect.top();
+- int underline_width = qMin(text_rect.width() - 1, p.fontMetrics().width(clip->name()));
++ int underline_width = qMin(text_rect.width() - 1, p.fontMetrics().horizontalAdvance(clip->name()));
+ p.drawLine(text_rect.x(), underline_y, text_rect.x() + underline_width, underline_y);
+ }
+ QString name = clip->name();
+diff --unified --recursive --text olive-0.1.2-orig/ui/viewerwindow.cpp olive-0.1.2-new/ui/viewerwindow.cpp
+--- olive-0.1.2-orig/ui/viewerwindow.cpp 2019-11-11 03:05:02.000000000 -0300
++++ olive-0.1.2-new/ui/viewerwindow.cpp 2020-06-23 17:44:21.156661091 -0300
+@@ -172,7 +172,7 @@
+ p.setPen(Qt::white);
+ p.setBrush(QColor(0, 0, 0, 128));
+
+- int text_width = fm.width(fs_str);
++ int text_width = fm.horizontalAdvance(fs_str);
+ int text_x = (width()/2)-(text_width/2);
+ int text_y = fm.height()+fm.ascent();
+
diff --git a/multimedia/olive/olive-0.1.2-QPainterPath.patch b/multimedia/olive/olive-0.1.2-QPainterPath.patch
new file mode 100644
index 000000000000..07cb22eae333
--- /dev/null
+++ b/multimedia/olive/olive-0.1.2-QPainterPath.patch
@@ -0,0 +1,44 @@
+diff --unified --recursive --text olive-0.1.2-orig/effects/internal/texteffect.cpp olive-0.1.2-new/effects/internal/texteffect.cpp
+--- olive-0.1.2-orig/effects/internal/texteffect.cpp 2019-11-11 03:05:02.000000000 -0300
++++ olive-0.1.2-new/effects/internal/texteffect.cpp 2020-06-23 03:57:45.377783457 -0300
+@@ -25,6 +25,7 @@
+ #include <QOpenGLTexture>
+ #include <QTextEdit>
+ #include <QPainter>
++#include <QPainterPath>
+ #include <QPushButton>
+ #include <QColorDialog>
+ #include <QFontDatabase>
+diff --unified --recursive --text olive-0.1.2-orig/effects/internal/timecodeeffect.cpp olive-0.1.2-new/effects/internal/timecodeeffect.cpp
+--- olive-0.1.2-orig/effects/internal/timecodeeffect.cpp 2019-11-11 03:05:02.000000000 -0300
++++ olive-0.1.2-new/effects/internal/timecodeeffect.cpp 2020-06-23 05:44:58.589605133 -0300
+@@ -25,6 +25,7 @@
+ #include <QOpenGLTexture>
+ #include <QTextEdit>
+ #include <QPainter>
++#include <QPainterPath>
+ #include <QPushButton>
+ #include <QColorDialog>
+ #include <QFontDatabase>
+diff --unified --recursive --text olive-0.1.2-orig/ui/graphview.cpp olive-0.1.2-new/ui/graphview.cpp
+--- olive-0.1.2-orig/ui/graphview.cpp 2019-11-11 03:05:02.000000000 -0300
++++ olive-0.1.2-new/ui/graphview.cpp 2020-06-23 05:48:06.800458024 -0300
+@@ -21,6 +21,7 @@
+ #include "graphview.h"
+
+ #include <QPainter>
++#include <QPainterPath>
+ #include <QMouseEvent>
+ #include <QtMath>
+ #include <cfloat>
+diff --unified --recursive --text olive-0.1.2-orig/ui/timelineheader.cpp olive-0.1.2-new/ui/timelineheader.cpp
+--- olive-0.1.2-orig/ui/timelineheader.cpp 2019-11-11 03:05:02.000000000 -0300
++++ olive-0.1.2-new/ui/timelineheader.cpp 2020-06-23 05:48:36.440594616 -0300
+@@ -21,6 +21,7 @@
+ #include "timelineheader.h"
+
+ #include <QPainter>
++#include <QPainterPath>
+ #include <QMouseEvent>
+ #include <QScrollBar>
+ #include <QtMath>
diff --git a/multimedia/olive/olive-0.1.2-QWheelEvent.patch b/multimedia/olive/olive-0.1.2-QWheelEvent.patch
new file mode 100644
index 000000000000..5270f51bb28a
--- /dev/null
+++ b/multimedia/olive/olive-0.1.2-QWheelEvent.patch
@@ -0,0 +1,21 @@
+diff --unified --recursive --text olive-0.1.2-orig/ui/graphview.cpp olive-0.1.2-new/ui/graphview.cpp
+--- olive-0.1.2-orig/ui/graphview.cpp 2019-11-11 03:05:02.000000000 -0300
++++ olive-0.1.2-new/ui/graphview.cpp 2020-06-23 17:55:37.852888364 -0300
+@@ -795,7 +795,7 @@
+ new_y_zoom = y_zoom + (zoom_diff * (delta_v / 120.0));
+
+ // Center zoom around the mouse cursor vertically
+- int true_mouse_y = height()-event->pos().y();
++ int true_mouse_y = height()-event->position().y();
+ set_scroll_y(qRound((double(y_scroll + true_mouse_y) / y_zoom) * new_y_zoom) - true_mouse_y);
+
+ redraw = true;
+@@ -807,7 +807,7 @@
+ new_x_zoom = x_zoom + (zoom_diff * (delta_h / 120.0));
+
+ // Center zoom around the mouse cursor horizontally
+- set_scroll_x(qRound((double(x_scroll + event->pos().x()) / x_zoom) * new_x_zoom) - event->pos().x());
++ set_scroll_x(qRound((double(x_scroll + event->position().x()) / x_zoom) * new_x_zoom) - event->position().x());
+
+ redraw = true;
+ }
diff --git a/multimedia/olive/olive-0.1.2-appdata-desktop.patch b/multimedia/olive/olive-0.1.2-appdata-desktop.patch
new file mode 100644
index 000000000000..b2b4e46613ce
--- /dev/null
+++ b/multimedia/olive/olive-0.1.2-appdata-desktop.patch
@@ -0,0 +1,24 @@
+diff --unified --recursive --text olive-0.1.2-orig/packaging/linux/org.olivevideoeditor.Olive.appdata.xml olive-0.1.2-new/packaging/linux/org.olivevideoeditor.Olive.appdata.xml
+--- olive-0.1.2-orig/packaging/linux/org.olivevideoeditor.Olive.appdata.xml 2019-11-11 03:05:02.000000000 -0300
++++ olive-0.1.2-new/packaging/linux/org.olivevideoeditor.Olive.appdata.xml 2020-06-23 22:02:58.793224798 -0300
+@@ -31,7 +31,6 @@
+ </screenshots>
+ <content_rating type="oars-1.1" />
+ <releases>
+- <release version="20181223" date="2018-12-23"></release>
+- <release version="20181130" date="2018-11-30"></release>
++ <release version="0.1.2" date="2019-11-11"/>
+ </releases>
+ </component>
+diff --unified --recursive --text olive-0.1.2-orig/packaging/linux/org.olivevideoeditor.Olive.desktop olive-0.1.2-new/packaging/linux/org.olivevideoeditor.Olive.desktop
+--- olive-0.1.2-orig/packaging/linux/org.olivevideoeditor.Olive.desktop 2019-11-11 03:05:02.000000000 -0300
++++ olive-0.1.2-new/packaging/linux/org.olivevideoeditor.Olive.desktop 2020-06-23 22:03:16.533367553 -0300
+@@ -3,7 +3,7 @@
+ Comment=Professional open-source non-linear video editor
+ Comment[it]=Programma di montaggio video professionale open-source
+ Comment[id]=Aplikasi edit video yang non-linier, profesional serta sumbernya terbuka.
+-Exec=olive-editor
++Exec=olive-editor %f
+ Icon=org.olivevideoeditor.Olive
+ Terminal=false
+ Type=Application
diff --git a/multimedia/olive/olive-0.1.2-cacher.patch b/multimedia/olive/olive-0.1.2-cacher.patch
new file mode 100644
index 000000000000..e93ed3e52b18
--- /dev/null
+++ b/multimedia/olive/olive-0.1.2-cacher.patch
@@ -0,0 +1,24 @@
+diff --unified --recursive --text olive-0.1.2-orig/rendering/cacher.cpp olive-0.1.2-new/rendering/cacher.cpp
+--- olive-0.1.2-orig/rendering/cacher.cpp 2019-11-11 03:05:02.000000000 -0300
++++ olive-0.1.2-new/rendering/cacher.cpp 2020-06-23 16:08:47.307076532 -0300
+@@ -254,7 +254,7 @@
+ dout << "starting rev_frame";
+ #endif
+ rev_frame->nb_samples = 0;
+- rev_frame->pts = frame_->pkt_pts;
++ rev_frame->pts = frame_->pts;
+ }
+ int offset = rev_frame->nb_samples * av_get_bytes_per_sample(static_cast<AVSampleFormat>(rev_frame->format)) * rev_frame->channels;
+ #ifdef AUDIOWARNINGS
+@@ -277,9 +277,9 @@
+ /*
+ #ifdef AUDIOWARNINGS
+ dout << "time for the end of rev cache" << rev_frame->nb_samples << clip->rev_target << frame_->pts << frame_->pkt_duration << frame_->nb_samples;
+- dout << "diff:" << (frame_->pkt_pts + frame_->pkt_duration) - clip->rev_target;
++ dout << "diff:" << (frame_->pts + frame_->pkt_duration) - clip->rev_target;
+ #endif
+- int cutoff = qRound64((((frame_->pkt_pts + frame_->pkt_duration) - reverse_target) * timebase) * audio_output->format().sampleRate());
++ int cutoff = qRound64((((frame_->pts + frame_->pkt_duration) - reverse_target) * timebase) * audio_output->format().sampleRate());
+ if (cutoff > 0) {
+ #ifdef AUDIOWARNINGS
+ dout << "cut off" << cutoff << "samples (rate:" << audio_output->format().sampleRate() << ")";
diff --git a/multimedia/olive/olive-0.1.2-clickablelabel.patch b/multimedia/olive/olive-0.1.2-clickablelabel.patch
new file mode 100644
index 000000000000..f0e8d93f9fba
--- /dev/null
+++ b/multimedia/olive/olive-0.1.2-clickablelabel.patch
@@ -0,0 +1,14 @@
+diff --unified --recursive --text olive-0.1.2-orig/ui/clickablelabel.h olive-0.1.2-new/ui/clickablelabel.h
+--- olive-0.1.2-orig/ui/clickablelabel.h 2019-11-11 03:05:02.000000000 -0300
++++ olive-0.1.2-new/ui/clickablelabel.h 2020-06-23 14:12:08.786765041 -0300
+@@ -31,8 +31,8 @@
+ class ClickableLabel : public QLabel {
+ Q_OBJECT
+ public:
+- ClickableLabel(QWidget * parent = 0, Qt::WindowFlags f = 0);
+- ClickableLabel(const QString & text, QWidget * parent = 0, Qt::WindowFlags f = 0);
++ ClickableLabel(QWidget * parent = 0, Qt::WindowFlags f = Qt::Widget);
++ ClickableLabel(const QString & text, QWidget * parent = 0, Qt::WindowFlags f = Qt::Widget);
+ void mousePressEvent(QMouseEvent *ev);
+ signals:
+ void clicked();
diff --git a/multimedia/olive/olive-0.1.2-proxygenerator.patch b/multimedia/olive/olive-0.1.2-proxygenerator.patch
new file mode 100644
index 000000000000..1fab14f60484
--- /dev/null
+++ b/multimedia/olive/olive-0.1.2-proxygenerator.patch
@@ -0,0 +1,18 @@
+diff --unified --recursive --text olive-0.1.2-orig/project/proxygenerator.cpp olive-0.1.2-new/project/proxygenerator.cpp
+--- olive-0.1.2-orig/project/proxygenerator.cpp 2019-11-11 03:05:02.000000000 -0300
++++ olive-0.1.2-new/project/proxygenerator.cpp 2020-06-23 21:07:29.808353198 -0300
+@@ -167,7 +167,13 @@
+ }
+
+ // write video header
+- avformat_write_header(output_fmt_ctx, nullptr);
++ int error_code;
++ error_code = avformat_write_header(output_fmt_ctx, nullptr);
++ if (error_code < 0) {
++ qWarning() << "Failed to write video header";
++ cancelled = true;
++ skip = true;
++ }
+
+ // packet that av_read_frame will dump file packets into
+ AVPacket packet;
diff --git a/multimedia/olive/olive.SlackBuild b/multimedia/olive/olive.SlackBuild
new file mode 100644
index 000000000000..f18c92a336ed
--- /dev/null
+++ b/multimedia/olive/olive.SlackBuild
@@ -0,0 +1,109 @@
+#!/bin/bash
+
+# Slackware build script for olive
+
+# Copyright 2022 Bloyburt
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+cd $(dirname $0) ; CWD=$(pwd)
+
+PRGNAM=olive
+VERSION=${VERSION:-0.1.2}
+BUILD=${BUILD:-1}
+TAG=${TAG:-_SBo}
+PKGTYPE=${PKGTYPE:-tgz}
+
+if [ -z "$ARCH" ]; then
+ case "$( uname -m )" in
+ i?86) ARCH=i586 ;;
+ arm*) ARCH=arm ;;
+ *) ARCH=$( uname -m ) ;;
+ esac
+fi
+
+# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
+# the name of the created package would be, and then exit. This information
+# could be useful to other scripts.
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
+ exit 0
+fi
+
+TMP=${TMP:-/tmp/SBo}
+PKG=$TMP/package-$PRGNAM
+OUTPUT=${OUTPUT:-/tmp}
+
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "i686" ]; then
+ SLKCFLAGS="-O2 -march=i686 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+else
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+fi
+
+set -e
+
+rm -rf $PKG
+mkdir -p $TMP $PKG $OUTPUT
+cd $TMP
+rm -rf $PRGNAM-$VERSION
+tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
+cd $PRGNAM-$VERSION
+chown -R root:root .
+find -L . \
+ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
+ -o -perm 511 \) -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+
+# Apply the various patches
+for i in $CWD/*.patch; do patch -p1 < $i; done
+
+mkdir -p build
+cd build
+ cmake \
+ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_BUILD_TYPE=Release ..
+ make
+ make install/strip DESTDIR=$PKG
+cd ..
+
+rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la
+
+find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
+ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
+
+mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
+cp -a *.md $PKG/usr/doc/$PRGNAM-$VERSION
+cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
+
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+cat $CWD/doinst.sh > $PKG/install/doinst.sh
+
+cd $PKG
+/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE
diff --git a/multimedia/olive/olive.info b/multimedia/olive/olive.info
new file mode 100644
index 000000000000..111a4eb8c526
--- /dev/null
+++ b/multimedia/olive/olive.info
@@ -0,0 +1,10 @@
+PRGNAM="olive"
+VERSION="0.1.2"
+HOMEPAGE="https://olivevideoeditor.org/"
+DOWNLOAD="https://github.com/olive-editor/olive/archive/0.1.2/olive-0.1.2.tar.gz"
+MD5SUM="69f391ff44060ae08c7a462d71504515"
+DOWNLOAD_x86_64=""
+MD5SUM_x86_64=""
+REQUIRES="openimageio opencolorio graphviz"
+MAINTAINER="Bloyburt"
+EMAIL="alexpen@startmail.com"
diff --git a/multimedia/olive/slack-desc b/multimedia/olive/slack-desc
new file mode 100644
index 000000000000..11c6938a5ace
--- /dev/null
+++ b/multimedia/olive/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.
+# Line up the first '|' above the ':' following the base package name, and
+# the '|' on the right side marks the last column you can put a character in.
+# You must make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':' except on otherwise blank lines.
+
+ |-----handy-ruler------------------------------------------------------|
+olive: olive (Olive Video Editor)
+olive:
+olive: Olive is a cross-platform video editing application licensed under
+olive: the GNU GPL version 3. The plan of the development team is to combine
+olive: complete colour managment, a fast and high-fidelity float-based
+olive: render pipeline, node-based compositing and audio-mixing, and a
+olive: highly efficient automated disk cache all together in one program.
+olive:
+olive: Homepage: https://olivevideoeditor.org/
+olive:
+olive: