avrdudes / avrdude

AVRDUDE is a utility to program AVR microcontrollers
GNU General Public License v2.0
724 stars 137 forks source link

macOS github action failed. #1793

Closed mcuee closed 5 months ago

mcuee commented 5 months ago

Reference github action build for git main. https://github.com/avrdudes/avrdude/actions/runs/8844905570/job/24287714207

Run cmake --build build
[  1%] Generating avrdude.conf
[  1%] Built target conf
[  2%] [FLEX][Parser] Building scanner with flex 2.6.4
[  3%] [BISON][Parser] Building parser with bison 2.3
[  5%] Building C object src/CMakeFiles/libavrdude.dir/arduino.c.o
[  6%] Building C object src/CMakeFiles/libavrdude.dir/avr.c.o
[  7%] Building C object src/CMakeFiles/libavrdude.dir/avr910.c.o
[  9%] Building C object src/CMakeFiles/libavrdude.dir/avrcache.c.o
[ 10%] Building C object src/CMakeFiles/libavrdude.dir/avrftdi.c.o
In file included from /Users/runner/work/avrdude/avrdude/src/avrftdi.c:42:
/Users/runner/work/avrdude/avrdude/src/avrftdi_private.h:10:12: fatal error: 'libusb.h' file not found
#  include <libusb.h>
           ^~~~~~~~~~
1 error generated.
make[2]: *** [src/CMakeFiles/libavrdude.dir/avrftdi.c.o] Error 1
make[1]: *** [src/CMakeFiles/libavrdude.dir/all] Error 2
make: *** [all] Error 2
Error: Process completed with exit code 2.
mcuee commented 5 months ago

The issue seems to be in the configure stage that libusb-1.0/libusb.h is not found.

Edit to add -- in fact, all header files can not be found, not only libusb.h.

Run cmake -D CMAKE_C_FLAGS=-I/usr/local/include -D CMAKE_EXE_LINKER_FLAGS=-L/usr/local/Cellar -D DEBUG_CMAKE=1 -D CMAKE_BUILD_TYPE=RelWithDebInfo -B build
-- The C compiler identification is AppleClang 15.0.0.15000040
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /Applications/Xcode_15.0.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Found Git: /opt/homebrew/bin/git (found version "2.44.0")
-- Found FLEX: /usr/bin/flex (found version "2.[6](https://github.com/avrdudes/avrdude/actions/runs/8844905570/job/24287714207#step:4:7).4")
-- Found BISON: /usr/bin/bison (found version "2.3")
-- Looking for libelf.h
-- Looking for libelf.h - not found
-- Looking for libelf/libelf.h
-- Looking for libelf/libelf.h - not found
-- Looking for usb.h
-- Looking for usb.h - not found
-- Looking for lusb0_usb.h
-- Looking for lusb0_usb.h - not found
-- Looking for libusb.h
-- Looking for libusb.h - not found
-- Looking for libusb-1.0/libusb.h
-- Looking for libusb-1.0/libusb.h - not found
-- Looking for hidapi/hidapi.h
-- Looking for hidapi/hidapi.h - not found
-- Looking for ftdi_tcioflush
-- Looking for ftdi_tcioflush - not found
-- Configuration summary:
-- ----------------------
-- CMAKE_HOST_SYSTEM: Darwin-23.4.0
-- CMAKE_SYSTEM: Darwin-23.4.0
-- CMAKE_FIND_ROOT_PATH: 
-- CMAKE_C_COMPILER: /Applications/Xcode_15.0.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
-- CONFIG_DIR: /usr/local/etc
-- AVRDUDE_FULL_VERSION: [7](https://github.com/avrdudes/avrdude/actions/runs/8844905570/job/24287714207#step:4:8).3-20240426 (db2580d)
-- USE_EXTERNAL_LIBS: OFF
-- USE_LIBUSBWIN32: OFF
-- HAVE_LIBELF: /opt/homebrew/lib/libelf.a
-- HAVE_LIBUSB: HAVE_LIBUSB-NOTFOUND
-- HAVE_LIBUSB_1_0: /opt/homebrew/lib/libusb-1.0.dylib
-- HAVE_LIBUSB_WIN32: HAVE_LIBUSB_WIN32-NOTFOUND
-- HAVE_LIBHIDAPI: /opt/homebrew/lib/libhidapi.dylib
-- HAVE_LIBFTDI: HAVE_LIBFTDI-NOTFOUND
-- HAVE_LIBFTDI1: /opt/homebrew/lib/libftdi1.dylib
-- HAVE_LIBREADLINE: /Applications/Xcode_15.0.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX[14](https://github.com/avrdudes/avrdude/actions/runs/8844905570/job/24287714207#step:4:15).0.sdk/usr/lib/libreadline.tbd
-- HAVE_LIBSERIALPORT: 1
-- HAVE_LIBELF_H: 
-- HAVE_LIBELF_LIBELF_H: 
-- HAVE_USB_H: 
-- HAVE_LUSB0_USB_H: 
-- HAVE_LIBUSB_H: 
-- HAVE_LIBUSB_1_0_LIBUSB_H: 
-- HAVE_HIDAPI_HIDAPI_H: 
-- LIBUSB_COMPAT_DIR: 
-- LIBGPIODV2_FOUND: 
-- LIBGPIOD_FOUND: 
-- ----------------------
-- DO HAVE    libelf
-- DON'T HAVE libusb
-- DO HAVE    libusb_1_0
-- DO HAVE    libhidapi
-- DON'T HAVE libftdi
-- DO HAVE    libftdi1
-- DO HAVE    libreadline
-- DO HAVE    libserialport
-- DISABLED   doc
-- DISABLED   parport
-- DISABLED   linuxgpio
-- DISABLED   linuxspi
-- ----------------------
-- Configuring done (4.0s)
-- Generating done (0.0s)
-- Build files have been written to: /Users/runner/work/avrdude/avrdude/build
mcuee commented 5 months ago

I have no issues to build git main under my macOS machine (Mac Mini M1 2020, latest macOS 14.4.1 and up-to-date Homebrew).

@MCUdude and @dl8dtl Please help to check as well on your macOS machine if you have some time. Thanks.

My build log of git main. You can see that libusb-1.0/libusb.h was found in the build log. -- Looking for libusb-1.0/libusb.h - found

``` mcuee@mcuees-Mac-mini avrdude_main % rm -rf build_darwin mcuee@mcuees-Mac-mini avrdude_main % ./build.sh -- The C compiler identification is AppleClang 15.0.0.15000309 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /Library/Developer/CommandLineTools/usr/bin/cc - skipped -- Detecting C compile features -- Detecting C compile features - done -- Found Git: /opt/homebrew/bin/git (found version "2.44.0") -- Found FLEX: /usr/bin/flex (found version "2.6.4") -- Found BISON: /usr/bin/bison (found version "2.3") -- Looking for libelf.h -- Looking for libelf.h - not found -- Looking for libelf/libelf.h -- Looking for libelf/libelf.h - found -- Looking for usb.h -- Looking for usb.h - found -- Looking for lusb0_usb.h -- Looking for lusb0_usb.h - not found -- Looking for libusb.h -- Looking for libusb.h - not found -- Looking for libusb-1.0/libusb.h -- Looking for libusb-1.0/libusb.h - found -- Looking for hidapi/hidapi.h -- Looking for hidapi/hidapi.h - found -- Looking for ftdi_tcioflush -- Looking for ftdi_tcioflush - found -- Configuration summary: -- ---------------------- -- DO HAVE libelf -- DO HAVE libusb -- DO HAVE libusb_1_0 -- DO HAVE libhidapi -- DON'T HAVE libftdi -- DO HAVE libftdi1 -- DO HAVE libreadline -- DO HAVE libserialport -- DISABLED doc -- DISABLED parport -- DISABLED linuxgpio -- DISABLED linuxspi -- ---------------------- -- Configuring done (1.0s) -- Generating done (0.0s) -- Build files have been written to: /Users/mcuee/build/avr/avrdude_test/avrdude_main/build_darwin [ 1%] Generating avrdude.conf [ 1%] Built target conf [ 2%] [FLEX][Parser] Building scanner with flex 2.6.4 [ 3%] [BISON][Parser] Building parser with bison 2.3 [ 5%] Building C object src/CMakeFiles/libavrdude.dir/arduino.c.o [ 6%] Building C object src/CMakeFiles/libavrdude.dir/avr.c.o [ 7%] Building C object src/CMakeFiles/libavrdude.dir/avr910.c.o [ 9%] Building C object src/CMakeFiles/libavrdude.dir/avrcache.c.o [ 10%] Building C object src/CMakeFiles/libavrdude.dir/avrftdi.c.o [ 11%] Building C object src/CMakeFiles/libavrdude.dir/avrftdi_tpi.c.o [ 13%] Building C object src/CMakeFiles/libavrdude.dir/avrintel.c.o [ 14%] Building C object src/CMakeFiles/libavrdude.dir/avrpart.c.o [ 15%] Building C object src/CMakeFiles/libavrdude.dir/bitbang.c.o [ 17%] Building C object src/CMakeFiles/libavrdude.dir/buspirate.c.o [ 18%] Building C object src/CMakeFiles/libavrdude.dir/butterfly.c.o [ 19%] Building C object src/CMakeFiles/libavrdude.dir/ch341a.c.o [ 21%] Building C object src/CMakeFiles/libavrdude.dir/config.c.o [ 22%] Building C object src/CMakeFiles/libavrdude.dir/confwin.c.o [ 23%] Building C object src/CMakeFiles/libavrdude.dir/crc16.c.o [ 25%] Building C object src/CMakeFiles/libavrdude.dir/dfu.c.o [ 26%] Building C object src/CMakeFiles/libavrdude.dir/dryrun.c.o [ 27%] Building C object src/CMakeFiles/libavrdude.dir/fileio.c.o [ 28%] Building C object src/CMakeFiles/libavrdude.dir/flip1.c.o [ 30%] Building C object src/CMakeFiles/libavrdude.dir/flip2.c.o [ 31%] Building C object src/CMakeFiles/libavrdude.dir/ft245r.c.o [ 32%] Building C object src/CMakeFiles/libavrdude.dir/jtagmkI.c.o [ 34%] Building C object src/CMakeFiles/libavrdude.dir/jtagmkII.c.o [ 35%] Building C object src/CMakeFiles/libavrdude.dir/jtag3.c.o [ 36%] Building C object src/CMakeFiles/libavrdude.dir/leds.c.o [ 38%] Building C object src/CMakeFiles/libavrdude.dir/linuxgpio.c.o [ 39%] Building C object src/CMakeFiles/libavrdude.dir/linuxspi.c.o [ 40%] Building C object src/CMakeFiles/libavrdude.dir/lists.c.o [ 42%] Building C object src/CMakeFiles/libavrdude.dir/micronucleus.c.o [ 43%] Building C object src/CMakeFiles/libavrdude.dir/par.c.o [ 44%] Building C object src/CMakeFiles/libavrdude.dir/pgm.c.o [ 46%] Building C object src/CMakeFiles/libavrdude.dir/pgm_type.c.o [ 47%] Building C object src/CMakeFiles/libavrdude.dir/pickit2.c.o [ 48%] Building C object src/CMakeFiles/libavrdude.dir/pindefs.c.o [ 50%] Building C object src/CMakeFiles/libavrdude.dir/ppi.c.o [ 51%] Building C object src/CMakeFiles/libavrdude.dir/ppiwin.c.o [ 52%] Building C object src/CMakeFiles/libavrdude.dir/serbb_posix.c.o [ 53%] Building C object src/CMakeFiles/libavrdude.dir/serbb_win32.c.o [ 55%] Building C object src/CMakeFiles/libavrdude.dir/ser_avrdoper.c.o [ 56%] Building C object src/CMakeFiles/libavrdude.dir/ser_posix.c.o [ 57%] Building C object src/CMakeFiles/libavrdude.dir/ser_win32.c.o [ 59%] Building C object src/CMakeFiles/libavrdude.dir/serialadapter.c.o [ 60%] Building C object src/CMakeFiles/libavrdude.dir/serialupdi.c.o [ 61%] Building C object src/CMakeFiles/libavrdude.dir/stk500.c.o [ 63%] Building C object src/CMakeFiles/libavrdude.dir/stk500v2.c.o [ 64%] Building C object src/CMakeFiles/libavrdude.dir/stk500generic.c.o [ 65%] Building C object src/CMakeFiles/libavrdude.dir/strutil.c.o [ 67%] Building C object src/CMakeFiles/libavrdude.dir/teensy.c.o [ 68%] Building C object src/CMakeFiles/libavrdude.dir/term.c.o [ 69%] Building C object src/CMakeFiles/libavrdude.dir/updi_link.c.o [ 71%] Building C object src/CMakeFiles/libavrdude.dir/updi_nvm.c.o [ 72%] Building C object src/CMakeFiles/libavrdude.dir/updi_nvm_v0.c.o [ 73%] Building C object src/CMakeFiles/libavrdude.dir/updi_nvm_v2.c.o [ 75%] Building C object src/CMakeFiles/libavrdude.dir/updi_nvm_v3.c.o [ 76%] Building C object src/CMakeFiles/libavrdude.dir/updi_nvm_v4.c.o [ 77%] Building C object src/CMakeFiles/libavrdude.dir/updi_nvm_v5.c.o [ 78%] Building C object src/CMakeFiles/libavrdude.dir/updi_readwrite.c.o [ 80%] Building C object src/CMakeFiles/libavrdude.dir/updi_state.c.o [ 81%] Building C object src/CMakeFiles/libavrdude.dir/urclock.c.o /Users/mcuee/build/avr/avrdude_test/avrdude_main/src/urclock.c:1569:35: warning: format specifies type 'unsigned long' but the argument has type 'uint64_t' (aka 'unsigned long long') [-Wformat] term_out("%0*lx", 2*ur.idlen, urclockID), first=0; ~~~~~ ^~~~~~~~~ %0*llx /Users/mcuee/build/avr/avrdude_test/avrdude_main/src/avrdude.h:115:106: note: expanded from macro 'term_out' #define term_out(...) avrdude_message2(stdout, __LINE__, __FILE__, __func__, MSG2_FLUSH, MSG_INFO, __VA_ARGS__) ^~~~~~~~~~~ 1 warning generated. [ 82%] Building C object src/CMakeFiles/libavrdude.dir/usbasp.c.o [ 84%] Building C object src/CMakeFiles/libavrdude.dir/usb_hidapi.c.o [ 85%] Building C object src/CMakeFiles/libavrdude.dir/usb_libusb.c.o [ 86%] Building C object src/CMakeFiles/libavrdude.dir/usbtiny.c.o [ 88%] Building C object src/CMakeFiles/libavrdude.dir/update.c.o [ 89%] Building C object src/CMakeFiles/libavrdude.dir/wiring.c.o [ 90%] Building C object src/CMakeFiles/libavrdude.dir/xbee.c.o /Users/mcuee/build/avr/avrdude_test/avrdude_main/src/xbee.c:250:80: warning: format specifies type 'unsigned long' but the argument has type '__darwin_suseconds_t' (aka 'int') [-Wformat] pmsg_notice(" Minimum response time: %lu.%06lu\n", summary->minimum.tv_sec, summary->minimum.tv_usec); ~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~ %06d /Users/mcuee/build/avr/avrdude_test/avrdude_main/src/avrdude.h:89:139: note: expanded from macro 'pmsg_notice' #define pmsg_notice(...) avrdude_message2(stderr, __LINE__, __FILE__, __func__, MSG2_PROGNAME|MSG2_FLUSH|MSG2_LEFT_MARGIN, MSG_NOTICE, __VA_ARGS__) ^~~~~~~~~~~ /Users/mcuee/build/avr/avrdude_test/avrdude_main/src/xbee.c:251:80: warning: format specifies type 'unsigned long' but the argument has type '__darwin_suseconds_t' (aka 'int') [-Wformat] pmsg_notice(" Maximum response time: %lu.%06lu\n", summary->maximum.tv_sec, summary->maximum.tv_usec); ~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~ %06d /Users/mcuee/build/avr/avrdude_test/avrdude_main/src/avrdude.h:89:139: note: expanded from macro 'pmsg_notice' #define pmsg_notice(...) avrdude_message2(stderr, __LINE__, __FILE__, __func__, MSG2_PROGNAME|MSG2_FLUSH|MSG2_LEFT_MARGIN, MSG_NOTICE, __VA_ARGS__) ^~~~~~~~~~~ /Users/mcuee/build/avr/avrdude_test/avrdude_main/src/xbee.c:264:71: warning: format specifies type 'unsigned long' but the argument has type '__darwin_suseconds_t' (aka 'int') [-Wformat] pmsg_notice(" Average response time: %lu.%06lu\n", average.tv_sec, average.tv_usec); ~~~~~ ^~~~~~~~~~~~~~~ %06d /Users/mcuee/build/avr/avrdude_test/avrdude_main/src/avrdude.h:89:139: note: expanded from macro 'pmsg_notice' #define pmsg_notice(...) avrdude_message2(stderr, __LINE__, __FILE__, __func__, MSG2_PROGNAME|MSG2_FLUSH|MSG2_LEFT_MARGIN, MSG_NOTICE, __VA_ARGS__) ^~~~~~~~~~~ 3 warnings generated. [ 92%] Building C object src/CMakeFiles/libavrdude.dir/__/lexer.c.o /Users/mcuee/build/avr/avrdude_test/avrdude_main/build_darwin/lexer.c:2435:38: warning: comparison of integers of different signs: 'yy_size_t' (aka 'unsigned long') and 'int' [-Wsign-compare] if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. [ 93%] Building C object src/CMakeFiles/libavrdude.dir/__/config_gram.c.o [ 94%] Linking C static library libavrdude.a [ 94%] Built target libavrdude [ 96%] Building C object src/CMakeFiles/avrdude.dir/main.c.o [ 97%] Building C object src/CMakeFiles/avrdude.dir/developer_opts.c.o [ 98%] Building C object src/CMakeFiles/avrdude.dir/whereami.c.o [100%] Linking C executable avrdude [100%] Built target avrdude Build succeeded. Run sudo cmake --build build_darwin --target install to install. ```
mcuee commented 5 months ago

@Youw

Sorry to bother you again, just wondering if you have some ideas why libusb.h was not found properly. Thanks.

This is still happening even if I add pkg-config as a macOS dependancy.

mcuee commented 5 months ago

I guess the following header file needs some fix to be more robust. For libusb project, we usually recommend using pkg-config to find libusb.h and not to use libusb-1.0/libusb.h in any case. https://github.com/avrdudes/avrdude/blob/main/src/avrftdi_private.h

#if defined(HAVE_LIBFTDI1) && defined(HAVE_LIBUSB_1_0)
# if defined(HAVE_LIBUSB_1_0_LIBUSB_H)
#  include <libusb-1.0/libusb.h>
# else
#  include <libusb.h>
# endif
# include <libftdi1/ftdi.h>
# undef HAVE_LIBFTDI_TYPE_232H
# define HAVE_LIBFTDI_TYPE_232H 1
#elif defined(HAVE_LIBFTDI)
#include <ftdi.h>
#else
mcuee commented 5 months ago

Since autotools build seems to work from github action build of PR #1796, looks like the issue is with the changes in CMake related files. Still kind of strange though.

Edit: #1796 does not work either.

mcuee commented 5 months ago

Finally figured out the issue from the github action build log.

github has switched to use /opt/homebrew for homebrew. They no longer use /usr/local. https://github.com/avrdudes/avrdude/actions/runs/8866899974/job/24344872706

mcuee commented 5 months ago

This issue is now fixed by commit https://github.com/avrdudes/avrdude/commit/dceb55da6a386510721f3361bad0343d10dd1a32.

Youw commented 5 months ago

just wondering if you have some ideas why libusb.h was not found properly

Yeap, this is the reason:

For libusb project, we usually recommend using pkg-config to find libusb.h and not to use libusb-1.0/libusb.h in any case. https://github.com/avrdudes/avrdude/blob/main/src/avrftdi_private.h


still happening even if I add pkg-config as a macOS dependancy

It is not enough to install pkg-config. One must explicitly use it to find a package.

This issue is now fixed by commit https://github.com/avrdudes/avrdude/commit/dceb55da6a386510721f3361bad0343d10dd1a32.

I'd call it a workaround.

The propper way would be to remove things like find_library(HAVE_LIBUSB_1_0 ...) and similar nonsense with a propper use of cmake/pkg-config, e.g. in a similar way like HIDAPI does it.

mcuee commented 5 months ago

@Youw

Good point. I will create a new issue for CMake improvement.