Meson - How to link a shared library to a project? - linker

I have 2 projects, one of which I want to compile as a shared library and other as my main executable linked the with shared library generated by the other project. Here is the structure of my project,
I have 3 meson.build files one for the HiveAPI project which will be compiled as a shared library and one for the SampleHive project which is my executable and one main meson.build file.
Here is my meson.build file for HiveAPI,
# Source files to be compiled
hive_src = [
'src/HiveAPI/Core/Application.cpp',
'src/HiveAPI/Core/Window.cpp',
'src/HiveAPI/Core/Log.cpp',
'src/HiveAPI/Input/Input.cpp',
'src/HiveAPI/GLFW/GLFWLayer.cpp',
'src/HiveAPI/ImGui/ImGuiLayer.cpp',
'src/HiveAPI/OpenGL/VertexBuffer.cpp',
'src/HiveAPI/OpenGL/IndexBuffer.cpp',
'src/HiveAPI/OpenGL/VertexArray.cpp',
'src/HiveAPI/OpenGL/Shader.cpp',
'src/HiveAPI/OpenGL/Renderer.cpp',
'src/HiveAPI/OpenGL/Texture.cpp',
'src/HiveAPI/OpenGL/Framebuffer.cpp',
'src/HiveAPI/Portaudio/Audio.cpp',
'src/HiveAPI/Taglib/Tags.cpp',
'vendor/stb_image/stb_image.cpp',
]
taglib_opts = cmake.subproject_options()
taglib_opts.add_cmake_defines({'CMAKE_POSITION_INDEPENDENT_CODE': 'ON',
'CMAKE_INSTALL_PREFIX': prefix,
'CMAKE_BUILD_TYPE': 'Release',
'BUILD_SHARED_LIBS': 'ON'})
snd_opts = cmake.subproject_options()
snd_shared = ''
if host_sys == 'windows'
snd_shared = 'OFF'
else
snd_shared = 'ON'
endif
snd_opts.add_cmake_defines({'CMAKE_POSITION_INDEPENDENT_CODE': 'ON',
'CMAKE_INSTALL_PREFIX': prefix,
'CMAKE_BUILD_TYPE': 'Release',
'BUILD_SHARED_LIBS': snd_shared,
'BUILD_PROGRAMS': 'OFF',
'BUILD_EXAMPLES': 'OFF',
'BUILD_TESTING': 'OFF',
'ENABLE_EXTERNAL_LIBS': 'ON',
'ENABLE_MPEG': 'ON'})
hive_api_inc = include_directories(['src', 'vendor'])
imgui_subproject = subproject('imgui',
default_options: [
'default_library=shared',
'compile_library=true',])
imgui = imgui_subproject.get_variable('imgui_dep')
glfw = dependency('glfw3')
glew = dependency('glew')
taglib = dependency('taglib', version: '>=1.12', required: false, static: false)
if not taglib.found()
taglib_subproject = cmake.subproject('taglib', options: taglib_opts)
taglib = taglib_subproject.dependency('tag')
endif
snd_subproject = cmake.subproject('libsndfile', options: snd_opts)
snd = snd_subproject.dependency('sndfile')
spdlog = dependency('spdlog', version: '>=1.8.5', required: false, static: false)
if not spdlog.found()
spdlog_subproject = subproject('spdlog',
default_options: [
'default_library=shared',
'compile_library=true',])
spdlog = spdlog_subproject.get_variable('spdlog_dep')
endif
portaudio = dependency('portaudio-2.0', static: false)
hive_deps = [imgui, glew, glfw, spdlog, portaudio, snd, taglib]
hive_lib = shared_library('hiveapi',
sources: hive_src,
include_directories : hive_api_inc,
install: true,
install_rpath: prefix / 'lib')
Here is the meson.build file for SampleHive,
# Source files to be compiled
samplehive_src = [
'src/SampleHive/GUI/Dockspace.cpp',
'src/SampleHive/GUI/DirectoryBrowser.cpp',
'src/SampleHive/GUI/MainWindow.cpp',
'src/SampleHive/GUI/SearchBar.cpp',
'src/SampleHive/GUI/SampleViewer.cpp',
'src/SampleHive/GUI/WaveformViewer.cpp',
'src/SampleHive/GUI/TransportControls.cpp',
'src/SampleHive/GUI/TabBar.cpp',
'src/SampleHive/GUI/Hives.cpp',
'src/SampleHive/GUI/Trash.cpp',
'src/SampleHive/GUI/Dialogs/ProgressDialog.cpp',
'src/SampleHive/GUI/Dialogs/SettingsDialog.cpp',
'src/SampleHive/Application.cpp',
'src/SampleHive/Utility/Serializer.cpp',
'src/SampleHive/Utility/Utils.cpp',
]
yaml = dependency('yaml-cpp')
samplehive_inc = include_directories(['../HiveAPI/src', 'src'])
executable('SampleHive',
sources: samplehive_src,
include_directories : samplehive_inc,
link_with: hive_lib,
dependencies: [yaml],
install: true,
install_rpath: prefix / 'lib')
And here is the main meson.build file,
project('SampleHive-Imgui',
['c', 'cpp'],
version : 'v0.1',
license : 'GPL v3',
meson_version: '>= 0.56.0',
default_options : ['warning_level=1',
'buildtype=debug',
'cpp_std=gnu++17'])
host_sys = host_machine.system()
cc = meson.get_compiler('c')
# Save project information
meson_src_root = meson.current_source_dir()
meson_build_root = meson.current_build_dir()
# Save important directories
prefix = get_option('prefix')
bindir = prefix / get_option('bindir')
libdir = prefix / get_option('libdir')
datadir = prefix / get_option('datadir')
# Import CMake
cmake = import('cmake')
subdir('HiveAPI')
subdir('SampleHive')
include_dirs = include_directories(['HiveAPI/src', 'HiveAPI/vendor', 'SampleHive/src'])
but when I try to compile it I get error saying it can't find imgui and spdlog if I add those to dependencies in the SampleHive project then I get undefined references to function defined in the HiveAPI.
I want the HiveAPI as shared library because I want this to be used by other projects as well either by me or anyone else.

If I have understood well SampleHive need to link HiveApi as shared lib, so in SampleHive you need to add the HiveApi dependency:
meson HiveApi:
project(
'HiveApi')
# Source files to be compiled
hive_src = [
'src/HiveAPI/Core/Application.cpp',
'src/HiveAPI/Core/Window.cpp',
'src/HiveAPI/Core/Log.cpp',
'src/HiveAPI/Input/Input.cpp',
'src/HiveAPI/GLFW/GLFWLayer.cpp',
'src/HiveAPI/ImGui/ImGuiLayer.cpp',
'src/HiveAPI/OpenGL/VertexBuffer.cpp',
'src/HiveAPI/OpenGL/IndexBuffer.cpp',
'src/HiveAPI/OpenGL/VertexArray.cpp',
'src/HiveAPI/OpenGL/Shader.cpp',
'src/HiveAPI/OpenGL/Renderer.cpp',
'src/HiveAPI/OpenGL/Texture.cpp',
'src/HiveAPI/OpenGL/Framebuffer.cpp',
'src/HiveAPI/Portaudio/Audio.cpp',
'src/HiveAPI/Taglib/Tags.cpp',
'vendor/stb_image/stb_image.cpp',
]
taglib_opts = cmake.subproject_options()
taglib_opts.add_cmake_defines({'CMAKE_POSITION_INDEPENDENT_CODE': 'ON',
'CMAKE_INSTALL_PREFIX': prefix,
'CMAKE_BUILD_TYPE': 'Release',
'BUILD_SHARED_LIBS': 'ON'})
snd_opts = cmake.subproject_options()
snd_shared = ''
if host_sys == 'windows'
snd_shared = 'OFF'
else
snd_shared = 'ON'
endif
snd_opts.add_cmake_defines({'CMAKE_POSITION_INDEPENDENT_CODE': 'ON',
'CMAKE_INSTALL_PREFIX': prefix,
'CMAKE_BUILD_TYPE': 'Release',
'BUILD_SHARED_LIBS': snd_shared,
'BUILD_PROGRAMS': 'OFF',
'BUILD_EXAMPLES': 'OFF',
'BUILD_TESTING': 'OFF',
'ENABLE_EXTERNAL_LIBS': 'ON',
'ENABLE_MPEG': 'ON'})
hive_api_inc = include_directories(['src', 'vendor'])
imgui_subproject = subproject('imgui',
default_options: [
'default_library=shared',
'compile_library=true',])
imgui = imgui_subproject.get_variable('imgui_dep')
glfw = dependency('glfw3')
glew = dependency('glew')
taglib = dependency('taglib', version: '>=1.12', required: false, static: false)
if not taglib.found()
taglib_subproject = cmake.subproject('taglib', options: taglib_opts)
taglib = taglib_subproject.dependency('tag')
endif
snd_subproject = cmake.subproject('libsndfile', options: snd_opts)
snd = snd_subproject.dependency('sndfile')
spdlog = dependency('spdlog', version: '>=1.8.5', required: false, static: false)
if not spdlog.found()
spdlog_subproject = subproject('spdlog',
default_options: [
'default_library=shared',
'compile_library=true',])
spdlog = spdlog_subproject.get_variable('spdlog_dep')
endif
portaudio = dependency('portaudio-2.0', static: false)
hive_deps = [imgui, glew, glfw, spdlog, portaudio, snd, taglib]
hive_lib = shared_library(meson.project_name(),
sources: hive_src,
include_directories : hive_api_inc,
install: true,
install_rpath: prefix / 'lib')
#export the include needed
public_headers = include_directories(['HiveAPI/src'])
#declare dependency
project_dep = declare_dependency(
include_directories: public_headers)
set_variable(meson.project_name() + '_dep', project_dep)
than in the SampleHive meson use the HiveApi dependency:
# Source files to be compiled
samplehive_src = [
'src/SampleHive/GUI/Dockspace.cpp',
'src/SampleHive/GUI/DirectoryBrowser.cpp',
'src/SampleHive/GUI/MainWindow.cpp',
'src/SampleHive/GUI/SearchBar.cpp',
'src/SampleHive/GUI/SampleViewer.cpp',
'src/SampleHive/GUI/WaveformViewer.cpp',
'src/SampleHive/GUI/TransportControls.cpp',
'src/SampleHive/GUI/TabBar.cpp',
'src/SampleHive/GUI/Hives.cpp',
'src/SampleHive/GUI/Trash.cpp',
'src/SampleHive/GUI/Dialogs/ProgressDialog.cpp',
'src/SampleHive/GUI/Dialogs/SettingsDialog.cpp',
'src/SampleHive/Application.cpp',
'src/SampleHive/Utility/Serializer.cpp',
'src/SampleHive/Utility/Utils.cpp',
]
yaml = dependency('yaml-cpp')
samplehive_inc = include_directories(['src'])
executable('SampleHive',
sources: samplehive_src,
include_directories : samplehive_inc,
link_with: hive_lib,
dependencies: [yaml,
dependency('HiveApi', fallback : ['Hive-Api', 'HiveApi_dep']),],
install: true,
install_rpath: prefix / 'lib')

Related

Why Django rest framework is not saving data but returns 200 ok code

I have successfully send a post request to deployed(in Heroku) Django rest API from react axios but the data is not saved in my database. I use MongoDB(Djongo) as a databse. Let me show you the code I have used.
settings.py
"""
Django settings for CyberMinds project.
Generated by 'django-admin startproject' using Django 3.2.5.
For more information on this file, see
https://docs.djangoproject.com/en/3.2/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.2/ref/settings/
"""
from pathlib import Path
import django_heroku
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"rest_framework",
"rest_framework.authtoken",
"corsheaders",
"accounts",
"threat_catalog_models",
'django_rest_passwordreset',
"threat_catalog",
# "risk_model",
"risk_model",
"business_process",
]
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"corsheaders.middleware.CorsMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
ROOT_URLCONF = "config.urls"
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [],
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
],
},
},
]
WSGI_APPLICATION = "config.wsgi.application"
# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
DATABASES = {
"default": {
"ENGINE": "djongo",
"NAME": "cyberminds",
}
}
# Password validation
# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
},
{
"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
},
{
"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
},
{
"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
},
]
# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/
LANGUAGE_CODE = "en-us"
TIME_ZONE = "UTC"
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/
STATIC_URL = "/static/"
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": [
"rest_framework.authentication.TokenAuthentication",
],
}
AUTH_USER_MODEL = "accounts.Account"
CORS_ORIGIN_ALLOW_ALL = True
ADMIN_SITE_HEADER = "CYBERMINDS Administration"
CORS_ALLOW_HEADERS = [
"accept",
"accept-encoding",
"authorization",
"content-type",
"dnt",
"origin",
"user-agent",
"x-csrftoken",
"x-requested-with",
]
# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
# 'DEFAULT_PERMISSION_CLASSES': [
# 'rest_framework.permissions.IsAuthenticated',
# ],
# 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
# 'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',),
# 'PAGE_SIZE': 10,
}
APPEND_SLASH = True
django_heroku.settings(locals())
serializers.py
class ExcelUploaderWithClient(serializers.Serializer):
file = serializers.FileField()
client = serializers.IntegerField()
business_process = serializers.IntegerField()
views.py
class UploadBusinessImpactExcelBySuperUSer(APIView, ExcelHandlingView):
permission_classes = (
IsAuthenticated,
permissions.IsCybermindAdmin,
)
def post(self, request):
self.can_model_handle_ExcelHandlingView(models.BusinessImpact)
serializer = serializers.ExcelUploaderWithClient(
data=request.data)
if serializer.is_valid():
data = serializer.validated_data
file = data.get("file")
client = data.get("client")
business_process_id = data.get("business_process")
try:
business_process = get_business_process_by_client(
client, business_process_id
)
except (
models.BusinessProcess.DoesNotExist,
accountModels.Client.DoesNotExist,
) as e:
return Response(
"business process or client does not exist",
status=status.HTTP_404_NOT_FOUND,
)
if (
file.content_type
== "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
):
# self.delete_every_recore_on_that_model(models.BusinessImpact)
self.delete_every_record_that_match_criteria(
models.BusinessImpact,
{"client": client, "business_process": business_process},
)
excel_file = pd.read_excel(file)
data = pd.DataFrame(
excel_file,
columns=self.get_excel_fields(
models.BusinessImpact.excel_titles),
)
for _, row in data.iterrows():
self.create_model_object(
models.BusinessImpact,
row,
{"client": client, "business_process": business_process.id},
)
return Response("Successfully Loaded data from excel.")
else:
return Response(
{"file": ["File type must be excel with .xlxs extension."]},
status=status.HTTP_400_BAD_REQUEST,
)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
I used React Axios for post request and here is the code
const handleUploadFile = (e) => {
let myfile = file;
let formData = new FormData();
formData.append("file", myfile);
formData.append("client", company_name);
formData.append("business_process", business);
http({
url: "https://cyberminds-backend.herokuapp.com/api/business_process/upload-business-impact-excel-by-superuser",
method: "POST",
mode: "cors",
data: formData,
headers: { "Content-Type": "multipart/form-data" },
}).then(
(response) => {
alert("File uploaded Sesscessfullyyyyy");
},
(err) => {
console.log(err);
}
);
};
Here is the request from chrome dev tools.
How can I actually save the post data into my database?
Thanks
the reason u are uploading files and not saving, is because u did not setup staticfiles in your settings. Add these in your settings underneath static url:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'staticfiles/static/')
]
and the run python manage.py collectstatics on your server

Log to file with gradle 4

Until gradle 3, I used this to write gradle's output to a logfile:
def fileLogger = [
onOutput : {
File logfile = new File( 'gradle.log' )
logfile << it
}
] as org.gradle.api.logging.StandardOutputListener
gradle.useLogger( fileLogger )
This does not work with with gradle 4.
Update for Gradle 5:
It works when using logging.addStandardOutputListener instead gradle.useLogger and adding it to all tasks:
// logger
def fileLogger = [
onOutput: {
File logfile = new File('gradle.log')
logfile << it
}
] as org.gradle.api.logging.StandardOutputListener
// for configuration phase
logging.addStandardOutputListener(fileLogger)
// for execution phase
gradle.taskGraph.whenReady { taskGraph ->
taskGraph.allTasks.each { Task t ->
t.doFirst {
logging.addStandardOutputListener(fileLogger)
}
}
}

How to override compile flags for a single package in nixos?

How can I override compile flags (as in CFLAGS) for a single package in NixOS/Nix environments?
Here's what I've got by now:
let
optimizeForThisHost = pkg:
pkgs.lib.overrideDerivation pkg (old: {
exportOptimizations = ''
export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -fPIC -O3 -march=native"
'';
phaseNames = ["exportOptimizations"] ++ old.phaseNames;
});
in
muttWithoutThings = pkgs: (pkgs.mutt.override {
sslSupport = false;
saslSupport = false;
imapSupport = false;
withSidebar = false;
};
});
mutt = pkgs:
(optimizeForThisHost (muttWithoutThings pkgs));
in my configuration.nix, though this fails with
error: attribute ‘phaseNames’ missing
Here is a working example that builds (and runs) a copy of GNU hello with custom compiler flags:
nix-shell -p 'hello.overrideDerivation (old: { NIX_CFLAGS_COMPILE = "-Ofoo"; })' --run "hello --version"
If you want to convince yourself whether this really works, try passing a non-existent flag to the compiler, like -Ofoo, and verify that the builds fails as expected.
More information about the overrideDerivation function (and similar alternatives) can found in the Nixpkgs manual at http://nixos.org/nixpkgs/manual/index.html#sec-pkg-overrideDerivation.
I managed to write a function which I can apply to the packages I want to compile with custom flags:
optimizeWithFlags = pkg: flags:
pkgs.lib.overrideDerivation pkg (old:
let
newflags = pkgs.lib.foldl' (acc: x: "${acc} ${x}") "" flags;
oldflags = if (pkgs.lib.hasAttr "NIX_CFLAGS_COMPILE" old)
then "${old.NIX_CFLAGS_COMPILE}"
else "";
in
{
NIX_CFLAGS_COMPILE = "${oldflags} ${newflags}";
});
This function takes a package and a list of strings (which are the flags) and builds a new package with the existing one, but with the additional compiler flags.
For convenience, I wrote another set of helper functions:
optimizeForThisHost = pkg:
optimizeWithFlags pkg [ "-O3" "-march=native" "-fPIC" ];
withDebuggingCompiled = pkg:
optimizeWithFlags pkg [ "-DDEBUG" ];
Now, I can override packages (here mutt and dmenu):
muttWithoutThings = pkgs: (pkgs.mutt.override {
sslSupport = false;
saslSupport = false;
imapSupport = false;
withSidebar = false;
});
mutt = pkgs:
(utils pkgs).withoutConfigureFlag "--enable-debug"
((utils pkgs).optimizeForThisHost (muttWithoutThings pkgs)
);
dmenu = pkgs:
(utils pkgs).optimizeForThisHost
(pkgs.dmenu.override {
patches = [ ./patches/dmenu-fuzzymatch-4.6.diff ];
});
In the above utils is utils = pkgs: import ./util.nix { pkgs = pkgs; }; and the util.nix file returns a function which spits out a set of functions.

"error: expected a type" error when running "pod spec lint"

I'm attempting to convert an existing project into a cocoapod so that it will be easier to use however when I run
pod spec lint --verbose
I get a number of errors similar to
- ERROR | [iOS] xcodebuild: CoreDataServices/CoreDataServices/Services/Count/CDSCountService.m:28:9: error: use of undeclared identifier 'NSFetchRequest'
I have the following as my podspec:
Pod::Spec.new do |s|
s.name = "CoreDataServices"
s.version = "0.2.0"
s.summary = "CoreDataServices contains a set of helper classes to abstract away common core data functionality."
s.homepage = "http://www.williamboles.me"
s.license = { :type => 'MIT',
:file => 'LICENSE.md' }
s.author = "William Boles"
s.platform = :ios, "8.0"
s.source = { :git => "https://github.com/wibosco/CoreDataServices.git",
:branch => "master",
:tag => s.version }
s.source_files = "CoreDataServices/**/*.{h,m}"
s.public_header_files = "CoreDataServices/**/*.{h}"
s.frameworks = 'UIKit', 'CoreData'
s.requires_arc = true
end
I have cocoapod version 0.39.0 installed.
Building the project using xcodebuild outside of cocoapods results in the project being built without errors.
I managed to get there in the end but it's an odd one:
Pod::Spec.new do |s|
s.name = "CoreDataServices"
s.version = "0.2.0"
s.summary = "CoreDataServices contains a set of helper classes to abstract away common core data functionality."
s.homepage = "http://www.williamboles.me"
s.license = { :type => 'MIT',
:file => 'LICENSE.md' }
s.author = "William Boles"
s.platform = :ios, "8.0"
s.source = { :git => "https://github.com/wibosco/CoreDataServices.git",
:branch => "master",
:tag => s.version }
s.source_files = "CoreDataServices/**/*.{h,m}"
s.public_header_files = "CoreDataServices/**/*.{h}"
s.requires_arc = true
s.frameworks = 'UIKit', 'CoreData'
end
I moved s.requires_arc = true to be above s.framework = 'UIKit', 'CoreData' and the errors went away.
I also noticed that if I inverted the ordering of the framesworks so that it becomes
s.frameworks = 'CoreData', 'UIKit'
s.requires_arc = true
that also worked

sbt multi-project war packaging

I've been trying to find the way to package a web application composed by multiple projects into a single war. The only usefull plugin I've found for sbt is xsbt-web-plugin. I'm trying to use the War plugin inside that github hosted project, but only de dependencies of the web project are included in WEB-INF/lib (not the other projects defined in the build neither their dependencies). My build file is:
import sbt._
import Keys._
import com.github.siasia._
import WarPlugin.warSettings
object BuildSettings {
import Dependencies._
val buildOrganization = "ar.edu.itba.it"
val buildVersion = "1.27"
val hibernateVersion = "3.6.7.Final"
val guiceVersion = "3.0"
val wicketVersion = "1.5.4"
val jerseyVersion = "1.12"
val buildSettings = Defaults.defaultSettings ++ Seq(
organization := buildOrganization,
version := buildVersion,
crossPaths := false,
publishArtifact in (Compile, packageDoc) := false,
publishArtifact in (Compile, packageSrc) := false,
parallelExecution in ThisBuild := false,
libraryDependencies ++= Seq(slf4j_api, slf4j_log4j12, junit, hamcrest_all, mockito_all, h2, joda_time, guava, junit_interface),
javacOptions ++= Seq("-source", "1.6", "-target", "1.6"),
testOptions += Tests.Argument(TestFrameworks.JUnit))
}
object SgaBuild extends Build {
import BuildSettings._
import Dependencies._
import com.github.siasia.WebPlugin._
val compileAndTest = "test->test;compile->compile"
lazy val root = Project(id = "sga", base = file(".")) aggregate (itba_common, itba_common_wicket, itba_common_jpa, jasperreports_fonts_extensions, sga_backend, sga_rest, sga_wicket) // settings (rootSettings: _*)
lazy val itba_common = Project(id = "itba-common", base = file("itba-common")) settings (buildSettings: _*)
lazy val itba_common_jpa = Project(id = "itba-common-jpa", base = file("itba-common- jpa")) dependsOn (itba_common % compileAndTest) settings (buildSettings: _*)
lazy val itba_common_wicket = Project(id = "itba-common-wicket", base = file("itba- common-wicket")) dependsOn (itba_common % compileAndTest, itba_common_jpa % compileAndTest) settings (buildSettings: _*)
lazy val jasperreports_fonts_extensions = Project(id = "jasperreports-fonts- extensions", base = file("jasperreports-fonts-extensions")) settings (buildSettings: _*)
lazy val sga_backend = Project(id = "sga-backend", base = file("sga- backend")) dependsOn (itba_common % compileAndTest, itba_common_jpa % compileAndTest) settings (buildSettings: _*)
lazy val sga_rest = Project(id = "sga-rest", base = file("sga-rest")) dependsOn (sga_backend % compileAndTest) settings (buildSettings: _*)
lazy val sga_wicket = Project(id = "sga-wicket", base = file("sga-wicket")) dependsOn (sga_backend % compileAndTest, sga_rest % compileAndTest, itba_common_wicket % compileAndTest) settings ((buildSettings ++ warSettings(Compile)):_*)
}
object Resolvers {
val wicketStuff = "Wicket Stuff Repository" at "http://wicketstuff.org/maven/repository"
}
object Dependencies {
import BuildSettings._
... // (plenty of ModuleIDs that are refered from 7 XXX.sbt)
}
Looking at the plugin code it seems it copy all the files from full-classpath configuration into lib directory, but when inspecting full-configuration it doesn't include all the required jars (the ones from the other 7 projects and their dependencies).
Is this the right plugin to use or there is another one?.
Thanks in advance!

Resources