xref: /plan9/sys/src/cmd/gs/src/macgenmcpxml.sh (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
1#!/bin/sh
2
3#################################################################################################
4# Functions
5
6#####
7# WriteXMLHeader writes the beginning of the XML project file
8#####
9WriteXMLHeader()
10{
11echo "<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>"
12echo "<?codewarrior exportversion="1.0.1" ideversion="4.1" ?>"
13echo ""
14echo "<!DOCTYPE PROJECT ["
15echo "<!ELEMENT PROJECT (TARGETLIST, TARGETORDER, GROUPLIST, DESIGNLIST?)>"
16echo "<!ELEMENT TARGETLIST (TARGET+)>"
17echo "<!ELEMENT TARGET (NAME, SETTINGLIST, FILELIST?, LINKORDER?, SEGMENTLIST?, OVERLAYGROUPLIST?, SUBTARGETLIST?, SUBPROJECTLIST?)>"
18echo "<!ELEMENT NAME (#PCDATA)>"
19echo "<!ELEMENT USERSOURCETREETYPE (#PCDATA)>"
20echo "<!ELEMENT PATH (#PCDATA)>"
21echo "<!ELEMENT FILELIST (FILE*)>"
22echo "<!ELEMENT FILE (PATHTYPE, PATHROOT?, ACCESSPATH?, PATH, PATHFORMAT?, ROOTFILEREF?, FILEKIND?, FILEFLAGS?)>"
23echo "<!ELEMENT PATHTYPE (#PCDATA)>"
24echo "<!ELEMENT PATHROOT (#PCDATA)>"
25echo "<!ELEMENT ACCESSPATH (#PCDATA)>"
26echo "<!ELEMENT PATHFORMAT (#PCDATA)>"
27echo "<!ELEMENT ROOTFILEREF (PATHTYPE, PATHROOT?, ACCESSPATH?, PATH, PATHFORMAT?)>"
28echo "<!ELEMENT FILEKIND (#PCDATA)>"
29echo "<!ELEMENT FILEFLAGS (#PCDATA)>"
30echo "<!ELEMENT FILEREF (TARGETNAME?, PATHTYPE, PATHROOT?, ACCESSPATH?, PATH, PATHFORMAT?)>"
31echo "<!ELEMENT TARGETNAME (#PCDATA)>"
32echo "<!ELEMENT SETTINGLIST ((SETTING|PANELDATA)+)>"
33echo "<!ELEMENT SETTING (NAME?, (VALUE|(SETTING+)))>"
34echo "<!ELEMENT PANELDATA (NAME, VALUE)>"
35echo "<!ELEMENT VALUE (#PCDATA)>"
36echo "<!ELEMENT LINKORDER (FILEREF*)>"
37echo "<!ELEMENT SEGMENTLIST (SEGMENT+)>"
38echo "<!ELEMENT SEGMENT (NAME, ATTRIBUTES?, FILEREF*)>"
39echo "<!ELEMENT ATTRIBUTES (#PCDATA)>"
40echo "<!ELEMENT OVERLAYGROUPLIST (OVERLAYGROUP+)>"
41echo "<!ELEMENT OVERLAYGROUP (NAME, BASEADDRESS, OVERLAY*)>"
42echo "<!ELEMENT BASEADDRESS (#PCDATA)>"
43echo "<!ELEMENT OVERLAY (NAME, FILEREF*)>"
44echo "<!ELEMENT SUBTARGETLIST (SUBTARGET+)>"
45echo "<!ELEMENT SUBTARGET (TARGETNAME, ATTRIBUTES?, FILEREF?)>"
46echo "<!ELEMENT SUBPROJECTLIST (SUBPROJECT+)>"
47echo "<!ELEMENT SUBPROJECT (FILEREF, SUBPROJECTTARGETLIST)>"
48echo "<!ELEMENT SUBPROJECTTARGETLIST (SUBPROJECTTARGET*)>"
49echo "<!ELEMENT SUBPROJECTTARGET (TARGETNAME, ATTRIBUTES?, FILEREF?)>"
50echo "<!ELEMENT TARGETORDER (ORDEREDTARGET|ORDEREDDESIGN)*>"
51echo "<!ELEMENT ORDEREDTARGET (NAME)>"
52echo "<!ELEMENT ORDEREDDESIGN (NAME, ORDEREDTARGET+)>"
53echo "<!ELEMENT GROUPLIST (GROUP|FILEREF)*>"
54echo "<!ELEMENT GROUP (NAME, (GROUP|FILEREF)*)>"
55echo "<!ELEMENT DESIGNLIST (DESIGN+)>"
56echo "<!ELEMENT DESIGN (NAME, DESIGNDATA)>"
57echo "<!ELEMENT DESIGNDATA (#PCDATA)>"
58echo "]>"
59echo ""
60}
61
62#####
63# WriteFILE generates a complete <FILE>...</FILE> entry
64#####
65WriteFILE()
66{
67    echo "<FILE>"
68    echo "	<PATHTYPE>Name</PATHTYPE>"
69    echo "	<PATH>$1</PATH>"
70    echo "	<PATHFORMAT>MacOS</PATHFORMAT>"
71    echo "	<FILEKIND>Text</FILEKIND>"
72    echo "	<FILEFLAGS>Debug</FILEFLAGS>"
73    echo "</FILE>"
74}
75
76#####
77# WriteFILEREF generates a complete <FILEREF>...</FILEREF> entry
78#####
79WriteFILEREF()
80{
81    echo "<FILEREF>"
82    if [ $# -ge 2 ]; then
83    echo "	<TARGETNAME>$2</TARGETNAME>"
84    fi
85    echo "	<PATHTYPE>Name</PATHTYPE>"
86    echo "	<PATH>$1</PATH>"
87    echo "	<PATHFORMAT>MacOS</PATHFORMAT>"
88    echo "</FILEREF>"
89}
90
91
92#####
93# WriteValueSetting generates a complete value entry
94#####
95WriteValueSetting()
96{
97    SETTINGNAME=$1
98    VALUE=$2
99
100    echo "<SETTING><NAME>$SETTINGNAME</NAME><VALUE>$VALUE</VALUE></SETTING>"
101}
102
103
104
105#####
106# WritePathSetting generates a complete path entry
107#####
108WritePathSetting()
109{
110    SETTINGNAME=$1
111    PATH=$2
112    PATHFORMAT=$3
113    PATHROOT=$4
114
115    echo "<SETTING>"
116        echo "<SETTING><NAME>$SETTINGNAME</NAME>"
117            echo "<SETTING><NAME>Path</NAME><VALUE>$PATH</VALUE></SETTING>"
118            echo "<SETTING><NAME>PathFormat</NAME><VALUE>$PATHFORMAT</VALUE></SETTING>"
119            echo "<SETTING><NAME>PathRoot</NAME><VALUE>$PATHROOT</VALUE></SETTING>"
120        echo "</SETTING>"
121        echo "<SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>"
122        echo "<SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>"
123    echo "</SETTING>"
124}
125
126#####
127# WriteSETTINGLIST generates a complete <SETTINGLIST>...</SETTINGLIST> entry
128#####
129WriteSETTINGLIST()
130{
131    TARGETNAME=$1
132    OUTPUTNAME=$2
133
134    echo "<SETTINGLIST>"
135
136        echo "<!-- Settings for "Target Settings" panel -->"
137        WriteValueSetting Linker "MacOS PPC Linker"
138        WriteValueSetting PreLinker ""
139        WriteValueSetting PostLinker ""
140        WriteValueSetting Targetname "$TARGETNAME"
141        echo "<SETTING><NAME>OutputDirectory</NAME>"
142            echo "<SETTING><NAME>Path</NAME><VALUE>:Output:</VALUE></SETTING>"
143            echo "<SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>"
144            echo "<SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>"
145        echo "</SETTING>"
146        WriteValueSetting SaveEntriesUsingRelativePaths false
147
148        echo "<!-- Settings for "Access Paths" panel -->"
149        WriteValueSetting AlwaysSearchUserPaths false
150        WriteValueSetting InterpretDOSAndUnixPaths true
151        echo "<SETTING><NAME>UserSearchPaths</NAME>"
152            WritePathSetting SearchPath ":src:" MacOS Project
153            WritePathSetting SearchPath ":obj:" MacOS Project
154            WritePathSetting SearchPath ":" MacOS Project
155        echo "</SETTING>"
156        echo "<SETTING><NAME>SystemSearchPaths</NAME>"
157            WritePathSetting SearchPath ":jbig2dec:" MacOS Project
158            WritePathSetting SearchPath ":jasper/src/libjasper/include:" MacOS Project
159            WritePathSetting SearchPath ":obj:" MacOS Project
160            WritePathSetting SearchPath ":MacOS Support:" MacOS CodeWarrior
161            WritePathSetting SearchPath ":MSL:MSL_C" MacOS CodeWarrior
162            WritePathSetting SearchPath ":" MacOS CodeWarrior
163            WritePathSetting SearchPath ":" MacOS Project
164        echo "</SETTING>"
165
166        echo "<!-- Settings for "Build Extras" panel -->"
167        WriteValueSetting CacheModDates true
168	WriteValueSetting ActivateBrowser true
169	WriteValueSetting DumpBrowserInfo false
170	WriteValueSetting CacheSubprojects true
171
172	echo "<!-- Settings for "PPC Project" panel -->"
173	WriteValueSetting MWProject_PPC_type SharedLibrary
174	WriteValueSetting MWProject_PPC_outfile "$OUTPUTNAME"
175	WriteValueSetting MWProject_PPC_filecreator 1061109567
176	WriteValueSetting MWProject_PPC_filetype 1936223330
177	WriteValueSetting MWProject_PPC_size 0
178	WriteValueSetting MWProject_PPC_minsize 0
179	WriteValueSetting MWProject_PPC_stacksize 0
180	WriteValueSetting MWProject_PPC_flags 0
181	WriteValueSetting MWProject_PPC_symfilename ""
182	WriteValueSetting MWProject_PPC_rsrcname ""
183	WriteValueSetting MWProject_PPC_rsrcheader Native
184	WriteValueSetting MWProject_PPC_rsrctype 1061109567
185	WriteValueSetting MWProject_PPC_rsrcid 0
186	WriteValueSetting MWProject_PPC_rsrcflags 0
187	WriteValueSetting MWProject_PPC_rsrcstore 0
188	WriteValueSetting MWProject_PPC_rsrcmerge 0
189
190	echo "<!-- Settings for "C/C++ Compiler" panel -->"
191	WriteValueSetting MWFrontEnd_C_cplusplus 0
192	WriteValueSetting MWFrontEnd_C_checkprotos 0
193	WriteValueSetting MWFrontEnd_C_arm 0
194	WriteValueSetting MWFrontEnd_C_trigraphs 0
195	WriteValueSetting MWFrontEnd_C_onlystdkeywords 0
196	WriteValueSetting MWFrontEnd_C_enumsalwaysint 0
197	WriteValueSetting MWFrontEnd_C_mpwpointerstyle 1
198
199	# install the carbon prefix file for carbon targets
200	if test "$OUTPUTNAME" = "GhostscriptLib Carbon"; then
201	  if test "$TARGETNAME" = "GhostscriptLib Carbon (Debug)"; then
202	    WriteValueSetting MWFrontEnd_C_prefixname macos_carbon_d_pre.h
203	  else
204	    WriteValueSetting MWFrontEnd_C_prefixname macos_carbon_pre.h
205	  fi
206	else
207	  if test "$TARGETNAME" = "GhostscriptLib PPC (Debug)"; then
208	    WriteValueSetting MWFrontEnd_C_prefixname macos_classic_d_pre.h
209	  else
210	    WriteValueSetting MWFrontEnd_C_prefixname
211	  fi
212	fi
213
214	WriteValueSetting MWFrontEnd_C_ansistrict 0
215	WriteValueSetting MWFrontEnd_C_mpwcnewline 0
216	WriteValueSetting MWFrontEnd_C_wchar_type 1
217	WriteValueSetting MWFrontEnd_C_enableexceptions 0
218	WriteValueSetting MWFrontEnd_C_dontreusestrings 0
219	WriteValueSetting MWFrontEnd_C_poolstrings 0
220	WriteValueSetting MWFrontEnd_C_dontinline 1
221	WriteValueSetting MWFrontEnd_C_useRTTI 0
222	WriteValueSetting MWFrontEnd_C_multibyteaware 0
223	WriteValueSetting MWFrontEnd_C_unsignedchars 0
224	WriteValueSetting MWFrontEnd_C_autoinline 0
225	WriteValueSetting MWFrontEnd_C_booltruefalse 0
226	WriteValueSetting MWFrontEnd_C_direct_to_som 0
227	WriteValueSetting MWFrontEnd_C_som_env_check 0
228	WriteValueSetting MWFrontEnd_C_alwaysinline 0
229	WriteValueSetting MWFrontEnd_C_inlinelevel 0
230	WriteValueSetting MWFrontEnd_C_ecplusplus 0
231	WriteValueSetting MWFrontEnd_C_objective_c 0
232	WriteValueSetting MWFrontEnd_C_defer_codegen 0
233
234	echo "<!-- Settings for "C/C++ Warnings" panel -->"
235	WriteValueSetting MWWarning_C_warn_illpragma 1
236	WriteValueSetting MWWarning_C_warn_emptydecl 0
237	WriteValueSetting MWWarning_C_warn_possunwant 0
238	WriteValueSetting MWWarning_C_warn_unusedvar 1
239	WriteValueSetting MWWarning_C_warn_unusedarg 0
240	WriteValueSetting MWWarning_C_warn_extracomma 1
241	WriteValueSetting MWWarning_C_pedantic 1
242	WriteValueSetting MWWarning_C_warningerrors 0
243	WriteValueSetting MWWarning_C_warn_hidevirtual 1
244	WriteValueSetting MWWarning_C_warn_implicitconv 0
245	WriteValueSetting MWWarning_C_warn_notinlined 0
246	WriteValueSetting MWWarning_C_warn_structclass 0
247
248	echo "<!-- Settings for "PPC CodeGen" panel -->"
249	WriteValueSetting MWCodeGen_PPC_structalignment PPC
250	WriteValueSetting MWCodeGen_PPC_tracebacktables Inline
251	WriteValueSetting MWCodeGen_PPC_processor Generic
252	WriteValueSetting MWCodeGen_PPC_readonlystrings 0
253	WriteValueSetting MWCodeGen_PPC_tocdata 1
254	WriteValueSetting MWCodeGen_PPC_profiler 0
255	WriteValueSetting MWCodeGen_PPC_fpcontract 0
256	WriteValueSetting MWCodeGen_PPC_schedule 1
257	WriteValueSetting MWCodeGen_PPC_peephole 1
258	WriteValueSetting MWCodeGen_PPC_processorspecific 0
259	WriteValueSetting MWCodeGen_PPC_altivec 0
260	WriteValueSetting MWCodeGen_PPC_vectortocdata 0
261	WriteValueSetting MWCodeGen_PPC_vrsave 0
262
263	echo "<!-- Settings for "PPC Global Optimizer" panel -->"
264	WriteValueSetting GlobalOptimizer_PPC_optimizationlevel Level0
265	WriteValueSetting GlobalOptimizer_PPC_optfor Speed
266
267	echo "<!-- Settings for "PPC Linker" panel -->"
268	WriteValueSetting MWLinker_PPC_linksym 1
269	WriteValueSetting MWLinker_PPC_symfullpath 1
270	WriteValueSetting MWLinker_PPC_linkmap 0
271	WriteValueSetting MWLinker_PPC_nolinkwarnings 0
272	WriteValueSetting MWLinker_PPC_dontdeadstripinitcode 0
273	WriteValueSetting MWLinker_PPC_permitmultdefs 0
274	WriteValueSetting MWLinker_PPC_linkmode Fast
275	WriteValueSetting MWLinker_PPC_initname "__initialize"
276	WriteValueSetting MWLinker_PPC_mainname ""
277	WriteValueSetting MWLinker_PPC_termname "__terminate"
278
279	echo "<!-- Settings for "PPC PEF" panel -->"
280	WriteValueSetting MWPEF_exports Pragma
281	WriteValueSetting MWPEF_libfolder 0
282	WriteValueSetting MWPEF_sortcode None
283	WriteValueSetting MWPEF_expandbss 0
284	WriteValueSetting MWPEF_sharedata 0
285	WriteValueSetting MWPEF_olddefversion 0
286	WriteValueSetting MWPEF_oldimpversion 0
287	WriteValueSetting MWPEF_currentversion 0
288	WriteValueSetting MWPEF_fragmentname ""
289	WriteValueSetting MWPEF_collapsereloads 0
290
291    echo "</SETTINGLIST>"
292}
293
294
295#####
296# WriteTARGET generates a complete <TARGET>...</TARGET> entry
297#####
298WriteTARGET()
299{
300    TARGETNAME=$1
301    OUTPUTNAME=$2
302    shift 2
303
304    echo "<TARGET>"
305
306        echo "<NAME>$TARGETNAME</NAME>"
307
308        WriteSETTINGLIST "$TARGETNAME" "$OUTPUTNAME"
309
310        echo "<FILELIST>"
311            for file in "$@"; do
312                WriteFILE "$file"
313            done
314        echo "</FILELIST>"
315
316        echo "<LINKORDER>"
317            for file in "$@"; do
318                WriteFILEREF "$file"
319            done
320        echo "</LINKORDER>"
321
322    echo "</TARGET>"
323}
324
325
326#####
327# WriteGROUP generates a complete <GROUP>...</GROUP> entry
328#####
329WriteGROUP()
330{
331    GROUPNAME=$1
332    TARGETNAME=$2
333    shift 2
334
335    echo "<GROUP><NAME>$GROUPNAME</NAME>"
336
337        for file in "$@"; do
338            WriteFILEREF "$file" "$TARGETNAME"
339        done
340
341    echo "</GROUP>"
342}
343
344
345#################################################################################################
346# the start of the script
347
348#####
349# first create a list of .c files that will be part of the project, we need it several times
350#####
351
352CFILES=
353while [ $# -ge 1 ]; do
354    case $1 in
355        \\);;
356        *.o)
357            # strip path before file name and convert .o to .c, then append file name to CFILES
358            CFILES=$CFILES\ `echo $1 | sed -e 's/\.\/.*\///' -e 's/\.\///' -e 's/\.o/\.c/'`
359            ;;
360    esac
361    shift
362done
363
364# libs for codewarrior 6
365#LIBS="console.stubs.c MSL\ ShLibRuntime.Lib MSL\ RuntimePPC.Lib"
366#CLASSICLIBS="MSL\ C.PPC.Lib InterfaceLib FontManager MathLib"
367
368# libs for codewarrior 7 & 8
369LIBS=""
370CARBONLIBS="MSL_All_Carbon.Lib CarbonLib"
371CLASSICLIBS="MSL_All_PPC.Lib InterfaceLib FontManager MathLib"
372CLASSICLIBS="$CLASSICLIBS TextCommon UnicodeConverter UTCUtils"
373
374#####
375#
376#####
377
378GSNAME="GhostscriptLib"
379CLASSICGSNAME="$GSNAME PPC"
380CARBONGSNAME="$GSNAME Carbon"
381CLASSICDEBUGTARGETNAME="$CLASSICGSNAME (Debug)"
382CLASSICFINALTARGETNAME="$CLASSICGSNAME (Final)"
383CARBONDEBUGTARGETNAME="$CARBONGSNAME (Debug)"
384CARBONFINALTARGETNAME="$CARBONGSNAME (Final)"
385
386WriteXMLHeader
387
388echo "<PROJECT>"
389
390    echo "<TARGETLIST>"
391    WriteTARGET "$CARBONDEBUGTARGETNAME" "$CARBONGSNAME" $CFILES $LIBS $CARBONLIBS
392    WriteTARGET "$CLASSICDEBUGTARGETNAME" "$CLASSICGSNAME" $CFILES $LIBS $CLASSICLIBS
393    echo "</TARGETLIST>"
394
395    echo "<TARGETORDER>"
396        echo "<ORDEREDTARGET><NAME>$CARBONDEBUGTARGETNAME</NAME></ORDEREDTARGET>"
397        echo "<ORDEREDTARGET><NAME>$CLASSICDEBUGTARGETNAME</NAME></ORDEREDTARGET>"
398    echo "</TARGETORDER>"
399
400    echo "<GROUPLIST>"
401        WriteGROUP "Ghostscript Sources" "$CARBONDEBUGTARGETNAME" $CFILES
402#        WriteGROUP "Libraries" "$CARBONDEBUGTARGETNAME" $LIBS $CARBONLIBS $CLASSICLIBS
403#        WriteGROUP "Libraries" "$CARBONDEBUGTARGETNAME" "console.stubs.c" "MSL ShLibRuntime.Lib" "MSL RuntimePPC.Lib" "MSL C.Carbon.Lib" "CarbonLib" "MSL C.PPC.Lib" "InterfaceLib" "FontManager" "MathLib"
404
405# nb: this code doesn't work if there are spaces in the library filenames
406        echo "<GROUP><NAME>Libraries</NAME>"
407	for lib in $LIBS; do
408            WriteFILEREF "$lib" "$CARBONDEBUGTARGETNAME"
409	    WriteFILEREF "$lib" "$CLASSICDEBUGTARGETNAME"
410	done
411	for lib in $CARBONLIBS; do
412            WriteFILEREF "$lib" "$CARBONDEBUGTARGETNAME"
413	done
414	for lib in $CLASSICLIBS; do
415            WriteFILEREF "$lib" "$CLASSICDEBUGTARGETNAME"
416	done
417        echo "</GROUP>"
418
419    echo "</GROUPLIST>"
420
421echo "</PROJECT>"
422
423exit 0
424