| package filehelper; |
| |
| #************************************************************** |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| #************************************************************** |
| |
| |
| |
| use strict; |
| use warnings; |
| use strict; |
| use English; # $OSNAME, ... |
| use stringhelper; |
| |
| BEGIN { |
| use Exporter (); |
| our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); |
| |
| $VERSION = 1.00; |
| # if using RCS/CVS, this may be preferred |
| $VERSION = do { my @r = (q$Revision: 1.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker |
| @ISA = qw(Exporter); |
| @EXPORT = qw(&dospath &unixpath &appendPath &appendClass &setPrefix &getToolsPrefix &rmkdir &getJavaPathSeparator &getJavaFileDirSeparator &getFromPathes &convertCygwinPath); |
| %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], |
| # your exported package globals go here, |
| # as well as any optionally exported functions |
| @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); |
| } |
| |
| |
| # ------------------------------------------------------------------------------ |
| # helper, to change all file separators |
| sub dospath($) |
| { |
| my $sPath = shift; |
| if ($OSNAME eq "MSWin32") |
| { |
| # make out of '/' a '\' |
| $sPath =~ s/\//\\/g; |
| } |
| else |
| { |
| } |
| return $sPath; |
| } |
| |
| sub unixpath($) |
| { |
| my $sPath = shift; |
| if ($OSNAME ne "MSWin32") |
| { |
| # make out of '\' a '/' |
| $sPath =~ s/\\/\//g; |
| } |
| else |
| { |
| } |
| return $sPath; |
| } |
| |
| # ------------------------------------------------------------------------------ |
| # sub getGlobalInstSet() |
| # { |
| # my $sJumbo; |
| # if ($OSNAME eq "MSWin32") |
| # { |
| # # $sJumbo = "\\\\so-gfxcmp-lin\\jumbo_ship\\install"; |
| # $sJumbo = "\\\\jumbo.germany.sun.com\\ship\\install"; |
| # } |
| # elsif ($OSNAME eq "cygwin") |
| # { |
| # $sJumbo = "//jumbo.germany.sun.com/ship/install"; |
| # } |
| # else |
| # { |
| # $sJumbo = "/net/jumbo.germany.sun.com/ship/install"; |
| # } |
| # return $sJumbo; |
| # } |
| |
| # ------------------------------------------------------------------------------ |
| # sub getSolarisLockFile() |
| # { |
| # my $sSolarisLockFile = "/tmp/.ai.pkg.zone.lock-afdb66cf-1dd1-11b2-a049-000d560ddc3e"; |
| # return $sSolarisLockFile; |
| # } |
| # |
| # sub checkForSolarisLock() |
| # { |
| # if ($OSNAME eq "solaris") |
| # { |
| # # wait until the internal installer lock is gone |
| # while ( -e getSolarisLockFile() ) |
| # { |
| # while ( -e getSolarisLockFile() ) |
| # { |
| # log_print( "Warning: Wait active until installer lock is gone. \n"); |
| # sleep 1; |
| # } |
| # sleep 5; |
| # } |
| # log_print( "[ok], lock is gone.\n"); |
| # } |
| # } |
| # |
| # sub deleteSolarisLock() |
| # { |
| # if ($OSNAME eq "solaris") |
| # { |
| # sleep 1; |
| # unlink getSolarisLockFile(); |
| # |
| # sleep 1; |
| # if ( -e getSolarisLockFile() ) |
| # { |
| # # try delete the file as super user? |
| # `sudo rm -f getSolarisLockFile()`; |
| # sleep 1; |
| # } |
| # } |
| # } |
| |
| # ------------------------------------------------------------------------------ |
| sub appendPath($$) |
| { |
| my $sPath = shift; |
| my $sAddPath = shift; |
| if ($sPath && $sAddPath) |
| { |
| if (! endswith($sPath, "/") && |
| ! endswith($sPath, "\\")) |
| { |
| # getJavaFileDirSeparator(); |
| $sPath .= "/"; |
| } |
| $sPath .= $sAddPath; |
| } |
| return $sPath; |
| } |
| |
| sub appendClass($$) |
| { |
| my $sPath = shift; |
| my $sAddPath = shift; |
| |
| my $sSeparator = getJavaPathSeparator(); |
| if ($sPath && $sAddPath) |
| { |
| if (! endswith($sPath, $sSeparator)) |
| { |
| # getJavaFileDirSeparator(); |
| $sPath .= $sSeparator; |
| } |
| $sPath .= $sAddPath; |
| } |
| return $sPath; |
| } |
| |
| # ------------------------------------------------------------------------------ |
| |
| our $sPrefix; |
| sub setPrefix($) |
| { |
| $sPrefix = shift; |
| } |
| |
| sub getPrefix() |
| { |
| return $sPrefix; |
| } |
| |
| # ------------------------------------------------------------------------------ |
| our $programprefix; |
| |
| # sub getProgramPrefix($) |
| # { |
| # my $sDBDistinct = shift; |
| # |
| # my $sProgramPrefix; |
| # if (! $programprefix) |
| # { |
| # if ($OSNAME eq "MSWin32") |
| # { |
| # # $programprefix = "C:/gfxcmp/programs"; |
| # $programprefix = "C:"; |
| # if (getPrefix() eq "performance") |
| # { |
| # $programprefix = "D:"; |
| # } |
| # $programprefix = appendPath($programprefix, "gp"); |
| # } |
| # elsif ($OSNAME eq "linux") |
| # { |
| # $programprefix = "/space/" . getPrefix() . "/programs"; |
| # } |
| # elsif ($OSNAME eq "solaris") |
| # { |
| # $programprefix = "/space/" . getPrefix() . "/programs"; |
| # } |
| # else |
| # { |
| # print "Error: This environment isn't supported yet.\n"; |
| # exit(1); |
| # } |
| # } |
| # $sProgramPrefix = appendPath($programprefix, substr($sDBDistinct, 0, 19)); |
| # return $sProgramPrefix; |
| # } |
| # ------------------------------------------------------------------------------ |
| our $toolsprefix; |
| |
| sub getToolsPrefix() |
| { |
| my $sToolsPrefix; |
| if (! $toolsprefix) |
| { |
| if ($OSNAME eq "MSWin32") |
| { |
| $toolsprefix = "C:"; |
| if (getPrefix() eq "performance") |
| { |
| $toolsprefix = "D:"; |
| } |
| } |
| elsif ($OSNAME eq "linux") |
| { |
| $toolsprefix = "/space"; |
| } |
| elsif ($OSNAME eq "solaris") |
| { |
| $toolsprefix = "/space"; |
| } |
| else |
| { |
| print "Error: This environment isn't supported yet.\n"; |
| exit(1); |
| } |
| $toolsprefix = appendPath($toolsprefix, getPrefix()); |
| $toolsprefix = appendPath($toolsprefix, "tools"); |
| } |
| $sToolsPrefix = $toolsprefix; |
| return $sToolsPrefix; |
| } |
| |
| # also Windows safe |
| sub rmkdir($) |
| { |
| my($tpath) = shift; |
| my $dir; |
| my $accum = ""; |
| |
| my @dirs = split(/\//, $tpath); |
| if ( $#dirs eq 0 ) |
| { |
| @dirs = split("\\\\", $tpath); |
| } |
| |
| foreach $dir (@dirs) |
| { |
| $accum = "$accum$dir/"; |
| if($dir ne "") |
| { |
| if(! -d "$accum") |
| { |
| mkdir ($accum); |
| chmod (0777,$accum); |
| } |
| } |
| } |
| } |
| |
| # ------------------------------------------------------------------------------ |
| sub getJavaPathSeparator() |
| { |
| my $ps = ":"; |
| if ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") |
| { |
| $ps = ";"; |
| } |
| return $ps; |
| } |
| # ------------------------------------------------------------------------------ |
| sub getJavaFileDirSeparator() |
| { |
| my $sfs = "/"; |
| if ($OSNAME eq "MSWin32") |
| { |
| $sfs = "\\"; |
| } |
| return $sfs; |
| } |
| # ------------------------------------------------------------------------------ |
| sub getFromPathes($$) |
| { |
| my $sPathesIni = shift; |
| my $searchvalue = shift; |
| my $sResult; |
| if ( -e $sPathesIni) |
| { |
| local *PATHES; |
| if (open(PATHES, "$sPathesIni")) |
| { |
| my $line; |
| while ($line = <PATHES>) |
| { |
| chomp($line); |
| if ($line =~ /^$searchvalue=(.*)$/) |
| { |
| $sResult = $1; |
| } |
| } |
| close(PATHES); |
| } |
| } |
| return $sResult; |
| } |
| |
| sub convertCygwinPath($) |
| { |
| my $sPath = shift; |
| |
| if ($OSNAME eq "cygwin") |
| { |
| # print "Cygwin Path Patch.\n" if ($verbose); |
| if ($sPath =~ /\/cygdrive\/(.)/) |
| { |
| my $Letter = $1; |
| $sPath =~ s/\/cygdrive\/${Letter}/${Letter}\:/; |
| # print "Cygwin Path Patch: '$sPath'\n" if ($verbose); |
| } |
| } |
| return $sPath; |
| } |
| |
| |
| |
| 1; |