1 # 2 # Copyright (c) 1995, 2011, 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 # for generated java source files 301 GENSRCDIR = $(OUTPUTDIR)/gensrc 302 # for generated C source files (not javah) 303 GENNATIVESRCDIR = $(OUTPUTDIR)/gennativesrc 304 # for imported source files 305 IMPORTSRCDIR = $(OUTPUTDIR)/impsrc 306 # for imported documents 307 IMPORTDOCDIR = $(OUTPUTDIR)/impdoc 308 # for generated demo 309 DEMODIR = $(OUTPUTDIR)/demo 310 # for sample code 311 SAMPLEDIR = $(OUTPUTDIR)/sample 312 # for generated documentation 313 DOCSDIR = $(OUTPUTDIR)/docs$(DOCSDIRSUFFIX) 314 DOCSDIRSUFFIX = 315 316 # The MESSAGE, WARNING and ERROR files are used to store sanityck and 317 # warnings and errors. 318 ifndef ERROR_FILE 319 ERROR_FILE = $(OUTPUTDIR)/sanityCheckErrors.txt 320 endif 321 ifndef WARNING_FILE 322 WARNING_FILE = $(OUTPUTDIR)/sanityCheckWarnings.txt 323 endif 324 ifndef MESSAGE_FILE 325 MESSAGE_FILE = $(OUTPUTDIR)/sanityCheckMessages.txt 326 endif 327 328 JDK_IMAGE_DIR = $(ABS_OUTPUTDIR)/j2sdk-image 329 JRE_IMAGE_DIR = $(ABS_OUTPUTDIR)/j2re-image 330 331 #where the demo source can be found 332 DEMOSRCDIR = $(SHARE_SRC)/demo 333 334 #where the sample source can be found 335 SAMPLESRCDIR = $(SHARE_SRC)/sample 336 337 # An attempt is made to generate unique enough directories for the 338 # generated files to not have name collisisons. Most build units 339 # defines PRODUCT (except Release.gmk), but then they may or may 340 # not define PACKAGE, PROGRAM, and LIBRARY. This code attempts to 341 # generate a unique OBJDIR/CLASSHDRDIR for each build unit based 342 # on which of those values are set within each build unit. 343 344 UNIQUE_LOCATION_STRING = tmp 345 346 ifneq ($(PRODUCT),) 347 UNIQUE_LOCATION_STRING += /$(PRODUCT) 348 endif 349 350 ifneq ($(PACKAGE),) 351 UNIQUE_LOCATION_STRING += /$(PACKAGE) 352 endif 353 354 ifneq ($(PROGRAM),) 355 UNIQUE_LOCATION_STRING += /$(PROGRAM) 356 endif 357 358 ifneq ($(LIBRARY),) 359 ifneq ($(LIBRARY_OUTPUT),) 360 UNIQUE_LOCATION_STRING += /$(LIBRARY_OUTPUT) 361 else 362 UNIQUE_LOCATION_STRING += /$(LIBRARY) 363 endif 364 endif 365 366 # the use of += above makes a space separated list which we need to 367 # remove for filespecs. 368 # 369 NULLSTRING := 370 ONESPACE := $(NULLSTRING) # space before this comment is required. 371 UNIQUE_PATH = $(subst $(ONESPACE),,$(UNIQUE_LOCATION_STRING)) 372 373 # TEMPDIR is a unique general purpose directory 374 # need to use 'override' because GNU Make on Linux exports the wrong 375 # value. 376 override TEMPDIR = $(OUTPUTDIR)/$(UNIQUE_PATH) 377 override ABS_TEMPDIR = $(ABS_OUTPUTDIR)/$(UNIQUE_PATH) 378 379 # This must be created right away for pattern rules in Sanity.gmk to work. 380 dummy1:=$(shell $(MKDIR) -p $(TEMPDIR)) 381 dummy2:=$(shell $(MKDIR) -p $(TEMP_DISK)) 382 383 # OBJDIRNAME is the name of the directory where the object code is to 384 # be placed. It's name depends on whether the data model architecture 385 # is 32-bit or not. 386 ifneq ($(ARCH_DATA_MODEL), 32) 387 OBJDIRNAME = obj$(ARCH_DATA_MODEL)$(OBJDIRNAME_SUFFIX) 388 else 389 OBJDIRNAME = obj$(OBJDIRNAME_SUFFIX) 390 endif 391 OBJDIR = $(TEMPDIR)/$(OBJDIRNAME) 392 393 # CLASSHDRDIR is where the generated C Class Header files go. 394 CLASSHDRDIR = $(TEMPDIR)/CClassHeaders 395 396 # 397 # CLASSDESTDIR can be used to specify the directory where generated classes 398 # are to be placed. The default is CLASSBINDIR. 399 # 400 ifndef CLASSDESTDIR 401 CLASSDESTDIR = $(CLASSBINDIR) 402 endif 403 404 INCLUDES = -I. -I$(CLASSHDRDIR) \ 405 $(patsubst %,-I%,$(subst $(CLASSPATH_SEPARATOR), ,$(VPATH.h))) $(OTHER_INCLUDES) 406 OTHER_CPPFLAGS += $(INCLUDES) 407 408 # 409 # vpaths. These are the default locations searched for source files. 410 # GNUmakefiles of individual areas often override the default settings. 411 # There are no longer default vpath entries for C and assembler files 412 # so we can ensure that libraries don't get their hands on JVM files. 413 # 414 # We define an intermediate variable for Java files because 415 # we use its value later to help define $SOURCEPATH 416 417 ifeq ($(PLATFORM), macosx) 418 VPATH0.java = $(subst $(ONESPACE),:,$(GENSRCDIR) $(call JavaSrcDirList,,classes)) 419 else 420 VPATH0.java = $(GENSRCDIR)$(CLASSPATH_SEPARATOR)$(PLATFORM_SRC)/classes$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/classes 421 endif 422 423 ifdef OPENJDK 424 VPATH.java = $(VPATH0.java) 425 else 426 # 427 # If filenames are duplicated between open/closed workspaces, prefer 428 # the closed files. 429 # 430 # Source ordering is important: some targets depend on closed files 431 # replacing open ones, and thus the closed file sources must be found 432 # before the open ones. 433 # 434 # Don't reorder without consulting the teams that depend on this behavior. 435 # 436 VPATH.java = $(CLOSED_PLATFORM_SRC)/classes$(CLASSPATH_SEPARATOR)$(CLOSED_SHARE_SRC)/classes$(CLASSPATH_SEPARATOR)$(VPATH0.java) 437 endif 438 vpath %.java $(VPATH.java) 439 vpath %.class $(CLASSBINDIR) 440 vpath %.$(OBJECT_SUFFIX) $(OBJDIR) 441 442 # 443 # VPATH.h is used elsewhere to generate include flags. By default, 444 # anyone has access to the include files that the JVM area exports, 445 # namely jni.h, jvm.h, and jni_utils.h, plus their platform-specific 446 # relatives. 447 # 448 VPATH0.h = $(PLATFORM_SRC)/javavm/export$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/javavm/export 449 ifdef OPENJDK 450 VPATH.h = $(VPATH0.h) 451 else 452 VPATH.h = $(CLOSED_SHARE_SRC)/javavm/export$(CLASSPATH_SEPARATOR)$(VPATH0.h) 453 endif 454 vpath %.h $(VPATH.h) 455 456 # 457 # Used in two ways: helps link against libjava.so. Also if overridden 458 # determines where your shared library is installed. 459 # 460 ifndef LIB_LOCATION 461 LIB_LOCATION = $(LIBDIR)/$(LIBARCH) 462 endif 463 464 # 465 # Java header and stub variables 466 # 467 CLASSHDRS = $(patsubst %,$(CLASSHDRDIR)/%.h,$(subst .,_,$(CLASSES.export))) 468 CLASSSTUBOBJS = classstubs.$(OBJECT_SUFFIX) 469 STUBPREAMBLE = $(INCLUDEDIR)/StubPreamble.h 470 471 # 472 # Classpath seen by javac (different from the one seen by the VM 473 # running javac), and useful variables. 474 # 475 SOURCEPATH = $(VPATH.java) 476 PKG = $(shell $(EXPR) $(PACKAGE) : '\([a-z]*\)') 477 PKGDIR = $(subst .,/,$(PACKAGE)) 478 479 # 480 # The java/javac/jdk variables (JAVAC_CMD, JAVA_CMD, etc.) 481 # 482 include $(JDK_MAKE_SHARED_DIR)/Defs-java.gmk 483 484 UNIQUE_PATH_PATTERN = $(subst /,.,$(UNIQUE_PATH)) 485 486 # Run MAKE $@ for a launcher: 487 # $(call make-launcher, name, mainclass, java-args, main-args) 488 define make-launcher 489 $(CD) $(BUILDDIR)/launchers && \ 490 $(MAKE) -f Makefile.launcher \ 491 PROGRAM=$(strip $1) \ 492 MAIN_CLASS=$(strip $2) \ 493 MAIN_JAVA_ARGS="$(strip $3)" \ 494 MAIN_ARGS="$(strip $4)" 495 endef 496 497 # 498 # Convenient macros 499 # 500 501 # Prepare $@ target, remove old one and making sure directory exists 502 define prep-target 503 $(MKDIR) -p $(@D) 504 $(RM) $@ 505 endef 506 507 # Simple install of $< file to $@ 508 define install-file 509 $(prep-target) 510 $(CP) $< $@ 511 endef 512 513 define chmod-file 514 $(CHMOD) $1 $@ 515 endef 516 517 define install-sym-link 518 $(LN) -s $1 $@ 519 endef 520 521 define install-manifest-file 522 $(install-file) 523 endef 524 525 # Cleanup rule for after debug java run (hotspot.log file is left around) 526 # (This could be an old leftover file in a read-only area, use the @- prefix) 527 HOTSPOT_LOG_NAME = hotspot.log 528 define java-vm-cleanup 529 if [ -w $(HOTSPOT_LOG_NAME) ] ; then $(RM) $(HOTSPOT_LOG_NAME); fi 530 endef 531 532 # Current directory 533 CURRENT_DIRECTORY := $(shell $(PWD)) 534 535 # 536 # Create BYFILE OPT and DBG settings, if CFLAGS_OPT/foobar.o is set then it is 537 # used for this file, otherwise the default settings are used. 538 # 539 CFLAGS_$(VARIANT)/BYFILE = $(CFLAGS_$(VARIANT)/$(@F)) \ 540 $(CFLAGS_$(VARIANT)$(CFLAGS_$(VARIANT)/$(@F))) 541 CXXFLAGS_$(VARIANT)/BYFILE = $(CXXFLAGS_$(VARIANT)/$(@F)) \ 542 $(CXXFLAGS_$(VARIANT)$(CXXFLAGS_$(VARIANT)/$(@F))) 543 544 # 545 # Tool flags 546 # 547 # EXTRA_CFLAGS are used to define cross-compilation options 548 # 549 ASFLAGS = $(ASFLAGS_$(VARIANT)) $(ASFLAGS_COMMON) $(OTHER_ASFLAGS) 550 CFLAGS = $(CFLAGS_$(VARIANT)/BYFILE) $(CFLAGS_COMMON) $(OTHER_CFLAGS) $(EXTRA_CFLAGS) 551 CXXFLAGS = $(CXXFLAGS_$(VARIANT)/BYFILE) $(CXXFLAGS_COMMON) $(OTHER_CXXFLAGS) $(EXTRA_CFLAGS) 552 CPPFLAGS = $(CPPFLAGS_$(VARIANT)) $(CPPFLAGS_COMMON) $(OTHER_CPPFLAGS) \ 553 $(DEFINES) $(OPTIONS:%=-D%) 554 LDFLAGS = $(LDFLAGS_$(VARIANT)) $(LDFLAGS_COMMON) $(OTHER_LDFLAGS) 555 LDLIBS = $(OTHER_LDLIBS) $(LDLIBS_$(VARIANT)) $(LDLIBS_COMMON) 556 LINTFLAGS = $(LINTFLAGS_$(VARIANT)) $(LINTFLAGS_COMMON) \ 557 $(OTHER_LINTFLAGS) 558 559 VERSION_DEFINES = -DRELEASE='"$(RELEASE)"' 560 561 ifdef INSANE 562 export INSANE 563 endif 564 565 ifdef ALT_COPYRIGHT_YEAR 566 COPYRIGHT_YEAR = $(ALT_COPYRIGHT_YEAR) 567 else 568 COPYRIGHT_YEAR := $(shell $(DATE) '+%Y') 569 endif 570 571 ifndef OPENJDK 572 include $(JDK_TOPDIR)/make/closed/common/Defs.gmk 573 endif 574 575 # Install of imported file (JDK_IMPORT_PATH, or some other external location) 576 define install-importonly-file 577 @$(ECHO) "ASSEMBLY_IMPORT: $@" 578 $(prep-target) 579 $(CP) $< $@ 580 @if [ "$(PLATFORM)" = "linux" -a "$(@F)" = "libjvm.so" ] ; then \ 581 if [ -x /usr/sbin/selinuxenabled ] ; then \ 582 /usr/sbin/selinuxenabled; \ 583 if [ $$? = 0 ] ; then \ 584 $(ECHO) "/usr/bin/chcon -t textrel_shlib_t $@"; \ 585 /usr/bin/chcon -t textrel_shlib_t $@; \ 586 if [ $$? != 0 ]; then \ 587 echo "ERROR: Cannot chcon $@"; \ 588 fi; \ 589 fi; \ 590 fi; \ 591 fi 592 endef 593 594 define install-import-file 595 $(install-importonly-file) 596 endef 597 598 .PHONY: all build clean clobber