bin/syncqt
changeset 30 5dc02b23752f
parent 18 2f34d5167611
child 33 3e2da88830cd
equal deleted inserted replaced
29:b72c6db6890b 30:5dc02b23752f
    42         "QtScript" => "$basedir/src/script",
    42         "QtScript" => "$basedir/src/script",
    43         "QtScriptTools" => "$basedir/src/scripttools",
    43         "QtScriptTools" => "$basedir/src/scripttools",
    44         "Qt3Support" => "$basedir/src/qt3support",
    44         "Qt3Support" => "$basedir/src/qt3support",
    45         "ActiveQt" => "$basedir/src/activeqt/container;$basedir/src/activeqt/control;$basedir/src/activeqt/shared",
    45         "ActiveQt" => "$basedir/src/activeqt/container;$basedir/src/activeqt/control;$basedir/src/activeqt/shared",
    46         "QtTest" => "$basedir/src/testlib",
    46         "QtTest" => "$basedir/src/testlib",
    47         "QtAssistant" => "$basedir/tools/assistant/compat/lib",
       
    48         "QtHelp" => "$basedir/tools/assistant/lib",
    47         "QtHelp" => "$basedir/tools/assistant/lib",
    49         "QtDesigner" => "$basedir/tools/designer/src/lib",
    48         "QtDesigner" => "$basedir/tools/designer/src/lib",
    50         "QtUiTools" => "$basedir/tools/designer/src/uitools",
    49         "QtUiTools" => "$basedir/tools/designer/src/uitools",
    51         "QtDBus" => "$basedir/src/dbus",
    50         "QtDBus" => "$basedir/src/dbus",
    52         "QtWebKit" => "$basedir/src/3rdparty/webkit/WebCore",
    51         "QtWebKit" => "$basedir/src/3rdparty/webkit/WebCore",
    61 #$modules{"QtCore"} .= ";$basedir/mkspecs/" . $ENV{"MKSPEC"} if defined $ENV{"MKSPEC"};
    60 #$modules{"QtCore"} .= ";$basedir/mkspecs/" . $ENV{"MKSPEC"} if defined $ENV{"MKSPEC"};
    62 
    61 
    63 # global variables (modified by options)
    62 # global variables (modified by options)
    64 my $module = 0;
    63 my $module = 0;
    65 my $showonly = 0;
    64 my $showonly = 0;
       
    65 my $quiet = 0;
    66 my $remove_stale = 1;
    66 my $remove_stale = 1;
    67 my $force_win = 0;
    67 my $force_win = 0;
    68 my $force_relative = 0;
    68 my $force_relative = 0;
    69 my $check_includes = 0;
    69 my $check_includes = 0;
    70 my $copy_headers = 0;
    70 my $copy_headers = 0;
    96     print "  -showonly             Show action but not perform        (default: " . ($showonly ? "yes" : "no") . ")\n";
    96     print "  -showonly             Show action but not perform        (default: " . ($showonly ? "yes" : "no") . ")\n";
    97     print "  -outdir <PATH>        Specify output directory for sync  (default: $out_basedir)\n";
    97     print "  -outdir <PATH>        Specify output directory for sync  (default: $out_basedir)\n";
    98     print "  -outsubdir <DIR>      Target subdir under outdir         (default: $out_subdir)\n";
    98     print "  -outsubdir <DIR>      Target subdir under outdir         (default: $out_subdir)\n";
    99     print "  -public               Create only public headers         (default: " . ($create_private_headers ? "no" : "yes") . ")\n";
    99     print "  -public               Create only public headers         (default: " . ($create_private_headers ? "no" : "yes") . ")\n";
   100     print "  -oneway               Don't sync back from outdir        (default: " . ($oneway ? "yes" : "no") . ")\n";
   100     print "  -oneway               Don't sync back from outdir        (default: " . ($oneway ? "yes" : "no") . ")\n";
       
   101     print "  -quiet                Only report problems, not activity (default: " . ($quiet ? "yes" : "no") . ")\n";
   101     print "  -separate-module <NAME>:<PROFILEDIR>:<HEADERDIR> Create headers for <NAME> with original headers in <HEADERDIR> relative to <PROFILEDIR> \n";
   102     print "  -separate-module <NAME>:<PROFILEDIR>:<HEADERDIR> Create headers for <NAME> with original headers in <HEADERDIR> relative to <PROFILEDIR> \n";
   102     print "  -help                 This help\n";
   103     print "  -help                 This help\n";
   103     exit 0;
   104     exit 0;
   104 }
   105 }
   105 
   106 
   328     $header =~ s=\\=/=g;
   329     $header =~ s=\\=/=g;
   329     return copyFile($iheader, $header) if($copy);
   330     return copyFile($iheader, $header) if($copy);
   330 
   331 
   331     unless(-e "$header") {
   332     unless(-e "$header") {
   332         my $header_dir = dirname($header);
   333         my $header_dir = dirname($header);
   333         mkpath $header_dir, 0777;
   334         mkpath $header_dir, !$quiet;
   334 
   335 
   335         #write it
   336         #write it
   336         my $iheader_out = fixPaths($iheader, $header_dir);
   337         my $iheader_out = fixPaths($iheader, $header_dir);
   337         open HEADER, ">$header" || die "Could not open $header for writing!\n";
   338         open HEADER, ">$header" || die "Could not open $header for writing!\n";
   338         print HEADER "#include \"$iheader_out\"\n";
   339         print HEADER "#include \"$iheader_out\"\n";
   358     $dir =~ s=\\=/=g;
   359     $dir =~ s=\\=/=g;
   359     $dir =~ s/\+/\\+/g;
   360     $dir =~ s/\+/\\+/g;
   360 
   361 
   361     #setup
   362     #setup
   362     my $ret = $file;
   363     my $ret = $file;
       
   364     $ret =~ s,/cygdrive/([a-zA-Z])/,$1:/,g;
   363     my $file_dir = dirname($file);
   365     my $file_dir = dirname($file);
   364     if($file_dir eq ".") {
   366     if($file_dir eq ".") {
   365         $file_dir = getcwd();
   367         $file_dir = getcwd();
   366         $file_dir =~ s=\\=/=g;
   368         $file_dir =~ s=\\=/=g;
   367     }
   369     }
   368     $file_dir =~ s,/cygdrive/([a-zA-Z])/,$1:,g;
   370     $file_dir =~ s,/cygdrive/([a-zA-Z])/,$1:/,g;
   369     if($dir eq ".") {
   371     if($dir eq ".") {
   370         $dir = getcwd();
   372         $dir = getcwd();
   371         $dir =~ s=\\=/=g;
   373         $dir =~ s=\\=/=g;
   372     }
   374     }
   373     $dir =~ s,/cygdrive/([a-zA-Z])/,$1:/,g;
   375     $dir =~ s,/cygdrive/([a-zA-Z])/,$1:/,g;
   468     }
   470     }
   469 
   471 
   470     if ( $knowdiff || ($filecontents ne $ifilecontents) ) {
   472     if ( $knowdiff || ($filecontents ne $ifilecontents) ) {
   471 	if ( $copy > 0 && !$oneway) {
   473 	if ( $copy > 0 && !$oneway) {
   472 	    my $file_dir = dirname($file);
   474 	    my $file_dir = dirname($file);
   473 	    mkpath $file_dir, 0777 unless(-e "$file_dir");
   475 	    mkpath $file_dir, !$quiet unless(-e "$file_dir");
   474 	    print "$file $ifile $copy\n";
       
   475 	    open(O, "> " . $file) || die "Could not open $file for writing (no write permission?)";
   476 	    open(O, "> " . $file) || die "Could not open $file for writing (no write permission?)";
   476 	    local $/;
   477 	    local $/;
   477 	    binmode O;
   478 	    binmode O;
   478 	    print O $ifilecontents;
   479 	    print O $ifilecontents;
   479 	    close O;
   480 	    close O;
   480 	    return 1;
   481 	    return 1;
   481 	} elsif ( $copy < 0 ) {
   482 	} elsif ( $copy < 0 ) {
   482 	    my $ifile_dir = dirname($ifile);
   483 	    my $ifile_dir = dirname($ifile);
   483 	    mkpath $ifile_dir, 0777 unless(-e "$ifile_dir");
   484 	    mkpath $ifile_dir, !$quiet unless(-e "$ifile_dir");
   484 	    open(O, "> " . $ifile) || die "Could not open $ifile for writing (no write permission?)";
   485 	    open(O, "> " . $ifile) || die "Could not open $ifile for writing (no write permission?)";
   485 	    local $/;
   486 	    local $/;
   486 	    binmode O;
   487 	    binmode O;
   487 	    print O $filecontents;
   488 	    print O $filecontents;
   488 	    close O;
   489 	    close O;
   504 sub symlinkFile
   505 sub symlinkFile
   505 {
   506 {
   506     my ($file,$ifile) = @_;
   507     my ($file,$ifile) = @_;
   507 
   508 
   508     if ($isunix) {
   509     if ($isunix) {
   509         print "symlink created for $file ";
   510         print "symlink created for $file " unless $quiet;
   510         if ( $force_relative && ($ifile =~ /^$basedir/)) {
   511         if ( $force_relative && ($ifile =~ /^$basedir/)) {
   511             my $t = getcwd();
   512             my $t = getcwd();
   512             my $c = -1;
   513             my $c = -1;
   513             my $p = "../";
   514             my $p = "../";
   514             $t =~ s-^$basedir/--;
   515             $t =~ s-^$basedir/--;
   515             $p .= "../" while( ($c = index( $t, "/", $c + 1)) != -1 );
   516             $p .= "../" while( ($c = index( $t, "/", $c + 1)) != -1 );
   516             $file =~ s-^$basedir/-$p-;
   517             $file =~ s-^$basedir/-$p-;
   517             print " ($file)\n";
   518             print " ($file)\n" unless $quiet;
   518         }
   519         }
   519         print "\n";
   520         print "\n" unless $quiet;
   520         return symlink($file, $ifile);
   521         return symlink($file, $ifile);
   521     }
   522     }
   522     return copyFile($file, $ifile);
   523     return copyFile($file, $ifile);
   523 }
   524 }
   524 
   525 
   598 	$var = "separate-module";
   599 	$var = "separate-module";
   599 	$val = shift @ARGV;
   600 	$val = shift @ARGV;
   600     } elsif("$arg" eq "-show") {
   601     } elsif("$arg" eq "-show") {
   601 	$var = "showonly";
   602 	$var = "showonly";
   602 	$val = "yes";
   603 	$val = "yes";
       
   604     } elsif("$arg" eq "-quiet") {
       
   605 	$var = "quiet";
       
   606 	$val = "yes";
   603     } elsif("$arg" eq "-base-dir") {
   607     } elsif("$arg" eq "-base-dir") {
   604         # skip, it's been dealt with at the top of the file
   608         # skip, it's been dealt with at the top of the file
   605         shift @ARGV;
   609         shift @ARGV;
   606         next;
   610         next;
   607     } elsif("$arg" eq '*') {
       
   608         # workaround for windows 9x where "%*" expands to "*"
       
   609         $var = 1;
       
   610     } elsif("$arg" eq "-outsubdir") {
   611     } elsif("$arg" eq "-outsubdir") {
   611 	$var = "outsubdir";
   612         $var = "outsubdir";
   612 	$val = shift @ARGV;
   613         $val = shift @ARGV;
   613     } elsif("$arg" eq "-public") {
   614     } elsif("$arg" eq "-public") {
   614 	$var = "public";
   615         $var = "public";
   615 	$val = "yes";
   616         $val = "yes";
   616     } elsif("$arg" eq "-oneway") {
   617     } elsif("$arg" eq "-oneway") {
   617 	$var = "oneway";
   618         $var = "oneway";
   618 	$val = "yes";
   619         $val = "yes";
   619     }
   620     }
   620 
   621 
   621     #do something
   622     #do something
   622     if(!$var || "$var" eq "show_help") {
   623     if(!$var || "$var" eq "show_help") {
   623 	print "Unknown option: $arg\n\n" if(!$var);
   624 	print "Unknown option: $arg\n\n" if(!$var);
   632 	if("$val" eq "yes") {
   633 	if("$val" eq "yes") {
   633 	    $showonly++;
   634 	    $showonly++;
   634 	} elsif($showonly) {
   635 	} elsif($showonly) {
   635 	    $showonly--;
   636 	    $showonly--;
   636 	}
   637 	}
       
   638     } elsif ("$var" eq "quiet") {
       
   639 	if("$val" eq "yes") {
       
   640 	    $quiet++;
       
   641 	} elsif($quiet) {
       
   642 	    $quiet--;
       
   643 	}
   637     } elsif ("$var" eq "check-includes") {
   644     } elsif ("$var" eq "check-includes") {
   638 	if("$val" eq "yes") {
   645 	if("$val" eq "yes") {
   639 	    $check_includes++;
   646 	    $check_includes++;
   640 	} elsif($check_includes) {
   647 	} elsif($check_includes) {
   641 	    $check_includes--;
   648 	    $check_includes--;
   663     } elsif ("$var" eq "oneway") {
   670     } elsif ("$var" eq "oneway") {
   664 	$oneway = ("$val" eq "yes" ? 1 : 0);
   671 	$oneway = ("$val" eq "yes" ? 1 : 0);
   665     } elsif ("$var" eq "outsubdir") {
   672     } elsif ("$var" eq "outsubdir") {
   666 	$out_subdir = $val;
   673 	$out_subdir = $val;
   667     } elsif ("$var" eq "module") {
   674     } elsif ("$var" eq "module") {
   668 	print "module :$val:\n";
   675 	print "module :$val:\n" unless $quiet;
   669 	die "No such module: $val" unless(defined $modules{$val});
   676 	die "No such module: $val" unless(defined $modules{$val});
   670 	push @modules_to_sync, $val;
   677 	push @modules_to_sync, $val;
   671     } elsif ("$var" eq "separate-module") {
   678     } elsif ("$var" eq "separate-module") {
   672         my ($module, $prodir, $headerdir) = split(/:/, $val);
   679         my ($module, $prodir, $headerdir) = split(/:/, $val);
   673         $modules{$module} = $prodir;
   680         $modules{$module} = $prodir;
   691 @modules_to_sync = keys(%modules) if($#modules_to_sync == -1);
   698 @modules_to_sync = keys(%modules) if($#modules_to_sync == -1);
   692 
   699 
   693 $isunix = checkUnix; #cache checkUnix
   700 $isunix = checkUnix; #cache checkUnix
   694 
   701 
   695 # create path
   702 # create path
   696 mkpath "$out_basedir/$out_subdir", 0777;
   703 mkpath "$out_basedir/$out_subdir", !$quiet;
   697 
   704 
   698 my @ignore_headers = ();
   705 my @ignore_headers = ();
   699 my $class_lib_map_contents = "";
   706 my $class_lib_map_contents = "";
   700 my @ignore_for_master_contents = ( "qt.h", "qpaintdevicedefs.h" );
   707 my @ignore_for_master_contents = ( "qt.h", "qpaintdevicedefs.h" );
   701 my @ignore_for_include_check = ( "qatomic.h" );
   708 my @ignore_for_include_check = ( "qatomic.h" );
   702 my @ignore_for_qt_begin_header_check = ( "qiconset.h", "qconfig.h", "qconfig-dist.h", "qconfig-large.h", "qconfig-medium.h", "qconfig-minimal.h", "qconfig-small.h", "qfeatures.h", "qt_windows.h" );
   709 my @ignore_for_qt_begin_header_check = ( "qiconset.h", "qconfig.h", "qconfig-dist.h", "qconfig-large.h", "qconfig-medium.h", "qconfig-minimal.h", "qconfig-small.h", "qfeatures.h", "qt_windows.h" );
   703 my @ignore_for_qt_begin_namespace_check = ( "qconfig.h", "qconfig-dist.h", "qconfig-large.h", "qconfig-medium.h", "qconfig-minimal.h", "qconfig-small.h", "qfeatures.h", "qatomic_arch.h", "qatomic_windowsce.h", "qt_windows.h", "qatomic_macosx.h" );
   710 my @ignore_for_qt_begin_namespace_check = ( "qconfig.h", "qconfig-dist.h", "qconfig-large.h", "qconfig-medium.h", "qconfig-minimal.h", "qconfig-small.h", "qfeatures.h", "qatomic_arch.h", "qatomic_windowsce.h", "qt_windows.h", "qatomic_macosx.h" );
   704 my @ignore_for_qt_module_check = ( "$modules{QtCore}/arch", "$modules{QtCore}/global", "$modules{QtSql}/drivers", "$modules{QtTest}", "$modules{QtAssistant}", "$modules{QtDesigner}", "$modules{QtUiTools}", "$modules{QtDBus}", "$modules{phonon}" );
   711 my @ignore_for_qt_module_check = ( "$modules{QtCore}/arch", "$modules{QtCore}/global", "$modules{QtSql}/drivers", "$modules{QtTest}", "$modules{QtDesigner}", "$modules{QtUiTools}", "$modules{QtDBus}", "$modules{phonon}" );
   705 
   712 
   706 foreach (@modules_to_sync) {
   713 foreach (@modules_to_sync) {
   707     #iteration info
   714     #iteration info
   708     my $lib = $_;
   715     my $lib = $_;
   709     my $dir = "$modules{$lib}";
   716     my $dir = "$modules{$lib}";
   894 			else {
   901 			else {
   895 			    my $pri_install_iheader = fixPaths($iheader, $current_dir);
   902 			    my $pri_install_iheader = fixPaths($iheader, $current_dir);
   896 			    $pri_install_pfiles.= "$pri_install_iheader ";;
   903 			    $pri_install_pfiles.= "$pri_install_iheader ";;
   897 			}
   904 			}
   898                     }
   905                     }
   899 		    print "header created for $iheader ($header_copies)\n" if($header_copies > 0);
   906 		    print "header created for $iheader ($header_copies)\n" if($header_copies > 0 && !$quiet);
   900                 }
   907                 }
   901             }
   908             }
   902         }
   909         }
   903     }
   910     }
   904 
   911 
   909         my @master_includes;
   916         my @master_includes;
   910 	push @master_includes, "$out_basedir/$out_subdir/$lib/$lib";
   917 	push @master_includes, "$out_basedir/$out_subdir/$lib/$lib";
   911 	push @master_includes, "$out_basedir/$out_subdir/phonon_compat/Phonon/Phonon" if ($lib eq "phonon");
   918 	push @master_includes, "$out_basedir/$out_subdir/phonon_compat/Phonon/Phonon" if ($lib eq "phonon");
   912         foreach my $master_include (@master_includes) {
   919         foreach my $master_include (@master_includes) {
   913             #generate the "master" include file
   920             #generate the "master" include file
   914             $pri_install_files .= fixPaths($master_include, "$modules{$lib}") . " "; #get the master file installed too
   921             my @tmp = split(/;/,$modules{$lib});
       
   922             $pri_install_files .= fixPaths($master_include, "$tmp[0]") . " "; #get the master file installed too
   915             if($master_include && -e "$master_include") {
   923             if($master_include && -e "$master_include") {
   916                 open MASTERINCLUDE, "<$master_include";
   924                 open MASTERINCLUDE, "<$master_include";
   917                 local $/;
   925                 local $/;
   918                 binmode MASTERINCLUDE;
   926                 binmode MASTERINCLUDE;
   919                 my $oldmaster = <MASTERINCLUDE>;
   927                 my $oldmaster = <MASTERINCLUDE>;
   921                 $oldmaster =~ s/\r//g; # remove \r's , so comparison is ok on all platforms
   929                 $oldmaster =~ s/\r//g; # remove \r's , so comparison is ok on all platforms
   922                 $master_include = 0 if($oldmaster eq $master_contents);
   930                 $master_include = 0 if($oldmaster eq $master_contents);
   923             }
   931             }
   924             if($master_include && $master_contents) {
   932             if($master_include && $master_contents) {
   925                 my $master_dir = dirname($master_include);
   933                 my $master_dir = dirname($master_include);
   926                 mkpath $master_dir, 0777;
   934                 mkpath $master_dir, !$quiet;
   927                 print "header (master) created for $lib\n";
   935                 print "header (master) created for $lib\n" unless $quiet;
   928                 open MASTERINCLUDE, ">$master_include";
   936                 open MASTERINCLUDE, ">$master_include";
   929                 print MASTERINCLUDE "$master_contents";
   937                 print MASTERINCLUDE "$master_contents";
   930                 close MASTERINCLUDE;
   938                 close MASTERINCLUDE;
   931             }
   939             }
   932         }
   940         }
   946             $old_headers_pri_contents =~ s/\r//g; # remove \r's , so comparison is ok on all platforms
   954             $old_headers_pri_contents =~ s/\r//g; # remove \r's , so comparison is ok on all platforms
   947             $headers_pri_file = 0 if($old_headers_pri_contents eq $headers_pri_contents);
   955             $headers_pri_file = 0 if($old_headers_pri_contents eq $headers_pri_contents);
   948         }
   956         }
   949         if($headers_pri_file && $master_contents) {
   957         if($headers_pri_file && $master_contents) {
   950             my $headers_pri_dir = dirname($headers_pri_file);
   958             my $headers_pri_dir = dirname($headers_pri_file);
   951             mkpath $headers_pri_dir, 0777;
   959             mkpath $headers_pri_dir, !$quiet;
   952             print "headers.pri file created for $lib\n";
   960             print "headers.pri file created for $lib\n" unless $quiet;
   953             open HEADERS_PRI_FILE, ">$headers_pri_file";
   961             open HEADERS_PRI_FILE, ">$headers_pri_file";
   954             print HEADERS_PRI_FILE "$headers_pri_contents";
   962             print HEADERS_PRI_FILE "$headers_pri_contents";
   955             close HEADERS_PRI_FILE;
   963             close HEADERS_PRI_FILE;
   956         }
   964         }
   957     }
   965     }
   967 	$old_class_lib_map_contents =~ s/\r//g; # remove \r's , so comparison is ok on all platforms
   975 	$old_class_lib_map_contents =~ s/\r//g; # remove \r's , so comparison is ok on all platforms
   968 	$class_lib_map = 0 if($old_class_lib_map_contents eq $class_lib_map_contents);
   976 	$class_lib_map = 0 if($old_class_lib_map_contents eq $class_lib_map_contents);
   969     }
   977     }
   970     if($class_lib_map) {
   978     if($class_lib_map) {
   971 	my $class_lib_map_dir = dirname($class_lib_map);
   979 	my $class_lib_map_dir = dirname($class_lib_map);
   972 	mkpath $class_lib_map_dir, 0777;
   980 	mkpath $class_lib_map_dir, !$quiet;
   973 	open CLASS_LIB_MAP, ">$class_lib_map";
   981 	open CLASS_LIB_MAP, ">$class_lib_map";
   974 	print CLASS_LIB_MAP "$class_lib_map_contents";
   982 	print CLASS_LIB_MAP "$class_lib_map_contents";
   975 	close CLASS_LIB_MAP;
   983 	close CLASS_LIB_MAP;
   976     }
   984     }
   977 }
   985 }