1 # 2 # Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. 3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 # 5 # This code is free software; you can redistribute it and/or modify it 6 # under the terms of the GNU General Public License version 2 only, as 7 # published by the Free Software Foundation. Oracle designates this 8 # particular file as subject to the "Classpath" exception as provided 9 # by Oracle in the LICENSE file that accompanied this code. 10 # 11 # This code is distributed in the hope that it will be useful, but WITHOUT 12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 # version 2 for more details (a copy is included in the LICENSE file that 15 # accompanied this code). 16 # 17 # You should have received a copy of the GNU General Public License version 18 # 2 along with this work; if not, write to the Free Software Foundation, 19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 # 21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 # or visit www.oracle.com if you need additional information or have any 23 # questions. 24 # 25 26 # 27 # Common variables used by all the Java makefiles. This file should 28 # not contain rules. 29 # 30 31 # WARNING: This file is shared with other workspaces. 32 # So when it includes other files, it must use JDK_TOPDIR. 33 # 34 35 # Check for strange explicit settings (change to empty or true) 36 ifdef OPENJDK 37 ifneq ($(OPENJDK),true) 38 x:=$(error "OPENJDK (if defined) can only be set to true") 39 endif 40 endif 41 42 # 43 # On Solaris, the 'make' utility from Sun will not work with these makefiles. 44 # This little rule is only understood by Sun's make, and is harmless 45 # when seen by the GNU make tool. If using Sun's make, this causes the 46 # make command to fail. 47 # 48 SUN_MAKE_TEST:sh = echo "ERROR: PLEASE USE GNU VERSION OF MAKE"; exit 33 49 50 ifndef JDK_TOPDIR 51 ifdef BUILDDIR 52 JDK_TOPDIR=$(BUILDDIR)/.. 53 else 54 JDK_TOPDIR:=$(error "ERROR: Cannot define top of jdk repository") 55 endif 56 endif 57 ifndef BUILDDIR 58 # Hack, due to deploy repository using this file. 59 BUILDDIR=$(JDK_TOPDIR)/make 60 endif 61 ifndef JDK_MAKE_SHARED_DIR 62 JDK_MAKE_SHARED_DIR=$(JDK_TOPDIR)/make/common/shared 63 endif 64 65 include $(JDK_MAKE_SHARED_DIR)/Platform.gmk 66 67 TOPDIR=$(BUILDDIR)/.. 68 69 include $(JDK_TOPDIR)/make/common/CancelImplicits.gmk 70 71 # Historically PLATFORM_SRC used to be src/$(PLATFORM), but we switched it to 72 # src/solaris so if you want to build on Linux you didn't need a src/linux 73 # directory. In an ideal world it would be called src/genunix but we are not 74 # there yet. 75 # 76 ifndef SHARE_SRC 77 SHARE_SRC = $(BUILDDIR)/../src/share 78 endif 79 80 # Files that cannot be included in the OpenJDK distribution are 81 # collected under a parent directory which contains just those files. 82 ifndef CLOSED_SRC 83 CLOSED_SRC = $(BUILDDIR)/../src/closed 84 endif 85 86 # If CLOSE_SRC_INCLUDED isn't set to true, check if there's any 87 # closed directory. 88 ifneq ($(CLOSED_SRC_INCLUDED), true) 89 CLOSED_SRC_INCLUDED := $(shell \ 90 if [ -d $(CLOSED_SRC) ] ; then \ 91 echo true; \ 92 else \ 93 echo false; \ 94 fi) 95 endif 96 97 # Set OPENJDK based on CLOSED_SRC_INCLUDED 98 ifeq ($(CLOSED_SRC_INCLUDED), false) 99 OPENJDK = true 100 endif 101 102 # Define where closed directories are 103 ifdef OPENJDK 104 CLOSED_SRC = 105 CLOSED_SHARE_SRC = 106 else 107 ifndef CLOSED_SHARE_SRC 108 CLOSED_SHARE_SRC = $(CLOSED_SRC)/share 109 endif 110 endif 111 112 # 113 # Get platform definitions 114 # 115 116 include $(JDK_TOPDIR)/make/common/Defs-$(PLATFORM).gmk 117 118 # 119 # SE-Embedded support, if enabled 120 # 121 122 include $(JDK_TOPDIR)/make/common/Defs-embedded.gmk 123 124 # 125 # Cross-compilation Settings 126 # 127 ifdef CROSS_COMPILE_ARCH 128 # Can't run the tools we just built 129 USE_ONLY_BOOTDIR_TOOLS = true 130 131 # When cross-compiling CC generates code for the target, but 132 # some parts of the build generate C code that has to be compiled 133 # and executed on the build host - HOST_CC is the 'local' compiler. 134 # For linux the default is /usr/bin/gcc; other platforms need to 135 # set it explicitly 136 ifeq ($(PLATFORM), linux) 137 ifndef HOST_CC 138 HOST_CC = $(USRBIN_PATH)gcc 139 endif 140 endif 141 else 142 # Must set HOST_CC if not already set 143 ifndef HOST_CC 144 HOST_CC = $(CC) 145 endif 146 endif 147 148 # Reset the VM name for client-only builds 149 ifdef BUILD_CLIENT_ONLY 150 VM_NAME = client 151 endif 152 153 # 154 # Freetype logic is applicable to OpenJDK only 155 # 156 ifdef OPENJDK 157 158 #if we use system lib we do not need to copy it to build tree 159 USING_SYSTEM_FT_LIB=false 160 161 ifeq ($(PLATFORM), windows) 162 DEVTOOLS_FT_DIR=$(JDK_DEVTOOLS_DIR)/win32/freetype-$(ARCH) 163 endif 164 ifeq ($(PLATFORM), linux) 165 DEVTOOLS_FT_DIR=$(JDK_DEVTOOLS_DIR)/$(PLATFORM)/freetype-$(ARCH) 166 endif 167 ifeq ($(PLATFORM), solaris) 168 # historically for Solaris we have slightly different devtools 169 # naming conventions 170 DEVTOOLS_FT_DIR=$(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/freetype-$(ARCH) 171 endif 172 173 DEVTOOLS_FT_DIR_EXISTS = $(shell \ 174 if [ -f $(DEVTOOLS_FT_DIR)/include/ft2build.h ] ; then \ 175 echo true; \ 176 else \ 177 echo false; \ 178 fi) 179 180 ifdef ALT_FREETYPE_LIB_PATH 181 FREETYPE_LIB_PATH = $(ALT_FREETYPE_LIB_PATH) 182 ifeq ($(PLATFORM), macosx) 183 USING_SYSTEM_FT_LIB=true 184 endif 185 else 186 ifeq ($(DEVTOOLS_FT_DIR_EXISTS), true) 187 FREETYPE_LIB_PATH = $(DEVTOOLS_FT_DIR)/lib 188 else 189 ifeq ($(PLATFORM), macosx) 190 FREETYPE_LIB_PATH = /usr/X11R6/lib 191 else 192 FREETYPE_LIB_PATH = /usr/lib 193 endif 194 USING_SYSTEM_FT_LIB=true 195 endif 196 endif 197 198 ifdef ALT_FREETYPE_HEADERS_PATH 199 FREETYPE_HEADERS_PATH = $(ALT_FREETYPE_HEADERS_PATH) 200 else 201 ifeq ($(DEVTOOLS_FT_DIR_EXISTS), true) 202 FREETYPE_HEADERS_PATH = $(DEVTOOLS_FT_DIR)/include 203 else 204 ifeq ($(PLATFORM), macosx) 205 FREETYPE_HEADERS_PATH = /usr/X11R6/include 206 else 207 FREETYPE_HEADERS_PATH = /usr/include 208 endif 209 endif 210 endif 211 endif 212 213 # 214 # zlib version 215 # 216 ZLIB_VERSION = 1.2.5 217 218 219 # 220 # Localizations for the different parts of the product beyond English 221 # 222 223 JRE_LOCALES = de es fr it ja ko pt_BR sv zh_CN zh_TW zh_HK 224 PLUGIN_LOCALES = de es fr it ja ko pt_BR sv zh_CN zh_TW zh_HK 225 JDK_LOCALES = ja zh_CN 226 227 # 228 # A list of locales we support but don't have resource files. 229 # This is defined to optimize the search of resource bundles. 230 # 231 JRE_NONEXIST_LOCALES = en en_US de_DE es_ES fr_FR it_IT ja_JP ko_KR sv_SE zh 232 233 # 234 # For now, most libraries except libjava and libjvm itself link against libjvm 235 # and libjava, the latter for its exported common utilities. libjava only 236 # links against libjvm. Programs' makefiles take their own responsibility for 237 # adding other libs. 238 # 239 # The makefiles for these packages do not link against libjvm and libjava. 240 # This list will eventually go away and each Programs' makefiles 241 # will have to explicitly declare that they want to link to libjava/libjvm 242 # 243 NO_JAVALIB_PKGS = \ 244 sun.security.mscapi \ 245 sun.security.krb5 \ 246 sun.security.pkcs11 \ 247 sun.security.jgss \ 248 sun.security.jgss.wrapper \ 249 sun.security.ec \ 250 sun.security.smartcardio \ 251 com.sun.security.auth.module 252 253 ifdef PACKAGE 254 # put JAVALIB first, but do not lose any platform specific values.... 255 ifeq (,$(findstring $(PACKAGE),$(NO_JAVALIB_PKGS))) 256 LDLIBS_COMMON = $(JAVALIB) 257 endif 258 endif # PACKAGE 259 260 # 261 # Libraries that must appear ahead of libc.so on the link command line 262 # 263 ifdef PROGRAM 264 265 ifeq ($(PLATFORM), solaris) 266 LDLIBS_COMMON = -lthread -ldl 267 endif 268 269 ifeq ($(PLATFORM), linux) 270 LDLIBS_COMMON = -ldl 271 endif 272 273 ifeq ($(PLATFORM), macosx) 274 LDLIBS_COMMON = -pthread 275 endif 276 277 endif # PROGRAM 278 279 LDLIBS_COMMON += $(EXTRA_LIBS) 280 281 # for generated libraries 282 LIBDIR = $(OUTPUTDIR)/lib 283 ABS_LIBDIR = $(ABS_OUTPUTDIR)/lib 284 # Optional place to save the windows .lib files 285 LIBFILES_DIR = $(OUTPUTDIR)/libfiles 286 # for ext jre files 287 EXTDIR = $(LIBDIR)/ext 288 # for generated include files 289 INCLUDEDIR = $(OUTPUTDIR)/include 290 # for generated class files 291 CLASSBINDIR = $(OUTPUTDIR)/classes 292 DEMOCLASSDIR = $(OUTPUTDIR)/democlasses 293 # for generated tool class files 294 BUILDTOOLCLASSDIR = $(OUTPUTDIR)/btclasses 295 # for build tool jar files 296 BUILDTOOLJARDIR = $(OUTPUTDIR)/btjars 297 ABS_BUILDTOOLJARDIR = $(ABS_OUTPUTDIR)/btjars 298 # for generated tool class files 299 BUILDTOOLBINDIR = $(OUTPUTDIR)/btbins 300 ABS_BUILDTOOLBINDIR = $(ABS_OUTPUTDIR)/btbins 301 # for generated java source files 302 GENSRCDIR = $(OUTPUTDIR)/gensrc 303 # for generated C source files (not javah) 304 GENNATIVESRCDIR = $(OUTPUTDIR)/gennativesrc 305 # for imported source files 306 IMPORTSRCDIR = $(OUTPUTDIR)/impsrc 307 # for imported documents 308 IMPORTDOCDIR = $(OUTPUTDIR)/impdoc 309 # for generated demo 310 DEMODIR = $(OUTPUTDIR)/demo 311 # for sample code 312 SAMPLEDIR = $(OUTPUTDIR)/sample 313 # for generated documentation 314 DOCSDIR = $(OUTPUTDIR)/docs$(DOCSDIRSUFFIX) 315 DOCSDIRSUFFIX = 316 317 # The MESSAGE, WARNING and ERROR files are used to store sanityck and 318 # warnings and errors. 319 ifndef ERROR_FILE 320 ERROR_FILE = $(OUTPUTDIR)/sanityCheckErrors.txt 321 endif 322 ifndef WARNING_FILE 323 WARNING_FILE = $(OUTPUTDIR)/sanityCheckWarnings.txt 324 endif 325 ifndef MESSAGE_FILE 326 MESSAGE_FILE = $(OUTPUTDIR)/sanityCheckMessages.txt 327 endif 328 329 JDK_IMAGE_DIR = $(ABS_OUTPUTDIR)/j2sdk-image 330 JRE_IMAGE_DIR = $(ABS_OUTPUTDIR)/j2re-image 331 332 #where the demo source can be found 333 DEMOSRCDIR = $(SHARE_SRC)/demo 334 335 #where the sample source can be found 336 SAMPLESRCDIR = $(SHARE_SRC)/sample 337 338 # An attempt is made to generate unique enough directories for the 339 # generated files to not have name collisisons. Most build units 340 # defines PRODUCT (except Release.gmk), but then they may or may 341 # not define PACKAGE, PROGRAM, and LIBRARY. This code attempts to 342 # generate a unique OBJDIR/CLASSHDRDIR for each build unit based 343 # on which of those values are set within each build unit. 344 345 UNIQUE_LOCATION_STRING = tmp 346 347 ifneq ($(PRODUCT),) 348 UNIQUE_LOCATION_STRING += /$(PRODUCT) 349 endif 350 351 ifneq ($(PACKAGE),) 352 UNIQUE_LOCATION_STRING += /$(PACKAGE) 353 endif 354 355 ifneq ($(PROGRAM),) 356 UNIQUE_LOCATION_STRING += /$(PROGRAM) 357 endif 358 359 ifneq ($(LIBRARY),) 360 ifneq ($(LIBRARY_OUTPUT),) 361 UNIQUE_LOCATION_STRING += /$(LIBRARY_OUTPUT) 362 else 363 UNIQUE_LOCATION_STRING += /$(LIBRARY) 364 endif 365 endif 366 367 # the use of += above makes a space separated list which we need to 368 # remove for filespecs. 369 # 370 NULLSTRING := 371 ONESPACE := $(NULLSTRING) # space before this comment is required. 372 UNIQUE_PATH = $(subst $(ONESPACE),,$(UNIQUE_LOCATION_STRING)) 373 374 # TEMPDIR is a unique general purpose directory 375 # need to use 'override' because GNU Make on Linux exports the wrong 376 # value. 377 override TEMPDIR = $(OUTPUTDIR)/$(UNIQUE_PATH) 378 override ABS_TEMPDIR = $(ABS_OUTPUTDIR)/$(UNIQUE_PATH) 379 380 # This must be created right away for pattern rules in Sanity.gmk to work. 381 dummy1:=$(shell $(MKDIR) -p $(TEMPDIR)) 382 dummy2:=$(shell $(MKDIR) -p $(TEMP_DISK)) 383 384 # OBJDIRNAME is the name of the directory where the object code is to 385 # be placed. It's name depends on whether the data model architecture 386 # is 32-bit or not. 387 ifneq ($(ARCH_DATA_MODEL), 32) 388 OBJDIRNAME = obj$(ARCH_DATA_MODEL)$(OBJDIRNAME_SUFFIX) 389 else 390 OBJDIRNAME = obj$(OBJDIRNAME_SUFFIX) 391 endif 392 OBJDIR = $(TEMPDIR)/$(OBJDIRNAME) 393 394 # CLASSHDRDIR is where the generated C Class Header files go. 395 CLASSHDRDIR = $(TEMPDIR)/CClassHeaders 396 397 # 398 # CLASSDESTDIR can be used to specify the directory where generated classes 399 # are to be placed. The default is CLASSBINDIR. 400 # 401 ifndef CLASSDESTDIR 402 CLASSDESTDIR = $(CLASSBINDIR) 403 endif 404 405 INCLUDES = -I. -I$(CLASSHDRDIR) \ 406 $(patsubst %,-I%,$(subst $(CLASSPATH_SEPARATOR), ,$(VPATH.h))) $(OTHER_INCLUDES) 407 OTHER_CPPFLAGS += $(INCLUDES) 408 409 # 410 # vpaths. These are the default locations searched for source files. 411 # GNUmakefiles of individual areas often override the default settings. 412 # There are no longer default vpath entries for C and assembler files 413 # so we can ensure that libraries don't get their hands on JVM files. 414 # 415 # We define an intermediate variable for Java files because 416 # we use its value later to help define $SOURCEPATH 417 418 ifeq ($(PLATFORM), macosx) 419 VPATH0.java = $(subst $(ONESPACE),:,$(GENSRCDIR) $(call JavaSrcDirList,,classes)) 420 else 421 VPATH0.java = $(GENSRCDIR)$(CLASSPATH_SEPARATOR)$(PLATFORM_SRC)/classes$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/classes 422 endif 423 424 ifdef OPENJDK 425 VPATH.java = $(VPATH0.java) 426 else 427 # 428 # If filenames are duplicated between open/closed workspaces, prefer 429 # the closed files. 430 # 431 # Source ordering is important: some targets depend on closed files 432 # replacing open ones, and thus the closed file sources must be found 433 # before the open ones. 434 # 435 # Don't reorder without consulting the teams that depend on this behavior. 436 # 437 VPATH.java = $(CLOSED_PLATFORM_SRC)/classes$(CLASSPATH_SEPARATOR)$(CLOSED_SHARE_SRC)/classes$(CLASSPATH_SEPARATOR)$(VPATH0.java) 438 endif 439 vpath %.java $(VPATH.java) 440 vpath %.class $(CLASSBINDIR) 441 vpath %.$(OBJECT_SUFFIX) $(OBJDIR) 442 443 # 444 # VPATH.h is used elsewhere to generate include flags. By default, 445 # anyone has access to the include files that the JVM area exports, 446 # namely jni.h, jvm.h, and jni_utils.h, plus their platform-specific 447 # relatives. 448 # 449 VPATH0.h = $(PLATFORM_SRC)/javavm/export$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/javavm/export 450 ifdef OPENJDK 451 VPATH.h = $(VPATH0.h) 452 else 453 VPATH.h = $(CLOSED_SHARE_SRC)/javavm/export$(CLASSPATH_SEPARATOR)$(VPATH0.h) 454 endif 455 vpath %.h $(VPATH.h) 456 457 # 458 # Used in two ways: helps link against libjava.so. Also if overridden 459 # determines where your shared library is installed. 460 # 461 ifndef LIB_LOCATION 462 LIB_LOCATION = $(LIBDIR)/$(LIBARCH) 463 endif 464 465 # 466 # Java header and stub variables 467 # 468 CLASSHDRS = $(patsubst %,$(CLASSHDRDIR)/%.h,$(subst .,_,$(CLASSES.export))) 469 CLASSSTUBOBJS = classstubs.$(OBJECT_SUFFIX) 470 STUBPREAMBLE = $(INCLUDEDIR)/StubPreamble.h 471 472 # 473 # Classpath seen by javac (different from the one seen by the VM 474 # running javac), and useful variables. 475 # 476 SOURCEPATH = $(VPATH.java) 477 PKG = $(shell $(EXPR) $(PACKAGE) : '\([a-z]*\)') 478 PKGDIR = $(subst .,/,$(PACKAGE)) 479 480 # 481 # The java/javac/jdk variables (JAVAC_CMD, JAVA_CMD, etc.) 482 # 483 include $(JDK_MAKE_SHARED_DIR)/Defs-java.gmk 484 485 UNIQUE_PATH_PATTERN = $(subst /,.,$(UNIQUE_PATH)) 486 487 # Run MAKE $@ for a launcher: 488 # $(call make-launcher, name, mainclass, java-args, main-args) 489 define make-launcher 490 $(CD) $(BUILDDIR)/launchers && \ 491 $(MAKE) -f Makefile.launcher \ 492 PROGRAM=$(strip $1) \ 493 MAIN_CLASS=$(strip $2) \ 494 MAIN_JAVA_ARGS="$(strip $3)" \ 495 MAIN_ARGS="$(strip $4)" 496 endef 497 498 # 499 # Convenient macros 500 # 501 502 # Prepare $@ target, remove old one and making sure directory exists 503 define prep-target 504 $(MKDIR) -p $(@D) 505 $(RM) $@ 506 endef 507 508 # Simple install of $< file to $@ 509 define install-file 510 $(prep-target) 511 $(CP) $< $@ 512 endef 513 514 define chmod-file 515 $(CHMOD) $1 $@ 516 endef 517 518 define install-sym-link 519 $(LN) -s $1 $@ 520 endef 521 522 define install-manifest-file 523 $(install-file) 524 endef 525 526 # Cleanup rule for after debug java run (hotspot.log file is left around) 527 # (This could be an old leftover file in a read-only area, use the @- prefix) 528 HOTSPOT_LOG_NAME = hotspot.log 529 define java-vm-cleanup 530 if [ -w $(HOTSPOT_LOG_NAME) ] ; then $(RM) $(HOTSPOT_LOG_NAME); fi 531 endef 532 533 # Current directory 534 CURRENT_DIRECTORY := $(shell $(PWD)) 535 536 # 537 # Create BYFILE OPT and DBG settings, if CFLAGS_OPT/foobar.o is set then it is 538 # used for this file, otherwise the default settings are used. 539 # 540 CFLAGS_$(VARIANT)/BYFILE = $(CFLAGS_$(VARIANT)/$(@F)) \ 541 $(CFLAGS_$(VARIANT)$(CFLAGS_$(VARIANT)/$(@F))) 542 CXXFLAGS_$(VARIANT)/BYFILE = $(CXXFLAGS_$(VARIANT)/$(@F)) \ 543 $(CXXFLAGS_$(VARIANT)$(CXXFLAGS_$(VARIANT)/$(@F))) 544 545 # 546 # Tool flags 547 # 548 # EXTRA_CFLAGS are used to define cross-compilation options 549 # 550 ASFLAGS = $(ASFLAGS_$(VARIANT)) $(ASFLAGS_COMMON) $(OTHER_ASFLAGS) 551 CFLAGS = $(CFLAGS_$(VARIANT)/BYFILE) $(CFLAGS_COMMON) $(OTHER_CFLAGS) $(EXTRA_CFLAGS) 552 CXXFLAGS = $(CXXFLAGS_$(VARIANT)/BYFILE) $(CXXFLAGS_COMMON) $(OTHER_CXXFLAGS) $(EXTRA_CFLAGS) 553 CPPFLAGS = $(CPPFLAGS_$(VARIANT)) $(CPPFLAGS_COMMON) $(OTHER_CPPFLAGS) \ 554 $(DEFINES) $(OPTIONS:%=-D%) 555 LDFLAGS = $(LDFLAGS_$(VARIANT)) $(LDFLAGS_COMMON) $(OTHER_LDFLAGS) 556 LDLIBS = $(OTHER_LDLIBS) $(LDLIBS_$(VARIANT)) $(LDLIBS_COMMON) 557 LINTFLAGS = $(LINTFLAGS_$(VARIANT)) $(LINTFLAGS_COMMON) \ 558 $(OTHER_LINTFLAGS) 559 560 VERSION_DEFINES = -DRELEASE='"$(RELEASE)"' 561 562 ifdef INSANE 563 export INSANE 564 endif 565 566 ifdef ALT_COPYRIGHT_YEAR 567 COPYRIGHT_YEAR = $(ALT_COPYRIGHT_YEAR) 568 else 569 COPYRIGHT_YEAR := $(shell $(DATE) '+%Y') 570 endif 571 572 ifndef OPENJDK 573 include $(JDK_TOPDIR)/make/closed/common/Defs.gmk 574 endif 575 576 # Install of imported file (JDK_IMPORT_PATH, or some other external location) 577 define install-importonly-file 578 @$(ECHO) "ASSEMBLY_IMPORT: $@" 579 $(prep-target) 580 $(CP) $< $@ 581 @if [ "$(PLATFORM)" = "linux" -a "$(@F)" = "libjvm.so" ] ; then \ 582 if [ -x /usr/sbin/selinuxenabled ] ; then \ 583 /usr/sbin/selinuxenabled; \ 584 if [ $$? = 0 ] ; then \ 585 $(ECHO) "/usr/bin/chcon -t textrel_shlib_t $@"; \ 586 /usr/bin/chcon -t textrel_shlib_t $@; \ 587 if [ $$? != 0 ]; then \ 588 echo "ERROR: Cannot chcon $@"; \ 589 fi; \ 590 fi; \ 591 fi; \ 592 fi 593 endef 594 595 define install-import-file 596 $(install-importonly-file) 597 endef 598 599 .PHONY: all build clean clobber