Skip to content

Add version numbers to native libraries #1347

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions VERSIONS.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ Xamarin.Forms reference 4.4.0.991757
libSkiaSharp soname 80.0.0
HarfBuzz soname 0.20601.0

# native suffix
libSkiaSharp suffix _80_0

# SkiaSharp.dll
SkiaSharp assembly 2.80.0.0
SkiaSharp file 2.80.0.0
Expand Down
2 changes: 1 addition & 1 deletion binding/Binding/SkiaApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ internal partial class SkiaApi
#elif __TIZEN__
private const string SKIA = "libSkiaSharp.so";
#else
private const string SKIA = "libSkiaSharp";
private const string SKIA = "libSkiaSharp" + VersionConstants.NativeSuffix;
#endif

#if USE_DELEGATES
Expand Down
2 changes: 1 addition & 1 deletion externals/skia
Submodule skia updated 1 files
+7 −1 gn/BUILDCONFIG.gn
6 changes: 4 additions & 2 deletions native/linux/build.cake
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,13 @@ Task("libSkiaSharp")

var soname = GetVersion("libSkiaSharp", "soname");
var map = MakeAbsolute((FilePath)"libSkiaSharp/libSkiaSharp.map");
var suffix = GetVersion("libSkiaSharp", "suffix");

GnNinja($"{VARIANT}/{arch}", "SkiaSharp",
$"target_os='linux' " +
$"target_cpu='{arch}' " +
$"is_official_build=true " +
$"skiasharp_suffix='{suffix}'" +
$"skia_enable_gpu={(SUPPORT_GPU ? "true" : "false")} " +
$"skia_enable_tools=false " +
$"skia_use_icu=false " +
Expand All @@ -61,9 +63,9 @@ Task("libSkiaSharp")

var outDir = OUTPUT_PATH.Combine($"{VARIANT}/{dir}");
EnsureDirectoryExists(outDir);
var so = SKIA_PATH.CombineWithFilePath($"out/{VARIANT}/{arch}/libSkiaSharp.so.{soname}");
var so = SKIA_PATH.CombineWithFilePath($"out/{VARIANT}/{arch}/libSkiaSharp{suffix}.so.{soname}");
CopyFileToDirectory(so, outDir);
CopyFile(so, outDir.CombineWithFilePath("libSkiaSharp.so"));
CopyFile(so, outDir.CombineWithFilePath($"libSkiaSharp{suffix}.so"));
}
});

Expand Down
3 changes: 2 additions & 1 deletion native/linuxnodeps/build.cake
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ Task("libSkiaSharp")
{ "gnArgs", "skia_use_fontconfig=false" },
});

RunProcess("ldd", OUTPUT_PATH.CombineWithFilePath($"x64/libSkiaSharp.so").FullPath, out var stdout);
var suffix = GetVersion("libSkiaSharp", "suffix");
RunProcess("ldd", OUTPUT_PATH.CombineWithFilePath($"x64/libSkiaSharp{suffix}.so").FullPath, out var stdout);

if (stdout.Any(o => o.Contains("fontconfig")))
throw new Exception("libSkiaSharp.so contained a dependency on fontconfig.");
Expand Down
6 changes: 4 additions & 2 deletions native/windows/build.cake
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,13 @@ Task("libSkiaSharp")
if (Skip(arch)) return;

var clang = string.IsNullOrEmpty(LLVM_HOME.FullPath) ? "" : $"clang_win='{LLVM_HOME}' ";
var suffix = GetVersion("libSkiaSharp", "suffix");

GnNinja($"{VARIANT}/{arch}", "SkiaSharp",
$"target_os='win'" +
$"target_cpu='{skiaArch}' " +
$"is_official_build=true " +
$"skiasharp_suffix='{suffix}'" +
$"skia_enable_fontmgr_win_gdi=false " +
$"skia_enable_tools=false " +
$"skia_use_dng_sdk=true " +
Expand All @@ -48,8 +50,8 @@ Task("libSkiaSharp")

var outDir = OUTPUT_PATH.Combine($"{VARIANT}/{dir}");
EnsureDirectoryExists(outDir);
CopyFileToDirectory(SKIA_PATH.CombineWithFilePath($"out/{VARIANT}/{arch}/libSkiaSharp.dll"), outDir);
CopyFileToDirectory(SKIA_PATH.CombineWithFilePath($"out/{VARIANT}/{arch}/libSkiaSharp.pdb"), outDir);
CopyFileToDirectory(SKIA_PATH.CombineWithFilePath($"out/{VARIANT}/{arch}/libSkiaSharp{suffix}.dll"), outDir);
CopyFileToDirectory(SKIA_PATH.CombineWithFilePath($"out/{VARIANT}/{arch}/libSkiaSharp{suffix}.pdb"), outDir);
}
});

Expand Down
10 changes: 10 additions & 0 deletions source/SkiaSharp.Build.targets
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,22 @@
<_VersionPackagingGroup>$(PackagingGroup.Split('.')[0])</_VersionPackagingGroup>
<_VersionAssemblyPattern>^$(_VersionPackagingGroup)\s*assembly\s*(.*)$</_VersionAssemblyPattern>
<_VersionFilePattern>^$(_VersionPackagingGroup)\s*file\s*(.*)$</_VersionFilePattern>
<_NativeSuffixPattern>^lib$(_VersionPackagingGroup)\s*suffix\s*(.*)$</_NativeSuffixPattern>
<_VersionAssemblyMatch>$([System.Text.RegularExpressions.Regex]::Match($(_VersionTxtContents), $(_VersionAssemblyPattern), System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Multiline).Groups[1].Value.Trim())</_VersionAssemblyMatch>
<_VersionFileMatch>$([System.Text.RegularExpressions.Regex]::Match($(_VersionTxtContents), $(_VersionFilePattern), System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Multiline).Groups[1].Value.Trim())</_VersionFileMatch>
<_NativeSuffixMatch>$([System.Text.RegularExpressions.Regex]::Match($(_VersionTxtContents), $(_NativeSuffixPattern), System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Multiline).Groups[1].Value.Trim())</_NativeSuffixMatch>
<_VersionGeneratedContents>
[assembly: System.Reflection.AssemblyVersion("$(_VersionAssemblyMatch)")]
[assembly: System.Reflection.AssemblyFileVersion("$(_VersionFileMatch)")]
[assembly: System.Reflection.AssemblyInformationalVersion("$(_VersionFileMatch)$(_VersionGitSha)")]

internal partial class VersionConstants {
public const string AssemblyVersion = "$(_VersionAssemblyMatch)"%3B
public const string AssemblyFileVersion = "$(_VersionFileMatch)"%3B
public const string AssemblyInformationalVersion = "$(_VersionFileMatch)$(_VersionGitSha)"%3B
public const string GitSha = "$(_VersionGitSha)"%3B
public const string NativeSuffix = "$(_NativeSuffixMatch)"%3B
}
</_VersionGeneratedContents>
</PropertyGroup>
<WriteLinesToFile Condition=" !Exists('$(_VersionSourceFile)') or '$([System.IO.File]::ReadAllText($(_VersionSourceFile)).Trim())' != '$(_VersionGeneratedContents.Trim())' "
Expand Down