Building Extras on Mac

From Audacity Wiki
Revision as of 14:00, 21 July 2019 by PeterSampson (talk | contribs) (LAME is now bundled/built-in so I removed the dud P2)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


Warning icon Installing Homebrew

If you install homebrew, think about whether your Mac can be considered secure. The extra code and repos are not vetted by Apple. Even Homebrew itself may not fully check the code that is built.

Warning icon deborking after Homebrew

Installing Homebrew will bork your xcodebuilds of Audacity. See instructions later for deborking.

Deborking will also make your mac less secure in other ways. You will need to disable system integrity protection and convert from coreStorage (which potentially protects your disk using encryption technology) to none. Not advised for typical users.


FFmpeg

You will need to build for 64 bit and as dynamic link. Note that after configuring the configure report will appear to suggest that you are not building 64 bit, but in fact you are, and you can check this by using the file command, and the fact that Audacity will actually run and work with this version of ffmpeg.

1. Install Homebrew.
1a. Note that this will bork your xcodebuild configuration, since it installs command line tools.
   See later section for the fix.

2. Install lots of other stuff

   This page https://trac.ffmpeg.org/wiki/CompilationGuide/macOS recommends you install:

   brew install automake fdk-aac git lame libass libtool libvorbis libvpx \
   opus sdl shtool texi2html theora wget x264 x265 xvid nasm

   However this leads to problems on systems which don't have these, so you should at least leave out sdl.


3. Download the correct ffmpeg source code version.  It's 2.2.2.  The later versions will not work.
  
   tar -xvf

3a.? Before configuring:
   export LDPATH="-L/usr/local/lib" CFLAGS="-I/usr/local/lib"

4. ./configure --arch=x86_64 --extra-cflags=-m64 --extra-ldflags=-m64 --disable-static --enable-shared --enable-rpath

5. make install

6. Now use install_name_tool to change the absolute /usr/local/lib paths into @rpaths, so that the 3 dylibs you
   want can be used from any directory.  More details shortly.  Change id as well.

7. Now use the finder menu to find the .dylinks, select the ones you want INCLUDING symbolic links, and
   use the context menu to Compress them to a zip archive (that includes the symbolic links).

Some useful commands for checking things:

which ffmpeg
  to find out where ffmpeg is actually running from.

file name-of-file
  to check that the file is built for 64 bit.

otool -L filename
  to check what the dependencies are.
otool -l filename
  to check where rpath dependencies are being looked for.

ffmpeg .pkg

To go from having the files that work to a simple package that will put them where you want, you need to make a .pkg

  1. Place the files into a directory structure under say ~/Desktop/ffmpeg that has the desired on disk directory structure.
     for example, most of the ffmpeg files will live in
        ~/Desktop/ffmpeg/Library/Application_Support/audacity/libs/
     I chose to put the GPL license as a readme in 
        ~/Desktop/ffmpeg/Library/Application_Support/audacity/docs/

     If you are keen to research it, there are more elaborate ways of doing things that mark the readme as a readme so that
     it is shown by the installer.

  2. Clean up the files.  We need to change the owner and remove the .ds files:
     Be sure to start in the right directory, ~/Desktop/ffmmpeg.
     sudo chown -R root:admin *
     sudo find . --name '*.DS_Store' -type f -delete
     
  3. Use the following packager command:
     pkgbuild --root ~/Desktop/ffmpeg --ownership preserve --identifier org.audacityteam.ffmpeg --version 1.0 ffmpeg_mac_64bit2.2.2.pkg

     rename as e.g. ffmpeg_mac_64bit2.2.2rc002.pkg, if this is being used for testing.

  The resulting package will install files in /Library/Application_Support/audacity/libs
 
   The steps for LAME are almost identical.  There is just one file in LAME and currently no readme (since we offer the dylib raw too)

Deborking Xcodebuild

   To fix that so that you can use xcodebuild again, not needed for FFmpeg though, use the following:
   sudo xcode-select -s /Applications/Xcode.app/Contents/Developer 

   Your adventure has only just begun.
   You will be able to build Audacity, but noone else will be able to use it.

   Your problem is that /usr/local, created by Homebrew, contains wxWidgets dylibs that xcodebuild will
   link to.  Other people won't have them.  otool -L will show these, if you examine the Audacity exe.

   IF you could move /usr/local out of the way, you could build Audacity self-contained.
   OSX will not let you move /usr/local out of the way because of system integrity protection (SIP).
   To disable system integrity protection you need to reboot in recovery mode.
   You cannot reboot in recovery mode because the recovery partition is hidden.
   That partition is hidden because of coreStorage hiding it.

   so:
 
   diskutil cs list
   which tells you the coreStorage volume names.  Then

   diskutil coreStorage revert lvUUID
   where lvUUID is the last lvUUID reported by the previous Terminal command.  

   Now you can reboot the mac, and hold Alt (or Option) down as it reboots.
   You can now choose the recovery drive.

   In recovery drive, from utilities menu, open terminal.  In terminal

   csrutil disable
   This is to disable sip.
   Close the 'recovery utility' window, and when you do so, it prompts you 
   for the boot drive, and choose the normal one again.  

   Now reboot.
   Now you can rename /usr/local to /usr/local.bak

   Your troubles are not over.  To be continued....