sysutils/k3b-kde4:

- Update to 2.0.3
- Remove patches merged upstream, regenerate patches
- Add patch obtained from Gentoo to fix build with modern ffmpeg/libav

PR:		202561
Submitted by:	matthew@reztek.cz
This commit is contained in:
Max Brazhnikov 2015-08-25 13:10:47 +00:00
parent 310fec0aaf
commit 8162989ab7
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=395247
22 changed files with 266 additions and 553 deletions

View file

@ -2,10 +2,10 @@
# $FreeBSD$
PORTNAME= k3b
PORTVERSION= 2.0.2
PORTREVISION= 23
PORTVERSION= 2.0.3
CATEGORIES= sysutils multimedia kde
MASTER_SITES= SF/${PORTNAME}/${PORTNAME}/${PORTVERSION}
MASTER_SITES= KDE/${PORTNAME}
DISTFILES= ${DISTNAME}a${EXTRACT_SUFX}
MAINTAINER= kde@FreeBSD.org
COMMENT= KDE CD/DVD writing suite
@ -15,7 +15,7 @@ LIB_DEPENDS= libcdda_paranoia.so:${PORTSDIR}/audio/cdparanoia \
RUN_DEPENDS= cdrecord:${PORTSDIR}/sysutils/cdrtools
BUILD_DEPENDS= cdrecord:${PORTSDIR}/sysutils/cdrtools
USES= cmake gettext pkgconfig shared-mime-info tar:bzip2
USES= cmake gettext pkgconfig shared-mime-info tar:xz
CMAKE_ARGS= -DK3B_BUILD_K3BSETUP:BOOL=OFF \
-DK3B_ENABLE_MUSICBRAINZ:BOOL=OFF
USE_KDE4= automoc4 kdeprefix kdelibs libkcddb

View file

@ -1,2 +1,2 @@
SHA256 (k3b-2.0.2.tar.bz2) = af176f29c1d2339c4648d461476227cb07bcd0c75056f2a4006f253e3ef5b7cd
SIZE (k3b-2.0.2.tar.bz2) = 12833321
SHA256 (k3b-2.0.3a.tar.xz) = 2d0bb2746802c1d3ad7ddd10e29234cf2053074f376feb200306a5570c39c081
SIZE (k3b-2.0.3a.tar.xz) = 9864468

View file

@ -0,0 +1,15 @@
--- CMakeLists.txt.orig 2014-11-04 18:43:47 UTC
+++ CMakeLists.txt
@@ -106,10 +106,10 @@ if(K3B_BUILD_FFMPEG_DECODER_PLUGIN)
include(CMakePushCheckState)
cmake_push_check_state()
- if(CMAKE_COMPILER_IS_GNUCC)
+ if(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
# FindKDE4Internal.cmake screws things up
set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} -std=c99)
- endif(CMAKE_COMPILER_IS_GNUCC)
+ endif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
if(FFMPEG_INCLUDE_DIR_OLD_STYLE)
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${FFMPEG_INCLUDE_DIR_OLD_STYLE})

View file

@ -1,6 +1,6 @@
--- cmake/modules/FindMuse.cmake.orig 2011-01-15 20:47:29.000000000 +0000
--- cmake/modules/FindMuse.cmake.orig 2014-11-04 18:37:31 UTC
+++ cmake/modules/FindMuse.cmake
@@ -15,13 +15,10 @@ if( MUSE_INCLUDE_DIR AND MUSE_LIBRARIES
@@ -15,13 +15,10 @@ if( MUSE_INCLUDE_DIR AND MUSE_LIBRARIES
endif( MUSE_INCLUDE_DIR AND MUSE_LIBRARIES )
include(CheckIncludeFiles)

View file

@ -1,19 +0,0 @@
https://bugs.gentoo.org/show_bug.cgi?id=476494
A better patch using avcodec_decode_audio4 will be needed but for now this
fixes the problem.
Index: k3b-2.0.2/plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp
===================================================================
--- plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp.orig
+++ plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp
@@ -37,6 +37,9 @@ extern "C" {
#include <klocale.h>
+#ifndef AVCODEC_MAX_AUDIO_FRAME_SIZE
+#define AVCODEC_MAX_AUDIO_FRAME_SIZE (192000 * 4)
+#endif
#if LIBAVFORMAT_BUILD < 4629
#define FFMPEG_BUILD_PRE_4629

View file

@ -1,11 +0,0 @@
--- plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp.orig 2011-01-15 21:47:29.000000000 +0100
+++ plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp 2015-07-04 07:21:54.284708677 +0200
@@ -159,7 +159,7 @@ void K3bFFMpegFile::close()
}
if( d->formatContext ) {
- ::av_close_input_file( d->formatContext );
+ ::avformat_close_input( &d->formatContext );
d->formatContext = 0;
}
}

View file

@ -1,96 +0,0 @@
commit 2f845b34badb614882b7e38ac38b00041ac2832d
Author: Michal Malek <michalm@jabster.pl>
Date: Sun Aug 28 20:18:53 2011 +0200
Fixed compilation with new FFMPEG
BUG: 274817
FIXED-IN: 2.0.3
diff --git a/plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp b/plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp
index 0ad59fc..0c5f366 100644
--- ./plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp
+++ ./plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp
@@ -109,7 +109,13 @@ bool K3bFFMpegFile::open()
#else
::AVCodecContext* codecContext = d->formatContext->streams[0]->codec;
#endif
- if( codecContext->codec_type != CODEC_TYPE_AUDIO ) {
+ if( codecContext->codec_type !=
+#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(52, 64, 0)
+ AVMEDIA_TYPE_AUDIO)
+#else
+ CODEC_TYPE_AUDIO)
+#endif
+ {
kDebug() << "(K3bFFMpegFile) not a simple audio stream: " << m_filename;
return false;
}
@@ -225,8 +231,11 @@ QString K3bFFMpegFile::typeComment() const
QString K3bFFMpegFile::title() const
{
// FIXME: is this UTF8 or something??
- if( d->formatContext->title[0] != '\0' )
- return QString::fromLocal8Bit( d->formatContext->title );
+ AVDictionaryEntry *ade = av_dict_get( d->formatContext->metadata, "TITLE", NULL, 0 );
+ if( ade == NULL )
+ return QString();
+ if( ade->value != '\0' )
+ return QString::fromLocal8Bit( ade->value );
else
return QString();
}
@@ -235,8 +244,11 @@ QString K3bFFMpegFile::title() const
QString K3bFFMpegFile::author() const
{
// FIXME: is this UTF8 or something??
- if( d->formatContext->author[0] != '\0' )
- return QString::fromLocal8Bit( d->formatContext->author );
+ AVDictionaryEntry *ade = av_dict_get( d->formatContext->metadata, "ARTIST", NULL, 0 );
+ if( ade == NULL )
+ return QString();
+ if( ade->value != '\0' )
+ return QString::fromLocal8Bit( ade->value );
else
return QString();
}
@@ -245,8 +257,11 @@ QString K3bFFMpegFile::author() const
QString K3bFFMpegFile::comment() const
{
// FIXME: is this UTF8 or something??
- if( d->formatContext->comment[0] != '\0' )
- return QString::fromLocal8Bit( d->formatContext->comment );
+ AVDictionaryEntry *ade = av_dict_get( d->formatContext->metadata, "COMMENT", NULL, 0 );
+ if( ade == NULL )
+ return QString();
+ if( ade->value != '\0' )
+ return QString::fromLocal8Bit( ade->value );
else
return QString();
}
@@ -309,8 +324,13 @@ int K3bFFMpegFile::fillOutputBuffer()
#if LIBAVCODEC_VERSION_MAJOR < 52
int len = ::avcodec_decode_audio(
#else
+ #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(52, 64, 0)
+ int len = ::avcodec_decode_audio3(
+ #else
int len = ::avcodec_decode_audio2(
+ #endif
#endif
+
#ifdef FFMPEG_BUILD_PRE_4629
&d->formatContext->streams[0]->codec,
#else
@@ -318,7 +338,11 @@ int K3bFFMpegFile::fillOutputBuffer()
#endif
(short*)d->alignedOutputBuffer,
&d->outputBufferSize,
+#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(52, 64, 0)
+ &d->packet );
+#else
d->packetData, d->packetSize );
+#endif
if( d->packetSize <= 0 || len < 0 )
::av_free_packet( &d->packet );

View file

@ -1,42 +0,0 @@
commit 6f34e14b28d2f9103151c6ba08b3bb40448ffe46
Author: Alex Merry <kde@randomguy3.me.uk>
Date: Thu Aug 23 23:45:34 2012 +0100
Fix K3B to build with recent FFMPEG versions
FFMPEG 0.11 (shipped on ArchLinux, for example) has renamed some
functions.
The exact versions in the #ifdefs are taken from the Mobile Robot
Programming Toolkit.
BUG: 300731
diff --git a/plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp b/plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp
index 0c5f366..024c18c 100644
--- ./plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp
+++ ./plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp
@@ -88,7 +88,11 @@ bool K3bFFMpegFile::open()
close();
// open the file
+#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(53,2,0)
+ int err = ::avformat_open_input( &d->formatContext, m_filename.toLocal8Bit(), 0, 0 );
+#else
int err = ::av_open_input_file( &d->formatContext, m_filename.toLocal8Bit(), 0, 0, 0 );
+#endif
if( err < 0 ) {
kDebug() << "(K3bFFMpegFile) unable to open " << m_filename << " with error " << err;
return false;
@@ -143,7 +147,11 @@ bool K3bFFMpegFile::open()
}
// dump some debugging info
+#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(53,2,0)
+ ::av_dump_format( d->formatContext, 0, m_filename.toLocal8Bit(), 0 );
+#else
::dump_format( d->formatContext, 0, m_filename.toLocal8Bit(), 0 );
+#endif
return true;
}

View file

@ -1,25 +0,0 @@
commit 79cd49cac3a6b7031556aae53ce3ecff8c360cb9
Author: Pino Toscano <pino@kde.org>
Date: Sun Jul 8 22:20:15 2012 +0200
fix sox detection with sox >= 14.4.0
sox 1.14.0 changed the string that is printed out on --version, breaking the simply string matching done;
add a new case to cover also this new version
BUG: 301544
diff --git a/plugins/encoder/sox/k3bsoxencoder.cpp b/plugins/encoder/sox/k3bsoxencoder.cpp
index 3559d5d..af5b013 100644
--- ./plugins/encoder/sox/k3bsoxencoder.cpp
+++ ./plugins/encoder/sox/k3bsoxencoder.cpp
@@ -69,6 +69,9 @@ public:
if ( pos >= 0 ) {
pos += 17;
}
+ else if ( ( pos = out.indexOf( "sox: SoX v" ) ) >= 0 ) {
+ pos += 15;
+ }
else if ( ( pos = out.indexOf( "sox: SoX v" ) ) >= 0 ) {
pos += 10;
}

View file

@ -1,20 +0,0 @@
commit 8d33a486082cd9eaa857d6042b1b8870e4bf532b
Author: Rex Dieter <rdieter@fedoraproject.org>
Date: Sat Feb 11 08:34:04 2012 -0600
fix for newer (kde-4.7+) FindFFMPEG.cmake
which sets ${FFMPEG_INCLUDE_DIRS} instead of ${FFMPEG_INCLUDE_DIR}
diff --git a/plugins/decoder/ffmpeg/CMakeLists.txt b/plugins/decoder/ffmpeg/CMakeLists.txt
index d7e25eb..d420a3c 100644
--- ./plugins/decoder/ffmpeg/CMakeLists.txt
+++ ./plugins/decoder/ffmpeg/CMakeLists.txt
@@ -9,7 +9,7 @@ if(FFMPEG_INCLUDE_DIR_OLD_STYLE)
else(FFMPEG_INCLUDE_DIR_OLD_STYLE)
message(STATUS "found new ffmpegcodecpath")
add_definitions(-DNEWFFMPEGAVCODECPATH)
- include_directories (${FFMPEG_INCLUDE_DIR})
+ include_directories (${FFMPEG_INCLUDE_DIR} ${FFMPEG_INCLUDE_DIRS})
endif(FFMPEG_INCLUDE_DIR_OLD_STYLE)
set(k3bffmpegdecoder_PART_SRCS k3bffmpegdecoder.cpp k3bffmpegwrapper.cpp )

View file

@ -0,0 +1,138 @@
From 52d3d64863d2fab4128f524870851f18f5cae1fc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Old=C5=99ich=20Jedli=C4=8Dka?= <oldium.pro@seznam.cz>
Date: Sat, 14 Feb 2015 15:31:07 +0100
Subject: [PATCH] Fixed compilation with newer ffmpeg/libav.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Oldřich Jedlička <oldium.pro@seznam.cz>
---
plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp | 60 ++++++++++++++++++++++++-----
1 file changed, 50 insertions(+), 10 deletions(-)
diff --git a/plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp b/plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp
index 5451fd3..2f80fd6 100644
--- plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp
+++ plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp
@@ -86,8 +86,12 @@ public:
K3b::Msf length;
// for decoding. ffmpeg requires 16-byte alignment.
+#ifdef HAVE_FFMPEG_AVCODEC_DECODE_AUDIO4
+ ::AVFrame* frame;
+#else
char outputBuffer[AVCODEC_MAX_AUDIO_FRAME_SIZE + 15];
char* alignedOutputBuffer;
+#endif
char* outputBufferPos;
int outputBufferSize;
::AVPacket packet;
@@ -102,14 +106,29 @@ K3bFFMpegFile::K3bFFMpegFile( const QString& filename )
d = new Private;
d->formatContext = 0;
d->codec = 0;
+#ifdef HAVE_FFMPEG_AVCODEC_DECODE_AUDIO4
+# if LIBAVCODEC_BUILD < AV_VERSION_INT(55,28,1)
+ d->frame = avcodec_alloc_frame();
+# else
+ d->frame = av_frame_alloc();
+# endif
+#else
int offset = 0x10 - (reinterpret_cast<intptr_t>(&d->outputBuffer) & 0xf);
d->alignedOutputBuffer = &d->outputBuffer[offset];
+#endif
}
K3bFFMpegFile::~K3bFFMpegFile()
{
close();
+#ifdef HAVE_FFMPEG_AVCODEC_DECODE_AUDIO4
+# if LIBAVCODEC_BUILD < AV_VERSION_INT(55,28,1)
+ av_free(d->frame);
+# else
+ av_frame_free(&d->frame);
+# endif
+#endif
delete d;
}
@@ -326,26 +345,36 @@ int K3bFFMpegFile::fillOutputBuffer()
return 0;
}
+#ifdef HAVE_FFMPEG_AVCODEC_DECODE_AUDIO4
+ int gotFrame = 0;
+ int len = ::avcodec_decode_audio4(
+#else
d->outputBufferPos = d->alignedOutputBuffer;
d->outputBufferSize = AVCODEC_MAX_AUDIO_FRAME_SIZE;
-
-#ifdef HAVE_FFMPEG_AVCODEC_DECODE_AUDIO3
+# ifdef HAVE_FFMPEG_AVCODEC_DECODE_AUDIO3
int len = ::avcodec_decode_audio3(
-#else
-# ifdef HAVE_FFMPEG_AVCODEC_DECODE_AUDIO2
- int len = ::avcodec_decode_audio2(
# else
+# ifdef HAVE_FFMPEG_AVCODEC_DECODE_AUDIO2
+ int len = ::avcodec_decode_audio2(
+# else
int len = ::avcodec_decode_audio(
+# endif
# endif
#endif
FFMPEG_CODEC(d->formatContext->streams[0]),
+#ifdef HAVE_FFMPEG_AVCODEC_DECODE_AUDIO4
+ d->frame,
+ &gotFrame,
+ &d->packet );
+#else
(short*)d->alignedOutputBuffer,
&d->outputBufferSize,
-#ifdef HAVE_FFMPEG_AVCODEC_DECODE_AUDIO3
+# ifdef HAVE_FFMPEG_AVCODEC_DECODE_AUDIO3
&d->packet );
-#else
+# else
d->packetData, d->packetSize );
+# endif
#endif
if( d->packetSize <= 0 || len < 0 )
@@ -355,6 +384,17 @@ int K3bFFMpegFile::fillOutputBuffer()
return -1;
}
+#ifdef HAVE_FFMPEG_AVCODEC_DECODE_AUDIO4
+ if ( gotFrame ) {
+ d->outputBufferSize = ::av_samples_get_buffer_size(
+ NULL,
+ FFMPEG_CODEC(d->formatContext->streams[0])->channels,
+ d->frame->nb_samples,
+ FFMPEG_CODEC(d->formatContext->streams[0])->sample_fmt,
+ 1 );
+ d->outputBufferPos = reinterpret_cast<char*>( d->frame->data[0] );
+ }
+#endif
d->packetSize -= len;
d->packetData += len;
}
@@ -420,9 +460,9 @@ K3bFFMpegFile* K3bFFMpegWrapper::open( const QString& filename ) const
// mp3 being one of them sadly. Most importantly: allow the libsndfile decoder to do
// its thing.
//
- if( file->type() == CODEC_ID_WMAV1 ||
- file->type() == CODEC_ID_WMAV2 ||
- file->type() == CODEC_ID_AAC )
+ if( file->type() == AV_CODEC_ID_WMAV1 ||
+ file->type() == AV_CODEC_ID_WMAV2 ||
+ file->type() == AV_CODEC_ID_AAC )
#endif
return file;
}
--
2.0.5

View file

@ -1,22 +0,0 @@
Index: k3b-2.0.2/plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp
===================================================================
--- plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp.orig 2013-04-22 17:46:13.523959500 +0200
+++ plugins/decoder/ffmpeg/k3bffmpegwrapper.cpp 2013-04-22 18:40:49.890007513 +0200
@@ -95,7 +95,7 @@ bool K3bFFMpegFile::open()
}
// analyze the streams
- ::av_find_stream_info( d->formatContext );
+ ::avformat_find_stream_info( d->formatContext, 0 );
// we only handle files containing one audio stream
if( d->formatContext->nb_streams != 1 ) {
@@ -129,7 +129,7 @@ bool K3bFFMpegFile::open()
// open the codec on our context
kDebug() << "(K3bFFMpegFile) found codec for " << m_filename;
- if( ::avcodec_open( codecContext, d->codec ) < 0 ) {
+ if( ::avcodec_open2( codecContext, d->codec, 0 ) < 0 ) {
kDebug() << "(K3bFFMpegDecoderFactory) could not open codec.";
return false;
}

View file

@ -1,6 +1,6 @@
--- libk3b/core/k3bglobals.cpp.orig 2010-07-30 06:36:01.794731453 +0000
+++ libk3b/core/k3bglobals.cpp 2010-07-30 06:37:34.104075238 +0000
@@ -321,6 +321,13 @@
--- libk3b/core/k3bglobals.cpp.orig 2014-11-04 18:37:31 UTC
+++ libk3b/core/k3bglobals.cpp
@@ -322,6 +322,13 @@ QString K3b::externalBinDeviceParameter(
}

View file

@ -1,6 +1,6 @@
--- libk3b/core/k3bglobals.h.orig 2010-07-30 06:40:13.000000000 +0200
+++ libk3b/core/k3bglobals.h 2010-07-30 06:41:05.000000000 +0200
@@ -230,6 +230,7 @@
--- libk3b/core/k3bglobals.h.orig 2014-11-04 18:37:31 UTC
+++ libk3b/core/k3bglobals.h
@@ -231,6 +231,7 @@ namespace K3b {
* Takes care of SCSI and ATAPI.
*/
LIBK3B_EXPORT QString externalBinDeviceParameter( Device::Device* dev, const ExternalBin* );

View file

@ -1,6 +1,6 @@
--- libk3b/projects/k3bcdrecordwriter.cpp.orig 2010-06-06 20:49:38.000000000 +0200
+++ libk3b/projects/k3bcdrecordwriter.cpp 2010-07-30 06:43:53.000000000 +0200
@@ -228,7 +228,11 @@
--- libk3b/projects/k3bcdrecordwriter.cpp.orig 2014-11-04 18:37:31 UTC
+++ libk3b/projects/k3bcdrecordwriter.cpp
@@ -228,7 +228,11 @@ bool K3b::CdrecordWriter::prepareProcess
d->process << "gracetime=2"; // 2 is the lowest allowed value (Joerg, why do you do this to us?)
// Again we assume the device to be set!

View file

@ -1,6 +1,6 @@
--- ./libk3b/CMakeLists.txt.orig 2009-04-21 21:54:02.000000000 +0400
+++ ./libk3b/CMakeLists.txt 2010-01-30 03:22:10.208943627 +0300
@@ -230,12 +230,8 @@
--- libk3b/CMakeLists.txt.orig 2014-11-04 18:37:31 UTC
+++ libk3b/CMakeLists.txt
@@ -230,12 +230,8 @@ target_link_libraries(k3b
${KCDDB_LIBRARIES}
${SAMPLERATE_LIBRARIES}
k3bdevice

View file

@ -1,6 +1,6 @@
--- libk3bdevice/k3bdevice.cpp.orig 2010-06-06 15:32:49.000000000 +0200
+++ libk3bdevice/k3bdevice.cpp 2010-07-30 06:44:02.000000000 +0200
@@ -309,6 +309,12 @@
--- libk3bdevice/k3bdevice.cpp.orig 2014-11-04 18:37:31 UTC
+++ libk3bdevice/k3bdevice.cpp
@@ -322,6 +322,12 @@ QString K3b::Device::Device::blockDevice
}
@ -13,7 +13,7 @@
int K3b::Device::Device::maxWriteSpeed() const
{
return d->maxWriteSpeed;
@@ -363,6 +369,14 @@
@@ -376,6 +382,14 @@ bool K3b::Device::Device::init( bool bCh
if( !open() )
return false;

View file

@ -1,6 +1,6 @@
--- libk3bdevice/k3bdevice.h.orig 2010-07-30 06:33:55.000000000 +0200
+++ libk3bdevice/k3bdevice.h 2010-07-30 06:35:35.000000000 +0200
@@ -222,6 +222,11 @@
--- libk3bdevice/k3bdevice.h.orig 2014-11-04 18:37:31 UTC
+++ libk3bdevice/k3bdevice.h
@@ -222,6 +222,11 @@ namespace K3b {
*/
QString blockDeviceName() const;

View file

@ -1,284 +0,0 @@
diff --git a/libk3bdevice/k3bscsicommand_bsd.cpp b/libk3bdevice/k3bscsicommand_bsd.cpp
index ce6508e..63a8fd5 100644
--- ./libk3bdevice/k3bscsicommand_bsd.cpp
+++ ./libk3bdevice/k3bscsicommand_bsd.cpp
@@ -1,6 +1,7 @@
/*
*
* Copyright (C) 2003-2009 Sebastian Trueg <trueg@k3b.org>
+ * Copyright (C) 2011 Andriy Gapon <avg@FreeBSD.org>
*
* This file is part of the K3b project.
* Copyright (C) 1998-2009 Sebastian Trueg <trueg@k3b.org>
@@ -23,41 +24,43 @@
#include <cam/scsi/scsi_message.h>
#include <cam/scsi/scsi_pass.h>
-#define ERRCODE(s) ((((s)[2]&0x0F)<<16)|((s)[12]<<8)|((s)[13]))
-#define EMEDIUMTYPE EINVAL
-#define ENOMEDIUM ENODEV
-#define CREAM_ON_ERRNO(s) do { \
- switch ((s)[12]) \
- { case 0x04: errno=EAGAIN; break; \
- case 0x20: errno=ENODEV; break; \
- case 0x21: if ((s)[13]==0) errno=ENOSPC; \
- else errno=EINVAL; \
- break; \
- case 0x30: errno=EMEDIUMTYPE; break; \
- case 0x3A: errno=ENOMEDIUM; break; \
- } \
- } while(0)
-
+namespace /*anonymous*/
+{
+ inline int sense_to_err( const struct scsi_sense_data& s )
+ {
+ int errorCode, senseKey, addSenseCode, addSenseCodeQual;
+ scsi_extract_sense( (struct scsi_sense_data*) &s, &errorCode,
+ &senseKey, &addSenseCode, &addSenseCodeQual );
+ return (errorCode << 24) | (senseKey << 16) |
+ (addSenseCode << 8) | addSenseCodeQual;
+ }
+}
class K3b::Device::ScsiCommand::Private
{
+ typedef union ccb CCB;
+
public:
- union ccb ccb;
+ Private();
+ int transport( const Device* device, TransportDirection dir, void* data, size_t len );
+ unsigned char& operator[]( size_t i );
+ void clear();
+ const CCB& get_ccb() { return ccb; }
+
+private:
+ CCB ccb;
};
void K3b::Device::ScsiCommand::clear()
{
- memset (&d->ccb,0,sizeof(ccb));
+ d->clear();
}
-
unsigned char& K3b::Device::ScsiCommand::operator[]( size_t i )
{
- if( d->ccb.csio.cdb_len < i+1 )
- d->ccb.csio.cdb_len = i+1;
- return d->ccb.csio.cdb_io.cdb_bytes[i];
+ return (*d)[i];
}
int K3b::Device::ScsiCommand::transport( TransportDirection dir,
@@ -78,130 +81,102 @@ int K3b::Device::ScsiCommand::transport( TransportDirection dir,
m_device->usageUnlock();
return -1;
}
- d->ccb.ccb_h.path_id = m_device->handle()->path_id;
- d->ccb.ccb_h.target_id = m_device->handle()->target_id;
- d->ccb.ccb_h.target_lun = m_device->handle()->target_lun;
- kDebug() << "(K3b::Device::ScsiCommand) transport command " << QString::number((int)d->ccb.csio.cdb_io.cdb_bytes[0], 16) << ", length: " << (int)d->ccb.csio.cdb_len;
- int ret=0;
- int direction = CAM_DEV_QFRZDIS;
- if (!len)
- direction |= CAM_DIR_NONE;
- else
- direction |= (dir & TR_DIR_READ)?CAM_DIR_IN : CAM_DIR_OUT;
- cam_fill_csio (&(d->ccb.csio), 1, 0 /* NULL */, direction, MSG_SIMPLE_Q_TAG, (u_int8_t *)data, len, sizeof(d->ccb.csio.sense_data), d->ccb.csio.cdb_len, 30*1000);
- unsigned char * sense = (unsigned char *)&d->ccb.csio.sense_data;
+ int ret = d->transport( m_device, dir, data, len );
+ if( ret != 0 ) {
+ const struct scsi_sense_data& s = d->get_ccb().csio.sense_data;
+ int errorCode, senseKey, addSenseCode, addSenseCodeQual;
+ scsi_extract_sense( (struct scsi_sense_data*) &s, &errorCode, &senseKey,
+ &addSenseCode, &addSenseCodeQual );
+ debugError( d->get_ccb().csio.cdb_io.cdb_bytes[0],
+ errorCode,
+ senseKey,
+ addSenseCode,
+ addSenseCodeQual );
+ }
- ret = cam_send_ccb(m_device->handle(), &d->ccb);
+ if( needToClose )
+ m_device->close();
+ m_device->usageUnlock();
- if (ret < 0) {
- kDebug() << "(K3b::Device::ScsiCommand) transport failed: " << ret;
+ return ret;
+}
- if( needToClose )
- m_device->close();
+K3b::Device::ScsiCommand::Private::Private()
+{
+ clear();
+}
- m_device->usageUnlock();
+void K3b::Device::ScsiCommand::Private::clear()
+{
+ memset( &ccb, 0, sizeof(ccb) );
+}
- struct scsi_sense_data* senset = (struct scsi_sense_data*)sense;
- debugError( d->ccb.csio.cdb_io.cdb_bytes[0],
- senset->error_code & SSD_ERRCODE,
- senset->flags & SSD_KEY,
- senset->add_sense_code,
- senset->add_sense_code_qual );
+unsigned char& K3b::Device::ScsiCommand::Private::operator[]( size_t i )
+{
+ if( ccb.csio.cdb_len < i + 1 )
+ ccb.csio.cdb_len = i + 1;
+ return ccb.csio.cdb_io.cdb_bytes[i];
+}
- int result = (((senset->error_code & SSD_ERRCODE)<<24) & 0xF000 |
- ((senset->flags & SSD_KEY)<<16) & 0x0F00 |
- (senset->add_sense_code<<8) & 0x00F0 |
- (senset->add_sense_code_qual) & 0x000F );
+int K3b::Device::ScsiCommand::Private::transport( const Device* device, TransportDirection dir, void* data, size_t len )
+{
+ ccb.ccb_h.path_id = device->handle()->path_id;
+ ccb.ccb_h.target_id = device->handle()->target_id;
+ ccb.ccb_h.target_lun = device->handle()->target_lun;
- return result ? result : ret;
+ kDebug() << "(K3b::Device::ScsiCommand) transport command " << commandString(ccb.csio.cdb_io.cdb_bytes[0])
+ << " (" << QString::number((int)ccb.csio.cdb_io.cdb_bytes[0], 16) << "), length: " << (int)ccb.csio.cdb_len;
+ int direction = CAM_DEV_QFRZDIS;
+ if (!len)
+ direction |= CAM_DIR_NONE;
+ else
+ direction |= (dir & TR_DIR_READ) ? CAM_DIR_IN : CAM_DIR_OUT;
+
+ cam_fill_csio( &(ccb.csio), 1, NULL, direction, MSG_SIMPLE_Q_TAG, (uint8_t*)data, len, sizeof(ccb.csio.sense_data), ccb.csio.cdb_len, 30*1000 );
+ int ret = cam_send_ccb( device->handle(), &ccb );
+ if( ret < 0 ) {
+ kError() << "(K3b::Device::ScsiCommand) transport cam_send_ccb failed: ret = " << ret
+ << ", errno = " << errno << ", cam_errbuf = " << cam_errbuf;
+ return 1;
}
-
- else if ((d->ccb.ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) {
- if( needToClose )
- m_device->close();
- m_device->usageUnlock();
+ else if( (ccb.ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP ) {
+ kDebug() << "(K3b::Device::ScsiCommand) transport succeeded";
return 0;
}
- errno = EIO;
- // FreeBSD 5-CURRENT since 2003-08-24, including 5.2 fails to
- // pull sense data automatically, at least for ATAPI transport,
- // so I reach for it myself...
- if ((d->ccb.csio.scsi_status==SCSI_STATUS_CHECK_COND) &&
- !(d->ccb.ccb_h.status&CAM_AUTOSNS_VALID))
- {
- u_int8_t _sense[18];
- u_int32_t resid=d->ccb.csio.resid;
-
- memset(_sense,0,sizeof(_sense));
+ kDebug() << "(K3b::Device::ScsiCommand) transport command failed: scsi_status = " << QString::number(ccb.csio.scsi_status, 16);
- operator[](0) = 0x03; // REQUEST SENSE
- d->ccb.csio.cdb_io.cdb_bytes[4] = sizeof(_sense);
- d->ccb.csio.cdb_len = 6;
- d->ccb.csio.ccb_h.flags |= CAM_DIR_IN|CAM_DIS_AUTOSENSE;
- d->ccb.csio.data_ptr = _sense;
- d->ccb.csio.dxfer_len = sizeof(_sense);
- d->ccb.csio.sense_len = 0;
+ if( ccb.csio.scsi_status == SCSI_STATUS_CHECK_COND &&
+ !(ccb.ccb_h.status & CAM_AUTOSNS_VALID) &&
+ ccb.csio.cdb_io.cdb_bytes[0] != MMC_REQUEST_SENSE )
+ {
+ kDebug() << "(K3b::Device::ScsiCommand) transport requesting sense data";
- ret = cam_send_ccb(m_device->handle(), &d->ccb);
+ struct scsi_sense_data sense;
+ ScsiCommand::Private cmd;
+ cmd[0] = MMC_REQUEST_SENSE;
+ cmd[4] = SSD_MIN_SIZE;
+ cmd[5] = 0; // Necessary to set the proper command length
- d->ccb.csio.resid = resid;
- if (ret<0)
- {
- kDebug() << "(K3b::Device::ScsiCommand) transport failed (2): " << ret;
- ret = -1;
- struct scsi_sense_data* senset = (struct scsi_sense_data*)sense;
- debugError( d->ccb.csio.cdb_io.cdb_bytes[0],
- senset->error_code & SSD_ERRCODE,
- senset->flags & SSD_KEY,
- senset->add_sense_code,
- senset->add_sense_code_qual );
-
- if( needToClose )
- m_device->close();
- m_device->usageUnlock();
-
- return -1;
- }
- if ((d->ccb.ccb_h.status&CAM_STATUS_MASK) != CAM_REQ_CMP)
+ memset( &sense, 0, sizeof(sense) );
+ ret = cmd.transport( device, TR_DIR_READ, &sense, SSD_MIN_SIZE );
+ if( ret < 0 )
{
- kDebug() << "(K3b::Device::ScsiCommand) transport failed (3): " << ret;
- errno=EIO,-1;
- ret = -1;
- struct scsi_sense_data* senset = (struct scsi_sense_data*)sense;
- debugError( d->ccb.csio.cdb_io.cdb_bytes[0],
- senset->error_code & SSD_ERRCODE,
- senset->flags & SSD_KEY,
- senset->add_sense_code,
- senset->add_sense_code_qual );
-
- if( needToClose )
- m_device->close();
- m_device->usageUnlock();
-
- return -1;
+ kWarning() << "(K3b::Device::ScsiCommand) transport getting sense data failed: " << ret;
+ return 1;
}
- memcpy(sense,_sense,sizeof(_sense));
+ ccb.csio.sense_data = sense;
+ ccb.ccb_h.status |= CAM_AUTOSNS_VALID;
}
- ret = ERRCODE(sense);
- kDebug() << "(K3b::Device::ScsiCommand) transport failed (4): " << ret;
- if (ret == 0)
- ret = -1;
- else
- CREAM_ON_ERRNO(((unsigned char *)&d->ccb.csio.sense_data));
- struct scsi_sense_data* senset = (struct scsi_sense_data*)sense;
- debugError( d->ccb.csio.cdb_io.cdb_bytes[0],
- senset->error_code & SSD_ERRCODE,
- senset->flags & SSD_KEY,
- senset->add_sense_code,
- senset->add_sense_code_qual );
-
- if( needToClose )
- m_device->close();
- m_device->usageUnlock();
+ if( !(ccb.ccb_h.status & CAM_AUTOSNS_VALID) )
+ kDebug() << "(K3b::Device::ScsiCommand) sense data is not available";
+ ret = sense_to_err(ccb.csio.sense_data);
+ if( ret == 0 )
+ ret = 1;
+ kDebug() << "(K3b::Device::ScsiCommand) transport failed: " << ret;
return ret;
}

View file

@ -1,10 +1,10 @@
--- ./libk3bdevice/CMakeLists.txt.orig 2009-04-06 14:13:39.000000000 -0400
+++ ./libk3bdevice/CMakeLists.txt 2009-10-19 10:55:39.000000000 -0400
@@ -27,6 +27,7 @@
--- libk3bdevice/CMakeLists.txt.orig 2014-11-04 18:37:31 UTC
+++ libk3bdevice/CMakeLists.txt
@@ -27,6 +27,7 @@ kde4_add_library(k3bdevice SHARED ${k3bd
target_link_libraries(k3bdevice
${KDE4_KDECORE_LIBS}
${KDE4_SOLID_LIBS}
+ cam
)
set_target_properties(k3bdevice PROPERTIES VERSION ${K3B_LIB_VERSION_MAJOR}.${K3B_LIB_VERSION_MINOR}.${K3B_LIB_VERSION_RELEASE} SOVERSION ${K3B_LIB_VERSION_MAJOR})
if (CMAKE_SYSTEM_NAME MATCHES "kFreeBSD")

View file

@ -1,6 +1,6 @@
--- ./plugins/encoder/lame/CMakeLists.txt.orig 2008-08-28 10:41:55.000000000 -0400
+++ ./plugins/encoder/lame/CMakeLists.txt 2009-10-19 10:55:39.000000000 -0400
@@ -26,7 +26,7 @@
--- plugins/encoder/lame/CMakeLists.txt.orig 2014-11-04 18:37:31 UTC
+++ plugins/encoder/lame/CMakeLists.txt
@@ -26,7 +26,7 @@ kde4_add_plugin(k3blameencoder
target_link_libraries(k3blameencoder
${KDE4_KDECORE_LIBS}
k3b k3bdevice

View file

@ -299,6 +299,18 @@ share/apps/solid/actions/k3b_copy_disc.desktop
share/apps/solid/actions/k3b_create_audio_cd_from_blank_medium.desktop
share/apps/solid/actions/k3b_create_data_project_from_blank_medium.desktop
%%LIBDVDREAD%%share/apps/solid/actions/k3b_videodvd_rip.desktop
share/doc/HTML/ca/k3b/K3bAddButton.png
share/doc/HTML/ca/k3b/K3bAdvancedSettings.png
share/doc/HTML/ca/k3b/K3bDiskChoice.png
share/doc/HTML/ca/k3b/K3bMoreActions.png
share/doc/HTML/ca/k3b/K3bSetVerify.png
share/doc/HTML/ca/k3b/K3bsetup.png
share/doc/HTML/ca/k3b/common
share/doc/HTML/ca/k3b/index.cache.bz2
share/doc/HTML/ca/k3b/index.docbook
share/doc/HTML/de/k3b/common
share/doc/HTML/de/k3b/index.cache.bz2
share/doc/HTML/de/k3b/index.docbook
share/doc/HTML/en/k3b/K3bAddButton.png
share/doc/HTML/en/k3b/K3bAdvancedSettings.png
share/doc/HTML/en/k3b/K3bDiskChoice.png
@ -308,6 +320,42 @@ share/doc/HTML/en/k3b/K3bsetup.png
share/doc/HTML/en/k3b/common
share/doc/HTML/en/k3b/index.cache.bz2
share/doc/HTML/en/k3b/index.docbook
share/doc/HTML/es/k3b/common
share/doc/HTML/es/k3b/index.cache.bz2
share/doc/HTML/es/k3b/index.docbook
share/doc/HTML/et/k3b/common
share/doc/HTML/et/k3b/index.cache.bz2
share/doc/HTML/et/k3b/index.docbook
share/doc/HTML/fr/k3b/K3bAddButton.png
share/doc/HTML/fr/k3b/K3bAdvancedSettings.png
share/doc/HTML/fr/k3b/K3bDiskChoice.png
share/doc/HTML/fr/k3b/K3bMoreActions.png
share/doc/HTML/fr/k3b/K3bsetup.png
share/doc/HTML/fr/k3b/common
share/doc/HTML/fr/k3b/index.cache.bz2
share/doc/HTML/fr/k3b/index.docbook
share/doc/HTML/fr/k3b/k3bSetVerify.png
share/doc/HTML/it/k3b/common
share/doc/HTML/it/k3b/index.cache.bz2
share/doc/HTML/it/k3b/index.docbook
share/doc/HTML/nl/k3b/common
share/doc/HTML/nl/k3b/index.cache.bz2
share/doc/HTML/nl/k3b/index.docbook
share/doc/HTML/pt/k3b/common
share/doc/HTML/pt/k3b/index.cache.bz2
share/doc/HTML/pt/k3b/index.docbook
share/doc/HTML/pt_BR/k3b/common
share/doc/HTML/pt_BR/k3b/index.cache.bz2
share/doc/HTML/pt_BR/k3b/index.docbook
share/doc/HTML/uk/k3b/K3bAddButton.png
share/doc/HTML/uk/k3b/K3bAdvancedSettings.png
share/doc/HTML/uk/k3b/K3bDiskChoice.png
share/doc/HTML/uk/k3b/K3bMoreActions.png
share/doc/HTML/uk/k3b/K3bSetVerify.png
share/doc/HTML/uk/k3b/K3bsetup.png
share/doc/HTML/uk/k3b/common
share/doc/HTML/uk/k3b/index.cache.bz2
share/doc/HTML/uk/k3b/index.docbook
share/icons/hicolor/128x128/apps/k3b.png
share/icons/hicolor/16x16/apps/k3b.png
share/icons/hicolor/22x22/apps/k3b.png
@ -352,6 +400,11 @@ share/locale/bg/LC_MESSAGES/k3b.mo
share/locale/bg/LC_MESSAGES/k3bsetup.mo
share/locale/bg/LC_MESSAGES/libk3b.mo
share/locale/bg/LC_MESSAGES/libk3bdevice.mo
share/locale/bs/LC_MESSAGES/k3b.mo
share/locale/bs/LC_MESSAGES/k3bsetup.mo
share/locale/bs/LC_MESSAGES/kio_videodvd.mo
share/locale/bs/LC_MESSAGES/libk3b.mo
share/locale/bs/LC_MESSAGES/libk3bdevice.mo
share/locale/ca/LC_MESSAGES/k3b.mo
share/locale/ca/LC_MESSAGES/k3bsetup.mo
share/locale/ca/LC_MESSAGES/kio_videodvd.mo
@ -381,6 +434,7 @@ share/locale/de/LC_MESSAGES/libk3b.mo
share/locale/de/LC_MESSAGES/libk3bdevice.mo
share/locale/el/LC_MESSAGES/k3b.mo
share/locale/el/LC_MESSAGES/k3bsetup.mo
share/locale/el/LC_MESSAGES/kio_videodvd.mo
share/locale/el/LC_MESSAGES/libk3b.mo
share/locale/el/LC_MESSAGES/libk3bdevice.mo
share/locale/en_GB/LC_MESSAGES/k3b.mo
@ -408,10 +462,12 @@ share/locale/eu/LC_MESSAGES/libk3b.mo
share/locale/eu/LC_MESSAGES/libk3bdevice.mo
share/locale/fi/LC_MESSAGES/k3b.mo
share/locale/fi/LC_MESSAGES/k3bsetup.mo
share/locale/fi/LC_MESSAGES/kio_videodvd.mo
share/locale/fi/LC_MESSAGES/libk3b.mo
share/locale/fi/LC_MESSAGES/libk3bdevice.mo
share/locale/fr/LC_MESSAGES/k3b.mo
share/locale/fr/LC_MESSAGES/k3bsetup.mo
share/locale/fr/LC_MESSAGES/kio_videodvd.mo
share/locale/fr/LC_MESSAGES/libk3b.mo
share/locale/fr/LC_MESSAGES/libk3bdevice.mo
share/locale/ga/LC_MESSAGES/k3b.mo
@ -421,6 +477,7 @@ share/locale/ga/LC_MESSAGES/libk3b.mo
share/locale/ga/LC_MESSAGES/libk3bdevice.mo
share/locale/gl/LC_MESSAGES/k3b.mo
share/locale/gl/LC_MESSAGES/k3bsetup.mo
share/locale/gl/LC_MESSAGES/kio_videodvd.mo
share/locale/gl/LC_MESSAGES/libk3b.mo
share/locale/gl/LC_MESSAGES/libk3bdevice.mo
share/locale/he/LC_MESSAGES/k3b.mo
@ -452,6 +509,7 @@ share/locale/is/LC_MESSAGES/libk3b.mo
share/locale/is/LC_MESSAGES/libk3bdevice.mo
share/locale/it/LC_MESSAGES/k3b.mo
share/locale/it/LC_MESSAGES/k3bsetup.mo
share/locale/it/LC_MESSAGES/kio_videodvd.mo
share/locale/it/LC_MESSAGES/libk3b.mo
share/locale/it/LC_MESSAGES/libk3bdevice.mo
share/locale/ja/LC_MESSAGES/k3b.mo
@ -459,12 +517,19 @@ share/locale/ja/LC_MESSAGES/k3bsetup.mo
share/locale/ja/LC_MESSAGES/kio_videodvd.mo
share/locale/ja/LC_MESSAGES/libk3b.mo
share/locale/ja/LC_MESSAGES/libk3bdevice.mo
share/locale/kk/LC_MESSAGES/k3b.mo
share/locale/kk/LC_MESSAGES/k3bsetup.mo
share/locale/kk/LC_MESSAGES/kio_videodvd.mo
share/locale/kk/LC_MESSAGES/libk3b.mo
share/locale/kk/LC_MESSAGES/libk3bdevice.mo
share/locale/km/LC_MESSAGES/k3b.mo
share/locale/km/LC_MESSAGES/k3bsetup.mo
share/locale/km/LC_MESSAGES/kio_videodvd.mo
share/locale/km/LC_MESSAGES/libk3b.mo
share/locale/km/LC_MESSAGES/libk3bdevice.mo
share/locale/ko/LC_MESSAGES/k3b.mo
share/locale/ko/LC_MESSAGES/k3bsetup.mo
share/locale/ko/LC_MESSAGES/kio_videodvd.mo
share/locale/ko/LC_MESSAGES/libk3b.mo
share/locale/ko/LC_MESSAGES/libk3bdevice.mo
share/locale/ku/LC_MESSAGES/k3b.mo
@ -473,11 +538,17 @@ share/locale/lt/LC_MESSAGES/k3bsetup.mo
share/locale/lt/LC_MESSAGES/kio_videodvd.mo
share/locale/lt/LC_MESSAGES/libk3b.mo
share/locale/lt/LC_MESSAGES/libk3bdevice.mo
share/locale/lv/LC_MESSAGES/k3b.mo
share/locale/lv/LC_MESSAGES/k3bsetup.mo
share/locale/lv/LC_MESSAGES/libk3b.mo
share/locale/lv/LC_MESSAGES/libk3bdevice.mo
share/locale/mai/LC_MESSAGES/k3b.mo
share/locale/mai/LC_MESSAGES/libk3b.mo
share/locale/mr/LC_MESSAGES/k3b.mo
share/locale/mr/LC_MESSAGES/k3bsetup.mo
share/locale/mr/LC_MESSAGES/kio_videodvd.mo
share/locale/mr/LC_MESSAGES/libk3b.mo
share/locale/mr/LC_MESSAGES/libk3bdevice.mo
share/locale/ms/LC_MESSAGES/k3b.mo
share/locale/ms/LC_MESSAGES/k3bsetup.mo
share/locale/ms/LC_MESSAGES/kio_videodvd.mo
@ -513,6 +584,7 @@ share/locale/pa/LC_MESSAGES/libk3b.mo
share/locale/pa/LC_MESSAGES/libk3bdevice.mo
share/locale/pl/LC_MESSAGES/k3b.mo
share/locale/pl/LC_MESSAGES/k3bsetup.mo
share/locale/pl/LC_MESSAGES/kio_videodvd.mo
share/locale/pl/LC_MESSAGES/libk3b.mo
share/locale/pl/LC_MESSAGES/libk3bdevice.mo
share/locale/pt/LC_MESSAGES/k3b.mo
@ -527,6 +599,7 @@ share/locale/pt_BR/LC_MESSAGES/libk3b.mo
share/locale/pt_BR/LC_MESSAGES/libk3bdevice.mo
share/locale/ro/LC_MESSAGES/k3b.mo
share/locale/ro/LC_MESSAGES/k3bsetup.mo
share/locale/ro/LC_MESSAGES/kio_videodvd.mo
share/locale/ro/LC_MESSAGES/libk3b.mo
share/locale/ro/LC_MESSAGES/libk3bdevice.mo
share/locale/ru/LC_MESSAGES/k3b.mo
@ -545,6 +618,7 @@ share/locale/sk/LC_MESSAGES/libk3b.mo
share/locale/sk/LC_MESSAGES/libk3bdevice.mo
share/locale/sl/LC_MESSAGES/k3b.mo
share/locale/sl/LC_MESSAGES/k3bsetup.mo
share/locale/sl/LC_MESSAGES/kio_videodvd.mo
share/locale/sl/LC_MESSAGES/libk3b.mo
share/locale/sl/LC_MESSAGES/libk3bdevice.mo
share/locale/sr/LC_MESSAGES/k3b.mo
@ -581,6 +655,11 @@ share/locale/tr/LC_MESSAGES/k3bsetup.mo
share/locale/tr/LC_MESSAGES/kio_videodvd.mo
share/locale/tr/LC_MESSAGES/libk3b.mo
share/locale/tr/LC_MESSAGES/libk3bdevice.mo
share/locale/ug/LC_MESSAGES/k3b.mo
share/locale/ug/LC_MESSAGES/k3bsetup.mo
share/locale/ug/LC_MESSAGES/kio_videodvd.mo
share/locale/ug/LC_MESSAGES/libk3b.mo
share/locale/ug/LC_MESSAGES/libk3bdevice.mo
share/locale/uk/LC_MESSAGES/k3b.mo
share/locale/uk/LC_MESSAGES/k3bsetup.mo
share/locale/uk/LC_MESSAGES/kio_videodvd.mo