Re: [racket-users] Xcode, embedding Racket.framework

2020-06-26 Thread Nate Griswold
ok, added https://github.com/racket/racket/wiki/Embedding-Racket

Nate


On Thu, Jun 25, 2020 at 4:30 AM Stephen De Gabrielle <
spdegabrie...@gmail.com> wrote:

> This world be great content for the wiki
>
> Hi Nate,
> This would be great content for the racket wiki
> https://github.com/racket/racket/wiki
>
> You can post it yourself or I am happy to do it for you.
> https://github.com/racket/racket/wiki/_new
>
> Kind regards,
> Stephen
>
> On Wed, 24 Jun 2020 at 17:54, Nate Griswold 
> wrote:
>
>> Hello
>>
>> I recently went through the process of embedding the Racket.framework in
>> Xcode, and i just wanted to share the steps in case anyone else would like
>> to do this.
>>
>> Note the documentation says (
>> https://docs.racket-lang.org/inside/cs-embedding.html)
>>
>> "On Mac OS, besides "libracketcs.a" for static linking, a dynamic
>> library is provided by the "Racket" framework, which is typically
>> installed in "lib" sub-directory of the installation. Supply -framework
>> Racket to gcc when linking, along with -F and a path to the "lib"
>> directory. At run time, either "Racket.framework" must be moved to a
>> location in the standard framework search path, or your embedding
>> executable must provide a specific path to the framework (possibly an
>> executable-relative path using the Mach-O @executable_path prefix)."
>>
>> That sets the rpath search paths but the library binary still needs to
>> reference @rpath to make use of these search paths. Below we use
>> install_name_tool to fix up the binary to reference the @rpath directly.
>>
>> Note also that Xcode is hard coded to codesign in the Versions/A
>> subdirectory and hasn't added any support for signing other major versions,
>> so i link version A in the below steps. This step is only necessary if you
>> wish to sign the framework on copy.
>>
>> Note also for a proper framework structure, the framework should have an
>> Info.plist in Resources and a Versions/Current symlink. Top-level symlinks
>> directly in Racket.framework should reference only Versions/Current and
>> both Resources and the binary library (Racket) should be referenced. (see
>> https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/FrameworkAnatomy.html
>> )
>>
>> Note also i did all of this with racket cs, you would have to modify the
>> steps if you were using normal racket.
>>
>> All that said, here are the steps:
>>
>> Drag the framework into xcode
>> select copy if needed, ok
>> Click on project, General tab, "Frameworks, Libraries, and Embeddeed
>> Content"
>> Change do not embed to either embed or embed and sign
>> cd to your copied framework in your project
>> cd Versions
>> ln -s 7.7_CS Current
>> if "embed and sign" was chosen:
>>   ln -s 7.7_CS A (xcode is hard coded to sign the major version A, see
>> https://developer.apple.com/forums/thread/65963)
>> cp /path/to/Info.plist 7.7_CS/Resources
>> cd ..
>> rm -f Racket
>> ln -s Versions/Current/Racket
>> ln -s Versions/Current/Resources
>> install_name_tool -id @rpath/Racket.framework/Versions/7.7_CS/Racket
>> ./Racket
>> otool -L Racket (to verify)
>> Switch to Xcode, build and run
>>
>> Nate
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Racket Users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to racket-users+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/racket-users/CAM-xLPpC3Ona-zbV6r43dD_xjSmXa_eGGRLfFERuQ_tBgG%3D4HQ%40mail.gmail.com
>> 
>> .
>>
> --
> 
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/CAM-xLPrU2q%2BjVe91NVX3SFeX8%3DFMV16TnmDT1GRP6ZO0XnAD1g%40mail.gmail.com.


Re: [racket-users] Xcode, embedding Racket.framework

2020-06-25 Thread Stephen De Gabrielle
This world be great content for the wiki

Hi Nate,
This would be great content for the racket wiki
https://github.com/racket/racket/wiki

You can post it yourself or I am happy to do it for you.
https://github.com/racket/racket/wiki/_new

Kind regards,
Stephen

On Wed, 24 Jun 2020 at 17:54, Nate Griswold  wrote:

> Hello
>
> I recently went through the process of embedding the Racket.framework in
> Xcode, and i just wanted to share the steps in case anyone else would like
> to do this.
>
> Note the documentation says (
> https://docs.racket-lang.org/inside/cs-embedding.html)
>
> "On Mac OS, besides "libracketcs.a" for static linking, a dynamic library
> is provided by the "Racket" framework, which is typically installed in
> "lib" sub-directory of the installation. Supply -framework Racket to gcc
> when linking, along with -F and a path to the "lib" directory. At run
> time, either "Racket.framework" must be moved to a location in the
> standard framework search path, or your embedding executable must provide a
> specific path to the framework (possibly an executable-relative path using
> the Mach-O @executable_path prefix)."
>
> That sets the rpath search paths but the library binary still needs to
> reference @rpath to make use of these search paths. Below we use
> install_name_tool to fix up the binary to reference the @rpath directly.
>
> Note also that Xcode is hard coded to codesign in the Versions/A
> subdirectory and hasn't added any support for signing other major versions,
> so i link version A in the below steps. This step is only necessary if you
> wish to sign the framework on copy.
>
> Note also for a proper framework structure, the framework should have an
> Info.plist in Resources and a Versions/Current symlink. Top-level symlinks
> directly in Racket.framework should reference only Versions/Current and
> both Resources and the binary library (Racket) should be referenced. (see
> https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/FrameworkAnatomy.html
> )
>
> Note also i did all of this with racket cs, you would have to modify the
> steps if you were using normal racket.
>
> All that said, here are the steps:
>
> Drag the framework into xcode
> select copy if needed, ok
> Click on project, General tab, "Frameworks, Libraries, and Embeddeed
> Content"
> Change do not embed to either embed or embed and sign
> cd to your copied framework in your project
> cd Versions
> ln -s 7.7_CS Current
> if "embed and sign" was chosen:
>   ln -s 7.7_CS A (xcode is hard coded to sign the major version A, see
> https://developer.apple.com/forums/thread/65963)
> cp /path/to/Info.plist 7.7_CS/Resources
> cd ..
> rm -f Racket
> ln -s Versions/Current/Racket
> ln -s Versions/Current/Resources
> install_name_tool -id @rpath/Racket.framework/Versions/7.7_CS/Racket
> ./Racket
> otool -L Racket (to verify)
> Switch to Xcode, build and run
>
> Nate
>
> --
> You received this message because you are subscribed to the Google Groups
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to racket-users+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/racket-users/CAM-xLPpC3Ona-zbV6r43dD_xjSmXa_eGGRLfFERuQ_tBgG%3D4HQ%40mail.gmail.com
> 
> .
>
-- 


-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/CAGHj7-%2Bv3nM%3D2X1V7YGrbToAi79GeAAE5cisN0KziLgrRjX9Ew%40mail.gmail.com.


[racket-users] Xcode, embedding Racket.framework

2020-06-24 Thread Nate Griswold
Hello

I recently went through the process of embedding the Racket.framework in
Xcode, and i just wanted to share the steps in case anyone else would like
to do this.

Note the documentation says (
https://docs.racket-lang.org/inside/cs-embedding.html)

"On Mac OS, besides "libracketcs.a" for static linking, a dynamic library
is provided by the "Racket" framework, which is typically installed in "lib"
sub-directory of the installation. Supply -framework Racket to gcc when
linking, along with -F and a path to the "lib" directory. At run time,
either "Racket.framework" must be moved to a location in the standard
framework search path, or your embedding executable must provide a specific
path to the framework (possibly an executable-relative path using the
Mach-O @executable_path prefix)."

That sets the rpath search paths but the library binary still needs to
reference @rpath to make use of these search paths. Below we use
install_name_tool to fix up the binary to reference the @rpath directly.

Note also that Xcode is hard coded to codesign in the Versions/A
subdirectory and hasn't added any support for signing other major versions,
so i link version A in the below steps. This step is only necessary if you
wish to sign the framework on copy.

Note also for a proper framework structure, the framework should have an
Info.plist in Resources and a Versions/Current symlink. Top-level symlinks
directly in Racket.framework should reference only Versions/Current and
both Resources and the binary library (Racket) should be referenced. (see
https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/FrameworkAnatomy.html
)

Note also i did all of this with racket cs, you would have to modify the
steps if you were using normal racket.

All that said, here are the steps:

Drag the framework into xcode
select copy if needed, ok
Click on project, General tab, "Frameworks, Libraries, and Embeddeed
Content"
Change do not embed to either embed or embed and sign
cd to your copied framework in your project
cd Versions
ln -s 7.7_CS Current
if "embed and sign" was chosen:
  ln -s 7.7_CS A (xcode is hard coded to sign the major version A, see
https://developer.apple.com/forums/thread/65963)
cp /path/to/Info.plist 7.7_CS/Resources
cd ..
rm -f Racket
ln -s Versions/Current/Racket
ln -s Versions/Current/Resources
install_name_tool -id @rpath/Racket.framework/Versions/7.7_CS/Racket
./Racket
otool -L Racket (to verify)
Switch to Xcode, build and run

Nate

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/CAM-xLPpC3Ona-zbV6r43dD_xjSmXa_eGGRLfFERuQ_tBgG%3D4HQ%40mail.gmail.com.


Info.plist
Description: Binary data