📄 webkitdirs.pm
字号:
# Copyright (C) 2005, 2006, 2007 Apple Inc. All rights reserved.## Redistribution and use in source and binary forms, with or without# modification, are permitted provided that the following conditions# are met:## 1. Redistributions of source code must retain the above copyright# notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright# notice, this list of conditions and the following disclaimer in the# documentation and/or other materials provided with the distribution. # 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of# its contributors may be used to endorse or promote products derived# from this software without specific prior written permission. ## THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.# Module to share code to get to WebKit directories.use strict;use warnings;use FindBin;use File::Basename;use POSIX;use VCSUtils;BEGIN { use Exporter (); our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); $VERSION = 1.00; @ISA = qw(Exporter); @EXPORT = qw(&chdirWebKit &baseProductDir &productDir &XcodeOptions &XcodeOptionString &XcodeOptionStringNoConfig &passedConfiguration &setConfiguration &safariPath &checkFrameworks ¤tSVNRevision); %EXPORT_TAGS = ( ); @EXPORT_OK = ();}our @EXPORT_OK;my $baseProductDir;my @baseProductDirOption;my $configuration;my $configurationForVisualStudio;my $configurationProductDir;my $sourceDir;my $currentSVNRevision;my $osXVersion;my $isQt;my $isGtk;my $isWx;my @wxArgs;my $isChromium;my $forceRun64Bit;# Variables for Win32 supportmy $vcBuildPath;my $windowsTmpPath;sub determineSourceDir{ return if $sourceDir; $sourceDir = $FindBin::Bin; $sourceDir =~ s|/+$||; # Remove trailing '/' as we would die later # walks up path checking each directory to see if it is the main WebKit project dir, # defined by containing JavaScriptCore, WebCore, and WebKit until ((-d "$sourceDir/JavaScriptCore" && -d "$sourceDir/WebCore" && -d "$sourceDir/WebKit") || (-d "$sourceDir/Internal" && -d "$sourceDir/OpenSource")) { if ($sourceDir !~ s|/[^/]+$||) { die "Could not find top level webkit directory above source directory using FindBin.\n"; } } $sourceDir = "$sourceDir/OpenSource" if -d "$sourceDir/OpenSource";}# used for scripts which are stored in a non-standard locationsub setSourceDir($){ ($sourceDir) = @_;}sub determineBaseProductDir{ return if defined $baseProductDir; determineSourceDir(); if (isAppleMacWebKit()) { open PRODUCT, "defaults read com.apple.Xcode PBXApplicationwideBuildSettings 2> /dev/null |" or die; $baseProductDir = join '', <PRODUCT>; close PRODUCT; $baseProductDir = $1 if $baseProductDir =~ /SYMROOT\s*=\s*\"(.*?)\";/s; undef $baseProductDir unless $baseProductDir =~ /^\//; if (!defined($baseProductDir)) { open PRODUCT, "defaults read com.apple.Xcode PBXProductDirectory 2> /dev/null |" or die; $baseProductDir = <PRODUCT>; close PRODUCT; if ($baseProductDir) { chomp $baseProductDir; undef $baseProductDir unless $baseProductDir =~ /^\//; } } } else { $baseProductDir = $ENV{"WEBKITOUTPUTDIR"}; if (isAppleWinWebKit() && $baseProductDir) { my $unixBuildPath = `cygpath --unix \"$baseProductDir\"`; chomp $unixBuildPath; $baseProductDir = $unixBuildPath; } } if ($baseProductDir && isAppleMacWebKit()) { $baseProductDir =~ s|^\Q$(SRCROOT)/..\E$|$sourceDir|; $baseProductDir =~ s|^\Q$(SRCROOT)/../|$sourceDir/|; $baseProductDir =~ s|^~/|$ENV{HOME}/|; die "Can't handle Xcode product directory with a ~ in it.\n" if $baseProductDir =~ /~/; die "Can't handle Xcode product directory with a variable in it.\n" if $baseProductDir =~ /\$/; @baseProductDirOption = (); } if (!defined($baseProductDir)) { $baseProductDir = "$sourceDir/WebKitBuild"; if (isGit() && isGitBranchBuild()) { my $branch = gitBranch(); $baseProductDir = "$baseProductDir/$branch"; } @baseProductDirOption = ("SYMROOT=$baseProductDir", "OBJROOT=$baseProductDir") if (isAppleMacWebKit()); if (isCygwin()) { my $dosBuildPath = `cygpath --windows \"$baseProductDir\"`; chomp $dosBuildPath; $ENV{"WEBKITOUTPUTDIR"} = $dosBuildPath; } }}sub setBaseProductDir($){ ($baseProductDir) = @_;}sub determineConfiguration{ return if defined $configuration; determineBaseProductDir(); if (open CONFIGURATION, "$baseProductDir/Configuration") { $configuration = <CONFIGURATION>; close CONFIGURATION; } if ($configuration) { chomp $configuration; # compatibility for people who have old Configuration files $configuration = "Release" if $configuration eq "Deployment"; $configuration = "Debug" if $configuration eq "Development"; } else { $configuration = "Release"; }}sub argumentsForConfiguration(){ determineConfiguration(); my @args = (); push(@args, '--debug') if $configuration eq "Debug"; push(@args, '--release') if $configuration eq "Release"; push(@args, '--qt') if isQt(); push(@args, '--gtk') if isGtk(); push(@args, '--wx') if isWx(); push(@args, '--chromium') if isChromium(); return @args;}sub determineConfigurationForVisualStudio{ return if defined $configurationForVisualStudio; determineConfiguration(); $configurationForVisualStudio = $configuration; return unless $configuration eq "Debug"; setupCygwinEnv(); chomp(my $dir = `cygpath -ua '$ENV{WEBKITLIBRARIESDIR}'`); $configurationForVisualStudio = "Debug_Internal" if -f "$dir/bin/CoreFoundation_debug.dll";}sub determineConfigurationProductDir{ return if defined $configurationProductDir; determineBaseProductDir(); determineConfiguration(); if (isAppleWinWebKit() && !isWx()) { $configurationProductDir = "$baseProductDir/bin"; } else { $configurationProductDir = "$baseProductDir/$configuration"; }}sub setConfigurationProductDir($){ ($configurationProductDir) = @_;}sub determineCurrentSVNRevision{ return if defined $currentSVNRevision; determineSourceDir(); $currentSVNRevision = svnRevisionForDirectory($sourceDir); return $currentSVNRevision;}sub chdirWebKit{ determineSourceDir(); chdir $sourceDir or die;}sub baseProductDir{ determineBaseProductDir(); return $baseProductDir;}sub sourceDir{ determineSourceDir(); return $sourceDir;}sub productDir{ determineConfigurationProductDir(); return $configurationProductDir;}sub configuration(){ determineConfiguration(); return $configuration;}sub configurationForVisualStudio(){ determineConfigurationForVisualStudio(); return $configurationForVisualStudio;}sub currentSVNRevision{ determineCurrentSVNRevision(); return $currentSVNRevision;}sub XcodeOptions{ determineBaseProductDir(); determineConfiguration(); return (@baseProductDirOption, "-configuration", $configuration);}sub XcodeOptionString{ return join " ", XcodeOptions();}sub XcodeOptionStringNoConfig{ return join " ", @baseProductDirOption;}sub XcodeCoverageSupportOptions(){ my @coverageSupportOptions = (); push @coverageSupportOptions, "GCC_GENERATE_TEST_COVERAGE_FILES=YES"; push @coverageSupportOptions, "GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES"; push @coverageSupportOptions, "EXTRA_LINK= -ftest-coverage -fprofile-arcs"; push @coverageSupportOptions, "OTHER_CFLAGS= -MD"; push @coverageSupportOptions, "OTHER_LDFLAGS=\$(OTHER_LDFLAGS) -ftest-coverage -fprofile-arcs -framework AppKit"; return @coverageSupportOptions;}my $passedConfiguration;my $searchedForPassedConfiguration;sub determinePassedConfiguration{ return if $searchedForPassedConfiguration; $searchedForPassedConfiguration = 1; my $isWinCairo = checkForArgumentAndRemoveFromARGV("--cairo-win32"); for my $i (0 .. $#ARGV) { my $opt = $ARGV[$i]; if ($opt =~ /^--debug$/i || $opt =~ /^--devel/i) { splice(@ARGV, $i, 1); $passedConfiguration = "Debug"; $passedConfiguration .= "_Cairo" if ($isWinCairo && isCygwin()); return; } if ($opt =~ /^--release$/i || $opt =~ /^--deploy/i) { splice(@ARGV, $i, 1); $passedConfiguration = "Release"; $passedConfiguration .= "_Cairo" if ($isWinCairo && isCygwin()); return; } if ($opt =~ /^--profil(e|ing)$/i) { splice(@ARGV, $i, 1); $passedConfiguration = "Profiling"; $passedConfiguration .= "_Cairo" if ($isWinCairo && isCygwin()); return; } } $passedConfiguration = undef;}sub passedConfiguration{ determinePassedConfiguration(); return $passedConfiguration;}sub setConfiguration{ if (my $config = shift @_) { $configuration = $config; return; } determinePassedConfiguration(); $configuration = $passedConfiguration if $passedConfiguration;}sub safariPathFromSafariBundle{ my ($safariBundle) = @_; return "$safariBundle/Contents/MacOS/Safari" if isAppleMacWebKit(); return $safariBundle if isAppleWinWebKit();}sub installedSafariPath{ my $safariBundle; if (isAppleMacWebKit()) { $safariBundle = "/Applications/Safari.app"; } elsif (isAppleWinWebKit()) { $safariBundle = `"$configurationProductDir/FindSafari.exe"`; $safariBundle =~ s/[\r\n]+$//; $safariBundle = `cygpath -u '$safariBundle'`; $safariBundle =~ s/[\r\n]+$//; $safariBundle .= "Safari.exe"; } return safariPathFromSafariBundle($safariBundle);}# Locate Safari.sub safariPath{ # Use WEBKIT_SAFARI environment variable if present. my $safariBundle = $ENV{WEBKIT_SAFARI}; if (!$safariBundle) { determineConfigurationProductDir(); # Use Safari.app in product directory if present (good for Safari development team). if (isAppleMacWebKit() && -d "$configurationProductDir/Safari.app") { $safariBundle = "$configurationProductDir/Safari.app"; } elsif (isAppleWinWebKit() && -x "$configurationProductDir/bin/Safari.exe") { $safariBundle = "$configurationProductDir/bin/Safari.exe"; } else { return installedSafariPath(); } } my $safariPath = safariPathFromSafariBundle($safariBundle); die "Can't find executable at $safariPath.\n" if isAppleMacWebKit() && !-x $safariPath; return $safariPath;}sub builtDylibPathForName{ my $libraryName = shift; determineConfigurationProductDir(); if (isQt() or isChromium()) { return "$configurationProductDir/$libraryName"; } if (isGtk()) { return "$configurationProductDir/$libraryName/../.libs/libwebkit-1.0.so"; } if (isAppleMacWebKit()) { return "$configurationProductDir/$libraryName.framework/Versions/A/$libraryName"; } if (isAppleWinWebKit()) { if ($libraryName eq "JavaScriptCore") { return "$baseProductDir/lib/$libraryName.lib"; } else {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -