summaryrefslogtreecommitdiff
path: root/muse2
diff options
context:
space:
mode:
Diffstat (limited to 'muse2')
-rw-r--r--muse2/CMakeLists.txt3
-rw-r--r--muse2/ChangeLog4
-rw-r--r--muse2/al/CMakeLists.txt12
-rw-r--r--muse2/awl/CMakeLists.txt10
-rw-r--r--muse2/muse/CMakeLists.txt64
-rw-r--r--muse2/muse/app.cpp585
-rw-r--r--muse2/muse/arranger/CMakeLists.txt13
-rw-r--r--muse2/muse/cliplist/CMakeLists.txt12
-rw-r--r--muse2/muse/ctrl/CMakeLists.txt12
-rw-r--r--muse2/muse/driver/CMakeLists.txt16
-rw-r--r--muse2/muse/driver/audiodev.h1
-rw-r--r--muse2/muse/instruments/CMakeLists.txt12
-rw-r--r--muse2/muse/liste/CMakeLists.txt13
-rw-r--r--muse2/muse/main.cpp531
-rw-r--r--muse2/muse/marker/CMakeLists.txt13
-rw-r--r--muse2/muse/master/CMakeLists.txt14
-rw-r--r--muse2/muse/midiedit/CMakeLists.txt14
-rw-r--r--muse2/muse/mixer/CMakeLists.txt12
-rw-r--r--muse2/muse/mplugins/CMakeLists.txt17
-rw-r--r--muse2/muse/remote/CMakeLists.txt4
-rw-r--r--muse2/muse/waveedit/CMakeLists.txt13
-rw-r--r--muse2/muse/widgets/CMakeLists.txt12
-rw-r--r--muse2/synti/libsynti/CMakeLists.txt5
23 files changed, 772 insertions, 620 deletions
diff --git a/muse2/CMakeLists.txt b/muse2/CMakeLists.txt
index 2a48bbaf..1cb3ee6a 100644
--- a/muse2/CMakeLists.txt
+++ b/muse2/CMakeLists.txt
@@ -68,6 +68,9 @@ SET(MusE_VERSION "2.0.1")
SET(MusE_VERSION_FULL "2.0.1")
SET(MusE_INSTALL_NAME "muse-2.0")
+SET(MUSE_MODULES_DIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}/modules)
+SET(CMAKE_INSTALL_RPATH ${MUSE_MODULES_DIR})
+
EXEC_PROGRAM( svnversion
ARGS ${PROJECT_SOURCE_DIR}
OUTPUT_VARIABLE MusE_SVNVER )
diff --git a/muse2/ChangeLog b/muse2/ChangeLog
index 7e84d5a5..af85a702 100644
--- a/muse2/ChangeLog
+++ b/muse2/ChangeLog
@@ -3,7 +3,9 @@
*Feature: Added 'global opaqueness' (transparency) appearance setting. (Tim)
Currently only affects part colours.
TODO: Fix the darn black rectangle drawing. Apply the opaqueness to some other things.
- - Fixed arranger part drawing borders. Used QPen::setCosmetic(true) when drawing. (Tim)
+ - Fixed arranger part drawing borders. Used QPen::setCosmetic(true) when drawing. (Tim)
+ - Individual parts are now built as shared libraries. (Orcan)
+ - Moved main() and first degree relatives into main.cpp (Orcan)
18.12.2010:
- Fixed transport shortcuts not working in some windows or situations. (Tim)
Added event->ignore to PartCanvas::keyPress. Added setFocusPolicy() to WaveView, Master.
diff --git a/muse2/al/CMakeLists.txt b/muse2/al/CMakeLists.txt
index 12df9a72..6e2881b8 100644
--- a/muse2/al/CMakeLists.txt
+++ b/muse2/al/CMakeLists.txt
@@ -13,11 +13,21 @@ if (USE_SSE)
set(al_src ${al_src} dspSSE.cpp dspXMM.cpp)
endif (USE_SSE)
-add_library(al STATIC
+add_library(al SHARED
${al_src}
${PROJECT_BINARY_DIR}/all.h.pch
)
+install(TARGETS al DESTINATION ${MUSE_MODULES_DIR})
+
+target_link_libraries ( al
+ ${QT_LIBRARIES}
+ )
+
+set_target_properties( al
+ PROPERTIES OUTPUT_NAME muse_al
+ )
+
set_source_files_properties(
al.cpp sig.cpp xml.cpp dsp.cpp
dspXMM.cpp
diff --git a/muse2/awl/CMakeLists.txt b/muse2/awl/CMakeLists.txt
index 5ce5a93e..c9b0cc28 100644
--- a/muse2/awl/CMakeLists.txt
+++ b/muse2/awl/CMakeLists.txt
@@ -60,15 +60,23 @@ set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${SOURCE_FILES} CACHE INTERNAL "")
add_library (
awl
- STATIC
+ SHARED
${awl_src}
${PROJECT_BINARY_DIR}/all.h.pch
)
+target_link_libraries ( awl
+ ${QT_LIBRARIES}
+ al
+ )
+
set_target_properties( awl
PROPERTIES COMPILE_FLAGS "-fPIC -include ${PROJECT_BINARY_DIR}/all.h"
+ OUTPUT_NAME muse_awl
)
+install(TARGETS awl DESTINATION ${MUSE_MODULES_DIR})
+
# IF (APPLE)
# message("Not yet able to build awlplugin under OS X.")
# ELSE (APPLE)
diff --git a/muse2/muse/CMakeLists.txt b/muse2/muse/CMakeLists.txt
index 5091204e..9c8bbfb4 100644
--- a/muse2/muse/CMakeLists.txt
+++ b/muse2/muse/CMakeLists.txt
@@ -194,7 +194,7 @@ file (GLOB SOURCE_FILES
# trackinfo.cpp
ticksynth.h ticksynth.cpp
- vst.h vst.cpp
+ vst.h vst.cpp
dssihost.h dssihost.cpp
osc.cpp osc.h
stringparam.cpp stringparam.h
@@ -220,7 +220,6 @@ file (GLOB SOURCE_FILES
exportmidi.cpp
midifile.h midifile.cpp
xml.cpp xml.h
- icons.cpp icons.h
event.cpp event.h eventbase.h evdata.h
eventlist.cpp
midievent.h midievent.cpp
@@ -259,7 +258,19 @@ file (GLOB SOURCE_FILES
default_click.h
)
+file (GLOB MAIN_SOURCE_FILES
+ main.cpp
+ )
+
+file (GLOB ICONS_SOURCE_FILES
+ icons.cpp icons.h
+ )
+
add_executable ( muse
+ ${MAIN_SOURCE_FILES}
+ )
+
+add_library ( core SHARED
${muse_qrc_files}
${muse_moc_headers}
# ${muse_ui_headers}
@@ -267,8 +278,11 @@ add_executable ( muse
${SOURCE_FILES}
)
-set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${SOURCE_FILES} CACHE INTERNAL "")
+add_library ( icons SHARED
+ ${ICONS_SOURCE_FILES}
+ )
+set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${MAIN_SOURCE_FILES} ${SOURCE_FILES} CACHE INTERNAL "")
# AM_CXXFLAGS +=-DSVNVERSION=\"$(shell svnversion)\"
# EXEC_PROGRAM( svnversion
@@ -285,39 +299,35 @@ include_directories(
${CMAKE_CURRENT_BINARY_DIR}/instruments ${CMAKE_CURRENT_BINARY_DIR}/remote
)
-set_target_properties( muse
+set_target_properties( core
# PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h"
# PROPERTIES COMPILE_FLAGS "-Imidiedit -Iarranger -Iliste -Iwidgets -Imixer -Idriver -Iwaveedit -Implugins -Iinstruments -Iremote ${PYREM_CPP_FLAGS} -DSVNVERSION='\"${SVNVER}\"' -include ${PROJECT_BINARY_DIR}/all.h "
# PROPERTIES COMPILE_FLAGS "${PYREM_CPP_FLAGS} -DINSTPREFIX='\"${CMAKE_INSTALL_PREFIX}\"' -DINSTLIBDIR='\"${LIBRARY_OUTPUT_DIRECTORY}\"' -DSVNVERSION='\"${SVNVER}\"' -include ${PROJECT_BINARY_DIR}/all.h "
- PROPERTIES COMPILE_FLAGS "${PYREM_CPP_FLAGS} -include ${PROJECT_BINARY_DIR}/all.h "
- OUTPUT_NAME muse2
+ PROPERTIES COMPILE_FLAGS "${PYREM_CPP_FLAGS} -include ${PROJECT_BINARY_DIR}/all.h -fPIC"
+ OUTPUT_NAME muse_core
)
-target_link_libraries(muse
-# midiedit
-# master
-# instruments
-# marker
-# liste
-# synti
-# waveedit
-# widgets
-# al
-# awl
-# ctrl
+set_target_properties( muse
+ PROPERTIES OUTPUT_NAME muse2
+ )
+
+set_target_properties( icons
+ PROPERTIES OUTPUT_NAME muse_icons
+ )
+
+target_link_libraries(core
midiedit ctrl
liste mixer driver marker
master waveedit mplugins arranger
cliplist instruments widgets
+ icons
synti
al
awl
${QT_LIBRARIES}
QtSvg
- ${ALSA_LIBRARIES}
- ${JACK_LIBRARIES}
${SNDFILE_LIBRARIES}
${SAMPLERATE_LIBRARIES}
${UUID_LIBRARIES}
@@ -326,13 +336,23 @@ target_link_libraries(muse
dl
)
+target_link_libraries(muse
+ midiedit
+ core
+ )
+
+target_link_libraries(icons
+ ${QT_LIBRARIES}
+ )
+
if(HAVE_LASH)
- target_link_libraries(muse ${LASH_LIBRARIES})
+ target_link_libraries(core ${LASH_LIBRARIES})
endif(HAVE_LASH)
if(OSC_SUPPORT)
- target_link_libraries(muse ${LIBLO_LIBRARIES})
+ target_link_libraries(core ${LIBLO_LIBRARIES})
endif(OSC_SUPPORT)
install ( TARGETS muse RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/ )
+install(TARGETS core icons DESTINATION ${MUSE_MODULES_DIR})
diff --git a/muse2/muse/app.cpp b/muse2/muse/app.cpp
index f339fabf..ecee0f71 100644
--- a/muse2/muse/app.cpp
+++ b/muse2/muse/app.cpp
@@ -6,90 +6,48 @@
// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de)
//=========================================================
-#include "config.h"
-
-#include <string>
-#include <map>
-#include <assert.h>
-#include <getopt.h>
-#include <errno.h>
-#include <sys/mman.h>
-#include <sys/wait.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <time.h>
-#include <signal.h>
-#include <stdarg.h>
-
-#include <QAction>
-#include <QActionGroup>
-#include <QApplication>
-#include <QByteArray>
#include <QClipboard>
-#include <QCloseEvent>
-#include <QFile>
-#include <QFocusEvent>
-#include <QKeyEvent>
-#include <QMenu>
#include <QMessageBox>
-#include <QPixmap>
#include <QShortcut>
#include <QSignalMapper>
-#include <QSplashScreen>
-#include <QTextCodec>
#include <QTimer>
-#include <QTimerEvent>
-#include <QTranslator>
#include <QWhatsThis>
#include "app.h"
#include "master/lmaster.h"
-#include "master/masteredit.h"
-#include "marker/markerview.h"
-#include "popupmenu.h"
-#include "transport.h"
-#include "bigtime.h"
+#include "al/dsp.h"
+#include "amixer.h"
+#include "appearance.h"
#include "arranger.h"
-#include "pianoroll.h"
-#include "xml.h"
-#include "midi.h"
+#include "audio.h"
+#include "audiodev.h"
+#include "audioprefetch.h"
+#include "bigtime.h"
+#include "cliplist/cliplist.h"
#include "conf.h"
-#include "listedit.h"
+#include "debug.h"
+#include "didyouknow.h"
#include "drumedit.h"
-#include "ttoolbar.h"
-#include "amixer.h"
-#include "cliplist/cliplist.h"
-#include "midiport.h"
-#include "audiodev.h"
-#include "mididev.h"
-#include "waveedit.h"
-#include "icons.h"
-#include "minstrument.h"
-#include "mixdowndialog.h"
-#include "midictrl.h"
#include "filedialog.h"
-#include "plugin.h"
-#include "transpose.h"
-#include "appearance.h"
#include "gatetime.h"
+#include "gconfig.h"
+#include "gui.h"
+#include "icons.h"
+#include "instruments/editinstrument.h"
+#include "listedit.h"
+#include "marker/markerview.h"
+#include "master/masteredit.h"
#include "metronome.h"
-#include "debug.h"
-#include "event.h"
-#include "audio.h"
#include "midiseq.h"
-#include "audioprefetch.h"
-#include "wave.h"
+#include "mixdowndialog.h"
+#include "pianoroll.h"
+#include "popupmenu.h"
#include "shortcutconfig.h"
-#include "gconfig.h"
-#include "driver/jackaudio.h"
-#include "track.h"
+#include "songinfo.h"
#include "ticksynth.h"
-#include "instruments/editinstrument.h"
-#include "synth.h"
-#include "remote/pyapi.h"
-#include "al/dsp.h"
-#include "gui.h"
+#include "transport.h"
+#include "transpose.h"
+#include "waveedit.h"
#ifdef DSSI_SUPPORT
#include "dssihost.h"
@@ -99,10 +57,6 @@
#include "vst.h"
#endif
-#include <alsa/asoundlib.h>
-#include "songinfo.h"
-#include "didyouknow.h"
-
//extern void cacheJackRouteNames();
static pthread_t watchdogThread;
@@ -129,19 +83,11 @@ static const char* infoPanicButton = QT_TRANSLATE_NOOP("@default", "send note
#define PROJECT_LIST_LEN 6
static QString* projectList[PROJECT_LIST_LEN];
-static QString locale_override;
-extern void initIcons();
extern void initMidiSynth();
-extern bool initJackAudio();
extern void exitJackAudio();
-extern bool initDummyAudio();
extern void exitDummyAudio();
-extern void initVST_fst_init();
-extern void initVST();
-extern void initDSSI();
// p3.3.39
-extern void initOSC();
extern void exitOSC();
#ifdef HAVE_LASH
@@ -162,33 +108,6 @@ pthread_t splashThread;
// }
//---------------------------------------------------------
-// getCapabilities
-//---------------------------------------------------------
-
-static void getCapabilities()
- {
-#ifdef RTCAP
-#ifdef __linux__
- const char* napp = getenv("GIVERTCAP");
- if (napp == 0)
- napp = "givertcap";
- int pid = fork();
- if (pid == 0) {
- if (execlp(napp, napp, 0) == -1)
- perror("exec givertcap failed");
- }
- else if (pid == -1) {
- perror("fork givertcap failed");
- }
- else {
- waitpid(pid, 0, 0);
- }
-#endif // __linux__
-#endif
- }
-
-
-//---------------------------------------------------------
// sleep function
//---------------------------------------------------------
void microSleep(long msleep)
@@ -3140,15 +3059,6 @@ bool MusE::saveAs()
}
//---------------------------------------------------------
-// printVersion
-//---------------------------------------------------------
-
-static void printVersion(const char* prog)
- {
- fprintf(stderr, "%s: Linux Music Editor; Version %s, (svn revision %s)\n", prog, VERSION, SVNVERSION);
- }
-
-//---------------------------------------------------------
// startEditor
//---------------------------------------------------------
@@ -3531,141 +3441,6 @@ void MusE::kbAccel(int key)
}
//---------------------------------------------------------
-// MuseApplication
-//---------------------------------------------------------
-
-class MuseApplication : public QApplication {
- MusE* muse;
-
- public:
- MuseApplication(int& argc, char** argv)
- : QApplication(argc, argv)
- {
- muse = 0;
- }
-
-
- void setMuse(MusE* m) {
- muse = m;
-#ifdef HAVE_LASH
- if(useLASH)
- startTimer (300);
-#endif
- }
-
- bool notify(QObject* receiver, QEvent* event) {
- //if (event->type() == QEvent::KeyPress)
- // printf("notify key press before app::notify accepted:%d\n", event->isAccepted());
- bool flag = QApplication::notify(receiver, event);
- if (event->type() == QEvent::KeyPress) {
- //printf("notify key press after app::notify accepted:%d\n", event->isAccepted());
- QKeyEvent* ke = (QKeyEvent*)event;
- ///globalKeyState = ke->stateAfter();
- globalKeyState = ke->modifiers();
- bool accepted = ke->isAccepted();
- if (!accepted) {
- int key = ke->key();
- ///if (ke->state() & Qt::ShiftModifier)
- //if (globalKeyState & Qt::ShiftModifier)
- if (((QInputEvent*)ke)->modifiers() & Qt::ShiftModifier)
- key += Qt::SHIFT;
- ///if (ke->state() & Qt::AltModifier)
- //if (globalKeyState & Qt::AltModifier)
- if (((QInputEvent*)ke)->modifiers() & Qt::AltModifier)
- key += Qt::ALT;
- ///if (ke->state() & Qt::ControlModifier)
- //if (globalKeyState & Qt::ControlModifier)
- if (((QInputEvent*)ke)->modifiers() & Qt::ControlModifier)
- key+= Qt::CTRL;
- muse->kbAccel(key);
- return true;
- }
- }
- if (event->type() == QEvent::KeyRelease) {
- QKeyEvent* ke = (QKeyEvent*)event;
- ///globalKeyState = ke->stateAfter();
- globalKeyState = ke->modifiers();
- }
-
- return flag;
- }
-
-#ifdef HAVE_LASH
- virtual void timerEvent (QTimerEvent * /* e */) {
- if(useLASH)
- muse->lash_idle_cb ();
- }
-#endif /* HAVE_LASH */
-
- };
-
-//---------------------------------------------------------
-// localeList
-//---------------------------------------------------------
-
-static QString localeList()
- {
- // Find out what translations are available:
- QStringList deliveredLocaleListFiltered;
- QString distLocale = QString(INSTPREFIX) + "/" + SHAREINSTPREFIX + "/"
- + INSTALL_NAME + "/locale";
- QFileInfo distLocaleFi(distLocale);
- if (distLocaleFi.isDir()) {
- QDir dir = QDir(distLocale);
- QStringList deliveredLocaleList = dir.entryList();
- for(QStringList::iterator it = deliveredLocaleList.begin(); it != deliveredLocaleList.end(); ++it) {
- QString item = *it;
- if (item.endsWith(".qm")) {
- int inipos = item.indexOf("muse_") + 5;
- int finpos = item.lastIndexOf(".qm");
- deliveredLocaleListFiltered << item.mid(inipos, finpos - inipos);
- }
- }
- return deliveredLocaleListFiltered.join(",");
- }
- return QString("No translations found!");
- }
-
-//---------------------------------------------------------
-// usage
-//---------------------------------------------------------
-
-static void usage(const char* prog, const char* txt)
- {
- fprintf(stderr, "%s: %s\nusage: %s flags midifile\n Flags:\n",
- prog, txt, prog);
- fprintf(stderr, " -h this help\n");
- fprintf(stderr, " -v print version\n");
- fprintf(stderr, " -d debug mode: no threads, no RT\n");
- fprintf(stderr, " -D debug mode: enable some debug messages\n");
- fprintf(stderr, " -m debug mode: trace midi Input\n");
- fprintf(stderr, " -M debug mode: trace midi Output\n");
- fprintf(stderr, " -s debug mode: trace sync\n");
- fprintf(stderr, " -a no audio\n");
- //fprintf(stderr, " -P n set real time priority to n (default: 50)\n");
- fprintf(stderr, " -P n set audio driver real time priority to n (Dummy only, default 40. Else fixed by Jack.)\n");
- fprintf(stderr, " -Y n force midi real time priority to n (default: audio driver prio +2)\n");
- fprintf(stderr, " -p don't load LADSPA plugins\n");
-#ifdef ENABLE_PYTHON
- fprintf(stderr, " -y enable Python control support\n");
-#endif
-#ifdef VST_SUPPORT
- fprintf(stderr, " -V don't load VST plugins\n");
-#endif
-#ifdef DSSI_SUPPORT
- fprintf(stderr, " -I don't load DSSI plugins\n");
-#endif
-#ifdef HAVE_LASH
- fprintf(stderr, " -L don't use LASH\n");
-#endif
- fprintf(stderr, " -l xx force locale to the given language/country code (xx = %s)\n", localeList().toLatin1().constData());
- fprintf(stderr, "useful environment variables:\n");
- fprintf(stderr, " MUSE override library and shared directories location\n");
- fprintf(stderr, " MUSEHOME override user home directory (HOME/)\n");
- fprintf(stderr, " MUSEINSTRUMENTS override user instrument directory (MUSEHOME/muse_instruments)\n");
- }
-
-//---------------------------------------------------------
// catchSignal
// only for debugging
//---------------------------------------------------------
@@ -3690,318 +3465,6 @@ static void catchSignal(int sig)
}
#endif
-//---------------------------------------------------------
-// main
-//---------------------------------------------------------
-
-int main(int argc, char* argv[])
- {
-
-// error = ErrorHandler::create(argv[0]);
- ruid = getuid();
- euid = geteuid();
- undoSetuid();
- getCapabilities();
- int noAudio = false;
-
- const char* mu = getenv("MUSEHOME");
- if(mu)
- museUser = QString(mu);
- if(museUser.isEmpty())
- museUser = QString(getenv("HOME"));
-
- QString museGlobal;
- const char* p = getenv("MUSE");
- if (p)
- museGlobal = p;
-
- if (museGlobal.isEmpty()) {
- //QString museGlobal(INSTPREFIX);
- //QString museGlobalLibDir(INSTLIBDIR);
- //QString museGlobalLibDir(LIBINSTPREFIX); // This has no prefix.
- //museGlobalLib = museGlobalLibDir + "/muse";
- //museGlobalShare = museGlobal + "/share/muse";
-
- // p4.0.7
- museGlobalLib = QString(INSTPREFIX) + QString("/") +
- QString(LIBINSTPREFIX) + QString("/") +
- QString(INSTALL_NAME);
- //museGlobalShare = museGlobal + QString("/share/") + QString(INSTALL_NAME);
- museGlobalShare = QString(INSTPREFIX) + QString("/") +
- QString(SHAREINSTPREFIX) + QString("/") + // This has no prefix. Default is "share", set in top cmake script.
- QString(INSTALL_NAME);
- }
- else {
- //museGlobalLib = museGlobal + "/lib";
- //museGlobalShare = museGlobal + "/share";
- museGlobalLib = museGlobal + QString("/") + QString(LIBINSTPREFIX); // p4.0.7
- museGlobalShare = museGlobal + QString("/") + QString(SHAREINSTPREFIX);
- }
- museProject = museProjectInitPath; //getcwd(0, 0);
- configName = QString(getenv("HOME")) + QString("/.MusE");
-
- museInstruments = museGlobalShare + QString("/instruments");
-
- const char* ins = getenv("MUSEINSTRUMENTS");
- if(ins)
- museUserInstruments = QString(ins);
- if(museUserInstruments.isEmpty())
- museUserInstruments = museUser + QString("/muse_instruments");
-
-#ifdef HAVE_LASH
- lash_args_t * lash_args = 0;
- if(useLASH)
- lash_args = lash_extract_args (&argc, &argv);
-#endif
-
- srand(time(0)); // initialize random number generator
-// signal(SIGCHLD, catchSignal); // interferes with initVST()
- initMidiController();
- QApplication::setColorSpec(QApplication::ManyColor);
- MuseApplication app(argc, argv);
-
- initShortCuts();
- readConfiguration();
-
- if (config.useDenormalBias)
- printf("Denormal protection enabled.\n");
- // SHOW MUSE SPLASH SCREEN
- if (config.showSplashScreen) {
- QPixmap splsh(museGlobalShare + "/splash.png");
-
- if (!splsh.isNull()) {
- QSplashScreen* muse_splash = new QSplashScreen(splsh,
- Qt::WindowStaysOnTopHint);
- muse_splash->setAttribute(Qt::WA_DeleteOnClose); // Possibly also Qt::X11BypassWindowManagerHint
- muse_splash->show();
- QTimer* stimer = new QTimer(0);
- muse_splash->connect(stimer, SIGNAL(timeout()), muse_splash, SLOT(close()));
- stimer->setSingleShot(true);
- stimer->start(6000);
- }
- }
-
- int i;
-
- QString optstr("ahvdDmMsP:Y:l:py");
-#ifdef VST_SUPPORT
- optstr += QString("V");
-#endif
-#ifdef DSSI_SUPPORT
- optstr += QString("I");
-#endif
-#ifdef HAVE_LASH
- optstr += QString("L");
-#endif
-
-//#ifdef VST_SUPPORT
-// while ((i = getopt(argc, argv, "ahvdDmMsVP:py")) != EOF) {
-//#else
-// while ((i = getopt(argc, argv, "ahvdDmMsP:py")) != EOF) {
-//#endif
-
- while ((i = getopt(argc, argv, optstr.toLatin1().constData())) != EOF) {
- char c = (char)i;
- switch (c) {
- case 'v': printVersion(argv[0]); return 0;
- case 'd':
- debugMode = true;
- realTimeScheduling = false;
- break;
- case 'a':
- noAudio = true;
- break;
- case 'D': debugMsg = true; break;
- case 'm': midiInputTrace = true; break;
- case 'M': midiOutputTrace = true; break;
- case 's': debugSync = true; break;
- case 'P': realTimePriority = atoi(optarg); break;
- case 'Y': midiRTPrioOverride = atoi(optarg); break;
- case 'p': loadPlugins = false; break;
- case 'V': loadVST = false; break;
- case 'I': loadDSSI = false; break;
- case 'L': useLASH = false; break;
- case 'y': usePythonBridge = true; break;
- case 'l': locale_override = QString(optarg); break;
- case 'h': usage(argv[0], argv[1]); return -1;
- default: usage(argv[0], "bad argument"); return -1;
- }
- }
-
- /*
- if(!config.styleSheetFile.isEmpty())
- {
- if(debugMsg)
- printf("loading style sheet <%s> \n", qPrintable(config.styleSheetFile));
- QFile cf(config.styleSheetFile);
- if (cf.open(QIODevice::ReadOnly)) {
- QByteArray ss = cf.readAll();
- QString sheet(QString::fromUtf8(ss.data()));
- app.setStyleSheet(sheet);
- cf.close();
- }
- else
- printf("loading style sheet <%s> failed\n", qPrintable(config.styleSheetFile));
- }
- */
-
- AL::initDsp();
-
- if (debugMsg)
- printf("Start euid: %d ruid: %d, Now euid %d\n",
- euid, ruid, geteuid());
- if (debugMode) {
- initDummyAudio();
- realTimeScheduling = false;
- }
- else if (noAudio) {
- initDummyAudio();
- realTimeScheduling = true;
- //if (debugMode) { // ??
- // realTimeScheduling = false;
- // }
- }
- else if (initJackAudio()) {
- if (!debugMode)
- {
- QMessageBox::critical(NULL, "MusE fatal error", "MusE <b>failed</b> to find a <b>Jack audio server</b>.<br><br>"
- "<i>MusE will continue without audio support (-a switch)!</i><br><br>"
- "If this was not intended check that Jack was started. "
- "If Jack <i>was</i> started check that it was\n"
- "started as the same user as MusE.\n");
-
- initDummyAudio();
- noAudio = true;
- realTimeScheduling = true;
- if (debugMode) {
- realTimeScheduling = false;
- }
- }
- else
- {
- fprintf(stderr, "fatal error: no JACK audio server found\n");
- fprintf(stderr, "no audio functions available\n");
- fprintf(stderr, "*** experimental mode -- no play possible ***\n");
- initDummyAudio();
- //realTimeScheduling = audioDevice->isRealtime();
- }
- realTimeScheduling = true;
- }
- else
- realTimeScheduling = audioDevice->isRealtime();
-
- useJackTransport.setValue(true);
- // setup the prefetch fifo length now that the segmentSize is known
- // Changed by Tim. p3.3.17
- // Changed to 4 *, JUST FOR TEST!!!
- fifoLength = 131072/segmentSize;
- //fifoLength = (131072/segmentSize) * 4;
-
-
- argc -= optind;
- ++argc;
-
- if (debugMsg) {
- printf("global lib: <%s>\n", museGlobalLib.toLatin1().constData());
- printf("global share: <%s>\n", museGlobalShare.toLatin1().constData());
- printf("muse home: <%s>\n", museUser.toLatin1().constData());
- printf("project dir: <%s>\n", museProject.toLatin1().constData());
- printf("user instruments: <%s>\n", museUserInstruments.toLatin1().constData());
- }
-
- static QTranslator translator(0);
- QString locale(QApplication::keyboardInputLocale().name());
- if (locale_override.length())
- locale = locale_override;
- if (locale != "C") {
- QString loc("muse_");
- loc += locale;
- if (translator.load(loc, QString(".")) == false) {
- QString lp(museGlobalShare);
- lp += QString("/locale");
- if (translator.load(loc, lp) == false) {
- printf("no locale <%s>/<%s>\n", loc.toLatin1().constData(), lp.toLatin1().constData());
- }
- }
- app.installTranslator(&translator);
- }
-
- if (locale == "de") {
- printf("locale de\n");
- hIsB = false;
- }
-
- if (loadPlugins)
- initPlugins();
-
- if (loadVST)
- initVST();
-
- if(loadDSSI)
- initDSSI();
-
- // p3.3.39
- initOSC();
-
- initIcons();
-
- initMetronome();
-
- //QApplication::clipboard()->setSelectionMode(false); ddskrjo obsolete even in Qt3
-
- QApplication::addLibraryPath(museGlobalLib + "/qtplugins");
- if (debugMsg) {
- QStringList list = app.libraryPaths();
- QStringList::Iterator it = list.begin();
- printf("QtLibraryPath:\n");
- while(it != list.end()) {
- printf(" <%s>\n", (*it).toLatin1().constData());
- ++it;
- }
- }
-
- muse = new MusE(argc, &argv[optind]);
- app.setMuse(muse);
- muse->setWindowIcon(*museIcon);
-
- // Added by Tim. p3.3.22
- if (!debugMode) {
- if (mlockall(MCL_CURRENT | MCL_FUTURE))
- perror("WARNING: Cannot lock memory:");
- }
-
- muse->show();
- muse->seqStart();
-
-#ifdef HAVE_LASH
- {
- if(useLASH)
- {
- int lash_flags = LASH_Config_File;
- const char *muse_name = PACKAGE_NAME;
- lash_client = lash_init (lash_args, muse_name, lash_flags, LASH_PROTOCOL(2,0));
- lash_alsa_client_id (lash_client, snd_seq_client_id (alsaSeq));
- if (!noAudio) {
- // p3.3.38
- //char *jack_name = ((JackAudioDevice*)audioDevice)->getJackName();
- const char *jack_name = audioDevice->clientName();
- lash_jack_client_name (lash_client, jack_name);
- }
- }
- }
-#endif /* HAVE_LASH */
- QTimer::singleShot(100, muse, SLOT(showDidYouKnowDialog()));
-
- int rv = app.exec();
- if(debugMsg)
- printf("app.exec() returned:%d\nDeleting main MusE object\n", rv);
- delete muse;
- if(debugMsg)
- printf("Finished! Exiting main, return value:%d\n", rv);
- return rv;
-
- }
-
#if 0
//---------------------------------------------------------
// configPart
diff --git a/muse2/muse/arranger/CMakeLists.txt b/muse2/muse/arranger/CMakeLists.txt
index 47241207..adc7ef61 100644
--- a/muse2/muse/arranger/CMakeLists.txt
+++ b/muse2/muse/arranger/CMakeLists.txt
@@ -33,17 +33,26 @@ file (GLOB SOURCE_FILES
trackinfo.cpp trackautomationview.h
)
-add_library ( arranger STATIC
+add_library ( arranger SHARED
${SOURCE_FILES}
${arranger_mocs}
# ${arranger_ui_headers}
)
+target_link_libraries ( arranger
+ ${QT_LIBRARIES}
+ awl
+ widgets
+ )
+
set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${SOURCE_FILES} CACHE INTERNAL "")
+install(TARGETS arranger DESTINATION ${MUSE_MODULES_DIR})
+
add_dependencies(arranger mixer)
set_target_properties( arranger
- PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h"
+ PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h -fPIC"
+ OUTPUT_NAME muse_arranger
)
diff --git a/muse2/muse/cliplist/CMakeLists.txt b/muse2/muse/cliplist/CMakeLists.txt
index 212a0072..52a5a791 100644
--- a/muse2/muse/cliplist/CMakeLists.txt
+++ b/muse2/muse/cliplist/CMakeLists.txt
@@ -27,7 +27,7 @@ file (GLOB SOURCE_FILES
cliplist.h
)
-add_library ( cliplist STATIC
+add_library ( cliplist SHARED
${SOURCE_FILES}
${cliplist_mocs}
# ${cliplist_ui_headers}
@@ -35,7 +35,15 @@ add_library ( cliplist STATIC
set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${SOURCE_FILES} CACHE INTERNAL "")
+target_link_libraries ( cliplist
+ ${QT_LIBRARIES}
+ awl
+ )
+
+install(TARGETS cliplist DESTINATION ${MUSE_MODULES_DIR})
+
set_target_properties( cliplist
- PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h"
+ PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h -fPIC"
+ OUTPUT_NAME muse_cliplist
)
diff --git a/muse2/muse/ctrl/CMakeLists.txt b/muse2/muse/ctrl/CMakeLists.txt
index c8f7bdff..24b8bb3e 100644
--- a/muse2/muse/ctrl/CMakeLists.txt
+++ b/muse2/muse/ctrl/CMakeLists.txt
@@ -35,7 +35,7 @@ file (GLOB SOURCE_FILES
ctrlpanel.cpp ctrlpanel.h
)
-add_library ( ctrl STATIC
+add_library ( ctrl SHARED
# configmidictrl.cpp
# definemidictrl.cpp
# ctrldialog.cpp
@@ -49,7 +49,15 @@ add_library ( ctrl STATIC
set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${SOURCE_FILES} CACHE INTERNAL "")
+target_link_libraries ( ctrl
+ ${QT_LIBRARIES}
+ widgets
+ )
+
+install(TARGETS ctrl DESTINATION ${MUSE_MODULES_DIR})
+
set_target_properties( ctrl
- PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h"
+ PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h -fPIC"
+ OUTPUT_NAME muse_ctrl
)
diff --git a/muse2/muse/driver/CMakeLists.txt b/muse2/muse/driver/CMakeLists.txt
index 8d561ee5..0116fc1f 100644
--- a/muse2/muse/driver/CMakeLists.txt
+++ b/muse2/muse/driver/CMakeLists.txt
@@ -24,14 +24,26 @@ file (GLOB SOURCE_FILES
jackmidi.cpp jackmidi.h
)
-add_library ( driver STATIC
+add_library ( driver SHARED
# ${PROJECT_BINARY_DIR}/all.h.pch
${SOURCE_FILES}
)
set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${SOURCE_FILES} CACHE INTERNAL "")
+install(TARGETS driver DESTINATION ${MUSE_MODULES_DIR})
+
+target_link_libraries ( driver
+ ${ALSA_LIBRARIES}
+ ${JACK_LIBRARIES}
+ ${QT_LIBRARIES}
+ mplugins
+ )
+
+
+
set_target_properties( driver
- PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h"
+ PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h -fPIC"
+ OUTPUT_NAME muse_driver
)
diff --git a/muse2/muse/driver/audiodev.h b/muse2/muse/driver/audiodev.h
index 0b4aacef..af53d7de 100644
--- a/muse2/muse/driver/audiodev.h
+++ b/muse2/muse/driver/audiodev.h
@@ -14,6 +14,7 @@
class QString;
class MidiPlayEvent;
+class Pos;
//---------------------------------------------------------
// AudioDevice
diff --git a/muse2/muse/instruments/CMakeLists.txt b/muse2/muse/instruments/CMakeLists.txt
index 8cc5e6b8..8930edf0 100644
--- a/muse2/muse/instruments/CMakeLists.txt
+++ b/muse2/muse/instruments/CMakeLists.txt
@@ -40,7 +40,7 @@ file (GLOB SOURCE_FILES
editinstrument.h
)
-add_library ( instruments STATIC
+add_library ( instruments SHARED
${SOURCE_FILES}
${instruments_mocs}
${instruments_ui_headers}
@@ -48,7 +48,15 @@ add_library ( instruments STATIC
set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${SOURCE_FILES} ${UI_FILES} CACHE INTERNAL "")
+install(TARGETS instruments DESTINATION ${MUSE_MODULES_DIR})
+
+target_link_libraries ( instruments
+ ${QT_LIBRARIES}
+ icons
+ )
+
set_target_properties( instruments
- PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h"
+ PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h -fPIC"
+ OUTPUT_NAME muse_instruments
)
diff --git a/muse2/muse/liste/CMakeLists.txt b/muse2/muse/liste/CMakeLists.txt
index e3a30797..72081478 100644
--- a/muse2/muse/liste/CMakeLists.txt
+++ b/muse2/muse/liste/CMakeLists.txt
@@ -47,7 +47,7 @@ file (GLOB SOURCE_FILES
editevent.cpp editevent.h
)
-add_library ( liste STATIC
+add_library ( liste SHARED
${SOURCE_FILES}
${liste_mocs}
${liste_ui_headers}
@@ -56,10 +56,19 @@ add_library ( liste STATIC
set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${SOURCE_FILES} ${UI_FILES} CACHE INTERNAL "")
+install(TARGETS liste DESTINATION ${MUSE_MODULES_DIR})
+
+target_link_libraries ( liste
+ ${QT_LIBRARIES}
+ awl
+ widgets
+ )
+
add_dependencies(liste widgets)
set_target_properties( liste
- PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h"
+ PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h -fPIC"
+ OUTPUT_NAME muse_liste
)
diff --git a/muse2/muse/main.cpp b/muse2/muse/main.cpp
new file mode 100644
index 00000000..a11b2e0b
--- /dev/null
+++ b/muse2/muse/main.cpp
@@ -0,0 +1,531 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: app.cpp,v 1.113.2.68 2009/12/21 14:51:51 spamatica Exp $
+//
+// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <QApplication>
+#include <QDir>
+#include <QKeyEvent>
+#include <QMessageBox>
+#include <QLocale>
+#include <QSplashScreen>
+#include <QTimer>
+#include <QTranslator>
+
+#include <sys/mman.h>
+#include <alsa/asoundlib.h>
+
+#include "al/dsp.h"
+#include "app.h"
+#include "audio.h"
+#include "audiodev.h"
+#include "gconfig.h"
+#include "globals.h"
+#include "icons.h"
+#include "sync.h"
+
+extern bool initDummyAudio();
+extern void initIcons();
+extern bool initJackAudio();
+extern void initMidiController();
+extern void initMetronome();
+extern void initOSC();
+extern void initVST();
+extern void initPlugins();
+extern void initShortCuts();
+extern void initDSSI();
+extern void readConfiguration();
+
+static QString locale_override;
+
+#ifdef HAVE_LASH
+#include <lash/lash.h>
+extern lash_client_t * lash_client;
+extern snd_seq_t * alsaSeq;
+#endif
+
+//---------------------------------------------------------
+// getCapabilities
+//---------------------------------------------------------
+
+static void getCapabilities()
+ {
+#ifdef RTCAP
+#ifdef __linux__
+ const char* napp = getenv("GIVERTCAP");
+ if (napp == 0)
+ napp = "givertcap";
+ int pid = fork();
+ if (pid == 0) {
+ if (execlp(napp, napp, 0) == -1)
+ perror("exec givertcap failed");
+ }
+ else if (pid == -1) {
+ perror("fork givertcap failed");
+ }
+ else {
+ waitpid(pid, 0, 0);
+ }
+#endif // __linux__
+#endif
+ }
+
+//---------------------------------------------------------
+// printVersion
+//---------------------------------------------------------
+
+static void printVersion(const char* prog)
+ {
+ fprintf(stderr, "%s: Linux Music Editor; Version %s, (svn revision %s)\n", prog, VERSION, SVNVERSION);
+ }
+
+//---------------------------------------------------------
+// MuseApplication
+//---------------------------------------------------------
+
+class MuseApplication : public QApplication {
+ MusE* muse;
+
+ public:
+ MuseApplication(int& argc, char** argv)
+ : QApplication(argc, argv)
+ {
+ muse = 0;
+ }
+
+
+ void setMuse(MusE* m) {
+ muse = m;
+#ifdef HAVE_LASH
+ if(useLASH)
+ startTimer (300);
+#endif
+ }
+
+ bool notify(QObject* receiver, QEvent* event) {
+ //if (event->type() == QEvent::KeyPress)
+ // printf("notify key press before app::notify accepted:%d\n", event->isAccepted());
+ bool flag = QApplication::notify(receiver, event);
+ if (event->type() == QEvent::KeyPress) {
+ //printf("notify key press after app::notify accepted:%d\n", event->isAccepted());
+ QKeyEvent* ke = (QKeyEvent*)event;
+ ///globalKeyState = ke->stateAfter();
+ globalKeyState = ke->modifiers();
+ bool accepted = ke->isAccepted();
+ if (!accepted) {
+ int key = ke->key();
+ ///if (ke->state() & Qt::ShiftModifier)
+ //if (globalKeyState & Qt::ShiftModifier)
+ if (((QInputEvent*)ke)->modifiers() & Qt::ShiftModifier)
+ key += Qt::SHIFT;
+ ///if (ke->state() & Qt::AltModifier)
+ //if (globalKeyState & Qt::AltModifier)
+ if (((QInputEvent*)ke)->modifiers() & Qt::AltModifier)
+ key += Qt::ALT;
+ ///if (ke->state() & Qt::ControlModifier)
+ //if (globalKeyState & Qt::ControlModifier)
+ if (((QInputEvent*)ke)->modifiers() & Qt::ControlModifier)
+ key+= Qt::CTRL;
+ muse->kbAccel(key);
+ return true;
+ }
+ }
+ if (event->type() == QEvent::KeyRelease) {
+ QKeyEvent* ke = (QKeyEvent*)event;
+ ///globalKeyState = ke->stateAfter();
+ globalKeyState = ke->modifiers();
+ }
+
+ return flag;
+ }
+
+#ifdef HAVE_LASH
+ virtual void timerEvent (QTimerEvent * /* e */) {
+ if(useLASH)
+ muse->lash_idle_cb ();
+ }
+#endif /* HAVE_LASH */
+
+ };
+
+//---------------------------------------------------------
+// localeList
+//---------------------------------------------------------
+
+static QString localeList()
+ {
+ // Find out what translations are available:
+ QStringList deliveredLocaleListFiltered;
+ QString distLocale = QString(INSTPREFIX) + "/" + SHAREINSTPREFIX + "/"
+ + INSTALL_NAME + "/locale";
+ QFileInfo distLocaleFi(distLocale);
+ if (distLocaleFi.isDir()) {
+ QDir dir = QDir(distLocale);
+ QStringList deliveredLocaleList = dir.entryList();
+ for(QStringList::iterator it = deliveredLocaleList.begin(); it != deliveredLocaleList.end(); ++it) {
+ QString item = *it;
+ if (item.endsWith(".qm")) {
+ int inipos = item.indexOf("muse_") + 5;
+ int finpos = item.lastIndexOf(".qm");
+ deliveredLocaleListFiltered << item.mid(inipos, finpos - inipos);
+ }
+ }
+ return deliveredLocaleListFiltered.join(",");
+ }
+ return QString("No translations found!");
+ }
+
+//---------------------------------------------------------
+// usage
+//---------------------------------------------------------
+
+static void usage(const char* prog, const char* txt)
+ {
+ fprintf(stderr, "%s: %s\nusage: %s flags midifile\n Flags:\n",
+ prog, txt, prog);
+ fprintf(stderr, " -h this help\n");
+ fprintf(stderr, " -v print version\n");
+ fprintf(stderr, " -d debug mode: no threads, no RT\n");
+ fprintf(stderr, " -D debug mode: enable some debug messages\n");
+ fprintf(stderr, " -m debug mode: trace midi Input\n");
+ fprintf(stderr, " -M debug mode: trace midi Output\n");
+ fprintf(stderr, " -s debug mode: trace sync\n");
+ fprintf(stderr, " -a no audio\n");
+ //fprintf(stderr, " -P n set real time priority to n (default: 50)\n");
+ fprintf(stderr, " -P n set audio driver real time priority to n (Dummy only, default 40. Else fixed by Jack.)\n");
+ fprintf(stderr, " -Y n force midi real time priority to n (default: audio driver prio +2)\n");
+ fprintf(stderr, " -p don't load LADSPA plugins\n");
+#ifdef ENABLE_PYTHON
+ fprintf(stderr, " -y enable Python control support\n");
+#endif
+#ifdef VST_SUPPORT
+ fprintf(stderr, " -V don't load VST plugins\n");
+#endif
+#ifdef DSSI_SUPPORT
+ fprintf(stderr, " -I don't load DSSI plugins\n");
+#endif
+#ifdef HAVE_LASH
+ fprintf(stderr, " -L don't use LASH\n");
+#endif
+ fprintf(stderr, " -l xx force locale to the given language/country code (xx = %s)\n", localeList().toLatin1().constData());
+ fprintf(stderr, "useful environment variables:\n");
+ fprintf(stderr, " MUSE override library and shared directories location\n");
+ fprintf(stderr, " MUSEHOME override user home directory (HOME/)\n");
+ fprintf(stderr, " MUSEINSTRUMENTS override user instrument directory (MUSEHOME/muse_instruments)\n");
+ }
+
+//---------------------------------------------------------
+// main
+//---------------------------------------------------------
+
+int main(int argc, char* argv[])
+ {
+
+// error = ErrorHandler::create(argv[0]);
+ ruid = getuid();
+ euid = geteuid();
+ undoSetuid();
+ getCapabilities();
+ int noAudio = false;
+
+ const char* mu = getenv("MUSEHOME");
+ if(mu)
+ museUser = QString(mu);
+ if(museUser.isEmpty())
+ museUser = QString(getenv("HOME"));
+
+ QString museGlobal;
+ const char* p = getenv("MUSE");
+ if (p)
+ museGlobal = p;
+
+ if (museGlobal.isEmpty()) {
+ //QString museGlobal(INSTPREFIX);
+ //QString museGlobalLibDir(INSTLIBDIR);
+ //QString museGlobalLibDir(LIBINSTPREFIX); // This has no prefix.
+ //museGlobalLib = museGlobalLibDir + "/muse";
+ //museGlobalShare = museGlobal + "/share/muse";
+
+ // p4.0.7
+ museGlobalLib = QString(INSTPREFIX) + QString("/") +
+ QString(LIBINSTPREFIX) + QString("/") +
+ QString(INSTALL_NAME);
+ //museGlobalShare = museGlobal + QString("/share/") + QString(INSTALL_NAME);
+ museGlobalShare = QString(INSTPREFIX) + QString("/") +
+ QString(SHAREINSTPREFIX) + QString("/") + // This has no prefix. Default is "share", set in top cmake script.
+ QString(INSTALL_NAME);
+ }
+ else {
+ //museGlobalLib = museGlobal + "/lib";
+ //museGlobalShare = museGlobal + "/share";
+ museGlobalLib = museGlobal + QString("/") + QString(LIBINSTPREFIX); // p4.0.7
+ museGlobalShare = museGlobal + QString("/") + QString(SHAREINSTPREFIX);
+ }
+ museProject = museProjectInitPath; //getcwd(0, 0);
+ configName = QString(getenv("HOME")) + QString("/.MusE");
+
+ museInstruments = museGlobalShare + QString("/instruments");
+
+ const char* ins = getenv("MUSEINSTRUMENTS");
+ if(ins)
+ museUserInstruments = QString(ins);
+ if(museUserInstruments.isEmpty())
+ museUserInstruments = museUser + QString("/muse_instruments");
+
+#ifdef HAVE_LASH
+ lash_args_t * lash_args = 0;
+ if(useLASH)
+ lash_args = lash_extract_args (&argc, &argv);
+#endif
+
+ srand(time(0)); // initialize random number generator
+// signal(SIGCHLD, catchSignal); // interferes with initVST()
+ initMidiController();
+ QApplication::setColorSpec(QApplication::ManyColor);
+ MuseApplication app(argc, argv);
+
+ initShortCuts();
+ readConfiguration();
+
+ if (config.useDenormalBias)
+ printf("Denormal protection enabled.\n");
+ // SHOW MUSE SPLASH SCREEN
+ if (config.showSplashScreen) {
+ QPixmap splsh(museGlobalShare + "/splash.png");
+
+ if (!splsh.isNull()) {
+ QSplashScreen* muse_splash = new QSplashScreen(splsh,
+ Qt::WindowStaysOnTopHint);
+ muse_splash->setAttribute(Qt::WA_DeleteOnClose); // Possibly also Qt::X11BypassWindowManagerHint
+ muse_splash->show();
+ QTimer* stimer = new QTimer(0);
+ muse_splash->connect(stimer, SIGNAL(timeout()), muse_splash, SLOT(close()));
+ stimer->setSingleShot(true);
+ stimer->start(6000);
+ }
+ }
+
+ int i;
+
+ QString optstr("ahvdDmMsP:Y:l:py");
+#ifdef VST_SUPPORT
+ optstr += QString("V");
+#endif
+#ifdef DSSI_SUPPORT
+ optstr += QString("I");
+#endif
+#ifdef HAVE_LASH
+ optstr += QString("L");
+#endif
+
+//#ifdef VST_SUPPORT
+// while ((i = getopt(argc, argv, "ahvdDmMsVP:py")) != EOF) {
+//#else
+// while ((i = getopt(argc, argv, "ahvdDmMsP:py")) != EOF) {
+//#endif
+
+ while ((i = getopt(argc, argv, optstr.toLatin1().constData())) != EOF) {
+ char c = (char)i;
+ switch (c) {
+ case 'v': printVersion(argv[0]); return 0;
+ case 'd':
+ debugMode = true;
+ realTimeScheduling = false;
+ break;
+ case 'a':
+ noAudio = true;
+ break;
+ case 'D': debugMsg = true; break;
+ case 'm': midiInputTrace = true; break;
+ case 'M': midiOutputTrace = true; break;
+ case 's': debugSync = true; break;
+ case 'P': realTimePriority = atoi(optarg); break;
+ case 'Y': midiRTPrioOverride = atoi(optarg); break;
+ case 'p': loadPlugins = false; break;
+ case 'V': loadVST = false; break;
+ case 'I': loadDSSI = false; break;
+ case 'L': useLASH = false; break;
+ case 'y': usePythonBridge = true; break;
+ case 'l': locale_override = QString(optarg); break;
+ case 'h': usage(argv[0], argv[1]); return -1;
+ default: usage(argv[0], "bad argument"); return -1;
+ }
+ }
+
+ /*
+ if(!config.styleSheetFile.isEmpty())
+ {
+ if(debugMsg)
+ printf("loading style sheet <%s> \n", qPrintable(config.styleSheetFile));
+ QFile cf(config.styleSheetFile);
+ if (cf.open(QIODevice::ReadOnly)) {
+ QByteArray ss = cf.readAll();
+ QString sheet(QString::fromUtf8(ss.data()));
+ app.setStyleSheet(sheet);
+ cf.close();
+ }
+ else
+ printf("loading style sheet <%s> failed\n", qPrintable(config.styleSheetFile));
+ }
+ */
+
+ AL::initDsp();
+
+ if (debugMsg)
+ printf("Start euid: %d ruid: %d, Now euid %d\n",
+ euid, ruid, geteuid());
+ if (debugMode) {
+ initDummyAudio();
+ realTimeScheduling = false;
+ }
+ else if (noAudio) {
+ initDummyAudio();
+ realTimeScheduling = true;
+ //if (debugMode) { // ??
+ // realTimeScheduling = false;
+ // }
+ }
+ else if (initJackAudio()) {
+ if (!debugMode)
+ {
+ QMessageBox::critical(NULL, "MusE fatal error", "MusE <b>failed</b> to find a <b>Jack audio server</b>.<br><br>"
+ "<i>MusE will continue without audio support (-a switch)!</i><br><br>"
+ "If this was not intended check that Jack was started. "
+ "If Jack <i>was</i> started check that it was\n"
+ "started as the same user as MusE.\n");
+
+ initDummyAudio();
+ noAudio = true;
+ realTimeScheduling = true;
+ if (debugMode) {
+ realTimeScheduling = false;
+ }
+ }
+ else
+ {
+ fprintf(stderr, "fatal error: no JACK audio server found\n");
+ fprintf(stderr, "no audio functions available\n");
+ fprintf(stderr, "*** experimental mode -- no play possible ***\n");
+ initDummyAudio();
+ //realTimeScheduling = audioDevice->isRealtime();
+ }
+ realTimeScheduling = true;
+ }
+ else
+ realTimeScheduling = audioDevice->isRealtime();
+
+ useJackTransport.setValue(true);
+ // setup the prefetch fifo length now that the segmentSize is known
+ // Changed by Tim. p3.3.17
+ // Changed to 4 *, JUST FOR TEST!!!
+ fifoLength = 131072/segmentSize;
+ //fifoLength = (131072/segmentSize) * 4;
+
+
+ argc -= optind;
+ ++argc;
+
+ if (debugMsg) {
+ printf("global lib: <%s>\n", museGlobalLib.toLatin1().constData());
+ printf("global share: <%s>\n", museGlobalShare.toLatin1().constData());
+ printf("muse home: <%s>\n", museUser.toLatin1().constData());
+ printf("project dir: <%s>\n", museProject.toLatin1().constData());
+ printf("user instruments: <%s>\n", museUserInstruments.toLatin1().constData());
+ }
+
+ static QTranslator translator(0);
+ QString locale(QApplication::keyboardInputLocale().name());
+ if (locale_override.length())
+ locale = locale_override;
+ if (locale != "C") {
+ QString loc("muse_");
+ loc += locale;
+ if (translator.load(loc, QString(".")) == false) {
+ QString lp(museGlobalShare);
+ lp += QString("/locale");
+ if (translator.load(loc, lp) == false) {
+ printf("no locale <%s>/<%s>\n", loc.toLatin1().constData(), lp.toLatin1().constData());
+ }
+ }
+ app.installTranslator(&translator);
+ }
+
+ if (locale == "de") {
+ printf("locale de\n");
+ hIsB = false;
+ }
+
+ if (loadPlugins)
+ initPlugins();
+
+ if (loadVST)
+ initVST();
+
+ if(loadDSSI)
+ initDSSI();
+
+ // p3.3.39
+ initOSC();
+
+ initIcons();
+
+ initMetronome();
+
+ //QApplication::clipboard()->setSelectionMode(false); ddskrjo obsolete even in Qt3
+
+ QApplication::addLibraryPath(museGlobalLib + "/qtplugins");
+ if (debugMsg) {
+ QStringList list = app.libraryPaths();
+ QStringList::Iterator it = list.begin();
+ printf("QtLibraryPath:\n");
+ while(it != list.end()) {
+ printf(" <%s>\n", (*it).toLatin1().constData());
+ ++it;
+ }
+ }
+
+ muse = new MusE(argc, &argv[optind]);
+ app.setMuse(muse);
+ muse->setWindowIcon(*museIcon);
+
+ // Added by Tim. p3.3.22
+ if (!debugMode) {
+ if (mlockall(MCL_CURRENT | MCL_FUTURE))
+ perror("WARNING: Cannot lock memory:");
+ }
+
+ muse->show();
+ muse->seqStart();
+
+#ifdef HAVE_LASH
+ {
+ lash_client = 0;
+ if(useLASH)
+ {
+ int lash_flags = LASH_Config_File;
+ const char *muse_name = PACKAGE_NAME;
+ lash_client = lash_init (lash_args, muse_name, lash_flags, LASH_PROTOCOL(2,0));
+ lash_alsa_client_id (lash_client, snd_seq_client_id (alsaSeq));
+ if (!noAudio) {
+ // p3.3.38
+ //char *jack_name = ((JackAudioDevice*)audioDevice)->getJackName();
+ const char *jack_name = audioDevice->clientName();
+ lash_jack_client_name (lash_client, jack_name);
+ }
+ }
+ }
+#endif /* HAVE_LASH */
+ QTimer::singleShot(100, muse, SLOT(showDidYouKnowDialog()));
+
+ int rv = app.exec();
+ if(debugMsg)
+ printf("app.exec() returned:%d\nDeleting main MusE object\n", rv);
+ delete muse;
+ if(debugMsg)
+ printf("Finished! Exiting main, return value:%d\n", rv);
+ return rv;
+
+ }
diff --git a/muse2/muse/marker/CMakeLists.txt b/muse2/muse/marker/CMakeLists.txt
index b2b5084f..bc2b54ee 100644
--- a/muse2/muse/marker/CMakeLists.txt
+++ b/muse2/muse/marker/CMakeLists.txt
@@ -54,7 +54,7 @@ file (GLOB SOURCE_FILES
markerview.cpp # markerview.h
)
-add_library ( marker STATIC
+add_library ( marker SHARED
${SOURCE_FILES}
# ${marker_ui_headers}
${marker_mocs}
@@ -62,7 +62,16 @@ add_library ( marker STATIC
set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${SOURCE_FILES} CACHE INTERNAL "")
+install(TARGETS marker DESTINATION ${MUSE_MODULES_DIR})
+
+target_link_libraries ( marker
+ ${QT_LIBRARIES}
+ awl
+ icons
+ )
+
set_target_properties( marker
- PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h"
+ PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h -fPIC"
+ OUTPUT_NAME muse_marker
)
diff --git a/muse2/muse/master/CMakeLists.txt b/muse2/muse/master/CMakeLists.txt
index 168d13ab..84977163 100644
--- a/muse2/muse/master/CMakeLists.txt
+++ b/muse2/muse/master/CMakeLists.txt
@@ -55,7 +55,7 @@ file (GLOB SOURCE_FILES
tscale.cpp # tscale.h
)
-add_library ( master STATIC
+add_library ( master SHARED
${SOURCE_FILES}
# ${master_ui_headers}
${master_mocs}
@@ -63,7 +63,17 @@ add_library ( master STATIC
set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${SOURCE_FILES} CACHE INTERNAL "")
+install(TARGETS master DESTINATION ${MUSE_MODULES_DIR})
+
+target_link_libraries ( master
+ ${QT_LIBRARIES}
+ al
+ awl
+ widgets
+ )
+
set_target_properties( master
- PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h"
+ PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h -fPIC"
+ OUTPUT_NAME muse_master
)
diff --git a/muse2/muse/midiedit/CMakeLists.txt b/muse2/muse/midiedit/CMakeLists.txt
index 5fa2d5f9..1a77748a 100644
--- a/muse2/muse/midiedit/CMakeLists.txt
+++ b/muse2/muse/midiedit/CMakeLists.txt
@@ -76,7 +76,7 @@ file (GLOB SOURCE_FILES
ecanvas.cpp # ecanvas.h
)
-add_library ( midiedit STATIC
+add_library ( midiedit SHARED
${SOURCE_FILES}
# ${midiedit_ui_headers}
${midiedit_mocs}
@@ -84,9 +84,17 @@ add_library ( midiedit STATIC
set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${SOURCE_FILES} CACHE INTERNAL "")
-add_dependencies(midiedit widgets)
+install(TARGETS midiedit DESTINATION ${MUSE_MODULES_DIR})
+
+target_link_libraries ( midiedit
+ ${QT_LIBRARIES}
+ al
+ icons
+ widgets
+ )
set_target_properties( midiedit
- PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h"
+ PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h -fPIC"
+ OUTPUT_NAME muse_midiedit
)
diff --git a/muse2/muse/mixer/CMakeLists.txt b/muse2/muse/mixer/CMakeLists.txt
index 2a85ff32..52e08248 100644
--- a/muse2/muse/mixer/CMakeLists.txt
+++ b/muse2/muse/mixer/CMakeLists.txt
@@ -33,7 +33,7 @@ file (GLOB SOURCE_FILES
strip.cpp astrip.cpp mstrip.cpp
)
-add_library ( mixer STATIC
+add_library ( mixer SHARED
${SOURCE_FILES}
${mixer_mocs}
${mixer_uis}
@@ -41,7 +41,15 @@ add_library ( mixer STATIC
set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${SOURCE_FILES} ${UI_FILES} CACHE INTERNAL "")
+target_link_libraries ( mixer
+ ${QT_LIBRARIES}
+ widgets
+ )
+
+install(TARGETS mixer DESTINATION ${MUSE_MODULES_DIR})
+
set_target_properties ( mixer
- PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h"
+ PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h -fPIC"
+ OUTPUT_NAME muse_mixer
)
diff --git a/muse2/muse/mplugins/CMakeLists.txt b/muse2/muse/mplugins/CMakeLists.txt
index 0c8a8a1b..3395ff0a 100644
--- a/muse2/muse/mplugins/CMakeLists.txt
+++ b/muse2/muse/mplugins/CMakeLists.txt
@@ -59,8 +59,7 @@ file (GLOB SOURCE_FILES
random.cpp random.h
)
-# add_library ( mplugins SHARED
-add_library ( mplugins STATIC
+add_library ( mplugins SHARED
${SOURCE_FILES}
${mplugins_mocs}
${mplugins_uis}
@@ -69,12 +68,15 @@ add_library ( mplugins STATIC
set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${SOURCE_FILES} ${UI_FILES} CACHE INTERNAL "")
+install(TARGETS mplugins DESTINATION ${MUSE_MODULES_DIR})
+
add_dependencies(mplugins widgets)
-#target_link_libraries( mplugins
-# # midiplugin
-# ${QT_LIBRARIES}
-# )
+target_link_libraries( mplugins
+ # midiplugin
+ ${QT_LIBRARIES}
+ widgets
+ )
# - tell cmake to name target transform.so instead of
# libtransform.so
@@ -82,7 +84,8 @@ add_dependencies(mplugins widgets)
#
set_target_properties ( mplugins
# PROPERTIES PREFIX ""
- PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h"
+ PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h -fPIC"
+ OUTPUT_NAME muse_mplugins
)
# install_targets ( /${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}/midiplugins/ transform )
diff --git a/muse2/muse/remote/CMakeLists.txt b/muse2/muse/remote/CMakeLists.txt
index d137b683..01605975 100644
--- a/muse2/muse/remote/CMakeLists.txt
+++ b/muse2/muse/remote/CMakeLists.txt
@@ -9,13 +9,15 @@ file (GLOB remote_src
pyapi.cpp
)
-add_library(remote STATIC
+add_library(remote SHARED
${remote_src}
${PROJECT_BINARY_DIR}/all.h.pch
)
set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${remote_src} CACHE INTERNAL "")
+install(TARGETS remote DESTINATION ${MUSE_MODULES_DIR})
+
set_source_files_properties(
pyapi.cpp
PROPERTIES COMPILE_FLAGS "-fPIC -include ${PROJECT_BINARY_DIR}/all.h -include ${PYTHON_INCLUDES} -DENABLE_PYTHON"
diff --git a/muse2/muse/waveedit/CMakeLists.txt b/muse2/muse/waveedit/CMakeLists.txt
index 4fb6915e..cdd148ff 100644
--- a/muse2/muse/waveedit/CMakeLists.txt
+++ b/muse2/muse/waveedit/CMakeLists.txt
@@ -38,7 +38,7 @@ file (GLOB SOURCE_FILES
editgain.cpp
)
-add_library ( waveedit STATIC
+add_library ( waveedit SHARED
${SOURCE_FILES}
${waveedit_ui_headers}
${waveedit_mocs}
@@ -46,6 +46,15 @@ add_library ( waveedit STATIC
set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${SOURCE_FILES} ${UI_FILES} CACHE INTERNAL "")
+install(TARGETS waveedit DESTINATION ${MUSE_MODULES_DIR})
+
+target_link_libraries( waveedit
+ ${QT_LIBRARIES}
+ widgets
+ )
+
+
set_target_properties( waveedit
- PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h"
+ PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h -fPIC"
+ OUTPUT_NAME muse_waveedit
)
diff --git a/muse2/muse/widgets/CMakeLists.txt b/muse2/muse/widgets/CMakeLists.txt
index f1c6e453..989fea4a 100644
--- a/muse2/muse/widgets/CMakeLists.txt
+++ b/muse2/muse/widgets/CMakeLists.txt
@@ -232,14 +232,21 @@ file (GLOB SOURCE_FILES
menutitleitem.h
)
-add_library ( widgets STATIC
+add_library ( widgets SHARED
${widget_ui_headers}
${widget_mocs}
${SOURCE_FILES}
)
+target_link_libraries ( widgets
+ ${QT_LIBRARIES}
+ icons
+ )
+
set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${SOURCE_FILES} ${UI_FILES} CACHE INTERNAL "")
+install(TARGETS widgets DESTINATION ${MUSE_MODULES_DIR})
+
# AM_CXXFLAGS +=-DSVNVERSION=\"$(shell svnversion)\"
# EXEC_PROGRAM( svnversion
@@ -248,7 +255,8 @@ set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${SOURCE_FILES} ${UI_FILES} CACHE
set_target_properties( widgets
# PROPERTIES COMPILE_FLAGS "-DSVNVERSION='\"${SVNVER}\"' -include ${PROJECT_BINARY_DIR}/all.h ${MUSECXXFLAGS} -I../ -I${PROJECT_SOURCE_DIR}/synti "
- PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h ${MUSECXXFLAGS} -I../ -I${PROJECT_SOURCE_DIR}/synti "
+ PROPERTIES COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all.h ${MUSECXXFLAGS} -I../ -I${PROJECT_SOURCE_DIR}/synti -fPIC"
+ OUTPUT_NAME muse_widgets
)
diff --git a/muse2/synti/libsynti/CMakeLists.txt b/muse2/synti/libsynti/CMakeLists.txt
index 94137c70..0b257249 100644
--- a/muse2/synti/libsynti/CMakeLists.txt
+++ b/muse2/synti/libsynti/CMakeLists.txt
@@ -31,17 +31,20 @@ file (GLOB SOURCE_FILES
## mpevent.cpp
)
-add_library(synti
+add_library(synti SHARED
${PROJECT_BINARY_DIR}/all-pic.h.pch
${SOURCE_FILES}
)
set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${SOURCE_FILES} CACHE INTERNAL "")
+install(TARGETS synti DESTINATION ${MUSE_MODULES_DIR})
+
#
# -fPIC is necessary for 64 bit systems
#
set_target_properties( synti
PROPERTIES COMPILE_FLAGS "-fPIC -include ${PROJECT_BINARY_DIR}/all-pic.h"
+ OUTPUT_NAME muse_synti
)