Skip to content

Commit 3beece1

Browse files
authored
Extend ubuntu autotools github CI workflow to test make install/uninstall targets (#958)
Run `make install` then build and run a simple initialize/terminate program. Then run `make uninstall` and check that building the test program again fails. wip for #957
1 parent 52d50e2 commit 3beece1

File tree

2 files changed

+109
-1
lines changed

2 files changed

+109
-1
lines changed

.github/workflows/autotools.yml

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,21 @@ on:
66
pull_request:
77
branches: [ master ]
88

9+
env:
10+
# GitHub CI Actions-specific environment variables:
11+
12+
# Location for user-local `make install`
13+
PORTAUDIO_INSTALL_DIR: /home/runner/.local
14+
15+
# Environment variables for compiling and running the test program.
16+
# Usually none of this is needed as `make install` would install to system locations
17+
# where include and library search paths are already set up to just work.
18+
# gcc environment variables. see https://gcc.gnu.org/onlinedocs/gcc/Environment-Variables.html
19+
C_INCLUDE_PATH: /home/runner/.local/include
20+
LIBRARY_PATH: /home/runner/.local/lib
21+
# runtime dynamically linked library search path. see https://stackoverflow.com/questions/480764
22+
LD_LIBRARY_PATH: /home/runner/.local/lib
23+
924
jobs:
1025
build-autotools:
1126

@@ -14,7 +29,24 @@ jobs:
1429

1530
steps:
1631
- uses: actions/checkout@v2
32+
# test configure and build
1733
- name: configure
18-
run: ./configure
34+
run: ./configure --prefix=$PORTAUDIO_INSTALL_DIR
1935
- name: make
2036
run: make
37+
# test make install
38+
- name: install
39+
run: make install
40+
- name: list install dirs (post-install)
41+
run: ls $PORTAUDIO_INSTALL_DIR $PORTAUDIO_INSTALL_DIR/include $PORTAUDIO_INSTALL_DIR/lib
42+
- name: build patest_init.c (test just calls Pa_Initialize();Pa_Terminate();)
43+
run: gcc -o patest_init ./test/patest_init.c -lportaudio
44+
- name: run patest_init
45+
run: ./patest_init
46+
# test make uninstall
47+
- name: uninstall
48+
run: make uninstall
49+
- name: list install dirs (post-uninstall)
50+
run: ls $PORTAUDIO_INSTALL_DIR $PORTAUDIO_INSTALL_DIR/include $PORTAUDIO_INSTALL_DIR/lib
51+
- name: build patest_init.c to check uninstall (expect failure)
52+
run: if gcc -o patest_init ./test/patest_init.c -lportaudio; then exit 1; else exit 0; fi

test/patest_init.c

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/** @file patest_init.c
2+
@ingroup test_src
3+
@brief Initialize and terminate PortAudio
4+
@author Ross Bencina
5+
*/
6+
/*
7+
* $Id$
8+
*
9+
* This program uses the PortAudio Portable Audio Library.
10+
* For more information see: http://www.portaudio.com
11+
* Copyright (c) 1999-2024 Ross Bencina and Phil Burk
12+
*
13+
* Permission is hereby granted, free of charge, to any person obtaining
14+
* a copy of this software and associated documentation files
15+
* (the "Software"), to deal in the Software without restriction,
16+
* including without limitation the rights to use, copy, modify, merge,
17+
* publish, distribute, sublicense, and/or sell copies of the Software,
18+
* and to permit persons to whom the Software is furnished to do so,
19+
* subject to the following conditions:
20+
*
21+
* The above copyright notice and this permission notice shall be
22+
* included in all copies or substantial portions of the Software.
23+
*
24+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
27+
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
28+
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
29+
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30+
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31+
*/
32+
33+
/*
34+
* The text above constitutes the entire PortAudio license; however,
35+
* the PortAudio community also makes the following non-binding requests:
36+
*
37+
* Any person wishing to distribute modifications to the Software is
38+
* requested to send the modifications to the original developer so that
39+
* they can be incorporated into the canonical version. It is also
40+
* requested that these non-binding requests be included along with the
41+
* license above.
42+
*/
43+
44+
#include <stdio.h>
45+
46+
#include "portaudio.h"
47+
48+
int main(void);
49+
int main(void)
50+
{
51+
PaError err;
52+
53+
printf("PortAudio Test: initialize and terminate.\n");
54+
55+
err = Pa_Initialize();
56+
if( err != paNoError ) {
57+
fprintf( stderr, "An error occurred while initializing PortAudio\n" );
58+
goto error;
59+
}
60+
61+
err = Pa_Terminate();
62+
if( err != paNoError ) {
63+
fprintf( stderr, "An error occurred while terminating PortAudio\n" );
64+
goto error;
65+
}
66+
67+
printf("Test completed successfully.\n");
68+
return err;
69+
70+
error:
71+
Pa_Terminate();
72+
73+
fprintf( stderr, "Error number: %d\n", err );
74+
fprintf( stderr, "Error message: %s\n", Pa_GetErrorText( err ) );
75+
return err;
76+
}

0 commit comments

Comments
 (0)