shithub: freetype+ttf2subf

Download patch

ref: 26fb1bcd05afc1d61ad80cd7313aa5a88713e78b
parent: 75ad4b83652737d3323ccddfb322accb6cb90676
author: Werner Lemberg <[email protected]>
date: Wed May 28 02:27:26 EDT 2003

* vms_make.com: Reworked support for shareable images on VMS.  The
first version was kind of a hack; the current implementation of the
procedure to extract the required symbols is much cleaner.

Reworked creation of MMS files, avoiding a number of temporary files
which were created in the previous version.

Further work on creating descrip.mms files on the fly.

* builds/vms/descrip.mms, src/autohint/descrip.mms,
src/type1/descrip.mms: Removed.

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2003-05-28  Martin Zinser  <[email protected]>
+
+	* vms_make.com: Reworked support for shareable images on VMS.  The
+	first version was kind of a hack; the current implementation of the
+	procedure to extract the required symbols is much cleaner.
+
+	Reworked creation of MMS files, avoiding a number of temporary files
+	which were created in the previous version.
+
+	Further work on creating descrip.mms files on the fly.
+
+	* builds/vms/descrip.mms, src/autohint/descrip.mms,
+	src/type1/descrip.mms: Removed.
+
 2003-05-28  Werner Lemberg  <[email protected]>
 
 	* src/pshinter/pshalgo3.c (psh3_glyph_compute_extrema): Skip
--- a/builds/vms/descrip.mms
+++ /dev/null
@@ -1,25 +1,0 @@
-#
-# FreeType 2 system rules for VMS
-#
-
-
-# Copyright 2001 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT.  By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([],[--.include],[--.src.base])
-
-OBJS=ftsystem.obj
-
-all : $(OBJS)
-        library/create [--.lib]freetype.olb $(OBJS)
-
-ftsystem.obj : ftsystem.c ftconfig.h
-
-# EOF
--- a/src/autohint/descrip.mms
+++ /dev/null
@@ -1,25 +1,0 @@
-#
-# FreeType 2 auto-hinter module compilation rules for VMS
-#
-
-
-# Copyright 2001, 2002 Catharon Productions Inc.
-#
-# This file is part of the Catharon Typography Project and shall only
-# be used, modified, and distributed under the terms of the Catharon
-# Open Source License that should come with this file under the name
-# `CatharonLicense.txt'.  By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-#
-# Note that this license is compatible with the FreeType license.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/incl=([--.include],[--.src.autohint])
-
-OBJS=autohint.obj
-
-all : $(OBJS)
-        library [--.lib]freetype.olb $(OBJS)
-
-# EOF
--- a/src/type1/descrip.mms
+++ /dev/null
@@ -1,23 +1,0 @@
-#
-# FreeType 2 Type1 driver compilation rules for VMS
-#
-
-
-# Copyright 1996-2000, 2002 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
-#
-# This file is part of the FreeType project, and may only be used, modified,
-# and distributed under the terms of the FreeType project license,
-# LICENSE.TXT.  By continuing to use, modify, or distribute this file you
-# indicate that you have read the license and understand and accept it
-# fully.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.type1])
-
-OBJS=type1.obj
-
-all : $(OBJS)
-        library [--.lib]freetype.olb $(OBJS)
-
-# EOF
--- a/vms_make.com
+++ b/vms_make.com
@@ -46,6 +46,7 @@
 $!
 $! Pull in external libraries
 $!
+$ create libs.opt
 $ gosub check_create_vmslib
 $!
 $! Create objects
@@ -57,7 +58,6 @@
 $ gosub crea_mms
 $!
 $ 'Make' /macro=(comp_flags="''ccopt'")
-$ delete/nolog/noconf temp.mms;*,descrip.fdl;*
 $ purge/nolog [...]descrip.mms
 $!
 $! Add them to options
@@ -70,11 +70,6 @@
 $    goto floop
 $  endif 
 $!
-$! Pull in external libraries
-$!
-$ gosub check_create_vmslib
-$!
-$ if s_case then WRITE optf "case_sensitive=YES"
 $ close optf
 $!
 $!
@@ -82,10 +77,13 @@
 $!
 $ If f$getsyi("HW_MODEL") .gt. 1024
 $ Then
-$   LINK_/NODEB/NOSHARE/NOEXE/MAP='mapfile'/full 'optfile'/opt
-$   call anal_map_axp 'mapfile' _link.opt
-$   LINK_/NODEB/SHARE=[.lib]freetype2shr.exe 'optfile'/opt,_link.opt/opt
-$   dele/noconf 'mapfile';*
+$   write sys$output "Creating freetype2shr.exe"
+$   call anal_obj_axp 'optfile' _link.opt
+$   open/append  optf 'optfile'
+$   if s_case then WRITE optf "case_sensitive=YES"
+$   close optf
+$   LINK_/NODEB/SHARE=[.lib]freetype2shr.exe - 
+                            'optfile'/opt,libs.opt/opt,_link.opt/opt
 $ endif
 $!
 $ exit
@@ -97,7 +95,9 @@
 $CREA_MMS:
 $ write sys$output "Creating descrip.mms files ..."
 $ write sys$output "... Main directory"
-$ copy sys$input: descrip.mms
+$ create descrip.mms
+$ open/append out descrip.mms
+$ copy sys$input: out
 $ deck
 #
 # FreeType 2 build system -- top-level Makefile for OpenVMS
@@ -112,8 +112,12 @@
 # LICENSE.TXT.  By continuing to use, modify, or distribute this file you
 # indicate that you have read the license and understand and accept it
 # fully.
+$ EOD
+$ write out "CFLAGS = ", ccopt
+$ copy sys$input: out
+$ deck
+ 
 
-
 all :
         define freetype [--.include.freetype] 
         define psaux [-.psaux] 
@@ -175,14 +179,75 @@
 
 # EOF
 $ eod
-$ anal/rms/fdl descrip.mms
-$ create/fdl=descrip.fdl temp.mms 
-$ open/append mmsf temp.mms 
-$ write mmsf "CFLAGS = ", ccopt
-$ close mmsf
-$ copy temp.mms,descrip.mms;-1 descrip.mms 
+$ close out
+$ write sys$output "... [.builds.vms] directory"
+$ create [.builds.vms]descrip.mms
+$ open/append out [.builds.vms]descrip.mms
+$ copy sys$input: out
+$ deck
+#
+# FreeType 2 system rules for VMS
+#
+
+
+# Copyright 2001 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT.  By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([],[--.include],[--.src.base])
+
+OBJS=ftsystem.obj
+
+all : $(OBJS)
+        library/create [--.lib]freetype.olb $(OBJS)
+
+ftsystem.obj : ftsystem.c ftconfig.h
+
+# EOF
+$ eod
+$ close out
+$ write sys$output "... [.src.autohint] directory"
+$ create [.src.autohint]descrip.mms
+$ open/append out [.src.autohint]descrip.mms
+$ copy sys$input: out
+$ deck
+#
+# FreeType 2 auto-hinter module compilation rules for VMS
+#
+
+
+# Copyright 2001, 2002 Catharon Productions Inc.
+#
+# This file is part of the Catharon Typography Project and shall only
+# be used, modified, and distributed under the terms of the Catharon
+# Open Source License that should come with this file under the name
+# `CatharonLicense.txt'.  By continuing to use, modify, or distribute
+# this file you indicate that you have read the license and
+# understand and accept it fully.
+#
+# Note that this license is compatible with the FreeType license.
+
+
+CFLAGS=$(COMP_FLAGS)$(DEBUG)/incl=([--.include],[--.src.autohint])
+
+OBJS=autohint.obj
+
+all : $(OBJS)
+        library [--.lib]freetype.olb $(OBJS)
+
+# EOF
+$ eod
+$ close out
 $ write sys$output "... [.src.gzip] directory"
-$ copy sys$input: [.src.gzip]descrip.mms
+$ create [.src.gzip]descrip.mms
+$ open/append out [.src.gzip]descrip.mms
+$ copy sys$input: out
 $ deck
 #
 # FreeType 2 GZip support compilation rules for VMS
@@ -197,8 +262,11 @@
 # LICENSE.TXT.  By continuing to use, modify, or distribute this file you
 # indicate that you have read the license and understand and accept it
 # fully.
+$EOD
+$ if libincs .nes. "" then write out "LIBINCS = ", libincs, ","
+$ copy sys$input: out
+$ deck
 
-
 CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=($(LIBINCS)[--.include],[--.src.gzip])
 
 OBJS=ftgzip.obj
@@ -208,14 +276,39 @@
 
 # EOF
 $ eod
-$ create/fdl=descrip.fdl temp.mms
-$ if libincs .nes. ""
-$ then
-$   open/append mmsf temp.mms
-$   write mmsf "LIBINCS = ", libincs, ","
-$   close mmsf
-$   copy temp.mms,[.src.gzip]descrip.mms;-1 [.src.gzip]descrip.mms 
-$ endif
+$ close out
+$ write sys$output "... [.src.type1] directory"
+$ create [.src.type1]descrip.mms
+$ open/append out [.src.type1]descrip.mms
+$ copy sys$input: out
+$ deck
+#
+# FreeType 2 Type1 driver compilation rules for VMS
+#
+
+
+# Copyright 1996-2000, 2002 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT.  By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.type1])
+
+OBJS=type1.obj
+
+all : $(OBJS)
+        library [--.lib]freetype.olb $(OBJS)
+
+type1.obj : type1.c t1parse.c t1load.c t1objs.c t1driver.c t1gload.c t1afm.c
+
+# EOF
+$ eod
+$ close out
 $ return
 $!------------------------------------------------------------------------------
 $!
@@ -295,6 +388,7 @@
 $! Open data file with location of libraries
 $!
 $ open/read/end=end_lib/err=lib_err libdata VMSLIB.DAT
+$ open/append loptf libs.opt
 $LIB_LOOP:
 $ read/end=end_lib libdata libline
 $ libline = f$edit(libline, "UNCOMMENT,COLLAPSE")
@@ -332,113 +426,89 @@
 $ lqual = "/lib"
 $ libtype = f$parse(libloc,,,"TYPE")
 $ if f$locate("EXE",libtype) .lt. f$length(libtype) then lqual = "/share"
-$ write optf libloc , lqual
-$!
-$! Yet another special treatment for Xpm/X11
-$!
-$ if (libname .eqs. "XPM")
-$ then
-$   my_x11 = f$parse("''libsrc'xpm.h",,,"device") + - 
-             f$parse("''libsrc'xpm.h",,,"directory")
-$   x11_save = f$trnlnm("X11")
-$   define x11 'my_x11',decw$include   
-$ endif 
+$ write loptf libloc , lqual
 $ goto LIB_LOOP
 $END_LIB:
 $ close libdata
+$ close loptf
 $ libincs = libincs - ","
 $ libdefs = libdefs - ","
 $ return
-$!------------------------------------------------------------------------------$$!------------------------------------------------------------------------------
+$!------------------------------------------------------------------------------
 $!
-$! Analyze Map for OpenVMS AXP
+$! Analyze Object files for OpenVMS AXP to extract Procedure and Data 
+$! information to build a symbol vector for a shareable image
+$! All the "brains" of this logic was suggested by Hartmut Becker
+$! ([email protected]). All the bugs were introduced by me
+$! ([email protected]), so if you do have problem reports please do not
+$! bother Hartmut/HP, but get in touch with me
 $!
-$ ANAL_MAP_AXP: Subroutine   
+$ ANAL_OBJ_AXP: Subroutine   
 $ V = 'F$Verify(0)
-$ SET SYMBOL/GENERAL/SCOPE=(NOLOCAL,NOGLOBAL)
 $ SAY := "WRITE_ SYS$OUTPUT"
 $ 
 $ IF F$SEARCH("''P1'") .EQS. ""
 $ THEN
-$    SAY "  ANAL_MAP_AXP:  Error, no mapfile provided"
+$    SAY "ANAL_OBJ_AXP-E-NOSUCHFILE:  Error, inputfile ''p1' not available"
 $    goto exit_aa
 $ ENDIF
 $ IF "''P2'" .EQS. ""
 $ THEN
-$    SAY "  ANALYZE_MAP_AXP:  Error, no output file provided"
+$    SAY "ANAL_OBJ_AXP:  Error, no output file provided"
 $    goto exit_aa
 $ ENDIF
 $
-$ LINK_TMP  = F$PARSE(P2,,,"DEVICE")+F$PARSE(P2,,,"DIRECTORY")+F$PARSE(P2,,,"NAME")+".TMP"
-$
-$ SAY "  creating PSECT list in ''P2'"
-$ OPEN_/READ IN 'P1'
-$ OPEN_/WRITE OUT 'P2'
-$ WRITE_ OUT "!"
-$ WRITE_ OUT "! ### PSECT list extracted from ''P1'"
-$ WRITE_ OUT "!" 
-$ LOOP_PSECT_SEARCH:
-$    READ_/END=EOF_PSECT IN REC
-$    if F$EXTRACT(0,5,REC) .nes. "$DATA" then goto LOOP_PSECT_SEARCH
-$ LAST = ""
-$ LOOP_PSECT:
-$    READ_/END=EOF_PSECT IN REC
-$    if F$EXTRACT(0,1,REC) .eqs. "$" .and. F$EXTRACT(0,5,REC) .nes. "$DATA" then goto EOF_PSECT
-$    if REC - "NOPIC,OVR,REL,GBL,NOSHR,NOEXE,  WRT,NOVEC" .nes. REC
-$    then 
-$       J = F$LOCATE(" ",REC)
-$       S = F$EXTRACT(0,J,REC)
-$       IF S .EQS. LAST THEN GOTO LOOP_PSECT
-$       WRITE_ OUT "symbol_vector = (" +  S + " = PSECT)"
-$       P$_'S= 1
-$       LAST = S
-$    endif
-$    GOTO LOOP_PSECT
-$
-$ EOF_PSECT:
-$    CLOSE_ IN
-$    CLOSE_ OUT 
+$ open/read in 'p1
+$ create a.tmp
+$ open/append atmp a.tmp
+$ loop:
+$ read/end=end_loop in line
+$ f= f$search(line)
+$ if f .eqs. ""
+$ then
+$	write sys$output "ANAL_OBJ_AXP-w-nosuchfile, ''line'"
+$	goto loop
+$ endif
+$ def/user sys$output nl:
+$ def/user sys$error nl:
+$ anal/obj/gsd 'f /out=x.tmp
+$ open/read xtmp x.tmp
+$ XLOOP:
+$ read/end=end_xloop xtmp xline
+$ xline = f$edit(xline,"compress")
+$ write atmp xline
+$ goto xloop
+$ END_XLOOP:
+$ close xtmp
+$ goto loop
+$ end_loop:
+$ close in
+$ close atmp
+$ if f$search("a.tmp") .eqs. "" -
+	then $ exit
+$ ! all global definitions
+$ search a.tmp "symbol:","EGSY$V_DEF 1","EGSY$V_NORM 1"/out=b.tmp
+$ ! all procedures
+$ search b.tmp "EGSY$V_NORM 1"/wind=(0,1) /out=c.tmp
+$ search c.tmp "symbol:"/out=d.tmp
+$ def/user sys$output nl:
+$ edito/edt/command=sys$input d.tmp
+sub/symbol: "/symbol_vector=(/whole
+sub/"/=procedure)/whole
+exit
+$ ! all data
+$ search b.tmp "EGSY$V_DEF 1"/wind=(0,1) /out=e.tmp
+$ search e.tmp "symbol:"/out=f.tmp
+$ def/user sys$output nl:
+$ edito/edt/command=sys$input f.tmp
+sub/symbol: "/symbol_vector=(/whole
+sub/"/=data)/whole
+exit
+$ sort/nodupl d.tmp,f.tmp 'p2'
+$ delete a.tmp;*,b.tmp;*,c.tmp;*,d.tmp;*,e.tmp;*,f.tmp;*
+$ if f$search("x.tmp") .nes. "" -
+	then $ delete x.tmp;*
 $!
-$ OPEN_/READ IN 'P1'
-$ OPEN_/APPEND OUT 'P2'
-$ WRITE_ OUT "!"
-$ WRITE_ OUT "! ### Global definition list extracted from ''P1'"
-$ WRITE_ OUT "!" 
-$ LOOP_DATA_SEARCH:
-$   READ_/END=EOF_DATA IN REC
-$   if f$locate("NOPIC,OVR,REL,GBL,NOSHR,NOEXE",rec) .eq. f$length(rec) -
-      then goto LOOP_DATA_SEARCH
-$   s = f$element(0," ",rec)      
-$!   write_ out "symbol_vector = (" + s + " = DATA)"
-$   p$_'s' =1
-$   goto loop_data_search 
-$ EOF_DATA:
-$ CLOSE_ IN
-$ CLOSE_ OUT
-$ SAY "  appending list of UNIVERSAL procedures to ''P2'"
-$ SEARCH_/NOHIGH/WINDOW=(0,0) 'P1' " R-"/OUT='LINK_TMP
-$ OPEN_/READ IN 'LINK_TMP
-$ OPEN_/APPEND OUT 'P2'
-$ WRITE_ OUT "!"
-$ WRITE_ OUT "! ### UNIVERSAL procedures and global definitions extracted from ''P1'"
-$ WRITE_ OUT "!" 
-$ LOOP_UNIVERSAL:
-$    READ_/END=EOF_UNIVERSAL IN REC
-$    data = 0
-$    J = F$LOCATE(" R-",REC)
-$    S = F$EXTRACT(J+3,F$length(rec),REC)
-$    IF (F$TYPE(P$_'S').EQS."").and.(data.ne.1) 
-$    THEN
-$       WRITE_ OUT "symbol_vector = ("+S+"      = PROCEDURE)"
-$    ELSE
-$       WRITE_ OUT "symbol_vector = ("+S+"      = DATA)"
-$    ENDIF
-$    GOTO LOOP_UNIVERSAL
-$ EOF_UNIVERSAL:
-$    CLOSE_ IN
-$    CLOSE_ OUT
-$    if f$search("''LINK_TMP'") .nes. "" then DELETE_/NOLOG/NOCONFIRM 'LINK_TMP';*
-$
 $ EXIT_AA:
 $ if V then set verify
 $ endsubroutine