-
Notifications
You must be signed in to change notification settings - Fork 2
formula: add rscada/libmbus #218
Changes from all commits
23f59b8
4f377d4
6265f58
e55e126
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,125 @@ | ||
| import ( | ||
| "os" | ||
| "path/filepath" | ||
| ) | ||
|
|
||
| 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)! | ||
|
|
||
| // GNU libtoolize is `libtoolize` on Linux and `glibtoolize` on Homebrew | ||
| // Darwin. Host package managers are not part of the formula. | ||
| if exec("libtoolize", "--copy", "--force") != nil { | ||
| glibtoolize! "--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 |
||
|
|
||
| pcDir := filepath.join(installDir, "lib", "pkgconfig") | ||
| os.mkdirAll(pcDir, 0o755)! | ||
| pc := pkgconfig.new( | ||
| name = "libmbus", | ||
| description = "Open source M-bus (Meter-Bus) library.", | ||
| version = "0.10.2", | ||
| URL = "http://www.rscada.se/libmbus/", | ||
| libs = ["-L$${libdir}", "-lmbus", "-lm"], | ||
| cflags = ["-I$${includedir}"], | ||
| )! | ||
| out := os.create(filepath.join(pcDir, "libmbus.pc"))! | ||
| pc.writeTo(out)! | ||
| out.close()! | ||
|
|
||
| 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.