1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #include "minormk.hxx" 25 #include "prodmap.hxx" 26 #include <soldep/appdef.hxx> 27 #include <tools/fsys.hxx> 28 #include <tools/geninfo.hxx> 29 30 // 31 // class MinorMk 32 // 33 34 /*****************************************************************************/ 35 MinorMk::MinorMk( 36 GenericInformationList *pList, 37 const ByteString &rVersion, 38 const ByteString &rWorkStamp, 39 const ByteString &rEnvironment, 40 const ByteString &rMinor 41 ) 42 /*****************************************************************************/ 43 { 44 String sRoot( ProductMapper::GetVersionRoot( pList, rVersion )); 45 if ( sRoot.Len()) { 46 ByteString sPath( sRoot, RTL_TEXTENCODING_ASCII_US ); 47 sPath += "/"; 48 sPath += rEnvironment; 49 sPath += "/"; 50 sPath += "inc"; 51 if ( rMinor.Len()) { 52 sPath += "."; 53 sPath += rMinor; 54 } 55 #ifdef UNX 56 sPath.SearchAndReplaceAll( "\\", "/" ); 57 while( sPath.SearchAndReplace( "//", "/" ) != STRING_NOTFOUND ) {}; 58 #else 59 sPath.SearchAndReplaceAll( "/", "\\" ); 60 while( sPath.SearchAndReplace( "\\\\", "\\" ) != STRING_NOTFOUND ) {}; 61 #endif 62 DirEntry aPath( String( sPath, RTL_TEXTENCODING_ASCII_US )); 63 64 ByteString sFile( rWorkStamp ); 65 sFile += "minor.mk"; 66 67 DirEntry aFile( aPath ); 68 aFile += DirEntry( String( sFile, RTL_TEXTENCODING_ASCII_US )); 69 if ( !aFile.Exists()) { 70 sFile = sFile.Copy( 3 ); 71 aFile = aPath; 72 aFile += DirEntry( String( sFile, RTL_TEXTENCODING_ASCII_US )); 73 } 74 ReadMinorMk( aFile.GetFull()); 75 } 76 } 77 78 /*****************************************************************************/ 79 MinorMk::MinorMk( GenericInformationList *pList, const ByteString rVersion ) 80 /*****************************************************************************/ 81 { 82 String sRoot( ProductMapper::GetVersionRoot( pList, rVersion )); 83 if ( sRoot.Len()) { 84 ByteString sPath( sRoot, RTL_TEXTENCODING_ASCII_US ); 85 sPath += "/src/solenv/inc"; 86 #ifdef UNX 87 sPath.SearchAndReplaceAll( "\\", "/" ); 88 while( sPath.SearchAndReplace( "//", "/" ) != STRING_NOTFOUND ) {}; 89 #else 90 sPath.SearchAndReplaceAll( "/", "\\" ); 91 while( sPath.SearchAndReplace( "\\\\", "\\" ) != STRING_NOTFOUND ) {}; 92 #endif 93 DirEntry aPath( String( sPath, RTL_TEXTENCODING_ASCII_US )); 94 95 ByteString sFile( "minor.mk" ); 96 97 DirEntry aFile( aPath ); 98 aFile += DirEntry( String( sFile, RTL_TEXTENCODING_ASCII_US )); 99 100 ReadMinorMk( aFile.GetFull()); 101 } 102 } 103 104 /*****************************************************************************/ 105 MinorMk::MinorMk( const ByteString &rMinor, const ByteString &rEnvironment ) 106 /*****************************************************************************/ 107 : bExists( sal_False ) 108 { 109 ByteString sDelimiter( DirEntry::GetAccessDelimiter(), RTL_TEXTENCODING_ASCII_US ); 110 111 112 ByteString sSolver( GetEnv( "SOLARVERSION" )); 113 sal_Bool bNewEnv = sal_True; 114 if ( !sSolver.Len()) { 115 sSolver = GetEnv( "SOLARVER" ); 116 bNewEnv = sal_False; 117 } 118 ByteString sUPD( GetEnv( "UPD" )); 119 120 ByteString sMinorMk( sSolver ); 121 sMinorMk += sDelimiter; 122 if ( !bNewEnv ) { 123 sMinorMk += sUPD; 124 sMinorMk += sDelimiter; 125 } 126 127 if ( rEnvironment.Len()) { 128 sMinorMk += rEnvironment; 129 sMinorMk += sDelimiter; 130 sMinorMk += "inc"; 131 if( rMinor.Len()) { 132 sMinorMk += "."; 133 sMinorMk += rMinor; 134 } 135 sMinorMk += sDelimiter; 136 } 137 138 sMinorMk += sUPD; 139 sMinorMk += "minor.mk"; 140 141 String sFile( sMinorMk, RTL_TEXTENCODING_ASCII_US ); 142 143 ReadMinorMk( sFile ); 144 } 145 146 /*****************************************************************************/ 147 void MinorMk::ReadMinorMk( const String &rFileName ) 148 /*****************************************************************************/ 149 { 150 if ( DirEntry( rFileName ).Exists()) { 151 bExists = sal_True; 152 SvFileStream aStream( rFileName, STREAM_STD_READ ); 153 while ( !aStream.IsOpen()) 154 aStream.Open( rFileName, STREAM_STD_READ ); 155 156 ByteString sLine; 157 while ( !aStream.IsEof()) { 158 aStream.ReadLine( sLine ); 159 160 if ( sLine.GetToken( 0, '=' ) == "RSCVERSION" ) 161 sRSCVERSION = sLine.GetToken( 1, '=' ); 162 else if ( sLine.GetToken( 0, '=' ) == "RSCREVISION" ) 163 sRSCREVISION = sLine.GetToken( 1, '=' ); 164 else if ( sLine.GetToken( 0, '=' ) == "BUILD" ) 165 sBUILD = sLine.GetToken( 1, '=' ); 166 else if ( sLine.GetToken( 0, '=' ) == "LAST_MINOR" ) 167 sLAST_MINOR = sLine.GetToken( 1, '=' ); 168 } 169 aStream.Close(); 170 171 sRSCVERSION.EraseTrailingChars(); 172 sRSCREVISION.EraseTrailingChars(); 173 sBUILD.EraseTrailingChars(); 174 sLAST_MINOR.EraseTrailingChars(); 175 } 176 } 177 178 /*****************************************************************************/ 179 MinorMk::~MinorMk() 180 /*****************************************************************************/ 181 { 182 } 183 184