1*9a1eeea9SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*9a1eeea9SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*9a1eeea9SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*9a1eeea9SAndrew Rist * distributed with this work for additional information 6*9a1eeea9SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*9a1eeea9SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*9a1eeea9SAndrew Rist * "License"); you may not use this file except in compliance 9*9a1eeea9SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*9a1eeea9SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*9a1eeea9SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*9a1eeea9SAndrew Rist * software distributed under the License is distributed on an 15*9a1eeea9SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*9a1eeea9SAndrew Rist * KIND, either express or implied. See the License for the 17*9a1eeea9SAndrew Rist * specific language governing permissions and limitations 18*9a1eeea9SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*9a1eeea9SAndrew Rist *************************************************************/ 21*9a1eeea9SAndrew Rist 22*9a1eeea9SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir package org.openoffice.setup.InstallerHelper; 25cdf0e10cSrcweir 26cdf0e10cSrcweir import org.openoffice.setup.InstallData; 27cdf0e10cSrcweir import org.openoffice.setup.ResourceManager; 28cdf0e10cSrcweir import org.openoffice.setup.SetupData.PackageDescription; 29cdf0e10cSrcweir import org.openoffice.setup.Util.Controller; 30cdf0e10cSrcweir import org.openoffice.setup.Util.Converter; 31cdf0e10cSrcweir import org.openoffice.setup.Util.ExecuteProcess; 32cdf0e10cSrcweir import org.openoffice.setup.Util.Informer; 33cdf0e10cSrcweir import org.openoffice.setup.Util.LogManager; 34cdf0e10cSrcweir import org.openoffice.setup.Util.SystemManager; 35cdf0e10cSrcweir import java.io.File; 36cdf0e10cSrcweir import java.util.HashMap; 37cdf0e10cSrcweir import java.util.Vector; 38cdf0e10cSrcweir 39cdf0e10cSrcweir public class SolarisHelper { 40cdf0e10cSrcweir SolarisHelper()41cdf0e10cSrcweir public SolarisHelper() { 42cdf0e10cSrcweir } 43cdf0e10cSrcweir createLocalTempDir()44cdf0e10cSrcweir private void createLocalTempDir() { 45cdf0e10cSrcweir String mktempString = "/usr/bin/mktemp"; 46cdf0e10cSrcweir File mktemp = new File(mktempString); 47cdf0e10cSrcweir if ( mktemp.exists() ) { 48cdf0e10cSrcweir // this is Solaris 10 49cdf0e10cSrcweir LogManager.setCommandsHeaderLine("Preparing Solaris 10 user installation"); 50cdf0e10cSrcweir InstallData data = InstallData.getInstance(); 51cdf0e10cSrcweir String mktempCommand = mktempString + " -d"; 52cdf0e10cSrcweir String[] mktempCommandArray = new String[2]; 53cdf0e10cSrcweir mktempCommandArray[0] = mktempString; 54cdf0e10cSrcweir mktempCommandArray[1] = "-d"; 55cdf0e10cSrcweir Vector returnVector = new Vector(); 56cdf0e10cSrcweir Vector returnErrorVector = new Vector(); 57cdf0e10cSrcweir int returnValue = ExecuteProcess.executeProcessReturnVector(mktempCommandArray, returnVector, returnErrorVector); 58cdf0e10cSrcweir String uniqueLocalDir = (String) returnVector.get(0); 59cdf0e10cSrcweir 60cdf0e10cSrcweir data.setLocalTempPath(uniqueLocalDir); 61cdf0e10cSrcweir 62cdf0e10cSrcweir String log = mktempCommand + "<br><b>Returns: " + uniqueLocalDir + "</b><br>"; 63cdf0e10cSrcweir LogManager.addCommandsLogfileComment(log); 64cdf0e10cSrcweir 65cdf0e10cSrcweir String installRoot = data.getInstallDir(); 66cdf0e10cSrcweir File installRootTemp = new File(installRoot, "tmp"); 67cdf0e10cSrcweir 68cdf0e10cSrcweir if ( installRootTemp.exists() ) { 69cdf0e10cSrcweir SystemManager.removeDirectory(installRootTemp); 70cdf0e10cSrcweir } 71cdf0e10cSrcweir 72cdf0e10cSrcweir String linkCommand = "ln -s " + uniqueLocalDir + " " + installRootTemp.getPath(); 73cdf0e10cSrcweir String[] linkCommandArray = new String[4]; 74cdf0e10cSrcweir linkCommandArray[0] = "ln"; 75cdf0e10cSrcweir linkCommandArray[1] = "-s"; 76cdf0e10cSrcweir linkCommandArray[2] = uniqueLocalDir; 77cdf0e10cSrcweir linkCommandArray[3] = installRootTemp.getPath(); 78cdf0e10cSrcweir 79cdf0e10cSrcweir // Vector returnVector = new Vector(); 80cdf0e10cSrcweir returnValue = ExecuteProcess.executeProcessReturnValue(linkCommandArray); 81cdf0e10cSrcweir 82cdf0e10cSrcweir log = linkCommand + "<br><b>Returns: " + returnValue + "</b><br>"; 83cdf0e10cSrcweir LogManager.addCommandsLogfileComment(log); 84cdf0e10cSrcweir } 85cdf0e10cSrcweir } 86cdf0e10cSrcweir removeLocalTempDir()87cdf0e10cSrcweir private void removeLocalTempDir() { 88cdf0e10cSrcweir InstallData data = InstallData.getInstance(); 89cdf0e10cSrcweir 90cdf0e10cSrcweir if ( data.getLocalTempPath() != null ) { 91cdf0e10cSrcweir File installRootTemp = new File(data.getInstallDir(), "tmp"); 92cdf0e10cSrcweir if ( installRootTemp.exists() ) { 93cdf0e10cSrcweir installRootTemp.delete(); // removing the link 94cdf0e10cSrcweir SystemManager.createDirectory(installRootTemp); 95cdf0e10cSrcweir } 96cdf0e10cSrcweir 97cdf0e10cSrcweir File localTemp = new File(data.getLocalTempPath()); 98cdf0e10cSrcweir if ( localTemp.exists() ) { 99cdf0e10cSrcweir SystemManager.removeDirectory(localTemp); 100cdf0e10cSrcweir } 101cdf0e10cSrcweir } 102cdf0e10cSrcweir } 103cdf0e10cSrcweir getAdminFileContent(boolean relocatable, boolean rdepends)104cdf0e10cSrcweir private Vector getAdminFileContent(boolean relocatable, boolean rdepends) { 105cdf0e10cSrcweir 106cdf0e10cSrcweir Vector adminFile = new Vector(); 107cdf0e10cSrcweir InstallData data = InstallData.getInstance(); 108cdf0e10cSrcweir 109cdf0e10cSrcweir // if ( relocatable ) { 110cdf0e10cSrcweir // String installDir = data.getInstallDir(); 111cdf0e10cSrcweir // // installDir = installDir.replace(" ", "\\ "); 112cdf0e10cSrcweir // String baseDirLine = "basedir=" + installDir; 113cdf0e10cSrcweir // adminFile.add(baseDirLine); 114cdf0e10cSrcweir // } 115cdf0e10cSrcweir 116cdf0e10cSrcweir String mailLine = "mail="; 117cdf0e10cSrcweir adminFile.add(mailLine); 118cdf0e10cSrcweir 119cdf0e10cSrcweir String conflictLine = "conflict=nochange"; 120cdf0e10cSrcweir if ( data.isUserInstallation() ) { conflictLine = "conflict=nochange"; } 121cdf0e10cSrcweir adminFile.add(conflictLine); 122cdf0e10cSrcweir 123cdf0e10cSrcweir String runlevelLine = "runlevel=nocheck"; 124cdf0e10cSrcweir adminFile.add(runlevelLine); 125cdf0e10cSrcweir 126cdf0e10cSrcweir String setuidLine = "setuid=quit"; 127cdf0e10cSrcweir if ( data.isUserInstallation() ) { setuidLine = "setuid=nocheck"; } 128cdf0e10cSrcweir adminFile.add(setuidLine); 129cdf0e10cSrcweir 130cdf0e10cSrcweir String actionLine = "action=nocheck"; 131cdf0e10cSrcweir adminFile.add(actionLine); 132cdf0e10cSrcweir 133cdf0e10cSrcweir String partialLine = "partial=quit"; 134cdf0e10cSrcweir if ( data.isUserInstallation() ) { partialLine = "partial=nocheck"; } 135cdf0e10cSrcweir adminFile.add(partialLine); 136cdf0e10cSrcweir 137cdf0e10cSrcweir String instanceLine = "instance=unique"; 138cdf0e10cSrcweir adminFile.add(instanceLine); 139cdf0e10cSrcweir 140cdf0e10cSrcweir // String idependLine = "idepend=quit"; 141cdf0e10cSrcweir String idependLine = "idepend=nocheck"; 142cdf0e10cSrcweir // if ( data.isUserInstallation() ) { idependLine = "idepend=nocheck"; } 143cdf0e10cSrcweir adminFile.add(idependLine); 144cdf0e10cSrcweir 145cdf0e10cSrcweir // String rdependLine = "rdepend=nocheck"; 146cdf0e10cSrcweir String rdependLine = "rdepend=quit"; 147cdf0e10cSrcweir if ( ! rdepends ) { rdependLine = "rdepend=nocheck"; } 148cdf0e10cSrcweir if ( data.isUserInstallation() ) { rdependLine = "rdepend=nocheck"; } 149cdf0e10cSrcweir adminFile.add(rdependLine); 150cdf0e10cSrcweir 151cdf0e10cSrcweir String spaceLine = "space=quit"; 152cdf0e10cSrcweir if ( data.isUserInstallation() ) { spaceLine = "space=nocheck"; } 153cdf0e10cSrcweir adminFile.add(spaceLine); 154cdf0e10cSrcweir 155cdf0e10cSrcweir return adminFile; 156cdf0e10cSrcweir } 157cdf0e10cSrcweir getMainVersion(String version)158cdf0e10cSrcweir private String getMainVersion (String version) { 159cdf0e10cSrcweir String mainVersion = null; 160cdf0e10cSrcweir 161cdf0e10cSrcweir int pos = version.indexOf(","); 162cdf0e10cSrcweir if ( pos > -1 ) { 163cdf0e10cSrcweir mainVersion = version.substring(0, pos); 164cdf0e10cSrcweir } 165cdf0e10cSrcweir 166cdf0e10cSrcweir return mainVersion; 167cdf0e10cSrcweir } 168cdf0e10cSrcweir getPackageRevision(String version)169cdf0e10cSrcweir private String getPackageRevision(String version) { 170cdf0e10cSrcweir String revision = null; 171cdf0e10cSrcweir 172cdf0e10cSrcweir int pos = version.indexOf("="); 173cdf0e10cSrcweir if ( pos > -1 ) { 174cdf0e10cSrcweir revision = version.substring(pos + 1, version.length() ); 175cdf0e10cSrcweir } 176cdf0e10cSrcweir 177cdf0e10cSrcweir return revision; 178cdf0e10cSrcweir } 179cdf0e10cSrcweir getVectorOfNumbers(String version)180cdf0e10cSrcweir private Vector getVectorOfNumbers(String version) { 181cdf0e10cSrcweir Vector numbers = new Vector(); 182cdf0e10cSrcweir int pos = -1; 183cdf0e10cSrcweir // getting number from a string in format 2.0.0 184cdf0e10cSrcweir do { 185cdf0e10cSrcweir pos = version.indexOf("."); 186cdf0e10cSrcweir if ( pos > -1 ) { 187cdf0e10cSrcweir String number = version.substring(0, pos); 188cdf0e10cSrcweir version = version.substring(pos + 1, version.length()); 189cdf0e10cSrcweir numbers.add(number); 190cdf0e10cSrcweir } 191cdf0e10cSrcweir } while ( pos > -1 ); 192cdf0e10cSrcweir 193cdf0e10cSrcweir numbers.add(version); 194cdf0e10cSrcweir return numbers; 195cdf0e10cSrcweir } 196cdf0e10cSrcweir getMinimum(int a, int b)197cdf0e10cSrcweir private int getMinimum(int a, int b) { 198cdf0e10cSrcweir int minimum; 199cdf0e10cSrcweir 200cdf0e10cSrcweir if ( a < b ) { 201cdf0e10cSrcweir minimum = a; 202cdf0e10cSrcweir } else { 203cdf0e10cSrcweir minimum = b; 204cdf0e10cSrcweir } 205cdf0e10cSrcweir 206cdf0e10cSrcweir return minimum; 207cdf0e10cSrcweir } 208cdf0e10cSrcweir compareVersion(String firstVersion, String secondVersion)209cdf0e10cSrcweir private String compareVersion(String firstVersion, String secondVersion) { 210cdf0e10cSrcweir // comparing strings with syntax 2.0.0 211cdf0e10cSrcweir String comparison = "bothPackagesAreEqual"; 212cdf0e10cSrcweir Vector firstVector = getVectorOfNumbers(firstVersion); 213cdf0e10cSrcweir Vector secondVector = getVectorOfNumbers(secondVersion); 214cdf0e10cSrcweir 215cdf0e10cSrcweir int firstLength = firstVector.size(); 216cdf0e10cSrcweir int secondLength = secondVector.size(); 217cdf0e10cSrcweir int minimum = getMinimum(firstLength, secondLength); 218cdf0e10cSrcweir 219cdf0e10cSrcweir for (int i = 0; i < minimum; i++) { 220cdf0e10cSrcweir String firstS = (String)firstVector.get(i); 221cdf0e10cSrcweir String secondS = (String)secondVector.get(i); 222cdf0e10cSrcweir 223cdf0e10cSrcweir int first = Integer.parseInt(firstS); 224cdf0e10cSrcweir int second_ = Integer.parseInt(secondS); 225cdf0e10cSrcweir 226cdf0e10cSrcweir if ( second_ > first ) { 227cdf0e10cSrcweir comparison = "firstPackageIsOlder"; 228cdf0e10cSrcweir break; 229cdf0e10cSrcweir } else if ( second_ < first ) { 230cdf0e10cSrcweir comparison = "secondPackageIsOlder"; 231cdf0e10cSrcweir break; 232cdf0e10cSrcweir } 233cdf0e10cSrcweir } 234cdf0e10cSrcweir 235cdf0e10cSrcweir return comparison; 236cdf0e10cSrcweir } 237cdf0e10cSrcweir saveModulesLogFile(InstallData data)238cdf0e10cSrcweir public void saveModulesLogFile(InstallData data) { 239cdf0e10cSrcweir if ( data.logModuleStates() ) { 240cdf0e10cSrcweir Vector logContent = LogManager.getModulesLogFile(); 241cdf0e10cSrcweir File baseDir = new File(data.getInstallDefaultDir(), data.getProductDir()); 242cdf0e10cSrcweir File uninstallDir = new File(baseDir, data.getUninstallDirName()); 243cdf0e10cSrcweir File modulesLogFile = new File(uninstallDir, "moduleSettingsLog.txt"); 244cdf0e10cSrcweir // System.err.println("Saving file: " + modulesLogFile.getPath()); 245cdf0e10cSrcweir SystemManager.saveCharFileVector(modulesLogFile.getPath(), logContent); 246cdf0e10cSrcweir } 247cdf0e10cSrcweir } 248cdf0e10cSrcweir removeSolarisLockFile()249cdf0e10cSrcweir public void removeSolarisLockFile() { 250cdf0e10cSrcweir String lockFileName = "/tmp/.ai.pkg.zone.lock-afdb66cf-1dd1-11b2-a049-000d560ddc3e"; 251cdf0e10cSrcweir File lockFile = new File(lockFileName); 252cdf0e10cSrcweir 253cdf0e10cSrcweir if ( lockFile.exists() ) { 254cdf0e10cSrcweir // System.err.println("Found file: " + lockFileName); 255cdf0e10cSrcweir boolean deleted = lockFile.delete(); 256cdf0e10cSrcweir } 257cdf0e10cSrcweir } 258cdf0e10cSrcweir getSolarisDatabasePath(InstallData data)259cdf0e10cSrcweir public String getSolarisDatabasePath(InstallData data) { 260cdf0e10cSrcweir String databasePath = null; 261cdf0e10cSrcweir databasePath = data.getInstallDir(); 262cdf0e10cSrcweir return databasePath; 263cdf0e10cSrcweir } 264cdf0e10cSrcweir createAdminFile(boolean relocatable, boolean rdepends)265cdf0e10cSrcweir public void createAdminFile(boolean relocatable, boolean rdepends) { 266cdf0e10cSrcweir InstallData data = InstallData.getInstance(); 267cdf0e10cSrcweir Vector removeFiles = data.getRemoveFiles(); 268cdf0e10cSrcweir String adminFileName = ""; 269cdf0e10cSrcweir 270cdf0e10cSrcweir if ( relocatable ) { 271cdf0e10cSrcweir if ( rdepends ) { 272cdf0e10cSrcweir adminFileName = "adminFileReloc"; 273cdf0e10cSrcweir } else { 274cdf0e10cSrcweir adminFileName = "adminFileRelocNoDepends"; 275cdf0e10cSrcweir } 276cdf0e10cSrcweir } else { 277cdf0e10cSrcweir if ( rdepends ) { 278cdf0e10cSrcweir adminFileName = "adminFileNoReloc"; 279cdf0e10cSrcweir } else { 280cdf0e10cSrcweir adminFileName = "adminFileNoRelocNoDepends"; 281cdf0e10cSrcweir } 282cdf0e10cSrcweir } 283cdf0e10cSrcweir 284cdf0e10cSrcweir Vector fileContent = getAdminFileContent(relocatable, rdepends); 285cdf0e10cSrcweir File adminFile = new File(data.getInstallDir(), adminFileName); 286cdf0e10cSrcweir String completeAdminFileName = adminFile.getPath(); 287cdf0e10cSrcweir 288cdf0e10cSrcweir if ( relocatable ) { 289cdf0e10cSrcweir if ( rdepends ) { 290cdf0e10cSrcweir data.setAdminFileNameReloc(completeAdminFileName); 291cdf0e10cSrcweir } else { 292cdf0e10cSrcweir data.setAdminFileNameRelocNoDepends(completeAdminFileName); 293cdf0e10cSrcweir } 294cdf0e10cSrcweir } else { 295cdf0e10cSrcweir if ( rdepends ) { 296cdf0e10cSrcweir data.setAdminFileNameNoReloc(completeAdminFileName); 297cdf0e10cSrcweir } else { 298cdf0e10cSrcweir data.setAdminFileNameNoRelocNoDepends(completeAdminFileName); 299cdf0e10cSrcweir } 300cdf0e10cSrcweir } 301cdf0e10cSrcweir 302cdf0e10cSrcweir if ( ! adminFile.exists() ) { 303cdf0e10cSrcweir // only saving, if it did not exist 304cdf0e10cSrcweir SystemManager.saveCharFileVector(completeAdminFileName, fileContent); 305cdf0e10cSrcweir // only removing file in aborted installation, if it was created before 306cdf0e10cSrcweir removeFiles.add(completeAdminFileName); 307cdf0e10cSrcweir } 308cdf0e10cSrcweir 309cdf0e10cSrcweir // File dumpFile = new File(data.getInstallDir(), "dumpFile"); 310cdf0e10cSrcweir // String dumpFileName = dumpFile.getPath(); 311cdf0e10cSrcweir // SystemManager.dumpFile(adminFileName, dumpFileName); 312cdf0e10cSrcweir } 313cdf0e10cSrcweir 314cdf0e10cSrcweir // for user installations an environment hashmap is used setEnvironmentForUserInstall()315cdf0e10cSrcweir public void setEnvironmentForUserInstall() { 316cdf0e10cSrcweir InstallData data = InstallData.getInstance(); 317cdf0e10cSrcweir HashMap env = SystemManager.getEnvironmentHashMap(); 318cdf0e10cSrcweir env.put("LD_PRELOAD_32", data.getGetUidPath()); 319cdf0e10cSrcweir data.setShellEnvironment(env); 320cdf0e10cSrcweir } 321cdf0e10cSrcweir getVersionString(Vector returnVector)322cdf0e10cSrcweir public String getVersionString(Vector returnVector) { 323cdf0e10cSrcweir String versionString = null; 324cdf0e10cSrcweir String versionLine = null; 325cdf0e10cSrcweir 326cdf0e10cSrcweir for (int i = 0; i < returnVector.size(); i++) { 327cdf0e10cSrcweir String line = (String) returnVector.get(i); 328cdf0e10cSrcweir int pos = line.indexOf("REV="); 329cdf0e10cSrcweir if ( pos > -1 ) { 330cdf0e10cSrcweir versionLine = line; 331cdf0e10cSrcweir break; 332cdf0e10cSrcweir } 333cdf0e10cSrcweir } 334cdf0e10cSrcweir 335cdf0e10cSrcweir if ( versionLine != null ) { 336cdf0e10cSrcweir versionLine = versionLine.trim(); 337cdf0e10cSrcweir int pos = versionLine.lastIndexOf(" "); 338cdf0e10cSrcweir versionString = versionLine.substring(pos + 1, versionLine.length()); 339cdf0e10cSrcweir } 340cdf0e10cSrcweir 341cdf0e10cSrcweir return versionString; 342cdf0e10cSrcweir } 343cdf0e10cSrcweir getInstalledMinor(String version)344cdf0e10cSrcweir public int getInstalledMinor(String version) { 345cdf0e10cSrcweir 346cdf0e10cSrcweir int minor = 0; 347cdf0e10cSrcweir 348cdf0e10cSrcweir int pos = version.indexOf("."); 349cdf0e10cSrcweir if ( pos > -1 ) { 350cdf0e10cSrcweir String reduced = version.substring(pos + 1, version.length()); 351cdf0e10cSrcweir 352cdf0e10cSrcweir pos = reduced.indexOf("."); 353cdf0e10cSrcweir if ( pos > -1 ) { 354cdf0e10cSrcweir reduced = reduced.substring(0, pos); 355cdf0e10cSrcweir minor = Integer.parseInt(reduced); 356cdf0e10cSrcweir } 357cdf0e10cSrcweir } 358cdf0e10cSrcweir 359cdf0e10cSrcweir return minor; 360cdf0e10cSrcweir } 361cdf0e10cSrcweir comparePackageVersions(String firstPackageVersion, String secondPackageVersion)362cdf0e10cSrcweir public boolean comparePackageVersions(String firstPackageVersion, String secondPackageVersion) { 363cdf0e10cSrcweir // Analyzing strings: version, 2.0.0,REV=106.2005.05.26 364cdf0e10cSrcweir 365cdf0e10cSrcweir boolean firstPackageIsOlder = false; 366cdf0e10cSrcweir String comparison = null; 367cdf0e10cSrcweir 368cdf0e10cSrcweir String firstPackageMainVersion = getMainVersion(firstPackageVersion); // 2.0.0 369cdf0e10cSrcweir String secondPackageMainVersion = getMainVersion(secondPackageVersion); // 2.0.0 370cdf0e10cSrcweir 371cdf0e10cSrcweir if (( firstPackageMainVersion != null ) && ( secondPackageMainVersion != null )) { 372cdf0e10cSrcweir comparison = compareVersion(firstPackageMainVersion, secondPackageMainVersion); 373cdf0e10cSrcweir } 374cdf0e10cSrcweir 375cdf0e10cSrcweir if ( comparison.equals("firstPackageIsOlder") ) { 376cdf0e10cSrcweir firstPackageIsOlder = true; 377cdf0e10cSrcweir } else if ( comparison.equals("secondPackageIsOlder") ) { 378cdf0e10cSrcweir firstPackageIsOlder = false; 379cdf0e10cSrcweir } else if ( comparison.equals("bothPackagesAreEqual") ) { 380cdf0e10cSrcweir String firstPackageRevision = getPackageRevision(firstPackageVersion); // 106.2005.05.26 381cdf0e10cSrcweir String secondPackageRevision = getPackageRevision(secondPackageVersion); // 106.2005.05.26 382cdf0e10cSrcweir 383cdf0e10cSrcweir if (( firstPackageRevision != null ) && ( secondPackageRevision != null )) { 384cdf0e10cSrcweir comparison = compareVersion(firstPackageRevision, secondPackageRevision); 385cdf0e10cSrcweir if ( comparison.equals("firstPackageIsOlder") ) { 386cdf0e10cSrcweir firstPackageIsOlder = true; 387cdf0e10cSrcweir } else { 388cdf0e10cSrcweir firstPackageIsOlder = false; 389cdf0e10cSrcweir } 390cdf0e10cSrcweir } 391cdf0e10cSrcweir } 392cdf0e10cSrcweir 393cdf0e10cSrcweir // If version is equal, the patchlevel has to be analyzed 394cdf0e10cSrcweir // -> pkginfo does not offer this information 395cdf0e10cSrcweir // -> looking into file <root>/opt/var/sadm/pkg/<package>/pkginfo? 396cdf0e10cSrcweir 397cdf0e10cSrcweir return firstPackageIsOlder; 398cdf0e10cSrcweir } 399cdf0e10cSrcweir 400cdf0e10cSrcweir } 401