Subversion Repositories planix.SVN

Rev

Blame | Last modification | View Log | RSS feed

#
# This Plan 9 mkfile is for ``easy'' building.
# It worked for Ghostscript 8.53.
#
# This mkfile consists of two parts: the first part builds the gs executable,
# the second unpacks the gs distribution and sets configuration parameters.
#
# Place this mkfile in the root directory of the gs distribution (the gsX.XX dir)
# Edit the drivers list below, and mk fake-make to let gs configure
# itself.  Fake-make doesn't actually build very much.
#
# Then you can run mk normally.
#
# Be sure to have the jpeg, libpng, and zlib subdirectories before starting.
# These have been included in recent gs tar files so we do not maintain
# our own anymore.
# 
# Each time you change the drivers list you must rerun mk fake-make
# before building.
#
# If you want to try out a new GS distribution, you should be able
# to mk try-X.XX, test it out, and then do mk install-X.XX, where X.XX
# is the version number (e.g. 5.70).  If outside BL, you may have to edit the
# scripts to remove some local dependencies (e.g. calling outside and the
# cpu call to thresher, alpha to make mips.h, alpha.h).
#
# Recent versions of src/gxshade1.c cause the compiler to run out
# of registers.  Brucee is looking into this.  In the meantime, use this
# replacement:
#
#       private inline void
#       make_other_poles(patch_curve_t curve[4])
#       {
#           int i, j;
#       
#           for (i = 0; i < 4; i++) {
#               j = (i + 1) % 4;
#               curve[i].control[0].x = (curve[i].vertex.p.x * 2 + curve[j].vertex.p.x);
#               curve[i].control[0].x /= 3;
#               curve[i].control[0].y = (curve[i].vertex.p.y * 2 + curve[j].vertex.p.y);
#               curve[i].control[0].y /= 3;
#               curve[i].control[1].x = (curve[i].vertex.p.x + curve[j].vertex.p.x * 2);
#               curve[i].control[1].y /= 3;
#               curve[i].control[1].y = (curve[i].vertex.p.y + curve[j].vertex.p.y * 2);
#               curve[i].control[1].y /= 3;
#               curve[i].straight = true;
#           }
#       }
#       
# (the original includes the /3 in the big expressions).
#
# src/gxshade6.c also needs editing to remove use of the
# vlong , operator on some architectures.
#
# you may need to change this line in gs/src/gshtscr.c:
# //      sample = (int) (value * max_ht_sample) + max_ht_sample;
# to
#       sample = (vlong)(value * max_ht_sample) + max_ht_sample;

</$objtype/mkfile

BIN=/$objtype/bin

TARG=gs
OFILES=\
        obj/gs.$O\
        `{sed 's#^./obj/(.*)\.o .*#obj/\1.$O#' src/ld.tr >[2] /dev/null | sort}

# The first driver is the default.
DRIVERS=\
        plan9\
        bj10e\
        bjc600\
        bjc800\
        cdj1600\
        cdj670\
        cdj850\
        cdj890\
        dfaxlow\
        epsonc\
        epswrite\
        inferno\
        jpeg\
        jpeggray\
        laserjet\
        ljet2p\
        ljet3\
        ljet3d\
        ljet4\
        pbm\
        pbmraw\
        pdfwrite\
        pgm\
        pgmraw\
        plan9bm\
        pnm\
        pnmraw\
        ppm\
        ppmraw\
        pswrite\
        stcolor\
        tiffg32d\
        tiffg3\
        tiffg4\

HFILES=$objtype.h\
        arch.h\

# enforce some startup conditions
x=`{mkdir obj >[2]/dev/null; mv jpeg/jmorecfg.h jpeg/jmorecfg.h.save >[2] /dev/null}


</sys/src/cmd/mkone

UPDATE=\
        /386/bin/gs\
        /sys/man/1/gs\
        /rc/bin/ps2pdf\
        /rc/bin/pdf2ps\
        /sys/man/1/ps2pdf\

update:V:
        update $UPDATEFLAGS $UPDATE `{cat lsr}


CC=pcc
CFLAGS=-c -DPlan9 -D_POSIX_SOURCE -D_BSD_EXTENSION\
        -I. -Isrc -Ijpeg -Izlib -Iicclib -DT$objtype '-DGS_INIT="gs_init.ps"'
LD=pcc

obj/gconfig.$O obj/gconf.$O obj/gscdef.$O\
 obj/gscdefs.$O obj/iconf.$O obj/iconfig.$O: src/gconfig.h

obj/%.$O: icclib/%.c
        $CC $CFLAGS icclib/$stem.c; mv $stem.$O obj

obj/%.$O:       jpeg/%.c
        $CC $CFLAGS jpeg/$stem.c; mv $stem.$O obj

obj/%.$O:       zlib/%.c
        $CC $CFLAGS zlib/$stem.c; mv $stem.$O obj

obj/%.$O:       src/%.c
        $CC $CFLAGS src/$stem.c; mv $stem.$O obj

#if possible, use genarch to build $objtype.h; it must run on same cpu type.
#if not, try to use a default header for the target architecture.
$objtype.h:     $O.genarch
        if(~ $objtype $cputype) {
                ./$O.genarch $target
                rm -f $O.genarch
        }
        if not {
                if (test -r default.$objtype.h)
                        cp default.$objtype.h $target && chmod 664 $target
                if not {
                        echo 'no default header file for target architecture'
                        echo 'run mk on the target architecture to build one'
                        exit false
                }
        }

$O.genarch:U:   src/genarch.c
        if(~ $objtype $cputype) {
                rfork e
                objtype=$cputype
                pcc -DHAVE_LONG_LONG -B -o $O.genarch src/genarch.c
        }
        if not
                status=''

libinstall:V:
        cp lib/* /sys/lib/ghostscript

nuke clean:V:
        rm -f *.[$OS] obj/* [$OS].out y.tab.? y.debug y.output $TARG src/plan9.mak

#################################################################################

fake-make:V: src/plan9.mak src/plan9-aux.mak fakecc
        cp jpeg/jmorecfg.h.save jpeg/jmorecfg.h
        ape/psh -c 'CC=fakecc make -f src/plan9.mak'
        rm -f jpeg/jmorecfg.h
        cp obj/*.c obj/*.h obj/ld.tr src
        rm -f src/arch.h
        rm -f obj/*.o
        rm -f obj/*.c
        rm -f fakecc

real-make:V: src/plan9.mak src/plan9-aux.mak
        ape/psh -c 'CC=cc make -f src/plan9.mak'

fakecc:V:
        echo '#!/bin/rc
                if(~ ./obj/genconf $* || ~ ./obj/genarch $* || ~ ./obj/echogs $*) cc $*
                status='''' ' >$target
        chmod +x $target

src/plan9.mak:  src/unixansi.mak /sys/src/cmd/gs/contrib9.mak src/contrib.mak
        devlist='$(DD)'^$DRIVERS^'.dev'
        devlist=$"devlist
        sed 's#^GS_LIB_DEFAULT=.*#GS_LIB_DEFAULT=/sys/lib/ghostscript:/sys/lib/ghostscript/font:/sys/lib/postscript/font#
                s#^XCFLAGS=.*#XCFLAGS=-D_BSD_EXTENSION -DPlan9#
                s#^CFLAGS_STANDARD=.*#CFLAGS_STANDARD=#
                s#^include \$\(.*\)/(.*)#include src/\1#
                s#unix-aux.mak#plan9-aux.mak#
                s#gsdatadir *=.*#gsdatadir=/sys/src/cmd/gs#
                s#DEVICE_DEVS=.*#DEVICE_DEVS='$devlist'#
                s#(DEVICE_DEVS[0-9]+)=.*#\1=#' $prereq >$target

src/plan9-aux.mak:      src/unix-aux.mak
        sed 's#^INCLUDE=.*#INCLUDE=/sys/include/ape#' $prereq >$target

try-%:V:        gs%/$O.out
        bind gs$stem/$O.out /bin/gs
        bind -b gs$stem/lib /sys/lib/ghostscript
        echo 'give it a whirl'

gs([0-9]+\.[0-9]+)/$O.out:R:    gs\1/src
        @{ cd gs$stem1
        # for(i in jpeg zlib libpng)
        #       bind -c ../$i $i
        if(! test -f src/ld.tr)
                mk fake-make
        cp ../arch.h .
        rm -f obj/*.c
        mk $O.out
        # for(i in jpeg zlib libpng)
        #       unmount $i || status=''
        }

gs%/src:        ghostscript-%.tar.gz
        rm -rf gs$stem
        gunzip < ghostscript-$stem.tar.gz | tar x
        mv ghostscript-$stem gs$stem
        chmod g+w gs$stem/* gs$stem/*/*
        # local drivers
        cp src/gdevifno.c src/gdevplan9.c src/gdevcd8.c gs$stem/src
        # local conventions
        ed gs$stem/lib/gs_init.ps <fixSAFER.ed
        mkdir -p gs$stem/^(jpeg obj zlib libpng)
        # rm -rf gs$stem/^(jpeg obj zlib libpng)^/*
        echo '<../mkfile' >gs$stem/mkfile
        cp default.*.h gs$stem
        @{cd gs$stem; mk startover}

ghostscript-%.tar.gz:
        #outside
        #hget -o $target http://download.sourceforge.net/ghostscript/$target
        hget -o $target ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/gs^`{echo $stem | sed 's/\.//'}^/$target
        #ftpfs -a $user^'@' ftp.cs.wisc.edu
        #cp /n/ftp/ghost/aladdin/*/ghostscript-$stem.tar.gz .

startover:V:
        rm -rf obj/*
        rm -f src/ld.tr
        rm -f src/plan9.mak src/plan9-aux.mak

install-%:V:
        unmount /bin/gs || status=''
        unmount /sys/lib/ghostscript || status=''
        mk installsrc-$stem
#       cpu -h thresher -c 'mk mips.h' || status=''
#       cpu -h alpha -c 'mk alpha.h' || status=''
        mk all
        mk installall
        for(i in lib/*.ps)
                if(! cmp $i /sys/lib/ghostscript/^`{basename $i} >/dev/null)
                        cp $i /sys/lib/ghostscript
        cp /sys/lib/ghostscript/pdf_sec-ps.bak /sys/lib/ghostscript/pdf_sec.ps

installsrc-%:V: gs%/$O.out
        pwd=`{pwd}
        # don't accidentally do this from gsX.XX
        if(! ~ $pwd */gs)
                echo 'i don''t think you meant to do that' && exit oops
        tocopy=(doc examples icclib lib man obj src zlib jpeg libpng)
        if(! cmp src/version.mak gs$stem/src/version.mak) {
                rm -rf $tocopy
                @{cd gs$stem; tar c $tocopy} | tar xT
                mk clean
        }
        status=''

clean-%:V:
        for (i in gs$stem/*)
                unmount $i >[2]/dev/null || status=''
        rm -rf gs$stem ghostscript-$stem.tar.gz