CMake:Bundles And Frameworks

From KitwarePublic
Jump to navigationJump to search

Issue

(In all examples, the applications are named appl1, appl2, ..., libraries are named libr1, libr2, ..., header files are named appl1_header1, appl2_header2, libr1_header1, ..., and there are auxilary files associated with application and library appl1_aux1, appl2_aux2, libr1_aux1, .... and some resource files associated with application and library appl1_res1, appl2_res2, libr1_res1, .... All versions are ver1, ver2, ...)

On Mac there are several different cases of combinations of bundles, frameworks, and unix tools.

The problem is that CMAKE_INSTALL_PREFIX is not enough. Also, when creating bundles and frameworks, auxilary files should be in the proper subdirectory structure.

Cases

Unix tools only

  • No issues (just like any other unix)

Bundle only

  • Everything in a same directory:
/Applications/
             appl1.app/
                      Contents/
                              Info.plist
                              MacOS/
                                   appl1 -> appl1-1
                                   appl1-1
                                   appl1_aux1
                                   appl1_aux2
                              Resources/
                                   appl1_res1
                                   appl1_res2

Framework only

  • Everything in a same directory:
/Library/
        Frameworks/
                  libr1.framework/
                                 libr1 -> Versions/Current/libr1
                                 Resources -> Versions/Current/Resources
                                 Versions/
                                         Current -> ver2
                                         ver2/
                                             libr1
                                             Resources/
                                                      Info.plist
                                                      version.plist                                        

Bundle + Framework

  • Bundle stuff in one directory, framework stuff in another one
/Applications/
             appl1.app/
                      Contents/
                              Info.plist
                              MacOS/
                                   appl1 -> appl1-ver1
                                   appl1-ver2
                                   appl1_aux1
                                   appl1_aux2
                              Resources/
                                   appl1_res1
                                   appl1_res2
/Library/
        Frameworks/
                  libr1.framework/
                                 libr1 -> Versions/Current/libr1
                                 Resources -> Versions/Current/Resources
                                 Versions/
                                         Current -> ver2
                                         ver2/
                                             libr1
                                             Resources/
                                                      Info.plist
                                                      version.plist                                        

Bundle + Unix tools

  • Bundle stuff in one directory, unix tools in typical unix location
/Applications/
             appl1.app/
                      Contents/
                              Info.plist
                              MacOS/
                                   appl1 -> appl1-ver1
                                   appl1-ver2
                                   appl1_aux1
                                   appl1_aux2
                              Resources/
                                   appl1_res1
                                   appl1_res2

/usr/
    bin/
       appl2
    share/
       appl2-version/
                    appl2_aux1
                    appl2_aux2

Framework + Unix tools

  • Framework stuff in one directory, unix tools in typical unix location
/Library/
        Frameworks/
                  libr1.framework/
                                 libr1 -> Versions/Current/libr1
                                 Resources -> Versions/Current/Resources
                                 Versions/
                                         Current -> ver2
                                         ver2/
                                             libr1
                                             Resources/
                                                      Info.plist
                                                      version.plist
/usr/
    bin/
       appl1
       appl2 -> /Library/Frameworks/libr1.framework/Commands/appl2
       appl3 -> /Library/Frameworks/libr1.framework/Version/ver1/bin/appl3
    share/
       appl1-version/
                    appl1_aux1
                    appl1_aux2

Bundle + Framework + Unix tools

  • Framework stuff in one directory, unix tools in typical unix location
/Applications/
             appl1.app/
                      Contents/
                              Info.plist
                              MacOS/
                                   appl1 -> appl1-ver1
                                   appl1-ver2
                                   appl1_aux1
                                   appl1_aux2
                              Resources/
                                   appl1_res1
                                   appl1_res2
/Library/
        Frameworks/
                  libr1.framework/
                                 libr1 -> Versions/Current/libr1
                                 Resources -> Versions/Current/Resources
                                 Versions/
                                         Current -> ver2
                                         ver2/
                                             libr1
                                             Resources/
                                                      Info.plist
                                                      version.plist
/usr/
    bin/
       appl1
       appl2 -> /Library/Frameworks/libr1.framework/Commands/appl2
       appl3 -> /Library/Frameworks/libr1.framework/Version/ver1/bin/appl3
    share/
         appl1-version/
                      appl1_aux1
                      appl1_aux2