-
Notifications
You must be signed in to change notification settings - Fork 2
formula: add rscada/libmbus #218
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
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,120 @@ | ||
| import ( | ||
| "os" | ||
| "path/filepath" | ||
| "slices" | ||
| "strings" | ||
| ) | ||
|
|
||
| const consumerSource = `#include <mbus/mbus.h> | ||
| #include <string.h> | ||
|
|
||
| int main(void) { | ||
| unsigned char ack = 0xE5; | ||
| mbus_frame frame; | ||
| mbus_handle *handle; | ||
|
|
||
| memset(&frame, 0, sizeof(frame)); | ||
| if (mbus_parse(&frame, &ack, 1) != 0) { | ||
| return 1; | ||
| } | ||
| if (mbus_get_current_version() == 0) { | ||
| return 1; | ||
| } | ||
|
|
||
| handle = mbus_context_serial("/dev/null"); | ||
| if (handle == 0) { | ||
| return 1; | ||
| } | ||
| mbus_context_free(handle); | ||
| return 0; | ||
| } | ||
| ` | ||
|
|
||
| id "rscada/libmbus" | ||
|
|
||
| fromVer "0.10.2" | ||
|
|
||
| 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" | ||
|
|
||
| os.chdir(ctx.SourceDir)! | ||
| os.mkdirAll(filepath.join(ctx.SourceDir, "m4"), 0o755)! | ||
| if slices.contains(target.require["os"], "darwin") { | ||
| glibtoolize! "--copy", "--force" | ||
| } else { | ||
| libtoolize! "--copy", "--force" | ||
| } | ||
| autoreconf! "-fi" | ||
|
|
||
| picFlag := "--without-pic" | ||
| if fPIC { | ||
| picFlag = "--with-pic" | ||
| } | ||
|
|
||
| a := autotools.new(ctx.SourceDir, filepath.join(ctx.SourceDir, "_build"), installDir) | ||
| if shared { | ||
| a.configure "--enable-shared", "--disable-static", picFlag | ||
| } else { | ||
| a.configure "--disable-shared", "--enable-static", picFlag | ||
| } | ||
| a.build | ||
| a.install | ||
|
|
||
| licenseDir := filepath.join(installDir, "licenses") | ||
| os.mkdirAll(licenseDir, 0o755)! | ||
| os.writeFile(filepath.join(licenseDir, "LICENSE"), os.readFile(filepath.join(ctx.SourceDir, "LICENSE"))!, 0o644)! | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [P2] Only LICENSE is copied; confirm upstream ships no COPYING The sibling |
||
|
|
||
| pcPath := filepath.join(installDir, "lib", "pkgconfig", "libmbus.pc") | ||
| pc := string(os.readFile(pcPath)!) | ||
| pc = strings.replace(pc, "prefix="+installDir, "prefix=$${pcfiledir}/../..", 1) | ||
| pc = strings.replace(pc, "exec_prefix="+installDir, "exec_prefix=$${prefix}", 1) | ||
| pc = strings.replace(pc, "libdir="+filepath.join(installDir, "lib"), "libdir=$${prefix}/lib", 1) | ||
| pc = strings.replace(pc, "includedir="+filepath.join(installDir, "include"), "includedir=$${prefix}/include", 1) | ||
| os.writeFile(pcPath, []byte(pc), 0o644)! | ||
|
Comment on lines
+88
to
+94
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [P3] pkg-config relocation lacks explanatory comment This |
||
|
|
||
| pkgconfig.use installDir | ||
| ctx.setMetadata pkgconfig.lookup("libmbus")! | ||
| } | ||
|
|
||
| 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, "libmbus.flags") | ||
| os.writeFile(flagsFile, []byte(pkgconfig.lookup("libmbus")!), 0o644)! | ||
|
|
||
| binary := filepath.join(testDir, "consumer") | ||
| cc! sourcePath, "-o", binary, "@"+flagsFile | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [P3] Test compile omits an explicit -std flag used by the sibling The sibling |
||
|
|
||
| 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 | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| import "strings" | ||
|
|
||
| func normalize(version string) string { | ||
| if strings.hasPrefix(version, "v") { | ||
| return version | ||
| } | ||
| return "v" + version | ||
| } | ||
|
Comment on lines
+3
to
+8
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [P2] Comparator lacks rationale comment; normalization may be dead code This comparator is byte-for-byte identical to Upstream |
||
|
|
||
| compareVer (a, b) => { | ||
| return semver.Compare(normalize(a.Version), normalize(b.Version)) | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| { | ||
| "path": "rscada/libmbus", | ||
| "deps": {} | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[P3] Non-obvious autotools bootstrap steps are undocumented
The
m4/pre-creation (line 62) and theglibtoolizevslibtoolizedarwin branch (lines 63-67) are non-obvious workarounds a future maintainer wouldn't infer (Homebrew renames the GNU tool;AC_CONFIG_MACRO_DIRSneedsm4/to exist). The siblinglibatomic_opsdocuments its comparable non-obvious step (pkg-config relocation) with a comment. A one-line comment here would match repo norms.