Browse Source

build: Add a mechanism to mark builds with vendor info

Downstream distributors can use this to mark a version with their
preferred version information, like a Linux distribution package version
or the Steam revision it was built to be bundled into, or just to mark
it with the vendor it was built by or the environment it's intended to
be used in.

For instance, in Debian I'd use this by configuring with:

    --enable-vendor-info="${DEB_VENDOR} ${DEB_VERSION}"

to get a SDL_REVISION like:

    release-2.24.1-0-ga1d1946dc (Debian 2.24.1+dfsg-2)

which gives a Debian user enough information to track down the patches
and build-time configuration that were used for package revision 2.

In Autotools and CMake, this is a configure-time option like any other,
and will go into both SDL_REVISION (via SDL_revision.h) and
SDL_GetRevision().

In other build systems (MSVC, Xcode, etc.), defining the
SDL_VENDOR_INFO macro will get it into the output of SDL_GetRevision(),
although not SDL_REVISION.

Resolves: https://github.com/libsdl-org/SDL/issues/6418
Signed-off-by: Simon McVittie <smcv@collabora.com>
Simon McVittie 2 years ago
parent
commit
4ca5ea5b7e

+ 1 - 0
.github/workflows/android.yml

@@ -38,6 +38,7 @@ jobs:
             -DANDROID_PLATFORM=${{ matrix.platform.android_platform }} \
             -DANDROID_ABI=${{ matrix.platform.android_abi }} \
             -DSDL_STATIC_PIC=ON \
+            -DSDL_VENDOR_INFO="Github Workflow" \
             -DCMAKE_INSTALL_PREFIX=prefix \
             -DCMAKE_BUILD_TYPE=Release \
             -GNinja

+ 1 - 0
.github/workflows/emscripten.yml

@@ -33,6 +33,7 @@ jobs:
         run: |
           emcmake cmake -S cmake/test -B cmake_config_build \
             -DCMAKE_BUILD_TYPE=Release \
+            -DSDL_VENDOR_INFO="Github Workflow" \
             -DTEST_SHARED=FALSE \
             -DCMAKE_PREFIX_PATH=${{ env.SDL2_DIR }}
           cmake --build cmake_config_build --verbose

+ 2 - 0
.github/workflows/main.yml

@@ -72,6 +72,7 @@ jobs:
         -DSDL_TESTS=ON \
         -DSDL_WERROR=ON \
         -DSDL_INSTALL_TESTS=ON \
+        -DSDL_VENDOR_INFO="Github Workflow" \
         -DCMAKE_INSTALL_PREFIX=cmake_prefix \
         -DCMAKE_BUILD_TYPE=Release \
         ${{ matrix.platform.cmake }}
@@ -102,6 +103,7 @@ jobs:
         (
           cd build-autotools
           ${{ github.workspace }}/configure \
+            --enable-vendor-info="Github Workflow" \
             --enable-werror \
             --prefix=${{ github.workspace }}/autotools_prefix \
         )

+ 1 - 0
.github/workflows/msvc.yml

@@ -43,6 +43,7 @@ jobs:
         -DSDL_WERROR=${{ !matrix.platform.nowerror }} `
         -DSDL_TESTS=ON `
         -DSDL_INSTALL_TESTS=ON `
+        -DSDL_VENDOR_INFO="Github Workflow" `
         -DSDL2_DISABLE_INSTALL=OFF `
         ${{ matrix.platform.flags }} `
         -DCMAKE_INSTALL_PREFIX=prefix

+ 1 - 0
.github/workflows/n3ds.yml

@@ -20,6 +20,7 @@ jobs:
             -DSDL_WERROR=ON \
             -DSDL_TESTS=ON \
             -DSDL_INSTALL_TESTS=ON \
+            -DSDL_VENDOR_INFO="Github Workflow" \
             -DCMAKE_BUILD_TYPE=Release \
             -DCMAKE_INSTALL_PREFIX=prefix
       - name: Build

+ 1 - 0
.github/workflows/riscos.yml

@@ -46,6 +46,7 @@ jobs:
           -DSDL_GCC_ATOMICS=OFF \
           -DSDL_TESTS=ON \
           -DSDL_INSTALL_TESTS=ON \
+          -DSDL_VENDOR_INFO="Github Workflow" \
           -DCMAKE_BUILD_TYPE=Release \
           -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/prefix_cmake
     - name: Build (CMake)

+ 1 - 0
CMakeLists.txt

@@ -510,6 +510,7 @@ dep_option(SDL_HIDAPI_LIBUSB       "Use libusb for low level joystick drivers" O
 dep_option(SDL_HIDAPI_JOYSTICK     "Use HIDAPI for low level joystick drivers" ON SDL_HIDAPI OFF)
 dep_option(SDL_VIRTUAL_JOYSTICK    "Enable the virtual-joystick driver" ON SDL_HIDAPI OFF)
 set_option(SDL_ASAN                "Use AddressSanitizer to detect memory errors" OFF)
+option_string(SDL_VENDOR_INFO      "Vendor name and/or version to add to SDL_REVISION" "")
 
 option(SDL_WERROR "Enable -Werror" OFF)
 

+ 3 - 1
Makefile.in

@@ -32,6 +32,7 @@ RANLIB	= @RANLIB@
 RC	= @RC@
 LINKER = @LINKER@
 LIBTOOLLINKERTAG = @LIBTOOLLINKERTAG@
+SDL_VENDOR_INFO = @SDL_VENDOR_INFO@
 
 TARGET  = libSDL2.la
 OBJECTS = @OBJECTS@
@@ -152,7 +153,7 @@ $(objects)/.created:
 	touch $@
 
 update-revision:
-	$(SHELL) $(auxdir)/updaterev.sh
+	$(SHELL) $(auxdir)/updaterev.sh --vendor "$(SDL_VENDOR_INFO)"
 
 .PHONY: all update-revision install install-bin install-hdrs install-lib install-data uninstall uninstall-bin uninstall-hdrs uninstall-lib uninstall-data clean distclean dist $(OBJECTS:.lo=.d)
 
@@ -252,6 +253,7 @@ dist $(distfile):
 	    -name '.#*' \) \
 	    -exec rm -f {} \;
 	if test -f $(distdir)/test/Makefile; then (cd $(distdir)/test && make distclean); fi
+	# Intentionally no vendor suffix: that's a property of the build, not the source
 	(cd $(distdir); $(srcdir)/build-scripts/updaterev.sh --dist)
 	tar cvf - $(distdir) | gzip --best >$(distfile)
 	rm -rf $(distdir)

+ 12 - 0
build-scripts/updaterev.sh

@@ -7,6 +7,7 @@ cd `dirname $0`
 srcdir=..
 header=$outdir/include/SDL_revision.h
 dist=
+vendor=
 
 while [ "$#" -gt 0 ]; do
     case "$1" in
@@ -14,6 +15,10 @@ while [ "$#" -gt 0 ]; do
             dist=yes
             shift
             ;;
+        (--vendor)
+            vendor="$2"
+            shift 2
+            ;;
         (*)
             echo "$0: Unknown option: $1" >&2
             exit 2
@@ -27,7 +32,14 @@ if [ "$rev" != "" ]; then
         echo "$rev" > "$outdir/VERSION"
     fi
     echo "/* Generated by updaterev.sh, do not edit */" >"$header.new"
+    if [ -n "$vendor" ]; then
+        echo "#define SDL_VENDOR_INFO \"$vendor\"" >>"$header.new"
+    fi
+    echo "#ifdef SDL_VENDOR_INFO" >>"$header.new"
+    echo "#define SDL_REVISION \"SDL-$rev (\" SDL_VENDOR_INFO \")\"" >>"$header.new"
+    echo "#else" >>"$header.new"
     echo "#define SDL_REVISION \"SDL-$rev\"" >>"$header.new"
+    echo "#endif" >>"$header.new"
     echo "#define SDL_REVISION_NUMBER 0" >>"$header.new"
     if diff $header $header.new >/dev/null 2>&1; then
         rm "$header.new"

+ 6 - 0
configure.ac

@@ -4684,6 +4684,12 @@ else
 fi
 AC_SUBST([INSTALL_SDL2_CONFIG], [$enable_sdl2_config])
 
+AC_ARG_ENABLE([vendor-info],
+    [AS_HELP_STRING([--enable-vendor-info=STRING], [Add vendor info to SDL_REVISION])],
+    [enable_vendor_info="$enableval"], [enable_vendor_info=])
+AS_IF([test "$enable_vendor_info" = no], [enable_vendor_info=])
+AC_SUBST([SDL_VENDOR_INFO], [$enable_vendor_info])
+
 # Verify that we have all the platform specific files we need
 
 if test x$have_audio != xyes; then

+ 4 - 0
include/SDL_revision.h

@@ -1,2 +1,6 @@
+#ifdef SDL_VENDOR_INFO
+#define SDL_REVISION SDL_VENDOR_INFO
+#else
 #define SDL_REVISION ""
+#endif
 #define SDL_REVISION_NUMBER 0

+ 7 - 1
include/SDL_revision.h.cmake

@@ -1,2 +1,8 @@
-#define SDL_REVISION "@SDL_REVISION@"
+#cmakedefine SDL_VENDOR_INFO "@SDL_VENDOR_INFO@"
 #define SDL_REVISION_NUMBER 0
+
+#ifdef SDL_VENDOR_INFO
+#define SDL_REVISION "@SDL_REVISION@ (" SDL_VENDOR_INFO ")"
+#else
+#define SDL_REVISION "@SDL_REVISION@"
+#endif