Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
C
cocoapods
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gengmeiios
cocoapods
Commits
3c31a309
Commit
3c31a309
authored
Aug 09, 2012
by
Fabio Pelosin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[LocalPod] Fix public headers handling. #449
parent
0821ad22
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
49 additions
and
48 deletions
+49
-48
local_pod.rb
lib/cocoapods/local_pod.rb
+15
-25
local_pod_spec.rb
spec/unit/local_pod_spec.rb
+34
-23
No files found.
lib/cocoapods/local_pod.rb
View file @
3c31a309
...
...
@@ -232,18 +232,22 @@ module Pod
# @return [Hash{Specification => Array<Pathname>}] The paths of the public
# header files grouped by {Specification}.
#
# @TODO: complete, fix and comment
# @TODO: decide a policy for subspecs
#
def
public_header_files_by_spec
s
cached_header_files_by_spec
=
header_files_by_spec
public_header
_files
=
paths_by_spec
(
:source
_files
,
:glob
=>
'*.h'
)
def
public_header_files_by_spec
build_headers
=
header_files_by_spec
public_header
s
=
paths_by_spec
(
:public_header
_files
,
:glob
=>
'*.h'
)
result
=
{}
public_header_files
.
map
do
|
spec
,
paths
|
result
[
spec
]
=
paths
.
empty?
?
cached_header_files_by_spec
[
spec
]
:
paths
# If no public header files are provided we use the build
# ones for the every spec/subspec.
public_headers
.
each
do
|
spec
,
paths
|
if
!
paths
.
empty?
result
[
spec
]
=
paths
elsif
(
build_h
=
build_headers
[
spec
])
&&
!
build_h
.
empty?
result
[
spec
]
=
build_h
end
end
result
end
...
...
@@ -341,12 +345,12 @@ module Pod
#
def
link_headers
@sandbox
.
build_headers
.
add_search_path
(
headers_sandbox
)
header_mappings
.
each
do
|
namespaced_path
,
files
|
header_mappings
(
header_files_by_spec
)
.
each
do
|
namespaced_path
,
files
|
@sandbox
.
build_headers
.
add_files
(
namespaced_path
,
files
)
end
@sandbox
.
public_headers
.
add_search_path
(
headers_sandbox
)
public_header_mappings
.
each
do
|
namespaced_path
,
files
|
header_mappings
(
public_header_files_by_spec
)
.
each
do
|
namespaced_path
,
files
|
@sandbox
.
public_headers
.
add_files
(
namespaced_path
,
files
)
end
end
...
...
@@ -399,23 +403,9 @@ module Pod
#
# @todo This is not overridden anymore in specification refactor and the
# code Pod::Specification#copy_header_mapping can be moved here.
def
header_mappings
mappings
=
{}
header_files_by_spec
.
each
do
|
spec
,
paths
|
paths
=
paths
-
headers_excluded_from_search_paths
paths
.
each
do
|
from
|
from_relative
=
from
.
relative_path_from
(
root
)
to
=
headers_sandbox
+
(
spec
.
header_dir
)
+
spec
.
copy_header_mapping
(
from_relative
)
(
mappings
[
to
.
dirname
]
||=
[])
<<
from
end
end
mappings
end
# TODO: complete, fix and comment
def
public_header_mappings
def
header_mappings
(
files_by_spec
)
mappings
=
{}
public_header_files_by_specs
.
each
do
|
spec
,
paths
|
files_by_spec
.
each
do
|
spec
,
paths
|
paths
=
paths
-
headers_excluded_from_search_paths
paths
.
each
do
|
from
|
from_relative
=
from
.
relative_path_from
(
root
)
...
...
spec/unit/local_pod_spec.rb
View file @
3c31a309
...
...
@@ -15,12 +15,12 @@ describe Pod::LocalPod do
@pod
.
root
.
should
==
@sandbox
.
root
+
'BananaLib'
end
it
"creates it's own root directory if it doesn't exist"
do
x
it
"creates it's own root directory if it doesn't exist"
do
@pod
.
create
File
.
directory?
(
@pod
.
root
).
should
.
be
.
true
end
it
"can execute a block within the context of it's root"
do
x
it
"can execute a block within the context of it's root"
do
@pod
.
chdir
{
FileUtils
.
touch
(
"foo"
)
}
Pathname
(
@pod
.
root
+
"foo"
).
should
.
exist
end
...
...
@@ -68,28 +68,28 @@ describe Pod::LocalPod do
@pod
.
relative_resource_files
.
should
==
[
Pathname
.
new
(
"BananaLib/Resources/logo-sidebar.png"
)]
end
it
"can link it's headers into the sandbox"
do
x
it
"can link it's headers into the sandbox"
do
@pod
.
link_headers
expected_header_path
=
@sandbox
.
build_headers
.
root
+
"BananaLib/Banana.h"
expected_header_path
.
should
.
be
.
symlink
File
.
read
(
expected_header_path
).
should
==
(
@sandbox
.
root
+
@pod
.
header_files
[
0
]).
read
end
it
"can link it's public headers into the sandbox"
do
x
it
"can link it's public headers into the sandbox"
do
@pod
.
link_headers
expected_header_path
=
@sandbox
.
public_headers
.
root
+
"BananaLib/Banana.h"
expected_header_path
.
should
.
be
.
symlink
File
.
read
(
expected_header_path
).
should
==
(
@sandbox
.
root
+
@pod
.
header_files
[
0
]).
read
end
it
"can add it's source files to an Xcode project target"
do
x
it
"can add it's source files to an Xcode project target"
do
@pod
.
source_file_descriptions
.
should
==
[
Xcodeproj
::
Project
::
PBXNativeTarget
::
SourceFileDescription
.
new
(
Pathname
.
new
(
"BananaLib/Classes/Banana.h"
),
""
,
nil
),
Xcodeproj
::
Project
::
PBXNativeTarget
::
SourceFileDescription
.
new
(
Pathname
.
new
(
"BananaLib/Classes/Banana.m"
),
""
,
nil
)
]
end
it
"can add it's source files to a target with any specially configured compiler flags"
do
x
it
"can add it's source files to a target with any specially configured compiler flags"
do
@pod
.
top_specification
.
compiler_flags
=
'-d some_flag'
@pod
.
source_file_descriptions
.
should
==
[
Xcodeproj
::
Project
::
PBXNativeTarget
::
SourceFileDescription
.
new
(
Pathname
.
new
(
"BananaLib/Classes/Banana.h"
),
'-d some_flag'
,
nil
),
...
...
@@ -97,11 +97,11 @@ describe Pod::LocalPod do
]
end
it
"returns the platform"
do
x
it
"returns the platform"
do
@pod
.
platform
.
should
==
:ios
end
it
"raises if the files are accessed before creating the pod dir"
do
x
it
"raises if the files are accessed before creating the pod dir"
do
@pod
.
implode
lambda
{
@pod
.
source_files
}.
should
.
raise
Pod
::
Informative
end
...
...
@@ -124,15 +124,15 @@ describe Pod::LocalPod do
copy_fixture_to_pod
(
'chameleon'
,
@pod
)
end
it
"identifies the top level specification"
do
x
it
"identifies the top level specification"
do
@pod
.
top_specification
.
name
.
should
==
'Chameleon'
end
it
"returns the subspecs"
do
x
it
"returns the subspecs"
do
@pod
.
specifications
.
map
(
&
:name
).
should
==
%w[ Chameleon/UIKit Chameleon/StoreKit ]
end
it
"resolve the source files"
do
x
it
"resolve the source files"
do
computed
=
@pod
.
relative_source_files
.
map
(
&
:to_s
)
expected
=
%w[
Chameleon/UIKit/Classes/UIKit.h
...
...
@@ -147,13 +147,13 @@ describe Pod::LocalPod do
assert_array_equals
(
expected
,
computed
)
end
it
"resolve the resources"
do
x
it
"resolve the resources"
do
@pod
.
relative_resource_files
.
map
(
&
:to_s
).
sort
.
should
==
[
"Chameleon/UIKit/Resources/<UITabBar> background.png"
,
"Chameleon/UIKit/Resources/<UITabBar> background@2x.png"
]
end
it
"resolve the clean paths"
do
x
it
"resolve the clean paths"
do
# fake_git serves to check that source control files are deleted
expected
=
%w[
/.fake_git
...
...
@@ -212,7 +212,7 @@ describe Pod::LocalPod do
assert_array_equals
(
expected
,
computed
)
end
it
"resolves the used files"
do
x
it
"resolves the used files"
do
expected
=
%w[
/UIKit/Classes/UIKit.h
/UIKit/Classes/UIView.h
...
...
@@ -233,7 +233,7 @@ describe Pod::LocalPod do
assert_array_equals
(
expected
,
computed
)
end
it
"resolved the header files"
do
x
it
"resolved the header files"
do
expected
=
%w[
Chameleon/UIKit/Classes/UIKit.h
Chameleon/UIKit/Classes/UIView.h
...
...
@@ -244,7 +244,7 @@ describe Pod::LocalPod do
assert_array_equals
(
expected
,
computed
)
end
it
"resolves the header files of **every** subspec"
do
x
it
"resolves the header files of **every** subspec"
do
computed
=
@pod
.
all_specs_public_header_files
.
map
{
|
p
|
p
.
relative_path_from
(
@pod
.
root
).
to_s
}
expected
=
%w[
UIKit/Classes/UIKit.h
...
...
@@ -272,13 +272,13 @@ describe Pod::LocalPod do
assert_array_equals
(
expected
,
computed
)
end
it
"merges the xcconfigs without duplicates"
do
x
it
"merges the xcconfigs without duplicates"
do
@pod
.
xcconfig
.
should
==
{
"OTHER_LDFLAGS"
=>
"-framework AppKit -framework Foundation -framework IOKit -framework QTKit -framework QuartzCore -framework SystemConfiguration -framework WebKit"
}
end
it
"returns a hash of mappings with a custom header dir prefix"
do
mappings
=
@pod
.
send
(
:header_mappings
)
x
it
"returns a hash of mappings with a custom header dir prefix"
do
mappings
=
@pod
.
send
(
:header_mappings
,
@pod
.
header_files_by_spec
)
mappings
=
mappings
.
map
do
|
folder
,
headers
|
"
#{
folder
}
>
#{
headers
.
sort
.
map
{
|
p
|
p
.
relative_path_from
(
@pod
.
root
).
to_s
}
.join(' ')}"
end
...
...
@@ -287,9 +287,9 @@ describe Pod::LocalPod do
"Chameleon/UIKit > UIKit/Classes/UIKit.h UIKit/Classes/UIView.h UIKit/Classes/UIWindow.h"
]
end
it
"respects the headers excluded from the search paths"
do
x
it
"respects the headers excluded from the search paths"
do
@pod
.
stubs
(
:headers_excluded_from_search_paths
).
returns
([
@pod
.
root
+
'UIKit/Classes/UIKit.h'
])
mappings
=
@pod
.
send
(
:header_mappings
)
mappings
=
@pod
.
send
(
:header_mappings
,
@pod
.
header_files_by_spec
)
mappings
=
mappings
.
map
do
|
folder
,
headers
|
"
#{
folder
}
>
#{
headers
.
sort
.
map
{
|
p
|
p
.
relative_path_from
(
@pod
.
root
).
to_s
}
.join(' ')}"
end
...
...
@@ -298,11 +298,22 @@ describe Pod::LocalPod do
"Chameleon/UIKit > UIKit/Classes/UIView.h UIKit/Classes/UIWindow.h"
]
end
# This is done by the sandbox and this test should be moved
it
"includes the sandbox of the pod's headers while linking"
do
#
@TODO:
This is done by the sandbox and this test should be moved
x
it
"includes the sandbox of the pod's headers while linking"
do
@sandbox
.
build_headers
.
expects
(
:add_search_path
).
with
(
Pathname
.
new
(
'Chameleon'
))
@sandbox
.
public_headers
.
expects
(
:add_search_path
).
with
(
Pathname
.
new
(
'Chameleon'
))
@pod
.
link_headers
end
it
"differentiates among public and build headers"
do
subspecs
=
fixture_spec
(
'chameleon/Chameleon.podspec'
).
subspecs
spec
=
subspecs
[
0
]
spec
.
stubs
(
:public_header_files
).
returns
(
"UIKit/Classes/*Kit.h"
)
@pod
=
Pod
::
LocalPod
.
new
(
spec
,
@sandbox
,
Pod
::
Platform
.
new
(
:osx
))
build_headers
=
@pod
.
header_files_by_spec
.
values
.
flatten
.
map
{
|
p
|
p
.
basename
.
to_s
}
public_headers
=
@pod
.
public_header_files_by_spec
.
values
.
flatten
.
map
{
|
p
|
p
.
basename
.
to_s
}
build_headers
.
should
==
%w{ UIKit.h UIView.h UIWindow.h }
public_headers
.
should
==
%w{ UIKit.h }
end
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment