# -*- Mode: makefile -*- # # ***** BEGIN LICENSE BLOCK ***** # Version: MPL 1.1/GPL 2.0/LGPL 2.1 # # The contents of this file are subject to the Mozilla Public License Version # 1.1 (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" basis, # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License # for the specific language governing rights and limitations under the # License. # # The Original Code is Mozilla Communicator client code, released # March 31, 1998. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Michael Ang # Kevin Buhr # # Alternatively, the contents of this file may be used under the terms of # either of the GNU General Public License Version 2 or later (the "GPL"), # or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), # in which case the provisions of the GPL or the LGPL are applicable instead # of those above. If you wish to allow use of your version of this file only # under the terms of either the GPL or the LGPL, and not to allow others to # use your version of this file under the terms of the MPL, indicate your # decision by deleting the provisions above and replace them with the notice # and other provisions required by the GPL or the LGPL. If you do not delete # the provisions above, a recipient may use your version of this file under # the terms of any one of the MPL, the GPL or the LGPL. # # ***** END LICENSE BLOCK ***** # # JSRef GNUmake makefile. # # Note: dependency rules are missing for some files (some # .h, all .msg, etc.) Re-make clean if in doubt. # DEPTH = . include config.mk #NS_USE_NATIVE = 1 ifdef USE_MSVC OTHER_LIBS += fdlibm/$(OBJDIR)/fdlibm.lib else OTHER_LIBS += -Lfdlibm/$(OBJDIR) -lfdm endif ifdef JS_THREADSAFE DEFINES += -DJS_THREADSAFE INCLUDES += -I../../dist/$(OBJDIR)/include ifdef USE_MSVC OTHER_LIBS += ../../dist/$(OBJDIR)/lib/libnspr${NSPR_LIBSUFFIX}.lib else OTHER_LIBS += -L../../dist/$(OBJDIR)/lib -lnspr${NSPR_LIBSUFFIX} endif endif ifdef JS_NO_THIN_LOCKS DEFINES += -DJS_USE_ONLY_NSPR_LOCKS endif ifdef JS_HAS_FILE_OBJECT DEFINES += -DJS_HAS_FILE_OBJECT endif # # XCFLAGS may be set in the environment or on the gmake command line # CFLAGS += $(OPTIMIZER) $(OS_CFLAGS) $(DEFINES) $(INCLUDES) $(XCFLAGS) LDFLAGS = $(XLDFLAGS) ifndef NO_LIBM LDFLAGS += -lm endif # Prevent floating point errors caused by VC++ optimizations ifeq ($(OS_ARCH),WINNT) CFLAGS += /Op endif # WINNT # # Ask perl what flags it was built with, so we can build js with similar flags # and link properly. Viva gmake. # ifdef JS_PERLCONNECT DEFINES += -DPERLCONNECT -D_GNU_SOURCE PERLCFLAGS := $(shell perl -MExtUtils::Embed -e ccopts) PERLLDFLAGS := $(shell perl -MExtUtils::Embed -e ldopts) # perl erroneously reports compiler flag -rdynamic (interpreted by ld # as -r) when it really meant -export-dynamic. PERLLDFLAGS := $(subst -rdynamic,-export-dynamic,$(PERLLDFLAGS)) CFLAGS += $(PERLCFLAGS) #LDFLAGS += $(PERLLDFLAGS) #PH removed this assgnment INCLUDES += -I. #needed for perlconnect/jsperl.c endif # # Server-related changes : # ifdef NES40 DEFINES += -DNES40 endif # # Line editing support. # Define JS_READLINE or JS_EDITLINE to enable line editing in the # js command-line interpreter. # ifdef JS_READLINE # For those platforms with the readline library installed. DEFINES += -DEDITLINE PROG_LIBS += -lreadline -ltermcap else ifdef JS_EDITLINE # Use the editline library, built locally. PREDIRS += editline DEFINES += -DEDITLINE PROG_LIBS += editline/$(OBJDIR)/libedit.a endif endif # For purify PURE_CFLAGS = -DXP_UNIX $(OPTIMIZER) $(PURE_OS_CFLAGS) $(DEFINES) \ $(INCLUDES) $(XCFLAGS) # # JS file lists # JS_HFILES = \ jsarray.h \ jsatom.h \ jsbool.h \ jsconfig.h \ jscntxt.h \ jsdate.h \ jsemit.h \ jsexn.h \ jsfun.h \ jsgc.h \ jsinterp.h \ jslibmath.h \ jslock.h \ jsmath.h \ jsnum.h \ jsobj.h \ jsopcode.h \ jsparse.h \ jsarena.h \ jsclist.h \ jsdhash.h \ jsdtoa.h \ jshash.h \ jslong.h \ jsosdep.h \ jstypes.h \ jsprvtd.h \ jspubtd.h \ jsregexp.h \ jsscan.h \ jsscope.h \ jsscript.h \ jsstr.h \ jsxdrapi.h \ jsxml.h \ $(NULL) API_HFILES = \ jsapi.h \ jsdbgapi.h \ $(NULL) OTHER_HFILES = \ jsbit.h \ jscompat.h \ jscpucfg.h \ jsotypes.h \ jsstddef.h \ prmjtime.h \ resource.h \ jsopcode.tbl \ js.msg \ jsshell.msg \ $(NULL) ifndef PREBUILT_CPUCFG OTHER_HFILES += $(OBJDIR)/jsautocfg.h endif HFILES = $(JS_HFILES) $(API_HFILES) $(OTHER_HFILES) JS_CFILES = \ jsapi.c \ jsarena.c \ jsarray.c \ jsatom.c \ jsbool.c \ jscntxt.c \ jsdate.c \ jsdbgapi.c \ jsdhash.c \ jsdtoa.c \ jsemit.c \ jsexn.c \ jsfun.c \ jsgc.c \ jshash.c \ jsinterp.c \ jslock.c \ jslog2.c \ jslong.c \ jsmath.c \ jsnum.c \ jsobj.c \ jsopcode.c \ jsparse.c \ jsprf.c \ jsregexp.c \ jsscan.c \ jsscope.c \ jsscript.c \ jsstr.c \ jsutil.c \ jsxdrapi.c \ jsxml.c \ prmjtime.c \ $(NULL) PREDIRS += fdlibm ifdef USE_MSVC FDLIBM_LIBRARY = fdlibm/$(OBJDIR)/fdlibm.lib else FDLIBM_LIBRARY = fdlibm/$(OBJDIR)/libfdm.a endif JSMATH_PRELINK = $(OBJDIR)/jsmathtemp.o # Flag for incremental linking DASH_R = -r ifeq ($(OS_ARCH),QNX) ifneq ($(OS_TARGET),NTO) # Don't use wildcard here, because we only want this resolved at link time. OBJS += fdlibm/*.o endif endif ifdef JS_LIVECONNECT DIRS += liveconnect endif ifdef JS_PERLCONNECT JS_CFILES += perlconnect/jsperl.c endif ifdef JS_HAS_FILE_OBJECT JS_CFILES += jsfile.c JS_HFILES += jsfile.h endif LIB_CFILES = $(JS_CFILES) LIB_ASFILES := $(wildcard *_$(OS_ARCH).s) PROG_CFILES = js.c ifdef USE_MSVC LIBRARY = $(OBJDIR)/js32.lib SHARED_LIBRARY = $(OBJDIR)/js32.dll PROGRAM = $(OBJDIR)/js.exe else LIBRARY = $(OBJDIR)/libjs.a SHARED_LIBRARY = $(OBJDIR)/libjs.$(SO_SUFFIX) PROGRAM = $(OBJDIR)/js ifdef JS_PERLCONNECT PROG_LIBS += $(PERLLDFLAGS) endif endif include rules.mk MOZ_DEPTH = ../.. include jsconfig.mk nsinstall-target: cd ../../config; $(MAKE) OBJDIR=$(OBJDIR) OBJDIR_NAME=$(OBJDIR) ifdef USE_MSVC $(PROGRAM): $(PROG_OBJS) $(LIBRARY) $(FDLIBM_LIBRARY) link.exe -out:"$@" $(EXE_LINK_FLAGS) $^ else $(PROGRAM): $(PROG_OBJS) $(LIBRARY) $(FDLIBM_LIBRARY) $(CC) -o $@ $(CFLAGS) $(PROG_OBJS) $(LIBRARY) $(LDFLAGS) $(OTHER_LIBS) \ $(PROG_LIBS) endif $(PROGRAM).pure: $(PROG_OBJS) $(LIBRARY) purify $(PUREFLAGS) \ $(CC) -o $@ $(PURE_OS_CFLAGS) $(PROG_OBJS) $(LIBRARY) $(LDFLAGS) \ $(OTHER_LIBS) $(PROG_LIBS) ifndef PREBUILT_CPUCFG $(HFILES) $(CFILES): $(OBJDIR)/jsautocfg.h $(OBJDIR)/jsautocfg.h: $(OBJDIR)/jscpucfg rm -f $@ $(OBJDIR)/jscpucfg > $@ $(OBJDIR)/jscpucfg: $(OBJDIR)/jscpucfg.o $(CC) -o $@ $(OBJDIR)/jscpucfg.o # Look in OBJDIR to find jsautocfg.h INCLUDES += -I$(OBJDIR) # Add to TARGETS for clobber rule TARGETS += $(OBJDIR)/jsautocfg.h $(OBJDIR)/jscpucfg \ $(OBJDIR)/jscpucfg.o $(OBJDIR)/jsmathtemp.o endif # special rule for jsmath.o since we want to incrementally link # against fdlibm to pull in only what is needed $(OBJDIR)/jsmath.o: jsmath.c jsmath.h jslibmath.h $(FDLIBM_LIBRARY) ifneq (,$(filter OS2 WINNT,$(OS_ARCH))) $(CC) -Fo$(JSMATH_PRELINK) -c $(CFLAGS) $< else $(CC) -o $(JSMATH_PRELINK) -c $(CFLAGS) $< endif ifeq ($(OS_ARCH),QNX) ifneq ($(OS_TARGET),NTO) @cp $(JSMATH_PRELINK) $@ else $(LD) $(DASH_R) -o $@ $(JSMATH_PRELINK) $(FDLIBM_LIBRARY) endif else ifdef USE_MSVC @echo Warning: to use $(LIBRARY) must also link against $(FDLIBM_LIBRARY) @cp $(JSMATH_PRELINK) $@ endif $(LD) $(DASH_R) -o $@ $(JSMATH_PRELINK) $(FDLIBM_LIBRARY) endif # Note: generated headers must be built before descending # into fdlibm directory $(FDLIBM_LIBRARY) : $(MAKE) -C fdlibm -f Makefile.ref $(@F) # # Hardwire dependencies on jsopcode.tbl # jsopcode.h jsopcode.c: jsopcode.tbl -include $(DEPENDENCIES) TARNAME = jsref.tar TARFILES = files `cat files` SUFFIXES: .i %.i: %.c $(CC) -C -E $(CFLAGS) $< > $*.i