diff options
author | Mark Linimon <linimon@FreeBSD.org> | 2004-05-28 05:52:01 +0000 |
---|---|---|
committer | Mark Linimon <linimon@FreeBSD.org> | 2004-05-28 05:52:01 +0000 |
commit | 7b2a844d4f0ada056bd21e55082c6788546119b5 (patch) | |
tree | 2308a9c96cccba77806e86ba3c6f70895b454638 /sysutils | |
parent | 9fa169b13cbd59804f5d631000c9ddc8ac3663bc (diff) | |
download | ports-7b2a844d4f0ada056bd21e55082c6788546119b5.tar.gz ports-7b2a844d4f0ada056bd21e55082c6788546119b5.zip |
Notes
Diffstat (limited to 'sysutils')
34 files changed, 720 insertions, 654 deletions
diff --git a/sysutils/k3b-kde4/Makefile b/sysutils/k3b-kde4/Makefile index 7601b89875f6..7c18bbbb8c88 100644 --- a/sysutils/k3b-kde4/Makefile +++ b/sysutils/k3b-kde4/Makefile @@ -6,8 +6,7 @@ # PORTNAME= k3b -PORTVERSION= 0.11.6 -PORTREVISION= 1 +PORTVERSION= 0.11.9 CATEGORIES= sysutils multimedia kde MASTER_SITES= ${MASTER_SITE_SOURCEFORGE} MASTER_SITE_SUBDIR= ${PORTNAME} @@ -19,6 +18,7 @@ RUN_DEPENDS= cdrecord:${PORTSDIR}/sysutils/cdrtools \ cdrdao:${PORTSDIR}/sysutils/cdrdao \ mkisofs:${PORTSDIR}/sysutils/mkisofs LIB_DEPENDS= mad:${PORTSDIR}/audio/libmad \ + id3tag:${PORTSDIR}/audio/libid3tag \ vorbis:${PORTSDIR}/audio/libvorbis \ FLAC:${PORTSDIR}/audio/flac diff --git a/sysutils/k3b-kde4/distinfo b/sysutils/k3b-kde4/distinfo index e5a440541f5b..f87a9ba30f2e 100644 --- a/sysutils/k3b-kde4/distinfo +++ b/sysutils/k3b-kde4/distinfo @@ -1 +1,2 @@ -MD5 (k3b-0.11.6.tar.bz2) = 0015b9ad457713425464dbdad6a15ab9 +MD5 (k3b-0.11.9.tar.bz2) = 88f46a5cfbda5fa89b4bfee504567df1 +SIZE (k3b-0.11.9.tar.bz2) = 3217141 diff --git a/sysutils/k3b-kde4/files/patch-src-Makefile.in b/sysutils/k3b-kde4/files/patch-src-Makefile.in index bf6506bc152a..c3dd4bab796b 100644 --- a/sysutils/k3b-kde4/files/patch-src-Makefile.in +++ b/sysutils/k3b-kde4/files/patch-src-Makefile.in @@ -1,6 +1,6 @@ ---- src/Makefile.in.orig Sun Feb 29 19:38:32 2004 -+++ src/Makefile.in Mon Mar 8 15:40:08 2004 -@@ -286,7 +286,7 @@ +--- src/Makefile.in.orig Mon Mar 29 20:04:54 2004 ++++ src/Makefile.in Tue May 11 22:57:03 2004 +@@ -272,7 +272,7 @@ #>+ 1 k3b_SOURCES=k3bwelcomewidget.cpp k3bapplication.cpp k3bdiroperator.cpp kdndfileview.cpp k3bfiletreeview.cpp k3bcddbmultientriesdialog.cpp k3baudioplayer.cpp k3bprojecttabbar.cpp k3bprojecttabwidget.cpp k3bsplash.cpp k3bblankingdialog.cpp k3bfileview.cpp k3bdirview.cpp k3btoolbox.cpp k3b.cpp main.cpp k3bstatusbarmanager.cpp k3bfiletreecombobox.cpp k3breadcdreader.cpp k3binterface.cpp k3bprojectinterface.cpp k3bsystemproblemdialog.cpp k3bcdcontentsview.cpp k3bwriterspeedverificationdialog.cpp k3bdatatrackreader.cpp k3binterface_skel.cpp k3bprojectinterface_skel.cpp diff --git a/sysutils/k3b-kde4/files/patch-src-core-k3bdefaultexternalprograms.cpp b/sysutils/k3b-kde4/files/patch-src-core-k3bdefaultexternalprograms.cpp index 008a58d004fe..3fe07352d47f 100644 --- a/sysutils/k3b-kde4/files/patch-src-core-k3bdefaultexternalprograms.cpp +++ b/sysutils/k3b-kde4/files/patch-src-core-k3bdefaultexternalprograms.cpp @@ -1,6 +1,6 @@ ---- src/core/k3bdefaultexternalprograms.cpp.orig Wed Jan 21 11:20:10 2004 -+++ src/core/k3bdefaultexternalprograms.cpp Fri Feb 13 21:03:38 2004 -@@ -28,6 +28,7 @@ +--- src/core/k3bdefaultexternalprograms.cpp.orig Mon Mar 22 18:13:21 2004 ++++ src/core/k3bdefaultexternalprograms.cpp Tue May 11 22:57:03 2004 +@@ -30,6 +30,7 @@ #include <unistd.h> #include <sys/stat.h> #include <stdlib.h> @@ -8,7 +8,7 @@ -@@ -89,7 +90,7 @@ +@@ -123,7 +124,7 @@ K3bExternalBin* bin = 0; // probe version @@ -17,7 +17,7 @@ K3bProcess::OutputCollector out( &vp ); vp << path << "-version"; -@@ -128,7 +129,7 @@ +@@ -162,7 +163,7 @@ // probe features @@ -26,7 +26,7 @@ out.setProcess( &fp ); fp << path << "-help"; if( fp.start( KProcess::Block, KProcess::AllOutput ) ) { -@@ -200,7 +201,7 @@ +@@ -236,7 +237,7 @@ K3bExternalBin* bin = 0; // probe version @@ -35,7 +35,7 @@ K3bProcess::OutputCollector out( &vp ); vp << path << "-version"; -@@ -229,7 +230,7 @@ +@@ -265,7 +266,7 @@ // probe features @@ -44,7 +44,7 @@ out.setProcess( &fp ); fp << path << "-help"; if( fp.start( KProcess::Block, KProcess::AllOutput ) ) { -@@ -285,7 +286,7 @@ +@@ -321,7 +322,7 @@ K3bExternalBin* bin = 0; // probe version @@ -53,7 +53,7 @@ vp << path << "-version"; K3bProcess::OutputCollector out( &vp ); if( vp.start( KProcess::Block, KProcess::AllOutput ) ) { -@@ -313,7 +314,7 @@ +@@ -349,7 +350,7 @@ // probe features @@ -62,7 +62,7 @@ fp << path << "-help"; out.setProcess( &fp ); if( fp.start( KProcess::Block, KProcess::AllOutput ) ) { -@@ -374,7 +375,7 @@ +@@ -410,7 +411,7 @@ K3bExternalBin* bin = 0; // probe version @@ -71,7 +71,7 @@ vp << path << "-version"; K3bProcess::OutputCollector out( &vp ); if( vp.start( KProcess::Block, KProcess::AllOutput ) ) { -@@ -402,7 +403,7 @@ +@@ -438,7 +439,7 @@ // probe features @@ -80,7 +80,7 @@ fp << path << "-help"; out.setProcess( &fp ); if( fp.start( KProcess::Block, KProcess::AllOutput ) ) { -@@ -462,7 +463,7 @@ +@@ -498,7 +499,7 @@ K3bExternalBin* bin = 0; // probe version @@ -89,7 +89,7 @@ vp << path ; K3bProcess::OutputCollector out( &vp ); if( vp.start( KProcess::Block, KProcess::AllOutput ) ) { -@@ -490,7 +491,7 @@ +@@ -530,7 +531,7 @@ // probe features @@ -98,7 +98,7 @@ fp << path << "write" << "-h"; out.setProcess( &fp ); if( fp.start( KProcess::Block, KProcess::AllOutput ) ) { -@@ -556,7 +557,7 @@ +@@ -599,7 +600,7 @@ K3bExternalBin* bin = 0; // probe version @@ -107,7 +107,7 @@ vp << path ; K3bProcess::OutputCollector out( &vp ); if( vp.start( KProcess::Block, KProcess::AllOutput ) ) { -@@ -610,7 +611,7 @@ +@@ -653,7 +654,7 @@ K3bExternalBin* bin = 0; // probe version @@ -116,7 +116,7 @@ vp << path << "-V"; K3bProcess::OutputCollector out( &vp ); if( vp.start( KProcess::Block, KProcess::AllOutput ) ) { -@@ -667,7 +668,7 @@ +@@ -710,7 +711,7 @@ K3bExternalBin* bin = 0; // probe version @@ -125,7 +125,7 @@ K3bProcess::OutputCollector out( &vp ); vp << path << "--version"; -@@ -726,7 +727,7 @@ +@@ -769,7 +770,7 @@ K3bExternalBin* bin = 0; // probe version @@ -134,7 +134,7 @@ K3bProcess::OutputCollector out( &vp ); vp << path << "-version"; -@@ -795,7 +796,7 @@ +@@ -838,7 +839,7 @@ K3bExternalBin* bin = 0; // probe version @@ -143,7 +143,7 @@ K3bProcess::OutputCollector out( &vp ); vp << path; -@@ -868,7 +869,7 @@ +@@ -911,7 +912,7 @@ K3bExternalBin* bin = 0; // probe version diff --git a/sysutils/k3b-kde4/files/patch-src-core-k3bprocess.cpp b/sysutils/k3b-kde4/files/patch-src-core-k3bprocess.cpp index 14543eb14ea8..425eec00ad79 100644 --- a/sysutils/k3b-kde4/files/patch-src-core-k3bprocess.cpp +++ b/sysutils/k3b-kde4/files/patch-src-core-k3bprocess.cpp @@ -1,5 +1,5 @@ --- src/core/k3bprocess.cpp.orig Sun Feb 1 09:18:58 2004 -+++ src/core/k3bprocess.cpp Fri Feb 13 21:03:38 2004 ++++ src/core/k3bprocess.cpp Tue May 11 22:57:03 2004 @@ -28,6 +28,60 @@ #include <unistd.h> #include <stdio.h> diff --git a/sysutils/k3b-kde4/files/patch-src-core-k3bprocess.h b/sysutils/k3b-kde4/files/patch-src-core-k3bprocess.h index f4f96946d694..10fae690100f 100644 --- a/sysutils/k3b-kde4/files/patch-src-core-k3bprocess.h +++ b/sysutils/k3b-kde4/files/patch-src-core-k3bprocess.h @@ -1,5 +1,5 @@ --- src/core/k3bprocess.h.orig Tue Jan 27 09:19:13 2004 -+++ src/core/k3bprocess.h Fri Feb 13 21:03:38 2004 ++++ src/core/k3bprocess.h Tue May 11 22:57:03 2004 @@ -194,4 +194,21 @@ KProcess* m_process; }; diff --git a/sysutils/k3b-kde4/files/patch-src-device-k3bdevice.cpp b/sysutils/k3b-kde4/files/patch-src-device-k3bdevice.cpp index c3e8d0ce63d7..5315827ee675 100644 --- a/sysutils/k3b-kde4/files/patch-src-device-k3bdevice.cpp +++ b/sysutils/k3b-kde4/files/patch-src-device-k3bdevice.cpp @@ -1,5 +1,5 @@ ---- src/device/k3bdevice.cpp.orig Thu Feb 12 11:21:15 2004 -+++ src/device/k3bdevice.cpp Fri Feb 13 21:03:38 2004 +--- src/device/k3bdevice.cpp.orig Sun Mar 14 17:35:20 2004 ++++ src/device/k3bdevice.cpp Mon May 24 23:31:19 2004 @@ -56,6 +56,12 @@ #endif // Q_OS_LINUX @@ -24,3 +24,56 @@ // +@@ -192,6 +200,7 @@ + unsigned char header[2048]; + ::memset( header, 0, 2048 ); + ++ cmd.clear(); + cmd[0] = MMC::GET_CONFIGURATION; + cmd[8] = 8; + if( cmd.transport( TR_DIR_READ, header, 8 ) ) { +@@ -733,6 +742,14 @@ + m_bufferSize = 1024; + d->burnfree = false; + } ++ else if( description().startsWith("CD-R56S") ) { ++ m_writeModes |= TAO; ++ d->deviceType |= CDROM|CDR; ++ m_maxWriteSpeed = 6; ++ m_maxReadSpeed = 24; ++ m_bufferSize = 1302; ++ d->burnfree = false; ++ } + } + else if( vendor().startsWith("MATSHITA") ) { + if( description().startsWith("CD-R CW-7501") ) { +@@ -2317,10 +2334,12 @@ + { + // if the device is already opened we do not close it + // to allow fast multible method calls in a row ++#ifndef __FreeBSD__ + bool needToClose = !isOpen(); + + if (open() < 0) + return; ++#endif + + // header size is 8 + unsigned char* buffer = 0; +@@ -2406,13 +2425,16 @@ + delete [] buffer; + } + ++#ifndef __FreeBSD__ + if( needToClose ) + close(); ++#endif + } + + + bool K3bCdDevice::CdDevice::readTocPmaAtip( unsigned char** data, int& dataLen, int format, bool time, int track ) const + { ++ kdDebug() << "(K3bCdDevice::CdDevice) readTocPmaAtip started, format:" << format << ", time: " << time << ", track: " << track << endl; + unsigned char header[2048]; + ::memset( header, 0, 2048 ); + diff --git a/sysutils/k3b-kde4/files/patch-src-device-k3bdevice.h b/sysutils/k3b-kde4/files/patch-src-device-k3bdevice.h index ecb893f0d514..836458ced45e 100644 --- a/sysutils/k3b-kde4/files/patch-src-device-k3bdevice.h +++ b/sysutils/k3b-kde4/files/patch-src-device-k3bdevice.h @@ -1,6 +1,6 @@ ---- src/device/k3bdevice.h.orig Fri Jan 30 11:28:15 2004 -+++ src/device/k3bdevice.h Fri Feb 13 21:03:38 2004 -@@ -654,6 +654,10 @@ +--- src/device/k3bdevice.h.orig Sun Mar 14 17:35:20 2004 ++++ src/device/k3bdevice.h Tue May 11 22:57:03 2004 +@@ -661,6 +661,10 @@ class Private; Private* d; diff --git a/sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.cpp b/sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.cpp index 75ba9c14b38f..7b40314e293a 100644 --- a/sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.cpp +++ b/sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.cpp @@ -1,5 +1,5 @@ ---- src/device/k3bdevicemanager.cpp.orig Wed Jan 21 11:20:10 2004 -+++ src/device/k3bdevicemanager.cpp Fri Feb 13 21:03:38 2004 +--- src/device/k3bdevicemanager.cpp.orig Sun Feb 29 13:52:41 2004 ++++ src/device/k3bdevicemanager.cpp Tue May 11 22:57:03 2004 @@ -49,6 +49,12 @@ #include <sys/stat.h> #include <sys/ioctl.h> @@ -13,7 +13,7 @@ #ifdef Q_OS_LINUX -@@ -196,6 +202,22 @@ +@@ -196,6 +202,13 @@ { m_foundDevices = 0; @@ -22,21 +22,12 @@ +// and asks their properties. If they are indeed cd drives, they are added to a device list. This does not work +// on FreeBSD (no corresponding ioctls). Here cdrecord is asked for a list of scsi device, which work as cd +// drives. The device points of those devices are added to the device list. -+ bsd_scan_devices(false); -+ kdDebug() << "(K3bDeviceManager) analyze found device" << endl; -+ for ( QValueList<BSDDevice>::iterator it = m_devices.begin(); it != m_devices.end(); ++it ) -+ { -+ if( addDevice( (*it).m_name ) ) -+ { -+ kdDebug() << "(K3bDeviceManager) Device " << (*it).m_name << " added" << endl; -+ m_foundDevices++; -+ } -+ } ++ bsd_scan_devices(); +#else QFile info("/proc/sys/dev/cdrom/info"); QString line,devstring; info.open(IO_ReadOnly); -@@ -286,6 +308,7 @@ +@@ -286,6 +299,7 @@ // m_foundDevices++; // } @@ -44,7 +35,7 @@ scanFstab(); return m_foundDevices; -@@ -427,6 +450,7 @@ +@@ -427,6 +441,7 @@ bool K3bCdDevice::DeviceManager::testForCdrom(const QString& devicename) { bool ret = false; @@ -52,7 +43,7 @@ int cdromfd = K3bCdDevice::openDevice( devicename.ascii() ); if (cdromfd < 0) { kdDebug() << "could not open device " << devicename << " (" << strerror(errno) << ")" << endl; -@@ -467,11 +491,51 @@ +@@ -467,11 +482,36 @@ } ::close( cdromfd ); @@ -66,45 +57,30 @@ +// this piece of code extracts some device parameter, like scsi or ide device. The whole process +// fails on FreeBSD. Here the device name is simply looked up in a list of devices found by a +// call of cdrecord --scanbus. -+ K3bDevice* device = 0; -+ if (!m_lastRefresh.isValid()) -+ bsd_scan_devices(false); -+ bool found = false; -+ for ( QValueList<BSDDevice>::iterator it = m_devices.begin(); it != m_devices.end(); ++it ) -+ { -+ if( (*it).m_name == devicename ) -+ { -+ device = new K3bDevice((*it).m_name.latin1()); -+ device->m_bus = (*it).m_bus; -+ device->m_target = (*it).m_target; -+ device->m_lun = (*it).m_lun; -+ device->m_passDevice = (*it).m_passDevice; -+ device->m_vendor = (*it).m_vendor; -+ device->m_description = (*it).m_product; -+ device->m_version = (*it).m_revision; -+ found = true; -+ break; -+ } -+ } -+ if (!found) -+ { ++ K3bDevice* device = findDevice(devicename); ++ if (device) ++ return 0; + // resolve all symlinks + QString resolved = resolveSymLink( devicename ); + kdDebug() << "(K3bDeviceManager) " << devicename << " resolved to " << resolved << endl; -+ int bus, target, lun; -+ if( K3bDevice* oldDev = findDevice( bus, target, lun ) ) ++ if( K3bDevice* oldDev = findDevice( resolved ) ) + { -+ kdDebug() << "(K3bDeviceManager) dev already found" << endl; -+ oldDev->addDeviceNode( resolved ); ++ kdDebug() << "(K3bDeviceManager) dev already found" << endl; ++ oldDev->addDeviceNode( resolved ); ++ return 0; + } -+ return 0; -+ } ++ device = new K3bDevice(resolved.latin1()); ++ return addDevice( device ); ++} + ++K3bDevice* K3bCdDevice::DeviceManager::addDevice( CdDevice* device ) ++{ ++ const QString devicename = device->devicename(); +#else K3bDevice* device = 0; // resolve all symlinks -@@ -503,6 +567,7 @@ +@@ -503,6 +543,7 @@ device->m_target = target; device->m_lun = lun; } @@ -112,7 +88,7 @@ if( !device->init() ) { kdDebug() << "Could not initialize device " << devicename << endl; -@@ -578,9 +643,20 @@ +@@ -578,9 +619,20 @@ if( K3bDevice* dev = findDevice( resolveSymLink(md) ) ) { @@ -133,7 +109,7 @@ dev->setMountDevice( md ); dev->m_supermount = supermount; } -@@ -589,6 +665,8 @@ +@@ -589,6 +641,8 @@ { // compare bus, id, lun since the same device can for example be // determined as /dev/srX or /dev/scdX @@ -142,7 +118,7 @@ int bus = -1, id = -1, lun = -1; if( determineBusIdLun( mountInfo->fs_spec, bus, id, lun ) ) { if( K3bDevice* dev = findDevice( bus, id, lun ) ) { -@@ -599,6 +677,17 @@ +@@ -599,6 +653,17 @@ } } } @@ -160,129 +136,134 @@ } -@@ -673,5 +762,126 @@ +@@ -674,5 +739,131 @@ return QString::fromLatin1( resolved ); } + +#ifdef __FreeBSD__ -+// Calls "camcontrol devlist" to get a list of all available cd devices. -+// The sudo flag indicates, that "camcontrol devlist" should be -+// called. This is tried, if bsd_scan_devices(false) fails. -+// The result of the scan ist stored in m_devices. If within 3 -+// seconds after the last call to bsd_scan_devices this function -+// is called again, the last result is used (prevents to call -+// camcontrol several times within a short time). -+void K3bCdDevice::DeviceManager::bsd_scan_devices(bool sudo) ++#include <cam/cam.h> ++#include <cam/scsi/scsi_pass.h> ++#include <camlib.h> ++void K3bCdDevice::DeviceManager::bsd_scan_devices() +{ -+ QDateTime now = QDateTime::currentDateTime(); -+ if (m_lastRefresh.isValid() && m_lastRefresh.secsTo(now) < 3) -+ return; -+ m_lastRefresh = now; -+ m_devices.clear(); -+ kdDebug() << "(K3bDeviceManager) Scanning for devices: " << sudo << endl; -+ KTempFile tmpfile; -+ tmpfile.setAutoDelete(true); ++ union ccb ccb; ++ int fd, i; ++ int need_close = 0; ++ int skip_device = 0; ++ int bus, target, lun; ++ QString dev1, dev2; ++ ++ if ((fd = open(XPT_DEVICE, O_RDWR)) == -1) ++ { ++ kdDebug() << "couldn't open %s " << XPT_DEVICE << endl; ++ return; ++ } ++ ++ memset(&ccb, 0, sizeof(ccb)); ++ ++ ccb.ccb_h.func_code = XPT_DEV_MATCH; ++ char buffer[100*sizeof(struct dev_match_result)]; ++ ccb.cdm.match_buf_len = 100*sizeof(struct dev_match_result); ++ ccb.cdm.matches = (struct dev_match_result *)buffer; ++ ccb.cdm.num_matches = 0; ++ ccb.cdm.num_patterns = 0; ++ ccb.cdm.pattern_buf_len = 0; ++ do { ++ if (ioctl(fd, CAMIOCOMMAND, &ccb) == -1) { ++ kdDebug() << "(bsd_scan_devices) error sending CAMIOCOMMAND ioctl: " << errno << endl; ++ break; ++ } ++ ++ if ((ccb.ccb_h.status != CAM_REQ_CMP) ++ || ((ccb.cdm.status != CAM_DEV_MATCH_LAST) && (ccb.cdm.status != CAM_DEV_MATCH_MORE))) { ++ kdDebug() << "(bsd_scan_devices) got CAM error " << ccb.ccb_h.status << ", CDM error %d" << ccb.cdm.status << endl; ++ break; ++ } ++ kdDebug() << "(bsd_scan_devices) number of matches " << (int)ccb.cdm.num_matches << endl; ++ for (int i = 0; i < (int)ccb.cdm.num_matches; i++) { ++ switch (ccb.cdm.matches[i].type) { ++ case DEV_MATCH_DEVICE: { ++ struct device_match_result *dev_result = &ccb.cdm.matches[i].result.device_result; ++ ++ if (dev_result->flags & DEV_RESULT_UNCONFIGURED) ++ { ++ skip_device = 1; ++ break; ++ } ++ else ++ skip_device = 0; ++ if (need_close) ++ { ++ QString pass = dev1; ++ QString dev = "/dev/" + dev2; ++ if (dev2.startsWith("pass")) ++ { ++ pass = dev2; ++ dev = "/dev/" + dev1; ++ } ++#if __FreeBSD_version < 500100 ++ dev += "c"; ++#endif + -+ // create call -+ QString call = "/bin/sh -c \""; -+ if (sudo) -+ call += "sudo "; -+ call += "camcontrol devlist > " + tmpfile.name() + " 2>&1 \""; -+ kdDebug() << "(K3bDeviceManager) Reading device list : " << call << endl; -+ if (system(call.latin1())) -+ { -+ if (!sudo) -+ { -+ m_lastRefresh = m_lastRefresh.addDays(-1); -+ bsd_scan_devices(true); -+ } -+ return; -+ } ++ K3bDevice* device = new K3bDevice(dev.latin1()); ++ device->m_bus = bus; ++ device->m_target = target; ++ device->m_lun = lun; ++ device->m_passDevice = "/dev/" + pass; ++ kdDebug() << "(bsd_scan_devices) add device " << dev << ":" << bus << ":" << target << ":" << lun << endl; ++ addDevice(device); ++ need_close = 0; ++ } ++ bus = dev_result->path_id; ++ target = dev_result->target_id; ++ lun = dev_result->target_lun; + -+ // read tmp file line by line -+ QFile tmp (tmpfile.name()); -+ if ( tmp.open( IO_ReadOnly ) ) -+ { -+ QTextStream stream( &tmp ); -+ while ( !stream.eof() ) ++ need_close = 1; ++ ++ break; ++ } ++ case DEV_MATCH_PERIPH: { ++ struct periph_match_result *periph_result = &ccb.cdm.matches[i].result.periph_result; ++ ++ if (skip_device != 0) ++ break; ++ ++ if (need_close > 1) ++ dev1 = periph_result->periph_name + QString::number(periph_result->unit_number); ++ else ++ dev2 = periph_result->periph_name + QString::number(periph_result->unit_number); ++ ++ need_close++; ++ break; ++ } ++ } ++ } ++ ++ } while ((ccb.ccb_h.status == CAM_REQ_CMP) ++ && (ccb.cdm.status == CAM_DEV_MATCH_MORE)); ++ ++ if (need_close) + { -+ QString str = stream.readLine(); -+ if (!str.startsWith("<")) -+ continue; -+ str.remove(0,1); -+ int i = str.find(">"); -+ if (i < 0) -+ continue; -+ QStringList details = QStringList::split(" ", str.left(i)); -+ i = str.find("at scbus", i); -+ if (i < 0) -+ continue; -+ str.remove(0, i+8); -+ i = str.find(" "); -+ if (i < 0) -+ continue; -+ bool ok; -+ int bus = str.left(i).toInt(&ok); -+ if (!ok) -+ continue; -+ i = str.find("target ", i); -+ if (i < 0) -+ continue; -+ str.remove(0, i+7); -+ i = str.find(" "); -+ if (i < 0) -+ continue; -+ int target = str.left(i).toInt(&ok); -+ if (!ok) -+ continue; -+ i = str.find("lun ", i); -+ if (i < 0) -+ continue; -+ str.remove(0, i+4); -+ i = str.find(" "); -+ if (i < 0) -+ continue; -+ int lun = str.left(i).toInt(&ok); -+ if (!ok) -+ continue; -+ i = str.find("(", i); -+ if (i < 0) -+ continue; -+ str.remove(0, i+1); -+ i = str.find(","); -+ if (i < 0) -+ continue; -+ QString name = str.left(i); -+ str.remove(0, i+1); -+ i = str.find(")"); -+ if (i < 0) -+ continue; -+ QString pass = name; -+ if (name.startsWith("pass")) -+ name = str.left(i); -+ else -+ pass = str.left(i); -+ QString vendor, product, revision; -+ if (details.count() > 0) -+ revision = details.last(); -+ details.pop_back(); -+ if (details.count() > 0) -+ product = details.last(); -+ details.pop_back(); -+ if (details.count() > 0) -+ vendor = details.join(" "); -+ if (!name.startsWith("cd")) -+ continue; -+ kdDebug() << "(K3bDeviceManager) Found device " << name << ", pass = " << pass << ", bus = " << bus << ", target = " << target << ", lun = " << lun << endl; -+ kdDebug() << "(K3bDeviceManager) vendor: " << vendor << ", product: " << product << ", revision: " << revision << ", target = " << target << ", lun = " << lun << endl; -+#if __FreeBSD_version >= 500100 -+ m_devices.push_back(BSDDevice("/dev/" + name, "/dev/" + pass, vendor, product, revision, bus, target, lun)); -+#else -+ m_devices.push_back(BSDDevice("/dev/" + name + "c", "/dev/" + pass, vendor, product, revision, bus, target, lun)); ++ QString pass = dev1; ++ QString dev = "/dev/" + dev2; ++ if (dev2.startsWith("pass")) ++ { ++ pass = dev2; ++ dev = "/dev/" + dev1; ++ } ++#if __FreeBSD_version < 500100 ++ dev += "c"; +#endif -+ } -+ } ++ K3bDevice* device = new K3bDevice(dev.latin1()); ++ device->m_bus = bus; ++ device->m_target = target; ++ device->m_lun = lun; ++ device->m_passDevice = "/dev/" + pass; ++ kdDebug() << "(bsd_scan_devices) add device " << dev << ":" << bus << ":" << target << ":" << lun << endl; ++ addDevice(device); ++ } ++ close(fd); +} +#endif diff --git a/sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.h b/sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.h index 8d285e3ec035..eb08ec300f78 100644 --- a/sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.h +++ b/sysutils/k3b-kde4/files/patch-src-device-k3bdevicemanager.h @@ -1,42 +1,12 @@ --- src/device/k3bdevicemanager.h.orig Wed Jan 21 11:20:11 2004 -+++ src/device/k3bdevicemanager.h Fri Feb 13 21:03:38 2004 -@@ -24,6 +24,10 @@ - #include <qptrlist.h> - - #include <kdebug.h> -+#ifdef __FreeBSD__ -+#include <qdatetime.h> -+#include <qvaluelist.h> -+#endif - - class KProcess; - class KConfig; -@@ -112,6 +116,29 @@ ++++ src/device/k3bdevicemanager.h Tue May 11 22:57:03 2004 +@@ -112,6 +112,10 @@ class Private; Private* d; +#ifdef __FreeBSD__ -+ void bsd_scan_devices(bool sudo); -+ QDateTime m_lastRefresh; -+ class BSDDevice -+ { -+ public: -+ BSDDevice() : m_bus(-1), m_target(-1), m_lun(-1) {} -+ BSDDevice(const QString & name, const QString & passDevice, const QString & vendor, -+ const QString & product, const QString & revision, int bus, int target, int lun) : -+ m_name(name), m_passDevice(passDevice), m_vendor(vendor), m_product(product), -+ m_revision(revision), m_bus(bus), m_target(target), m_lun(lun) {} -+ BSDDevice(const BSDDevice & src) : -+ m_name(src.m_name), m_passDevice(src.m_passDevice), m_vendor(src.m_vendor), m_product(src.m_product), -+ m_revision(src.m_revision), m_bus(src.m_bus), m_target(src.m_target), m_lun(src.m_lun) {} -+ const BSDDevice & operator= (const BSDDevice & src) -+ { m_name = src.m_name; m_passDevice = src.m_passDevice; m_vendor = src.m_vendor; -+ m_product = src.m_product; m_revision = src.m_revision; m_bus = src.m_bus; m_target = src.m_target; -+ m_lun = src.m_lun; return *this; } -+ QString m_name, m_passDevice, m_vendor, m_product, m_revision; -+ int m_bus, m_target, m_lun; -+ }; -+ QValueList<BSDDevice> m_devices; ++ void bsd_scan_devices(); ++ CdDevice* addDevice( CdDevice* ); +#endif }; } diff --git a/sysutils/k3b-kde4/files/patch-src-device-k3bscsicommand.cpp b/sysutils/k3b-kde4/files/patch-src-device-k3bscsicommand.cpp index 6c11e8f5307f..f4814b46bbff 100644 --- a/sysutils/k3b-kde4/files/patch-src-device-k3bscsicommand.cpp +++ b/sysutils/k3b-kde4/files/patch-src-device-k3bscsicommand.cpp @@ -1,18 +1,5 @@ --- src/device/k3bscsicommand.cpp.orig Wed Jan 21 11:20:11 2004 -+++ src/device/k3bscsicommand.cpp Fri Feb 13 21:03:38 2004 -@@ -1,10 +1,10 @@ - /* - * -- * $Id: k3bscsicommand.cpp,v 1.4 2004/01/21 10:20:11 trueg Exp $ -+ * $Id: k3bscsicommand.cpp,v 1.3 2003/12/31 14:15:17 trueg Exp $ - * Copyright (C) 2003 Sebastian Trueg <trueg@k3b.org> - * - * This file is part of the K3b project. -- * Copyright (C) 1998-2004 Sebastian Trueg <trueg@k3b.org> -+ * Copyright (C) 1998-2003 Sebastian Trueg <trueg@k3b.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by ++++ src/device/k3bscsicommand.cpp Mon May 24 23:32:04 2004 @@ -58,13 +58,14 @@ @@ -34,7 +21,7 @@ K3bCdDevice::ScsiCommand::ScsiCommand( const K3bCdDevice::CdDevice* dev ) : m_device(dev) -@@ -135,6 +136,105 @@ +@@ -135,6 +136,155 @@ return 0; } @@ -65,42 +52,41 @@ +#include <sys/ioctl.h> + +K3bCdDevice::ScsiCommand::ScsiCommand( const K3bCdDevice::CdDevice* dev ) -+ : m_device(dev) ++ : closecam(true), m_device(dev) +{ -+ clear(); ++ cam = cam_open_pass (m_device->m_passDevice.latin1(),O_RDWR,NULL); ++ kdDebug() << "(K3bCdDevice::ScsiCommand) open device " << m_device->m_passDevice << ((cam)?" succeeded.":" failed.") << endl; ++ clear(); ++} ++ ++K3bCdDevice::ScsiCommand::ScsiCommand( const K3bCdDevice::CdDevice* dev, struct cam_device * c) ++ : closecam(false), cam(c), m_device(dev) ++{ ++ clear(); +} + +K3bCdDevice::ScsiCommand::~ScsiCommand() +{ -+ if(cam) ++ if(cam && closecam) ++ { + cam_close_device(cam); -+// if (m_fd >0) -+// close(m_fd); ++ kdDebug() << "(K3bCdDevice::ScsiCommand) device " << m_device->m_passDevice << " closed." << endl; ++ } +} + + +void K3bCdDevice::ScsiCommand::clear() +{ -+// char pass[32]; -+ cam=NULL; + memset (&ccb,0,sizeof(ccb)); -+ ccb.ccb_h.func_code = XPT_GDEVLIST; -+// if (ioctl (m_fd,CAMGETPASSTHRU,&ccb) < 0) return; -+// sprintf (pass,"/dev/%.15s%u",ccb.cgdl.periph_name,ccb.cgdl.unit_number); -+ cam = cam_open_pass (m_device->m_passDevice.latin1(),O_RDWR,NULL); -+ kdDebug() << "(K3bCdDevice::ScsiCommand) open device " << m_device->m_passDevice << ((cam)?" succeeded.":" failed.") << endl; ++ if (!cam) ++ return; ++ ccb.ccb_h.path_id = cam->path_id; ++ ccb.ccb_h.target_id = cam->target_id; ++ ccb.ccb_h.target_lun = cam->target_lun; +} + +unsigned char& K3bCdDevice::ScsiCommand::operator[]( size_t i ) +{ -+ if (!i && cam) -+ { -+ memset(&ccb,0,sizeof(ccb)); -+ ccb.ccb_h.path_id = cam->path_id; -+ ccb.ccb_h.target_id = cam->target_id; -+ ccb.ccb_h.target_lun = cam->target_lun; -+ cam_fill_csio (&(ccb.csio), 1, NULL, CAM_DEV_QFRZDIS, MSG_SIMPLE_Q_TAG, NULL, 0, sizeof(ccb.csio.sense_data), 0, 30*1000); -+ } + ccb.csio.cdb_len = i+1; + return ccb.csio.cdb_io.cdb_bytes[i]; +} @@ -114,26 +100,77 @@ + return -1; + kdDebug() << "(K3bCdDevice::ScsiCommand) transport command " << QString::number((int)ccb.csio.cdb_io.cdb_bytes[0], 16) << ", length: " << (int)ccb.csio.cdb_len << endl; + int ret=0; -+ ccb.csio.ccb_h.flags |= dir; -+ ccb.csio.data_ptr = (u_int8_t *)data; -+ ccb.csio.dxfer_len = len; ++ unsigned char command = ccb.csio.cdb_io.cdb_bytes[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 (&(ccb.csio), 1, NULL, direction | CAM_DEV_QFRZDIS, MSG_SIMPLE_Q_TAG, (u_int8_t *)data, len, sizeof(ccb.csio.sense_data), ccb.csio.cdb_len, 30*1000); ++ unsigned char * sense = (unsigned char *)&ccb.csio.sense_data; + if ((ret = cam_send_ccb(cam, &ccb)) < 0) + { + kdDebug() << "(K3bCdDevice::ScsiCommand) transport failed: " << ret << endl; -+ return -1; ++ goto dump_error; + } + if ((ccb.ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) -+ { -+ kdDebug() << "(K3bCdDevice::ScsiCommand) transport succeeded" << endl; -+ return 0; -+ } ++ return 0; ++ + errno = EIO; -+ ret = ERRCODE(((unsigned char *)&ccb.csio.sense_data)); ++ // 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 ((ccb.csio.scsi_status==SCSI_STATUS_CHECK_COND) && ++ !(ccb.ccb_h.status&CAM_AUTOSNS_VALID)) ++ { ++ u_int8_t _sense[18]; ++ u_int32_t resid=ccb.csio.resid; ++ ++ memset(_sense,0,sizeof(_sense)); ++ ++ operator[](0) = 0x03; // REQUEST SENSE ++ ccb.csio.cdb_io.cdb_bytes[4] = sizeof(_sense); ++ ccb.csio.cdb_len = 6; ++ ccb.csio.ccb_h.flags |= CAM_DIR_IN|CAM_DIS_AUTOSENSE; ++ ccb.csio.data_ptr = _sense; ++ ccb.csio.dxfer_len = sizeof(_sense); ++ ccb.csio.sense_len = 0; ++ ret = cam_send_ccb(cam, &ccb); ++ ++ ccb.csio.resid = resid; ++ if (ret<0) ++ { ++ kdDebug() << "(K3bCdDevice::ScsiCommand) transport failed (2): " << ret << endl; ++ ret = -1; ++ goto dump_error; ++ } ++ if ((ccb.ccb_h.status&CAM_STATUS_MASK) != CAM_REQ_CMP) ++ { ++ kdDebug() << "(K3bCdDevice::ScsiCommand) transport failed (3): " << ret << endl; ++ errno=EIO,-1; ++ ret = -1; ++ goto dump_error; ++ } ++ ++ memcpy(sense,_sense,sizeof(_sense)); ++ } ++ ++ ret = ERRCODE(sense); ++ kdDebug() << "(K3bCdDevice::ScsiCommand) transport failed (4): " << ret << endl; + if (ret == 0) + ret = -1; + else + CREAM_ON_ERRNO(((unsigned char *)&ccb.csio.sense_data)); -+ kdDebug() << "(K3bCdDevice::ScsiCommand) transport failed (2): " << ret << endl; ++dump_error: ++ kdDebug() << "(K3bCdDevice::ScsiCommand) failed: " << endl ++ << " command: " << QString("%1 (%2)") ++ .arg( MMC::commandString( ccb.csio.cdb_io.cdb_bytes[0] ) ) ++ .arg( QString::number(ccb.csio.cdb_io.cdb_bytes[0], 16) ) << endl ++ << " errorcode: " << QString::number(((struct scsi_sense_data *)sense)->error_code & SSD_ERRCODE, 16) << endl ++ << " sense key: " << senseKeyToString(((struct scsi_sense_data *)sense)->flags & SSD_KEY) << endl ++ << " asc: " << QString::number(((struct scsi_sense_data *)sense)->add_sense_code, 16) << endl ++ << " ascq: " << QString::number(((struct scsi_sense_data *)sense)->add_sense_code_qual, 16) << endl; ++ + return ret; +} +#endif diff --git a/sysutils/k3b-kde4/files/patch-src-device-k3bscsicommand.h b/sysutils/k3b-kde4/files/patch-src-device-k3bscsicommand.h index 06cebf91dd79..e50cd874fde6 100644 --- a/sysutils/k3b-kde4/files/patch-src-device-k3bscsicommand.h +++ b/sysutils/k3b-kde4/files/patch-src-device-k3bscsicommand.h @@ -1,18 +1,5 @@ --- src/device/k3bscsicommand.h.orig Wed Jan 21 11:20:11 2004 -+++ src/device/k3bscsicommand.h Fri Feb 13 21:03:38 2004 -@@ -1,10 +1,10 @@ - /* - * -- * $Id: k3bscsicommand.h,v 1.3 2004/01/21 10:20:11 trueg Exp $ -+ * $Id: k3bscsicommand.h,v 1.2 2003/12/19 19:40:40 trueg Exp $ - * Copyright (C) 2003 Sebastian Trueg <trueg@k3b.org> - * - * This file is part of the K3b project. -- * Copyright (C) 1998-2004 Sebastian Trueg <trueg@k3b.org> -+ * Copyright (C) 1998-2003 Sebastian Trueg <trueg@k3b.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by ++++ src/device/k3bscsicommand.h Tue May 11 22:57:03 2004 @@ -17,9 +17,27 @@ #define _K3B_SCSI_COMMAND_H_ @@ -41,24 +28,7 @@ #include <qstring.h> -@@ -87,16 +105,24 @@ - } - - -+#ifndef __FreeBSD__ - enum TransportDirection { - TR_DIR_NONE, - TR_DIR_READ, - TR_DIR_WRITE - }; -+#else -+ enum TransportDirection { -+ TR_DIR_NONE = 0, -+ TR_DIR_READ = CAM_DIR_IN, -+ TR_DIR_WRITE = CAM_DIR_OUT -+ }; -+#endif - +@@ -96,7 +114,7 @@ class ScsiCommand { public: @@ -67,7 +37,7 @@ ScsiCommand( const CdDevice* ); ~ScsiCommand(); -@@ -109,9 +135,13 @@ +@@ -109,10 +127,16 @@ size_t len = 0 ); private: @@ -76,9 +46,12 @@ struct request_sense m_sense; - +#else ++ ScsiCommand( const CdDevice* , struct cam_device *); ++ bool closecam; + struct cam_device *cam; + union ccb ccb; -+#endif int m_fd; ++#endif const CdDevice* m_device; bool m_needToCloseDevice; + }; diff --git a/sysutils/k3b-kde4/files/patch-src-rip-k3bdvdrippingprocess.cpp b/sysutils/k3b-kde4/files/patch-src-rip-k3bdvdrippingprocess.cpp new file mode 100644 index 000000000000..3406f0b1f2e2 --- /dev/null +++ b/sysutils/k3b-kde4/files/patch-src-rip-k3bdvdrippingprocess.cpp @@ -0,0 +1,16 @@ +--- src/rip/k3bdvdrippingprocess.cpp.orig Wed Jan 21 11:20:20 2004 ++++ src/rip/k3bdvdrippingprocess.cpp Tue May 11 22:57:03 2004 +@@ -278,10 +278,13 @@ + void K3bDvdRippingProcess::slotPreProcessingDvd() { + QString video; + QDir video_ts( m_mountPoint + "/VIDEO_TS"); ++#ifndef FreeBSD ++// on FreeBSD both /VIDEO_TS and /video_ts exist on dvd devices ?!? + if( video_ts.exists() ) { + m_udfMount = true; + kdDebug() << "(K3bDvdRippingProcess) <" << m_mountPoint << "> has UDF filesystem." << endl; + } ++#endif + video_ts.setPath( m_mountPoint + "/video_ts"); + if( !video_ts.exists() && !m_udfMount){ + m_preProcessingFailed = true; diff --git a/sysutils/k3b-kde4/files/patch-src-rip-k3bmovieview.cpp b/sysutils/k3b-kde4/files/patch-src-rip-k3bmovieview.cpp index cfd8f4e7c79a..214c1d362c8e 100644 --- a/sysutils/k3b-kde4/files/patch-src-rip-k3bmovieview.cpp +++ b/sysutils/k3b-kde4/files/patch-src-rip-k3bmovieview.cpp @@ -1,5 +1,5 @@ --- src/rip/k3bmovieview.cpp.orig Fri Feb 6 12:08:51 2004 -+++ src/rip/k3bmovieview.cpp Fri Feb 13 21:03:38 2004 ++++ src/rip/k3bmovieview.cpp Tue May 11 22:57:03 2004 @@ -223,8 +223,11 @@ } diff --git a/sysutils/k3b-kde4/files/patch-src-rip-k3btcwrapper.cpp b/sysutils/k3b-kde4/files/patch-src-rip-k3btcwrapper.cpp index 9ef70edca96a..3ea66527aaa7 100644 --- a/sysutils/k3b-kde4/files/patch-src-rip-k3btcwrapper.cpp +++ b/sysutils/k3b-kde4/files/patch-src-rip-k3btcwrapper.cpp @@ -1,5 +1,5 @@ --- src/rip/k3btcwrapper.cpp.orig Wed Jan 21 11:20:20 2004 -+++ src/rip/k3btcwrapper.cpp Fri Feb 13 21:03:38 2004 ++++ src/rip/k3btcwrapper.cpp Tue May 11 22:57:03 2004 @@ -65,7 +65,12 @@ //K3bProcess *p = new K3bProcess(); emit tcprobeTitleParsed( m_currentTitle ); @@ -13,3 +13,12 @@ //p->setSplitStdout( true ); connect( p, SIGNAL(receivedStderr(KProcess*, char*, int)), this, SLOT(slotParseTcprobeError(KProcess*, char*, int)) ); connect( p, SIGNAL(receivedStdout(KProcess*, char*, int)), this, SLOT(slotParseTcprobeOutput(KProcess*, char*, int)) ); +@@ -77,7 +82,7 @@ + if( !p->start( KProcess::NotifyOnExit, KProcess::AllOutput ) ) { + // something went wrong when starting the program + // it "should" be the executable +- kdDebug() << "(K3bDirView) Error during checking drive for DVD." << endl; ++ kdDebug() << "(K3bTcWrapper) Error during checking drive for DVD." << endl; + } + } + diff --git a/sysutils/k3b-kde4/pkg-message b/sysutils/k3b-kde4/pkg-message index fb5f51307cac..d28ebfa63e81 100644 --- a/sysutils/k3b-kde4/pkg-message +++ b/sysutils/k3b-kde4/pkg-message @@ -9,26 +9,18 @@ Notes: Alternatively do all of the following: 3a. set the suid flag on cdrecord and cdrdao. The 'Notes' the chapter of 'man cdrecord' discusses this. -3b. - install sudo (security/sudo) and add the following line or similar to - sudoers (usually in /usr/local/etc/sudoers): - ALL ALL = NOPASSWD: /sbin/camcontrol devlist - - or execute 'camcontrol devlist'. For every user who should be able to use - k3b. Resolve all errors e.g. by giving him/her access rights to /dev/xpt0. - 'camcontrol devlist' must run without error for all these users! - Note that giving access rights to /dev/xpt* might be a security leak! - - or give camcontrol the suid flag, which is a security leak as well. -3c. - For every user who should be able to use k3b and for every CD or DVD +3b. - For every user who should be able to use k3b and for every CD or DVD device add a directory in the users home directory. These directories must be owned by the corresponding user. For each such directory add a line in /ect/fstab (see remark 2), like: /dev/cd0c /usr/home/XXX/cdrom cd9660 ro,noauto,nodev,nosuid 0 0 Furthermore allow user mounts as described in topic 9.22 of the FAQ: http://www.freebsd.org/doc/en_US.ISO8859-1/books/faq/disks.html#USER-FLOPPYMOUNT - - or just give mount and umount the sudo flag, which is a security leak. -3d. - Every user who should be able to use k3b must have read and write access - to all pass through devices connected with CD and DVD drives. Run - 'camcontrol devlist' to identify those devices (seek string 'passX' at - the end of each line and modify the rights of /dev/passX). Note, that + - or just give mount and umount the suid flag, which is a security leak. +3c. - Every user who should be able to use k3b must have read and write access + to all pass through devices connected with CD and DVD drives and to the /dev/xpt0 + device. Run 'camcontrol devlist' to identify those devices (seek string 'passX' + at the end of each line and modify the rights of /dev/passX). Note, that this is a security leak as well but that there is no alternative! 4. Create a directory on a partition, which has enough disk space to hold a CDs or DVDs content (usually below /usr). Enter this directory in Settings-> @@ -40,14 +32,14 @@ Notes: work. See http://cdrdao.sourceforge.net/drives.html. 6. To burn video CDs install the port multimedia/vcdimager. 7. To rip DVDs additionally install the ports multimedia/transcode, - multimedia/libdvdread and multimedia/xvid. Note that multimedia/transcode - requires some variables to be set. Type "make fetch" in the - multimedia/transcode ports directory for details. The ripping process - itself is described in - http://k3b.sourceforge.net/cgi-bin/index.pl/videoencoding. + multimedia/libdvdread and multimedia/xvid. Note that k3b does NOT work with + transcode 0.6.12. 0.6.10 is the last known working version. The ripping process + itself is described in http://k3b.sourceforge.net/cgi-bin/index.pl/videoencoding. 8. To burn bootable video CDs, install the port multimedia/emovix. 9. To burn DVDs, install the port sysutils/dvd+rw-tools. 10. To normalize the volumes of audio cds, install the port audio/normalize. 11. To rip into more audio formats, install the port audio/sox. +UPGRADERS FROM 0.11.6 OR BELOW SHOULD NOTE THE CHANGED TOPIC 3C!!! + To read this instructions again, type 'make showinfo' in the k3b port directory diff --git a/sysutils/k3b-kde4/pkg-plist b/sysutils/k3b-kde4/pkg-plist index ee921880d623..8619a4eec1ed 100644 --- a/sysutils/k3b-kde4/pkg-plist +++ b/sysutils/k3b-kde4/pkg-plist @@ -35,6 +35,7 @@ include/k3bexternalbinmanager.h include/k3bfileitem.h include/k3bglobals.h include/k3binteractiondialog.h +include/k3bintvalidator.h include/k3biso9660.h include/k3bisooptions.h include/k3bjob.h diff --git a/sysutils/k3b/Makefile b/sysutils/k3b/Makefile index 7601b89875f6..7c18bbbb8c88 100644 --- a/sysutils/k3b/Makefile +++ b/sysutils/k3b/Makefile @@ -6,8 +6,7 @@ # PORTNAME= k3b -PORTVERSION= 0.11.6 -PORTREVISION= 1 +PORTVERSION= 0.11.9 CATEGORIES= sysutils multimedia kde MASTER_SITES= ${MASTER_SITE_SOURCEFORGE} MASTER_SITE_SUBDIR= ${PORTNAME} @@ -19,6 +18,7 @@ RUN_DEPENDS= cdrecord:${PORTSDIR}/sysutils/cdrtools \ cdrdao:${PORTSDIR}/sysutils/cdrdao \ mkisofs:${PORTSDIR}/sysutils/mkisofs LIB_DEPENDS= mad:${PORTSDIR}/audio/libmad \ + id3tag:${PORTSDIR}/audio/libid3tag \ vorbis:${PORTSDIR}/audio/libvorbis \ FLAC:${PORTSDIR}/audio/flac diff --git a/sysutils/k3b/distinfo b/sysutils/k3b/distinfo index e5a440541f5b..f87a9ba30f2e 100644 --- a/sysutils/k3b/distinfo +++ b/sysutils/k3b/distinfo @@ -1 +1,2 @@ -MD5 (k3b-0.11.6.tar.bz2) = 0015b9ad457713425464dbdad6a15ab9 +MD5 (k3b-0.11.9.tar.bz2) = 88f46a5cfbda5fa89b4bfee504567df1 +SIZE (k3b-0.11.9.tar.bz2) = 3217141 diff --git a/sysutils/k3b/files/patch-src-Makefile.in b/sysutils/k3b/files/patch-src-Makefile.in index bf6506bc152a..c3dd4bab796b 100644 --- a/sysutils/k3b/files/patch-src-Makefile.in +++ b/sysutils/k3b/files/patch-src-Makefile.in @@ -1,6 +1,6 @@ ---- src/Makefile.in.orig Sun Feb 29 19:38:32 2004 -+++ src/Makefile.in Mon Mar 8 15:40:08 2004 -@@ -286,7 +286,7 @@ +--- src/Makefile.in.orig Mon Mar 29 20:04:54 2004 ++++ src/Makefile.in Tue May 11 22:57:03 2004 +@@ -272,7 +272,7 @@ #>+ 1 k3b_SOURCES=k3bwelcomewidget.cpp k3bapplication.cpp k3bdiroperator.cpp kdndfileview.cpp k3bfiletreeview.cpp k3bcddbmultientriesdialog.cpp k3baudioplayer.cpp k3bprojecttabbar.cpp k3bprojecttabwidget.cpp k3bsplash.cpp k3bblankingdialog.cpp k3bfileview.cpp k3bdirview.cpp k3btoolbox.cpp k3b.cpp main.cpp k3bstatusbarmanager.cpp k3bfiletreecombobox.cpp k3breadcdreader.cpp k3binterface.cpp k3bprojectinterface.cpp k3bsystemproblemdialog.cpp k3bcdcontentsview.cpp k3bwriterspeedverificationdialog.cpp k3bdatatrackreader.cpp k3binterface_skel.cpp k3bprojectinterface_skel.cpp diff --git a/sysutils/k3b/files/patch-src-core-k3bdefaultexternalprograms.cpp b/sysutils/k3b/files/patch-src-core-k3bdefaultexternalprograms.cpp index 008a58d004fe..3fe07352d47f 100644 --- a/sysutils/k3b/files/patch-src-core-k3bdefaultexternalprograms.cpp +++ b/sysutils/k3b/files/patch-src-core-k3bdefaultexternalprograms.cpp @@ -1,6 +1,6 @@ ---- src/core/k3bdefaultexternalprograms.cpp.orig Wed Jan 21 11:20:10 2004 -+++ src/core/k3bdefaultexternalprograms.cpp Fri Feb 13 21:03:38 2004 -@@ -28,6 +28,7 @@ +--- src/core/k3bdefaultexternalprograms.cpp.orig Mon Mar 22 18:13:21 2004 ++++ src/core/k3bdefaultexternalprograms.cpp Tue May 11 22:57:03 2004 +@@ -30,6 +30,7 @@ #include <unistd.h> #include <sys/stat.h> #include <stdlib.h> @@ -8,7 +8,7 @@ -@@ -89,7 +90,7 @@ +@@ -123,7 +124,7 @@ K3bExternalBin* bin = 0; // probe version @@ -17,7 +17,7 @@ K3bProcess::OutputCollector out( &vp ); vp << path << "-version"; -@@ -128,7 +129,7 @@ +@@ -162,7 +163,7 @@ // probe features @@ -26,7 +26,7 @@ out.setProcess( &fp ); fp << path << "-help"; if( fp.start( KProcess::Block, KProcess::AllOutput ) ) { -@@ -200,7 +201,7 @@ +@@ -236,7 +237,7 @@ K3bExternalBin* bin = 0; // probe version @@ -35,7 +35,7 @@ K3bProcess::OutputCollector out( &vp ); vp << path << "-version"; -@@ -229,7 +230,7 @@ +@@ -265,7 +266,7 @@ // probe features @@ -44,7 +44,7 @@ out.setProcess( &fp ); fp << path << "-help"; if( fp.start( KProcess::Block, KProcess::AllOutput ) ) { -@@ -285,7 +286,7 @@ +@@ -321,7 +322,7 @@ K3bExternalBin* bin = 0; // probe version @@ -53,7 +53,7 @@ vp << path << "-version"; K3bProcess::OutputCollector out( &vp ); if( vp.start( KProcess::Block, KProcess::AllOutput ) ) { -@@ -313,7 +314,7 @@ +@@ -349,7 +350,7 @@ // probe features @@ -62,7 +62,7 @@ fp << path << "-help"; out.setProcess( &fp ); if( fp.start( KProcess::Block, KProcess::AllOutput ) ) { -@@ -374,7 +375,7 @@ +@@ -410,7 +411,7 @@ K3bExternalBin* bin = 0; // probe version @@ -71,7 +71,7 @@ vp << path << "-version"; K3bProcess::OutputCollector out( &vp ); if( vp.start( KProcess::Block, KProcess::AllOutput ) ) { -@@ -402,7 +403,7 @@ +@@ -438,7 +439,7 @@ // probe features @@ -80,7 +80,7 @@ fp << path << "-help"; out.setProcess( &fp ); if( fp.start( KProcess::Block, KProcess::AllOutput ) ) { -@@ -462,7 +463,7 @@ +@@ -498,7 +499,7 @@ K3bExternalBin* bin = 0; // probe version @@ -89,7 +89,7 @@ vp << path ; K3bProcess::OutputCollector out( &vp ); if( vp.start( KProcess::Block, KProcess::AllOutput ) ) { -@@ -490,7 +491,7 @@ +@@ -530,7 +531,7 @@ // probe features @@ -98,7 +98,7 @@ fp << path << "write" << "-h"; out.setProcess( &fp ); if( fp.start( KProcess::Block, KProcess::AllOutput ) ) { -@@ -556,7 +557,7 @@ +@@ -599,7 +600,7 @@ K3bExternalBin* bin = 0; // probe version @@ -107,7 +107,7 @@ vp << path ; K3bProcess::OutputCollector out( &vp ); if( vp.start( KProcess::Block, KProcess::AllOutput ) ) { -@@ -610,7 +611,7 @@ +@@ -653,7 +654,7 @@ K3bExternalBin* bin = 0; // probe version @@ -116,7 +116,7 @@ vp << path << "-V"; K3bProcess::OutputCollector out( &vp ); if( vp.start( KProcess::Block, KProcess::AllOutput ) ) { -@@ -667,7 +668,7 @@ +@@ -710,7 +711,7 @@ K3bExternalBin* bin = 0; // probe version @@ -125,7 +125,7 @@ K3bProcess::OutputCollector out( &vp ); vp << path << "--version"; -@@ -726,7 +727,7 @@ +@@ -769,7 +770,7 @@ K3bExternalBin* bin = 0; // probe version @@ -134,7 +134,7 @@ K3bProcess::OutputCollector out( &vp ); vp << path << "-version"; -@@ -795,7 +796,7 @@ +@@ -838,7 +839,7 @@ K3bExternalBin* bin = 0; // probe version @@ -143,7 +143,7 @@ K3bProcess::OutputCollector out( &vp ); vp << path; -@@ -868,7 +869,7 @@ +@@ -911,7 +912,7 @@ K3bExternalBin* bin = 0; // probe version diff --git a/sysutils/k3b/files/patch-src-core-k3bprocess.cpp b/sysutils/k3b/files/patch-src-core-k3bprocess.cpp index 14543eb14ea8..425eec00ad79 100644 --- a/sysutils/k3b/files/patch-src-core-k3bprocess.cpp +++ b/sysutils/k3b/files/patch-src-core-k3bprocess.cpp @@ -1,5 +1,5 @@ --- src/core/k3bprocess.cpp.orig Sun Feb 1 09:18:58 2004 -+++ src/core/k3bprocess.cpp Fri Feb 13 21:03:38 2004 ++++ src/core/k3bprocess.cpp Tue May 11 22:57:03 2004 @@ -28,6 +28,60 @@ #include <unistd.h> #include <stdio.h> diff --git a/sysutils/k3b/files/patch-src-core-k3bprocess.h b/sysutils/k3b/files/patch-src-core-k3bprocess.h index f4f96946d694..10fae690100f 100644 --- a/sysutils/k3b/files/patch-src-core-k3bprocess.h +++ b/sysutils/k3b/files/patch-src-core-k3bprocess.h @@ -1,5 +1,5 @@ --- src/core/k3bprocess.h.orig Tue Jan 27 09:19:13 2004 -+++ src/core/k3bprocess.h Fri Feb 13 21:03:38 2004 ++++ src/core/k3bprocess.h Tue May 11 22:57:03 2004 @@ -194,4 +194,21 @@ KProcess* m_process; }; diff --git a/sysutils/k3b/files/patch-src-device-k3bdevice.cpp b/sysutils/k3b/files/patch-src-device-k3bdevice.cpp index c3e8d0ce63d7..5315827ee675 100644 --- a/sysutils/k3b/files/patch-src-device-k3bdevice.cpp +++ b/sysutils/k3b/files/patch-src-device-k3bdevice.cpp @@ -1,5 +1,5 @@ ---- src/device/k3bdevice.cpp.orig Thu Feb 12 11:21:15 2004 -+++ src/device/k3bdevice.cpp Fri Feb 13 21:03:38 2004 +--- src/device/k3bdevice.cpp.orig Sun Mar 14 17:35:20 2004 ++++ src/device/k3bdevice.cpp Mon May 24 23:31:19 2004 @@ -56,6 +56,12 @@ #endif // Q_OS_LINUX @@ -24,3 +24,56 @@ // +@@ -192,6 +200,7 @@ + unsigned char header[2048]; + ::memset( header, 0, 2048 ); + ++ cmd.clear(); + cmd[0] = MMC::GET_CONFIGURATION; + cmd[8] = 8; + if( cmd.transport( TR_DIR_READ, header, 8 ) ) { +@@ -733,6 +742,14 @@ + m_bufferSize = 1024; + d->burnfree = false; + } ++ else if( description().startsWith("CD-R56S") ) { ++ m_writeModes |= TAO; ++ d->deviceType |= CDROM|CDR; ++ m_maxWriteSpeed = 6; ++ m_maxReadSpeed = 24; ++ m_bufferSize = 1302; ++ d->burnfree = false; ++ } + } + else if( vendor().startsWith("MATSHITA") ) { + if( description().startsWith("CD-R CW-7501") ) { +@@ -2317,10 +2334,12 @@ + { + // if the device is already opened we do not close it + // to allow fast multible method calls in a row ++#ifndef __FreeBSD__ + bool needToClose = !isOpen(); + + if (open() < 0) + return; ++#endif + + // header size is 8 + unsigned char* buffer = 0; +@@ -2406,13 +2425,16 @@ + delete [] buffer; + } + ++#ifndef __FreeBSD__ + if( needToClose ) + close(); ++#endif + } + + + bool K3bCdDevice::CdDevice::readTocPmaAtip( unsigned char** data, int& dataLen, int format, bool time, int track ) const + { ++ kdDebug() << "(K3bCdDevice::CdDevice) readTocPmaAtip started, format:" << format << ", time: " << time << ", track: " << track << endl; + unsigned char header[2048]; + ::memset( header, 0, 2048 ); + diff --git a/sysutils/k3b/files/patch-src-device-k3bdevice.h b/sysutils/k3b/files/patch-src-device-k3bdevice.h index ecb893f0d514..836458ced45e 100644 --- a/sysutils/k3b/files/patch-src-device-k3bdevice.h +++ b/sysutils/k3b/files/patch-src-device-k3bdevice.h @@ -1,6 +1,6 @@ ---- src/device/k3bdevice.h.orig Fri Jan 30 11:28:15 2004 -+++ src/device/k3bdevice.h Fri Feb 13 21:03:38 2004 -@@ -654,6 +654,10 @@ +--- src/device/k3bdevice.h.orig Sun Mar 14 17:35:20 2004 ++++ src/device/k3bdevice.h Tue May 11 22:57:03 2004 +@@ -661,6 +661,10 @@ class Private; Private* d; diff --git a/sysutils/k3b/files/patch-src-device-k3bdevicemanager.cpp b/sysutils/k3b/files/patch-src-device-k3bdevicemanager.cpp index 75ba9c14b38f..7b40314e293a 100644 --- a/sysutils/k3b/files/patch-src-device-k3bdevicemanager.cpp +++ b/sysutils/k3b/files/patch-src-device-k3bdevicemanager.cpp @@ -1,5 +1,5 @@ ---- src/device/k3bdevicemanager.cpp.orig Wed Jan 21 11:20:10 2004 -+++ src/device/k3bdevicemanager.cpp Fri Feb 13 21:03:38 2004 +--- src/device/k3bdevicemanager.cpp.orig Sun Feb 29 13:52:41 2004 ++++ src/device/k3bdevicemanager.cpp Tue May 11 22:57:03 2004 @@ -49,6 +49,12 @@ #include <sys/stat.h> #include <sys/ioctl.h> @@ -13,7 +13,7 @@ #ifdef Q_OS_LINUX -@@ -196,6 +202,22 @@ +@@ -196,6 +202,13 @@ { m_foundDevices = 0; @@ -22,21 +22,12 @@ +// and asks their properties. If they are indeed cd drives, they are added to a device list. This does not work +// on FreeBSD (no corresponding ioctls). Here cdrecord is asked for a list of scsi device, which work as cd +// drives. The device points of those devices are added to the device list. -+ bsd_scan_devices(false); -+ kdDebug() << "(K3bDeviceManager) analyze found device" << endl; -+ for ( QValueList<BSDDevice>::iterator it = m_devices.begin(); it != m_devices.end(); ++it ) -+ { -+ if( addDevice( (*it).m_name ) ) -+ { -+ kdDebug() << "(K3bDeviceManager) Device " << (*it).m_name << " added" << endl; -+ m_foundDevices++; -+ } -+ } ++ bsd_scan_devices(); +#else QFile info("/proc/sys/dev/cdrom/info"); QString line,devstring; info.open(IO_ReadOnly); -@@ -286,6 +308,7 @@ +@@ -286,6 +299,7 @@ // m_foundDevices++; // } @@ -44,7 +35,7 @@ scanFstab(); return m_foundDevices; -@@ -427,6 +450,7 @@ +@@ -427,6 +441,7 @@ bool K3bCdDevice::DeviceManager::testForCdrom(const QString& devicename) { bool ret = false; @@ -52,7 +43,7 @@ int cdromfd = K3bCdDevice::openDevice( devicename.ascii() ); if (cdromfd < 0) { kdDebug() << "could not open device " << devicename << " (" << strerror(errno) << ")" << endl; -@@ -467,11 +491,51 @@ +@@ -467,11 +482,36 @@ } ::close( cdromfd ); @@ -66,45 +57,30 @@ +// this piece of code extracts some device parameter, like scsi or ide device. The whole process +// fails on FreeBSD. Here the device name is simply looked up in a list of devices found by a +// call of cdrecord --scanbus. -+ K3bDevice* device = 0; -+ if (!m_lastRefresh.isValid()) -+ bsd_scan_devices(false); -+ bool found = false; -+ for ( QValueList<BSDDevice>::iterator it = m_devices.begin(); it != m_devices.end(); ++it ) -+ { -+ if( (*it).m_name == devicename ) -+ { -+ device = new K3bDevice((*it).m_name.latin1()); -+ device->m_bus = (*it).m_bus; -+ device->m_target = (*it).m_target; -+ device->m_lun = (*it).m_lun; -+ device->m_passDevice = (*it).m_passDevice; -+ device->m_vendor = (*it).m_vendor; -+ device->m_description = (*it).m_product; -+ device->m_version = (*it).m_revision; -+ found = true; -+ break; -+ } -+ } -+ if (!found) -+ { ++ K3bDevice* device = findDevice(devicename); ++ if (device) ++ return 0; + // resolve all symlinks + QString resolved = resolveSymLink( devicename ); + kdDebug() << "(K3bDeviceManager) " << devicename << " resolved to " << resolved << endl; -+ int bus, target, lun; -+ if( K3bDevice* oldDev = findDevice( bus, target, lun ) ) ++ if( K3bDevice* oldDev = findDevice( resolved ) ) + { -+ kdDebug() << "(K3bDeviceManager) dev already found" << endl; -+ oldDev->addDeviceNode( resolved ); ++ kdDebug() << "(K3bDeviceManager) dev already found" << endl; ++ oldDev->addDeviceNode( resolved ); ++ return 0; + } -+ return 0; -+ } ++ device = new K3bDevice(resolved.latin1()); ++ return addDevice( device ); ++} + ++K3bDevice* K3bCdDevice::DeviceManager::addDevice( CdDevice* device ) ++{ ++ const QString devicename = device->devicename(); +#else K3bDevice* device = 0; // resolve all symlinks -@@ -503,6 +567,7 @@ +@@ -503,6 +543,7 @@ device->m_target = target; device->m_lun = lun; } @@ -112,7 +88,7 @@ if( !device->init() ) { kdDebug() << "Could not initialize device " << devicename << endl; -@@ -578,9 +643,20 @@ +@@ -578,9 +619,20 @@ if( K3bDevice* dev = findDevice( resolveSymLink(md) ) ) { @@ -133,7 +109,7 @@ dev->setMountDevice( md ); dev->m_supermount = supermount; } -@@ -589,6 +665,8 @@ +@@ -589,6 +641,8 @@ { // compare bus, id, lun since the same device can for example be // determined as /dev/srX or /dev/scdX @@ -142,7 +118,7 @@ int bus = -1, id = -1, lun = -1; if( determineBusIdLun( mountInfo->fs_spec, bus, id, lun ) ) { if( K3bDevice* dev = findDevice( bus, id, lun ) ) { -@@ -599,6 +677,17 @@ +@@ -599,6 +653,17 @@ } } } @@ -160,129 +136,134 @@ } -@@ -673,5 +762,126 @@ +@@ -674,5 +739,131 @@ return QString::fromLatin1( resolved ); } + +#ifdef __FreeBSD__ -+// Calls "camcontrol devlist" to get a list of all available cd devices. -+// The sudo flag indicates, that "camcontrol devlist" should be -+// called. This is tried, if bsd_scan_devices(false) fails. -+// The result of the scan ist stored in m_devices. If within 3 -+// seconds after the last call to bsd_scan_devices this function -+// is called again, the last result is used (prevents to call -+// camcontrol several times within a short time). -+void K3bCdDevice::DeviceManager::bsd_scan_devices(bool sudo) ++#include <cam/cam.h> ++#include <cam/scsi/scsi_pass.h> ++#include <camlib.h> ++void K3bCdDevice::DeviceManager::bsd_scan_devices() +{ -+ QDateTime now = QDateTime::currentDateTime(); -+ if (m_lastRefresh.isValid() && m_lastRefresh.secsTo(now) < 3) -+ return; -+ m_lastRefresh = now; -+ m_devices.clear(); -+ kdDebug() << "(K3bDeviceManager) Scanning for devices: " << sudo << endl; -+ KTempFile tmpfile; -+ tmpfile.setAutoDelete(true); ++ union ccb ccb; ++ int fd, i; ++ int need_close = 0; ++ int skip_device = 0; ++ int bus, target, lun; ++ QString dev1, dev2; ++ ++ if ((fd = open(XPT_DEVICE, O_RDWR)) == -1) ++ { ++ kdDebug() << "couldn't open %s " << XPT_DEVICE << endl; ++ return; ++ } ++ ++ memset(&ccb, 0, sizeof(ccb)); ++ ++ ccb.ccb_h.func_code = XPT_DEV_MATCH; ++ char buffer[100*sizeof(struct dev_match_result)]; ++ ccb.cdm.match_buf_len = 100*sizeof(struct dev_match_result); ++ ccb.cdm.matches = (struct dev_match_result *)buffer; ++ ccb.cdm.num_matches = 0; ++ ccb.cdm.num_patterns = 0; ++ ccb.cdm.pattern_buf_len = 0; ++ do { ++ if (ioctl(fd, CAMIOCOMMAND, &ccb) == -1) { ++ kdDebug() << "(bsd_scan_devices) error sending CAMIOCOMMAND ioctl: " << errno << endl; ++ break; ++ } ++ ++ if ((ccb.ccb_h.status != CAM_REQ_CMP) ++ || ((ccb.cdm.status != CAM_DEV_MATCH_LAST) && (ccb.cdm.status != CAM_DEV_MATCH_MORE))) { ++ kdDebug() << "(bsd_scan_devices) got CAM error " << ccb.ccb_h.status << ", CDM error %d" << ccb.cdm.status << endl; ++ break; ++ } ++ kdDebug() << "(bsd_scan_devices) number of matches " << (int)ccb.cdm.num_matches << endl; ++ for (int i = 0; i < (int)ccb.cdm.num_matches; i++) { ++ switch (ccb.cdm.matches[i].type) { ++ case DEV_MATCH_DEVICE: { ++ struct device_match_result *dev_result = &ccb.cdm.matches[i].result.device_result; ++ ++ if (dev_result->flags & DEV_RESULT_UNCONFIGURED) ++ { ++ skip_device = 1; ++ break; ++ } ++ else ++ skip_device = 0; ++ if (need_close) ++ { ++ QString pass = dev1; ++ QString dev = "/dev/" + dev2; ++ if (dev2.startsWith("pass")) ++ { ++ pass = dev2; ++ dev = "/dev/" + dev1; ++ } ++#if __FreeBSD_version < 500100 ++ dev += "c"; ++#endif + -+ // create call -+ QString call = "/bin/sh -c \""; -+ if (sudo) -+ call += "sudo "; -+ call += "camcontrol devlist > " + tmpfile.name() + " 2>&1 \""; -+ kdDebug() << "(K3bDeviceManager) Reading device list : " << call << endl; -+ if (system(call.latin1())) -+ { -+ if (!sudo) -+ { -+ m_lastRefresh = m_lastRefresh.addDays(-1); -+ bsd_scan_devices(true); -+ } -+ return; -+ } ++ K3bDevice* device = new K3bDevice(dev.latin1()); ++ device->m_bus = bus; ++ device->m_target = target; ++ device->m_lun = lun; ++ device->m_passDevice = "/dev/" + pass; ++ kdDebug() << "(bsd_scan_devices) add device " << dev << ":" << bus << ":" << target << ":" << lun << endl; ++ addDevice(device); ++ need_close = 0; ++ } ++ bus = dev_result->path_id; ++ target = dev_result->target_id; ++ lun = dev_result->target_lun; + -+ // read tmp file line by line -+ QFile tmp (tmpfile.name()); -+ if ( tmp.open( IO_ReadOnly ) ) -+ { -+ QTextStream stream( &tmp ); -+ while ( !stream.eof() ) ++ need_close = 1; ++ ++ break; ++ } ++ case DEV_MATCH_PERIPH: { ++ struct periph_match_result *periph_result = &ccb.cdm.matches[i].result.periph_result; ++ ++ if (skip_device != 0) ++ break; ++ ++ if (need_close > 1) ++ dev1 = periph_result->periph_name + QString::number(periph_result->unit_number); ++ else ++ dev2 = periph_result->periph_name + QString::number(periph_result->unit_number); ++ ++ need_close++; ++ break; ++ } ++ } ++ } ++ ++ } while ((ccb.ccb_h.status == CAM_REQ_CMP) ++ && (ccb.cdm.status == CAM_DEV_MATCH_MORE)); ++ ++ if (need_close) + { -+ QString str = stream.readLine(); -+ if (!str.startsWith("<")) -+ continue; -+ str.remove(0,1); -+ int i = str.find(">"); -+ if (i < 0) -+ continue; -+ QStringList details = QStringList::split(" ", str.left(i)); -+ i = str.find("at scbus", i); -+ if (i < 0) -+ continue; -+ str.remove(0, i+8); -+ i = str.find(" "); -+ if (i < 0) -+ continue; -+ bool ok; -+ int bus = str.left(i).toInt(&ok); -+ if (!ok) -+ continue; -+ i = str.find("target ", i); -+ if (i < 0) -+ continue; -+ str.remove(0, i+7); -+ i = str.find(" "); -+ if (i < 0) -+ continue; -+ int target = str.left(i).toInt(&ok); -+ if (!ok) -+ continue; -+ i = str.find("lun ", i); -+ if (i < 0) -+ continue; -+ str.remove(0, i+4); -+ i = str.find(" "); -+ if (i < 0) -+ continue; -+ int lun = str.left(i).toInt(&ok); -+ if (!ok) -+ continue; -+ i = str.find("(", i); -+ if (i < 0) -+ continue; -+ str.remove(0, i+1); -+ i = str.find(","); -+ if (i < 0) -+ continue; -+ QString name = str.left(i); -+ str.remove(0, i+1); -+ i = str.find(")"); -+ if (i < 0) -+ continue; -+ QString pass = name; -+ if (name.startsWith("pass")) -+ name = str.left(i); -+ else -+ pass = str.left(i); -+ QString vendor, product, revision; -+ if (details.count() > 0) -+ revision = details.last(); -+ details.pop_back(); -+ if (details.count() > 0) -+ product = details.last(); -+ details.pop_back(); -+ if (details.count() > 0) -+ vendor = details.join(" "); -+ if (!name.startsWith("cd")) -+ continue; -+ kdDebug() << "(K3bDeviceManager) Found device " << name << ", pass = " << pass << ", bus = " << bus << ", target = " << target << ", lun = " << lun << endl; -+ kdDebug() << "(K3bDeviceManager) vendor: " << vendor << ", product: " << product << ", revision: " << revision << ", target = " << target << ", lun = " << lun << endl; -+#if __FreeBSD_version >= 500100 -+ m_devices.push_back(BSDDevice("/dev/" + name, "/dev/" + pass, vendor, product, revision, bus, target, lun)); -+#else -+ m_devices.push_back(BSDDevice("/dev/" + name + "c", "/dev/" + pass, vendor, product, revision, bus, target, lun)); ++ QString pass = dev1; ++ QString dev = "/dev/" + dev2; ++ if (dev2.startsWith("pass")) ++ { ++ pass = dev2; ++ dev = "/dev/" + dev1; ++ } ++#if __FreeBSD_version < 500100 ++ dev += "c"; +#endif -+ } -+ } ++ K3bDevice* device = new K3bDevice(dev.latin1()); ++ device->m_bus = bus; ++ device->m_target = target; ++ device->m_lun = lun; ++ device->m_passDevice = "/dev/" + pass; ++ kdDebug() << "(bsd_scan_devices) add device " << dev << ":" << bus << ":" << target << ":" << lun << endl; ++ addDevice(device); ++ } ++ close(fd); +} +#endif diff --git a/sysutils/k3b/files/patch-src-device-k3bdevicemanager.h b/sysutils/k3b/files/patch-src-device-k3bdevicemanager.h index 8d285e3ec035..eb08ec300f78 100644 --- a/sysutils/k3b/files/patch-src-device-k3bdevicemanager.h +++ b/sysutils/k3b/files/patch-src-device-k3bdevicemanager.h @@ -1,42 +1,12 @@ --- src/device/k3bdevicemanager.h.orig Wed Jan 21 11:20:11 2004 -+++ src/device/k3bdevicemanager.h Fri Feb 13 21:03:38 2004 -@@ -24,6 +24,10 @@ - #include <qptrlist.h> - - #include <kdebug.h> -+#ifdef __FreeBSD__ -+#include <qdatetime.h> -+#include <qvaluelist.h> -+#endif - - class KProcess; - class KConfig; -@@ -112,6 +116,29 @@ ++++ src/device/k3bdevicemanager.h Tue May 11 22:57:03 2004 +@@ -112,6 +112,10 @@ class Private; Private* d; +#ifdef __FreeBSD__ -+ void bsd_scan_devices(bool sudo); -+ QDateTime m_lastRefresh; -+ class BSDDevice -+ { -+ public: -+ BSDDevice() : m_bus(-1), m_target(-1), m_lun(-1) {} -+ BSDDevice(const QString & name, const QString & passDevice, const QString & vendor, -+ const QString & product, const QString & revision, int bus, int target, int lun) : -+ m_name(name), m_passDevice(passDevice), m_vendor(vendor), m_product(product), -+ m_revision(revision), m_bus(bus), m_target(target), m_lun(lun) {} -+ BSDDevice(const BSDDevice & src) : -+ m_name(src.m_name), m_passDevice(src.m_passDevice), m_vendor(src.m_vendor), m_product(src.m_product), -+ m_revision(src.m_revision), m_bus(src.m_bus), m_target(src.m_target), m_lun(src.m_lun) {} -+ const BSDDevice & operator= (const BSDDevice & src) -+ { m_name = src.m_name; m_passDevice = src.m_passDevice; m_vendor = src.m_vendor; -+ m_product = src.m_product; m_revision = src.m_revision; m_bus = src.m_bus; m_target = src.m_target; -+ m_lun = src.m_lun; return *this; } -+ QString m_name, m_passDevice, m_vendor, m_product, m_revision; -+ int m_bus, m_target, m_lun; -+ }; -+ QValueList<BSDDevice> m_devices; ++ void bsd_scan_devices(); ++ CdDevice* addDevice( CdDevice* ); +#endif }; } diff --git a/sysutils/k3b/files/patch-src-device-k3bscsicommand.cpp b/sysutils/k3b/files/patch-src-device-k3bscsicommand.cpp index 6c11e8f5307f..f4814b46bbff 100644 --- a/sysutils/k3b/files/patch-src-device-k3bscsicommand.cpp +++ b/sysutils/k3b/files/patch-src-device-k3bscsicommand.cpp @@ -1,18 +1,5 @@ --- src/device/k3bscsicommand.cpp.orig Wed Jan 21 11:20:11 2004 -+++ src/device/k3bscsicommand.cpp Fri Feb 13 21:03:38 2004 -@@ -1,10 +1,10 @@ - /* - * -- * $Id: k3bscsicommand.cpp,v 1.4 2004/01/21 10:20:11 trueg Exp $ -+ * $Id: k3bscsicommand.cpp,v 1.3 2003/12/31 14:15:17 trueg Exp $ - * Copyright (C) 2003 Sebastian Trueg <trueg@k3b.org> - * - * This file is part of the K3b project. -- * Copyright (C) 1998-2004 Sebastian Trueg <trueg@k3b.org> -+ * Copyright (C) 1998-2003 Sebastian Trueg <trueg@k3b.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by ++++ src/device/k3bscsicommand.cpp Mon May 24 23:32:04 2004 @@ -58,13 +58,14 @@ @@ -34,7 +21,7 @@ K3bCdDevice::ScsiCommand::ScsiCommand( const K3bCdDevice::CdDevice* dev ) : m_device(dev) -@@ -135,6 +136,105 @@ +@@ -135,6 +136,155 @@ return 0; } @@ -65,42 +52,41 @@ +#include <sys/ioctl.h> + +K3bCdDevice::ScsiCommand::ScsiCommand( const K3bCdDevice::CdDevice* dev ) -+ : m_device(dev) ++ : closecam(true), m_device(dev) +{ -+ clear(); ++ cam = cam_open_pass (m_device->m_passDevice.latin1(),O_RDWR,NULL); ++ kdDebug() << "(K3bCdDevice::ScsiCommand) open device " << m_device->m_passDevice << ((cam)?" succeeded.":" failed.") << endl; ++ clear(); ++} ++ ++K3bCdDevice::ScsiCommand::ScsiCommand( const K3bCdDevice::CdDevice* dev, struct cam_device * c) ++ : closecam(false), cam(c), m_device(dev) ++{ ++ clear(); +} + +K3bCdDevice::ScsiCommand::~ScsiCommand() +{ -+ if(cam) ++ if(cam && closecam) ++ { + cam_close_device(cam); -+// if (m_fd >0) -+// close(m_fd); ++ kdDebug() << "(K3bCdDevice::ScsiCommand) device " << m_device->m_passDevice << " closed." << endl; ++ } +} + + +void K3bCdDevice::ScsiCommand::clear() +{ -+// char pass[32]; -+ cam=NULL; + memset (&ccb,0,sizeof(ccb)); -+ ccb.ccb_h.func_code = XPT_GDEVLIST; -+// if (ioctl (m_fd,CAMGETPASSTHRU,&ccb) < 0) return; -+// sprintf (pass,"/dev/%.15s%u",ccb.cgdl.periph_name,ccb.cgdl.unit_number); -+ cam = cam_open_pass (m_device->m_passDevice.latin1(),O_RDWR,NULL); -+ kdDebug() << "(K3bCdDevice::ScsiCommand) open device " << m_device->m_passDevice << ((cam)?" succeeded.":" failed.") << endl; ++ if (!cam) ++ return; ++ ccb.ccb_h.path_id = cam->path_id; ++ ccb.ccb_h.target_id = cam->target_id; ++ ccb.ccb_h.target_lun = cam->target_lun; +} + +unsigned char& K3bCdDevice::ScsiCommand::operator[]( size_t i ) +{ -+ if (!i && cam) -+ { -+ memset(&ccb,0,sizeof(ccb)); -+ ccb.ccb_h.path_id = cam->path_id; -+ ccb.ccb_h.target_id = cam->target_id; -+ ccb.ccb_h.target_lun = cam->target_lun; -+ cam_fill_csio (&(ccb.csio), 1, NULL, CAM_DEV_QFRZDIS, MSG_SIMPLE_Q_TAG, NULL, 0, sizeof(ccb.csio.sense_data), 0, 30*1000); -+ } + ccb.csio.cdb_len = i+1; + return ccb.csio.cdb_io.cdb_bytes[i]; +} @@ -114,26 +100,77 @@ + return -1; + kdDebug() << "(K3bCdDevice::ScsiCommand) transport command " << QString::number((int)ccb.csio.cdb_io.cdb_bytes[0], 16) << ", length: " << (int)ccb.csio.cdb_len << endl; + int ret=0; -+ ccb.csio.ccb_h.flags |= dir; -+ ccb.csio.data_ptr = (u_int8_t *)data; -+ ccb.csio.dxfer_len = len; ++ unsigned char command = ccb.csio.cdb_io.cdb_bytes[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 (&(ccb.csio), 1, NULL, direction | CAM_DEV_QFRZDIS, MSG_SIMPLE_Q_TAG, (u_int8_t *)data, len, sizeof(ccb.csio.sense_data), ccb.csio.cdb_len, 30*1000); ++ unsigned char * sense = (unsigned char *)&ccb.csio.sense_data; + if ((ret = cam_send_ccb(cam, &ccb)) < 0) + { + kdDebug() << "(K3bCdDevice::ScsiCommand) transport failed: " << ret << endl; -+ return -1; ++ goto dump_error; + } + if ((ccb.ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) -+ { -+ kdDebug() << "(K3bCdDevice::ScsiCommand) transport succeeded" << endl; -+ return 0; -+ } ++ return 0; ++ + errno = EIO; -+ ret = ERRCODE(((unsigned char *)&ccb.csio.sense_data)); ++ // 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 ((ccb.csio.scsi_status==SCSI_STATUS_CHECK_COND) && ++ !(ccb.ccb_h.status&CAM_AUTOSNS_VALID)) ++ { ++ u_int8_t _sense[18]; ++ u_int32_t resid=ccb.csio.resid; ++ ++ memset(_sense,0,sizeof(_sense)); ++ ++ operator[](0) = 0x03; // REQUEST SENSE ++ ccb.csio.cdb_io.cdb_bytes[4] = sizeof(_sense); ++ ccb.csio.cdb_len = 6; ++ ccb.csio.ccb_h.flags |= CAM_DIR_IN|CAM_DIS_AUTOSENSE; ++ ccb.csio.data_ptr = _sense; ++ ccb.csio.dxfer_len = sizeof(_sense); ++ ccb.csio.sense_len = 0; ++ ret = cam_send_ccb(cam, &ccb); ++ ++ ccb.csio.resid = resid; ++ if (ret<0) ++ { ++ kdDebug() << "(K3bCdDevice::ScsiCommand) transport failed (2): " << ret << endl; ++ ret = -1; ++ goto dump_error; ++ } ++ if ((ccb.ccb_h.status&CAM_STATUS_MASK) != CAM_REQ_CMP) ++ { ++ kdDebug() << "(K3bCdDevice::ScsiCommand) transport failed (3): " << ret << endl; ++ errno=EIO,-1; ++ ret = -1; ++ goto dump_error; ++ } ++ ++ memcpy(sense,_sense,sizeof(_sense)); ++ } ++ ++ ret = ERRCODE(sense); ++ kdDebug() << "(K3bCdDevice::ScsiCommand) transport failed (4): " << ret << endl; + if (ret == 0) + ret = -1; + else + CREAM_ON_ERRNO(((unsigned char *)&ccb.csio.sense_data)); -+ kdDebug() << "(K3bCdDevice::ScsiCommand) transport failed (2): " << ret << endl; ++dump_error: ++ kdDebug() << "(K3bCdDevice::ScsiCommand) failed: " << endl ++ << " command: " << QString("%1 (%2)") ++ .arg( MMC::commandString( ccb.csio.cdb_io.cdb_bytes[0] ) ) ++ .arg( QString::number(ccb.csio.cdb_io.cdb_bytes[0], 16) ) << endl ++ << " errorcode: " << QString::number(((struct scsi_sense_data *)sense)->error_code & SSD_ERRCODE, 16) << endl ++ << " sense key: " << senseKeyToString(((struct scsi_sense_data *)sense)->flags & SSD_KEY) << endl ++ << " asc: " << QString::number(((struct scsi_sense_data *)sense)->add_sense_code, 16) << endl ++ << " ascq: " << QString::number(((struct scsi_sense_data *)sense)->add_sense_code_qual, 16) << endl; ++ + return ret; +} +#endif diff --git a/sysutils/k3b/files/patch-src-device-k3bscsicommand.h b/sysutils/k3b/files/patch-src-device-k3bscsicommand.h index 06cebf91dd79..e50cd874fde6 100644 --- a/sysutils/k3b/files/patch-src-device-k3bscsicommand.h +++ b/sysutils/k3b/files/patch-src-device-k3bscsicommand.h @@ -1,18 +1,5 @@ --- src/device/k3bscsicommand.h.orig Wed Jan 21 11:20:11 2004 -+++ src/device/k3bscsicommand.h Fri Feb 13 21:03:38 2004 -@@ -1,10 +1,10 @@ - /* - * -- * $Id: k3bscsicommand.h,v 1.3 2004/01/21 10:20:11 trueg Exp $ -+ * $Id: k3bscsicommand.h,v 1.2 2003/12/19 19:40:40 trueg Exp $ - * Copyright (C) 2003 Sebastian Trueg <trueg@k3b.org> - * - * This file is part of the K3b project. -- * Copyright (C) 1998-2004 Sebastian Trueg <trueg@k3b.org> -+ * Copyright (C) 1998-2003 Sebastian Trueg <trueg@k3b.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by ++++ src/device/k3bscsicommand.h Tue May 11 22:57:03 2004 @@ -17,9 +17,27 @@ #define _K3B_SCSI_COMMAND_H_ @@ -41,24 +28,7 @@ #include <qstring.h> -@@ -87,16 +105,24 @@ - } - - -+#ifndef __FreeBSD__ - enum TransportDirection { - TR_DIR_NONE, - TR_DIR_READ, - TR_DIR_WRITE - }; -+#else -+ enum TransportDirection { -+ TR_DIR_NONE = 0, -+ TR_DIR_READ = CAM_DIR_IN, -+ TR_DIR_WRITE = CAM_DIR_OUT -+ }; -+#endif - +@@ -96,7 +114,7 @@ class ScsiCommand { public: @@ -67,7 +37,7 @@ ScsiCommand( const CdDevice* ); ~ScsiCommand(); -@@ -109,9 +135,13 @@ +@@ -109,10 +127,16 @@ size_t len = 0 ); private: @@ -76,9 +46,12 @@ struct request_sense m_sense; - +#else ++ ScsiCommand( const CdDevice* , struct cam_device *); ++ bool closecam; + struct cam_device *cam; + union ccb ccb; -+#endif int m_fd; ++#endif const CdDevice* m_device; bool m_needToCloseDevice; + }; diff --git a/sysutils/k3b/files/patch-src-rip-k3bdvdrippingprocess.cpp b/sysutils/k3b/files/patch-src-rip-k3bdvdrippingprocess.cpp new file mode 100644 index 000000000000..3406f0b1f2e2 --- /dev/null +++ b/sysutils/k3b/files/patch-src-rip-k3bdvdrippingprocess.cpp @@ -0,0 +1,16 @@ +--- src/rip/k3bdvdrippingprocess.cpp.orig Wed Jan 21 11:20:20 2004 ++++ src/rip/k3bdvdrippingprocess.cpp Tue May 11 22:57:03 2004 +@@ -278,10 +278,13 @@ + void K3bDvdRippingProcess::slotPreProcessingDvd() { + QString video; + QDir video_ts( m_mountPoint + "/VIDEO_TS"); ++#ifndef FreeBSD ++// on FreeBSD both /VIDEO_TS and /video_ts exist on dvd devices ?!? + if( video_ts.exists() ) { + m_udfMount = true; + kdDebug() << "(K3bDvdRippingProcess) <" << m_mountPoint << "> has UDF filesystem." << endl; + } ++#endif + video_ts.setPath( m_mountPoint + "/video_ts"); + if( !video_ts.exists() && !m_udfMount){ + m_preProcessingFailed = true; diff --git a/sysutils/k3b/files/patch-src-rip-k3bmovieview.cpp b/sysutils/k3b/files/patch-src-rip-k3bmovieview.cpp index cfd8f4e7c79a..214c1d362c8e 100644 --- a/sysutils/k3b/files/patch-src-rip-k3bmovieview.cpp +++ b/sysutils/k3b/files/patch-src-rip-k3bmovieview.cpp @@ -1,5 +1,5 @@ --- src/rip/k3bmovieview.cpp.orig Fri Feb 6 12:08:51 2004 -+++ src/rip/k3bmovieview.cpp Fri Feb 13 21:03:38 2004 ++++ src/rip/k3bmovieview.cpp Tue May 11 22:57:03 2004 @@ -223,8 +223,11 @@ } diff --git a/sysutils/k3b/files/patch-src-rip-k3btcwrapper.cpp b/sysutils/k3b/files/patch-src-rip-k3btcwrapper.cpp index 9ef70edca96a..3ea66527aaa7 100644 --- a/sysutils/k3b/files/patch-src-rip-k3btcwrapper.cpp +++ b/sysutils/k3b/files/patch-src-rip-k3btcwrapper.cpp @@ -1,5 +1,5 @@ --- src/rip/k3btcwrapper.cpp.orig Wed Jan 21 11:20:20 2004 -+++ src/rip/k3btcwrapper.cpp Fri Feb 13 21:03:38 2004 ++++ src/rip/k3btcwrapper.cpp Tue May 11 22:57:03 2004 @@ -65,7 +65,12 @@ //K3bProcess *p = new K3bProcess(); emit tcprobeTitleParsed( m_currentTitle ); @@ -13,3 +13,12 @@ //p->setSplitStdout( true ); connect( p, SIGNAL(receivedStderr(KProcess*, char*, int)), this, SLOT(slotParseTcprobeError(KProcess*, char*, int)) ); connect( p, SIGNAL(receivedStdout(KProcess*, char*, int)), this, SLOT(slotParseTcprobeOutput(KProcess*, char*, int)) ); +@@ -77,7 +82,7 @@ + if( !p->start( KProcess::NotifyOnExit, KProcess::AllOutput ) ) { + // something went wrong when starting the program + // it "should" be the executable +- kdDebug() << "(K3bDirView) Error during checking drive for DVD." << endl; ++ kdDebug() << "(K3bTcWrapper) Error during checking drive for DVD." << endl; + } + } + diff --git a/sysutils/k3b/pkg-message b/sysutils/k3b/pkg-message index fb5f51307cac..d28ebfa63e81 100644 --- a/sysutils/k3b/pkg-message +++ b/sysutils/k3b/pkg-message @@ -9,26 +9,18 @@ Notes: Alternatively do all of the following: 3a. set the suid flag on cdrecord and cdrdao. The 'Notes' the chapter of 'man cdrecord' discusses this. -3b. - install sudo (security/sudo) and add the following line or similar to - sudoers (usually in /usr/local/etc/sudoers): - ALL ALL = NOPASSWD: /sbin/camcontrol devlist - - or execute 'camcontrol devlist'. For every user who should be able to use - k3b. Resolve all errors e.g. by giving him/her access rights to /dev/xpt0. - 'camcontrol devlist' must run without error for all these users! - Note that giving access rights to /dev/xpt* might be a security leak! - - or give camcontrol the suid flag, which is a security leak as well. -3c. - For every user who should be able to use k3b and for every CD or DVD +3b. - For every user who should be able to use k3b and for every CD or DVD device add a directory in the users home directory. These directories must be owned by the corresponding user. For each such directory add a line in /ect/fstab (see remark 2), like: /dev/cd0c /usr/home/XXX/cdrom cd9660 ro,noauto,nodev,nosuid 0 0 Furthermore allow user mounts as described in topic 9.22 of the FAQ: http://www.freebsd.org/doc/en_US.ISO8859-1/books/faq/disks.html#USER-FLOPPYMOUNT - - or just give mount and umount the sudo flag, which is a security leak. -3d. - Every user who should be able to use k3b must have read and write access - to all pass through devices connected with CD and DVD drives. Run - 'camcontrol devlist' to identify those devices (seek string 'passX' at - the end of each line and modify the rights of /dev/passX). Note, that + - or just give mount and umount the suid flag, which is a security leak. +3c. - Every user who should be able to use k3b must have read and write access + to all pass through devices connected with CD and DVD drives and to the /dev/xpt0 + device. Run 'camcontrol devlist' to identify those devices (seek string 'passX' + at the end of each line and modify the rights of /dev/passX). Note, that this is a security leak as well but that there is no alternative! 4. Create a directory on a partition, which has enough disk space to hold a CDs or DVDs content (usually below /usr). Enter this directory in Settings-> @@ -40,14 +32,14 @@ Notes: work. See http://cdrdao.sourceforge.net/drives.html. 6. To burn video CDs install the port multimedia/vcdimager. 7. To rip DVDs additionally install the ports multimedia/transcode, - multimedia/libdvdread and multimedia/xvid. Note that multimedia/transcode - requires some variables to be set. Type "make fetch" in the - multimedia/transcode ports directory for details. The ripping process - itself is described in - http://k3b.sourceforge.net/cgi-bin/index.pl/videoencoding. + multimedia/libdvdread and multimedia/xvid. Note that k3b does NOT work with + transcode 0.6.12. 0.6.10 is the last known working version. The ripping process + itself is described in http://k3b.sourceforge.net/cgi-bin/index.pl/videoencoding. 8. To burn bootable video CDs, install the port multimedia/emovix. 9. To burn DVDs, install the port sysutils/dvd+rw-tools. 10. To normalize the volumes of audio cds, install the port audio/normalize. 11. To rip into more audio formats, install the port audio/sox. +UPGRADERS FROM 0.11.6 OR BELOW SHOULD NOTE THE CHANGED TOPIC 3C!!! + To read this instructions again, type 'make showinfo' in the k3b port directory diff --git a/sysutils/k3b/pkg-plist b/sysutils/k3b/pkg-plist index ee921880d623..8619a4eec1ed 100644 --- a/sysutils/k3b/pkg-plist +++ b/sysutils/k3b/pkg-plist @@ -35,6 +35,7 @@ include/k3bexternalbinmanager.h include/k3bfileitem.h include/k3bglobals.h include/k3binteractiondialog.h +include/k3bintvalidator.h include/k3biso9660.h include/k3bisooptions.h include/k3bjob.h |