compile.yml 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. name: Compile & test
  2. # Run whenever we push to any branch other than [coverity-scan], or if we
  3. # manually trigger a workflow.
  4. on:
  5. push:
  6. branches:
  7. - '**'
  8. - '!coverity-scan'
  9. workflow_dispatch:
  10. env:
  11. # Shared variables amongst all projects / platforms / compilers.
  12. CFLAGS_ALL: -std=c99 -O2
  13. CFLAGS_CLANG_LIBCPERCIVA: -Wall -Wextra -Werror -Weverything
  14. -Wno-#warnings -Wno-pedantic -Wno-padded
  15. -Wno-format-nonliteral
  16. -Wno-disabled-macro-expansion
  17. -Wno-missing-noreturn -Wno-reserved-id-macro
  18. -Wno-unused-macros
  19. -Wno-documentation-unknown-command
  20. CFLAGS_GCC_LIBCPERCIVA: -Wall -Wextra -Werror -Wpedantic
  21. -pedantic-errors -Wno-clobbered
  22. # Variables for specific projects / platforms / compilers.
  23. LIBARCHIVE_OBJECTS: tar/tarsnap-bsdtar.o tar/tarsnap-getdate.o
  24. tar/tarsnap-read.o tar/tarsnap-subst.o
  25. tar/tarsnap-tree.o tar/tarsnap-util.o
  26. tar/tarsnap-write.o libarchive/libarchive.a
  27. CFLAGS_CLANG_PROJECT: -Wno-undef -Wno-implicit-fallthrough
  28. -Wno-reserved-identifier
  29. CFLAGS_GCC_PROJECT: -Wno-cpp
  30. # Needed for major() / minor() / makedev() thing.
  31. CFLAGS_LIBARCHIVE_GCC: -Wno-error
  32. CFLAGS_OSX: -Wno-poison-system-directories
  33. -Wno-deprecated-declarations
  34. LDFLAGS_OSX:
  35. jobs:
  36. Ubuntu:
  37. name: Ubuntu
  38. runs-on: ubuntu-22.04
  39. steps:
  40. - name: Update apt-get
  41. run: sudo apt-get update
  42. - name: Install software
  43. run: sudo apt-get install --no-install-recommends valgrind e2fslibs-dev
  44. autoconf-archive
  45. - name: Checkout code
  46. uses: actions/checkout@v4
  47. - name: autoreconf
  48. run:
  49. autoreconf -i
  50. - name: configure with clang
  51. env:
  52. CC: clang-13
  53. CFLAGS: ${{ env.CFLAGS_ALL }}
  54. run: ./configure
  55. - name: Compile libarchive with clang
  56. env:
  57. CC: clang-13
  58. # We need to use more permissive CFLAGS for libarchive code.
  59. CFLAGS: ${{ env.CFLAGS_ALL }}
  60. run: make ${{ env.LIBARCHIVE_OBJECTS }}
  61. - name: Compile with clang
  62. env:
  63. CC: clang-13
  64. CFLAGS: ${{ env.CFLAGS_ALL }}
  65. ${{ env.CFLAGS_CLANG_LIBCPERCIVA }}
  66. ${{ env.CFLAGS_CLANG_PROJECT }}
  67. # make(1) doesn't automatically override the CFLAGS macro set inside
  68. # Makefile with the environment variable.
  69. run: make CFLAGS="${{ env.CFLAGS }}"
  70. - name: Test clang binaries
  71. env:
  72. USE_VALGRIND: 1
  73. run: make test VERBOSE=1
  74. - name: Clean
  75. run: make clean
  76. - name: configure with gcc
  77. env:
  78. CC: gcc-10
  79. CFLAGS: ${{ env.CFLAGS_ALL }}
  80. run: ./configure
  81. - name: Compile libarchive with gcc
  82. env:
  83. CC: gcc-10
  84. # We need to use more permissive CFLAGS for libarchive code.
  85. CFLAGS: ${{ env.CFLAGS_ALL }}
  86. ${{ env.CFLAGS_LIBARCHIVE_GCC }}
  87. run: make ${{ env.LIBARCHIVE_OBJECTS }}
  88. - name: Compile with gcc
  89. env:
  90. CC: gcc-10
  91. CFLAGS: ${{ env.CFLAGS_ALL }}
  92. ${{ env.CFLAGS_GCC_LIBCPERCIVA }}
  93. ${{ env.CFLAGS_GCC_PROJECT }}
  94. # make(1) doesn't automatically override the CFLAGS macro set inside
  95. # Makefile with the environment variable.
  96. run: make CFLAGS="${{ env.CFLAGS }}"
  97. - name: Test gcc binaries
  98. env:
  99. USE_VALGRIND: 1
  100. run: make test VERBOSE=1
  101. - name: Check for untracked files
  102. run: test -z "$(git status --porcelain=v1)"
  103. macOS:
  104. name: macOS
  105. runs-on: macOS-13
  106. steps:
  107. - name: Checkout code
  108. uses: actions/checkout@v4
  109. - name: Install software
  110. run: brew install automake
  111. - name: autoreconf
  112. run: autoreconf -i
  113. - name: configure with clang
  114. env:
  115. CC: clang
  116. CFLAGS: ${{ env.CFLAGS_ALL }}
  117. ${{ env.CFLAGS_OSX }}
  118. LDFLAGS: ${{ env.LDFLAGS_OSX }}
  119. run: ./configure
  120. - name: Compile libarchive with clang
  121. env:
  122. CC: clang
  123. # We need to use more permissive CFLAGS for libarchive code.
  124. CFLAGS: ${{ env.CFLAGS_ALL }}
  125. run: make ${{ env.LIBARCHIVE_OBJECTS }}
  126. - name: Compile with clang
  127. env:
  128. CC: clang
  129. CFLAGS: ${{ env.CFLAGS_ALL }}
  130. ${{ env.CFLAGS_CLANG_LIBCPERCIVA }}
  131. ${{ env.CFLAGS_CLANG_PROJECT }}
  132. ${{ env.CFLAGS_OSX }}
  133. LDFLAGS: ${{ env.LDFLAGS_OSX }}
  134. # make(1) doesn't automatically override the CFLAGS macro set inside
  135. # Makefile with the environment variable.
  136. run: make CFLAGS="${{ env.CFLAGS }}"
  137. - name: Tests clang binaries
  138. run: make test VERBOSE=1