buildscript { } plugins { id 'com.ullink.nuget' version '2.15' } apply plugin: 'base' def os = org.gradle.internal.os.OperatingSystem.current() def String version = file("VERSION").text.replaceAll("[\n\r]", "") File appendDebugSuffix(File binaryFile) { String name = binaryFile.getName() File parent = binaryFile.getParentFile() int extensionSeparatorIndex = name.lastIndexOf('.') if (extensionSeparatorIndex == -1) { return new File(parent, name + "d") } return new File(parent, name.substring(0, extensionSeparatorIndex) + "d" + name.substring(extensionSeparatorIndex)) } File appendStaticSuffix(File binaryFile) { def os = org.gradle.internal.os.OperatingSystem.current() if (!os.windows) { return binaryFile } String name = binaryFile.getName() File parent = binaryFile.getParentFile() int extensionSeparatorIndex = name.lastIndexOf('.') if (extensionSeparatorIndex == -1) { return new File(parent, name + "MT") } return new File(parent, name.substring(0, extensionSeparatorIndex) + "MT" + name.substring(extensionSeparatorIndex)) } File prefixByPoco(File binaryFile) { String name = binaryFile.getName() String prefix = '' if (name.startsWith('lib')) { prefix = 'lib' name = name.substring(3) } File parent = binaryFile.getParentFile() return new File(parent, prefix + "Poco" + name); } File suffixByArch(File binaryFile, Platform platform) { if (!platform.operatingSystem.windows) { return binaryFile } String name = binaryFile.getName() String suffix = '' if (platform.architecture.name == 'x86') { suffix = '' } else if (platform.architecture.name == 'x86-64') { suffix = '64' } else { throw new GradleException("Unknown architecture: " + platform.architecture.name) } int extensionSeparatorIndex = name.lastIndexOf('.') if (extensionSeparatorIndex == -1) { return new File(parent, name + suffix) } File parent = binaryFile.getParentFile() return new File(parent, name.substring(0, extensionSeparatorIndex) + suffix + name.substring(extensionSeparatorIndex)); } File toLocalBin(File binaryFile, Platform platform) { String name = binaryFile.getName() String target if (platform.architecture.name == 'x86') { target = 'bin' } else if (platform.architecture.name == 'x86-64') { target = 'bin64' } else { throw new GradleException("Unknown architecture: " + platform.architecture.name) } File parent = new File(target) return new File(parent, name); } File toBin(File sharedFile, Platform platform) { File parent = sharedFile.parentFile if (parent.canonicalPath.contains("testsuite")) return sharedFile; if (parent.canonicalPath.contains("sample")) return sharedFile; if (platform.operatingSystem.linux) { return toLib(sharedFile, platform) } String name = sharedFile.getName() String target if (platform.architecture.name == 'x86') { target = 'bin' } else if (platform.architecture.name == 'x86-64') { target = 'bin64' } else { throw new GradleException("Unknown architecture: " + platform.architecture.name) } File newParent = new File(rootDir, target) return new File(newParent, name); } File toLib(File linkFile, Platform platform) { File parent = linkFile.parentFile if (parent.canonicalPath.contains("testsuite")) return linkFile; if (parent.canonicalPath.contains("sample")) return linkFile; // On macOS, it creates a dylib file which is the shared and import library if (platform.operatingSystem.macOsX) { return toBin(linkFile, platform) } String name = linkFile.getName() String target if (platform.architecture.name == 'x86') { target = 'lib' } else if (platform.architecture.name == 'x86-64') { target = 'lib64' } else { throw new GradleException("Unknown architecture: " + platform.architecture.name) } File newParent = new File(rootDir, target ) return new File(newParent, name); } File toStatic(File staticFile, Platform platform) { String name = staticFile.getName() String target if (platform.architecture.name == 'x86') { target = 'lib' } else if (platform.architecture.name == 'x86-64') { target = 'lib64' } else { throw new GradleException("Unknown architecture: " + platform.architecture.name) } File parent = new File(rootDir, target) return new File(parent, name); } File toPDB(File binaryFile) { String name = binaryFile.getName() File parent = binaryFile.getParentFile() int extensionSeparatorIndex = name.lastIndexOf('.') return new File(parent, name.substring(0, extensionSeparatorIndex) + ".pdb") } File makePreBuildLibrary(String name, Platform platform) { File pbl if (platform.architecture.name == 'x86') { pbl = new File(WDKHome + "/Lib/" + WDKVers + "/um/x86/" + name + ".lib") } else if (platform.architecture.name == 'x86-64') { pbl = new File(WDKHome + "/Lib/" + WDKVers + "/um/x64/" + name + ".lib") } else if (platform.architecture.name == 'arm-v7') { pbl = new File(WDKHome + "/Lib/" + WDKVers + "/um/arm-v7/" + name + ".lib") } else if (platform.architecture.name == 'ia-64') { pbl = new File(WDKHome + "/Lib/" + WDKVers + "/um/ia-64/" + name + ".lib") } else { throw new GradleException("Unknown architecture: " + platform.architecture.name) } return pbl } class SliceTasksPlugin extends RuleSource { @Mutate void createBuildSliceTask(ModelMap tasks, BinaryContainer binaries, BuildTypeContainer buildTypes) { tasks.create("slice") { dependsOn binaries.withType(NativeBinarySpec).findAll { it.buildable && it.buildType == buildTypes.debug && it.targetPlatform.architecture.name == 'x86' && it instanceof SharedLibraryBinarySpec } } } } allprojects { buildDir = new File('guild') // DO NOT REMOVE OR CHANGE to 'build' since 'build' is a Poco directory file('bin').mkdirs() file('bin64').mkdirs() file('lib').mkdirs() file('lib64').mkdirs() /* clean.doFirst { file(projectDir, 'bin').delete() file(projectDir, 'bin64').delete() file(projectDir, 'lib').delete() file(projectDir, 'lib64').delete() } */ } subprojects { apply plugin: 'c' apply plugin: 'cpp' apply plugin: 'cppunit-test-suite' apply plugin: 'windows-resources' apply plugin: 'windows-messages' apply plugin: SliceTasksPlugin buildDir = new File("guild") model { buildTypes { release debug } /* toolChains { visualCpp(VisualCpp) { // Specify the installDir if Visual Studio cannot be located // installDir "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community" // installDir "C:/Program Files (x86)/Microsoft Visual Studio 14.0" } gcc(Gcc) { // Uncomment to use a GCC install that is not in the PATH // path "/usr/bin/gcc" } clang(Clang) } */ platforms { win32 { operatingSystem "windows" architecture 'x86' } win64 { operatingSystem "windows" architecture 'x64' } linux32 { operatingSystem "linux" architecture 'x86' } linux64 { operatingSystem "linux" architecture 'x64' } macos { operatingSystem "macosx" architecture 'x64' } } flavors { bundled // unbundled } repositories { libs(PrebuiltLibraries) { WS2_32 { headers.srcDir WDKHome + "/Include/" + WDKVers + "/um/x86" binaries.withType(StaticLibraryBinary) { if (targetPlatform.operatingSystem.windows) { staticLibraryFile = makePreBuildLibrary("WS2_32", targetPlatform) println "staticLibraryFile=" + staticLibraryFile } } } crypto { binaries.withType(StaticLibraryBinary) { def libName = "foobar" if (buildType == buildTypes.debug) { if (targetPlatform.name == 'win32') { headers.srcDir "$openSSLWindowsHome/include" libName = 'libcryptod.lib' staticLibraryFile = new File("$openSSLWindowsHome/win32/lib/debug/$libName") } else if (targetPlatform.name == 'win64') { headers.srcDir "$openSSLWindowsHome/include" libName = 'libcryptod.lib' staticLibraryFile = new File("$openSSLWindowsHome/win64/lib/debug/$libName") } else if (targetPlatform.operatingSystem.macOsX) { headers.srcDir "$openSSLBrewHome/include" libName = 'libcrypto.a' staticLibraryFile = new File("$openSSLBrewHome/lib/$libName") } else if (targetPlatform.operatingSystem.linux) { headers.srcDir "$openSSL64LinuxInc/include" libName = 'libcrypto.a' staticLibraryFile = new File("$openSSL64LinuxLib/$libName") } } else if (buildType == buildTypes.release) { if (targetPlatform.name == 'win32') { libName = 'libcrypto.lib' staticLibraryFile = new File("$openSSLWindowsHome/win32/lib/release/$libName") } else if (targetPlatform.name == 'win64') { libName = 'libcrypto.lib' staticLibraryFile = new File("$openSSLWindowsHome/win64/lib/release/$libName") } else if (targetPlatform.operatingSystem.macOsX) { headers.srcDir "$openSSLBrewHome/include" libName = 'libcrypto.a' staticLibraryFile = new File("$openSSLBrewHome/lib/$libName") } else if (targetPlatform.operatingSystem.linux) { headers.srcDir "$openSSL64LinuxInc/include" libName = 'libcrypto.a' staticLibraryFile = new File("$openSSL64LinuxLib/$libName") } } else { throw new GradleException("Unknown buildType" + buildType) } } binaries.withType(SharedLibraryBinary) { def dllName def linkName if (buildType == buildTypes.debug) { if (targetPlatform.name == 'win32') { dllName = 'libcryptod.dll' linkName = 'libcryptod.lib' sharedLibraryFile = new File("$openSSLWindowsHome/win32/bin/debug/$dllName") sharedLibraryLinkFile = new File("$openSSLWindowsHome/win32/bin/debug/$linkName") } else if (targetPlatform.name == 'win64') { dllName = 'libcryptod.dll' linkName = 'libcryptod.lib' sharedLibraryFile = new File("$openSSLWindowsHome/win64/bin/debug/$dllName") sharedLibraryLinkFile = new File("$openSSLWindowsHome/win64/bin/debug/$linkName") } else if (targetPlatform.operatingSystem.macOsX) { headers.srcDir "$openSSLBrewHome/include" dllName = 'libcrypto.dylib' linkName = 'libcrypto.dylib' sharedLibraryFile = new File("$openSSLBrewHome/lib/$dllName") sharedLibraryLinkFile = new File("$openSSLBrewHome/lib/$linkName") } else if (targetPlatform.operatingSystem.linux) { headers.srcDir "$openSSL64LinuxInc/include" dllName = 'libcrypto.so' linkName = 'libcrypto.a' sharedLibraryFile = new File("$openSSL64LinuxLib/$dllName") sharedLibraryLinkFile = new File("$openSSL64LinuxLib/$linkName") } } else if (buildType == buildTypes.release) { if (targetPlatform.name == 'win32') { dllName = 'libcrypto.dll' linkName = 'libcrypto.lib' sharedLibraryFile = new File("$openSSLWindowsHome/win32/bin/release/$dllName") sharedLibraryLinkFile = new File("$openSSLWindowsHome/win32/bin/release/$linkName") } else if (targetPlatform.name == 'win64') { dllName = 'libcrypto.dll' linkName = 'libcrypto.lib' sharedLibraryFile = new File("$openSSLWindowsHome/win64/bin/release/$dllName") sharedLibraryLinkFile = new File("$openSSLWindowsHome/win64/bin/release/$linkName") } else if (targetPlatform.operatingSystem.macOsX) { headers.srcDir "$openSSLBrewHome/include" dllName = 'libcrypto.dylib' linkName = 'libcrypto.dylib' sharedLibraryFile = new File("$openSSLBrewHome/lib/$dllName") sharedLibraryLinkFile = new File("$openSSLBrewHome/lib/$linkName") } else if (targetPlatform.operatingSystem.linux) { headers.srcDir "$openSSL64LinuxInc/include" dllName = 'libcrypto.so' linkName = 'libcrypto.a' sharedLibraryFile = new File("$openSSL64LinuxLib/$dllName") sharedLibraryLinkFile = new File("$openSSL64LinuxLib/$linkName") } } else { throw new GradleException("Unknown buildType" + buildType) } } } ssl { binaries.withType(StaticLibraryBinary) { def libName if (buildType == buildTypes.debug) { if (targetPlatform.name == 'win32') { headers.srcDir "$openSSLWindowsHome/include" libName = 'libssld.lib' staticLibraryFile = new File("$openSSLWindowsHome/win32/lib/debug/$libName") } else if (targetPlatform.name == 'win64') { headers.srcDir "$openSSLWindowsHome/include" libName = 'libssl.lib' staticLibraryFile = new File("$openSSLWindowsHome/win64/lib/debug/$libName") } else if (targetPlatform.operatingSystem.macOsX) { headers.srcDir "$openSSLBrewHome/include" libName = 'libssl.a' staticLibraryFile = new File("$openSSLBrewHome/lib/$libName") } else if (targetPlatform.operatingSystem.linux) { headers.srcDir "$openSSL64LinuxInc/include" libName = 'libssl.a' staticLibraryFile = new File("$openSSL64LinuxLib", "$libName") } } else if (buildType == buildTypes.release) { if (targetPlatform.name == 'win32') { libName = 'libssl.lib' staticLibraryFile = new File("$openSSLWindowsHome/win32/lib/release/$libName") } else if (targetPlatform.name == 'win64') { libName = 'libssl.lib' staticLibraryFile = new File("$openSSLWindowsHome/win64/lib/release/$libName") } else if (targetPlatform.operatingSystem.macOsX) { headers.srcDir "$openSSLBrewHome/include" libName = 'libssl.a' staticLibraryFile = new File("$openSSLBrewHome/lib/$libName") } else if (targetPlatform.operatingSystem.linux) { headers.srcDir "$openSSL64LinuxInc/include" libName = 'libssl.a' staticLibraryFile = new File("$openSSL64LinuxLib/$libName") } } else { throw new GradleException("Unknown buildType" + buildType) } } binaries.withType(SharedLibraryBinary) { def dllName def linkName if (buildType == buildTypes.debug) { if (targetPlatform.name == 'win32') { dllName = 'libssld.dll' linkName = 'libssld.lib' sharedLibraryFile = new File("$openSSLWindowsHome/win32/bin/debug/$dllName") sharedLibraryLinkFile = new File("$openSSLWindowsHome/win32/bin/debug/$linkName") } else if (targetPlatform.name == 'win64') { dllName = 'libssld.dll' linkName = 'libssld.lib' sharedLibraryFile = new File("$openSSLWindowsHome/win64/bin/debug/$dllName") sharedLibraryLinkFile = new File("$openSSLWindowsHome/win64/bin/debug/$linkName") } else if (targetPlatform.operatingSystem.macOsX) { headers.srcDir "$openSSLBrewHome/include" dllName = 'libssl.dylib' linkName = 'libssl.dylib' sharedLibraryFile = new File("$openSSLBrewHome/lib/$dllName") sharedLibraryLinkFile = new File("$openSSLBrewHome/lib/$linkName") } else if (targetPlatform.operatingSystem.linux) { def File openSSL64LinuxLibFile = new File("$openSSL64LinuxLib") headers.srcDir "$openSSL64LinuxInc/include" dllName = "libssl.so" linkName = "libssl.a" sharedLibraryFile = new File(openSSL64LinuxLibFile, dllName) sharedLibraryLinkFile = new File(openSSL64LinuxLibFile, linkName) } } else if (buildType == buildTypes.release) { if (targetPlatform.name == 'win32') { dllName = 'libssl.dll' linkName = 'libssl.lib' sharedLibraryFile = new File("$openSSLWindowsHome/win32/bin/release/$dllName") sharedLibraryLinkFile = new File("$openSSLWindowsHome/win32/bin/release/$linkName") } else if (targetPlatform.name == 'win64') { dllName = 'libssl.dll' linkName = 'libssl.lib' sharedLibraryFile = new File("$openSSLWindowsHome/win64/bin/release/$dllName") sharedLibraryLinkFile = new File("$openSSLWindowsHome/win64/bin/release/$linkName") } else if (targetPlatform.operatingSystem.macOsX) { headers.srcDir "$openSSLBrewHome/include" dllName = 'libssl.dylib' linkName = 'libssl.dylib' sharedLibraryFile = new File("$openSSLBrewHome/lib/$dllName") sharedLibraryLinkFile = new File("$openSSLBrewHome/lib/$linkName") } else if (targetPlatform.operatingSystem.linux) { headers.srcDir "$openSSL64LinuxInc/include" dllName = 'libssl.so' linkName = 'libssl.a' sharedLibraryFile = new File("$openSSL64LinuxLib/$dllName") sharedLibraryLinkFile = new File("$openSSL64LinuxLib/$linkName") } } else { throw new GradleException("Unknown buildType" + buildType) } } } } } components { withType(NativeComponentSpec) { //targetPlatform "linux32" targetPlatform "linux64" targetPlatform "macos" binaries.withType(NativeTestSuiteBinarySpec) { if (buildType == buildTypes.debug) { if (it instanceof NativeExecutableBinarySpec) { executable.file = toLocalBin(appendDebugSuffix(executable.file), targetPlatform) } } else if (buildType == buildTypes.release) { if (it instanceof NativeExecutableBinarySpec) { executable.file = toLocalBin(executable.file, targetPlatform) } } } binaries.withType(NativeBinarySpec) { if (toolChain in Clang) { cppCompiler.args "-std=c++11" } if (buildType == buildTypes.debug) { if (it instanceof SharedLibraryBinarySpec) { sharedLibraryFile = toBin(prefixByPoco(appendDebugSuffix(suffixByArch(sharedLibraryFile, targetPlatform))), targetPlatform) sharedLibraryLinkFile = toLib(prefixByPoco(appendDebugSuffix(sharedLibraryLinkFile)), targetPlatform) if (targetPlatform.operatingSystem.windows) { // WINDOWS ONLY linker.args "/implib:${sharedLibraryLinkFile}" // For MSVC only // use the following for MinGW // linker.args "-Wl,--out-implib,${sharedLibraryLinkFile}" // This next part is simply to ensure the directory is created as the compiler (tested on MSVC only) won't create it def binary = it // Simply to expose the binary in the `doFirst` tasks.withType(LinkSharedLibrary) { doFirst { binary.sharedLibraryLinkFile.parentFile.mkdirs() } } } } else if (it instanceof StaticLibraryBinarySpec) { staticLibraryFile = toStatic(prefixByPoco(appendDebugSuffix(appendStaticSuffix(staticLibraryFile))), targetPlatform) def binary = it tasks.withType(CreateStaticLibrary) { doFirst { binary.staticLibraryFile.parentFile.mkdirs() } } } else if (it instanceof NativeExecutableBinarySpec) { executable.file = toBin(appendDebugSuffix(executable.file), targetPlatform) } } else if (buildType == buildTypes.release) { if (it instanceof SharedLibraryBinarySpec) { sharedLibraryFile = toBin(prefixByPoco(suffixByArch(sharedLibraryFile, targetPlatform)), targetPlatform) sharedLibraryLinkFile = toLib(prefixByPoco(sharedLibraryLinkFile), targetPlatform) if (targetPlatform.operatingSystem.windows) { // WINDOWS ONLY linker.args "/implib:${sharedLibraryLinkFile}" // For MSVC only // use the following for MinGW // linker.args "-Wl,--out-implib,${sharedLibraryLinkFile}" // This next part is simply to ensure the directory is created as the compiler (tested on MSVC only) won't create it def binary = it // Simply to expose the binary in the `doFirst` tasks.withType(LinkSharedLibrary) { doFirst { binary.sharedLibraryLinkFile.parentFile.mkdirs() } } } } else if (it instanceof StaticLibraryBinarySpec) { staticLibraryFile = toStatic(prefixByPoco(appendStaticSuffix(staticLibraryFile)), targetPlatform) def binary = it tasks.withType(CreateStaticLibrary) { doFirst { binary.staticLibraryFile.parentFile.mkdirs() } } } else if (it instanceof NativeExecutableBinarySpec) { executable.file = toBin(executable.file, targetPlatform) } } else { throw new GradleException("Unknown buildType" + buildType) } } } } binaries { all { if (flavor != flavors.bundled) { cCompiler.define 'POCO_UNBUNDLED' cppCompiler.define 'POCO_UNBUNDLED' } if (buildType == buildTypes.debug) { cCompiler.define '_DEBUG' cppCompiler.define '_DEBUG' } else if (buildType == buildTypes.release) { cCompiler.define 'NDEBUG' cppCompiler.define 'NDEBUG' } if (toolChain in Gcc) { cppCompiler.define "_XOPEN_SOURCE=600" cppCompiler.define "_REENTRANT" cppCompiler.define "_THREAD_SAFE" cppCompiler.define "_FILE_OFFSET_BITS=64" cppCompiler.define "_LARGEFILE64_SOURCE" cppCompiler.define "POCO_HAVE_FD_EPOLL" cppCompiler.define "POCO_HAVE_ADDRINFO" cppCompiler.define "POCO_HAVE_LIBRESOLV" cppCompiler.args "-std=c++11" cppCompiler.args "-fPIC" linker.args "-lrt" linker.args "-ldl" linker.args "-lpthread" } if (toolChain in VisualCpp) { if (targetPlatform == platforms.win64) { linker.args '/MACHINE:X64' } else { linker.args '/MACHINE:X86' } if (buildType == buildTypes.debug) { cCompiler.args '/Zi' cppCompiler.args '/Zi' linker.args '/DEBUG' } cCompiler.args '/RTC1' cCompiler.args '/FS' cCompiler.args '/Zc:wchar_t' cCompiler.args '/Zc:inline' cCompiler.args '/Zc:forScope' cCompiler.args '/GR' cCompiler.args '/GF' cCompiler.args '/EHsc' cCompiler.args '/bigobj' cCompiler.define 'WIN32' cCompiler.define '_WIN32' cCompiler.define '_WINDOWS' cCompiler.define '_MBCS' cppCompiler.args '/RTC1' cppCompiler.args '/FS' cppCompiler.args '/Zc:wchar_t' cppCompiler.args '/Zc:inline' cppCompiler.args '/Zc:forScope' cppCompiler.args '/GR' cppCompiler.args '/GF' cppCompiler.args '/EHsc' cppCompiler.args '/bigobj' cppCompiler.define 'WIN32' cppCompiler.define '_WIN32' cppCompiler.define '_WINDOWS' cppCompiler.define '_MBCS' linker.args 'kernel32.lib' linker.args 'user32.lib' linker.args 'gdi32.lib' linker.args 'winspool.lib' linker.args 'comdlg32.lib' linker.args 'advapi32.lib' linker.args 'shell32.lib' linker.args 'ole32.lib' linker.args 'oleaut32.lib' linker.args 'uuid.lib' linker.args '/NXCOMPAT' linker.args '/OPT:REF' linker.args '/INCREMENTAL:NO' // linker.args '/MANIFEST' // linker.args '/MANIFESTUAC:"level='asInvoker' uiAccess='false'"' linker.args '/OPT:ICF' linker.args '/NOLOGO' linker.args '/SUBSYSTEM:CONSOLE' } } withType(SharedLibraryBinarySpec) { if (toolChain in VisualCpp) { cCompiler.define '_USRDLL' cCompiler.define '_WINDLL' cppCompiler.define '_USRDLL' cppCompiler.define '_WINDLL' if (buildType == buildTypes.debug) { cCompiler.args "/MDd" cppCompiler.args "/MDd" } else if (buildType == buildTypes.release) { cCompiler.args "/MD" cppCompiler.args "/MD" } } if (toolChain in Gcc) { if (targetPlatform == platforms.linux32) { linker.args "-Wl,-rpath,$rootDir/lib" //FIXME } else if (targetPlatform == platforms.linux64) { linker.args "-Wl,-rpath,$rootDir/lib64" //FIXME } } } withType(StaticLibraryBinarySpec) { if (toolChain in VisualCpp) { cCompiler.define '_LIB' cCompiler.define 'POCO_STATIC' cppCompiler.define '_LIB' cppCompiler.define 'POCO_STATIC' if (buildType == buildTypes.debug) { cCompiler.args "/MTd" cCompiler.args "/Fd" + toStatic(toPDB(staticLibraryFile), targetPlatform) cppCompiler.args "/MTd" cppCompiler.args "/Fd" + toStatic(toPDB(staticLibraryFile), targetPlatform) } else if (buildType == buildTypes.release) { cCompiler.args "/MT" cppCompiler.args "/MT" } else { throw new GradleException("Unknown buildType" + buildType) } } if (toolChain in Gcc) { linker.args "-Wl,-rpath,$rootDir/lib64" //FIXME } } withType(NativeExecutableBinarySpec) { if (toolChain in VisualCpp) { if (buildType == buildTypes.debug) { cCompiler.args "/MDd" cppCompiler.args "/MDd" } else if (buildType == buildTypes.release) { cCompiler.args "/MD" cppCompiler.args "/MD" } else { throw new GradleException("Unknown buildType" + buildType) } } if (toolChain in Gcc) { if (targetPlatform == platforms.linux32) { linker.args "-Wl,-rpath,$rootDir/lib" //FIXME } else if (targetPlatform == platforms.linux64) { linker.args "-Wl,-rpath,$rootDir/lib64" //FIXME } } } } } tasks.withType(RunTestExecutable) { String PATH = System.getenv("PATH") String name = getName(); if (name.contains('Win32')) { PATH = "$rootDir\\bin;$PATH" PATH = "$rootDir\\openssl\\build\\win32\\bin\\release;$PATH" PATH = "$rootDir\\openssl\\build\\win32\\bin\\debug;$PATH" PATH = "$mysql32Home".replace('/','\\') + "\\bin;$PATH" PATH = "$postgres32Home".replace('/','\\') + "\\bin;$PATH" } else if (name.contains('Win64')) { PATH = "$rootDir\\bin64;$PATH" PATH = "$rootDir\\openssl\\build\\win64\\bin\\release;$PATH" PATH = "$rootDir\\openssl\\build\\win64\\bin\\debug;$PATH" PATH = "$mysql64Home".replace('/','\\') + "\\bin;$PATH" PATH = "$postgres64Home".replace('/','\\') + "\\bin;$PATH" } environment "Path", "$PATH" String CPPUNIT_IGNORE = ""; if (name.contains('Win32') || name.contains('Win64')) { CPPUNIT_IGNORE =' class CppUnit::TestCaller.testTimeSync'; CPPUNIT_IGNORE+=' class CppUnit::TestCaller.testEchoIPv4'; CPPUNIT_IGNORE+=' class CppUnit::TestCaller.testSendToReceiveFromIPv4'; CPPUNIT_IGNORE+=' class CppUnit::TestCaller.testPing'; CPPUNIT_IGNORE+=' class CppUnit::TestCaller.testBigPing'; CPPUNIT_IGNORE+=' class CppUnit::TestCaller.testProxy'; CPPUNIT_IGNORE+=' class CppUnit::TestCaller.testProxy'; CPPUNIT_IGNORE+=' class CppUnit::TestCaller.testReuseSocket'; //FIXME Those tests below should work CPPUNIT_IGNORE+=' class CppUnit::TestCaller.testLaunch'; CPPUNIT_IGNORE+=' class CppUnit::TestCaller.testLaunchRedirectIn'; CPPUNIT_IGNORE+=' class CppUnit::TestCaller.testLaunchRedirectOut'; CPPUNIT_IGNORE+=' class CppUnit::TestCaller.testLaunchEnv'; CPPUNIT_IGNORE+=' class CppUnit::TestCaller.testLaunchArgs'; CPPUNIT_IGNORE+=' class CppUnit::TestCaller.testIsRunning'; CPPUNIT_IGNORE+=' class CppUnit::TestCaller.testIsRunningAllowsForTermination'; //FIXME won't work until SharedLibraries be properly generated CPPUNIT_IGNORE+=' class CppUnit::TestCaller.testSharedLibrary1'; CPPUNIT_IGNORE+=' class CppUnit::TestCaller.testSharedLibrary2'; CPPUNIT_IGNORE+=' class CppUnit::TestCaller.testSharedLibrary3'; CPPUNIT_IGNORE+=' class CppUnit::TestCaller.testClassLoader2'; CPPUNIT_IGNORE+=' class CppUnit::TestCaller.testClassLoader3'; } if (name.contains('Linux32') || name.contains('Linux64')) { CPPUNIT_IGNORE+=' N7CppUnit10TestCallerI8PathTestEE.testExpand'; CPPUNIT_IGNORE+=' N7CppUnit10TestCallerI13RawSocketTestEE.testEchoIPv4'; CPPUNIT_IGNORE+=' N7CppUnit10TestCallerI13RawSocketTestEE.testSendToReceiveFromIPv4'; CPPUNIT_IGNORE+=' N7CppUnit10TestCallerI14ICMPClientTestEE.testPing'; CPPUNIT_IGNORE+=' N7CppUnit10TestCallerI14ICMPClientTestEE.testBigPing'; CPPUNIT_IGNORE+=' N7CppUnit10TestCallerI22HTTPSClientSessionTestEE.testProxy'; CPPUNIT_IGNORE+=' N7CppUnit10TestCallerI22HTTPSStreamFactoryTestEE.testProxy'; CPPUNIT_IGNORE+=' N7CppUnit10TestCallerI19MulticastSocketTestEE.testMulticast'; CPPUNIT_IGNORE+=' N7CppUnit10TestCallerI13NTPClientTestEE.testTimeSync'; CPPUNIT_IGNORE+=' N7CppUnit10TestCallerI9TimerTestEE.testTimer'; //FIXME won't work until SharedLibraries be properly generated CPPUNIT_IGNORE+=' N7CppUnit10TestCallerI17SharedLibraryTestEE.testSharedLibrary1'; CPPUNIT_IGNORE+=' N7CppUnit10TestCallerI17SharedLibraryTestEE.testSharedLibrary2'; CPPUNIT_IGNORE+=' N7CppUnit10TestCallerI17SharedLibraryTestEE.testSharedLibrary3'; CPPUNIT_IGNORE+=' N7CppUnit10TestCallerI15ClassLoaderTestEE.testClassLoader2'; CPPUNIT_IGNORE+=' N7CppUnit10TestCallerI15ClassLoaderTestEE.testClassLoader3'; //FIXME Those tests below should work CPPUNIT_IGNORE+=' N7CppUnit10TestCallerI11ProcessTestEE.testLaunch'; CPPUNIT_IGNORE+=' N7CppUnit10TestCallerI11ProcessTestEE.testLaunchRedirectIn'; CPPUNIT_IGNORE+=' N7CppUnit10TestCallerI11ProcessTestEE.testLaunchRedirectOut'; CPPUNIT_IGNORE+=' N7CppUnit10TestCallerI11ProcessTestEE.testLaunchEnv'; } CPPUNIT_IGNORE+=' '; environment "CPPUNIT_IGNORE", "\"$CPPUNIT_IGNORE\"" environment "POCO_BASE", "$rootDir" args test } } tasks.withType(CppCompile) { maxParallelForks = 2 } task PocoDocIni() { def file = new File("$rootDir/PocoDoc/PocoDoc.ini") file.createNewFile() file.text = """ Includes=-I$rootDir/CppParser/include,-I$rootDir/CppUnit/include,-I$rootDir/Encodings/include,-I$rootDir/Crypto/include,-I$rootDir/Data/include,-I$rootDir/Data/include,-I$rootDir/Data/MySQL/include,-I$rootDir/Data/ODBC/include,-I$rootDir/Data/PostgreSQL/include,-I$rootDir/Data/SQLite/include, -I$rootDir/Data/SQLite/src,-I$rootDir/Foundation/include,-I$rootDir/JSON/include,-I$rootDir/MongoDB/include,-I$rootDir/Net/include,-I$rootDir/NetSSL_OpenSSL/include,-I$rootDir/NetSSL_Win/include,-I$rootDir/Redis/include,-I$rootDir/Util/include,-I$rootDir/XML/include,-I$rootDir/Zip/include,-I$rootDir/SevenZip/include,-I$rootDir/PDF/include PocoBuild=$rootDir PocoBase=$rootDir PocoDoc.output=releases/poco-${version}-all-doc PocoDoc.version=${version}-all """ if (os.windows) { def String javaVCH = VCHome.replace('\\','/') def String javaCLP = CLPath.replace('\\','/') def String javaWDK = WDKHome + "/Include/" + WDKVers javaWDK = javaWDK.replace('\\','/') file.text += """ VCH=${javaVCH} WDK=${javaWDK} CLP=${javaCLP} """ } else if (os.linux) { file.text += """ CXX=g++ CXXFLAGS=-std=c++11 """ } else if (os.macOsX) { } } task pocoDoc(type: Exec) { dependsOn ':PocoDoc::assemble' dependsOn PocoDocIni if (os.windows) { environment "Path", "$rootDir\\bin;$Path" println environment.Path executable "PocoDoc/bin/PocoDoc.exe" args "/config=$rootDir/PocoDoc/cfg/mkdoc-gradle.xml" args "/config=$rootDir/PocoDoc/PocoDoc.ini" } if (os.linux) { environment "LD_LIBRARY_PATH", "$rootDir/lib64:$LD_LIBRARY_PATH" executable "PocoDoc/bin64/PocoDoc" args "--config=$rootDir/PocoDoc/cfg/mkdoc-gradle.xml" args "--config=$rootDir/PocoDoc/PocoDoc.ini" } if (os.macOsX) { //FIXME environment "LD_LIBRARY_PATH", "$rootDir/bin:$LD_LIBRARY_PATH" executable "PocoDoc/bin64/PocoDoc" args "--config=$rootDir/PocoDoc/cfg/mkdoc-gradle.xml" args "--config=$rootDir/PocoDoc/PocoDoc.ini" } // inputs.files(tasks.getByPath(':production').outputs.files) inputs.files(executable) inputs.files(fileTree("doc").filter { it.isFile() }) inputs.files(new File("$rootDir/PocoDoc/cfg/mkdoc-gradle.xml")) outputs.files(new File("releases/poco-${version}-all-doc/index.html")) } task zipDoc(type: Zip) { from "releases/poco-${version}-all-doc/" include '*' include '*/*' archiveName "poco-${version}-all-doc.zip" destinationDir(file('releases')) inputs.files(new File("releases/$version-all-doc/index.html")) outputs.files(new File("releases/poco-${version}-all-doc.zip")) dependsOn pocoDoc } task packaging() { } // // gradle\bin\gradle Zip:testsuite:check -Ptest=-all // def cover(os, Directory, Module) { return tasks.create("cover-${Module}", Exec) { String PATH = System.getenv("PATH") PATH = "$rootDir\\bin;$PATH" PATH = "$rootDir\\openssl\\build\\win32\\bin\\release;$PATH" PATH = "$rootDir\\openssl\\build\\win32\\bin\\debug;$PATH" PATH = "$mysql32Home".replace('/','\\') + "\\lib;$PATH" PATH = "$postgres32Home".replace('/','\\') + "\\lib;$PATH" environment "Path", "$PATH" // println environment.Path environment "POCO_BASE", "$rootDir" // println "POCO_BASE=" + environment.POCO_BASE String CPPUNIT_IGNORE; CPPUNIT_IGNORE = 'class CppUnit::TestCaller.testTimeSync'; CPPUNIT_IGNORE+=', class CppUnit::TestCaller.testEchoIPv4'; CPPUNIT_IGNORE+=', class CppUnit::TestCaller.testSendToReceiveFromIPv4'; CPPUNIT_IGNORE+=', class CppUnit::TestCaller.testPing'; CPPUNIT_IGNORE+=', class CppUnit::TestCaller.testBigPing'; CPPUNIT_IGNORE+=', class CppUnit::TestCaller.testProxy'; CPPUNIT_IGNORE+=', class CppUnit::TestCaller.testProxy'; CPPUNIT_IGNORE+=', class CppUnit::TestCaller.testReuseSocket'; //FIXME Those test below should work CPPUNIT_IGNORE+=', class CppUnit::TestCaller.testLaunch'; CPPUNIT_IGNORE+=', class CppUnit::TestCaller.testLaunchRedirectIn'; CPPUNIT_IGNORE+=', class CppUnit::TestCaller.testLaunchRedirectOut'; CPPUNIT_IGNORE+=', class CppUnit::TestCaller.testLaunchEnv'; CPPUNIT_IGNORE+=', class CppUnit::TestCaller.testLaunchArgs'; CPPUNIT_IGNORE+=', class CppUnit::TestCaller.testIsRunning'; CPPUNIT_IGNORE+=', class CppUnit::TestCaller.testIsRunningAllowsForTermination'; //FIXME won't work until SharedLibraries be properly generated CPPUNIT_IGNORE+=', class CppUnit::TestCaller.testSharedLibrary1'; CPPUNIT_IGNORE+=', class CppUnit::TestCaller.testSharedLibrary2'; CPPUNIT_IGNORE+=', class CppUnit::TestCaller.testSharedLibrary3'; CPPUNIT_IGNORE+=', class CppUnit::TestCaller.testClassLoader2'; CPPUNIT_IGNORE+=', class CppUnit::TestCaller.testClassLoader3'; environment "CPPUNIT_IGNORE", "\"$CPPUNIT_IGNORE\"" // println "CPPUNIT_IGNORE=" + environment.CPPUNIT_IGNORE def Set tests = project.getTasksByName("testsuite:${Module}", true) setDependsOn(tests) workingDir "coverage/${Directory}" file(workingDir).mkdirs() executable "${OpenCppCoverageHome}/OpenCppCoverage.exe" args "-q" args "$rootDir/${Directory}/testsuite/gradle/exe/${Module}TestSuite/win32/debug/${Module}TestSuite.exe" args "--modules", "Poco*d.dll" args "--export_type", "cobertura" args "--continue_after_cpp_exception" args "--" args "-all" outputs.files(new File(workingDir,"${Module}TestSuite.xml")) onlyIf(new Spec() { boolean isSatisfiedBy(Exec task) { return os.windows; } }); } } def report(os, Directory, Module) { return tasks.create("report-${Module}", Exec) { dependsOn cover(os, Directory, Module) executable "${ReportGeneratorHome}/ReportGenerator.exe" args "-verbosity:Verbose" args "-reports:coverage/${Module}/${Module}TestSuiteCoverage.xml" args "-targetdir:coverage/${Module}" // args "-sourcedirs:XML/src;XML/include;CppUnit/src;CppUnit/include;Foundation/src;Foundation/include" File targetDir = new File("coverage/${Module}") inputs.files(new File(targetDir,"${Module}TestSuite.xml")) onlyIf(new Spec() { boolean isSatisfiedBy(Exec task) { return os.windows; } }); } } task coverage() { if (os.windows) { def Set tasksSet = project.getTasksByName('testsuite', true) println "task coverage: covered modules" println "--------------------------------------" tasksSet.each { task -> println task.project.parent.path.replace(':','/').substring(1) } println "--------------------------------------" tasksSet.each { task -> dependsOn report(os, task.project.parent.path.replace(':','/').substring(1), task.project.parent.name) } } } /* task all() { FileCollection incs = task.includes; incs.each { dir -> fileTree(dir).files.each { file -> inputs.files(file) }}; inputs.files.each { file -> println file.path } } */ /* tasks { t -> $.components.main.binaries.each { binary -> def stripTask = binary.tasks.taskName("strip") t.create(stripTask) { dependsOn binary.tasks.link doFirst { if (binary.toolChain in Gcc) { ["strip", binary.tasks.link.outputFile].execute().waitForOrKill(1000) } } } binary.tasks.build.dependsOn stripTask } } */