Skip to content

Commit

Permalink
Tools: Support build documentation on Windows
Browse files Browse the repository at this point in the history
Linux is not supported because Doxygen 1.9.2 official binary dynamically links libclang-9 and doesn't have an ARM64 version
  • Loading branch information
Pagghiu committed Apr 10, 2024
1 parent b654096 commit a9f21aa
Show file tree
Hide file tree
Showing 5 changed files with 111 additions and 50 deletions.
22 changes: 11 additions & 11 deletions Documentation/Doxygen/Doxyfile
Original file line number Diff line number Diff line change
Expand Up @@ -83,18 +83,18 @@ ArrayAllocator \

USE_MDFILE_AS_MAINPAGE = ../../Documentation/Pages/Index.md
HTML_HEADER = header.html
HTML_EXTRA_STYLESHEET = ../../_Build/_Packages/doxygen-awesome-css_all/doxygen-awesome.css \
../../_Build/_Packages/doxygen-awesome-css_all/doxygen-custom/custom.css \
../../_Build/_Packages/doxygen-awesome-css_all/doxygen-awesome-sidebar-only.css \
../../_Build/_Packages/doxygen-awesome-css_all/doxygen-awesome-sidebar-only-darkmode-toggle.css \
../../_Build/_Packages/doxygen-awesome-css_all/doxygen-custom/custom-alternative.css \
HTML_EXTRA_STYLESHEET = ../../_Build/_Packages/doxygen-awesome-css_$(PACKAGES_PLATFORM)/doxygen-awesome.css \
../../_Build/_Packages/doxygen-awesome-css_$(PACKAGES_PLATFORM)/doxygen-custom/custom.css \
../../_Build/_Packages/doxygen-awesome-css_$(PACKAGES_PLATFORM)/doxygen-awesome-sidebar-only.css \
../../_Build/_Packages/doxygen-awesome-css_$(PACKAGES_PLATFORM)/doxygen-awesome-sidebar-only-darkmode-toggle.css \
../../_Build/_Packages/doxygen-awesome-css_$(PACKAGES_PLATFORM)/doxygen-custom/custom-alternative.css \
SC.css
HTML_EXTRA_FILES = ../../_Build/_Packages/doxygen-awesome-css_all/doxygen-awesome-darkmode-toggle.js \
../../_Build/_Packages/doxygen-awesome-css_all/doxygen-awesome-fragment-copy-button.js \
../../_Build/_Packages/doxygen-awesome-css_all/doxygen-awesome-paragraph-link.js \
../../_Build/_Packages/doxygen-awesome-css_all/doxygen-custom/toggle-alternative-theme.js \
../../_Build/_Packages/doxygen-awesome-css_all/doxygen-awesome-interactive-toc.js \
../../_Build/_Packages/doxygen-awesome-css_all/doxygen-awesome-tabs.js\
HTML_EXTRA_FILES = ../../_Build/_Packages/doxygen-awesome-css_$(PACKAGES_PLATFORM)/doxygen-awesome-darkmode-toggle.js \
../../_Build/_Packages/doxygen-awesome-css_$(PACKAGES_PLATFORM)/doxygen-awesome-fragment-copy-button.js \
../../_Build/_Packages/doxygen-awesome-css_$(PACKAGES_PLATFORM)/doxygen-awesome-paragraph-link.js \
../../_Build/_Packages/doxygen-awesome-css_$(PACKAGES_PLATFORM)/doxygen-custom/toggle-alternative-theme.js \
../../_Build/_Packages/doxygen-awesome-css_$(PACKAGES_PLATFORM)/doxygen-awesome-interactive-toc.js \
../../_Build/_Packages/doxygen-awesome-css_$(PACKAGES_PLATFORM)/doxygen-awesome-tabs.js\
favicon.png
GENERATE_TREEVIEW = YES
GENERATE_LATEX = NO
Expand Down
2 changes: 2 additions & 0 deletions Documentation/Pages/Tools.md
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,8 @@ These are the packages that are currently downloaded and extracted / symlinked b
- `LLVM 15`: Downloads LLVM from the official github repository
- `7zip`: 7zip executable (needed to decompress LLVM installer on Windows)
- `7zr.exe`: 7Zip console executable (needed to decompress 7zip installer on Windows)
- `doxygen`: Doxygen documentation generator
- `doxygen-awesome-css`: Doxygen awesome css (Doxygen theme)

# SC-format.cpp

Expand Down
18 changes: 13 additions & 5 deletions Tools/SC-build.h
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,19 @@ constexpr StringView PROJECTS_SUBDIR = "_Projects";
Process process;
SC_TRY(process.setWorkingDirectory(documentationDirectory.view()));
SC_TRY(process.setEnvironment("STRIP_FROM_PATH", documentationDirectory.view()));
switch (HostPlatform)
{
case Platform::Apple: //
SC_TRY(process.setEnvironment("PACKAGES_PLATFORM", "macos"));
break;
case Platform::Linux: //
SC_TRY(process.setEnvironment("PACKAGES_PLATFORM", "linux"));
break;
case Platform::Windows: //
SC_TRY(process.setEnvironment("PACKAGES_PLATFORM", "windows"));
break;
case Platform::Emscripten: return Result::Error("Unsupported platform");
}
SC_TRY(process.exec({doxygenExecutable}));

// TODO: Move this to the github CI file once automatic documentation publishing will been setup
Expand All @@ -178,11 +191,6 @@ constexpr StringView PROJECTS_SUBDIR = "_Projects";
}
else if (arguments.action == "documentation")
{
switch (HostPlatform)
{
case Platform::Apple: break;
default: return Result::Error("build documentation is only supported on macOS (for now)");
}
StringView additionalArgs[1];
Tool::Arguments args = arguments;
args.tool = "packages";
Expand Down
117 changes: 84 additions & 33 deletions Tools/SC-package.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// SPDX-License-Identifier: MIT

#include "SC-package.h"
#include "../Libraries/Plugin/Internal/DynamicLibrary.h"
#include "../Libraries/Strings/String.h"
namespace SC
{
Expand All @@ -10,49 +11,86 @@ namespace Tools
[[nodiscard]] Result installDoxygen(StringView packagesCacheDirectory, StringView packagesInstallDirectory,
Package& package)
{
switch (HostPlatform)
{
case Platform::Apple: break;
default: return Result::Error("installDoxygen: Unsupported platform");
}

static constexpr StringView packageVersion = "1.9.2";
static constexpr StringView testVersion = "1.9.2 (caa4e3de211fbbef2c3adf58a6bd4c86d0eb7cb8*)\n";
static constexpr StringView baseURL = "https://master.dl.sourceforge.net/project/doxygen";
static constexpr StringView testVersion = "1.9.2 (caa4e3de211fbbef2c3adf58a6bd4c86d0eb7cb8";

static constexpr StringView baseURL = "https://master.dl.sourceforge.net/project/doxygen";

Download download;
download.packagesCacheDirectory = packagesCacheDirectory;
download.packagesInstallDirectory = packagesInstallDirectory;

download.packageName = "doxygen";
download.packageVersion = packageVersion;
download.packagePlatform = "macOS";

download.url = format("{0}/rel-{1}/Doxygen-{1}.dmg?viasf=1", baseURL, download.packageVersion);
download.fileMD5 = "dbf10cfda8f5128ce7d2b2fc1fa1ce1f";

package.packageBaseName = format("Doxygen-{0}.dmg", download.packageVersion);
download.packageName = "doxygen";
download.packageVersion = packageVersion;

CustomFunctions functions;
functions.extractFunction = [](StringView fileName, StringView directory) -> Result

switch (HostPlatform)
{
String mountPoint = format("/Volumes/Doxygen-{0}", packageVersion);
SC_TRY(Process().exec({"hdiutil", "attach", "-nobrowse", "-readonly", "-noverify", "-noautoopen", "-mountpoint",
mountPoint.view(), fileName}));
FileSystem fs;
SC_TRY(fs.init(directory));
String fileToCopy = format("/Volumes/Doxygen-{0}/Doxygen.app/Contents/Resources/doxygen", packageVersion);
SC_TRY(fs.copyFile(fileToCopy.view(), "doxygen", FileSystem::CopyFlags().setOverwrite(true)));
SC_TRY(Process().exec({"hdiutil", "detach", mountPoint.view()}));
return Result(true);
};
case Platform::Apple:
download.packagePlatform = "macos";

download.url = format("{0}/rel-{1}/Doxygen-{1}.dmg?viasf=1", baseURL, download.packageVersion);
download.fileMD5 = "dbf10cfda8f5128ce7d2b2fc1fa1ce1f";
package.packageBaseName = format("Doxygen-{0}.dmg", download.packageVersion);
functions.extractFunction = [](StringView fileName, StringView directory) -> Result
{
String mountPoint = format("/Volumes/Doxygen-{0}", packageVersion);
SC_TRY(Process().exec({"hdiutil", "attach", "-nobrowse", "-readonly", "-noverify", "-noautoopen",
"-mountpoint", mountPoint.view(), fileName}));
FileSystem fs;
SC_TRY(fs.init(directory));
String fileToCopy = format("/Volumes/Doxygen-{0}/Doxygen.app/Contents/Resources/doxygen", packageVersion);
SC_TRY(fs.copyFile(fileToCopy.view(), "doxygen", FileSystem::CopyFlags().setOverwrite(true)));
SC_TRY(Process().exec({"hdiutil", "detach", mountPoint.view()}));
return Result(true);
};

break;
case Platform::Linux:
switch (HostInstructionSet)
{
case InstructionSet::ARM64: return Result::Error("Doxygen: Unsupported architecture ARM64");
default: break;
}
// TODO: Linux official doxygen binary dynamically links libclang-9
if (not SystemDynamicLibrary().load("libclang-9"))
{
return Result::Error("Doxygen: Unsupported platform (Linux) due to missing libclang-9");
}
download.packagePlatform = "linux";
download.url = format("{0}/rel-{1}/doxygen-{1}.linux.bin.tar.gz", baseURL, download.packageVersion);
download.fileMD5 = "c0662ebb72dca6c4a83477b8d354d2fe";
package.packageBaseName = format("doxygen-{0}.linux.bin.tar.gz", download.packageVersion);
break;
case Platform::Windows:
download.packagePlatform = "windows";
download.url = format("{0}/rel-{1}/doxygen-{1}.windows.bin.zip", baseURL, download.packageVersion);
download.fileMD5 = "4ba3ec23f8ff28482116e53557a080c4";
package.packageBaseName = format("doxygen-{0}.windows.bin.zip", download.packageVersion);
break;
case Platform::Emscripten: return Result::Error("Unsupported platform");
}

functions.testFunction = [](const Download& download, const Package& package)
{
SC_COMPILER_UNUSED(download);
String result;
String path = format("{0}/doxygen", package.installDirectoryLink);
String path;
switch (HostPlatform)
{
case Platform::Apple: //
path = format("{0}/doxygen", package.installDirectoryLink);
break;
case Platform::Linux: //
path = format("{0}/doxygen-{1}/bin/doxygen", package.installDirectoryLink, download.packageVersion);
break;
case Platform::Windows: path = format("{0}/doxygen.exe", package.installDirectoryLink); break;
case Platform::Emscripten: return Result::Error("Unsupported platform");
}
SC_TRY(Process().exec({path.view(), "-v"}, result));
return Result(result == testVersion);
return Result(result.view().startsWith(testVersion));
};
SC_TRY(packageInstall(download, package, functions));
return Result(true);
Expand All @@ -68,11 +106,24 @@ namespace Tools
download.packagesCacheDirectory = packagesCacheDirectory;
download.packagesInstallDirectory = packagesInstallDirectory;

download.packageName = "doxygen-awesome-css";
download.packageVersion = packageVersion;
download.packagePlatform = "all";
download.url = "https://github.com/jothepro/doxygen-awesome-css.git";
download.isGitClone = true;
download.packageName = "doxygen-awesome-css";
download.packageVersion = packageVersion;
switch (HostPlatform)
{
case Platform::Apple: //
download.packagePlatform = "macos";
break;
case Platform::Linux: //
download.packagePlatform = "linux";
break;
case Platform::Windows: //
download.packagePlatform = "windows";
break;
case Platform::Emscripten: return Result::Error("Unsupported platform");
}
download.url = "https://github.com/jothepro/doxygen-awesome-css.git";
package.packageBaseName = format("doxygen-awesome-css-{0}", download.packagePlatform);
download.isGitClone = true;

CustomFunctions functions;
functions.testFunction = [](const Download& download, const Package& package)
Expand Down
2 changes: 1 addition & 1 deletion Tools/SC-package.h
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ struct CustomFunctions
SC_TRY(fs.removeLinkIfExists(package.installDirectoryLink.view()));
if (not createLink(package.packageLocalDirectory.view(), package.installDirectoryLink.view()))
{
SC_TRY(fs.moveDirectory(package.packageLocalDirectory.view(), package.installDirectoryLink.view()));
SC_TRY(fs.copyDirectory(package.packageLocalDirectory.view(), package.installDirectoryLink.view()));
createPackageFile = false;
}
}
Expand Down

0 comments on commit a9f21aa

Please sign in to comment.