-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Added more generic Mac Framework support #123
Closed
Closed
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why the trailing slash?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seemed more consistent with other tests in the file, since they could all be tested with
beginsWith()
andendsWith()
. Using a leading dot and trailing slash bounded the test on both ends. And it fits the definition of a Mac Framework: a bundle directory structure with a.framework
for the directory name. Thus the test includes that the libraryName acknowledges it as a directory.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm just thinking that I'd say "JavaVM.framework" to indicate the library I want, I wouldn't explicitly add a trailing slash.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Perhaps a use case to indicate how you'd actually use this (a test case could reasonably "install" something in ~/LibraryFrameworks and subsequently attempt to load it)?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I was taking a minimal change approach to modifying the code to support loading general frameworks. There are three ways a framework can be specified —
MyKit.framework/MyKit
,MyKit.framework/Versions/Current/MyKit
, orMyKit.framework/Versions/YYY/MyKit
. This was the smallest change I could come up with that could address all three cases and leave the user in control.The changes I submitted are enough to enable generic loading of a framework from
/Library/Frameworks
or from~/Library/Frameworks
, where before an absolute path to the framework binary was required to bypass all the checks — So the change is an strict improvement, but there is certainly room for more.The macholib of Python approaches this problem by returning a list of alternatives from the parallel to
mapLibraryName()
so that many different options can be used, and the loadLibrary could remain "MyKit" instead of "MyKit.framework".Another option could be:
This is quite literally the first Java code I've ever written, so complex string work in Java is a bit beyond my skills of mimicry.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think you could change the code circa line 152 to loop over the extra frameworks paths (instead of trying a single one), and expand the extra paths to include potential name variations, e.g.
suffix = name.indexOf(".framework") == -1 ? name + ".framework/" + name : name;
for each:
"~/Library/Frameworks/" + name,
"/Library/Frameworks/" + name,
"/System/Library/Frameworks/" + name;
try library lookup and break when found
This allows specification by framework name, or explicit framework path to a particular version.