meator opened a new issue, #6109:
URL: https://github.com/apache/couchdb/issues/6109

   ### Version
   
   3.5.1
   
   ### Describe the problem you're encountering
   
   Most of these can be considered minor issues, but 
   
   - [ ] 
[Several](https://github.com/apache/couchdb/blob/main/INSTALL.Unix.md#debian-based-systems)
 
[documentation](https://github.com/apache/couchdb/blob/main/INSTALL.Unix.md#macos)
 
[sources](https://docs.couchdb.org/en/stable/install/unix.html#debian-based-systems)
 mention a `pkg-config` dependency. I am under a heavy suspicion that this is a 
false dependency and that `pkg-config` is not used anywhere. If it is used 
anywhere, it is most certainly used wrong (otherwise cross compilation of 
couchdb would work).
   - [ ] 
https://github.com/apache/couchdb/blob/78395184b02cdc9573c3536ec72721fb353d5442/configure#L337-L343
   
     This is not how you check for dependencies. This doesn't work well with 
cross compilation and with systems that deal with includes in a "more creative 
way" like Nix. Since we have it, why don't we use `pkg-config`?
   
     ```
     pkg-config --exists mozjs-${SM_VSN}
     ```
   
     This of course requires further testing. couchdb seems to support a lot of 
systems, some of them might not have pkg-config working. More than one 
dependency detection mechanism might be needed, but `pkg-config` should be the 
first method tried.
   - [ ] [Do not hardcode `-j<N>` in a 
Makefile](https://github.com/apache/couchdb/blob/78395184b02cdc9573c3536ec72721fb353d5442/src/couch_quickjs/rebar.config.script#L24-L27)
 You do not know how many cores does the build machine have. It it must be 
done, at least use `-j$(nproc)` (which also doesn't belong in a Makefile).
   - [ ] `CFLAGS` overriding is done wrong.
   
     As I've mentioned in #6107, this is issue is often seen in hand-written 
Makefiles. Please see the following chapter of the GNU Make manual on how 
`CFLAGS` overriding should be done: 
https://ftp.gnu.org/old-gnu/Manuals/make-3.80/html_node/make_125.html#SEC129 It 
is a minor issue though.
   - [ ] rebar doesn't echo the build command when builing C/C++
   
     This leads to cleaner output, but it is worse to debug when the 
compilation fails. There's a reason why Make echos the build commands.
   
   `configure` asks for `rebar` and `rebar3`. I know little about erlang, but 
it seems like `rebar3` is a successor of `rebar`. If that's the case, it would 
make sense to fully transition to `rebar3` if possible.
   
   couchdb doesn't have much C code, but I've found errors in a notable portion 
of its build process. Languate interop can be difficult to get right. I would 
advise the following:
   
   - Drop all C code which isn't necessary for couchdb. If the C code can be 
replaced by erlang, do it.
   
     I'd imagine that since couchdb doesn't have much C code, most of it is 
there for a purpose. But it's useful to reevaluate it just to be sure.
   - Check whether official erlang documentation, rebar or some third party 
source of documentation could be used for guidance on erlang to C/C++ interop. 
If for example rebar or some other erlang build tool provides a high-level 
facility for interop, consider switching to it.
   
     I assume the C/C++ code is used for interop. If not, disregard this advice.
   
   ### Expected Behaviour
   
   .
   
   ### Steps to Reproduce
   
   _No response_
   
   ### Your Environment
   
   _No response_
   
   ### Additional Context
   
   _No response_


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to