mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-23 04:43:03 +01:00
Merge pull request #7469 from FirebirdSQL/work/android
Make Android port (client / embedded) work inside apps
This commit is contained in:
commit
340466e0df
110
.github/workflows/main.yml
vendored
110
.github/workflows/main.yml
vendored
@ -670,3 +670,113 @@ jobs:
|
|||||||
token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }}
|
token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }}
|
||||||
files: |
|
files: |
|
||||||
gen/Firebird-*-android-${{ matrix.arch }}*.tar.gz
|
gen/Firebird-*-android-${{ matrix.arch }}*.tar.gz
|
||||||
|
|
||||||
|
build-android-aar:
|
||||||
|
needs: build-android-final
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 10
|
||||||
|
|
||||||
|
- name: Download final build (x86)
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: firebird-android-x86
|
||||||
|
path: android/temp
|
||||||
|
|
||||||
|
- name: Download final build (x64)
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: firebird-android-x64
|
||||||
|
path: android/temp
|
||||||
|
|
||||||
|
- name: Download final build (arm32)
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: firebird-android-arm32
|
||||||
|
path: android/temp
|
||||||
|
|
||||||
|
- name: Download final build (arm64)
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: firebird-android-arm64
|
||||||
|
path: android/temp
|
||||||
|
|
||||||
|
- name: Extract final builds
|
||||||
|
working-directory: android
|
||||||
|
run: |
|
||||||
|
mkdir -p embedded/src/main/jniLibs/{x86,x86_64,armeabi-v7a,arm64-v8a}
|
||||||
|
tar xzvf temp/Firebird-*-android-x86.tar.gz -C embedded/src/main/jniLibs/x86 --strip-components=1
|
||||||
|
tar xzvf temp/Firebird-*-android-x64.tar.gz -C embedded/src/main/jniLibs/x86_64 --strip-components=1
|
||||||
|
tar xzvf temp/Firebird-*-android-arm32.tar.gz -C embedded/src/main/jniLibs/armeabi-v7a --strip-components=1
|
||||||
|
tar xzvf temp/Firebird-*-android-arm64.tar.gz -C embedded/src/main/jniLibs/arm64-v8a --strip-components=1
|
||||||
|
|
||||||
|
mkdir -p embedded/src/main/assets/firebird
|
||||||
|
mv embedded/src/main/jniLibs/x86/{*.conf,*.msg,*.dat,*.res} embedded/src/main/assets/firebird/
|
||||||
|
find embedded/src/main/jniLibs -type f ! -iname "*.so" -delete
|
||||||
|
|
||||||
|
- name: Assemble AAR
|
||||||
|
working-directory: android
|
||||||
|
run: |
|
||||||
|
./gradlew assembleRelease
|
||||||
|
FB_VERSION=`cd ../src/misc/ && . writeBuildNum.sh && echo $PRODUCT_VER_STRING`
|
||||||
|
mv embedded/build/outputs/aar/firebird-embedded-release.aar \
|
||||||
|
embedded/build/outputs/aar/Firebird-$FB_VERSION-android-embedded.aar
|
||||||
|
|
||||||
|
- name: Upload installer
|
||||||
|
uses: actions/upload-artifact@main
|
||||||
|
with:
|
||||||
|
name: firebird-android-aar
|
||||||
|
path: android/embedded/build/outputs/aar/Firebird-*-android-embedded.aar
|
||||||
|
|
||||||
|
- name: Snapshot - prepare
|
||||||
|
id: snapshot_prepare
|
||||||
|
if: |
|
||||||
|
github.repository == 'FirebirdSQL/firebird' &&
|
||||||
|
github.event.head_commit.message == 'increment build number' &&
|
||||||
|
github.ref_name == 'master'
|
||||||
|
run: |
|
||||||
|
echo "snapshot_name=${{ github.ref_name }}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Snapshot - delete old assets
|
||||||
|
uses: mknejp/delete-release-assets@v1
|
||||||
|
if: steps.snapshot_prepare.outputs.snapshot_name
|
||||||
|
with:
|
||||||
|
repository: FirebirdSQL/snapshots
|
||||||
|
token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }}
|
||||||
|
tag: snapshot-${{ steps.snapshot_prepare.outputs.snapshot_name }}
|
||||||
|
fail-if-no-release: false
|
||||||
|
fail-if-no-assets: false
|
||||||
|
assets: |
|
||||||
|
Firebird-*-android-embedded.aar
|
||||||
|
|
||||||
|
- name: Snapshot - release
|
||||||
|
id: snapshot_release_try1
|
||||||
|
uses: softprops/action-gh-release@v1
|
||||||
|
if: steps.snapshot_prepare.outputs.snapshot_name
|
||||||
|
continue-on-error: true
|
||||||
|
with:
|
||||||
|
repository: FirebirdSQL/snapshots
|
||||||
|
name: Latest snapshots for ${{ steps.snapshot_prepare.outputs.snapshot_name }}
|
||||||
|
tag_name: snapshot-${{ steps.snapshot_prepare.outputs.snapshot_name }}
|
||||||
|
prerelease: true
|
||||||
|
token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }}
|
||||||
|
files: |
|
||||||
|
android/embedded/build/outputs/aar/Firebird-*-android-embedded.aar
|
||||||
|
|
||||||
|
- name: Snapshot - release (retry)
|
||||||
|
uses: softprops/action-gh-release@v1
|
||||||
|
if: |
|
||||||
|
steps.snapshot_prepare.outputs.snapshot_name &&
|
||||||
|
steps.snapshot_release_try1.outcome == 'failure'
|
||||||
|
with:
|
||||||
|
repository: FirebirdSQL/snapshots
|
||||||
|
name: Latest snapshots for ${{ steps.snapshot_prepare.outputs.snapshot_name }}
|
||||||
|
tag_name: snapshot-${{ steps.snapshot_prepare.outputs.snapshot_name }}
|
||||||
|
prerelease: true
|
||||||
|
token: ${{ secrets.SNAPSHOT_RELEASE_TOKEN }}
|
||||||
|
files: |
|
||||||
|
android/embedded/build/outputs/aar/Firebird-*-android-embedded.aar
|
||||||
|
15
android/.gitignore
vendored
Normal file
15
android/.gitignore
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
*.iml
|
||||||
|
.gradle
|
||||||
|
/local.properties
|
||||||
|
/.idea/caches
|
||||||
|
/.idea/libraries
|
||||||
|
/.idea/modules.xml
|
||||||
|
/.idea/workspace.xml
|
||||||
|
/.idea/navEditor.xml
|
||||||
|
/.idea/assetWizardSettings.xml
|
||||||
|
.DS_Store
|
||||||
|
/build
|
||||||
|
/captures
|
||||||
|
.externalNativeBuild
|
||||||
|
.cxx
|
||||||
|
local.properties
|
3
android/.idea/.gitignore
vendored
Normal file
3
android/.idea/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
1
android/.idea/.name
Normal file
1
android/.idea/.name
Normal file
@ -0,0 +1 @@
|
|||||||
|
Firebird for Android
|
125
android/.idea/codeStyles/Project.xml
Normal file
125
android/.idea/codeStyles/Project.xml
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
|
<code_scheme name="Project" version="173">
|
||||||
|
<JetCodeStyleSettings>
|
||||||
|
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
||||||
|
</JetCodeStyleSettings>
|
||||||
|
<editorconfig>
|
||||||
|
<option name="ENABLED" value="false" />
|
||||||
|
</editorconfig>
|
||||||
|
<codeStyleSettings language="XML">
|
||||||
|
<indentOptions>
|
||||||
|
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||||
|
</indentOptions>
|
||||||
|
<arrangement>
|
||||||
|
<rules>
|
||||||
|
<section>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<NAME>xmlns:android</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
|
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<NAME>xmlns:.*</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
|
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
<order>BY_NAME</order>
|
||||||
|
</rule>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<NAME>.*:id</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
|
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<NAME>.*:name</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
|
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<NAME>name</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
|
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<NAME>style</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
|
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<NAME>.*</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
|
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
<order>BY_NAME</order>
|
||||||
|
</rule>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<NAME>.*</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
|
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
<order>ANDROID_ATTRIBUTE_ORDER</order>
|
||||||
|
</rule>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<NAME>.*</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
|
<XML_NAMESPACE>.*</XML_NAMESPACE>
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
<order>BY_NAME</order>
|
||||||
|
</rule>
|
||||||
|
</section>
|
||||||
|
</rules>
|
||||||
|
</arrangement>
|
||||||
|
</codeStyleSettings>
|
||||||
|
<codeStyleSettings language="kotlin">
|
||||||
|
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
||||||
|
</codeStyleSettings>
|
||||||
|
</code_scheme>
|
||||||
|
</component>
|
5
android/.idea/codeStyles/codeStyleConfig.xml
Normal file
5
android/.idea/codeStyles/codeStyleConfig.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
|
<state>
|
||||||
|
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
||||||
|
</state>
|
||||||
|
</component>
|
6
android/.idea/compiler.xml
Normal file
6
android/.idea/compiler.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="CompilerConfiguration">
|
||||||
|
<bytecodeTargetLevel target="11" />
|
||||||
|
</component>
|
||||||
|
</project>
|
19
android/.idea/gradle.xml
Normal file
19
android/.idea/gradle.xml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="GradleMigrationSettings" migrationVersion="1" />
|
||||||
|
<component name="GradleSettings">
|
||||||
|
<option name="linkedExternalProjectsSettings">
|
||||||
|
<GradleProjectSettings>
|
||||||
|
<option name="testRunner" value="GRADLE" />
|
||||||
|
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
||||||
|
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||||
|
<option name="modules">
|
||||||
|
<set>
|
||||||
|
<option value="$PROJECT_DIR$" />
|
||||||
|
<option value="$PROJECT_DIR$/embedded" />
|
||||||
|
</set>
|
||||||
|
</option>
|
||||||
|
</GradleProjectSettings>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
9
android/.idea/misc.xml
Normal file
9
android/.idea/misc.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectType">
|
||||||
|
<option name="id" value="Android" />
|
||||||
|
</component>
|
||||||
|
</project>
|
6
android/.idea/vcs.xml
Normal file
6
android/.idea/vcs.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
10
android/build.gradle
Normal file
10
android/build.gradle
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
|
plugins {
|
||||||
|
id 'com.android.application' version '7.2.2' apply false
|
||||||
|
id 'com.android.library' version '7.2.2' apply false
|
||||||
|
id 'org.jetbrains.kotlin.android' version '1.6.10' apply false
|
||||||
|
}
|
||||||
|
|
||||||
|
task clean(type: Delete) {
|
||||||
|
delete rootProject.buildDir
|
||||||
|
}
|
1
android/embedded/.gitignore
vendored
Normal file
1
android/embedded/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/build
|
43
android/embedded/build.gradle
Normal file
43
android/embedded/build.gradle
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
plugins {
|
||||||
|
id 'com.android.library'
|
||||||
|
id 'org.jetbrains.kotlin.android'
|
||||||
|
}
|
||||||
|
|
||||||
|
android {
|
||||||
|
compileSdk 32
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
minSdk 24
|
||||||
|
targetSdk 32
|
||||||
|
|
||||||
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
consumerProguardFiles "consumer-rules.pro"
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility JavaVersion.VERSION_1_8
|
||||||
|
targetCompatibility JavaVersion.VERSION_1_8
|
||||||
|
}
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = '1.8'
|
||||||
|
}
|
||||||
|
libraryVariants.all { variant ->
|
||||||
|
variant.outputs.all {
|
||||||
|
outputFileName = "firebird-embedded-${variant.name}.aar"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
|
||||||
|
implementation 'androidx.core:core-ktx:1.7.0'
|
||||||
|
testImplementation 'junit:junit:4.13.2'
|
||||||
|
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
|
||||||
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
|
||||||
|
}
|
0
android/embedded/consumer-rules.pro
Normal file
0
android/embedded/consumer-rules.pro
Normal file
21
android/embedded/proguard-rules.pro
vendored
Normal file
21
android/embedded/proguard-rules.pro
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# Add project specific ProGuard rules here.
|
||||||
|
# You can control the set of applied configuration files using the
|
||||||
|
# proguardFiles setting in build.gradle.
|
||||||
|
#
|
||||||
|
# For more details, see
|
||||||
|
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||||
|
|
||||||
|
# If your project uses WebView with JS, uncomment the following
|
||||||
|
# and specify the fully qualified class name to the JavaScript interface
|
||||||
|
# class:
|
||||||
|
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||||
|
# public *;
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Uncomment this to preserve the line number information for
|
||||||
|
# debugging stack traces.
|
||||||
|
#-keepattributes SourceFile,LineNumberTable
|
||||||
|
|
||||||
|
# If you keep the line number information, uncomment this to
|
||||||
|
# hide the original source file name.
|
||||||
|
#-renamesourcefileattribute SourceFile
|
@ -0,0 +1,24 @@
|
|||||||
|
package org.firebirdsql.android.embedded
|
||||||
|
|
||||||
|
import androidx.test.platform.app.InstrumentationRegistry
|
||||||
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
|
||||||
|
import org.junit.Assert.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instrumented test, which will execute on an Android device.
|
||||||
|
*
|
||||||
|
* See [testing documentation](http://d.android.com/tools/testing).
|
||||||
|
*/
|
||||||
|
@RunWith(AndroidJUnit4::class)
|
||||||
|
class ExampleInstrumentedTest {
|
||||||
|
@Test
|
||||||
|
fun useAppContext() {
|
||||||
|
// Context of the app under test.
|
||||||
|
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
|
||||||
|
assertEquals("org.firebirdsql.android.embedded.test", appContext.packageName)
|
||||||
|
}
|
||||||
|
}
|
5
android/embedded/src/main/AndroidManifest.xml
Normal file
5
android/embedded/src/main/AndroidManifest.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
package="org.firebirdsql.android.embedded">
|
||||||
|
|
||||||
|
</manifest>
|
@ -0,0 +1,78 @@
|
|||||||
|
package org.firebirdsql.android.embedded
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.system.ErrnoException
|
||||||
|
import android.system.Os
|
||||||
|
import android.util.Log
|
||||||
|
import java.io.File
|
||||||
|
import java.io.FileOutputStream
|
||||||
|
import java.io.IOException
|
||||||
|
|
||||||
|
|
||||||
|
public object FirebirdConf {
|
||||||
|
private const val TAG = "FirebirdAndroid"
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
@Throws(IOException::class)
|
||||||
|
public fun extractAssets(context: Context, force: Boolean = true) {
|
||||||
|
val firebirdRootPath = File(context.filesDir, "firebird")
|
||||||
|
|
||||||
|
if (!force && firebirdRootPath.exists())
|
||||||
|
return;
|
||||||
|
|
||||||
|
val firebirdTempRootPath = File(context.filesDir, "firebird.tmp")
|
||||||
|
|
||||||
|
if (firebirdTempRootPath.exists())
|
||||||
|
deleteDirectory(firebirdTempRootPath)
|
||||||
|
|
||||||
|
firebirdTempRootPath.mkdir()
|
||||||
|
|
||||||
|
val firebirdTmpPath = File(firebirdTempRootPath, "tmp")
|
||||||
|
firebirdTmpPath.mkdirs()
|
||||||
|
|
||||||
|
val firebirdLockPath = File(firebirdTempRootPath, "lock")
|
||||||
|
firebirdLockPath.mkdirs()
|
||||||
|
|
||||||
|
val assetManager = context.assets
|
||||||
|
val buffer = ByteArray(1024)
|
||||||
|
|
||||||
|
for (asset in assetManager.list("firebird")!!) {
|
||||||
|
Log.d(TAG, "Extracting Firebird asset: $asset")
|
||||||
|
|
||||||
|
assetManager.open("firebird/$asset").use { input ->
|
||||||
|
FileOutputStream(File(firebirdTempRootPath, asset)).use { output ->
|
||||||
|
var len: Int
|
||||||
|
while (input.read(buffer).also { len = it } > 0)
|
||||||
|
output.write(buffer, 0, len)
|
||||||
|
output.flush()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (firebirdRootPath.exists())
|
||||||
|
deleteDirectory(firebirdRootPath)
|
||||||
|
|
||||||
|
firebirdTempRootPath.renameTo(firebirdRootPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
@Throws(ErrnoException::class)
|
||||||
|
public fun setEnv(context: Context) {
|
||||||
|
val firebirdRootPath = File(context.filesDir, "firebird")
|
||||||
|
val firebirdTmpPath = File(firebirdRootPath, "tmp")
|
||||||
|
val firebirdLockPath = File(firebirdRootPath, "lock")
|
||||||
|
|
||||||
|
Os.setenv("FIREBIRD", firebirdRootPath.absolutePath, true)
|
||||||
|
Os.setenv("FIREBIRD_TMP", firebirdTmpPath.absolutePath, true)
|
||||||
|
Os.setenv("FIREBIRD_LOCK", firebirdLockPath.absolutePath, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun deleteDirectory(directory: File) {
|
||||||
|
for (file in directory.listFiles()) {
|
||||||
|
if (file.isDirectory)
|
||||||
|
deleteDirectory(file)
|
||||||
|
else
|
||||||
|
file.delete()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package org.firebirdsql.android.embedded
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
import org.junit.Assert.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Example local unit test, which will execute on the development machine (host).
|
||||||
|
*
|
||||||
|
* See [testing documentation](http://d.android.com/tools/testing).
|
||||||
|
*/
|
||||||
|
class ExampleUnitTest {
|
||||||
|
@Test
|
||||||
|
fun addition_isCorrect() {
|
||||||
|
assertEquals(4, 2 + 2)
|
||||||
|
}
|
||||||
|
}
|
23
android/gradle.properties
Normal file
23
android/gradle.properties
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# Project-wide Gradle settings.
|
||||||
|
# IDE (e.g. Android Studio) users:
|
||||||
|
# Gradle settings configured through the IDE *will override*
|
||||||
|
# any settings specified in this file.
|
||||||
|
# For more details on how to configure your build environment visit
|
||||||
|
# http://www.gradle.org/docs/current/userguide/build_environment.html
|
||||||
|
# Specifies the JVM arguments used for the daemon process.
|
||||||
|
# The setting is particularly useful for tweaking memory settings.
|
||||||
|
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
|
||||||
|
# When configured, Gradle will run in incubating parallel mode.
|
||||||
|
# This option should only be used with decoupled projects. More details, visit
|
||||||
|
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
||||||
|
# org.gradle.parallel=true
|
||||||
|
# AndroidX package structure to make it clearer which packages are bundled with the
|
||||||
|
# Android operating system, and which are packaged with your app"s APK
|
||||||
|
# https://developer.android.com/topic/libraries/support-library/androidx-rn
|
||||||
|
android.useAndroidX=true
|
||||||
|
# Kotlin code style for this project: "official" or "obsolete":
|
||||||
|
kotlin.code.style=official
|
||||||
|
# Enables namespacing of each library's R class so that its R class includes only the
|
||||||
|
# resources declared in the library itself and none from the library's dependencies,
|
||||||
|
# thereby reducing the size of the R class for that library
|
||||||
|
android.nonTransitiveRClass=true
|
BIN
android/gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
BIN
android/gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
Binary file not shown.
6
android/gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
6
android/gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#Mon Feb 06 07:47:43 BRT 2023
|
||||||
|
distributionBase=GRADLE_USER_HOME
|
||||||
|
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
|
||||||
|
distributionPath=wrapper/dists
|
||||||
|
zipStorePath=wrapper/dists
|
||||||
|
zipStoreBase=GRADLE_USER_HOME
|
185
android/gradlew
vendored
Executable file
185
android/gradlew
vendored
Executable file
@ -0,0 +1,185 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
#
|
||||||
|
# Copyright 2015 the original author or authors.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
##
|
||||||
|
## Gradle start up script for UN*X
|
||||||
|
##
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
# Attempt to set APP_HOME
|
||||||
|
# Resolve links: $0 may be a link
|
||||||
|
PRG="$0"
|
||||||
|
# Need this for relative symlinks.
|
||||||
|
while [ -h "$PRG" ] ; do
|
||||||
|
ls=`ls -ld "$PRG"`
|
||||||
|
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||||
|
if expr "$link" : '/.*' > /dev/null; then
|
||||||
|
PRG="$link"
|
||||||
|
else
|
||||||
|
PRG=`dirname "$PRG"`"/$link"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
SAVED="`pwd`"
|
||||||
|
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||||
|
APP_HOME="`pwd -P`"
|
||||||
|
cd "$SAVED" >/dev/null
|
||||||
|
|
||||||
|
APP_NAME="Gradle"
|
||||||
|
APP_BASE_NAME=`basename "$0"`
|
||||||
|
|
||||||
|
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
|
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||||
|
|
||||||
|
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||||
|
MAX_FD="maximum"
|
||||||
|
|
||||||
|
warn () {
|
||||||
|
echo "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
die () {
|
||||||
|
echo
|
||||||
|
echo "$*"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# OS specific support (must be 'true' or 'false').
|
||||||
|
cygwin=false
|
||||||
|
msys=false
|
||||||
|
darwin=false
|
||||||
|
nonstop=false
|
||||||
|
case "`uname`" in
|
||||||
|
CYGWIN* )
|
||||||
|
cygwin=true
|
||||||
|
;;
|
||||||
|
Darwin* )
|
||||||
|
darwin=true
|
||||||
|
;;
|
||||||
|
MINGW* )
|
||||||
|
msys=true
|
||||||
|
;;
|
||||||
|
NONSTOP* )
|
||||||
|
nonstop=true
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||||
|
|
||||||
|
|
||||||
|
# Determine the Java command to use to start the JVM.
|
||||||
|
if [ -n "$JAVA_HOME" ] ; then
|
||||||
|
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||||
|
# IBM's JDK on AIX uses strange locations for the executables
|
||||||
|
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||||
|
else
|
||||||
|
JAVACMD="$JAVA_HOME/bin/java"
|
||||||
|
fi
|
||||||
|
if [ ! -x "$JAVACMD" ] ; then
|
||||||
|
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
location of your Java installation."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
JAVACMD="java"
|
||||||
|
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
location of your Java installation."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Increase the maximum file descriptors if we can.
|
||||||
|
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||||
|
MAX_FD_LIMIT=`ulimit -H -n`
|
||||||
|
if [ $? -eq 0 ] ; then
|
||||||
|
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||||
|
MAX_FD="$MAX_FD_LIMIT"
|
||||||
|
fi
|
||||||
|
ulimit -n $MAX_FD
|
||||||
|
if [ $? -ne 0 ] ; then
|
||||||
|
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# For Darwin, add options to specify how the application appears in the dock
|
||||||
|
if $darwin; then
|
||||||
|
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||||
|
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
||||||
|
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||||
|
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||||
|
|
||||||
|
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||||
|
|
||||||
|
# We build the pattern for arguments to be converted via cygpath
|
||||||
|
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||||
|
SEP=""
|
||||||
|
for dir in $ROOTDIRSRAW ; do
|
||||||
|
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||||
|
SEP="|"
|
||||||
|
done
|
||||||
|
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||||
|
# Add a user-defined pattern to the cygpath arguments
|
||||||
|
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||||
|
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||||
|
fi
|
||||||
|
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||||
|
i=0
|
||||||
|
for arg in "$@" ; do
|
||||||
|
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||||
|
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||||
|
|
||||||
|
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||||
|
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||||
|
else
|
||||||
|
eval `echo args$i`="\"$arg\""
|
||||||
|
fi
|
||||||
|
i=`expr $i + 1`
|
||||||
|
done
|
||||||
|
case $i in
|
||||||
|
0) set -- ;;
|
||||||
|
1) set -- "$args0" ;;
|
||||||
|
2) set -- "$args0" "$args1" ;;
|
||||||
|
3) set -- "$args0" "$args1" "$args2" ;;
|
||||||
|
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||||
|
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||||
|
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||||
|
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||||
|
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||||
|
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Escape application args
|
||||||
|
save () {
|
||||||
|
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
APP_ARGS=`save "$@"`
|
||||||
|
|
||||||
|
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||||
|
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||||
|
|
||||||
|
exec "$JAVACMD" "$@"
|
89
android/gradlew.bat
vendored
Normal file
89
android/gradlew.bat
vendored
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
@rem
|
||||||
|
@rem Copyright 2015 the original author or authors.
|
||||||
|
@rem
|
||||||
|
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
@rem you may not use this file except in compliance with the License.
|
||||||
|
@rem You may obtain a copy of the License at
|
||||||
|
@rem
|
||||||
|
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
@rem
|
||||||
|
@rem Unless required by applicable law or agreed to in writing, software
|
||||||
|
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
@rem See the License for the specific language governing permissions and
|
||||||
|
@rem limitations under the License.
|
||||||
|
@rem
|
||||||
|
|
||||||
|
@if "%DEBUG%" == "" @echo off
|
||||||
|
@rem ##########################################################################
|
||||||
|
@rem
|
||||||
|
@rem Gradle startup script for Windows
|
||||||
|
@rem
|
||||||
|
@rem ##########################################################################
|
||||||
|
|
||||||
|
@rem Set local scope for the variables with windows NT shell
|
||||||
|
if "%OS%"=="Windows_NT" setlocal
|
||||||
|
|
||||||
|
set DIRNAME=%~dp0
|
||||||
|
if "%DIRNAME%" == "" set DIRNAME=.
|
||||||
|
set APP_BASE_NAME=%~n0
|
||||||
|
set APP_HOME=%DIRNAME%
|
||||||
|
|
||||||
|
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||||
|
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||||
|
|
||||||
|
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
|
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||||
|
|
||||||
|
@rem Find java.exe
|
||||||
|
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||||
|
|
||||||
|
set JAVA_EXE=java.exe
|
||||||
|
%JAVA_EXE% -version >NUL 2>&1
|
||||||
|
if "%ERRORLEVEL%" == "0" goto execute
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
echo.
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
echo location of your Java installation.
|
||||||
|
|
||||||
|
goto fail
|
||||||
|
|
||||||
|
:findJavaFromJavaHome
|
||||||
|
set JAVA_HOME=%JAVA_HOME:"=%
|
||||||
|
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||||
|
|
||||||
|
if exist "%JAVA_EXE%" goto execute
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||||
|
echo.
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
echo location of your Java installation.
|
||||||
|
|
||||||
|
goto fail
|
||||||
|
|
||||||
|
:execute
|
||||||
|
@rem Setup the command line
|
||||||
|
|
||||||
|
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||||
|
|
||||||
|
|
||||||
|
@rem Execute Gradle
|
||||||
|
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
||||||
|
|
||||||
|
:end
|
||||||
|
@rem End local scope for the variables with windows NT shell
|
||||||
|
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||||
|
|
||||||
|
:fail
|
||||||
|
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||||
|
rem the _cmd.exe /c_ return code!
|
||||||
|
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:mainEnd
|
||||||
|
if "%OS%"=="Windows_NT" endlocal
|
||||||
|
|
||||||
|
:omega
|
16
android/settings.gradle
Normal file
16
android/settings.gradle
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
pluginManagement {
|
||||||
|
repositories {
|
||||||
|
gradlePluginPortal()
|
||||||
|
google()
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dependencyResolutionManagement {
|
||||||
|
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
|
||||||
|
repositories {
|
||||||
|
google()
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rootProject.name = "Firebird for Android"
|
||||||
|
include ':embedded'
|
@ -18,9 +18,9 @@ runAndCheckExit() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
runAndCheckExit "Build messages file (firebird.msg)" "bin/build_file -f firebird.msg"
|
runAndCheckExit "Build messages file (firebird.msg)" "./build_file -f firebird.msg"
|
||||||
runAndCheckExit "Creating security database" "echo create database \'security5.fdb\'^ | bin/isql -q -term ^"
|
runAndCheckExit "Creating security database" "echo create database \'security5.fdb\'^ | ./isql -q -term ^"
|
||||||
runAndCheckExit "Creating security database metadata" "bin/isql -q security5.fdb -i security.sql"
|
runAndCheckExit "Creating security database metadata" "./isql -q security5.fdb -i security.sql"
|
||||||
runAndCheckExit "Restore examples database (employee)" "(cd examples/empbuild ; ../../bin/isql -q -i ../../employe2.sql)"
|
#runAndCheckExit "Restore examples database (employee)" "(cd examples/empbuild ; ../.././isql -q -i ../../employe2.sql)"
|
||||||
|
|
||||||
rm -f security.sql employe2.sql bin/build_file AfterUntar.sh
|
rm -f security.sql employe2.sql ./build_file AfterUntar.sh
|
||||||
|
@ -3,12 +3,14 @@ set -e
|
|||||||
|
|
||||||
arch=${1}
|
arch=${1}
|
||||||
|
|
||||||
case $OSTYPE in
|
OS=`uname -s`
|
||||||
darwin*)
|
|
||||||
|
case $OS in
|
||||||
|
Darwin)
|
||||||
NDK_TOOLCHAIN_NAME=darwin-x86_64
|
NDK_TOOLCHAIN_NAME=darwin-x86_64
|
||||||
TAR_OPTS="--numeric-owner --uid=0 --gid=0"
|
TAR_OPTS="--numeric-owner --uid=0 --gid=0"
|
||||||
FIND_EXEC_OPTS="-perm +0111" ;;
|
FIND_EXEC_OPTS="-perm +0111" ;;
|
||||||
linux*)
|
Linux)
|
||||||
NDK_TOOLCHAIN_NAME=linux-x86_64
|
NDK_TOOLCHAIN_NAME=linux-x86_64
|
||||||
TAR_OPTS="--numeric-owner --owner=0 --group=0"
|
TAR_OPTS="--numeric-owner --owner=0 --group=0"
|
||||||
FIND_EXEC_OPTS="-executable" ;;
|
FIND_EXEC_OPTS="-executable" ;;
|
||||||
@ -34,26 +36,27 @@ AndroidDeviceName=emulator-$AndroidDevicePort
|
|||||||
AndroidDir=/data/$InitialBaseName
|
AndroidDir=/data/$InitialBaseName
|
||||||
|
|
||||||
mkdir -p gen/Release
|
mkdir -p gen/Release
|
||||||
(cd gen; gunzip -k $InitialDebugTarGz)
|
(cd gen; gunzip --force -k $InitialDebugTarGz)
|
||||||
(cd gen/Release; tar xvzf ../$InitialDebugTarGz)
|
(cd gen/Release; tar xvzf ../$InitialDebugTarGz)
|
||||||
|
|
||||||
|
$ANDROID_HOME/platform-tools/adb -s $AndroidDeviceName shell "rm -rf $AndroidDir"
|
||||||
$ANDROID_HOME/platform-tools/adb -s $AndroidDeviceName shell "mkdir $AndroidDir"
|
$ANDROID_HOME/platform-tools/adb -s $AndroidDeviceName shell "mkdir $AndroidDir"
|
||||||
$ANDROID_HOME/platform-tools/adb -s $AndroidDeviceName push gen/$InitialDebugTar $AndroidDir/
|
$ANDROID_HOME/platform-tools/adb -s $AndroidDeviceName push gen/$InitialDebugTar $AndroidDir/
|
||||||
$ANDROID_HOME/platform-tools/adb -s $AndroidDeviceName shell "(cd $AndroidDir && tar xvf $InitialDebugTar)"
|
$ANDROID_HOME/platform-tools/adb -s $AndroidDeviceName shell "(cd $AndroidDir && tar xvf $InitialDebugTar)"
|
||||||
$ANDROID_HOME/platform-tools/adb -s $AndroidDeviceName shell "(cd $AndroidDir/firebird/tests && ./common_test --log_level=all && ./libEngine13_test --log_level=all)"
|
$ANDROID_HOME/platform-tools/adb -s $AndroidDeviceName shell "(cd $AndroidDir/firebird && ./common_test --log_level=all && ./libEngine13_test --log_level=all)"
|
||||||
$ANDROID_HOME/platform-tools/adb -s $AndroidDeviceName shell "(cd $AndroidDir/firebird && ./AfterUntar.sh)"
|
$ANDROID_HOME/platform-tools/adb -s $AndroidDeviceName shell "(cd $AndroidDir/firebird && ./AfterUntar.sh)"
|
||||||
$ANDROID_HOME/platform-tools/adb -s $AndroidDeviceName pull $AndroidDir/firebird/firebird.msg gen/Release/firebird/
|
$ANDROID_HOME/platform-tools/adb -s $AndroidDeviceName pull $AndroidDir/firebird/firebird.msg gen/Release/firebird/
|
||||||
$ANDROID_HOME/platform-tools/adb -s $AndroidDeviceName pull $AndroidDir/firebird/security5.fdb gen/Release/firebird/
|
$ANDROID_HOME/platform-tools/adb -s $AndroidDeviceName pull $AndroidDir/firebird/security5.fdb gen/Release/firebird/
|
||||||
$ANDROID_HOME/platform-tools/adb -s $AndroidDeviceName pull $AndroidDir/firebird/examples/empbuild/employe2.fdb gen/Release/firebird/examples/empbuild/
|
#$ANDROID_HOME/platform-tools/adb -s $AndroidDeviceName pull $AndroidDir/firebird/examples/empbuild/employe2.fdb gen/Release/firebird/examples/empbuild/
|
||||||
$ANDROID_HOME/platform-tools/adb -s $AndroidDeviceName shell "(rm -rf $AndroidDir)"
|
$ANDROID_HOME/platform-tools/adb -s $AndroidDeviceName shell "(rm -rf $AndroidDir)"
|
||||||
|
|
||||||
rm gen/$InitialDebugTar
|
rm gen/$InitialDebugTar
|
||||||
cd gen/Release
|
cd gen/Release
|
||||||
rm -rf ${Stripped}
|
rm -rf ${Stripped}
|
||||||
|
|
||||||
rm -f firebird/{security.sql,employe2.sql,bin/build_file,AfterUntar.sh}
|
TAR_OPTS="$TAR_OPTS --exclude *_test --exclude security.sql --exclude employe2.sql --exclude build_file --exclude AfterUntar.sh"
|
||||||
|
|
||||||
tar $TAR_OPTS --exclude tests -czvf ../$FinalDebug firebird
|
tar $TAR_OPTS -czvf ../$FinalDebug firebird
|
||||||
|
|
||||||
mkdir ${Stripped}
|
mkdir ${Stripped}
|
||||||
tar cf - firebird | (cd ${Stripped}; tar xvf -)
|
tar cf - firebird | (cd ${Stripped}; tar xvf -)
|
||||||
@ -66,4 +69,4 @@ do
|
|||||||
${aStrip} ${file}
|
${aStrip} ${file}
|
||||||
done
|
done
|
||||||
|
|
||||||
tar $TAR_OPTS --exclude tests -czvf ../../$FinalRelease firebird
|
tar $TAR_OPTS -czvf ../../$FinalRelease firebird
|
||||||
|
@ -22,8 +22,8 @@ cp ${fbRootDir}/builds/install/arch-specific/android/AfterUntar.sh firebird
|
|||||||
chmod +x firebird/AfterUntar.sh
|
chmod +x firebird/AfterUntar.sh
|
||||||
cp ${fbRootDir}/src/dbs/security.sql firebird
|
cp ${fbRootDir}/src/dbs/security.sql firebird
|
||||||
cp ${fbRootDir}/examples/empbuild/employe2.sql firebird
|
cp ${fbRootDir}/examples/empbuild/employe2.sql firebird
|
||||||
tar -C firebird/lib --wildcards -xvf ../../extern/icu/icu_android.tar.xz icudt*.dat
|
unzip -o ../../extern/icu/icudt.zip -d firebird
|
||||||
tar -C firebird/lib --wildcards --strip-components 1 -xvf ../../extern/icu/icu_android.tar.xz ${arch}/*
|
tar -C firebird --wildcards --strip-components 1 -xvf ../../extern/icu/icu_android.tar.xz ${arch}/*
|
||||||
echo .
|
echo .
|
||||||
echo .
|
echo .
|
||||||
echo "Compress with deb-info"
|
echo "Compress with deb-info"
|
||||||
|
@ -188,17 +188,17 @@ endif
|
|||||||
CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" $(MAKE) -C $(ROOT)/extern/cloop TARGET=release WITH_FPC=0 BUILD_DIR=$(TMP_ROOT)/cloop OUT_DIR=$(GEN_ROOT)/$(TARGET)/cloop core
|
CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" $(MAKE) -C $(ROOT)/extern/cloop TARGET=release WITH_FPC=0 BUILD_DIR=$(TMP_ROOT)/cloop OUT_DIR=$(GEN_ROOT)/$(TARGET)/cloop core
|
||||||
|
|
||||||
CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" $(MAKE) -C $(ROOT)/extern/decNumber
|
CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" $(MAKE) -C $(ROOT)/extern/decNumber
|
||||||
ln -sf $(ROOT)/extern/decNumber/libdecFloat.a $(LIB)
|
ln -sf $(ROOT)/extern/decNumber/libdecFloat.a $(STATIC_LIB)
|
||||||
|
|
||||||
ifeq ($(ABSEIL_BUILD_FLG),Y)
|
ifeq ($(ABSEIL_BUILD_FLG),Y)
|
||||||
CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" $(MAKE) -C $(ROOT)/extern/int128/absl/numeric
|
CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" $(MAKE) -C $(ROOT)/extern/int128/absl/numeric
|
||||||
ln -sf $(ROOT)/extern/int128/absl/numeric/libi128.a $(LIB)
|
ln -sf $(ROOT)/extern/int128/absl/numeric/libi128.a $(STATIC_LIB)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(CLIENT_ONLY_FLG),N)
|
ifeq ($(CLIENT_ONLY_FLG),N)
|
||||||
ifeq ($(RE2_BUILD_FLG),Y)
|
ifeq ($(RE2_BUILD_FLG),Y)
|
||||||
CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS) -O3 -g -fPIC" AR="$(AR)" $(MAKE) -C $(ROOT)/extern/re2
|
CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS) -O3 -g -fPIC" AR="$(AR)" $(MAKE) -C $(ROOT)/extern/re2
|
||||||
ln -sf $(ROOT)/extern/re2/obj/libre2.a $(LIB)
|
ln -sf $(ROOT)/extern/re2/obj/libre2.a $(STATIC_LIB)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(MAKE) libcds
|
$(MAKE) libcds
|
||||||
@ -251,7 +251,7 @@ export_lists: $(ALLVERS)
|
|||||||
#
|
#
|
||||||
|
|
||||||
.PHONY: tommath
|
.PHONY: tommath
|
||||||
TOMMATH_LIB=$(LIB)/libtommath.a
|
TOMMATH_LIB=$(STATIC_LIB)/libtommath.a
|
||||||
TOM_Objs=$(addprefix ../extern/libtommath/,$(call doObjects,$(call dirFiles,../extern/libtommath)))
|
TOM_Objs=$(addprefix ../extern/libtommath/,$(call doObjects,$(call dirFiles,../extern/libtommath)))
|
||||||
|
|
||||||
tommath: $(TOMMATH_LIB)
|
tommath: $(TOMMATH_LIB)
|
||||||
@ -265,7 +265,7 @@ $(TOMMATH_LIB): $(TOM_Objs)
|
|||||||
#
|
#
|
||||||
|
|
||||||
.PHONY: tomcrypt
|
.PHONY: tomcrypt
|
||||||
TOMCRYPT_LIB=$(LIB)/libtomcrypt.a
|
TOMCRYPT_LIB=$(STATIC_LIB)/libtomcrypt.a
|
||||||
|
|
||||||
TOM_Src:=$(shell find ../extern/libtomcrypt/src -name '*.c' -print)
|
TOM_Src:=$(shell find ../extern/libtomcrypt/src -name '*.c' -print)
|
||||||
TOM_Objs=$(call doObjects,$(TOM_Src))
|
TOM_Objs=$(call doObjects,$(TOM_Src))
|
||||||
@ -281,7 +281,7 @@ $(TOMCRYPT_LIB): $(TOM_Objs)
|
|||||||
#
|
#
|
||||||
|
|
||||||
.PHONY: re2
|
.PHONY: re2
|
||||||
RE2_LIB:=$(LIB)/libre2.a
|
RE2_LIB:=$(STATIC_LIB)/libre2.a
|
||||||
RE2_DIR:=../extern/re2/
|
RE2_DIR:=../extern/re2/
|
||||||
|
|
||||||
RE2_Util:=rune.cc strutil.cc
|
RE2_Util:=rune.cc strutil.cc
|
||||||
@ -307,9 +307,9 @@ libcds:
|
|||||||
AR="$(AR)" $(MAKE) -C $(LIBCDS)/lib/$(TARGET)
|
AR="$(AR)" $(MAKE) -C $(LIBCDS)/lib/$(TARGET)
|
||||||
|
|
||||||
ifeq ($(TARGET),Debug)
|
ifeq ($(TARGET),Debug)
|
||||||
ln -sf $(LIBCDS)/lib/$(TARGET)/bin/libcds-s_d.a $(LIB)/libcds.a
|
ln -sf $(LIBCDS)/lib/$(TARGET)/bin/libcds-s_d.a $(STATIC_LIB)/libcds.a
|
||||||
else
|
else
|
||||||
ln -sf $(LIBCDS)/lib/$(TARGET)/bin/libcds-s.a $(LIB)/libcds.a
|
ln -sf $(LIBCDS)/lib/$(TARGET)/bin/libcds-s.a $(STATIC_LIB)/libcds.a
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#___________________________________________________________________________
|
#___________________________________________________________________________
|
||||||
@ -388,9 +388,9 @@ ifeq ($(CLIENT_ONLY_FLG),N)
|
|||||||
$(MAKE) libcds
|
$(MAKE) libcds
|
||||||
endif
|
endif
|
||||||
CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" $(MAKE) -C $(ROOT)/extern/decNumber
|
CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" $(MAKE) -C $(ROOT)/extern/decNumber
|
||||||
ln -sf $(ROOT)/extern/decNumber/libdecFloat$(CROSS).a $(LIB)
|
ln -sf $(ROOT)/extern/decNumber/libdecFloat$(CROSS).a $(STATIC_LIB)
|
||||||
CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" $(MAKE) -C $(ROOT)/extern/int128/absl/numeric
|
CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" $(MAKE) -C $(ROOT)/extern/int128/absl/numeric
|
||||||
ln -sf $(ROOT)/extern/int128/absl/numeric/libi128$(CROSS).a $(LIB)
|
ln -sf $(ROOT)/extern/int128/absl/numeric/libi128$(CROSS).a $(STATIC_LIB)
|
||||||
$(MAKE) cross_rest
|
$(MAKE) cross_rest
|
||||||
$(MAKE) yvalve
|
$(MAKE) yvalve
|
||||||
ifeq ($(CLIENT_ONLY_FLG),Y)
|
ifeq ($(CLIENT_ONLY_FLG),Y)
|
||||||
@ -418,7 +418,7 @@ $(COMMON_LIB): $(Common_Objects)
|
|||||||
$(STATICLIB_LINK) $@ $^
|
$(STATICLIB_LINK) $@ $^
|
||||||
|
|
||||||
$(COMMON_TEST): $(Common_Test_Objects) $(COMMON_LIB)
|
$(COMMON_TEST): $(Common_Test_Objects) $(COMMON_LIB)
|
||||||
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ -L$(LIB) $(LINK_LIBS)
|
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ -L$(LIB) -L$(STATIC_LIB) $(LINK_LIBS)
|
||||||
|
|
||||||
#___________________________________________________________________________
|
#___________________________________________________________________________
|
||||||
# gpre_boot
|
# gpre_boot
|
||||||
@ -427,7 +427,7 @@ $(COMMON_TEST): $(Common_Test_Objects) $(COMMON_LIB)
|
|||||||
boot: $(GPRE_BOOT)
|
boot: $(GPRE_BOOT)
|
||||||
|
|
||||||
$(GPRE_BOOT): $(GPRE_Boot_Objects) $(COMMON_LIB)
|
$(GPRE_BOOT): $(GPRE_Boot_Objects) $(COMMON_LIB)
|
||||||
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ -L$(LIB) $(LINK_LIBS)
|
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ -L$(LIB) -L$(STATIC_LIB) $(LINK_LIBS)
|
||||||
-$(RM) $(GPRE_CURRENT)
|
-$(RM) $(GPRE_CURRENT)
|
||||||
(cd $(@D); $(LN) $(@F) $(notdir $(GPRE_CURRENT)))
|
(cd $(@D); $(LN) $(@F) $(notdir $(GPRE_CURRENT)))
|
||||||
|
|
||||||
@ -612,7 +612,7 @@ SRP_USER_MANAGER = $(call makePluginName,Srp)
|
|||||||
FBTRACE = $(call makePluginName,fbtrace)
|
FBTRACE = $(call makePluginName,fbtrace)
|
||||||
AUTH_DEBUGGER = $(call makePluginName,Auth_Debug)
|
AUTH_DEBUGGER = $(call makePluginName,Auth_Debug)
|
||||||
UDF_BACKWARD_COMPATIBILITY_BASENAME = $(LIB_PREFIX)udf_compat.$(SHRLIB_EXT)
|
UDF_BACKWARD_COMPATIBILITY_BASENAME = $(LIB_PREFIX)udf_compat.$(SHRLIB_EXT)
|
||||||
UDF_BACKWARD_COMPATIBILITY = $(PLUGINS)/udr/$(UDF_BACKWARD_COMPATIBILITY_BASENAME)
|
UDF_BACKWARD_COMPATIBILITY ?= $(call buildSubDirectory,plugins/udr)/$(UDF_BACKWARD_COMPATIBILITY_BASENAME)
|
||||||
CHACHA = $(call makePluginName,ChaCha)
|
CHACHA = $(call makePluginName,ChaCha)
|
||||||
PROFILER = $(call makePluginName,Default_Profiler)
|
PROFILER = $(call makePluginName,Default_Profiler)
|
||||||
|
|
||||||
@ -707,11 +707,11 @@ $(FIREBIRD_MSG) $(FIREBIRD)/include/firebird/impl/iberror_c.h: $(BUILD_FILE)
|
|||||||
$(BUILD_FILE) -f $(FIREBIRD_MSG) -c $(FIREBIRD)/include/firebird/impl/iberror_c.h
|
$(BUILD_FILE) -f $(FIREBIRD_MSG) -c $(FIREBIRD)/include/firebird/impl/iberror_c.h
|
||||||
$(CHMOD_6) $(FIREBIRD_MSG)
|
$(CHMOD_6) $(FIREBIRD_MSG)
|
||||||
|
|
||||||
tzdata: $(FB_BUILD)/tzdata
|
tzdata: $(TZDATA)/ids.dat
|
||||||
|
|
||||||
$(FB_BUILD)/tzdata: $(ROOT)/extern/icu/tzdata/$(TZDATA_ZIP)
|
$(TZDATA)/ids.dat: $(ROOT)/extern/icu/tzdata/$(TZDATA_ZIP)
|
||||||
mkdir -p $(FB_BUILD)/tzdata
|
unzip -o $(ROOT)/extern/icu/tzdata/$(TZDATA_ZIP) -d $(TZDATA)
|
||||||
unzip -o $(ROOT)/extern/icu/tzdata/$(TZDATA_ZIP) -d $(FB_BUILD)/tzdata
|
touch $(TZDATA)/ids.dat
|
||||||
|
|
||||||
$(BUILD_FILE): $(BUILD_Objects)
|
$(BUILD_FILE): $(BUILD_Objects)
|
||||||
$(EXE_LINK) $(EXE_LINK_OPTIONS) $(LSB_UNDEF) $^ -o $@
|
$(EXE_LINK) $(EXE_LINK_OPTIONS) $(LSB_UNDEF) $^ -o $@
|
||||||
|
@ -59,13 +59,13 @@ include $(ROOT)/gen/make.shared.variables
|
|||||||
.PHONY: libeditline
|
.PHONY: libeditline
|
||||||
|
|
||||||
|
|
||||||
libeditline : $(LIB)/libedit.a
|
libeditline : $(STATIC_LIB)/libedit.a
|
||||||
|
|
||||||
$(LIB)/libedit.a:
|
$(STATIC_LIB)/libedit.a:
|
||||||
AR=ar
|
AR=ar
|
||||||
cd $(ROOT)/extern/editline; chmod +x configure; ./configure --enable-static --disable-shared --enable-widec
|
cd $(ROOT)/extern/editline; chmod +x configure; ./configure --enable-static --disable-shared --enable-widec
|
||||||
$(MAKE) -C $(ROOT)/extern/editline
|
$(MAKE) -C $(ROOT)/extern/editline
|
||||||
cp $(ROOT)/extern/editline/src/libedit.a $(LIB)
|
cp $(ROOT)/extern/editline/src/libedit.a $(STATIC_LIB)
|
||||||
|
|
||||||
|
|
||||||
include $(ROOT)/gen/make.shared.targets
|
include $(ROOT)/gen/make.shared.targets
|
||||||
|
@ -27,6 +27,12 @@ export CC
|
|||||||
export AR
|
export AR
|
||||||
export CROSS_FLAGS
|
export CROSS_FLAGS
|
||||||
|
|
||||||
|
# Android uses flat tree.
|
||||||
|
buildSubDirectory=$(FB_BUILD)
|
||||||
|
LIB_PLATFORM_RPATH=-Wl,-rpath,\$$ORIGIN
|
||||||
|
LibraryFullName=$(LibraryBaseName)
|
||||||
|
LibrarySoName=$(LibraryBaseName)
|
||||||
|
|
||||||
COMMON_FLAGS=-ggdb -DFB_SEND_FLAGS=MSG_NOSIGNAL -DLINUX -DANDROID -DARM64 -pipe -MMD -fPIC -fmessage-length=0 \
|
COMMON_FLAGS=-ggdb -DFB_SEND_FLAGS=MSG_NOSIGNAL -DLINUX -DANDROID -DARM64 -pipe -MMD -fPIC -fmessage-length=0 \
|
||||||
-I$(ROOT)/extern/libtommath -I$(ROOT)/extern/libtomcrypt/src/headers \
|
-I$(ROOT)/extern/libtommath -I$(ROOT)/extern/libtomcrypt/src/headers \
|
||||||
$(CROSS_FLAGS) -fsigned-char \
|
$(CROSS_FLAGS) -fsigned-char \
|
||||||
@ -41,7 +47,7 @@ DEV_FLAGS=$(COMMON_FLAGS) $(WARN_FLAGS)
|
|||||||
CROSS_CONFIG=android.arm64
|
CROSS_CONFIG=android.arm64
|
||||||
|
|
||||||
LDFLAGS += -static-libstdc++
|
LDFLAGS += -static-libstdc++
|
||||||
DroidLibs := -lm -ldl $(DECLIB) $(I128LIB)
|
DroidLibs := -lm -ldl -llog $(DECLIB) $(I128LIB)
|
||||||
UDR_SUPPORT_LIBS :=
|
UDR_SUPPORT_LIBS :=
|
||||||
|
|
||||||
LINK_LIBS = $(DroidLibs)
|
LINK_LIBS = $(DroidLibs)
|
||||||
|
@ -27,6 +27,12 @@ export CC
|
|||||||
export AR
|
export AR
|
||||||
export CROSS_FLAGS
|
export CROSS_FLAGS
|
||||||
|
|
||||||
|
# Android uses flat tree.
|
||||||
|
buildSubDirectory=$(FB_BUILD)
|
||||||
|
LIB_PLATFORM_RPATH=-Wl,-rpath,\$$ORIGIN
|
||||||
|
LibraryFullName=$(LibraryBaseName)
|
||||||
|
LibrarySoName=$(LibraryBaseName)
|
||||||
|
|
||||||
COMMON_FLAGS=-ggdb -DFB_SEND_FLAGS=MSG_NOSIGNAL -DLINUX -DANDROID -DARM -pipe -MMD -fPIC -fmessage-length=0 \
|
COMMON_FLAGS=-ggdb -DFB_SEND_FLAGS=MSG_NOSIGNAL -DLINUX -DANDROID -DARM -pipe -MMD -fPIC -fmessage-length=0 \
|
||||||
-I$(ROOT)/extern/libtommath -I$(ROOT)/extern/libtomcrypt/src/headers \
|
-I$(ROOT)/extern/libtommath -I$(ROOT)/extern/libtomcrypt/src/headers \
|
||||||
$(CROSS_FLAGS) -fsigned-char \
|
$(CROSS_FLAGS) -fsigned-char \
|
||||||
@ -41,7 +47,7 @@ DEV_FLAGS=$(COMMON_FLAGS) $(WARN_FLAGS)
|
|||||||
CROSS_CONFIG=android.arme
|
CROSS_CONFIG=android.arme
|
||||||
|
|
||||||
LDFLAGS += -static-libstdc++
|
LDFLAGS += -static-libstdc++
|
||||||
DroidLibs := -lm -ldl $(DECLIB) $(I128LIB)
|
DroidLibs := -lm -ldl -llog $(DECLIB) $(I128LIB)
|
||||||
UDR_SUPPORT_LIBS :=
|
UDR_SUPPORT_LIBS :=
|
||||||
|
|
||||||
LINK_LIBS = $(DroidLibs)
|
LINK_LIBS = $(DroidLibs)
|
||||||
|
@ -27,6 +27,12 @@ export CC
|
|||||||
export AR
|
export AR
|
||||||
export CROSS_FLAGS
|
export CROSS_FLAGS
|
||||||
|
|
||||||
|
# Android uses flat tree.
|
||||||
|
buildSubDirectory=$(FB_BUILD)
|
||||||
|
LIB_PLATFORM_RPATH=-Wl,-rpath,\$$ORIGIN
|
||||||
|
LibraryFullName=$(LibraryBaseName)
|
||||||
|
LibrarySoName=$(LibraryBaseName)
|
||||||
|
|
||||||
COMMON_FLAGS=-ggdb -DFB_SEND_FLAGS=MSG_NOSIGNAL -DLINUX -DANDROID -pipe -MMD -fPIC -fmessage-length=0 \
|
COMMON_FLAGS=-ggdb -DFB_SEND_FLAGS=MSG_NOSIGNAL -DLINUX -DANDROID -pipe -MMD -fPIC -fmessage-length=0 \
|
||||||
-I$(ROOT)/extern/libtommath -I$(ROOT)/extern/libtomcrypt/src/headers \
|
-I$(ROOT)/extern/libtommath -I$(ROOT)/extern/libtomcrypt/src/headers \
|
||||||
$(CROSS_FLAGS) \
|
$(CROSS_FLAGS) \
|
||||||
@ -41,7 +47,7 @@ DEV_FLAGS=$(COMMON_FLAGS) $(WARN_FLAGS)
|
|||||||
CROSS_CONFIG=android.x86
|
CROSS_CONFIG=android.x86
|
||||||
|
|
||||||
LDFLAGS += -static-libstdc++
|
LDFLAGS += -static-libstdc++
|
||||||
DroidLibs := -lm -ldl $(DECLIB) $(I128LIB)
|
DroidLibs := -lm -ldl -llog $(DECLIB) $(I128LIB)
|
||||||
UDR_SUPPORT_LIBS :=
|
UDR_SUPPORT_LIBS :=
|
||||||
|
|
||||||
LINK_LIBS = $(DroidLibs)
|
LINK_LIBS = $(DroidLibs)
|
||||||
|
@ -27,6 +27,12 @@ export CC
|
|||||||
export AR
|
export AR
|
||||||
export CROSS_FLAGS
|
export CROSS_FLAGS
|
||||||
|
|
||||||
|
# Android uses flat tree.
|
||||||
|
buildSubDirectory=$(FB_BUILD)
|
||||||
|
LIB_PLATFORM_RPATH=-Wl,-rpath,\$$ORIGIN
|
||||||
|
LibraryFullName=$(LibraryBaseName)
|
||||||
|
LibrarySoName=$(LibraryBaseName)
|
||||||
|
|
||||||
COMMON_FLAGS=-ggdb -DFB_SEND_FLAGS=MSG_NOSIGNAL -DLINUX -DANDROID -DAMD64 -pipe -MMD -fPIC -fmessage-length=0 \
|
COMMON_FLAGS=-ggdb -DFB_SEND_FLAGS=MSG_NOSIGNAL -DLINUX -DANDROID -DAMD64 -pipe -MMD -fPIC -fmessage-length=0 \
|
||||||
-I$(ROOT)/extern/libtommath -I$(ROOT)/extern/libtomcrypt/src/headers \
|
-I$(ROOT)/extern/libtommath -I$(ROOT)/extern/libtomcrypt/src/headers \
|
||||||
$(CROSS_FLAGS) \
|
$(CROSS_FLAGS) \
|
||||||
@ -41,7 +47,7 @@ DEV_FLAGS=$(COMMON_FLAGS) $(WARN_FLAGS)
|
|||||||
CROSS_CONFIG=android.x86_64
|
CROSS_CONFIG=android.x86_64
|
||||||
|
|
||||||
LDFLAGS += -static-libstdc++
|
LDFLAGS += -static-libstdc++
|
||||||
DroidLibs := -lm -ldl $(DECLIB) $(I128LIB)
|
DroidLibs := -lm -ldl -llog $(DECLIB) $(I128LIB)
|
||||||
UDR_SUPPORT_LIBS :=
|
UDR_SUPPORT_LIBS :=
|
||||||
|
|
||||||
LINK_LIBS = $(DroidLibs)
|
LINK_LIBS = $(DroidLibs)
|
||||||
|
@ -68,11 +68,16 @@ export FIREBIRD_LOCK
|
|||||||
FIREBIRD_BOOT_BUILD=1
|
FIREBIRD_BOOT_BUILD=1
|
||||||
export FIREBIRD_BOOT_BUILD
|
export FIREBIRD_BOOT_BUILD
|
||||||
|
|
||||||
LIB=$(FB_BUILD)/lib
|
buildSubDirectory=$(FB_BUILD)/$(1)
|
||||||
BIN=$(FB_BUILD)/bin
|
|
||||||
PLUGINS=$(FB_BUILD)/plugins
|
LIB=$(call buildSubDirectory,lib)
|
||||||
|
BIN=$(call buildSubDirectory,bin)
|
||||||
|
PLUGINS=$(call buildSubDirectory,plugins)
|
||||||
|
TZDATA=$(call buildSubDirectory,tzdata)
|
||||||
|
FB_TESTS_DIR=$(call buildSubDirectory,tests)
|
||||||
|
|
||||||
|
STATIC_LIB=$(TMP_ROOT)
|
||||||
RBIN=$(FIREBIRD)/bin
|
RBIN=$(FIREBIRD)/bin
|
||||||
FB_TESTS_DIR=$(FB_BUILD)/tests
|
|
||||||
|
|
||||||
# This picks up the current directory and maps it to the equivalent module
|
# This picks up the current directory and maps it to the equivalent module
|
||||||
# in the src and gen area.
|
# in the src and gen area.
|
||||||
@ -267,13 +272,13 @@ ENGINE_TEST = $(FB_TESTS_DIR)/$(EngineFileName)_test$(EXEC_EXT)
|
|||||||
# confuses the dynamic load process. So we only have the .$(SHRLIB_EXT) file
|
# confuses the dynamic load process. So we only have the .$(SHRLIB_EXT) file
|
||||||
# MOD 28-July-2002
|
# MOD 28-July-2002
|
||||||
|
|
||||||
LIBFBINTL_SO = $(FB_BUILD)/intl/$(LIB_PREFIX)fbintl.$(SHRLIB_EXT)
|
LIBFBINTL_SO=$(call buildSubDirectory,intl)/$(LIB_PREFIX)fbintl.$(SHRLIB_EXT)
|
||||||
|
|
||||||
ifeq ($(EDITLINE_FLG),Y)
|
ifeq ($(EDITLINE_FLG),Y)
|
||||||
ifeq ($(STD_EDITLINE), true)
|
ifeq ($(STD_EDITLINE), true)
|
||||||
LIBEDITLINE := -l$(READLINE)
|
LIBEDITLINE := -l$(READLINE)
|
||||||
else
|
else
|
||||||
LIBEDITLINE := $(LIB)/libedit.a
|
LIBEDITLINE := $(STATIC_LIB)/libedit.a
|
||||||
TERMLIB := -l@TERMLIB@
|
TERMLIB := -l@TERMLIB@
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
@ -357,7 +362,7 @@ endif
|
|||||||
LIB_PATH_OPTS = $(call LIB_LINK_RPATH,lib) $(call LIB_LINK_RPATH,intl)
|
LIB_PATH_OPTS = $(call LIB_LINK_RPATH,lib) $(call LIB_LINK_RPATH,intl)
|
||||||
LIB_LINK_SONAME= -Wl,-soname,$(1)
|
LIB_LINK_SONAME= -Wl,-soname,$(1)
|
||||||
LIB_LINK_MAPFILE= -Wl,--version-script,$(1)
|
LIB_LINK_MAPFILE= -Wl,--version-script,$(1)
|
||||||
FIREBIRD_LIBRARY_LINK= -L$(LIB) -lfbclient $(MATHLIB) $(CRYPTLIB)
|
FIREBIRD_LIBRARY_LINK= -L$(LIB) -L$(STATIC_LIB) -lfbclient $(MATHLIB) $(CRYPTLIB)
|
||||||
|
|
||||||
EXE_LINK_OPTIONS= $(LDFLAGS) $(THR_FLAGS) $(UNDEF_FLAGS) $(LIB_PATH_OPTS) $(call LINK_DARWIN_RPATH,..) $(LINK_EMPTY_SYMBOLS)
|
EXE_LINK_OPTIONS= $(LDFLAGS) $(THR_FLAGS) $(UNDEF_FLAGS) $(LIB_PATH_OPTS) $(call LINK_DARWIN_RPATH,..) $(LINK_EMPTY_SYMBOLS)
|
||||||
LIB_LINK_OPTIONS= $(LDFLAGS) $(THR_FLAGS) -shared
|
LIB_LINK_OPTIONS= $(LDFLAGS) $(THR_FLAGS) -shared
|
||||||
@ -367,7 +372,7 @@ FB_DAEMON = $(BIN)/firebird$(EXEC_EXT)
|
|||||||
# Per-library link rules
|
# Per-library link rules
|
||||||
LINK_UDF = $(LIB_LINK) $(LIB_LINK_OPTIONS) $(call LIB_LINK_SONAME,$(1).$(SHRLIB_EXT)) $(UNDEF_FLAGS)\
|
LINK_UDF = $(LIB_LINK) $(LIB_LINK_OPTIONS) $(call LIB_LINK_SONAME,$(1).$(SHRLIB_EXT)) $(UNDEF_FLAGS)\
|
||||||
$(call LIB_LINK_RPATH,lib) $(call LINK_DARWIN_RPATH,..)
|
$(call LIB_LINK_RPATH,lib) $(call LINK_DARWIN_RPATH,..)
|
||||||
LINK_UDF_LIBS = $(THR_LIBS) -L$(LIB) -lib_util $(SO_LINK_LIBS)
|
LINK_UDF_LIBS = $(THR_LIBS) -L$(LIB) -L$(STATIC_LIB) -lib_util $(SO_LINK_LIBS)
|
||||||
|
|
||||||
LINK_IB_UTIL = $(LIB_LINK) $(LINK_IBUTIL_SYMBOLS) $(LIB_LINK_OPTIONS) $(UNDEF_FLAGS)\
|
LINK_IB_UTIL = $(LIB_LINK) $(LINK_IBUTIL_SYMBOLS) $(LIB_LINK_OPTIONS) $(UNDEF_FLAGS)\
|
||||||
$(call LIB_LINK_SONAME,$(IbUtilLibraryName)) $(call LIB_LINK_RPATH,lib) $(call LINK_DARWIN_RPATH,..)
|
$(call LIB_LINK_SONAME,$(IbUtilLibraryName)) $(call LIB_LINK_RPATH,lib) $(call LINK_DARWIN_RPATH,..)
|
||||||
@ -375,15 +380,15 @@ LINK_IB_UTIL_LIBS = $(THR_LIBS)
|
|||||||
|
|
||||||
LINK_INTL = $(LIB_LINK) $(LINK_FBINTL_SYMBOLS) $(LIB_LINK_OPTIONS) $(UNDEF_FLAGS)\
|
LINK_INTL = $(LIB_LINK) $(LINK_FBINTL_SYMBOLS) $(LIB_LINK_OPTIONS) $(UNDEF_FLAGS)\
|
||||||
$(call LIB_LINK_SONAME,libfbintl.$(SHRLIB_EXT).1) $(call LIB_LINK_RPATH,lib) $(call LINK_DARWIN_RPATH,..)
|
$(call LIB_LINK_SONAME,libfbintl.$(SHRLIB_EXT).1) $(call LIB_LINK_RPATH,lib) $(call LINK_DARWIN_RPATH,..)
|
||||||
LINK_INTL_LIBS = -L$(LIB) $(SO_LINK_LIBS) $(FIREBIRD_LIBRARY_LINK)
|
LINK_INTL_LIBS = -L$(LIB) -L$(STATIC_LIB) $(SO_LINK_LIBS) $(FIREBIRD_LIBRARY_LINK)
|
||||||
|
|
||||||
LINK_TRACE = $(LIB_LINK) $(LINK_PLUGIN_SYMBOLS) $(LIB_LINK_OPTIONS) $(UNDEF_FLAGS)\
|
LINK_TRACE = $(LIB_LINK) $(LINK_PLUGIN_SYMBOLS) $(LIB_LINK_OPTIONS) $(UNDEF_FLAGS)\
|
||||||
$(call LIB_LINK_SONAME,$(LIB_PREFIX)fbtrace.$(SHRLIB_EXT).0) $(call LIB_LINK_RPATH,lib) $(call LINK_DARWIN_RPATH,..)
|
$(call LIB_LINK_SONAME,$(LIB_PREFIX)fbtrace.$(SHRLIB_EXT).0) $(call LIB_LINK_RPATH,lib) $(call LINK_DARWIN_RPATH,..)
|
||||||
LINK_TRACE_LIBS = -L$(LIB) $(SO_LINK_LIBS)
|
LINK_TRACE_LIBS = -L$(LIB) -L$(STATIC_LIB) $(SO_LINK_LIBS)
|
||||||
|
|
||||||
LINK_FIREBIRD = $(LIB_LINK) $(LINK_FIREBIRD_SYMBOLS) $(LIB_LINK_OPTIONS) $(LIB_FIREBIRD_OPTIONS) $(UNDEF_FLAGS)\
|
LINK_FIREBIRD = $(LIB_LINK) $(LINK_FIREBIRD_SYMBOLS) $(LIB_LINK_OPTIONS) $(LIB_FIREBIRD_OPTIONS) $(UNDEF_FLAGS)\
|
||||||
$(call LIB_LINK_SONAME,$(LibrarySoName)) $(call LIB_LINK_RPATH,lib) $(call LINK_DARWIN_RPATH,..)
|
$(call LIB_LINK_SONAME,$(LibrarySoName)) $(call LIB_LINK_RPATH,lib) $(call LINK_DARWIN_RPATH,..)
|
||||||
LINK_FIREBIRD_LIBS = -L$(LIB) $(LIB_GUI) $(SO_LINK_LIBS) $(MATHLIB)
|
LINK_FIREBIRD_LIBS = -L$(LIB) -L$(STATIC_LIB) $(LIB_GUI) $(SO_LINK_LIBS) $(MATHLIB)
|
||||||
|
|
||||||
LINK_ENGINE = $(LIB_LINK) $(LINK_PLUGIN_SYMBOLS) $(LIB_LINK_OPTIONS) $(LIB_FIREBIRD_OPTIONS) $(UNDEF_FLAGS)\
|
LINK_ENGINE = $(LIB_LINK) $(LINK_PLUGIN_SYMBOLS) $(LIB_LINK_OPTIONS) $(LIB_FIREBIRD_OPTIONS) $(UNDEF_FLAGS)\
|
||||||
$(call LIB_LINK_SONAME,$(EngineSoName)) $(call LIB_LINK_RPATH,lib) $(call LINK_DARWIN_RPATH,..)
|
$(call LIB_LINK_SONAME,$(EngineSoName)) $(call LIB_LINK_RPATH,lib) $(call LINK_DARWIN_RPATH,..)
|
||||||
@ -391,11 +396,11 @@ LINK_ENGINE_LIBS = $(LINK_FIREBIRD_LIBS) $(RE2LIB) $(LIBCDSLIB) $(FIREBIRD_LIBRA
|
|||||||
|
|
||||||
LINK_UDRENG = $(LIB_LINK) $(LINK_PLUGIN_SYMBOLS) $(LIB_LINK_OPTIONS) $(call LIB_LINK_RPATH,lib) $(UNDEF_FLAGS)\
|
LINK_UDRENG = $(LIB_LINK) $(LINK_PLUGIN_SYMBOLS) $(LIB_LINK_OPTIONS) $(call LIB_LINK_RPATH,lib) $(UNDEF_FLAGS)\
|
||||||
$(call LINK_DARWIN_RPATH,..)
|
$(call LINK_DARWIN_RPATH,..)
|
||||||
LINK_UDRENG_LIBS = -L$(LIB) $(SO_LINK_LIBS)
|
LINK_UDRENG_LIBS = -L$(LIB) -L$(STATIC_LIB) $(SO_LINK_LIBS)
|
||||||
|
|
||||||
LINK_PLUGIN = $(LIB_LINK) $(LINK_PLUGIN_SYMBOLS) $(LIB_LINK_OPTIONS) $(call LIB_LINK_RPATH,lib) $(UNDEF_FLAGS)\
|
LINK_PLUGIN = $(LIB_LINK) $(LINK_PLUGIN_SYMBOLS) $(LIB_LINK_OPTIONS) $(call LIB_LINK_RPATH,lib) $(UNDEF_FLAGS)\
|
||||||
$(call LINK_DARWIN_RPATH,..)
|
$(call LINK_DARWIN_RPATH,..)
|
||||||
LINK_PLUG_LIBS = -L$(LIB) $(SO_LINK_LIBS)
|
LINK_PLUG_LIBS = -L$(LIB) -L$(STATIC_LIB) $(SO_LINK_LIBS)
|
||||||
|
|
||||||
# Pay attention - we place common library into obj, not lib dir
|
# Pay attention - we place common library into obj, not lib dir
|
||||||
# It's just a set of object files, prepared to be used by ld, not an output library
|
# It's just a set of object files, prepared to be used by ld, not an output library
|
||||||
|
@ -218,7 +218,7 @@ UTIL_Objects:= $(call makeObjects,extlib,ib_util.cpp)
|
|||||||
# UDR backward compatible with distributed UDFs
|
# UDR backward compatible with distributed UDFs
|
||||||
COMPAT_Objects:= $(call makeObjects,extlib,UdfBackwardCompatibility.cpp)
|
COMPAT_Objects:= $(call makeObjects,extlib,UdfBackwardCompatibility.cpp)
|
||||||
SRC_COMPAT_SQL:= $(SRC_ROOT)/extlib/UdfBackwardCompatibility.sql
|
SRC_COMPAT_SQL:= $(SRC_ROOT)/extlib/UdfBackwardCompatibility.sql
|
||||||
COMPAT_SQL:= $(PLUGINS)/udr/udf_compat.sql
|
COMPAT_SQL?= $(call buildSubDirectory,plugins/udr)/udf_compat.sql
|
||||||
|
|
||||||
AllObjects += $(UTIL_Objects) $(COMPAT_Objects)
|
AllObjects += $(UTIL_Objects) $(COMPAT_Objects)
|
||||||
|
|
||||||
|
@ -8,7 +8,8 @@
|
|||||||
:: MAIN
|
:: MAIN
|
||||||
|
|
||||||
@echo Extracting pre-built ICU
|
@echo Extracting pre-built ICU
|
||||||
%FB_ROOT_PATH%\extern\icu\icu.exe -y > make_icu_%FB_TARGET_PLATFORM%.log 2>&1
|
unzip -o %FB_ROOT_PATH%\extern\icu\icu_windows.zip -d %FB_ROOT_PATH%\extern\icu
|
||||||
|
unzip -o %FB_ROOT_PATH%\extern\icu\icudt.zip -d %FB_ROOT_PATH%\extern\icu
|
||||||
if errorlevel 1 call :ERROR build failed - see make_icu_%FB_TARGET_PLATFORM%.log for details
|
if errorlevel 1 call :ERROR build failed - see make_icu_%FB_TARGET_PLATFORM%.log for details
|
||||||
|
|
||||||
@echo Extracting tzdata
|
@echo Extracting tzdata
|
||||||
|
78
configure.ac
78
configure.ac
@ -1367,31 +1367,35 @@ for fb_tgt in \$FB_TARGETS; do
|
|||||||
echo "Creating \$fb_tgt directories"
|
echo "Creating \$fb_tgt directories"
|
||||||
|
|
||||||
dnl # output
|
dnl # output
|
||||||
mkdir -p gen/\$fb_tgt/firebird/bin
|
|
||||||
mkdir -p gen/\$fb_tgt/firebird/include/firebird/impl
|
if test "x\$fb_tgt" = "xNative" || [[[ x$CROSS != xandroid* ]]]; then
|
||||||
mkdir -p gen/\$fb_tgt/firebird/lib
|
mkdir -p gen/\$fb_tgt/firebird/bin
|
||||||
mkdir -p gen/\$fb_tgt/firebird/tests
|
mkdir -p gen/\$fb_tgt/firebird/lib
|
||||||
if test "$CLIENT_ONLY_FLG" = "N" || test "$WITH_TOMCRYPT" = "Y"; then
|
mkdir -p gen/\$fb_tgt/firebird/tests
|
||||||
mkdir -p gen/\$fb_tgt/firebird/plugins
|
mkdir -p gen/\$fb_tgt/firebird/tzdata
|
||||||
fi
|
mkdir -p gen/\$fb_tgt/firebird/include/firebird/impl
|
||||||
if test "$CLIENT_ONLY_FLG" = "N"; then
|
if test "$CLIENT_ONLY_FLG" = "N" || test "$WITH_TOMCRYPT" = "Y"; then
|
||||||
mkdir -p gen/\$fb_tgt/firebird/plugins/udr
|
mkdir -p gen/\$fb_tgt/firebird/plugins
|
||||||
mkdir -p gen/\$fb_tgt/firebird/examples/api
|
fi
|
||||||
mkdir -p gen/\$fb_tgt/firebird/examples/dbcrypt
|
if test "$CLIENT_ONLY_FLG" = "N"; then
|
||||||
mkdir -p gen/\$fb_tgt/firebird/examples/empbuild
|
mkdir -p gen/\$fb_tgt/firebird/plugins/udr
|
||||||
mkdir -p gen/\$fb_tgt/firebird/examples/extauth
|
mkdir -p gen/\$fb_tgt/firebird/examples/api
|
||||||
mkdir -p gen/\$fb_tgt/firebird/examples/include
|
mkdir -p gen/\$fb_tgt/firebird/examples/dbcrypt
|
||||||
mkdir -p gen/\$fb_tgt/firebird/examples/interfaces
|
mkdir -p gen/\$fb_tgt/firebird/examples/empbuild
|
||||||
mkdir -p gen/\$fb_tgt/firebird/examples/object_pascal
|
mkdir -p gen/\$fb_tgt/firebird/examples/extauth
|
||||||
mkdir -p gen/\$fb_tgt/firebird/examples/object_pascal/common
|
mkdir -p gen/\$fb_tgt/firebird/examples/include
|
||||||
mkdir -p gen/\$fb_tgt/firebird/examples/package
|
mkdir -p gen/\$fb_tgt/firebird/examples/interfaces
|
||||||
mkdir -p gen/\$fb_tgt/firebird/examples/stat
|
mkdir -p gen/\$fb_tgt/firebird/examples/object_pascal
|
||||||
mkdir -p gen/\$fb_tgt/firebird/examples/udf
|
mkdir -p gen/\$fb_tgt/firebird/examples/object_pascal/common
|
||||||
mkdir -p gen/\$fb_tgt/firebird/examples/udr
|
mkdir -p gen/\$fb_tgt/firebird/examples/package
|
||||||
mkdir -p gen/\$fb_tgt/firebird/examples/prebuilt/bin
|
mkdir -p gen/\$fb_tgt/firebird/examples/stat
|
||||||
mkdir -p gen/\$fb_tgt/firebird/examples/prebuilt/plugins
|
mkdir -p gen/\$fb_tgt/firebird/examples/udf
|
||||||
mkdir -p gen/\$fb_tgt/firebird/misc
|
mkdir -p gen/\$fb_tgt/firebird/examples/udr
|
||||||
fi
|
mkdir -p gen/\$fb_tgt/firebird/examples/prebuilt/bin
|
||||||
|
mkdir -p gen/\$fb_tgt/firebird/examples/prebuilt/plugins
|
||||||
|
mkdir -p gen/\$fb_tgt/firebird/misc
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
dnl ### TEMP ### directories for generated .cpp, .o and .d by module name
|
dnl ### TEMP ### directories for generated .cpp, .o and .d by module name
|
||||||
for src_dir in `cd src; ls -R -1 * | grep : | tr -d : | tr "\n" " "; cd ..`; do
|
for src_dir in `cd src; ls -R -1 * | grep : | tr -d : | tr "\n" " "; cd ..`; do
|
||||||
@ -1424,9 +1428,17 @@ if test "$CLIENT_ONLY_FLG" = "N"; then
|
|||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
gen/$fb_tgt/firebird/databases.conf:builds/install/misc/databases.conf
|
gen/$fb_tgt/firebird/databases.conf:builds/install/misc/databases.conf
|
||||||
gen/$fb_tgt/firebird/fbtrace.conf:src/utilities/ntrace/fbtrace.conf
|
gen/$fb_tgt/firebird/fbtrace.conf:src/utilities/ntrace/fbtrace.conf
|
||||||
gen/$fb_tgt/firebird/intl/fbintl.conf:builds/install/misc/fbintl.conf
|
|
||||||
gen/$fb_tgt/firebird/replication.conf:builds/install/misc/replication.conf
|
gen/$fb_tgt/firebird/replication.conf:builds/install/misc/replication.conf
|
||||||
])
|
])
|
||||||
|
if test "x$fb_tgt" != "xNative" && [[[ x$CROSS = xandroid* ]]]; then
|
||||||
|
AC_CONFIG_FILES([
|
||||||
|
gen/$fb_tgt/firebird/fbintl.conf:builds/install/misc/fbintl.conf
|
||||||
|
])
|
||||||
|
else
|
||||||
|
AC_CONFIG_FILES([
|
||||||
|
gen/$fb_tgt/firebird/intl/fbintl.conf:builds/install/misc/fbintl.conf
|
||||||
|
])
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
@ -1434,6 +1446,7 @@ if test "x$CROSS" != "x"; then
|
|||||||
AC_CONFIG_FILES([gen/make.crossPlatform:builds/posix/make.$CROSS])
|
AC_CONFIG_FILES([gen/make.crossPlatform:builds/posix/make.$CROSS])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[[ x$CROSS != xandroid* ]]]; then
|
||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
gen/Release/firebird/bin/fb_config:builds/install/posix-common/fb_config.in
|
gen/Release/firebird/bin/fb_config:builds/install/posix-common/fb_config.in
|
||||||
gen/Release/firebird/bin/posixLibrary.sh:builds/install/posix-common/posixLibrary.sh.in
|
gen/Release/firebird/bin/posixLibrary.sh:builds/install/posix-common/posixLibrary.sh.in
|
||||||
@ -1441,6 +1454,10 @@ gen/Release/firebird/bin/install.sh:builds/install/posix-common/install.sh.in
|
|||||||
gen/Release/firebird/bin/FirebirdUninstall.sh:builds/install/posix-common/FirebirdUninstall.sh.in
|
gen/Release/firebird/bin/FirebirdUninstall.sh:builds/install/posix-common/FirebirdUninstall.sh.in
|
||||||
gen/Release/firebird/bin/changeServerMode.sh:builds/install/posix-common/changeServerMode.sh.in
|
gen/Release/firebird/bin/changeServerMode.sh:builds/install/posix-common/changeServerMode.sh.in
|
||||||
gen/Release/firebird/bin/registerDatabase.sh:builds/install/posix-common/registerDatabase.sh.in
|
gen/Release/firebird/bin/registerDatabase.sh:builds/install/posix-common/registerDatabase.sh.in
|
||||||
|
])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_CONFIG_FILES([
|
||||||
gen/vers.sh:builds/posix/vers.sh.in
|
gen/vers.sh:builds/posix/vers.sh.in
|
||||||
])
|
])
|
||||||
|
|
||||||
@ -1461,10 +1478,17 @@ case "$PLATFORM" in
|
|||||||
gen/install/misc/firebird.init.d.gentoo:builds/install/arch-specific/linux/firebird.init.d.gentoo.in
|
gen/install/misc/firebird.init.d.gentoo:builds/install/arch-specific/linux/firebird.init.d.gentoo.in
|
||||||
gen/install/misc/firebird.init.d.slackware:builds/install/arch-specific/linux/firebird.init.d.slackware.in
|
gen/install/misc/firebird.init.d.slackware:builds/install/arch-specific/linux/firebird.init.d.slackware.in
|
||||||
gen/install/misc/rc.config.firebird:builds/install/arch-specific/linux/rc.config.firebird.in
|
gen/install/misc/rc.config.firebird:builds/install/arch-specific/linux/rc.config.firebird.in
|
||||||
gen/Release/firebird/bin/linuxLibrary.sh:builds/install/arch-specific/linux/linuxLibrary.sh.in
|
|
||||||
gen/install/misc/firebird.service:builds/install/arch-specific/linux/firebird.service.in
|
gen/install/misc/firebird.service:builds/install/arch-specific/linux/firebird.service.in
|
||||||
],
|
],
|
||||||
[chmod a+x gen/install/*sh 2>/dev/null])
|
[chmod a+x gen/install/*sh 2>/dev/null])
|
||||||
|
|
||||||
|
if [[[ x$CROSS != xandroid* ]]]; then
|
||||||
|
AC_CONFIG_FILES([
|
||||||
|
gen/Release/firebird/bin/linuxLibrary.sh:builds/install/arch-specific/linux/linuxLibrary.sh.in
|
||||||
|
],
|
||||||
|
[chmod a+x gen/install/*sh 2>/dev/null])
|
||||||
|
fi
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
HPUX)
|
HPUX)
|
||||||
|
6
extern/icu/android/aarch64/config.sh
vendored
6
extern/icu/android/aarch64/config.sh
vendored
@ -19,9 +19,9 @@
|
|||||||
--with-cross-build=$CROSS_BUILD_DIR \
|
--with-cross-build=$CROSS_BUILD_DIR \
|
||||||
CFLAGS='-Os' \
|
CFLAGS='-Os' \
|
||||||
CXXFLAGS='--std=c++17' \
|
CXXFLAGS='--std=c++17' \
|
||||||
LDFLAGS='-static-libstdc++' \
|
LDFLAGS='-static-libstdc++ -Wl,-rpath=\$$ORIGIN' \
|
||||||
CC=aarch64-linux-android24-clang \
|
CC=aarch64-linux-android24-clang \
|
||||||
CXX=aarch64-linux-android24-clang++ \
|
CXX=aarch64-linux-android24-clang++ \
|
||||||
AR=aarch64-linux-android-ar \
|
AR=llvm-ar \
|
||||||
RANLIB=aarch64-linux-android-ranlib \
|
RANLIB=llvm-ranlib \
|
||||||
--with-data-packaging=archive
|
--with-data-packaging=archive
|
||||||
|
10
extern/icu/android/armv7a/config.sh
vendored
10
extern/icu/android/armv7a/config.sh
vendored
@ -19,9 +19,9 @@
|
|||||||
--with-cross-build=$CROSS_BUILD_DIR \
|
--with-cross-build=$CROSS_BUILD_DIR \
|
||||||
CFLAGS='-Os -march=armv7-a -mfloat-abi=softfp -mfpu=neon' \
|
CFLAGS='-Os -march=armv7-a -mfloat-abi=softfp -mfpu=neon' \
|
||||||
CXXFLAGS='--std=c++17 -march=armv7-a -mfloat-abi=softfp -mfpu=neon' \
|
CXXFLAGS='--std=c++17 -march=armv7-a -mfloat-abi=softfp -mfpu=neon' \
|
||||||
LDFLAGS='-static-libstdc++ -march=armv7-a -Wl,--fix-cortex-a8' \
|
LDFLAGS='-static-libstdc++ -march=armv7-a -Wl,--fix-cortex-a8 -Wl,-rpath=\$$ORIGIN' \
|
||||||
CC=arm-linux-androideabi-clang \
|
CC=armv7a-linux-androideabi24-clang \
|
||||||
CXX=arm-linux-androideabi-clang++ \
|
CXX=armv7a-linux-androideabi24-clang++ \
|
||||||
AR=arm-linux-androideabi-ar \
|
AR=llvm-ar \
|
||||||
RANLIB=arm-linux-androideabi-ranlib \
|
RANLIB=llvm-ranlib \
|
||||||
--with-data-packaging=archive
|
--with-data-packaging=archive
|
||||||
|
2
extern/icu/android/i686/config.sh
vendored
2
extern/icu/android/i686/config.sh
vendored
@ -19,7 +19,7 @@
|
|||||||
--with-cross-build=$CROSS_BUILD_DIR \
|
--with-cross-build=$CROSS_BUILD_DIR \
|
||||||
CFLAGS='-Os' \
|
CFLAGS='-Os' \
|
||||||
CXXFLAGS='--std=c++17' \
|
CXXFLAGS='--std=c++17' \
|
||||||
LDFLAGS='-static-libstdc++' \
|
LDFLAGS='-static-libstdc++ -Wl,-rpath=\$$ORIGIN' \
|
||||||
CC=i686-linux-android24-clang \
|
CC=i686-linux-android24-clang \
|
||||||
CXX=i686-linux-android24-clang++ \
|
CXX=i686-linux-android24-clang++ \
|
||||||
AR=llvm-ar \
|
AR=llvm-ar \
|
||||||
|
8
extern/icu/android/renameLibs.sh
vendored
Executable file
8
extern/icu/android/renameLibs.sh
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
MAJOR=63
|
||||||
|
MINOR=1
|
||||||
|
|
||||||
|
mv libicuuc.so.$MAJOR.$MINOR libicuuc.$MAJOR.$MINOR.so
|
||||||
|
mv libicudata.so.$MAJOR.$MINOR libicudata.$MAJOR.$MINOR.so
|
||||||
|
mv libicui18n.so.$MAJOR.$MINOR libicui18n.$MAJOR.$MINOR.so
|
6
extern/icu/android/renameLinks.sh
vendored
6
extern/icu/android/renameLinks.sh
vendored
@ -1,6 +0,0 @@
|
|||||||
MAJOR=63
|
|
||||||
MINOR=1
|
|
||||||
|
|
||||||
rm -f libicu*so
|
|
||||||
for i in libicu*.${MINOR}; do mv $i `basename $i .${MINOR}`; done
|
|
||||||
for i in libicu*.${MAJOR}; do ln -s $i `basename $i .${MAJOR}`; done
|
|
2
extern/icu/android/x86_64/config.sh
vendored
2
extern/icu/android/x86_64/config.sh
vendored
@ -19,7 +19,7 @@
|
|||||||
--with-cross-build=$CROSS_BUILD_DIR \
|
--with-cross-build=$CROSS_BUILD_DIR \
|
||||||
CFLAGS='-Os' \
|
CFLAGS='-Os' \
|
||||||
CXXFLAGS='--std=c++17' \
|
CXXFLAGS='--std=c++17' \
|
||||||
LDFLAGS='-static-libstdc++' \
|
LDFLAGS='-static-libstdc++ -Wl,-rpath=\$$ORIGIN' \
|
||||||
CC=x86_64-linux-android24-clang \
|
CC=x86_64-linux-android24-clang \
|
||||||
CXX=x86_64-linux-android24-clang++ \
|
CXX=x86_64-linux-android24-clang++ \
|
||||||
AR=llvm-ar \
|
AR=llvm-ar \
|
||||||
|
BIN
extern/icu/icu_android.tar.xz
vendored
BIN
extern/icu/icu_android.tar.xz
vendored
Binary file not shown.
BIN
extern/icu/icu_windows.zip
vendored
Normal file
BIN
extern/icu/icu_windows.zip
vendored
Normal file
Binary file not shown.
BIN
extern/icu/icu.exe → extern/icu/icudt.zip
vendored
BIN
extern/icu/icu.exe → extern/icu/icudt.zip
vendored
Binary file not shown.
@ -102,7 +102,13 @@ namespace
|
|||||||
if (FB_TZDATADIR[0])
|
if (FB_TZDATADIR[0])
|
||||||
temp = FB_TZDATADIR;
|
temp = FB_TZDATADIR;
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
#ifdef ANDROID
|
||||||
|
temp = Config::getRootDirectory();
|
||||||
|
#else
|
||||||
PathUtils::concatPath(temp, Config::getRootDirectory(), "tzdata");
|
PathUtils::concatPath(temp, Config::getRootDirectory(), "tzdata");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
const static char* const ICU_TIMEZONE_FILES_DIR = "ICU_TIMEZONE_FILES_DIR";
|
const static char* const ICU_TIMEZONE_FILES_DIR = "ICU_TIMEZONE_FILES_DIR";
|
||||||
|
|
||||||
|
@ -49,7 +49,8 @@ public:
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
~DlfcnModule();
|
~DlfcnModule();
|
||||||
void* findSymbol (ISC_STATUS*, const Firebird::string&);
|
void* findSymbol(ISC_STATUS*, const Firebird::string&) override;
|
||||||
|
bool getRealPath(const Firebird::string& anySymbol, Firebird::PathName& path) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void* module;
|
void* module;
|
||||||
@ -155,4 +156,30 @@ void* DlfcnModule::findSymbol(ISC_STATUS* status, const Firebird::string& symNam
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool DlfcnModule::getRealPath(const Firebird::string& anySymbol, Firebird::PathName& path)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_DLADDR
|
||||||
|
void* symbolPtr = dlsym(module, anySymbol.c_str());
|
||||||
|
|
||||||
|
if (!symbolPtr)
|
||||||
|
symbolPtr = dlsym(module, ('_' + anySymbol).c_str());
|
||||||
|
|
||||||
|
if (symbolPtr)
|
||||||
|
{
|
||||||
|
Dl_info info;
|
||||||
|
if (dladdr(symbolPtr, &info))
|
||||||
|
{
|
||||||
|
char buffer[PATH_MAX];
|
||||||
|
|
||||||
|
if (realpath(info.dli_fname, buffer))
|
||||||
|
{
|
||||||
|
path = buffer;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // HAVE_DLADDR
|
||||||
|
|
||||||
|
path.clear();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
@ -62,6 +62,8 @@ public:
|
|||||||
**/
|
**/
|
||||||
virtual void* findSymbol(ISC_STATUS*, const Firebird::string&) = 0;
|
virtual void* findSymbol(ISC_STATUS*, const Firebird::string&) = 0;
|
||||||
|
|
||||||
|
virtual bool getRealPath(const Firebird::string& anySymbol, Firebird::PathName& path) = 0;
|
||||||
|
|
||||||
template <typename T> T& findSymbol(ISC_STATUS* status, const Firebird::string& symbol, T& ptr)
|
template <typename T> T& findSymbol(ISC_STATUS* status, const Firebird::string& symbol, T& ptr)
|
||||||
{
|
{
|
||||||
return (ptr = (T)(findSymbol(status, symbol)));
|
return (ptr = (T)(findSymbol(status, symbol)));
|
||||||
@ -72,10 +74,6 @@ public:
|
|||||||
|
|
||||||
const Firebird::PathName fileName;
|
const Firebird::PathName fileName;
|
||||||
|
|
||||||
#ifdef LINUX
|
|
||||||
virtual bool getRealPath(Firebird::PathName& path) = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/// The constructor is protected so normal code can't allocate instances
|
/// The constructor is protected so normal code can't allocate instances
|
||||||
/// of the class, but the class itself is still able to be subclassed.
|
/// of the class, but the class itself is still able to be subclassed.
|
||||||
|
@ -51,7 +51,7 @@ public:
|
|||||||
|
|
||||||
void* findSymbol(ISC_STATUS*, const Firebird::string&) override;
|
void* findSymbol(ISC_STATUS*, const Firebird::string&) override;
|
||||||
|
|
||||||
bool getRealPath(Firebird::PathName& path) override;
|
bool getRealPath(const Firebird::string& anySymbol, Firebird::PathName& path) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void* module;
|
void* module;
|
||||||
@ -157,40 +157,7 @@ DlfcnModule::DlfcnModule(MemoryPool& pool, const Firebird::PathName& aFileName,
|
|||||||
module(m),
|
module(m),
|
||||||
realPath(pool)
|
realPath(pool)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_DLINFO
|
getRealPath("", realPath);
|
||||||
char b[PATH_MAX];
|
|
||||||
|
|
||||||
#ifdef HAVE_RTLD_DI_ORIGIN
|
|
||||||
if (dlinfo(module, RTLD_DI_ORIGIN, b) == 0)
|
|
||||||
{
|
|
||||||
realPath = b;
|
|
||||||
realPath += '/';
|
|
||||||
realPath += fileName;
|
|
||||||
|
|
||||||
if (realpath(realPath.c_str(), b))
|
|
||||||
{
|
|
||||||
realPath = b;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_RTLD_DI_LINKMAP
|
|
||||||
struct link_map* lm;
|
|
||||||
if (dlinfo(module, RTLD_DI_LINKMAP, &lm) == 0)
|
|
||||||
{
|
|
||||||
if (realpath(lm->l_name, b))
|
|
||||||
{
|
|
||||||
realPath = b;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Error getting real path.
|
|
||||||
realPath.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DlfcnModule::~DlfcnModule()
|
DlfcnModule::~DlfcnModule()
|
||||||
@ -202,6 +169,7 @@ DlfcnModule::~DlfcnModule()
|
|||||||
void* DlfcnModule::findSymbol(ISC_STATUS* status, const Firebird::string& symName)
|
void* DlfcnModule::findSymbol(ISC_STATUS* status, const Firebird::string& symName)
|
||||||
{
|
{
|
||||||
void* result = dlsym(module, symName.c_str());
|
void* result = dlsym(module, symName.c_str());
|
||||||
|
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
Firebird::string newSym = '_' + symName;
|
Firebird::string newSym = '_' + symName;
|
||||||
@ -253,11 +221,69 @@ void* DlfcnModule::findSymbol(ISC_STATUS* status, const Firebird::string& symNam
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DlfcnModule::getRealPath(Firebird::PathName& path)
|
bool DlfcnModule::getRealPath(const Firebird::string& anySymbol, Firebird::PathName& path)
|
||||||
{
|
{
|
||||||
if (realPath.isEmpty())
|
if (realPath.hasData())
|
||||||
return false;
|
{
|
||||||
|
path = realPath;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
path = realPath;
|
char buffer[PATH_MAX];
|
||||||
return true;
|
|
||||||
|
#ifdef HAVE_DLINFO
|
||||||
|
#ifdef HAVE_RTLD_DI_ORIGIN
|
||||||
|
if (dlinfo(module, RTLD_DI_ORIGIN, buffer) == 0)
|
||||||
|
{
|
||||||
|
path = buffer;
|
||||||
|
path += '/';
|
||||||
|
path += fileName;
|
||||||
|
|
||||||
|
if (realpath(path.c_str(), buffer))
|
||||||
|
{
|
||||||
|
path = buffer;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_RTLD_DI_LINKMAP
|
||||||
|
struct link_map* lm;
|
||||||
|
if (dlinfo(module, RTLD_DI_LINKMAP, &lm) == 0)
|
||||||
|
{
|
||||||
|
if (realpath(lm->l_name, buffer))
|
||||||
|
{
|
||||||
|
path = buffer;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_DLADDR
|
||||||
|
if (anySymbol.hasData())
|
||||||
|
{
|
||||||
|
void* symbolPtr = dlsym(module, anySymbol.c_str());
|
||||||
|
|
||||||
|
if (!symbolPtr)
|
||||||
|
symbolPtr = dlsym(module, ('_' + anySymbol).c_str());
|
||||||
|
|
||||||
|
if (symbolPtr)
|
||||||
|
{
|
||||||
|
Dl_info info;
|
||||||
|
if (dladdr(symbolPtr, &info))
|
||||||
|
{
|
||||||
|
if (realpath(info.dli_fname, buffer))
|
||||||
|
{
|
||||||
|
path = buffer;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // HAVE_DLADDR
|
||||||
|
|
||||||
|
path.clear();
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -172,7 +172,9 @@ public:
|
|||||||
|
|
||||||
~Win32Module();
|
~Win32Module();
|
||||||
|
|
||||||
void *findSymbol(ISC_STATUS* status, const string&);
|
void* findSymbol(ISC_STATUS* status, const string&) override;
|
||||||
|
|
||||||
|
bool getRealPath(const string& anySymbol, PathName& path) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const HMODULE module;
|
const HMODULE module;
|
||||||
@ -272,3 +274,16 @@ void* Win32Module::findSymbol(ISC_STATUS* status, const string& symName)
|
|||||||
|
|
||||||
return (void*) result;
|
return (void*) result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Win32Module::getRealPath(const string& /*anySymbol*/, PathName& path)
|
||||||
|
{
|
||||||
|
char moduleFileName[MAX_PATH];
|
||||||
|
|
||||||
|
if (GetModuleFileName(module, moduleFileName, sizeof(moduleFileName)) != 0)
|
||||||
|
{
|
||||||
|
path = moduleFileName;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
@ -65,6 +65,11 @@ const char* const ucTemplate = "lib/libicuuc.%s.dylib";
|
|||||||
#elif defined(HPUX)
|
#elif defined(HPUX)
|
||||||
const char* const inTemplate = "libicui18n.sl.%s";
|
const char* const inTemplate = "libicui18n.sl.%s";
|
||||||
const char* const ucTemplate = "libicuuc.sl.%s";
|
const char* const ucTemplate = "libicuuc.sl.%s";
|
||||||
|
#elif defined(ANDROID)
|
||||||
|
const char* const inTemplate = "libicui18n.%s.so";
|
||||||
|
const char* const ucTemplate = "libicuuc.%s.so";
|
||||||
|
// In Android we need to load this library before others.
|
||||||
|
const char* const dataTemplate = "libicudata.%s.so";
|
||||||
#else
|
#else
|
||||||
const char* const inTemplate = "libicui18n.so.%s";
|
const char* const inTemplate = "libicui18n.so.%s";
|
||||||
const char* const ucTemplate = "libicuuc.so.%s";
|
const char* const ucTemplate = "libicuuc.so.%s";
|
||||||
@ -80,22 +85,22 @@ private:
|
|||||||
public:
|
public:
|
||||||
BaseICU(int aMajorVersion, int aMinorVersion)
|
BaseICU(int aMajorVersion, int aMinorVersion)
|
||||||
: majorVersion(aMajorVersion),
|
: majorVersion(aMajorVersion),
|
||||||
minorVersion(aMinorVersion)
|
minorVersion(aMinorVersion),
|
||||||
|
isSystem(aMajorVersion == 0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ModuleLoader::Module* formatAndLoad(const char* templateName);
|
||||||
void initialize(ModuleLoader::Module* module);
|
void initialize(ModuleLoader::Module* module);
|
||||||
|
|
||||||
template <typename T> void getEntryPoint(const char* name, ModuleLoader::Module* module, T& ptr,
|
template <typename T> string getEntryPoint(const char* name, ModuleLoader::Module* module, T& ptr,
|
||||||
bool optional = false)
|
bool optional = false)
|
||||||
{
|
{
|
||||||
// System-wide ICU have no version number at entries names
|
// System-wide ICU have no version number at entries names
|
||||||
if (!majorVersion)
|
if (!majorVersion)
|
||||||
{
|
{
|
||||||
fb_assert(false); // ASF: I don't think this code path is correct.
|
|
||||||
|
|
||||||
if (module->findSymbol(NULL, name, ptr))
|
if (module->findSymbol(NULL, name, ptr))
|
||||||
return;
|
return name;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -111,63 +116,149 @@ public:
|
|||||||
{
|
{
|
||||||
symbol.printf(pattern, name, majorVersion, minorVersion);
|
symbol.printf(pattern, name, majorVersion, minorVersion);
|
||||||
if (module->findSymbol(NULL, symbol, ptr))
|
if (module->findSymbol(NULL, symbol, ptr))
|
||||||
return;
|
return symbol;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!optional)
|
if (!optional)
|
||||||
(Arg::Gds(isc_icu_entrypoint) << name).raise();
|
(Arg::Gds(isc_icu_entrypoint) << name).raise();
|
||||||
|
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
int majorVersion;
|
int majorVersion;
|
||||||
int minorVersion;
|
int minorVersion;
|
||||||
|
bool isSystem;
|
||||||
|
void (U_EXPORT2* u_getVersion) (UVersionInfo versionArray) = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ModuleLoader::Module* BaseICU::formatAndLoad(const char* templateName)
|
||||||
|
{
|
||||||
|
ModuleLoader::Module* module = nullptr;
|
||||||
|
|
||||||
|
// System-wide ICU have no version number at file names
|
||||||
|
if (isSystem)
|
||||||
|
{
|
||||||
|
PathName filename;
|
||||||
|
filename.printf(templateName, "");
|
||||||
|
filename.rtrim(".");
|
||||||
|
|
||||||
|
//gds__log("ICU: link %s", filename.c_str());
|
||||||
|
|
||||||
|
module = ModuleLoader::fixAndLoadModule(NULL, filename);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fb_assert(majorVersion);
|
||||||
|
|
||||||
|
// ICU has several schemas for placing version into file name
|
||||||
|
const char* const patterns[] =
|
||||||
|
{
|
||||||
|
#ifdef WIN_NT
|
||||||
|
"%d",
|
||||||
|
#endif
|
||||||
|
"%d.%d",
|
||||||
|
"%d_%d",
|
||||||
|
"%d%d"
|
||||||
|
};
|
||||||
|
|
||||||
|
PathName s, filename;
|
||||||
|
for (auto pattern : patterns)
|
||||||
|
{
|
||||||
|
s.printf(pattern, majorVersion, minorVersion);
|
||||||
|
filename.printf(templateName, s.c_str());
|
||||||
|
|
||||||
|
module = ModuleLoader::fixAndLoadModule(NULL, filename);
|
||||||
|
if (module)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef WIN_NT
|
||||||
|
// There is no sence to try pattern "%d" for different minor versions
|
||||||
|
// ASF: In Windows ICU 63.1 libraries use 63.dll suffix. This is handled in 'patterns' above.
|
||||||
|
if (!module && minorVersion == 0)
|
||||||
|
{
|
||||||
|
s.printf("%d", majorVersion);
|
||||||
|
filename.printf(templateName, s.c_str());
|
||||||
|
|
||||||
|
module = ModuleLoader::fixAndLoadModule(NULL, filename);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
return module;
|
||||||
|
}
|
||||||
|
|
||||||
void BaseICU::initialize(ModuleLoader::Module* module)
|
void BaseICU::initialize(ModuleLoader::Module* module)
|
||||||
{
|
{
|
||||||
|
getEntryPoint("u_getVersion", module, u_getVersion);
|
||||||
|
|
||||||
|
UVersionInfo versionInfo;
|
||||||
|
u_getVersion(versionInfo);
|
||||||
|
|
||||||
|
if (!isSystem && (versionInfo[0] != majorVersion || versionInfo[1] != minorVersion))
|
||||||
|
{
|
||||||
|
string err;
|
||||||
|
err.printf(
|
||||||
|
"Wrong version of icu module: loaded %d.%d, expected %d.%d",
|
||||||
|
(int) versionInfo[0], (int) versionInfo[1],
|
||||||
|
this->majorVersion, this->minorVersion);
|
||||||
|
|
||||||
|
(Arg::Gds(isc_random) << Arg::Str(err)).raise();
|
||||||
|
}
|
||||||
|
|
||||||
|
majorVersion = versionInfo[0];
|
||||||
|
minorVersion = versionInfo[1];
|
||||||
|
|
||||||
void (U_EXPORT2 *uInit)(UErrorCode* status);
|
void (U_EXPORT2 *uInit)(UErrorCode* status);
|
||||||
void (U_EXPORT2 *uSetTimeZoneFilesDirectory)(const char* path, UErrorCode* status);
|
void (U_EXPORT2 *uSetTimeZoneFilesDirectory)(const char* path, UErrorCode* status);
|
||||||
void (U_EXPORT2 *uSetDataDirectory)(const char* directory);
|
void (U_EXPORT2 *uSetDataDirectory)(const char* directory);
|
||||||
|
|
||||||
getEntryPoint("u_init", module, uInit, true);
|
getEntryPoint("u_init", module, uInit, true);
|
||||||
getEntryPoint("u_setTimeZoneFilesDirectory", module, uSetTimeZoneFilesDirectory, true);
|
getEntryPoint("u_setTimeZoneFilesDirectory", module, uSetTimeZoneFilesDirectory, true);
|
||||||
getEntryPoint("u_setDataDirectory", module, uSetDataDirectory, true);
|
const auto uSetDataDirectorySymbolName = getEntryPoint("u_setDataDirectory", module, uSetDataDirectory, true);
|
||||||
|
|
||||||
#if defined(WIN_NT) || defined(DARWIN) || defined(ANDROID)
|
|
||||||
if (uSetDataDirectory)
|
if (uSetDataDirectory)
|
||||||
{
|
{
|
||||||
// call uSetDataDirectory only if .dat file is exists at same folder
|
// call uSetDataDirectory only if .dat file exists at same folder as the loaded module
|
||||||
// as the loaded module
|
|
||||||
|
|
||||||
PathName path, file, fullName;
|
ObjectsArray<PathName> pathsToTry;
|
||||||
PathUtils::splitLastComponent(path, file, module->fileName);
|
PathName file;
|
||||||
|
|
||||||
#ifdef WIN_NT
|
{ // scope
|
||||||
// icuucXX.dll -> icudtXX.dll
|
PathName modulePathName;
|
||||||
file.replace(3, 2, "dt");
|
if (!module->getRealPath(uSetDataDirectorySymbolName.c_str(), modulePathName))
|
||||||
|
modulePathName = module->fileName;
|
||||||
|
|
||||||
// icudtXX.dll -> icudtXXl.dat
|
PathName path;
|
||||||
const FB_SIZE_T pos = file.find_last_of('.');
|
PathUtils::splitLastComponent(path, file, modulePathName);
|
||||||
file.erase(pos);
|
|
||||||
file.append("l.dat");
|
if (path.hasData())
|
||||||
#else
|
pathsToTry.add(path);
|
||||||
// libicuuc.so.XX -> icudtXX
|
|
||||||
const FB_SIZE_T pos = file.find_last_of('.');
|
|
||||||
if (pos > 0 && pos != file.npos)
|
|
||||||
{
|
|
||||||
file.replace(0, pos + 1, "icudt");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// icudtXX -> icudtXXl.dat
|
pathsToTry.add(Config::getRootDirectory());
|
||||||
file += "l.dat";
|
|
||||||
|
file.printf("icudt%u%c.dat", majorVersion,
|
||||||
|
#ifdef WORDS_BIGENDIAN
|
||||||
|
'b'
|
||||||
|
#else
|
||||||
|
'l'
|
||||||
#endif
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
PathUtils::concatPath(fullName, path, file);
|
for (const auto& path : pathsToTry)
|
||||||
|
{
|
||||||
|
PathName fullName;
|
||||||
|
PathUtils::concatPath(fullName, path, file);
|
||||||
|
|
||||||
if (PathUtils::canAccess(fullName, 0))
|
if (PathUtils::canAccess(fullName, 0))
|
||||||
uSetDataDirectory(path.c_str());
|
{
|
||||||
|
uSetDataDirectory(path.c_str());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
if (uInit)
|
if (uInit)
|
||||||
{
|
{
|
||||||
@ -195,10 +286,6 @@ void BaseICU::initialize(ModuleLoader::Module* module)
|
|||||||
|
|
||||||
namespace Jrd {
|
namespace Jrd {
|
||||||
|
|
||||||
static ModuleLoader::Module* formatAndLoad(const char* templateName,
|
|
||||||
int& majorVersion, int& minorVersion);
|
|
||||||
|
|
||||||
|
|
||||||
// encapsulate ICU collations libraries
|
// encapsulate ICU collations libraries
|
||||||
struct UnicodeUtil::ICU : public BaseICU
|
struct UnicodeUtil::ICU : public BaseICU
|
||||||
{
|
{
|
||||||
@ -316,7 +403,16 @@ private:
|
|||||||
ImplementConversionICU(int aMajorVersion, int aMinorVersion)
|
ImplementConversionICU(int aMajorVersion, int aMinorVersion)
|
||||||
: BaseICU(aMajorVersion, aMinorVersion)
|
: BaseICU(aMajorVersion, aMinorVersion)
|
||||||
{
|
{
|
||||||
module = formatAndLoad(ucTemplate, this->majorVersion, this->minorVersion);
|
#ifdef ANDROID
|
||||||
|
auto dataModule = formatAndLoad(dataTemplate);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
module = formatAndLoad(ucTemplate);
|
||||||
|
|
||||||
|
#ifdef ANDROID
|
||||||
|
delete dataModule;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!module)
|
if (!module)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -325,7 +421,6 @@ private:
|
|||||||
getEntryPoint("ucnv_open", module, ucnv_open);
|
getEntryPoint("ucnv_open", module, ucnv_open);
|
||||||
getEntryPoint("ucnv_close", module, ucnv_close);
|
getEntryPoint("ucnv_close", module, ucnv_close);
|
||||||
getEntryPoint("ucnv_fromUChars", module, ucnv_fromUChars);
|
getEntryPoint("ucnv_fromUChars", module, ucnv_fromUChars);
|
||||||
getEntryPoint("u_getVersion", module, u_getVersion);
|
|
||||||
getEntryPoint("u_tolower", module, u_tolower);
|
getEntryPoint("u_tolower", module, u_tolower);
|
||||||
getEntryPoint("u_toupper", module, u_toupper);
|
getEntryPoint("u_toupper", module, u_toupper);
|
||||||
getEntryPoint("u_strCompare", module, u_strCompare);
|
getEntryPoint("u_strCompare", module, u_strCompare);
|
||||||
@ -344,19 +439,10 @@ private:
|
|||||||
|
|
||||||
getEntryPoint("u_strcmp", module, ustrcmp);
|
getEntryPoint("u_strcmp", module, ustrcmp);
|
||||||
|
|
||||||
inModule = formatAndLoad(inTemplate, aMajorVersion, aMinorVersion);
|
inModule = formatAndLoad(inTemplate);
|
||||||
if (!inModule)
|
if (!inModule)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (aMajorVersion != this->majorVersion || aMinorVersion != this->minorVersion)
|
|
||||||
{
|
|
||||||
string err;
|
|
||||||
err.printf("Wrong version of IN icu module: loaded %d.%d, expected %d.%d",
|
|
||||||
aMajorVersion, aMinorVersion, this->majorVersion, this->minorVersion);
|
|
||||||
|
|
||||||
(Arg::Gds(isc_random) << Arg::Str(err)).raise();
|
|
||||||
}
|
|
||||||
|
|
||||||
getEntryPoint("ucal_getTZDataVersion", inModule, ucalGetTZDataVersion);
|
getEntryPoint("ucal_getTZDataVersion", inModule, ucalGetTZDataVersion);
|
||||||
getEntryPoint("ucal_getDefaultTimeZone", inModule, ucalGetDefaultTimeZone);
|
getEntryPoint("ucal_getDefaultTimeZone", inModule, ucalGetDefaultTimeZone);
|
||||||
getEntryPoint("ucal_open", inModule, ucalOpen);
|
getEntryPoint("ucal_open", inModule, ucalOpen);
|
||||||
@ -384,11 +470,8 @@ public:
|
|||||||
|
|
||||||
if (o)
|
if (o)
|
||||||
{
|
{
|
||||||
UVersionInfo versionInfo;
|
o->vMajor = o->majorVersion;
|
||||||
o->u_getVersion(versionInfo);
|
o->vMinor = o->minorVersion;
|
||||||
|
|
||||||
o->vMajor = versionInfo[0];
|
|
||||||
o->vMinor = versionInfo[1];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return o;
|
return o;
|
||||||
@ -430,128 +513,6 @@ static const char* const COLL_30_VERSION = "41.128.4.4"; // ICU 3.0 collator ver
|
|||||||
|
|
||||||
static GlobalPtr<UnicodeUtil::ICUModules> icuModules;
|
static GlobalPtr<UnicodeUtil::ICUModules> icuModules;
|
||||||
|
|
||||||
#ifdef LINUX
|
|
||||||
static bool extractVersionFromPath(const PathName& realPath, int& major, int& minor)
|
|
||||||
{
|
|
||||||
major = 0;
|
|
||||||
minor = 0;
|
|
||||||
int mult = 1;
|
|
||||||
|
|
||||||
const FB_SIZE_T len = realPath.length();
|
|
||||||
const char* buf = realPath.begin();
|
|
||||||
|
|
||||||
bool dot = false;
|
|
||||||
for (const char* p = buf + len - 1; p >= buf; p--)
|
|
||||||
{
|
|
||||||
if (*p >= '0' && *p < '9')
|
|
||||||
{
|
|
||||||
major += (*p - '0') * mult;
|
|
||||||
mult *= 10;
|
|
||||||
}
|
|
||||||
else if (*p == '.' && !dot)
|
|
||||||
{
|
|
||||||
dot = true;
|
|
||||||
minor = major;
|
|
||||||
major = 0;
|
|
||||||
mult = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (minor && !major)
|
|
||||||
{
|
|
||||||
major = minor;
|
|
||||||
minor = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return major != 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static ModuleLoader::Module* formatAndLoad(const char* templateName,
|
|
||||||
int& majorVersion, int& minorVersion)
|
|
||||||
{
|
|
||||||
#ifdef ANDROID
|
|
||||||
static ModuleLoader::Module* dat = ModuleLoader::loadModule(NULL,
|
|
||||||
fb_utils::getPrefix(Firebird::IConfigManager::DIR_LIB, "libicudata.so"));
|
|
||||||
|
|
||||||
Firebird::PathName newName = fb_utils::getPrefix(Firebird::IConfigManager::DIR_LIB, templateName);
|
|
||||||
templateName = newName.c_str();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ModuleLoader::Module* module = nullptr;
|
|
||||||
|
|
||||||
// System-wide ICU have no version number at file names
|
|
||||||
if (!majorVersion)
|
|
||||||
{
|
|
||||||
PathName filename;
|
|
||||||
filename.printf(templateName, "");
|
|
||||||
filename.rtrim(".");
|
|
||||||
|
|
||||||
//gds__log("ICU: link %s", filename.c_str());
|
|
||||||
|
|
||||||
module = ModuleLoader::fixAndLoadModule(NULL, filename);
|
|
||||||
|
|
||||||
#ifdef LINUX
|
|
||||||
// try to resolve symlinks and extract version numbers from suffix
|
|
||||||
PathName realPath;
|
|
||||||
if (module && module->getRealPath(realPath))
|
|
||||||
{
|
|
||||||
//gds__log("ICU: module name %s, real path %s", module->fileName.c_str(), realPath.c_str());
|
|
||||||
|
|
||||||
int major, minor;
|
|
||||||
if (extractVersionFromPath(realPath, major, minor))
|
|
||||||
{
|
|
||||||
//gds__log("ICU: extracted version %d.%d", major, minor);
|
|
||||||
majorVersion = major;
|
|
||||||
minorVersion = minor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// ICU has several schemas for placing version into file name
|
|
||||||
const char* const patterns[] =
|
|
||||||
{
|
|
||||||
#ifdef WIN_NT
|
|
||||||
"%d",
|
|
||||||
#endif
|
|
||||||
"%d_%d",
|
|
||||||
"%d.%d",
|
|
||||||
"%d%d"
|
|
||||||
};
|
|
||||||
|
|
||||||
PathName s, filename;
|
|
||||||
for (auto pattern : patterns)
|
|
||||||
{
|
|
||||||
s.printf(pattern, majorVersion, minorVersion);
|
|
||||||
filename.printf(templateName, s.c_str());
|
|
||||||
|
|
||||||
module = ModuleLoader::fixAndLoadModule(NULL, filename);
|
|
||||||
if (module)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef WIN_NT
|
|
||||||
// There is no sence to try pattern "%d" for different minor versions
|
|
||||||
// ASF: In Windows ICU 63.1 libraries use 63.dll suffix. This is handled in 'patterns' above.
|
|
||||||
if (!module && minorVersion == 0)
|
|
||||||
{
|
|
||||||
s.printf("%d", majorVersion);
|
|
||||||
filename.printf(templateName, s.c_str());
|
|
||||||
|
|
||||||
module = ModuleLoader::fixAndLoadModule(NULL, filename);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
return module;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void getVersions(const string& configInfo, ObjectsArray<string>& versions)
|
static void getVersions(const string& configInfo, ObjectsArray<string>& versions)
|
||||||
{
|
{
|
||||||
@ -1220,7 +1181,16 @@ UnicodeUtil::ICU* UnicodeUtil::loadICU(const string& icuVersion, const string& c
|
|||||||
|
|
||||||
icu = FB_NEW_POOL(*getDefaultMemoryPool()) ICU(majorVersion, minorVersion);
|
icu = FB_NEW_POOL(*getDefaultMemoryPool()) ICU(majorVersion, minorVersion);
|
||||||
|
|
||||||
icu->ucModule = formatAndLoad(ucTemplate, icu->majorVersion, icu->minorVersion);
|
#ifdef ANDROID
|
||||||
|
auto dataModule = icu->formatAndLoad(dataTemplate);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
icu->ucModule = icu->formatAndLoad(ucTemplate);
|
||||||
|
|
||||||
|
#ifdef ANDROID
|
||||||
|
delete dataModule;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!icu->ucModule)
|
if (!icu->ucModule)
|
||||||
{
|
{
|
||||||
gds__log("failed to load UC icu module version %s", configVersion.c_str());
|
gds__log("failed to load UC icu module version %s", configVersion.c_str());
|
||||||
@ -1228,26 +1198,18 @@ UnicodeUtil::ICU* UnicodeUtil::loadICU(const string& icuVersion, const string& c
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
icu->inModule = formatAndLoad(inTemplate, majorVersion, minorVersion);
|
|
||||||
if (!icu->inModule)
|
|
||||||
{
|
|
||||||
gds__log("failed to load IN icu module version %s", configVersion.c_str());
|
|
||||||
delete icu;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (icu->majorVersion != majorVersion || icu->minorVersion != minorVersion)
|
|
||||||
{
|
|
||||||
gds__log("Wrong version of IN icu module: loaded %d.%d, expected %d.%d",
|
|
||||||
majorVersion, minorVersion, icu->majorVersion, icu->minorVersion);
|
|
||||||
delete icu;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
icu->initialize(icu->ucModule);
|
icu->initialize(icu->ucModule);
|
||||||
|
|
||||||
|
icu->inModule = icu->formatAndLoad(inTemplate);
|
||||||
|
if (!icu->inModule)
|
||||||
|
{
|
||||||
|
gds__log("failed to load IN icu module version %s", configVersion.c_str());
|
||||||
|
delete icu;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
icu->getEntryPoint("u_versionToString", icu->ucModule, icu->uVersionToString);
|
icu->getEntryPoint("u_versionToString", icu->ucModule, icu->uVersionToString);
|
||||||
icu->getEntryPoint("uloc_countAvailable", icu->ucModule, icu->ulocCountAvailable);
|
icu->getEntryPoint("uloc_countAvailable", icu->ucModule, icu->ulocCountAvailable);
|
||||||
icu->getEntryPoint("uloc_getAvailable", icu->ucModule, icu->ulocGetAvailable);
|
icu->getEntryPoint("uloc_getAvailable", icu->ucModule, icu->ulocGetAvailable);
|
||||||
|
@ -58,7 +58,6 @@ public:
|
|||||||
const UChar *src, int32_t srcLength,
|
const UChar *src, int32_t srcLength,
|
||||||
UErrorCode *pErrorCode);
|
UErrorCode *pErrorCode);
|
||||||
|
|
||||||
void (U_EXPORT2* u_getVersion) (UVersionInfo versionArray);
|
|
||||||
UChar32 (U_EXPORT2* u_tolower) (UChar32 c);
|
UChar32 (U_EXPORT2* u_tolower) (UChar32 c);
|
||||||
UChar32 (U_EXPORT2* u_toupper) (UChar32 c);
|
UChar32 (U_EXPORT2* u_toupper) (UChar32 c);
|
||||||
int32_t (U_EXPORT2* u_strCompare) (const UChar* s1, int32_t length1,
|
int32_t (U_EXPORT2* u_strCompare) (const UChar* s1, int32_t length1,
|
||||||
|
@ -58,6 +58,7 @@
|
|||||||
#include "../common/classes/ClumpletReader.h"
|
#include "../common/classes/ClumpletReader.h"
|
||||||
#include "../common/StatusArg.h"
|
#include "../common/StatusArg.h"
|
||||||
#include "../common/TimeZoneUtil.h"
|
#include "../common/TimeZoneUtil.h"
|
||||||
|
#include "../common/config/config.h"
|
||||||
|
|
||||||
#ifdef WIN_NT
|
#ifdef WIN_NT
|
||||||
#include <direct.h>
|
#include <direct.h>
|
||||||
@ -1200,6 +1201,22 @@ bool bootBuild()
|
|||||||
Firebird::PathName getPrefix(unsigned int prefType, const char* name)
|
Firebird::PathName getPrefix(unsigned int prefType, const char* name)
|
||||||
{
|
{
|
||||||
Firebird::PathName s;
|
Firebird::PathName s;
|
||||||
|
|
||||||
|
#ifdef ANDROID
|
||||||
|
const bool useInstallDir =
|
||||||
|
prefType == Firebird::IConfigManager::DIR_BIN ||
|
||||||
|
prefType == Firebird::IConfigManager::DIR_SBIN ||
|
||||||
|
prefType == Firebird::IConfigManager::DIR_LIB ||
|
||||||
|
prefType == Firebird::IConfigManager::DIR_GUARD ||
|
||||||
|
prefType == Firebird::IConfigManager::DIR_PLUGINS;
|
||||||
|
|
||||||
|
if (useInstallDir)
|
||||||
|
s = name;
|
||||||
|
else
|
||||||
|
PathUtils::concatPath(s, Firebird::Config::getRootDirectory(), name);
|
||||||
|
|
||||||
|
return s;
|
||||||
|
#else
|
||||||
char tmp[MAXPATHLEN];
|
char tmp[MAXPATHLEN];
|
||||||
|
|
||||||
const char* configDir[] = {
|
const char* configDir[] = {
|
||||||
@ -1305,6 +1322,7 @@ Firebird::PathName getPrefix(unsigned int prefType, const char* name)
|
|||||||
s += name;
|
s += name;
|
||||||
gds__prefix(tmp, s.c_str());
|
gds__prefix(tmp, s.c_str());
|
||||||
return tmp;
|
return tmp;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int copyStatus(ISC_STATUS* const to, const unsigned int space,
|
unsigned int copyStatus(ISC_STATUS* const to, const unsigned int space,
|
||||||
|
@ -41,6 +41,10 @@
|
|||||||
#include "../common/ScanDir.h"
|
#include "../common/ScanDir.h"
|
||||||
#include "../common/config/config_file.h"
|
#include "../common/config/config_file.h"
|
||||||
|
|
||||||
|
#ifdef ANDROID
|
||||||
|
#include "../common/os/path_utils.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
using namespace Firebird;
|
using namespace Firebird;
|
||||||
|
|
||||||
|
|
||||||
@ -475,6 +479,16 @@ bool IntlManager::initialize()
|
|||||||
if (!exists)
|
if (!exists)
|
||||||
{
|
{
|
||||||
mod = ModuleLoader::fixAndLoadModule(status, filename);
|
mod = ModuleLoader::fixAndLoadModule(status, filename);
|
||||||
|
|
||||||
|
#ifdef ANDROID
|
||||||
|
if (!mod)
|
||||||
|
{
|
||||||
|
PathName path, file;
|
||||||
|
PathUtils::splitLastComponent(path, file, filename);
|
||||||
|
mod = ModuleLoader::fixAndLoadModule(status, file);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (mod)
|
if (mod)
|
||||||
{
|
{
|
||||||
exists = modules->exist(filename);
|
exists = modules->exist(filename);
|
||||||
|
@ -87,7 +87,7 @@ namespace
|
|||||||
if (fb_utils::bootBuild())
|
if (fb_utils::bootBuild())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#if defined(WIN_NT)
|
#if defined(WIN_NT) || defined(ANDROID)
|
||||||
libUtilPath.assign(LIBNAME);
|
libUtilPath.assign(LIBNAME);
|
||||||
#elif defined(DARWIN)
|
#elif defined(DARWIN)
|
||||||
libUtilPath = "/Library/Frameworks/Firebird.framework/Versions/A/Libraries/" LIBNAME;
|
libUtilPath = "/Library/Frameworks/Firebird.framework/Versions/A/Libraries/" LIBNAME;
|
||||||
|
@ -69,8 +69,12 @@ void ConfigRoot::osConfigInstallDir()
|
|||||||
char* temp = br_find_exe_dir(NULL);
|
char* temp = br_find_exe_dir(NULL);
|
||||||
if (temp)
|
if (temp)
|
||||||
{
|
{
|
||||||
|
#ifdef ANDROID
|
||||||
|
install_dir = temp;
|
||||||
|
#else
|
||||||
string dummy;
|
string dummy;
|
||||||
PathUtils::splitLastComponent(install_dir, dummy, temp);
|
PathUtils::splitLastComponent(install_dir, dummy, temp);
|
||||||
|
#endif
|
||||||
free(temp);
|
free(temp);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -112,6 +112,10 @@
|
|||||||
#undef leave
|
#undef leave
|
||||||
#endif // WIN_NT
|
#endif // WIN_NT
|
||||||
|
|
||||||
|
#ifdef ANDROID
|
||||||
|
#include <android/log.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
static char fb_prefix_val[MAXPATHLEN];
|
static char fb_prefix_val[MAXPATHLEN];
|
||||||
static char fb_prefix_lock_val[MAXPATHLEN];
|
static char fb_prefix_lock_val[MAXPATHLEN];
|
||||||
static char fb_prefix_msg_val[MAXPATHLEN];
|
static char fb_prefix_msg_val[MAXPATHLEN];
|
||||||
@ -1281,6 +1285,7 @@ void API_ROUTINE gds__log(const TEXT* text, ...)
|
|||||||
#ifdef WIN_NT
|
#ifdef WIN_NT
|
||||||
WaitForSingleObject(CleanupTraceHandles::trace_mutex_handle, INFINITE);
|
WaitForSingleObject(CleanupTraceHandles::trace_mutex_handle, INFINITE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
FILE* file = os_utils::fopen(name.c_str(), "a");
|
FILE* file = os_utils::fopen(name.c_str(), "a");
|
||||||
if (file != NULL)
|
if (file != NULL)
|
||||||
{
|
{
|
||||||
@ -1311,7 +1316,12 @@ void API_ROUTINE gds__log(const TEXT* text, ...)
|
|||||||
// This will release file lock set in posix case
|
// This will release file lock set in posix case
|
||||||
fclose(file);
|
fclose(file);
|
||||||
}
|
}
|
||||||
#ifdef WIN_NT
|
|
||||||
|
#ifdef ANDROID
|
||||||
|
va_start(ptr, text);
|
||||||
|
__android_log_vprint(ANDROID_LOG_INFO, "FIREBIRD", text, ptr);
|
||||||
|
va_end(ptr);
|
||||||
|
#elif defined(WIN_NT)
|
||||||
ReleaseMutex(CleanupTraceHandles::trace_mutex_handle);
|
ReleaseMutex(CleanupTraceHandles::trace_mutex_handle);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user