annotate make/common/Demo.gmk @ 3853:6aeed99af874

7025631: Remove the modules build support from jdk 7 Reviewed-by: alanb, ohair
author mchung
date Wed, 09 Mar 2011 23:11:07 -0800
parents f08682e23279
children 3de1fed4b9ec
rev   line source
duke@0 1 #
ohair@3413 2 # Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
duke@0 3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@0 4 #
duke@0 5 # This code is free software; you can redistribute it and/or modify it
duke@0 6 # under the terms of the GNU General Public License version 2 only, as
ohair@2486 7 # published by the Free Software Foundation. Oracle designates this
duke@0 8 # particular file as subject to the "Classpath" exception as provided
ohair@2486 9 # by Oracle in the LICENSE file that accompanied this code.
duke@0 10 #
duke@0 11 # This code is distributed in the hope that it will be useful, but WITHOUT
duke@0 12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@0 13 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@0 14 # version 2 for more details (a copy is included in the LICENSE file that
duke@0 15 # accompanied this code).
duke@0 16 #
duke@0 17 # You should have received a copy of the GNU General Public License version
duke@0 18 # 2 along with this work; if not, write to the Free Software Foundation,
duke@0 19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@0 20 #
ohair@2486 21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
ohair@2486 22 # or visit www.oracle.com if you need additional information or have any
ohair@2486 23 # questions.
duke@0 24 #
duke@0 25
duke@0 26 # JDK Demo building jar file.
duke@0 27
duke@0 28 # Some names are defined with LIBRARY inside the Defs.gmk file
duke@0 29 LIBRARY=$(DEMONAME)
duke@0 30 OBJDIR=$(TEMPDIR)/$(DEMONAME)
duke@0 31
duke@0 32 # Input:
duke@0 33 # DEMONAME - name of the demo
duke@0 34 # DEMO_ROOT - path to root of all demo files
duke@0 35 # DEMO_DESTDIR - path to final demo destination directory
duke@0 36 #
duke@0 37 # Optional Input:
duke@0 38 # DEMO_SRCDIR - path to source if different from DEMO_ROOT
duke@0 39 # DEMO_PSRCDIR - path to additional platform specific source
duke@0 40 # DEMO_PKGDIR - sub directory of sources we want
duke@0 41 # DEMO_TOPFILES - names of top-level files relative to DEMO_ROOT
duke@0 42 # DEMO_MAINCLASS - name of the main class for the jar manifest
duke@0 43 # DEMO_NATIVECLASS - name of the class with native methods
duke@0 44 # DEMO_DESCRIPTOR - name of service file for jar (relative to DEMO_SRCDIR)
duke@0 45 # DEMO_EXTRA_SRCDIR - path to directory that holds extra sources to add
duke@0 46 # DEMO_EXTRA_FILES - extra sources relative to DEMO_EXTRA_SRCDIR
duke@0 47 # DEMO_OBJECTS - extra native object files needed
duke@0 48 # DEMO_MANIFEST_ATTR - extra line to add to the jar manifest file
duke@0 49
duke@0 50 # Assume the source directory is the root directory if not set
duke@0 51 ifndef DEMO_SRCDIR
duke@0 52 DEMO_SRCDIR = $(DEMO_ROOT)
duke@0 53 endif
duke@0 54 ifndef DEMO_PKGDIR
duke@0 55 DEMO_PKGDIR = .
duke@0 56 endif
duke@0 57
duke@0 58 # Some demos have special needs
duke@0 59 ifneq ($(DEMONAME),agent_util)
duke@0 60 DEMO_NEEDS_AGENT_UTIL = $(findstring agent_util,$(DEMO_OBJECTS))
duke@0 61 endif
duke@0 62 ifneq ($(DEMONAME),java_crw_demo)
duke@0 63 DEMO_NEEDS_JAVA_CRW_DEMO = $(findstring java_crw_demo,$(DEMO_OBJECTS))
duke@0 64 endif
duke@0 65 ifeq ($(DEMONAME),hprof)
duke@0 66 DEMO_NEEDS_NPT = true
duke@0 67 endif
duke@0 68
duke@0 69 # Place to hold the build area (kind of a temp area)
duke@0 70 DEMO_BUILD_AREA = $(DEMOCLASSDIR)/$(PRODUCT)/$(DEMONAME)
duke@0 71
duke@0 72 # Destination "src" directory
duke@0 73 DEMO_BUILD_SRCDIR = $(DEMO_BUILD_AREA)/src
rupashka@3529 74
rupashka@3529 75 ifndef DEMO_SKIP_SRCZIP
rupashka@3529 76 DEMO_BUILD_SRCZIP = $(DEMO_BUILD_AREA)/src.zip
rupashka@3529 77 DEMO_SOURCE_ZIP = $(DEMO_DESTDIR)/src.zip
rupashka@3529 78 endif
duke@0 79
duke@0 80 # Place to hold the jar image we are creating
duke@0 81 DEMO_JAR_IMAGE = $(DEMO_BUILD_AREA)/jar_image
duke@0 82
duke@0 83 # The jar manifest file we will create and use
duke@0 84 DEMO_MANIFEST = $(DEMO_BUILD_AREA)/manifest.mf
duke@0 85
duke@0 86 # The list of source files or options we will supply to javac
duke@0 87 DEMO_JAVAC_INPUT = $(DEMO_BUILD_AREA)/javac_input.txt
duke@0 88
duke@0 89 # Any name of javah file
duke@0 90 DEMO_JAVAH_FILE = $(DEMO_NATIVECLASS:%=$(DEMO_BUILD_SRCDIR)/%.h)
duke@0 91
duke@0 92 # Get complete list of files for this demo
duke@0 93 ifdef DEMO_PSRCDIR
duke@0 94 DEMO_ALL_FILES2 := $(shell ( $(CD) $(DEMO_PSRCDIR) \
duke@0 95 && $(FIND) $(DEMO_PKGDIR) $(SCM_DIRS_prune) -o -type f -print ) \
duke@0 96 | $(SED) 's@^\./@@' )
duke@0 97 DEMO_ALL_FILES += $(DEMO_ALL_FILES2)
duke@0 98 endif
duke@0 99 ifdef DEMO_EXTRA_SRCDIR
duke@0 100 DEMO_ALL_FILES += $(DEMO_EXTRA_FILES)
duke@0 101 endif
duke@0 102 DEMO_ALL_FILES1 := $(shell ( $(CD) $(DEMO_SRCDIR) \
duke@0 103 && $(FIND) $(DEMO_PKGDIR) $(SCM_DIRS_prune) -o -type f -print ) \
duke@0 104 | $(SED) 's@^\./@@' )
duke@0 105 DEMO_ALL_FILES += $(DEMO_ALL_FILES1)
duke@0 106
duke@0 107 # Just the java sources
duke@0 108 DEMO_JAVA_SOURCES = $(filter %.java,$(DEMO_ALL_FILES))
duke@0 109
duke@0 110 # Just the C and C++ sources
duke@0 111 DEMO_C_SRC_FILES = $(filter %.c,$(DEMO_ALL_FILES))
duke@0 112 DEMO_CPP_SRC_FILES = $(filter %.cpp,$(DEMO_ALL_FILES))
duke@0 113
duke@0 114 # All the native source files
duke@0 115 DEMO_ALL_NATIVE_SOURCES = $(DEMO_C_SRC_FILES)
duke@0 116 DEMO_ALL_NATIVE_SOURCES += $(DEMO_CPP_SRC_FILES)
duke@0 117 DEMO_ALL_NATIVE_SOURCES += $(filter %.h,$(DEMO_ALL_FILES))
duke@0 118 DEMO_ALL_NATIVE_SOURCES += $(filter %.hpp,$(DEMO_ALL_FILES))
duke@0 119
duke@0 120 # If we have java sources, then define the jar file we will create
duke@0 121 ifneq ($(strip $(DEMO_JAVA_SOURCES)),)
duke@0 122 DEMO_JAR = $(DEMO_DESTDIR)/$(DEMONAME).jar
duke@0 123 endif
duke@0 124
duke@0 125 # If we have native sources, define the native library we will create
duke@0 126 ifneq ($(strip $(DEMO_ALL_NATIVE_SOURCES)),)
duke@0 127 # Path to native library we will create
duke@0 128 DEMO_LIBRARY = \
duke@0 129 $(DEMO_DESTDIR)/lib$(ISA_DIR)/$(LIB_PREFIX)$(DEMONAME).$(LIBRARY_SUFFIX)
duke@0 130 # C and C++ compiler flags we need to add to standard flags
duke@0 131 DEMO_CPPFLAGS += -I$(DEMO_BUILD_SRCDIR)
duke@0 132 # If the npt library is used we need to find the npt.h file
duke@0 133 ifneq ($(DEMO_NEEDS_NPT),)
duke@0 134 # The npt library is delivered as part of the JRE
duke@0 135 DEMO_CPPFLAGS += -I$(SHARE_SRC)/npt -I$(PLATFORM_SRC)/npt
duke@0 136 endif
duke@0 137 # Is the shared agent_util code needed
duke@0 138 ifneq ($(DEMO_NEEDS_AGENT_UTIL),)
duke@0 139 DEMO_FULL_SOURCES += $(DEMO_BUILD_SRCDIR)/agent_util.c
duke@0 140 DEMO_FULL_SOURCES += $(DEMO_BUILD_SRCDIR)/agent_util.h
duke@0 141 endif
duke@0 142 # Is the shared java_crw_demo code needed
duke@0 143 ifneq ($(DEMO_NEEDS_JAVA_CRW_DEMO),)
duke@0 144 DEMO_FULL_SOURCES += $(DEMO_BUILD_SRCDIR)/java_crw_demo.c
duke@0 145 DEMO_FULL_SOURCES += $(DEMO_BUILD_SRCDIR)/java_crw_demo.h
duke@0 146 endif
duke@0 147 # All the native object files we need to build the library
duke@0 148 DEMO_OBJECTS += $(DEMO_C_SRC_FILES:%.c=%.$(OBJECT_SUFFIX)) \
duke@0 149 $(DEMO_CPP_SRC_FILES:%.cpp=%.$(OBJECT_SUFFIX))
duke@0 150 # Linking is special depending on whether we had C++ code or on windows
duke@0 151 DEMO_NEEDS_CPP = $(strip $(DEMO_CPP_SRC_FILES))
duke@0 152 CPPFLAGS += $(DEMO_CPPFLAGS)
duke@0 153 ifeq ($(PLATFORM),windows)
duke@0 154 # Note: This is a link with cl.exe, not link.exe, options differ quite
duke@0 155 # bit between them.
duke@0 156 LINK.demo = $(LINK.c)
duke@0 157 LDLIBS.demo = $(EXTRA_LIBS) $(LFLAGS_$(COMPILER_VERSION))
duke@0 158 else
duke@0 159 ifneq ($(DEMO_NEEDS_CPP),)
duke@0 160 LINK.demo = $(LINK.cpp)
duke@0 161 LDLIBS.demo = $(LIBCXX)
duke@0 162 ifeq ($(PLATFORM),solaris)
duke@0 163 LDLIBS.demo += -lc
duke@0 164 endif
duke@0 165 else
duke@0 166 LINK.demo = $(LINK.c)
duke@0 167 LDLIBS.demo = $(LDLIBS)
duke@0 168 endif
duke@0 169 endif
duke@0 170 endif
duke@0 171
duke@0 172 # Files that are considered resources (need to be in the jar file)
duke@0 173 DEMO_RESOURCES += $(filter-out %.java,$(DEMO_ALL_FILES))
duke@0 174
duke@0 175 # All destination files (top level readme files and all sources)
duke@0 176 # Note: We exclude the topfiles from the src tree.
duke@0 177 DEMO_DEST_TOPFILES = $(DEMO_TOPFILES:%=$(DEMO_DESTDIR)/%)
duke@0 178 DEMO_FILTERED_SOURCES = $(filter-out $(DEMO_TOPFILES),$(DEMO_ALL_FILES))
duke@0 179 DEMO_FULL_SOURCES += $(DEMO_FILTERED_SOURCES:%=$(DEMO_BUILD_SRCDIR)/%)
duke@0 180
duke@0 181 # Default rule
duke@0 182 all: build demo_info
duke@0 183
duke@0 184 # Used to populate the destination directories
duke@0 185 $(DEMO_DESTDIR)/%: $(DEMO_ROOT)/%
duke@0 186 $(install-file)
duke@0 187 ifneq ($(DEMO_SRCDIR),$(DEMO_ROOT))
duke@0 188 $(DEMO_DESTDIR)/%: $(DEMO_SRCDIR)/%
duke@0 189 $(install-file)
duke@0 190 endif
duke@0 191 $(DEMO_BUILD_SRCDIR)/%: $(DEMO_SRCDIR)/%
duke@0 192 $(install-file)
duke@0 193 ifdef DEMO_PSRCDIR
duke@0 194 $(DEMO_BUILD_SRCDIR)/%: $(DEMO_PSRCDIR)/%
duke@0 195 $(install-file)
duke@0 196 endif
duke@0 197 ifdef DEMO_EXTRA_SRCDIR
duke@0 198 $(DEMO_BUILD_SRCDIR)/%: $(DEMO_EXTRA_SRCDIR)/%
duke@0 199 $(install-file)
duke@0 200 endif
duke@0 201 ifneq ($(DEMO_NEEDS_AGENT_UTIL),)
duke@0 202 $(DEMO_BUILD_SRCDIR)/%: $(DEMO_SRCDIR)/../agent_util/%
duke@0 203 $(install-file)
duke@0 204 endif
duke@0 205 ifneq ($(DEMO_NEEDS_JAVA_CRW_DEMO),)
duke@0 206 $(DEMO_BUILD_SRCDIR)/%: $(DEMO_SRCDIR)/../java_crw_demo/%
duke@0 207 $(install-file)
duke@0 208 endif
duke@0 209
duke@0 210 # Jar manifest file
duke@0 211 $(DEMO_MANIFEST):
duke@0 212 @$(prep-target)
duke@0 213 $(ECHO) "Main-Class: $(DEMO_MAINCLASS)" > $@
duke@0 214 ifdef DEMO_MANIFEST_ATTR
duke@0 215 $(ECHO) "$(DEMO_MANIFEST_ATTR)" >> $@
duke@0 216 endif
duke@0 217
duke@0 218 # Populating the jar image directory
duke@0 219 $(DEMO_JAR_IMAGE)/%: $(DEMO_SRCDIR)/%
duke@0 220 $(install-file)
duke@0 221 ifdef DEMO_PSRCDIR
duke@0 222 $(DEMO_JAR_IMAGE)/%: $(DEMO_PSRCDIR)/%
duke@0 223 $(install-file)
duke@0 224 endif
duke@0 225 ifdef DEMO_EXTRA_SRCDIR
duke@0 226 $(DEMO_JAR_IMAGE)/%: $(DEMO_EXTRA_SRCDIR)/%
duke@0 227 $(install-file)
duke@0 228 endif
duke@0 229 ifdef DEMO_DESCRIPTOR
duke@0 230 $(DEMO_JAR_IMAGE)/META-INF/services/$(DEMO_DESCRIPTOR): \
duke@0 231 $(DEMO_SRCDIR)/$(DEMO_DESCRIPTOR)
duke@0 232 $(install-file)
duke@0 233 endif
duke@0 234
duke@0 235 # If we are creating a jar file (we have java code)
duke@0 236 ifdef DEMO_JAR
duke@0 237
duke@0 238 # Input file for javac
duke@0 239 $(DEMO_JAVAC_INPUT): $(DEMO_JAVA_SOURCES:%=$(DEMO_BUILD_SRCDIR)/%)
duke@0 240 @$(prep-target)
duke@0 241 @for i in $(DEMO_JAVA_SOURCES) ; do \
duke@0 242 $(ECHO) "$(DEMO_BUILD_SRCDIR)/$$i" >> $@ ; \
duke@0 243 done
duke@0 244
duke@0 245 # Jar file creation
duke@0 246 $(DEMO_JAR): \
duke@0 247 $(DEMO_JAVAC_INPUT) \
duke@0 248 $(DEMO_MANIFEST) \
duke@0 249 $(DEMO_DESCRIPTOR:%=$(DEMO_JAR_IMAGE)/META-INF/services/%) \
duke@0 250 $(DEMO_RESOURCES:%=$(DEMO_JAR_IMAGE)/%)
duke@0 251 @$(prep-target)
duke@0 252 $(MKDIR) -p $(DEMO_JAR_IMAGE)
duke@0 253 $(JAVAC_CMD) -d $(DEMO_JAR_IMAGE) -sourcepath $(DEMO_BUILD_SRCDIR) \
duke@0 254 @$(DEMO_JAVAC_INPUT)
duke@0 255 $(BOOT_JAR_CMD) -cfm $@ $(DEMO_MANIFEST) \
duke@0 256 -C $(DEMO_JAR_IMAGE) . \
ohair@459 257 $(BOOT_JAR_JFLAGS)
duke@0 258 @$(java-vm-cleanup)
duke@0 259
duke@0 260 endif
duke@0 261
rupashka@3529 262 ifndef DEMO_SKIP_SRCZIP
rupashka@3529 263 # Create a src.zip file
rupashka@3529 264 $(DEMO_BUILD_SRCZIP): $(DEMO_FULL_SOURCES)
duke@0 265 @$(prep-target)
duke@0 266 $(CD) $(DEMO_BUILD_AREA)/src && $(ZIPEXE) -q -r ../$(@F) .
duke@0 267
rupashka@3529 268 # Install the destination src.zip file and create the src tree
rupashka@3529 269 $(DEMO_SOURCE_ZIP): $(DEMO_BUILD_SRCZIP)
duke@0 270 $(install-file)
rupashka@3529 271 endif
duke@0 272
duke@0 273 # Native library building
duke@0 274 ifdef DEMO_LIBRARY
duke@0 275
duke@0 276 # Full paths to object files
duke@0 277 DEMO_FULL_OBJECTS = $(DEMO_OBJECTS:%=$(OBJDIR)/%)
duke@0 278 VPATH=
duke@0 279
duke@0 280 # Native compile rules
duke@0 281 $(OBJDIR)/%.$(OBJECT_SUFFIX): $(DEMO_BUILD_SRCDIR)/%.c
duke@0 282 @$(prep-target)
duke@0 283 $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ $<
duke@0 284 ifneq ($(DEMO_NEEDS_CPP),)
duke@0 285 $(OBJDIR)/%.$(OBJECT_SUFFIX): $(DEMO_BUILD_SRCDIR)/%.cpp
duke@0 286 @$(prep-target)
duke@0 287 $(COMPILE.cpp) $(CC_OBJECT_OUTPUT_FLAG)$@ $<
duke@0 288 endif
duke@0 289
duke@0 290 # Actual creation of the native shared library (C++ and C are different)
duke@0 291 $(DEMO_LIBRARY): $(DEMO_FULL_OBJECTS)
duke@0 292 @$(prep-target)
duke@0 293 $(LINK.demo) $(SHARED_LIBRARY_FLAG) $(CC_PROGRAM_OUTPUT_FLAG)$@ \
duke@0 294 $(DEMO_FULL_OBJECTS) $(LDLIBS.demo)
ohair@3575 295 @$(call binary_file_verification,$@)
duke@0 296
duke@0 297 # Generation of any javah include file, make sure objects are dependent on it
duke@0 298 ifdef DEMO_NATIVECLASS
duke@0 299 $(DEMO_JAVAH_FILE): $(DEMO_JAR)
duke@0 300 @$(prep-target)
duke@0 301 $(JAVAH_CMD) -d $(DEMO_BUILD_SRCDIR) -classpath $(DEMO_JAR) \
duke@0 302 $(DEMO_NATIVECLASS)
duke@0 303 @$(java-vm-cleanup)
duke@0 304 $(DEMO_FULL_OBJECTS): $(DEMO_JAVAH_FILE)
duke@0 305 endif
duke@0 306
duke@0 307 endif
duke@0 308
duke@0 309 # Build involves populating the destination "src" tree, building the jar and
duke@0 310 # native library, and creating a source bundle
duke@0 311
duke@0 312 sources: $(DEMO_FULL_SOURCES)
duke@0 313 @$(ECHO) "Created $@"
duke@0 314
duke@0 315 objects:
duke@0 316 @$(ECHO) "Created $@"
duke@0 317
duke@0 318 # Why the nested make here? It only works this way, don't know why.
duke@0 319 bundles: $(DEMO_BUILD_SRCZIP)
duke@0 320 $(RM) -r $(DEMO_DESTDIR)
duke@0 321 $(MKDIR) -p $(DEMO_DESTDIR)
duke@0 322 $(MAKE) $(DEMO_LIBRARY) $(DEMO_JAR) $(DEMO_SOURCE_ZIP) $(DEMO_DEST_TOPFILES)
duke@0 323 # Applets are special, no jar file, no src.zip, everything expanded.
duke@0 324 ifdef DEMO_IS_APPLET
duke@0 325 @$(ECHO) "Expanding jar file into demos area at $(DEMO_DESTDIR)"
ohair@459 326 ( $(CD) $(DEMO_DESTDIR) && \
ohair@459 327 $(BOOT_JAR_CMD) -xfv $(DEMONAME).jar \
ohair@459 328 $(BOOT_JAR_JFLAGS) && \
ohair@459 329 $(RM) -r META-INF $(DEMONAME).jar && \
ohair@459 330 $(java-vm-cleanup) )
duke@0 331 @( $(CD) $(DEMO_DESTDIR) && $(java-vm-cleanup) )
duke@0 332 @$(ECHO) "Expanding source into demos area at $(DEMO_DESTDIR)"
duke@0 333 ( $(CD) $(DEMO_DESTDIR) && $(UNZIP) -o src.zip && $(RM) src.zip )
duke@0 334 endif
duke@0 335
duke@0 336 build: sources bundles
duke@0 337
duke@0 338 # Printing out a demo information line
duke@0 339 define printDemoSetting
duke@0 340 if [ "$2" != "" ] ; then $(PRINTF) "%-20s %s\n" "$1:" "$2"; fi
duke@0 341 endef
duke@0 342
duke@0 343 # Print out the demo information
duke@0 344 demo_info:
duke@0 345 @$(ECHO) "========================================================="
duke@0 346 @$(call printDemoSetting,DEMONAME,$(DEMONAME))
duke@0 347 @$(call printDemoSetting,DEMO_ROOT,$(DEMO_ROOT))
duke@0 348 @$(call printDemoSetting,DEMO_SRCDIR,$(DEMO_SRCDIR))
duke@0 349 @$(call printDemoSetting,DEMO_DESTDIR,$(DEMO_DESTDIR))
duke@0 350 @$(call printDemoSetting,DEMO_JAR,$(DEMO_JAR))
duke@0 351 @$(call printDemoSetting,DEMO_MANIFEST_ATTR,$(DEMO_MANIFEST_ATTR))
duke@0 352 @$(call printDemoSetting,DEMO_PSRCDIR,$(DEMO_PSRCDIR))
duke@0 353 @$(call printDemoSetting,DEMO_EXTRA_SRCDIR,$(DEMO_EXTRA_SRCDIR))
duke@0 354 @$(call printDemoSetting,DEMO_EXTRA_FILES,$(DEMO_EXTRA_FILES))
duke@0 355 @$(call printDemoSetting,DEMO_TOPFILES,$(DEMO_TOPFILES))
duke@0 356 @$(call printDemoSetting,DEMO_MAINCLASS,$(DEMO_MAINCLASS))
duke@0 357 @$(call printDemoSetting,DEMO_DESCRIPTOR,$(DEMO_DESCRIPTOR))
duke@0 358 @$(call printDemoSetting,DEMO_NATIVECLASS,$(DEMO_NATIVECLASS))
duke@0 359 @$(call printDemoSetting,DEMO_LIBRARY,$(DEMO_LIBRARY))
duke@0 360 @$(call printDemoSetting,DEMO_OBJECTS,$(DEMO_OBJECTS))
duke@0 361 @$(call printDemoSetting,DEMO_SOURCE_ZIP,$(DEMO_SOURCE_ZIP))
duke@0 362 @$(ECHO) "========================================================="
duke@0 363
duke@0 364 # Clean rule
duke@0 365 clean clobber:
duke@0 366 $(RM) -r $(DEMO_BUILD_AREA)
duke@0 367 $(RM) -r $(DEMO_DESTDIR)
duke@0 368
rupashka@3529 369 # This should not be needed, but some versions of GNU make have a bug that
duke@0 370 # sometimes deleted these files for some strange and unknown reason
duke@0 371 # (GNU make version 3.78.1 has the problem, GNU make version 3.80 doesn't?)
duke@0 372 .PRECIOUS: $(DEMO_FULL_SOURCES) $(DEMO_BUILD_SRCZIP) $(DEMO_SOURCE_ZIP)
duke@0 373
duke@0 374 # List phony targets
duke@0 375 .PHONY: all build clean clobber demo_info \
duke@0 376 sources bundles
duke@0 377