Added -disable-constants-check, -skip-added-constants and -skip-removed-constants options. Improved SysCheck.pm module. Move to secure HTTPS.
diff --git a/README b/README
index 28392fb..f44c5c7 100644
--- a/README
+++ b/README
@@ -5,7 +5,7 @@
   
   The tool is intended for developers of software libraries and Linux maintainers who are interested in ensuring backward compatibility, i.e. allow old applications to run or to be recompiled with newer library versions.
   
-  The tool is developed by Andrey Ponomarenko. You can order additional reports for visualization of the ABI structure and high detailed binary compatibility analysis here: http://abi-laboratory.pro/
+  The tool is developed by Andrey Ponomarenko. You can order additional reports for visualization of the ABI structure and high detailed binary compatibility analysis here: https://abi-laboratory.pro/
 
 INSTALL:
   sudo make install prefix=/usr
diff --git a/abi-compliance-checker.pl b/abi-compliance-checker.pl
index 0dece16..40033c4 100644
--- a/abi-compliance-checker.pl
+++ b/abi-compliance-checker.pl
@@ -92,7 +92,8 @@
 $CheckInfo, $Quick, $AffectLimit, $AllAffected, $CxxIncompat,
 $SkipInternalSymbols, $SkipInternalTypes, $TargetArch, $GccOptions,
 $TypesListPath, $SkipTypesListPath, $CheckPrivateABI, $CountSymbols, $OldStyle,
-$DisableQuickEmptyReport, $SkipTypedefUncover, $MinGWCompat, $SkipUnidentified);
+$DisableQuickEmptyReport, $SkipTypedefUncover, $MinGWCompat, $SkipUnidentified,
+$DisableConstantsCheck, $SkipAddedConstants, $SkipRemovedConstants);
 
 my $CmdName = get_filename($0);
 my %OS_LibExt = (
@@ -145,7 +146,10 @@
     "Empty_Set"=>11
 );
 
-my $HomePage = "http://lvc.github.io/abi-compliance-checker/";
+my %HomePage = (
+    "Dev"=>"https://github.com/lvc/abi-compliance-checker",
+    "Wiki"=>"https://lvc.github.io/abi-compliance-checker/"
+);
 
 my $ShortUsage = "ABI Compliance Checker (ABICC) $TOOL_VERSION
 A tool for checking backward compatibility of a C/C++ library API
@@ -200,6 +204,9 @@
   "types-list=s" => \$TypesListPath,
   "skip-symbols=s" => \$SkipSymbolsListPath,
   "skip-types=s" => \$SkipTypesListPath,
+  "disable-constants-check!" => \$DisableConstantsCheck,
+  "skip-added-constants!" => \$SkipAddedConstants,
+  "skip-removed-constants!" => \$SkipRemovedConstants,
   "headers-list=s" => \$TargetHeadersPath,
   "skip-headers=s" => \$SkipHeadersPath,
   "header=s" => \$TargetHeader,
@@ -471,6 +478,9 @@
   -skip-types PATH
       The list of types that should not be checked.
 
+  -disable-constants-check
+      Do not check for changes in constants.
+      
   -headers-list PATH
       The file with a list of headers, that should be checked/dumped.
       
@@ -805,7 +815,8 @@
     non-zero - Incompatible or the tool has run with errors.
 
 MORE INFORMATION:
-    ".$HomePage."\n");
+    ".$HomePage{"Wiki"}."
+    ".$HomePage{"Dev"}."\n\n";
 }
 
 my %Operator_Indication = (
@@ -17948,7 +17959,7 @@
     
     $Footer .= "<hr/>\n";
     $Footer .= "<div class='footer' align='right'>";
-    $Footer .= "<i>Generated by <a href='".$HomePage."'>ABI Compliance Checker</a> $TOOL_VERSION &#160;</i>\n";
+    $Footer .= "<i>Generated by <a href='".$HomePage{"Dev"}."'>ABI Compliance Checker</a> $TOOL_VERSION &#160;</i>\n";
     $Footer .= "</div>\n";
     $Footer .= "<br/>\n";
     
@@ -18343,9 +18354,12 @@
         
         if(not defined $Constants{2}{$Constant}{"Value"})
         { # removed
-            %{$CompatProblems_Constants{$Level}{$Constant}{"Removed_Constant"}} = (
-                "Target"=>$Constant,
-                "Old_Value"=>$Old_Value  );
+            if(not defined $SkipRemovedConstants)
+            {
+                %{$CompatProblems_Constants{$Level}{$Constant}{"Removed_Constant"}} = (
+                    "Target"=>$Constant,
+                    "Old_Value"=>$Old_Value  );
+            }
             next;
         }
         
@@ -18396,6 +18410,10 @@
         }
     }
     
+    if(defined $SkipAddedConstants) {
+        return;
+    }
+    
     foreach my $Constant (keys(%{$Constants{2}}))
     {
         if(not defined $Constants{1}{$Constant}{"Value"})
@@ -22816,8 +22834,12 @@
     }
     
     mergeSymbols($Level);
-    if(keys(%{$CheckedSymbols{$Level}})) {
-        mergeConstants($Level);
+    
+    if(not defined $DisableConstantsCheck)
+    {
+        if(keys(%{$CheckedSymbols{$Level}})) {
+            mergeConstants($Level);
+        }
     }
     
     $Cache{"mergeTypes"} = (); # free memory
@@ -22865,6 +22887,7 @@
     "NoStdInc"=>$NoStdInc,
     "CxxIncompat"=>$CxxIncompat,
     "SkipUnidentified"=>$SkipUnidentified,
+    "DisableConstantsCheck"=>$DisableConstantsCheck,
     
     "BinaryOnly" => $BinaryOnly,
     "SourceOnly" => $SourceOnly
diff --git a/doc/Changelog.html b/doc/Changelog.html
index aa03431..80a099d 100644
--- a/doc/Changelog.html
+++ b/doc/Changelog.html
@@ -36,7 +36,7 @@
 </head>
 
 <body>
-<a href="https://github.com/lvc/abi-compliance-checker"><img style="position: absolute; top: 0; right: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub" /></a>
+<a href="https://github.com/lvc/abi-compliance-checker"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub" /></a>
 
 <div id="container">
 
diff --git a/doc/Xml-Descriptor.html b/doc/Xml-Descriptor.html
index 8dd7da9..ca9c392 100644
--- a/doc/Xml-Descriptor.html
+++ b/doc/Xml-Descriptor.html
@@ -37,7 +37,7 @@
 </head>
 
 <body>
-<a href="https://github.com/lvc/abi-compliance-checker"><img style="position: absolute; top: 0; right: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub" /></a>
+<a href="https://github.com/lvc/abi-compliance-checker"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub" /></a>
 
 <div id="container">
 
diff --git a/doc/index.html b/doc/index.html
index 2816b1b..8eafd8a 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -37,7 +37,7 @@
 </head>
 
 <body>
-  <a href="https://github.com/lvc/abi-compliance-checker"><img style="position: absolute; top: 0; right: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub" /></a>
+  <a href="https://github.com/lvc/abi-compliance-checker"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub" /></a>
 
   <div id="container">
 
@@ -61,7 +61,7 @@
       Binary incompatibility may result in crashing or incorrect behavior of applications built with an old version of a library if they run on a new one. Source incompatibility may result in recompilation errors with a new library version. The tool is intended for developers of software libraries and Linux maintainers who are interested in ensuring backward compatibility, i.e. allow old applications to run or to be recompiled with newer library versions.
       
       <p/>
-      The tool is developed by Andrey Ponomarenko. You can order additional reports for visualization of the ABI structure and high detailed binary compatibility analysis here: <a href='http://abi-laboratory.pro/'>http://abi-laboratory.pro/</a>
+      The tool is developed by Andrey Ponomarenko. You can order additional reports for visualization of the ABI structure and high detailed binary compatibility analysis here: <a href='https://abi-laboratory.pro/'>https://abi-laboratory.pro/</a>
 
 <table class='summary'><tr><td>
 <div>Table of Contents</div>
@@ -349,7 +349,7 @@
 </ul>
 <p/>
 
-See <a href='http://techbase.kde.org/Policies/Binary_Compatibility_Issues_With_C++'>"Binary Compatibility Issues With C++"</a> article from KDE TechBase for more info. 
+See <a href='https://community.kde.org/Policies/Binary_Compatibility_Issues_With_C++'>"Binary Compatibility Issues With C++"</a> article from KDE TechBase for more info. 
 
 <a name="SourceProblems"></a>
 <h2>Detectable Source Compatibility Problems</h2>
@@ -598,7 +598,7 @@
 
 <a name="Maintainers"></a>
 <h2>Maintainers</h2>
-The tool is developed by <a href="http://www.linkedin.com/pub/andrey-ponomarenko/67/366/818">Andrey Ponomarenko</a>.
+The tool is developed by <a href="https://www.linkedin.com/in/andreyponomarenko">Andrey Ponomarenko</a>.
 
 <a name="ChangeLog"></a>
 <h2>Changes</h2>
@@ -609,13 +609,13 @@
 
 <ul>
     <li>
-        <a href='http://techbase.kde.org/Policies/Binary_Compatibility_Issues_With_C++'>"Binary Compatibility Issues With C++"</a>, KDE TechBase 
+        <a href='https://community.kde.org/Policies/Binary_Compatibility_Issues_With_C++'>"Binary Compatibility Issues With C++"</a>, KDE TechBase 
     </li>
     <li>
-        <a href='http://techbase.kde.org/Policies/Binary_Compatibility_Examples'>"Binary Compatibility Examples"</a>, KDE TechBase 
+        <a href='https://community.kde.org/Policies/Binary_Compatibility_Examples'>"Binary Compatibility Examples"</a>, KDE TechBase 
     </li>
     <li>
-        <a href='http://doi.ieeecomputersociety.org/10.1109/VALID.2010.27'>"Automated Verification of Shared Libraries for Backward Binary Compatibility"</a>, A. Ponomarenko and V. Rubanov, VALID 2010
+        <a href='https://www.computer.org/csdl/proceedings/valid/2010/4146/00/4146a057-abs.html'>"Automated Verification of Shared Libraries for Backward Binary Compatibility"</a>, A. Ponomarenko and V. Rubanov, VALID 2010
     </li>
     <li>
         <a href='http://www.springerlink.com/content/905067689q7n0166/'>"Backward compatibility of software interfaces: Steps towards automatic verification"</a>, A. Ponomarenko and V. Rubanov, Programming and Computer Software 2012
diff --git a/modules/Internals/RegTests.pm b/modules/Internals/RegTests.pm
index ab3fc1c..782e55f 100644
--- a/modules/Internals/RegTests.pm
+++ b/modules/Internals/RegTests.pm
@@ -4,7 +4,7 @@
 # Copyright (C) 2009-2011 Institute for System Programming, RAS
 # Copyright (C) 2011-2012 Nokia Corporation and/or its subsidiary(-ies)
 # Copyright (C) 2011-2012 ROSA Laboratory
-# Copyright (C) 2012-2015 Andrey Ponomarenko's ABI Laboratory
+# Copyright (C) 2012-2016 Andrey Ponomarenko's ABI Laboratory
 #
 # Written by Andrey Ponomarenko
 #
@@ -2973,6 +2973,26 @@
     my $DECL_SPEC = ($OSgroup eq "windows")?"__declspec( dllexport )":"";
     my $EXTERN = ($OSgroup eq "windows")?"extern ":""; # add "extern" for CL compiler
     
+    # Struct to union
+    $HEADER1 .= "
+        typedef struct StructToUnion {
+            unsigned char A[64];
+        } StructToUnion;
+        
+        $DECL_SPEC int structToUnion(StructToUnion *p);";
+    $SOURCE1 .= "
+        int structToUnion(StructToUnion *p) { return 0; }";
+    
+    $HEADER2 .= "
+        typedef union StructToUnion {
+            unsigned char A[64];
+            void *p;
+        } StructToUnion;
+        
+        $DECL_SPEC int structToUnion(StructToUnion *p);";
+    $SOURCE2 .= "
+        int structToUnion(StructToUnion *p) { return 0; }";
+    
     # Typedef to function
     $HEADER1 .= "
         typedef int(TypedefToFunction)(int pX);
diff --git a/modules/Internals/Styles/CmpSystems.css b/modules/Internals/Styles/CmpSystems.css
index a499ccc..7552249 100644
--- a/modules/Internals/Styles/CmpSystems.css
+++ b/modules/Internals/Styles/CmpSystems.css
@@ -44,7 +44,7 @@
     white-space:normal;
     word-wrap:break-word;
 }
-table.summary td.ver {
+table.summary td.ver, table.summary th.ver {
     max-width:10em;
     white-space:normal;
     word-wrap:break-word;
diff --git a/modules/Internals/SysCheck.pm b/modules/Internals/SysCheck.pm
index 96065c7..340db4d 100644
--- a/modules/Internals/SysCheck.pm
+++ b/modules/Internals/SysCheck.pm
@@ -4,7 +4,7 @@
 # Copyright (C) 2009-2011 Institute for System Programming, RAS
 # Copyright (C) 2011-2012 Nokia Corporation and/or its subsidiary(-ies)
 # Copyright (C) 2011-2012 ROSA Laboratory
-# Copyright (C) 2012-2015 Andrey Ponomarenko's ABI Laboratory
+# Copyright (C) 2012-2016 Andrey Ponomarenko's ABI Laboratory
 #
 # Written by Andrey Ponomarenko
 #
@@ -28,7 +28,8 @@
 
 my ($Debug, $Quiet, $LogMode, $CheckHeadersOnly, $SystemRoot, $GCC_PATH,
 $CrossPrefix, $TargetSysInfo, $TargetLibraryName, $CrossGcc, $UseStaticLibs,
-$NoStdInc, $CxxIncompat, $SkipUnidentified, $OStarget, $BinaryOnly, $SourceOnly);
+$NoStdInc, $CxxIncompat, $SkipUnidentified, $OStarget, $BinaryOnly,
+$SourceOnly, $DisableConstantsCheck);
 
 my $OSgroup = get_OSgroup();
 my $TMP_DIR = tempdir(CLEANUP=>1);
@@ -65,6 +66,13 @@
     # sys_dumps/<System>/<Arch>/...
     my $SystemName1 = get_filename(get_dirname($SPath1));
     my $SystemName2 = get_filename(get_dirname($SPath2));
+    
+    my $SystemName1_P = $SystemName1;
+    my $SystemName2_P = $SystemName2;
+    
+    $SystemName1=~s/_/ /g;
+    $SystemName2=~s/_/ /g;
+    
     # sys_dumps/<System>/<Arch>/...
     my $ArchName = get_filename($SPath1);
     if($ArchName ne get_filename($SPath2)) {
@@ -87,7 +95,7 @@
             $GroupByHeaders = 1;
         }
     }
-    my $SYS_REPORT_PATH = "sys_compat_reports/".$SystemName1."_to_".$SystemName2."/$ArchName";
+    my $SYS_REPORT_PATH = "sys_compat_reports/".$SystemName1_P."_to_".$SystemName2_P."/$ArchName";
     rmtree($SYS_REPORT_PATH);
     my (%LibSoname1, %LibSoname2) = ();
     foreach (split(/\n/, readFile($SPath1."/sonames.txt")))
@@ -364,6 +372,14 @@
         if($GroupByHeaders) {
             $ACC_compare .= " -component header";
         }
+        
+        if($DisableConstantsCheck) {
+            $ACC_compare .= " -disable-constants-check";
+        }
+        
+        $ACC_compare .= " -skip-added-constants";
+        $ACC_compare .= " -skip-removed-constants";
+        
         if($Quiet)
         { # quiet mode
             $ACC_compare .= " -quiet";
@@ -450,7 +466,7 @@
                     unlink($DiffOut);
                 }
                 
-                my $Cmd_R = $RfcDiff." --width 75 --stdout \"$Path1\" \"$Path2\" >$DiffOut 2>/dev/null";
+                my $Cmd_R = $RfcDiff." --width 80 --stdout \"$Path1\" \"$Path2\" >$DiffOut 2>/dev/null";
                 qx/$Cmd_R/; # execute
                 
                 if(-s $DiffOut)
@@ -465,6 +481,11 @@
                     $Content=~s/(<td colspan=\"5\"[^>]*>)(.+)(<\/td>)/$1$3/;
                     $Content=~s/(<table) /$1 class='diff_tbl' /g;
                     
+                    $Content=~s&<td class="lineno" valign="top"></td>&&g;
+                    $Content=~s&<td class="lineno"></td>&&g;
+                    $Content=~s&<th></th>&&g;
+                    $Content=~s&<td></td>&&g;
+                    
                     $Content=~s/(\Q$N\E)(&nbsp;)/$1 ($LV1-$SystemName1)$2/;
                     $Content=~s/(\Q$N\E)(&nbsp;)/$1 ($LV2-$SystemName2)$2/;
                     
@@ -475,24 +496,27 @@
                 }
             }
             
-            my $Title = $LName.": headers diff between $LV1-$SystemName1 and $LV2-$SystemName2 versions";
-            my $Keywords = $LName.", header, diff";
-            my $Description = "Diff for header files between $LV1-$SystemName1 and $LV2-$SystemName2 versions of $LName";
-            my $Styles = readModule("Styles", "HeadersDiff.css");
-            
-            my $Link = "This html diff was produced by <a href='http://tools.ietf.org/tools/rfcdiff/'>rfcdiff</a> 1.41.";
-            
-            $Diff .= "<br/>";
-            $Diff .= "<div style='width:100%;' align='left'>$Link</div>\n";
-            
-            $Diff = "<h1>Headers diff for <span style='color:Blue;'>$LName</span> between <span style='color:Red;'>$LV1-$SystemName1</span> and <span style='color:Red;'>$LV2-$SystemName2</span> versions</h1><br/><br/>".$Diff;
-            
-            $Diff = "<table width='100%' cellpadding='0' cellspacing='0'><tr><td>$Diff</td></tr></table>";
-            
-            $Diff = composeHTML_Head($Title, $Keywords, $Description, $Styles, "")."\n<body>\n$Diff\n</body>\n</html>\n";
-            
-            my $Output = $SYS_REPORT_PATH."/headers_diff/$LName";
-            writeFile($Output."/diff.html", $Diff);
+            if($Diff)
+            {
+                my $Title = $LName.": headers diff between $LV1-$SystemName1 and $LV2-$SystemName2 versions";
+                my $Keywords = $LName.", header, diff";
+                my $Description = "Diff for header files between $LV1-$SystemName1 and $LV2-$SystemName2 versions of $LName";
+                my $Styles = readModule("Styles", "HeadersDiff.css");
+                
+                my $Link = "This html diff was produced by <a href='http://tools.ietf.org/tools/rfcdiff/'>rfcdiff</a> 1.41.";
+                
+                $Diff .= "<br/>";
+                $Diff .= "<div style='width:100%;' align='left'>$Link</div>\n";
+                
+                $Diff = "<h1>Headers diff for <span style='color:Blue;'>$LName</span> between <span style='color:Red;'>$LV1-$SystemName1</span> and <span style='color:Red;'>$LV2-$SystemName2</span> versions</h1><br/><br/>".$Diff;
+                
+                $Diff = "<table width='100%' cellpadding='0' cellspacing='0'><tr><td>$Diff</td></tr></table>";
+                
+                $Diff = composeHTML_Head($Title, $Keywords, $Description, $Styles, "")."\n<body>\n$Diff\n</body>\n</html>\n";
+                
+                my $Output = $SYS_REPORT_PATH."/headers_diff/$LName";
+                writeFile($Output."/diff.html", $Diff);
+            }
         }
     }
     
@@ -648,7 +672,7 @@
     
     $SYS_REPORT .= "<tr>\n";
     if(not $GroupByHeaders) {
-        $SYS_REPORT .= "<th>$SystemName1</th><th>$SystemName2</th>\n";
+        $SYS_REPORT .= "<th class='ver'>$SystemName1</th><th class='ver'>$SystemName2</th>\n";
     }
     if($BinaryOnly and $SourceOnly) {
         $SYS_REPORT .= "<th>Binary</th><th>Source</th>\n";
@@ -856,11 +880,17 @@
             }
         }
         
-        if(-d $HDiff."/".$LName) {
-            $SYS_REPORT .= "<td><a href=\'headers_diff/$LName/diff.html\'>diff</a></td>\n";
-        }
-        else {
-            $SYS_REPORT .= "<td>N/A</td>\n";
+        if(-d $HDiff)
+        {
+            if(-d $HDiff."/".$LName) {
+                $SYS_REPORT .= "<td><a href=\'headers_diff/$LName/diff.html\'>diff</a></td>\n";
+            }
+            elsif(defined $Added{$LName} or defined $Removed{$LName}) {
+                $SYS_REPORT .= "<td>N/A</td>\n";
+            }
+            else {
+                $SYS_REPORT .= "<td>Empty</td>\n";
+            }
         }
         
         $SYS_REPORT .= "</tr>\n";
@@ -1039,6 +1069,7 @@
     $NoStdInc = $S->{"NoStdInc"};
     $CxxIncompat = $S->{"CxxIncompat"};
     $SkipUnidentified = $S->{"SkipUnidentified"};
+    $DisableConstantsCheck = $S->{"DisableConstantsCheck"};
     
     $BinaryOnly = $S->{"BinaryOnly"};
     $SourceOnly = $S->{"SourceOnly"};
@@ -1231,6 +1262,11 @@
         my $VInfo = `$SigcheckCmd -nobanner -n $Path 2>$TMP_DIR/null`;
         $VInfo=~s/\s*\(.*\)\s*//;
         chomp($VInfo);
+        
+        if($VInfo eq "n/a") {
+            $VInfo = uc($VInfo);
+        }
+        
         return $VInfo;
     }
     return "";
@@ -1250,7 +1286,11 @@
   # should be used with -sysroot and -cross-gcc options
     my $Opts = $_[0];
     initModule($Opts);
-    my $SYS_DUMP_PATH = "sys_dumps/".$SysDescriptor{"Name"}."/".getArch(1);
+    
+    my $SysName_P = $SysDescriptor{"Name"};
+    $SysName_P=~s/ /_/g;
+    
+    my $SYS_DUMP_PATH = "sys_dumps/".$SysName_P."/".getArch(1);
     if(not $TargetLibraryName) {
         rmtree($SYS_DUMP_PATH);
     }