Advertisement
Korsar13

problem qbs proj

Dec 24th, 2021
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import qbs.File
  2. import qbs.FileInfo
  3. import qbs.TextFile
  4. import qbs.Process
  5.  
  6. Project {
  7.    
  8.     Product {
  9.         name: "AppVer"
  10.         type: ["hpp"]
  11.         builtByDefault: false
  12.        
  13.         readonly property path ver_file: FileInfo.joinPaths( buildDirectory, "MyAppVer.h" )
  14.         readonly property bool need_update: ( !curver.found ) || ( curver.version != svnver.version )
  15.        
  16.         readonly property string new_ver: svnver.version
  17.         readonly property string cur_ver: curver.version
  18.         readonly property string new_txt: "#define MY_VERSION " + svnver.version + "\n";
  19.        
  20.         Probe {
  21.             id: svnver
  22.             property string version
  23.            
  24.             readonly property path src_dir: product.sourceDirectory
  25.             configure: {
  26.                 var p = new Process();
  27.                 p.exec( "svnversion", [src_dir], true );
  28.                 var txt = p.readStdOut();
  29.                 p.close();
  30.                 version = '' + parseInt( txt, 10 );
  31.                 found = true;
  32.                 console.info( 'svn revision: ' + version );
  33.             }
  34.         }
  35.        
  36.         Probe {
  37.             id: curver
  38.             property string version: '0'
  39.             readonly property path ver_file: product.ver_file
  40.             configure: {
  41.                 found = false;
  42.                 if ( File.exists( ver_file ) )
  43.                 {
  44.                     var f = new TextFile( ver_file );
  45.                     var txt = f.readAll();
  46.                     f.close();
  47.                     var ar = txt.match( /MY_VERSION\s+(\d+)/ );
  48.                     if ( ar !== null && ar !== false )
  49.                     {
  50.                         found = true;
  51.                         version = ar[1];
  52.                         console.info( 'current revision: ' + version );
  53.                     }
  54.                     else
  55.                         console.warning( 'error parsing current revision' );
  56.                 }
  57.                 else
  58.                     console.info( ver_file + ' not found' );
  59.             }
  60.         }
  61.        
  62.         Rule {
  63.             multiplex: true
  64.             requiresInputs: false
  65.             alwaysRun: true
  66.             //alwaysRun: need_update
  67.             Artifact { fileTags:["hpp"]; filePath: product.ver_file }
  68.             prepare: {
  69.                 var cmd = new JavaScriptCommand();
  70.                 cmd.dst = product.ver_file;
  71.                 cmd.txt = product.new_txt;
  72.                 if ( product.need_update )
  73.                 {
  74.                     cmd.description = "Update " + cmd.dst + ' ' + product.cur_ver + ' -> ' + product.new_ver;
  75.                     cmd.sourceCode = function(){
  76.                         var file = new TextFile( dst, TextFile.WriteOnly );
  77.                         file.write( txt );
  78.                         file.close();
  79.                     };
  80.                 }
  81.                 else
  82.                 {
  83.                     cmd.description = "Keep existing " + cmd.dst + " rev. " + product.cur_ver;
  84.                     cmd.sourceCode = function(){};
  85.                 }
  86.                 return [cmd];
  87.             }
  88.         }
  89.        
  90.         Export {
  91.             Depends { name: "cpp" }
  92.             cpp.includePaths: [exportingProduct.buildDirectory]
  93.             Group { fileTagsFilter: ["hpp"] }
  94.         }
  95.     }
  96.  
  97.     CppApplication {
  98.         name: "a"
  99.         consoleApplication: true
  100.         install: true
  101.  
  102.         Depends { name: "AppVer" }
  103.  
  104.         files: ["m.cpp"]
  105.     }
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement