From 11ad235552a65691c11449db9663e90ac85b02ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20DI=20MERCURIO?= Date: Wed, 23 Jan 2019 16:26:36 +0100 Subject: [PATCH] Corrections apres essai en salle de TP --- software/monitor/monitor/MonitorUI.cs | 3 +- .../monitor/monitor/gtk-gui/MainWindow.cs | 168 +++++++++--------- software/monitor/monitor/gtk-gui/gui.stetic | 3 +- software/monitor/monitor/monitor | Bin 115712 -> 115712 bytes software/monitor/monitor/monitor.csproj | 28 +-- software/pi@10.105.0.11 | 105 +++++++++++ .../raspberry/superviseur-robot/.gitignore | 1 - software/raspberry/superviseur-robot/Makefile | 128 +++++++++++++ 8 files changed, 329 insertions(+), 107 deletions(-) create mode 100755 software/pi@10.105.0.11 create mode 100644 software/raspberry/superviseur-robot/Makefile diff --git a/software/monitor/monitor/MonitorUI.cs b/software/monitor/monitor/MonitorUI.cs index f2f43e0..2df60a2 100644 --- a/software/monitor/monitor/MonitorUI.cs +++ b/software/monitor/monitor/MonitorUI.cs @@ -46,7 +46,7 @@ public partial class MainWindow : Gtk.Window /// /// Position used for displaying position /// - private DestijlCommandManager.Position position=new DestijlCommandManager.Position(); + //private DestijlCommandManager.Position position=new DestijlCommandManager.Position(); /// /// List of availble state for the application @@ -662,6 +662,7 @@ public partial class MainWindow : Gtk.Window /// /// Sender object /// Event + /// protected void OnButtonAskArenaClicked(object sender, EventArgs e) { // Send command to server for arean rendering diff --git a/software/monitor/monitor/gtk-gui/MainWindow.cs b/software/monitor/monitor/gtk-gui/MainWindow.cs index 466b549..781a8b2 100644 --- a/software/monitor/monitor/gtk-gui/MainWindow.cs +++ b/software/monitor/monitor/gtk-gui/MainWindow.cs @@ -530,92 +530,91 @@ public partial class MainWindow this.table4.ColumnSpacing = ((uint)(6)); // Container child table4.Gtk.Table+TableChild this.buttonDown = new global::Gtk.Button(); - global::Gtk.Tooltips w40 = new Gtk.Tooltips(); - w40.SetTip(this.buttonDown, "Move robot backward", "Move robot backward"); + this.buttonDown.TooltipMarkup = "Move robot backward"; this.buttonDown.CanFocus = true; this.buttonDown.Name = "buttonDown"; this.buttonDown.UseUnderline = true; - global::Gtk.Image w41 = new global::Gtk.Image(); - w41.Pixbuf = global::Gdk.Pixbuf.LoadFromResource("monitor.ressources.pan-down-symbolic.symbolic.png"); - this.buttonDown.Image = w41; + global::Gtk.Image w40 = new global::Gtk.Image(); + w40.Pixbuf = global::Gdk.Pixbuf.LoadFromResource("monitor.ressources.pan-down-symbolic.symbolic.png"); + this.buttonDown.Image = w40; this.table4.Add(this.buttonDown); - global::Gtk.Table.TableChild w42 = ((global::Gtk.Table.TableChild)(this.table4[this.buttonDown])); - w42.TopAttach = ((uint)(2)); - w42.BottomAttach = ((uint)(3)); - w42.LeftAttach = ((uint)(1)); - w42.RightAttach = ((uint)(2)); - w42.XOptions = ((global::Gtk.AttachOptions)(4)); - w42.YOptions = ((global::Gtk.AttachOptions)(4)); + global::Gtk.Table.TableChild w41 = ((global::Gtk.Table.TableChild)(this.table4[this.buttonDown])); + w41.TopAttach = ((uint)(2)); + w41.BottomAttach = ((uint)(3)); + w41.LeftAttach = ((uint)(1)); + w41.RightAttach = ((uint)(2)); + w41.XOptions = ((global::Gtk.AttachOptions)(4)); + w41.YOptions = ((global::Gtk.AttachOptions)(4)); // Container child table4.Gtk.Table+TableChild this.buttonForward = new global::Gtk.Button(); - w40.SetTip(this.buttonForward, "Move robot forward", "Move robot forward"); + this.buttonForward.TooltipMarkup = "Move robot forward"; this.buttonForward.CanFocus = true; this.buttonForward.Name = "buttonForward"; this.buttonForward.UseUnderline = true; - global::Gtk.Image w43 = new global::Gtk.Image(); - w43.Pixbuf = global::Gdk.Pixbuf.LoadFromResource("monitor.ressources.pan-up-symbolic.symbolic.png"); - this.buttonForward.Image = w43; + global::Gtk.Image w42 = new global::Gtk.Image(); + w42.Pixbuf = global::Gdk.Pixbuf.LoadFromResource("monitor.ressources.pan-up-symbolic.symbolic.png"); + this.buttonForward.Image = w42; this.table4.Add(this.buttonForward); - global::Gtk.Table.TableChild w44 = ((global::Gtk.Table.TableChild)(this.table4[this.buttonForward])); - w44.LeftAttach = ((uint)(1)); - w44.RightAttach = ((uint)(2)); - w44.XOptions = ((global::Gtk.AttachOptions)(4)); - w44.YOptions = ((global::Gtk.AttachOptions)(4)); + global::Gtk.Table.TableChild w43 = ((global::Gtk.Table.TableChild)(this.table4[this.buttonForward])); + w43.LeftAttach = ((uint)(1)); + w43.RightAttach = ((uint)(2)); + w43.XOptions = ((global::Gtk.AttachOptions)(4)); + w43.YOptions = ((global::Gtk.AttachOptions)(4)); // Container child table4.Gtk.Table+TableChild this.buttonLeft = new global::Gtk.Button(); - w40.SetTip(this.buttonLeft, "Turn robot to the left", "Turn robot to the left"); + this.buttonLeft.TooltipMarkup = "Turn robot to the left"; this.buttonLeft.CanFocus = true; this.buttonLeft.Name = "buttonLeft"; this.buttonLeft.UseUnderline = true; - global::Gtk.Image w45 = new global::Gtk.Image(); - w45.Pixbuf = global::Gdk.Pixbuf.LoadFromResource("monitor.ressources.pan-start-symbolic.symbolic.png"); - this.buttonLeft.Image = w45; + global::Gtk.Image w44 = new global::Gtk.Image(); + w44.Pixbuf = global::Gdk.Pixbuf.LoadFromResource("monitor.ressources.pan-start-symbolic.symbolic.png"); + this.buttonLeft.Image = w44; this.table4.Add(this.buttonLeft); - global::Gtk.Table.TableChild w46 = ((global::Gtk.Table.TableChild)(this.table4[this.buttonLeft])); - w46.TopAttach = ((uint)(1)); - w46.BottomAttach = ((uint)(2)); - w46.XOptions = ((global::Gtk.AttachOptions)(4)); - w46.YOptions = ((global::Gtk.AttachOptions)(4)); + global::Gtk.Table.TableChild w45 = ((global::Gtk.Table.TableChild)(this.table4[this.buttonLeft])); + w45.TopAttach = ((uint)(1)); + w45.BottomAttach = ((uint)(2)); + w45.XOptions = ((global::Gtk.AttachOptions)(4)); + w45.YOptions = ((global::Gtk.AttachOptions)(4)); // Container child table4.Gtk.Table+TableChild this.buttonRight = new global::Gtk.Button(); - w40.SetTip(this.buttonRight, "Turn robot to the right", "Turn robot to the right"); + this.buttonRight.TooltipMarkup = "Turn robot to the right"; this.buttonRight.CanFocus = true; this.buttonRight.Name = "buttonRight"; this.buttonRight.UseUnderline = true; - global::Gtk.Image w47 = new global::Gtk.Image(); - w47.Pixbuf = global::Gdk.Pixbuf.LoadFromResource("monitor.ressources.pan-end-symbolic.symbolic.png"); - this.buttonRight.Image = w47; + global::Gtk.Image w46 = new global::Gtk.Image(); + w46.Pixbuf = global::Gdk.Pixbuf.LoadFromResource("monitor.ressources.pan-end-symbolic.symbolic.png"); + this.buttonRight.Image = w46; this.table4.Add(this.buttonRight); - global::Gtk.Table.TableChild w48 = ((global::Gtk.Table.TableChild)(this.table4[this.buttonRight])); - w48.TopAttach = ((uint)(1)); - w48.BottomAttach = ((uint)(2)); - w48.LeftAttach = ((uint)(2)); - w48.RightAttach = ((uint)(3)); - w48.XOptions = ((global::Gtk.AttachOptions)(4)); - w48.YOptions = ((global::Gtk.AttachOptions)(4)); + global::Gtk.Table.TableChild w47 = ((global::Gtk.Table.TableChild)(this.table4[this.buttonRight])); + w47.TopAttach = ((uint)(1)); + w47.BottomAttach = ((uint)(2)); + w47.LeftAttach = ((uint)(2)); + w47.RightAttach = ((uint)(3)); + w47.XOptions = ((global::Gtk.AttachOptions)(4)); + w47.YOptions = ((global::Gtk.AttachOptions)(4)); // Container child table4.Gtk.Table+TableChild this.buttonStop = new global::Gtk.Button(); - w40.SetTip(this.buttonStop, "Stop robot movements", "Stop robot movements"); + this.buttonStop.TooltipMarkup = "Stop robot movements"; this.buttonStop.CanFocus = true; this.buttonStop.Name = "buttonStop"; this.buttonStop.UseUnderline = true; - global::Gtk.Image w49 = new global::Gtk.Image(); - w49.Pixbuf = global::Gdk.Pixbuf.LoadFromResource("monitor.ressources.hand-filled-32.png"); - this.buttonStop.Image = w49; + global::Gtk.Image w48 = new global::Gtk.Image(); + w48.Pixbuf = global::Gdk.Pixbuf.LoadFromResource("monitor.ressources.hand-filled-32.png"); + this.buttonStop.Image = w48; this.table4.Add(this.buttonStop); - global::Gtk.Table.TableChild w50 = ((global::Gtk.Table.TableChild)(this.table4[this.buttonStop])); - w50.TopAttach = ((uint)(1)); - w50.BottomAttach = ((uint)(2)); - w50.LeftAttach = ((uint)(1)); - w50.RightAttach = ((uint)(2)); - w50.XOptions = ((global::Gtk.AttachOptions)(4)); - w50.YOptions = ((global::Gtk.AttachOptions)(4)); + global::Gtk.Table.TableChild w49 = ((global::Gtk.Table.TableChild)(this.table4[this.buttonStop])); + w49.TopAttach = ((uint)(1)); + w49.BottomAttach = ((uint)(2)); + w49.LeftAttach = ((uint)(1)); + w49.RightAttach = ((uint)(2)); + w49.XOptions = ((global::Gtk.AttachOptions)(4)); + w49.YOptions = ((global::Gtk.AttachOptions)(4)); this.alignment8.Add(this.table4); this.vbox9.Add(this.alignment8); - global::Gtk.Box.BoxChild w52 = ((global::Gtk.Box.BoxChild)(this.vbox9[this.alignment8])); - w52.Position = 0; - w52.Expand = false; - w52.Fill = false; + global::Gtk.Box.BoxChild w51 = ((global::Gtk.Box.BoxChild)(this.vbox9[this.alignment8])); + w51.Position = 0; + w51.Expand = false; + w51.Fill = false; // Container child vbox9.Gtk.Box+BoxChild this.table3 = new global::Gtk.Table(((uint)(1)), ((uint)(2)), false); this.table3.Name = "table3"; @@ -628,10 +627,10 @@ public partial class MainWindow this.label3.LabelProp = global::Mono.Unix.Catalog.GetString("Battery level:"); this.label3.Justify = ((global::Gtk.Justification)(1)); this.table3.Add(this.label3); - global::Gtk.Table.TableChild w53 = ((global::Gtk.Table.TableChild)(this.table3[this.label3])); - w53.YPadding = ((uint)(10)); - w53.XOptions = ((global::Gtk.AttachOptions)(4)); - w53.YOptions = ((global::Gtk.AttachOptions)(4)); + global::Gtk.Table.TableChild w52 = ((global::Gtk.Table.TableChild)(this.table3[this.label3])); + w52.YPadding = ((uint)(10)); + w52.XOptions = ((global::Gtk.AttachOptions)(4)); + w52.YOptions = ((global::Gtk.AttachOptions)(4)); // Container child table3.Gtk.Table+TableChild this.labelBatteryLevel = new global::Gtk.Label(); this.labelBatteryLevel.Name = "labelBatteryLevel"; @@ -639,49 +638,48 @@ public partial class MainWindow this.labelBatteryLevel.Xalign = 0F; this.labelBatteryLevel.LabelProp = global::Mono.Unix.Catalog.GetString("Unknown"); this.table3.Add(this.labelBatteryLevel); - global::Gtk.Table.TableChild w54 = ((global::Gtk.Table.TableChild)(this.table3[this.labelBatteryLevel])); - w54.LeftAttach = ((uint)(1)); - w54.RightAttach = ((uint)(2)); - w54.YOptions = ((global::Gtk.AttachOptions)(4)); + global::Gtk.Table.TableChild w53 = ((global::Gtk.Table.TableChild)(this.table3[this.labelBatteryLevel])); + w53.LeftAttach = ((uint)(1)); + w53.RightAttach = ((uint)(2)); + w53.YOptions = ((global::Gtk.AttachOptions)(4)); this.vbox9.Add(this.table3); - global::Gtk.Box.BoxChild w55 = ((global::Gtk.Box.BoxChild)(this.vbox9[this.table3])); - w55.Position = 2; - w55.Expand = false; - w55.Fill = false; + global::Gtk.Box.BoxChild w54 = ((global::Gtk.Box.BoxChild)(this.vbox9[this.table3])); + w54.Position = 2; + w54.Expand = false; + w54.Fill = false; // Container child vbox9.Gtk.Box+BoxChild this.checkButtonGetBattery = new global::Gtk.CheckButton(); this.checkButtonGetBattery.CanFocus = true; this.checkButtonGetBattery.Name = "checkButtonGetBattery"; this.checkButtonGetBattery.Label = global::Mono.Unix.Catalog.GetString("Get battery level"); - this.checkButtonGetBattery.Active = true; this.checkButtonGetBattery.DrawIndicator = true; this.checkButtonGetBattery.UseUnderline = true; this.vbox9.Add(this.checkButtonGetBattery); - global::Gtk.Box.BoxChild w56 = ((global::Gtk.Box.BoxChild)(this.vbox9[this.checkButtonGetBattery])); - w56.Position = 3; - w56.Expand = false; - w56.Fill = false; + global::Gtk.Box.BoxChild w55 = ((global::Gtk.Box.BoxChild)(this.vbox9[this.checkButtonGetBattery])); + w55.Position = 3; + w55.Expand = false; + w55.Fill = false; this.gtkAlignmentRobotControl.Add(this.vbox9); this.vbox12.Add(this.gtkAlignmentRobotControl); - global::Gtk.Box.BoxChild w58 = ((global::Gtk.Box.BoxChild)(this.vbox12[this.gtkAlignmentRobotControl])); - w58.Position = 1; + global::Gtk.Box.BoxChild w57 = ((global::Gtk.Box.BoxChild)(this.vbox12[this.gtkAlignmentRobotControl])); + w57.Position = 1; this.vbox5.Add(this.vbox12); - global::Gtk.Box.BoxChild w59 = ((global::Gtk.Box.BoxChild)(this.vbox5[this.vbox12])); - w59.Position = 4; + global::Gtk.Box.BoxChild w58 = ((global::Gtk.Box.BoxChild)(this.vbox5[this.vbox12])); + w58.Position = 4; this.alignment3.Add(this.vbox5); this.hbox3.Add(this.alignment3); - global::Gtk.Box.BoxChild w61 = ((global::Gtk.Box.BoxChild)(this.hbox3[this.alignment3])); + global::Gtk.Box.BoxChild w60 = ((global::Gtk.Box.BoxChild)(this.hbox3[this.alignment3])); + w60.Position = 1; + w60.Expand = false; + w60.Fill = false; + this.hbox1.Add(this.hbox3); + global::Gtk.Box.BoxChild w61 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.hbox3])); w61.Position = 1; w61.Expand = false; w61.Fill = false; - this.hbox1.Add(this.hbox3); - global::Gtk.Box.BoxChild w62 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.hbox3])); - w62.Position = 1; - w62.Expand = false; - w62.Fill = false; this.vbox1.Add(this.hbox1); - global::Gtk.Box.BoxChild w63 = ((global::Gtk.Box.BoxChild)(this.vbox1[this.hbox1])); - w63.Position = 1; + global::Gtk.Box.BoxChild w62 = ((global::Gtk.Box.BoxChild)(this.vbox1[this.hbox1])); + w62.Position = 1; this.Add(this.vbox1); if ((this.Child != null)) { diff --git a/software/monitor/monitor/gtk-gui/gui.stetic b/software/monitor/monitor/gtk-gui/gui.stetic index 25d7433..c5412f8 100644 --- a/software/monitor/monitor/gtk-gui/gui.stetic +++ b/software/monitor/monitor/gtk-gui/gui.stetic @@ -2,10 +2,11 @@ .. + 2.12 - + diff --git a/software/monitor/monitor/monitor b/software/monitor/monitor/monitor index 918885c7fbbe52d45ed69231c001d05ec66a049b..8fe262179c7e3292a8b50c55922f3c8852130ee9 100755 GIT binary patch delta 17209 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 monitor monitor - v4.6.1 + v4.5 true @@ -38,26 +38,16 @@ - - False - - - False - - - False - - - False - - - False - - - False - + + + + + + + + diff --git a/software/pi@10.105.0.11 b/software/pi@10.105.0.11 new file mode 100755 index 0000000..1ca04eb --- /dev/null +++ b/software/pi@10.105.0.11 @@ -0,0 +1,105 @@ +#!/bin/bash + +###################################### +# INSTALL OPENCV ON UBUNTU OR DEBIAN # +###################################### + +# | THIS SCRIPT IS TESTED CORRECTLY ON | +# |------------------------------------------------------| +# | OS | OpenCV | Test | Last test | +# |------------------|--------------|------|-------------| +# | Ubuntu 18.04 LTS | OpenCV 3.4.2 | OK | 18 Jul 2018 | +# | Debian 9.5 | OpenCV 3.4.2 | OK | 18 Jul 2018 | +# |----------------------------------------------------- | +# | Debian 9.0 | OpenCV 3.2.0 | OK | 25 Jun 2017 | +# | Debian 8.8 | OpenCV 3.2.0 | OK | 20 May 2017 | +# | Ubuntu 16.04 LTS | OpenCV 3.2.0 | OK | 20 May 2017 | + + +# VERSION TO BE INSTALLED + +OPENCV_VERSION='3.4.2' + +mkdir opencv +cd opencv +# 1. KEEP UBUNTU OR DEBIAN UP TO DATE + +sudo apt-get -y update +# sudo apt-get -y upgrade # Uncomment this line to install the newest versions of all packages currently installed +# sudo apt-get -y dist-upgrade # Uncomment this line to, in addition to 'upgrade', handles changing dependencies with new versions of packages +# sudo apt-get -y autoremove # Uncomment this line to remove packages that are now no longer needed + + +# 2. INSTALL THE DEPENDENCIES + +# Build tools: +sudo apt-get install -y build-essential cmake + +# GUI (if you want to use GTK instead of Qt, replace 'qt5-default' with 'libgtkglext1-dev' and remove '-DWITH_QT=ON' option in CMake): +#sudo apt-get install -y qt5-default libvtk6-dev +sudo apt-get install -y libgtkglext1-dev + +# Media I/O: +sudo apt-get install -y zlib1g-dev libjpeg-dev libwebp-dev libpng-dev libtiff5-dev libjasper-dev libopenexr-dev libgdal-dev + +# Video I/O: +sudo apt-get install -y libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev yasm libopencore-amrnb-dev libopencore-amrwb-dev libv4l-dev libxine2-dev + +# Parallelism and linear algebra libraries: +sudo apt-get install -y libtbb-dev libeigen3-dev + +# Python: +sudo apt-get install -y python-dev python-tk python-numpy python3-dev python3-tk python3-numpy + +# Java: +sudo apt-get install -y ant default-jdk + +# Documentation: +sudo apt-get install -y doxygen + + +# 3. INSTALL THE LIBRARY + +sudo apt-get install -y unzip wget +wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip + +unzip ${OPENCV_VERSION}.zip +rm ${OPENCV_VERSION}.zip +mv opencv-${OPENCV_VERSION} OpenCV + +# 3.5 Add Aruco +# Get opencv_contrib from github +# Copy aruco directory from /modules to /modules +wget https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip +mv ${OPENCV_VERSION}.zip opencv_contrib-${OPENCV_VERSION}.zip +unzip opencv_contrib-${OPENCV_VERSION}.zip + +cd OpenCV +mkdir build +cd build +# cmake -DWITH_QT=ON -DWITH_OPENGL=ON -DFORCE_VTK=ON -DWITH_TBB=ON -DWITH_GDAL=ON -DWITH_XINE=ON -DBUILD_EXAMPLES=ON -DENABLE_PRECOMPILED_HEADERS=OFF .. +cmake -DWITH_OPENGL=ON -DFORCE_VTK=ON -DWITH_TBB=ON -DWITH_GDAL=ON -DWITH_XINE=ON -DBUILD_EXAMPLES=ON -DENABLE_PRECOMPILED_HEADERS=ON -D INSTALL_C_EXAMPLES=ON -D BUILD_JAVA=OFF -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${OPENCV_VERSION}/modules -DBUILD_aruco=ON .. +make -j5 +sudo make install +sudo ldconfig + +# 4. Compile raspicam +cd ~ +cd opencv + +wget https://sourceforge.net/projects/raspicam/files/latest/raspicam.zip +unzip raspicam.zip +cd raspicam-0.1.6 + +mkdir build +cd build +cmake .. + +make -j5 +sudo make install +sudo ldconfig + + +# 4. EXECUTE SOME OPENCV EXAMPLES AND COMPILE A DEMONSTRATION + +# To complete this step, please visit 'http://milq.github.io/install-opencv-ubuntu-debian'. diff --git a/software/raspberry/superviseur-robot/.gitignore b/software/raspberry/superviseur-robot/.gitignore index 9ae7fc1..7006211 100644 --- a/software/raspberry/superviseur-robot/.gitignore +++ b/software/raspberry/superviseur-robot/.gitignore @@ -4,7 +4,6 @@ cmake-build-debug/ futur/ CMakeFiles/ -Makefile *.cmake CMakeCache.txt diff --git a/software/raspberry/superviseur-robot/Makefile b/software/raspberry/superviseur-robot/Makefile new file mode 100644 index 0000000..05de621 --- /dev/null +++ b/software/raspberry/superviseur-robot/Makefile @@ -0,0 +1,128 @@ +# +# There exist several targets which are by default empty and which can be +# used for execution of your targets. These targets are usually executed +# before and after some main targets. They are: +# +# .build-pre: called before 'build' target +# .build-post: called after 'build' target +# .clean-pre: called before 'clean' target +# .clean-post: called after 'clean' target +# .clobber-pre: called before 'clobber' target +# .clobber-post: called after 'clobber' target +# .all-pre: called before 'all' target +# .all-post: called after 'all' target +# .help-pre: called before 'help' target +# .help-post: called after 'help' target +# +# Targets beginning with '.' are not intended to be called on their own. +# +# Main targets can be executed directly, and they are: +# +# build build a specific configuration +# clean remove built files from a configuration +# clobber remove all built files +# all build all configurations +# help print help mesage +# +# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and +# .help-impl are implemented in nbproject/makefile-impl.mk. +# +# Available make variables: +# +# CND_BASEDIR base directory for relative paths +# CND_DISTDIR default top distribution directory (build artifacts) +# CND_BUILDDIR default top build directory (object files, ...) +# CONF name of current configuration +# CND_PLATFORM_${CONF} platform name (current configuration) +# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration) +# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration) +# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration) +# CND_PACKAGE_DIR_${CONF} directory of package (current configuration) +# CND_PACKAGE_NAME_${CONF} name of package (current configuration) +# CND_PACKAGE_PATH_${CONF} path to package (current configuration) +# +# NOCDDL + + +# Environment +MKDIR=mkdir +CP=cp +CCADMIN=CCadmin + + +# build +build: .build-post + +.build-pre: +# Add your pre 'build' code here... + +.build-post: .build-impl +# Add your post 'build' code here... + + +# clean +clean: .clean-post + +.clean-pre: +# Add your pre 'clean' code here... + +.clean-post: .clean-impl +# Add your post 'clean' code here... + + +# clobber +clobber: .clobber-post + +.clobber-pre: +# Add your pre 'clobber' code here... + +.clobber-post: .clobber-impl +# Add your post 'clobber' code here... + + +# all +all: .all-post + +.all-pre: +# Add your pre 'all' code here... + +.all-post: .all-impl +# Add your post 'all' code here... + + +# build tests +build-tests: .build-tests-post + +.build-tests-pre: +# Add your pre 'build-tests' code here... + +.build-tests-post: .build-tests-impl +# Add your post 'build-tests' code here... + + +# run tests +test: .test-post + +.test-pre: build-tests +# Add your pre 'test' code here... + +.test-post: .test-impl +# Add your post 'test' code here... + + +# help +help: .help-post + +.help-pre: +# Add your pre 'help' code here... + +.help-post: .help-impl +# Add your post 'help' code here... + + + +# include project implementation makefile +include nbproject/Makefile-impl.mk + +# include project make variables +include nbproject/Makefile-variables.mk