Move libcds 1.6.0 from SVN
[libcds.git] / make_distrib.pl
1 #!/usr/bin/perl\r
2 \r
3 my $version ;\r
4 \r
5 my $svnRelPath  ;\r
6 getRelPath()    ;\r
7 print "Relative path: $svnRelPath\n"    ;\r
8 my $upToRoot ;\r
9 if ( $svnRelPath =~ /trunk/ ) {\r
10     $upToRoot = '..' ;\r
11 }\r
12 else {\r
13     $upToRoot = '..\\..' ;\r
14 }\r
15 # my $upToRoot = $svnRelPath      ;\r
16 # $upToRoot =~ s/([^\/]+)/../g    ;\r
17 # $upToRoot = "../$upToRoot"      ;\r
18 print "upToRoot: $upToRoot\n"    ;\r
19 \r
20 getVersion()    ;\r
21 print "Version $version\n"      ;\r
22 \r
23 my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);\r
24 $year += 1900   ;\r
25 \r
26 my $distrPath = "cds-distrib/cds-$version" ;\r
27 my $relDistrPath = "$upToRoot/$distrPath"   ;\r
28 \r
29 print "export SVN...\n" ;\r
30 exportSVN()     ;\r
31 \r
32 my $nTabsFound = 0 ;\r
33 \r
34 print "make copyright...\n" ;\r
35 makeCopyright() ;\r
36 patchFile("$relDistrPath/build/Makefile", 'VERSION=\d+\.\d+\.\d+', "VERSION=$version" ) ;\r
37 patchFile("$relDistrPath/doxygen/cds.doxy", 'PROJECT_NUMBER\s*=\s*\d+\.\d+\.\d+', "PROJECT_NUMBER = $version" ) ;\r
38 patchFile("$relDistrPath/projects/Win/vc2008/cds.2008.vcproj", 'CDS_USE_VLD', 'xCDS_USE_VLD' ) ;\r
39 patchFile("$relDistrPath/projects/Win/vc2008/unit.2008.vcproj", 'CDS_USE_VLD', 'xCDS_USE_VLD' ) ;\r
40 patchFile("$relDistrPath/projects/android/jni/Android.mk", 'CDS_LIBRARY_VERSION\s*:=\s*\d+\.\d+\.\d+', \r
41    "CDS_LIBRARY_VERSION := $version" );\r
42 \r
43 print "Tabs found: $nTabsFound\n" ;\r
44 \r
45 print "make docs...\n" ;\r
46 `cd $relDistrPath && make_docs.bat` ;\r
47 `rm -f $relDistrPath/make_distrib.pl`   ;\r
48 `rm -fr $relDistrPath/scripts`  ;\r
49 `rm -f $relDistrPath/doxygen/doxygen.log`       ;\r
50 \r
51 print "make zip...\n" ;\r
52 `rm -f $relDistrPath/../cds-$version.zip` ;\r
53 `cd $relDistrPath/.. && 7za a cds-$version.zip cds-$version` ;\r
54 \r
55 print "Done\n" ;\r
56 \r
57 exit ;\r
58 \r
59 sub getVersion()\r
60 {\r
61         open( my $fh, 'cds/version.h' ) or die "ERROR: Cannot find cds/version.h file";\r
62         binmode $fh ;\r
63         \r
64         while (<$fh>) {\r
65                 if ( /CDS_VERSION_STRING.+(\d+\.\d+\.\d+)/ ) {\r
66                         $version = $1 ;\r
67                         last    ;\r
68                 }\r
69         }\r
70         close $fh ;\r
71         die "ERROR: cannot find version in cds/version.h" unless $version ;\r
72 }\r
73 \r
74 sub getRelPath()\r
75 {\r
76     my $svn = `svn info` ;\r
77     ($svnRelPath) = $svn =~ /Working\sCopy\sRoot\sPath:\s+(.+)/ ;\r
78 \r
79     # my ($curDir) = $svn =~ /URL:\s+(.+)/ ;\r
80     # my ($rootDir) = $svn =~ /Repository\s+Root:\s+(.+)/ ;\r
81     # $rootDir =~ s/\+/\\\+/g ;\r
82     \r
83     # ($svnRelPath) = $curDir =~ /$rootDir\/(.+)/ ;\r
84 }\r
85 \r
86 sub exportSVN()\r
87 {\r
88         `cd $upToRoot && rm -fr $distrPath && svn export $svnRelPath $distrPath` ;\r
89 }\r
90 \r
91 sub makeCopyright() \r
92 {\r
93         processDir( "$relDistrPath/cds" ) ;\r
94         processDir( "$relDistrPath/src" ) ;\r
95         processDir( "$relDistrPath/tests/test-hdr" ) ;\r
96         processDir( "$relDistrPath/tests/unit" ) ;\r
97         processDir( "$relDistrPath/tests/cppunit" ) ;\r
98 }\r
99 \r
100 sub processDir( $ )\r
101 {\r
102         my $dirName = shift ;\r
103         \r
104         opendir(my $dh, $dirName) || die "can't opendir $dirName: $!";\r
105     my @files = grep { /^[^\.]/ } readdir($dh);\r
106     closedir $dh;\r
107         \r
108         foreach my $file ( @files ) {\r
109                 if ( -d "$dirName/$file" ) {\r
110                         processDir("$dirName/$file")    ;\r
111                 }\r
112                 elsif ( $file =~ /\.(h|cpp)$/ ) {\r
113                         processFile( "$dirName/$file" ) ;\r
114                 }\r
115         }\r
116 }\r
117 \r
118 sub processFile( $ ) \r
119 {\r
120         my $file = shift        ;\r
121 \r
122         \r
123         if ( open( my $fh, $file )) {\r
124                 binmode $fh     ;\r
125                 my $str = ''            ;\r
126                 while (<$fh>) {\r
127                         if ( /^\/\/\$\$CDS-header\$\$/ ) {\r
128                                 $str .= \r
129 "/*\r
130     This file is a part of libcds - Concurrent Data Structures library\r
131     See http://libcds.sourceforge.net/\r
132 \r
133     (C) Copyright Maxim Khiszinsky (libcds.sf\@gmail.com) 2006-$year\r
134     Distributed under the BSD license (see accompanying file license.txt)\r
135 \r
136     Version $version\r
137 */\n\n" ;\r
138                         }\r
139                         elsif ( /^\/\/\$\$CDS-\/\*\$\$/ ) {\r
140                                 $str .= "/*\n" ;\r
141                         }\r
142                         elsif ( /^\/\/\$\$CDS-\*\/\$\$/ ) {\r
143                                 $str .= "*/\n" ;\r
144                         }\r
145                         else {\r
146                 $nTabsFound += $_ =~ s/\t/    /g;\r
147                 $_ =~ s/\s+$//  ;\r
148                                 $_ =~ s/\s+;$/;/;\r
149                                 $str .= $_      ;\r
150                 $str .= "\n"    ;\r
151                         }\r
152                 }\r
153                 close $fh       ;\r
154                 \r
155                 if ( open( my $fh, ">$file" )) {\r
156                         binmode $fh     ;\r
157                         print $fh $str  ;\r
158                         close $fh               ;\r
159                 }\r
160         }\r
161 }\r
162 \r
163 sub patchFile(@) {\r
164         my $file = shift        ;\r
165         my $seek = shift        ;\r
166         my $repl = shift        ;\r
167         \r
168         if ( open( my $fh, $file )) {\r
169                 binmode $fh     ;\r
170                 \r
171                 my $str = ''    ;\r
172                 $str .= $_ while <$fh>  ;\r
173                 close $fh ;\r
174                 \r
175                 $str =~ s/$seek/$repl/g ;\r
176                 \r
177                 if ( open( my $fh, ">$file" )) {\r
178                         binmode $fh     ;\r
179                         print $fh $str  ;\r
180                         close $fh               ;\r
181                 }\r
182         }\r
183 }\r
184 \r
185 \r
186 \r
187 \r