Compare commits
38 Commits
39cc943b6e
...
dev_2020
| Author | SHA1 | Date | |
|---|---|---|---|
| 5154e7d513 | |||
| 5a43e0d172 | |||
| bf55cc7e54 | |||
| e913caa8f8 | |||
| e786fd266d | |||
| 98f0941160 | |||
| afd1ec7926 | |||
| 848af16d80 | |||
| eb36dca7d3 | |||
| d907e0f2d1 | |||
| fa83767e3e | |||
| 6b82fd5419 | |||
| 3ece010fc1 | |||
| 7ff6b2ec35 | |||
| 9b3c793dda | |||
| 141ff4f4db | |||
| 0b577c501c | |||
| 21eb68aeab | |||
| 19e730574b | |||
| 6bb6777bb9 | |||
| 2354af6ac0 | |||
| 96a895d014 | |||
| f4958906c5 | |||
| 41747a05a1 | |||
| f9bedd2c62 | |||
| c1e3f992aa | |||
| 787dedb0ae | |||
| f9d0430c6a | |||
| 0fd1912998 | |||
| 113faa50ce | |||
| d8127ddae2 | |||
| af3ffa589c | |||
| a6bf0189fa | |||
| 63a8d53bce | |||
| d1cff958e4 | |||
| ea021d6d73 | |||
| 9a943f7598 | |||
| 38a377534b |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -40,3 +40,4 @@ sysinfo.txt
|
||||
Logs
|
||||
UnityAPI
|
||||
iosBuild
|
||||
Assets4PreUpgrade
|
||||
|
||||
8
Assets/3rd/AndroidOpener.meta
Normal file
8
Assets/3rd/AndroidOpener.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6d8932d9982404063bbe48b7ba05a442
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 79314345aa5844e9998f22d91af26b7f
|
||||
guid: dbace2eb7405e9741a69754cce1dc4de
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
239
Assets/3rd/AndroidOpener/Editor/PackageNameChanger.cs
Normal file
239
Assets/3rd/AndroidOpener/Editor/PackageNameChanger.cs
Normal file
@@ -0,0 +1,239 @@
|
||||
/*MIT License
|
||||
|
||||
Copyright(c) 2020 Mikhail5412
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using ICSharpCode.SharpZipLib.Zip;
|
||||
using ICSharpCode.SharpZipLib.Core;
|
||||
using System;
|
||||
|
||||
#if UNITY_EDITOR
|
||||
namespace UnityAndroidOpenUrl.EditorScripts
|
||||
{
|
||||
/// <summary>
|
||||
/// Static class whose task is to update the package name in AndroidManifest.xml if it has been changed
|
||||
/// </summary>
|
||||
[InitializeOnLoad]
|
||||
public static class PackageNameChanger
|
||||
{
|
||||
private const string PLUGINS_DIR = "3rd/AndroidOpener/Plugins";
|
||||
private const string TEMP_DIR = "Temp";
|
||||
private const string AAR_NAME = "release.aar";
|
||||
private const string MANIFEST_NAME = "AndroidManifest.xml";
|
||||
private const string PROVIDER_PATHS_NAME = "res/xml/filepaths.xml";
|
||||
|
||||
private static string pathToPluginsFolder;
|
||||
private static string pathToTempFolder;
|
||||
private static string pathToBinary;
|
||||
|
||||
private static string lastPackageName = "com.company.product";
|
||||
|
||||
private static bool stopedByError;
|
||||
static PackageNameChanger()
|
||||
{
|
||||
pathToPluginsFolder = Path.Combine(Application.dataPath, PLUGINS_DIR);
|
||||
if(!Directory.Exists(pathToPluginsFolder))
|
||||
{
|
||||
Debug.LogError("Plugins folder not found. Please re-import asset. See README.md for details...");
|
||||
return;
|
||||
}
|
||||
pathToTempFolder = Path.Combine(pathToPluginsFolder, TEMP_DIR);
|
||||
pathToBinary = Path.Combine(pathToPluginsFolder, AAR_NAME);
|
||||
if (!File.Exists(pathToBinary))
|
||||
{
|
||||
Debug.LogError("File release.aar not found. Please re-import asset. See README.md for details...");
|
||||
return;
|
||||
}
|
||||
|
||||
EditorApplication.update += Update;
|
||||
TryUpdatePackageName();
|
||||
}
|
||||
|
||||
static void Update()
|
||||
{
|
||||
if (stopedByError)
|
||||
return;
|
||||
|
||||
if (lastPackageName != PlayerSettings.applicationIdentifier)
|
||||
{
|
||||
TryUpdatePackageName();
|
||||
}
|
||||
}
|
||||
|
||||
private static void TryUpdatePackageName()
|
||||
{
|
||||
FileInfo fileInfo = new FileInfo(pathToBinary);
|
||||
if(!IsFileAlreadyOpen(fileInfo))
|
||||
{
|
||||
RepackBinary();
|
||||
}
|
||||
}
|
||||
|
||||
private static void RepackBinary()
|
||||
{
|
||||
try
|
||||
{
|
||||
ExtractBinary();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.LogError("Extract release.aar error: " + e.Message);
|
||||
stopedByError = true;
|
||||
return;
|
||||
}
|
||||
|
||||
ChangePackageName();
|
||||
|
||||
try
|
||||
{
|
||||
ZippingBinary();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.LogError("Zipping release.aar error: " + e.Message);
|
||||
stopedByError = true;
|
||||
return;
|
||||
}
|
||||
|
||||
Directory.Delete(pathToTempFolder, true);
|
||||
}
|
||||
|
||||
private static void ExtractBinary()
|
||||
{
|
||||
if (!File.Exists(pathToBinary))
|
||||
{
|
||||
throw new Exception("File release.aar not found. Please reimport asset. See README.md for details...");
|
||||
}
|
||||
|
||||
if (!Directory.Exists(pathToTempFolder))
|
||||
{
|
||||
Directory.CreateDirectory(pathToTempFolder);
|
||||
}
|
||||
|
||||
using (FileStream fs = new FileStream(pathToBinary, FileMode.Open))
|
||||
{
|
||||
using (ZipFile zf = new ZipFile(fs))
|
||||
{
|
||||
|
||||
for (int i = 0; i < zf.Count; ++i)
|
||||
{
|
||||
ZipEntry zipEntry = zf[i];
|
||||
string fileName = zipEntry.Name;
|
||||
|
||||
if (zipEntry.IsDirectory)
|
||||
{
|
||||
Directory.CreateDirectory(Path.Combine(pathToTempFolder, fileName));
|
||||
continue;
|
||||
}
|
||||
|
||||
byte[] buffer = new byte[4096];
|
||||
using (Stream zipStream = zf.GetInputStream(zipEntry))
|
||||
{
|
||||
using (FileStream streamWriter = File.Create(Path.Combine(pathToTempFolder, fileName)))
|
||||
{
|
||||
StreamUtils.Copy(zipStream, streamWriter, buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (zf != null)
|
||||
{
|
||||
zf.IsStreamOwner = true;
|
||||
zf.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void ChangePackageName()
|
||||
{
|
||||
string manifestPath = Path.Combine(pathToTempFolder, MANIFEST_NAME);
|
||||
string manifestText = File.ReadAllText(manifestPath);
|
||||
|
||||
int manifestPackageNameStartIndex = manifestText.IndexOf("package=\"") + 9;
|
||||
int manifestPackageNameEndIndex = manifestText.IndexOf("\">", manifestPackageNameStartIndex);
|
||||
string manifestPackageName = manifestText.Substring(manifestPackageNameStartIndex, manifestPackageNameEndIndex - manifestPackageNameStartIndex);
|
||||
|
||||
manifestText = manifestText.Replace("package=\"" + manifestPackageName, "package=\"" + PlayerSettings.applicationIdentifier);
|
||||
manifestText = manifestText.Replace("android:authorities=\"" + manifestPackageName, "android:authorities=\"" + PlayerSettings.applicationIdentifier);
|
||||
File.WriteAllText(manifestPath, manifestText);
|
||||
|
||||
string filepathsPath = Path.Combine(pathToTempFolder, PROVIDER_PATHS_NAME);
|
||||
string filepathsText = File.ReadAllText(filepathsPath);
|
||||
|
||||
int filepathsPackageNameStartIndex = filepathsText.IndexOf("data/") + 5;
|
||||
int filepathsPackageNameEndIndex = filepathsText.IndexOf("\" name", filepathsPackageNameStartIndex);
|
||||
string filepathsPackageName = filepathsText.Substring(filepathsPackageNameStartIndex, filepathsPackageNameEndIndex - filepathsPackageNameStartIndex);
|
||||
|
||||
filepathsText = filepathsText.Replace("data/" + filepathsPackageName, "data/" + PlayerSettings.applicationIdentifier);
|
||||
File.WriteAllText(filepathsPath, filepathsText);
|
||||
|
||||
lastPackageName = PlayerSettings.applicationIdentifier;
|
||||
}
|
||||
|
||||
private static void ZippingBinary() // используется ДОзапись, обычным методом .Add(filePath, entryName), для перезаписи с нуля нужно использовать ZipOutputStream zipToWrite = new ZipOutputStream(zipStream) и FileStream targetFile
|
||||
{
|
||||
if (!File.Exists(pathToBinary))
|
||||
{
|
||||
throw new Exception("File release.aar not found. Please reimport asset. See README.md for details...");
|
||||
}
|
||||
|
||||
if (!Directory.Exists(pathToTempFolder))
|
||||
{
|
||||
throw new Exception("Temp folder not found. See README.pdf for details...");
|
||||
}
|
||||
|
||||
using (FileStream zipStream = new FileStream(pathToBinary, FileMode.Open))
|
||||
{
|
||||
using (ZipFile zipFile = new ZipFile(zipStream))
|
||||
{
|
||||
zipFile.BeginUpdate();
|
||||
zipFile.Add(Path.Combine(pathToTempFolder, MANIFEST_NAME), MANIFEST_NAME);
|
||||
zipFile.Add(Path.Combine(pathToTempFolder, PROVIDER_PATHS_NAME), PROVIDER_PATHS_NAME);
|
||||
zipFile.CommitUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsFileAlreadyOpen(FileInfo file)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (FileStream stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None))
|
||||
{
|
||||
stream.Close();
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.LogError(e.ToString() + ": " + e.Message);
|
||||
stopedByError = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
11
Assets/3rd/AndroidOpener/Editor/PackageNameChanger.cs.meta
Normal file
11
Assets/3rd/AndroidOpener/Editor/PackageNameChanger.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ee86983896a431840a78dbe69fb91189
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/3rd/AndroidOpener/Plugins.meta
Normal file
8
Assets/3rd/AndroidOpener/Plugins.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 01dcac85b4f1656418d69de13cafc0e6
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/3rd/AndroidOpener/Plugins/release.aar
Normal file
BIN
Assets/3rd/AndroidOpener/Plugins/release.aar
Normal file
Binary file not shown.
32
Assets/3rd/AndroidOpener/Plugins/release.aar.meta
Normal file
32
Assets/3rd/AndroidOpener/Plugins/release.aar.meta
Normal file
@@ -0,0 +1,32 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cbf7fb971dec3432db468a27adbc4fcb
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/3rd/AndroidOpener/Scripts.meta
Normal file
8
Assets/3rd/AndroidOpener/Scripts.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 17969fed461284447af370c88b439a3e
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
75
Assets/3rd/AndroidOpener/Scripts/AndroidOpenUrl.cs
Normal file
75
Assets/3rd/AndroidOpener/Scripts/AndroidOpenUrl.cs
Normal file
@@ -0,0 +1,75 @@
|
||||
/*MIT License
|
||||
|
||||
Copyright(c) 2020 Mikhail5412
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
namespace UnityAndroidOpenUrl
|
||||
{
|
||||
//string[] mimeTypes =
|
||||
// {"application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document", // .doc & .docx
|
||||
// "application/vnd.ms-powerpoint","application/vnd.openxmlformats-officedocument.presentationml.presentation", // .ppt & .pptx
|
||||
// "application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", // .xls & .xlsx
|
||||
// "text/plain",
|
||||
// "application/pdf",
|
||||
// "application/zip"};
|
||||
public static class AndroidOpenUrl
|
||||
{
|
||||
public static void OpenFile(string url, string dataType = "")//"application/pdf"
|
||||
{
|
||||
AndroidJavaObject clazz = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
|
||||
AndroidJavaObject currentActivity = clazz.GetStatic<AndroidJavaObject>("currentActivity");
|
||||
|
||||
AndroidJavaObject intent = new AndroidJavaObject("android.content.Intent");
|
||||
intent.Call<AndroidJavaObject>("addFlags", intent.GetStatic<int>("FLAG_GRANT_READ_URI_PERMISSION"));
|
||||
intent.Call<AndroidJavaObject>("setAction", intent.GetStatic<string>("ACTION_VIEW"));
|
||||
|
||||
var apiLevel = new AndroidJavaClass("android.os.Build$VERSION").GetStatic<int>("SDK_INT");
|
||||
|
||||
AndroidJavaObject uri;
|
||||
if (apiLevel > 23)
|
||||
{
|
||||
AndroidJavaClass fileProvider = new AndroidJavaClass("android.support.v4.content.FileProvider");
|
||||
AndroidJavaObject file = new AndroidJavaObject("java.io.File", url);
|
||||
|
||||
AndroidJavaObject unityContext = currentActivity.Call<AndroidJavaObject>("getApplicationContext");
|
||||
string packageName = unityContext.Call<string>("getPackageName");
|
||||
string authority = packageName + ".fileprovider";
|
||||
|
||||
uri = fileProvider.CallStatic<AndroidJavaObject>("getUriForFile", unityContext, authority, file);
|
||||
}
|
||||
else
|
||||
{
|
||||
var uriClazz = new AndroidJavaClass("android.net.Uri");
|
||||
var file = new AndroidJavaObject("java.io.File", url);
|
||||
uri = uriClazz.CallStatic<AndroidJavaObject>("fromFile", file);
|
||||
}
|
||||
if (!string.IsNullOrEmpty(dataType))
|
||||
{
|
||||
intent.Call<AndroidJavaObject>("setType", dataType);
|
||||
}
|
||||
intent.Call<AndroidJavaObject>("setData", uri);
|
||||
|
||||
currentActivity.Call("startActivity", intent);
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/3rd/AndroidOpener/Scripts/AndroidOpenUrl.cs.meta
Normal file
11
Assets/3rd/AndroidOpener/Scripts/AndroidOpenUrl.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b07f4973c298676448f66cb780c4f6b2
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 24ad222aaf90e4e88a89e4fd237253be
|
||||
guid: 90b9e3f91eeb64249b80e8c33636811c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
13
Assets/3rd/DocumentHandler/CHANGELOG.md
Normal file
13
Assets/3rd/DocumentHandler/CHANGELOG.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [0.1.0] - 2020-07-30
|
||||
|
||||
### Added
|
||||
|
||||
- Init commit
|
||||
7
Assets/3rd/DocumentHandler/CHANGELOG.md.meta
Normal file
7
Assets/3rd/DocumentHandler/CHANGELOG.md.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 73252913ec82f3b4fbb65300a8c44696
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
21
Assets/3rd/DocumentHandler/LICENSE.md
Normal file
21
Assets/3rd/DocumentHandler/LICENSE.md
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020 Eduard
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
7
Assets/3rd/DocumentHandler/LICENSE.md.meta
Normal file
7
Assets/3rd/DocumentHandler/LICENSE.md.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 317c760af475c2540b76a28e3783315c
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
35
Assets/3rd/DocumentHandler/README.md
Normal file
35
Assets/3rd/DocumentHandler/README.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# DocumentHandler
|
||||
|
||||
Open a document (e.g. PDF) with a corresponding native app.
|
||||
|
||||
Since ``Application.OpenURL(...path)`` is not working (anymore?) to open local files on iOS, I searched the internet for another solution (see credits). I found usable code and want to make it more accessible.
|
||||
|
||||
## How to install
|
||||
|
||||
Just add the plugin via Package Manager with the git url:
|
||||
|
||||
```
|
||||
https://github.com/Draudastic26/document-handler.git#upm
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```csharp
|
||||
using drstc.DocumentHandler;
|
||||
...
|
||||
DocumentHandler.OpenDocument(somePath);
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
I just tested this on iOS with a PDF file. Please let me know if you tested this with other document types.
|
||||
|
||||
## Contribution
|
||||
|
||||
Feel free to create a pull request or an issue!
|
||||
|
||||
## Credits
|
||||
|
||||
martejpad post in this thread: [https://answers.unity.com/questions/1337996/ios-open-docx-file-from-applicationpersistentdata.html](https://answers.unity.com/questions/1337996/ios-open-docx-file-from-applicationpersistentdata.html)
|
||||
|
||||
Unity 2019.4.3f
|
||||
7
Assets/3rd/DocumentHandler/README.md.meta
Normal file
7
Assets/3rd/DocumentHandler/README.md.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f7c4aa3b47f1f6d418567f4d798595d1
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/3rd/DocumentHandler/Runtime.meta
Normal file
8
Assets/3rd/DocumentHandler/Runtime.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: eaaf4e73c50a9994a91535ac431ebcec
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
24
Assets/3rd/DocumentHandler/Runtime/DocumentHandler.cs
Normal file
24
Assets/3rd/DocumentHandler/Runtime/DocumentHandler.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using UnityEngine;
|
||||
|
||||
namespace drstc.DocumentHandler
|
||||
{
|
||||
public class DocumentHandler : MonoBehaviour
|
||||
{
|
||||
#if UNITY_IPHONE && !UNITY_EDITOR
|
||||
[DllImport("__Internal")]
|
||||
internal static extern bool _OpenDocument(string path);
|
||||
|
||||
public static void OpenDocument(string path)
|
||||
{
|
||||
_OpenDocument(path);
|
||||
}
|
||||
#else
|
||||
public static void OpenDocument(string path)
|
||||
{
|
||||
Application.OpenURL("file:///" + path);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
11
Assets/3rd/DocumentHandler/Runtime/DocumentHandler.cs.meta
Normal file
11
Assets/3rd/DocumentHandler/Runtime/DocumentHandler.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3d93365ec5d0f214fa3e11145e4b8308
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"name": "Drstc.DocumentHandler.Runtime"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: eca2ed0e95167ad4aa975aab1849e6a5
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e9896101a0f2549c18be247df58ec735
|
||||
guid: c435a9dc757064648be238db0af31815
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
8
Assets/3rd/DocumentHandler/Runtime/Plugins/iOS.meta
Normal file
8
Assets/3rd/DocumentHandler/Runtime/Plugins/iOS.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 758b72d97ebaec34195e3f662c0334af
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,87 @@
|
||||
// Credits: https://answers.unity.com/questions/1337996/ios-open-docx-file-from-applicationpersistentdata.html
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
|
||||
@interface DocumentHandler : NSObject <UIDocumentInteractionControllerDelegate>
|
||||
{
|
||||
NSURL * fileURL;
|
||||
}
|
||||
|
||||
- (id)initWithURL:(NSURL*)unityURL;
|
||||
|
||||
- (void)UpdateURL:(NSURL*)unityURL;
|
||||
|
||||
- (bool)OpenDocument;
|
||||
|
||||
- (UIViewController *) documentInteractionControllerViewControllerForPreview: (UIDocumentInteractionController *) controller;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation DocumentHandler
|
||||
|
||||
- (id)initWithURL:(NSURL*)unityURL
|
||||
{
|
||||
self = [super init];
|
||||
fileURL = unityURL;
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)UpdateURL:(NSURL*)unityURL {
|
||||
fileURL = unityURL;
|
||||
}
|
||||
|
||||
- (bool)OpenDocument {
|
||||
|
||||
UIDocumentInteractionController *interactionController =
|
||||
[UIDocumentInteractionController interactionControllerWithURL: fileURL];
|
||||
|
||||
// Configure Document Interaction Controller
|
||||
[interactionController setDelegate:self];
|
||||
|
||||
[interactionController presentPreviewAnimated:YES];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
- (UIViewController *) documentInteractionControllerViewControllerForPreview: (UIDocumentInteractionController *) controller {
|
||||
return UnityGetGLViewController();
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
static DocumentHandler* docHandler = nil;
|
||||
|
||||
// Converts C style string to NSString
|
||||
NSString* CreateNSString (const char* string)
|
||||
{
|
||||
if (string)
|
||||
return [NSString stringWithUTF8String: string];
|
||||
else
|
||||
return [NSString stringWithUTF8String: ""];
|
||||
}
|
||||
|
||||
|
||||
extern "C" {
|
||||
|
||||
bool _OpenDocument (const char* path)
|
||||
{
|
||||
// Convert path to URL
|
||||
NSString * stringPath = CreateNSString(path);
|
||||
|
||||
NSURL *unityURL = [NSURL fileURLWithPath:stringPath];
|
||||
|
||||
if (docHandler == nil)
|
||||
docHandler = [[DocumentHandler alloc] initWithURL:unityURL];
|
||||
|
||||
else
|
||||
[docHandler UpdateURL:unityURL];
|
||||
|
||||
[docHandler OpenDocument];
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 93804f9d06962764c8ecf5d676d9c4e9
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
- first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
- first:
|
||||
tvOS: tvOS
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
12
Assets/3rd/DocumentHandler/package.json
Normal file
12
Assets/3rd/DocumentHandler/package.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"name": "com.drstc.documenthandler",
|
||||
"displayName": "DocumentHandler",
|
||||
"version": "0.1.0",
|
||||
"unity": "2019.4",
|
||||
"description": "Open a document (e.g. .pfd) with a corresponding native app.",
|
||||
"author": {
|
||||
"name": "Draudastic",
|
||||
"email": "via gitHub",
|
||||
"url": "https://github.com/Draudastic26"
|
||||
}
|
||||
}
|
||||
7
Assets/3rd/DocumentHandler/package.json.meta
Normal file
7
Assets/3rd/DocumentHandler/package.json.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f84eb8099ddc06e4b83d7bb97b4710a2
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/3rd/NativeAudio.meta
Executable file
8
Assets/3rd/NativeAudio.meta
Executable file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 534db99d6d4db441b9690204ce44e4c3
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
552
Assets/3rd/NativeAudio/CHANGELOG.md
Executable file
552
Assets/3rd/NativeAudio/CHANGELOG.md
Executable file
@@ -0,0 +1,552 @@
|
||||
# Changelog
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
# [5.0.0] - 2019-12-01
|
||||
|
||||
Major SemVer version bump means breaking, incompatible change.
|
||||
|
||||
This release contains a massive syntactic change, requiring some line-to-line code modification. I discovered as I am writing an entire website again that even I got confused with my own API. It is kind of enlightening, now the new API goes along with all explanation in the website making it more welcoming to new users and make more sense in the code editor.
|
||||
|
||||
However functionally stays mostly the same. If you don't have time it is not urgent that you have to update. There is no important bug fix here. Performance improvement is just very slightly better.
|
||||
|
||||
It is highly recommended to not import over the old one, but remove the old one completely before importing this version. Please make sure you got enough time to do a code replace before updating to this version.
|
||||
|
||||
## 5.0.0 API Changes
|
||||
|
||||
Here's a big section of syntactic API changes. Read it carefully for diff with the previous version, or if you prefer, re-read the [entirely new website](https://exceed7.com/native-audio/) that is now written according to this new API.
|
||||
|
||||
#### `NativeAudio` is now a `static` class
|
||||
|
||||
As it should have been from the beginning. This class is full of `static` methods for interfacing with native side. An instance of it make absolutely no sense. I was a noob programmer back then.
|
||||
|
||||
#### `NativeAudioController` renamed to `NativeSource`
|
||||
|
||||
A naming change with big implication. It represent one native source that was used in a play. "NativeAudioController" sounds like it control the entire plugin more that an intended meaning.
|
||||
|
||||
Except this now make sense even before a play. You can have a hold of this variable and keep it (and even name it!) by a newly added method `NativeAudio.GetNativeSource(index)` just like you would hold an `AudioSource`, without first playing anything to get it.
|
||||
|
||||
It is now not a "controller" and you can think of it like `AudioSource`. Meaning that previously you can only `Stop` `Pause` `Resume` them and so on ("controlling" them), now you can expect that `Play` is a part of it just like `AudioSource`. This leads to the next point.
|
||||
|
||||
#### How you play an audio completely changed
|
||||
|
||||
**All previous users have to take action for this change.**
|
||||
|
||||
To play any audio, now you have 2 ways :
|
||||
|
||||
- New `NativeSource.Play(nativeAudioPointer)` instance method : I already have a native source target I want, play on this source. To get a `NativeSource` of index that you want, use the new `NativeAudio.GetNativeSource(index)`. You no longer specify a target as an integer in `PlayOption`. That was very awkward. You can cache and reuse a `NativeSource` just like `AudioSource`.
|
||||
- Use `NativeAudio.GetNativeSourceAuto()` in order to play "without caring". This "Auto" means the round-robin behaviour, but this time you just get back a desired `NativeSource` and not a play yet. Then you use `Play` on it. The `GetNativeSourceAuto` naming allows a "different auto" to be implemented as an overload.
|
||||
|
||||
#### `INativeSourceSelector` new `interface` added
|
||||
|
||||
This is that "different auto" usable with `GetNativeSourceAuto(INativeSourceSelector)`.
|
||||
|
||||
#### `nativeAudioPointer.Play` instance method removed
|
||||
|
||||
**All previous users have to take action for this change.**
|
||||
|
||||
Continued from the previous point, now you put `NativeAudioPointer` in `NativeSource.Play` instance method. This is just a syntax change, the function didn't change. You can fix this line by line without affecting anything else.
|
||||
|
||||
If previously :
|
||||
|
||||
```csharp
|
||||
myNativeAudioPointer.Play();
|
||||
```
|
||||
|
||||
Fix to :
|
||||
|
||||
```csharp
|
||||
NativeAudio.GetNativeSourceAuto().Play(myNativeAudioPointer);
|
||||
```
|
||||
|
||||
If previously :
|
||||
|
||||
```csharp
|
||||
myNativeAudioPointer.Play(playOptionWithExplicitSourceTarget);
|
||||
```
|
||||
|
||||
Fix to :
|
||||
|
||||
```csharp
|
||||
NativeAudio.GetNativeSource(explicitSourceIndex).Play(myNativeAudioPointer, playOption);
|
||||
```
|
||||
|
||||
This is now more understandable and more representative at what happened at the native side. The old `Play` that is sticking on an instance of `NativeAudioPointer` didn't make much sense as technically this pointer do not have an ability to play. **It's the native source that plays using this pointer**.
|
||||
|
||||
Plus the documentation could be made less confusing that `Initialize` `Load` `Play` `Dispose` are all on the same "thing" (`NativeAudio`).
|
||||
|
||||
Now only freeing audio memory stays on the `NativeAudioPointer` (`Unload()`) as I think it is more intuitive that an audio can dispose itself.
|
||||
|
||||
#### `PlayOption.audioPlayerIndex` removed
|
||||
|
||||
The previous points explain that now the way to explicitly target a native source is to get a desired `NativeSource` variable and `.Play` on it, we no longer awkwardly use an integer target in the `PlayOption`.
|
||||
|
||||
You can get a desired `NativeSource` with the new `NativeAudio.GetNativeSource` or `NativeAudio.GetNativeSourceAuto`.
|
||||
|
||||
`PlayOption` is now strictly things like volume, pan, etc. not related to more technical aspects like which native source to use.
|
||||
|
||||
#### "Prepare" concept completely changed
|
||||
|
||||
An act of preparation is to pre-assign **audio to a source** without playing so the play could be faster if possible.
|
||||
|
||||
Therefore this "prepared" status should be tied to a source, not to the audio data/pointer. Therefore `NativeAudioPointer.Prepared` status is now removed. The same reason as the move of `Play` out of pointer. We told any native source to prepare about this pointer, not that we told the pointer to prepare itself. That is impossible and make no sense. Pointer is just a data, it can't prepare anything. Rather, the native sources has to prepare.
|
||||
|
||||
`nativeAudioPointer.Prepare` instance method is now moved to `NativeSource.Prepare(nativeAudioPointer)` instance method.
|
||||
|
||||
A way of "using the preparation" is also changed. Previously the API expect you to use the same pointer in the "next" play and it will be sort of automatically faster. That was too magical and full of bugs. If you wait too long other audio uses that source then your preparation is now invalid. If you don't play with that pointer then the prepared status could never be cleared out, etc.
|
||||
|
||||
Now we have a new explicit method `NativeSource.PlayPrepared()`. The key point to note is that it **has no audio pointer argument**. Imagine releasing a charged attack, it release whatever it was charged, however it can't be helped if the audio changed to something else already. This no argument design make it clearer that the result depends on prepared audio and an internal status.
|
||||
|
||||
#### `NativeSource` (formerly `NativeAudioController`) is now a `struct` instead of `class`
|
||||
|
||||
This object is potentially generated with `NativeAudio.GetNativeSourceAuto` on *every play*. Previously `NativeAudioController` is also returned on *every play*. So this is a general performance boost as well. Being a `class` means we are increasing works for the GC rapidly as playing audio is a common event.
|
||||
|
||||
A stack allocated `struct` is better because if you choose not to care then its memory is cleanly freed after the function's scope. It is just a number, there is nothing that would need a `class`'s ability at all.
|
||||
|
||||
#### Native API naming changes for both iOS and Android
|
||||
|
||||
Regular user won't be affected, but over the years there are many who attempted to connect things up at entirely native side, not wanting to touch C#. If you are one, various weird naming were fixed to be more consistent. You have to rename accordingly.
|
||||
|
||||
#### Other API naming changes
|
||||
|
||||
All documentations in code XML and website now refer to the thing that you get at initialize waiting to play your loaded audio as **native source**. It is named like this to parallel Unity's `AudioSource` but instead living at native side. The "audio player" and "track" confusing wording that was meant to be the same thing has been cleaned up to "native source" everywhere, both documentation and the method names.
|
||||
|
||||
- `PlayOptions.trackLoop` changed to `PlayOptions.sourceLoop`. The "track" wording is deprecated. (It was like that because on Android it is called `AudioTrack` in C++)
|
||||
- `NativeSource.TrackPause()` and `NativeSource.TrackResume()` is now just `Pause()` and `Resume()` as it is already clear we are doing it on the "native source", as opposed to previously bad name `NativeAudioController`.
|
||||
- `NativeSource.InstanceIndex` changed to `NativeSource.Index`. The "index" wording is used to say "which" native source you would like to use now. That "instance" looks alien.
|
||||
- `PlayOptions` moved out of `NativeAudio` nesting, into `NativeSource` nesting instead, since it is now a thing that is used with the source. `InitializationOptions` and `LoadOptions` remain nested in `NativeAudio` class, since it is a thing that used on Native Audio overall.
|
||||
|
||||
Non "native source" related changes :
|
||||
|
||||
- `NativeAudio.OnSupportedPlatforms()` changed to a property instead : `NativeAudio.OnSupportedPlatforms`.
|
||||
|
||||
## Other changes
|
||||
|
||||
#### Unity Package Manager compatible Samples
|
||||
|
||||
`Demo` folder is now renamed to `Samples~`, which is now hidden from Unity importer *until you need it*. Various demo audio inside now properly **not** imported to your game, saving you import time on switching platforms. In this [new convention](https://forum.unity.com/threads/samples-in-packages-manual-setup.623080/), samples are imported on demand to your project by a button in the Package Manager instead of being there from the start. You can also just copy to your project out of `~` suffixed folder.
|
||||
|
||||
#### Folder structure in Unity's UPM convention
|
||||
|
||||
- `Managed` folder renamed to `Runtime`. `.asmdef` moved into the `Runtime` folder as well.
|
||||
- `Extras` folder merged into the new `Samples~`, you can get its content by sample importing or just copy it out.
|
||||
- `Documentation~` hidden folder added to the package. It contains a Markdown version of the official website https://exceed7.com/native-audio.
|
||||
- `HowToUse` offline zipped website documentation removed in favor of Markdown documentation in `Documentation~` folder.
|
||||
- `Documentation~` and `Samples~` included in `.zip` form until Asset Store support publishing unimported folder. Please unzip it manually when you need them. (Either zipped or unzipped to `___~`, the content won't be unnecessarily imported to your game.)
|
||||
|
||||
#### Discontinued support for 2017.1.5f1.
|
||||
|
||||
Now the lowest supported version is 2017.4.34f1. (The lowest possible LTS in Unity Hub.)
|
||||
|
||||
Trivia : 2017.1.5f1 didn't have Assembly Definition Files, supporting that version make it very difficult to utilize `internal` keyword together with `[InternalsVisibleTo]` as it doesn't work with `Editor` magic folder.
|
||||
|
||||
#### Others
|
||||
|
||||
- New website design : https://exceed7.com/native-audio. It is a big deal since now the website linked to `Documentation~` hidden folder in this package rather than having to handcraft it separately. Even this `CHANGELOG.md` turns into a webpage, along with API documentation that is the same as code documentation in this package. Now you can read documentation in their Markdown form in `Documentation~` or in the website. It will also reduce my maintenance burden, things in the web will stay up to date with the package 100%. Awesome!
|
||||
- The web has better explanation why audio could get faster.
|
||||
- Rewrite many method's code documentation. (Also reflected in the API page in the web.)
|
||||
|
||||
# [4.6.0] - 2019-10-01
|
||||
|
||||
## Changed
|
||||
|
||||
### Dropped support for x86 architecture in the prebuilt AAR.
|
||||
|
||||
Due to recent Google Play policy change to accept only 64-bit build and Unity deprecating x86 build (and you cannot even submit a build with x86 lingering in there if you opt in to Google's new Android App Bundle), I have rebuild the AAR with only `armeabi-v7a` (32-bit) and `arm64-v8a` (64-bit).
|
||||
|
||||
I had received a report that some phone mistakenly pick x86 in the AAR previously and crash on start even though it should have picked `arm64-v8a`, so the best way now that Unity is also removing x86, is to just remove x86 from the AAR.
|
||||
|
||||
If you are using pre 2019.2 Unity, don't check x86 in the Android build configuration. Doing so will only drop support for about 2 devices in the world according to Google Play console. No one made x86 devices to the market anymore.
|
||||
|
||||
## Fixed
|
||||
|
||||
- [Android] The AAR is compiled with `targetSdkVersion` 27 instead of previously 28, to support developers that use Android SDK of lower version with Unity.
|
||||
- [Android] The project that compiled the AAR is upgraded to Android Gradle plugin version 3.5.0 and Gradle Version 5.4.1.
|
||||
|
||||
# [4.5.0] - 2019-08-15
|
||||
|
||||
## Added
|
||||
|
||||
- Better performance of OpenSL ES double buffering callback function by removing all `if`, replaced by inline conditionals. Compiled assembly could be better with inline conditionals since it may avoid costly branch prediction. This callback is a very hot function as it is being called on every little bits of audio buffer sends out your speaker, so potentially it could improve latency. (theoretically)
|
||||
- Added some explanations why `nativeAudioPointer.Unload()` is unsafe and could cause segmentation fault in the code documentation. You have to ensure no tracks are playing before you unload. It is by design.
|
||||
|
||||
## Fixed
|
||||
|
||||
- The multi-track demo scene now wait 0.5s after disposing before re-initializing 4 native sources, to fix throttling time problem which cause you to not get back fast native tracks you just released.
|
||||
|
||||
# [4.4.0] - 2019-06-10
|
||||
|
||||
## Added
|
||||
|
||||
- Demo scenes now has a button that could jump to the next one. (You have to add them all in the build.)
|
||||
- More kinds of demo scenes to test out more situations. Like stress test and multiple audio tracks test. You could use a scene that is similar to your game, to confirm a problem before submitting a bug report to me, for example.
|
||||
|
||||
## Changed
|
||||
|
||||
- `NativeAudio.Intialize` in editor now throws readable error rather than cryptic error about native call failure.
|
||||
|
||||
## Fixed
|
||||
|
||||
- [iOS] Phone call was cutting off Native Audio and it didn't initalize back. It is now properly reinitialized.
|
||||
- [Android] Added a catch when the device somehow returns native sampling rate or buffer size number that is not parsable by `Integer.parseInt` at Java. I don't know the cause of invalid value yet and how many devices do it (only one user reported this to me so far, and for only 1 device, and I also don't know what number that looks like which Java couldn't parse), but it will now be defaulted to 44100 Hz + buffer size 256 in the case that `NumberFormatException` occurs. When this happen, `adb logcat` will print something like "Received non-parsable ..." and if possible please report the device that do this to me. Thank you.
|
||||
|
||||
# [4.3.0] - 2019-03-30
|
||||
|
||||
## Added
|
||||
|
||||
- [iOS] Now `NativeAudio.GetDeviceAudioInformation` returns the following iOS-specific information : `outputLatency`, `sampleRate`, `preferredSampleRate`, `ioBufferDuration`, `preferredIOBufferDuration`. These are of the shared `AVAudioSession` singleton, and are shared with Unity not just for Native Audio.
|
||||
|
||||
For reference, I tried varying Project Settings > Audio options and this is the `ioBufferDuration` :
|
||||
|
||||
Best Latency : 0.0106666665524244
|
||||
Good Latency : 0.0213333331048489
|
||||
Best Performance : 0.0426666662096977
|
||||
|
||||
## Fixed
|
||||
|
||||
- [Android] Fixed minimizing and come back would multiply the number of restored audio sources by 2x of number of soures before minimizing every time.
|
||||
- [Android] Fixed native source destroy and restore mistakenly when the app loses focus e.g. accessing Google Play Game Center as a floating window mid-game and crash. The source are now properly only destroyed and restored on the app's minimize and maximize.
|
||||
- [Android] Fixed minimizing and maximizing while in uninitialized state, which had been in initialized state before, that it cause Native Audio to initialize again on coming back. Disposing now correctly remove the lifecycle callback along with disposing the native audio sources.
|
||||
- [Android] Fix `BuildConfig.java` mistakenly included in the .AAR that it cause DEX duplication on building with your game on Gradle. The Android Studio project is also updated to build without `BuildConfig.java` now.
|
||||
- [iOS] Fix `NativeAudio.GetDeviceAudioInformation` only returns current **input** audio devices. Now it only returns current **output** audio devices.
|
||||
|
||||
# [4.2.1] - 2019-03-26
|
||||
|
||||
## Fixed
|
||||
|
||||
- [Android] Fixed an error where `NativeAudio.GetDeviceAudioInformation` throws JNI exception on Android lower than API 23 (6.0/Marshmallow) because that API couldn't check for active output devices. It is now properly set to `null` on unsupported API level.
|
||||
|
||||
# [4.2.0] - 2019-03-25
|
||||
|
||||
## Changed
|
||||
|
||||
### [Android] Now dispose all native sources on minimize, and restore on coming back
|
||||
|
||||
Previously the allocated audio sources on Android will not be freed when minimize the app. (The Unity ones do freed and request a new one on coming back) This make it possible for audio played with Native Audio to play while minimizing the app, and also to not spend time disposing and allocating sources again.
|
||||
|
||||
However this is not good since it adds "wake lock" to your game. With `adb shell dumpsys power` while your game is minimized after using Native Audio you will see something like ` PARTIAL_WAKE_LOCK 'AudioMix' ACQ=-27s586ms (uid=1041 ws=WorkSource{10331})`. Meaning that the OS have to keep the audio mix alive all the time. Not to mention most games do not really want this behaviour.
|
||||
|
||||
Most gamers I saw also minimized the game and sometimes forgot to close them off. This cause not only battery drain when there is a wake lock active, but also when the lock turns into `LONG` state it will show up as a warning in Google Play Store, as it could detect that an app has a [Stuck partial wake lock](https://developer.android.com/topic/performance/vitals/wakelock) or not.
|
||||
|
||||
So in this version, on initialize the native side will remember your request's spec. On minimize it will dispose all the sources (and in turn stopping them). On coming back it will reinitialize with the same spec thanks to reinitialization possible from version 4.1.0.
|
||||
|
||||
### [Android] New initialization option `preserveOnMinimize`
|
||||
|
||||
When setting this to `true` it would behave like earlier version where it wouldn't release the native sources on minimize/sleep. Be careful about your wake locks.
|
||||
|
||||
### [Android] NativeAudio.Dispose
|
||||
|
||||
This method allows you to just dispose the sources Native Audio is using without intialize back. This is to be used together with the new `preserveOnMinimize` option, so you have more control over your app's wake lock.
|
||||
|
||||
Disposing has nothing to do about loaded audio. It just dispose the native sources. To unload audio you still need the `NativeAudioPointer` you kept.
|
||||
|
||||
### No longer automatically initialize on loading audio
|
||||
|
||||
Previously if your forgot to `NativeAudio.Initialize` and go straight to `NativeAudio.Load`, it will initialize with default options for you. Together with various initialization control methods added in this release it would be the best to hand the initialization control completely to you.
|
||||
|
||||
### No longer able to load, use any NativeAudioPointer, or NativeAudioController while not in initialized state
|
||||
|
||||
Various exception throws are added if you attempt to use Native Audio while not initialized, or even initialized but suddenly goes uninitialize due to the new `NativeAudio.Dispose`. Now that Native Audio can went back to uninitialized at will, I have defined additional rules.
|
||||
|
||||
Even though `NativeAudio.Load` has nothing to do with audio playing, you are not allowed to load while in uninitialized state. The reason is because each load is using the buffer size you tell Native Audio at `NativeAudio.Initialize` to optimize a buffer and reduce as much jitter as possible.
|
||||
|
||||
Then what if you initialize, then load, then reinitialize with a new buffer size, then play old audio loaded previously? In fact they are **still working** but not as jitterless as audio loaded under active buffer size.
|
||||
|
||||
`NativeAudioPointer.Play` cannot be used while not initialized obviously. Interestingly you are still allowed to unload `NativeAudioPointer`, that's about the only thing you are allowed to do.
|
||||
|
||||
`NativeAudioController` connects directly to sources at native side, so in uninitialized state they had been all destroyed and is unusable.
|
||||
|
||||
All these checks are purely at C# managed side. If you are hacking Native Audio and use the native side method you will get SIGSEGV when trying to do something while uninitialized.
|
||||
|
||||
## Fixed
|
||||
|
||||
- [iOS] Fixed a bug where playing long audio fast enough, that the automatically selected source loops over to the same source that still hadn't finished playing yet fails silently to assign a new audio source and ended up replaying the unfinished source.
|
||||
- Added "Dispose" button to the demo scene for you to try out `NativeAudio.Dispose`.
|
||||
|
||||
# [4.1.0] - 2019-03-20
|
||||
|
||||
## Added
|
||||
|
||||
### [Android] Reinitialization
|
||||
|
||||
Now it is possible to "reinitialize" by calling `NativeAudio.Initialize()` **again** on Android. This allows you to fix up the `InitializationOption` that you got in wrong the first time. I have some report that for Chinese phones like Huawei Mate 20, P20 or some MeiZu phones, turns out the phone's recommended buffer size was too low to be usable. (Also an issue with normal Unity audio)
|
||||
|
||||
On reinitialization all native sources will be disposed. So you could use a lower number than intitially allocated if you wish.
|
||||
|
||||
Reinitialization allows you to implement a slider in the game's option screen to manually adjust the buffer size until it is usable, for example. In option menu you may have an advanced section saying "if you experience audio problem, you may try increasing the buffer size at the cost of larger latency." ...or something.
|
||||
|
||||
The reinitialization is quite costly so I don't recommend doing it rapidly when the slider is moving. Instead maybe an apply button is more appropriate.
|
||||
|
||||
Note that choosing a new arbitrary `androidMinimumBufferSize` will **not** get you that exact size, but still be modified to be a multiple of device's optimal buffer size to reduce jitter. (The same as before)
|
||||
|
||||
### GetDeviceAudioInformation.audioDevices added
|
||||
|
||||
It is an array of `enum` specifying types of device currently active. I have heard that Native Audio may produce strange glitch on Bluetooth devices, or maybe on other unusual devices. Ideally I would like Native Audio to work everywhere, but in emergency you can check on this array and maybe turn off Native Audio based on type of devices your user is using.
|
||||
|
||||
Android and iOS has different set of output devices ported directly from respective native side. The `DeviceAudioInformation` has preprocessor directive to switch its available `enum` depending on platform.
|
||||
|
||||
- C# XML code documentation now utilizes more XML tags to link up method references.
|
||||
- Demo scene is updated to be able to reinitialize with any buffer size. Specifiable with a slider.
|
||||
|
||||
## Changed
|
||||
|
||||
- [Android] MIPS and MIPS64 variant has been removed from Android's built AAR since it was causing compile problem in Unity.
|
||||
|
||||
## Fixed
|
||||
|
||||
- Fixes bug in the old `StreamingAssets` loading on Android where it throws : "System.Exception: JNI: Unknown signature for type 'E7.Native.NativeAudio+LoadOptions+ResamplingQuality'" because I forgot that the native side was waiting with `int` signature, while at managed side I sent the `enum` it is now casted to `int`. (But still I recommend using the new `AudioClip` way.)
|
||||
- [iOS] Fixed a bug on iOS where if you play a certain audio, only when rapidly over a certain frequency, every 16th play would have its right channel turned off and logs something like this on Xcode : `ProductName[239:4538] AUBase.cpp:832:DispatchSetProperty: ca_require: ValidFormat(inScope, inElement, newDesc) InvalidFormat`. I don't know if this is OpenAL's bug or something, the entire internet do not have any say about it, and that line itself is literally a part of code in OpenAL's source code and not indicating any error, but it seems like reducing the total available source to 15 instead of 16 fixed the issue. (Seems like the 32th source of OpenAL where our 16th source ended up using as its right channel is buggy... wtf)
|
||||
- Added GC pinning on the `AudioClip` way of loading for safety, to prevent C# GC from moving the content while native side is reading it.
|
||||
- Taken care of all compilation warnings in the source code.
|
||||
|
||||
# [4.0.0] - 2018-12-24
|
||||
|
||||
## Added
|
||||
|
||||
### [All Platforms] New load API : `NativeAudio.Load(AudioClip)`
|
||||
|
||||
You are now freed from `StreamingAssets` folder, because you can give data to NativeAudio via Unity-loaded `AudioClip`.
|
||||
|
||||
Here's how loading this way works, it is quite costly but convenient nonetheless :
|
||||
|
||||
- It uses `audioClip.GetData` to get a float array of PCM data.
|
||||
- That float array is converted to a byte array which represent 16-bit per sample PCM audio.
|
||||
- The byte array is sent to native side. NativeAudio **copy** those bytes and keep at native side. You are then safe to release the bytes at Unity side without affecting native data.
|
||||
- Thus it definitely takes more time than the old `StreamingAssets` folder way. Your game might hiccups a bit since the copy is synchronous. Do this in a loading scene.
|
||||
|
||||
This is now the recommeded way of loading audio, it allows a platform like PC which Native Audio does not support to use the same imported audio file as Android and iOS. Also for the tech-savvy you can use the newest Addressables Asset System to load audio from anywhere (local or remote) and use it with Native Audio once you get a hold of that as an `AudioClip`.
|
||||
|
||||
Hard requirements :
|
||||
|
||||
- Load type **MUST be Decompress On Load** so Native Audio could read raw PCM byte array from your compressed audio.
|
||||
- If you use Load In Background, you must call `audioClip.LoadAudioData()` beforehand and ensure that `audioClip.loadState` is `AudioDataLoadState.Loaded` before calling `NativeAudio.Load`. Otherwise it would throw an exception. If you are not using Load In Background but also not using Preload Audio Data, Native Audio can load for you if not yet loaded.
|
||||
- Must not be ambisonic.
|
||||
|
||||
In the Unity's importer, it works with all compression formats, force to mono, overriding to any sample rate, and quality slider.
|
||||
|
||||
The old `NativeAudio.Load(string audioPath)` is now documented as an advanced use method. You should not require it anymore in most cases.
|
||||
|
||||
### [All Platforms] OGG support added via `NativeAudio.Load(AudioClip)`
|
||||
|
||||
From the previous point, being able to send data from Unity meaning that we can now use OGG. I don't even have to write my own native OGG decoder!
|
||||
|
||||
The load type must be **Decompress on Load** to enable decompressed raw PCM data to be read before sending to Native Audio. This means on the moment you load, it will consume full PCM data in Unity on the read **and** also full PCM data again in native side, resulting in double uncompressed memory cost. You can call `audioClip.UnloadAudioData` afterwards to free up memory of managed side leaving just the uncompressed native memory.
|
||||
|
||||
OGG support is not implemented for the old `NativeAudio.Load(string audioPath)`. An error has been added to throw when you use a string path with ".ogg" to prevent misuse.
|
||||
|
||||
### [iOS] Resampler added, but not enabled yet
|
||||
|
||||
I have added `libsamplerate` integration to the native side but not activate it yet.
|
||||
|
||||
Now you can load an audio of any sampling rate. Currently I don't have an information what is the best sampling rate (latency-wise) for each iOS device, now I left the audio alone at imported rate.
|
||||
|
||||
Combined with the previous points, you are free to use any sampling rate override import settings specified in Unity.
|
||||
|
||||
### [All Platforms] Mono support added
|
||||
|
||||
- When you loads a 1 channel audio, it will be duplicated into 2 channels (stereo) in the memory. Mono saves space only on the device and not in-memory.
|
||||
- Combined with the previous points, you are free to use the `Force To Mono` Unity importer checkbox.
|
||||
|
||||
### [Android] NativeAudio.GetDeviceAudioInformation()
|
||||
|
||||
It returns audio feature information of an Android phone. [Superpowered is hosting a nice database of these information of various phones.](https://superpowered.com/latency).
|
||||
|
||||
Native Audio is already instantiating a good Audio Track based on these information, but you could use it in other way such as enforing your Unity DSP buffer size to be in line with the phone, etc. There is a case that Unity's "Best Latency" results in a buffer size guess that is too low it made Unity-played audio slow down and glitches out.
|
||||
|
||||
## Changed
|
||||
|
||||
### `LoadOptions.androidResamplingQuality` renamed to `LoadOptions.resamplingQuality`
|
||||
|
||||
Because now iOS can also resample your audio.
|
||||
|
||||
## Removed
|
||||
|
||||
### [EXPERIMENTAL] Native Audio Generator removed
|
||||
|
||||
It just here for 1 version but now that the recommended way is to load via Unity's importer this is not worth it to maintain anymore. (That's why I marked it as experimental!)
|
||||
|
||||
# [3.0.0] - 2018-11-01
|
||||
|
||||
## Added
|
||||
|
||||
### [All Platforms] Track's playhead manipulation methods added
|
||||
|
||||
- `NativeAudio.Play(playOptions)` : Able to specify play offset in seconds in the `PlayOptions` argument.
|
||||
- `NativeAudioController` : Added track-based pause, resume, get playback time, and set playback time even while the track is playing. Ways to pause and resume include using this track-based pause/resume, or use get playback time and store it for a new `Play(playOptions)` later and at the same time `Stop()` it immediately, if you fear that the track's audio content might be overwritten before you can resume.
|
||||
- `NativeAudioPointer` : Added `Length` property. It contains a cached audio's length in seconds calculated after loading.
|
||||
|
||||
### [All Platforms] Track Looping
|
||||
|
||||
A new `PlayOptions` applies a looping state on the TRACK. It means that if some newer sound decided to use that track to play, that looping sound is immediately stopped.
|
||||
|
||||
To protect the looping sound, you likely have to plan your track number usage manually with `PlayOptions.audioPlayerIndex`.
|
||||
|
||||
- If you pause a looping track, it will resume in a looping state.
|
||||
- `nativeAudioController.GetPlaybackTime()` on a looping track will returns a playback time that resets every loop, not an accumulated playback time over multiple loops.
|
||||
|
||||
### [iOS] Specifying a track index
|
||||
|
||||
Previously only Android can do it. Now you can specify index 0 ~ 15 on iOS to use precisely which track for your audio. It is especially important for the new looping function.
|
||||
|
||||
### [EXPERIMENTAL] Native Audio Generator
|
||||
|
||||
When you have tons of sound in `StreamingAssets` folder it is getting difficult to manage string paths to load them.
|
||||
|
||||
The "Native Audio Generator" will use a script generation to create a static access point like this : `NativeAudioLibrary.Action.Attack`, this is of a new type `NativeAudioObject` which manages the usual `NativeAudioPointer` inside. You can call `.Play()` on it directly among other things. You even get a neat per-sound mixer in your `Resources` folder which will be applied to the `.Play()` via `NativeAudioObject` automatically.
|
||||
|
||||
Use `Assets > Native Audio > Generate or update NativeAudioLibrary` menu, then you can point the pop-up dialog to any folder inside your `StreamingAssets` folder. It must contain one more layer of folder as a group name before finally arriving at the audio files. Try this on the `StreamingAssets` folder example that comes with the package.
|
||||
|
||||
This is still not documented anywhere in the website yet, but I think it is quite ready for use now. EXPERIMENTAL means it might be removed in the future if I found it is not good enough.
|
||||
|
||||
## Removed
|
||||
|
||||
### `PlayAdjustment` inside the `PlayOptions` is no more.
|
||||
|
||||
Having 2 layers of configuration is not a good API design, but initially I did that because we need a struct for interop and we need a class for its default value ability.
|
||||
|
||||
I decided to make it 1 layer. The entire `PlayOptions` is now used to interop with the native side.
|
||||
|
||||
Everything is moved to the `PlayOptions`, and also `PlayOptions` is now a struct. Previously the `PlayAdjustment` inside is the struct. Not a class anymore, now to get the default `PlayOptions` you have to use `PlayOptions.defaultOptions` then you can modify things from there. If you use `new PlayOptions()` the default value of the struct is not a good one. (For example volume's default is supposed to be 1, not int-default 0)
|
||||
|
||||
# [2.1.0] - 2018-09-12
|
||||
|
||||
## Added
|
||||
|
||||
### [IOS] 2D Panning
|
||||
|
||||
The backend `OpenAL` of iOS is a 3D positional audio engine. 2D panning is emulated by deinterleaving a stereo source audio into 2 mono sources, then adjust the distance from the listener so that it sounds like 2D panning.
|
||||
|
||||
### [ALL PLATFORMS] Play Adjustment
|
||||
|
||||
There is a new member `playAdjustment` in `PlayOptions` that you can use on each `nativeAudioPointer.Play()`. You can adjust volume and pan right away BEFORE play. This is because I discorvered on iOS it is too late to adjust volume immediately after play with `NativeAudioController` without hearing the full volume briefly.
|
||||
|
||||
## Fixed
|
||||
|
||||
- Previously the Android panning that is supposed to work had no effect. Now it works alongside with the new iOS 2D panning.
|
||||
|
||||
# [2.0.0] - 2018-09-08
|
||||
|
||||
## Added
|
||||
|
||||
### [Android] Big migration from Java-based AudioTrack to OpenSL ES
|
||||
|
||||
Unlike Java AudioTrack, (which built on top of OpenSL ES with similar latency from my test) OpenSL ES is one of the officially mentioned "high performance audio" way of playing audio right here. It will be awesome. And being in C language part Unity can invoke method via extern as opposed to via AndroidJavaClass like what we have previously. (speed!) Only audio loading has to go through Java because the code have to look for StramingAssets folder or OBB packages, but loading is only a one-time thing so that's fine.
|
||||
|
||||
I am proud to present that unlike v1.0, Native Audio v2.0 follows everything the official Android high-performance audio guidelines specified. For details of everything I did for this new "back end" of Native Audio, please [read this research](https://gametorrahod.com/androids-native-audio-primer-for-unity-developers-65acf66dd124).
|
||||
|
||||
### [Android] Resampler
|
||||
|
||||
Additionally I will go as far as resampling the audio file on the fly (we don't know which device the player will use, but we can only prepare 1 sampling rate of audio practically) to match each device differing native sampling rate (today it is mainly either 44100Hz or 48000Hz) so that the special "fast path" audio is enabled. The previous version does not enable fast path if device is not 44100Hz native because we hard-fixed everything to 44100Hz. This will be awesome for any music games out there. (But it adds some load time if a resampling is required, it is the price to pay)
|
||||
|
||||
About resampling quality do not worry, as instead of writing my own which would be super slow and sounds bad I will incorporate the impressive libsamplerate (Secret Rabbit Code) http://www.mega-nerd.com/SRC/ and it has a very permissive BSD license that just require you to put some attributions, not to open source your game or anything. You are required to do your part in the open source software intiative.
|
||||
|
||||
### [Android] Double buffering
|
||||
|
||||
The previous version not only it use Java it also push one big chunk of audio in the buffer. In this version, with double buffering technique we put just a small bit of audio and we are ready to play way faster. While this one is playing the next bit will be prepared on the other buffer. It switch back and forth like this until we used up all the sameples. The size of this "audio bit" is set to be as small as possible.
|
||||
|
||||
### [Android] Native buffer size aligned zero-padded audio
|
||||
|
||||
Even more I will intentionally zero pad the audio buffer so that it is a multiple of "native buffer size" of each device further reducing jitter when pushing data to the output stream. High-end device has smaller native buffer size and require less zero-pad. Combined with double buffering mentioned earlier the play will ends exactly without any remainders buffer.
|
||||
|
||||
### [Android] Keep alive the audio track
|
||||
|
||||
Unlike naive implementation of playing a native audio on Android, Native Audio use a hack which keep the track constantly **playing silence** even if nothing is playing.
|
||||
|
||||
This is to counter the costly audio policy that triggers on a transition between play and stopped state on some badly programmed Android phone. It makes rapidly playing audio lags some phones badly.
|
||||
|
||||
Big thanks to PuzzledBoy for helping me investigating into this problem.
|
||||
|
||||
## Changed
|
||||
|
||||
### Volume/pan/etc. adjustments on sound moved to `NativeAudioController`, a new class type.
|
||||
|
||||
It is returned from the new `Play()`, previously returns nothing. Please use it in the line immediately after `Play()` to adjust volume instead of as an argument on `Play()`.
|
||||
|
||||
### Requiring an open source attribution (BSD) to `libsamplerate`
|
||||
|
||||
Native Audio is now powered by `libsamplerate`, required for the minimum latency without noticable compromise on audio quality!
|
||||
Please visit the [how to use](http://exceed7.com/native-audio/how-to-use.html) page for details.
|
||||
|
||||
### Initialize, Load, Play now has an option argument.
|
||||
|
||||
It provides various customization which you can read in the website or in code comment/Intellisense.
|
||||
|
||||
### Completely new Android underlying program : OpenSL ES and the AudioTrack customization.
|
||||
|
||||
Now it is crucial to know that Android requests 3 AudioTracks by default and you can change this with the initialization options.
|
||||
Increasing this number increases concurrency but with consequence. Please visit [the homepage](http://exceed7.com/native_audio) and read carefully.
|
||||
|
||||
### Audio format requirement relaxed only on Android
|
||||
|
||||
In Android thanks to `libsamplerate` you can use any rate now, but it is not on iOS yet. For now, stick with **16-bit PCM stereo 44100Hz .wav** file.
|
||||
|
||||
# [1.0.0] - 2018-04-13
|
||||
|
||||
The first release.
|
||||
|
||||
# On Investigation
|
||||
|
||||
Consider this section a bonus. They are draft of things that came to my mind. It may not happen, so do not hope or expect them.
|
||||
|
||||
### Buffer underrun detector + auto fix
|
||||
|
||||
Currently the big problem on both normal Unity and Native Audio is that some phones (Mostly Chinese, Huawei Mate / P20, MeiZu) reports wrong optimal buffer size that the phone itself cannot handle and ended up craking audio. This is called buffer underrun. At the same time increasing buffer size may increase latency.
|
||||
|
||||
The next problem is could we detect buffer underrun occuring programmatically, not using our ears? I have been thinking of an "autocalibrator" where it test out (secretly, in silence) if the underrun occurs and adjust buffer size accordingly until that is fixed.
|
||||
|
||||
Each time of the adjustment Native Audio have to reinitialize all audio sources. This is quite an expensive operation.
|
||||
|
||||
### Faster Unity -> native audio memory copy
|
||||
|
||||
Coming with "using Unity's imported audio data" support in 4.0.0 is a costly memory copy. I would like to use `unsafe` or GC pinning in some ways to make the native side able to access memory in Unity without copy. Unsafe code will be wrapped in NativeAudio's unsafe assembly definition file if it is implemented.
|
||||
|
||||
### [iOS] Resampler
|
||||
|
||||
Similar to the current Android side, we will resampling all audio to match the device's preferred sampling rate so we can reduce the hardware's work as much as possible. It will also use the libsamplerate.
|
||||
|
||||
Currently we still require 44100Hz audio because even at Android side it is able to resample to any rate in iOS we still have a fixed sample rate player. When this feature arrives, we are finally able to use any sampling rate of the .wav file. Then from that point onwards it is recommended to go for 48000Hz since phones in the future is likely to use this rate, and with that those players will not have to spend time resampling + get the true quality audio file.
|
||||
|
||||
### [Android] AAudio support via Oboe
|
||||
|
||||
Big news! (https://www.youtube.com/watch?v=csfHAbr5ilI)
|
||||
|
||||
It seems that "Oboe" is now out of developer preview. This is Google-made C++ audio library for Android that seems to do exactly what Native Audio wants to do.
|
||||
|
||||
Including the AAudio and OpenSL ES fallback thing I intended to do. Anyways, it needs to pass my latency comparison with the current way first and I will let you know the result when that's done. If it is equal or lower I will switch to Oboe implementation. Then we all will get automatic **AAudio** support. Wow!
|
||||
|
||||
### PC Support
|
||||
|
||||
PC is also known for outputting slow Unity audio. But I will have to learn much more about PC's native audio first.
|
||||
|
||||
### Samsung SAPA support
|
||||
|
||||
This rather obscure Samsung-only API apparently could play audio faster than what I could with pure native OpenSL ES from my brief test. It would be great if we could somehow supports this as Samsung phones are taking all the top 10 most popular phones in many countries.
|
||||
|
||||
### Nintendo Switch support
|
||||
|
||||
Depending on how successful I as a game developer can be after finishing the current game, the next game I want to make a Nintendo Switch exclusive game. And I will definitely take Native Audio with me. Let's see what Switch API offers and how much latency Unity adds to it.
|
||||
|
||||
But this is not a guarantee because my current game is the last try, if I can't make a living with it I will go to day job and likely cannot continue making that game on Switch. And I will likely not try to support other platforms that cannot be field-tested by my own game.
|
||||
|
||||
### No-copy audio loading utilizing [`NativeArray<T>`](https://docs.unity3d.com/ScriptReference/Unity.Collections.NativeArray_1.html)
|
||||
|
||||
Native Audio currently :
|
||||
|
||||
1. Do [`AudioClip.GetData`](https://docs.unity3d.com/ScriptReference/AudioClip.GetData.html) to an imported `AudioClip`. This requires an allocated `float[]` array.
|
||||
2. Send that array's pointer to native side, native side then copy in C++ (`memcpy`) it to not rely on Unity side anymore. But you now have 2x cost of uncompressed audio at this moment.
|
||||
3. The Unity side can now let the GC collect that `float[]` array to gain memory back to 1x uncompressed audio at native side, but collecting can also impact performance and garbage is bad in general.
|
||||
|
||||
The new workflow still does 1. (so technically that "get" is a "copy"), however it will be put in `NativeArray<float>` instead. Now the memory stays at C# always and also native side could use it via [`NativeArrayUnsafeUtility`](https://docs.unity3d.com/ScriptReference/Unity.Collections.LowLevel.Unsafe.NativeArrayUnsafeUtility.html). Here are some benefits :
|
||||
|
||||
- Unloading could be performed at C# side too (still dangerous as we need to make sure the native side is not currently reading it)
|
||||
- Various crashes due to allocating memory would be more debuggable as the C# and Unity could tell us, not the native side hard crashing with SIGSEGV.
|
||||
- We will not have to incur 2x uncompressed audio memory at any point, because we can allocate `NativeArray<float>` and make `GetData` see it as a target like `float[]`.
|
||||
- Loading must be faster theoretically.
|
||||
- "Less scary" as it enters managed realm. It feels more like the feature is supported/relied by Unity.
|
||||
|
||||
**This feature will move the lowest supported version to 2018.1**, as it was the first version to introduce [`NativeArray<T>`](https://docs.unity3d.com/ScriptReference/Unity.Collections.NativeArray_1.html).
|
||||
|
||||
(Reading/streaming memory out of `AudioClip` directly *without any copy* would be possible with DOTS Audio and its backend code introduced in 2019.1, but I think we need to see it ironed out more.)
|
||||
|
||||
But this feature has one difficult problem, the Secret Rabbit Code for resampling was easy to use if the memory is at native side being a native library. Now we must make it work on `NativeArray<float>` at C# instead. I don't know how many bugs and hardship I will face while doing that. (Resampled audio may need a differently sized destination, upsampling increases data for example.)
|
||||
7
Assets/3rd/NativeAudio/CHANGELOG.md.meta
Executable file
7
Assets/3rd/NativeAudio/CHANGELOG.md.meta
Executable file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4e087c09ae67e456dad699b11a42fc89
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/3rd/NativeAudio/Documentation~.zip
Executable file
BIN
Assets/3rd/NativeAudio/Documentation~.zip
Executable file
Binary file not shown.
7
Assets/3rd/NativeAudio/Documentation~.zip.meta
Executable file
7
Assets/3rd/NativeAudio/Documentation~.zip.meta
Executable file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8228f74f85841724b9e3ecb45b1e1f6b
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/3rd/NativeAudio/Icons.meta
Executable file
8
Assets/3rd/NativeAudio/Icons.meta
Executable file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 787b5edc4fb06460287f716efe3d6727
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/3rd/NativeAudio/Icons/icon.png
Executable file
BIN
Assets/3rd/NativeAudio/Icons/icon.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 123 KiB |
121
Assets/3rd/NativeAudio/Icons/icon.png.meta
Executable file
121
Assets/3rd/NativeAudio/Icons/icon.png.meta
Executable file
@@ -0,0 +1,121 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a4ceae08a667d46809ae665dc01613b9
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
externalObjects: {}
|
||||
serializedVersion: 9
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -100
|
||||
wrapU: -1
|
||||
wrapV: -1
|
||||
wrapW: -1
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 2
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- serializedVersion: 2
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- serializedVersion: 2
|
||||
buildTarget: iPhone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- serializedVersion: 2
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
41
Assets/3rd/NativeAudio/LICENSE.md
Executable file
41
Assets/3rd/NativeAudio/LICENSE.md
Executable file
@@ -0,0 +1,41 @@
|
||||
Native Audio
|
||||
Copyright (c) 2018, Sirawat Pitaksarit, Exceed7 Experiments <5argon@exceed7.com>
|
||||
All rights reserved.
|
||||
|
||||
Here is a list of license attribution that Native Audio uses. You have to do your part and abide to the rule as well as a part of the free software movement.
|
||||
|
||||
SRC (Secret Rabbit Code) by Erik de Castro Lopo is a resampler code that Native Audio uses in Android part when it encounter a device with native sampling rate other than 44100Hz. We agreed on using only 44100Hz audio and therefore the "fast path" player that will be made to fit the native sampling rate of your player's device need a compatible audio.
|
||||
|
||||
The license is 2-clause BSD which is really permissive and requires you only to put the attribution below in the game. (You are doing 2nd clause, and this file you are reading is me doing the 1st clause of the BSD license.)
|
||||
|
||||
The credit screen in your game would be perfect for this.
|
||||
Native Audio being a paid product does not require any attributions but is welcomed if you would like to do so.
|
||||
|
||||
---
|
||||
|
||||
libsamplerate (Secret Rabbit Code)
|
||||
Copyright (c) 2012-2016, Erik de Castro Lopo <erikd@mega-nerd.com>
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
7
Assets/3rd/NativeAudio/LICENSE.md.meta
Executable file
7
Assets/3rd/NativeAudio/LICENSE.md.meta
Executable file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: aec92a44020fe4df19bc661374c37930
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
9
Assets/3rd/NativeAudio/Plugins.meta
Executable file
9
Assets/3rd/NativeAudio/Plugins.meta
Executable file
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6f75f5c6399dc4fba8357d1556c3e0cd
|
||||
folderAsset: yes
|
||||
timeCreated: 1509542904
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
9
Assets/3rd/NativeAudio/Plugins/Android.meta
Executable file
9
Assets/3rd/NativeAudio/Plugins/Android.meta
Executable file
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dcdaf473f322e4d54bb3fd6cdaaaa40e
|
||||
folderAsset: yes
|
||||
timeCreated: 1509711700
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/3rd/NativeAudio/Plugins/Android/NativeAudio.aar
Executable file
BIN
Assets/3rd/NativeAudio/Plugins/Android/NativeAudio.aar
Executable file
Binary file not shown.
32
Assets/3rd/NativeAudio/Plugins/Android/NativeAudio.aar.meta
Executable file
32
Assets/3rd/NativeAudio/Plugins/Android/NativeAudio.aar.meta
Executable file
@@ -0,0 +1,32 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5ac3e92fd56584189b18df251e2d69ac
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
9
Assets/3rd/NativeAudio/Plugins/iOS.meta
Executable file
9
Assets/3rd/NativeAudio/Plugins/iOS.meta
Executable file
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ce90799b32e12442ba16b369c0b7e31c
|
||||
folderAsset: yes
|
||||
timeCreated: 1509542910
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
60
Assets/3rd/NativeAudio/Plugins/iOS/NativeAudio.h
Executable file
60
Assets/3rd/NativeAudio/Plugins/iOS/NativeAudio.h
Executable file
@@ -0,0 +1,60 @@
|
||||
// Native Audio
|
||||
// 5argon - Exceed7 Experiments
|
||||
// Problems/suggestions : 5argon@exceed7.com
|
||||
|
||||
#import <AVFoundation/AVFoundation.h>
|
||||
#import <OpenAl/al.h>
|
||||
#import <OpenAl/alc.h>
|
||||
#import "libsamplerate-0.1.9/src/samplerate.h"
|
||||
#include <AudioToolbox/AudioToolbox.h>
|
||||
|
||||
@interface NativeAudio : NSObject
|
||||
{
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ALuint left;
|
||||
ALuint right;
|
||||
int channels;
|
||||
int bitDepth;
|
||||
float lengthSeconds;
|
||||
} NativeAudioBufferIdPair;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ALuint left;
|
||||
ALuint right;
|
||||
} NativeAudioSourceIdPair;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
float volume;
|
||||
float pan;
|
||||
float offsetSeconds;
|
||||
bool trackLoop;
|
||||
} NativeAudioPlayAdjustment;
|
||||
|
||||
+ (int)Initialize;
|
||||
+ (int)LoadAudio:(char *)soundUrl resamplingQuality:(int)resamplingQuality;
|
||||
+ (int)SendByteArray:(char *)audioData audioSize:(int)audioSize channels:(int)channel samplingRate:(int)samplingRate resamplingQuality:(int)resamplingQuality;
|
||||
+ (int)PrepareAudio:(int)alBufferIndex IntoNativeSourceIndex:(int)nativeSourceIndex;
|
||||
+ (int)PlayAudio:(int)alBufferIndex NativeSourceIndex:(int)nativeSourceIndex Adjustment:(NativeAudioPlayAdjustment)playAdjustment;
|
||||
+ (void)PlayAudioWithNativeSourceIndex:(int)nativeSourceIndex Adjustment:(NativeAudioPlayAdjustment)playAdjustment;
|
||||
+ (void)UnloadAudio:(int)index;
|
||||
+ (float)LengthByAudioBuffer:(int)index;
|
||||
+ (void)StopAudio:(int)nativeSourceIndex;
|
||||
|
||||
+ (void)SetVolume:(float)volume OnNativeSourceIndex:(int)nativeSourceIndex;
|
||||
+ (void)SetPan:(float)pan OnNativeSourceIndex:(int)nativeSourceIndex;
|
||||
|
||||
+ (void)GetDeviceAudioInformation: (double*)interopArray OutputDeviceEnumArray:(int*) outputDeviceEnumArray;
|
||||
|
||||
+ (int)GetNativeSource:(int)index;
|
||||
|
||||
+ (float)GetPlaybackTimeOfNativeSourceIndex:(int)nativeSourceIndex;
|
||||
+ (void)SetPlaybackTimeOfNativeSourceIndex:(int)nativeSourceIndex Offset:(float)offsetSeconds;
|
||||
+ (void)Pause:(int)nativeSourceIndex;
|
||||
+ (void)Resume:(int)nativeSourceIndex;
|
||||
|
||||
@end
|
||||
104
Assets/3rd/NativeAudio/Plugins/iOS/NativeAudio.h.meta
Executable file
104
Assets/3rd/NativeAudio/Plugins/iOS/NativeAudio.h.meta
Executable file
@@ -0,0 +1,104 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 13afe555efd2440dc91f0b7316637e3c
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
'': Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Android: 1
|
||||
Exclude Editor: 1
|
||||
Exclude Linux: 1
|
||||
Exclude Linux64: 1
|
||||
Exclude LinuxUniversal: 1
|
||||
Exclude OSXUniversal: 1
|
||||
Exclude Win: 1
|
||||
Exclude Win64: 1
|
||||
Exclude iOS: 0
|
||||
- first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: ARMv7
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
DefaultValueInitialized: true
|
||||
OS: AnyOS
|
||||
- first:
|
||||
Facebook: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Facebook: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Linux
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: x86
|
||||
- first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: LinuxUniversal
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: None
|
||||
- first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CompileFlags:
|
||||
FrameworkDependencies:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
770
Assets/3rd/NativeAudio/Plugins/iOS/NativeAudio.mm
Executable file
770
Assets/3rd/NativeAudio/Plugins/iOS/NativeAudio.mm
Executable file
@@ -0,0 +1,770 @@
|
||||
// Native Audio
|
||||
// 5argon - Exceed7 Experiments
|
||||
// Problems/suggestions : 5argon@exceed7.com
|
||||
|
||||
// Special thanks to Con for written this wonderful OpenAL tutorial : http://ohno789.blogspot.com/2013/08/playing-audio-samples-using-openal-on.html
|
||||
|
||||
#import "NativeAudio.h"
|
||||
|
||||
//#define LOG_NATIVE_AUDIO
|
||||
|
||||
@implementation NativeAudio
|
||||
|
||||
static ALCdevice *openALDevice;
|
||||
static ALCcontext *openALContext;
|
||||
|
||||
//OpenAL sources starts at number 2400
|
||||
//Hard limit specified by the library is that we can use up to 32 sources.
|
||||
#define kMaxConcurrentSources 32
|
||||
|
||||
//We split stereo to separated sources, so we could do "balance panning" by adjusting each source's volume and without messing with OpenAL's positional audio to simulate panning.
|
||||
//Unfortunately this reduces the usable sources from 32 to 16.
|
||||
|
||||
//For some reason, OpenAL prints this
|
||||
//2019-03-16 00:02:09.703867+0700 ProductName[239:4538] AUBase.cpp:832:DispatchSetProperty: ca_require: ValidFormat(inScope, inElement, newDesc) InvalidFormat
|
||||
//Only while playing an audio rapidly over a certain frequency, once every 16th play, and cause only left ear to be audible at that play O_o
|
||||
//I am not sure what is going on or is it OpenAL's bug, but reducing it to 15 works O_o
|
||||
//Something must be defective at that 32th source, and that belongs to the right ear by our stereo splitting gymnastic explained earlier. I don't know the reason, but for now please bear with 1 less source.
|
||||
//Wtf...
|
||||
#define kHalfMaxConcurrentSources 15
|
||||
|
||||
//OpenAL buffer index starts at number 2432. (Now you know then source limit is implicitly 32)
|
||||
//This number will be remembered in NativeAudioPointer at managed side.
|
||||
//As far as I know there is no limit. I can allocate way over 500 sounds and it does not seems to cause any bad things.
|
||||
//But of course every sound will cost memory and that should be your real limit.
|
||||
//This is limit for just in case someday we discover a real hard limit, then Native Audio could warn us.
|
||||
#define kMaxBuffers 1024
|
||||
|
||||
#define fixedMixingRate 24000
|
||||
|
||||
//Error when this goes to max
|
||||
static int bufferAllocationCount = 0;
|
||||
//Never reset
|
||||
static int runningBufferAllocationNumber = 0;
|
||||
|
||||
static NativeAudioSourceIdPair* nasips;
|
||||
static NativeAudioBufferIdPair* nabips;
|
||||
|
||||
+(void) naHandleInterruption: (NSNotification*) notification
|
||||
{
|
||||
id audioInterruption = [[notification userInfo] valueForKey:AVAudioSessionInterruptionTypeKey];
|
||||
if(audioInterruption != NULL)
|
||||
{
|
||||
AVAudioSessionInterruptionType typeKey = (AVAudioSessionInterruptionType) [audioInterruption integerValue];
|
||||
if(typeKey == AVAudioSessionInterruptionTypeBegan)
|
||||
{
|
||||
//NSLog(@"--- INTERRUPTION ---");
|
||||
alcMakeContextCurrent(NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
//There is an iOS bug.. if you end the incoming call TOO FAST or unlucky (?) then end interruption won't be called lol
|
||||
//In that case we handle it with device becoming active notification instead.
|
||||
//NSLog(@"--- END INTERRUPTION ---");
|
||||
alcMakeContextCurrent(openALContext);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+(void) naDidBecomeActive: (NSNotification*) notification
|
||||
{
|
||||
//NSLog(@"--- END INTERRUPTION (interruption end bugged) ---");
|
||||
//If the context was set before on interruption,
|
||||
//I think it is fine to set it again.
|
||||
alcMakeContextCurrent(openALContext);
|
||||
}
|
||||
|
||||
+ (AudioFileID) openAudioFile:(NSString *)audioFilePathAsString
|
||||
{
|
||||
NSURL *audioFileURL = [NSURL fileURLWithPath:audioFilePathAsString];
|
||||
|
||||
AudioFileID afid;
|
||||
OSStatus openAudioFileResult = AudioFileOpenURL((__bridge CFURLRef)audioFileURL, kAudioFileReadPermission, 0, &afid);
|
||||
if (0 != openAudioFileResult)
|
||||
{
|
||||
NSLog(@"An error occurred when attempting to open the audio file %@: %d", audioFilePathAsString, (int)openAudioFileResult);
|
||||
}
|
||||
|
||||
return afid;
|
||||
}
|
||||
|
||||
+ (UInt32) getSizeOfAudioComponent:(AudioFileID)afid
|
||||
{
|
||||
UInt64 audioDataSize = 0;
|
||||
UInt32 propertySize = sizeof(UInt64);
|
||||
|
||||
OSStatus getSizeResult = AudioFileGetProperty(afid, kAudioFilePropertyAudioDataByteCount, &propertySize, &audioDataSize);
|
||||
|
||||
if (0 != getSizeResult)
|
||||
{
|
||||
NSLog(@"An error occurred when attempting to determine the size of audio file.");
|
||||
}
|
||||
|
||||
return (UInt32)audioDataSize;
|
||||
}
|
||||
|
||||
+ (AudioStreamBasicDescription) getDescription:(AudioFileID)afid
|
||||
{
|
||||
AudioStreamBasicDescription desc;
|
||||
UInt32 propertySize = sizeof(desc);
|
||||
|
||||
OSStatus getSizeResult = AudioFileGetProperty(afid, kAudioFilePropertyDataFormat, &propertySize, &desc);
|
||||
|
||||
if (0 != getSizeResult)
|
||||
{
|
||||
NSLog(@"An error occurred when attempting to determine the property of audio file.");
|
||||
}
|
||||
|
||||
return desc;
|
||||
}
|
||||
|
||||
+ (int) Initialize
|
||||
{
|
||||
openALDevice = alcOpenDevice(NULL);
|
||||
openALContext = alcCreateContext(openALDevice, NULL);
|
||||
|
||||
/*
|
||||
ALCint attributes[] =
|
||||
{
|
||||
ALC_FREQUENCY, fixedMixingRate
|
||||
};
|
||||
*/
|
||||
//openALContext = alcCreateContext(openALDevice, attributes);
|
||||
|
||||
alcMakeContextCurrent(openALContext);
|
||||
|
||||
NSNotificationCenter* notiCenter = [NSNotificationCenter defaultCenter];
|
||||
//This is for handling phone calls, etc. Unity already handles AVAudioSession I think, we then handle OpenAL additionally.
|
||||
[notiCenter addObserver:self selector:@selector(naHandleInterruption:) name:AVAudioSessionInterruptionNotification object:NULL];
|
||||
|
||||
//This is to handle iOS bug where if you end the phone call too fast or unlucky the interruption ended will not be called.
|
||||
//So DidBecomeActive will be an another safety net for us. Interruption began can't be missed I think, so it is safe
|
||||
//not to register WillResignActive.. (?)
|
||||
//[notiCenter addObserver:self selector:@selector(naWillResignActive:) name:UIApplicationWillResignActiveNotification object:NULL];
|
||||
[notiCenter addObserver:self selector:@selector(naDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:NULL];
|
||||
|
||||
nasips = (NativeAudioSourceIdPair*) malloc(sizeof(NativeAudioSourceIdPair) * kHalfMaxConcurrentSources);
|
||||
|
||||
//"nabip" is for that just a single number can maps to 2 number (L and R buffer)
|
||||
//The upper limit of buffers is a whopping 1024, this will take 4096 bytes = 0.0041MB
|
||||
//I tried the realloc way, but it strangely realloc something related to text display Unity is using and crash the game (bug?)
|
||||
//Might be related to that the memory area is in the heap (static)
|
||||
nabips = (NativeAudioBufferIdPair*) malloc(sizeof(NativeAudioBufferIdPair*) * kMaxBuffers);
|
||||
|
||||
ALuint sourceIDL;
|
||||
ALuint sourceIDR;
|
||||
for (int i = 0; i < kHalfMaxConcurrentSources; i++) {
|
||||
alGenSources(1, &sourceIDL);
|
||||
alSourcei(sourceIDL, AL_SOURCE_RELATIVE, AL_TRUE);
|
||||
alSourcef(sourceIDL, AL_REFERENCE_DISTANCE, 1.0f);
|
||||
alSourcef(sourceIDL, AL_MAX_DISTANCE, 2.0f);
|
||||
alGenSources(1, &sourceIDR);
|
||||
alSourcei(sourceIDR, AL_SOURCE_RELATIVE, AL_TRUE);
|
||||
alSourcef(sourceIDR, AL_REFERENCE_DISTANCE, 1.0f);
|
||||
alSourcef(sourceIDR, AL_MAX_DISTANCE, 2.0f);
|
||||
|
||||
NativeAudioSourceIdPair nasip;
|
||||
nasip.left = sourceIDL;
|
||||
nasip.right = sourceIDR;
|
||||
nasips[i] = nasip;
|
||||
|
||||
//roll off factor is default to 1.0
|
||||
}
|
||||
|
||||
alDistanceModel(AL_LINEAR_DISTANCE_CLAMPED);
|
||||
|
||||
#ifdef LOG_NATIVE_AUDIO
|
||||
NSLog(@"Initialized OpenAL");
|
||||
#endif
|
||||
|
||||
return 0; //0 = success
|
||||
}
|
||||
|
||||
+ (void) UnloadAudio: (int) index
|
||||
{
|
||||
ALuint bufferIdL = (ALuint)nabips[index].left;
|
||||
ALuint bufferIdR = (ALuint)nabips[index].right;
|
||||
alDeleteBuffers(1, &bufferIdL);
|
||||
alDeleteBuffers(1, &bufferIdR);
|
||||
bufferAllocationCount -= 2;
|
||||
}
|
||||
|
||||
+ (int) LoadAudio:(char*) soundUrl resamplingQuality:(int) resamplingQuality
|
||||
{
|
||||
if (bufferAllocationCount > kMaxBuffers) {
|
||||
NSLog(@"Fail to load because OpenAL reaches the maximum sound buffers limit. Raise the limit or use unloading to free up the quota.");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(openALDevice == nil)
|
||||
{
|
||||
[NativeAudio Initialize];
|
||||
}
|
||||
|
||||
NSString *audioFilePath = [NSString stringWithFormat:@"%@/Data/Raw/%@", [[NSBundle mainBundle] resourcePath], [NSString stringWithUTF8String:soundUrl] ];
|
||||
|
||||
AudioFileID afid = [NativeAudio openAudioFile:audioFilePath];
|
||||
AudioStreamBasicDescription loadingAudioDescription = [NativeAudio getDescription:afid];
|
||||
|
||||
#ifdef LOG_NATIVE_AUDIO
|
||||
NSLog(@"Input description : Flags %u Bits/channel %u FormatID %u SampleRate %f Bytes/Frame %u Bytes/Packet %u Channels/Frame %u Frames/Packet %u",
|
||||
(unsigned int)loadingAudioDescription.mFormatFlags,
|
||||
(unsigned int)loadingAudioDescription.mBitsPerChannel,
|
||||
(unsigned int)loadingAudioDescription.mFormatID,
|
||||
loadingAudioDescription.mSampleRate,
|
||||
(unsigned int)loadingAudioDescription.mBytesPerFrame,
|
||||
(unsigned int)loadingAudioDescription.mBytesPerPacket,
|
||||
(unsigned int)loadingAudioDescription.mChannelsPerFrame,
|
||||
(unsigned int)loadingAudioDescription.mFramesPerPacket
|
||||
);
|
||||
#endif
|
||||
|
||||
//UInt32 bytesPerFrame = loadingAudioDescription.mBytesPerFrame;
|
||||
UInt32 channel = loadingAudioDescription.mChannelsPerFrame;
|
||||
|
||||
//This is originally float?
|
||||
//NSLog(@"LOADED RATE : %f", loadingAudioDescription.mSampleRate);
|
||||
//NSLog(@"CHANN : %u", (unsigned int)loadingAudioDescription.mChannelsPerFrame);
|
||||
//NSLog(@"BPF : %u", (unsigned int)loadingAudioDescription.mBytesPerFrame);
|
||||
UInt32 samplingRate = (UInt32) loadingAudioDescription.mSampleRate;
|
||||
|
||||
//Next, load the original audio
|
||||
UInt32 audioSize = [NativeAudio getSizeOfAudioComponent:afid];
|
||||
char *audioData = (char*)malloc(audioSize);
|
||||
|
||||
OSStatus readBytesResult = AudioFileReadBytes(afid, false, 0, &audioSize, audioData);
|
||||
|
||||
if (0 != readBytesResult)
|
||||
{
|
||||
NSLog(@"ERROR : AudioFileReadBytes %@: %d", audioFilePath, (int)readBytesResult);
|
||||
}
|
||||
AudioFileClose(afid);
|
||||
|
||||
int loadedIndex = [NativeAudio SendByteArray:audioData audioSize:audioSize channels:channel samplingRate:samplingRate resamplingQuality:resamplingQuality];
|
||||
|
||||
if (audioData)
|
||||
{
|
||||
free(audioData);
|
||||
audioData = NULL;
|
||||
}
|
||||
|
||||
return loadedIndex;
|
||||
}
|
||||
|
||||
//Can call from Unity to give Unity-loaded AudioClip!!
|
||||
+ (int) SendByteArray:(char*) audioData audioSize:(int)audioSize channels:(int)channel samplingRate:(int)samplingRate resamplingQuality:(int)resamplingQuality
|
||||
{
|
||||
//I don't know if an "optimal rate" exist on Apple device or not.
|
||||
|
||||
//Enable either one to make the 24000 that Unity choose matters, and resample our audio to match
|
||||
//This is always 24000 for all Unity games as far as I tried. (why?)
|
||||
//int rate = (int)[[AVAudioSession sharedInstance]sampleRate];
|
||||
//int rate = fixedMixingRate;
|
||||
|
||||
//Enable this to not care, and just put our audio to OpenAL without resampling.
|
||||
int rate = samplingRate;
|
||||
|
||||
if(samplingRate != rate)
|
||||
{
|
||||
float ratio = rate / ((float) samplingRate);
|
||||
|
||||
//byte -> short
|
||||
size_t shortLength = audioSize / 2;
|
||||
|
||||
size_t resampledArrayShortLength = (size_t)floor(shortLength * ratio);
|
||||
resampledArrayShortLength += resampledArrayShortLength % 2;
|
||||
|
||||
NSLog(@"Resampling! Ratio %f / Length %zu -> %zu", ratio, shortLength, resampledArrayShortLength);
|
||||
|
||||
float *floatArrayForSRCIn = (float*)calloc(shortLength, sizeof(float *));
|
||||
float *floatArrayForSRCOut = (float*)calloc(resampledArrayShortLength, sizeof(float *));
|
||||
|
||||
//SRC takes float data.
|
||||
src_short_to_float_array((short*)audioData, floatArrayForSRCIn, (int)shortLength);
|
||||
|
||||
SRC_DATA dataForSRC;
|
||||
dataForSRC.data_in = floatArrayForSRCIn;
|
||||
dataForSRC.data_out = floatArrayForSRCOut;
|
||||
|
||||
dataForSRC.input_frames = shortLength / channel;
|
||||
dataForSRC.output_frames = resampledArrayShortLength / channel;
|
||||
dataForSRC.src_ratio = ratio; //This is in/out and it is less than 1.0 in the case of upsampling.
|
||||
|
||||
//Use the SRC library. Thank you Eric!
|
||||
int error = src_simple(&dataForSRC, resamplingQuality, channel);
|
||||
if(error != 0)
|
||||
{
|
||||
[NSException raise:@"Native Audio Error" format:@"Resampling error with code %s", src_strerror(error)];
|
||||
}
|
||||
|
||||
short* shortData = (short*)calloc(resampledArrayShortLength, sizeof(short *));
|
||||
src_float_to_short_array(floatArrayForSRCOut, shortData, (int)resampledArrayShortLength);
|
||||
shortLength = resampledArrayShortLength;
|
||||
|
||||
//Replace the input argument with a new calloc.
|
||||
//We don't release the input argument, but in the case of resample we need to release it too.
|
||||
|
||||
audioData = (char*)shortData;
|
||||
audioSize = (int)(resampledArrayShortLength * 2);
|
||||
|
||||
free(floatArrayForSRCIn);
|
||||
free(floatArrayForSRCOut);
|
||||
}
|
||||
|
||||
//I have a failed attempt to use AudioConverterFillComplexBuffer, a method where an entire internet does not have a single understandable working example.
|
||||
//If you want to do the "elegant" conversion, this is a very important read. (terminology, etc.)
|
||||
//https://developer.apple.com/documentation/coreaudio/audiostreambasicdescription
|
||||
//The deinterleaving conversion below is super noob and ugly... but it works.
|
||||
|
||||
UInt32 bytesPerFrame = 2 * channel; // We fixed to 16-bit audio so that's that.
|
||||
UInt32 step = bytesPerFrame / channel;
|
||||
char *audioDataL = (char*)malloc(audioSize/channel);
|
||||
char *audioDataR = (char*)malloc(audioSize/channel);
|
||||
|
||||
//NSLog(@"LR Length %d AudioSize %d Channel %d" , audioSize/channel, audioSize, channel );
|
||||
|
||||
//This routine ensure no matter what the case `audioData` is completely migrated to the new L R separated buffer.
|
||||
if(channel == 2)
|
||||
{
|
||||
BOOL rightInterleave = false;
|
||||
// 0 1 2 3 4 5 6 7 8 9 101112131415
|
||||
// 0 1 0 1 2 3 2 3 4 5 4 5 6 7 6 7
|
||||
// L L R R L L R R L L R R L L R R
|
||||
for(int i = 0; i < audioSize; i += step)
|
||||
{
|
||||
int baseIndex = (i/bytesPerFrame) * step; //the divide will get rid of fractions first
|
||||
//NSLog(@"%d %d %u %d",i,baseIndex, (unsigned int)step, rightInterleave);
|
||||
for(int j = 0; j < step ; j++)
|
||||
{
|
||||
if(!rightInterleave)
|
||||
{
|
||||
audioDataL[baseIndex + j] = audioData[i + j];
|
||||
}
|
||||
else
|
||||
{
|
||||
audioDataR[baseIndex + j] = audioData[i + j];
|
||||
}
|
||||
}
|
||||
rightInterleave = !rightInterleave;
|
||||
}
|
||||
}
|
||||
else if(channel == 1)
|
||||
{
|
||||
for(int i = 0; i < audioSize; i++)
|
||||
{
|
||||
audioDataL[i] = audioData[i];
|
||||
audioDataR[i] = audioData[i];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//throw?
|
||||
[NSException raise:@"Native Audio Error" format:@"Your audio is not either 1 or 2 channels!"];
|
||||
}
|
||||
|
||||
ALuint bufferIdL;
|
||||
alGenBuffers(1, &bufferIdL);
|
||||
bufferAllocationCount++;
|
||||
alBufferData(bufferIdL, AL_FORMAT_MONO16, audioDataL, audioSize/channel, rate);
|
||||
|
||||
ALuint bufferIdR;
|
||||
alGenBuffers(1, &bufferIdR);
|
||||
bufferAllocationCount++;
|
||||
alBufferData(bufferIdR, AL_FORMAT_MONO16, audioDataR, audioSize/channel, rate);
|
||||
|
||||
//alBufferData should be copying the audio to memory, so we can safely release them now.
|
||||
if (audioDataL)
|
||||
{
|
||||
free(audioDataL);
|
||||
audioDataL = NULL;
|
||||
}
|
||||
if (audioDataR)
|
||||
{
|
||||
free(audioDataR);
|
||||
audioDataR = NULL;
|
||||
}
|
||||
|
||||
if(samplingRate != rate)
|
||||
{
|
||||
//This is now the new calloc-ed memory from the resampler. We can remove it.
|
||||
free(audioData);
|
||||
|
||||
//Otherwise we cannot free the incoming data, since it is the same as it might be from C#.
|
||||
//We let C# GC handle it.
|
||||
}
|
||||
|
||||
runningBufferAllocationNumber++;
|
||||
|
||||
NativeAudioBufferIdPair nabip;
|
||||
nabip.left = bufferIdL;
|
||||
nabip.right = bufferIdR;
|
||||
|
||||
//Calculate and cache other data
|
||||
nabip.channels = channel;
|
||||
nabip.bitDepth = 16;
|
||||
|
||||
//This byte size is already stereo
|
||||
nabip.lengthSeconds = audioSize / (float)nabip.channels / (float)(nabip.bitDepth / 8) / (float)rate;
|
||||
|
||||
nabips[runningBufferAllocationNumber - 1] = nabip;
|
||||
|
||||
#ifdef LOG_NATIVE_AUDIO
|
||||
NSLog(@"Loaded OpenAL sound: %@ bufferId: L %d R %d size: %u",[NSString stringWithUTF8String:soundUrl], bufferIdL, bufferIdR, (unsigned int)audioSize);
|
||||
#endif
|
||||
|
||||
return runningBufferAllocationNumber - 1;
|
||||
}
|
||||
|
||||
|
||||
static ALuint sourceCycleIndex = 0;
|
||||
|
||||
//Sources are selected sequentially.
|
||||
//Searching for non-playing source might be a better idea to reduce sound cutoff chance
|
||||
//(For example, by the time we reach 33rd sound some sound earlier must have finished playing, and we can select that one safely)
|
||||
//But for performance concern I don't want to run a for...in loop everytime I play sounds.
|
||||
//The reason of "half" of total available sources is this is only for the left channel. The right channel will be the left's index *2
|
||||
+ (int) CycleThroughSources
|
||||
{
|
||||
sourceCycleIndex = (sourceCycleIndex + 1) % kHalfMaxConcurrentSources;
|
||||
return sourceCycleIndex;
|
||||
}
|
||||
|
||||
+ (float)LengthByAudioBuffer:(int)index
|
||||
{
|
||||
return nabips[index].lengthSeconds;
|
||||
}
|
||||
|
||||
+ (void)StopAudio:(int) nativeSourceIndex
|
||||
{
|
||||
alSourceStop(nasips[nativeSourceIndex].left);
|
||||
alSourceStop(nasips[nativeSourceIndex].right);
|
||||
}
|
||||
|
||||
// Confirm an incoming index. If invalid, fallback to round-robin.
|
||||
// At C# side some methods sending in -1 to be intentionally invalid here so you get round-robin.
|
||||
+ (int)GetNativeSource:(int) index
|
||||
{
|
||||
//-1 or invalid source cycle will get a round robin play.
|
||||
if(index >= kHalfMaxConcurrentSources || index < 0)
|
||||
{
|
||||
index = [NativeAudio CycleThroughSources];
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
//Not only called from C# manual prepare, also internally from normal play as well.
|
||||
+ (void)PrepareAudio:(int) audioBufferIndex IntoNativeSourceIndex:(int) nativeSourceIndex
|
||||
{
|
||||
|
||||
NativeAudioSourceIdPair nasip = nasips[nativeSourceIndex];
|
||||
NativeAudioBufferIdPair nabip = nabips[audioBufferIndex];
|
||||
|
||||
//We cannot change audio source if it is playing, it will fail silently.
|
||||
alSourceStop(nasip.left);
|
||||
alSourceStop(nasip.right);
|
||||
|
||||
alSourcei(nasip.left, AL_BUFFER, nabip.left);
|
||||
alSourcei(nasip.right, AL_BUFFER, nabip.right);
|
||||
#ifdef LOG_NATIVE_AUDIO
|
||||
NSLog(@"Pairing OpenAL buffer: L %d R %d with source : L %d R %d", nabips[audioBufferIndex].left, nabips[audioBufferIndex].right, nasips[nativeSourceIndex].left, nasips[nativeSourceIndex].right);
|
||||
#endif
|
||||
}
|
||||
|
||||
//This is playing "blindly", believing that the audio assigned is correct. Must be used immediately after prepare for reliable result.
|
||||
//It is separated to allow extreme micro optimization where you prepare in anticipation, then play later believing that
|
||||
//it is still valid.
|
||||
+ (void)PlayAudioWithNativeSourceIndex:(int) nativeSourceIndex Adjustment:(NativeAudioPlayAdjustment) playAdjustment
|
||||
{
|
||||
NativeAudioSourceIdPair nasip = nasips[nativeSourceIndex];
|
||||
|
||||
//If we call play before the adjust, you might hear the pre-adjusted audio.
|
||||
//It is THAT fast, even in between lines of code you can hear the audio already.
|
||||
[NativeAudio SetVolume:playAdjustment.volume OnNativeSourceIndex:nativeSourceIndex];
|
||||
[NativeAudio SetPan:playAdjustment.pan OnNativeSourceIndex:nativeSourceIndex];
|
||||
alSourcef(nasips[nativeSourceIndex].left, AL_SEC_OFFSET, playAdjustment.offsetSeconds);
|
||||
alSourcef(nasips[nativeSourceIndex].right, AL_SEC_OFFSET, playAdjustment.offsetSeconds);
|
||||
alSourcei(nasips[nativeSourceIndex].left, AL_LOOPING, playAdjustment.trackLoop ? AL_TRUE : AL_FALSE);
|
||||
alSourcei(nasips[nativeSourceIndex].right, AL_LOOPING, playAdjustment.trackLoop ? AL_TRUE : AL_FALSE);
|
||||
|
||||
ALint state;
|
||||
//alSourcePlay on a paused source results in RESUME, we need to stop it to start over.
|
||||
alGetSourcei(nasips[nativeSourceIndex].left, AL_SOURCE_STATE, &state);
|
||||
if(state == AL_PAUSED)
|
||||
{
|
||||
alSourceStop(nasip.left);
|
||||
alSourceStop(nasip.right);
|
||||
}
|
||||
alSourcePlay(nasip.left);
|
||||
alSourcePlay(nasip.right);
|
||||
|
||||
#ifdef LOG_NATIVE_AUDIO
|
||||
NSLog(@"Played OpenAL at source index : L %d R %d", nasip.left, nasip.right);
|
||||
#endif
|
||||
}
|
||||
|
||||
+ (void)SetVolume:(float) volume OnNativeSourceIndex:(int) nativeSourceIndex
|
||||
{
|
||||
#ifdef LOG_NATIVE_AUDIO
|
||||
NSLog(@"Set Volume %f L %d R %d", volume, nasips[nativeSourceIndex].left, nasips[nativeSourceIndex].right);
|
||||
#endif
|
||||
alSourcef(nasips[nativeSourceIndex].left, AL_GAIN, volume);
|
||||
alSourcef(nasips[nativeSourceIndex].right, AL_GAIN, volume);
|
||||
}
|
||||
|
||||
//With OpenAL's 3D design, to achieve 2D panning we have deinterleaved the stereo file
|
||||
//into 2 separated mono sources positioned left and right of the listener. This achieve the same stereo effect.
|
||||
//Gain is already used in SetVolume, we will use a linear attenuation for panning.
|
||||
+ (void)SetPan:(float) pan OnNativeSourceIndex:(int) nativeSourceIndex
|
||||
{
|
||||
#ifdef LOG_NATIVE_AUDIO
|
||||
NSLog(@"Set Pan %f L %d R %d", pan, nasips[nativeSourceIndex].left, nasips[nativeSourceIndex].right);
|
||||
#endif
|
||||
//Left channel attenuate linearly on right pan
|
||||
alSource3f(nasips[nativeSourceIndex].left, AL_POSITION, -1 - (MAX(pan, 0)), 0, 0);
|
||||
//Right channel attenuate linearly on left pan
|
||||
alSource3f(nasips[nativeSourceIndex].right, AL_POSITION, 1 - (MIN(pan, 0)), 0, 0);
|
||||
}
|
||||
|
||||
//Only one side is enough?
|
||||
+ (float)GetPlaybackTimeOfNativeSourceIndex:(int) nativeSourceIndex
|
||||
{
|
||||
ALfloat returnValue;
|
||||
alGetSourcef(nasips[nativeSourceIndex].left, AL_SEC_OFFSET, &returnValue);
|
||||
#ifdef LOG_NATIVE_AUDIO
|
||||
NSLog(@"Get Playback Time %f", returnValue);
|
||||
#endif
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
+(void)SetPlaybackTimeOfNativeSourceIndex:(int) nativeSourceIndex Offset:(float)offsetSeconds
|
||||
{
|
||||
alSourcef(nasips[nativeSourceIndex].left, AL_SEC_OFFSET, offsetSeconds);
|
||||
alSourcef(nasips[nativeSourceIndex].right, AL_SEC_OFFSET, offsetSeconds);
|
||||
ALint state;
|
||||
alGetSourcei(nasips[nativeSourceIndex].left, AL_SOURCE_STATE, &state);
|
||||
if(state == AL_STOPPED)
|
||||
{
|
||||
alSourcePlay(nasips[nativeSourceIndex].left);
|
||||
alSourcePlay(nasips[nativeSourceIndex].right);
|
||||
}
|
||||
#ifdef LOG_NATIVE_AUDIO
|
||||
NSLog(@"Set Playback Time %f", offsetSeconds);
|
||||
#endif
|
||||
}
|
||||
|
||||
+(void)Pause:(int)nativeSourceIndex
|
||||
{
|
||||
ALint state;
|
||||
alGetSourcei(nasips[nativeSourceIndex].left, AL_SOURCE_STATE, &state);
|
||||
if(state == AL_PLAYING)
|
||||
{
|
||||
alSourcePause(nasips[nativeSourceIndex].left);
|
||||
alSourcePause(nasips[nativeSourceIndex].right);
|
||||
}
|
||||
}
|
||||
|
||||
+(void) Resume:(int)nativeSourceIndex
|
||||
{
|
||||
ALint state;
|
||||
alGetSourcei(nasips[nativeSourceIndex].left, AL_SOURCE_STATE, &state);
|
||||
if(state == AL_PAUSED)
|
||||
{
|
||||
alSourcePlay(nasips[nativeSourceIndex].left);
|
||||
alSourcePlay(nasips[nativeSourceIndex].right);
|
||||
}
|
||||
}
|
||||
|
||||
//This is matched with what's defined at C#.
|
||||
typedef enum IosAudioPortType
|
||||
{
|
||||
//---Output---
|
||||
|
||||
/// <summary>
|
||||
/// Line-level output to the dock connector.
|
||||
/// </summary>
|
||||
LineOut = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Output to a wired headset.
|
||||
/// </summary>
|
||||
Headphones = 1,
|
||||
|
||||
/// <summary>
|
||||
/// Output to a speaker intended to be held near the ear.
|
||||
/// </summary>
|
||||
BuiltInReceiver = 2,
|
||||
|
||||
/// <summary>
|
||||
/// Output to the device's built-in speaker.
|
||||
/// </summary>
|
||||
BuiltInSpeaker = 3,
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Output to a device via the High-Definition Multimedia Interface (HDMI) specification.
|
||||
/// </summary>
|
||||
HDMI = 4,
|
||||
|
||||
/// <summary>
|
||||
/// Output to a remote device over AirPlay.
|
||||
/// </summary>
|
||||
AirPlay = 5,
|
||||
|
||||
/// <summary>
|
||||
/// Output to a Bluetooth Low Energy (LE) peripheral.
|
||||
/// </summary>
|
||||
BluetoothLE = 6,
|
||||
|
||||
/// <summary>
|
||||
/// Output to a Bluetooth A2DP device.
|
||||
/// </summary>
|
||||
BluetoothA2DP = 7,
|
||||
|
||||
//---Input---
|
||||
|
||||
/// <summary>
|
||||
/// Line-level input from the dock connector.
|
||||
/// </summary>
|
||||
LineIn = 8,
|
||||
|
||||
/// <summary>
|
||||
/// The built-in microphone on a device.
|
||||
/// </summary>
|
||||
BuiltInMic = 9,
|
||||
|
||||
/// <summary>
|
||||
/// A microphone that is built-in to a wired headset.
|
||||
/// </summary>
|
||||
HeadsetMic = 10,
|
||||
|
||||
//---Input-Output---
|
||||
|
||||
/// <summary>
|
||||
/// Input or output on a Bluetooth Hands-Free Profile device.
|
||||
/// </summary>
|
||||
BluetoothHFP = 11,
|
||||
|
||||
/// <summary>
|
||||
/// Input or output on a Universal Serial Bus device.
|
||||
/// </summary>
|
||||
UsbAudio = 12,
|
||||
|
||||
/// <summary>
|
||||
/// Input or output via Car Audio.
|
||||
/// </summary>
|
||||
CarAudio = 13,
|
||||
} IosAudioPortType;
|
||||
|
||||
//Interop array with C#, by having C# allocate large enough empty array and this one write to it..
|
||||
+(void) GetDeviceAudioInformation: (double*)interopArray OutputDeviceEnumArray:(int*) outputDeviceEnumArray
|
||||
{
|
||||
//Various shared audio session properties..
|
||||
AVAudioSession* sharedInstance = [AVAudioSession sharedInstance];
|
||||
interopArray[0] = [sharedInstance outputLatency];
|
||||
interopArray[1] = [sharedInstance sampleRate];
|
||||
interopArray[2] = [sharedInstance preferredSampleRate];
|
||||
interopArray[3] = [sharedInstance IOBufferDuration];
|
||||
interopArray[4] = [sharedInstance preferredIOBufferDuration];
|
||||
|
||||
//Output devices
|
||||
AVAudioSessionRouteDescription *routeDescription = [sharedInstance currentRoute];
|
||||
NSArray<AVAudioSessionPortDescription*> *outPorts = routeDescription.outputs;
|
||||
int i = 0;
|
||||
for (AVAudioSessionPortDescription *port in outPorts)
|
||||
{
|
||||
IosAudioPortType iapt;
|
||||
|
||||
if([port.portType isEqualToString:AVAudioSessionPortLineOut]) iapt = LineOut;
|
||||
else if([port.portType isEqualToString:AVAudioSessionPortHeadphones]) iapt = Headphones;
|
||||
else if([port.portType isEqualToString:AVAudioSessionPortBuiltInReceiver]) iapt = BuiltInReceiver;
|
||||
else if([port.portType isEqualToString:AVAudioSessionPortBuiltInSpeaker]) iapt = BuiltInSpeaker;
|
||||
else if([port.portType isEqualToString:AVAudioSessionPortHDMI]) iapt = HDMI;
|
||||
else if([port.portType isEqualToString:AVAudioSessionPortAirPlay]) iapt = AirPlay;
|
||||
else if([port.portType isEqualToString:AVAudioSessionPortBluetoothLE]) iapt = BluetoothLE;
|
||||
else if([port.portType isEqualToString:AVAudioSessionPortBluetoothA2DP]) iapt = BluetoothA2DP;
|
||||
else if([port.portType isEqualToString:AVAudioSessionPortLineIn]) iapt = LineIn;
|
||||
else if([port.portType isEqualToString:AVAudioSessionPortBuiltInMic]) iapt = BuiltInMic;
|
||||
else if([port.portType isEqualToString:AVAudioSessionPortHeadsetMic]) iapt = HeadsetMic;
|
||||
else if([port.portType isEqualToString:AVAudioSessionPortBluetoothHFP]) iapt = BluetoothHFP;
|
||||
else if([port.portType isEqualToString:AVAudioSessionPortUSBAudio]) iapt = UsbAudio;
|
||||
else if([port.portType isEqualToString:AVAudioSessionPortCarAudio]) iapt = CarAudio;
|
||||
|
||||
outputDeviceEnumArray[i] = iapt;
|
||||
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
extern "C" {
|
||||
|
||||
int _Initialize() {
|
||||
return [NativeAudio Initialize];
|
||||
}
|
||||
|
||||
void _GetDeviceAudioInformation(double* interopArray, int* outputDeviceEnumArray)
|
||||
{
|
||||
return [NativeAudio GetDeviceAudioInformation:interopArray OutputDeviceEnumArray: outputDeviceEnumArray];
|
||||
}
|
||||
|
||||
int _SendByteArray(char* byteArrayInput, int byteSize, int channels, int samplingRate, int resamplingQuality)
|
||||
{
|
||||
return [NativeAudio SendByteArray:byteArrayInput audioSize:byteSize channels:channels samplingRate:samplingRate resamplingQuality: resamplingQuality];
|
||||
}
|
||||
|
||||
int _LoadAudio(char* soundUrl, int resamplingQuality) {
|
||||
return [NativeAudio LoadAudio:soundUrl resamplingQuality: resamplingQuality];
|
||||
}
|
||||
|
||||
void _PrepareAudio(int bufferIndex, int nativeSourceIndex) {
|
||||
[NativeAudio PrepareAudio:bufferIndex IntoNativeSourceIndex:nativeSourceIndex];
|
||||
}
|
||||
|
||||
void _PlayAudioWithNativeSourceIndex(int nativeSourceIndex, NativeAudioPlayAdjustment playAdjustment) {
|
||||
[NativeAudio PlayAudioWithNativeSourceIndex:nativeSourceIndex Adjustment: playAdjustment];
|
||||
}
|
||||
|
||||
float _LengthByAudioBuffer(int bufferIndex) {
|
||||
return [NativeAudio LengthByAudioBuffer: bufferIndex];
|
||||
}
|
||||
|
||||
void _StopAudio(int nativeSourceIndex) {
|
||||
[NativeAudio StopAudio:nativeSourceIndex];
|
||||
}
|
||||
|
||||
void _SetVolume(int nativeSourceIndex, float volume){
|
||||
[NativeAudio SetVolume:volume OnNativeSourceIndex:nativeSourceIndex];
|
||||
}
|
||||
|
||||
void _SetPan(int nativeSourceIndex, float pan){
|
||||
[NativeAudio SetPan:pan OnNativeSourceIndex:nativeSourceIndex];
|
||||
}
|
||||
|
||||
float _GetPlaybackTime(int nativeSourceIndex){
|
||||
return [NativeAudio GetPlaybackTimeOfNativeSourceIndex: nativeSourceIndex];
|
||||
}
|
||||
|
||||
void _SetPlaybackTime(int nativeSourceIndex, float offsetSeconds){
|
||||
[NativeAudio SetPlaybackTimeOfNativeSourceIndex:nativeSourceIndex Offset: offsetSeconds];
|
||||
}
|
||||
|
||||
void _Pause(int nativeSourceIndex)
|
||||
{
|
||||
[NativeAudio Pause: nativeSourceIndex];
|
||||
}
|
||||
|
||||
void _Resume(int nativeSourceIndex)
|
||||
{
|
||||
[NativeAudio Resume: nativeSourceIndex];
|
||||
}
|
||||
|
||||
void _UnloadAudio(int index) {
|
||||
[NativeAudio UnloadAudio:index];
|
||||
}
|
||||
|
||||
int _GetNativeSource(int index)
|
||||
{
|
||||
[NativeAudio GetNativeSource:index];
|
||||
}
|
||||
}
|
||||
39
Assets/3rd/NativeAudio/Plugins/iOS/NativeAudio.mm.meta
Executable file
39
Assets/3rd/NativeAudio/Plugins/iOS/NativeAudio.mm.meta
Executable file
@@ -0,0 +1,39 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8e52755a9b825472bb085475a6904fc5
|
||||
timeCreated: 1509542889
|
||||
licenseType: Store
|
||||
PluginImporter:
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
platformData:
|
||||
data:
|
||||
first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
data:
|
||||
first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
data:
|
||||
first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
data:
|
||||
first:
|
||||
tvOS: tvOS
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9.meta
Executable file
8
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9.meta
Executable file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 13020eabcb9f849eea6f26ea5d9c5619
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
1
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/AUTHORS
Executable file
1
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/AUTHORS
Executable file
@@ -0,0 +1 @@
|
||||
Erik de Castro Lopo <erikd@mega-nerd.com>
|
||||
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/AUTHORS.meta
Executable file
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/AUTHORS.meta
Executable file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2ed8f02d622f1444eb0b0ec225035ad0
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
25
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/COPYING
Executable file
25
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/COPYING
Executable file
@@ -0,0 +1,25 @@
|
||||
Copyright (c) 2012-2016, Erik de Castro Lopo <erikd@mega-nerd.com>
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/COPYING.meta
Executable file
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/COPYING.meta
Executable file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0bd3d35e3a6e045bcb3fe65556436ae0
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg.meta
Executable file
8
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg.meta
Executable file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2d4a4a7c2e8b240f2b491929be9049f2
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
143
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg/compile
Executable file
143
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg/compile
Executable file
@@ -0,0 +1,143 @@
|
||||
#! /bin/sh
|
||||
# Wrapper for compilers which do not understand `-c -o'.
|
||||
|
||||
scriptversion=2009-04-28.21; # UTC
|
||||
|
||||
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009 Free Software
|
||||
# Foundation, Inc.
|
||||
# Written by Tom Tromey <tromey@cygnus.com>.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# This file is maintained in Automake, please report
|
||||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: compile [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Wrapper for compilers which do not understand `-c -o'.
|
||||
Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
|
||||
arguments, and rename the output as expected.
|
||||
|
||||
If you are trying to build a whole package this is not the
|
||||
right script to run: please start by reading the file `INSTALL'.
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "compile $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
esac
|
||||
|
||||
ofile=
|
||||
cfile=
|
||||
eat=
|
||||
|
||||
for arg
|
||||
do
|
||||
if test -n "$eat"; then
|
||||
eat=
|
||||
else
|
||||
case $1 in
|
||||
-o)
|
||||
# configure might choose to run compile as `compile cc -o foo foo.c'.
|
||||
# So we strip `-o arg' only if arg is an object.
|
||||
eat=1
|
||||
case $2 in
|
||||
*.o | *.obj)
|
||||
ofile=$2
|
||||
;;
|
||||
*)
|
||||
set x "$@" -o "$2"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*.c)
|
||||
cfile=$1
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
if test -z "$ofile" || test -z "$cfile"; then
|
||||
# If no `-o' option was seen then we might have been invoked from a
|
||||
# pattern rule where we don't need one. That is ok -- this is a
|
||||
# normal compilation that the losing compiler can handle. If no
|
||||
# `.c' file was seen then we are probably linking. That is also
|
||||
# ok.
|
||||
exec "$@"
|
||||
fi
|
||||
|
||||
# Name of file we expect compiler to create.
|
||||
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
|
||||
|
||||
# Create the lock directory.
|
||||
# Note: use `[/\\:.-]' here to ensure that we don't use the same name
|
||||
# that we are using for the .o file. Also, base the name on the expected
|
||||
# object file name, since that is what matters with a parallel build.
|
||||
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
|
||||
while true; do
|
||||
if mkdir "$lockdir" >/dev/null 2>&1; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
# FIXME: race condition here if user kills between mkdir and trap.
|
||||
trap "rmdir '$lockdir'; exit 1" 1 2 15
|
||||
|
||||
# Run the compile.
|
||||
"$@"
|
||||
ret=$?
|
||||
|
||||
if test -f "$cofile"; then
|
||||
mv "$cofile" "$ofile"
|
||||
elif test -f "${cofile}bj"; then
|
||||
mv "${cofile}bj" "$ofile"
|
||||
fi
|
||||
|
||||
rmdir "$lockdir"
|
||||
exit $ret
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg/compile.meta
Executable file
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg/compile.meta
Executable file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 36fdd9e73b9254ceca1234bb7722646b
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
1561
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg/config.guess
vendored
Executable file
1561
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg/config.guess
vendored
Executable file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 043664dbd09944d5d925b655cfa20c42
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
1686
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg/config.sub
vendored
Executable file
1686
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg/config.sub
vendored
Executable file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c50f7540799d944aca4bb8b57ac69687
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
630
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg/depcomp
Executable file
630
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg/depcomp
Executable file
@@ -0,0 +1,630 @@
|
||||
#! /bin/sh
|
||||
# depcomp - compile a program generating dependencies as side-effects
|
||||
|
||||
scriptversion=2009-04-28.21; # UTC
|
||||
|
||||
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
|
||||
# Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Run PROGRAMS ARGS to compile a file, generating dependencies
|
||||
as side-effects.
|
||||
|
||||
Environment variables:
|
||||
depmode Dependency tracking mode.
|
||||
source Source file read by `PROGRAMS ARGS'.
|
||||
object Object file output by `PROGRAMS ARGS'.
|
||||
DEPDIR directory where to store dependencies.
|
||||
depfile Dependency file to output.
|
||||
tmpdepfile Temporary file to use when outputing dependencies.
|
||||
libtool Whether libtool is used (yes/no).
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "depcomp $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
esac
|
||||
|
||||
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
||||
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
|
||||
depfile=${depfile-`echo "$object" |
|
||||
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
|
||||
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
||||
|
||||
rm -f "$tmpdepfile"
|
||||
|
||||
# Some modes work just like other modes, but use different flags. We
|
||||
# parameterize here, but still list the modes in the big case below,
|
||||
# to make depend.m4 easier to write. Note that we *cannot* use a case
|
||||
# here, because this file can only contain one case statement.
|
||||
if test "$depmode" = hp; then
|
||||
# HP compiler uses -M and no extra arg.
|
||||
gccflag=-M
|
||||
depmode=gcc
|
||||
fi
|
||||
|
||||
if test "$depmode" = dashXmstdout; then
|
||||
# This is just like dashmstdout with a different argument.
|
||||
dashmflag=-xM
|
||||
depmode=dashmstdout
|
||||
fi
|
||||
|
||||
cygpath_u="cygpath -u -f -"
|
||||
if test "$depmode" = msvcmsys; then
|
||||
# This is just like msvisualcpp but w/o cygpath translation.
|
||||
# Just convert the backslash-escaped backslashes to single forward
|
||||
# slashes to satisfy depend.m4
|
||||
cygpath_u="sed s,\\\\\\\\,/,g"
|
||||
depmode=msvisualcpp
|
||||
fi
|
||||
|
||||
case "$depmode" in
|
||||
gcc3)
|
||||
## gcc 3 implements dependency tracking that does exactly what
|
||||
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
||||
## it if -MD -MP comes after the -MF stuff. Hmm.
|
||||
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
|
||||
## the command line argument order; so add the flags where they
|
||||
## appear in depend2.am. Note that the slowdown incurred here
|
||||
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
|
||||
*) set fnord "$@" "$arg" ;;
|
||||
esac
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
done
|
||||
"$@"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
mv "$tmpdepfile" "$depfile"
|
||||
;;
|
||||
|
||||
gcc)
|
||||
## There are various ways to get dependency output from gcc. Here's
|
||||
## why we pick this rather obscure method:
|
||||
## - Don't want to use -MD because we'd like the dependencies to end
|
||||
## up in a subdir. Having to rename by hand is ugly.
|
||||
## (We might end up doing this anyway to support other compilers.)
|
||||
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
|
||||
## -MM, not -M (despite what the docs say).
|
||||
## - Using -M directly means running the compiler twice (even worse
|
||||
## than renaming).
|
||||
if test -z "$gccflag"; then
|
||||
gccflag=-MD,
|
||||
fi
|
||||
"$@" -Wp,"$gccflag$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
|
||||
## The second -e expression handles DOS-style file names with drive letters.
|
||||
sed -e 's/^[^:]*: / /' \
|
||||
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
||||
## This next piece of magic avoids the `deleted header file' problem.
|
||||
## The problem is that when a header file which appears in a .P file
|
||||
## is deleted, the dependency causes make to die (because there is
|
||||
## typically no way to rebuild the header). We avoid this by adding
|
||||
## dummy dependencies for each header file. Too bad gcc doesn't do
|
||||
## this for us directly.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" |
|
||||
## Some versions of gcc put a space before the `:'. On the theory
|
||||
## that the space means something, we add a space to the output as
|
||||
## well.
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
hp)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
sgi)
|
||||
if test "$libtool" = yes; then
|
||||
"$@" "-Wp,-MDupdate,$tmpdepfile"
|
||||
else
|
||||
"$@" -MDupdate "$tmpdepfile"
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
|
||||
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
|
||||
echo "$object : \\" > "$depfile"
|
||||
|
||||
# Clip off the initial element (the dependent). Don't try to be
|
||||
# clever and replace this with sed code, as IRIX sed won't handle
|
||||
# lines with more than a fixed number of characters (4096 in
|
||||
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
|
||||
# the IRIX cc adds comments like `#:fec' to the end of the
|
||||
# dependency line.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
|
||||
tr '
|
||||
' ' ' >> "$depfile"
|
||||
echo >> "$depfile"
|
||||
|
||||
# The second pass generates a dummy entry for each header file.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
|
||||
>> "$depfile"
|
||||
else
|
||||
# The sourcefile does not contain any dependencies, so just
|
||||
# store a dummy comment line, to avoid errors with the Makefile
|
||||
# "include basename.Plo" scheme.
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
aix)
|
||||
# The C for AIX Compiler uses -M and outputs the dependencies
|
||||
# in a .u file. In older versions, this file always lives in the
|
||||
# current directory. Also, the AIX compiler puts `$object:' at the
|
||||
# start of each line; $object doesn't have directory information.
|
||||
# Version 6 uses the directory in both cases.
|
||||
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||
test "x$dir" = "x$object" && dir=
|
||||
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||
if test "$libtool" = yes; then
|
||||
tmpdepfile1=$dir$base.u
|
||||
tmpdepfile2=$base.u
|
||||
tmpdepfile3=$dir.libs/$base.u
|
||||
"$@" -Wc,-M
|
||||
else
|
||||
tmpdepfile1=$dir$base.u
|
||||
tmpdepfile2=$dir$base.u
|
||||
tmpdepfile3=$dir$base.u
|
||||
"$@" -M
|
||||
fi
|
||||
stat=$?
|
||||
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
if test -f "$tmpdepfile"; then
|
||||
# Each line is of the form `foo.o: dependent.h'.
|
||||
# Do two passes, one to just change these to
|
||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
||||
# That's a tab and a space in the [].
|
||||
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
# The sourcefile does not contain any dependencies, so just
|
||||
# store a dummy comment line, to avoid errors with the Makefile
|
||||
# "include basename.Plo" scheme.
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
icc)
|
||||
# Intel's C compiler understands `-MD -MF file'. However on
|
||||
# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
|
||||
# ICC 7.0 will fill foo.d with something like
|
||||
# foo.o: sub/foo.c
|
||||
# foo.o: sub/foo.h
|
||||
# which is wrong. We want:
|
||||
# sub/foo.o: sub/foo.c
|
||||
# sub/foo.o: sub/foo.h
|
||||
# sub/foo.c:
|
||||
# sub/foo.h:
|
||||
# ICC 7.1 will output
|
||||
# foo.o: sub/foo.c sub/foo.h
|
||||
# and will wrap long lines using \ :
|
||||
# foo.o: sub/foo.c ... \
|
||||
# sub/foo.h ... \
|
||||
# ...
|
||||
|
||||
"$@" -MD -MF "$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
# Each line is of the form `foo.o: dependent.h',
|
||||
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
|
||||
# Do two passes, one to just change these to
|
||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
|
||||
# Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
# correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
|
||||
sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
hp2)
|
||||
# The "hp" stanza above does not work with aCC (C++) and HP's ia64
|
||||
# compilers, which have integrated preprocessors. The correct option
|
||||
# to use with these is +Maked; it writes dependencies to a file named
|
||||
# 'foo.d', which lands next to the object file, wherever that
|
||||
# happens to be.
|
||||
# Much of this is similar to the tru64 case; see comments there.
|
||||
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||
test "x$dir" = "x$object" && dir=
|
||||
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||
if test "$libtool" = yes; then
|
||||
tmpdepfile1=$dir$base.d
|
||||
tmpdepfile2=$dir.libs/$base.d
|
||||
"$@" -Wc,+Maked
|
||||
else
|
||||
tmpdepfile1=$dir$base.d
|
||||
tmpdepfile2=$dir$base.d
|
||||
"$@" +Maked
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
if test -f "$tmpdepfile"; then
|
||||
sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
|
||||
# Add `dependent.h:' lines.
|
||||
sed -ne '2,${
|
||||
s/^ *//
|
||||
s/ \\*$//
|
||||
s/$/:/
|
||||
p
|
||||
}' "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile" "$tmpdepfile2"
|
||||
;;
|
||||
|
||||
tru64)
|
||||
# The Tru64 compiler uses -MD to generate dependencies as a side
|
||||
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
|
||||
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
|
||||
# dependencies in `foo.d' instead, so we check for that too.
|
||||
# Subdirectories are respected.
|
||||
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||
test "x$dir" = "x$object" && dir=
|
||||
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||
|
||||
if test "$libtool" = yes; then
|
||||
# With Tru64 cc, shared objects can also be used to make a
|
||||
# static library. This mechanism is used in libtool 1.4 series to
|
||||
# handle both shared and static libraries in a single compilation.
|
||||
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
|
||||
#
|
||||
# With libtool 1.5 this exception was removed, and libtool now
|
||||
# generates 2 separate objects for the 2 libraries. These two
|
||||
# compilations output dependencies in $dir.libs/$base.o.d and
|
||||
# in $dir$base.o.d. We have to check for both files, because
|
||||
# one of the two compilations can be disabled. We should prefer
|
||||
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
|
||||
# automatically cleaned when .libs/ is deleted, while ignoring
|
||||
# the former would cause a distcleancheck panic.
|
||||
tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
|
||||
tmpdepfile2=$dir$base.o.d # libtool 1.5
|
||||
tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
|
||||
tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
|
||||
"$@" -Wc,-MD
|
||||
else
|
||||
tmpdepfile1=$dir$base.o.d
|
||||
tmpdepfile2=$dir$base.d
|
||||
tmpdepfile3=$dir$base.d
|
||||
tmpdepfile4=$dir$base.d
|
||||
"$@" -MD
|
||||
fi
|
||||
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
if test -f "$tmpdepfile"; then
|
||||
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
||||
# That's a tab and a space in the [].
|
||||
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
#nosideeffect)
|
||||
# This comment above is used by automake to tell side-effect
|
||||
# dependency tracking mechanisms from slower ones.
|
||||
|
||||
dashmstdout)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout, regardless of -o.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove `-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
test -z "$dashmflag" && dashmflag=-M
|
||||
# Require at least two characters before searching for `:'
|
||||
# in the target name. This is to cope with DOS-style filenames:
|
||||
# a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
|
||||
"$@" $dashmflag |
|
||||
sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
dashXmstdout)
|
||||
# This case only exists to satisfy depend.m4. It is never actually
|
||||
# run, as this mode is specially recognized in the preamble.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
makedepend)
|
||||
"$@" || exit $?
|
||||
# Remove any Libtool call
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
# X makedepend
|
||||
shift
|
||||
cleared=no eat=no
|
||||
for arg
|
||||
do
|
||||
case $cleared in
|
||||
no)
|
||||
set ""; shift
|
||||
cleared=yes ;;
|
||||
esac
|
||||
if test $eat = yes; then
|
||||
eat=no
|
||||
continue
|
||||
fi
|
||||
case "$arg" in
|
||||
-D*|-I*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
# Strip any option that makedepend may not understand. Remove
|
||||
# the object too, otherwise makedepend will parse it as a source file.
|
||||
-arch)
|
||||
eat=yes ;;
|
||||
-*|$object)
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
esac
|
||||
done
|
||||
obj_suffix=`echo "$object" | sed 's/^.*\././'`
|
||||
touch "$tmpdepfile"
|
||||
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
sed '1,2d' "$tmpdepfile" | tr ' ' '
|
||||
' | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile" "$tmpdepfile".bak
|
||||
;;
|
||||
|
||||
cpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove `-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
"$@" -E |
|
||||
sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
|
||||
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
|
||||
sed '$ s: \\$::' > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
cat < "$tmpdepfile" >> "$depfile"
|
||||
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvisualcpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case "$arg" in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
|
||||
set fnord "$@"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
"$@" -E 2>/dev/null |
|
||||
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
|
||||
echo " " >> "$depfile"
|
||||
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvcmsys)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
none)
|
||||
exec "$@"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Unknown depmode $depmode" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg/depcomp.meta
Executable file
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg/depcomp.meta
Executable file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 47e678bff98f646c09d03f6d1eb1a803
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
520
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg/install-sh
Executable file
520
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg/install-sh
Executable file
@@ -0,0 +1,520 @@
|
||||
#!/bin/sh
|
||||
# install - install a program, script, or datafile
|
||||
|
||||
scriptversion=2009-04-28.21; # UTC
|
||||
|
||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||
# following copyright and license.
|
||||
#
|
||||
# Copyright (C) 1994 X Consortium
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
||||
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
# Except as contained in this notice, the name of the X Consortium shall not
|
||||
# be used in advertising or otherwise to promote the sale, use or other deal-
|
||||
# ings in this Software without prior written authorization from the X Consor-
|
||||
# tium.
|
||||
#
|
||||
#
|
||||
# FSF changes to this file are in the public domain.
|
||||
#
|
||||
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||
# `make' implicit rules from creating a file called install from it
|
||||
# when there is no Makefile.
|
||||
#
|
||||
# This script is compatible with the BSD install script, but was written
|
||||
# from scratch.
|
||||
|
||||
nl='
|
||||
'
|
||||
IFS=" "" $nl"
|
||||
|
||||
# set DOITPROG to echo to test this script
|
||||
|
||||
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
||||
doit=${DOITPROG-}
|
||||
if test -z "$doit"; then
|
||||
doit_exec=exec
|
||||
else
|
||||
doit_exec=$doit
|
||||
fi
|
||||
|
||||
# Put in absolute file names if you don't have them in your path;
|
||||
# or use environment vars.
|
||||
|
||||
chgrpprog=${CHGRPPROG-chgrp}
|
||||
chmodprog=${CHMODPROG-chmod}
|
||||
chownprog=${CHOWNPROG-chown}
|
||||
cmpprog=${CMPPROG-cmp}
|
||||
cpprog=${CPPROG-cp}
|
||||
mkdirprog=${MKDIRPROG-mkdir}
|
||||
mvprog=${MVPROG-mv}
|
||||
rmprog=${RMPROG-rm}
|
||||
stripprog=${STRIPPROG-strip}
|
||||
|
||||
posix_glob='?'
|
||||
initialize_posix_glob='
|
||||
test "$posix_glob" != "?" || {
|
||||
if (set -f) 2>/dev/null; then
|
||||
posix_glob=
|
||||
else
|
||||
posix_glob=:
|
||||
fi
|
||||
}
|
||||
'
|
||||
|
||||
posix_mkdir=
|
||||
|
||||
# Desired mode of installed file.
|
||||
mode=0755
|
||||
|
||||
chgrpcmd=
|
||||
chmodcmd=$chmodprog
|
||||
chowncmd=
|
||||
mvcmd=$mvprog
|
||||
rmcmd="$rmprog -f"
|
||||
stripcmd=
|
||||
|
||||
src=
|
||||
dst=
|
||||
dir_arg=
|
||||
dst_arg=
|
||||
|
||||
copy_on_change=false
|
||||
no_target_directory=
|
||||
|
||||
usage="\
|
||||
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
||||
or: $0 [OPTION]... SRCFILES... DIRECTORY
|
||||
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
|
||||
or: $0 [OPTION]... -d DIRECTORIES...
|
||||
|
||||
In the 1st form, copy SRCFILE to DSTFILE.
|
||||
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
|
||||
In the 4th, create DIRECTORIES.
|
||||
|
||||
Options:
|
||||
--help display this help and exit.
|
||||
--version display version info and exit.
|
||||
|
||||
-c (ignored)
|
||||
-C install only if different (preserve the last data modification time)
|
||||
-d create directories instead of installing files.
|
||||
-g GROUP $chgrpprog installed files to GROUP.
|
||||
-m MODE $chmodprog installed files to MODE.
|
||||
-o USER $chownprog installed files to USER.
|
||||
-s $stripprog installed files.
|
||||
-t DIRECTORY install into DIRECTORY.
|
||||
-T report an error if DSTFILE is a directory.
|
||||
|
||||
Environment variables override the default commands:
|
||||
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
|
||||
RMPROG STRIPPROG
|
||||
"
|
||||
|
||||
while test $# -ne 0; do
|
||||
case $1 in
|
||||
-c) ;;
|
||||
|
||||
-C) copy_on_change=true;;
|
||||
|
||||
-d) dir_arg=true;;
|
||||
|
||||
-g) chgrpcmd="$chgrpprog $2"
|
||||
shift;;
|
||||
|
||||
--help) echo "$usage"; exit $?;;
|
||||
|
||||
-m) mode=$2
|
||||
case $mode in
|
||||
*' '* | *' '* | *'
|
||||
'* | *'*'* | *'?'* | *'['*)
|
||||
echo "$0: invalid mode: $mode" >&2
|
||||
exit 1;;
|
||||
esac
|
||||
shift;;
|
||||
|
||||
-o) chowncmd="$chownprog $2"
|
||||
shift;;
|
||||
|
||||
-s) stripcmd=$stripprog;;
|
||||
|
||||
-t) dst_arg=$2
|
||||
shift;;
|
||||
|
||||
-T) no_target_directory=true;;
|
||||
|
||||
--version) echo "$0 $scriptversion"; exit $?;;
|
||||
|
||||
--) shift
|
||||
break;;
|
||||
|
||||
-*) echo "$0: invalid option: $1" >&2
|
||||
exit 1;;
|
||||
|
||||
*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
|
||||
# When -d is used, all remaining arguments are directories to create.
|
||||
# When -t is used, the destination is already specified.
|
||||
# Otherwise, the last argument is the destination. Remove it from $@.
|
||||
for arg
|
||||
do
|
||||
if test -n "$dst_arg"; then
|
||||
# $@ is not empty: it contains at least $arg.
|
||||
set fnord "$@" "$dst_arg"
|
||||
shift # fnord
|
||||
fi
|
||||
shift # arg
|
||||
dst_arg=$arg
|
||||
done
|
||||
fi
|
||||
|
||||
if test $# -eq 0; then
|
||||
if test -z "$dir_arg"; then
|
||||
echo "$0: no input file specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
# It's OK to call `install-sh -d' without argument.
|
||||
# This can happen when creating conditional directories.
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if test -z "$dir_arg"; then
|
||||
trap '(exit $?); exit' 1 2 13 15
|
||||
|
||||
# Set umask so as not to create temps with too-generous modes.
|
||||
# However, 'strip' requires both read and write access to temps.
|
||||
case $mode in
|
||||
# Optimize common cases.
|
||||
*644) cp_umask=133;;
|
||||
*755) cp_umask=22;;
|
||||
|
||||
*[0-7])
|
||||
if test -z "$stripcmd"; then
|
||||
u_plus_rw=
|
||||
else
|
||||
u_plus_rw='% 200'
|
||||
fi
|
||||
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
|
||||
*)
|
||||
if test -z "$stripcmd"; then
|
||||
u_plus_rw=
|
||||
else
|
||||
u_plus_rw=,u+rw
|
||||
fi
|
||||
cp_umask=$mode$u_plus_rw;;
|
||||
esac
|
||||
fi
|
||||
|
||||
for src
|
||||
do
|
||||
# Protect names starting with `-'.
|
||||
case $src in
|
||||
-*) src=./$src;;
|
||||
esac
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
dst=$src
|
||||
dstdir=$dst
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
else
|
||||
|
||||
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||
# might cause directories to be created, which would be especially bad
|
||||
# if $src (and thus $dsttmp) contains '*'.
|
||||
if test ! -f "$src" && test ! -d "$src"; then
|
||||
echo "$0: $src does not exist." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -z "$dst_arg"; then
|
||||
echo "$0: no destination specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
dst=$dst_arg
|
||||
# Protect names starting with `-'.
|
||||
case $dst in
|
||||
-*) dst=./$dst;;
|
||||
esac
|
||||
|
||||
# If destination is a directory, append the input filename; won't work
|
||||
# if double slashes aren't ignored.
|
||||
if test -d "$dst"; then
|
||||
if test -n "$no_target_directory"; then
|
||||
echo "$0: $dst_arg: Is a directory" >&2
|
||||
exit 1
|
||||
fi
|
||||
dstdir=$dst
|
||||
dst=$dstdir/`basename "$src"`
|
||||
dstdir_status=0
|
||||
else
|
||||
# Prefer dirname, but fall back on a substitute if dirname fails.
|
||||
dstdir=`
|
||||
(dirname "$dst") 2>/dev/null ||
|
||||
expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
||||
X"$dst" : 'X\(//\)[^/]' \| \
|
||||
X"$dst" : 'X\(//\)$' \| \
|
||||
X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
|
||||
echo X"$dst" |
|
||||
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\/\)[^/].*/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\/\)$/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\).*/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
s/.*/./; q'
|
||||
`
|
||||
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
fi
|
||||
fi
|
||||
|
||||
obsolete_mkdir_used=false
|
||||
|
||||
if test $dstdir_status != 0; then
|
||||
case $posix_mkdir in
|
||||
'')
|
||||
# Create intermediate dirs using mode 755 as modified by the umask.
|
||||
# This is like FreeBSD 'install' as of 1997-10-28.
|
||||
umask=`umask`
|
||||
case $stripcmd.$umask in
|
||||
# Optimize common cases.
|
||||
*[2367][2367]) mkdir_umask=$umask;;
|
||||
.*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
|
||||
|
||||
*[0-7])
|
||||
mkdir_umask=`expr $umask + 22 \
|
||||
- $umask % 100 % 40 + $umask % 20 \
|
||||
- $umask % 10 % 4 + $umask % 2
|
||||
`;;
|
||||
*) mkdir_umask=$umask,go-w;;
|
||||
esac
|
||||
|
||||
# With -d, create the new directory with the user-specified mode.
|
||||
# Otherwise, rely on $mkdir_umask.
|
||||
if test -n "$dir_arg"; then
|
||||
mkdir_mode=-m$mode
|
||||
else
|
||||
mkdir_mode=
|
||||
fi
|
||||
|
||||
posix_mkdir=false
|
||||
case $umask in
|
||||
*[123567][0-7][0-7])
|
||||
# POSIX mkdir -p sets u+wx bits regardless of umask, which
|
||||
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
|
||||
;;
|
||||
*)
|
||||
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
||||
trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
|
||||
|
||||
if (umask $mkdir_umask &&
|
||||
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
|
||||
then
|
||||
if test -z "$dir_arg" || {
|
||||
# Check for POSIX incompatibilities with -m.
|
||||
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
||||
# other-writeable bit of parent directory when it shouldn't.
|
||||
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
||||
ls_ld_tmpdir=`ls -ld "$tmpdir"`
|
||||
case $ls_ld_tmpdir in
|
||||
d????-?r-*) different_mode=700;;
|
||||
d????-?--*) different_mode=755;;
|
||||
*) false;;
|
||||
esac &&
|
||||
$mkdirprog -m$different_mode -p -- "$tmpdir" && {
|
||||
ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
|
||||
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
||||
}
|
||||
}
|
||||
then posix_mkdir=:
|
||||
fi
|
||||
rmdir "$tmpdir/d" "$tmpdir"
|
||||
else
|
||||
# Remove any dirs left behind by ancient mkdir implementations.
|
||||
rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
|
||||
fi
|
||||
trap '' 0;;
|
||||
esac;;
|
||||
esac
|
||||
|
||||
if
|
||||
$posix_mkdir && (
|
||||
umask $mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
|
||||
)
|
||||
then :
|
||||
else
|
||||
|
||||
# The umask is ridiculous, or mkdir does not conform to POSIX,
|
||||
# or it failed possibly due to a race condition. Create the
|
||||
# directory the slow way, step by step, checking for races as we go.
|
||||
|
||||
case $dstdir in
|
||||
/*) prefix='/';;
|
||||
-*) prefix='./';;
|
||||
*) prefix='';;
|
||||
esac
|
||||
|
||||
eval "$initialize_posix_glob"
|
||||
|
||||
oIFS=$IFS
|
||||
IFS=/
|
||||
$posix_glob set -f
|
||||
set fnord $dstdir
|
||||
shift
|
||||
$posix_glob set +f
|
||||
IFS=$oIFS
|
||||
|
||||
prefixes=
|
||||
|
||||
for d
|
||||
do
|
||||
test -z "$d" && continue
|
||||
|
||||
prefix=$prefix$d
|
||||
if test -d "$prefix"; then
|
||||
prefixes=
|
||||
else
|
||||
if $posix_mkdir; then
|
||||
(umask=$mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
||||
# Don't fail if two instances are running concurrently.
|
||||
test -d "$prefix" || exit 1
|
||||
else
|
||||
case $prefix in
|
||||
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
|
||||
*) qprefix=$prefix;;
|
||||
esac
|
||||
prefixes="$prefixes '$qprefix'"
|
||||
fi
|
||||
fi
|
||||
prefix=$prefix/
|
||||
done
|
||||
|
||||
if test -n "$prefixes"; then
|
||||
# Don't fail if two instances are running concurrently.
|
||||
(umask $mkdir_umask &&
|
||||
eval "\$doit_exec \$mkdirprog $prefixes") ||
|
||||
test -d "$dstdir" || exit 1
|
||||
obsolete_mkdir_used=true
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
|
||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
|
||||
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
|
||||
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
|
||||
else
|
||||
|
||||
# Make a couple of temp file names in the proper directory.
|
||||
dsttmp=$dstdir/_inst.$$_
|
||||
rmtmp=$dstdir/_rm.$$_
|
||||
|
||||
# Trap to clean up those temp files at exit.
|
||||
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||
|
||||
# Copy the file name to the temp name.
|
||||
(umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
|
||||
|
||||
# and set any options; do chmod last to preserve setuid bits.
|
||||
#
|
||||
# If any of these fail, we abort the whole thing. If we want to
|
||||
# ignore errors from any of these, just make sure not to ignore
|
||||
# errors from the above "$doit $cpprog $src $dsttmp" command.
|
||||
#
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
|
||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
|
||||
{ test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
|
||||
{ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
|
||||
|
||||
# If -C, don't bother to copy if it wouldn't change the file.
|
||||
if $copy_on_change &&
|
||||
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
|
||||
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
|
||||
|
||||
eval "$initialize_posix_glob" &&
|
||||
$posix_glob set -f &&
|
||||
set X $old && old=:$2:$4:$5:$6 &&
|
||||
set X $new && new=:$2:$4:$5:$6 &&
|
||||
$posix_glob set +f &&
|
||||
|
||||
test "$old" = "$new" &&
|
||||
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
|
||||
then
|
||||
rm -f "$dsttmp"
|
||||
else
|
||||
# Rename the file to the real destination.
|
||||
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
|
||||
|
||||
# The rename failed, perhaps because mv can't rename something else
|
||||
# to itself, or perhaps because mv is so ancient that it does not
|
||||
# support -f.
|
||||
{
|
||||
# Now remove or move aside any old file at destination location.
|
||||
# We try this two ways since rm can't unlink itself on some
|
||||
# systems and the destination file might be busy for other
|
||||
# reasons. In this case, the final cleanup might fail but the new
|
||||
# file should still install successfully.
|
||||
{
|
||||
test ! -f "$dst" ||
|
||||
$doit $rmcmd -f "$dst" 2>/dev/null ||
|
||||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
|
||||
{ $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
|
||||
} ||
|
||||
{ echo "$0: cannot unlink or rename $dst" >&2
|
||||
(exit 1); exit 1
|
||||
}
|
||||
} &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
$doit $mvcmd "$dsttmp" "$dst"
|
||||
}
|
||||
fi || exit 1
|
||||
|
||||
trap '' 0
|
||||
fi
|
||||
done
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 09d4c7c72680849e7baa800b4531a85f
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
11156
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg/ltmain.sh
Executable file
11156
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg/ltmain.sh
Executable file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 299fe2a2523b14abf8c9a4d2f8e2df46
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
376
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg/missing
Executable file
376
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg/missing
Executable file
@@ -0,0 +1,376 @@
|
||||
#! /bin/sh
|
||||
# Common stub for a few missing GNU programs while installing.
|
||||
|
||||
scriptversion=2009-04-28.21; # UTC
|
||||
|
||||
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
|
||||
# 2008, 2009 Free Software Foundation, Inc.
|
||||
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
if test $# -eq 0; then
|
||||
echo 1>&2 "Try \`$0 --help' for more information"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
run=:
|
||||
sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
|
||||
sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
|
||||
|
||||
# In the cases where this matters, `missing' is being run in the
|
||||
# srcdir already.
|
||||
if test -f configure.ac; then
|
||||
configure_ac=configure.ac
|
||||
else
|
||||
configure_ac=configure.in
|
||||
fi
|
||||
|
||||
msg="missing on your system"
|
||||
|
||||
case $1 in
|
||||
--run)
|
||||
# Try to run requested program, and just exit if it succeeds.
|
||||
run=
|
||||
shift
|
||||
"$@" && exit 0
|
||||
# Exit code 63 means version mismatch. This often happens
|
||||
# when the user try to use an ancient version of a tool on
|
||||
# a file that requires a minimum version. In this case we
|
||||
# we should proceed has if the program had been absent, or
|
||||
# if --run hadn't been passed.
|
||||
if test $? = 63; then
|
||||
run=:
|
||||
msg="probably too old"
|
||||
fi
|
||||
;;
|
||||
|
||||
-h|--h|--he|--hel|--help)
|
||||
echo "\
|
||||
$0 [OPTION]... PROGRAM [ARGUMENT]...
|
||||
|
||||
Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
|
||||
error status if there is no known handling for PROGRAM.
|
||||
|
||||
Options:
|
||||
-h, --help display this help and exit
|
||||
-v, --version output version information and exit
|
||||
--run try to run the given command, and emulate it if it fails
|
||||
|
||||
Supported PROGRAM values:
|
||||
aclocal touch file \`aclocal.m4'
|
||||
autoconf touch file \`configure'
|
||||
autoheader touch file \`config.h.in'
|
||||
autom4te touch the output file, or create a stub one
|
||||
automake touch all \`Makefile.in' files
|
||||
bison create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||
flex create \`lex.yy.c', if possible, from existing .c
|
||||
help2man touch the output file
|
||||
lex create \`lex.yy.c', if possible, from existing .c
|
||||
makeinfo touch the output file
|
||||
tar try tar, gnutar, gtar, then tar without non-portable flags
|
||||
yacc create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||
|
||||
Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
|
||||
\`g' are ignored when checking the name.
|
||||
|
||||
Send bug reports to <bug-automake@gnu.org>."
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
||||
echo "missing $scriptversion (GNU Automake)"
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-*)
|
||||
echo 1>&2 "$0: Unknown \`$1' option"
|
||||
echo 1>&2 "Try \`$0 --help' for more information"
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
# normalize program name to check for.
|
||||
program=`echo "$1" | sed '
|
||||
s/^gnu-//; t
|
||||
s/^gnu//; t
|
||||
s/^g//; t'`
|
||||
|
||||
# Now exit if we have it, but it failed. Also exit now if we
|
||||
# don't have it and --version was passed (most likely to detect
|
||||
# the program). This is about non-GNU programs, so use $1 not
|
||||
# $program.
|
||||
case $1 in
|
||||
lex*|yacc*)
|
||||
# Not GNU programs, they don't have --version.
|
||||
;;
|
||||
|
||||
tar*)
|
||||
if test -n "$run"; then
|
||||
echo 1>&2 "ERROR: \`tar' requires --run"
|
||||
exit 1
|
||||
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
||||
# Could not run --version or --help. This is probably someone
|
||||
# running `$TOOL --version' or `$TOOL --help' to check whether
|
||||
# $TOOL exists and not knowing $TOOL uses missing.
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# If it does not exist, or fails to run (possibly an outdated version),
|
||||
# try to emulate it.
|
||||
case $program in
|
||||
aclocal*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`acinclude.m4' or \`${configure_ac}'. You might want
|
||||
to install the \`Automake' and \`Perl' packages. Grab them from
|
||||
any GNU archive site."
|
||||
touch aclocal.m4
|
||||
;;
|
||||
|
||||
autoconf*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`${configure_ac}'. You might want to install the
|
||||
\`Autoconf' and \`GNU m4' packages. Grab them from any GNU
|
||||
archive site."
|
||||
touch configure
|
||||
;;
|
||||
|
||||
autoheader*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`acconfig.h' or \`${configure_ac}'. You might want
|
||||
to install the \`Autoconf' and \`GNU m4' packages. Grab them
|
||||
from any GNU archive site."
|
||||
files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
|
||||
test -z "$files" && files="config.h"
|
||||
touch_files=
|
||||
for f in $files; do
|
||||
case $f in
|
||||
*:*) touch_files="$touch_files "`echo "$f" |
|
||||
sed -e 's/^[^:]*://' -e 's/:.*//'`;;
|
||||
*) touch_files="$touch_files $f.in";;
|
||||
esac
|
||||
done
|
||||
touch $touch_files
|
||||
;;
|
||||
|
||||
automake*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
|
||||
You might want to install the \`Automake' and \`Perl' packages.
|
||||
Grab them from any GNU archive site."
|
||||
find . -type f -name Makefile.am -print |
|
||||
sed 's/\.am$/.in/' |
|
||||
while read f; do touch "$f"; done
|
||||
;;
|
||||
|
||||
autom4te*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is needed, but is $msg.
|
||||
You might have modified some files without having the
|
||||
proper tools for further handling them.
|
||||
You can get \`$1' as part of \`Autoconf' from any GNU
|
||||
archive site."
|
||||
|
||||
file=`echo "$*" | sed -n "$sed_output"`
|
||||
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||
if test -f "$file"; then
|
||||
touch $file
|
||||
else
|
||||
test -z "$file" || exec >$file
|
||||
echo "#! /bin/sh"
|
||||
echo "# Created by GNU Automake missing as a replacement of"
|
||||
echo "# $ $@"
|
||||
echo "exit 0"
|
||||
chmod +x $file
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
bison*|yacc*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' $msg. You should only need it if
|
||||
you modified a \`.y' file. You may need the \`Bison' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Bison' from any GNU archive site."
|
||||
rm -f y.tab.c y.tab.h
|
||||
if test $# -ne 1; then
|
||||
eval LASTARG="\${$#}"
|
||||
case $LASTARG in
|
||||
*.y)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
|
||||
if test -f "$SRCFILE"; then
|
||||
cp "$SRCFILE" y.tab.c
|
||||
fi
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
|
||||
if test -f "$SRCFILE"; then
|
||||
cp "$SRCFILE" y.tab.h
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if test ! -f y.tab.h; then
|
||||
echo >y.tab.h
|
||||
fi
|
||||
if test ! -f y.tab.c; then
|
||||
echo 'main() { return 0; }' >y.tab.c
|
||||
fi
|
||||
;;
|
||||
|
||||
lex*|flex*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a \`.l' file. You may need the \`Flex' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Flex' from any GNU archive site."
|
||||
rm -f lex.yy.c
|
||||
if test $# -ne 1; then
|
||||
eval LASTARG="\${$#}"
|
||||
case $LASTARG in
|
||||
*.l)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
|
||||
if test -f "$SRCFILE"; then
|
||||
cp "$SRCFILE" lex.yy.c
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if test ! -f lex.yy.c; then
|
||||
echo 'main() { return 0; }' >lex.yy.c
|
||||
fi
|
||||
;;
|
||||
|
||||
help2man*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a dependency of a manual page. You may need the
|
||||
\`Help2man' package in order for those modifications to take
|
||||
effect. You can get \`Help2man' from any GNU archive site."
|
||||
|
||||
file=`echo "$*" | sed -n "$sed_output"`
|
||||
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||
if test -f "$file"; then
|
||||
touch $file
|
||||
else
|
||||
test -z "$file" || exec >$file
|
||||
echo ".ab help2man is required to generate this page"
|
||||
exit $?
|
||||
fi
|
||||
;;
|
||||
|
||||
makeinfo*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a \`.texi' or \`.texinfo' file, or any other file
|
||||
indirectly affecting the aspect of the manual. The spurious
|
||||
call might also be the consequence of using a buggy \`make' (AIX,
|
||||
DU, IRIX). You might want to install the \`Texinfo' package or
|
||||
the \`GNU make' package. Grab either from any GNU archive site."
|
||||
# The file to touch is that specified with -o ...
|
||||
file=`echo "$*" | sed -n "$sed_output"`
|
||||
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||
if test -z "$file"; then
|
||||
# ... or it is the one specified with @setfilename ...
|
||||
infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
|
||||
file=`sed -n '
|
||||
/^@setfilename/{
|
||||
s/.* \([^ ]*\) *$/\1/
|
||||
p
|
||||
q
|
||||
}' $infile`
|
||||
# ... or it is derived from the source name (dir/f.texi becomes f.info)
|
||||
test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
|
||||
fi
|
||||
# If the file does not exist, the user really needs makeinfo;
|
||||
# let's fail without touching anything.
|
||||
test -f $file || exit 1
|
||||
touch $file
|
||||
;;
|
||||
|
||||
tar*)
|
||||
shift
|
||||
|
||||
# We have already tried tar in the generic part.
|
||||
# Look for gnutar/gtar before invocation to avoid ugly error
|
||||
# messages.
|
||||
if (gnutar --version > /dev/null 2>&1); then
|
||||
gnutar "$@" && exit 0
|
||||
fi
|
||||
if (gtar --version > /dev/null 2>&1); then
|
||||
gtar "$@" && exit 0
|
||||
fi
|
||||
firstarg="$1"
|
||||
if shift; then
|
||||
case $firstarg in
|
||||
*o*)
|
||||
firstarg=`echo "$firstarg" | sed s/o//`
|
||||
tar "$firstarg" "$@" && exit 0
|
||||
;;
|
||||
esac
|
||||
case $firstarg in
|
||||
*h*)
|
||||
firstarg=`echo "$firstarg" | sed s/h//`
|
||||
tar "$firstarg" "$@" && exit 0
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: I can't seem to be able to run \`tar' with the given arguments.
|
||||
You may want to install GNU tar or Free paxutils, or check the
|
||||
command line arguments."
|
||||
exit 1
|
||||
;;
|
||||
|
||||
*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is needed, and is $msg.
|
||||
You might have modified some files without having the
|
||||
proper tools for further handling them. Check the \`README' file,
|
||||
it often tells you about the needed prerequisites for installing
|
||||
this package. You may also peek at any GNU archive site, in case
|
||||
some other package would contain this missing \`$1' program."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg/missing.meta
Executable file
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/Cfg/missing.meta
Executable file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dc305a2ccfb8e4a91b7b95d31e5c0422
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
1181
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/ChangeLog
Executable file
1181
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/ChangeLog
Executable file
File diff suppressed because it is too large
Load Diff
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/ChangeLog.meta
Executable file
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/ChangeLog.meta
Executable file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b4064e1cb1fc54330889a4f1e84f2986
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
117
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/INSTALL
Executable file
117
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/INSTALL
Executable file
@@ -0,0 +1,117 @@
|
||||
Install Instructions for libsamplerate
|
||||
======================================
|
||||
|
||||
The following instructions explain how to install libsamplerate under
|
||||
Linux and other Unix like systems including Mac OSX. (For windows,
|
||||
see http://www.mega-nerd.com/SRC/win32.html).
|
||||
|
||||
Preliminaries
|
||||
-------------
|
||||
1) Included with libsamplerate is a command line program named
|
||||
sndfile-resample which uses libnsdile:
|
||||
|
||||
http://www.mega-nerd.com/libsndfile/
|
||||
|
||||
for file I/O. If you want to use sndfile-resample you need to
|
||||
ensure that libsndfile is correctly installed first. If it is, the
|
||||
command "pkg-config --cflags --libs sndfile" should print out
|
||||
something like this:
|
||||
|
||||
-lsndfile
|
||||
|
||||
If pkg-config doesn't exist you will need need to install it. If
|
||||
pkg-config cannot find libsndfile you may need install it. If you
|
||||
install from from a Linux distribution package, make sure you also
|
||||
install the libsndfile-devel package which contains the header files.
|
||||
|
||||
If libsndfile is installed, you may need to set the PKG_CONFIG_PATH
|
||||
environment variable. If libsndfile is installed in /usr/local/lib,
|
||||
you will need to set PKG_CONFIG_PATH using:
|
||||
|
||||
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
|
||||
|
||||
Pkg-config should now work. If it doesn't you need to fix it if you
|
||||
want to use sndfile-resample.
|
||||
|
||||
2) The included tests suite for libsamplerate needs libfftw3 which is
|
||||
available here:
|
||||
|
||||
http://www.fftw.org/
|
||||
|
||||
If FFTW3 is not available, libsamplerate should still compile and
|
||||
install without problems but the test suite will not be as
|
||||
comprehensive as it normally is.
|
||||
|
||||
Building
|
||||
--------
|
||||
Building and verifying libsamplerate is a four or five step process.
|
||||
|
||||
1) The first step is to run configure
|
||||
|
||||
./configure
|
||||
|
||||
which should print out something like the following:
|
||||
|
||||
checking build system type...
|
||||
...
|
||||
...
|
||||
-=-=-=-=-=-=-=-=-= Configuration Complete =-=-=-=-=-=-=-=-=-=-
|
||||
|
||||
Configuration summary :
|
||||
|
||||
Version : ..................... X.Y.Z
|
||||
Enable debugging : ............ no
|
||||
|
||||
Tools :
|
||||
|
||||
Compiler is GCC : ............. yes
|
||||
GCC major version : ........... 3
|
||||
|
||||
Extra tools required for testing and examples :
|
||||
|
||||
Use FFTW : .................... yes
|
||||
Have libsndfile : ............. yes
|
||||
|
||||
Installation directories :
|
||||
|
||||
Library directory : ........... /usr/local/lib
|
||||
Program directory : ........... /usr/local/bin
|
||||
Pkgconfig directory : ......... /usr/local/lib/pkgconfig
|
||||
|
||||
Compiling some other packages against libsamplerate may require
|
||||
the addition of "/usr/local/lib/pkgconfig" to the
|
||||
PKG_CONFIG_PATH environment variable.
|
||||
|
||||
There are a number of configure options. See the output of
|
||||
configure when run with the --help command line option.
|
||||
|
||||
2) If all goes well with the above then compiling the library can be
|
||||
done with
|
||||
|
||||
make
|
||||
|
||||
3) When that has finished, the test suite can be run using:
|
||||
|
||||
make check
|
||||
|
||||
4) The final step is to install the library. This step needs to be
|
||||
carried out as the root user (or with sudo):
|
||||
|
||||
make install
|
||||
|
||||
This command will by default install the library in the directory
|
||||
/usr/local/lib. It can in installed in other location by using the
|
||||
--prefix option in step 1).
|
||||
|
||||
5) On linux, one more step is required, the registering of the library
|
||||
with the system. This is done by running the following command
|
||||
(also as the root user):
|
||||
|
||||
ldconfig -v
|
||||
|
||||
As a final test, you can run
|
||||
|
||||
sndfile-resample
|
||||
|
||||
to make sure everything is installed correctly.
|
||||
|
||||
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/INSTALL.meta
Executable file
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/INSTALL.meta
Executable file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d110d651ccd6549fc84d060f58c19776
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4.meta
Executable file
8
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4.meta
Executable file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1f712cc22d3ca4fb0acf487416f8de81
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
469
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/Makefile
Executable file
469
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/Makefile
Executable file
@@ -0,0 +1,469 @@
|
||||
# Makefile.in generated by automake 1.15 from Makefile.am.
|
||||
# M4/Makefile. Generated from Makefile.in by configure.
|
||||
|
||||
# Copyright (C) 1994-2014 Free Software Foundation, Inc.
|
||||
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
|
||||
am__is_gnu_make = { \
|
||||
if test -z '$(MAKELEVEL)'; then \
|
||||
false; \
|
||||
elif test -n '$(MAKE_HOST)'; then \
|
||||
true; \
|
||||
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
|
||||
true; \
|
||||
else \
|
||||
false; \
|
||||
fi; \
|
||||
}
|
||||
am__make_running_with_option = \
|
||||
case $${target_option-} in \
|
||||
?) ;; \
|
||||
*) echo "am__make_running_with_option: internal error: invalid" \
|
||||
"target option '$${target_option-}' specified" >&2; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
has_opt=no; \
|
||||
sane_makeflags=$$MAKEFLAGS; \
|
||||
if $(am__is_gnu_make); then \
|
||||
sane_makeflags=$$MFLAGS; \
|
||||
else \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
fi; \
|
||||
skip_next=no; \
|
||||
strip_trailopt () \
|
||||
{ \
|
||||
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
|
||||
}; \
|
||||
for flg in $$sane_makeflags; do \
|
||||
test $$skip_next = yes && { skip_next=no; continue; }; \
|
||||
case $$flg in \
|
||||
*=*|--*) continue;; \
|
||||
-*I) strip_trailopt 'I'; skip_next=yes;; \
|
||||
-*I?*) strip_trailopt 'I';; \
|
||||
-*O) strip_trailopt 'O'; skip_next=yes;; \
|
||||
-*O?*) strip_trailopt 'O';; \
|
||||
-*l) strip_trailopt 'l'; skip_next=yes;; \
|
||||
-*l?*) strip_trailopt 'l';; \
|
||||
-[dEDm]) skip_next=yes;; \
|
||||
-[JT]) skip_next=yes;; \
|
||||
esac; \
|
||||
case $$flg in \
|
||||
*$$target_option*) has_opt=yes; break;; \
|
||||
esac; \
|
||||
done; \
|
||||
test $$has_opt = yes
|
||||
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
|
||||
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
|
||||
pkgdatadir = $(datadir)/libsamplerate
|
||||
pkgincludedir = $(includedir)/libsamplerate
|
||||
pkglibdir = $(libdir)/libsamplerate
|
||||
pkglibexecdir = $(libexecdir)/libsamplerate
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = i386-apple-darwin17.6.0
|
||||
host_triplet = i386-apple-darwin17.6.0
|
||||
target_triplet = i386-apple-darwin17.6.0
|
||||
subdir = M4
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/M4/check_signal.m4 \
|
||||
$(top_srcdir)/M4/clip_mode.m4 $(top_srcdir)/M4/endian.m4 \
|
||||
$(top_srcdir)/M4/libtool.m4 $(top_srcdir)/M4/lrint.m4 \
|
||||
$(top_srcdir)/M4/lrintf.m4 $(top_srcdir)/M4/ltoptions.m4 \
|
||||
$(top_srcdir)/M4/ltsugar.m4 $(top_srcdir)/M4/ltversion.m4 \
|
||||
$(top_srcdir)/M4/lt~obsolete.m4 $(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/src/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
AM_V_P = $(am__v_P_$(V))
|
||||
am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
|
||||
am__v_P_0 = false
|
||||
am__v_P_1 = :
|
||||
AM_V_GEN = $(am__v_GEN_$(V))
|
||||
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
|
||||
am__v_GEN_0 = @echo " GEN " $@;
|
||||
am__v_GEN_1 =
|
||||
AM_V_at = $(am__v_at_$(V))
|
||||
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
|
||||
am__v_at_0 = @
|
||||
am__v_at_1 =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
|
||||
am__DIST_COMMON = $(srcdir)/Makefile.in
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = aclocal-1.15
|
||||
ACLOCAL_AMFLAGS = -I M4
|
||||
ALSA_LIBS =
|
||||
AMTAR = $${TAR-tar}
|
||||
AM_DEFAULT_VERBOSITY = 0
|
||||
AR = ar
|
||||
AUTOCONF = autoconf
|
||||
AUTOHEADER = autoheader
|
||||
AUTOMAKE = automake-1.15
|
||||
AWK = gawk
|
||||
CC = gcc
|
||||
CCDEPMODE = depmode=gcc3
|
||||
CFLAGS = -g -O2 -std=gnu99 -W -Wstrict-prototypes -Wmissing-prototypes -Waggregate-return -Wcast-align -Wcast-qual -Wnested-externs -Wshadow -Wpointer-arith -pipe
|
||||
COMPILER_IS_GCC =
|
||||
CPP = gcc -E
|
||||
CPPFLAGS =
|
||||
CXX = g++
|
||||
CXXCPP = g++ -E
|
||||
CXXDEPMODE = depmode=gcc3
|
||||
CXXFLAGS = -g -O2
|
||||
CYGPATH_W = echo
|
||||
DEFS = -DHAVE_CONFIG_H
|
||||
DEPDIR = .deps
|
||||
DLLTOOL = false
|
||||
DLLWRAP =
|
||||
DSYMUTIL = dsymutil
|
||||
DUMPBIN =
|
||||
ECHO_C = \c
|
||||
ECHO_N =
|
||||
ECHO_T =
|
||||
EGREP = /usr/bin/grep -E
|
||||
EXEEXT =
|
||||
FFTW3_CFLAGS =
|
||||
FFTW3_LIBS =
|
||||
FGREP = /usr/bin/grep -F
|
||||
GCC_MAJOR_VERSION = 4
|
||||
GREP = /usr/bin/grep
|
||||
HAVE_FFTW3 = 0
|
||||
HAVE_SNDFILE = 1
|
||||
INSTALL = /usr/bin/install -c
|
||||
INSTALL_DATA = ${INSTALL} -m 644
|
||||
INSTALL_PROGRAM = ${INSTALL}
|
||||
INSTALL_SCRIPT = ${INSTALL}
|
||||
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
|
||||
LD = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld
|
||||
LDFLAGS =
|
||||
LIBOBJS =
|
||||
LIBS = -lm
|
||||
LIBTOOL = $(SHELL) $(top_builddir)/libtool
|
||||
LIPO = lipo
|
||||
LN_S = ln -s
|
||||
LTLIBOBJS =
|
||||
LT_SYS_LIBRARY_PATH =
|
||||
MAKEINFO = makeinfo
|
||||
MANIFEST_TOOL = :
|
||||
MKDIR_P = ../Cfg/install-sh -c -d
|
||||
NM = /usr/bin/nm -B
|
||||
NMEDIT = nmedit
|
||||
OBJDUMP = objdump
|
||||
OBJEXT = o
|
||||
OS_SPECIFIC_INCLUDES = -fpascal-strings -I/Developer/Headers/FlatCarbon
|
||||
OS_SPECIFIC_LINKS = -framework CoreAudio
|
||||
OTOOL = otool
|
||||
OTOOL64 = :
|
||||
PACKAGE = libsamplerate
|
||||
PACKAGE_BUGREPORT = erikd@mega-nerd.com
|
||||
PACKAGE_NAME = libsamplerate
|
||||
PACKAGE_STRING = libsamplerate 0.1.9
|
||||
PACKAGE_TARNAME = libsamplerate
|
||||
PACKAGE_URL = http://www.mega-nerd.com/libsamplerate/
|
||||
PACKAGE_VERSION = 0.1.9
|
||||
PATH_SEPARATOR = :
|
||||
PEXPORTS =
|
||||
PKG_CONFIG = /usr/local/bin/pkg-config
|
||||
PKG_CONFIG_LIBDIR =
|
||||
PKG_CONFIG_PATH =
|
||||
RANLIB = ranlib
|
||||
RC =
|
||||
SED = /usr/bin/sed
|
||||
SET_MAKE =
|
||||
SHARED_VERSION_INFO = 1:8:1
|
||||
SHELL = /bin/sh
|
||||
SHLIB_VERSION_ARG =
|
||||
SNDFILE_CFLAGS = -I/usr/local/Cellar/libsndfile/1.0.27/include
|
||||
SNDFILE_LIBS = -L/usr/local/Cellar/libsndfile/1.0.27/lib -lsndfile
|
||||
STRIP = strip
|
||||
VERSION = 0.1.9
|
||||
abs_builddir = /Users/Sargon/Downloads/libsamplerate-0.1.9/M4
|
||||
abs_srcdir = /Users/Sargon/Downloads/libsamplerate-0.1.9/M4
|
||||
abs_top_builddir = /Users/Sargon/Downloads/libsamplerate-0.1.9
|
||||
abs_top_srcdir = /Users/Sargon/Downloads/libsamplerate-0.1.9
|
||||
ac_ct_AR = ar
|
||||
ac_ct_CC = gcc
|
||||
ac_ct_CXX = g++
|
||||
ac_ct_DUMPBIN =
|
||||
am__include = include
|
||||
am__leading_dot = .
|
||||
am__quote =
|
||||
am__tar = $${TAR-tar} chof - "$$tardir"
|
||||
am__untar = $${TAR-tar} xf -
|
||||
bindir = ${exec_prefix}/bin
|
||||
build = i386-apple-darwin17.6.0
|
||||
build_alias =
|
||||
build_cpu = i386
|
||||
build_os = darwin17.6.0
|
||||
build_vendor = apple
|
||||
builddir = .
|
||||
datadir = ${datarootdir}
|
||||
datarootdir = ${prefix}/share
|
||||
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
|
||||
dvidir = ${docdir}
|
||||
exec_prefix = ${prefix}
|
||||
host = i386-apple-darwin17.6.0
|
||||
host_alias =
|
||||
host_cpu = i386
|
||||
host_os = darwin17.6.0
|
||||
host_vendor = apple
|
||||
htmldir = ${docdir}
|
||||
htmldocdir = /usr/local/share/doc/libsamplerate0-dev/html
|
||||
includedir = ${prefix}/include
|
||||
infodir = ${datarootdir}/info
|
||||
install_sh = ${SHELL} /Users/Sargon/Downloads/libsamplerate-0.1.9/Cfg/install-sh
|
||||
libdir = ${exec_prefix}/lib
|
||||
libexecdir = ${exec_prefix}/libexec
|
||||
localedir = ${datarootdir}/locale
|
||||
localstatedir = ${prefix}/var
|
||||
mandir = ${datarootdir}/man
|
||||
mkdir_p = $(MKDIR_P)
|
||||
oldincludedir = /usr/include
|
||||
pdfdir = ${docdir}
|
||||
prefix = /usr/local
|
||||
program_transform_name = s,x,x,
|
||||
psdir = ${docdir}
|
||||
runstatedir = ${localstatedir}/run
|
||||
sbindir = ${exec_prefix}/sbin
|
||||
sharedstatedir = ${prefix}/com
|
||||
srcdir = .
|
||||
sysconfdir = ${prefix}/etc
|
||||
target = i386-apple-darwin17.6.0
|
||||
target_alias =
|
||||
target_cpu = i386
|
||||
target_os = darwin17.6.0
|
||||
target_vendor = apple
|
||||
top_build_prefix = ../
|
||||
top_builddir = ..
|
||||
top_srcdir = ..
|
||||
EXTRA_DIST = add_cflags.m4 endian.m4
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
|
||||
&& { if test -f $@; then exit 0; else break; fi; }; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu M4/Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu M4/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
tags TAGS:
|
||||
|
||||
ctags CTAGS:
|
||||
|
||||
cscope cscopelist:
|
||||
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile
|
||||
installdirs:
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am:
|
||||
|
||||
.MAKE: install-am install-strip
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
|
||||
cscopelist-am ctags-am distclean distclean-generic \
|
||||
distclean-libtool distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-dvi \
|
||||
install-dvi-am install-exec install-exec-am install-html \
|
||||
install-html-am install-info install-info-am install-man \
|
||||
install-pdf install-pdf-am install-ps install-ps-am \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags-am uninstall uninstall-am
|
||||
|
||||
.PRECIOUS: Makefile
|
||||
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
4
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/Makefile.am
Executable file
4
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/Makefile.am
Executable file
@@ -0,0 +1,4 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
EXTRA_DIST = add_cflags.m4 endian.m4
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 853313efd8f1c45379634e4d290ad1f1
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
469
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/Makefile.in
Executable file
469
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/Makefile.in
Executable file
@@ -0,0 +1,469 @@
|
||||
# Makefile.in generated by automake 1.15 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994-2014 Free Software Foundation, Inc.
|
||||
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
VPATH = @srcdir@
|
||||
am__is_gnu_make = { \
|
||||
if test -z '$(MAKELEVEL)'; then \
|
||||
false; \
|
||||
elif test -n '$(MAKE_HOST)'; then \
|
||||
true; \
|
||||
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
|
||||
true; \
|
||||
else \
|
||||
false; \
|
||||
fi; \
|
||||
}
|
||||
am__make_running_with_option = \
|
||||
case $${target_option-} in \
|
||||
?) ;; \
|
||||
*) echo "am__make_running_with_option: internal error: invalid" \
|
||||
"target option '$${target_option-}' specified" >&2; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
has_opt=no; \
|
||||
sane_makeflags=$$MAKEFLAGS; \
|
||||
if $(am__is_gnu_make); then \
|
||||
sane_makeflags=$$MFLAGS; \
|
||||
else \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
fi; \
|
||||
skip_next=no; \
|
||||
strip_trailopt () \
|
||||
{ \
|
||||
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
|
||||
}; \
|
||||
for flg in $$sane_makeflags; do \
|
||||
test $$skip_next = yes && { skip_next=no; continue; }; \
|
||||
case $$flg in \
|
||||
*=*|--*) continue;; \
|
||||
-*I) strip_trailopt 'I'; skip_next=yes;; \
|
||||
-*I?*) strip_trailopt 'I';; \
|
||||
-*O) strip_trailopt 'O'; skip_next=yes;; \
|
||||
-*O?*) strip_trailopt 'O';; \
|
||||
-*l) strip_trailopt 'l'; skip_next=yes;; \
|
||||
-*l?*) strip_trailopt 'l';; \
|
||||
-[dEDm]) skip_next=yes;; \
|
||||
-[JT]) skip_next=yes;; \
|
||||
esac; \
|
||||
case $$flg in \
|
||||
*$$target_option*) has_opt=yes; break;; \
|
||||
esac; \
|
||||
done; \
|
||||
test $$has_opt = yes
|
||||
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
|
||||
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = M4
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/M4/check_signal.m4 \
|
||||
$(top_srcdir)/M4/clip_mode.m4 $(top_srcdir)/M4/endian.m4 \
|
||||
$(top_srcdir)/M4/libtool.m4 $(top_srcdir)/M4/lrint.m4 \
|
||||
$(top_srcdir)/M4/lrintf.m4 $(top_srcdir)/M4/ltoptions.m4 \
|
||||
$(top_srcdir)/M4/ltsugar.m4 $(top_srcdir)/M4/ltversion.m4 \
|
||||
$(top_srcdir)/M4/lt~obsolete.m4 $(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/src/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
AM_V_P = $(am__v_P_@AM_V@)
|
||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||
am__v_P_0 = false
|
||||
am__v_P_1 = :
|
||||
AM_V_GEN = $(am__v_GEN_@AM_V@)
|
||||
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
|
||||
am__v_GEN_0 = @echo " GEN " $@;
|
||||
am__v_GEN_1 =
|
||||
AM_V_at = $(am__v_at_@AM_V@)
|
||||
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
|
||||
am__v_at_0 = @
|
||||
am__v_at_1 =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
|
||||
am__DIST_COMMON = $(srcdir)/Makefile.in
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
|
||||
ALSA_LIBS = @ALSA_LIBS@
|
||||
AMTAR = @AMTAR@
|
||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
COMPILER_IS_GCC = @COMPILER_IS_GCC@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DLLWRAP = @DLLWRAP@
|
||||
DSYMUTIL = @DSYMUTIL@
|
||||
DUMPBIN = @DUMPBIN@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FFTW3_CFLAGS = @FFTW3_CFLAGS@
|
||||
FFTW3_LIBS = @FFTW3_LIBS@
|
||||
FGREP = @FGREP@
|
||||
GCC_MAJOR_VERSION = @GCC_MAJOR_VERSION@
|
||||
GREP = @GREP@
|
||||
HAVE_FFTW3 = @HAVE_FFTW3@
|
||||
HAVE_SNDFILE = @HAVE_SNDFILE@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LD = @LD@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIPO = @LIPO@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MANIFEST_TOOL = @MANIFEST_TOOL@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
NM = @NM@
|
||||
NMEDIT = @NMEDIT@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
OS_SPECIFIC_INCLUDES = @OS_SPECIFIC_INCLUDES@
|
||||
OS_SPECIFIC_LINKS = @OS_SPECIFIC_LINKS@
|
||||
OTOOL = @OTOOL@
|
||||
OTOOL64 = @OTOOL64@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PEXPORTS = @PEXPORTS@
|
||||
PKG_CONFIG = @PKG_CONFIG@
|
||||
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
|
||||
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
|
||||
RANLIB = @RANLIB@
|
||||
RC = @RC@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
|
||||
SHELL = @SHELL@
|
||||
SHLIB_VERSION_ARG = @SHLIB_VERSION_ARG@
|
||||
SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
|
||||
SNDFILE_LIBS = @SNDFILE_LIBS@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
htmldocdir = @htmldocdir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
runstatedir = @runstatedir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target = @target@
|
||||
target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
EXTRA_DIST = add_cflags.m4 endian.m4
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
|
||||
&& { if test -f $@; then exit 0; else break; fi; }; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu M4/Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu M4/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
tags TAGS:
|
||||
|
||||
ctags CTAGS:
|
||||
|
||||
cscope cscopelist:
|
||||
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile
|
||||
installdirs:
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am:
|
||||
|
||||
.MAKE: install-am install-strip
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
|
||||
cscopelist-am ctags-am distclean distclean-generic \
|
||||
distclean-libtool distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-dvi \
|
||||
install-dvi-am install-exec install-exec-am install-html \
|
||||
install-html-am install-info install-info-am install-man \
|
||||
install-pdf install-pdf-am install-ps install-ps-am \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags-am uninstall uninstall-am
|
||||
|
||||
.PRECIOUS: Makefile
|
||||
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4d06da4714bc347208eb8bc16d52f266
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/Makefile.meta
Executable file
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/Makefile.meta
Executable file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 51fc600a66b294cb3a8ecebf13bee66d
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
17
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/add_cflags.m4
Executable file
17
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/add_cflags.m4
Executable file
@@ -0,0 +1,17 @@
|
||||
dnl @synopsis AC_ADD_CFLAGS
|
||||
dnl
|
||||
dnl Add the given option to CFLAGS, if it doesn't break the compiler
|
||||
|
||||
AC_DEFUN([AC_ADD_CFLAGS],
|
||||
[AC_MSG_CHECKING([if $CC accepts $1])
|
||||
ac_add_cflags__old_cflags="$CFLAGS"
|
||||
CFLAGS="$CFLAGS $1"
|
||||
AC_TRY_LINK([
|
||||
#include <stdio.h>
|
||||
],
|
||||
[puts("Hello, World!"); return 0;],
|
||||
AC_MSG_RESULT([yes]),
|
||||
AC_MSG_RESULT([no])
|
||||
CFLAGS="$ac_add_cflags__old_cflags"
|
||||
)
|
||||
])# AC_ADD_CFLAGS
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c5dca2f7613e94dddbec739fbdc2d5f4
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
26
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/check_signal.m4
Executable file
26
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/check_signal.m4
Executable file
@@ -0,0 +1,26 @@
|
||||
dnl @synopsis AC_CHECK_SIGNAL(SIGNAME)
|
||||
dnl
|
||||
dnl
|
||||
dnl @category C
|
||||
dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
|
||||
dnl @version 1.0 Jul 07 2007
|
||||
|
||||
AC_DEFUN([AC_CHECK_SIGNAL],
|
||||
[AC_CACHE_CHECK(for $1,
|
||||
ac_cv_signal_$1,
|
||||
[
|
||||
AC_TRY_LINK([
|
||||
#include <signal.h>
|
||||
|
||||
], signal($1, SIG_DFL) ;, ac_cv_signal_$1=yes, ac_cv_signal_$1=no)
|
||||
|
||||
])
|
||||
|
||||
if test "$ac_cv_signal_$1" = yes; then
|
||||
AC_DEFINE(HAVE_$1, 1,
|
||||
[Define if you have signal $1.])
|
||||
fi
|
||||
])# AC_CHECK_SIGNAL
|
||||
|
||||
|
||||
## AC_CHECK_SIGNALS
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a9349c453f99945e88e73f5d13dde525
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
124
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/clip_mode.m4
Executable file
124
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/clip_mode.m4
Executable file
@@ -0,0 +1,124 @@
|
||||
dnl @synopsis AC_C_CLIP_MODE
|
||||
dnl
|
||||
dnl Determine the clipping mode when converting float to int.
|
||||
dnl @version 1.0 May 17 2003
|
||||
dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
|
||||
dnl
|
||||
dnl Permission to use, copy, modify, distribute, and sell this file for any
|
||||
dnl purpose is hereby granted without fee, provided that the above copyright
|
||||
dnl and this permission notice appear in all copies. No representations are
|
||||
dnl made about the suitability of this software for any purpose. It is
|
||||
dnl provided "as is" without express or implied warranty.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
dnl Find the clipping mode in the following way:
|
||||
dnl 1) If we are not cross compiling test it.
|
||||
dnl 2) IF we are cross compiling, assume that clipping isn't done correctly.
|
||||
|
||||
AC_DEFUN([AC_C_CLIP_MODE],
|
||||
[AC_CACHE_CHECK(processor clipping capabilities,
|
||||
ac_cv_c_clip_type,
|
||||
|
||||
# Initialize to unknown
|
||||
ac_cv_c_clip_positive=unknown
|
||||
ac_cv_c_clip_negative=unknown
|
||||
|
||||
|
||||
if test $ac_cv_c_clip_positive = unknown ; then
|
||||
AC_TRY_RUN(
|
||||
[[
|
||||
#define _ISOC9X_SOURCE 1
|
||||
#define _ISOC99_SOURCE 1
|
||||
#define __USE_ISOC99 1
|
||||
#define __USE_ISOC9X 1
|
||||
#include <math.h>
|
||||
int main (void)
|
||||
{ double fval ;
|
||||
int k, ival ;
|
||||
|
||||
fval = 1.0 * 0x7FFFFFFF ;
|
||||
for (k = 0 ; k < 100 ; k++)
|
||||
{ ival = (lrint (fval)) >> 24 ;
|
||||
if (ival != 127)
|
||||
return 1 ;
|
||||
|
||||
fval *= 1.2499999 ;
|
||||
} ;
|
||||
|
||||
return 0 ;
|
||||
}
|
||||
]],
|
||||
ac_cv_c_clip_positive=yes,
|
||||
ac_cv_c_clip_positive=no,
|
||||
ac_cv_c_clip_positive=unknown
|
||||
)
|
||||
|
||||
AC_TRY_RUN(
|
||||
[[
|
||||
#define _ISOC9X_SOURCE 1
|
||||
#define _ISOC99_SOURCE 1
|
||||
#define __USE_ISOC99 1
|
||||
#define __USE_ISOC9X 1
|
||||
#include <math.h>
|
||||
int main (void)
|
||||
{ double fval ;
|
||||
int k, ival ;
|
||||
|
||||
fval = -8.0 * 0x10000000 ;
|
||||
for (k = 0 ; k < 100 ; k++)
|
||||
{ ival = (lrint (fval)) >> 24 ;
|
||||
if (ival != -128)
|
||||
return 1 ;
|
||||
|
||||
fval *= 1.2499999 ;
|
||||
} ;
|
||||
|
||||
return 0 ;
|
||||
}
|
||||
]],
|
||||
ac_cv_c_clip_negative=yes,
|
||||
ac_cv_c_clip_negative=no,
|
||||
ac_cv_c_clip_negative=unknown
|
||||
)
|
||||
fi
|
||||
|
||||
if test $ac_cv_c_clip_positive = yes ; then
|
||||
ac_cv_c_clip_positive=1
|
||||
else
|
||||
ac_cv_c_clip_positive=0
|
||||
fi
|
||||
|
||||
if test $ac_cv_c_clip_negative = yes ; then
|
||||
ac_cv_c_clip_negative=1
|
||||
else
|
||||
ac_cv_c_clip_negative=0
|
||||
fi
|
||||
|
||||
[[
|
||||
case "$ac_cv_c_clip_positive$ac_cv_c_clip_negative" in
|
||||
"00")
|
||||
ac_cv_c_clip_type="none"
|
||||
;;
|
||||
"10")
|
||||
ac_cv_c_clip_type="positive"
|
||||
;;
|
||||
"01")
|
||||
ac_cv_c_clip_type="negative"
|
||||
;;
|
||||
"11")
|
||||
ac_cv_c_clip_type="both"
|
||||
;;
|
||||
esac
|
||||
]]
|
||||
|
||||
)
|
||||
]
|
||||
|
||||
)# AC_C_CLIP_MODE
|
||||
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3ac6fd3a3483c4678b25c48e11d31ba2
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
155
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/endian.m4
Executable file
155
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/endian.m4
Executable file
@@ -0,0 +1,155 @@
|
||||
dnl @synopsis AC_C_FIND_ENDIAN
|
||||
dnl
|
||||
dnl Determine endian-ness of target processor.
|
||||
dnl @version 1.1 Mar 03 2002
|
||||
dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
|
||||
dnl
|
||||
dnl Majority written from scratch to replace the standard autoconf macro
|
||||
dnl AC_C_BIGENDIAN. Only part remaining from the original it the invocation
|
||||
dnl of the AC_TRY_RUN macro.
|
||||
dnl
|
||||
dnl Permission to use, copy, modify, distribute, and sell this file for any
|
||||
dnl purpose is hereby granted without fee, provided that the above copyright
|
||||
dnl and this permission notice appear in all copies. No representations are
|
||||
dnl made about the suitability of this software for any purpose. It is
|
||||
dnl provided "as is" without express or implied warranty.
|
||||
|
||||
dnl Find endian-ness in the following way:
|
||||
dnl 1) Look in <endian.h>.
|
||||
dnl 2) If 1) fails, look in <sys/types.h> and <sys/param.h>.
|
||||
dnl 3) If 1) and 2) fails and not cross compiling run a test program.
|
||||
dnl 4) If 1) and 2) fails and cross compiling then guess based on target.
|
||||
|
||||
AC_DEFUN([AC_C_FIND_ENDIAN],
|
||||
[AC_CACHE_CHECK(processor byte ordering,
|
||||
ac_cv_c_byte_order,
|
||||
|
||||
# Initialize to unknown
|
||||
ac_cv_c_byte_order=unknown
|
||||
|
||||
if test x$ac_cv_header_endian_h = xyes ; then
|
||||
|
||||
# First try <endian.h> which should set BYTE_ORDER.
|
||||
|
||||
[AC_TRY_LINK([
|
||||
#include <endian.h>
|
||||
#if BYTE_ORDER != LITTLE_ENDIAN
|
||||
not big endian
|
||||
#endif
|
||||
], return 0 ;,
|
||||
ac_cv_c_byte_order=little
|
||||
)]
|
||||
|
||||
[AC_TRY_LINK([
|
||||
#include <endian.h>
|
||||
#if BYTE_ORDER != BIG_ENDIAN
|
||||
not big endian
|
||||
#endif
|
||||
], return 0 ;,
|
||||
ac_cv_c_byte_order=big
|
||||
)]
|
||||
|
||||
fi
|
||||
|
||||
if test $ac_cv_c_byte_order = unknown ; then
|
||||
|
||||
[AC_TRY_LINK([
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
|
||||
bogus endian macros
|
||||
#endif
|
||||
], return 0 ;,
|
||||
|
||||
[AC_TRY_LINK([
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#if BYTE_ORDER != LITTLE_ENDIAN
|
||||
not big endian
|
||||
#endif
|
||||
], return 0 ;,
|
||||
ac_cv_c_byte_order=little
|
||||
)]
|
||||
|
||||
[AC_TRY_LINK([
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#if BYTE_ORDER != LITTLE_ENDIAN
|
||||
not big endian
|
||||
#endif
|
||||
], return 0 ;,
|
||||
ac_cv_c_byte_order=little
|
||||
)]
|
||||
|
||||
)]
|
||||
|
||||
fi
|
||||
|
||||
if test $ac_cv_c_byte_order = unknown ; then
|
||||
if test $cross_compiling = yes ; then
|
||||
# This is the last resort. Try to guess the target processor endian-ness
|
||||
# by looking at the target CPU type.
|
||||
[
|
||||
case "$target_cpu" in
|
||||
alpha* | i?86* | mipsel* | ia64*)
|
||||
ac_cv_c_byte_order=little
|
||||
;;
|
||||
|
||||
m68* | mips* | powerpc* | hppa* | sparc*)
|
||||
ac_cv_c_byte_order=big
|
||||
;;
|
||||
|
||||
esac
|
||||
]
|
||||
else
|
||||
AC_TRY_RUN(
|
||||
[[
|
||||
int main (void)
|
||||
{ /* Are we little or big endian? From Harbison&Steele. */
|
||||
union
|
||||
{ long l ;
|
||||
char c [sizeof (long)] ;
|
||||
} u ;
|
||||
u.l = 1 ;
|
||||
return (u.c [sizeof (long) - 1] == 1);
|
||||
}
|
||||
]], , ac_cv_c_byte_order=big,
|
||||
)
|
||||
|
||||
AC_TRY_RUN(
|
||||
[[int main (void)
|
||||
{ /* Are we little or big endian? From Harbison&Steele. */
|
||||
union
|
||||
{ long l ;
|
||||
char c [sizeof (long)] ;
|
||||
} u ;
|
||||
u.l = 1 ;
|
||||
return (u.c [0] == 1);
|
||||
}]], , ac_cv_c_byte_order=little,
|
||||
)
|
||||
fi
|
||||
fi
|
||||
|
||||
)
|
||||
|
||||
if test $ac_cv_c_byte_order = big ; then
|
||||
ac_cv_c_big_endian=1
|
||||
ac_cv_c_little_endian=0
|
||||
elif test $ac_cv_c_byte_order = little ; then
|
||||
ac_cv_c_big_endian=0
|
||||
ac_cv_c_little_endian=1
|
||||
else
|
||||
ac_cv_c_big_endian=0
|
||||
ac_cv_c_little_endian=0
|
||||
|
||||
AC_MSG_WARN([[*****************************************************************]])
|
||||
AC_MSG_WARN([[*** Not able to determine endian-ness of target processor. ]])
|
||||
AC_MSG_WARN([[*** The constants CPU_IS_BIG_ENDIAN and CPU_IS_LITTLE_ENDIAN in ]])
|
||||
AC_MSG_WARN([[*** src/config.h may need to be hand editied. ]])
|
||||
AC_MSG_WARN([[*****************************************************************]])
|
||||
fi
|
||||
|
||||
]
|
||||
)# AC_C_FIND_ENDIAN
|
||||
|
||||
|
||||
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/endian.m4.meta
Executable file
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/endian.m4.meta
Executable file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e3d32e7abe76f4fd8bff7410a36922d6
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8387
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/libtool.m4
vendored
Executable file
8387
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/libtool.m4
vendored
Executable file
File diff suppressed because it is too large
Load Diff
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/libtool.m4.meta
vendored
Executable file
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/libtool.m4.meta
vendored
Executable file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ce99d15463aae49a784d2b219a474add
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
37
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/lrint.m4
Executable file
37
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/lrint.m4
Executable file
@@ -0,0 +1,37 @@
|
||||
dnl @synopsis AC_C99_FUNC_LRINT
|
||||
dnl
|
||||
dnl Check whether C99's lrint function is available.
|
||||
dnl @version 1.3 Feb 12 2002
|
||||
dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
|
||||
dnl
|
||||
dnl Permission to use, copy, modify, distribute, and sell this file for any
|
||||
dnl purpose is hereby granted without fee, provided that the above copyright
|
||||
dnl and this permission notice appear in all copies. No representations are
|
||||
dnl made about the suitability of this software for any purpose. It is
|
||||
dnl provided "as is" without express or implied warranty.
|
||||
dnl
|
||||
AC_DEFUN([AC_C99_FUNC_LRINT],
|
||||
[AC_CACHE_CHECK(for lrint,
|
||||
ac_cv_c99_lrint,
|
||||
[
|
||||
lrint_save_CFLAGS=$CFLAGS
|
||||
CFLAGS="-lm"
|
||||
AC_TRY_LINK([
|
||||
#define _ISOC9X_SOURCE 1
|
||||
#define _ISOC99_SOURCE 1
|
||||
#define __USE_ISOC99 1
|
||||
#define __USE_ISOC9X 1
|
||||
|
||||
#include <math.h>
|
||||
], if (!lrint(3.14159)) lrint(2.7183);, ac_cv_c99_lrint=yes, ac_cv_c99_lrint=no)
|
||||
|
||||
CFLAGS=$lrint_save_CFLAGS
|
||||
|
||||
])
|
||||
|
||||
if test "$ac_cv_c99_lrint" = yes; then
|
||||
AC_DEFINE(HAVE_LRINT, 1,
|
||||
[Define if you have C99's lrint function.])
|
||||
fi
|
||||
])# AC_C99_FUNC_LRINT
|
||||
|
||||
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/lrint.m4.meta
Executable file
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/lrint.m4.meta
Executable file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 41a4b907a61fa4d29b6a3dd7269e6805
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
37
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/lrintf.m4
Executable file
37
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/lrintf.m4
Executable file
@@ -0,0 +1,37 @@
|
||||
dnl @synopsis AC_C99_FUNC_LRINTF
|
||||
dnl
|
||||
dnl Check whether C99's lrintf function is available.
|
||||
dnl @version 1.3 Feb 12 2002
|
||||
dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
|
||||
dnl
|
||||
dnl Permission to use, copy, modify, distribute, and sell this file for any
|
||||
dnl purpose is hereby granted without fee, provided that the above copyright
|
||||
dnl and this permission notice appear in all copies. No representations are
|
||||
dnl made about the suitability of this software for any purpose. It is
|
||||
dnl provided "as is" without express or implied warranty.
|
||||
dnl
|
||||
AC_DEFUN([AC_C99_FUNC_LRINTF],
|
||||
[AC_CACHE_CHECK(for lrintf,
|
||||
ac_cv_c99_lrintf,
|
||||
[
|
||||
lrintf_save_CFLAGS=$CFLAGS
|
||||
CFLAGS="-lm"
|
||||
AC_TRY_LINK([
|
||||
#define _ISOC9X_SOURCE 1
|
||||
#define _ISOC99_SOURCE 1
|
||||
#define __USE_ISOC99 1
|
||||
#define __USE_ISOC9X 1
|
||||
|
||||
#include <math.h>
|
||||
], if (!lrintf(3.14159)) lrintf(2.7183);, ac_cv_c99_lrintf=yes, ac_cv_c99_lrintf=no)
|
||||
|
||||
CFLAGS=$lrintf_save_CFLAGS
|
||||
|
||||
])
|
||||
|
||||
if test "$ac_cv_c99_lrintf" = yes; then
|
||||
AC_DEFINE(HAVE_LRINTF, 1,
|
||||
[Define if you have C99's lrintf function.])
|
||||
fi
|
||||
])# AC_C99_FUNC_LRINTF
|
||||
|
||||
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/lrintf.m4.meta
Executable file
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/lrintf.m4.meta
Executable file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3ed9f2cea3c2b4f45a040f5a96f41192
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
437
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/ltoptions.m4
vendored
Executable file
437
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/ltoptions.m4
vendored
Executable file
@@ -0,0 +1,437 @@
|
||||
# Helper functions for option handling. -*- Autoconf -*-
|
||||
#
|
||||
# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software
|
||||
# Foundation, Inc.
|
||||
# Written by Gary V. Vaughan, 2004
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
# unlimited permission to copy and/or distribute it, with or without
|
||||
# modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 8 ltoptions.m4
|
||||
|
||||
# This is to help aclocal find these macros, as it can't see m4_define.
|
||||
AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
|
||||
|
||||
|
||||
# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
|
||||
# ------------------------------------------
|
||||
m4_define([_LT_MANGLE_OPTION],
|
||||
[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
|
||||
|
||||
|
||||
# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
|
||||
# ---------------------------------------
|
||||
# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
|
||||
# matching handler defined, dispatch to it. Other OPTION-NAMEs are
|
||||
# saved as a flag.
|
||||
m4_define([_LT_SET_OPTION],
|
||||
[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
|
||||
m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
|
||||
_LT_MANGLE_DEFUN([$1], [$2]),
|
||||
[m4_warning([Unknown $1 option '$2'])])[]dnl
|
||||
])
|
||||
|
||||
|
||||
# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
|
||||
# ------------------------------------------------------------
|
||||
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
|
||||
m4_define([_LT_IF_OPTION],
|
||||
[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
|
||||
|
||||
|
||||
# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
|
||||
# -------------------------------------------------------
|
||||
# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
|
||||
# are set.
|
||||
m4_define([_LT_UNLESS_OPTIONS],
|
||||
[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
|
||||
[m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
|
||||
[m4_define([$0_found])])])[]dnl
|
||||
m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
|
||||
])[]dnl
|
||||
])
|
||||
|
||||
|
||||
# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
|
||||
# ----------------------------------------
|
||||
# OPTION-LIST is a space-separated list of Libtool options associated
|
||||
# with MACRO-NAME. If any OPTION has a matching handler declared with
|
||||
# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
|
||||
# the unknown option and exit.
|
||||
m4_defun([_LT_SET_OPTIONS],
|
||||
[# Set options
|
||||
m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
|
||||
[_LT_SET_OPTION([$1], _LT_Option)])
|
||||
|
||||
m4_if([$1],[LT_INIT],[
|
||||
dnl
|
||||
dnl Simply set some default values (i.e off) if boolean options were not
|
||||
dnl specified:
|
||||
_LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
|
||||
])
|
||||
_LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
|
||||
])
|
||||
dnl
|
||||
dnl If no reference was made to various pairs of opposing options, then
|
||||
dnl we run the default mode handler for the pair. For example, if neither
|
||||
dnl 'shared' nor 'disable-shared' was passed, we enable building of shared
|
||||
dnl archives by default:
|
||||
_LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
|
||||
_LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
|
||||
_LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
|
||||
_LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
|
||||
[_LT_ENABLE_FAST_INSTALL])
|
||||
_LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4],
|
||||
[_LT_WITH_AIX_SONAME([aix])])
|
||||
])
|
||||
])# _LT_SET_OPTIONS
|
||||
|
||||
|
||||
## --------------------------------- ##
|
||||
## Macros to handle LT_INIT options. ##
|
||||
## --------------------------------- ##
|
||||
|
||||
# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
|
||||
# -----------------------------------------
|
||||
m4_define([_LT_MANGLE_DEFUN],
|
||||
[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
|
||||
|
||||
|
||||
# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
|
||||
# -----------------------------------------------
|
||||
m4_define([LT_OPTION_DEFINE],
|
||||
[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
|
||||
])# LT_OPTION_DEFINE
|
||||
|
||||
|
||||
# dlopen
|
||||
# ------
|
||||
LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
|
||||
])
|
||||
|
||||
AU_DEFUN([AC_LIBTOOL_DLOPEN],
|
||||
[_LT_SET_OPTION([LT_INIT], [dlopen])
|
||||
AC_DIAGNOSE([obsolete],
|
||||
[$0: Remove this warning and the call to _LT_SET_OPTION when you
|
||||
put the 'dlopen' option into LT_INIT's first parameter.])
|
||||
])
|
||||
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
|
||||
|
||||
|
||||
# win32-dll
|
||||
# ---------
|
||||
# Declare package support for building win32 dll's.
|
||||
LT_OPTION_DEFINE([LT_INIT], [win32-dll],
|
||||
[enable_win32_dll=yes
|
||||
|
||||
case $host in
|
||||
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
|
||||
AC_CHECK_TOOL(AS, as, false)
|
||||
AC_CHECK_TOOL(DLLTOOL, dlltool, false)
|
||||
AC_CHECK_TOOL(OBJDUMP, objdump, false)
|
||||
;;
|
||||
esac
|
||||
|
||||
test -z "$AS" && AS=as
|
||||
_LT_DECL([], [AS], [1], [Assembler program])dnl
|
||||
|
||||
test -z "$DLLTOOL" && DLLTOOL=dlltool
|
||||
_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
|
||||
|
||||
test -z "$OBJDUMP" && OBJDUMP=objdump
|
||||
_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
|
||||
])# win32-dll
|
||||
|
||||
AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
|
||||
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
||||
_LT_SET_OPTION([LT_INIT], [win32-dll])
|
||||
AC_DIAGNOSE([obsolete],
|
||||
[$0: Remove this warning and the call to _LT_SET_OPTION when you
|
||||
put the 'win32-dll' option into LT_INIT's first parameter.])
|
||||
])
|
||||
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
|
||||
|
||||
|
||||
# _LT_ENABLE_SHARED([DEFAULT])
|
||||
# ----------------------------
|
||||
# implement the --enable-shared flag, and supports the 'shared' and
|
||||
# 'disable-shared' LT_INIT options.
|
||||
# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
|
||||
m4_define([_LT_ENABLE_SHARED],
|
||||
[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
|
||||
AC_ARG_ENABLE([shared],
|
||||
[AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
|
||||
[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
|
||||
[p=${PACKAGE-default}
|
||||
case $enableval in
|
||||
yes) enable_shared=yes ;;
|
||||
no) enable_shared=no ;;
|
||||
*)
|
||||
enable_shared=no
|
||||
# Look at the argument we got. We use all the common list separators.
|
||||
lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
|
||||
for pkg in $enableval; do
|
||||
IFS=$lt_save_ifs
|
||||
if test "X$pkg" = "X$p"; then
|
||||
enable_shared=yes
|
||||
fi
|
||||
done
|
||||
IFS=$lt_save_ifs
|
||||
;;
|
||||
esac],
|
||||
[enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
|
||||
|
||||
_LT_DECL([build_libtool_libs], [enable_shared], [0],
|
||||
[Whether or not to build shared libraries])
|
||||
])# _LT_ENABLE_SHARED
|
||||
|
||||
LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
|
||||
LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
|
||||
|
||||
# Old names:
|
||||
AC_DEFUN([AC_ENABLE_SHARED],
|
||||
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
|
||||
])
|
||||
|
||||
AC_DEFUN([AC_DISABLE_SHARED],
|
||||
[_LT_SET_OPTION([LT_INIT], [disable-shared])
|
||||
])
|
||||
|
||||
AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
|
||||
AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
|
||||
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AM_ENABLE_SHARED], [])
|
||||
dnl AC_DEFUN([AM_DISABLE_SHARED], [])
|
||||
|
||||
|
||||
|
||||
# _LT_ENABLE_STATIC([DEFAULT])
|
||||
# ----------------------------
|
||||
# implement the --enable-static flag, and support the 'static' and
|
||||
# 'disable-static' LT_INIT options.
|
||||
# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
|
||||
m4_define([_LT_ENABLE_STATIC],
|
||||
[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
|
||||
AC_ARG_ENABLE([static],
|
||||
[AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
|
||||
[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
|
||||
[p=${PACKAGE-default}
|
||||
case $enableval in
|
||||
yes) enable_static=yes ;;
|
||||
no) enable_static=no ;;
|
||||
*)
|
||||
enable_static=no
|
||||
# Look at the argument we got. We use all the common list separators.
|
||||
lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
|
||||
for pkg in $enableval; do
|
||||
IFS=$lt_save_ifs
|
||||
if test "X$pkg" = "X$p"; then
|
||||
enable_static=yes
|
||||
fi
|
||||
done
|
||||
IFS=$lt_save_ifs
|
||||
;;
|
||||
esac],
|
||||
[enable_static=]_LT_ENABLE_STATIC_DEFAULT)
|
||||
|
||||
_LT_DECL([build_old_libs], [enable_static], [0],
|
||||
[Whether or not to build static libraries])
|
||||
])# _LT_ENABLE_STATIC
|
||||
|
||||
LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
|
||||
LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
|
||||
|
||||
# Old names:
|
||||
AC_DEFUN([AC_ENABLE_STATIC],
|
||||
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
|
||||
])
|
||||
|
||||
AC_DEFUN([AC_DISABLE_STATIC],
|
||||
[_LT_SET_OPTION([LT_INIT], [disable-static])
|
||||
])
|
||||
|
||||
AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
|
||||
AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
|
||||
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AM_ENABLE_STATIC], [])
|
||||
dnl AC_DEFUN([AM_DISABLE_STATIC], [])
|
||||
|
||||
|
||||
|
||||
# _LT_ENABLE_FAST_INSTALL([DEFAULT])
|
||||
# ----------------------------------
|
||||
# implement the --enable-fast-install flag, and support the 'fast-install'
|
||||
# and 'disable-fast-install' LT_INIT options.
|
||||
# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
|
||||
m4_define([_LT_ENABLE_FAST_INSTALL],
|
||||
[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
|
||||
AC_ARG_ENABLE([fast-install],
|
||||
[AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
|
||||
[optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
|
||||
[p=${PACKAGE-default}
|
||||
case $enableval in
|
||||
yes) enable_fast_install=yes ;;
|
||||
no) enable_fast_install=no ;;
|
||||
*)
|
||||
enable_fast_install=no
|
||||
# Look at the argument we got. We use all the common list separators.
|
||||
lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
|
||||
for pkg in $enableval; do
|
||||
IFS=$lt_save_ifs
|
||||
if test "X$pkg" = "X$p"; then
|
||||
enable_fast_install=yes
|
||||
fi
|
||||
done
|
||||
IFS=$lt_save_ifs
|
||||
;;
|
||||
esac],
|
||||
[enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
|
||||
|
||||
_LT_DECL([fast_install], [enable_fast_install], [0],
|
||||
[Whether or not to optimize for fast installation])dnl
|
||||
])# _LT_ENABLE_FAST_INSTALL
|
||||
|
||||
LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
|
||||
LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
|
||||
|
||||
# Old names:
|
||||
AU_DEFUN([AC_ENABLE_FAST_INSTALL],
|
||||
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
|
||||
AC_DIAGNOSE([obsolete],
|
||||
[$0: Remove this warning and the call to _LT_SET_OPTION when you put
|
||||
the 'fast-install' option into LT_INIT's first parameter.])
|
||||
])
|
||||
|
||||
AU_DEFUN([AC_DISABLE_FAST_INSTALL],
|
||||
[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
|
||||
AC_DIAGNOSE([obsolete],
|
||||
[$0: Remove this warning and the call to _LT_SET_OPTION when you put
|
||||
the 'disable-fast-install' option into LT_INIT's first parameter.])
|
||||
])
|
||||
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
|
||||
dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
|
||||
|
||||
|
||||
# _LT_WITH_AIX_SONAME([DEFAULT])
|
||||
# ----------------------------------
|
||||
# implement the --with-aix-soname flag, and support the `aix-soname=aix'
|
||||
# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT
|
||||
# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'.
|
||||
m4_define([_LT_WITH_AIX_SONAME],
|
||||
[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl
|
||||
shared_archive_member_spec=
|
||||
case $host,$enable_shared in
|
||||
power*-*-aix[[5-9]]*,yes)
|
||||
AC_MSG_CHECKING([which variant of shared library versioning to provide])
|
||||
AC_ARG_WITH([aix-soname],
|
||||
[AS_HELP_STRING([--with-aix-soname=aix|svr4|both],
|
||||
[shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])],
|
||||
[case $withval in
|
||||
aix|svr4|both)
|
||||
;;
|
||||
*)
|
||||
AC_MSG_ERROR([Unknown argument to --with-aix-soname])
|
||||
;;
|
||||
esac
|
||||
lt_cv_with_aix_soname=$with_aix_soname],
|
||||
[AC_CACHE_VAL([lt_cv_with_aix_soname],
|
||||
[lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT)
|
||||
with_aix_soname=$lt_cv_with_aix_soname])
|
||||
AC_MSG_RESULT([$with_aix_soname])
|
||||
if test aix != "$with_aix_soname"; then
|
||||
# For the AIX way of multilib, we name the shared archive member
|
||||
# based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
|
||||
# and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
|
||||
# Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
|
||||
# the AIX toolchain works better with OBJECT_MODE set (default 32).
|
||||
if test 64 = "${OBJECT_MODE-32}"; then
|
||||
shared_archive_member_spec=shr_64
|
||||
else
|
||||
shared_archive_member_spec=shr
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
with_aix_soname=aix
|
||||
;;
|
||||
esac
|
||||
|
||||
_LT_DECL([], [shared_archive_member_spec], [0],
|
||||
[Shared archive member basename, for filename based shared library versioning on AIX])dnl
|
||||
])# _LT_WITH_AIX_SONAME
|
||||
|
||||
LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])])
|
||||
LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])])
|
||||
LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])])
|
||||
|
||||
|
||||
# _LT_WITH_PIC([MODE])
|
||||
# --------------------
|
||||
# implement the --with-pic flag, and support the 'pic-only' and 'no-pic'
|
||||
# LT_INIT options.
|
||||
# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'.
|
||||
m4_define([_LT_WITH_PIC],
|
||||
[AC_ARG_WITH([pic],
|
||||
[AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
|
||||
[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
|
||||
[lt_p=${PACKAGE-default}
|
||||
case $withval in
|
||||
yes|no) pic_mode=$withval ;;
|
||||
*)
|
||||
pic_mode=default
|
||||
# Look at the argument we got. We use all the common list separators.
|
||||
lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
|
||||
for lt_pkg in $withval; do
|
||||
IFS=$lt_save_ifs
|
||||
if test "X$lt_pkg" = "X$lt_p"; then
|
||||
pic_mode=yes
|
||||
fi
|
||||
done
|
||||
IFS=$lt_save_ifs
|
||||
;;
|
||||
esac],
|
||||
[pic_mode=m4_default([$1], [default])])
|
||||
|
||||
_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
|
||||
])# _LT_WITH_PIC
|
||||
|
||||
LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
|
||||
LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
|
||||
|
||||
# Old name:
|
||||
AU_DEFUN([AC_LIBTOOL_PICMODE],
|
||||
[_LT_SET_OPTION([LT_INIT], [pic-only])
|
||||
AC_DIAGNOSE([obsolete],
|
||||
[$0: Remove this warning and the call to _LT_SET_OPTION when you
|
||||
put the 'pic-only' option into LT_INIT's first parameter.])
|
||||
])
|
||||
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
|
||||
|
||||
## ----------------- ##
|
||||
## LTDL_INIT Options ##
|
||||
## ----------------- ##
|
||||
|
||||
m4_define([_LTDL_MODE], [])
|
||||
LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
|
||||
[m4_define([_LTDL_MODE], [nonrecursive])])
|
||||
LT_OPTION_DEFINE([LTDL_INIT], [recursive],
|
||||
[m4_define([_LTDL_MODE], [recursive])])
|
||||
LT_OPTION_DEFINE([LTDL_INIT], [subproject],
|
||||
[m4_define([_LTDL_MODE], [subproject])])
|
||||
|
||||
m4_define([_LTDL_TYPE], [])
|
||||
LT_OPTION_DEFINE([LTDL_INIT], [installable],
|
||||
[m4_define([_LTDL_TYPE], [installable])])
|
||||
LT_OPTION_DEFINE([LTDL_INIT], [convenience],
|
||||
[m4_define([_LTDL_TYPE], [convenience])])
|
||||
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/ltoptions.m4.meta
vendored
Executable file
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/ltoptions.m4.meta
vendored
Executable file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 510ff128a043544c6941593f6c07affd
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
123
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/ltsugar.m4
vendored
Executable file
123
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/ltsugar.m4
vendored
Executable file
@@ -0,0 +1,123 @@
|
||||
# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
|
||||
#
|
||||
# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
|
||||
# Written by Gary V. Vaughan, 2004
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
# unlimited permission to copy and/or distribute it, with or without
|
||||
# modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 6 ltsugar.m4
|
||||
|
||||
# This is to help aclocal find these macros, as it can't see m4_define.
|
||||
AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
|
||||
|
||||
|
||||
# lt_join(SEP, ARG1, [ARG2...])
|
||||
# -----------------------------
|
||||
# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
|
||||
# associated separator.
|
||||
# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
|
||||
# versions in m4sugar had bugs.
|
||||
m4_define([lt_join],
|
||||
[m4_if([$#], [1], [],
|
||||
[$#], [2], [[$2]],
|
||||
[m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
|
||||
m4_define([_lt_join],
|
||||
[m4_if([$#$2], [2], [],
|
||||
[m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
|
||||
|
||||
|
||||
# lt_car(LIST)
|
||||
# lt_cdr(LIST)
|
||||
# ------------
|
||||
# Manipulate m4 lists.
|
||||
# These macros are necessary as long as will still need to support
|
||||
# Autoconf-2.59 which quotes differently.
|
||||
m4_define([lt_car], [[$1]])
|
||||
m4_define([lt_cdr],
|
||||
[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
|
||||
[$#], 1, [],
|
||||
[m4_dquote(m4_shift($@))])])
|
||||
m4_define([lt_unquote], $1)
|
||||
|
||||
|
||||
# lt_append(MACRO-NAME, STRING, [SEPARATOR])
|
||||
# ------------------------------------------
|
||||
# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
|
||||
# Note that neither SEPARATOR nor STRING are expanded; they are appended
|
||||
# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
|
||||
# No SEPARATOR is output if MACRO-NAME was previously undefined (different
|
||||
# than defined and empty).
|
||||
#
|
||||
# This macro is needed until we can rely on Autoconf 2.62, since earlier
|
||||
# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
|
||||
m4_define([lt_append],
|
||||
[m4_define([$1],
|
||||
m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
|
||||
|
||||
|
||||
|
||||
# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
|
||||
# ----------------------------------------------------------
|
||||
# Produce a SEP delimited list of all paired combinations of elements of
|
||||
# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
|
||||
# has the form PREFIXmINFIXSUFFIXn.
|
||||
# Needed until we can rely on m4_combine added in Autoconf 2.62.
|
||||
m4_define([lt_combine],
|
||||
[m4_if(m4_eval([$# > 3]), [1],
|
||||
[m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
|
||||
[[m4_foreach([_Lt_prefix], [$2],
|
||||
[m4_foreach([_Lt_suffix],
|
||||
]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
|
||||
[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
|
||||
|
||||
|
||||
# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
|
||||
# -----------------------------------------------------------------------
|
||||
# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
|
||||
# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
|
||||
m4_define([lt_if_append_uniq],
|
||||
[m4_ifdef([$1],
|
||||
[m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
|
||||
[lt_append([$1], [$2], [$3])$4],
|
||||
[$5])],
|
||||
[lt_append([$1], [$2], [$3])$4])])
|
||||
|
||||
|
||||
# lt_dict_add(DICT, KEY, VALUE)
|
||||
# -----------------------------
|
||||
m4_define([lt_dict_add],
|
||||
[m4_define([$1($2)], [$3])])
|
||||
|
||||
|
||||
# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
|
||||
# --------------------------------------------
|
||||
m4_define([lt_dict_add_subkey],
|
||||
[m4_define([$1($2:$3)], [$4])])
|
||||
|
||||
|
||||
# lt_dict_fetch(DICT, KEY, [SUBKEY])
|
||||
# ----------------------------------
|
||||
m4_define([lt_dict_fetch],
|
||||
[m4_ifval([$3],
|
||||
m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
|
||||
m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
|
||||
|
||||
|
||||
# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
|
||||
# -----------------------------------------------------------------
|
||||
m4_define([lt_if_dict_fetch],
|
||||
[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
|
||||
[$5],
|
||||
[$6])])
|
||||
|
||||
|
||||
# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
|
||||
# --------------------------------------------------------------
|
||||
m4_define([lt_dict_filter],
|
||||
[m4_if([$5], [], [],
|
||||
[lt_join(m4_quote(m4_default([$4], [[, ]])),
|
||||
lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
|
||||
[lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
|
||||
])
|
||||
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/ltsugar.m4.meta
vendored
Executable file
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/ltsugar.m4.meta
vendored
Executable file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fc361c32dd4604ae7bc5af565902f0e9
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
23
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/ltversion.m4
vendored
Executable file
23
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/ltversion.m4
vendored
Executable file
@@ -0,0 +1,23 @@
|
||||
# ltversion.m4 -- version numbers -*- Autoconf -*-
|
||||
#
|
||||
# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc.
|
||||
# Written by Scott James Remnant, 2004
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
# unlimited permission to copy and/or distribute it, with or without
|
||||
# modifications, as long as this notice is preserved.
|
||||
|
||||
# @configure_input@
|
||||
|
||||
# serial 4179 ltversion.m4
|
||||
# This file is part of GNU Libtool
|
||||
|
||||
m4_define([LT_PACKAGE_VERSION], [2.4.6])
|
||||
m4_define([LT_PACKAGE_REVISION], [2.4.6])
|
||||
|
||||
AC_DEFUN([LTVERSION_VERSION],
|
||||
[macro_version='2.4.6'
|
||||
macro_revision='2.4.6'
|
||||
_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
|
||||
_LT_DECL(, macro_revision, 0)
|
||||
])
|
||||
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/ltversion.m4.meta
vendored
Executable file
7
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/ltversion.m4.meta
vendored
Executable file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b8e0659b558b2463da810b1660d5533f
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
99
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/lt~obsolete.m4
vendored
Executable file
99
Assets/3rd/NativeAudio/Plugins/iOS/libsamplerate-0.1.9/M4/lt~obsolete.m4
vendored
Executable file
@@ -0,0 +1,99 @@
|
||||
# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
|
||||
#
|
||||
# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software
|
||||
# Foundation, Inc.
|
||||
# Written by Scott James Remnant, 2004.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
# unlimited permission to copy and/or distribute it, with or without
|
||||
# modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 5 lt~obsolete.m4
|
||||
|
||||
# These exist entirely to fool aclocal when bootstrapping libtool.
|
||||
#
|
||||
# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN),
|
||||
# which have later been changed to m4_define as they aren't part of the
|
||||
# exported API, or moved to Autoconf or Automake where they belong.
|
||||
#
|
||||
# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN
|
||||
# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
|
||||
# using a macro with the same name in our local m4/libtool.m4 it'll
|
||||
# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
|
||||
# and doesn't know about Autoconf macros at all.)
|
||||
#
|
||||
# So we provide this file, which has a silly filename so it's always
|
||||
# included after everything else. This provides aclocal with the
|
||||
# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
|
||||
# because those macros already exist, or will be overwritten later.
|
||||
# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
|
||||
#
|
||||
# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
|
||||
# Yes, that means every name once taken will need to remain here until
|
||||
# we give up compatibility with versions before 1.7, at which point
|
||||
# we need to keep only those names which we still refer to.
|
||||
|
||||
# This is to help aclocal find these macros, as it can't see m4_define.
|
||||
AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
|
||||
|
||||
m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
|
||||
m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])])
|
||||
m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
|
||||
m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])])
|
||||
m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
|
||||
m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])])
|
||||
m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])])
|
||||
m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
|
||||
m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])])
|
||||
m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])])
|
||||
m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])])
|
||||
m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
|
||||
m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
|
||||
m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
|
||||
m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
|
||||
m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
|
||||
m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])])
|
||||
m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
|
||||
m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
|
||||
m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])])
|
||||
m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])])
|
||||
m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
|
||||
m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
|
||||
m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
|
||||
m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
|
||||
m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
|
||||
m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
|
||||
m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
|
||||
m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])])
|
||||
m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])])
|
||||
m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])])
|
||||
m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
|
||||
m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
|
||||
m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])])
|
||||
m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])])
|
||||
m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
|
||||
m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
|
||||
m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])])
|
||||
m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
|
||||
m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
|
||||
m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
|
||||
m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
|
||||
m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
|
||||
m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
|
||||
m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
|
||||
m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
|
||||
m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
|
||||
m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
|
||||
m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
|
||||
m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
|
||||
m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
|
||||
m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
|
||||
m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
|
||||
m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
|
||||
m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
|
||||
m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])])
|
||||
m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
|
||||
m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
|
||||
m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])])
|
||||
m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])])
|
||||
m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])])
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user