am-project: Merge root and top group node
[anjuta.git] / plugins / am-project / am-properties.c
blobf49302e8108cb368bf9deeffa61708ed834d8367
1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4; coding: utf-8 -*- */
2 /* am-properties.c
4 * Copyright (C) 2010 Sébastien Granjoux
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 2 of the
9 * License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
16 * You should have received a copy of the GNU General Public
17 * License along with this program; if not, write to the
18 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
23 #ifdef HAVE_CONFIG_H
24 #include <config.h>
25 #endif
27 #include "am-properties.h"
29 #include "am-project-private.h"
31 #include "ac-scanner.h"
32 #include "am-scanner.h"
33 #include "ac-writer.h"
35 #include <glib/gi18n.h>
37 #include <ctype.h>
39 /* Types
40 *---------------------------------------------------------------------------*/
42 /* Constants
43 *---------------------------------------------------------------------------*/
45 static AmpProperty AmpProjectProperties[] =
48 {"NAME",
49 N_("Name:"),
50 ANJUTA_PROJECT_PROPERTY_STRING,
51 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
52 N_("Project name, it can contain spaces by example 'GNU Autoconf'")},
53 AC_TOKEN_AC_INIT, 0, NULL,
54 AM_PROPERTY_IN_CONFIGURE
57 {"VERSION",
58 N_("Version:"),
59 ANJUTA_PROJECT_PROPERTY_STRING,
60 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
61 N_("Project version, typically a few numbers separated by dot by example '1.0.0'")},
62 AC_TOKEN_AC_INIT, 1, NULL,
63 AM_PROPERTY_IN_CONFIGURE
66 {"BUGREPORT",
67 N_("Bug report URL:"),
68 ANJUTA_PROJECT_PROPERTY_STRING,
69 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
70 N_("An email address or a link to a web page where the user can report bug. It is optional.")},
71 AC_TOKEN_AC_INIT, 2, NULL,
72 AM_PROPERTY_IN_CONFIGURE
75 {"PACKAGE",
76 N_("Package name:"),
77 ANJUTA_PROJECT_PROPERTY_STRING,
78 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
79 N_("Package name, it can contains only alphanumerics and underscore characters."
80 "It is generated from the project name if not provided.")},
81 AC_TOKEN_AC_INIT, 3, NULL,
82 AM_PROPERTY_IN_CONFIGURE
85 {"URL",
86 N_("URL:"),
87 ANJUTA_PROJECT_PROPERTY_STRING,
88 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
89 N_("An link to the project web page if provided.")},
90 AC_TOKEN_AC_INIT, 4, NULL,
91 AM_PROPERTY_IN_CONFIGURE
94 {"LDFLAGS",
95 N_("Linker flags:"),
96 ANJUTA_PROJECT_PROPERTY_LIST,
97 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
98 N_("Common additional linker flags for all targets in this group.")},
99 AM_TOKEN__LDFLAGS, 0, "AM_LDFLAGS",
100 AM_PROPERTY_IN_MAKEFILE
103 {"CPPFLAGS",
104 N_("C preprocessor flags:"),
105 ANJUTA_PROJECT_PROPERTY_LIST,
106 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
107 N_("Common additional C preprocessor flags for all targets in this group.")},
108 AM_TOKEN__CPPFLAGS, 0, "AM_CPPFLAGS",
109 AM_PROPERTY_IN_MAKEFILE
112 {"CFLAGS",
113 N_("C compiler flags:"),
114 ANJUTA_PROJECT_PROPERTY_LIST,
115 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
116 N_("Common additional C compiler flags for all targets in this group.")},
117 AM_TOKEN__CFLAGS, 0, "AM_CFLAGS",
118 AM_PROPERTY_IN_MAKEFILE
121 {"CXXFLAGS",
122 N_("C++ compiler flags:"),
123 ANJUTA_PROJECT_PROPERTY_LIST,
124 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
125 N_("Common additional C++ compiler flags for all targets in this group.")},
126 AM_TOKEN__CXXFLAGS, 0, "AM_CXXFLAGS",
127 AM_PROPERTY_IN_MAKEFILE
130 {"JAVAFLAGS",
131 N_("Java compiler flags:"),
132 ANJUTA_PROJECT_PROPERTY_LIST,
133 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
134 N_("Common additional Java compiler flags for all targets in this group.")},
135 AM_TOKEN__JAVACFLAGS, 0, "AM_JAVAFLAGS",
136 AM_PROPERTY_IN_MAKEFILE
139 {"VALAFLAGS",
140 N_("Vala compiler flags:"),
141 ANJUTA_PROJECT_PROPERTY_LIST,
142 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
143 N_("Common additional Vala compiler flags for all targets in this group.")},
144 AM_TOKEN__VALAFLAGS, 0, "AM_VALAFLAGS",
145 AM_PROPERTY_IN_MAKEFILE
148 {"FCFLAGS",
149 N_("Fortran compiler flags:"),
150 ANJUTA_PROJECT_PROPERTY_LIST,
151 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
152 N_("Common additional Fortran compiler flags for all targets in this group.")},
153 AM_TOKEN__FCFLAGS, 0, "AM_FCFLAGS",
154 AM_PROPERTY_IN_MAKEFILE
157 {"OBJCFLAGS",
158 N_("Objective C compiler flags:"),
159 ANJUTA_PROJECT_PROPERTY_LIST,
160 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
161 N_("Common additional Objective C compiler flags for all targets in this group.")},
162 AM_TOKEN__OBJCFLAGS, 0, "AM_OBJCFLAGS",
163 AM_PROPERTY_IN_MAKEFILE
166 {"LFLAGS",
167 N_("Lex/Flex flags:"),
168 ANJUTA_PROJECT_PROPERTY_LIST,
169 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
170 N_("Common additional Lex or Flex lexical analyser generator flags for all targets in this group.")},
171 AM_TOKEN__LFLAGS, 0, "AM_LFLAGS",
172 AM_PROPERTY_IN_MAKEFILE
175 {"YFLAGS",
176 N_("Yacc/Bison flags:"),
177 ANJUTA_PROJECT_PROPERTY_LIST,
178 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
179 N_("Common additional Yacc or Bison parser generator flags for all targets in this group.")},
180 AM_TOKEN__YFLAGS, 0, "AM_YFLAGS",
181 AM_PROPERTY_IN_MAKEFILE
184 {"INSTALLDIRS",
185 N_("Installation directories:"),
186 ANJUTA_PROJECT_PROPERTY_MAP,
187 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
188 N_("List of custom installation directories used by targets in this group.")},
189 AM_TOKEN_DIR, 0, NULL,
190 AM_PROPERTY_IN_MAKEFILE
195 static GList* AmpProjectPropertyList = NULL;
198 static AmpProperty AmpGroupNodeProperties[] =
201 {"LDFLAGS",
202 N_("Linker flags:"),
203 ANJUTA_PROJECT_PROPERTY_LIST,
204 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
205 N_("Common additional linker flags for all targets in this group.")},
206 AM_TOKEN__LDFLAGS, 0, "AM_LDFLAGS",
207 AM_PROPERTY_IN_MAKEFILE
210 {"CPPFLAGS",
211 N_("C preprocessor flags:"),
212 ANJUTA_PROJECT_PROPERTY_LIST,
213 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
214 N_("Common additional C preprocessor flags for all targets in this group.")},
215 AM_TOKEN__CPPFLAGS, 0, "AM_CPPFLAGS",
216 AM_PROPERTY_IN_MAKEFILE
219 {"CFLAGS",
220 N_("C compiler flags:"),
221 ANJUTA_PROJECT_PROPERTY_LIST,
222 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
223 N_("Common additional C compiler flags for all targets in this group.")},
224 AM_TOKEN__CFLAGS, 0, "AM_CFLAGS",
225 AM_PROPERTY_IN_MAKEFILE
228 {"CXXFLAGS",
229 N_("C++ compiler flags:"),
230 ANJUTA_PROJECT_PROPERTY_LIST,
231 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
232 N_("Common additional C++ compiler flags for all targets in this group.")},
233 AM_TOKEN__CXXFLAGS, 0, "AM_CXXFLAGS",
234 AM_PROPERTY_IN_MAKEFILE
237 {"JAVAFLAGS",
238 N_("Java compiler flags:"),
239 ANJUTA_PROJECT_PROPERTY_LIST,
240 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
241 N_("Common additional Java compiler flags for all targets in this group.")},
242 AM_TOKEN__JAVACFLAGS, 0, "AM_JAVAFLAGS",
243 AM_PROPERTY_IN_MAKEFILE
246 {"VALAFLAGS",
247 N_("Vala compiler flags:"),
248 ANJUTA_PROJECT_PROPERTY_LIST,
249 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
250 N_("Common additional Vala compiler flags for all targets in this group.")},
251 AM_TOKEN__VALAFLAGS, 0, "AM_VALAFLAGS",
252 AM_PROPERTY_IN_MAKEFILE
255 {"FCFLAGS",
256 N_("Fortran compiler flags:"),
257 ANJUTA_PROJECT_PROPERTY_LIST,
258 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
259 N_("Common additional Fortran compiler flags for all targets in this group.")},
260 AM_TOKEN__FCFLAGS, 0, "AM_FCFLAGS",
261 AM_PROPERTY_IN_MAKEFILE
264 {"OBJCFLAGS",
265 N_("Objective C compiler flags:"),
266 ANJUTA_PROJECT_PROPERTY_LIST,
267 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
268 N_("Common additional Objective C compiler flags for all targets in this group.")},
269 AM_TOKEN__OBJCFLAGS, 0, "AM_OBJCFLAGS",
270 AM_PROPERTY_IN_MAKEFILE
273 {"LFLAGS",
274 N_("Lex/Flex flags:"),
275 ANJUTA_PROJECT_PROPERTY_LIST,
276 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
277 N_("Common additional Lex or Flex lexical analyser generator flags for all targets in this group.")},
278 AM_TOKEN__LFLAGS, 0, "AM_LFLAGS",
279 AM_PROPERTY_IN_MAKEFILE
282 {"YFLAGS",
283 N_("Yacc/Bison flags:"),
284 ANJUTA_PROJECT_PROPERTY_LIST,
285 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
286 N_("Common additional Yacc or Bison parser generator flags for all targets in this group.")},
287 AM_TOKEN__YFLAGS, 0, "AM_YFLAGS",
288 AM_PROPERTY_IN_MAKEFILE
291 {"INSTALLDIRS",
292 N_("Installation directories:"),
293 ANJUTA_PROJECT_PROPERTY_MAP,
294 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
295 N_("List of custom installation directories used by targets in this group.")},
296 AM_TOKEN_DIR, 0, NULL,
297 AM_PROPERTY_IN_MAKEFILE
302 static GList* AmpGroupNodePropertyList = NULL;
305 static AmpProperty AmpTargetNodeProperties[] = {
307 {"NOINST",
308 N_("Do not install:"),
309 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
310 ANJUTA_PROJECT_PROPERTY_READ_ONLY,
311 N_("Build but do not install the target."),
312 "0"},
313 AM_TOKEN__PROGRAMS, 3, NULL,
314 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_DISABLE_FOLLOWING
317 {"INSTALLDIR",
318 N_("Installation directory:"),
319 ANJUTA_PROJECT_PROPERTY_STRING,
320 ANJUTA_PROJECT_PROPERTY_READ_ONLY,
321 N_("It has to be a standard directory or a custom one defined in group properties.")},
322 AM_TOKEN__PROGRAMS, 6, "bin",
323 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_DIRECTORY
326 {"LDFLAGS",
327 N_("Linker flags:"),
328 ANJUTA_PROJECT_PROPERTY_LIST,
329 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
330 N_("Additional linker flags for this target.")},
331 AM_TOKEN_TARGET_LDFLAGS, 0, "_LDFLAGS",
332 AM_PROPERTY_IN_MAKEFILE
335 {"LIBADD",
336 N_("Additional libraries:"),
337 ANJUTA_PROJECT_PROPERTY_LIST,
338 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
339 N_("Additional libraries for this target.")},
340 AM_TOKEN_TARGET_LIBADD, 0, "_LIBADD",
341 AM_PROPERTY_IN_MAKEFILE
344 {"LDADD",
345 N_("Additional objects:"),
346 ANJUTA_PROJECT_PROPERTY_LIST,
347 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
348 N_("Additional object files for this target.")},
349 AM_TOKEN_TARGET_LDADD, 0, "_LDADD",
350 AM_PROPERTY_IN_MAKEFILE
353 {"CPPFLAGS",
354 N_("C preprocessor flags:"),
355 ANJUTA_PROJECT_PROPERTY_LIST,
356 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
357 N_("Additional C preprocessor flags for this target.")},
358 AM_TOKEN_TARGET_CPPFLAGS, 0, "_CPPFLAGS",
359 AM_PROPERTY_IN_MAKEFILE
362 {"CFLAGS",
363 N_("C compiler flags:"),
364 ANJUTA_PROJECT_PROPERTY_LIST,
365 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
366 N_("Additional C compiler flags for this target.")},
367 AM_TOKEN_TARGET_CFLAGS, 0, "_CFLAGS",
368 AM_PROPERTY_IN_MAKEFILE
371 {"CXXFLAGS",
372 N_("C++ compiler flags:"),
373 ANJUTA_PROJECT_PROPERTY_LIST,
374 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
375 N_("Additional C++ compiler flags for this target.")},
376 AM_TOKEN_TARGET_CXXFLAGS, 0, "_CXXFLAGS",
377 AM_PROPERTY_IN_MAKEFILE
380 {"JAVAFLAGS",
381 N_("Java compiler flags:"),
382 ANJUTA_PROJECT_PROPERTY_LIST,
383 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
384 N_("Additional Java compiler flags for this target.")},
385 AM_TOKEN_TARGET_JAVACFLAGS, 0, "_JAVACFLAGS",
386 AM_PROPERTY_IN_MAKEFILE
389 {"VALAFLAGS",
390 N_("Vala compiler flags:"),
391 ANJUTA_PROJECT_PROPERTY_LIST,
392 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
393 N_("Additional Vala compiler flags for this target.")},
394 AM_TOKEN_TARGET_VALAFLAGS,0, "_VALAFLAGS",
395 AM_PROPERTY_IN_MAKEFILE
398 {"FCFLAGS",
399 N_("Fortran compiler flags:"),
400 ANJUTA_PROJECT_PROPERTY_LIST,
401 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
402 N_("Additional Fortran compiler flags for this target.")},
403 AM_TOKEN_TARGET_FCFLAGS, 0, "_FCFLAGS",
404 AM_PROPERTY_IN_MAKEFILE
407 {"OBJCFLAGS",
408 N_("Objective C compiler flags:"),
409 ANJUTA_PROJECT_PROPERTY_LIST,
410 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
411 N_("Additional Objective C compiler flags for this target.")},
412 AM_TOKEN_TARGET_OBJCFLAGS, 0, "_OBJCFLAGS",
413 AM_PROPERTY_IN_MAKEFILE
416 {"LFLAGS",
417 N_("Lex/Flex flags:"),
418 ANJUTA_PROJECT_PROPERTY_LIST,
419 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
420 N_("Additional Lex or Flex lexical analyser generator flags for this target.")},
421 AM_TOKEN_TARGET_LFLAGS, 0, "_LFLAGS",
422 AM_PROPERTY_IN_MAKEFILE
425 {"YFLAGS",
426 N_("Yacc/Bison flags:"),
427 ANJUTA_PROJECT_PROPERTY_LIST,
428 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
429 N_("Additional Yacc or Bison parser generator flags for this target.")},
430 AM_TOKEN_TARGET_YFLAGS, 0, "_YFLAGS",
431 AM_PROPERTY_IN_MAKEFILE
434 {"EXTRA_DIST",
435 N_("Additional dependencies:"),
436 ANJUTA_PROJECT_PROPERTY_LIST,
437 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
438 N_("Additional dependencies for this target.")},
439 AM_TOKEN_TARGET_DEPENDENCIES, 0, "EXTRA_DIST",
440 AM_PROPERTY_IN_MAKEFILE
443 {"DIST",
444 N_("Include in distribution:"),
445 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
446 ANJUTA_PROJECT_PROPERTY_READ_ONLY,
447 N_("Include this target in the distributed package."),
448 "0"},
449 AM_TOKEN__PROGRAMS, 2, NULL,
450 AM_PROPERTY_IN_MAKEFILE
453 {"CHECKONLY",
454 N_("Build for check only:"),
455 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
456 ANJUTA_PROJECT_PROPERTY_READ_ONLY,
457 N_("Build this target only when running automatic tests."),
458 "0"},
459 AM_TOKEN__PROGRAMS, 4, NULL,
460 AM_PROPERTY_IN_MAKEFILE
463 {"NOTRANS",
464 N_("Do not use prefix:"),
465 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
466 ANJUTA_PROJECT_PROPERTY_READ_ONLY,
467 N_("Do not rename the target with an optional prefix, used to avoid overwritting system program. "),
468 "0"},
469 AM_TOKEN__PROGRAMS, 1, NULL,
470 AM_PROPERTY_IN_MAKEFILE
473 {"NOBASE",
474 N_("Keep target path:"),
475 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
476 ANJUTA_PROJECT_PROPERTY_READ_ONLY,
477 N_("Keep relative target path for installing it. "
478 "By example if you have a program subdir/app installed in bin directory it will be installed in bin/subdir/app not in bin/app."),
479 "0"},
480 AM_TOKEN__PROGRAMS, 0, NULL,
481 AM_PROPERTY_IN_MAKEFILE
486 static GList* AmpTargetNodePropertyList = NULL;
489 static AmpProperty AmpProgramTargetProperties[] = {
491 {"NOINST",
492 N_("Do not install:"),
493 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
494 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
495 N_("Build but do not install the target."),
496 "0"},
497 AM_TOKEN__PROGRAMS, 3, "noinst_",
498 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_DISABLE_FOLLOWING
501 {"INSTALLDIR",
502 N_("Installation directory:"),
503 ANJUTA_PROJECT_PROPERTY_STRING,
504 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
505 N_("It has to be a standard directory or a custom one defined in group properties.")},
506 AM_TOKEN__PROGRAMS, 6, "bin",
507 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_DIRECTORY
510 {"LDFLAGS",
511 N_("Linker flags:"),
512 ANJUTA_PROJECT_PROPERTY_LIST,
513 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
514 N_("Additional linker flags for this target.")},
515 AM_TOKEN_TARGET_LDFLAGS, 0, "_LDFLAGS",
516 AM_PROPERTY_IN_MAKEFILE
519 {"LDADD",
520 N_("Libraries:"),
521 ANJUTA_PROJECT_PROPERTY_LIST,
522 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
523 N_("Additional libraries for this target.")},
524 AM_TOKEN_TARGET_LDADD, 0, "_LDADD",
525 AM_PROPERTY_IN_MAKEFILE
528 {"CPPFLAGS",
529 N_("C preprocessor flags:"),
530 ANJUTA_PROJECT_PROPERTY_LIST,
531 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
532 N_("Additional C preprocessor flags for this target.")},
533 AM_TOKEN_TARGET_CPPFLAGS, 0, "_CPPFLAGS",
534 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_COMPILATION_FLAG
537 {"CFLAGS",
538 N_("C compiler flags:"),
539 ANJUTA_PROJECT_PROPERTY_LIST,
540 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
541 N_("Additional C compiler flags for this target.")},
542 AM_TOKEN_TARGET_CFLAGS, 0, "_CFLAGS",
543 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_COMPILATION_FLAG
546 {"CXXFLAGS",
547 N_("C++ compiler flags:"),
548 ANJUTA_PROJECT_PROPERTY_LIST,
549 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
550 N_("Additional C++ compiler flags for this target.")},
551 AM_TOKEN_TARGET_CXXFLAGS, 0, "_CXXFLAGS",
552 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_COMPILATION_FLAG
555 {"JAVAFLAGS",
556 N_("Java compiler flags:"),
557 ANJUTA_PROJECT_PROPERTY_LIST,
558 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
559 N_("Additional Java compiler flags for this target.")},
560 AM_TOKEN_TARGET_JAVACFLAGS, 0, "_JAVACFLAGS",
561 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_COMPILATION_FLAG
564 {"VALAFLAGS",
565 N_("Vala compiler flags:"),
566 ANJUTA_PROJECT_PROPERTY_LIST,
567 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
568 N_("Additional Vala compiler flags for this target.")},
569 AM_TOKEN_TARGET_VALAFLAGS,0, "_VALAFLAGS",
570 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_COMPILATION_FLAG
573 {"FCFLAGS",
574 N_("Fortran compiler flags:"),
575 ANJUTA_PROJECT_PROPERTY_LIST,
576 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
577 N_("Additional Fortran compiler flags for this target.")},
578 AM_TOKEN_TARGET_FCFLAGS, 0, "_FCFLAGS",
579 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_COMPILATION_FLAG
582 {"OBJCFLAGS",
583 N_("Objective C compiler flags:"),
584 ANJUTA_PROJECT_PROPERTY_LIST,
585 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
586 N_("Additional Objective C compiler flags for this target.")},
587 AM_TOKEN_TARGET_OBJCFLAGS, 0, "_OBJCFLAGS",
588 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_COMPILATION_FLAG
591 {"LFLAGS",
592 N_("Lex/Flex flags:"),
593 ANJUTA_PROJECT_PROPERTY_LIST,
594 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
595 N_("Additional Lex or Flex lexical analyser generator flags for this target.")},
596 AM_TOKEN_TARGET_LFLAGS, 0, "_LFLAGS",
597 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_COMPILATION_FLAG
600 {"YFLAGS",
601 N_("Yacc/Bison flags:"),
602 ANJUTA_PROJECT_PROPERTY_LIST,
603 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
604 N_("Additional Yacc or Bison parser generator flags for this target.")},
605 AM_TOKEN_TARGET_YFLAGS, 0, "_YFLAGS",
606 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_COMPILATION_FLAG
609 {"EXTRA_DIST",
610 N_("Additional dependencies:"),
611 ANJUTA_PROJECT_PROPERTY_LIST,
612 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
613 N_("Additional dependencies for this target.")},
614 AM_TOKEN_TARGET_DEPENDENCIES, 0, "EXTRA_DIST",
615 AM_PROPERTY_IN_MAKEFILE
618 {"DIST",
619 N_("Include in distribution:"),
620 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
621 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
622 N_("Include this target in the distributed package."),
623 "1"},
624 AM_TOKEN__PROGRAMS, 2, "nodist_",
625 AM_PROPERTY_IN_MAKEFILE
628 {"CHECK",
629 N_("Build for check only:"),
630 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
631 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
632 N_("Build this target only when running automatic tests."),
633 "0"},
634 AM_TOKEN__PROGRAMS, 4, "check_",
635 AM_PROPERTY_IN_MAKEFILE
638 {"NOTRANS",
639 N_("Do not use prefix:"),
640 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
641 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
642 N_("Do not rename the target with an optional prefix, used to avoid overwritting system program. "),
643 "0"},
644 AM_TOKEN__PROGRAMS, 1, "notrans_",
645 AM_PROPERTY_IN_MAKEFILE
648 {"NOBASE",
649 N_("Keep target path:"),
650 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
651 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
652 N_("Keep relative target path for installing it. "
653 "By example if you have a program subdir/app installed in bin directory it will be installed in bin/subdir/app not in bin/app."),
654 "0"},
655 AM_TOKEN__PROGRAMS, 0, "nobase_",
656 AM_PROPERTY_IN_MAKEFILE
661 static GList* AmpProgramTargetPropertyList = NULL;
664 static AmpProperty AmpLibraryTargetProperties[] = {
666 {"NOINST",
667 N_("Do not install:"),
668 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
669 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
670 N_("Build but do not install the target."),
671 "0"},
672 AM_TOKEN__PROGRAMS, 3, "noinst_",
673 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_DISABLE_FOLLOWING
676 {"INSTALLDIR",
677 N_("Installation directory:"),
678 ANJUTA_PROJECT_PROPERTY_STRING,
679 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
680 N_("It has to be a standard directory or a custom one defined in group properties.")},
681 AM_TOKEN__PROGRAMS, 6, "lib",
682 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_DIRECTORY
685 {"LDFLAGS",
686 N_("Linker flags:"),
687 ANJUTA_PROJECT_PROPERTY_LIST,
688 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
689 N_("Additional linker flags for this target.")},
690 AM_TOKEN_TARGET_LDFLAGS, 0, "_LDFLAGS",
691 AM_PROPERTY_IN_MAKEFILE
694 {"LIBADD",
695 N_("Libraries:"),
696 ANJUTA_PROJECT_PROPERTY_LIST,
697 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
698 N_("Additional libraries for this target.")},
699 AM_TOKEN_TARGET_LIBADD, 0, "_LIBADD",
700 AM_PROPERTY_IN_MAKEFILE
703 {"CPPFLAGS",
704 N_("C preprocessor flags:"),
705 ANJUTA_PROJECT_PROPERTY_LIST,
706 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
707 N_("Additional C preprocessor flags for this target.")},
708 AM_TOKEN_TARGET_CPPFLAGS, 0, "_CPPFLAGS",
709 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_COMPILATION_FLAG
712 {"CFLAGS",
713 N_("C compiler flags:"),
714 ANJUTA_PROJECT_PROPERTY_LIST,
715 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
716 N_("Additional C compiler flags for this target.")},
717 AM_TOKEN_TARGET_CFLAGS, 0, "_CFLAGS",
718 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_COMPILATION_FLAG
721 {"CXXFLAGS",
722 N_("C++ compiler flags:"),
723 ANJUTA_PROJECT_PROPERTY_LIST,
724 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
725 N_("Additional C++ compiler flags for this target.")},
726 AM_TOKEN_TARGET_CXXFLAGS, 0, "_CXXFLAGS",
727 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_COMPILATION_FLAG
730 {"JAVAFLAGS",
731 N_("Java compiler flags:"),
732 ANJUTA_PROJECT_PROPERTY_LIST,
733 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
734 N_("Additional Java compiler flags for this target.")},
735 AM_TOKEN_TARGET_JAVACFLAGS, 0, "_JAVACFLAGS",
736 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_COMPILATION_FLAG
739 {"VALAFLAGS",
740 N_("Vala compiler flags:"),
741 ANJUTA_PROJECT_PROPERTY_LIST,
742 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
743 N_("Additional Vala compiler flags for this target.")},
744 AM_TOKEN_TARGET_VALAFLAGS,0, "_VALAFLAGS",
745 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_COMPILATION_FLAG
748 {"FCFLAGS",
749 N_("Fortran compiler flags:"),
750 ANJUTA_PROJECT_PROPERTY_LIST,
751 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
752 N_("Additional Fortran compiler flags for this target.")},
753 AM_TOKEN_TARGET_FCFLAGS, 0, "_FCFLAGS",
754 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_COMPILATION_FLAG
757 {"OBJCFLAGS",
758 N_("Objective C compiler flags:"),
759 ANJUTA_PROJECT_PROPERTY_LIST,
760 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
761 N_("Additional Objective C compiler flags for this target.")},
762 AM_TOKEN_TARGET_OBJCFLAGS, 0, "_OBJCFLAGS",
763 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_COMPILATION_FLAG
766 {"LFLAGS",
767 N_("Lex/Flex flags:"),
768 ANJUTA_PROJECT_PROPERTY_LIST,
769 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
770 N_("Additional Lex or Flex lexical analyser generator flags for this target.")},
771 AM_TOKEN_TARGET_LFLAGS, 0, "_LFLAGS",
772 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_COMPILATION_FLAG
775 {"YFLAGS",
776 N_("Yacc/Bison flags:"),
777 ANJUTA_PROJECT_PROPERTY_LIST,
778 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
779 N_("Additional Yacc or Bison parser generator flags for this target.")},
780 AM_TOKEN_TARGET_YFLAGS, 0, "_YFLAGS",
781 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_COMPILATION_FLAG
784 {"EXTRA_DIST",
785 N_("Additional dependencies:"),
786 ANJUTA_PROJECT_PROPERTY_LIST,
787 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
788 N_("Additional dependencies for this target.")},
789 AM_TOKEN_TARGET_DEPENDENCIES, 0, "EXTRA_DIST",
790 AM_PROPERTY_IN_MAKEFILE
793 {"DIST",
794 N_("Include in distribution:"),
795 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
796 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
797 N_("Include this target in the distributed package."),
798 "1"},
799 AM_TOKEN__PROGRAMS, 2, "nodist_",
800 AM_PROPERTY_IN_MAKEFILE
803 {"CHECK",
804 N_("Build for check only:"),
805 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
806 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
807 N_("Build this target only when running automatic tests."),
808 "0"},
809 AM_TOKEN__PROGRAMS, 4, "check_",
810 AM_PROPERTY_IN_MAKEFILE
813 {"NOTRANS",
814 N_("Do not use prefix:"),
815 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
816 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
817 N_("Do not rename the target with an optional prefix, used to avoid overwritting system program. "),
818 "0"},
819 AM_TOKEN__PROGRAMS, 1, "notrans_",
820 AM_PROPERTY_IN_MAKEFILE
823 {"NOBASE",
824 N_("Keep target path:"),
825 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
826 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
827 N_("Keep relative target path for installing it. "
828 "By example if you have a program subdir/app installed in bin directory it will be installed in bin/subdir/app not in bin/app."),
829 "0"},
830 AM_TOKEN__PROGRAMS, 0, "nobase_",
831 AM_PROPERTY_IN_MAKEFILE
836 static GList* AmpLibraryTargetPropertyList = NULL;
839 static AmpProperty AmpManTargetProperties[] = {
841 {"EXTRA_DIST",
842 N_("Additional dependencies:"),
843 ANJUTA_PROJECT_PROPERTY_LIST,
844 ANJUTA_PROJECT_PROPERTY_READ_ONLY,
845 N_("Additional dependencies for this target.")},
846 0, 0, NULL,
847 AM_PROPERTY_IN_MAKEFILE
850 {"NOTRANS",
851 N_("Do not use prefix:"),
852 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
853 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
854 N_("Do not rename the target with an optional prefix, used to avoid overwritting system program. "),
855 "0"},
856 AM_TOKEN__PROGRAMS, 1, "notrans_",
857 AM_PROPERTY_IN_MAKEFILE
860 {"MAN",
861 N_("Manual section:"),
862 ANJUTA_PROJECT_PROPERTY_STRING,
863 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
864 N_("Section where are installed the man pages. Valid section names are the digits ‘0’ through ‘9’, and the letters ‘l’ and ‘n’. ")},
865 AM_TOKEN__PROGRAMS, 5, "man_",
866 AM_PROPERTY_IN_MAKEFILE
871 static GList* AmpManTargetPropertyList = NULL;
874 static AmpProperty AmpDataTargetProperties[] = {
876 {"NOINST",
877 N_("Do not install:"),
878 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
879 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
880 N_("Build but do not install the target."),
881 "0"},
882 AM_TOKEN__PROGRAMS, 3, "noinst_",
883 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_DISABLE_FOLLOWING
886 {"INSTALLDIR",
887 N_("Installation directory:"),
888 ANJUTA_PROJECT_PROPERTY_STRING,
889 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
890 N_("It has to be a standard directory or a custom one defined in group properties.")},
891 AM_TOKEN__PROGRAMS, 6, "data",
892 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_DIRECTORY
895 {"EXTRA_DIST",
896 N_("Additional dependencies:"),
897 ANJUTA_PROJECT_PROPERTY_LIST,
898 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
899 N_("Additional dependencies for this target.")},
900 AM_TOKEN_TARGET_DEPENDENCIES, 0, "EXTRA_DIST",
901 AM_PROPERTY_IN_MAKEFILE
904 {"DIST",
905 N_("Include in distribution:"),
906 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
907 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
908 N_("Include this target in the distributed package."),
909 "1"},
910 AM_TOKEN__PROGRAMS, 2, "nodist_",
911 AM_PROPERTY_IN_MAKEFILE
914 {"CHECK",
915 N_("Build for check only:"),
916 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
917 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
918 N_("Build this target only when running automatic tests."),
919 "0"},
920 AM_TOKEN__PROGRAMS, 4, "check_",
921 AM_PROPERTY_IN_MAKEFILE
924 {"NOTRANS",
925 N_("Do not use prefix:"),
926 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
927 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
928 N_("Do not rename the target with an optional prefix, used to avoid overwritting system program. "),
929 "0"},
930 AM_TOKEN__PROGRAMS, 1, "notrans_",
931 AM_PROPERTY_IN_MAKEFILE
934 {"NOBASE",
935 N_("Keep target path:"),
936 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
937 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
938 N_("Keep relative target path for installing it. "
939 "By example if you have a program subdir/app installed in bin directory it will be installed in bin/subdir/app not in bin/app."),
940 "0"},
941 AM_TOKEN__PROGRAMS, 0, "nobase_",
942 AM_PROPERTY_IN_MAKEFILE
947 static GList* AmpDataTargetPropertyList = NULL;
950 static AmpProperty AmpScriptTargetProperties[] = {
952 {"NOINST",
953 N_("Do not install:"),
954 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
955 ANJUTA_PROJECT_PROPERTY_READ_ONLY,
956 N_("Build but do not install the target.")},
957 AM_TOKEN__PROGRAMS, 3, "noinst_",
958 AM_PROPERTY_IN_MAKEFILE | AM_PROPERTY_DISABLE_FOLLOWING
961 {"INSTALLDIR",
962 N_("Installation directory:"),
963 ANJUTA_PROJECT_PROPERTY_STRING,
964 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
965 N_("It has to be a standard directory or a custom one defined in group properties.")},
966 AM_TOKEN__PROGRAMS, 6, "bin",
967 AM_PROPERTY_IN_MAKEFILE
970 {"EXTRA_DIST",
971 N_("Additional dependencies:"),
972 ANJUTA_PROJECT_PROPERTY_LIST,
973 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
974 N_("Additional dependencies for this target.")},
975 AM_TOKEN_TARGET_DEPENDENCIES, 0, "EXTRA_DIST",
976 AM_PROPERTY_IN_MAKEFILE
979 {"DIST",
980 N_("Include in distribution:"),
981 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
982 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
983 N_("Include this target in the distributed package.")},
984 AM_TOKEN__PROGRAMS, 2, "nodist_",
985 AM_PROPERTY_IN_MAKEFILE
988 {"CHECK",
989 N_("Build for check only:"),
990 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
991 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
992 N_("Build this target only when running automatic tests.")},
993 AM_TOKEN__PROGRAMS, 4, "check_",
994 AM_PROPERTY_IN_MAKEFILE
997 {"NOTRANS",
998 N_("Do not use prefix:"),
999 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
1000 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
1001 N_("Do not rename the target with an optional prefix, used to avoid overwritting system program. ")},
1002 AM_TOKEN__PROGRAMS, 1, "notrans_",
1003 AM_PROPERTY_IN_MAKEFILE
1006 {"NOBASE",
1007 N_("Keep target path:"),
1008 ANJUTA_PROJECT_PROPERTY_BOOLEAN,
1009 ANJUTA_PROJECT_PROPERTY_READ_WRITE,
1010 N_("Keep relative target path for installing it. "
1011 "By example if you have a program subdir/app installed in bin directory it will be installed in bin/subdir/app not in bin/app.")},
1012 AM_TOKEN__PROGRAMS, 0, "nobase_",
1013 AM_PROPERTY_IN_MAKEFILE
1018 static GList* AmpScriptTargetPropertyList = NULL;
1021 /* Helper functions
1022 *---------------------------------------------------------------------------*/
1024 /* Private functions
1025 *---------------------------------------------------------------------------*/
1027 static GList *
1028 amp_create_property_list (GList **list, AmpProperty *properties)
1030 if (*list == NULL)
1032 AmpProperty *prop;
1033 AmpProperty *link = NULL;
1035 for (prop = properties; prop->base.name != NULL; prop++)
1037 prop->link = link;
1038 *list = g_list_prepend (*list, prop);
1039 link = prop->flags & AM_PROPERTY_DISABLE_FOLLOWING ? prop : NULL;
1041 *list = g_list_reverse (*list);
1044 return *list;
1047 /* Public functions
1048 *---------------------------------------------------------------------------*/
1051 /* Properties objects
1052 *---------------------------------------------------------------------------*/
1054 AnjutaProjectProperty *
1055 amp_property_new (const gchar *name, AnjutaTokenType type, gint position, const gchar *value, AnjutaToken *token)
1057 AmpProperty*prop;
1059 prop = g_slice_new0(AmpProperty);
1060 prop->base.name = g_strdup (name);
1061 prop->base.value = g_strdup (value);
1062 prop->token = token;
1063 prop->token_type = type;
1064 prop->position = position;
1066 return (AnjutaProjectProperty *)prop;
1069 void
1070 amp_property_free (AnjutaProjectProperty *prop)
1072 if (prop->native == NULL) return;
1074 if ((prop->name != NULL) && (prop->name != prop->native->name))
1076 g_free (prop->name);
1078 if ((prop->value != NULL) && (prop->value != prop->native->value))
1080 g_free (prop->value);
1082 g_slice_free (AmpProperty, (AmpProperty *)prop);
1085 /* Set property list
1086 *---------------------------------------------------------------------------*/
1088 gboolean
1089 amp_node_property_load (AnjutaProjectNode *node, gint token_type, gint position, const gchar *value, AnjutaToken *token)
1091 GList *item;
1092 gboolean set = FALSE;
1094 for (item = anjuta_project_node_get_native_properties (node); item != NULL; item = g_list_next (item))
1096 AmpProperty *prop = (AmpProperty *)item->data;
1098 if ((prop->token_type == token_type) && (prop->position == position))
1100 AnjutaProjectProperty *new_prop;
1102 new_prop = anjuta_project_node_get_property (node, (AnjutaProjectProperty *)prop);
1103 if (new_prop->native == NULL)
1105 new_prop = anjuta_project_node_insert_property (node, new_prop, amp_property_new (NULL, token_type, position, NULL, token));
1108 if ((new_prop->value != NULL) && (new_prop->value != prop->base.value)) g_free (new_prop->value);
1109 new_prop->value = g_strdup (value);
1110 set = TRUE;
1114 return set;
1117 gboolean
1118 amp_node_property_add (AnjutaProjectNode *node, AnjutaProjectProperty *new_prop)
1120 GList *item;
1121 gboolean set = FALSE;
1123 for (item = anjuta_project_node_get_native_properties (node); item != NULL; item = g_list_next (item))
1125 AmpProperty *prop = (AmpProperty *)item->data;
1126 AnjutaToken *arg;
1127 GString *list;
1129 if ((prop->token_type == ((AmpProperty *)new_prop)->token_type) && (prop->position == ((AmpProperty *)new_prop)->position))
1131 if (prop->base.type != ANJUTA_PROJECT_PROPERTY_MAP)
1133 /* Replace property */
1134 AnjutaProjectProperty *old_prop;
1136 old_prop = anjuta_project_node_remove_property (node, (AnjutaProjectProperty *)prop);
1137 if (old_prop != NULL)
1139 amp_property_free (old_prop);
1142 anjuta_project_node_insert_property (node, (AnjutaProjectProperty *)prop, new_prop);
1144 switch (prop->base.type)
1146 case ANJUTA_PROJECT_PROPERTY_LIST:
1147 /* Re-evaluate token to remove useless space between item */
1149 list = g_string_new (new_prop->value);
1150 g_string_assign (list, "");
1151 for (arg = anjuta_token_first_word (((AmpProperty *)new_prop)->token); arg != NULL; arg = anjuta_token_next_word (arg))
1153 gchar *value = anjuta_token_evaluate (arg);
1155 if (value != NULL)
1157 if (list->len != 0) g_string_append_c (list, ' ');
1158 g_string_append (list, value);
1161 if (new_prop->value != prop->base.value) g_free (new_prop->value);
1162 new_prop->value = g_string_free (list, FALSE);
1163 break;
1164 case ANJUTA_PROJECT_PROPERTY_MAP:
1165 case ANJUTA_PROJECT_PROPERTY_STRING:
1166 /* Strip leading and trailing space */
1167 if (new_prop->value != prop->base.value)
1169 new_prop->value = g_strstrip (new_prop->value);
1171 break;
1172 default:
1173 break;
1176 set = TRUE;
1177 break;
1181 if (!set) amp_property_free (new_prop);
1183 return set;
1186 AnjutaProjectProperty *
1187 amp_node_property_set (AnjutaProjectNode *node, AnjutaProjectProperty *prop, const gchar* value)
1189 AnjutaProjectProperty *new_prop;
1190 gchar *name;
1193 if ((value != NULL) && (prop->type == ANJUTA_PROJECT_PROPERTY_MAP))
1195 name = strchr (value, '=');
1196 if (name != NULL)
1198 gsize len = name - value;
1200 name = g_strndup (value, len);
1201 value += len + 1;
1204 else
1206 name = NULL;
1209 new_prop = anjuta_project_node_get_map_property (node, prop, name);
1210 if (new_prop != NULL)
1212 if (new_prop->native != NULL)
1214 /* Custom property already exist, replace value */
1215 if ((new_prop->value != NULL) && (new_prop->value != new_prop->native->value)) g_free (new_prop->value);
1216 new_prop->value = g_strdup (value);
1218 else
1220 /* Add new custom property */
1221 new_prop = amp_property_new (name, ((AmpProperty *)new_prop)->token_type, ((AmpProperty *)prop)->position, value, NULL);
1222 anjuta_project_node_insert_property (node, prop, new_prop);
1225 g_free (name);
1227 return new_prop;
1230 AnjutaProjectProperty *
1231 amp_node_get_property_from_token (AnjutaProjectNode *node, gint token, gint pos)
1233 GList *item;
1235 for (item = anjuta_project_node_get_native_properties (node); item != NULL; item = g_list_next (item))
1237 AmpProperty *prop = (AmpProperty *)item->data;
1239 if ((prop->token_type == token) && (prop->position == pos))
1241 return anjuta_project_node_get_property (node, (AnjutaProjectProperty *)prop);
1245 return NULL;
1250 /* Modify flags value
1251 *---------------------------------------------------------------------------*/
1253 static const gchar *
1254 am_node_property_find_flags (AnjutaProjectProperty *prop, const gchar *value, gsize len)
1256 const gchar *found;
1258 g_return_val_if_fail (prop != NULL, NULL);
1260 for (found = prop->value; found != NULL;)
1262 found = strstr (found, value);
1263 if (found != NULL)
1265 /* Check that flags is alone */
1266 if (((found == prop->value) || isspace (*(found - 1))) &&
1267 ((*(found + len) == '\0') || isspace (*(found + len))))
1269 return found;
1271 found += len;
1275 return NULL;
1278 gboolean
1279 amp_node_property_has_flags (AnjutaProjectNode *node, AnjutaProjectProperty *prop, const gchar *value)
1281 return am_node_property_find_flags (prop, value, strlen (value)) != NULL ? TRUE : FALSE;
1284 AnjutaProjectProperty *
1285 amp_node_property_remove_flags (AnjutaProjectNode *node, AnjutaProjectProperty *prop, const gchar *value)
1287 AnjutaProjectProperty *new_prop = NULL;
1288 const gchar *found;
1289 gsize len = strlen (value);
1291 found = am_node_property_find_flags (prop, value, len);
1293 if (found != NULL)
1295 gsize new_len;
1297 if (found == prop->value)
1299 while (isspace (*(found + len))) len++;
1301 else if (*(found + len) == '\0')
1303 while ((found != prop->value) && isspace(*(found - 1)))
1305 found--;
1306 len++;
1309 else
1311 while (isspace (*(found + len))) len++;
1314 new_len = strlen (prop->value) - len;
1316 if (new_len == 0)
1318 new_prop = amp_node_property_set (node, prop, NULL);
1320 else
1322 gchar *new_value;
1324 new_value = g_new(gchar, new_len + 1);
1326 if (found != prop->value) memcpy (new_value, prop->value, found - prop->value);
1327 memcpy (new_value + (found - prop->value), found + len, new_len + 1 - (found - prop->value));
1328 new_prop = amp_node_property_set (node, prop, new_value);
1329 g_free (new_value);
1333 return new_prop;
1336 AnjutaProjectProperty *
1337 amp_node_property_add_flags (AnjutaProjectNode *node, AnjutaProjectProperty *prop, const gchar *value)
1339 AnjutaProjectProperty *new_prop;
1341 if (prop->value == NULL)
1343 new_prop = amp_node_property_set (node, prop, value);
1345 else
1347 gchar *new_value;
1349 new_value = g_strconcat (prop->value, " ", value, NULL);
1350 new_prop = amp_node_property_set (node, prop, new_value);
1351 g_free (new_value);
1354 return new_prop;
1359 /* Get property list
1360 *---------------------------------------------------------------------------*/
1362 GList*
1363 amp_get_project_property_list (void)
1365 return amp_create_property_list (&AmpProjectPropertyList, AmpProjectProperties);
1368 GList*
1369 amp_get_group_property_list (void)
1371 return amp_create_property_list (&AmpGroupNodePropertyList, AmpGroupNodeProperties);
1374 GList*
1375 amp_get_target_property_list (AnjutaProjectNodeType type)
1377 switch (type & ANJUTA_PROJECT_ID_MASK)
1379 case ANJUTA_PROJECT_PROGRAM:
1380 return amp_create_property_list (&AmpProgramTargetPropertyList, AmpProgramTargetProperties);
1381 case ANJUTA_PROJECT_SHAREDLIB:
1382 case ANJUTA_PROJECT_STATICLIB:
1383 return amp_create_property_list (&AmpLibraryTargetPropertyList, AmpLibraryTargetProperties);
1384 case ANJUTA_PROJECT_MAN:
1385 return amp_create_property_list (&AmpManTargetPropertyList, AmpManTargetProperties);
1386 case ANJUTA_PROJECT_DATA:
1387 return amp_create_property_list (&AmpDataTargetPropertyList, AmpDataTargetProperties);
1388 case ANJUTA_PROJECT_SCRIPT:
1389 return amp_create_property_list (&AmpScriptTargetPropertyList, AmpScriptTargetProperties);
1390 default:
1391 return amp_create_property_list (&AmpTargetNodePropertyList, AmpTargetNodeProperties);
1395 GList*
1396 amp_get_source_property_list (void)
1398 return NULL;
1401 GList*
1402 amp_get_module_property_list (void)
1404 return NULL;
1407 GList*
1408 amp_get_package_property_list (void)
1410 return NULL;