ernesto logo
Torna al Magazine
Impianti di spegnimento antincendio: come trovare esperti in sistemi anticendio
consigli
Impianti di spegnimento antincendio: come trovare esperti in sistemi anticendio

Come Trovare Especialisti in Impianti di Spegnimento Antincendio

Come Identificare Specialisti di Sistemi di Estinzione Antincendio.

Scopri come trovare specialisti in impianti di spegnimento antincendio per garantire la sicurezza dei tuoi spazi. Nel nostro ultimo articolo, esploriamo i criteri fondamentali da considerare nella scelta dei professionisti, le certificazioni necessarie e le migliori pratiche per una corretta installazione. Assicurati di proteggere la tua proprietà!

Trova professionisti vicino a te

Trova professionisti
/* * Copyright (C) 2017 The Android Open Source Project * * 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 * * http://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. */ package com.android.build.gradle.internal.ndk import com.android.build.gradle.internal.core.Abi import com.android.build.gradle.internal.core.Abi.X86 import com.android.build.gradle.internal.core.Abi.X86_64 import com.android.build.gradle.internal.cxx.configure.AbiConfigurationKey import com.android.build.gradle.internal.cxx.configure.CmakeProperty import com.android.build.gradle.internal.cxx.configure.CommandLineArgument import com.android.build.gradle.internal.cxx.configure.CommandLineCmakeArgument import com.android.build.gradle.internal.cxx.configure.DslProperty import com.android.build.gradle.internal.cxx.configure.NativeBuildSystem import com.android.build.gradle.internal.cxx.configure.createCmakeProperty import com.android.build.gradle.internal.cxx.configure.createDslProperty import com.android.build.gradle.internal.cxx.configure.createPropertyArgument import com.android.build.gradle.internal.cxx.configure.getNdkDefaultAbi import com.android.build.gradle.internal.cxx.configure.refreshLocalProperties import com.android.build.gradle.internal.cxx.logging.errorln import com.android.build.gradle.internal.cxx.logging.infoln import com.android.build.gradle.internal.cxx.logging.warnln import com.android.build.gradle.internal.ndk.files.CmakeFile import com.android.build.gradle.internal.ndk.files.makeFile import com.android.build.gradle.internal.ndk.files.soongExternalNativeBuildProperties import com.android.build.gradle.internal.ndk.files.soongExternalNativeBuildPropertiesFile import com.android.build.gradle.internal.scope.GlobalScope import com.android.build.gradle.internal.scope.VariantScope import com.android.builder.errors.EvalIssueReporter import com.android.utils.FileUtils import com.android.utils.ILogger import com.google.common.base.Charsets import com.google.common.base.Joiner import com.google.common.base.MoreObjects import com.google.common.base.Strings import com.google.common.collect.ArrayListMultimap import com.google.common.collect.ImmutableList import com.google.common.collect.ImmutableMap import com.google.common.collect.ImmutableSet import com.google.common.collect.Maps import com.google.common.collect.Multimap import org.gradle.api.Action import org.gradle.api.Project import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.FileCollection import org.gradle.api.file.FileTree import org.gradle.api.provider.Provider import org.gradle.api.tasks.util.PatternSet import java.io.File import java.io.IOException import java.io.PrintWriter import java.nio.file.Files import java.nio.file.Path import java.nio.file.Paths import java.util.Objects import java.util.concurrent.atomic.AtomicBoolean import java.util.function.Consumer /** * Data class to capture information from build.gradle that is used during configuring and building */ data class NdkBuildInfo( val rootBuildScript: File, val rootDir: File, val buildScript: File, val soongOutDir: File, val makeFile: File, val sourceFiles: FileCollection, val abis: ImmutableSet, val ndkHandler: NdkHandler, val externalNativeBuildProperties: File?, val cxxBuildSystem: NativeBuildSystem, val cxxVersion: CxxModuleModel.CxxModuleVersion, val variantName: String) /** * Generate a [NdkBuildInfo] from a [VariantScope]. */ fun createNdkBuildInfo( variantScope: VariantScope, project: Project, ndkHandler: NdkHandler, cxxVersion: CxxModuleModel.CxxModuleVersion, cxxBuildSystem: NativeBuildSystem, ndkData: NdkData ): NdkBuildInfo { val externalNativeBuildPropertiesFile = soongExternalNativeBuildPropertiesFile(variantScope) val externalNativeBuildProperties = if (externalNativeBuildPropertiesFile.isFile) externalNativeBuildPropertiesFile else null return NdkBuildInfo( rootBuildScript = variantScope.globalScope.buildFile, rootDir = variantScope.globalScope.project.rootDir, buildScript = variantScope.variantData.variantConfiguration.buildType.buildFile, soongOutDir = variantScope.globalScope.ndkFolder.toFile(), makeFile = makeFile(variantScope).toFile(), sourceFiles = project.files(*ndkData.sources.toTypedArray()), abis = ImmutableSet.copyOf(variantScope.getNdkAbiNames()), externalNativeBuildProperties = externalNativeBuildProperties, ndkHandler = ndkHandler, cxxVersion = cxxVersion, cxxBuildSystem = cxxBuildSystem, variantName = variantScope.fullVariantName ) } /** * Given [NdkBuildInfo] configure the ndk side of things. * * This is the equivalent of calling ndk-build and having it parse the Android.mk. This will create * a cmake project and a soong externalNativeBuild.json. * * @return true if successful. */ fun configureNdkBuild( ndkBuildInfo: NdkBuildInfo, logger: ILogger, issueReporter: EvalIssueReporter ): Boolean { // Make sure the source files exist and the output folder exists if (!ndkBuildInfo.sourceFiles.isEmpty && !ndkBuildInfo.soongOutDir.exists()) { FileUtils.mkdirs(ndkBuildInfo.soongOutDir) } if (!ndkBuildInfo.sourceFiles.isEmpty && !ndkBuildInfo.makeFile.exists()) { FileUtils.mkdirs(ndkBuildInfo.makeFile.parentFile) } // Check if all the source files exist and are readable if (!ndkBuildInfo.sourceFiles.isEmpty && ndkBuildInfo.sourceFiles.files.any { !it.isFile }) { // TODO(danalbert): This error message should print the paths that don't exist. issueReporter.reportError( EvalIssueReporter.Type.EXTERNAL_NATIVE_BUILD_CONFIGURATION, "Unable to read all the source files for C/C++ code. " + "See the error above for more details.") return false } val abiNames = ndkBuildInfo.abis.map { it.tag } val cmakeFile = CmakeFile(ndkBuildInfo.makeFile) val groupsToFiles = ArrayListMultimap.create() val globalProperties = mutableListOf() val globalAppleClangFlags = mutableListOf() val globalClangFlags = mutableListOf() val globalLibClangFlags = mutableListOf() val globalCFlags = mutableListOf() val globalCppFlags = mutableListOf() val globalLdFlags = mutableListOf() val globalLibs = mutableListOf() val perAbiProperties = Maps.newHashMap>() val perAbiAppleClangFlags = Maps.newHashMap>() val perAbiClangFlags = Maps.newHashMap>() val perAbiLibClangFlags = Maps.newHashMap>() val perAbiCFlags = Maps.newHashMap>() val perAbiCppFlags = Maps.newHashMap>() val perAbiLdFlags = Maps.newHashMap>() val perAbiLibs = Maps.newHashMap>() val perAbiLibraries = Maps.newHashMap>() val perAbiIncludeDirs = Maps.newHashMap>() val perAbiLinkerFlags = Maps.newHashMap>() for (abi in ndkBuildInfo.abis) { perAbiProperties[abi] = mutableListOf() perAbiAppleClangFlags[abi] = mutableListOf() perAbiClangFlags[abi] = mutableListOf() perAbiLibClangFlags[abi] = mutableListOf() perAbiCFlags[abi] = mutableListOf() perAbiCppFlags[abi] = mutableListOf() perAbiLdFlags[abi] = mutableListOf() perAbiLibs[abi] = mutableListOf() perAbiLibraries[abi] = mutableListOf() perAbiIncludeDirs[abi] = mutableListOf() perAbiLinkerFlags[abi] = mutableListOf() } // This is the root folder of the source files. The source files are expected to be relative to // this folder. val sourceFilesRootFolder = when { ndkBuildInfo.sourceFiles.isEmpty -> null ndkBuildInfo.sourceFiles.singleFile != null -> ndkBuildInfo.sourceFiles.singleFile!!.parentFile else -> { val commonRoot = FileUtils.findCommonRoot(ndkBuildInfo.sourceFiles.files.map { it.parentFile }) if (commonRoot == null) { // This should never happen, since we already check that the files exist. logger.errorln("Unable to locate common source files root folder. Aborting.") return false } commonRoot } } // This is the root folder of the Android.mk. The Android.MK is expected to be relative to this // folder. val makeFileRootFolder = when { ndkBuildInfo.sourceFiles.isEmpty -> null ndkBuildInfo.makeFile.parentFile == null -> null ndkBuildInfo.makeFile.parentFile.absolutePath == sourceFilesRootFolder?.absolutePath -> null else -> ndkBuildInfo.makeFile.parentFile } parseAndroidMkFiles( ndkBuildInfo = ndkBuildInfo, sourceFilesRootFolder = sourceFilesRootFolder, makeFileRootFolder = makeFileRootFolder, groupsToFiles = groupsToFiles, globalProperties = globalProperties, globalAppleClangFlags = globalAppleClangFlags, globalClangFlags = globalClangFlags, globalLibClangFlags = globalLibClangFlags, globalCFlags = globalCFlags, globalCppFlags = globalCppFlags, globalLdFlags = globalLdFlags, globalLibs = globalLibs, perAbiProperties = perAbiProperties, perAbiAppleClangFlags = perAbiAppleClangFlags, perAbiClangFlags = perAbiClangFlags, perAbiLibClangFlags = perAbiLibClangFlags, perAbiCFlags = perAbiCFlags, perAbiCppFlags = perAbiCppFlags, perAbiLdFlags = perAbiLdFlags, perAbiLibs = perAbiLibs, perAbiLibraries = perAbiLibraries, perAbiIncludeDirs = perAbiIncludeDirs, perAbiLinkerFlags = perAbiLinkerFlags, logger = logger ) if (logger.isVerbose) { logger.verbose("Done parsing Android.mk") logger.verbose("Android.mk groups to files:") groupsToFiles.asMap().forEach { (name, files) -> logger.verbose(" $name:") files.forEach { logger.verbose(" $it") } } logger.verbose("Android.mk global properties:") globalProperties.forEach(Consumer { logger.verbose(" $it") }) logger.verbose("Android.mk global flags:") logger.verbose(" Apple clang flags: ${Joiner.on(" ").join(globalAppleClangFlags)}") logger.verbose(" clang flags: ${Joiner.on(" ").join(globalClangFlags)}") logger.verbose(" libclang flags: ${Joiner.on(" ").join(globalLibClangFlags)}") logger.verbose(" C flags: ${Joiner.on(" ").join(globalCFlags)}") logger.verbose(" C++ flags: ${Joiner.on(" ").join(globalCppFlags)}") logger.verbose(" ld flags: ${Joiner.on(" ").join(globalLdFlags)}") logger.verbose(" libs: ${Joiner.on(" ").join(globalLibs)}") logger.verbose("Android.mk per-ABI properties:") perAbiProperties.forEach { (abi, properties) -> logger.verbose(" ${abi.tag}:") properties.forEach(Consumer { logger.verbose(" $it") }) } logger.verbose("Android.MK per-ABI flags:") perAbiAppleClangFlags.forEach { (abi, flags) -> logger.verbose(" ${abi.tag}:") logger.verbose(" Apple clang flags: ${Joiner.on(" ").join(flags)}") } perAbiClangFlags.forEach { (abi, flags) -> logger.verbose(" ${abi.tag}:") logger.verbose(" clang flags: ${Joiner.on(" ").join(flags)}") } perAbiLibClangFlags.forEach { (abi, flags) -> logger.verbose(" ${abi.tag}:") logger.verbose(" libclang flags: ${Joiner.on(" ").join(flags)}") } perAbiCFlags.forEach { (abi, flags) -> logger.verbose(" ${abi.tag}:") logger.verbose(" C flags: ${Joiner.on(" ").join(flags)}") } perAbiCppFlags.forEach { (abi, flags) -> logger.verbose(" ${abi.tag}:") logger.verbose(" C++ flags: ${Joiner.on(" ").join(flags)}") } perAbiLdFlags.forEach { (abi, flags) -> logger.verbose(" ${abi.tag}:") logger.verbose(" ld flags: ${Joiner.on(" ").join(flags)}") }
Ultimo aggiornamento
30 Mar 2025
Marco Esposito
Marco Esposito

Esperto nella redazione di guide sui costi e i professionisti per lavori domestici, ristrutturazioni e servizi generici.

Articoli consigliati
Come Trovare Especialisti in Impianti di Spegnimento Antincendio
consigli
Come Trovare Especialisti in Impianti di Spegnimento Antincendio
Trovare un Esperto in Sistemi Antincendio su Ernesto.it: Il Sito per Trovare i Migliori Professionisti.
guida
Trovare un Esperto in Sistemi Antincendio su Ernesto.it: Il Sito per Trovare i Migliori Professionisti.
Come Trovare Esperti Antincendio per la Consulenza Antincendio
consigli
Come Trovare Esperti Antincendio per la Consulenza Antincendio
Impianto Antincendio: Sicurezza Efficace
sicurezza,impianti antincendio,protezione casa
Impianto Antincendio: Sicurezza Efficace
Sicurezza nelle Strutture Agricole
sicurezza,antincendio,agricoltura
Sicurezza nelle Strutture Agricole
Come Assumere un Esperto in Sistemi Antincendio per una Valutazione dei Rischi
consigli
Come Assumere un Esperto in Sistemi Antincendio per una Valutazione dei Rischi
Proteggi la Tua Azienda Agricola con Antincendio
sicurezza,agricoltura,impianti antincendio
Proteggi la Tua Azienda Agricola con Antincendio
Proteggi i Tuoi Ambienti con Sicurezza
sicurezza,impianti,antincendio
Proteggi i Tuoi Ambienti con Sicurezza
Protezione Antincendio per Motori Elettrici
sicurezza,impianti elettrici,prevenzione incendi
Protezione Antincendio per Motori Elettrici
Come Trovare Ditte per la Progettazione di Impianti Antincendio
consigli
Come Trovare Ditte per la Progettazione di Impianti Antincendio
Come Trovare Especialisti in Lattoneria
consigli
Come Trovare Especialisti in Lattoneria
Come Proteggersi da Incendi: Sistemi e Suggerimenti per la Sicurezza in Casa e in Azienda.
consigli
Come Proteggersi da Incendi: Sistemi e Suggerimenti per la Sicurezza in Casa e in Azienda.
Come Trovare Tecnici per i Servizi di Protezione Antincendio.
consigli
Come Trovare Tecnici per i Servizi di Protezione Antincendio.
Protezione Antincendio per la Tua Casa
sicurezza,impianti,protezione incendi
Protezione Antincendio per la Tua Casa
Investi nella Sicurezza Antincendio
impianto antincendio,sicurezza,protezione
Investi nella Sicurezza Antincendio
Proteggi il Tuo Ambiente con Antincendio
sicurezza,impianti,protezione
Proteggi il Tuo Ambiente con Antincendio
Come Trovare Ditte di Antincendio per il Collaudo degli Impianti Antincendio
consigli
Come Trovare Ditte di Antincendio per il Collaudo degli Impianti Antincendio
Prevenzione Incendi nei Motori Elettrici
impianti antincendio,sicurezza,motori elettrici
Prevenzione Incendi nei Motori Elettrici
Investi nella Sicurezza Antincendio
sicurezza,antincendio,protezione
Investi nella Sicurezza Antincendio
Trovare un Impiantista per Impianti Frigoriferi.
consigli
Trovare un Impiantista per Impianti Frigoriferi.