rules.mk
上传用户:lyxiangda
上传日期:2007-01-12
资源大小:3042k
文件大小:29k
源码类别:

CA认证

开发平台:

WINDOWS

  1. #
  2. # The contents of this file are subject to the Mozilla Public
  3. # License Version 1.1 (the "License"); you may not use this file
  4. # except in compliance with the License. You may obtain a copy of
  5. # the License at http://www.mozilla.org/MPL/
  6. # Software distributed under the License is distributed on an "AS
  7. # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  8. # implied. See the License for the specific language governing
  9. # rights and limitations under the License.
  10. # The Original Code is the Netscape security libraries.
  11. # The Initial Developer of the Original Code is Netscape
  12. # Communications Corporation.  Portions created by Netscape are 
  13. # Copyright (C) 1994-2000 Netscape Communications Corporation.  All
  14. # Rights Reserved.
  15. # Contributor(s):
  16. # Alternatively, the contents of this file may be used under the
  17. # terms of the GNU General Public License Version 2 or later (the
  18. # "GPL"), in which case the provisions of the GPL are applicable 
  19. # instead of those above.  If you wish to allow use of your 
  20. # version of this file only under the terms of the GPL and not to
  21. # allow others to use your version of this file under the MPL,
  22. # indicate your decision by deleting the provisions above and
  23. # replace them with the notice and other provisions required by
  24. # the GPL.  If you do not delete the provisions above, a recipient
  25. # may use your version of this file under either the MPL or the
  26. # GPL.
  27. #
  28. #######################################################################
  29. ###                                                                 ###
  30. ###              R U L E S   O F   E N G A G E M E N T              ###
  31. ###                                                                 ###
  32. #######################################################################
  33. #######################################################################
  34. # Double-Colon rules for utilizing the binary release model.          #
  35. #######################################################################
  36. all:: export libs program install
  37. ifeq ($(AUTOCLEAN),1)
  38. autobuild:: clean export private_export libs program install
  39. else
  40. autobuild:: export private_export libs program install
  41. endif
  42. platform::
  43. @echo $(OBJDIR_NAME)
  44. #
  45. # IMPORTS will always be associated with a component.  Therefore,
  46. # the "import" rule will always change directory to the top-level
  47. # of a component, and traverse the IMPORTS keyword from the
  48. # "manifest.mn" file located at this level only.
  49. #
  50. # note: if there is a trailing slash, the component will be appended
  51. #       (see import.pl - only used for xpheader.jar)
  52. import::
  53. @echo "== import.pl =="
  54. @perl -I$(CORE_DEPTH)/coreconf $(CORE_DEPTH)/coreconf/import.pl 
  55. "RELEASE_TREE=$(RELEASE_TREE)"   
  56. "IMPORTS=$(IMPORTS)"             
  57. "VERSION=$(VERSION)" 
  58. "OS_ARCH=$(OS_ARCH)"             
  59. "PLATFORM=$(PLATFORM)" 
  60. "OVERRIDE_IMPORT_CHECK=$(OVERRIDE_IMPORT_CHECK)"   
  61. "ALLOW_VERSION_OVERRIDE=$(ALLOW_VERSION_OVERRIDE)" 
  62. "SOURCE_RELEASE_PREFIX=$(SOURCE_RELEASE_XP_DIR)"   
  63. "SOURCE_MD_DIR=$(SOURCE_MD_DIR)"      
  64. "SOURCE_XP_DIR=$(SOURCE_XP_DIR)"      
  65. "FILES=$(IMPORT_XPCLASS_JAR) $(XPHEADER_JAR) $(MDHEADER_JAR) $(MDBINARY_JAR)" 
  66. "$(IMPORT_XPCLASS_JAR)=$(IMPORT_XP_DIR)|$(IMPORT_XPCLASS_DIR)|"    
  67. "$(XPHEADER_JAR)=$(IMPORT_XP_DIR)|$(SOURCE_XP_DIR)/public/|v" 
  68. "$(MDHEADER_JAR)=$(IMPORT_MD_DIR)|$(SOURCE_MD_DIR)/include|"        
  69. "$(MDBINARY_JAR)=$(IMPORT_MD_DIR)|$(SOURCE_MD_DIR)|"
  70. export::
  71. +$(LOOP_OVER_DIRS)
  72. private_export::
  73. +$(LOOP_OVER_DIRS)
  74. release_export::
  75. +$(LOOP_OVER_DIRS)
  76. release_classes::
  77. +$(LOOP_OVER_DIRS)
  78. libs program install:: $(TARGETS)
  79. ifdef LIBRARY
  80. $(INSTALL) -m 664 $(LIBRARY) $(SOURCE_LIB_DIR)
  81. endif
  82. ifdef SHARED_LIBRARY
  83. $(INSTALL) -m 775 $(SHARED_LIBRARY) $(SOURCE_LIB_DIR)
  84. endif
  85. ifdef IMPORT_LIBRARY
  86. $(INSTALL) -m 775 $(IMPORT_LIBRARY) $(SOURCE_LIB_DIR)
  87. endif
  88. ifdef PURE_LIBRARY
  89. $(INSTALL) -m 775 $(PURE_LIBRARY) $(SOURCE_LIB_DIR)
  90. endif
  91. ifdef PROGRAM
  92. $(INSTALL) -m 775 $(PROGRAM) $(SOURCE_BIN_DIR)
  93. endif
  94. ifdef PROGRAMS
  95. $(INSTALL) -m 775 $(PROGRAMS) $(SOURCE_BIN_DIR)
  96. endif
  97. +$(LOOP_OVER_DIRS)
  98. tests::
  99. +$(LOOP_OVER_DIRS)
  100. clean clobber::
  101. rm -rf $(ALL_TRASH)
  102. +$(LOOP_OVER_DIRS)
  103. realclean clobber_all::
  104. rm -rf $(wildcard *.OBJ) dist $(ALL_TRASH)
  105. +$(LOOP_OVER_DIRS)
  106. #ifdef ALL_PLATFORMS
  107. #all_platforms:: $(NFSPWD)
  108. # @d=`$(NFSPWD)`;
  109. # if test ! -d LOGS; then rm -rf LOGS; mkdir LOGS; fi;
  110. # for h in $(PLATFORM_HOSTS); do
  111. # echo "On $$h: $(MAKE) $(ALL_PLATFORMS) >& LOGS/$$h.log";
  112. # rsh $$h -n "(chdir $$d;
  113. #      $(MAKE) $(ALL_PLATFORMS) >& LOGS/$$h.log;
  114. #      echo DONE) &" 2>&1 > LOGS/$$h.pid &
  115. # sleep 1;
  116. # done
  117. #
  118. #$(NFSPWD):
  119. # cd $(@D); $(MAKE) $(@F)
  120. #endif
  121. #######################################################################
  122. # Double-Colon rules for populating the binary release model.         #
  123. #######################################################################
  124. release_clean::
  125. rm -rf $(SOURCE_XP_DIR)/release/$(RELEASE_MD_DIR)
  126. release:: release_clean release_export release_classes release_policy release_md release_jars release_cpdistdir
  127. release_cpdistdir::
  128. @echo "== cpdist.pl =="
  129. @perl -I$(CORE_DEPTH)/coreconf $(CORE_DEPTH)/coreconf/cpdist.pl 
  130. "RELEASE_TREE=$(RELEASE_TREE)" 
  131. "CORE_DEPTH=$(CORE_DEPTH)" 
  132. "MODULE=${MODULE}" 
  133. "OS_ARCH=$(OS_ARCH)" 
  134. "RELEASE=$(RELEASE)" 
  135. "PLATFORM=$(PLATFORM)" 
  136. "RELEASE_VERSION=$(RELEASE_VERSION)" 
  137. "SOURCE_RELEASE_PREFIX=$(SOURCE_RELEASE_XP_DIR)" 
  138. "RELEASE_XP_DIR=$(RELEASE_XP_DIR)" 
  139. "RELEASE_MD_DIR=$(RELEASE_MD_DIR)" 
  140. "FILES=$(XPCLASS_JAR) $(XPCLASS_DBG_JAR) $(XPHEADER_JAR) $(MDHEADER_JAR) $(MDBINARY_JAR) XP_FILES MD_FILES" 
  141. "$(XPCLASS_JAR)=$(SOURCE_RELEASE_CLASSES_DIR)|x"
  142. "$(XPCLASS_DBG_JAR)=$(SOURCE_RELEASE_CLASSES_DBG_DIR)|x"
  143. "$(XPHEADER_JAR)=$(SOURCE_RELEASE_XPHEADERS_DIR)|x" 
  144. "$(MDHEADER_JAR)=$(SOURCE_RELEASE_MDHEADERS_DIR)|m" 
  145. "$(MDBINARY_JAR)=$(SOURCE_RELEASE_MD_DIR)|m" 
  146. "XP_FILES=$(XP_FILES)|xf" 
  147. "MD_FILES=$(MD_FILES)|mf"
  148. # $(SOURCE_RELEASE_xxx_JAR) is a name like yyy.jar
  149. # $(SOURCE_RELEASE_xx_DIR)  is a name like 
  150. release_jars::
  151. @echo "== release.pl =="
  152. @perl -I$(CORE_DEPTH)/coreconf $(CORE_DEPTH)/coreconf/release.pl 
  153. "RELEASE_TREE=$(RELEASE_TREE)" 
  154. "PLATFORM=$(PLATFORM)" 
  155. "OS_ARCH=$(OS_ARCH)" 
  156. "RELEASE_VERSION=$(RELEASE_VERSION)" 
  157. "SOURCE_RELEASE_DIR=$(SOURCE_RELEASE_DIR)" 
  158. "FILES=$(XPCLASS_JAR) $(XPCLASS_DBG_JAR) $(XPHEADER_JAR) $(MDHEADER_JAR) $(MDBINARY_JAR)" 
  159. "$(XPCLASS_JAR)=$(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_CLASSES_DIR)|b"
  160. "$(XPCLASS_DBG_JAR)=$(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_CLASSES_DBG_DIR)|b"
  161. "$(XPHEADER_JAR)=$(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_XPHEADERS_DIR)|a" 
  162. "$(MDHEADER_JAR)=$(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_MDHEADERS_DIR)|a" 
  163. "$(MDBINARY_JAR)=$(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_MD_DIR)|bi"
  164. # Rules for releasing classes.
  165. # We have to do some REALLY gross stuff to deal with multiple classes in one
  166. # file, as well as nested classes, which have a filename of the form
  167. # ContainingClass$NestedClass.class.
  168. # RELEASE_CLASSES simply performs a required patsubst on CLASSES
  169. # RELEASE_CLASS_PATH is RELEASE_CLASSES with the path (in ns/dist) prepended
  170. # RELEASE_NESTED is all the nested classes in RELEASE_CLASS_PATH.  We use a
  171. #   foreach and wildcard to get all the files that start out like one of the
  172. #   class files, then have a $.  So, for each class file, we look for file$*
  173. # RELEASE_FILES is the combination of RELEASE_NESTED and the class files
  174. #   specified by RELEASE_CLASSES which have .class appended to them.  Note that
  175. #   the RELEASE_NESTED don't need to have .class appended because they were
  176. #   read in from the wildcard as complete filenames.
  177. #
  178. # The _DBG versions are the debuggable ones.
  179. ifneq ($(CLASSES),)
  180. RELEASE_CLASSES := $(patsubst %,%,$(CLASSES))
  181. ifdef BUILD_OPT
  182. RELEASE_CLASS_PATH := $(patsubst %,$(SOURCE_CLASSES_DIR)/$(PACKAGE)/%, $(RELEASE_CLASSES))
  183. RELEASE_NESTED := $(foreach file,$(RELEASE_CLASS_PATH),$(wildcard $(file)$$*))
  184. RELEASE_FILES := $(patsubst %,%.class,$(RELEASE_CLASS_PATH)) $(RELEASE_NESTED)
  185. else
  186. RELEASE_DBG_CLASS_PATH:= $(patsubst %,$(SOURCE_CLASSES_DBG_DIR)/$(PACKAGE)/%, $(RELEASE_CLASSES))
  187. RELEASE_DBG_NESTED := $(foreach file,$(RELEASE_DBG_CLASS_PATH),$(wildcard $(file)$$*))
  188. RELEASE_DBG_FILES := $(patsubst %,%.class,$(RELEASE_DBG_CLASS_PATH)) $(RELEASE_DBG_NESTED)
  189. endif
  190. # Substitute $ for $ so the shell doesn't choke
  191. ifdef BUILD_OPT
  192. release_classes::
  193. $(INSTALL) -m 444 $(subst $$,$$,$(RELEASE_FILES)) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_CLASSES_DIR)/$(PACKAGE)
  194. else
  195. release_classes::
  196. $(INSTALL) -m 444 $(subst $$,$$,$(RELEASE_DBG_FILES)) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_CLASSES_DBG_DIR)/$(PACKAGE)
  197. endif
  198. endif
  199. ifneq ($(POLICY),)
  200. release_policy::
  201. ifdef LIBRARY
  202. -$(PLCYPATCH) $(PLCYPATCH_ARGS) $(LIBRARY)
  203. endif
  204. ifdef SHARED_LIBRARY
  205. -$(PLCYPATCH) $(PLCYPATCH_ARGS) $(SHARED_LIBRARY)
  206. endif
  207. ifdef IMPORT_LIBRARY
  208. -$(PLCYPATCH) $(PLCYPATCH_ARGS) $(IMPORT_LIBRARY)
  209. endif
  210. ifdef PURE_LIBRARY
  211. -$(PLCYPATCH) $(PLCYPATCH_ARGS) $(PURE_LIBRARY)
  212. endif
  213. ifdef PROGRAM
  214. -$(PLCYPATCH) $(PLCYPATCH_ARGS) $(PROGRAM)
  215. endif
  216. ifdef PROGRAMS
  217. -$(PLCYPATCH) $(PLCYPATCH_ARGS) $(PROGRAMS)
  218. endif
  219. +$(LOOP_OVER_DIRS)
  220. else
  221. release_policy::
  222. +$(LOOP_OVER_DIRS)
  223. endif
  224. release_md::
  225. ifdef LIBRARY
  226. $(INSTALL) -m 444 $(LIBRARY) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_LIB_DIR)
  227. endif
  228. ifdef SHARED_LIBRARY
  229. $(INSTALL) -m 555 $(SHARED_LIBRARY) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_LIB_DIR)
  230. endif
  231. ifdef IMPORT_LIBRARY
  232. $(INSTALL) -m 555 $(IMPORT_LIBRARY) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_LIB_DIR)
  233. endif
  234. ifdef PURE_LIBRARY
  235. $(INSTALL) -m 555 $(PURE_LIBRARY) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_LIB_DIR)
  236. endif
  237. ifdef PROGRAM
  238. $(INSTALL) -m 555 $(PROGRAM) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_BIN_DIR)
  239. endif
  240. ifdef PROGRAMS
  241. $(INSTALL) -m 555 $(PROGRAMS) $(SOURCE_RELEASE_PREFIX)/$(SOURCE_RELEASE_BIN_DIR)
  242. endif
  243. +$(LOOP_OVER_DIRS)
  244. alltags:
  245. rm -f TAGS
  246. find . -name dist -prune -o ( -name '*.[hc]' -o -name '*.cp' -o -name '*.cpp' ) -print | xargs etags -a
  247. find . -name dist -prune -o ( -name '*.[hc]' -o -name '*.cp' -o -name '*.cpp' ) -print | xargs ctags -a
  248. $(PROGRAM): $(OBJS) $(EXTRA_LIBS)
  249. @$(MAKE_OBJDIR)
  250. ifeq ($(OS_ARCH),WINNT)
  251. ifeq ($(OS_TARGET),WIN16)
  252. echo system windows >w16link
  253. echo option map >>w16link
  254. echo option oneautodata >>w16link
  255. echo option heapsize=32K >>w16link
  256. echo debug watcom all >>w16link
  257. echo name $@ >>w16link
  258. echo file >>w16link
  259. echo $(W16OBJS) , >>w16link
  260. echo $(W16LDFLAGS) >> w16link
  261. echo library >>w16link
  262. echo winsock.lib >>w16link
  263. $(LINK) @w16link.
  264. rm w16link
  265. else
  266. $(MKPROG) $(OBJS) -Fe$@ -link $(LDFLAGS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS)
  267. endif
  268. else
  269. $(MKPROG) -o $@ $(CFLAGS) $(OBJS) $(LDFLAGS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS)
  270. endif
  271. ifneq ($(POLICY),)
  272. -$(PLCYPATCH) $(PLCYPATCH_ARGS) $@
  273. endif
  274. $(LIBRARY): $(OBJS)
  275. @$(MAKE_OBJDIR)
  276. rm -f $@
  277. $(AR) $(OBJS)
  278. $(RANLIB) $@
  279. ifeq ($(OS_TARGET), WIN16)
  280. $(IMPORT_LIBRARY): $(SHARED_LIBRARY)
  281. wlib +$(SHARED_LIBRARY)
  282. endif
  283. $(SHARED_LIBRARY): $(OBJS)
  284. @$(MAKE_OBJDIR)
  285. rm -f $@
  286. ifeq ($(OS_ARCH)$(OS_RELEASE), AIX4.1)
  287. echo "#!" > $(OBJDIR)/lib$(LIBRARY_NAME)_syms
  288. nm -B -C -g $(OBJS) 
  289. | awk '/ [T,D] / {print $$3}' 
  290. | sed -e 's/^.//' 
  291. | sort -u >> $(OBJDIR)/lib$(LIBRARY_NAME)_syms
  292. $(LD) $(XCFLAGS) -o $@ $(OBJS) -bE:$(OBJDIR)/lib$(LIBRARY_NAME)_syms 
  293. -bM:SRE -bnoentry $(OS_LIBS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS)
  294. else
  295. ifeq ($(OS_ARCH), WINNT)
  296. ifeq ($(OS_TARGET), WIN16)
  297. echo system windows dll initinstance >w16link
  298. echo option map >>w16link
  299. echo option oneautodata >>w16link
  300. echo option heapsize=32K >>w16link
  301. echo debug watcom all >>w16link
  302. echo name $@ >>w16link
  303. echo file >>w16link
  304. echo $(W16OBJS) >>w16link
  305. echo $(W16LIBS) >>w16link
  306. echo libfile libentry >>w16link
  307. $(LINK) @w16link.
  308. rm w16link
  309. else
  310. $(LINK_DLL) -MAP $(DLLBASE) $(OBJS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS) $(LD_LIBS)
  311. endif
  312. else
  313. $(MKSHLIB) -o $@ $(OBJS) $(LD_LIBS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS)
  314. chmod +x $@
  315. endif
  316. endif
  317. ifneq ($(POLICY),)
  318. -$(PLCYPATCH) $(PLCYPATCH_ARGS) $@
  319. endif
  320. $(PURE_LIBRARY):
  321. rm -f $@
  322. ifneq ($(OS_ARCH), WINNT)
  323. $(AR) $(OBJS)
  324. endif
  325. $(RANLIB) $@
  326. ifeq ($(OS_ARCH), WINNT)
  327. $(RES): $(RESNAME)
  328. @$(MAKE_OBJDIR)
  329. $(RC) -Fo$(RES) $(RESNAME)
  330. @echo $(RES) finished
  331. endif
  332. $(OBJDIR)/$(PROG_PREFIX)%$(PROG_SUFFIX): $(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX)
  333. @$(MAKE_OBJDIR)
  334. ifeq ($(OS_ARCH),WINNT)
  335. $(MKPROG) $(OBJDIR)/$(PROG_PREFIX)$*$(OBJ_SUFFIX) -Fe$@ -link 
  336. $(LDFLAGS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS)
  337. else
  338. $(MKPROG) -o $@ $(OBJDIR)/$(PROG_PREFIX)$*$(OBJ_SUFFIX) 
  339. $(LDFLAGS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS)
  340. endif
  341. ifdef HAVE_PURIFY
  342. $(OBJDIR)/$(PROG_PREFIX)%.pure: $(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX)
  343. @$(MAKE_OBJDIR)
  344. ifeq ($(OS_ARCH),WINNT)
  345. $(PURIFY) $(CC) -Fo$@ -c $(CFLAGS) $(OBJDIR)/$(PROG_PREFIX)$*$(OBJ_SUFFIX) $(PURELDFLAGS)
  346. else
  347. $(PURIFY) $(CC) -o $@ $(CFLAGS) $(OBJDIR)/$(PROG_PREFIX)$*$(OBJ_SUFFIX) $(PURELDFLAGS)
  348. endif
  349. endif
  350. WCCFLAGS1 := $(subst /,\,$(CFLAGS))
  351. WCCFLAGS2 := $(subst -I,-i=,$(WCCFLAGS1))
  352. WCCFLAGS3 := $(subst -D,-d,$(WCCFLAGS2))
  353. $(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.c
  354. @$(MAKE_OBJDIR)
  355. ifeq ($(OS_ARCH), WINNT)
  356. ifeq ($(OS_TARGET), WIN16)
  357. echo $(WCCFLAGS3) >w16wccf
  358. $(CC) -zq -fo$(OBJDIR)\$(PROG_PREFIX)$*$(OBJ_SUFFIX)  @w16wccf $*.c
  359. rm w16wccf
  360. else
  361. $(CC) -Fo$@ -c $(CFLAGS) $*.c
  362. endif
  363. else
  364. $(CC) -o $@ -c $(CFLAGS) $*.c
  365. endif
  366. ifneq ($(OS_ARCH), WINNT)
  367. $(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.s
  368. @$(MAKE_OBJDIR)
  369. $(AS) -o $@ $(ASFLAGS) -c $*.s
  370. endif
  371. $(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.asm
  372. @$(MAKE_OBJDIR)
  373. $(AS) -Fo$@ $(ASFLAGS) -c $*.asm
  374. $(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.S
  375. @$(MAKE_OBJDIR)
  376. $(AS) -o $@ $(ASFLAGS) -c $*.S
  377. $(OBJDIR)/$(PROG_PREFIX)%: %.cpp
  378. @$(MAKE_OBJDIR)
  379. ifeq ($(OS_ARCH), WINNT)
  380. $(CCC) -Fo$@ -c $(CFLAGS) $<
  381. else
  382. $(CCC) -o $@ -c $(CFLAGS) $<
  383. endif
  384. #
  385. # Please keep the next two rules in sync.
  386. #
  387. $(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.cc
  388. @$(MAKE_OBJDIR)
  389. $(CCC) -o $@ -c $(CFLAGS) $*.cc
  390. $(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX): %.cpp
  391. @$(MAKE_OBJDIR)
  392. ifdef STRICT_CPLUSPLUS_SUFFIX
  393. echo "#line 1 "$*.cpp"" | cat - $*.cpp > $(OBJDIR)/t_$*.cc
  394. $(CCC) -o $@ -c $(CFLAGS) $(OBJDIR)/t_$*.cc
  395. rm -f $(OBJDIR)/t_$*.cc
  396. else
  397. ifeq ($(OS_ARCH),WINNT)
  398. $(CCC) -Fo$@ -c $(CFLAGS) $*.cpp
  399. else
  400. $(CCC) -o $@ -c $(CFLAGS) $*.cpp
  401. endif
  402. endif #STRICT_CPLUSPLUS_SUFFIX
  403. %.i: %.cpp
  404. ifeq ($(OS_TARGET), WIN16)
  405. echo $(WCCFLAGS3) >w16wccf
  406. $(CCC) -pl -fo=$* @w16wccf $*.cpp
  407. rm w16wccf
  408. else
  409. $(CCC) -C -E $(CFLAGS) $< > $*.i
  410. endif
  411. %.i: %.c
  412. ifeq ($(OS_TARGET), WIN16)
  413. echo $(WCCFLAGS3) >w16wccf
  414. $(CC) -pl -fo=$* @w16wccf $*.c
  415. rm w16wccf
  416. else
  417. ifeq ($(OS_ARCH),WINNT)
  418. $(CC) -C /P $(CFLAGS) $< 
  419. else
  420. $(CC) -C -E $(CFLAGS) $< > $*.i
  421. endif
  422. endif
  423. ifneq ($(OS_ARCH), WINNT)
  424. %.i: %.s
  425. $(CC) -C -E $(CFLAGS) $< > $*.i
  426. endif
  427. %: %.pl
  428. rm -f $@; cp $*.pl $@; chmod +x $@
  429. %: %.sh
  430. rm -f $@; cp $*.sh $@; chmod +x $@
  431. ifdef DIRS
  432. $(DIRS)::
  433. @if test -d $@; then
  434. set $(EXIT_ON_ERROR);
  435. echo "cd $@; $(MAKE)";
  436. cd $@; $(MAKE);
  437. set +e;
  438. else
  439. echo "Skipping non-directory $@...";
  440. fi;
  441. $(CLICK_STOPWATCH)
  442. endif
  443. ################################################################################
  444. # Bunch of things that extend the 'export' rule (in order):
  445. ################################################################################
  446. $(JAVA_DESTPATH) $(JAVA_DESTPATH)/$(PACKAGE) $(JMCSRCDIR)::
  447. @if test ! -d $@; then     
  448. echo Creating $@;   
  449. rm -rf $@;     
  450. $(NSINSTALL) -D $@; 
  451. fi
  452. ################################################################################
  453. ## IDL_GEN
  454. ifneq ($(IDL_GEN),)
  455. #export::
  456. # $(IDL2JAVA) $(IDL_GEN)
  457. #all:: export
  458. #clobber::
  459. # rm -f $(IDL_GEN:.idl=.class) # XXX wrong!
  460. endif
  461. ################################################################################
  462. ### JSRCS -- for compiling java files
  463. ###
  464. ###          NOTE:  For backwards compatibility, if $(NETLIBDEPTH) is defined,
  465. ###                 replace $(CORE_DEPTH) with $(NETLIBDEPTH).
  466. ###
  467. ifneq ($(JSRCS),)
  468. ifneq ($(JAVAC),)
  469. ifdef NETLIBDEPTH
  470. CORE_DEPTH := $(NETLIBDEPTH)
  471. endif
  472. JAVA_EXPORT_SRCS=$(shell perl $(CORE_DEPTH)/coreconf/outofdate.pl $(PERLARG) -d $(JAVA_DESTPATH)/$(PACKAGE) $(JSRCS) $(PRIVATE_JSRCS))
  473. export:: $(JAVA_DESTPATH) $(JAVA_DESTPATH)/$(PACKAGE)
  474. ifneq ($(JAVA_EXPORT_SRCS),)
  475. $(JAVAC) $(JAVA_EXPORT_SRCS)
  476. endif
  477. all:: export
  478. clobber::
  479. rm -f $(SOURCE_XP_DIR)/classes/$(PACKAGE)/*.class
  480. endif
  481. endif
  482. #
  483. # JDIRS -- like JSRCS, except you can give a list of directories and it will
  484. # compile all the out-of-date java files in those directories.
  485. #
  486. # NOTE: recursing through these can speed things up, but they also cause
  487. # some builds to run out of memory
  488. #
  489. # NOTE:  For backwards compatibility, if $(NETLIBDEPTH) is defined,
  490. #        replace $(CORE_DEPTH) with $(NETLIBDEPTH).
  491. #
  492. ifdef JDIRS
  493. ifneq ($(JAVAC),)
  494. ifdef NETLIBDEPTH
  495. CORE_DEPTH := $(NETLIBDEPTH)
  496. endif
  497. export:: $(JAVA_DESTPATH) $(JAVA_DESTPATH)/$(PACKAGE)
  498. @for d in $(JDIRS); do
  499. if test -d $$d; then
  500. set $(EXIT_ON_ERROR);
  501. files=`echo $$d/*.java`;
  502. list=`perl $(CORE_DEPTH)/coreconf/outofdate.pl $(PERLARG)
  503.     -d $(JAVA_DESTPATH)/$(PACKAGE) $$files`;
  504. if test "$${list}x" != "x"; then
  505.     echo Building all java files in $$d;
  506.     echo $(JAVAC) $$list;
  507.     $(JAVAC) $$list;
  508. fi;
  509. set +e;
  510. else
  511. echo "Skipping non-directory $$d...";
  512. fi;
  513. $(CLICK_STOPWATCH);
  514. done
  515. endif
  516. endif
  517. #
  518. # JDK_GEN -- for generating "old style" native methods 
  519. #
  520. # Generate JDK Headers and Stubs into the '_gen' and '_stubs' directory
  521. #
  522. # NOTE:  For backwards compatibility, if $(NETLIBDEPTH) is defined,
  523. #        replace $(CORE_DEPTH) with $(NETLIBDEPTH).
  524. #
  525. ifneq ($(JDK_GEN),)
  526. ifneq ($(JAVAH),)
  527. ifdef NSBUILDROOT
  528. INCLUDES += -I$(JDK_GEN_DIR) -I$(SOURCE_XP_DIR)
  529. else
  530. INCLUDES += -I$(JDK_GEN_DIR)
  531. endif
  532. ifdef NETLIBDEPTH
  533. CORE_DEPTH := $(NETLIBDEPTH)
  534. endif
  535. JDK_PACKAGE_CLASSES := $(JDK_GEN)
  536. JDK_PATH_CLASSES := $(subst .,/,$(JDK_PACKAGE_CLASSES))
  537. JDK_HEADER_CLASSFILES := $(patsubst %,$(JAVA_DESTPATH)/%.class,$(JDK_PATH_CLASSES))
  538. JDK_STUB_CLASSFILES := $(patsubst %,$(JAVA_DESTPATH)/%.class,$(JDK_PATH_CLASSES))
  539. JDK_HEADER_CFILES := $(patsubst %,$(JDK_GEN_DIR)/%.h,$(JDK_GEN))
  540. JDK_STUB_CFILES := $(patsubst %,$(JDK_STUB_DIR)/%.c,$(JDK_GEN))
  541. $(JDK_HEADER_CFILES): $(JDK_HEADER_CLASSFILES)
  542. $(JDK_STUB_CFILES): $(JDK_STUB_CLASSFILES)
  543. export::
  544. @echo Generating/Updating JDK headers 
  545. $(JAVAH) -d $(JDK_GEN_DIR) $(JDK_PACKAGE_CLASSES)
  546. @echo Generating/Updating JDK stubs
  547. $(JAVAH) -stubs -d $(JDK_STUB_DIR) $(JDK_PACKAGE_CLASSES)
  548. ifndef NO_MAC_JAVA_SHIT
  549. @if test ! -d $(CORE_DEPTH)/lib/mac/Java/; then
  550. echo "!!! You need to have a ns/lib/mac/Java directory checked out.";
  551. echo "!!! This allows us to automatically update generated files for the mac.";
  552. echo "!!! If you see any modified files there, please check them in.";
  553. fi
  554. @echo Generating/Updating JDK headers for the Mac
  555. $(JAVAH) -mac -d $(CORE_DEPTH)/lib/mac/Java/_gen $(JDK_PACKAGE_CLASSES)
  556. @echo Generating/Updating JDK stubs for the Mac
  557. $(JAVAH) -mac -stubs -d $(CORE_DEPTH)/lib/mac/Java/_stubs $(JDK_PACKAGE_CLASSES)
  558. endif
  559. endif
  560. endif
  561. #
  562. # JRI_GEN -- for generating "old style" JRI native methods
  563. #
  564. # Generate JRI Headers and Stubs into the 'jri' directory
  565. #
  566. # NOTE:  For backwards compatibility, if $(NETLIBDEPTH) is defined,
  567. #        replace $(CORE_DEPTH) with $(NETLIBDEPTH).
  568. #
  569. ifneq ($(JRI_GEN),)
  570. ifneq ($(JAVAH),)
  571. ifdef NSBUILDROOT
  572. INCLUDES += -I$(JRI_GEN_DIR) -I$(SOURCE_XP_DIR)
  573. else
  574. INCLUDES += -I$(JRI_GEN_DIR)
  575. endif
  576. ifdef NETLIBDEPTH
  577. CORE_DEPTH := $(NETLIBDEPTH)
  578. endif
  579. JRI_PACKAGE_CLASSES := $(JRI_GEN)
  580. JRI_PATH_CLASSES := $(subst .,/,$(JRI_PACKAGE_CLASSES))
  581. JRI_HEADER_CLASSFILES := $(patsubst %,$(JAVA_DESTPATH)/%.class,$(JRI_PATH_CLASSES))
  582. JRI_STUB_CLASSFILES := $(patsubst %,$(JAVA_DESTPATH)/%.class,$(JRI_PATH_CLASSES))
  583. JRI_HEADER_CFILES := $(patsubst %,$(JRI_GEN_DIR)/%.h,$(JRI_GEN))
  584. JRI_STUB_CFILES := $(patsubst %,$(JRI_GEN_DIR)/%.c,$(JRI_GEN))
  585. $(JRI_HEADER_CFILES): $(JRI_HEADER_CLASSFILES)
  586. $(JRI_STUB_CFILES): $(JRI_STUB_CLASSFILES)
  587. export::
  588. @echo Generating/Updating JRI headers 
  589. $(JAVAH) -jri -d $(JRI_GEN_DIR) $(JRI_PACKAGE_CLASSES)
  590. @echo Generating/Updating JRI stubs
  591. $(JAVAH) -jri -stubs -d $(JRI_GEN_DIR) $(JRI_PACKAGE_CLASSES)
  592. ifndef NO_MAC_JAVA_SHIT
  593. @if test ! -d $(CORE_DEPTH)/lib/mac/Java/; then
  594. echo "!!! You need to have a ns/lib/mac/Java directory checked out.";
  595. echo "!!! This allows us to automatically update generated files for the mac.";
  596. echo "!!! If you see any modified files there, please check them in.";
  597. fi
  598. @echo Generating/Updating JRI headers for the Mac
  599. $(JAVAH) -jri -mac -d $(CORE_DEPTH)/lib/mac/Java/_jri $(JRI_PACKAGE_CLASSES)
  600. @echo Generating/Updating JRI stubs for the Mac
  601. $(JAVAH) -jri -mac -stubs -d $(CORE_DEPTH)/lib/mac/Java/_jri $(JRI_PACKAGE_CLASSES)
  602. endif
  603. endif
  604. endif
  605. #
  606. # JNI_GEN -- for generating JNI native methods
  607. #
  608. # Generate JNI Headers into the 'jni' directory
  609. #
  610. ifneq ($(JNI_GEN),)
  611. ifneq ($(JAVAH),)
  612. JNI_HEADERS := $(patsubst %,$(JNI_GEN_DIR)/%.h,$(JNI_GEN))
  613. export::
  614. @if test ! -d $(JNI_GEN_DIR); then
  615. echo $(JAVAH) -jni -d $(JNI_GEN_DIR) $(JNI_GEN);
  616. $(JAVAH) -jni -d $(JNI_GEN_DIR) $(JNI_GEN);
  617. else
  618. echo "Checking for out of date header files" ;                          
  619. cmd="perl $(CORE_DEPTH)/coreconf/jniregen.pl $(PERLARG)
  620. -d $(JAVA_DESTPATH) $(JNI_GEN)";
  621. echo $$cmd;
  622. list=`$$cmd`;
  623. if test "$${list}x" != "x"; then
  624. echo $(JAVAH) -jni -d $(JNI_GEN_DIR) $$list;
  625. $(JAVAH) -jni -d $(JNI_GEN_DIR) $$list;
  626. fi
  627. fi
  628. endif
  629. endif
  630. #
  631. # JMC_EXPORT -- for declaring which java classes are to be exported for jmc
  632. #
  633. ifneq ($(JMC_EXPORT),)
  634. JMC_EXPORT_PATHS := $(subst .,/,$(JMC_EXPORT))
  635. JMC_EXPORT_FILES := $(patsubst %,$(JAVA_DESTPATH)/$(PACKAGE)/%.class,$(JMC_EXPORT_PATHS))
  636. #
  637. # We're doing NSINSTALL -t here (copy mode) because calling INSTALL will pick up 
  638. # your NSDISTMODE and make links relative to the current directory. This is a
  639. # problem because the source isn't in the current directory:
  640. #
  641. export:: $(JMC_EXPORT_FILES) $(JMCSRCDIR)
  642. $(NSINSTALL) -t -m 444 $(JMC_EXPORT_FILES) $(JMCSRCDIR)
  643. endif
  644. #
  645. # JMC_GEN -- for generating java modules
  646. #
  647. # Provide default export & install rules when using JMC_GEN
  648. #
  649. ifneq ($(JMC_GEN),)
  650. ifneq ($(JMC),)
  651. INCLUDES    += -I$(JMC_GEN_DIR) -I.
  652. JMC_HEADERS := $(patsubst %,$(JMC_GEN_DIR)/%.h,$(JMC_GEN))
  653. JMC_STUBS   := $(patsubst %,$(JMC_GEN_DIR)/%.c,$(JMC_GEN))
  654. JMC_OBJS    := $(patsubst %,$(OBJDIR)/%$(OBJ_SUFFIX),$(JMC_GEN))
  655. $(JMC_GEN_DIR)/M%.h: $(JMCSRCDIR)/%.class
  656. $(JMC) -d $(JMC_GEN_DIR) -interface $(JMC_GEN_FLAGS) $(?F:.class=)
  657. $(JMC_GEN_DIR)/M%.c: $(JMCSRCDIR)/%.class
  658. $(JMC) -d $(JMC_GEN_DIR) -module $(JMC_GEN_FLAGS) $(?F:.class=)
  659. $(OBJDIR)/M%$(OBJ_SUFFIX): $(JMC_GEN_DIR)/M%.h $(JMC_GEN_DIR)/M%.c
  660. @$(MAKE_OBJDIR)
  661. $(CC) -o $@ -c $(CFLAGS) $(JMC_GEN_DIR)/M$*.c
  662. export:: $(JMC_HEADERS) $(JMC_STUBS)
  663. endif
  664. endif
  665. #
  666. # Copy each element of EXPORTS to $(SOURCE_XP_DIR)/public/$(MODULE)/
  667. #
  668. PUBLIC_EXPORT_DIR = $(SOURCE_XP_DIR)/public/$(MODULE)
  669. ifeq ($(OS_ARCH),WINNT)
  670. ifeq ($(OS_TARGET),WIN16)
  671. PUBLIC_EXPORT_DIR = $(SOURCE_XP_DIR)/public/win16
  672. endif
  673. endif
  674. ifneq ($(EXPORTS),)
  675. $(PUBLIC_EXPORT_DIR)::
  676. @if test ! -d $@; then     
  677. echo Creating $@;   
  678. $(NSINSTALL) -D $@; 
  679. fi
  680. export:: $(EXPORTS) $(PUBLIC_EXPORT_DIR)
  681. $(INSTALL) -m 444 $(EXPORTS) $(PUBLIC_EXPORT_DIR)
  682. endif
  683. # Duplicate export rule for private exports, with different directories
  684. PRIVATE_EXPORT_DIR = $(SOURCE_XP_DIR)/private/$(MODULE)
  685. ifeq ($(OS_ARCH),WINNT)
  686. ifeq ($(OS_TARGET),WIN16)
  687. PRIVATE_EXPORT_DIR = $(SOURCE_XP_DIR)/public/win16
  688. endif
  689. endif
  690. ifneq ($(PRIVATE_EXPORTS),)
  691. $(PRIVATE_EXPORT_DIR)::
  692. @if test ! -d $@; then     
  693. echo Creating $@;   
  694. $(NSINSTALL) -D $@; 
  695. fi
  696. private_export:: $(PRIVATE_EXPORTS) $(PRIVATE_EXPORT_DIR)
  697. $(INSTALL) -m 444 $(PRIVATE_EXPORTS) $(PRIVATE_EXPORT_DIR)
  698. else
  699. private_export:: 
  700. @echo There are no private exports.;
  701. endif
  702. ##########################################################################
  703. ###   RULES FOR RUNNING REGRESSION SUITE TESTS
  704. ###   REQUIRES 'REGRESSION_SPEC' TO BE SET TO THE NAME OF A REGRESSION SPECFILE
  705. ###   AND RESULTS_SUBDIR TO BE SET TO SOMETHING LIKE SECURITY/PKCS5
  706. ##########################################################################
  707. TESTS_DIR = $(RESULTS_DIR)/$(RESULTS_SUBDIR)/$(OS_CONFIG)$(CPU_TAG)$(COMPILER_TAG)$(IMPL_STRATEGY)
  708. ifneq ($(REGRESSION_SPEC),)
  709. tests:: $(REGRESSION_SPEC) 
  710. cd $(PLATFORM); 
  711. ../$(SOURCE_MD_DIR)/bin/regress$(PROG_SUFFIX) specfile=../$(REGRESSION_SPEC) progress $(EXTRA_REGRESS_OPTIONS); 
  712. if test ! -d $(TESTS_DIR); then 
  713. echo Creating $(TESTS_DIR);   
  714. $(NSINSTALL) -D $(TESTS_DIR); 
  715. fi
  716. ifneq ($(BUILD_OPT),)
  717. $(NSINSTALL) -m 664 $(PLATFORM)/$(REGDATE).sum $(TESTS_DIR); 
  718. $(NSINSTALL) -m 664 $(PLATFORM)/$(REGDATE).htm $(TESTS_DIR); 
  719. echo "Please now make sure your results files are copied to $(TESTS_DIR), "; 
  720. echo "then run 'reporter specfile=$(RESULTS_DIR)/rptspec'"
  721. endif
  722. else
  723. tests:: 
  724. @echo Error: you didn't specify REGRESSION_SPEC in your manifest.mn file!;
  725. endif
  726. # Duplicate export rule for releases, with different directories
  727. ifneq ($(EXPORTS),)
  728. $(SOURCE_RELEASE_XP_DIR)/include::
  729. @if test ! -d $@; then     
  730. echo Creating $@;   
  731. $(NSINSTALL) -D $@; 
  732. fi
  733. release_export:: $(EXPORTS) $(SOURCE_RELEASE_XP_DIR)/include
  734. $(INSTALL) -m 444 $(EXPORTS) $(SOURCE_RELEASE_XP_DIR)/include
  735. endif
  736. ################################################################################
  737. -include $(DEPENDENCIES)
  738. ifneq ($(OS_ARCH),WINNT)
  739. # Can't use sed because of its 4000-char line length limit, so resort to perl
  740. .DEFAULT:
  741. @perl -e '                                                            
  742.     open(MD, "< $(DEPENDENCIES)");                                    
  743.     while (<MD>) {                                                    
  744. if (m@ .*/*$< @) {                                           
  745.     $$found = 1;                                              
  746.     last;                                                     
  747. }                                                             
  748.     }                                                                 
  749.     if ($$found) {                                                    
  750. print "Removing stale dependency $< from $(DEPENDENCIES)n";  
  751. seek(MD, 0, 0);                                               
  752. $$tmpname = "$(OBJDIR)/fix.md" . $$$$;                        
  753. open(TMD, "> " . $$tmpname);                                  
  754. while (<MD>) {                                                
  755.     s@ .*/*$< @ @;                                           
  756.     if (!print TMD "$$_") {                                   
  757. unlink(($$tmpname));                                  
  758. exit(1);                                              
  759.     }                                                         
  760. }                                                             
  761. close(TMD);                                                   
  762. if (!rename($$tmpname, "$(DEPENDENCIES)")) {                  
  763.     unlink(($$tmpname));                                      
  764. }                                                             
  765.     } elsif ("$<" ne "$(DEPENDENCIES)") {                             
  766. print "$(MAKE): *** No rule to make target $<.  Stop.n";     
  767. exit(1);                                                      
  768.     }'
  769. endif
  770. #############################################################################
  771. # X dependency system
  772. #############################################################################
  773. ifdef MKDEPENDENCIES
  774. # For Windows, $(MKDEPENDENCIES) must be -included before including rules.mk
  775. $(MKDEPENDENCIES)::
  776. @$(MAKE_OBJDIR)
  777. touch $(MKDEPENDENCIES) 
  778. chmod u+w $(MKDEPENDENCIES) 
  779. #on NT, the preceeding touch command creates a read-only file !?!?!
  780. #which is why we have to explicitly chmod it.
  781. $(MKDEPEND) -p$(OBJDIR_NAME)/ -o'$(OBJ_SUFFIX)' -f$(MKDEPENDENCIES) 
  782. $(NOMD_CFLAGS) $(YOPT) $(CSRCS) $(CPPSRCS) $(ASFILES)
  783. $(MKDEPEND):: $(MKDEPEND_DIR)/*.c $(MKDEPEND_DIR)/*.h
  784. cd $(MKDEPEND_DIR); $(MAKE)
  785. ifdef OBJS
  786. depend:: $(MKDEPEND) $(MKDEPENDENCIES)
  787. else
  788. depend::
  789. endif
  790. +$(LOOP_OVER_DIRS)
  791. dependclean::
  792. rm -f $(MKDEPENDENCIES)
  793. +$(LOOP_OVER_DIRS)
  794. #-include $(NSINSTALL_DIR)/$(OBJDIR)/depend.mk
  795. else
  796. depend::
  797. endif
  798. ################################################################################
  799. # Special gmake rules.
  800. ################################################################################
  801. #
  802. # Re-define the list of default suffixes, so gmake won't have to churn through
  803. # hundreds of built-in suffix rules for stuff we don't need.
  804. #
  805. .SUFFIXES:
  806. .SUFFIXES: .out .a .ln .o .obj .c .cc .C .cpp .y .l .s .S .h .sh .i .pl .class .java .html .asm
  807. #
  808. # Don't delete these files if we get killed.
  809. #
  810. .PRECIOUS: .java $(JDK_HEADERS) $(JDK_STUBS) $(JRI_HEADERS) $(JRI_STUBS) $(JMC_HEADERS) $(JMC_STUBS) $(JNI_HEADERS)
  811. #
  812. # Fake targets.  Always run these rules, even if a file/directory with that
  813. # name already exists.
  814. #
  815. .PHONY: all all_platforms alltags boot clean clobber clobber_all export install libs realclean release $(OBJDIR) $(DIRS)