xref: /aosp_15_r20/external/cronet/third_party/apache-portable-runtime/src/build/cvtdsp.pl (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1use IO::File;
2use File::Find;
3
4if ($ARGV[0] eq '-6') {
5    find(\&tovc6, '.');
6}
7elsif ($ARGV[0] eq '-5') {
8    find(\&tovc5, '.');
9}
10elsif ($ARGV[0] eq '-2005') {
11    find(\&tovc2005, '.');
12}
13elsif ($ARGV[0] eq '-w3') {
14    find(\&tow3, '.');
15}
16elsif ($ARGV[0] eq '-w4') {
17    find(\&tow4, '.');
18}
19elsif ($ARGV[0] eq '-ia64') {
20    find(\&tovc64, '.');
21}
22elsif ($ARGV[0] eq '-d') {
23    find(\&todebugpools, '.');
24}
25elsif ($ARGV[0] eq '-b') {
26    find(\&tobrowse, '.');
27}
28elsif ($ARGV[0] eq '-mt') {
29    find(\&addmt, '.');
30}
31elsif ($ARGV[0] eq '-m') {
32        ## 0 - conapp, 1 - dll lib, 2 - static lib
33        $dsptype = 2;
34        $name = "apr";
35        onemake();
36}
37else {
38    print "Specify -5 or -6 for Visual Studio 5 or 6 (98) .dsp format\n";
39    print "Specify -w3 or -w4 for .dsp build with warning level 3 or 4 (strict)\n\n";
40    print "Specify -ia64 for build targeted at Itanium (req's psdk tools)\n\n";
41    print "Specify -p for extreme pool debugging\n\n";
42    print "Specify -mt to add .manifest embedding\n\n";
43    die "Missing argument";
44}
45
46sub addmt {
47    my $outpath, $outtype;
48
49    if (m|\.dsp$|) {
50        $oname = $_;
51        $tname = '.#' . $_;
52        $verchg = 0;
53        $srcfl = new IO::File $oname, "r" || die;
54        $dstfl = new IO::File $tname, "w" || die;
55        while ($src = <$srcfl>) {
56            if ($src =~ m|^# TARGTYPE .+ Application|) {
57                $outtype = ".exe"
58            }
59            if ($src =~ m|^# TARGTYPE .+ Dynamic-Link|) {
60                $outtype = ".dll"
61            }
62            if ($src =~ m|^# PROP Output_Dir "(.+)"|) {
63                $outdir = $1;
64                $outpath = $oname;
65                $outpath =~ s|\.dsp||;
66                $outpath =  ".\\" . $outdir . "\\" . $outpath . $outtype;
67            }
68            if ($src =~ m|^# ADD (BASE )?LINK32 .+ /out:"([^"]+)"|) {
69                $outpath = $2;
70                $outpath =~ s|/|\\|;
71                $outpath = ".\\" . $outpath if (!($outpath =~ m|^\.|));
72                $src =~ s|/out:"([^"]+)"|/out:"$outpath"|;
73            }
74            if (defined($outpath) && ($src =~ m|^# Begin Special Build Tool|)) {
75                undef $outpath;
76            }
77            if (defined($outpath) && defined($outtype) && ($src =~ m|^\s*$|)) {
78                print $dstfl '# Begin Special Build Tool' . "\n";
79                print $dstfl 'TargetPath=' . $outpath . "\n";
80                print $dstfl 'SOURCE="$(InputPath)"' . "\n";
81                print $dstfl 'PostBuild_Desc=Embed .manifest' . "\n";
82                print $dstfl 'PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2' . "\n";
83                print $dstfl '# End Special Build Tool' . "\n";
84                $verchg = -1;
85                undef $outpath;
86            }
87            print $dstfl $src;
88        }
89        undef $outtype if (defined($outtype));
90        undef $outpath if (defined($outpath));
91        undef $srcfl;
92        undef $dstfl;
93        if ($verchg) {
94            unlink $oname || die;
95            rename $tname, $oname || die;
96            print "Added manifest to " . $oname . " in " . $File::Find::dir . "\n";
97        }
98        else {
99            unlink $tname;
100        }
101    }
102}
103sub tovc5 {
104
105    if (m|\.dsp$|) {
106        $oname = $_;
107        $tname = '.#' . $_;
108        $verchg = 0;
109        $srcfl = new IO::File $oname, "r" || die;
110        $dstfl = new IO::File $tname, "w" || die;
111        while ($src = <$srcfl>) {
112            if ($src =~ s|Format Version 6\.00|Format Version 5\.00|) {
113                $verchg = -1;
114            }
115            if ($src =~ s|^(# ADD CPP .*)/ZI (.*)|$1/Zi $2|) {
116                $verchg = -1;
117            }
118            if ($src =~ s|^(# ADD BASE CPP .*)/ZI (.*)|$1/Zi $2|) {
119                $verchg = -1;
120            }
121            if ($src =~ s|^(# ADD CPP .*)/EHsc (.*)|$1/GX $2|) {
122                $verchg = -1;
123            }
124            if ($src =~ s|^(# ADD BASE CPP .*)/EHsc (.*)|$1/GX $2|) {
125                $verchg = -1;
126            }
127            while ($src =~ s|^(# ADD RSC .*)/d "([^ ="]+)=([^"]+)"|$1/d $2="$3"|) {
128                $verchg = -1;
129            }
130            if ($src !~ m|^# PROP AllowPerConfigDependencies|) {
131                print $dstfl $src; }
132            else {
133                $verchg = -1;
134            }
135        }
136        undef $srcfl;
137        undef $dstfl;
138        if ($verchg) {
139            unlink $oname || die;
140            rename $tname, $oname || die;
141            print "Converted VC6 project " . $oname . " to VC5 in " . $File::Find::dir . "\n";
142        }
143        else {
144            unlink $tname;
145        }
146    }
147}
148
149sub tovc6 {
150
151    if (m|\.dsp$|) {
152        $oname = $_;
153        $tname = '.#' . $_;
154        $verchg = 0;
155        $srcfl = new IO::File $_, "r" || die;
156        $dstfl = new IO::File $tname, "w" || die;
157        while ($src = <$srcfl>) {
158            if ($src =~ s|Format Version 5\.00|Format Version 6\.00|) {
159                $verchg = -1;
160            }
161            if ($src =~ s|^(!MESSAGE .*)\\\n|$1|) {
162                $cont = <$srcfl>;
163                $src = $src . $cont;
164                $verchg = -1;
165            }
166            if ($src =~ s|^(# ADD CPP .*)/GX (.*)|$1/EHsc $2|) {
167                $verchg = -1;
168            }
169            if ($src =~ s|^(# ADD BASE CPP .*)/GX (.*)|$1/EHsc $2|) {
170                $verchg = -1;
171            }
172            while ($src =~ s|^(# ADD RSC .*)/d "([^ ="]+)=([^"]+)"|$1/d $2="$3"|) {
173                $verchg = -1;
174            }
175            print $dstfl $src;
176            if ($verchg && $src =~ m|^# Begin Project|) {
177                print $dstfl "# PROP AllowPerConfigDependencies 0\n";
178            }
179        }
180        undef $srcfl;
181        undef $dstfl;
182        if ($verchg) {
183            unlink $oname || die;
184            rename $tname, $oname || die;
185            print "Converted VC5 project " . $oname . " to VC6 in " . $File::Find::dir . "\n";
186        }
187        else {
188            unlink $tname;
189        }
190    }
191}
192
193sub tovc2005 {
194
195    if (m|\.dsp$| || m|\.mak$|) {
196        $oname = $_;
197        $tname = '.#' . $_;
198        $verchg = 0;
199        $srcfl = new IO::File $_, "r" || die;
200        $dstfl = new IO::File $tname, "w" || die;
201        while ($src = <$srcfl>) {
202            if ($src =~ s|(\bCPP.*) /GX(.*)|$1 /EHsc$2|) {
203                $verchg = -1;
204            }
205            if ($src =~ s|(\bLINK32.*) /machine:I386(.*)|$1$2|) {
206                $verchg = -1;
207            }
208            while ($src =~ s|^(# ADD RSC .*)/d ([^ ="]+)="([^"]+)"|$1/d "$2=$3"|) {
209                $verchg = -1;
210            }
211            print $dstfl $src;
212        }
213        undef $srcfl;
214        undef $dstfl;
215        if ($verchg) {
216            unlink $oname || die;
217            rename $tname, $oname || die;
218            print "Converted project " . $oname . " to 2005 in " . $File::Find::dir . "\n";
219        }
220        else {
221            unlink $tname;
222        }
223    }
224}
225
226sub tow3 {
227
228    if (m|\.dsp$| || m|\.mak$|) {
229        $oname = $_;
230        $tname = '.#' . $_;
231        $verchg = 0;
232        $srcfl = new IO::File $_, "r" || die;
233        $dstfl = new IO::File $tname, "w" || die;
234        while ($src = <$srcfl>) {
235            while ($src =~ m|\\\n$|) {
236                $src = $src . <$srcfl>
237            }
238            if ($src =~ s|(\bCPP.*) /W4(.*)|$1 /W3$2|) {
239                $verchg = -1;
240            }
241            print $dstfl $src;
242        }
243        undef $srcfl;
244        undef $dstfl;
245        if ($verchg) {
246            unlink $oname || die;
247            rename $tname, $oname || die;
248            print "Converted project " . $oname . " to warn:3 in " . $File::Find::dir . "\n";
249        }
250        else {
251            unlink $tname;
252        }
253    }
254}
255
256sub tow4 {
257
258    if (m|\.dsp$| || m|\.mak$|) {
259        $oname = $_;
260        $tname = '.#' . $_;
261        $verchg = 0;
262        $srcfl = new IO::File $_, "r" || die;
263        $dstfl = new IO::File $tname, "w" || die;
264        while ($src = <$srcfl>) {
265            while ($src =~ m|\\\n$|) {
266                $src = $src . <$srcfl>
267            }
268            if ($src =~ s|(\bCPP.*) /W3(.*)|$1 /W4$2|) {
269                $verchg = -1;
270            }
271            print $dstfl $src;
272        }
273        undef $srcfl;
274        undef $dstfl;
275        if ($verchg) {
276            unlink $oname || die;
277            rename $tname, $oname || die;
278            print "Converted project " . $oname . " to warn:4 " . $File::Find::dir . "\n";
279        }
280        else {
281            unlink $tname;
282        }
283    }
284}
285
286sub tovc64 {
287
288    if (m|\.dsp$| || m|\.mak$|) {
289        $oname = $_;
290        $tname = '.#' . $_;
291        $verchg = 0;
292        $srcfl = new IO::File $_, "r" || die;
293        $dstfl = new IO::File $tname, "w" || die;
294        while ($src = <$srcfl>) {
295            while ($src =~ m|\\\n$|) {
296                $src = $src . <$srcfl>
297            }
298            if ($src =~ s|Win32 \(x86\) (Release)|Win32 (IA64) $1|s) {
299                $verchg = -1;
300            }
301            if ($src =~ s|Win32 \(x86\) (Debug)|Win32 (IA64) $1|s) {
302                $verchg = -1;
303            }
304            if ($src =~ s| - Win32 (Release)| - Win32 (IA64) $1|s) {
305                $verchg = -1;
306            }
307            if ($src =~ s| - Win32 (Debug)| - Win32 (IA64) $1|s) {
308                $verchg = -1;
309            }
310            # Cross compilation exceptions
311            if (!(m|gen[^/]*$| || m|dftables[^/]*$|)) {
312                if ($src =~ s|(\bCPP.* /W3)(.*) /FD(.*)|$1 /As64 /Wp64$2$3|s) {
313                    $verchg = -1;
314                }
315                if ($src =~ s|(\bLINK.*/machine):I386(.*)|$1:IA64$2|s) {
316                    $verchg = -1;
317                }
318            }
319            else {
320                if ($src =~ s|(\bCPP.* /W3)(.*) /FD(.*)|$1 /As32 /Wp64$2$3|s) {
321                    $verchg = -1;
322                }
323            }
324            print $dstfl $src;
325        }
326        undef $srcfl;
327        undef $dstfl;
328        if ($verchg) {
329            unlink $oname || die;
330            rename $tname, $oname || die;
331            print "Converted build file " . $oname . " to Win64 in " . $File::Find::dir . "\n";
332        }
333        else {
334            unlink $tname;
335        }
336    }
337}
338
339sub todebugpools {
340
341    if (m|\.dsp$|) {
342        $oname = $_;
343        $tname = '.#' . $_;
344        $verchg = 0;
345        $srcfl = new IO::File $oname, "r" || die;
346        $dstfl = new IO::File $tname, "w" || die;
347        while ($src = <$srcfl>) {
348            if ($src =~ s|^(# ADD CPP .* /D "_DEBUG" )|$1/D "APR_POOL_DEBUG" |) {
349                $verchg = -1;
350                if ($oname =~ /apr\.dsp$/) {
351                    $src =~ s|^(# ADD CPP .* /D "_DEBUG" )|$1/D "POOL_DEBUG" |;
352                }
353            }
354            print $dstfl $src;
355        }
356        undef $srcfl;
357        undef $dstfl;
358        if ($verchg) {
359            unlink $oname || die;
360            rename $tname, $oname || die;
361            print "Converted project " . $oname . " to debug pools in " . $File::Find::dir . "\n";
362        }
363        else {
364            unlink $tname;
365        }
366    }
367}
368
369sub tobrowsesources {
370
371    if (m|\.dsp$|) {
372        $oname = $_;
373        $tname = '.#' . $_;
374        $verchg = 0;
375        $srcfl = new IO::File $oname, "r" || die;
376        $dstfl = new IO::File $tname, "w" || die;
377        while ($src = <$srcfl>) {
378            if ($src =~ s|^(# ADD CPP .*)( /Fd)|$1 /Fr "/httpd-2.0/srclib/apr"$2|) {
379                $verchg = -1;
380            }
381            print $dstfl $src;
382        }
383        undef $srcfl;
384        undef $dstfl;
385        if ($verchg) {
386            unlink $oname || die;
387            rename $tname, $oname || die;
388            print "Converted project " . $oname . " to browse sources in " . $File::Find::dir . "\n";
389        }
390        else {
391            unlink $tname;
392        }
393    }
394}
395
396sub frommakefiles {
397
398    if (m|\.mak\.in$|) {
399        $oname = $_;
400        $dname = $_;
401        $_ =~ s/\.mak\.in/.dsp/;
402        $verchg = 0;
403        $srcfl = new IO::File $oname, "r" || die;
404        $dstfl = new IO::File $tname, "w" || die;
405        while ($src = <$srcfl>) {
406            if ($src =~ s|^(# ADD CPP .*)( /Fd)|$1 /Fr "/httpd-2.0/srclib/apr"$2|) {
407                $verchg = -1;
408            }
409            print $dstfl $src;
410        }
411        undef $srcfl;
412        undef $dstfl;
413        if ($verchg) {
414            unlink $oname || die;
415            rename $tname, $oname || die;
416            print "Converted project " . $oname . " to browse sources in " . $File::Find::dir . "\n";
417        }
418        else {
419            unlink $tname;
420        }
421    }
422}
423
424
425sub onemake {
426
427    if ($dsptype == 0) {
428        $cdefs = qq{/D "WIN32" /D "_CONSOLE"};
429        $lmodel = qq{/subsystem:console};
430        $targname = "Win32 (x86) Console Application";
431        $targid = "0x0103";
432        $debpath = "Debug"; $relpath = "Release";
433    } elsif ($dsptype == 1) {
434        $cdefs = qq{/D "WIN32" /D "_WINDOWS"};
435        $lmodel = qq{/subsystem:windows /dll};
436        $targname = "Win32 (x86) Dynamic-Link Library";
437        $targid = "0x0102";
438        $debpath = "Debug"; $relpath = "Release";
439    } elsif($dsptype == 2) {
440        $cdefs = qq{/D "WIN32" /D "_CONSOLE"};
441        $lmodel = qq{/subsystem:console};
442        $targname = "Win32 (x86) Static Library";
443        $targid = "0x0104";
444        $debpath = "LibD"; $relpath = "LibR";
445    }
446        $file = dspheader();
447
448
449        $second = "";
450
451        $model = "Release";
452        $usedebuglib = "0";
453        $debugdef = "NDEBUG";
454        $cflags = "/MD /W3 /O2";
455        $cincl = qq{/I "./include" /I "./os/win32" /I "./srclib/apr/include" /I "./srclib/apr-util/include"};
456        $lflags = qq{/map};
457        $file .= dsponemodel();
458
459        $second = "ELSE";
460        $model = "Debug";
461        $usedebuglib = "1";
462        $debugdef = "_DEBUG";
463        $cflags = "/MDd /W3 /GX /Zi /Od";
464        $cincl = qq{/I "./include" /I "./os/win32" /I "./srclib/apr/include" /I "./srclib/apr-util/include"};
465        $lflags = qq{/incremental:no /debug};
466        $file .= dsponemodel();
467
468        $file .= qq{
469!ENDIF
470
471# Begin Target
472
473# Name "$name - Win32 Release"
474# Name "$name - Win32 Debug"
475};
476
477        $toroot = ".";
478
479#HERE IS OUR FOREACH!
480        $file .= qq{# Begin Source File
481
482SOURCE=./server/main.c
483# End Source File
484};
485
486    if ($dsptype == 0) {
487        #HERE IS OUR ICON!
488        $icon="$toroot/build/win32/apache.ico";
489        $file .= qq{# Begin Source File
490
491SOURCE=$icon
492# End Source File
493};
494        $icon = "icon=" . $icon . " ";
495    }
496    if ($dsptype == 0 || $dsptype == 1) {
497        $file .= qq{
498# Begin Source File
499
500SOURCE=./$name.rc
501# End Source File
502# Begin Source File
503
504SOURCE=$toroot/include/ap_release.h
505# PROP Ignore_Default_Tool 1
506# Begin Custom Build - Creating Version Resource
507InputPath=$toroot/include/ap_release.h $toroot/build/win32/win32ver.awk
508
509"./$name.rc" : \$(SOURCE) "\$(INTDIR)" "\$(OUTDIR)"
510        awk -f $toroot/build/win32/win32ver.awk $name "Apache HTTP Server" $toroot/include/ap_release.h $icon> ./Apache.rc
511
512# End Custom Build
513# End Source File
514};
515    }
516        $file .= qq{
517# End Target
518# End Project
519};
520        print $file;
521}
522
523sub dspheader {
524    if ($dsptype == 1) {
525        $midl = "MTL=midl.exe\n";
526    } else {
527        $midl = ""
528    }
529qq{# Microsoft Developer Studio Project File - Name="$name" - Package Owner=<4>
530# Microsoft Developer Studio Generated Build File, Format Version 6.00
531# ** DO NOT EDIT **
532
533# TARGTYPE "$targname" $targid
534
535CFG=$name - Win32 Release
536!MESSAGE This is not a valid makefile. To build this project using NMAKE,
537!MESSAGE use the Export Makefile command and run
538!MESSAGE
539!MESSAGE NMAKE /f "$name.mak".
540!MESSAGE
541!MESSAGE You can specify a configuration when running NMAKE
542!MESSAGE by defining the macro CFG on the command line. For example:
543!MESSAGE
544!MESSAGE NMAKE /f "$name.mak" CFG="$name - Win32 Release"
545!MESSAGE
546!MESSAGE Possible choices for configuration are:
547!MESSAGE
548!MESSAGE "$name - Win32 Release" (based on "$targname")
549!MESSAGE "$name - Win32 Debug" (based on "$targname")
550!MESSAGE
551
552# Begin Project
553# PROP AllowPerConfigDependencies 0
554# PROP Scc_ProjName ""
555# PROP Scc_LocalPath ""
556CPP=cl.exe
557${midl}RSC=rc.exe
558};
559}
560sub dsponemodel {
561    if ($model eq "Release") {
562        $targpath = $relpath;
563    } else {
564        $targpath = $debpath;
565    }
566    if ($dsptype == 1) {
567        $midl =
568qq{# ADD BASE MTL /nologo /D "$debugdef" /win32
569# ADD MTL /nologo /D "$debugdef" /mktyplib203 /win32
570};  }
571    if ($dsptype == 2) {
572        $linkop = qq{LIB32=link.exe -lib
573# ADD BASE LIB32 /nologo
574# ADD LIB32 /nologo
575};
576    } else {
577        $linkop = qq{LINK32=link.exe
578# ADD BASE LINK32 kernel32.lib user32.lib advapi32.lib ws2_32.lib mswsock.lib /nologo $lmodel $lflags /machine:I386
579# ADD LINK32 kernel32.lib user32.lib advapi32.lib ws2_32.lib mswsock.lib /nologo $lmodel $lflags /machine:I386
580};
581    }
582
583qq{
584!${second}IF  "\$(CFG)" == "$name - Win32 $model"
585
586# PROP BASE Use_MFC 0
587# PROP BASE Use_Debug_Libraries $usedebuglib
588# PROP BASE Output_Dir "$targpath"
589# PROP BASE Intermediate_Dir "$targpath"
590# PROP BASE Target_Dir ""
591# PROP Use_MFC 0
592# PROP Use_Debug_Libraries $usedebuglib
593# PROP Output_Dir "$targpath"
594# PROP Intermediate_Dir "$targpath"
595# PROP Ignore_Export_Lib 0
596# PROP Target_Dir ""
597# ADD BASE CPP /nologo $cflags $cincl /D "$debugdef" $cdefs /FD /c
598# ADD CPP /nologo $cflags $cincl /D "$debugdef" $cdefs /Fd"$targpath/$name" /FD /c
599${midl}# ADD BASE RSC /l 0x409 /d "$debugdef"
600# ADD RSC /l 0x409 /d "$debugdef"
601BSC32=bscmake.exe
602# ADD BASE BSC32 /nologo
603# ADD BSC32 /nologo
604$linkop};
605}