From de4a2dd14dd575e9a31a92bb77ddbb8d73496952 Mon Sep 17 00:00:00 2001 From: Rick Guo Date: Thu, 20 Aug 2026 14:22:03 +0800 Subject: [PATCH] formula: add dougbinks/enkiTS --- dougbinks/enkiTS/enkits_cmp.gox | 11 +++ dougbinks/enkiTS/v1.12/enkits_llar.gox | 130 +++++++++++++++++++++++++ dougbinks/enkiTS/versions.json | 4 + 3 files changed, 145 insertions(+) create mode 100644 dougbinks/enkiTS/enkits_cmp.gox create mode 100644 dougbinks/enkiTS/v1.12/enkits_llar.gox create mode 100644 dougbinks/enkiTS/versions.json diff --git a/dougbinks/enkiTS/enkits_cmp.gox b/dougbinks/enkiTS/enkits_cmp.gox new file mode 100644 index 0000000..7ba641f --- /dev/null +++ b/dougbinks/enkiTS/enkits_cmp.gox @@ -0,0 +1,11 @@ +import "strings" + +// Complete tag set: v1.0 .. v1.12. GNU compares the first digit after "v1.", +// so v1.9 > v1.12. Strip the prefix, then compare the remainder as semver. +func normalize(version string) string { + return strings.trimPrefix(version, "v") +} + +compareVer (a, b) => { + return semver.Compare("v"+normalize(a.Version), "v"+normalize(b.Version)) +} diff --git a/dougbinks/enkiTS/v1.12/enkits_llar.gox b/dougbinks/enkiTS/v1.12/enkits_llar.gox new file mode 100644 index 0000000..53c4910 --- /dev/null +++ b/dougbinks/enkiTS/v1.12/enkits_llar.gox @@ -0,0 +1,130 @@ +import ( + "os" + "path/filepath" + "slices" + "strings" +) + +const consumerSource = `#include + +int main(void) { + enkiTaskScheduler* pTS = enkiNewTaskScheduler(); + enkiInitTaskScheduler(pTS); + enkiDeleteTaskScheduler(pTS); + return 0; +} +` + +id "dougbinks/enkiTS" + +fromVer "v1.12" + +defaults { + "shared": "OFF", + "fPIC": "ON", +} + +filter => { + for name, values in target.options { + if name != "shared" && name != "fPIC" { + return false + } + for value in values { + if value != "ON" && value != "OFF" { + return false + } + } + } + return true +} + +onBuild ctx => { + installDir := ctx.outputDir + shared := target.options["shared"][0] == "ON" + fPIC := target.options["fPIC"][0] == "ON" + + cmakeLists := filepath.join(ctx.SourceDir, "CMakeLists.txt") + source := string(os.readFile(cmakeLists)!) + // v1.12 names only ARCHIVE, so ELF shared objects and Windows DLLs are + // omitted from install. Keep the export while installing every artifact. + source = strings.replace(source, " ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})", " ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}\n LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}\n RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})", 1) + os.writeFile(cmakeLists, []byte(source), 0o644)! + + c := cmake.new(ctx.SourceDir, filepath.join(ctx.SourceDir, "_build"), installDir) + c.define "CMAKE_INSTALL_LIBDIR", "lib" + c.defineBool "ENKITS_INSTALL", true + c.defineBool "ENKITS_BUILD_EXAMPLES", false + c.defineBool "ENKITS_BUILD_SHARED", shared + c.defineBool "CMAKE_POSITION_INDEPENDENT_CODE", fPIC + c.configure + c.build + c.install + + licenseDir := filepath.join(installDir, "licenses") + os.mkdirAll(licenseDir, 0o755)! + os.writeFile(filepath.join(licenseDir, "License.txt"), os.readFile(filepath.join(ctx.SourceDir, "License.txt"))!, 0o644)! + + version := "" + for line in string(os.readFile(filepath.join(ctx.SourceDir, "CMakeLists.txt"))!).split("\n") { + trimmed := line.trimSpace + if trimmed.hasPrefix("VERSION ") { + version = strings.trim(trimmed.trimPrefix("VERSION "), `"`) + break + } + } + if version == "" { + panic "enkiTS CMakeLists.txt has no project version" + } + + libs := "-L$${libdir} -lenkiTS" + if slices.contains(target.require["os"], "linux") || slices.contains(target.require["os"], "freebsd") { + libs += " -lm -lpthread -lstdc++" + } else { + libs += " -lc++" + } + + cflags := "-I$${includedir} -DENKITS_TASK_PRIORITIES_NUM=3" + if shared { + cflags += " -DENKITS_DLL=1" + } + + pcDir := filepath.join(installDir, "lib", "pkgconfig") + os.mkdirAll(pcDir, 0o755)! + pc := `prefix=$${pcfiledir}/../.. +exec_prefix=$${prefix} +libdir=$${prefix}/lib +includedir=$${prefix}/include + +Name: enkiTS +Description: A C and C++ task scheduler for creating parallel programs +Version: ` + version + ` +Libs: ` + libs + ` +Cflags: ` + cflags + ` +` + os.writeFile(filepath.join(pcDir, "enkiTS.pc"), []byte(pc), 0o644)! + + pkgconfig.use installDir + ctx.setMetadata pkgconfig.lookup("enkiTS")! +} + +onTest ctx => { + installDir := ctx.outputDir + testDir := filepath.join(ctx.SourceDir, "_llar_consumer") + os.mkdirAll(testDir, 0o755)! + + sourcePath := filepath.join(testDir, "consumer.c") + os.writeFile(sourcePath, []byte(consumerSource), 0o644)! + + pkgconfig.use installDir + flagsFile := filepath.join(testDir, "enkiTS.flags") + os.writeFile(flagsFile, []byte(pkgconfig.lookup("enkiTS")!), 0o644)! + + binary := filepath.join(testDir, "consumer") + cc! sourcePath, "-o", binary, "@"+flagsFile + + if target.options["shared"][0] == "ON" { + os.setenv("LD_LIBRARY_PATH", filepath.join(installDir, "lib"))! + os.setenv("DYLD_LIBRARY_PATH", filepath.join(installDir, "lib"))! + } + exec! binary +} diff --git a/dougbinks/enkiTS/versions.json b/dougbinks/enkiTS/versions.json new file mode 100644 index 0000000..f9c0ecd --- /dev/null +++ b/dougbinks/enkiTS/versions.json @@ -0,0 +1,4 @@ +{ + "path": "dougbinks/enkiTS", + "deps": {} +}