[SOLVED] problem compiling hmland

Status
Not open for further replies.

LeoSum

Dabbler
Joined
Dec 13, 2015
Messages
36
Hi there,
I am currently trying to move my NAS from openmediavault to FreeNAS and so I'm in the process of getting everything to run in Jails. For my home automation, I use fhem, which I have set up in a jail already. Now I am trying to get the software "hmland" to run, which is needed to connect to my HomeMatic Hardware via a usb stick. The software is available here: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb

However just running
Code:
gmake
as suggested by the manual in the folder hmcfgsub fails:

Code:
root@fhem:/home/fhem/apps/hmcfgusb # gmake
gcc -MMD -O2 -Wall -I/opt/local/include -g  -c -o hmland.o hmland.c
hmland.c:41:31: warning: libusb-1.0/libusb.h: No such file or directory
In file included from hmland.c:45:
hmcfgusb.h:27: error: expected specifier-qualifier-list before 'libusb_device_handle'
hmland.c: In function 'comm':
hmland.c:516: error: 'struct hmcfgusb_dev' has no member named 'bootloader'
hmland.c:543: error: 'struct hmcfgusb_dev' has no member named 'opened_at'
hmland.c:608: error: 'struct hmcfgusb_dev' has no member named 'opened_at'
hmland.c:611: error: 'struct hmcfgusb_dev' has no member named 'opened_at'
<builtin>: recipe for target 'hmland.o' failed
gmake: *** [hmland.o] Error 1


Doing some research, I found out that libusb-1.0 is already included in FreeBSDbut under a different name. Therefore in the files
Code:
hmcfgusb.c
and
Code:
hmland.c
I changed the lines
Code:
#include <libusb-1.0/libusb.h>
to
Code:
#include <libusb.h>
and in Makefile the lines
Code:
CFLAGS=-MMD -O2 -Wall -I/opt/local/include -g
LDFLAGS=-L/opt/local/lib
LDLIBS=-lusb-1.0 -lrt
to

Code:
CFLAGS=-MMD -O2 -Wall -I/usr/include -g
LDFLAGS=-L/usr/lib
LDLIBS=-libusb -lrt


because that's what I figured are the correct paths in FreeBSD. Now compiling runs for a bit but then fails at a later point:

Code:
root@fhem:/home/fhem/apps/hmcfgusb # gmake
gcc -MMD -O2 -Wall -I/usr/include -g  -c -o hmland.o hmland.c
gcc -MMD -O2 -Wall -I/usr/include -g  -c -o hmcfgusb.o hmcfgusb.c
gcc -MMD -O2 -Wall -I/usr/include -g  -c -o util.o util.c
gcc -L/usr/lib  hmland.o hmcfgusb.o util.o  -libusb -lrt -o hmland
/usr/bin/ld: cannot find -libusb
<builtin>: recipe for target 'hmland' failed
gmake: *** [hmland] Error 1


After this error I figured I'd remove the entry "-libusb" in the Makefile at LDLIBS which yields the following result:

Code:
root@fhem:/home/fhem/apps/hmcfgusb # gmake
gcc -L/usr/lib  hmland.o hmcfgusb.o util.o  -lrt -o hmland
hmcfgusb.o: In function `hmcfgusb_exit':
/home/fhem/apps/hmcfgusb/hmcfgusb.c:600: undefined reference to `libusb_exit'
hmcfgusb.o: In function `hmcfgusb_close':
/home/fhem/apps/hmcfgusb/hmcfgusb.c:580: undefined reference to `libusb_cancel_transfer'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:581: undefined reference to `libusb_handle_events'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:584: undefined reference to `libusb_release_interface'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:589: undefined reference to `libusb_close'
hmcfgusb.o: In function `hmcfgusb_poll':
/home/fhem/apps/hmcfgusb/hmcfgusb.c:478: undefined reference to `libusb_get_next_timeout'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:523: undefined reference to `libusb_handle_events_timeout_completed'
hmcfgusb.o: In function `hmcfgusb_find':
/home/fhem/apps/hmcfgusb/hmcfgusb.c:109: undefined reference to `libusb_get_device_list'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:118: undefined reference to `libusb_get_device_descriptor'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:125: undefined reference to `libusb_open'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:135: undefined reference to `libusb_get_string_descriptor_ascii'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:147: undefined reference to `libusb_close'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:174: undefined reference to `libusb_free_device_list'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:152: undefined reference to `libusb_detach_kernel_driver'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:155: undefined reference to `libusb_close'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:156: undefined reference to `libusb_free_device_list'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:160: undefined reference to `libusb_claim_interface'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:168: undefined reference to `libusb_free_device_list'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:128: undefined reference to `libusb_free_device_list'
hmcfgusb.o: In function `hmcfgusb_init':
/home/fhem/apps/hmcfgusb/hmcfgusb.c:330: undefined reference to `libusb_init'
hmcfgusb.o: In function `hmcfgusb_prepare_int':
/home/fhem/apps/hmcfgusb/hmcfgusb.c:244: undefined reference to `libusb_alloc_transfer'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:251: undefined reference to `libusb_fill_interrupt_transfer'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:256: undefined reference to `libusb_submit_transfer'
hmcfgusb.o: In function `hmcfgusb_init':
/home/fhem/apps/hmcfgusb/hmcfgusb.c:400: undefined reference to `libusb_get_pollfds'
hmcfgusb.o: In function `hmcfgusb_prepare_int':
/home/fhem/apps/hmcfgusb/hmcfgusb.c:259: undefined reference to `libusb_free_transfer'
hmcfgusb.o: In function `hmcfgusb_init':
/home/fhem/apps/hmcfgusb/hmcfgusb.c:425: undefined reference to `libusb_close'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:358: undefined reference to `libusb_close'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:374: undefined reference to `libusb_close'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:421: undefined reference to `libusb_cancel_transfer'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:422: undefined reference to `libusb_handle_events'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:403: undefined reference to `libusb_cancel_transfer'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:404: undefined reference to `libusb_handle_events'
hmcfgusb.o: In function `hmcfgusb_interrupt':
/home/fhem/apps/hmcfgusb/hmcfgusb.c:301: undefined reference to `libusb_submit_transfer'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:310: undefined reference to `libusb_free_transfer'
/home/fhem/apps/hmcfgusb/hmcfgusb.c:310: undefined reference to `libusb_free_transfer'
hmcfgusb.o: In function `hmcfgusb_send_null_frame':
/home/fhem/apps/hmcfgusb/hmcfgusb.c:186: undefined reference to `libusb_interrupt_transfer'
hmcfgusb.o: In function `hmcfgusb_send':
/home/fhem/apps/hmcfgusb/hmcfgusb.c:208: undefined reference to `libusb_interrupt_transfer'
<builtin>: recipe for target 'hmland' failed
gmake: *** [hmland] Error 1


I did some googling on that too, but came upt with nothing that got me any further. Does somebody with more FreeBSD experience maybe have an Idea on what to try?
Thanks and best regards,

Leo
 

SweetAndLow

Sweet'NASty
Joined
Nov 6, 2013
Messages
6,421
Can you pkg install this tool? Why are you trying to compile it?
 

LeoSum

Dabbler
Joined
Dec 13, 2015
Messages
36
No, it has not yet been ported.

However I received a hint that the linker automatically places "lib" in front of every lib. So the Makefile needs to read:

Code:
CFLAGS=-MMD -O2 -Wall -I/usr/include -g
LDFLAGS=-L/usr/lib
LDLIBS=-usb -lrt


And now it works!

For anyone who want's to do this in the future:

The compiled hmland will only work if additionally in hmcfgusb.c the lines concerning libusb_detach_kernel_driver are removed (in current version lines 152-159). Otherwise it'll throw nasty errors at you.
 
Status
Not open for further replies.
Top