Can I precompile adv3 library?

Sorry if this is a really basic question! Is there a way to modify my .t3m file and/or compiling options so that I don’t need to rebuild the adv3 library files on every single build?
Revealing my ignorance of how the underlying data works, if the adv3 library can be precompiled, will ‘modify’ and ‘replace’ within my own source files still have the normal effects?


Unless you have used that specific parameter to always rebuild object files (-a I believe), this should happen per default.

But I have had the issue (and several others in this forum) where the compiler (t3make) on a Mac always rebuilds all files anyway. In my case it only helped to reinstall the os unfortunately.

Have you set the -Fo parameter and created an obj directory by the way? It might help if you provide your current t3m file.

Something like this:

-o game.t3
-Fy obj
-Fo obj

-lib system
-lib adv3/adv3
-source game.t

Tomas, thanks for weighing in. I’ve been typing this command line:

t3make -d -v -f game.t3m

And here’s my makefile:

-Fy obj 
-Fo obj
-o Game.t3
-lib system
-lib adv3/adv3
-source game.t

If it is supposed to only compile changed files by default, I’m pretty definitely sure that’s not what it’s doing right now, the compiler takes several seconds per build and scrolls through a long list of files. Thanks for any help!

Here is the build output:

Last login: Mon Aug 3 09:43:06 on ttys000

/Users/johnrebekah/Programming/TADS/PrinceQ/princeq.command ; exit;

Johns-MacBook-Air:~ johnrebekah$ /Users/johnrebekah/Programming/TADS/PrinceQ/princeq.command ; exit;

TADS Compiler 3.1.3 Copyright 1999, 2012 Michael J. Roberts

Files to build: 121

symbol_export /usr/local/share/frobtads/tads3/lib/_main.t -> obj/_main.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/file.t -> obj/file.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/tok.t -> obj/tok.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/gramprod.t -> obj/gramprod.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/multmeth.t -> obj/multmeth.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/action.t -> obj/action.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/actions.t -> obj/actions.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/actor.t -> obj/actor.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/banner.t -> obj/banner.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/console.t -> obj/console.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/disambig.t -> obj/disambig.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/events.t -> obj/events.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/exec.t -> obj/exec.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/exits.t -> obj/exits.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/extras.t -> obj/extras.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/footnote.t -> obj/footnote.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/hintsys.t -> obj/hintsys.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/input.t -> obj/input.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/lister.t -> obj/lister.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/menusys.t -> obj/menusys.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/menucon.t -> obj/menucon.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/misc.t -> obj/misc.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/modid.t -> obj/modid.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/numbers.t -> obj/numbers.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/objects.t -> obj/objects.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/output.t -> obj/output.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/parser.t -> obj/parser.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/pov.t -> obj/pov.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/precond.t -> obj/precond.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/report.t -> obj/report.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/resolver.t -> obj/resolver.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/score.t -> obj/score.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/sense.t -> obj/sense.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/settings.t -> obj/settings.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/status.t -> obj/status.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/tips.t -> obj/tips.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/thing.t -> obj/thing.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/travel.t -> obj/travel.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/verify.t -> obj/verify.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/en_us/en_us.t -> obj/en_us.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/en_us/instruct.t -> obj/instruct.t3s

symbol_export /usr/local/share/frobtads/tads3/lib/adv3/en_us/msg_neu.t -> obj/msg_neu.t3s

symbol_export SimpleAttachable.t -> obj/SimpleAttachable.t3s

symbol_export TCommand.t -> obj/TCommand.t3s

symbol_export GiveToAskFor.t -> obj/GiveToAskFor.t3s

symbol_export princeq.t -> obj/princeq.t3s

symbol_export testing.t -> obj/testing.t3s

symbol_export verbs.t -> obj/verbs.t3s

symbol_export quisborne.t -> obj/quisborne.t3s

symbol_export characters.t -> obj/characters.t3s

symbol_export portables.t -> obj/portables.t3s

symbol_export warmup.t -> obj/warmup.t3s

symbol_export frapunzel.t -> obj/frapunzel.t3s

symbol_export monast-fast.t -> obj/monast-fast.t3s

symbol_export princeq2.t -> obj/princeq2.t3s

symbol_export princeq3.t -> obj/princeq3.t3s

symbol_export princeq4.t -> obj/princeq4.t3s

symbol_export princeq5.t -> obj/princeq5.t3s

symbol_export princeq6.t -> obj/princeq6.t3s

symbol_export princeq7.t -> obj/princeq7.t3s

compile /usr/local/share/frobtads/tads3/lib/_main.t -> obj/_main.t3o

compile /usr/local/share/frobtads/tads3/lib/file.t -> obj/file.t3o

compile /usr/local/share/frobtads/tads3/lib/tok.t -> obj/tok.t3o

compile /usr/local/share/frobtads/tads3/lib/gramprod.t -> obj/gramprod.t3o

compile /usr/local/share/frobtads/tads3/lib/multmeth.t -> obj/multmeth.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/action.t -> obj/action.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/actions.t -> obj/actions.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/actor.t -> obj/actor.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/banner.t -> obj/banner.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/console.t -> obj/console.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/disambig.t -> obj/disambig.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/events.t -> obj/events.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/exec.t -> obj/exec.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/exits.t -> obj/exits.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/extras.t -> obj/extras.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/footnote.t -> obj/footnote.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/hintsys.t -> obj/hintsys.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/input.t -> obj/input.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/lister.t -> obj/lister.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/menusys.t -> obj/menusys.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/menucon.t -> obj/menucon.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/misc.t -> obj/misc.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/modid.t -> obj/modid.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/numbers.t -> obj/numbers.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/objects.t -> obj/objects.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/output.t -> obj/output.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/parser.t -> obj/parser.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/pov.t -> obj/pov.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/precond.t -> obj/precond.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/report.t -> obj/report.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/resolver.t -> obj/resolver.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/score.t -> obj/score.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/sense.t -> obj/sense.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/settings.t -> obj/settings.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/status.t -> obj/status.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/tips.t -> obj/tips.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/thing.t -> obj/thing.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/travel.t -> obj/travel.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/verify.t -> obj/verify.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/en_us/en_us.t -> obj/en_us.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/en_us/instruct.t -> obj/instruct.t3o

compile /usr/local/share/frobtads/tads3/lib/adv3/en_us/msg_neu.t -> obj/msg_neu.t3o

compile SimpleAttachable.t -> obj/SimpleAttachable.t3o

compile TCommand.t -> obj/TCommand.t3o

compile GiveToAskFor.t -> obj/GiveToAskFor.t3o

compile princeq.t -> obj/princeq.t3o

compile testing.t -> obj/testing.t3o

compile verbs.t -> obj/verbs.t3o

compile quisborne.t -> obj/quisborne.t3o

compile characters.t -> obj/characters.t3o

compile portables.t -> obj/portables.t3o

compile warmup.t -> obj/warmup.t3o

compile monast-fast.t -> obj/monast-fast.t3o

compile princeq2.t -> obj/princeq2.t3o

compile princeq3.t -> obj/princeq3.t3o

compile princeq4.t -> obj/princeq4.t3o

compile princeq5.t -> obj/princeq5.t3o

compile princeq6.t -> obj/princeq6.t3o

compile princeq7.t -> obj/princeq7.t3o

link -> PrinceQuisborne.t3


Saving session...

...copying shared history...

...saving history...truncating history files...


[Process completed]

Have you seen this thread? It seems related since you’re trying this on a Mac. There’s a solution there but it didn’t work for me.

I had not seen that thread, but it sounded like at the end, there was no definite solution. Maybe it’s just an unresolved issue on Mac systems? I also don’t know how to check if Endpoint is something active in my system. FileVault appears under my security settings, but it’s turned off.
Thanks for taking the time to answer…

Seems like it, my only experience of this is that worked with an older macOS but the one I had a couple of releases ago of the macOS (1-2 years ago) caused the bug, but it disappeared when I did a complete reinstallation some months ago. I hope there is someone with more insight of this that can respond. Otherwise it seems like a lead to see if the t3m file’s modification date keeps changing each build as it seems that could trigger a complete rebuild. If so, maybe you could try to write protect it… it’s an ugly workaround but maybe can make life a bit easier if it works.

I have had FileVault turned on for my Macs for the past three years or so. It definitely doesn’t affect filesystem mod dates. If it did, it would screw up Makefiles and many other sorts of build tools.

Is TADS maybe looking at the ctime (metadata change time) as well as the mtime? That would be a bizarre decision, but it might lead to this sort of problem.

EDIT-ADD: Nope, can’t see any sign of that in the source. It relies entirely on mod_time.

I tried to turn off write access to the t3m file… didn’t fix it. I guess short of trying a new operating system install I’ll just have to spend an extra half-hour or so of my life watching the compiler window scroll down… Thanks again for suggestions…

Good news! I think I found what the problem was and a workaround for it. I was using an older version of macos before but upgraded recently to the latest and got this issues back again. This time I thought I should investigate it a little further. I started suspecting it had something to do with accessing the global folder "/usr/local/share/frobtads/tads3/" and it turned out that was right. If you for instance do a clean copy of the whole tads3 folder just mentioned to your home folder and then prefix all your search paths in your Makefile.t3m file with /Users//tads3, e.g:

-lib /Users/<youruserid>/tads3/lib/system
-lib /Users/<youruserid>/tads3/lib/adv3Lite/adv3Lite

then the compile issues will go away! (At least they did on my machine.)

I’m guessing this has to do with some level up in security aspects of accessing folders from applications that’s been introduced in newer MacOS versions.

Please let me know if it works out for you too.


1 Like

Tomas, thanks for this info! I haven’t tried it yet but I would be so excited if this works! I’ll let you know!

Yes!! This is one of the best Christmas presents I’ve gotten this year! :slight_smile: Wow, I could not count how many hundreds if not 1000+ times I’ve recompiled the whole adv3 library and all my source files for every little change-and-test over the last year and a half! Thank you Tomas! Watching my game recompile almost instantly is practically beyond belief. Please accept a virtual hug of gratitude!

1 Like

Glad to hear it! Virtual hug accepted! Now I just hope everone else who have had these issues will come across this post, and hopefully someone knows what’s up with the latest macos:es and what to do about “/usr/local/”.

The one thing one could do if compiling frobtads locally is to set the -DCMAKE_INSTALL_PREFIX="/Users/username" (or some other global directory that’s not causing problems) instead of the default “/usr/local”. But if if installing with homebrew I guess the formula needs to be changed. (Actually I don’t like the idea of curing the symptom of the problem but I guess this extra step is the fastest way forward for now.) I’ll add this issue to the frobtads git repository as well.

1 Like

The second paragraph is over my head with my current computer knowledge, but thanks again for the fix and happy new year!

1 Like

Happy new year!