4 # The contents of this file are subject to the terms of the
5 # Common Development and Distribution License (the "License").
6 # You may not use this file except in compliance with the License.
8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 # or http://www.opensolaris.org/os/licensing.
10 # See the License for the specific language governing permissions
11 # and limitations under the License.
13 # When distributing Covered Code, include this CDDL HEADER in each
14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 # If applicable, add the following below this CDDL HEADER, with the
16 # fields enclosed by brackets "[]" replaced with your own identifying
17 # information: Portions Copyright [yyyy] [name of copyright owner]
21 # Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
24 -include ..
/make-rules
/shared-macros.mk
26 # for now, the assumption is we build any directory with a Makefile. This may
27 # not always be the case. If we build a new make-like tool to drive the upper
28 # level build, it may make different decisions and will need to include
29 # appropriate dependency information.
31 # components.mk is auto-generated by the build tools. It populates the
32 # COMPONENT_DIRS macro with a list of all directories in the workspace that
33 # contain a component.
34 $(WS_TOP
)/components
/$(ENCUMBERED
)components.mk
: # Makefile # $(WS_TOP)/components
35 @echo
"Generating component list..."
36 @
$(BASS_O_MATIC
) --workspace
=$(WS_TOP
) --components
=paths \
37 | sed
-e
's;^$(shell pwd)/;;' \
38 | sed
-f components.ignore \
39 | sed
-e
's;^;COMPONENT_DIRS += ;g' >$@
41 -include $(WS_TOP
)/components
/$(ENCUMBERED
)components.mk
43 # depends.mk is auto-generated by concatenating 'depend.mk' files in each
44 # component directory.
45 $(WS_TOP
)/components
/$(ENCUMBERED
)depends.mk
: $(WS_TOP
)/components
/$(ENCUMBERED
)components.mk
46 @echo
"Generating component dependencies..."
47 @cat
/dev
/null
$(shell $(BASS_O_MATIC
) --workspace
=$(WS_TOP
) --components
=paths \
48 | sed
-e
's;^$(shell pwd)/;;g' \
49 | sed
-f components.ignore \
50 | sed
-e
's;$$;/depend.mk;g') >$@ \
53 -include $(WS_TOP
)/components
/$(ENCUMBERED
)depends.mk
56 download
: TARGET
= download
59 install: TARGET
= install
60 pre-publish
: TARGET
= pre-publish
61 publish
: TARGET
= publish
63 clobber: TARGET
= clobber
65 component-hook
: TARGET
= component-hook
66 prep build
install pre-publish publish
test: TEMPLATE_ZONE
=$(ZONE
)
67 prep build
install pre-publish publish
test: LOG
= >$(WS_LOGS
)/$(@F
).
$(TARGET
).log
2>&1
69 # turn off pkglint for the individual component builds.
70 ifeq ($(strip $(PKGLINT_COMPONENT
)),)
71 publish
: MAKEFLAGS
+= PKGLINT
=/bin
/true
76 build
install pre-publish publish
test: $(COMPONENT_DIRS
)
78 COMPONENT_DIRS.nosetup
= $(COMPONENT_DIRS
:%=%.nosetup
)
80 download prep
: $(COMPONENT_DIRS.nosetup
)
82 component-hook
: $(COMPONENT_DIRS.nosetup
)
84 clean: $(COMPONENT_DIRS.nosetup
)
85 $(RM
) $(WS_TOP
)/components
/$(ENCUMBERED
)components.mk
$(WS_TOP
)/components
/$(ENCUMBERED
)depends.mk .profile
87 clobber: $(COMPONENT_DIRS.nosetup
) clean
88 @cd
$(WS_TOP
)/tools
; echo
"clobbering tools..." ; $(GMAKE
) clobber
89 $(RM
) -r
$(WS_REPO
) $(WS_LOGS
) $(WS_LINT_CACHE
)
92 setup
: $(WS_LOGS
) $(WS_REPO
) tools
$(WS_LINT_CACHE
)
98 $(PKGREPO
) create
$(PKG_REPO
)
99 $(PKGREPO
) add-publisher
-s
$(PKG_REPO
) $(PUBLISHER
)
100 $(PKGREPO
) rebuild
-s
$(PKG_REPO
)
101 # Not required for OI
102 # $(PKGREPO) add-publisher -s $(PKG_REPO) $(PUBLISHER_LOCALIZABLE)
104 DUMMYPKG
= "set name=fmri value=pkg:/dummy@0,$(BUILD_VERSION)\n"
105 DUMMYPKG
+= "set pkg.summary=dummy\n"
106 DUMMYPKG
+= "set org.opensolaris.consolidation=userland\n"
107 DUMMYPKG
+= "set info.classification=org.opensolaris.category.2008:System/Core"
109 $(WS_LINT_CACHE
): $(WS_LOGS
) tools
111 @echo
"Generating pkglint(1) cache from $(CANONICAL_REPO)..."
112 @
(echo
$(DUMMYPKG
) |
$(PKGLINT
) \
113 -c
$(WS_LINT_CACHE
) -r
$(CANONICAL_REPO
) /dev
/fd
/0 \
114 >$(WS_LOGS
)/naughty-canonical-repo-actions
2>&1 ; exit
0)
116 $(MKDIR
) $(WS_LINT_CACHE
)
120 @cd
$(WS_TOP
)/tools
; echo
"building tools..." ; $(GMAKE
) clean setup
122 # $(WS_COMPONENTS) is the home directory for the zone user, so create a profile
123 # to pass a few things on to zone based builds
125 echo
"PATH=$(PATH)" >>$@
126 echo
"WS_TOP=$(WS_TOP)" >>$@
127 echo
"export PATH WS_TOP" >>$@
129 $(COMPONENT_DIRS
): $(WS_LOGS
) setup FORCE
130 @cd
$@
&& echo
"$(TARGET) $@" && \
131 $(BASS_O_MATIC
) $(TEMPLATE_ZONE
:%=--template-zone
%) \
132 $(@
:%=--component
%) --make
$(TARGET
) $(LOG
)
135 $(eval COMPONENT_REVISION
:= $(shell git rev-list HEAD
--count
))
136 $(WS_TOOLS
)/userland-incorporator
--repository
$(PKG_REPO
) \
137 --version
=0.
$(OS_VERSION
),$(BUILD_VERSION
) -p
$(PUBLISHER
) \
138 -c
$(CONSOLIDATION
) --destdir
=$(WS_MACH
) $(INCORPORATE_WERROR
)
139 for incorporation in
$(WS_MACH
)/*.p5m
; do \
140 $(PKGSEND
) -s
$(PKG_REPO
) publish
--fmri-in-manifest \
141 $${incorporation} ; \
146 $(PKGREPO
) refresh
-s
$(PKG_REPO
)
148 @echo
'pkglinting all package manifests...'
149 @
$(ENV
) PYTHONPATH
=$(WS_TOOLS
)/python
$(PKGLINT
) \
150 -c
$(WS_LINT_CACHE
) -f
$(WS_TOOLS
)/pkglintrc \
151 $(shell find .
-name
'manifest-*.published')
154 $(COMPONENT_DIRS.nosetup
): $(WS_LOGS
) FORCE
155 @cd
$(@
:%.nosetup
=%) && echo
"$(TARGET) $(@:%.nosetup=%)" && \
156 $(BASS_O_MATIC
) $(TEMPLATE_ZONE
:%=--template-zone
%) \
157 $(@
:%.nosetup
=--component
%) --make
$(TARGET
) $(LOG
)