New Jucer Update


#1

Just an interesting little note for those of you interested in the new Jucer stuff - I’ve checked in a new version of the amalgamator which is now managed as a jucer project. By that I mean that I created it in the Jucer’s new-project wizard, and that all the IDE-specific projects and glue code are entirely generated by the jucer. All I had to do was fill-in the Main.cpp file and the jucer produced all the other files you’ll see there.

The Jucer itself still isn’t ready for a release, but just thought I’d tantalise you, and I’d also like to hear if your compilers have any problems using the auto-generated project files.

For my next trick, I’m going to do the same with the juce demo, and then the plugins and other juce extras…


#2

No beta version of the new Jucer ? I’m excited to see that !!! :smiley:

Will see the GIT when i will have 5mn and reply if i’ve a problem for compilation.


#3

Compiling the amalgamator with linux gives (easy to fix):

kraken@roxxorx ~/Projects/juce/extras/amalgamator/Builds/Linux $ make
Linking Amalgamator
build/intermediate/Debug/JuceLibraryCode.o: In function `~OggVorbisAudioFormat':
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:401: undefined reference to `juce::AudioFormat::~AudioFormat()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:401: undefined reference to `juce::AudioFormat::~AudioFormat()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:401: undefined reference to `juce::AudioFormat::~AudioFormat()'
build/intermediate/Debug/JuceLibraryCode.o: In function `~FlacAudioFormat':
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:488: undefined reference to `juce::AudioFormat::~AudioFormat()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:488: undefined reference to `juce::AudioFormat::~AudioFormat()'
build/intermediate/Debug/JuceLibraryCode.o:/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:488: more undefined references to `juce::AudioFormat::~AudioFormat()' follow
build/intermediate/Debug/JuceLibraryCode.o: In function `OggVorbisAudioFormat':
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:395: undefined reference to `juce::AudioFormat::AudioFormat(juce::String const&, wchar_t const**)'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:395: undefined reference to `juce::AudioFormat::AudioFormat(juce::String const&, wchar_t const**)'
build/intermediate/Debug/JuceLibraryCode.o: In function `FlacAudioFormat':
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:482: undefined reference to `juce::AudioFormat::AudioFormat(juce::String const&, wchar_t const**)'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:482: undefined reference to `juce::AudioFormat::AudioFormat(juce::String const&, wchar_t const**)'
build/intermediate/Debug/JuceLibraryCode.o: In function `juce::FlacReader::useMetadata(FlacNamespace::FLAC__StreamMetadata_StreamInfo const&)':
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:149: undefined reference to `juce::AudioSampleBuffer::setSize(int, int, bool, bool, bool)'
build/intermediate/Debug/JuceLibraryCode.o: In function `juce::FlacReader::useSamples(int const* const*, int)':
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:228: undefined reference to `juce::AudioSampleBuffer::setSize(int, int, bool, bool, bool)'
build/intermediate/Debug/JuceLibraryCode.o: In function `~OggReader':
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:132: undefined reference to `juce::AudioSampleBuffer::~AudioSampleBuffer()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:132: undefined reference to `juce::AudioFormatReader::~AudioFormatReader()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:132: undefined reference to `juce::AudioSampleBuffer::~AudioSampleBuffer()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:132: undefined reference to `juce::AudioFormatReader::~AudioFormatReader()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:132: undefined reference to `juce::AudioSampleBuffer::~AudioSampleBuffer()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:132: undefined reference to `juce::AudioFormatReader::~AudioFormatReader()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:132: undefined reference to `juce::AudioSampleBuffer::~AudioSampleBuffer()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:132: undefined reference to `juce::AudioFormatReader::~AudioFormatReader()'
build/intermediate/Debug/JuceLibraryCode.o: In function `~OggWriter':
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:335: undefined reference to `juce::AudioFormatWriter::~AudioFormatWriter()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:335: undefined reference to `juce::AudioFormatWriter::~AudioFormatWriter()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:335: undefined reference to `juce::AudioFormatWriter::~AudioFormatWriter()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:335: undefined reference to `juce::AudioFormatWriter::~AudioFormatWriter()'
build/intermediate/Debug/JuceLibraryCode.o: In function `juce::OggReader::readSamples(int**, int, int, long long, int)':
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:199: undefined reference to `juce::AudioSampleBuffer::clear(int, int)'
build/intermediate/Debug/JuceLibraryCode.o: In function `~FlacReader':
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:140: undefined reference to `juce::AudioSampleBuffer::~AudioSampleBuffer()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:140: undefined reference to `juce::AudioFormatReader::~AudioFormatReader()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:140: undefined reference to `juce::AudioSampleBuffer::~AudioSampleBuffer()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:140: undefined reference to `juce::AudioFormatReader::~AudioFormatReader()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:140: undefined reference to `juce::AudioSampleBuffer::~AudioSampleBuffer()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:140: undefined reference to `juce::AudioFormatReader::~AudioFormatReader()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:140: undefined reference to `juce::AudioSampleBuffer::~AudioSampleBuffer()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:140: undefined reference to `juce::AudioFormatReader::~AudioFormatReader()'
build/intermediate/Debug/JuceLibraryCode.o: In function `~FlacWriter':
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:357: undefined reference to `juce::AudioFormatWriter::~AudioFormatWriter()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:357: undefined reference to `juce::AudioFormatWriter::~AudioFormatWriter()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:357: undefined reference to `juce::AudioFormatWriter::~AudioFormatWriter()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:357: undefined reference to `juce::AudioFormatWriter::~AudioFormatWriter()'
build/intermediate/Debug/JuceLibraryCode.o: In function `OggReader':
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:104: undefined reference to `juce::AudioFormatReader::AudioFormatReader(juce::InputStream*, juce::String const&)'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:104: undefined reference to `juce::AudioSampleBuffer::AudioSampleBuffer(int, int)'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:125: undefined reference to `juce::AudioSampleBuffer::setSize(int, int, bool, bool, bool)'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:127: undefined reference to `juce::AudioSampleBuffer::~AudioSampleBuffer()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:127: undefined reference to `juce::AudioFormatReader::~AudioFormatReader()'
build/intermediate/Debug/JuceLibraryCode.o: In function `FlacWriter':
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:324: undefined reference to `juce::AudioFormatWriter::AudioFormatWriter(juce::OutputStream*, juce::String const&, double, unsigned int, unsigned int)'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:341: undefined reference to `juce::AudioFormatWriter::~AudioFormatWriter()'
build/intermediate/Debug/JuceLibraryCode.o: In function `FlacReader':
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:105: undefined reference to `juce::AudioFormatReader::AudioFormatReader(juce::InputStream*, juce::String const&)'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:105: undefined reference to `juce::AudioSampleBuffer::AudioSampleBuffer(int, int)'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:135: undefined reference to `juce::AudioSampleBuffer::~AudioSampleBuffer()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp:135: undefined reference to `juce::AudioFormatReader::~AudioFormatReader()'
build/intermediate/Debug/JuceLibraryCode.o: In function `OggWriter':
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:269: undefined reference to `juce::AudioFormatWriter::AudioFormatWriter(juce::OutputStream*, juce::String const&, double, unsigned int, unsigned int)'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:282: undefined reference to `juce::JUCEApplication::getInstance()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:284: undefined reference to `juce::JUCEApplication::getInstance()'
/home/kraken/Projects/juce/extras/amalgamator/Builds/Linux/../../JuceLibraryCode/../../../amalgamation/../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp:312: undefined reference to `juce::AudioFormatWriter::~AudioFormatWriter()'
build/intermediate/Debug/JuceLibraryCode.o:(.rodata._ZTVN4juce20OggVorbisAudioFormatE[vtable for juce::OggVorbisAudioFormat]+0x10): undefined reference to `juce::AudioFormat::canHandleFile(juce::File const&)'
build/intermediate/Debug/JuceLibraryCode.o:(.rodata._ZTVN4juce15FlacAudioFormatE[vtable for juce::FlacAudioFormat]+0x10): undefined reference to `juce::AudioFormat::canHandleFile(juce::File const&)'
build/intermediate/Debug/JuceLibraryCode.o:(.rodata._ZTVN4juce15FlacAudioFormatE[vtable for juce::FlacAudioFormat]+0x28): undefined reference to `juce::AudioFormat::getQualityOptions()'
build/intermediate/Debug/JuceLibraryCode.o:(.rodata._ZTIN4juce20OggVorbisAudioFormatE[typeinfo for juce::OggVorbisAudioFormat]+0x8): undefined reference to `typeinfo for juce::AudioFormat'
build/intermediate/Debug/JuceLibraryCode.o:(.rodata._ZTIN4juce15FlacAudioFormatE[typeinfo for juce::FlacAudioFormat]+0x8): undefined reference to `typeinfo for juce::AudioFormat'
build/intermediate/Debug/JuceLibraryCode.o:(.rodata._ZTIN4juce9OggWriterE[typeinfo for juce::OggWriter]+0x8): undefined reference to `typeinfo for juce::AudioFormatWriter'
build/intermediate/Debug/JuceLibraryCode.o:(.rodata._ZTVN4juce9OggReaderE[vtable for juce::OggReader]+0x10): undefined reference to `juce::AudioFormatReader::readMaxLevels(long long, long long, float&, float&, float&, float&)'
build/intermediate/Debug/JuceLibraryCode.o:(.rodata._ZTIN4juce9OggReaderE[typeinfo for juce::OggReader]+0x8): undefined reference to `typeinfo for juce::AudioFormatReader'
build/intermediate/Debug/JuceLibraryCode.o:(.rodata._ZTIN4juce10FlacWriterE[typeinfo for juce::FlacWriter]+0x8): undefined reference to `typeinfo for juce::AudioFormatWriter'
build/intermediate/Debug/JuceLibraryCode.o:(.rodata._ZTVN4juce10FlacReaderE[vtable for juce::FlacReader]+0x10): undefined reference to `juce::AudioFormatReader::readMaxLevels(long long, long long, float&, float&, float&, float&)'
build/intermediate/Debug/JuceLibraryCode.o:(.rodata._ZTIN4juce10FlacReaderE[typeinfo for juce::FlacReader]+0x8): undefined reference to `typeinfo for juce::AudioFormatReader'
collect2: ld returned 1 exit status
make: *** [build/amalgamator] Error 1

probably there should be a way to handle 3rd party libraries and automatically find which ones to link in jucer itself.


#4

Thanks - I think this is just a typo in juce_amalgamated_template.cpp. It should read:

#if JUCE_BUILD_NATIVE && ! JUCE_ONLY_BUILD_CORE_LIBRARY #include "../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp" #include "../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp" #endif


#5

I hate amalgamated files.
They don’t solve what they claim to solve, and they bring all their own issues:
[list]
[]As soon as they are too big, visual C++ intellisense stop parsing it[/]
[]Because there is only one file, you can NOT, for example look into “class Graphics” header, and then open a new window for digging into “class Image” etc… So you’re back to “Ctrl + F” for navigating sources…[/]
[]If you ever ever modify juce real source code, the intellisense get confused with the different definitions and stop working for your entire project[/]
[]Compilation isn’t faster than trying to compile amalgamated_template.cpp (as, after all the amalgator only include the file, which is exactly what C++ compiler does with #include)[/]
[]Compilation breaks strangely (I know it’s not juce’s fault, but such huge input file reveals C++ compiler limits), and I had numerous issues that magically disappeared by “rebuild all” command with using amalgames.[/]
[]Same remarks as for speed, if you ever change juce code, it’s slower to rebuild & recompile amalgamated than compiling the changed files only and relinking the lib. [/]
[]They are a bad solution for a problem, the real solution is the native library system. The native tools for a library are way more useful (how often do you build juce lib anyway if you don’t touch juce code ?)[/][/list]
I don’t how you guys use these, but I don’t really get the interest of having the jucer including the whole amalgame in a generated project ? Are the jucer-made components only supposed to build small demo projects ?