Fixed make-distrib script
[libcds.git] / tools / make_distrib.pl
1 #!/usr/bin/perl\r
2 \r
3 my $curDir = `cd`;\r
4 \r
5 my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);\r
6 $year += 1900;\r
7 \r
8 \r
9 # Get libcds version\r
10 my $Version = get_version();\r
11 print "Make libcds-$Version distributive\n";\r
12 \r
13 my $DistrDir = get_distrib_dir();\r
14 print "Distrib dir: $DistrDir\n";\r
15 \r
16 # Git clone\r
17 my $GitBranch = 'master';\r
18 my $GitRepo = get_git_repo();\r
19 print "Clone git: repo=$GitRepo, branch=$GitBranch\n";\r
20 `git clone -b $GitBranch $GitRepo $DistrDir`; # or die "Error cloning branch $GitBranch to $DistrDir\n";\r
21 print "Remove $DistrDir/.git directory\n";\r
22 `rm -fr $DistrDir/.git`;\r
23 `rm -f $DistrDir/.gitignore $DistrDir/tools/brush_cds.pl $DistrDir/tools/make_distrib.pl $DistrDir/tools/make_distrib.bat $DistrDir/doxygen/images.odp`;\r
24 \r
25 print "patch files...\n";\r
26 patch_file("$DistrDir/build/Makefile", 'VERSION=\d+\.\d+\.\d+', "VERSION=$Version" );\r
27 patch_file("$DistrDir/CMakeList.txt", 'PROJECT_VERSION \d+\.\d+\.\d+', "PROJECT_VERSION $Version" );\r
28 patch_file("$DistrDir/doxygen/cds.doxy", 'PROJECT_NUMBER\s*=\s*\d+\.\d+\.\d+', "PROJECT_NUMBER = $Version" ) ;\r
29 \r
30 print "Make docs\n";\r
31 `cd $DistrDir/tools && make_docs.bat && rm doxygen.log && cd $curDir`;\r
32   \r
33 print "make zip...\n" ;\r
34 `rm -f $DistrDir/../cds-$Version.zip` ;\r
35 `cd $DistrDir/.. && 7za a cds-$Version.zip cds-$Version` ;\r
36 \r
37 print "Done\n" ;\r
38 exit ;\r
39 \r
40   \r
41 sub get_version()\r
42 {\r
43         my $version;\r
44         open( my $fh, 'cds/version.h' ) or die "ERROR: Cannot find ../cds/version.h file";\r
45         binmode $fh ;\r
46         \r
47         while (<$fh>) {\r
48                 if ( /CDS_VERSION_STRING.+(\d+\.\d+\.\d+)/ ) {\r
49                         $version = $1 ;\r
50                         last    ;\r
51                 }\r
52         }\r
53         close $fh ;\r
54         die "ERROR: cannot find version in ../cds/version.h" unless $version ;\r
55 }\r
56 \r
57 sub get_distrib_dir()\r
58 {\r
59         my $dir = "../cds-distrib/cds-$Version";\r
60         `rm -fr $dir` if -d $dir;\r
61         mkdir $dir;\r
62         return $dir;\r
63 }\r
64 \r
65 sub get_git_repo()\r
66 {\r
67         return 'https://github.com/khizmax/libcds.git';\r
68 }\r
69 \r
70 sub patch_file(@) {\r
71         my $file = shift        ;\r
72         my $seek = shift        ;\r
73         my $repl = shift        ;\r
74         \r
75         if ( open( my $fh, $file )) {\r
76                 binmode $fh     ;\r
77                 \r
78                 my $str = ''    ;\r
79                 $str .= $_ while <$fh>  ;\r
80                 close $fh ;\r
81                 \r
82                 $str =~ s/$seek/$repl/g ;\r
83                 \r
84                 if ( open( my $fh, ">$file" )) {\r
85                         binmode $fh     ;\r
86                         print $fh $str  ;\r
87                         close $fh               ;\r
88                 }\r
89         }\r
90 }\r