git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/branches/1.5-xserver@2492 3789f03b-4d11-0410-bbf8-ca57d06f2519tags/v0.0.90
@@ -1,35 +0,0 @@ | |||
all:: | |||
@subdirs="$(SUBDIRS)"; for d in $$subdirs; do (cd $$d; $(MAKE) $@) || exit 1; done | |||
clean:: | |||
@subdirs="$(SUBDIRS)"; for d in $$subdirs; do (cd $$d; $(MAKE) $@) || exit 1; done | |||
clean:: | |||
rm -f $(program) $(library) *.o | |||
SHELL = @SHELL@ | |||
top_srcdir = @top_srcdir@ | |||
@SET_MAKE@ | |||
CC = @CC@ | |||
CFLAGS = @CFLAGS@ $(DIR_CFLAGS) | |||
CCLD = $(CC) | |||
CXX = @CXX@ | |||
CXXFLAGS = @CXXFLAGS@ | |||
CXXLD = $(CXX) | |||
CPPFLAGS = @CPPFLAGS@ | |||
DEFS = @DEFS@ | |||
ALL_CPPFLAGS = $(CPPFLAGS) $(DEFS) $(DIR_CPPFLAGS) | |||
LIBS = @LIBS@ | |||
LDFLAGS = @LDFLAGS@ | |||
RANLIB = @RANLIB@ | |||
AR = ar cq | |||
.SUFFIXES: | |||
.SUFFIXES: .cxx .c .o | |||
.c.o: | |||
$(CC) $(ALL_CPPFLAGS) $(CFLAGS) -o $@ -c $< | |||
.cxx.o: | |||
$(CXX) $(ALL_CPPFLAGS) $(CXXFLAGS) -o $@ -c $< |
@@ -1,76 +0,0 @@ | |||
# | |||
# C / C++ header dependency stuff | |||
# | |||
# Needs GNU make and vncmkdepend, a hacked version of makedepend | |||
.SUFFIXES: .d | |||
CMAKEDEPEND = vncmkdepend | |||
CXXMAKEDEPEND = vncmkdepend | |||
# | |||
# The recommended method of doing dependency analysis in the GNU make manual | |||
# turns out to be painfully slow. This method is similar but it's | |||
# substantially faster and retains the desirable property that the user doesn't | |||
# need to manually invoke a "make depend" step. | |||
# | |||
# As with the method described in the manual, we generate a separate dependency | |||
# (.d) file for each source file. The .d file records the header files that | |||
# each C or C++ source file includes. Any source file recorded in SRCS or | |||
# CXXSRCS will cause us to try and include the corresponding .d file and GNU | |||
# make then treats each .d file as a target to be remade. | |||
# | |||
# Unlike the manual's method, the rule we provide for making the .d file is | |||
# actually a fake. All it does is record in a temporary file that the .d file | |||
# needs to be remade. But as well as all the .d files, we also try to include | |||
# a file called "depend.phony". This file never exists, but it causes GNU make | |||
# to try and make the target "depend.phony". The rule for depend.phony then | |||
# looks at the temporary files generated by the .d rules and then invokes the | |||
# "omkdepend" program on all of the source files in one go. | |||
# | |||
# | |||
# We use simple assignment here to remove any of the depend.tmp files | |||
# at the time make parses this bit. | |||
# | |||
dummyvariable := $(shell $(RM) cdepend.tmp cxxdepend.tmp) | |||
# | |||
# Now the "fake" rules for generating .d files. | |||
# | |||
%.d: %.c | |||
@echo "$<" >> cdepend.tmp | |||
%.d: %.cxx | |||
@echo "$<" >> cxxdepend.tmp | |||
# | |||
# The depend.phony rule which actually runs omkdepend. | |||
# | |||
depend.phony: | |||
@if [ -f cdepend.tmp ]; then \ | |||
echo $(CMAKEDEPEND) $(ALL_CPPFLAGS) `cat cdepend.tmp`; \ | |||
$(CMAKEDEPEND) $(ALL_CPPFLAGS) `cat cdepend.tmp`; \ | |||
rm -f cdepend.tmp; \ | |||
fi; \ | |||
if [ -f cxxdepend.tmp ]; then \ | |||
echo $(CXXMAKEDEPEND) $(ALL_CPPFLAGS) `cat cxxdepend.tmp`; \ | |||
$(CXXMAKEDEPEND) $(ALL_CPPFLAGS) `cat cxxdepend.tmp`; \ | |||
rm -f cxxdepend.tmp; \ | |||
fi | |||
# | |||
# Now include the .d files and the "depend.phony" file which never exists. | |||
# For some reason GNU make evaluates the targets in reverse order, so we need | |||
# to include depend.phony first. The "-" tells make not to complain that it | |||
# can't find the file. | |||
# | |||
-include depend.phony | |||
ifdef SRCS | |||
-include $(patsubst %.c,%.d,$(patsubst %.cxx,%.d,$(SRCS))) | |||
endif |
@@ -1,175 +0,0 @@ | |||
# Makefile for zlib | |||
# Copyright (C) 1995-2002 Jean-loup Gailly. | |||
# For conditions of distribution and use, see copyright notice in zlib.h | |||
# To compile and test, type: | |||
# ./configure; make test | |||
# The call of configure is optional if you don't have special requirements | |||
# If you wish to build zlib as a shared library, use: ./configure -s | |||
# To install /usr/local/lib/libz.* and /usr/local/include/zlib.h, type: | |||
# make install | |||
# To install in $HOME instead of /usr/local, use: | |||
# make install prefix=$HOME | |||
CC=cc | |||
CFLAGS=-O | |||
#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 | |||
#CFLAGS=-g -DDEBUG | |||
#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ | |||
# -Wstrict-prototypes -Wmissing-prototypes | |||
LDFLAGS=-L. -lz | |||
LDSHARED=$(CC) | |||
CPP=$(CC) -E | |||
VER=1.1.4 | |||
LIBS=libz.a | |||
SHAREDLIB=libz.so | |||
AR=ar rc | |||
RANLIB=ranlib | |||
TAR=tar | |||
SHELL=/bin/sh | |||
prefix = /usr/local | |||
exec_prefix = ${prefix} | |||
libdir = ${exec_prefix}/lib | |||
includedir = ${prefix}/include | |||
OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ | |||
zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o | |||
OBJA = | |||
# to use the asm code: make OBJA=match.o | |||
TEST_OBJS = example.o minigzip.o | |||
DISTFILES = README FAQ INDEX ChangeLog configure Make*[a-z0-9] *.[ch] *.mms \ | |||
algorithm.txt zlib.3 zlib.html \ | |||
msdos/Make*[a-z0-9] msdos/zlib.def msdos/zlib.rc \ | |||
nt/Make*[a-z0-9] nt/zlib.dnt amiga/Make*.??? os2/M*.os2 os2/zlib.def \ | |||
contrib/RE*.contrib contrib/*.txt contrib/asm386/*.asm contrib/asm386/*.c \ | |||
contrib/asm386/*.bat contrib/asm386/zlibvc.d?? contrib/asm[56]86/*.?86 \ | |||
contrib/asm[56]86/*.S contrib/iostream/*.cpp \ | |||
contrib/iostream/*.h contrib/iostream2/*.h contrib/iostream2/*.cpp \ | |||
contrib/untgz/Makefile contrib/untgz/*.c contrib/untgz/*.w32 \ | |||
contrib/minizip/[CM]*[pe] contrib/minizip/*.[ch] contrib/minizip/*.[td]?? \ | |||
contrib/delphi*/*.??? | |||
all: example minigzip | |||
test: all | |||
@LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \ | |||
echo hello world | ./minigzip | ./minigzip -d || \ | |||
echo ' *** minigzip test FAILED ***' ; \ | |||
if ./example; then \ | |||
echo ' *** zlib test OK ***'; \ | |||
else \ | |||
echo ' *** zlib test FAILED ***'; \ | |||
fi | |||
libz.a: $(OBJS) $(OBJA) | |||
$(AR) $@ $(OBJS) $(OBJA) | |||
-@ ($(RANLIB) $@ || true) >/dev/null 2>&1 | |||
match.o: match.S | |||
$(CPP) match.S > _match.s | |||
$(CC) -c _match.s | |||
mv _match.o match.o | |||
rm -f _match.s | |||
$(SHAREDLIB).$(VER): $(OBJS) | |||
$(LDSHARED) -o $@ $(OBJS) | |||
rm -f $(SHAREDLIB) $(SHAREDLIB).1 | |||
ln -s $@ $(SHAREDLIB) | |||
ln -s $@ $(SHAREDLIB).1 | |||
example: example.o $(LIBS) | |||
$(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS) | |||
minigzip: minigzip.o $(LIBS) | |||
$(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS) | |||
install: $(LIBS) | |||
-@if [ ! -d $(includedir) ]; then mkdir $(includedir); fi | |||
-@if [ ! -d $(libdir) ]; then mkdir $(libdir); fi | |||
cp zlib.h zconf.h $(includedir) | |||
chmod 644 $(includedir)/zlib.h $(includedir)/zconf.h | |||
cp $(LIBS) $(libdir) | |||
cd $(libdir); chmod 755 $(LIBS) | |||
-@(cd $(libdir); $(RANLIB) libz.a || true) >/dev/null 2>&1 | |||
cd $(libdir); if test -f $(SHAREDLIB).$(VER); then \ | |||
rm -f $(SHAREDLIB) $(SHAREDLIB).1; \ | |||
ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB); \ | |||
ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB).1; \ | |||
(ldconfig || true) >/dev/null 2>&1; \ | |||
fi | |||
# The ranlib in install is needed on NeXTSTEP which checks file times | |||
# ldconfig is for Linux | |||
uninstall: | |||
cd $(includedir); \ | |||
v=$(VER); \ | |||
if test -f zlib.h; then \ | |||
v=`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`; \ | |||
rm -f zlib.h zconf.h; \ | |||
fi; \ | |||
cd $(libdir); rm -f libz.a; \ | |||
if test -f $(SHAREDLIB).$$v; then \ | |||
rm -f $(SHAREDLIB).$$v $(SHAREDLIB) $(SHAREDLIB).1; \ | |||
fi | |||
clean: | |||
rm -f *.o *~ example minigzip libz.a libz.so* foo.gz so_locations \ | |||
_match.s maketree | |||
distclean: clean | |||
zip: | |||
mv Makefile Makefile~; cp -p Makefile.in Makefile | |||
rm -f test.c ztest*.c contrib/minizip/test.zip | |||
v=`sed -n -e 's/\.//g' -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\ | |||
zip -ul9 zlib$$v $(DISTFILES) | |||
mv Makefile~ Makefile | |||
dist: | |||
mv Makefile Makefile~; cp -p Makefile.in Makefile | |||
rm -f test.c ztest*.c contrib/minizip/test.zip | |||
d=zlib-`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\ | |||
rm -f $$d.tar.gz; \ | |||
if test ! -d ../$$d; then rm -f ../$$d; ln -s `pwd` ../$$d; fi; \ | |||
files=""; \ | |||
for f in $(DISTFILES); do files="$$files $$d/$$f"; done; \ | |||
cd ..; \ | |||
GZIP=-9 $(TAR) chofz $$d/$$d.tar.gz $$files; \ | |||
if test ! -d $$d; then rm -f $$d; fi | |||
mv Makefile~ Makefile | |||
tags: | |||
etags *.[ch] | |||
depend: | |||
makedepend -- $(CFLAGS) -- *.[ch] | |||
# DO NOT DELETE THIS LINE -- make depend depends on it. | |||
adler32.o: zlib.h zconf.h | |||
compress.o: zlib.h zconf.h | |||
crc32.o: zlib.h zconf.h | |||
deflate.o: deflate.h zutil.h zlib.h zconf.h | |||
example.o: zlib.h zconf.h | |||
gzio.o: zutil.h zlib.h zconf.h | |||
infblock.o: infblock.h inftrees.h infcodes.h infutil.h zutil.h zlib.h zconf.h | |||
infcodes.o: zutil.h zlib.h zconf.h | |||
infcodes.o: inftrees.h infblock.h infcodes.h infutil.h inffast.h | |||
inffast.o: zutil.h zlib.h zconf.h inftrees.h | |||
inffast.o: infblock.h infcodes.h infutil.h inffast.h | |||
inflate.o: zutil.h zlib.h zconf.h infblock.h | |||
inftrees.o: zutil.h zlib.h zconf.h inftrees.h | |||
infutil.o: zutil.h zlib.h zconf.h infblock.h inftrees.h infcodes.h infutil.h | |||
minigzip.o: zlib.h zconf.h | |||
trees.o: deflate.h zutil.h zlib.h zconf.h trees.h | |||
uncompr.o: zlib.h zconf.h | |||
zutil.o: zutil.h zlib.h zconf.h |
@@ -1,213 +0,0 @@ | |||
#!/bin/sh | |||
# configure script for zlib. This script is needed only if | |||
# you wish to build a shared library and your system supports them, | |||
# of if you need special compiler, flags or install directory. | |||
# Otherwise, you can just use directly "make test; make install" | |||
# | |||
# To create a shared library, use "configure --shared"; by default a static | |||
# library is created. If the primitive shared library support provided here | |||
# does not work, use ftp://prep.ai.mit.edu/pub/gnu/libtool-*.tar.gz | |||
# | |||
# To impose specific compiler or flags or install directory, use for example: | |||
# prefix=$HOME CC=cc CFLAGS="-O4" ./configure | |||
# or for csh/tcsh users: | |||
# (setenv prefix $HOME; setenv CC cc; setenv CFLAGS "-O4"; ./configure) | |||
# LDSHARED is the command to be used to create a shared library | |||
# Incorrect settings of CC or CFLAGS may prevent creating a shared library. | |||
# If you have problems, try without defining CC and CFLAGS before reporting | |||
# an error. | |||
LIBS=libz.a | |||
SHAREDLIB=libz.so | |||
VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h` | |||
AR=${AR-"ar rc"} | |||
RANLIB=${RANLIB-"ranlib"} | |||
prefix=${prefix-/usr/local} | |||
exec_prefix=${exec_prefix-'${prefix}'} | |||
libdir=${libdir-'${exec_prefix}/lib'} | |||
includedir=${includedir-'${prefix}/include'} | |||
shared_ext='.so' | |||
shared=0 | |||
gcc=0 | |||
old_cc="$CC" | |||
old_cflags="$CFLAGS" | |||
while test $# -ge 1 | |||
do | |||
case "$1" in | |||
-h* | --h*) | |||
echo 'usage:' | |||
echo ' configure [--shared] [--prefix=PREFIX] [--exec_prefix=EXPREFIX]' | |||
echo ' [--libdir=LIBDIR] [--includedir=INCLUDEDIR]' | |||
exit 0;; | |||
-p*=* | --p*=*) prefix=`echo $1 | sed 's/[-a-z_]*=//'`; shift;; | |||
-e*=* | --e*=*) exec_prefix=`echo $1 | sed 's/[-a-z_]*=//'`; shift;; | |||
-l*=* | --libdir=*) libdir=`echo $1 | sed 's/[-a-z_]*=//'`; shift;; | |||
-i*=* | --includedir=*) includedir=`echo $1 | sed 's/[-a-z_]*=//'`;shift;; | |||
-p* | --p*) prefix="$2"; shift; shift;; | |||
-e* | --e*) exec_prefix="$2"; shift; shift;; | |||
-l* | --l*) libdir="$2"; shift; shift;; | |||
-i* | --i*) includedir="$2"; shift; shift;; | |||
-s* | --s*) shared=1; shift;; | |||
*) shift;; | |||
esac | |||
done | |||
test=ztest$$ | |||
cat > $test.c <<EOF | |||
extern int getchar(); | |||
int hello() {return getchar();} | |||
EOF | |||
test -z "$CC" && echo Checking for gcc... | |||
cc=${CC-gcc} | |||
cflags=${CFLAGS-"-O3"} | |||
# to force the asm version use: CFLAGS="-O3 -DASMV" ./configure | |||
case "$cc" in | |||
*gcc*) gcc=1;; | |||
esac | |||
if test "$gcc" -eq 1 && ($cc -c $cflags $test.c) 2>/dev/null; then | |||
CC="$cc" | |||
SFLAGS=${CFLAGS-"-fPIC -O3"} | |||
CFLAGS="$cflags" | |||
case `(uname -s || echo unknown) 2>/dev/null` in | |||
Linux | linux) LDSHARED=${LDSHARED-"gcc -shared -Wl,-soname,libz.so.1"};; | |||
*) LDSHARED=${LDSHARED-"gcc -shared"};; | |||
esac | |||
else | |||
# find system name and corresponding cc options | |||
CC=${CC-cc} | |||
case `(uname -sr || echo unknown) 2>/dev/null` in | |||
HP-UX*) SFLAGS=${CFLAGS-"-O +z"} | |||
CFLAGS=${CFLAGS-"-O"} | |||
# LDSHARED=${LDSHARED-"ld -b +vnocompatwarnings"} | |||
LDSHARED=${LDSHARED-"ld -b"} | |||
shared_ext='.sl' | |||
SHAREDLIB='libz.sl';; | |||
IRIX*) SFLAGS=${CFLAGS-"-ansi -O2 -rpath ."} | |||
CFLAGS=${CFLAGS-"-ansi -O2"} | |||
LDSHARED=${LDSHARED-"cc -shared"};; | |||
OSF1\ V4*) SFLAGS=${CFLAGS-"-O -std1"} | |||
CFLAGS=${CFLAGS-"-O -std1"} | |||
LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,$SHAREDLIB -Wl,-msym -Wl,-rpath,$(libdir) -Wl,-set_version,${VER}:1.0"};; | |||
OSF1*) SFLAGS=${CFLAGS-"-O -std1"} | |||
CFLAGS=${CFLAGS-"-O -std1"} | |||
LDSHARED=${LDSHARED-"cc -shared"};; | |||
QNX*) SFLAGS=${CFLAGS-"-4 -O"} | |||
CFLAGS=${CFLAGS-"-4 -O"} | |||
LDSHARED=${LDSHARED-"cc"} | |||
RANLIB=${RANLIB-"true"} | |||
AR="cc -A";; | |||
SCO_SV\ 3.2*) SFLAGS=${CFLAGS-"-O3 -dy -KPIC "} | |||
CFLAGS=${CFLAGS-"-O3"} | |||
LDSHARED=${LDSHARED-"cc -dy -KPIC -G"};; | |||
SunOS\ 5*) SFLAGS=${CFLAGS-"-fast -xcg89 -KPIC -R."} | |||
CFLAGS=${CFLAGS-"-fast -xcg89"} | |||
LDSHARED=${LDSHARED-"cc -G"};; | |||
SunOS\ 4*) SFLAGS=${CFLAGS-"-O2 -PIC"} | |||
CFLAGS=${CFLAGS-"-O2"} | |||
LDSHARED=${LDSHARED-"ld"};; | |||
UNIX_System_V\ 4.2.0) | |||
SFLAGS=${CFLAGS-"-KPIC -O"} | |||
CFLAGS=${CFLAGS-"-O"} | |||
LDSHARED=${LDSHARED-"cc -G"};; | |||
UNIX_SV\ 4.2MP) | |||
SFLAGS=${CFLAGS-"-Kconform_pic -O"} | |||
CFLAGS=${CFLAGS-"-O"} | |||
LDSHARED=${LDSHARED-"cc -G"};; | |||
# send working options for other systems to support@gzip.org | |||
*) SFLAGS=${CFLAGS-"-O"} | |||
CFLAGS=${CFLAGS-"-O"} | |||
LDSHARED=${LDSHARED-"cc -shared"};; | |||
esac | |||
fi | |||
if test $shared -eq 1; then | |||
echo Checking for shared library support... | |||
# we must test in two steps (cc then ld), required at least on SunOS 4.x | |||
if test "`($CC -c $SFLAGS $test.c) 2>&1`" = "" && | |||
test "`($LDSHARED -o $test$shared_ext $test.o) 2>&1`" = ""; then | |||
CFLAGS="$SFLAGS" | |||
LIBS="$SHAREDLIB.$VER" | |||
echo Building shared library $SHAREDLIB.$VER with $CC. | |||
elif test -z "$old_cc" -a -z "$old_cflags"; then | |||
echo No shared library suppport. | |||
shared=0; | |||
else | |||
echo 'No shared library suppport; try without defining CC and CFLAGS' | |||
shared=0; | |||
fi | |||
fi | |||
if test $shared -eq 0; then | |||
LDSHARED="$CC" | |||
echo Building static library $LIBS version $VER with $CC. | |||
fi | |||
cat > $test.c <<EOF | |||
#include <unistd.h> | |||
int main() { return 0; } | |||
EOF | |||
if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then | |||
CFLAGS="$CFLAGS -DHAVE_UNISTD_H" | |||
echo "Checking for unistd.h... Yes." | |||
else | |||
echo "Checking for unistd.h... No." | |||
fi | |||
cat > $test.c <<EOF | |||
#include <errno.h> | |||
int main() { return 0; } | |||
EOF | |||
if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then | |||
echo "Checking for errno.h... Yes." | |||
CFLAGS="$CFLAGS -DHAVE_ERRNO_H" | |||
else | |||
echo "Checking for errno.h... No." | |||
fi | |||
cat > $test.c <<EOF | |||
#include <sys/types.h> | |||
#include <sys/mman.h> | |||
#include <sys/stat.h> | |||
caddr_t hello() { | |||
return mmap((caddr_t)0, (off_t)0, PROT_READ, MAP_SHARED, 0, (off_t)0); | |||
} | |||
EOF | |||
if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then | |||
CFLAGS="$CFLAGS -DHAVE_MMAP" | |||
echo Checking for mmap support... Yes. | |||
else | |||
echo Checking for mmap support... No. | |||
fi | |||
CPP=${CPP-"$CC -E"} | |||
case $CFLAGS in | |||
*ASMV*) | |||
if test "`nm $test.o | grep _hello`" = ""; then | |||
CPP="$CPP -DNO_UNDERLINE" | |||
echo Checking for underline in external names... No. | |||
else | |||
echo Checking for underline in external names... Yes. | |||
fi;; | |||
esac | |||
rm -f $test.[co] $test$shared_ext | |||
# udpate Makefile | |||
sed < Makefile.in " | |||
/^CC *=/s%=.*%=$CC% | |||
/^CFLAGS *=/s%=.*%=$CFLAGS% | |||
/^CPP *=/s%=.*%=$CPP% | |||
/^LDSHARED *=/s%=.*%=$LDSHARED% | |||
/^LIBS *=/s%=.*%=$LIBS% | |||
/^SHAREDLIB *=/s%=.*%=$SHAREDLIB% | |||
/^AR *=/s%=.*%=$AR% | |||
/^RANLIB *=/s%=.*%=$RANLIB% | |||
/^VER *=/s%=.*%=$VER% | |||
/^prefix *=/s%=.*%=$prefix% | |||
/^exec_prefix *=/s%=.*%=$exec_prefix% | |||
/^libdir *=/s%=.*%=$libdir% | |||
/^includedir *=/s%=.*%=$includedir% | |||
" > Makefile |
@@ -1,36 +0,0 @@ | |||
all:: | |||
@subdirs="$(SUBDIRS)"; for d in $$subdirs; do (cd $$d; $(MAKE) $@) || exit 1; done | |||
clean:: | |||
@subdirs="$(SUBDIRS)"; for d in $$subdirs; do (cd $$d; $(MAKE) $@) || exit 1; done | |||
clean:: | |||
rm -f $(program) $(library) *.o | |||
SHELL = @SHELL@ | |||
top_srcdir = @top_srcdir@ | |||
top_builddir = @top_builddir@ | |||
@SET_MAKE@ | |||
CC = @CC@ | |||
CFLAGS = @CFLAGS@ $(DIR_CFLAGS) | |||
CCLD = $(CC) | |||
CXX = @CXX@ | |||
CXXFLAGS = @CXXFLAGS@ | |||
CXXLD = $(CXX) | |||
CPPFLAGS = @CPPFLAGS@ | |||
DEFS = @DEFS@ | |||
ALL_CPPFLAGS = $(CPPFLAGS) $(DEFS) $(DIR_CPPFLAGS) | |||
LIBS = @LIBS@ | |||
LDFLAGS = @LDFLAGS@ | |||
RANLIB = @RANLIB@ | |||
AR = ar cq | |||
.SUFFIXES: | |||
.SUFFIXES: .cxx .c .o | |||
.c.o: | |||
$(CC) $(ALL_CPPFLAGS) $(CFLAGS) -o $@ -c $< | |||
.cxx.o: | |||
$(CXX) $(ALL_CPPFLAGS) $(CXXFLAGS) -o $@ -c $< |
@@ -1,3 +0,0 @@ | |||
#!/bin/sh | |||
rm `find ../common -name "*.d" -print` | |||
rm `find . -name "*.d" -print` |
@@ -1,2 +0,0 @@ | |||
COMMON = @top_srcdir@/../common | |||
TOP = @top_srcdir@ |
@@ -1,548 +0,0 @@ | |||
#! /bin/sh | |||
# Output a system dependent set of variables, describing how to set the | |||
# run time search path of shared libraries in an executable. | |||
# | |||
# Copyright 1996-2003 Free Software Foundation, Inc. | |||
# Taken from GNU libtool, 2001 | |||
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 | |||
# | |||
# This program is free software; you can redistribute it and/or modify | |||
# it under the terms of the GNU General Public License as published by | |||
# the Free Software Foundation; either version 2 of the License, or | |||
# (at your option) any later version. | |||
# | |||
# This program is distributed in the hope that it will be useful, but | |||
# WITHOUT ANY WARRANTY; without even the implied warranty of | |||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
# General Public License for more details. | |||
# | |||
# You should have received a copy of the GNU General Public License | |||
# along with this program; if not, write to the Free Software | |||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |||
# | |||
# As a special exception to the GNU General Public License, if you | |||
# distribute this file as part of a program that contains a | |||
# configuration script generated by Autoconf, you may include it under | |||
# the same distribution terms that you use for the rest of that program. | |||
# | |||
# The first argument passed to this file is the canonical host specification, | |||
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM | |||
# or | |||
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM | |||
# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld | |||
# should be set by the caller. | |||
# | |||
# The set of defined variables is at the end of this script. | |||
# Known limitations: | |||
# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer | |||
# than 256 bytes, otherwise the compiler driver will dump core. The only | |||
# known workaround is to choose shorter directory names for the build | |||
# directory and/or the installation directory. | |||
# All known linkers require a `.a' archive for static linking (except M$VC, | |||
# which needs '.lib'). | |||
libext=a | |||
shrext=.so | |||
host="$1" | |||
host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` | |||
host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` | |||
host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` | |||
# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. | |||
wl= | |||
if test "$GCC" = yes; then | |||
wl='-Wl,' | |||
else | |||
case "$host_os" in | |||
aix*) | |||
wl='-Wl,' | |||
;; | |||
mingw* | pw32* | os2*) | |||
;; | |||
hpux9* | hpux10* | hpux11*) | |||
wl='-Wl,' | |||
;; | |||
irix5* | irix6* | nonstopux*) | |||
wl='-Wl,' | |||
;; | |||
newsos6) | |||
;; | |||
linux*) | |||
case $CC in | |||
icc|ecc) | |||
wl='-Wl,' | |||
;; | |||
ccc) | |||
wl='-Wl,' | |||
;; | |||
esac | |||
;; | |||
osf3* | osf4* | osf5*) | |||
wl='-Wl,' | |||
;; | |||
sco3.2v5*) | |||
;; | |||
solaris*) | |||
wl='-Wl,' | |||
;; | |||
sunos4*) | |||
wl='-Qoption ld ' | |||
;; | |||
sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) | |||
wl='-Wl,' | |||
;; | |||
sysv4*MP*) | |||
;; | |||
uts4*) | |||
;; | |||
esac | |||
fi | |||
# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. | |||
hardcode_libdir_flag_spec= | |||
hardcode_libdir_separator= | |||
hardcode_direct=no | |||
hardcode_minus_L=no | |||
case "$host_os" in | |||
cygwin* | mingw* | pw32*) | |||
# FIXME: the MSVC++ port hasn't been tested in a loooong time | |||
# When not using gcc, we currently assume that we are using | |||
# Microsoft Visual C++. | |||
if test "$GCC" != yes; then | |||
with_gnu_ld=no | |||
fi | |||
;; | |||
openbsd*) | |||
with_gnu_ld=no | |||
;; | |||
esac | |||
ld_shlibs=yes | |||
if test "$with_gnu_ld" = yes; then | |||
case "$host_os" in | |||
aix3* | aix4* | aix5*) | |||
# On AIX/PPC, the GNU linker is very broken | |||
if test "$host_cpu" != ia64; then | |||
ld_shlibs=no | |||
fi | |||
;; | |||
amigaos*) | |||
hardcode_libdir_flag_spec='-L$libdir' | |||
hardcode_minus_L=yes | |||
# Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports | |||
# that the semantics of dynamic libraries on AmigaOS, at least up | |||
# to version 4, is to share data among multiple programs linked | |||
# with the same dynamic library. Since this doesn't match the | |||
# behavior of shared libraries on other platforms, we can use | |||
# them. | |||
ld_shlibs=no | |||
;; | |||
beos*) | |||
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then | |||
: | |||
else | |||
ld_shlibs=no | |||
fi | |||
;; | |||
cygwin* | mingw* | pw32*) | |||
# hardcode_libdir_flag_spec is actually meaningless, as there is | |||
# no search path for DLLs. | |||
hardcode_libdir_flag_spec='-L$libdir' | |||
if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then | |||
: | |||
else | |||
ld_shlibs=no | |||
fi | |||
;; | |||
netbsd*) | |||
;; | |||
solaris* | sysv5*) | |||
if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then | |||
ld_shlibs=no | |||
elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then | |||
: | |||
else | |||
ld_shlibs=no | |||
fi | |||
;; | |||
sunos4*) | |||
hardcode_direct=yes | |||
;; | |||
*) | |||
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then | |||
: | |||
else | |||
ld_shlibs=no | |||
fi | |||
;; | |||
esac | |||
if test "$ld_shlibs" = yes; then | |||
# Unlike libtool, we use -rpath here, not --rpath, since the documented | |||
# option of GNU ld is called -rpath, not --rpath. | |||
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' | |||
fi | |||
else | |||
case "$host_os" in | |||
aix3*) | |||
# Note: this linker hardcodes the directories in LIBPATH if there | |||
# are no directories specified by -L. | |||
hardcode_minus_L=yes | |||
if test "$GCC" = yes; then | |||
# Neither direct hardcoding nor static linking is supported with a | |||
# broken collect2. | |||
hardcode_direct=unsupported | |||
fi | |||
;; | |||
aix4* | aix5*) | |||
if test "$host_cpu" = ia64; then | |||
# On IA64, the linker does run time linking by default, so we don't | |||
# have to do anything special. | |||
aix_use_runtimelinking=no | |||
else | |||
aix_use_runtimelinking=no | |||
# Test if we are trying to use run time linking or normal | |||
# AIX style linking. If -brtl is somewhere in LDFLAGS, we | |||
# need to do runtime linking. | |||
case $host_os in aix4.[23]|aix4.[23].*|aix5*) | |||
for ld_flag in $LDFLAGS; do | |||
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then | |||
aix_use_runtimelinking=yes | |||
break | |||
fi | |||
done | |||
esac | |||
fi | |||
hardcode_direct=yes | |||
hardcode_libdir_separator=':' | |||
if test "$GCC" = yes; then | |||
case $host_os in aix4.[012]|aix4.[012].*) | |||
collect2name=`${CC} -print-prog-name=collect2` | |||
if test -f "$collect2name" && \ | |||
strings "$collect2name" | grep resolve_lib_name >/dev/null | |||
then | |||
# We have reworked collect2 | |||
hardcode_direct=yes | |||
else | |||
# We have old collect2 | |||
hardcode_direct=unsupported | |||
hardcode_minus_L=yes | |||
hardcode_libdir_flag_spec='-L$libdir' | |||
hardcode_libdir_separator= | |||
fi | |||
esac | |||
fi | |||
# Begin _LT_AC_SYS_LIBPATH_AIX. | |||
echo 'int main () { return 0; }' > conftest.c | |||
${CC} ${LDFLAGS} conftest.c -o conftest | |||
aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } | |||
}'` | |||
if test -z "$aix_libpath"; then | |||
aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } | |||
}'` | |||
fi | |||
if test -z "$aix_libpath"; then | |||
aix_libpath="/usr/lib:/lib" | |||
fi | |||
rm -f conftest.c conftest | |||
# End _LT_AC_SYS_LIBPATH_AIX. | |||
if test "$aix_use_runtimelinking" = yes; then | |||
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" | |||
else | |||
if test "$host_cpu" = ia64; then | |||
hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' | |||
else | |||
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" | |||
fi | |||
fi | |||
;; | |||
amigaos*) | |||
hardcode_libdir_flag_spec='-L$libdir' | |||
hardcode_minus_L=yes | |||
# see comment about different semantics on the GNU ld section | |||
ld_shlibs=no | |||
;; | |||
bsdi4*) | |||
;; | |||
cygwin* | mingw* | pw32*) | |||
# When not using gcc, we currently assume that we are using | |||
# Microsoft Visual C++. | |||
# hardcode_libdir_flag_spec is actually meaningless, as there is | |||
# no search path for DLLs. | |||
hardcode_libdir_flag_spec=' ' | |||
libext=lib | |||
;; | |||
darwin* | rhapsody*) | |||
if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then | |||
hardcode_direct=no | |||
fi | |||
;; | |||
dgux*) | |||
hardcode_libdir_flag_spec='-L$libdir' | |||
;; | |||
freebsd1*) | |||
ld_shlibs=no | |||
;; | |||
freebsd2.2*) | |||
hardcode_libdir_flag_spec='-R$libdir' | |||
hardcode_direct=yes | |||
;; | |||
freebsd2*) | |||
hardcode_direct=yes | |||
hardcode_minus_L=yes | |||
;; | |||
freebsd*) | |||
hardcode_libdir_flag_spec='-R$libdir' | |||
hardcode_direct=yes | |||
;; | |||
hpux9*) | |||
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' | |||
hardcode_libdir_separator=: | |||
hardcode_direct=yes | |||
# hardcode_minus_L: Not really in the search PATH, | |||
# but as the default location of the library. | |||
hardcode_minus_L=yes | |||
;; | |||
hpux10* | hpux11*) | |||
if test "$with_gnu_ld" = no; then | |||
case "$host_cpu" in | |||
hppa*64*) | |||
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' | |||
hardcode_libdir_separator=: | |||
hardcode_direct=no | |||
;; | |||
ia64*) | |||
hardcode_libdir_flag_spec='-L$libdir' | |||
hardcode_direct=no | |||
# hardcode_minus_L: Not really in the search PATH, | |||
# but as the default location of the library. | |||
hardcode_minus_L=yes | |||
;; | |||
*) | |||
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' | |||
hardcode_libdir_separator=: | |||
hardcode_direct=yes | |||
# hardcode_minus_L: Not really in the search PATH, | |||
# but as the default location of the library. | |||
hardcode_minus_L=yes | |||
;; | |||
esac | |||
fi | |||
;; | |||
irix5* | irix6* | nonstopux*) | |||
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' | |||
hardcode_libdir_separator=: | |||
;; | |||
netbsd*) | |||
hardcode_libdir_flag_spec='-R$libdir' | |||
hardcode_direct=yes | |||
;; | |||
newsos6) | |||
hardcode_direct=yes | |||
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' | |||
hardcode_libdir_separator=: | |||
;; | |||
openbsd*) | |||
hardcode_direct=yes | |||
if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then | |||
hardcode_libdir_flag_spec='${wl}-rpath,$libdir' | |||
else | |||
case "$host_os" in | |||
openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) | |||
hardcode_libdir_flag_spec='-R$libdir' | |||
;; | |||
*) | |||
hardcode_libdir_flag_spec='${wl}-rpath,$libdir' | |||
;; | |||
esac | |||
fi | |||
;; | |||
os2*) | |||
hardcode_libdir_flag_spec='-L$libdir' | |||
hardcode_minus_L=yes | |||
;; | |||
osf3*) | |||
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' | |||
hardcode_libdir_separator=: | |||
;; | |||
osf4* | osf5*) | |||
if test "$GCC" = yes; then | |||
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' | |||
else | |||
# Both cc and cxx compiler support -rpath directly | |||
hardcode_libdir_flag_spec='-rpath $libdir' | |||
fi | |||
hardcode_libdir_separator=: | |||
;; | |||
sco3.2v5*) | |||
;; | |||
solaris*) | |||
hardcode_libdir_flag_spec='-R$libdir' | |||
;; | |||
sunos4*) | |||
hardcode_libdir_flag_spec='-L$libdir' | |||
hardcode_direct=yes | |||
hardcode_minus_L=yes | |||
;; | |||
sysv4) | |||
case $host_vendor in | |||
sni) | |||
hardcode_direct=yes # is this really true??? | |||
;; | |||
siemens) | |||
hardcode_direct=no | |||
;; | |||
motorola) | |||
hardcode_direct=no #Motorola manual says yes, but my tests say they lie | |||
;; | |||
esac | |||
;; | |||
sysv4.3*) | |||
;; | |||
sysv4*MP*) | |||
if test -d /usr/nec; then | |||
ld_shlibs=yes | |||
fi | |||
;; | |||
sysv4.2uw2*) | |||
hardcode_direct=yes | |||
hardcode_minus_L=no | |||
;; | |||
sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) | |||
;; | |||
sysv5*) | |||
hardcode_libdir_flag_spec= | |||
;; | |||
uts4*) | |||
hardcode_libdir_flag_spec='-L$libdir' | |||
;; | |||
*) | |||
ld_shlibs=no | |||
;; | |||
esac | |||
fi | |||
# Check dynamic linker characteristics | |||
# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. | |||
libname_spec='lib$name' | |||
case "$host_os" in | |||
aix3*) | |||
;; | |||
aix4* | aix5*) | |||
;; | |||
amigaos*) | |||
;; | |||
beos*) | |||
;; | |||
bsdi4*) | |||
;; | |||
cygwin* | mingw* | pw32*) | |||
shrext=.dll | |||
;; | |||
darwin* | rhapsody*) | |||
shrext=.dylib | |||
;; | |||
dgux*) | |||
;; | |||
freebsd1*) | |||
;; | |||
freebsd*) | |||
;; | |||
gnu*) | |||
;; | |||
hpux9* | hpux10* | hpux11*) | |||
case "$host_cpu" in | |||
ia64*) | |||
shrext=.so | |||
;; | |||
hppa*64*) | |||
shrext=.sl | |||
;; | |||
*) | |||
shrext=.sl | |||
;; | |||
esac | |||
;; | |||
irix5* | irix6* | nonstopux*) | |||
case "$host_os" in | |||
irix5* | nonstopux*) | |||
libsuff= shlibsuff= | |||
;; | |||
*) | |||
case $LD in | |||
*-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; | |||
*-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; | |||
*-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; | |||
*) libsuff= shlibsuff= ;; | |||
esac | |||
;; | |||
esac | |||
;; | |||
linux*oldld* | linux*aout* | linux*coff*) | |||
;; | |||
linux*) | |||
;; | |||
netbsd*) | |||
;; | |||
newsos6) | |||
;; | |||
nto-qnx) | |||
;; | |||
openbsd*) | |||
;; | |||
os2*) | |||
libname_spec='$name' | |||
shrext=.dll | |||
;; | |||
osf3* | osf4* | osf5*) | |||
;; | |||
sco3.2v5*) | |||
;; | |||
solaris*) | |||
;; | |||
sunos4*) | |||
;; | |||
sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) | |||
;; | |||
sysv4*MP*) | |||
;; | |||
uts4*) | |||
;; | |||
esac | |||
sed_quote_subst='s/\(["`$\\]\)/\\\1/g' | |||
escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` | |||
shlibext=`echo "$shrext" | sed -e 's,^\.,,'` | |||
escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` | |||
sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF | |||
# How to pass a linker flag through the compiler. | |||
wl="$escaped_wl" | |||
# Static library suffix (normally "a"). | |||
libext="$libext" | |||
# Shared library suffix (normally "so"). | |||
shlibext="$shlibext" | |||
# Flag to hardcode \$libdir into a binary during linking. | |||
# This must work even if \$libdir does not exist. | |||
hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec" | |||
# Whether we need a single -rpath flag with a separated argument. | |||
hardcode_libdir_separator="$hardcode_libdir_separator" | |||
# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the | |||
# resulting binary. | |||
hardcode_direct="$hardcode_direct" | |||
# Set to yes if using the -LDIR flag during linking hardcodes DIR into the | |||
# resulting binary. | |||
hardcode_minus_L="$hardcode_minus_L" | |||
EOF |
@@ -1,76 +0,0 @@ | |||
# | |||
# C / C++ header dependency stuff | |||
# | |||
# Needs GNU make and vncmkdepend, a hacked version of makedepend | |||
.SUFFIXES: .d | |||
CMAKEDEPEND = vncmkdepend | |||
CXXMAKEDEPEND = vncmkdepend | |||
# | |||
# The recommended method of doing dependency analysis in the GNU make manual | |||
# turns out to be painfully slow. This method is similar but it's | |||
# substantially faster and retains the desirable property that the user doesn't | |||
# need to manually invoke a "make depend" step. | |||
# | |||
# As with the method described in the manual, we generate a separate dependency | |||
# (.d) file for each source file. The .d file records the header files that | |||
# each C or C++ source file includes. Any source file recorded in SRCS or | |||
# CXXSRCS will cause us to try and include the corresponding .d file and GNU | |||
# make then treats each .d file as a target to be remade. | |||
# | |||
# Unlike the manual's method, the rule we provide for making the .d file is | |||
# actually a fake. All it does is record in a temporary file that the .d file | |||
# needs to be remade. But as well as all the .d files, we also try to include | |||
# a file called "depend.phony". This file never exists, but it causes GNU make | |||
# to try and make the target "depend.phony". The rule for depend.phony then | |||
# looks at the temporary files generated by the .d rules and then invokes the | |||
# "omkdepend" program on all of the source files in one go. | |||
# | |||
# | |||
# We use simple assignment here to remove any of the depend.tmp files | |||
# at the time make parses this bit. | |||
# | |||
dummyvariable := $(shell $(RM) cdepend.tmp cxxdepend.tmp) | |||
# | |||
# Now the "fake" rules for generating .d files. | |||
# | |||
%.d: %.c | |||
@echo "$<" >> cdepend.tmp | |||
%.d: %.cxx | |||
@echo "$<" >> cxxdepend.tmp | |||
# | |||
# The depend.phony rule which actually runs omkdepend. | |||
# | |||
depend.phony: | |||
@if [ -f cdepend.tmp ]; then \ | |||
echo $(CMAKEDEPEND) $(ALL_CPPFLAGS) `cat cdepend.tmp`; \ | |||
$(CMAKEDEPEND) $(ALL_CPPFLAGS) `cat cdepend.tmp`; \ | |||
rm -f cdepend.tmp; \ | |||
fi; \ | |||
if [ -f cxxdepend.tmp ]; then \ | |||
echo $(CXXMAKEDEPEND) $(ALL_CPPFLAGS) `cat cxxdepend.tmp`; \ | |||
$(CXXMAKEDEPEND) $(ALL_CPPFLAGS) `cat cxxdepend.tmp`; \ | |||
rm -f cxxdepend.tmp; \ | |||
fi | |||
# | |||
# Now include the .d files and the "depend.phony" file which never exists. | |||
# For some reason GNU make evaluates the targets in reverse order, so we need | |||
# to include depend.phony first. The "-" tells make not to complain that it | |||
# can't find the file. | |||
# | |||
-include depend.phony | |||
ifdef SRCS | |||
-include $(patsubst %.c,%.d,$(patsubst %.cxx,%.d,$(SRCS))) | |||
endif |
@@ -1,322 +0,0 @@ | |||
#!/bin/sh | |||
# install - install a program, script, or datafile | |||
scriptversion=2004-09-10.20 | |||
# This originates from X11R5 (mit/util/scripts/install.sh), which was | |||
# later released in X11R6 (xc/config/util/install.sh) with the | |||
# following copyright and license. | |||
# | |||
# Copyright (C) 1994 X Consortium | |||
# | |||
# Permission is hereby granted, free of charge, to any person obtaining a copy | |||
# of this software and associated documentation files (the "Software"), to | |||
# deal in the Software without restriction, including without limitation the | |||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | |||
# sell copies of the Software, and to permit persons to whom the Software is | |||
# furnished to do so, subject to the following conditions: | |||
# | |||
# The above copyright notice and this permission notice shall be included in | |||
# all copies or substantial portions of the Software. | |||
# | |||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | |||
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- | |||
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
# | |||
# Except as contained in this notice, the name of the X Consortium shall not | |||
# be used in advertising or otherwise to promote the sale, use or other deal- | |||
# ings in this Software without prior written authorization from the X Consor- | |||
# tium. | |||
# | |||
# | |||
# FSF changes to this file are in the public domain. | |||
# | |||
# Calling this script install-sh is preferred over install.sh, to prevent | |||
# `make' implicit rules from creating a file called install from it | |||
# when there is no Makefile. | |||
# | |||
# This script is compatible with the BSD install script, but was written | |||
# from scratch. It can only install one file at a time, a restriction | |||
# shared with many OS's install programs. | |||
# set DOITPROG to echo to test this script | |||
# Don't use :- since 4.3BSD and earlier shells don't like it. | |||
doit="${DOITPROG-}" | |||
# put in absolute paths if you don't have them in your path; or use env. vars. | |||
mvprog="${MVPROG-mv}" | |||
cpprog="${CPPROG-cp}" | |||
chmodprog="${CHMODPROG-chmod}" | |||
chownprog="${CHOWNPROG-chown}" | |||
chgrpprog="${CHGRPPROG-chgrp}" | |||
stripprog="${STRIPPROG-strip}" | |||
rmprog="${RMPROG-rm}" | |||
mkdirprog="${MKDIRPROG-mkdir}" | |||
chmodcmd="$chmodprog 0755" | |||
chowncmd= | |||
chgrpcmd= | |||
stripcmd= | |||
rmcmd="$rmprog -f" | |||
mvcmd="$mvprog" | |||
src= | |||
dst= | |||
dir_arg= | |||
dstarg= | |||
no_target_directory= | |||
usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE | |||
or: $0 [OPTION]... SRCFILES... DIRECTORY | |||
or: $0 [OPTION]... -t DIRECTORY SRCFILES... | |||
or: $0 [OPTION]... -d DIRECTORIES... | |||
In the 1st form, copy SRCFILE to DSTFILE. | |||
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. | |||
In the 4th, create DIRECTORIES. | |||
Options: | |||
-c (ignored) | |||
-d create directories instead of installing files. | |||
-g GROUP $chgrpprog installed files to GROUP. | |||
-m MODE $chmodprog installed files to MODE. | |||
-o USER $chownprog installed files to USER. | |||
-s $stripprog installed files. | |||
-t DIRECTORY install into DIRECTORY. | |||
-T report an error if DSTFILE is a directory. | |||
--help display this help and exit. | |||
--version display version info and exit. | |||
Environment variables override the default commands: | |||
CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG | |||
" | |||
while test -n "$1"; do | |||
case $1 in | |||
-c) shift | |||
continue;; | |||
-d) dir_arg=true | |||
shift | |||
continue;; | |||
-g) chgrpcmd="$chgrpprog $2" | |||
shift | |||
shift | |||
continue;; | |||
--help) echo "$usage"; exit 0;; | |||
-m) chmodcmd="$chmodprog $2" | |||
shift | |||
shift | |||
continue;; | |||
-o) chowncmd="$chownprog $2" | |||
shift | |||
shift | |||
continue;; | |||
-s) stripcmd=$stripprog | |||
shift | |||
continue;; | |||
-t) dstarg=$2 | |||
shift | |||
shift | |||
continue;; | |||
-T) no_target_directory=true | |||
shift | |||
continue;; | |||
--version) echo "$0 $scriptversion"; exit 0;; | |||
*) # When -d is used, all remaining arguments are directories to create. | |||
# When -t is used, the destination is already specified. | |||
test -n "$dir_arg$dstarg" && break | |||
# Otherwise, the last argument is the destination. Remove it from $@. | |||
for arg | |||
do | |||
if test -n "$dstarg"; then | |||
# $@ is not empty: it contains at least $arg. | |||
set fnord "$@" "$dstarg" | |||
shift # fnord | |||
fi | |||
shift # arg | |||
dstarg=$arg | |||
done | |||
break;; | |||
esac | |||
done | |||
if test -z "$1"; then | |||
if test -z "$dir_arg"; then | |||
echo "$0: no input file specified." >&2 | |||
exit 1 | |||
fi | |||
# It's OK to call `install-sh -d' without argument. | |||
# This can happen when creating conditional directories. | |||
exit 0 | |||
fi | |||
for src | |||
do | |||
# Protect names starting with `-'. | |||
case $src in | |||
-*) src=./$src ;; | |||
esac | |||
if test -n "$dir_arg"; then | |||
dst=$src | |||
src= | |||
if test -d "$dst"; then | |||
mkdircmd=: | |||
chmodcmd= | |||
else | |||
mkdircmd=$mkdirprog | |||
fi | |||
else | |||
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command | |||
# might cause directories to be created, which would be especially bad | |||
# if $src (and thus $dsttmp) contains '*'. | |||
if test ! -f "$src" && test ! -d "$src"; then | |||
echo "$0: $src does not exist." >&2 | |||
exit 1 | |||
fi | |||
if test -z "$dstarg"; then | |||
echo "$0: no destination specified." >&2 | |||
exit 1 | |||
fi | |||
dst=$dstarg | |||
# Protect names starting with `-'. | |||
case $dst in | |||
-*) dst=./$dst ;; | |||
esac | |||
# If destination is a directory, append the input filename; won't work | |||
# if double slashes aren't ignored. | |||
if test -d "$dst"; then | |||
if test -n "$no_target_directory"; then | |||
echo "$0: $dstarg: Is a directory" >&2 | |||
exit 1 | |||
fi | |||
dst=$dst/`basename "$src"` | |||
fi | |||
fi | |||
# This sed command emulates the dirname command. | |||
dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` | |||
# Make sure that the destination directory exists. | |||
# Skip lots of stat calls in the usual case. | |||
if test ! -d "$dstdir"; then | |||
defaultIFS=' | |||
' | |||
IFS="${IFS-$defaultIFS}" | |||
oIFS=$IFS | |||
# Some sh's can't handle IFS=/ for some reason. | |||
IFS='%' | |||
set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` | |||
IFS=$oIFS | |||
pathcomp= | |||
while test $# -ne 0 ; do | |||
pathcomp=$pathcomp$1 | |||
shift | |||
if test ! -d "$pathcomp"; then | |||
$mkdirprog "$pathcomp" | |||
# mkdir can fail with a `File exist' error in case several | |||
# install-sh are creating the directory concurrently. This | |||
# is OK. | |||
test -d "$pathcomp" || exit | |||
fi | |||
pathcomp=$pathcomp/ | |||
done | |||
fi | |||
if test -n "$dir_arg"; then | |||
$doit $mkdircmd "$dst" \ | |||
&& { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ | |||
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ | |||
&& { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ | |||
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } | |||
else | |||
dstfile=`basename "$dst"` | |||
# Make a couple of temp file names in the proper directory. | |||
dsttmp=$dstdir/_inst.$$_ | |||
rmtmp=$dstdir/_rm.$$_ | |||
# Trap to clean up those temp files at exit. | |||
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 | |||
trap '(exit $?); exit' 1 2 13 15 | |||
# Copy the file name to the temp name. | |||
$doit $cpprog "$src" "$dsttmp" && | |||
# and set any options; do chmod last to preserve setuid bits. | |||
# | |||
# If any of these fail, we abort the whole thing. If we want to | |||
# ignore errors from any of these, just make sure not to ignore | |||
# errors from the above "$doit $cpprog $src $dsttmp" command. | |||
# | |||
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ | |||
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ | |||
&& { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ | |||
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && | |||
# Now rename the file to the real destination. | |||
{ $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ | |||
|| { | |||
# The rename failed, perhaps because mv can't rename something else | |||
# to itself, or perhaps because mv is so ancient that it does not | |||
# support -f. | |||
# Now remove or move aside any old file at destination location. | |||
# We try this two ways since rm can't unlink itself on some | |||
# systems and the destination file might be busy for other | |||
# reasons. In this case, the final cleanup might fail but the new | |||
# file should still install successfully. | |||
{ | |||
if test -f "$dstdir/$dstfile"; then | |||
$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ | |||
|| $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ | |||
|| { | |||
echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 | |||
(exit 1); exit | |||
} | |||
else | |||
: | |||
fi | |||
} && | |||
# Now rename the file to the real destination. | |||
$doit $mvcmd "$dsttmp" "$dstdir/$dstfile" | |||
} | |||
} | |||
fi || { (exit 1); exit; } | |||
done | |||
# The final little trick to "correctly" pass the exit status to the exit trap. | |||
{ | |||
(exit 0); exit | |||
} | |||
# Local variables: | |||
# eval: (add-hook 'write-file-hooks 'time-stamp) | |||
# time-stamp-start: "scriptversion=" | |||
# time-stamp-format: "%:y-%02m-%02d.%02H" | |||
# time-stamp-end: "$" | |||
# End: |
@@ -1,97 +0,0 @@ | |||
#!/bin/sh | |||
# | |||
# Copyright (C) 2002-2005 RealVNC Ltd. | |||
# | |||
# This is free software; you can redistribute it and/or modify | |||
# it under the terms of the GNU General Public License as published by | |||
# the Free Software Foundation; either version 2 of the License, or | |||
# (at your option) any later version. | |||
# | |||
# This software is distributed in the hope that it will be useful, | |||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
# GNU General Public License for more details. | |||
# | |||
# You should have received a copy of the GNU General Public License | |||
# along with this software; if not, write to the Free Software | |||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, | |||
# USA. | |||
# | |||
# | |||
# vncinstall - copy the VNC programs to an installation directory. | |||
# Also tries to install the manual pages somewhere sensible. | |||
# | |||
if [ $# -lt 1 -o $# -gt 3 -o ! -d "$1" ]; then | |||
echo "usage: $0 <installation-directory> [<man-page-directory>] [<module-directory>]" | |||
echo "e.g. $0 /usr/local/bin" | |||
exit 1 | |||
fi | |||
dst=$1 | |||
shift | |||
if [ $# -gt 0 ]; then | |||
mandst="$1/man1" | |||
shift | |||
if [ $# -gt 0 ]; then | |||
moduledst=$1 | |||
shift | |||
else | |||
moduledst=/usr/X11R6/lib/modules/extensions | |||
fi | |||
else | |||
if [ "`basename $dst`" = bin ]; then | |||
mandst="`dirname $dst`/man/man1" | |||
if [ ! -d "$mandst" -a "$dst" = /usr/bin ]; then | |||
mandst=/usr/share/man/man1 | |||
fi | |||
fi | |||
fi | |||
if [ "$mandst" != "" ]; then | |||
if [ ! -d "$mandst" -o ! -w "$mandst" ]; then | |||
echo "Can't install manual pages to $mandst" | |||
mandst="" | |||
fi | |||
fi | |||
for f in xc/programs/Xserver/Xvnc vncviewer/vncviewer vncpasswd/vncpasswd \ | |||
vncconfig/vncconfig vncserver x0vncserver/x0vncserver; do | |||
if [ ! -f $f ]; then | |||
echo "Couldn't find $f" | |||
else | |||
if cmp -s $f $dst/`basename $f`; then | |||
echo "`basename $f` hasn't changed" | |||
else | |||
echo "Copying $f to $dst" | |||
cp -pf $f $dst | |||
chmod 0555 $dst/`basename $f` | |||
fi | |||
if [ -f $f.man ]; then | |||
if [ "$mandst" != "" -a -d "$mandst" ]; then | |||
if cmp -s $f.man $mandst/`basename $f.1`; then | |||
echo "`basename $f.man` hasn't changed" | |||
else | |||
echo "Copying $f.man to $mandst/`basename $f.1`" | |||
cp -pf $f.man $mandst/`basename $f.1` | |||
chmod 0444 $mandst/`basename $f.1` | |||
fi | |||
fi | |||
fi | |||
fi | |||
done | |||
vncModule=xc/programs/Xserver/vnc/module/vnc.so | |||
if [ -f "$vncModule" -a -d "$moduledst" ]; then | |||
if cmp -s $vncModule $moduledst/`basename $vncModule`; then | |||
echo "`basename $vncModule` hasn't changed" | |||
else | |||
echo "Copying $vncModule to $moduledst" | |||
cp -pf $vncModule $moduledst | |||
chmod 0555 $moduledst/`basename $vncModule` | |||
fi | |||
fi |
@@ -1,4 +0,0 @@ | |||
SRCS = include.c main.c parse.c pr.c cppsetup.c ifparser.c | |||
OBJS = $(SRCS:.c=.o) | |||
vncmkdepend: $(OBJS) | |||
$(CC) $^ -o $@ |
@@ -1,39 +0,0 @@ | |||
vncmkdepend | |||
=========== | |||
This code is taken from the X11R6 makedepend sources. All I have done is: | |||
* Remove all predefined symbols, include directories and other | |||
platform-specific behaviour. Its behaviour should be the same on all | |||
platforms. All symbols and include directories must be explicitly given on | |||
the command line with -D and -I flags. | |||
* Fix processing of numbers in #if expressions. | |||
* Fix processing of -D flag. | |||
* Fix C++ comment handling. | |||
* Improve #error warnings. | |||
* Change the output so that processing <name>.<suffix> produces <name>.d | |||
The copyright on the code is: | |||
Copyright (c) 1993, 1994 X Consortium | |||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||
of this software and associated documentation files (the "Software"), to deal | |||
in the Software without restriction, including without limitation the rights | |||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
copies of the Software, and to permit persons to whom the Software is | |||
furnished to do so, subject to the following conditions: | |||
The above copyright notice and this permission notice shall be included in | |||
all copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | |||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
Except as contained in this notice, the name of the X Consortium shall not be | |||
used in advertising or otherwise to promote the sale, use or other dealings | |||
in this Software without prior written authorization from the X Consortium. |
@@ -1,242 +0,0 @@ | |||
/* $XConsortium: cppsetup.c,v 1.13 94/04/17 20:10:32 gildea Exp $ */ | |||
/* | |||
Copyright (c) 1993, 1994 X Consortium | |||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||
of this software and associated documentation files (the "Software"), to deal | |||
in the Software without restriction, including without limitation the rights | |||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
copies of the Software, and to permit persons to whom the Software is | |||
furnished to do so, subject to the following conditions: | |||
The above copyright notice and this permission notice shall be included in | |||
all copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | |||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
Except as contained in this notice, the name of the X Consortium shall not be | |||
used in advertising or otherwise to promote the sale, use or other dealings | |||
in this Software without prior written authorization from the X Consortium. | |||
*/ | |||
#include "def.h" | |||
#ifdef CPP | |||
/* | |||
* This file is strictly for the sake of cpy.y and yylex.c (if | |||
* you indeed have the source for cpp). | |||
*/ | |||
#define IB 1 | |||
#define SB 2 | |||
#define NB 4 | |||
#define CB 8 | |||
#define QB 16 | |||
#define WB 32 | |||
#define SALT '#' | |||
#if pdp11 | vax | ns16000 | mc68000 | ibm032 | |||
#define COFF 128 | |||
#else | |||
#define COFF 0 | |||
#endif | |||
/* | |||
* These variables used by cpy.y and yylex.c | |||
*/ | |||
extern char *outp, *inp, *newp, *pend; | |||
extern char *ptrtab; | |||
extern char fastab[]; | |||
extern char slotab[]; | |||
/* | |||
* cppsetup | |||
*/ | |||
struct filepointer *currentfile; | |||
struct inclist *currentinc; | |||
cppsetup(line, filep, inc) | |||
register char *line; | |||
register struct filepointer *filep; | |||
register struct inclist *inc; | |||
{ | |||
register char *p, savec; | |||
static boolean setupdone = FALSE; | |||
boolean value; | |||
if (!setupdone) { | |||
cpp_varsetup(); | |||
setupdone = TRUE; | |||
} | |||
currentfile = filep; | |||
currentinc = inc; | |||
inp = newp = line; | |||
for (p=newp; *p; p++) | |||
; | |||
/* | |||
* put a newline back on the end, and set up pend, etc. | |||
*/ | |||
*p++ = '\n'; | |||
savec = *p; | |||
*p = '\0'; | |||
pend = p; | |||
ptrtab = slotab+COFF; | |||
*--inp = SALT; | |||
outp=inp; | |||
value = yyparse(); | |||
*p = savec; | |||
return(value); | |||
} | |||
struct symtab *lookup(symbol) | |||
char *symbol; | |||
{ | |||
static struct symtab undefined; | |||
struct symtab *sp; | |||
sp = isdefined(symbol, currentinc, NULL); | |||
if (sp == NULL) { | |||
sp = &undefined; | |||
sp->s_value = NULL; | |||
} | |||
return (sp); | |||
} | |||
pperror(tag, x0,x1,x2,x3,x4) | |||
int tag,x0,x1,x2,x3,x4; | |||
{ | |||
warning("\"%s\", line %d: ", currentinc->i_file, currentfile->f_line); | |||
warning(x0,x1,x2,x3,x4); | |||
} | |||
yyerror(s) | |||
register char *s; | |||
{ | |||
fatalerr("Fatal error: %s\n", s); | |||
} | |||
#else /* not CPP */ | |||
#include "ifparser.h" | |||
struct _parse_data { | |||
struct filepointer *filep; | |||
struct inclist *inc; | |||
const char *line; | |||
}; | |||
static const char * | |||
_my_if_errors (ip, cp, expecting) | |||
IfParser *ip; | |||
const char *cp; | |||
const char *expecting; | |||
{ | |||
struct _parse_data *pd = (struct _parse_data *) ip->data; | |||
int lineno = pd->filep->f_line; | |||
char *filename = pd->inc->i_file; | |||
char prefix[300]; | |||
int prefixlen; | |||
int i; | |||
sprintf (prefix, "\"%s\":%d", filename, lineno); | |||
prefixlen = strlen(prefix); | |||
fprintf (stderr, "%s: %s", prefix, pd->line); | |||
i = cp - pd->line; | |||
if (i > 0 && pd->line[i-1] != '\n') { | |||
putc ('\n', stderr); | |||
} | |||
for (i += prefixlen + 3; i > 0; i--) { | |||
putc (' ', stderr); | |||
} | |||
fprintf (stderr, "^--- expecting %s\n", expecting); | |||
return NULL; | |||
} | |||
#define MAXNAMELEN 256 | |||
static struct symtab * | |||
_lookup_variable (ip, var, len) | |||
IfParser *ip; | |||
const char *var; | |||
int len; | |||
{ | |||
char tmpbuf[MAXNAMELEN + 1]; | |||
struct _parse_data *pd = (struct _parse_data *) ip->data; | |||
if (len > MAXNAMELEN) | |||
return 0; | |||
strncpy (tmpbuf, var, len); | |||
tmpbuf[len] = '\0'; | |||
return isdefined (tmpbuf, pd->inc, NULL); | |||
} | |||
static int | |||
_my_eval_defined (ip, var, len) | |||
IfParser *ip; | |||
const char *var; | |||
int len; | |||
{ | |||
if (_lookup_variable (ip, var, len)) | |||
return 1; | |||
else | |||
return 0; | |||
} | |||
#define isvarfirstletter(ccc) (isalpha(ccc) || (ccc) == '_') | |||
static int | |||
_my_eval_variable (ip, var, len) | |||
IfParser *ip; | |||
const char *var; | |||
int len; | |||
{ | |||
struct symtab *s; | |||
s = _lookup_variable (ip, var, len); | |||
if (!s) | |||
return 0; | |||
do { | |||
var = s->s_value; | |||
if (!isvarfirstletter(*var)) | |||
break; | |||
s = _lookup_variable (ip, var, strlen(var)); | |||
} while (s); | |||
return atoi(var); | |||
} | |||
cppsetup(line, filep, inc) | |||
register char *line; | |||
register struct filepointer *filep; | |||
register struct inclist *inc; | |||
{ | |||
IfParser ip; | |||
struct _parse_data pd; | |||
int val = 0; | |||
pd.filep = filep; | |||
pd.inc = inc; | |||
pd.line = line; | |||
ip.funcs.handle_error = _my_if_errors; | |||
ip.funcs.eval_defined = _my_eval_defined; | |||
ip.funcs.eval_variable = _my_eval_variable; | |||
ip.data = (char *) &pd; | |||
(void) ParseIfExpression (&ip, line, &val); | |||
if (val) | |||
return IF; | |||
else | |||
return IFFALSE; | |||
} | |||
#endif /* CPP */ | |||
@@ -1,140 +0,0 @@ | |||
/* $XConsortium: def.h,v 1.25 94/04/17 20:10:33 gildea Exp $ */ | |||
/* | |||
Copyright (c) 1993, 1994 X Consortium | |||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||
of this software and associated documentation files (the "Software"), to deal | |||
in the Software without restriction, including without limitation the rights | |||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
copies of the Software, and to permit persons to whom the Software is | |||
furnished to do so, subject to the following conditions: | |||
The above copyright notice and this permission notice shall be included in | |||
all copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | |||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
Except as contained in this notice, the name of the X Consortium shall not be | |||
used in advertising or otherwise to promote the sale, use or other dealings | |||
in this Software without prior written authorization from the X Consortium. | |||
*/ | |||
#include <stdio.h> | |||
#include <ctype.h> | |||
#ifndef X_NOT_POSIX | |||
#ifndef _POSIX_SOURCE | |||
#define _POSIX_SOURCE | |||
#endif | |||
#endif | |||
#include <sys/types.h> | |||
#include <fcntl.h> | |||
#include <sys/stat.h> | |||
#define MAXDEFINES 512 | |||
#define MAXFILES 512 | |||
#define MAXDIRS 64 | |||
#define SYMTABINC 10 /* must be > 1 for define() to work right */ | |||
#define TRUE 1 | |||
#define FALSE 0 | |||
/* the following must match the directives table in main.c */ | |||
#define IF 0 | |||
#define IFDEF 1 | |||
#define IFNDEF 2 | |||
#define ELSE 3 | |||
#define ENDIF 4 | |||
#define DEFINE 5 | |||
#define UNDEF 6 | |||
#define INCLUDE 7 | |||
#define LINE 8 | |||
#define PRAGMA 9 | |||
#define ERROR 10 | |||
#define IDENT 11 | |||
#define SCCS 12 | |||
#define ELIF 13 | |||
#define EJECT 14 | |||
#define IFFALSE 15 /* pseudo value --- never matched */ | |||
#define ELIFFALSE 16 /* pseudo value --- never matched */ | |||
#define INCLUDEDOT 17 /* pseudo value --- never matched */ | |||
#define IFGUESSFALSE 18 /* pseudo value --- never matched */ | |||
#define ELIFGUESSFALSE 19 /* pseudo value --- never matched */ | |||
#ifdef DEBUG | |||
extern int _debugmask; | |||
/* | |||
* debug levels are: | |||
* | |||
* 0 show ifn*(def)*,endif | |||
* 1 trace defined/!defined | |||
* 2 show #include | |||
* 3 show #include SYMBOL | |||
* 4-6 unused | |||
*/ | |||
#define debug(level,arg) { if (_debugmask & (1 << level)) warning arg; } | |||
#else | |||
#define debug(level,arg) /**/ | |||
#endif /* DEBUG */ | |||
typedef unsigned char boolean; | |||
struct symtab { | |||
char *s_name; | |||
char *s_value; | |||
}; | |||
struct inclist { | |||
char *i_incstring; /* string from #include line */ | |||
char *i_file; /* path name of the include file */ | |||
struct inclist **i_list; /* list of files it itself includes */ | |||
int i_listlen; /* length of i_list */ | |||
struct symtab *i_defs; /* symbol table for this file */ | |||
int i_ndefs; /* current # defines */ | |||
int i_deflen; /* amount of space in table */ | |||
boolean i_defchecked; /* whether defines have been checked */ | |||
boolean i_notified; /* whether we have revealed includes */ | |||
boolean i_marked; /* whether it's in the makefile */ | |||
boolean i_searched; /* whether we have read this */ | |||
boolean i_included_sym; /* whether #include SYMBOL was found */ | |||
/* Can't use i_list if TRUE */ | |||
}; | |||
struct filepointer { | |||
char *f_p; | |||
char *f_base; | |||
char *f_end; | |||
long f_len; | |||
long f_line; | |||
}; | |||
#ifndef X_NOT_STDC_ENV | |||
#include <stdlib.h> | |||
#if defined(macII) && !defined(__STDC__) /* stdlib.h fails to define these */ | |||
char *malloc(), *realloc(); | |||
#endif /* macII */ | |||
#else | |||
char *malloc(); | |||
char *realloc(); | |||
#endif | |||
char *copy(); | |||
char *base_name(); | |||
char *getline(); | |||
struct symtab *slookup(); | |||
struct symtab *isdefined(); | |||
struct symtab *fdefined(); | |||
struct filepointer *getfile(); | |||
struct inclist *newinclude(); | |||
struct inclist *inc_path(); | |||
#if NeedVarargsPrototypes | |||
extern fatalerr(char *, ...); | |||
extern warning(char *, ...); | |||
extern warning1(char *, ...); | |||
#endif |
@@ -1,445 +0,0 @@ | |||
/* | |||
* $XConsortium: ifparser.c,v 1.7 94/01/18 21:30:50 rws Exp $ | |||
* | |||
* Copyright 1992 Network Computing Devices, Inc. | |||
* | |||
* Permission to use, copy, modify, and distribute this software and its | |||
* documentation for any purpose and without fee is hereby granted, provided | |||
* that the above copyright notice appear in all copies and that both that | |||
* copyright notice and this permission notice appear in supporting | |||
* documentation, and that the name of Network Computing Devices may not be | |||
* used in advertising or publicity pertaining to distribution of the software | |||
* without specific, written prior permission. Network Computing Devices makes | |||
* no representations about the suitability of this software for any purpose. | |||
* It is provided ``as is'' without express or implied warranty. | |||
* | |||
* NETWORK COMPUTING DEVICES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS | |||
* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, | |||
* IN NO EVENT SHALL NETWORK COMPUTING DEVICES BE LIABLE FOR ANY SPECIAL, | |||
* INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM | |||
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE | |||
* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR | |||
* PERFORMANCE OF THIS SOFTWARE. | |||
* | |||
* Author: Jim Fulton | |||
* Network Computing Devices, Inc. | |||
* | |||
* Simple if statement processor | |||
* | |||
* This module can be used to evaluate string representations of C language | |||
* if constructs. It accepts the following grammar: | |||
* | |||
* EXPRESSION := VALUE | |||
* | VALUE BINOP EXPRESSION | |||
* | |||
* VALUE := '(' EXPRESSION ')' | |||
* | '!' VALUE | |||
* | '-' VALUE | |||
* | 'defined' '(' variable ')' | |||
* | 'defined' variable | |||
* | # variable '(' variable-list ')' | |||
* | variable | |||
* | number | |||
* | |||
* BINOP := '*' | '/' | '%' | |||
* | '+' | '-' | |||
* | '<<' | '>>' | |||
* | '<' | '>' | '<=' | '>=' | |||
* | '==' | '!=' | |||
* | '&' | '|' | |||
* | '&&' | '||' | |||
* | |||
* The normal C order of precidence is supported. | |||
* | |||
* | |||
* External Entry Points: | |||
* | |||
* ParseIfExpression parse a string for #if | |||
*/ | |||
#include "ifparser.h" | |||
#include <ctype.h> | |||
/**************************************************************************** | |||
Internal Macros and Utilities for Parser | |||
****************************************************************************/ | |||
#define DO(val) if (!(val)) return NULL | |||
#define CALLFUNC(ggg,fff) (*((ggg)->funcs.fff)) | |||
#define SKIPSPACE(ccc) while (isspace(*ccc)) ccc++ | |||
#define isvarfirstletter(ccc) (isalpha(ccc) || (ccc) == '_') | |||
static const char * | |||
parse_variable (g, cp, varp) | |||
IfParser *g; | |||
const char *cp; | |||
const char **varp; | |||
{ | |||
SKIPSPACE (cp); | |||
if (!isvarfirstletter (*cp)) | |||
return CALLFUNC(g, handle_error) (g, cp, "variable name"); | |||
*varp = cp; | |||
/* EMPTY */ | |||
for (cp++; isalnum(*cp) || *cp == '_'; cp++) ; | |||
return cp; | |||
} | |||
static const char * | |||
parse_number (g, cp, valp) | |||
IfParser *g; | |||
const char *cp; | |||
int *valp; | |||
{ | |||
SKIPSPACE (cp); | |||
if (!isdigit(*cp)) | |||
return CALLFUNC(g, handle_error) (g, cp, "number"); | |||
*valp = strtol(cp, &cp, 0); | |||
return cp; | |||
} | |||
static const char * | |||
parse_value (g, cp, valp) | |||
IfParser *g; | |||
const char *cp; | |||
int *valp; | |||
{ | |||
const char *var; | |||
*valp = 0; | |||
SKIPSPACE (cp); | |||
if (!*cp) | |||
return cp; | |||
switch (*cp) { | |||
case '(': | |||
DO (cp = ParseIfExpression (g, cp + 1, valp)); | |||
SKIPSPACE (cp); | |||
if (*cp != ')') | |||
return CALLFUNC(g, handle_error) (g, cp, ")"); | |||
return cp + 1; /* skip the right paren */ | |||
case '!': | |||
DO (cp = parse_value (g, cp + 1, valp)); | |||
*valp = !(*valp); | |||
return cp; | |||
case '-': | |||
DO (cp = parse_value (g, cp + 1, valp)); | |||
*valp = -(*valp); | |||
return cp; | |||
case '#': | |||
DO (cp = parse_variable (g, cp + 1, &var)); | |||
SKIPSPACE (cp); | |||
if (*cp != '(') | |||
return CALLFUNC(g, handle_error) (g, cp, "("); | |||
do { | |||
DO (cp = parse_variable (g, cp + 1, &var)); | |||
SKIPSPACE (cp); | |||
} while (*cp && *cp != ')'); | |||
if (*cp != ')') | |||
return CALLFUNC(g, handle_error) (g, cp, ")"); | |||
*valp = 1; /* XXX */ | |||
return cp + 1; | |||
case 'd': | |||
if (strncmp (cp, "defined", 7) == 0 && !isalnum(cp[7])) { | |||
int paren = 0; | |||
cp += 7; | |||
SKIPSPACE (cp); | |||
if (*cp == '(') { | |||
paren = 1; | |||
cp++; | |||
} | |||
DO (cp = parse_variable (g, cp, &var)); | |||
SKIPSPACE (cp); | |||
if (paren && *cp != ')') | |||
return CALLFUNC(g, handle_error) (g, cp, ")"); | |||
*valp = (*(g->funcs.eval_defined)) (g, var, cp - var); | |||
return cp + paren; /* skip the right paren */ | |||
} | |||
/* fall out */ | |||
} | |||
if (isdigit(*cp)) { | |||
DO (cp = parse_number (g, cp, valp)); | |||
} else if (!isvarfirstletter(*cp)) | |||
return CALLFUNC(g, handle_error) (g, cp, "variable or number"); | |||
else { | |||
DO (cp = parse_variable (g, cp, &var)); | |||
*valp = (*(g->funcs.eval_variable)) (g, var, cp - var); | |||
} | |||
return cp; | |||
} | |||
static const char * | |||
parse_product (g, cp, valp) | |||
IfParser *g; | |||
const char *cp; | |||
int *valp; | |||
{ | |||
int rightval; | |||
DO (cp = parse_value (g, cp, valp)); | |||
SKIPSPACE (cp); | |||
switch (*cp) { | |||
case '*': | |||
DO (cp = parse_product (g, cp + 1, &rightval)); | |||
*valp = (*valp * rightval); | |||
break; | |||
case '/': | |||
DO (cp = parse_product (g, cp + 1, &rightval)); | |||
*valp = (*valp / rightval); | |||
break; | |||
case '%': | |||
DO (cp = parse_product (g, cp + 1, &rightval)); | |||
*valp = (*valp % rightval); | |||
break; | |||
} | |||
return cp; | |||
} | |||
static const char * | |||
parse_sum (g, cp, valp) | |||
IfParser *g; | |||
const char *cp; | |||
int *valp; | |||
{ | |||
int rightval; | |||
DO (cp = parse_product (g, cp, valp)); | |||
SKIPSPACE (cp); | |||
switch (*cp) { | |||
case '+': | |||
DO (cp = parse_sum (g, cp + 1, &rightval)); | |||
*valp = (*valp + rightval); | |||
break; | |||
case '-': | |||
DO (cp = parse_sum (g, cp + 1, &rightval)); | |||
*valp = (*valp - rightval); | |||
break; | |||
} | |||
return cp; | |||
} | |||
static const char * | |||
parse_shift (g, cp, valp) | |||
IfParser *g; | |||
const char *cp; | |||
int *valp; | |||
{ | |||
int rightval; | |||
DO (cp = parse_sum (g, cp, valp)); | |||
SKIPSPACE (cp); | |||
switch (*cp) { | |||
case '<': | |||
if (cp[1] == '<') { | |||
DO (cp = parse_shift (g, cp + 2, &rightval)); | |||
*valp = (*valp << rightval); | |||
} | |||
break; | |||
case '>': | |||
if (cp[1] == '>') { | |||
DO (cp = parse_shift (g, cp + 2, &rightval)); | |||
*valp = (*valp >> rightval); | |||
} | |||
break; | |||
} | |||
return cp; | |||
} | |||
static const char * | |||
parse_inequality (g, cp, valp) | |||
IfParser *g; | |||
const char *cp; | |||
int *valp; | |||
{ | |||
int rightval; | |||
DO (cp = parse_shift (g, cp, valp)); | |||
SKIPSPACE (cp); | |||
switch (*cp) { | |||
case '<': | |||
if (cp[1] == '=') { | |||
DO (cp = parse_inequality (g, cp + 2, &rightval)); | |||
*valp = (*valp <= rightval); | |||
} else { | |||
DO (cp = parse_inequality (g, cp + 1, &rightval)); | |||
*valp = (*valp < rightval); | |||
} | |||
break; | |||
case '>': | |||
if (cp[1] == '=') { | |||
DO (cp = parse_inequality (g, cp + 2, &rightval)); | |||
*valp = (*valp >= rightval); | |||
} else { | |||
DO (cp = parse_inequality (g, cp + 1, &rightval)); | |||
*valp = (*valp > rightval); | |||
} | |||
break; | |||
} | |||
return cp; | |||
} | |||
static const char * | |||
parse_equality (g, cp, valp) | |||
IfParser *g; | |||
const char *cp; | |||
int *valp; | |||
{ | |||
int rightval; | |||
DO (cp = parse_inequality (g, cp, valp)); | |||
SKIPSPACE (cp); | |||
switch (*cp) { | |||
case '=': | |||
if (cp[1] == '=') | |||
cp++; | |||
DO (cp = parse_equality (g, cp + 1, &rightval)); | |||
*valp = (*valp == rightval); | |||
break; | |||
case '!': | |||
if (cp[1] != '=') | |||
break; | |||
DO (cp = parse_equality (g, cp + 2, &rightval)); | |||
*valp = (*valp != rightval); | |||
break; | |||
} | |||
return cp; | |||
} | |||
static const char * | |||
parse_band (g, cp, valp) | |||
IfParser *g; | |||
const char *cp; | |||
int *valp; | |||
{ | |||
int rightval; | |||
DO (cp = parse_equality (g, cp, valp)); | |||
SKIPSPACE (cp); | |||
switch (*cp) { | |||
case '&': | |||
if (cp[1] != '&') { | |||
DO (cp = parse_band (g, cp + 1, &rightval)); | |||
*valp = (*valp & rightval); | |||
} | |||
break; | |||
} | |||
return cp; | |||
} | |||
static const char * | |||
parse_bor (g, cp, valp) | |||
IfParser *g; | |||
const char *cp; | |||
int *valp; | |||
{ | |||
int rightval; | |||
DO (cp = parse_band (g, cp, valp)); | |||
SKIPSPACE (cp); | |||
switch (*cp) { | |||
case '|': | |||
if (cp[1] != '|') { | |||
DO (cp = parse_bor (g, cp + 1, &rightval)); | |||
*valp = (*valp | rightval); | |||
} | |||
break; | |||
} | |||
return cp; | |||
} | |||
static const char * | |||
parse_land (g, cp, valp) | |||
IfParser *g; | |||
const char *cp; | |||
int *valp; | |||
{ | |||
int rightval; | |||
DO (cp = parse_bor (g, cp, valp)); | |||
SKIPSPACE (cp); | |||
switch (*cp) { | |||
case '&': | |||
if (cp[1] != '&') | |||
return CALLFUNC(g, handle_error) (g, cp, "&&"); | |||
DO (cp = parse_land (g, cp + 2, &rightval)); | |||
*valp = (*valp && rightval); | |||
break; | |||
} | |||
return cp; | |||
} | |||
static const char * | |||
parse_lor (g, cp, valp) | |||
IfParser *g; | |||
const char *cp; | |||
int *valp; | |||
{ | |||
int rightval; | |||
DO (cp = parse_land (g, cp, valp)); | |||
SKIPSPACE (cp); | |||
switch (*cp) { | |||
case '|': | |||
if (cp[1] != '|') | |||
return CALLFUNC(g, handle_error) (g, cp, "||"); | |||
DO (cp = parse_lor (g, cp + 2, &rightval)); | |||
*valp = (*valp || rightval); | |||
break; | |||
} | |||
return cp; | |||
} | |||
/**************************************************************************** | |||
External Entry Points | |||
****************************************************************************/ | |||
const char * | |||
ParseIfExpression (g, cp, valp) | |||
IfParser *g; | |||
const char *cp; | |||
int *valp; | |||
{ | |||
return parse_lor (g, cp, valp); | |||
} | |||
@@ -1,76 +0,0 @@ | |||
/* | |||
* $XConsortium: ifparser.h,v 1.1 92/08/22 13:05:39 rws Exp $ | |||
* | |||
* Copyright 1992 Network Computing Devices, Inc. | |||
* | |||
* Permission to use, copy, modify, and distribute this software and its | |||
* documentation for any purpose and without fee is hereby granted, provided | |||
* that the above copyright notice appear in all copies and that both that | |||
* copyright notice and this permission notice appear in supporting | |||
* documentation, and that the name of Network Computing Devices may not be | |||
* used in advertising or publicity pertaining to distribution of the software | |||
* without specific, written prior permission. Network Computing Devices makes | |||
* no representations about the suitability of this software for any purpose. | |||
* It is provided ``as is'' without express or implied warranty. | |||
* | |||
* NETWORK COMPUTING DEVICES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS | |||
* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, | |||
* IN NO EVENT SHALL NETWORK COMPUTING DEVICES BE LIABLE FOR ANY SPECIAL, | |||
* INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM | |||
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE | |||
* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR | |||
* PERFORMANCE OF THIS SOFTWARE. | |||
* | |||
* Author: Jim Fulton | |||
* Network Computing Devices, Inc. | |||
* | |||
* Simple if statement processor | |||
* | |||
* This module can be used to evaluate string representations of C language | |||
* if constructs. It accepts the following grammar: | |||
* | |||
* EXPRESSION := VALUE | |||
* | VALUE BINOP EXPRESSION | |||
* | |||
* VALUE := '(' EXPRESSION ')' | |||
* | '!' VALUE | |||
* | '-' VALUE | |||
* | 'defined' '(' variable ')' | |||
* | variable | |||
* | number | |||
* | |||
* BINOP := '*' | '/' | '%' | |||
* | '+' | '-' | |||
* | '<<' | '>>' | |||
* | '<' | '>' | '<=' | '>=' | |||
* | '==' | '!=' | |||
* | '&' | '|' | |||
* | '&&' | '||' | |||
* | |||
* The normal C order of precidence is supported. | |||
* | |||
* | |||
* External Entry Points: | |||
* | |||
* ParseIfExpression parse a string for #if | |||
*/ | |||
#include <stdio.h> | |||
#define const /**/ | |||
typedef int Bool; | |||
#define False 0 | |||
#define True 1 | |||
typedef struct _if_parser { | |||
struct { /* functions */ | |||
char *(*handle_error) (/* struct _if_parser *, const char *, | |||
const char * */); | |||
int (*eval_variable) (/* struct _if_parser *, const char *, int */); | |||
int (*eval_defined) (/* struct _if_parser *, const char *, int */); | |||
} funcs; | |||
char *data; | |||
} IfParser; | |||
char *ParseIfExpression (/* IfParser *, const char *, int * */); | |||
@@ -1,312 +0,0 @@ | |||
/* $XConsortium: include.c,v 1.17 94/12/05 19:33:08 gildea Exp $ */ | |||
/* | |||
Copyright (c) 1993, 1994 X Consortium | |||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||
of this software and associated documentation files (the "Software"), to deal | |||
in the Software without restriction, including without limitation the rights | |||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
copies of the Software, and to permit persons to whom the Software is | |||
furnished to do so, subject to the following conditions: | |||
The above copyright notice and this permission notice shall be included in | |||
all copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | |||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
Except as contained in this notice, the name of the X Consortium shall not be | |||
used in advertising or otherwise to promote the sale, use or other dealings | |||
in this Software without prior written authorization from the X Consortium. | |||
*/ | |||
#include "def.h" | |||
extern struct inclist inclist[ MAXFILES ], | |||
*inclistp; | |||
extern char *includedirs[ ]; | |||
extern char *notdotdot[ ]; | |||
extern boolean show_where_not; | |||
extern boolean warn_multiple; | |||
struct inclist *inc_path(file, include, dot) | |||
register char *file, | |||
*include; | |||
boolean dot; | |||
{ | |||
static char path[ BUFSIZ ]; | |||
register char **pp, *p; | |||
register struct inclist *ip; | |||
struct stat st; | |||
boolean found = FALSE; | |||
/* | |||
* Check all previously found include files for a path that | |||
* has already been expanded. | |||
*/ | |||
for (ip = inclist; ip->i_file; ip++) | |||
if ((strcmp(ip->i_incstring, include) == 0) && !ip->i_included_sym) | |||
{ | |||
found = TRUE; | |||
break; | |||
} | |||
/* | |||
* If the path was surrounded by "" or is an absolute path, | |||
* then check the exact path provided. | |||
*/ | |||
if (!found && (dot || *include == '/')) { | |||
if (stat(include, &st) == 0) { | |||
ip = newinclude(include, include); | |||
found = TRUE; | |||
} | |||
else if (show_where_not) | |||
warning1("\tnot in %s\n", include); | |||
} | |||
/* | |||
* See if this include file is in the directory of the | |||
* file being compiled. | |||
*/ | |||
if (!found) { | |||
for (p=file+strlen(file); p>file; p--) | |||
if (*p == '/') | |||
break; | |||
if (p == file) | |||
strcpy(path, include); | |||
else { | |||
strncpy(path, file, (p-file) + 1); | |||
path[ (p-file) + 1 ] = '\0'; | |||
strcpy(path + (p-file) + 1, include); | |||
} | |||
remove_dotdot(path); | |||
if (stat(path, &st) == 0) { | |||
ip = newinclude(path, include); | |||
found = TRUE; | |||
} | |||
else if (show_where_not) | |||
warning1("\tnot in %s\n", path); | |||
} | |||
/* | |||
* Check the include directories specified. (standard include dir | |||
* should be at the end.) | |||
*/ | |||
if (!found) | |||
for (pp = includedirs; *pp; pp++) { | |||
#ifdef WIN32 | |||
sprintf(path, "%s\\%s", *pp, include); | |||
#else | |||
sprintf(path, "%s/%s", *pp, include); | |||
#endif | |||
remove_dotdot(path); | |||
if (stat(path, &st) == 0) { | |||
ip = newinclude(path, include); | |||
found = TRUE; | |||
break; | |||
} | |||
else if (show_where_not) | |||
warning1("\tnot in %s\n", path); | |||
} | |||
if (!found) | |||
ip = NULL; | |||
return(ip); | |||
} | |||
/* | |||
* Occasionally, pathnames are created that look like .../x/../y | |||
* Any of the 'x/..' sequences within the name can be eliminated. | |||
* (but only if 'x' is not a symbolic link!!) | |||
*/ | |||
remove_dotdot(path) | |||
char *path; | |||
{ | |||
register char *end, *from, *to, **cp; | |||
char *components[ MAXFILES ], | |||
newpath[ BUFSIZ ]; | |||
boolean component_copied; | |||
/* | |||
* slice path up into components. | |||
*/ | |||
to = newpath; | |||
if (*path == '/') | |||
*to++ = '/'; | |||
*to = '\0'; | |||
cp = components; | |||
for (from=end=path; *end; end++) | |||
if (*end == '/') { | |||
while (*end == '/') | |||
*end++ = '\0'; | |||
if (*from) | |||
*cp++ = from; | |||
from = end; | |||
} | |||
*cp++ = from; | |||
*cp = NULL; | |||
/* | |||
* Recursively remove all 'x/..' component pairs. | |||
*/ | |||
cp = components; | |||
while(*cp) { | |||
if (!isdot(*cp) && !isdotdot(*cp) && isdotdot(*(cp+1)) | |||
&& !issymbolic(newpath, *cp)) | |||
{ | |||
char **fp = cp + 2; | |||
char **tp = cp; | |||
do | |||
*tp++ = *fp; /* move all the pointers down */ | |||
while (*fp++); | |||
if (cp != components) | |||
cp--; /* go back and check for nested ".." */ | |||
} else { | |||
cp++; | |||
} | |||
} | |||
/* | |||
* Concatenate the remaining path elements. | |||
*/ | |||
cp = components; | |||
component_copied = FALSE; | |||
while(*cp) { | |||
if (component_copied) | |||
*to++ = '/'; | |||
component_copied = TRUE; | |||
for (from = *cp; *from; ) | |||
*to++ = *from++; | |||
*to = '\0'; | |||
cp++; | |||
} | |||
*to++ = '\0'; | |||
/* | |||
* copy the reconstituted path back to our pointer. | |||
*/ | |||
strcpy(path, newpath); | |||
} | |||
isdot(p) | |||
register char *p; | |||
{ | |||
if(p && *p++ == '.' && *p++ == '\0') | |||
return(TRUE); | |||
return(FALSE); | |||
} | |||
isdotdot(p) | |||
register char *p; | |||
{ | |||
if(p && *p++ == '.' && *p++ == '.' && *p++ == '\0') | |||
return(TRUE); | |||
return(FALSE); | |||
} | |||
issymbolic(dir, component) | |||
register char *dir, *component; | |||
{ | |||
#ifdef S_IFLNK | |||
struct stat st; | |||
char buf[ BUFSIZ ], **pp; | |||
sprintf(buf, "%s%s%s", dir, *dir ? "/" : "", component); | |||
for (pp=notdotdot; *pp; pp++) | |||
if (strcmp(*pp, buf) == 0) | |||
return (TRUE); | |||
if (lstat(buf, &st) == 0 | |||
&& (st.st_mode & S_IFMT) == S_IFLNK) { | |||
*pp++ = copy(buf); | |||
if (pp >= ¬dotdot[ MAXDIRS ]) | |||
fatalerr("out of .. dirs, increase MAXDIRS\n"); | |||
return(TRUE); | |||
} | |||
#endif | |||
return(FALSE); | |||
} | |||
/* | |||
* Add an include file to the list of those included by 'file'. | |||
*/ | |||
struct inclist *newinclude(newfile, incstring) | |||
register char *newfile, *incstring; | |||
{ | |||
register struct inclist *ip; | |||
/* | |||
* First, put this file on the global list of include files. | |||
*/ | |||
ip = inclistp++; | |||
if (inclistp == inclist + MAXFILES - 1) | |||
fatalerr("out of space: increase MAXFILES\n"); | |||
ip->i_file = copy(newfile); | |||
ip->i_included_sym = FALSE; | |||
if (incstring == NULL) | |||
ip->i_incstring = ip->i_file; | |||
else | |||
ip->i_incstring = copy(incstring); | |||
return(ip); | |||
} | |||
included_by(ip, newfile) | |||
register struct inclist *ip, *newfile; | |||
{ | |||
register i; | |||
if (ip == NULL) | |||
return; | |||
/* | |||
* Put this include file (newfile) on the list of files included | |||
* by 'file'. If 'file' is NULL, then it is not an include | |||
* file itself (i.e. was probably mentioned on the command line). | |||
* If it is already on the list, don't stick it on again. | |||
*/ | |||
if (ip->i_list == NULL) | |||
ip->i_list = (struct inclist **) | |||
malloc(sizeof(struct inclist *) * ++ip->i_listlen); | |||
else { | |||
for (i=0; i<ip->i_listlen; i++) | |||
if (ip->i_list[ i ] == newfile) { | |||
i = strlen(newfile->i_file); | |||
if (!ip->i_included_sym && | |||
!(i > 2 && | |||
newfile->i_file[i-1] == 'c' && | |||
newfile->i_file[i-2] == '.')) | |||
{ | |||
/* only bitch if ip has */ | |||
/* no #include SYMBOL lines */ | |||
/* and is not a .c file */ | |||
if (warn_multiple) | |||
{ | |||
warning("%s includes %s more than once!\n", | |||
ip->i_file, newfile->i_file); | |||
warning1("Already have\n"); | |||
for (i=0; i<ip->i_listlen; i++) | |||
warning1("\t%s\n", ip->i_list[i]->i_file); | |||
} | |||
} | |||
return; | |||
} | |||
ip->i_list = (struct inclist **) realloc(ip->i_list, | |||
sizeof(struct inclist *) * ++ip->i_listlen); | |||
} | |||
ip->i_list[ ip->i_listlen-1 ] = newfile; | |||
} | |||
inc_clean () | |||
{ | |||
register struct inclist *ip; | |||
for (ip = inclist; ip < inclistp; ip++) { | |||
ip->i_marked = FALSE; | |||
} | |||
} |
@@ -1,593 +0,0 @@ | |||
/* $XConsortium: main.c,v 1.84 94/11/30 16:10:44 kaleb Exp $ */ | |||
/* | |||
Copyright (c) 1993, 1994 X Consortium | |||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||
of this software and associated documentation files (the "Software"), to deal | |||
in the Software without restriction, including without limitation the rights | |||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
copies of the Software, and to permit persons to whom the Software is | |||
furnished to do so, subject to the following conditions: | |||
The above copyright notice and this permission notice shall be included in | |||
all copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | |||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
Except as contained in this notice, the name of the X Consortium shall not be | |||
used in advertising or otherwise to promote the sale, use or other dealings | |||
in this Software without prior written authorization from the X Consortium. | |||
*/ | |||
#include "def.h" | |||
#ifdef hpux | |||
#define sigvec sigvector | |||
#endif /* hpux */ | |||
#ifdef X_POSIX_C_SOURCE | |||
#define _POSIX_C_SOURCE X_POSIX_C_SOURCE | |||
#include <signal.h> | |||
#undef _POSIX_C_SOURCE | |||
#else | |||
#if defined(X_NOT_POSIX) || defined(_POSIX_SOURCE) | |||
#include <signal.h> | |||
#else | |||
#define _POSIX_SOURCE | |||
#include <signal.h> | |||
#undef _POSIX_SOURCE | |||
#endif | |||
#endif | |||
#if NeedVarargsPrototypes | |||
#include <stdarg.h> | |||
#endif | |||
#ifdef DEBUG | |||
int _debugmask; | |||
#endif | |||
char *ProgramName; | |||
char *directives[] = { | |||
"if", | |||
"ifdef", | |||
"ifndef", | |||
"else", | |||
"endif", | |||
"define", | |||
"undef", | |||
"include", | |||
"line", | |||
"pragma", | |||
"error", | |||
"ident", | |||
"sccs", | |||
"elif", | |||
"eject", | |||
NULL | |||
}; | |||
struct symtab predefs[] = { {NULL, NULL} }; | |||
struct inclist inclist[ MAXFILES ], | |||
*inclistp = inclist, | |||
maininclist; | |||
char *filelist[ MAXFILES ]; | |||
char *includedirs[ MAXDIRS + 1 ]; | |||
char *notdotdot[ MAXDIRS ]; | |||
char *objprefix = ""; | |||
char *objsuffix = ".o"; | |||
int width = 78; | |||
boolean append = FALSE; | |||
boolean printed = FALSE; | |||
boolean verbose = FALSE; | |||
boolean show_where_not = FALSE; | |||
boolean warn_multiple = FALSE; /* Warn on multiple includes of same file */ | |||
static | |||
#ifdef SIGNALRETURNSINT | |||
int | |||
#else | |||
void | |||
#endif | |||
catch (sig) | |||
int sig; | |||
{ | |||
fflush (stdout); | |||
fatalerr ("got signal %d\n", sig); | |||
} | |||
#if defined(USG) || (defined(i386) && defined(SYSV)) || defined(WIN32) || defined(__nextstep__) | |||
#define USGISH | |||
#endif | |||
#ifndef USGISH | |||
#ifndef _POSIX_SOURCE | |||
#define sigaction sigvec | |||
#define sa_handler sv_handler | |||
#define sa_mask sv_mask | |||
#define sa_flags sv_flags | |||
#endif | |||
struct sigaction sig_act; | |||
#endif /* USGISH */ | |||
main(argc, argv) | |||
int argc; | |||
char **argv; | |||
{ | |||
register char **fp = filelist; | |||
register char **incp = includedirs; | |||
register char *p; | |||
register struct inclist *ip; | |||
char *makefile = NULL; | |||
struct filepointer *filecontent; | |||
struct symtab *psymp = predefs; | |||
char *endmarker = NULL; | |||
char *defincdir = NULL; | |||
ProgramName = argv[0]; | |||
while (psymp->s_name) | |||
{ | |||
define2(psymp->s_name, psymp->s_value, &maininclist); | |||
psymp++; | |||
} | |||
if (argc == 2 && argv[1][0] == '@') { | |||
struct stat ast; | |||
int afd; | |||
char *args; | |||
char **nargv; | |||
int nargc; | |||
char quotechar = '\0'; | |||
nargc = 1; | |||
if ((afd = open(argv[1]+1, O_RDONLY)) < 0) | |||
fatalerr("cannot open \"%s\"\n", argv[1]+1); | |||
fstat(afd, &ast); | |||
args = (char *)malloc(ast.st_size + 1); | |||
if ((ast.st_size = read(afd, args, ast.st_size)) < 0) | |||
fatalerr("failed to read %s\n", argv[1]+1); | |||
args[ast.st_size] = '\0'; | |||
close(afd); | |||
for (p = args; *p; p++) { | |||
if (quotechar) { | |||
if (quotechar == '\\' || | |||
(*p == quotechar && p[-1] != '\\')) | |||
quotechar = '\0'; | |||
continue; | |||
} | |||
switch (*p) { | |||
case '\\': | |||
case '"': | |||
case '\'': | |||
quotechar = *p; | |||
break; | |||
case ' ': | |||
case '\n': | |||
*p = '\0'; | |||
if (p > args && p[-1]) | |||
nargc++; | |||
break; | |||
} | |||
} | |||
if (p[-1]) | |||
nargc++; | |||
nargv = (char **)malloc(nargc * sizeof(char *)); | |||
nargv[0] = argv[0]; | |||
argc = 1; | |||
for (p = args; argc < nargc; p += strlen(p) + 1) | |||
if (*p) nargv[argc++] = p; | |||
argv = nargv; | |||
} | |||
for(argc--, argv++; argc; argc--, argv++) { | |||
/* if looking for endmarker then check before parsing */ | |||
if (endmarker && strcmp (endmarker, *argv) == 0) { | |||
endmarker = NULL; | |||
continue; | |||
} | |||
if (**argv != '-') { | |||
/* treat +thing as an option for C++ */ | |||
if (endmarker && **argv == '+') | |||
continue; | |||
*fp++ = argv[0]; | |||
continue; | |||
} | |||
switch(argv[0][1]) { | |||
case '-': | |||
endmarker = &argv[0][2]; | |||
if (endmarker[0] == '\0') endmarker = "--"; | |||
break; | |||
case 'D': | |||
{ | |||
int offset = 2; | |||
if (argv[0][2] == '\0') { | |||
argv++; | |||
argc--; | |||
offset = 0; | |||
} | |||
for (p=argv[0] + offset; *p ; p++) | |||
if (*p == '=') { | |||
*p = ' '; | |||
break; | |||
} | |||
define(argv[0] + offset, &maininclist); | |||
break; | |||
} | |||
case 'I': | |||
if (incp >= includedirs + MAXDIRS) | |||
fatalerr("Too many -I flags.\n"); | |||
*incp++ = argv[0]+2; | |||
if (**(incp-1) == '\0') { | |||
*(incp-1) = *(++argv); | |||
argc--; | |||
} | |||
break; | |||
case 'Y': | |||
defincdir = argv[0]+2; | |||
break; | |||
/* do not use if endmarker processing */ | |||
case 'a': | |||
if (endmarker) break; | |||
append = TRUE; | |||
break; | |||
case 'w': | |||
if (endmarker) break; | |||
if (argv[0][2] == '\0') { | |||
argv++; | |||
argc--; | |||
width = atoi(argv[0]); | |||
} else | |||
width = atoi(argv[0]+2); | |||
break; | |||
case 'o': | |||
if (endmarker) break; | |||
if (argv[0][2] == '\0') { | |||
argv++; | |||
argc--; | |||
objsuffix = argv[0]; | |||
} else | |||
objsuffix = argv[0]+2; | |||
break; | |||
case 'p': | |||
if (endmarker) break; | |||
if (argv[0][2] == '\0') { | |||
argv++; | |||
argc--; | |||
objprefix = argv[0]; | |||
} else | |||
objprefix = argv[0]+2; | |||
break; | |||
case 'v': | |||
if (endmarker) break; | |||
verbose = TRUE; | |||
#ifdef DEBUG | |||
if (argv[0][2]) | |||
_debugmask = atoi(argv[0]+2); | |||
#endif | |||
break; | |||
case 'm': | |||
warn_multiple = TRUE; | |||
break; | |||
/* Ignore -O, -g so we can just pass ${CFLAGS} to | |||
makedepend | |||
*/ | |||
case 'O': | |||
case 'g': | |||
break; | |||
default: | |||
if (endmarker) break; | |||
/* fatalerr("unknown opt = %s\n", argv[0]); */ | |||
warning("ignoring option %s\n", argv[0]); | |||
} | |||
} | |||
if (!defincdir) { | |||
} else if (*defincdir) { | |||
if (incp >= includedirs + MAXDIRS) | |||
fatalerr("Too many -I flags.\n"); | |||
*incp++ = defincdir; | |||
} | |||
/* | |||
* catch signals. | |||
*/ | |||
#ifdef USGISH | |||
/* should really reset SIGINT to SIG_IGN if it was. */ | |||
#ifdef SIGHUP | |||
signal (SIGHUP, catch); | |||
#endif | |||
signal (SIGINT, catch); | |||
#ifdef SIGQUIT | |||
signal (SIGQUIT, catch); | |||
#endif | |||
signal (SIGILL, catch); | |||
#ifdef SIGBUS | |||
signal (SIGBUS, catch); | |||
#endif | |||
signal (SIGSEGV, catch); | |||
#ifdef SIGSYS | |||
signal (SIGSYS, catch); | |||
#endif | |||
#else | |||
sig_act.sa_handler = catch; | |||
#ifdef _POSIX_SOURCE | |||
sigemptyset(&sig_act.sa_mask); | |||
sigaddset(&sig_act.sa_mask, SIGINT); | |||
sigaddset(&sig_act.sa_mask, SIGQUIT); | |||
#ifdef SIGBUS | |||
sigaddset(&sig_act.sa_mask, SIGBUS); | |||
#endif | |||
sigaddset(&sig_act.sa_mask, SIGILL); | |||
sigaddset(&sig_act.sa_mask, SIGSEGV); | |||
sigaddset(&sig_act.sa_mask, SIGHUP); | |||
sigaddset(&sig_act.sa_mask, SIGPIPE); | |||
#ifdef SIGSYS | |||
sigaddset(&sig_act.sa_mask, SIGSYS); | |||
#endif | |||
#else | |||
sig_act.sa_mask = ((1<<(SIGINT -1)) | |||
|(1<<(SIGQUIT-1)) | |||
#ifdef SIGBUS | |||
|(1<<(SIGBUS-1)) | |||
#endif | |||
|(1<<(SIGILL-1)) | |||
|(1<<(SIGSEGV-1)) | |||
|(1<<(SIGHUP-1)) | |||
|(1<<(SIGPIPE-1)) | |||
#ifdef SIGSYS | |||
|(1<<(SIGSYS-1)) | |||
#endif | |||
); | |||
#endif /* _POSIX_SOURCE */ | |||
sig_act.sa_flags = 0; | |||
sigaction(SIGHUP, &sig_act, (struct sigaction *)0); | |||
sigaction(SIGINT, &sig_act, (struct sigaction *)0); | |||
sigaction(SIGQUIT, &sig_act, (struct sigaction *)0); | |||
sigaction(SIGILL, &sig_act, (struct sigaction *)0); | |||
#ifdef SIGBUS | |||
sigaction(SIGBUS, &sig_act, (struct sigaction *)0); | |||
#endif | |||
sigaction(SIGSEGV, &sig_act, (struct sigaction *)0); | |||
#ifdef SIGSYS | |||
sigaction(SIGSYS, &sig_act, (struct sigaction *)0); | |||
#endif | |||
#endif /* USGISH */ | |||
/* | |||
* now peruse through the list of files. | |||
*/ | |||
for(fp=filelist; *fp; fp++) { | |||
char *base = base_name(*fp); | |||
char *depfile = (char *)malloc(strlen(base) + 3); | |||
sprintf(depfile,"%s.d",base); | |||
if (!freopen(depfile, "wb", stdout)) | |||
fatalerr("cannot open \"%s\"\n", depfile); | |||
free(depfile); | |||
free(base); | |||
printed = FALSE; | |||
filecontent = getfile(*fp); | |||
ip = newinclude(*fp, (char *)NULL); | |||
find_includes(filecontent, ip, ip, 0, TRUE); | |||
freefile(filecontent); | |||
recursive_pr_include(ip, ip->i_file, base_name(*fp)); | |||
inc_clean(); | |||
if (printed) | |||
printf("\n"); | |||
} | |||
exit(0); | |||
} | |||
struct filepointer *getfile(file) | |||
char *file; | |||
{ | |||
register int fd; | |||
struct filepointer *content; | |||
struct stat st; | |||
content = (struct filepointer *)malloc(sizeof(struct filepointer)); | |||
if ((fd = open(file, O_RDONLY)) < 0) { | |||
warning("cannot open \"%s\"\n", file); | |||
content->f_p = content->f_base = content->f_end = (char *)malloc(1); | |||
*content->f_p = '\0'; | |||
return(content); | |||
} | |||
fstat(fd, &st); | |||
content->f_base = (char *)malloc(st.st_size+1); | |||
if (content->f_base == NULL) | |||
fatalerr("cannot allocate mem\n"); | |||
if ((st.st_size = read(fd, content->f_base, st.st_size)) < 0) | |||
fatalerr("failed to read %s\n", file); | |||
close(fd); | |||
content->f_len = st.st_size+1; | |||
content->f_p = content->f_base; | |||
content->f_end = content->f_base + st.st_size; | |||
*content->f_end = '\0'; | |||
content->f_line = 0; | |||
return(content); | |||
} | |||
freefile(fp) | |||
struct filepointer *fp; | |||
{ | |||
free(fp->f_base); | |||
free(fp); | |||
} | |||
char *copy(str) | |||
register char *str; | |||
{ | |||
register char *p = (char *)malloc(strlen(str) + 1); | |||
strcpy(p, str); | |||
return(p); | |||
} | |||
match(str, list) | |||
register char *str, **list; | |||
{ | |||
register int i; | |||
for (i=0; *list; i++, list++) | |||
if (strcmp(str, *list) == 0) | |||
return(i); | |||
return(-1); | |||
} | |||
/* | |||
* Get the next line. We only return lines beginning with '#' since that | |||
* is all this program is ever interested in. | |||
*/ | |||
char *getline(filep) | |||
register struct filepointer *filep; | |||
{ | |||
register char *p, /* walking pointer */ | |||
*eof, /* end of file pointer */ | |||
*bol; /* beginning of line pointer */ | |||
register lineno; /* line number */ | |||
p = filep->f_p; | |||
eof = filep->f_end; | |||
if (p >= eof) | |||
return((char *)NULL); | |||
lineno = filep->f_line; | |||
for(bol = p--; ++p < eof; ) { | |||
if (*p == '/' && *(p+1) == '*') { /* consume comments */ | |||
*p++ = ' ', *p++ = ' '; | |||
while (*p) { | |||
if (*p == '*' && *(p+1) == '/') { | |||
*p++ = ' ', *p = ' '; | |||
break; | |||
} | |||
else if (*p == '\n') | |||
lineno++; | |||
*p++ = ' '; | |||
} | |||
continue; | |||
} | |||
else if (*p == '/' && *(p+1) == '/') { /* consume comments */ | |||
*p++ = ' ', *p++ = ' '; | |||
while (*p && *p != '\n') | |||
*p++ = ' '; | |||
p--; /* go back to before newline */ | |||
lineno++; | |||
continue; | |||
} | |||
else if (*p == '\\') { | |||
if (*(p+1) == '\n') { | |||
*p = ' '; | |||
*(p+1) = ' '; | |||
lineno++; | |||
} | |||
} | |||
else if (*p == '\n') { | |||
lineno++; | |||
if (*bol == '#') { | |||
register char *cp; | |||
*p++ = '\0'; | |||
/* punt lines with just # (yacc generated) */ | |||
for (cp = bol+1; | |||
*cp && (*cp == ' ' || *cp == '\t'); cp++); | |||
if (*cp) goto done; | |||
} | |||
bol = p+1; | |||
} | |||
} | |||
if (*bol != '#') | |||
bol = NULL; | |||
done: | |||
filep->f_p = p; | |||
filep->f_line = lineno; | |||
return(bol); | |||
} | |||
/* | |||
* Strip the file name down to what we want to see in the Makefile. | |||
* It will have objprefix and objsuffix around it. | |||
*/ | |||
char *base_name(file) | |||
register char *file; | |||
{ | |||
register char *p; | |||
for(p=file+strlen(file); p>file && *p != '/' && *p != '\\'; p--) ; | |||
if (p>file) p++; | |||
file = copy(p); | |||
for(p=file+strlen(file); p>file && *p != '.'; p--) ; | |||
if (*p == '.') | |||
*p = '\0'; | |||
return(file); | |||
} | |||
#if NeedVarargsPrototypes | |||
fatalerr(char *msg, ...) | |||
#else | |||
/*VARARGS*/ | |||
fatalerr(msg,x1,x2,x3,x4,x5,x6,x7,x8,x9) | |||
char *msg; | |||
#endif | |||
{ | |||
#if NeedVarargsPrototypes | |||
va_list args; | |||
#endif | |||
fprintf(stderr, "%s: error: ", ProgramName); | |||
#if NeedVarargsPrototypes | |||
va_start(args, msg); | |||
vfprintf(stderr, msg, args); | |||
va_end(args); | |||
#else | |||
fprintf(stderr, msg,x1,x2,x3,x4,x5,x6,x7,x8,x9); | |||
#endif | |||
exit (1); | |||
} | |||
#if NeedVarargsPrototypes | |||
warning(char *msg, ...) | |||
#else | |||
/*VARARGS0*/ | |||
warning(msg,x1,x2,x3,x4,x5,x6,x7,x8,x9) | |||
char *msg; | |||
#endif | |||
{ | |||
#if NeedVarargsPrototypes | |||
va_list args; | |||
#endif | |||
fprintf(stderr, "%s: warning: ", ProgramName); | |||
#if NeedVarargsPrototypes | |||
va_start(args, msg); | |||
vfprintf(stderr, msg, args); | |||
va_end(args); | |||
#else | |||
fprintf(stderr, msg,x1,x2,x3,x4,x5,x6,x7,x8,x9); | |||
#endif | |||
} | |||
#if NeedVarargsPrototypes | |||
warning1(char *msg, ...) | |||
#else | |||
/*VARARGS0*/ | |||
warning1(msg,x1,x2,x3,x4,x5,x6,x7,x8,x9) | |||
char *msg; | |||
#endif | |||
{ | |||
#if NeedVarargsPrototypes | |||
va_list args; | |||
va_start(args, msg); | |||
vfprintf(stderr, msg, args); | |||
va_end(args); | |||
#else | |||
fprintf(stderr, msg,x1,x2,x3,x4,x5,x6,x7,x8,x9); | |||
#endif | |||
} |
@@ -1,568 +0,0 @@ | |||
/* $XConsortium: parse.c,v 1.30 94/04/17 20:10:38 gildea Exp $ */ | |||
/* | |||
Copyright (c) 1993, 1994 X Consortium | |||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||
of this software and associated documentation files (the "Software"), to deal | |||
in the Software without restriction, including without limitation the rights | |||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
copies of the Software, and to permit persons to whom the Software is | |||
furnished to do so, subject to the following conditions: | |||
The above copyright notice and this permission notice shall be included in | |||
all copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | |||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
Except as contained in this notice, the name of the X Consortium shall not be | |||
used in advertising or otherwise to promote the sale, use or other dealings | |||
in this Software without prior written authorization from the X Consortium. | |||
*/ | |||
#include "def.h" | |||
extern char *directives[]; | |||
extern struct inclist maininclist; | |||
find_includes(filep, file, file_red, recursion, failOK) | |||
struct filepointer *filep; | |||
struct inclist *file, *file_red; | |||
int recursion; | |||
boolean failOK; | |||
{ | |||
register char *line; | |||
register int type; | |||
boolean recfailOK; | |||
while (line = getline(filep)) { | |||
switch(type = deftype(line, filep, file_red, file, TRUE)) { | |||
case IF: | |||
doif: | |||
type = find_includes(filep, file, | |||
file_red, recursion+1, failOK); | |||
while ((type == ELIF) || (type == ELIFFALSE) || | |||
(type == ELIFGUESSFALSE)) | |||
type = gobble(filep, file, file_red); | |||
if (type == ELSE) | |||
gobble(filep, file, file_red); | |||
break; | |||
case IFFALSE: | |||
case IFGUESSFALSE: | |||
doiffalse: | |||
if (type == IFGUESSFALSE || type == ELIFGUESSFALSE) | |||
recfailOK = TRUE; | |||
else | |||
recfailOK = failOK; | |||
type = gobble(filep, file, file_red); | |||
if (type == ELSE) | |||
find_includes(filep, file, | |||
file_red, recursion+1, recfailOK); | |||
else | |||
if (type == ELIF) | |||
goto doif; | |||
else | |||
if ((type == ELIFFALSE) || (type == ELIFGUESSFALSE)) | |||
goto doiffalse; | |||
break; | |||
case IFDEF: | |||
case IFNDEF: | |||
if ((type == IFDEF && isdefined(line, file_red, NULL)) | |||
|| (type == IFNDEF && !isdefined(line, file_red, NULL))) { | |||
debug(1,(type == IFNDEF ? | |||
"line %d: %s !def'd in %s via %s%s\n" : "", | |||
filep->f_line, line, | |||
file->i_file, file_red->i_file, ": doit")); | |||
type = find_includes(filep, file, | |||
file_red, recursion+1, failOK); | |||
while (type == ELIF || type == ELIFFALSE || type == ELIFGUESSFALSE) | |||
type = gobble(filep, file, file_red); | |||
if (type == ELSE) | |||
gobble(filep, file, file_red); | |||
} | |||
else { | |||
debug(1,(type == IFDEF ? | |||
"line %d: %s !def'd in %s via %s%s\n" : "", | |||
filep->f_line, line, | |||
file->i_file, file_red->i_file, ": gobble")); | |||
type = gobble(filep, file, file_red); | |||
if (type == ELSE) | |||
find_includes(filep, file, | |||
file_red, recursion+1, failOK); | |||
else if (type == ELIF) | |||
goto doif; | |||
else if (type == ELIFFALSE || type == ELIFGUESSFALSE) | |||
goto doiffalse; | |||
} | |||
break; | |||
case ELSE: | |||
case ELIFFALSE: | |||
case ELIFGUESSFALSE: | |||
case ELIF: | |||
if (!recursion) | |||
gobble(filep, file, file_red); | |||
case ENDIF: | |||
if (recursion) | |||
return(type); | |||
case DEFINE: | |||
define(line, file); | |||
break; | |||
case UNDEF: | |||
if (!*line) { | |||
warning("%s, line %d: incomplete undef == \"%s\"\n", | |||
file_red->i_file, filep->f_line, line); | |||
break; | |||
} | |||
undefine(line, file_red); | |||
break; | |||
case INCLUDE: | |||
add_include(filep, file, file_red, line, FALSE, failOK); | |||
break; | |||
case INCLUDEDOT: | |||
add_include(filep, file, file_red, line, TRUE, failOK); | |||
break; | |||
case ERROR: | |||
warning("(from %s) %s: %d: %s\n", | |||
file_red->i_file, file->i_file, | |||
filep->f_line, line); | |||
break; | |||
case PRAGMA: | |||
case IDENT: | |||
case SCCS: | |||
case EJECT: | |||
break; | |||
case -1: | |||
warning("%s", file_red->i_file); | |||
if (file_red != file) | |||
warning1(" (reading %s)", file->i_file); | |||
warning1(", line %d: unknown directive == \"%s\"\n", | |||
filep->f_line, line); | |||
break; | |||
case -2: | |||
warning("%s", file_red->i_file); | |||
if (file_red != file) | |||
warning1(" (reading %s)", file->i_file); | |||
warning1(", line %d: incomplete include == \"%s\"\n", | |||
filep->f_line, line); | |||
break; | |||
} | |||
} | |||
return(-1); | |||
} | |||
gobble(filep, file, file_red) | |||
register struct filepointer *filep; | |||
struct inclist *file, *file_red; | |||
{ | |||
register char *line; | |||
register int type; | |||
while (line = getline(filep)) { | |||
switch(type = deftype(line, filep, file_red, file, FALSE)) { | |||
case IF: | |||
case IFFALSE: | |||
case IFGUESSFALSE: | |||
case IFDEF: | |||
case IFNDEF: | |||
type = gobble(filep, file, file_red); | |||
while ((type == ELIF) || (type == ELIFFALSE) || | |||
(type == ELIFGUESSFALSE)) | |||
type = gobble(filep, file, file_red); | |||
if (type == ELSE) | |||
(void)gobble(filep, file, file_red); | |||
break; | |||
case ELSE: | |||
case ENDIF: | |||
debug(0,("%s, line %d: #%s\n", | |||
file->i_file, filep->f_line, | |||
directives[type])); | |||
return(type); | |||
case DEFINE: | |||
case UNDEF: | |||
case INCLUDE: | |||
case INCLUDEDOT: | |||
case PRAGMA: | |||
case ERROR: | |||
case IDENT: | |||
case SCCS: | |||
case EJECT: | |||
break; | |||
case ELIF: | |||
case ELIFFALSE: | |||
case ELIFGUESSFALSE: | |||
return(type); | |||
case -1: | |||
warning("%s, line %d: unknown directive == \"%s\"\n", | |||
file_red->i_file, filep->f_line, line); | |||
break; | |||
} | |||
} | |||
return(-1); | |||
} | |||
/* | |||
* Decide what type of # directive this line is. | |||
*/ | |||
int deftype (line, filep, file_red, file, parse_it) | |||
register char *line; | |||
register struct filepointer *filep; | |||
register struct inclist *file_red, *file; | |||
int parse_it; | |||
{ | |||
register char *p; | |||
char *directive, savechar; | |||
register int ret; | |||
/* | |||
* Parse the directive... | |||
*/ | |||
directive=line+1; | |||
while (*directive == ' ' || *directive == '\t') | |||
directive++; | |||
p = directive; | |||
while (*p >= 'a' && *p <= 'z') | |||
p++; | |||
savechar = *p; | |||
*p = '\0'; | |||
ret = match(directive, directives); | |||
*p = savechar; | |||
/* If we don't recognize this compiler directive or we happen to just | |||
* be gobbling up text while waiting for an #endif or #elif or #else | |||
* in the case of an #elif we must check the zero_value and return an | |||
* ELIF or an ELIFFALSE. | |||
*/ | |||
if (ret == ELIF && !parse_it) | |||
{ | |||
while (*p == ' ' || *p == '\t') | |||
p++; | |||
/* | |||
* parse an expression. | |||
*/ | |||
debug(0,("%s, line %d: #elif %s ", | |||
file->i_file, filep->f_line, p)); | |||
ret = zero_value(p, filep, file_red); | |||
if (ret != IF) | |||
{ | |||
debug(0,("false...\n")); | |||
if (ret == IFFALSE) | |||
return(ELIFFALSE); | |||
else | |||
return(ELIFGUESSFALSE); | |||
} | |||
else | |||
{ | |||
debug(0,("true...\n")); | |||
return(ELIF); | |||
} | |||
} | |||
if (ret < 0 || ! parse_it) | |||
return(ret); | |||
/* | |||
* now decide how to parse the directive, and do it. | |||
*/ | |||
while (*p == ' ' || *p == '\t') | |||
p++; | |||
switch (ret) { | |||
case IF: | |||
/* | |||
* parse an expression. | |||
*/ | |||
ret = zero_value(p, filep, file_red); | |||
debug(0,("%s, line %d: %s #if %s\n", | |||
file->i_file, filep->f_line, ret?"false":"true", p)); | |||
break; | |||
case IFDEF: | |||
case IFNDEF: | |||
debug(0,("%s, line %d: #%s %s\n", | |||
file->i_file, filep->f_line, directives[ret], p)); | |||
case UNDEF: | |||
/* | |||
* separate the name of a single symbol. | |||
*/ | |||
while (isalnum(*p) || *p == '_') | |||
*line++ = *p++; | |||
*line = '\0'; | |||
break; | |||
case INCLUDE: | |||
debug(2,("%s, line %d: #include %s\n", | |||
file->i_file, filep->f_line, p)); | |||
/* Support ANSI macro substitution */ | |||
{ | |||
struct symtab *sym = isdefined(p, file_red, NULL); | |||
while (sym) { | |||
p = sym->s_value; | |||
debug(3,("%s : #includes SYMBOL %s = %s\n", | |||
file->i_incstring, | |||
sym -> s_name, | |||
sym -> s_value)); | |||
/* mark file as having included a 'soft include' */ | |||
file->i_included_sym = TRUE; | |||
sym = isdefined(p, file_red, NULL); | |||
} | |||
} | |||
/* | |||
* Separate the name of the include file. | |||
*/ | |||
while (*p && *p != '"' && *p != '<') | |||
p++; | |||
if (! *p) | |||
return(-2); | |||
if (*p++ == '"') { | |||
ret = INCLUDEDOT; | |||
while (*p && *p != '"') | |||
*line++ = *p++; | |||
} else | |||
while (*p && *p != '>') | |||
*line++ = *p++; | |||
*line = '\0'; | |||
break; | |||
case DEFINE: | |||
/* | |||
* copy the definition back to the beginning of the line. | |||
*/ | |||
strcpy (line, p); | |||
break; | |||
case ELSE: | |||
case ENDIF: | |||
case ELIF: | |||
case PRAGMA: | |||
case ERROR: | |||
case IDENT: | |||
case SCCS: | |||
case EJECT: | |||
debug(0,("%s, line %d: #%s\n", | |||
file->i_file, filep->f_line, directives[ret])); | |||
/* | |||
* nothing to do. | |||
*/ | |||
break; | |||
} | |||
return(ret); | |||
} | |||
struct symtab *isdefined(symbol, file, srcfile) | |||
register char *symbol; | |||
struct inclist *file; | |||
struct inclist **srcfile; | |||
{ | |||
register struct symtab *val; | |||
if (val = slookup(symbol, &maininclist)) { | |||
debug(1,("%s defined on command line\n", symbol)); | |||
if (srcfile != NULL) *srcfile = &maininclist; | |||
return(val); | |||
} | |||
if (val = fdefined(symbol, file, srcfile)) | |||
return(val); | |||
debug(1,("%s not defined in %s\n", symbol, file->i_file)); | |||
return(NULL); | |||
} | |||
struct symtab *fdefined(symbol, file, srcfile) | |||
register char *symbol; | |||
struct inclist *file; | |||
struct inclist **srcfile; | |||
{ | |||
register struct inclist **ip; | |||
register struct symtab *val; | |||
register int i; | |||
static int recurse_lvl = 0; | |||
if (file->i_defchecked) | |||
return(NULL); | |||
file->i_defchecked = TRUE; | |||
if (val = slookup(symbol, file)) | |||
debug(1,("%s defined in %s as %s\n", symbol, file->i_file, val->s_value)); | |||
if (val == NULL && file->i_list) | |||
{ | |||
for (ip = file->i_list, i=0; i < file->i_listlen; i++, ip++) | |||
if (val = fdefined(symbol, *ip, srcfile)) { | |||
break; | |||
} | |||
} | |||
else if (val != NULL && srcfile != NULL) *srcfile = file; | |||
recurse_lvl--; | |||
file->i_defchecked = FALSE; | |||
return(val); | |||
} | |||
/* | |||
* Return type based on if the #if expression evaluates to 0 | |||
*/ | |||
zero_value(exp, filep, file_red) | |||
register char *exp; | |||
register struct filepointer *filep; | |||
register struct inclist *file_red; | |||
{ | |||
if (cppsetup(exp, filep, file_red)) | |||
return(IFFALSE); | |||
else | |||
return(IF); | |||
} | |||
define(def, file) | |||
char *def; | |||
struct inclist *file; | |||
{ | |||
char *val; | |||
/* Separate symbol name and its value */ | |||
val = def; | |||
while (isalnum(*val) || *val == '_') | |||
val++; | |||
if (*val) | |||
*val++ = '\0'; | |||
while (*val == ' ' || *val == '\t') | |||
val++; | |||
if (!*val) | |||
val = "1"; | |||
define2(def, val, file); | |||
} | |||
define2(name, val, file) | |||
char *name, *val; | |||
struct inclist *file; | |||
{ | |||
int first, last, below; | |||
register struct symtab *sp = NULL, *dest; | |||
/* Make space if it's needed */ | |||
if (file->i_defs == NULL) | |||
{ | |||
file->i_defs = (struct symtab *) | |||
malloc(sizeof (struct symtab) * SYMTABINC); | |||
file->i_deflen = SYMTABINC; | |||
file->i_ndefs = 0; | |||
} | |||
else if (file->i_ndefs == file->i_deflen) | |||
file->i_defs = (struct symtab *) | |||
realloc(file->i_defs, | |||
sizeof(struct symtab)*(file->i_deflen+=SYMTABINC)); | |||
if (file->i_defs == NULL) | |||
fatalerr("malloc()/realloc() failure in insert_defn()\n"); | |||
below = first = 0; | |||
last = file->i_ndefs - 1; | |||
while (last >= first) | |||
{ | |||
/* Fast inline binary search */ | |||
register char *s1; | |||
register char *s2; | |||
register int middle = (first + last) / 2; | |||
/* Fast inline strchr() */ | |||
s1 = name; | |||
s2 = file->i_defs[middle].s_name; | |||
while (*s1++ == *s2++) | |||
if (s2[-1] == '\0') break; | |||
/* If exact match, set sp and break */ | |||
if (*--s1 == *--s2) | |||
{ | |||
sp = file->i_defs + middle; | |||
break; | |||
} | |||
/* If name > i_defs[middle] ... */ | |||
if (*s1 > *s2) | |||
{ | |||
below = first; | |||
first = middle + 1; | |||
} | |||
/* else ... */ | |||
else | |||
{ | |||
below = last = middle - 1; | |||
} | |||
} | |||
/* Search is done. If we found an exact match to the symbol name, | |||
just replace its s_value */ | |||
if (sp != NULL) | |||
{ | |||
free(sp->s_value); | |||
sp->s_value = copy(val); | |||
return; | |||
} | |||
sp = file->i_defs + file->i_ndefs++; | |||
dest = file->i_defs + below + 1; | |||
while (sp > dest) | |||
{ | |||
*sp = sp[-1]; | |||
sp--; | |||
} | |||
sp->s_name = copy(name); | |||
sp->s_value = copy(val); | |||
} | |||
struct symtab *slookup(symbol, file) | |||
register char *symbol; | |||
register struct inclist *file; | |||
{ | |||
register int first = 0; | |||
register int last = file->i_ndefs - 1; | |||
if (file) while (last >= first) | |||
{ | |||
/* Fast inline binary search */ | |||
register char *s1; | |||
register char *s2; | |||
register int middle = (first + last) / 2; | |||
/* Fast inline strchr() */ | |||
s1 = symbol; | |||
s2 = file->i_defs[middle].s_name; | |||
while (*s1++ == *s2++) | |||
if (s2[-1] == '\0') break; | |||
/* If exact match, we're done */ | |||
if (*--s1 == *--s2) | |||
{ | |||
return file->i_defs + middle; | |||
} | |||
/* If symbol > i_defs[middle] ... */ | |||
if (*s1 > *s2) | |||
{ | |||
first = middle + 1; | |||
} | |||
/* else ... */ | |||
else | |||
{ | |||
last = middle - 1; | |||
} | |||
} | |||
return(NULL); | |||
} | |||
undefine(symbol, file) | |||
char *symbol; | |||
register struct inclist *file; | |||
{ | |||
register struct symtab *ptr; | |||
struct inclist *srcfile; | |||
while ((ptr = isdefined(symbol, file, &srcfile)) != NULL) | |||
{ | |||
srcfile->i_ndefs--; | |||
for (; ptr < srcfile->i_defs + srcfile->i_ndefs; ptr++) | |||
*ptr = ptr[1]; | |||
} | |||
} |
@@ -1,130 +0,0 @@ | |||
/* $XConsortium: pr.c,v 1.17 94/04/17 20:10:38 gildea Exp $ */ | |||
/* | |||
Copyright (c) 1993, 1994 X Consortium | |||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||
of this software and associated documentation files (the "Software"), to deal | |||
in the Software without restriction, including without limitation the rights | |||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
copies of the Software, and to permit persons to whom the Software is | |||
furnished to do so, subject to the following conditions: | |||
The above copyright notice and this permission notice shall be included in | |||
all copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | |||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
Except as contained in this notice, the name of the X Consortium shall not be | |||
used in advertising or otherwise to promote the sale, use or other dealings | |||
in this Software without prior written authorization from the X Consortium. | |||
*/ | |||
#include "def.h" | |||
extern struct inclist inclist[ MAXFILES ], | |||
*inclistp; | |||
extern char *objprefix; | |||
extern char *objsuffix; | |||
extern int width; | |||
extern boolean printed; | |||
extern boolean verbose; | |||
extern boolean show_where_not; | |||
add_include(filep, file, file_red, include, dot, failOK) | |||
struct filepointer *filep; | |||
struct inclist *file, *file_red; | |||
char *include; | |||
boolean dot; | |||
{ | |||
register struct inclist *newfile; | |||
register struct filepointer *content; | |||
/* | |||
* First decide what the pathname of this include file really is. | |||
*/ | |||
newfile = inc_path(file->i_file, include, dot); | |||
if (newfile == NULL) { | |||
if (failOK) | |||
return; | |||
if (file != file_red) | |||
warning("%s (reading %s, line %d): ", | |||
file_red->i_file, file->i_file, filep->f_line); | |||
else | |||
warning("%s, line %d: ", file->i_file, filep->f_line); | |||
warning1("cannot find include file \"%s\"\n", include); | |||
show_where_not = TRUE; | |||
newfile = inc_path(file->i_file, include, dot); | |||
show_where_not = FALSE; | |||
} | |||
if (newfile) { | |||
included_by(file, newfile); | |||
if (!newfile->i_searched) { | |||
newfile->i_searched = TRUE; | |||
content = getfile(newfile->i_file); | |||
find_includes(content, newfile, file_red, 0, failOK); | |||
freefile(content); | |||
} | |||
} | |||
} | |||
recursive_pr_include(head, file, base) | |||
register struct inclist *head; | |||
register char *file, *base; | |||
{ | |||
register int i; | |||
if (head->i_marked) | |||
return; | |||
head->i_marked = TRUE; | |||
if (head->i_file != file) | |||
pr(head, file, base); | |||
for (i=0; i<head->i_listlen; i++) | |||
recursive_pr_include(head->i_list[ i ], file, base); | |||
} | |||
pr(ip, file, base) | |||
register struct inclist *ip; | |||
char *file, *base; | |||
{ | |||
static char *lastfile; | |||
register int len, i; | |||
char buf[ BUFSIZ ]; | |||
#ifdef WIN32 | |||
char *transfile = TranslateFileNameD2U(ip->i_file,0); | |||
#else | |||
char *transfile = ip->i_file; | |||
#endif | |||
printed = TRUE; | |||
if (file != lastfile) { | |||
lastfile = file; | |||
sprintf(buf, "%s%s%s %s.d: %s", objprefix, base, objsuffix, | |||
base, transfile); | |||
} | |||
else { | |||
sprintf(buf, " \\\n %s", transfile); | |||
} | |||
fwrite(buf, strlen(buf), 1, stdout); | |||
/* | |||
* If verbose is set, then print out what this file includes. | |||
*/ | |||
if (! verbose || ip->i_list == NULL || ip->i_notified) | |||
return; | |||
ip->i_notified = TRUE; | |||
lastfile = NULL; | |||
printf("\n# %s includes:", transfile); | |||
for (i=0; i<ip->i_listlen; i++) | |||
printf("\n#\t%s", ip->i_list[ i ]->i_incstring); | |||
#ifdef WIN32 | |||
free(transfile); | |||
#endif | |||
} |