]> git.saurik.com Git - apple/configd.git/blobdiff - SystemConfiguration.fproj/update-headers
configd-289.tar.gz
[apple/configd.git] / SystemConfiguration.fproj / update-headers
diff --git a/SystemConfiguration.fproj/update-headers b/SystemConfiguration.fproj/update-headers
new file mode 100755 (executable)
index 0000000..62838ac
--- /dev/null
@@ -0,0 +1,130 @@
+#!/usr/bin/perl
+
+if (!$ENV{"INSTALL_DIR"} or !$ENV{"PUBLIC_HEADERS_FOLDER_PATH"} or !$ENV{"PRIVATE_HEADERS_FOLDER_PATH"}) {
+       die "Cannot update headers, missing ENV vars\n";
+}
+
+$DO_SPLIT = ($#ARGV >= 0 and $ARGV[0] eq "split");
+
+$API_BASE = $ENV{"INSTALL_DIR"} . "/" . $ENV{"PUBLIC_HEADERS_FOLDER_PATH"};
+$SPI_BASE = $ENV{"INSTALL_DIR"} . "/" . $ENV{"PRIVATE_HEADERS_FOLDER_PATH"};
+
+sub clean_INC {
+       my ($inc) = @_;
+
+       $inc =~ s/#ifdef\s+USE_SYSTEMCONFIGURATION_PRIVATE_HEADERS\s*.*?\n#include\s+<SystemConfiguration\/.*?>.*?\n#else.*?\n//;
+       $inc =~ s/#endif\s+.*?USE_SYSTEMCONFIGURATION_PRIVATE_HEADERS.*?\n//;
+       
+       return $inc;
+}
+
+sub clean_API {
+       my ($api) = @_;
+       my ($api_new);
+
+       $api_new = $DO_SPLIT ? $api : clean_INC($api);
+       $api_new =~ s/(__MAC)_\w+\/\*SPI\*\//\1_NA/g;
+       $api_new =~ s/(\(__MAC_OS_X_VERSION_MIN_REQUIRED >= \d+\)\/\*SPI\*\/ \|\| )//g;
+       $api_new =~ s/(__IPHONE)_\w+\/\*SPI\*\//\1_NA/g;
+       $api_new =~ s/( \|\| \(__IPHONE_OS_VERSION_MIN_REQUIRED >= \d+\))\/\*SPI\*\///g;
+
+       return $api_new;
+}
+
+sub clean_SPI {
+       my ($spi) = @_;
+       my ($spi_new);
+
+       $spi_new = clean_INC($spi);
+       $spi_new =~ s/(__MAC_\w+)\/\*SPI\*\//\1/g;
+       $api_new =~ s/(\(__MAC_OS_X_VERSION_MIN_REQUIRED >= \d+\))\/\*SPI\*\/( \|\| )/\1\2/g;
+       $spi_new =~ s/(__IPHONE_\w+)\/\*SPI\*\//\1/g;
+       $spi_new =~ s/( \|\| )(\(__IPHONE_OS_VERSION_MIN_REQUIRED >= \d+\))\/\*SPI\*\//\1\2/g;
+
+       return $spi_new;
+}
+
+#
+# Update .../PrivateHeaders
+#
+
+opendir(HEADERS, $SPI_BASE);
+@headers = readdir(HEADERS);
+closedir(HEADERS);
+
+undef $/;
+for (@headers) {
+       next if ($_ eq '.');
+       next if ($_ eq '..');
+
+       $spi_header = $_;
+       $spi_path = $SPI_BASE . "/" . $spi_header;
+       next if (! -f $spi_path);
+
+       open(SPI, "<", $spi_path);
+       $spi = <SPI>;
+       close(SPI);
+
+       $spi_new = clean_SPI($spi);
+       if ($spi ne $spi_new) {
+#              printf "cleaning .../PrivateHeaders/%s\n", $spi_header;
+               open(SPI, ">", $spi_path);
+               print SPI $spi_new;
+               close(SPI);
+       }
+}
+$/ = "\n";
+
+#
+# Update .../Headers
+#
+
+opendir(HEADERS, $API_BASE);
+@headers = readdir(HEADERS);
+closedir(HEADERS);
+
+undef $/;
+for (@headers) {
+       next if ($_ eq '.');
+       next if ($_ eq '..');
+
+       $api_header = $_;
+       $api_path = $API_BASE . "/" . $api_header;
+       next if (! -f $api_path);
+
+       open(API, "<", $api_path);
+       $api = <API>;
+       close(API);
+
+       $api_new = clean_API($api);
+       if ($api ne $api_new) {
+#              printf "cleaning .../Headers/%s\n", $api_header;
+               open(API, ">", $api_path);
+               print API $api_new;
+               close(API);
+
+               if ($DO_SPLIT) {
+                       $spi_new = clean_SPI($api);
+                       if ($api_new ne $spi_new) {
+                               if ((($spi_header) = ($api =~ /#ifdef\s+USE_SYSTEMCONFIGURATION_PRIVATE_HEADERS\s*.*?\n#include\s+<SystemConfiguration\/(.*?\.h)>\s*.*?\n/))) {
+                                       if ($api_header eq $spi_header) {
+                                               die "API & SPI header not unique: $api_header\n";
+                                       }
+                               } else {
+                                       die "Header missing #ifdef/#else/#endif: $api_header\n";
+#                                      $spi_header = $api_header;
+#                                      $spi_header =~ s/\.h$/PRIVATE.h/;
+                               }
+
+#                              printf "  adding .../PrivateHeaders/%s\n", $spi_header;
+                               $spi_path = $SPI_BASE . "/" . $spi_header;
+                               open(SPI, ">", $spi_path);
+                               print SPI $spi_new;
+                               close(SPI);
+                       }
+               }
+       }
+}
+$/ = "\n";
+
+exit 0;