1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-15 15:49:36 +02:00

Add "minsrc" target to build tarball

This adds a new target that will build the "minsrc" tarball.

It can be created on any platform now, either from the command
line or from within the Window's and Mac's project files.

The output tarball will be in the build directory.

And it's very easy to update the list of files/directories to
exclude...see scripts/CMakeLists.txt
This commit is contained in:
Leland Lucius 2020-02-28 01:40:16 -06:00
parent e760809b7b
commit 1a2b407e89
4 changed files with 164 additions and 37 deletions

View File

@ -311,8 +311,7 @@ find_package( PkgConfig QUIET )
# Mostly just to make the CMP0072 policy happy
find_package( OpenGL QUIET )
# When called will define several useful directory paths for the
# current context.
# Defines several useful directory paths for the active context.
macro( def_vars )
set( _SRCDIR "${CMAKE_CURRENT_SOURCE_DIR}" )
set( _INTDIR "${CMAKE_CURRENT_BINARY_DIR}" )
@ -360,6 +359,55 @@ if( NOT CMAKE_INSTALL_LIBDIR STREQUAL "lib" AND NOT EXISTS "${CMAKE_BINARY_DIR}/
file( CREATE_LINK "${CMAKE_BINARY_DIR}/lib" "${CMAKE_BINARY_DIR}/lib64" SYMBOLIC )
endif()
# Extract the Audacity version information
file(
STRINGS
${topdir}/src/Audacity.h output
REGEX
"^#define +AUDACITY_(VERSION|RELEASE|REVISION|MODLEVEL|BUILD_LEVEL) +"
)
# And store as variables
foreach( line ${output} )
string( REGEX MATCHALL "[A-Za-z0-9_]+" line "${line}" )
list( GET line 1 name )
list( GET line 2 value )
set( ${name} ${value} )
endforeach()
# Create short and full version strings
set( AUDACITY_DIST_VERSION ${AUDACITY_VERSION}.${AUDACITY_RELEASE}.${AUDACITY_REVISION} )
set( AUDACITY_INFO_VERSION ${AUDACITY_VERSION}.${AUDACITY_RELEASE}.${AUDACITY_REVISION}.${AUDACITY_MODLEVEL} )
# Define the version suffix (duplicates what happens in src/Audacity.h)
string( TIMESTAMP __TDATE__ "%Y%m%d" )
if( AUDACITY_BUILD_LEVEL EQUAL 0 )
set( AUDACITY_SUFFIX "-alpha-${__TDATE__}" )
elseif( AUDACITY_BUILD_LEVEL EQUAL 1 )
set( AUDACITY_SUFFIX "-beta-${__TDATE__}" )
else()
set( AUDACITY_SUFFIX "" )
endif()
# Extract the current commit information
if (GIT_FOUND)
execute_process(
COMMAND
${GIT_EXECUTABLE} show -s "--format=\"%H\";\"%cd\";"
WORKING_DIRECTORY
${topdir}
OUTPUT_VARIABLE
output
)
list( GET output 0 long )
list( GET output 1 time )
list( APPEND DEFINES
REV_LONG=${long}
REV_TIME=${time}
)
endif()
# Helper to organize sources into folders for the IDEs
macro( organize_source root prefix sources )
set( cleaned )
@ -546,6 +594,7 @@ add_subdirectory( "src" )
add_subdirectory( "cmake-proxies/mod-null" )
add_subdirectory( "cmake-proxies/mod-nyq-bench" )
add_subdirectory( "cmake-proxies/mod-script-pipe" )
add_subdirectory( "scripts" )
# Only need the sc4_1882 Ladspa plug-in on Windows and Mac
if( CMAKE_SYSTEM_NAME MATCHES "Windows|Darwin" )

56
scripts/CMakeLists.txt Executable file
View File

@ -0,0 +1,56 @@
set( TARGET minsrc )
set( TARGET_ROOT ${topdir} )
message( STATUS "========== Configuring ${TARGET} ==========" )
def_vars()
# Add regular expressions of files/directories to exclude from the tarball
#
# NOTE: Each item will be wrapped with "^" and ".*$"
list( APPEND EXCLUDES
.git
.gitattributes
.gitignore
lib-src/expat
lib-src/libid3tag
lib-src/libmad
lib-src/libogg
lib-src/libscorealign
lib-src/portaudio-v19/bindings
lib-src/portaudio-v19/doc
lib-src/portaudio-v19/testcvs
lib-src/portmidi/pm_csharp
lib-src/portmidi/pm_dylib
lib-src/portmidi/pm_java
lib-src/portmidi/pm_mingw
lib-src/portmidi/pm_python
lib-src/portmidi/pm_qt
lib-src/portmidi/pm_test
lib-src/portmidi/portmidi_cdt.zip
lib-src/soundtouch
lib-src/libvorbis
mac
plug-ins/analyze.ny
plug-ins/fadein.ny
plug-ins/fadeout.ny
plug-ins/undcbias.ny
qa
scripts
tests/ProjectCheckTests
todo.txt
win
)
set( TARBALL "${PROJECT_BINARY_DIR}/audacity-minsrc-${AUDACITY_DIST_VERSION}${AUDACITY_SUFFIX}.tar.xz" )
add_custom_target( ${TARGET}
COMMAND
${CMAKE_COMMAND} -D GIT_EXECUTABLE="${GIT_EXECUTABLE}"
-D TARGET_ROOT="${TARGET_ROOT}"
-D EXCLUDES="${EXCLUDES}"
-D TARBALL="${TARBALL}"
-P "${_SRCDIR}/maketarball.cmake"
)

57
scripts/maketarball.cmake Normal file
View File

@ -0,0 +1,57 @@
set( TARGET minsrc )
# list command no longer ignores empty elements.
cmake_policy( SET CMP0007 NEW )
# Check to make sure the source tree has no uncommitted changes
execute_process(
COMMAND
${GIT_EXECUTABLE} status -s --untracked-files=no
WORKING_DIRECTORY
${TARGET_ROOT}
OUTPUT_VARIABLE
output
)
if( output )
# message( FATAL_ERROR "You have uncommited changes\n${output}" )
endif()
# Get the list of files in the repo
execute_process(
COMMAND
${GIT_EXECUTABLE} ls-tree -r --name-only HEAD ${TARGET_ROOT}
WORKING_DIRECTORY
${TARGET_ROOT}
OUTPUT_VARIABLE
output
)
# Convert the output to a list
string( REPLACE "\n" ";" output "${output}" )
# Convert excludes to regular expressions
string( REPLACE " " ".*$|^" EXCLUDES "${EXCLUDES}" )
# Remove unwanted files from the list
list( FILTER output EXCLUDE REGEX "^${EXCLUDES}.*$" )
message( STATUS "Creating the minsrc archive at:" )
message( STATUS )
message( STATUS " ${TARBALL}" )
message( STATUS )
# Write the list to a file to circumvent command line length limits
set( filelist "${CMAKE_CURRENT_BINARY_DIR}/filelist" )
string( REPLACE ";" "\n" output "${output}" )
file( WRITE "${filelist}" ${output} )
# Create the tarball
execute_process(
COMMAND
${CMAKE_COMMAND} -E tar cfJ ${TARBALL} --files-from=${filelist}
WORKING_DIRECTORY
${TARGET_ROOT}
)

View File

@ -1235,23 +1235,6 @@ elseif( CMAKE_SYSTEM_NAME MATCHES "Darwin" )
set( HAVE_VISIBILITY 1 )
configure_file( audacity_config.h.in private/configmac.h )
# Extract the version information
file( STRINGS ${_SRCDIR}/Audacity.h output
REGEX
"^#define +AUDACITY_(VERSION|RELEASE|REVISION|MODLEVEL) +"
)
# And store as variables
foreach( line ${output} )
string( REGEX MATCHALL "[A-Za-z0-9_]+" line "${line}" )
list( GET line 1 name )
list( GET line 2 value )
set( ${name} ${value} )
endforeach()
set( AUDACITY_DIST_VERSION ${AUDACITY_VERSION}.${AUDACITY_RELEASE}.${AUDACITY_REVISION} )
set( AUDACITY_INFO_VERSION ${AUDACITY_VERSION}.${AUDACITY_RELEASE}.${AUDACITY_REVISION}.${AUDACITY_MODLEVEL} )
# Copy the wxWidgets libraries into the bundle
if( "${CMAKE_GENERATOR}" MATCHES "Xcode" )
add_custom_command(
@ -1337,24 +1320,6 @@ endif()
set_target_property_all( ${TARGET} RUNTIME_OUTPUT_NAME ${_EXE} )
if (GIT_FOUND)
execute_process(
COMMAND
${GIT_EXECUTABLE} show -s "--format=\"%H\";\"%cd\";"
WORKING_DIRECTORY
${TARGET_ROOT}
OUTPUT_VARIABLE
output
)
list( GET output 0 long )
list( GET output 1 time )
list( APPEND DEFINES
REV_LONG=${long}
REV_TIME=${time}
)
endif()
organize_source( "${TARGET_ROOT}/.." "include" "${HEADERS}" )
organize_source( "${TARGET_ROOT}/../presets" "presets" "${RESOURCES}" )
organize_source( "${TARGET_ROOT}" "src" "${SOURCES}" )