ref: 9e1393efa662f09abfe09242e13a34e33330d137
parent: dde8b0caba069abd0e1b3cbc0ed7f5c25eb1a8ff
author: Michael Fink <michael.fink@asamnet.de>
date: Thu Sep 26 16:23:03 EDT 2019
ported over ac2ver tool to generate PACKAGE_VERSION when compiling with Visual Studio
--- a/.gitignore
+++ b/.gitignore
@@ -36,3 +36,4 @@
/project/msvc/bin/
/project/msvc/intermediate/
*.user
+/libfaac/win32_ver.h
--- a/libfaac/frame.c
+++ b/libfaac/frame.c
@@ -32,6 +32,10 @@
#include "tns.h"
#include "stereo.h"
+#if (defined WIN32 || defined _WIN32 || defined WIN64 || defined _WIN64) && !defined(PACKAGE_VERSION)
+#include "win32_ver.h"
+#endif
+
static char *libfaacName = PACKAGE_VERSION;
static char *libCopyright =
"FAAC - Freeware Advanced Audio Coder (http://faac.sourceforge.net/)\n"
@@ -220,7 +224,7 @@
hEncoder->sampleRate, hEncoder->srInfo->cb_width_long,
hEncoder->srInfo->num_cb_long, hEncoder->srInfo->cb_width_short,
hEncoder->srInfo->num_cb_short);
-
+
/* load channel_map */
for( i = 0; i < MAX_CHANNELS; i++ )
hEncoder->config.channel_map[i] = config->channel_map[i];
@@ -291,7 +295,7 @@
/* find correct sampling rate depending parameters */
hEncoder->srInfo = &srInfo[hEncoder->sampleRateIdx];
- for (channel = 0; channel < numChannels; channel++)
+ for (channel = 0; channel < numChannels; channel++)
{
hEncoder->coderInfo[channel].prev_window_shape = SINE_WINDOW;
hEncoder->coderInfo[channel].window_shape = SINE_WINDOW;
@@ -306,7 +310,7 @@
/* Initialize coder functions */
fft_initialize( &hEncoder->fft_tables );
-
+
hEncoder->psymodel->PsyInit(&hEncoder->gpsyInfo, hEncoder->psyInfo, hEncoder->numChannels,
hEncoder->sampleRate, hEncoder->srInfo->cb_width_long,
hEncoder->srInfo->num_cb_long, hEncoder->srInfo->cb_width_short,
@@ -333,7 +337,7 @@
fft_terminate(&hEncoder->fft_tables);
/* Free remaining buffer memory */
- for (channel = 0; channel < hEncoder->numChannels; channel++)
+ for (channel = 0; channel < hEncoder->numChannels; channel++)
{
if (hEncoder->sampleBuff[channel])
FreeMemory(hEncoder->sampleBuff[channel]);
@@ -346,7 +350,7 @@
}
/* Free handle */
- if (hEncoder)
+ if (hEncoder)
FreeMemory(hEncoder);
BlocStat();
@@ -397,7 +401,7 @@
GetChannelInfo(channelInfo, numChannels, useLfe);
/* Update current sample buffers */
- for (channel = 0; channel < numChannels; channel++)
+ for (channel = 0; channel < numChannels; channel++)
{
double *tmp;
@@ -404,7 +408,7 @@
if (!hEncoder->sampleBuff[channel])
hEncoder->sampleBuff[channel] = (double*)AllocMemory(FRAME_LEN*sizeof(double));
-
+
tmp = hEncoder->sampleBuff[channel];
hEncoder->sampleBuff[channel] = hEncoder->nextSampleBuff[channel];
@@ -440,7 +444,7 @@
case FAAC_INPUT_32BIT:
{
int32_t *input_channel = (int32_t*)inputBuffer + hEncoder->config.channel_map[channel];
-
+
for (i = 0; i < samples_per_channel; i++)
{
hEncoder->next3SampleBuff[channel][i] = (1.0/256) * (double)*input_channel;
@@ -475,11 +479,11 @@
/* LFE psychoacoustic can run without it */
if (!channelInfo[channel].lfe || channelInfo[channel].cpe)
{
- hEncoder->psymodel->PsyBufferUpdate(
- &hEncoder->fft_tables,
- &hEncoder->gpsyInfo,
+ hEncoder->psymodel->PsyBufferUpdate(
+ &hEncoder->fft_tables,
+ &hEncoder->gpsyInfo,
&hEncoder->psyInfo[channel],
- hEncoder->next3SampleBuff[channel],
+ hEncoder->next3SampleBuff[channel],
bandWidth,
hEncoder->srInfo->cb_width_short,
hEncoder->srInfo->num_cb_short);
--- a/project/msvc/libfaac.vcxproj
+++ b/project/msvc/libfaac.vcxproj
@@ -60,6 +60,10 @@
<Lib>
<SuppressStartupBanner>true</SuppressStartupBanner>
</Lib>
+ <PreBuildEvent>
+ <Command>"$(SolutionDir)..\..\utils\win32\ac2ver.exe" "faac" "$(SolutionDir)..\..\configure.ac" > "$(SolutionDir)..\..\libfaac\win32_ver.h"</Command>
+ <Message>Retrieving package version...</Message>
+ </PreBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
@@ -76,6 +80,10 @@
<Lib>
<SuppressStartupBanner>true</SuppressStartupBanner>
</Lib>
+ <PreBuildEvent>
+ <Command>"$(SolutionDir)..\..\utils\win32\ac2ver.exe" "faac" "$(SolutionDir)..\..\configure.ac" > "$(SolutionDir)..\..\libfaac\win32_ver.h"</Command>
+ <Message>Retrieving package version...</Message>
+ </PreBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\libfaac\bitstream.c" />
@@ -107,7 +115,7 @@
<ClInclude Include="..\..\libfaac\stereo.h" />
<ClInclude Include="..\..\libfaac\tns.h" />
<ClInclude Include="..\..\libfaac\util.h" />
- <ClInclude Include="..\..\libfaac\version.h" />
+ <ClInclude Include="..\..\libfaac\win32_ver.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
--- a/project/msvc/libfaac.vcxproj.filters
+++ b/project/msvc/libfaac.vcxproj.filters
@@ -79,9 +79,6 @@
<ClInclude Include="..\..\libfaac\util.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="..\..\libfaac\version.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="..\..\include\faac.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -95,6 +92,9 @@
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\libfaac\stereo.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\libfaac\win32_ver.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
--- a/project/msvc/libfaac_dll.vcxproj
+++ b/project/msvc/libfaac_dll.vcxproj
@@ -66,6 +66,10 @@
<ModuleDefinitionFile>.\libfaac.def</ModuleDefinitionFile>
<TargetMachine>MachineX86</TargetMachine>
</Link>
+ <PreBuildEvent>
+ <Message>Retrieving package version...</Message>
+ <Command>"$(SolutionDir)..\..\utils\win32\ac2ver.exe" "faac" "$(SolutionDir)..\..\configure.ac" > "$(SolutionDir)..\..\libfaac\win32_ver.h"</Command>
+ </PreBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
@@ -86,6 +90,10 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<TargetMachine>MachineX86</TargetMachine>
</Link>
+ <PreBuildEvent>
+ <Message>Retrieving package version...</Message>
+ <Command>"$(SolutionDir)..\..\utils\win32\ac2ver.exe" "faac" "$(SolutionDir)..\..\configure.ac" > "$(SolutionDir)..\..\libfaac\win32_ver.h"</Command>
+ </PreBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\libfaac\bitstream.c" />
@@ -117,6 +125,7 @@
<ClInclude Include="..\..\libfaac\stereo.h" />
<ClInclude Include="..\..\libfaac\tns.h" />
<ClInclude Include="..\..\libfaac\util.h" />
+ <ClInclude Include="..\..\libfaac\win32_ver.h" />
</ItemGroup>
<ItemGroup>
<None Include="libfaac.def" />
--- a/project/msvc/libfaac_dll.vcxproj.filters
+++ b/project/msvc/libfaac_dll.vcxproj.filters
@@ -94,6 +94,9 @@
<ClInclude Include="..\..\libfaac\stereo.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="..\..\libfaac\win32_ver.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="libfaac.def">
--- a/project/msvc/libfaac_dll_drm.vcxproj
+++ b/project/msvc/libfaac_dll_drm.vcxproj
@@ -67,6 +67,10 @@
<TargetMachine>MachineX86</TargetMachine>
<ImportLibrary>$(OutDir)libfaacdrm.lib</ImportLibrary>
</Link>
+ <PreBuildEvent>
+ <Message>Retrieving package version...</Message>
+ <Command>"$(SolutionDir)..\..\utils\win32\ac2ver.exe" "faac" "$(SolutionDir)..\..\configure.ac" > "$(SolutionDir)..\..\libfaac\win32_ver.h"</Command>
+ </PreBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
@@ -88,6 +92,10 @@
<TargetMachine>MachineX86</TargetMachine>
<ImportLibrary>$(OutDir)libfaacdrm.lib</ImportLibrary>
</Link>
+ <PreBuildEvent>
+ <Message>Retrieving package version...</Message>
+ <Command>"$(SolutionDir)..\..\utils\win32\ac2ver.exe" "faac" "$(SolutionDir)..\..\configure.ac" > "$(SolutionDir)..\..\libfaac\win32_ver.h"</Command>
+ </PreBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\libfaac\bitstream.c" />
@@ -125,7 +133,7 @@
<ClInclude Include="..\..\libfaac\stereo.h" />
<ClInclude Include="..\..\libfaac\tns.h" />
<ClInclude Include="..\..\libfaac\util.h" />
- <ClInclude Include="..\..\libfaac\version.h" />
+ <ClInclude Include="..\..\libfaac\win32_ver.h" />
</ItemGroup>
<ItemGroup>
<None Include="libfaac.def" />
--- a/project/msvc/libfaac_dll_drm.vcxproj.filters
+++ b/project/msvc/libfaac_dll_drm.vcxproj.filters
@@ -118,6 +118,9 @@
<ClInclude Include="..\..\libfaac\stereo.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="..\..\libfaac\win32_ver.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="libfaac.def">
--- /dev/null
+++ b/utils/win32/ac2ver.c
@@ -1,0 +1,103 @@
+/*
+** AC2VER - extract version number from AC_INIT macro (configure.ac)
+** Copyright (C) 2017 LoRd_MuldeR <mulder2@GMX.de>
+**
+** This software is released under the CC0 1.0 Universal [CC0 1.0] licence!
+** https://creativecommons.org/publicdomain/zero/1.0/legalcode
+**/
+
+#define BUFF_SIZE 4096
+#define _CRT_SECURE_NO_WARNINGS 1
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+static int clean_string(char *const str)
+{
+ size_t i = 0, j = 0;
+ while(str[i])
+ {
+ if(isalnum(str[i]) || strchr("._-", str[i]))
+ {
+ if(i != j)
+ {
+ str[j] = str[i];
+ }
+ ++j;
+ }
+ ++i;
+ }
+ str[j] = '\0';
+ return !!j;
+}
+
+static int parse_version(FILE *const input, const char *const format, char *const version)
+{
+ char buffer[BUFF_SIZE];
+
+ while(!(feof(input) || ferror(input)))
+ {
+ const char *line = fgets(buffer, BUFF_SIZE, input);
+ if(line)
+ {
+ while((*line) && (isspace(*line)))
+ {
+ ++line; /*skip space*/
+ }
+ if(sscanf(line, format, version) == 1)
+ {
+ if(clean_string(version))
+ {
+ return 1; /*found!*/
+ }
+ }
+ }
+ }
+
+ version[0] = '\0';
+ return 0;
+}
+
+static int get_version(const wchar_t *const lib_name, const wchar_t *const file_name)
+{
+ char format[128], version[BUFF_SIZE];
+
+ FILE *const input = _wfopen(file_name, L"r");
+ if(!input)
+ {
+ fprintf(stderr, "Error: Failed to open input file!\n%S\n\n", file_name);
+ return 0;
+ }
+
+ _snprintf(format, 128, "AC_INIT ( %S , %%s", lib_name);
+ //printf("<%s>\n", format);
+
+ if(parse_version(input, format, version))
+ {
+ printf("#define PACKAGE_VERSION \"%s\"\n", version);
+ fclose(input);
+ return 1;
+ }
+ else
+ {
+ fprintf(stderr, "Error: Version string could not be found!\n\n");
+ fclose(input);
+ return 0;
+ }
+}
+
+int wmain(int argc, wchar_t* argv[])
+{
+ if((argc != 3) || (!argv[1][0]) || (!argv[2][0]))
+ {
+ wchar_t file_name[_MAX_FNAME], file_ext[_MAX_EXT];
+ _wsplitpath(argv[0], NULL, NULL, file_name, file_ext);
+ fprintf(stderr, "AC2VER [%s]\n\n", __DATE__);
+ fprintf(stderr, "Usage: %S%S <lib_name> <path/to/configure.ac>\n\n", file_name, file_ext);
+ return EXIT_FAILURE;
+ }
+
+ return get_version(argv[1], argv[2]) ? EXIT_SUCCESS : EXIT_FAILURE;
+}
binary files /dev/null b/utils/win32/ac2ver.exe differ