|
| 1 | +# SQLiteStudio version extraction from sqlitestudio.cpp |
| 2 | +# This file parses the version number from the source code and makes it available |
| 3 | +# to all qmake builds, including Windows QtCreator builds. |
| 4 | +# |
| 5 | +# Version format: XXYYZZ where XX = major, YY = minor, ZZ = patch |
| 6 | +# Example: 40000 = 4.0.0, 30515 = 3.5.15 |
| 7 | + |
| 8 | +# Path to the sqlitestudio.cpp file containing the version |
| 9 | +SQLITESTUDIO_CPP = $$PWD/coreSQLiteStudio/sqlitestudio.cpp |
| 10 | + |
| 11 | +# Read the file content |
| 12 | +SQLITESTUDIO_CPP_CONTENT = $$cat($$SQLITESTUDIO_CPP, lines) |
| 13 | + |
| 14 | +# Find the line containing the version and extract the number |
| 15 | +for(line, SQLITESTUDIO_CPP_CONTENT) { |
| 16 | + contains(line, ".*static const int sqlitestudioVersion.*") { |
| 17 | + # Extract the version number from the line |
| 18 | + # Line format: "static const int sqlitestudioVersion = 40000;" |
| 19 | + VERSION_LINE = $$line |
| 20 | + |
| 21 | + # Remove the variable name and everything before the equals sign |
| 22 | + VERSION_LINE = $$replace(VERSION_LINE, "static const int sqlitestudioVersion", "") |
| 23 | + VERSION_LINE = $$replace(VERSION_LINE, "=", "") |
| 24 | + |
| 25 | + # Remove the semicolon |
| 26 | + VERSION_LINE = $$replace(VERSION_LINE, ";", "") |
| 27 | + |
| 28 | + # Remove all whitespace |
| 29 | + VERSION_LINE = $$replace(VERSION_LINE, " ", "") |
| 30 | + |
| 31 | + SQLITESTUDIO_VERSION_INT = $$VERSION_LINE |
| 32 | + } |
| 33 | +} |
| 34 | + |
| 35 | +# Verify we found the version |
| 36 | +isEmpty(SQLITESTUDIO_VERSION_INT) { |
| 37 | + error("Could not extract version from $$SQLITESTUDIO_CPP") |
| 38 | +} |
| 39 | + |
| 40 | +# Calculate version components |
| 41 | +# For Windows, use batch file to avoid Python dependency |
| 42 | +# For Unix-like systems, use shell script |
| 43 | +win32 { |
| 44 | + # Windows: Create batch file for version calculation |
| 45 | + VERSION_CALC_SCRIPT = $$OUT_PWD/calc_version.bat |
| 46 | + |
| 47 | + # Batch file content for Windows integer division |
| 48 | + VERSION_CALC_CONTENT = "@echo off" |
| 49 | + VERSION_CALC_CONTENT += $$escape_expand(\\n) |
| 50 | + VERSION_CALC_CONTENT += "set ver=$$SQLITESTUDIO_VERSION_INT" |
| 51 | + VERSION_CALC_CONTENT += $$escape_expand(\\n) |
| 52 | + # Major = ver / 10000 |
| 53 | + VERSION_CALC_CONTENT += "set /a major=ver/10000" |
| 54 | + VERSION_CALC_CONTENT += $$escape_expand(\\n) |
| 55 | + # Minor = (ver / 100) % 100 |
| 56 | + VERSION_CALC_CONTENT += "set /a minor=(ver/100)%%100" |
| 57 | + VERSION_CALC_CONTENT += $$escape_expand(\\n) |
| 58 | + # Patch = ver % 100 |
| 59 | + VERSION_CALC_CONTENT += "set /a patch=ver%%100" |
| 60 | + VERSION_CALC_CONTENT += $$escape_expand(\\n) |
| 61 | + VERSION_CALC_CONTENT += "echo %major% %minor% %patch%" |
| 62 | + |
| 63 | + write_file($$VERSION_CALC_SCRIPT, VERSION_CALC_CONTENT) |
| 64 | + |
| 65 | + # Run the batch file |
| 66 | + VERSION_CALC = $$system($$VERSION_CALC_SCRIPT 2>NUL, lines) |
| 67 | +} else { |
| 68 | + # Unix-like: Create shell script for version calculation |
| 69 | + VERSION_CALC_SCRIPT = $$OUT_PWD/calc_version.sh |
| 70 | + |
| 71 | + # Shell script content for integer division |
| 72 | + VERSION_CALC_CONTENT = "#!/bin/sh" |
| 73 | + VERSION_CALC_CONTENT += $$escape_expand(\\n) |
| 74 | + VERSION_CALC_CONTENT += "ver=$$SQLITESTUDIO_VERSION_INT" |
| 75 | + VERSION_CALC_CONTENT += $$escape_expand(\\n) |
| 76 | + # Major = ver / 10000 |
| 77 | + VERSION_CALC_CONTENT += "major=\$$((ver/10000))" |
| 78 | + VERSION_CALC_CONTENT += $$escape_expand(\\n) |
| 79 | + # Minor = (ver / 100) % 100 |
| 80 | + VERSION_CALC_CONTENT += "minor=\$$((ver/100%100))" |
| 81 | + VERSION_CALC_CONTENT += $$escape_expand(\\n) |
| 82 | + # Patch = ver % 100 |
| 83 | + VERSION_CALC_CONTENT += "patch=\$$((ver%100))" |
| 84 | + VERSION_CALC_CONTENT += $$escape_expand(\\n) |
| 85 | + VERSION_CALC_CONTENT += "echo \$$major \$$minor \$$patch" |
| 86 | + |
| 87 | + write_file($$VERSION_CALC_SCRIPT, VERSION_CALC_CONTENT) |
| 88 | + |
| 89 | + # Run the shell script |
| 90 | + VERSION_CALC = $$system(sh $$VERSION_CALC_SCRIPT 2>/dev/null, lines) |
| 91 | +} |
| 92 | + |
| 93 | +# Parse the results if we got them |
| 94 | +!isEmpty(VERSION_CALC) { |
| 95 | + VERSION_PARTS = $$split(VERSION_CALC, " ") |
| 96 | + SQLITESTUDIO_VERSION_MAJOR = $$member(VERSION_PARTS, 0) |
| 97 | + SQLITESTUDIO_VERSION_MINOR = $$member(VERSION_PARTS, 1) |
| 98 | + SQLITESTUDIO_VERSION_PATCH = $$member(VERSION_PARTS, 2) |
| 99 | +} |
| 100 | + |
| 101 | +# If script execution failed, show error with helpful message |
| 102 | +isEmpty(SQLITESTUDIO_VERSION_MAJOR) { |
| 103 | + error("Could not calculate version components from $$SQLITESTUDIO_VERSION_INT. Please check that the build environment supports batch/shell scripts.") |
| 104 | +} |
| 105 | + |
| 106 | +# Create version string |
| 107 | +SQLITESTUDIO_VERSION_STRING = "$${SQLITESTUDIO_VERSION_MAJOR}.$${SQLITESTUDIO_VERSION_MINOR}.$${SQLITESTUDIO_VERSION_PATCH}" |
| 108 | + |
| 109 | +message("SQLiteStudio version: $$SQLITESTUDIO_VERSION_STRING ($$SQLITESTUDIO_VERSION_INT)") |
| 110 | + |
| 111 | +# Set qmake VERSION variable for use in .rc files and other contexts |
| 112 | +VERSION = $$SQLITESTUDIO_VERSION_STRING |
| 113 | + |
| 114 | +# Make variables available to other .pro files |
| 115 | +export(SQLITESTUDIO_VERSION_INT) |
| 116 | +export(SQLITESTUDIO_VERSION_MAJOR) |
| 117 | +export(SQLITESTUDIO_VERSION_MINOR) |
| 118 | +export(SQLITESTUDIO_VERSION_PATCH) |
| 119 | +export(SQLITESTUDIO_VERSION_STRING) |
| 120 | + |
| 121 | +# Add as DEFINES so they're available in C++ code if needed |
| 122 | +DEFINES += SQLITESTUDIO_VERSION_INT=$$SQLITESTUDIO_VERSION_INT |
| 123 | +DEFINES += SQLITESTUDIO_VERSION_MAJOR=$$SQLITESTUDIO_VERSION_MAJOR |
| 124 | +DEFINES += SQLITESTUDIO_VERSION_MINOR=$$SQLITESTUDIO_VERSION_MINOR |
| 125 | +DEFINES += SQLITESTUDIO_VERSION_PATCH=$$SQLITESTUDIO_VERSION_PATCH |
| 126 | +# Triple-backslash escaping produces a quoted string literal in C++: |
| 127 | +# e.g., #define SQLITESTUDIO_VERSION_STRING "4.0.0" |
| 128 | +DEFINES += SQLITESTUDIO_VERSION_STRING=\\\"$$SQLITESTUDIO_VERSION_STRING\\\" |
| 129 | + |
0 commit comments