aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Marino <marino@FreeBSD.org>2014-06-19 20:13:42 +0000
committerJohn Marino <marino@FreeBSD.org>2014-06-19 20:13:42 +0000
commitb8d66f2d080649dfcea3581c5e79b4260fc07379 (patch)
tree011ac640c74b1f5ebd153c0c6a61a1f0c532e85f
parent706d15c991fd722daaae9d14ff5fd6728b3af1f7 (diff)
downloadports-b8d66f2d080649dfcea3581c5e79b4260fc07379.tar.gz
ports-b8d66f2d080649dfcea3581c5e79b4260fc07379.zip
Notes
-rw-r--r--lang/tcc/Makefile30
-rw-r--r--lang/tcc/distinfo4
-rw-r--r--lang/tcc/files/README.tccelf39
-rw-r--r--lang/tcc/files/patch-Makefile104
-rw-r--r--lang/tcc/files/patch-configure12
-rw-r--r--lang/tcc/files/patch-libtcc.c57
-rw-r--r--lang/tcc/files/patch-tccelf.c175
-rw-r--r--lang/tcc/files/patch-z1-preproc223
-rw-r--r--lang/tcc/files/texi2pod.pl431
-rw-r--r--lang/tcc/pkg-plist14
10 files changed, 34 insertions, 1055 deletions
diff --git a/lang/tcc/Makefile b/lang/tcc/Makefile
index 7e9ea383e582..53426c498006 100644
--- a/lang/tcc/Makefile
+++ b/lang/tcc/Makefile
@@ -1,29 +1,28 @@
# $FreeBSD$
PORTNAME= tcc
-PORTVERSION= 0.9.25
-PORTREVISION= 2
+PORTVERSION= 0.9.26
CATEGORIES= lang
MASTER_SITES= SAVANNAH/tinycc
-MAINTAINER= ports@FreeBSD.org
+MAINTAINER= cjpugmed@gmail.com
COMMENT= Tiny C Compiler
LICENSE= LGPL21
ONLY_FOR_ARCHS= i386
-#ONLY_FOR_ARCHS= i386 amd64 arm mips powerpc
-CONFLICTS= TenDRA-*
+CONFLICTS= TenDRA-[0-9]*
-USES= gmake perl5
-USE_BZIP2= yes
+USES= tar:bzip2 gmake perl5
USE_PERL5= build
HAS_CONFIGURE= yes
CONFIGURE_ARGS= --prefix="${PREFIX}" --cc="${CC}"
MAKE_ARGS= CONFIG_NOLDL=1
-OPTIONS_DEFINE= DOCS
+OPTIONS_DEFINE= DOCS EXAMPLES
+
+PORTDOCS= COPYING Changelog README TODO VERSION
.include <bsd.port.options.mk>
@@ -37,8 +36,19 @@ PLIST_SUB+= I386="@comment "
CFLAGS+= -fheinous-gnu-extensions
.endif
-.if ! ${PORT_OPTIONS:MDOCS}
-MAKE_ARGS+= NOPORTDOCS=1
+post-install:
+ ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/tcc
+ ${INSTALL_MAN} ${WRKSRC}/tcc.1 ${STAGEDIR}${MAN1PREFIX}/man/man1
+ ${INSTALL_DATA} ${WRKSRC}/lib/i386/bcheck.o ${STAGEDIR}${PREFIX}/lib/tcc/
+
+.if ${PORT_OPTIONS:MDOCS}
+ ${MKDIR} ${STAGEDIR}${DOCSDIR}
+ ${INSTALL_DATA} ${PORTDOCS:S,^,${WRKSRC}/,} ${STAGEDIR}${DOCSDIR}
+.endif
+
+.if ${PORT_OPTIONS:MEXAMPLES}
+ ${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
+ ${INSTALL_DATA} ${WRKSRC}/examples/* ${STAGEDIR}${EXAMPLESDIR}
.endif
.include <bsd.port.mk>
diff --git a/lang/tcc/distinfo b/lang/tcc/distinfo
index 57cb0d995e6e..f8c722f7c812 100644
--- a/lang/tcc/distinfo
+++ b/lang/tcc/distinfo
@@ -1,2 +1,2 @@
-SHA256 (tcc-0.9.25.tar.bz2) = 1bed6cb0fb2ef4100df1b94435d22863679e84cf419ec48ef96d9c0e9063de35
-SIZE (tcc-0.9.25.tar.bz2) = 382914
+SHA256 (tcc-0.9.26.tar.bz2) = 521e701ae436c302545c3f973a9c9b7e2694769c71d9be10f70a2460705b6d71
+SIZE (tcc-0.9.26.tar.bz2) = 525906
diff --git a/lang/tcc/files/README.tccelf b/lang/tcc/files/README.tccelf
deleted file mode 100644
index 6e991757bae2..000000000000
--- a/lang/tcc/files/README.tccelf
+++ /dev/null
@@ -1,39 +0,0 @@
-The patches in this directory include some updates to tcc 0.9.25.
-Some of them have been committed in the main tcc repository so
-we will not need them in future updates.
-
-In particular:
-
-1. ELF file format (merged upstream)
- tcc 0.9.25 produces an ELF executable which is good for linux but
- not for FreeBSD. It misses the PHDR section which is almost
- mandatory for shared executables, puts in the .dynsym section
- some relocation info that FreeBSD expects to be in .got,
- and expect the relocation sections to be contiguous.
-
- patch-tccelf.c tries to address the above problem using
- conditional sections (so hopefully can be imported upstream)
- and also adds the ability to override the name of the dynamic
- loader through an environment variable (this is important to
- debug tcc).
-
- The resulting elf file is still not 100% correct -- if you strip it,
- the program will not run (presumably there is some dangling reference).
- Other than that, program do seem to run correctly.
-
-2. predefined macros (partially merged upstream)
- patch-libtcc.c adds/fixes some predefined macros when compiling
- on FreeBSD: these are __FreeBSD__ and the usual set of
- __i386__ and __unix__ variants.
- It also #defines __builtin_inline(x,y), __PRETTY_FUNCTION__,
- __CC_SUPPORTS___INLINE, __aligned(x), __packed that are used
- in cdefs.h and by several user programs.
- Note that tcc recognises the __aligned__ and __packed__
- attributes but does not honor them.
-
-3. -include, -M and other preprocessor directives
- patch-z1-preproc (name chosen because it must be applied after
- the other two) implements -include, -M (and related options),
- and makes tcc ignore -isystem and -std= which are often used
- to build code.
-
diff --git a/lang/tcc/files/patch-Makefile b/lang/tcc/files/patch-Makefile
deleted file mode 100644
index 466560c84e5f..000000000000
--- a/lang/tcc/files/patch-Makefile
+++ /dev/null
@@ -1,104 +0,0 @@
---- Makefile.orig 2009-05-18 16:27:06.000000000 +0200
-+++ Makefile 2009-07-03 07:40:15.000000000 +0200
-@@ -28,6 +28,9 @@ endif
- ifeq ($(ARCH),x86-64)
- CFLAGS+=-Wno-pointer-sign
- endif
-+ifeq ($(ARCH),amd64)
-+CFLAGS+=-Wno-pointer-sign
-+endif
-
- ifndef CONFIG_WIN32
- LIBS=-lm
-@@ -53,6 +56,11 @@ else
- ifeq ($(ARCH),x86-64)
- NATIVE_TARGET=-DTCC_TARGET_X86_64
- LIBTCC1=libtcc1.a
-+else
-+ifeq ($(ARCH),amd64)
-+NATIVE_TARGET=-DTCC_TARGET_X86_64
-+LIBTCC1=libtcc1.a
-+endif
- endif
- endif
- endif
-@@ -99,6 +107,10 @@ ifeq ($(ARCH),x86-64)
- NATIVE_FILES=$(X86_64_FILES)
- PROGS_CROSS=$(I386_CROSS) $(WIN32_CROSS) $(ARM_CROSS) $(C67_CROSS)
- else
-+ifeq ($(ARCH),amd64)
-+NATIVE_FILES=$(X86_64_FILES)
-+PROGS_CROSS=$(I386_CROSS) $(WIN32_CROSS) $(ARM_CROSS) $(C67_CROSS)
-+else
- ifeq ($(ARCH),arm)
- NATIVE_FILES=$(ARM_FILES)
- PROGS_CROSS=$(I386_CROSS) $(X64_CROSS) $(WIN32_CROSS) $(C67_CROSS)
-@@ -106,6 +118,7 @@ endif
- endif
- endif
- endif
-+endif
-
- ifdef CONFIG_CROSS
- PROGS+=$(PROGS_CROSS)
-@@ -180,7 +193,7 @@ LIBTCC1_OBJS+=alloca86.o alloca86-bt.o
- endif
-
- %.o: %.c
-- $(LIBTCC1_CC) -o $@ -c $< -O2 -Wall
-+ $(LIBTCC1_CC) -o $@ -c $< $(CFLAGS) -Wall
-
- %.o: %.S
- $(LIBTCC1_CC) -o $@ -c $<
-@@ -189,7 +202,7 @@ libtcc1.a: $(LIBTCC1_OBJS)
- $(AR) rcs $@ $^
-
- bcheck.o: bcheck.c
-- $(CC) -o $@ -c $< -O2 -Wall
-+ $(CC) -o $@ -c $< $(CFLAGS) -Wall
-
- # install
- TCC_INCLUDES = stdarg.h stddef.h stdbool.h float.h varargs.h tcclib.h
-@@ -197,25 +210,27 @@ INSTALL=install
-
- ifndef CONFIG_WIN32
- install: $(PROGS) $(LIBTCC1) $(BCHECK_O) libtcc.a tcc.1 tcc-doc.html
-- mkdir -p "$(bindir)"
-- $(INSTALL) -s -m755 $(PROGS) "$(bindir)"
-- mkdir -p "$(mandir)/man1"
-- $(INSTALL) tcc.1 "$(mandir)/man1"
-- mkdir -p "$(tccdir)"
-- mkdir -p "$(tccdir)/include"
-+ mkdir -p "$(DESTDIR)$(bindir)"
-+ $(INSTALL) -s -m755 $(PROGS) "$(DESTDIR)$(bindir)"
-+ mkdir -p "$(DESTDIR)$(mandir)/man1"
-+ $(INSTALL) tcc.1 "$(DESTDIR)$(mandir)/man1"
-+ mkdir -p "$(DESTDIR)$(tccdir)"
-+ mkdir -p "$(DESTDIR)$(tccdir)/include"
- ifneq ($(LIBTCC1),)
-- $(INSTALL) -m644 $(LIBTCC1) "$(tccdir)"
-+ $(INSTALL) -m644 $(LIBTCC1) "$(DESTDIR)$(tccdir)"
- endif
- ifneq ($(BCHECK_O),)
-- $(INSTALL) -m644 $(BCHECK_O) "$(tccdir)"
-+ $(INSTALL) -m644 $(BCHECK_O) "$(DESTDIR)$(tccdir)"
- endif
-- $(INSTALL) -m644 $(addprefix include/,$(TCC_INCLUDES)) "$(tccdir)/include"
-- mkdir -p "$(docdir)"
-- $(INSTALL) -m644 tcc-doc.html "$(docdir)"
-- mkdir -p "$(libdir)"
-- $(INSTALL) -m644 libtcc.a "$(libdir)"
-- mkdir -p "$(includedir)"
-- $(INSTALL) -m644 libtcc.h "$(includedir)"
-+ $(INSTALL) -m644 $(addprefix include/,$(TCC_INCLUDES)) "$(DESTDIR)$(tccdir)/include"
-+ifndef NOPORTDOCS
-+ mkdir -p "$(DESTDIR)$(docdir)"
-+ $(INSTALL) -m644 tcc-doc.html "$(DESTDIR)$(docdir)"
-+endif
-+ mkdir -p "$(DESTDIR)$(libdir)"
-+ $(INSTALL) -m644 libtcc.a "$(DESTDIR)$(libdir)"
-+ mkdir -p "$(DESTDIR)$(includedir)"
-+ $(INSTALL) -m644 libtcc.h "$(DESTDIR)$(includedir)"
-
- uninstall:
- rm -fv $(foreach P,$(PROGS),"$(bindir)/$P")
diff --git a/lang/tcc/files/patch-configure b/lang/tcc/files/patch-configure
deleted file mode 100644
index 15d6f7241aca..000000000000
--- a/lang/tcc/files/patch-configure
+++ /dev/null
@@ -1,12 +0,0 @@
---- configure.orig 2009-05-18 16:27:06.000000000 +0200
-+++ configure 2009-07-03 07:32:51.000000000 +0200
-@@ -38,6 +38,9 @@
- i386|i486|i586|i686|i86pc|BePC)
- cpu="x86"
- ;;
-+ amd64)
-+ cpu="x86-64"
-+ ;;
- x86_64)
- cpu="x86-64"
- ;;
diff --git a/lang/tcc/files/patch-libtcc.c b/lang/tcc/files/patch-libtcc.c
deleted file mode 100644
index 660e87845435..000000000000
--- a/lang/tcc/files/patch-libtcc.c
+++ /dev/null
@@ -1,57 +0,0 @@
-diff -ubwr ./libtcc.c ../../work.2/tcc-0.9.25/libtcc.c
---- ./libtcc.c 2009-05-18 16:27:06.000000000 +0200
-+++ ../../work.2/tcc-0.9.25/libtcc.c 2009-11-29 02:25:14.000000000 +0100
-@@ -1509,10 +1509,18 @@
-
- if (level == 0) {
- /* XXX: only support linux */
-+#if defined(__FreeBSD__)
-+ *paddr = uc->uc_mcontext.mc_rip;
-+#else
- *paddr = uc->uc_mcontext.gregs[REG_RIP];
-+#endif
- return 0;
- } else {
-+#if defined(__FreeBSD__)
-+ fp = uc->uc_mcontext.mc_rbp;
-+#else
- fp = uc->uc_mcontext.gregs[REG_RBP];
-+#endif
- for(i=1;i<level;i++) {
- /* XXX: check address validity with program info */
- if (fp <= 0x1000)
-@@ -1784,7 +1792,9 @@
- tcc_define_symbol(s, "__STDC__", NULL);
- tcc_define_symbol(s, "__STDC_VERSION__", "199901L");
- #if defined(TCC_TARGET_I386)
- tcc_define_symbol(s, "__i386__", NULL);
-+ tcc_define_symbol(s, "__i386", NULL); /* NULL defaults to "1" */
-+ tcc_define_symbol(s, "i386", NULL);
- #endif
- #if defined(TCC_TARGET_X86_64)
- tcc_define_symbol(s, "__x86_64__", NULL);
-@@ -1802,6 +1812,14 @@
- #else
- tcc_define_symbol(s, "__unix__", NULL);
- tcc_define_symbol(s, "__unix", NULL);
-+ tcc_define_symbol(s, "unix", NULL);
-+#if defined(__FreeBSD__)
-+#define str(s) #s
-+ tcc_define_symbol(s, "__FreeBSD__", str( __FreeBSD__));
-+#undef str
-+ tcc_define_symbol(s, "__aligned(x)", "__attribute__((__aligned__(x)))");
-+ tcc_define_symbol(s, "__packed", "__attribute__((packed))");
-+#endif
- #if defined(__linux)
- tcc_define_symbol(s, "__linux__", NULL);
- tcc_define_symbol(s, "__linux", NULL);
-@@ -1834,6 +1841,9 @@
- tcc_define_symbol(s, "__TINYC__", NULL);
-
- /* tiny C & gcc defines */
-+ tcc_define_symbol(s, "__CC_SUPPORTS___INLINE", NULL);
-+ tcc_define_symbol(s, "__builtin_inline(x,y)", "(x)");
-+ tcc_define_symbol(s, "__PRETTY_FUNCTION__", "__FUNCTION__");
- tcc_define_symbol(s, "__SIZE_TYPE__", "unsigned int");
- tcc_define_symbol(s, "__PTRDIFF_TYPE__", "int");
- #ifdef TCC_TARGET_PE
diff --git a/lang/tcc/files/patch-tccelf.c b/lang/tcc/files/patch-tccelf.c
deleted file mode 100644
index a8a1d68c4fc4..000000000000
--- a/lang/tcc/files/patch-tccelf.c
+++ /dev/null
@@ -1,175 +0,0 @@
-diff -ubwr ./tccelf.c ../../work.2/tcc-0.9.25/tccelf.c
---- ./tccelf.c 2009-05-18 16:27:06.000000000 +0200
-+++ ../../work.2/tcc-0.9.25/tccelf.c 2009-11-29 02:12:36.000000000 +0100
-@@ -1273,7 +1273,7 @@
-
- /* name of ELF interpreter */
- #if defined __FreeBSD__
--static char elf_interp[] = "/usr/libexec/ld-elf.so.1";
-+static char elf_interp[] = "/libexec/ld-elf.so.1";
- #elif defined TCC_ARM_EABI
- static char elf_interp[] = "/lib/ld-linux.so.3";
- #elif defined(TCC_TARGET_X86_64)
-@@ -1306,6 +1306,31 @@
- }
- }
-
-+#if defined(__FreeBSD__)
-+#define HAVE_PHDR 1
-+#define EXTRA_RELITEMS 14
-+
-+/* move the relocation value from .dynsym to .got */
-+void patch_dynsym_undef(TCCState *s1, Section *s)
-+{
-+ uint32_t *gotd = (void *)s1->got->data;
-+ ElfW(Sym) *sym, *sym_end;
-+
-+ gotd += 3; // dummy entries in .got
-+ /* relocate symbols in .dynsym */
-+ sym_end = (ElfW(Sym) *)(s->data + s->data_offset);
-+ for (sym = (ElfW(Sym) *)s->data + 1; sym < sym_end; sym++) {
-+ if (sym->st_shndx == SHN_UNDEF) {
-+ *gotd++ = sym->st_value + 6; // XXX 6 is magic ?
-+ sym->st_value = 0;
-+ }
-+ }
-+}
-+#else
-+#define HAVE_PHDR 0
-+#define EXTRA_RELITEMS 9
-+#endif
-+
- /* output an ELF file */
- /* XXX: suppress unneeded sections */
- int elf_output_file(TCCState *s1, const char *filename)
-@@ -1324,6 +1349,7 @@
- ElfW(Sym) *sym;
- int type, file_type;
- unsigned long rel_addr, rel_size;
-+ unsigned long bss_addr, bss_size;
-
- file_type = s1->output_type;
- s1->nb_errors = 0;
-@@ -1351,11 +1377,15 @@
-
- if (file_type == TCC_OUTPUT_EXE) {
- char *ptr;
-+ /* allow override the dynamic loader */
-+ char *elfint = getenv("LD_SO");
-+ if (elfint == NULL)
-+ elfint = elf_interp;
- /* add interpreter section only if executable */
- interp = new_section(s1, ".interp", SHT_PROGBITS, SHF_ALLOC);
- interp->sh_addralign = 1;
-- ptr = section_ptr_add(interp, sizeof(elf_interp));
-- strcpy(ptr, elf_interp);
-+ ptr = section_ptr_add(interp, 1+strlen(elfint));
-+ strcpy(ptr, elfint);
- }
-
- /* add dynamic symbol table */
-@@ -1514,7 +1544,7 @@
-
- /* add necessary space for other entries */
- saved_dynamic_data_offset = dynamic->data_offset;
-- dynamic->data_offset += sizeof(ElfW(Dyn)) * 9;
-+ dynamic->data_offset += sizeof(ElfW(Dyn)) * EXTRA_RELITEMS;
- } else {
- /* still need to build got entries in case of static link */
- build_got_entries(s1);
-@@ -1543,7 +1573,7 @@
- break;
- case TCC_OUTPUT_EXE:
- if (!s1->static_link)
-- phnum = 4;
-+ phnum = 4 + HAVE_PHDR;
- else
- phnum = 2;
- break;
-@@ -1620,10 +1650,11 @@
- rel_size = 0;
- rel_addr = 0;
-
-+ bss_addr = bss_size = 0;
- /* leave one program header for the program interpreter */
- ph = &phdr[0];
- if (interp)
-- ph++;
-+ ph += 1 + HAVE_PHDR;
-
- for(j = 0; j < 2; j++) {
- ph->p_type = PT_LOAD;
-@@ -1685,9 +1716,20 @@
- }
- /* update dynamic relocation infos */
- if (s->sh_type == SHT_RELX) {
-+#if defined(__FreeBSD__)
-+ if (!strcmp(strsec->data + s->sh_name, ".rel.got")) { // rel_size == 0) {
-+ rel_addr = addr;
-+ rel_size += s->sh_size; // XXX only first rel.
-+ }
-+ if (!strcmp(strsec->data + s->sh_name, ".rel.bss")) { // rel_size == 0) {
-+ bss_addr = addr;
-+ bss_size = s->sh_size; // XXX only first rel.
-+ }
-+#else
- if (rel_size == 0)
- rel_addr = addr;
- rel_size += s->sh_size;
-+#endif
- }
- addr += s->sh_size;
- if (s->sh_type != SHT_NOBITS)
-@@ -1715,6 +1757,21 @@
- if (interp) {
- ph = &phdr[0];
-
-+#if defined(__FreeBSD__)
-+ {
-+ int len = phnum * sizeof(ElfW(Phdr));
-+
-+ ph->p_type = PT_PHDR;
-+ ph->p_offset = sizeof(ElfW(Ehdr));
-+ ph->p_vaddr = interp->sh_addr - len;
-+ ph->p_paddr = ph->p_vaddr;
-+ ph->p_filesz = ph->p_memsz = len;
-+ ph->p_flags = PF_R | PF_X;
-+ ph->p_align = 4; // interp->sh_addralign;
-+ ph++;
-+ }
-+#endif
-+
- ph->p_type = PT_INTERP;
- ph->p_offset = interp->sh_offset;
- ph->p_vaddr = interp->sh_addr;
-@@ -1815,10 +1872,19 @@
- put_dt(dynamic, DT_RELASZ, rel_size);
- put_dt(dynamic, DT_RELAENT, sizeof(ElfW_Rel));
- #else
-+#if defined(__FreeBSD__)
-+ put_dt(dynamic, DT_PLTGOT, s1->got->sh_addr);
-+ put_dt(dynamic, DT_PLTRELSZ, rel_size);
-+ put_dt(dynamic, DT_JMPREL, rel_addr);
-+ put_dt(dynamic, DT_PLTREL, DT_REL);
-+ put_dt(dynamic, DT_REL, bss_addr);
-+ put_dt(dynamic, DT_RELSZ, bss_size);
-+#else
- put_dt(dynamic, DT_REL, rel_addr);
- put_dt(dynamic, DT_RELSZ, rel_size);
- put_dt(dynamic, DT_RELENT, sizeof(ElfW_Rel));
- #endif
-+#endif
- if (s1->do_debug)
- put_dt(dynamic, DT_DEBUG, 0);
- put_dt(dynamic, DT_NULL, 0);
-@@ -1950,6 +2016,10 @@
- for(i=1;i<s1->nb_sections;i++) {
- s = s1->sections[section_order[i]];
- if (s->sh_type != SHT_NOBITS) {
-+#if defined(__FreeBSD__)
-+ if (s->sh_type == SHT_DYNSYM)
-+ patch_dynsym_undef(s1, s);
-+#endif
- while (offset < s->sh_offset) {
- fputc(0, f);
- offset++;
diff --git a/lang/tcc/files/patch-z1-preproc b/lang/tcc/files/patch-z1-preproc
deleted file mode 100644
index fbc0a04d00b9..000000000000
--- a/lang/tcc/files/patch-z1-preproc
+++ /dev/null
@@ -1,223 +0,0 @@
-diff -ubwr --exclude .svn ./libtcc.c /usr/ports-luigi/tcc/work/tcc-0.9.25/libtcc.c
---- ./libtcc.c 2009-12-06 14:35:51.000000000 +0100
-+++ /usr/ports-luigi/tcc/work/tcc-0.9.25/libtcc.c 2009-12-06 14:34:34.000000000 +0100
-@@ -1108,7 +1108,15 @@
- bf->fd = fd;
- bf->buf_ptr = bf->buffer;
- bf->buf_end = bf->buffer;
-+ if (s1->include_len <= 0) {
- bf->buffer[0] = CH_EOB; /* put eob symbol */
-+ } else { /* add the list of -include */
-+ if (s1->include_len >= sizeof(bf->buffer))
-+ error("too many '-include directives %s\n", s1->include_buf);
-+ memcpy(bf->buf_ptr, s1->include_buf, s1->include_len);
-+ bf->buffer[s1->include_len] = CH_EOB; /* put eob symbol */
-+ s1->include_len = -s1->include_len;
-+ }
- pstrcpy(bf->filename, sizeof(bf->filename), filename);
- #ifdef _WIN32
- normalize_slashes(bf->filename);
-@@ -1945,6 +1955,9 @@
- if (ext[0])
- ext++;
-
-+ /* enable -include on each new file */
-+ if (s1->include_len < 0)
-+ s1->include_len = -s1->include_len;
- /* open the file */
- saved_file = file;
- file = tcc_open(s1, filename);
-@@ -2121,7 +2134,9 @@
- {
- char buf[1024];
-
-- s->output_type = output_type;
-+ s->output_type = output_type & 7;
-+ s->mode_m = output_type & 8;
-+ output_type = s->output_type;
-
- if (!s->nostdinc) {
- /* default include paths */
-diff -ubwr --exclude .svn ./tcc.c /usr/ports-luigi/tcc/work/tcc-0.9.25/tcc.c
---- ./tcc.c 2009-05-18 16:27:06.000000000 +0200
-+++ /usr/ports-luigi/tcc/work/tcc-0.9.25/tcc.c 2009-12-06 13:42:09.000000000 +0100
-@@ -66,6 +66,7 @@
- static int multiple_files;
- static int print_search_dirs;
- static int output_type;
-+static int mode_m;
- static int reloc_output;
- static const char *outfile;
- static int do_bench = 0;
-@@ -111,6 +112,10 @@
- TCC_OPTION_w,
- TCC_OPTION_pipe,
- TCC_OPTION_E,
-+ TCC_OPTION_M, /* -M and related options */
-+ TCC_OPTION_std, /* -std= */
-+ TCC_OPTION_isystem, /* -isystem x */
-+ TCC_OPTION_include, /* -include x */
- };
-
- static const TCCOption tcc_options[] = {
-@@ -148,6 +153,10 @@
- { "w", TCC_OPTION_w, 0 },
- { "pipe", TCC_OPTION_pipe, 0},
- { "E", TCC_OPTION_E, 0},
-+ { "M", TCC_OPTION_M, TCC_OPTION_HAS_ARG | TCC_OPTION_NOSEP },
-+ { "std=", TCC_OPTION_std, TCC_OPTION_HAS_ARG | TCC_OPTION_NOSEP },
-+ { "isystem", TCC_OPTION_isystem, TCC_OPTION_HAS_ARG },
-+ { "include", TCC_OPTION_include, TCC_OPTION_HAS_ARG },
- { NULL },
- };
-
-@@ -399,10 +408,45 @@
- }
- }
- break;
-+ case TCC_OPTION_include:
-+ {
-+ int len = strlen(optarg) + s->include_len + 12; /* #include ""\n */
-+ char *dst;
-+ s->include_buf = (s->include_len == 0) ?
-+ tcc_malloc(len + 1) :
-+ tcc_realloc(s->include_buf, len + 1);
-+ dst = s->include_buf + s->include_len;
-+ sprintf(dst, "#include \"%s\"\n", optarg);
-+ s->include_len = len; /* exclude '\0' */
-+ }
-+ break;
-+ case TCC_OPTION_isystem:
-+ break; /* ignore isystem */
-+ case TCC_OPTION_std:
-+ break; /* ignore -std= */
-+ case TCC_OPTION_M:
-+ mode_m |= 8;
-+ if (optarg[0] == '\0') /* plain -M */
-+ ;
-+ else if (optarg[0] == 'D') /* add output filename */
-+ ;
-+ else if (optarg[0] == 'F') { /* output filename */
-+ if (optind < argc)
-+ outfile = argv[optind++];
-+ } else if (optarg[0] == 'T') { /* target filename */
-+ if (optind < argc)
-+ s->target_name = argv[optind++];
-+ } else if (optarg[0] == 'P') { /* phony filename */
-+ ;
-+ } else {
-+ goto l_default;
-+ }
-+ /* FALLTHROUGH */
- case TCC_OPTION_E:
- output_type = TCC_OUTPUT_PREPROCESS;
- break;
- default:
-+l_default:
- if (s->warn_unsupported) {
- unsupported_option:
- warning("unsupported option '%s'", r);
-@@ -502,7 +546,7 @@
- start_time = getclock_us();
- }
-
-- tcc_set_output_type(s, output_type);
-+ tcc_set_output_type(s, output_type | mode_m);
-
- /* compile or add each files or library */
- for(i = 0; i < nb_files && ret == 0; i++) {
-diff -ubwr --exclude .svn ./tcc.h /usr/ports-luigi/tcc/work/tcc-0.9.25/tcc.h
---- ./tcc.h 2009-05-18 16:27:06.000000000 +0200
-+++ /usr/ports-luigi/tcc/work/tcc-0.9.25/tcc.h 2009-12-06 13:28:32.000000000 +0100
-@@ -475,6 +475,10 @@
-
- /* output file for preprocessing */
- FILE *outfile;
-+ int mode_m; /* tcc -M */
-+ const char *target_name; /* set with -MT or -MQ */
-+ char *include_buf; /* -include ... */
-+ int include_len; /* length of -include ... */
-
- /* for tcc_relocate */
- int runtime_added;
-diff -ubwr --exclude .svn ./tccpp.c /usr/ports-luigi/tcc/work/tcc-0.9.25/tccpp.c
---- ./tccpp.c 2009-05-18 16:27:06.000000000 +0200
-+++ /usr/ports-luigi/tcc/work/tcc-0.9.25/tccpp.c 2009-12-05 15:18:13.000000000 +0100
-@@ -2897,6 +2897,7 @@
- Sym *define_start;
- BufferedFile *file_ref;
- int token_seen, line_ref;
-+ const char *base_file;
-
- preprocess_init(s1);
- define_start = define_stack;
-@@ -2908,6 +2909,15 @@
- line_ref = 0;
- file_ref = NULL;
-
-+ base_file = file->filename;
-+ if (s1->mode_m) {
-+ int l = strlen(base_file);
-+ if (s1->target_name)
-+ fprintf(s1->outfile, "%s: %s", s1->target_name, base_file);
-+ else
-+ fprintf(s1->outfile, "%.*s.o: %s", l-2, base_file, base_file);
-+ }
-+
- for (;;) {
- next();
- if (tok == TOK_EOF) {
-@@ -2919,16 +2929,25 @@
- token_seen = 0;
- } else if (!token_seen) {
- int d = file->line_num - line_ref;
-+ if (s1->mode_m) {
-+ if (file != file_ref && file->filename != base_file &&
-+ !search_cached_include(s1, '>', file->filename))
-+ fprintf(s1->outfile, " \\\n %s", file->filename);
-+ } else {
- if (file != file_ref || d < 0 || d >= 8)
- fprintf(s1->outfile, "# %d \"%s\"\n", file->line_num, file->filename);
- else
- while (d)
- fputs("\n", s1->outfile), --d;
-+ }
- line_ref = (file_ref = file)->line_num;
- token_seen = 1;
- }
-+ if (!s1->mode_m)
- fputs(get_tok_str(tok, &tokc), s1->outfile);
- }
-+ if (s1->mode_m)
-+ fprintf(s1->outfile, "\n");
- free_defines(define_start);
- return 0;
- }
-diff -ubwr --exclude .svn ./tcc.c /usr/ports-luigi/tcc/work/tcc-0.9.25/tcc.c
---- ./tcc.c 2009-12-06 15:42:02.000000000 +0100
-+++ /usr/ports-luigi/tcc/work/tcc-0.9.25/tcc.c 2009-12-06 15:42:40.000000000 +0100
-@@ -40,8 +40,11 @@
- "Preprocessor options:\n"
- " -E preprocess only\n"
- " -Idir add include path 'dir'\n"
-+ " -include f #include file 'f' before everything else\n"
- " -Dsym[=val] define 'sym' with value 'val'\n"
- " -Usym undefine 'sym'\n"
-+ " -M generate include list. Implies -E\n"
-+ " -MT file use 'file' as target for -M.\n"
- "Linker options:\n"
- " -Ldir add library path 'dir'\n"
- " -llib link with dynamic or static library 'lib'\n"
-@@ -58,6 +61,12 @@
- #ifdef CONFIG_TCC_BACKTRACE
- " -bt N show N callers in stack traces\n"
- #endif
-+ "Ignored options (for gcc compatibility):\n"
-+ " -std=X \n"
-+ " -MD name\n"
-+ " -MP\n"
-+ " -isystem dir\n"
-+
- );
- }
-
diff --git a/lang/tcc/files/texi2pod.pl b/lang/tcc/files/texi2pod.pl
deleted file mode 100644
index e5560f303de2..000000000000
--- a/lang/tcc/files/texi2pod.pl
+++ /dev/null
@@ -1,431 +0,0 @@
-#! /usr/bin/perl -w
-
-# Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
-
-# This file is part of GNU CC.
-
-# GNU CC is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# GNU CC is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with GNU CC; see the file COPYING. If not, write to
-# the Free Software Foundation, 59 Temple Place - Suite 330,
-# Boston MA 02111-1307, USA.
-
-# This does trivial (and I mean _trivial_) conversion of Texinfo
-# markup to Perl POD format. It's intended to be used to extract
-# something suitable for a manpage from a Texinfo document.
-
-$output = 0;
-$skipping = 0;
-%sects = ();
-$section = "";
-@icstack = ();
-@endwstack = ();
-@skstack = ();
-@instack = ();
-$shift = "";
-%defs = ();
-$fnno = 1;
-$inf = "";
-$ibase = "";
-
-while ($_ = shift) {
- if (/^-D(.*)$/) {
- if ($1 ne "") {
- $flag = $1;
- } else {
- $flag = shift;
- }
- $value = "";
- ($flag, $value) = ($flag =~ /^([^=]+)(?:=(.+))?/);
- die "no flag specified for -D\n"
- unless $flag ne "";
- die "flags may only contain letters, digits, hyphens, dashes and underscores\n"
- unless $flag =~ /^[a-zA-Z0-9_-]+$/;
- $defs{$flag} = $value;
- } elsif (/^-/) {
- usage();
- } else {
- $in = $_, next unless defined $in;
- $out = $_, next unless defined $out;
- usage();
- }
-}
-
-if (defined $in) {
- $inf = gensym();
- open($inf, "<$in") or die "opening \"$in\": $!\n";
- $ibase = $1 if $in =~ m|^(.+)/[^/]+$|;
-} else {
- $inf = \*STDIN;
-}
-
-if (defined $out) {
- open(STDOUT, ">$out") or die "opening \"$out\": $!\n";
-}
-
-while(defined $inf) {
-while(<$inf>) {
- # Certain commands are discarded without further processing.
- /^\@(?:
- [a-z]+index # @*index: useful only in complete manual
- |need # @need: useful only in printed manual
- |(?:end\s+)?group # @group .. @end group: ditto
- |page # @page: ditto
- |node # @node: useful only in .info file
- |(?:end\s+)?ifnottex # @ifnottex .. @end ifnottex: use contents
- )\b/x and next;
-
- chomp;
-
- # Look for filename and title markers.
- /^\@setfilename\s+([^.]+)/ and $fn = $1, next;
- /^\@settitle\s+([^.]+)/ and $tl = postprocess($1), next;
-
- # Identify a man title but keep only the one we are interested in.
- /^\@c\s+man\s+title\s+([A-Za-z0-9-]+)\s+(.+)/ and do {
- if (exists $defs{$1}) {
- $fn = $1;
- $tl = postprocess($2);
- }
- next;
- };
-
- # Look for blocks surrounded by @c man begin SECTION ... @c man end.
- # This really oughta be @ifman ... @end ifman and the like, but such
- # would require rev'ing all other Texinfo translators.
- /^\@c\s+man\s+begin\s+([A-Z]+)\s+([A-Za-z0-9-]+)/ and do {
- $output = 1 if exists $defs{$2};
- $sect = $1;
- next;
- };
- /^\@c\s+man\s+begin\s+([A-Z]+)/ and $sect = $1, $output = 1, next;
- /^\@c\s+man\s+end/ and do {
- $sects{$sect} = "" unless exists $sects{$sect};
- $sects{$sect} .= postprocess($section);
- $section = "";
- $output = 0;
- next;
- };
-
- # handle variables
- /^\@set\s+([a-zA-Z0-9_-]+)\s*(.*)$/ and do {
- $defs{$1} = $2;
- next;
- };
- /^\@clear\s+([a-zA-Z0-9_-]+)/ and do {
- delete $defs{$1};
- next;
- };
-
- next unless $output;
-
- # Discard comments. (Can't do it above, because then we'd never see
- # @c man lines.)
- /^\@c\b/ and next;
-
- # End-block handler goes up here because it needs to operate even
- # if we are skipping.
- /^\@end\s+([a-z]+)/ and do {
- # Ignore @end foo, where foo is not an operation which may
- # cause us to skip, if we are presently skipping.
- my $ended = $1;
- next if $skipping && $ended !~ /^(?:ifset|ifclear|ignore|menu|iftex)$/;
-
- die "\@end $ended without \@$ended at line $.\n" unless defined $endw;
- die "\@$endw ended by \@end $ended at line $.\n" unless $ended eq $endw;
-
- $endw = pop @endwstack;
-
- if ($ended =~ /^(?:ifset|ifclear|ignore|menu|iftex)$/) {
- $skipping = pop @skstack;
- next;
- } elsif ($ended =~ /^(?:example|smallexample|display)$/) {
- $shift = "";
- $_ = ""; # need a paragraph break
- } elsif ($ended =~ /^(?:itemize|enumerate|[fv]?table)$/) {
- $_ = "\n=back\n";
- $ic = pop @icstack;
- } else {
- die "unknown command \@end $ended at line $.\n";
- }
- };
-
- # We must handle commands which can cause skipping even while we
- # are skipping, otherwise we will not process nested conditionals
- # correctly.
- /^\@ifset\s+([a-zA-Z0-9_-]+)/ and do {
- push @endwstack, $endw;
- push @skstack, $skipping;
- $endw = "ifset";
- $skipping = 1 unless exists $defs{$1};
- next;
- };
-
- /^\@ifclear\s+([a-zA-Z0-9_-]+)/ and do {
- push @endwstack, $endw;
- push @skstack, $skipping;
- $endw = "ifclear";
- $skipping = 1 if exists $defs{$1};
- next;
- };
-
- /^\@(ignore|menu|iftex)\b/ and do {
- push @endwstack, $endw;
- push @skstack, $skipping;
- $endw = $1;
- $skipping = 1;
- next;
- };
-
- next if $skipping;
-
- # Character entities. First the ones that can be replaced by raw text
- # or discarded outright:
- s/\@copyright\{\}/(c)/g;
- s/\@dots\{\}/.../g;
- s/\@enddots\{\}/..../g;
- s/\@([.!? ])/$1/g;
- s/\@[:-]//g;
- s/\@bullet(?:\{\})?/*/g;
- s/\@TeX\{\}/TeX/g;
- s/\@pounds\{\}/\#/g;
- s/\@minus(?:\{\})?/-/g;
- s/\\,/,/g;
-
- # Now the ones that have to be replaced by special escapes
- # (which will be turned back into text by unmunge())
- s/&/&amp;/g;
- s/\@\{/&lbrace;/g;
- s/\@\}/&rbrace;/g;
- s/\@\@/&at;/g;
-
- # Inside a verbatim block, handle @var specially.
- if ($shift ne "") {
- s/\@var\{([^\}]*)\}/<$1>/g;
- }
-
- # POD doesn't interpret E<> inside a verbatim block.
- if ($shift eq "") {
- s/</&lt;/g;
- s/>/&gt;/g;
- } else {
- s/</&LT;/g;
- s/>/&GT;/g;
- }
-
- # Single line command handlers.
-
- /^\@include\s+(.+)$/ and do {
- push @instack, $inf;
- $inf = gensym();
-
- # Try cwd and $ibase.
- open($inf, "<" . $1)
- or open($inf, "<" . $ibase . "/" . $1)
- or die "cannot open $1 or $ibase/$1: $!\n";
- next;
- };
-
- /^\@(?:section|unnumbered|unnumberedsec|center)\s+(.+)$/
- and $_ = "\n=head2 $1\n";
- /^\@subsection\s+(.+)$/
- and $_ = "\n=head3 $1\n";
-
- # Block command handlers:
- /^\@itemize\s+(\@[a-z]+|\*|-)/ and do {
- push @endwstack, $endw;
- push @icstack, $ic;
- $ic = $1;
- $_ = "\n=over 4\n";
- $endw = "itemize";
- };
-
- /^\@enumerate(?:\s+([a-zA-Z0-9]+))?/ and do {
- push @endwstack, $endw;
- push @icstack, $ic;
- if (defined $1) {
- $ic = $1 . ".";
- } else {
- $ic = "1.";
- }
- $_ = "\n=over 4\n";
- $endw = "enumerate";
- };
-
- /^\@([fv]?table)\s+(\@[a-z]+)/ and do {
- push @endwstack, $endw;
- push @icstack, $ic;
- $endw = $1;
- $ic = $2;
- $ic =~ s/\@(?:samp|strong|key|gcctabopt|env)/B/;
- $ic =~ s/\@(?:code|kbd)/C/;
- $ic =~ s/\@(?:dfn|var|emph|cite|i)/I/;
- $ic =~ s/\@(?:file)/F/;
- $_ = "\n=over 4\n";
- };
-
- /^\@((?:small)?example|display)/ and do {
- push @endwstack, $endw;
- $endw = $1;
- $shift = "\t";
- $_ = ""; # need a paragraph break
- };
-
- /^\@itemx?\s*(.+)?$/ and do {
- if (defined $1) {
- # Entity escapes prevent munging by the <> processing below.
- $_ = "\n=item $ic\&LT;$1\&GT;\n";
- } else {
- $_ = "\n=item $ic\n";
- $ic =~ y/A-Ya-y/B-Zb-z/;
- $ic =~ s/(\d+)/$1 + 1/eg;
- }
- };
-
- $section .= $shift.$_."\n";
-}
-# End of current file.
-close($inf);
-$inf = pop @instack;
-}
-
-die "No filename or title\n" unless defined $fn && defined $tl;
-
-$sects{NAME} = "$fn \- $tl\n";
-$sects{FOOTNOTES} .= "=back\n" if exists $sects{FOOTNOTES};
-
-for $sect (qw(NAME SYNOPSIS DESCRIPTION OPTIONS ENVIRONMENT FILES
- BUGS NOTES FOOTNOTES SEEALSO AUTHOR COPYRIGHT)) {
- if(exists $sects{$sect}) {
- $head = $sect;
- $head =~ s/SEEALSO/SEE ALSO/;
- print "=head1 $head\n\n";
- print scalar unmunge ($sects{$sect});
- print "\n";
- }
-}
-
-sub usage
-{
- die "usage: $0 [-D toggle...] [infile [outfile]]\n";
-}
-
-sub postprocess
-{
- local $_ = $_[0];
-
- # @value{foo} is replaced by whatever 'foo' is defined as.
- while (m/(\@value\{([a-zA-Z0-9_-]+)\})/g) {
- if (! exists $defs{$2}) {
- print STDERR "Option $2 not defined\n";
- s/\Q$1\E//;
- } else {
- $value = $defs{$2};
- s/\Q$1\E/$value/;
- }
- }
-
- # Formatting commands.
- # Temporary escape for @r.
- s/\@r\{([^\}]*)\}/R<$1>/g;
- s/\@(?:dfn|var|emph|cite|i)\{([^\}]*)\}/I<$1>/g;
- s/\@(?:code|kbd)\{([^\}]*)\}/C<$1>/g;
- s/\@(?:gccoptlist|samp|strong|key|option|env|command|b)\{([^\}]*)\}/B<$1>/g;
- s/\@sc\{([^\}]*)\}/\U$1/g;
- s/\@file\{([^\}]*)\}/F<$1>/g;
- s/\@w\{([^\}]*)\}/S<$1>/g;
- s/\@(?:dmn|math)\{([^\}]*)\}/$1/g;
-
- # Cross references are thrown away, as are @noindent and @refill.
- # (@noindent is impossible in .pod, and @refill is unnecessary.)
- # @* is also impossible in .pod; we discard it and any newline that
- # follows it. Similarly, our macro @gol must be discarded.
-
- s/\(?\@xref\{(?:[^\}]*)\}(?:[^.<]|(?:<[^<>]*>))*\.\)?//g;
- s/\s+\(\@pxref\{(?:[^\}]*)\}\)//g;
- s/;\s+\@pxref\{(?:[^\}]*)\}//g;
- s/\@noindent\s*//g;
- s/\@refill//g;
- s/\@gol//g;
- s/\@\*\s*\n?//g;
-
- # @uref can take one, two, or three arguments, with different
- # semantics each time. @url and @email are just like @uref with
- # one argument, for our purposes.
- s/\@(?:uref|url|email)\{([^\},]*)\}/&lt;B<$1>&gt;/g;
- s/\@uref\{([^\},]*),([^\},]*)\}/$2 (C<$1>)/g;
- s/\@uref\{([^\},]*),([^\},]*),([^\},]*)\}/$3/g;
-
- # Un-escape <> at this point.
- s/&LT;/</g;
- s/&GT;/>/g;
-
- # Now un-nest all B<>, I<>, R<>. Theoretically we could have
- # indefinitely deep nesting; in practice, one level suffices.
- 1 while s/([BIR])<([^<>]*)([BIR])<([^<>]*)>/$1<$2>$3<$4>$1</g;
-
- # Replace R<...> with bare ...; eliminate empty markup, B<>;
- # shift white space at the ends of [BI]<...> expressions outside
- # the expression.
- s/R<([^<>]*)>/$1/g;
- s/[BI]<>//g;
- s/([BI])<(\s+)([^>]+)>/$2$1<$3>/g;
- s/([BI])<([^>]+?)(\s+)>/$1<$2>$3/g;
-
- # Extract footnotes. This has to be done after all other
- # processing because otherwise the regexp will choke on formatting
- # inside @footnote.
- while (/\@footnote/g) {
- s/\@footnote\{([^\}]+)\}/[$fnno]/;
- add_footnote($1, $fnno);
- $fnno++;
- }
-
- return $_;
-}
-
-sub unmunge
-{
- # Replace escaped symbols with their equivalents.
- local $_ = $_[0];
-
- s/&lt;/E<lt>/g;
- s/&gt;/E<gt>/g;
- s/&lbrace;/\{/g;
- s/&rbrace;/\}/g;
- s/&at;/\@/g;
- s/&amp;/&/g;
- return $_;
-}
-
-sub add_footnote
-{
- unless (exists $sects{FOOTNOTES}) {
- $sects{FOOTNOTES} = "\n=over 4\n\n";
- }
-
- $sects{FOOTNOTES} .= "=item $fnno.\n\n"; $fnno++;
- $sects{FOOTNOTES} .= $_[0];
- $sects{FOOTNOTES} .= "\n\n";
-}
-
-# stolen from Symbol.pm
-{
- my $genseq = 0;
- sub gensym
- {
- my $name = "GEN" . $genseq++;
- my $ref = \*{$name};
- delete $::{$name};
- return $ref;
- }
-}
diff --git a/lang/tcc/pkg-plist b/lang/tcc/pkg-plist
index dd2374fe303c..38342126a965 100644
--- a/lang/tcc/pkg-plist
+++ b/lang/tcc/pkg-plist
@@ -1,16 +1,26 @@
bin/tcc
include/libtcc.h
lib/libtcc.a
-%%I386%%lib/tcc/bcheck.o
lib/tcc/include/float.h
lib/tcc/include/stdarg.h
lib/tcc/include/stdbool.h
lib/tcc/include/stddef.h
lib/tcc/include/tcclib.h
lib/tcc/include/varargs.h
+lib/tcc/bcheck.o
lib/tcc/libtcc1.a
man/man1/tcc.1.gz
+share/info/tcc-doc.info
+share/man/man1/tcc.1
@dirrm lib/tcc/include
@dirrm lib/tcc
+@dirrmtry share/info
+@dirrmtry share/man/man1
+@dirrmtry share/man
%%PORTDOCS%%%%DOCSDIR%%/tcc-doc.html
-%%PORTDOCS%%@dirrm %%DOCSDIR%%
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/ex1.c
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/ex2.c
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/ex3.c
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/ex4.c
+%%PORTEXAMPLES%%%%EXAMPLESDIR%%/ex5.c
+%%PORTEXAMPLES%%@dirrmtry %%EXAMPLESDIR%%