Commit be0b21d3 authored by Urs Fleisch's avatar Urs Fleisch
Browse files

qmake files to build without KDE and from Windows

parent 8f8d91ce
#!/usr/bin/perl -W
# Configuration of Kid3 build.
use strict;
use File::Basename;
# Read all source files given in the parameter list and copy them to the
# current directory, replaceing i18n by tr and I18N_NOOP by QT_TR_NOOP.
sub createTranslateSources(@)
{
my @sources = @_;
foreach my $file (@sources) {
open IF, $file or die "Could not open $file: $!\n";
my $outfn = basename($file);
open OF, ">$outfn" or die "Could not create $outfn: $!\n";
while (<IF>) {
s/i18n\(/tr(/;
s/I18N_NOOP\(/QT_TR_NOOP(/;
print OF $_;
}
close OF;
close IF;
}
}
# Read all translations from a .po file, fill them into an associative
# array.
sub getPoTranslations($)
{
my $fn = shift;
my $msgid;
my $msgstr;
my $in_msgid = 0;
my $in_msgstr = 0;
my %trans;
open IF, $fn or die "Could not open $fn: $!\n";
while (<IF>) {
s/\r\n/\n/;
if (/^msgid "(.*)"$/) {
if ($msgid) {
$trans{$msgid} = $msgstr;
}
$msgid = $1;
$msgstr = "";
$in_msgid = 1;
$in_msgstr = 0;
}
if (/^msgstr "(.*)"$/) {
$msgstr = $1;
$in_msgid = 0;
$in_msgstr = 1;
}
if (/^"(.+)"$/) {
if ($in_msgid) {
$msgid .= $1;
} elsif ($in_msgstr) {
$msgstr .= $1;
}
}
}
close IF;
if ($msgid) {
$trans{$msgid} = $msgstr;
}
return %trans;
}
# Set the translations in a .ts file replacing & by &amp;, < by &lt; and > by &gt;.
sub setTsTranslations($$%)
{
my $infn = shift;
my $outfn = shift;
my %trans = @_;
my $source;
my $translation;
my $in_source = 0;
open IF, $infn or die "Could not open $infn: $!\n";
open OF, ">$outfn" or die "Could not create $outfn: $!\n";
while (<IF>) {
s/\r\n/\n/;
if (/<source>(.*)<\/source>/) {
$source = $1;
$in_source = 0;
} elsif (/<source>(.*)$/) {
$source = $1;
$in_source = 1;
} elsif ($in_source) {
if (/^(.*)<\/source>/) {
$source .= "\n$1";
$in_source = 0;
} else {
$source .= "\n$_";
}
} elsif (/<translation/) {
$source =~ s/&amp;/&/;
$source =~ s/&lt;/</;
$source =~ s/&gt;/>/;
$source =~ s/\n/\\n/;
if (exists $trans{$source}) {
$translation = $trans{$source};
$translation =~ s/&/&amp;/;
$translation =~ s/</&lt;/;
$translation =~ s/>/&gt;/;
$translation =~ s/\\n/\n/;
s/ type="unfinished"//;
s/<\/translation>/$translation<\/translation>/;
} else {
print "Could not find translation for \"$source\"\n";
}
}
print OF $_;
}
close OF;
close IF;
}
# Generate .ts files from .po files.
sub generateTs()
{
my @languages = ("de", "es", "fr", "ru");
my $tmpdir = ".tsdir";
mkdir $tmpdir unless -d $tmpdir;
mkdir "po" unless -d "po";
chdir $tmpdir or die "Could not change to $tmpdir: $!\n";
my @sources = glob "../" . dirname($0) . "/kid3/*.cpp";
createTranslateSources(@sources);
system "lupdate " . join ' ', glob "*.cpp" . " -ts ". join ' ', map { "kid3_". $_ . ".ts" } @languages;
foreach my $lang (@languages) {
setTsTranslations("kid3_$lang.ts", "../po/kid3_$lang.ts",
(getPoTranslations("../" . dirname($0) . "/po/$lang.po"),
getPoTranslations("../" . dirname($0) . "/kid3/${lang}_qt.po")));
}
unlink <*>;
chdir "..";
rmdir $tmpdir;
}
my $have_vorbis = 1;
my $have_flac = 1;
my $have_id3lib = 1;
my $have_taglib = 1;
my $have_tunepimp = 5;
my $qmake_cmd = "qmake";
my $enable_pch = 0;
my $enable_debug = 0;
my $prefix;
my $bindir;
my $datarootdir;
my $docdir;
my $translationsdir;
while (my $opt = shift) {
if ($opt eq "--without-vorbis") {
$have_vorbis = 0;
} elsif ($opt eq "--without-flac") {
$have_flac = 0;
} elsif ($opt eq "--without-id3lib") {
$have_id3lib = 0;
} elsif ($opt eq "--without-taglib") {
$have_taglib = 0;
} elsif ($opt eq "--without-musicbrainz") {
$have_tunepimp = 0;
} elsif (substr($opt, 0, 19) eq "--with-musicbrainz=") {
$have_tunepimp = substr($opt, 19);
} elsif (substr($opt, 0, 13) eq "--with-qmake=") {
$qmake_cmd = substr($opt, 13);
} elsif ($opt eq "--enable-pch") {
$enable_pch = 1;
} elsif ($opt eq "--enable-debug") {
$enable_debug = 1;
} elsif (substr($opt, 0, 9) eq "--prefix=") {
$prefix = substr($opt, 9);
} elsif (substr($opt, 0, 9) eq "--bindir=") {
$bindir = substr($opt, 9);
} elsif (substr($opt, 0, 14) eq "--datarootdir=") {
$datarootdir = substr($opt, 14);
} elsif (substr($opt, 0, 9) eq "--docdir=") {
$docdir = substr($opt, 9);
} elsif (substr($opt, 0, 18) eq "--translationsdir=") {
$translationsdir = substr($opt, 18);
} elsif ($opt eq "--generate-ts") {
generateTs();
} elsif ($opt eq "-h" or $opt eq "--help") {
print "Usage: $0 [OPTION]\nOptions [default]:\n";
print " --prefix=PREFIX install prefix [/usr/local]\n";
print " --bindir=DIR user executables [PREFIX/bin]\n";
print " --datarootdir=DIR data root [PREFIX/share]\n";
print " --docdir=DIR documentation [DATAROOTDIR/doc/kid3-qt]\n";
print " --translationsdir=DIR translations [DATAROOTDIR/kid3-qt/translations]\n";
print " --with-qmake=PROGRAM qmake command [qmake]\n";
print " --without-musicbrainz build without MusicBrainz\n";
print " --with-musicbrainz=VER build with MusicBrainz version [5]\n";
print " --without-taglib build without taglib\n";
print " --without-id3lib build without id3lib\n";
print " --without-vorbis build without ogg/vorbis\n";
print " --without-flac build without FLAC\n";
print " --enable-pch enable precompiled headers\n";
print " --enable-debug enables debug symbols\n";
print " --generate-ts generate ts from po translations\n";
exit 0;
}
}
if (!defined $prefix) {
$prefix = "/usr/local";
}
if (!defined $bindir) {
$bindir = $prefix . "/bin";
}
if (!defined $datarootdir) {
$datarootdir = $prefix . "/share";
}
if (!defined $docdir) {
$docdir = $datarootdir . "/doc/kid3-qt";
}
if (!defined $translationsdir) {
$translationsdir = $datarootdir . "/kid3-qt/translations";
}
my $config_h = "#define VERSION \"0.9\"\n";
my $config_pri;
if ($prefix) {
$config_h .= "#define CFG_PREFIX \"$prefix\"\n";
$config_pri .= "CFG_PREFIX = $prefix\n";
}
if ($bindir) {
$config_h .= "#define CFG_BINDIR \"$bindir\"\n";
$config_pri .= "CFG_BINDIR = $bindir\n";
}
if ($datarootdir) {
$config_h .= "#define CFG_DATAROOTDIR \"$datarootdir\"\n";
$config_pri .= "CFG_DATAROOTDIR = $datarootdir\n";
}
if ($docdir) {
$config_h .= "#define CFG_DOCDIR \"$docdir\"\n";
$config_pri .= "CFG_DOCDIR = $docdir\n";
}
if ($translationsdir) {
$config_h .= "#define CFG_TRANSLATIONSDIR \"$translationsdir\"\n";
$config_pri .= "CFG_TRANSLATIONSDIR = $translationsdir\n";
}
$config_pri .= "CFG_LIBS = ";
my $allsys_h = <<"EOF";
/* automatically generated by configure-kid3-qt.pl */
#ifndef ALLSYS_H
#define ALLSYS_H
#include <math.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <utime.h>
#include <sys/stat.h>
#ifdef __cplusplus
#include <cmath>
#include <cstdio>
EOF
if ($have_id3lib) {
$config_h .= "#define HAVE_ID3LIB $have_id3lib\n";
$config_pri .= "-lid3 ";
# $allsys_h .= "#include <id3.h>\n#include <id3/tag.h>\n";
}
if ($have_vorbis) {
$config_h .= "#define HAVE_VORBIS $have_vorbis\n";
$config_pri .= "-logg -lvorbisfile -lvorbis ";
$allsys_h .= "#include <ogg/ogg.h>\n#include <vorbis/codec.h>\n#include <vorbis/vorbisfile.h>\n";
}
if ($have_flac) {
$config_h .= "#define HAVE_FLAC $have_flac\n";
$config_pri .= "-lFLAC++ -lFLAC ";
$allsys_h .= "#include <FLAC++/metadata.h>\n";
}
if ($have_taglib) {
$config_h .= "#define HAVE_TAGLIB $have_taglib\n";
$config_pri .= "-ltag ";
}
if ($have_tunepimp) {
$config_h .= "#define HAVE_TUNEPIMP $have_tunepimp\n";
$config_pri .= "-ltunepimp ";
if ($have_tunepimp == 5) {
$allsys_h .= "#include <tunepimp-0.5/tp_c.h>\n";
} else {
$allsys_h .= "#include <tunepimp/tp_c.h>\n";
}
}
$config_pri .= "\nCFG_CONFIG = " .
($enable_debug ? "debug" : "release") .
($enable_pch ? " precompile_header\nCFG_PRECOMPILED_HEADER = allsys.h\n" : "\n");
$allsys_h .= <<"EOF";
#include <qaction.h>
#include <qapplication.h>
#include <qbitarray.h>
#include <qbuffer.h>
#include <qcheckbox.h>
#include <qclipboard.h>
#include <qcombobox.h>
#include <qcursor.h>
#include <qdatastream.h>
#include <qdialog.h>
#include <qdir.h>
#include <qdom.h>
#include <qfiledialog.h>
#include <qfile.h>
#include <qfileinfo.h>
#include <qframe.h>
#include <qgroupbox.h>
#include <qimage.h>
#include <qinputdialog.h>
#include <qlabel.h>
#include <qlayout.h>
#include <qlineedit.h>
#include <qmap.h>
#include <qmenubar.h>
#include <qmessagebox.h>
#include <qobject.h>
#include <qpainter.h>
#include <qpixmap.h>
#include <qprinter.h>
#include <qprocess.h>
#include <qprogressbar.h>
#include <qpushbutton.h>
#include <qregexp.h>
#include <qsettings.h>
#include <qspinbox.h>
#include <qsplitter.h>
#include <qstatusbar.h>
#include <qstring.h>
#include <qstringlist.h>
#include <qtextbrowser.h>
#include <qtextcodec.h>
#include <qtextedit.h>
#include <qtextstream.h>
#include <qtimer.h>
#include <qtooltip.h>
#include <qtranslator.h>
#include <qurl.h>
#include <qvalidator.h>
#endif
#endif
EOF
mkdir "kid3" unless -d "kid3";
my $fn = "kid3/config.h";
my $old_config_h;
if (open IF, "$fn") {
$old_config_h = join('', <IF>);
close IF;
}
if ($old_config_h and $old_config_h eq $config_h) {
print "keeping $fn\n";
} else {
open OF, ">$fn" or die "Cannot open $fn: $!\n";
print "creating $fn\n";
print OF "$config_h";
close OF;
}
$fn = "config.pri";
my $old_config_pri;
if (open IF, "$fn") {
$old_config_pri = join('', <IF>);
close IF;
}
if ($old_config_pri and $old_config_pri eq $config_pri) {
print "keeping $fn\n";
} else {
open OF, ">$fn" or die "Cannot open $fn: $!\n";
print "creating $fn\n";
print OF "$config_pri";
close OF;
}
if ($enable_pch) {
$fn = "kid3/allsys.h";
my $old_allsys_h;
if (open IF, "$fn") {
$old_allsys_h = join('', <IF>);
close IF;
}
if ($old_allsys_h and $old_allsys_h eq $allsys_h) {
print "keeping $fn\n";
} else {
open OF, ">$fn" or die "Cannot open $fn: $!\n";
print "creating $fn\n";
print OF "$allsys_h";
close OF;
}
}
if (open IF, dirname($0) . "/kid3/kid3.desktop") {
$fn = "kid3/kid3-qt.desktop";
open OF, ">$fn" or die "Cannot open $fn: $!\n";
while (<IF>) {
s/^Name=Kid3$/Name=Kid3-qt/;
s/^Exec=kid3.*$/Exec=kid3-qt/;
print OF $_;
}
print "creating $fn\n";
close OF;
close IF;
}
mkdir "doc" unless -d "doc";
$fn = "doc/fixdocbook.pl";
open OF, ">$fn" or die "Cannot open $fn: $!\n";
print OF <<"EOF";
#!/bin/perl -n
s/"-\\/\\/KDE\\/\\/DTD DocBook XML V4.1-Based Variant V1.0\\/\\/EN" "dtd\\/kdex.dtd"/"-\\/\\/OASIS\\/\\/DTD DocBook XML V4.1.2\\/\\/EN" "http:\\/\\/www.oasis-open.org\\/docbook\\/xml\\/4.1.2\\/docbookx.dtd"/;
s/<!ENTITY % German "INCLUDE">/<!ENTITY language "de">/;
s/<!ENTITY % English "INCLUDE">/<!ENTITY language "en">/;
s/ufleisch@/ufleisch at /g;
s/&FDLNotice;/<para><ulink url="http:\\/\\/www.gnu.org\\/licenses\\/licenses.html#FDL">FDL<\\/ulink><\\/para>/g;
s/&underFDL;/<para><ulink url="http:\\/\\/www.gnu.org\\/licenses\\/licenses.html#FDL">FDL<\\/ulink><\\/para>/g;
s/&underGPL;/<para><ulink url="http:\\/\\/www.gnu.org\\/licenses\\/licenses.html#GPL">GPL<\\/ulink><\\/para>/g;
s/&documentation.index;//g;
print;
EOF
print "creating $fn\n";
close OF;
print "starting $qmake_cmd\n";
system "$qmake_cmd " . dirname($0) . "/kid3-qt.pro";
if ($enable_pch) {
# qmake < Qt 4.2 generates a dependency requiring the precompiled header
# to be in the source tree, this is fixed here.
system "cd kid3; $qmake_cmd ../" . dirname($0) . "/kid3/kid3.pro; cd ..";
my $makefile_changed = 0;
if (open IF, "kid3/Makefile") {
if (open OF, ">kid3/Makefile.new") {
while (<IF>) {
if (s#^(.*\s)\S+kid3/(allsys\.h.*)$#$1$2#) {
$makefile_changed = 1;
}
print OF $_;
}
close OF;
}
close IF;
}
if ($makefile_changed) {
rename "kid3/Makefile", "kid3/Makefile.bak";
rename "kid3/Makefile.new", "kid3/Makefile";
print "fixed kid3/Makefile\n";
}
}
print "\nStart make now\n";
# qmake subdirectory project file
!include(../../config.pri) {
error("config.pri not found")
}
!include(../doc.pri) {
error("doc.pri not found")
}
HTML_FILES = kid3_${QMAKE_TARGET}.html
isEmpty(CFG_DOCDIR) {
unix:documentation.path = /.
win32:documentation.path = \.
} else {
documentation.path = $$CFG_DOCDIR
}
documentation.extra = $(INSTALL_FILE) $$HTML_FILES $(INSTALL_ROOT)$$CFG_DOCDIR
INSTALLS += documentation
# qmake project include file
win32 {
QMAKE_RUN_CC = @echo
QMAKE_RUN_CXX = @echo
QMAKE_LINK = @echo
}
!win32 {
QMAKE_RUN_CC = @echo > /dev/null
QMAKE_RUN_CXX = @echo > /dev/null
QMAKE_LINK = @echo > /dev/null
}
contains($$list($$[QT_VERSION]), 4.*) {
db2html.input = DOCBOOK_FILES
QMAKE_EXTRA_COMPILERS += db2html
DOCBOOK_FILES += index.docbook
} else {
db2html.input = SOURCES
QMAKE_EXTRA_UNIX_COMPILERS += db2html
SOURCES += index.docbook
}
db2html.output = kid3_${QMAKE_TARGET}.html
unix {
exists(/usr/bin/jw) {
db2html.commands = perl -n ../fixdocbook.pl <${QMAKE_FILE_NAME} >${QMAKE_FILE_BASE}.sgml; jw -f docbook -b html -u ${QMAKE_FILE_BASE}.sgml; mv ${QMAKE_FILE_BASE}.html ${QMAKE_FILE_OUT}
} else {
DOCBOOK_XSL = docbook.xsl
exists(/usr/share/xml/docbook/stylesheet/nwalsh/html/docbook.xsl) {
DOCBOOK_XSL = /usr/share/xml/docbook/stylesheet/nwalsh/html/docbook.xsl
} else:exists(/usr/share/apps/ksgmltools2/docbook/xsl/html/docbook.xsl) {
DOCBOOK_XSL = /usr/share/apps/ksgmltools2/docbook/xsl/html/docbook.xsl
}
exists(/usr/bin/xsltproc) {
db2html.commands = perl -n ../fixdocbook.pl <${QMAKE_FILE_NAME} | xsltproc $$DOCBOOK_XSL - >${QMAKE_FILE_OUT}
} else:exists(/usr/bin/xalan) {
db2html.commands = perl -n ../fixdocbook.pl <${QMAKE_FILE_NAME} | xalan -xsl $$DOCBOOK_XSL -out ${QMAKE_FILE_OUT}
} else {
db2html.commands = perl -n ../fixdocbook.pl <${QMAKE_FILE_NAME} | xsltproc $$DOCBOOK_XSL - >${QMAKE_FILE_OUT}
}
}
}
win32:db2html.commands = %MSYSDIR%\bin\perl -n ../fixdocbook.pl <${QMAKE_FILE_NAME} | %XSLTPROCDIR%\xsltproc --novalid --nonet %DOCBOOKDIR%\html\docbook.xsl - >${QMAKE_FILE_OUT}
PRE_TARGETDEPS = kid3_${QMAKE_TARGET}.html
# qmake subdirectory project file
!include(../../config.pri) {
error("config.pri not found")
}
!include(../doc.pri) {
error("doc.pri not found")
}
HTML_FILES = kid3_${QMAKE_TARGET}.html
isEmpty(CFG_DOCDIR) {
unix:documentation.path = /.
win32:documentation.path = \.
} else {
documentation.path = $$CFG_DOCDIR
}
documentation.extra = $(INSTALL_FILE) $$HTML_FILES $(INSTALL_ROOT)$$CFG_DOCDIR
INSTALLS += documentation
# qmake project file
CONFIG += release
RC_FILE = kid3win.rc
TEMPLATE = subdirs
SUBDIRS = kid3 doc/en doc/de po
# Qt project file for Kid3
win32 {
INCLUDEPATH = %MSYSDIR%\local\include %MSYSDIR%\local\include\taglib
DEFINES += ID3LIB_LINKOPTION=1 FLAC__NO_DLL
LIBS += -L%MSYSDIR%\local\lib
}
unix {
INCLUDEPATH = /usr/include/taglib
}
CONFIG += release
RC_FILE = kid3win.rc
TEMPLATE = app
QT = core gui network xml qt3support
LIBS += -lid3 -logg -lvorbisfile -lvorbis -lFLAC++ -lFLAC -ltag
kid3_SOURCES = filelist.cpp filelistitem.cpp framelist.cpp genres.cpp id3form.cpp kid3.cpp main.cpp mp3file.cpp standardtags.cpp configdialog.h configdialog.cpp exportdialog.h exportdialog.cpp formatconfig.h formatconfig.cpp formatbox.h formatbox.cpp importdialog.h importdialog.cpp importselector.h importselector.cpp importparser.h importparser.cpp generalconfig.h generalconfig.cpp importconfig.h importconfig.cpp miscconfig.h miscconfig.cpp freedbdialog.h freedbdialog.cpp freedbconfig.h freedbconfig.cpp freedbclient.h freedbclient.cpp rendirdialog.h rendirdialog.cpp dirlist.cpp taggedfile.cpp mp3framelist.cpp musicbrainzdialog.h musicbrainzdialog.cpp musicbrainzconfig.h musicbrainzconfig.cpp musicbrainzclient.h musicbrainzclient.cpp numbertracksdialog.h numbertracksdialog.cpp oggfile.cpp oggframelist.cpp vcedit.c flacfile.cpp flacframelist.cpp commandstable.cpp taglibfile.cpp taglibframelist.cpp urllinkframe.cpp unsynchronizedlyricsframe.cpp importsourceconfig.cpp importsourcedialog.cpp importsourceclient.cpp discogsdialog.cpp discogsclient.cpp discogsconfig.cpp musicbrainzreleasedialog.cpp musicbrainzreleaseclient.cpp externalprocess.cpp importtrackdata.cpp stringlistedit.cpp tracktypedialog.cpp tracktypeclient.cpp
kid3_HEADERS = configdialog.h exportdialog.h filelist.h filelistitem.h formatbox.h formatconfig.h framelist.h freedbclient.h freedbconfig.h freedbdialog.h generalconfig.h genres.h id3form.h importconfig.h importdialog.h importparser.h importselector.h kid3.h miscconfig.h mp3file.h rendirdialog.h standardtags.h dirlist.h taggedfile.h mp3framelist.h musicbrainzclient.h musicbrainzconfig.h musicbrainzdialog.h numbertracksdialog.h oggfile.h oggframelist.h vcedit.h flacfile.h flacframelist.h commandstable.h taglibfile.h taglibframelist.h urllinkframe.h unsynchronizedlyricsframe.h importsourceconfig.h importsourcedialog.h importsourceclient.h discogsdialog.h discogsclient.h discogsconfig.h musicbrainzreleasedialog.h musicbrainzreleaseclient.h qtcompatmac.h dirinfo.h externalprocess.h stringlistedit.h tracktypedialog.h tracktypeclient.h
for(s, kid3_SOURCES): SOURCES += ../kid3/$${s}
for(h, kid3_HEADERS): HEADERS += ../kid3/$${h}
config_h.target = config.h
config_h.depends = config.mk
win32 {
config_h.commands = %MSYSDIR%\bin\perl -ne \"print if (s/^([^$$LITERAL_HASH][^=\s]*)[\s=]+(.+)\$\$/$${LITERAL_HASH}define \1 \2/)\" config.mk >config.h
}
unix {
config_h.commands = perl -ne "print if (s/^([^$$LITERAL_HASH][^=\s]*)[\s=]+(.+)\$\$/$${LITERAL_HASH}define \1 \2/)" config.mk >config.h
}
PRE_TARGETDEPS += $$config_h.target
QMAKE_EXTRA_TARGETS += config_h
# qmake subdirectory project file
!include(../config.pri) {
error("config.pri not found")
}
win32 {
INCLUDEPATH = %MSYSDIR%\local\include %MSYSDIR%\local\include\taglib
DEFINES += ID3LIB_LINKOPTION=1 FLAC__NO_DLL
LIBS += -L%MSYSDIR%\local\lib
}
unix {
INCLUDEPATH = /usr/include/taglib $$PWD
}
CONFIG += release
win32:RC_FILE = ../kid3win.rc
TEMPLATE = app
QT = core gui network xml qt3support
LIBS += $$CFG_LIBS
CONFIG += $$CFG_CONFIG
PRECOMPILED_HEADER = $$CFG_PRECOMPILED_HEADER
SOURCES = filelist.cpp filelistitem.cpp framelist.cpp genres.cpp id3form.cpp kid3.cpp main.cpp mp3file.cpp standardtags.cpp configdialog.cpp exportdialog.cpp formatconfig.cpp formatbox.cpp importdialog.cpp importselector.cpp importparser.cpp generalconfig.cpp importconfig.cpp miscconfig.cpp freedbdialog.cpp freedbconfig.cpp freedbclient.cpp rendirdialog.cpp dirlist.cpp taggedfile.cpp mp3framelist.cpp musicbrainzdialog.cpp musicbrainzconfig.cpp musicbrainzclient.cpp numbertracksdialog.cpp oggfile.cpp oggframelist.cpp vcedit.c flacfile.cpp flacframelist.cpp commandstable.cpp taglibfile.cpp taglibframelist.cpp urllinkframe.cpp unsynchronizedlyricsframe.cpp importsourceconfig.cpp importsourcedialog.cpp importsourceclient.cpp discogsdialog.cpp discogsclient.cpp discogsconfig.cpp musicbrainzreleasedialog.cpp musicbrainzreleaseclient.cpp externalprocess.cpp importtrackdata.cpp stringlistedit.cpp tracktypedialog.cpp tracktypeclient.cpp