New Jucer Update

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…

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.

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.

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

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 ?