On Saturday 21 November 2015 18:15:24 David Faure wrote:
> Yep, I see the same. I asked my colleagues (including the one who wrote
> elf-dissector and gdb-indexer, so he knows this kind of low-level stuff), but
> even he
> doesn't know why gdb would be so much slower with a shared lib than with a
> static lib.
>
> I have a theory though:
>
> $ nm -D $QTDIR/lib/libQtCore.so.4.8.7 | wc -l
> 4682
> $ nm -D $QTDIR/lib/libQtWebKit.so.4.9.4 | wc -l
> 3112
> $ nm -D $KDEDIR/librosegardenprivate.so | wc -l
> 54854
>
> In *all* the libs I have in $KDEDIR/lib, the one with most symbols is
> libkdeui.so: 11535.
> rosegarden's lib is far above that.
>
> So I'll try enabling -fvisibility=hidden and adding the necessary export
> macros, it should at least help with this.
Here's the resulting patch.
After this patch, nm -D librosegardenprivate.so| wc -l
12733
Much better.
I'm not sure it changes much for gdb though. In my tests,
the time for `start` in gdb went down from 20s to 17s.
But maybe for your use case (core file) it's different, so feel free
to give it a test.
--
David Faure, [email protected], http://www.davidfaure.fr
Working on KDE Frameworks 5
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1320815..bb5ff41 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -102,6 +102,7 @@ if(CMAKE_COMPILER_IS_GNUCXX)
if(CMAKE_SYSTEM_NAME MATCHES Linux OR CMAKE_SYSTEM_NAME STREQUAL GNU)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Woverloaded-virtual -Wextra -Wformat-nonliteral -Wformat-security -Winit-self -Wswitch-enum -Wnon-virtual-dtor -Wno-long-long -ansi -Wundef -Wcast-align -Wchar-subscripts -W -Wpointer-arith -fno-check-new -fno-common")
add_definitions(-DQT_NO_EXCEPTIONS)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
endif()
endif()
@@ -191,6 +192,7 @@ if(BUILD_TESTING)
message(STATUS "Building unit tests, using shared libraries")
else()
set(RG_LIBRARY_TYPE STATIC)
+ set(ROSEGARDENPRIVATE_STATIC_BUILD TRUE) # for generating rosegardenprivate-export.h
message(STATUS "Not building unit tests, using a static library for rosegarden")
endif()
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index e67a699..de7d4fe 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -5,7 +5,11 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
# Compiler definitions
-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/rosegarden-version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/rosegarden-version.h )
+configure_file(rosegarden-version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/rosegarden-version.h )
+
+# Export macros
+configure_file(rosegardenprivate_export.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/rosegardenprivate_export.h)
+add_definitions(-DROSEGARDENPRIVATE_LIB_MAKEDLL)
# Define the include paths (-I...)
include_directories(
diff --git a/src/base/NotationTypes.cpp b/src/base/NotationTypes.cpp
index 1e447c4..c2c443e 100644
--- a/src/base/NotationTypes.cpp
+++ b/src/base/NotationTypes.cpp
@@ -48,21 +48,21 @@ namespace Accidentals
* based on the performance pitch and current key at the
* location of the note.
*/
- const Accidental NoAccidental = "no-accidental";
+ ROSEGARDENPRIVATE_EXPORT const Accidental NoAccidental = "no-accidental";
- const Accidental Sharp = "sharp";
- const Accidental Flat = "flat";
- const Accidental Natural = "natural";
- const Accidental DoubleSharp = "double-sharp";
- const Accidental DoubleFlat = "double-flat";
+ ROSEGARDENPRIVATE_EXPORT const Accidental Sharp = "sharp";
+ ROSEGARDENPRIVATE_EXPORT const Accidental Flat = "flat";
+ ROSEGARDENPRIVATE_EXPORT const Accidental Natural = "natural";
+ ROSEGARDENPRIVATE_EXPORT const Accidental DoubleSharp = "double-sharp";
+ ROSEGARDENPRIVATE_EXPORT const Accidental DoubleFlat = "double-flat";
// Additional Accidentals for demi- and sesqui- sharps and flats
- const Accidental QuarterFlat = "demiflat";
- const Accidental ThreeQuarterFlat = "sesqiflat";
- const Accidental QuarterSharp = "demisharp";
- const Accidental ThreeQuarterSharp = "sesquisharp";
+ ROSEGARDENPRIVATE_EXPORT const Accidental QuarterFlat = "demiflat";
+ ROSEGARDENPRIVATE_EXPORT const Accidental ThreeQuarterFlat = "sesqiflat";
+ ROSEGARDENPRIVATE_EXPORT const Accidental QuarterSharp = "demisharp";
+ ROSEGARDENPRIVATE_EXPORT const Accidental ThreeQuarterSharp = "sesquisharp";
- AccidentalList getStandardAccidentals() {
+ ROSEGARDENPRIVATE_EXPORT AccidentalList getStandardAccidentals() {
static Accidental a[] = {
NoAccidental, Sharp, Flat, Natural, DoubleSharp, DoubleFlat
@@ -76,7 +76,7 @@ namespace Accidentals
return v;
}
- int getPitchOffset(const Accidental &acc) {
+ ROSEGARDENPRIVATE_EXPORT int getPitchOffset(const Accidental &acc) {
if (acc == DoubleSharp) return 2;
else if (acc == Sharp) return 1;
else if (acc == Flat) return -1;
@@ -84,7 +84,7 @@ namespace Accidentals
else return 0;
}
- Accidental getAccidental(int pitchChange) {
+ ROSEGARDENPRIVATE_EXPORT Accidental getAccidental(int pitchChange) {
if (pitchChange == -2) return DoubleFlat;
if (pitchChange == -1) return Flat;
// Yielding 'Natural' will add a natural-sign even if not needed, so for now
@@ -104,69 +104,69 @@ using namespace Accidentals;
namespace Marks
{
- const Mark NoMark = "no-mark";
- const Mark Accent = "accent";
- const Mark Tenuto = "tenuto";
- const Mark Staccato = "staccato";
- const Mark Staccatissimo = "staccatissimo";
- const Mark Marcato = "marcato";
- const Mark Open = "open";
- const Mark Stopped = "stopped";
- const Mark Harmonic = "harmonic";
- const Mark Sforzando = getTextMark("sf");
- const Mark Rinforzando = getTextMark("rf");
- const Mark Trill = "trill";
- const Mark LongTrill = "long-trill";
- const Mark TrillLine = "trill-line";
- const Mark Turn = "turn";
- const Mark Pause = "pause";
- const Mark UpBow = "up-bow";
- const Mark DownBow = "down-bow";
-
- const Mark Mordent = "mordent";
- const Mark MordentInverted = "mordent-inverted";
- const Mark MordentLong = "mordent-long";
- const Mark MordentLongInverted = "mordent-long-inverted";
-
- string getTextMark(string text) {
+ ROSEGARDENPRIVATE_EXPORT const Mark NoMark = "no-mark";
+ ROSEGARDENPRIVATE_EXPORT const Mark Accent = "accent";
+ ROSEGARDENPRIVATE_EXPORT const Mark Tenuto = "tenuto";
+ ROSEGARDENPRIVATE_EXPORT const Mark Staccato = "staccato";
+ ROSEGARDENPRIVATE_EXPORT const Mark Staccatissimo = "staccatissimo";
+ ROSEGARDENPRIVATE_EXPORT const Mark Marcato = "marcato";
+ ROSEGARDENPRIVATE_EXPORT const Mark Open = "open";
+ ROSEGARDENPRIVATE_EXPORT const Mark Stopped = "stopped";
+ ROSEGARDENPRIVATE_EXPORT const Mark Harmonic = "harmonic";
+ ROSEGARDENPRIVATE_EXPORT const Mark Sforzando = getTextMark("sf");
+ ROSEGARDENPRIVATE_EXPORT const Mark Rinforzando = getTextMark("rf");
+ ROSEGARDENPRIVATE_EXPORT const Mark Trill = "trill";
+ ROSEGARDENPRIVATE_EXPORT const Mark LongTrill = "long-trill";
+ ROSEGARDENPRIVATE_EXPORT const Mark TrillLine = "trill-line";
+ ROSEGARDENPRIVATE_EXPORT const Mark Turn = "turn";
+ ROSEGARDENPRIVATE_EXPORT const Mark Pause = "pause";
+ ROSEGARDENPRIVATE_EXPORT const Mark UpBow = "up-bow";
+ ROSEGARDENPRIVATE_EXPORT const Mark DownBow = "down-bow";
+
+ ROSEGARDENPRIVATE_EXPORT const Mark Mordent = "mordent";
+ ROSEGARDENPRIVATE_EXPORT const Mark MordentInverted = "mordent-inverted";
+ ROSEGARDENPRIVATE_EXPORT const Mark MordentLong = "mordent-long";
+ ROSEGARDENPRIVATE_EXPORT const Mark MordentLongInverted = "mordent-long-inverted";
+
+ ROSEGARDENPRIVATE_EXPORT string getTextMark(string text) {
return string("text_") + text;
}
- bool isTextMark(Mark mark) {
+ ROSEGARDENPRIVATE_EXPORT bool isTextMark(Mark mark) {
return string(mark).substr(0, 5) == "text_";
}
- string getTextFromMark(Mark mark) {
+ ROSEGARDENPRIVATE_EXPORT string getTextFromMark(Mark mark) {
if (!isTextMark(mark)) return string();
else return string(mark).substr(5);
}
- string getFingeringMark(string fingering) {
+ ROSEGARDENPRIVATE_EXPORT string getFingeringMark(string fingering) {
return string("finger_") + fingering;
}
- bool isFingeringMark(Mark mark) {
+ ROSEGARDENPRIVATE_EXPORT bool isFingeringMark(Mark mark) {
return string(mark).substr(0, 7) == "finger_";
}
- bool isApplicableToRests(Mark mark) {
+ ROSEGARDENPRIVATE_EXPORT bool isApplicableToRests(Mark mark) {
if (mark == Marks::Pause) return true;
if (isTextMark(mark)) return true;
return false;
}
- string getFingeringFromMark(Mark mark) {
+ ROSEGARDENPRIVATE_EXPORT string getFingeringFromMark(Mark mark) {
if (!isFingeringMark(mark)) return string();
else return string(mark).substr(7);
}
- int getMarkCount(const Event &e) {
+ ROSEGARDENPRIVATE_EXPORT int getMarkCount(const Event &e) {
long markCount = 0;
e.get<Int>(BaseProperties::MARK_COUNT, markCount);
return markCount;
}
- std::vector<Mark> getMarks(const Event &e) {
+ ROSEGARDENPRIVATE_EXPORT std::vector<Mark> getMarks(const Event &e) {
std::vector<Mark> marks;
@@ -185,7 +185,7 @@ namespace Marks
return marks;
}
- Mark getFingeringMark(const Event &e) {
+ ROSEGARDENPRIVATE_EXPORT Mark getFingeringMark(const Event &e) {
long markCount = 0;
e.get<Int>(BaseProperties::MARK_COUNT, markCount);
@@ -202,7 +202,7 @@ namespace Marks
return NoMark;
}
- void addMark(Event &e, const Mark &mark, bool unique) {
+ ROSEGARDENPRIVATE_EXPORT void addMark(Event &e, const Mark &mark, bool unique) {
if (unique && hasMark(e, mark)) return;
long markCount = 0;
@@ -213,7 +213,7 @@ namespace Marks
e.set<String>(markProperty, mark);
}
- bool removeMark(Event &e, const Mark &mark) {
+ ROSEGARDENPRIVATE_EXPORT bool removeMark(Event &e, const Mark &mark) {
long markCount = 0;
e.get<Int>(BaseProperties::MARK_COUNT, markCount);
@@ -239,7 +239,7 @@ namespace Marks
return false;
}
- bool hasMark(const Event &e, const Mark &mark) {
+ ROSEGARDENPRIVATE_EXPORT bool hasMark(const Event &e, const Mark &mark) {
long markCount = 0;
e.get<Int>(BaseProperties::MARK_COUNT, markCount);
@@ -253,7 +253,7 @@ namespace Marks
return false;
}
- std::vector<Mark> getStandardMarks() {
+ ROSEGARDENPRIVATE_EXPORT std::vector<Mark> getStandardMarks() {
static Mark a[] = {
NoMark, Accent, Tenuto, Staccato, Staccatissimo, Marcato, Open,
diff --git a/src/base/NotationTypes.h b/src/base/NotationTypes.h
index 835d1e9..46f701b 100644
--- a/src/base/NotationTypes.h
+++ b/src/base/NotationTypes.h
@@ -19,6 +19,8 @@
#include <list>
#include <map>
+#include <rosegardenprivate_export.h>
+
#include "Event.h"
/*
@@ -60,7 +62,7 @@
namespace Rosegarden
{
-extern const int MIN_SUBORDERING;
+extern ROSEGARDENPRIVATE_EXPORT const int MIN_SUBORDERING;
typedef std::list<int> DurationList;
@@ -77,16 +79,16 @@ typedef std::string Accidental;
namespace Accidentals
{
- extern const Accidental NoAccidental;
- extern const Accidental Sharp;
- extern const Accidental Flat;
- extern const Accidental Natural;
- extern const Accidental DoubleSharp;
- extern const Accidental DoubleFlat;
- extern const Accidental QuarterFlat;
- extern const Accidental ThreeQuarterFlat;
- extern const Accidental QuarterSharp;
- extern const Accidental ThreeQuarterSharp;
+ extern ROSEGARDENPRIVATE_EXPORT const Accidental NoAccidental;
+ extern ROSEGARDENPRIVATE_EXPORT const Accidental Sharp;
+ extern ROSEGARDENPRIVATE_EXPORT const Accidental Flat;
+ extern ROSEGARDENPRIVATE_EXPORT const Accidental Natural;
+ extern ROSEGARDENPRIVATE_EXPORT const Accidental DoubleSharp;
+ extern ROSEGARDENPRIVATE_EXPORT const Accidental DoubleFlat;
+ extern ROSEGARDENPRIVATE_EXPORT const Accidental QuarterFlat;
+ extern ROSEGARDENPRIVATE_EXPORT const Accidental ThreeQuarterFlat;
+ extern ROSEGARDENPRIVATE_EXPORT const Accidental QuarterSharp;
+ extern ROSEGARDENPRIVATE_EXPORT const Accidental ThreeQuarterSharp;
typedef std::vector<Accidental> AccidentalList;
@@ -111,7 +113,7 @@ namespace Accidentals
* Get the predefined accidentals (i.e. the ones listed above)
* in their defined order.
*/
- extern AccidentalList getStandardAccidentals();
+ extern ROSEGARDENPRIVATE_EXPORT AccidentalList getStandardAccidentals();
/**
* Get the change in pitch resulting from an accidental: -1 for
@@ -120,7 +122,7 @@ namespace Accidentals
* effect of an accidental depends on the key as well -- see
* the Key and Pitch classes.
*/
- extern int getPitchOffset(const Accidental &accidental);
+ extern ROSEGARDENPRIVATE_EXPORT int getPitchOffset(const Accidental &accidental);
/**
@@ -130,7 +132,7 @@ namespace Accidentals
* Useful for tying to code that represents accidentals by
* their pitch change.
*/
- extern Accidental getAccidental(int pitchChange);
+ extern ROSEGARDENPRIVATE_EXPORT Accidental getAccidental(int pitchChange);
}
@@ -142,51 +144,51 @@ typedef std::string Mark;
namespace Marks //!!! This would be better as a class, these days
{
- extern const Mark NoMark; // " "
+ extern ROSEGARDENPRIVATE_EXPORT const Mark NoMark; // " "
- extern const Mark Accent; // ">"
- extern const Mark Tenuto; // "-" ("legato" in RG2.1)
- extern const Mark Staccato; // "."
- extern const Mark Staccatissimo; // "'"
- extern const Mark Marcato; // "^"
- extern const Mark Open; // "o"
- extern const Mark Stopped; // "+"
- extern const Mark Harmonic; // "°"
+ extern ROSEGARDENPRIVATE_EXPORT const Mark Accent; // ">"
+ extern ROSEGARDENPRIVATE_EXPORT const Mark Tenuto; // "-" ("legato" in RG2.1)
+ extern ROSEGARDENPRIVATE_EXPORT const Mark Staccato; // "."
+ extern ROSEGARDENPRIVATE_EXPORT const Mark Staccatissimo; // "'"
+ extern ROSEGARDENPRIVATE_EXPORT const Mark Marcato; // "^"
+ extern ROSEGARDENPRIVATE_EXPORT const Mark Open; // "o"
+ extern ROSEGARDENPRIVATE_EXPORT const Mark Stopped; // "+"
+ extern ROSEGARDENPRIVATE_EXPORT const Mark Harmonic; // "°"
- extern const Mark Sforzando; // "sf"
- extern const Mark Rinforzando; // "rf"
+ extern ROSEGARDENPRIVATE_EXPORT const Mark Sforzando; // "sf"
+ extern ROSEGARDENPRIVATE_EXPORT const Mark Rinforzando; // "rf"
- extern const Mark Trill; // "tr"
- extern const Mark LongTrill; // with wiggly line
- extern const Mark TrillLine; // line on its own
- extern const Mark Turn; // "~"
+ extern ROSEGARDENPRIVATE_EXPORT const Mark Trill; // "tr"
+ extern ROSEGARDENPRIVATE_EXPORT const Mark LongTrill; // with wiggly line
+ extern ROSEGARDENPRIVATE_EXPORT const Mark TrillLine; // line on its own
+ extern ROSEGARDENPRIVATE_EXPORT const Mark Turn; // "~"
- extern const Mark Pause; // aka "fermata"
+ extern ROSEGARDENPRIVATE_EXPORT const Mark Pause; // aka "fermata"
- extern const Mark UpBow; // "v"
- extern const Mark DownBow; // a square with the bottom side missing
+ extern ROSEGARDENPRIVATE_EXPORT const Mark UpBow; // "v"
+ extern ROSEGARDENPRIVATE_EXPORT const Mark DownBow; // a square with the bottom side missing
- extern const Mark Mordent;
- extern const Mark MordentInverted;
- extern const Mark MordentLong;
- extern const Mark MordentLongInverted;
+ extern ROSEGARDENPRIVATE_EXPORT const Mark Mordent;
+ extern ROSEGARDENPRIVATE_EXPORT const Mark MordentInverted;
+ extern ROSEGARDENPRIVATE_EXPORT const Mark MordentLong;
+ extern ROSEGARDENPRIVATE_EXPORT const Mark MordentLongInverted;
/**
* Given a string, return a mark that will be recognised as a
* text mark containing that string. For example, the Sforzando
* mark is actually defined as getTextMark("sf").
*/
- extern Mark getTextMark(std::string text);
+ extern ROSEGARDENPRIVATE_EXPORT Mark getTextMark(std::string text);
/**
* Return true if the given mark is a text mark.
*/
- extern bool isTextMark(Mark mark);
+ extern ROSEGARDENPRIVATE_EXPORT bool isTextMark(Mark mark);
/**
* Extract the string from a text mark.
*/
- extern std::string getTextFromMark(Mark mark);
+ extern ROSEGARDENPRIVATE_EXPORT std::string getTextFromMark(Mark mark);
/**
* Given a string, return a mark that will be recognised as a
@@ -194,62 +196,62 @@ namespace Marks //!!! This would be better as a class, these days
* instead of a number to permit "fingering" marks containing
* labels like "+".)
*/
- extern Mark getFingeringMark(std::string fingering);
+ extern ROSEGARDENPRIVATE_EXPORT Mark getFingeringMark(std::string fingering);
/**
* Return true if the given mark is a fingering mark.
*/
- extern bool isFingeringMark(Mark mark);
+ extern ROSEGARDENPRIVATE_EXPORT bool isFingeringMark(Mark mark);
/**
* Extract the string from a fingering mark.
*/
- extern std::string getFingeringFromMark(Mark mark);
+ extern ROSEGARDENPRIVATE_EXPORT std::string getFingeringFromMark(Mark mark);
/**
* Return true if the given mark makes sense when applied to a rest.
*/
- extern bool isApplicableToRests(Mark mark);
+ extern ROSEGARDENPRIVATE_EXPORT bool isApplicableToRests(Mark mark);
/**
* Extract the number of marks from an event.
*/
- extern int getMarkCount(const Event &e);
+ extern ROSEGARDENPRIVATE_EXPORT int getMarkCount(const Event &e);
/**
* Extract the marks from an event.
*/
- extern std::vector<Mark> getMarks(const Event &e);
+ extern ROSEGARDENPRIVATE_EXPORT std::vector<Mark> getMarks(const Event &e);
/**
* Return the first fingering mark on an event (or NoMark, if none).
*/
- extern Mark getFingeringMark(const Event &e);
+ extern ROSEGARDENPRIVATE_EXPORT Mark getFingeringMark(const Event &e);
/**
* Add a mark to an event. If unique is true, add the mark only
* if the event does not already have it (otherwise permit
* multiple identical marks).
*/
- extern void addMark(Event &e, const Mark &mark, bool unique);
+ extern ROSEGARDENPRIVATE_EXPORT void addMark(Event &e, const Mark &mark, bool unique);
/**
* Remove a mark from an event. Returns true if the mark was
* there to remove. If the mark was not unique, removes only
* the first instance of it.
*/
- extern bool removeMark(Event &e, const Mark &mark);
+ extern ROSEGARDENPRIVATE_EXPORT bool removeMark(Event &e, const Mark &mark);
/**
* Returns true if the event has the given mark.
*/
- extern bool hasMark(const Event &e, const Mark &mark);
+ extern ROSEGARDENPRIVATE_EXPORT bool hasMark(const Event &e, const Mark &mark);
/**
* Get the predefined marks (i.e. the ones listed above) in their
* defined order.
*/
- extern std::vector<Mark> getStandardMarks();
+ extern ROSEGARDENPRIVATE_EXPORT std::vector<Mark> getStandardMarks();
}
@@ -259,7 +261,7 @@ namespace Marks //!!! This would be better as a class, these days
* provides a few bits of information about the clefs.
*/
-class Clef
+class ROSEGARDENPRIVATE_EXPORT Clef
{
public:
static const std::string EventType;
@@ -381,7 +383,7 @@ private:
* transposing between keys.
*/
-class Key
+class ROSEGARDENPRIVATE_EXPORT Key
{
public:
static const std::string EventType;
@@ -774,7 +776,7 @@ private:
* This completely replaces the older NotationDisplayPitch class.
*/
-class Pitch
+class ROSEGARDENPRIVATE_EXPORT Pitch
{
public:
/**
@@ -1031,7 +1033,7 @@ class TimeSignature;
* note events. You can construct one of these from either.
*/
-class Note
+class ROSEGARDENPRIVATE_EXPORT Note
{
public:
static const std::string EventType;
@@ -1128,7 +1130,7 @@ private:
* but only in the Composition's reference segment.
*/
-class TimeSignature
+class ROSEGARDENPRIVATE_EXPORT TimeSignature
{
public:
static const TimeSignature DefaultTimeSignature;
@@ -1316,7 +1318,7 @@ private:
* and call newBar() or newClef() when a new bar happens or a new
* clef is encountered.
*/
-class AccidentalTable
+class ROSEGARDENPRIVATE_EXPORT AccidentalTable
{
public:
enum OctaveType {
@@ -1377,7 +1379,7 @@ private:
*
* \author D. Michael McIntyre
*/
-class Symbol
+class ROSEGARDENPRIVATE_EXPORT Symbol
{
public:
static const std::string EventType;
diff --git a/src/base/RealTime.h b/src/base/RealTime.h
index 1d4c374..998dacb 100644
--- a/src/base/RealTime.h
+++ b/src/base/RealTime.h
@@ -19,12 +19,14 @@
#include <iostream>
#include <string>
+#include <rosegardenprivate_export.h>
+
struct timeval;
namespace Rosegarden
{
-struct RealTime
+struct ROSEGARDENPRIVATE_EXPORT RealTime
{
int sec;
int nsec;
diff --git a/src/base/Segment.h b/src/base/Segment.h
index 9da19dc..5d086af 100644
--- a/src/base/Segment.h
+++ b/src/base/Segment.h
@@ -66,7 +66,7 @@ class BasicCommand;
* They provide no virtual dtor. EventContainer should instead
* have a std::multiset member object.
*/
-class EventContainer : public std::multiset<Event*, Event::EventCmp>
+class ROSEGARDENPRIVATE_EXPORT EventContainer : public std::multiset<Event*, Event::EventCmp>
{
public:
iterator findEventOfType(iterator i, const std::string &type);
@@ -91,7 +91,7 @@ class EventContainer : public std::multiset<Event*, Event::EventCmp>
*
* The Segment owns the Events its items are pointing at.
*/
-class Segment : public QObject, public EventContainer
+class ROSEGARDENPRIVATE_EXPORT Segment : public QObject, public EventContainer
{
Q_OBJECT
@@ -1013,7 +1013,7 @@ typedef Segment::SegmentMultiSet SegmentMultiSet;
/**
* See Segment::addObserver() and Segment::m_observers.
*/
-class SegmentObserver
+class ROSEGARDENPRIVATE_EXPORT SegmentObserver
{
public:
virtual ~SegmentObserver() {}
diff --git a/src/base/Selection.h b/src/base/Selection.h
index 7b349fa..7eaec4b 100644
--- a/src/base/Selection.h
+++ b/src/base/Selection.h
@@ -40,7 +40,7 @@ public:
* does not take a copy of those Events, it just remembers which ones they are.
*/
-class EventSelection : public SegmentObserver
+class ROSEGARDENPRIVATE_EXPORT EventSelection : public SegmentObserver
{
public:
typedef EventContainer eventcontainer;
diff --git a/src/commands/segment/SegmentTransposeCommand.h b/src/commands/segment/SegmentTransposeCommand.h
index 0de7df0..98f9389 100644
--- a/src/commands/segment/SegmentTransposeCommand.h
+++ b/src/commands/segment/SegmentTransposeCommand.h
@@ -31,7 +31,7 @@ namespace Rosegarden
class Segment;
-class SegmentTransposeCommand : public MacroCommand
+class ROSEGARDENPRIVATE_EXPORT SegmentTransposeCommand : public MacroCommand
{
Q_DECLARE_TR_FUNCTIONS(Rosegarden::SegmentTransposeCommand)
diff --git a/src/document/RosegardenDocument.h b/src/document/RosegardenDocument.h
index 56d00ee..82e734e 100644
--- a/src/document/RosegardenDocument.h
+++ b/src/document/RosegardenDocument.h
@@ -76,7 +76,7 @@ static const int MERGE_KEEP_NEW_TIMINGS = (1 << 3);
* RosegardenDocument owns the Composition in the document.
*/
-class RosegardenDocument : public QObject
+class ROSEGARDENPRIVATE_EXPORT RosegardenDocument : public QObject
{
Q_OBJECT
public:
diff --git a/src/document/io/LilyPondExporter.h b/src/document/io/LilyPondExporter.h
index 92e539e..c692b43 100644
--- a/src/document/io/LilyPondExporter.h
+++ b/src/document/io/LilyPondExporter.h
@@ -86,7 +86,7 @@ const std::string headerTagline = "tagline";
* LilyPond scorefile export
*/
-class LilyPondExporter : public ProgressReporter
+class ROSEGARDENPRIVATE_EXPORT LilyPondExporter : public ProgressReporter
{
//Q_OBJECT
public:
diff --git a/src/gui/application/RosegardenApplication.cpp b/src/gui/application/RosegardenApplication.cpp
index 1ee0081..8d715a4 100644
--- a/src/gui/application/RosegardenApplication.cpp
+++ b/src/gui/application/RosegardenApplication.cpp
@@ -36,8 +36,7 @@
#include <QSettings>
-namespace Rosegarden
-{
+using namespace Rosegarden;
static bool s_noSequencerMode = false;
@@ -87,10 +86,24 @@ void RosegardenApplication::slotSetStatusMessage(QString msg)
}
+// to be outside the Rosegarden namespace
+static void initResources()
+{
+ // Initialize .qrc resources (necessary when using a static lib)
+ Q_INIT_RESOURCE(data);
+ Q_INIT_RESOURCE(locale);
+}
+
+RosegardenApplication::RosegardenApplication(int &argc, char **argv) :
+ QApplication(argc, argv) {
+
+ initResources();
+}
+
void
RosegardenApplication::refreshGUI(int /* maxTime */)
{
-// eventLoop()->processEvents(QEventLoop::ExcludeUserInput | //&&& eventLoop()->processEvents()
+ // eventLoop()->processEvents(QEventLoop::ExcludeUserInput | //&&& eventLoop()->processEvents()
// QEventLoop::ExcludeSocketNotifiers,
// maxTime);
}
@@ -125,6 +138,3 @@ RosegardenApplication::notify(QObject * receiver, QEvent * event)
return false;
}
}
-
-}
-
diff --git a/src/gui/application/RosegardenApplication.h b/src/gui/application/RosegardenApplication.h
index 60e4702..efd2fb1 100644
--- a/src/gui/application/RosegardenApplication.h
+++ b/src/gui/application/RosegardenApplication.h
@@ -22,6 +22,7 @@
#include <QByteArray>
#include <QString>
+#include <rosegardenprivate_export.h>
class QSessionManager;
class QProcess;
@@ -38,12 +39,11 @@ namespace Rosegarden
* Handles RosegardenMainWindow's perceived uniqueness for us.
*
*/
-class RosegardenApplication : public QApplication
+class ROSEGARDENPRIVATE_EXPORT RosegardenApplication : public QApplication
{
Q_OBJECT
public:
- RosegardenApplication(int &argc, char **argv) :
- QApplication(argc, argv) {}
+ RosegardenApplication(int &argc, char **argv);
/**
* Handle the attempt at creation of a new instance -
diff --git a/src/gui/application/RosegardenMainWindow.h b/src/gui/application/RosegardenMainWindow.h
index e034926..bd1583a 100644
--- a/src/gui/application/RosegardenMainWindow.h
+++ b/src/gui/application/RosegardenMainWindow.h
@@ -41,6 +41,8 @@
#include <map>
#include <set>
+#include <rosegardenprivate_export.h>
+
class QWidget;
class QTimer;
class QTextCodec;
@@ -113,7 +115,7 @@ class ConfigureDialog;
* contains the TrackEditor.
* * getTransport() returns the TransportDialog instance.
*/
-class RosegardenMainWindow : public QMainWindow, public ActionFileClient
+class ROSEGARDENPRIVATE_EXPORT RosegardenMainWindow : public QMainWindow, public ActionFileClient
{
Q_OBJECT
diff --git a/src/gui/application/main.cpp b/src/gui/application/main.cpp
index c5f5ecb..b751f7e 100644
--- a/src/gui/application/main.cpp
+++ b/src/gui/application/main.cpp
@@ -451,9 +451,6 @@ int main(int argc, char *argv[])
std::cout << "Thorn - " << std::boolalpha << Thorn << std::endl;
- Q_INIT_RESOURCE(data);
- Q_INIT_RESOURCE(locale);
-
// In order to ensure the Thorn style comes out right, we need to set our
// custom style, which is based on QPlastiqueStyle
if (Thorn) QApplication::setStyle(new ThornStyle);
diff --git a/src/gui/dialogs/IntervalDialog.h b/src/gui/dialogs/IntervalDialog.h
index c218e1d..c4742c3 100644
--- a/src/gui/dialogs/IntervalDialog.h
+++ b/src/gui/dialogs/IntervalDialog.h
@@ -23,6 +23,7 @@
#include <vector>
#include "gui/widgets/DiatonicPitchChooser.h"
+#include <rosegardenprivate_export.h>
class QWidget;
class QComboBox;
@@ -36,7 +37,7 @@ namespace Rosegarden
class RosegardenDocument;
-class IntervalDialog : public QDialog
+class ROSEGARDENPRIVATE_EXPORT IntervalDialog : public QDialog
{
Q_OBJECT
public:
diff --git a/src/gui/general/IconLoader.h b/src/gui/general/IconLoader.h
index 1c4fd12..12eefb3 100644
--- a/src/gui/general/IconLoader.h
+++ b/src/gui/general/IconLoader.h
@@ -23,10 +23,11 @@
#include <QString>
#include <map>
+#include <rosegardenprivate_export.h>
namespace Rosegarden {
-class IconLoader
+class ROSEGARDENPRIVATE_EXPORT IconLoader
{
public:
IconLoader() { }
diff --git a/src/gui/general/ProgressReporter.h b/src/gui/general/ProgressReporter.h
index 2fe63ea..26600d7 100644
--- a/src/gui/general/ProgressReporter.h
+++ b/src/gui/general/ProgressReporter.h
@@ -21,7 +21,7 @@
#include <QObject>
-
+#include <rosegardenprivate_export.h>
namespace Rosegarden
@@ -29,7 +29,7 @@ namespace Rosegarden
-class ProgressReporter : public QObject
+class ROSEGARDENPRIVATE_EXPORT ProgressReporter : public QObject
{
Q_OBJECT
public:
diff --git a/src/gui/general/ResourceFinder.h b/src/gui/general/ResourceFinder.h
index 91827e0..c0591ab 100644
--- a/src/gui/general/ResourceFinder.h
+++ b/src/gui/general/ResourceFinder.h
@@ -16,10 +16,11 @@
#define RG_RESOURCE_FINDER_H
#include <QString>
+#include <rosegardenprivate_export.h>
namespace Rosegarden {
-class ResourceFinder
+class ROSEGARDENPRIVATE_EXPORT ResourceFinder
{
public:
ResourceFinder() { }
diff --git a/src/gui/general/ThornStyle.h b/src/gui/general/ThornStyle.h
index c480b38..2b5624b 100644
--- a/src/gui/general/ThornStyle.h
+++ b/src/gui/general/ThornStyle.h
@@ -20,7 +20,7 @@
#include <QPlastiqueStyle>
#include <QIcon>
-
+#include <rosegardenprivate_export.h>
namespace Rosegarden
{
@@ -29,7 +29,7 @@ namespace Rosegarden
/** Subclass QPlastiqueStyle so we can define our own custom icons for
* QMessageBox and so on and make them look better in the Thorn style.
*/
-class ThornStyle : public QPlastiqueStyle
+class ROSEGARDENPRIVATE_EXPORT ThornStyle : public QPlastiqueStyle
{
Q_OBJECT
diff --git a/src/gui/widgets/CurrentProgressDialog.h b/src/gui/widgets/CurrentProgressDialog.h
index 048dc58..662d864 100644
--- a/src/gui/widgets/CurrentProgressDialog.h
+++ b/src/gui/widgets/CurrentProgressDialog.h
@@ -20,7 +20,7 @@
#include <QObject>
-
+#include <rosegardenprivate_export.h>
namespace Rosegarden
@@ -29,7 +29,7 @@ namespace Rosegarden
class ProgressDialog;
-class CurrentProgressDialog : public QObject
+class ROSEGARDENPRIVATE_EXPORT CurrentProgressDialog : public QObject
{
Q_OBJECT
public:
diff --git a/src/gui/widgets/StartupLogo.h b/src/gui/widgets/StartupLogo.h
index 48e2f83..44e2164 100644
--- a/src/gui/widgets/StartupLogo.h
+++ b/src/gui/widgets/StartupLogo.h
@@ -22,10 +22,12 @@
#include <QWidget>
#include <QPixmap>
+#include <rosegardenprivate_export.h>
+
namespace Rosegarden
{
-class StartupLogo : public QWidget
+class ROSEGARDENPRIVATE_EXPORT StartupLogo : public QWidget
{
Q_OBJECT
diff --git a/src/misc/ConfigGroups.cpp b/src/misc/ConfigGroups.cpp
index cc845a5..8ebc2f7 100644
--- a/src/misc/ConfigGroups.cpp
+++ b/src/misc/ConfigGroups.cpp
@@ -20,7 +20,7 @@ namespace Rosegarden
//
// QSettings group names
//
- const char* const GeneralOptionsConfigGroup = "General_Options";
+ ROSEGARDENPRIVATE_EXPORT const char* const GeneralOptionsConfigGroup = "General_Options";
const char* const LatencyOptionsConfigGroup = "Latency_Options";
const char* const SequencerOptionsConfigGroup = "Sequencer_Options";
const char* const NotationViewConfigGroup = "Notation_Options";
@@ -45,7 +45,7 @@ namespace Rosegarden
const char* const EditViewConfigGroup = "Edit_View";
const char* const PresetDialogConfigGroup = "Parameter_Presets";
const char* const ExternalApplicationsConfigGroup = "External_Applications";
- const char* const LilyPondExportConfigGroup = "LilyPond_Export";
+ ROSEGARDENPRIVATE_EXPORT const char* const LilyPondExportConfigGroup = "LilyPond_Export";
const char* const MusicXMLExportConfigGroup = "MusicXML_Export";
const char* const LastUsedPathsConfigGroup = "Last_Used_Paths";
const char* const WindowGeometryConfigGroup = "Window_Geometry";
diff --git a/src/misc/ConfigGroups.h b/src/misc/ConfigGroups.h
index 4eb946b..74c0746 100644
--- a/src/misc/ConfigGroups.h
+++ b/src/misc/ConfigGroups.h
@@ -21,11 +21,13 @@
#ifndef RG_CONFIG_GROUPS_H
#define RG_CONFIG_GROUPS_H
+#include <rosegardenprivate_export.h>
+
namespace Rosegarden
{
- extern const char* const GeneralOptionsConfigGroup;
+ extern ROSEGARDENPRIVATE_EXPORT const char* const GeneralOptionsConfigGroup;
extern const char* const LatencyOptionsConfigGroup;
- extern const char* const SequencerOptionsConfigGroup;
+ extern ROSEGARDENPRIVATE_EXPORT const char* const SequencerOptionsConfigGroup;
extern const char* const NotationViewConfigGroup;
extern const char* const PitchTrackerConfigGroup;
extern const char* const AudioManagerDialogConfigGroup;
@@ -48,7 +50,7 @@ namespace Rosegarden
extern const char* const EditViewConfigGroup;
extern const char* const PresetDialogConfigGroup;
extern const char* const ExternalApplicationsConfigGroup;
- extern const char* const LilyPondExportConfigGroup;
+ extern ROSEGARDENPRIVATE_EXPORT const char* const LilyPondExportConfigGroup;
extern const char* const MusicXMLExportConfigGroup;
extern const char* const LastUsedPathsConfigGroup;
extern const char* const WindowGeometryConfigGroup;
diff --git a/src/misc/Debug.cpp b/src/misc/Debug.cpp
index 5241b65..e55605b 100644
--- a/src/misc/Debug.cpp
+++ b/src/misc/Debug.cpp
@@ -28,16 +28,14 @@ namespace Rosegarden
{
-QDebug &
-operator<<(QDebug &dbg, const std::string &s)
+ROSEGARDENPRIVATE_EXPORT QDebug &operator<<(QDebug &dbg, const std::string &s)
{
dbg << strtoqstr(s);
return dbg;
}
-QDebug &
-operator<<(QDebug &dbg, const Rosegarden::Event &e)
+ROSEGARDENPRIVATE_EXPORT QDebug &operator<<(QDebug &dbg, const Rosegarden::Event &e)
{
dbg << "Event type : " << e.getType() << '\n';
dbg << "\tDuration : " << e.getDuration() << '\n';
@@ -54,8 +52,7 @@ operator<<(QDebug &dbg, const Rosegarden::Event &e)
return dbg;
}
-QDebug &
-operator<<(QDebug &dbg, const Rosegarden::Segment &t)
+ROSEGARDENPRIVATE_EXPORT QDebug &operator<<(QDebug &dbg, const Rosegarden::Segment &t)
{
// dbg << "Segment for instrument " << t.getTrack()
// << " starting at " << t.getStartTime() << '\n';
@@ -86,22 +83,19 @@ operator<<(QDebug &dbg, const Rosegarden::Segment &t)
return dbg;
}
-QDebug &
-operator<<(QDebug &dbg, const Rosegarden::RealTime &t)
+ROSEGARDENPRIVATE_EXPORT QDebug &operator<<(QDebug &dbg, const Rosegarden::RealTime &t)
{
dbg << t.toString();
return dbg;
}
-QDebug &
-operator<<(QDebug &dbg, const Rosegarden::Colour &c)
+ROSEGARDENPRIVATE_EXPORT QDebug &operator<<(QDebug &dbg, const Rosegarden::Colour &c)
{
dbg << "Colour : rgb = " << c.getRed() << "," << c.getGreen() << "," << c.getBlue();
return dbg;
}
-QDebug &
-operator<<(QDebug &dbg, const Rosegarden::Guitar::Chord &c)
+ROSEGARDENPRIVATE_EXPORT QDebug &operator<<(QDebug &dbg, const Rosegarden::Guitar::Chord &c)
{
dbg << "Chord root = " << c.getRoot() << ", ext = '" << c.getExt() << "'";
@@ -123,5 +117,4 @@ operator<<(QDebug &dbg, const Rosegarden::Guitar::Chord &c)
return dbg;
}
-
}
diff --git a/src/misc/Debug.h b/src/misc/Debug.h
index 07c5e66..7c2ba2e 100644
--- a/src/misc/Debug.h
+++ b/src/misc/Debug.h
@@ -20,6 +20,7 @@
#include <QTextStream>
#include <string>
+#include <rosegardenprivate_export.h>
namespace Rosegarden {
@@ -32,12 +33,12 @@ namespace Guitar {
class Chord;
}
-QDebug &operator<<(QDebug &, const std::string &);
-QDebug &operator<<(QDebug &, const Rosegarden::Event &);
-QDebug &operator<<(QDebug &, const Rosegarden::Segment &);
-QDebug &operator<<(QDebug &, const Rosegarden::RealTime &);
-QDebug &operator<<(QDebug &, const Rosegarden::Colour &);
-QDebug &operator<<(QDebug &, const Rosegarden::Guitar::Chord &);
+ROSEGARDENPRIVATE_EXPORT QDebug &operator<<(QDebug &, const std::string &);
+ROSEGARDENPRIVATE_EXPORT QDebug &operator<<(QDebug &, const Rosegarden::Event &);
+ROSEGARDENPRIVATE_EXPORT QDebug &operator<<(QDebug &, const Rosegarden::Segment &);
+ROSEGARDENPRIVATE_EXPORT QDebug &operator<<(QDebug &, const Rosegarden::RealTime &);
+ROSEGARDENPRIVATE_EXPORT QDebug &operator<<(QDebug &, const Rosegarden::Colour &);
+ROSEGARDENPRIVATE_EXPORT QDebug &operator<<(QDebug &, const Rosegarden::Guitar::Chord &);
class RGNoDebug
{
diff --git a/src/misc/Strings.cpp b/src/misc/Strings.cpp
index c70c7db..34c0136 100644
--- a/src/misc/Strings.cpp
+++ b/src/misc/Strings.cpp
@@ -26,27 +26,27 @@
namespace Rosegarden
{
-QString strtoqstr(const std::string &str)
+ROSEGARDENPRIVATE_EXPORT QString strtoqstr(const std::string &str)
{
return QString::fromUtf8(str.c_str());
}
-QString strtoqstr(const Rosegarden::PropertyName &p)
+ROSEGARDENPRIVATE_EXPORT QString strtoqstr(const Rosegarden::PropertyName &p)
{
return QString::fromUtf8(p.c_str());
}
-std::string qstrtostr(const QString &qstr)
+ROSEGARDENPRIVATE_EXPORT std::string qstrtostr(const QString &qstr)
{
return std::string(qstr.toUtf8().data());
}
-std::string qStrToStrUtf8(const QString &qstr)
+ROSEGARDENPRIVATE_EXPORT std::string qStrToStrUtf8(const QString &qstr)
{
return qstrtostr(qstr);
}
-std::string qStrToStrLocal8(const QString &qstr)
+ROSEGARDENPRIVATE_EXPORT std::string qStrToStrLocal8(const QString &qstr)
{
return std::string(qstr.toLocal8Bit().data());
}
@@ -58,7 +58,7 @@ std::string qStrToStrLocal8(const QString &qstr)
* things like configuration values from XML files where we want to
* guarantee the same value is used regardless of surrounding locale.
*/
-double strtodouble(const std::string &s)
+ROSEGARDENPRIVATE_EXPORT double strtodouble(const std::string &s)
{
int dp = 0;
int sign = 1;
@@ -102,13 +102,13 @@ double strtodouble(const std::string &s)
return result * sign;
}
-double qstrtodouble(const QString &s)
+ROSEGARDENPRIVATE_EXPORT double qstrtodouble(const QString &s)
{
return strtodouble(qstrtostr(s));
}
-bool qStrToBool(const QString &s)
+ROSEGARDENPRIVATE_EXPORT bool qStrToBool(const QString &s)
{
QString tt = s.toLower();
tt = tt.trimmed();
@@ -118,7 +118,7 @@ bool qStrToBool(const QString &s)
return false;
}
-bool qStrToBool(const QVariant &v)
+ROSEGARDENPRIVATE_EXPORT bool qStrToBool(const QVariant &v)
{
return qStrToBool( v.toString() );
}
@@ -126,8 +126,7 @@ bool qStrToBool(const QVariant &v)
-std::string
-convertFromCodec(std::string text, QTextCodec *codec)
+ROSEGARDENPRIVATE_EXPORT std::string convertFromCodec(std::string text, QTextCodec *codec)
{
if (codec)
return qstrtostr(codec->toUnicode(text.c_str(), text.length()));
@@ -135,20 +134,17 @@ convertFromCodec(std::string text, QTextCodec *codec)
return text;
}
-std::ostream &
-operator<<(std::ostream &target, const QString &str)
+ROSEGARDENPRIVATE_EXPORT std::ostream &operator<<(std::ostream &target, const QString &str)
{
return target << str.toLocal8Bit().data();
}
-QTextStream &
-operator<<(QTextStream &target, const std::string &str)
+ROSEGARDENPRIVATE_EXPORT QTextStream &operator<<(QTextStream &target, const std::string &str)
{
return target << QString(str.c_str());
}
-QStringList
-splitQuotedString(QString s)
+ROSEGARDENPRIVATE_EXPORT QStringList splitQuotedString(QString s)
{
QStringList tokens;
QString tok;
diff --git a/src/misc/Strings.h b/src/misc/Strings.h
index 333fd3e..d7c0fd3 100644
--- a/src/misc/Strings.h
+++ b/src/misc/Strings.h
@@ -28,35 +28,35 @@
#include "base/PropertyName.h"
#include "base/Exception.h"
+#include <rosegardenprivate_export.h>
+
class QTextCodec;
namespace Rosegarden
{
-extern QString strtoqstr(const std::string &);
-extern QString strtoqstr(const Rosegarden::PropertyName &);
+extern ROSEGARDENPRIVATE_EXPORT QString strtoqstr(const std::string &);
+extern ROSEGARDENPRIVATE_EXPORT QString strtoqstr(const Rosegarden::PropertyName &);
-extern std::string qstrtostr(const QString &);
+extern ROSEGARDENPRIVATE_EXPORT std::string qstrtostr(const QString &);
-extern double strtodouble(const std::string &);
-extern double qstrtodouble(const QString &);
+extern ROSEGARDENPRIVATE_EXPORT double strtodouble(const std::string &);
+extern ROSEGARDENPRIVATE_EXPORT double qstrtodouble(const QString &);
-extern bool qStrToBool(const QString &s);
-extern bool qStrToBool(const QVariant &v);
+extern ROSEGARDENPRIVATE_EXPORT bool qStrToBool(const QString &s);
+extern ROSEGARDENPRIVATE_EXPORT bool qStrToBool(const QVariant &v);
-extern std::string qStrToStrLocal8(const QString &qstr);
-extern std::string qStrToStrUtf8(const QString &qstr);
+extern ROSEGARDENPRIVATE_EXPORT std::string qStrToStrLocal8(const QString &qstr);
+extern ROSEGARDENPRIVATE_EXPORT std::string qStrToStrUtf8(const QString &qstr);
-extern std::string convertFromCodec(std::string, QTextCodec *);
+extern ROSEGARDENPRIVATE_EXPORT std::string convertFromCodec(std::string, QTextCodec *);
-std::ostream &
-operator<<(std::ostream &, const QString &);
+ROSEGARDENPRIVATE_EXPORT std::ostream &operator<<(std::ostream &, const QString &);
-QTextStream &
-operator<<(QTextStream &, const std::string &);
+ROSEGARDENPRIVATE_EXPORT QTextStream &operator<<(QTextStream &, const std::string &);
/// Split a string at whitespace, allowing for quoted substring sections
-extern QStringList splitQuotedString(QString s);
+extern ROSEGARDENPRIVATE_EXPORT QStringList splitQuotedString(QString s);
}
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index aa2ce24..3bd777a 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,4 +1,4 @@
-include_directories(../src)
+include_directories(../src ${CMAKE_CURRENT_BINARY_DIR}/../src)
# Code factorization: this macro defines unit tests
macro(RG_UNIT_TESTS)
------------------------------------------------------------------------------
_______________________________________________
Rosegarden-devel mailing list
[email protected] - use the link below to unsubscribe
https://lists.sourceforge.net/lists/listinfo/rosegarden-devel