Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | update XOTcl to version 1.6.8 |
---|---|
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
928d865dd19dd11a008adb90dd01389d |
User & Date: | chw 2016-11-15 06:03:19.777 |
Context
2016-11-16
| ||
05:56 | add nsf and xotcl to [undroidwish] build check-in: 6718184d53 user: chw tags: trunk | |
2016-11-15
| ||
06:03 | update XOTcl to version 1.6.8 check-in: 928d865dd1 user: chw tags: trunk | |
2016-11-14
| ||
15:42 | add tcl upstream changes check-in: 40b3121ca9 user: chw tags: trunk | |
Changes
Deleted assets/xotcl1.6.7/actiweb/Agent.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/actiweb/AgentManagement.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/actiweb/COPYRIGHT.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/actiweb/HtmlPlace.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/actiweb/HttpPlace.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/actiweb/Invoker.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/actiweb/PlaceAccessControl.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/actiweb/SecureHtmlPlace.xotcl.
|
| < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/actiweb/SecureHttpPlace.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/actiweb/SendStrategy.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/actiweb/UserMgt.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/actiweb/WebAgent.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/actiweb/WebDocument.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/actiweb/WebObject.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/actiweb/cacert.pem.
|
| < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/actiweb/pageTemplate.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/actiweb/pkgIndex.tcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/comm/Access.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/comm/COPYRIGHT.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/comm/Connection.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/comm/Dav.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/comm/Ftp.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/comm/Httpd.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/comm/Imap.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/comm/Ldap.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/comm/Mime.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/comm/PCache.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/comm/pkgIndex.tcl.
|
| < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/lib/COPYRIGHT.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/lib/Script.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/lib/changeXOTclVersion.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/lib/htmllib.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/lib/make.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/lib/makeDoc.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/lib/metadataAnalyzer.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/lib/mixinStrategy.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/lib/package.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/lib/pkgIndex-package.add.
|
| < |
Deleted assets/xotcl1.6.7/lib/pkgIndex.tcl.
|
| < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/lib/staticMetadata.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/lib/test.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/lib/trace.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/lib/upvarcompat.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/lib/wafecompat.tcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/lib/xodoc.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/patterns/COPYRIGHT.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/patterns/ChainOfResponsibility.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/patterns/OnCalleeProxy.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/patterns/Singleton.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/patterns/SortedComposite.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/patterns/adapter.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/patterns/composite.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/patterns/link.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/patterns/manager.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/patterns/observer.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/patterns/pkgIndex.tcl.
|
| < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/pkgIndex.tcl.
|
| < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/rdf/COPYRIGHT.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/rdf/RDFCreator.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/rdf/RDFTriple.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/rdf/pkgIndex.tcl.
|
| < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/rdf/rdfRecreatorVisitor.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/rdf/xoRDF.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/registry/COPYRIGHT.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/registry/Registry.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/registry/pkgIndex.tcl.
|
| < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/serialize/COPYRIGHT.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/serialize/RecoveryPoint.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/serialize/ScriptCreator.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/serialize/Serializer.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/serialize/pkgIndex.tcl.
|
| < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/store/COPYRIGHT.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/store/JufGdbmStorage.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/store/MemStorage.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/store/MultiStorage.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/store/Persistence.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/store/Storage.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/store/TclGdbmStorage.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/store/TextFileStorage.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/store/persistenceExample.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/store/pkgIndex-subdir.add.
|
| < < < < < < < < < < |
Deleted assets/xotcl1.6.7/store/pkgIndex.tcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/xml/COPYRIGHT.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/xml/pkgIndex.tcl.
|
| < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/xml/printVisitor.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/xml/sgml.tcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/xml/xml.tcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/xml/xml.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/xml/xmlRecreatorVisitor.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted assets/xotcl1.6.7/xml/xoXML.xotcl.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Added assets/xotcl1.6.8/COPYRIGHT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen * Specification of Software Systems * Altendorferstraße 97-101 * D-45143 Essen, Germany * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this permission * notice appear in supporting documentation. We make no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied * warranty. * * * This software is based upon MIT Object Tcl by David Wetherall and * Christopher J. Lindblad, that contains the following copyright * message: * * "Copyright 1993 Massachusetts Institute of Technology * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this * permission notice appear in supporting documentation, and that * the name of M.I.T. not be used in advertising or publicity * pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about * the suitability of this software for any purpose. It is * provided "as is" without express or implied warranty." |
Added assets/xotcl1.6.8/actiweb/Agent.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 | # $Id: Agent.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ package provide xotcl::actiweb::agent 1.0 package require -exact xotcl::trace 1.0 package require -exact xotcl::comm::httpAccess 1.0 package require -exact xotcl::actiweb::webObject 1.0 package require -exact xotcl::store::persistence 1.0 package require XOTcl 1 # # current response codes for agent requests: # # OK -- content arrived (can be retrieved with sinks content method) # ERROR -- error on the place invocation # FAILED -- call itself failed, e.g. cancel # namespace eval ::xotcl::actiweb::agent { namespace import ::xotcl::* Class AgentMemSink \ -superclass MemorySink \ -parameter {{agent ""} responseCode} AgentMemSink instproc startCb {r} { my set d "" next } AgentMemSink instproc notifyCb {r} {next} AgentMemSink instproc incCb {r t c} {next} AgentMemSink instproc endCb {r} { if {[Agent exists responseCodes([$r set responseCode])]} { my set responseCode OK } else { my set responseCode ERROR } next } AgentMemSink instproc cancelCb {r} { my set responseCode FAILED next } AgentMemSink instproc endReq {r} { my instvar agent if {[Object isobject $agent]} { if {[$agent exists sinks($r)]} { $agent unset sinks($r) } } } # sink class that calls the agent's endcmd in async calls # the sink is destroyed automatically after endCmd is called Class AgentAsyncSink -superclass AgentMemSink AgentAsyncSink instproc endCb {r} { next my instvar endCmd responseCode set result [my content] if {[info exists endCmd]} { eval [concat $endCmd $responseCode \"$result\"] } my endReq $r } AgentAsyncSink instproc cancelCb {r} { my instvar endCmd responseCode if {[info exists endCmd]} { eval [concat $endCmd $responseCode ""] } next my endReq $r } # sink type for sync request # has to be destroyed with endReq when content is # read (see createSyncRequest) Class AgentSyncSink -superclass AgentMemSink Class Agent -superclass WebObject Agent array set responseCodes { 200 {OK} } Agent instproc init args { #my showCall #my exportProcs invoke my array set endCmds {} my array set sinks {} next } # # method to create async requests # # endCmd specifies the command (or object method or proc ...) that # is to be called, when the request has ended, empty for sync requests # # args are to be given in the form -name value, like: # -contentType text/xml # -method PUT # -data XXX # # returns the request object name # Agent instproc createRequest {endCmd url args} { #my showCall puts stderr "[self] [self proc]" my instvar place set s [AgentAsyncSink create [$place autoname agentmemsink] \ -agent [self]] set cmd [list Access createRequest -caching 0 -url $url \ -informObject $s] foreach {n v} $args {lappend cmd $n $v} $s set endCmd $endCmd set t ::[string trimleft [::eval $cmd $args] :] my set sinks($t) $s return $t } # # method to create sync reqs ... url and args identical to # async req # # returns the result of sync request, if "OK" # otherwise: Raises an error # Agent instproc createSyncRequest {url args} { #my showCall puts stderr "[self] [self proc]" my instvar place set s [AgentSyncSink [$place autoname agentmemsink] -agent [self]] set cmd [list Access createRequest \ -httpVersion 1.0 \ -caching 0 -url $url -informObject $s -blocking 1] foreach {n v} $args {lappend cmd $n $v} set t ::[string trimleft [::eval $cmd] :] #puts stderr "After SyncRequest t=$t [$s responseCode]" if {[$s responseCode] eq "OK"} { set content [$s content] # kill the sink $s endReq $t return $content } $s endReq $t error "[self] -- Sync request failed: url=$url, responseCode=[$s responseCode]" } # # invoke a remote method directly along the places' dispatcher # Agent instproc invoke {endCmd host receiver args} { puts stderr [self proc]----host=$host #my showCall set url http://$host/${receiver}+[url encode $args] my createRequest $endCmd $url } Agent instproc syncInvoke {host receiver args} { puts stderr [self proc]----host=$host #[self] showCall set url http://$host/${receiver}+[url encode $args] my createSyncRequest $url } # # invoke a cloning migration # Agent instproc cloneImpl {async host startcmd {endCmd ""}} { #my showCall set ai [my agentInfo] set place [Place getInstance] # get the full name of the agent ns from the places's agent mgr #set ns [${place}::agentMgr::rdfNS searchPrefix agent] $ai set agentData(script) [${place}::scriptCreator makeScript [self]] $ai append agentData(script) [my makeVarScript] $ai set agentData(startcmd) $startcmd set data [$ai getXMLScript [$ai name]] ###puts $data #set data [[Place getInstance]::rdfCreator createFromTriples [$ai getTriples]] if {$async} { return [my createRequest $endCmd http://$host/[my selfName] \ -contentType text/xml \ -method PUT \ -data $data] } else { return [my createSyncRequest http://$host/[my selfName] \ -contentType text/xml \ -method PUT \ -data $data] } } Agent instproc clone {host startCmd endCmd} { my cloneImpl 1 $host $startCmd $endCmd } Agent instproc syncClone {host startCmd} { my cloneImpl 0 $host $startCmd } # # invoke a migration that destroys the object in the current place # Agent instproc migrateImpl {async host startcmd {endCmd ""}} { ### GN ??? puts stderr "--- async=$async" if {$async} { set r [my clone $host $startcmd $endCmd] } else { set r [my syncClone $host $startcmd] } puts stderr "--- [self] destroy +++ " my destroy ;### FIXME: this does not work in the asynchronous case return $r } Agent instproc migrate {host startCmd endCmd} { #my migrateImpl 1 $host $startCmd $endCmd my migrateImpl 0 $host $startCmd $endCmd } Agent instproc syncMigrate {host startCmd} { my migrateImpl 0 $host $startCmd } # # query a place with its hostname for its name # Agent instproc getPlaceFromHostName {endCb host} { set r [my autoname __result] my createRequest "[self]::$r set" http://$host/ return [set [self]::$r] } namespace export AgentMemSink AgentAsyncSink AgentSyncSink Agent } namespace import ::xotcl::actiweb::agent::* |
Added assets/xotcl1.6.8/actiweb/AgentManagement.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 | # $Id: AgentManagement.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ package provide xotcl::actiweb::agentManagement 1.0 package require -exact xotcl::rdf::parser 1.0 package require -exact xotcl::rdf::triple 1.0 package require -exact xotcl::actiweb::agent 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::agentManagement { namespace import ::xotcl::* Class AgentInfo -parameter { {name ""} {changed 1} } AgentInfo instproc init args { next # # array providing info on a (migrated) agent # my array set agentData {} RDFTripleDB [self]::db my trace variable agentData w [list [self] changeOccured] my trace variable name w [list [self] changeOccured] } AgentInfo instproc getXMLScript {name} { #my showCall set s {<?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xotcl="http://www.xotcl.org/agent"> <rdf:Description about="$name">} set s [subst -nobackslashes $s] foreach n [my array name agentData] { append s " <agent:$n> [my set agentData($n)] </agent:$n>" } append s " </rdf:Description> </rdf:RDF>" } AgentInfo instproc changeOccured args {my set changed 1} AgentInfo instproc getTriples {} { #my showCall if {[my set changed]} { # build up the triple-db [self]::db reset set place [Place getInstance] set subject "http://[$place set host]:[$place set port]/[my name]" foreach n [my array names agentData] { [self]::db add $n $subject [my set agentData($n)] } } return [[self]::db getTriples] } AgentInfo instproc print {} { puts "AGENT-INFO:" puts "Name == [my set name]" foreach a [my array names agentData] { puts "$a == [my set agentData($a)]" } } Class AgentVisitor -superclass NodeTreeVisitor -parameter { {openProperty ""} {agentInfo ""} {rdfNS {[my info parent]::rdfNS}} } AgentVisitor instproc fullName {obj n} { set ns [$obj resolveNS] return [$ns getFullName $n] } AgentVisitor instproc visit {objName} { #puts stderr "AgentVisitor visit -- $objName" set ai [my set agentInfo] set cl [$objName info class] #puts stderr "AgentVisitor visit -- $objName cl=$cl <[$ai name]>" if {[$ai name] eq ""} { #### not fixed yet puts stderr "my fixme (AgentManagement)" if {$cl eq "::About" && [string first "::Description" [[$objName info parent] info class]] == 0} { $ai name [$objName set content] } } else { #puts stderr C=<[$objName content]> #$cl showVars switch -exact $cl { ::RDFProperty { set c [$objName content] #$objName showVars if {[$objName exists pcdata]} { $ai set agentData($c) [lindex [$objName getPCdataList] 0] } else { #puts stderr "empty PCDATA" } } } } } AgentVisitor instproc interpretNodeTree node { if {[my set agentInfo] eq "" } { error "Agent Visitor: no agent info provided." } $node accept [self] } Class AgentMgr -superclass Agent \ -parameter { {acceptedData [list script startcmd senderPlace senderPort senderHost]} } AgentMgr instproc init args { next my array set agents {} # # this ns class holds the prefix/Rdf-ns pairs used by this # agent mgr (with default values) # XMLNamespace [self]::rdfNS [self]::rdfNS add agent {http://www.xotcl.org/schema/agent#} [self]::rdfNS add service {http://www.xotcl.org/schema/service#} [self]::rdfNS add xotcl {http://www.xotcl.org/schema/xotcl#} RDFParser [self]::rdfParser AgentVisitor [self]::agentVisitor #package require xotcl::xml::printVisitor #PrintVisitor [self]::pv } AgentMgr instproc register {name} { set ai [AgentInfo [self]::[my autoname agentInfo]] my set agents($name) $ai $ai name $name return $ai } AgentMgr instproc deregister {name} { if {[my info agents $name]} { # destroy the agents info objects #my showMsg "calling destroy on [my set agents($name)]" [my set agents($name)] destroy # unset the var my unset agents($name) } } AgentMgr instproc info args { if {[lindex $args 0] eq "agents"} { if {[llength $args] > 1} { return [my exists agents([lindex $args 1])] } else { return [my array names agents] } } next } # # parses the data of a migration request into a new agent # info object # # name must be stringleft : !! AgentMgr instproc parseData {name data} { set ai [my register $name] next [self]::rdfParser reset [self]::rdfParser parse $data #puts stderr =========================================================== #[self]::pv interpretAll [self]::rdfParser #puts stderr =========================================================== [self]::agentVisitor agentInfo $ai #foreach tn [[self]::rdfParser info children topNode*] { # [self]::agentVisitor interpretNodeTree $tn #} [self]::agentVisitor interpretAll [self]::rdfParser #puts "************** Received Agent:" #$ai print return $ai } AgentMgr instproc immigrate {AI} { #set ns [[self]::rdfNS searchPrefix agent] #::eval [$AI set agentData(${ns}script)] #puts stderr "immigrate call showVars" #$AI showVars #puts stderr "immigrate showVars done" ::eval [$AI set agentData(agent:script)] #puts stderr "immigrate persistentVars = '[[$AI name] persistentVars]'" #foreach v [[$AI name] info vars] { $n persistent $v } if {[$AI exists agentData(agent:startcmd)]} { ::after 10 [list [$AI name] [$AI set agentData(agent:startcmd)]] } return "" } namespace export AgentInfo AgentVisitor AgentMgr } namespace import ::xotcl::actiweb::agentManagement::* |
Added assets/xotcl1.6.8/actiweb/COPYRIGHT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen * Specification of Software Systems * Altendorferstraße 97-101 * D-45143 Essen, Germany * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this permission * notice appear in supporting documentation. We make no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied * warranty. * * * This software is based upon MIT Object Tcl by David Wetherall and * Christopher J. Lindblad, that contains the following copyright * message: * * "Copyright 1993 Massachusetts Institute of Technology * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this * permission notice appear in supporting documentation, and that * the name of M.I.T. not be used in advertising or publicity * pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about * the suitability of this software for any purpose. It is * provided "as is" without express or implied warranty." |
Added assets/xotcl1.6.8/actiweb/HtmlPlace.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | package provide xotcl::actiweb::htmlPlace 1.0 package require -exact xotcl::trace 1.0 package require -exact xotcl::actiweb::httpPlace 1.0 package require -exact xotcl::store::persistence 1.0 package require -exact xotcl::actiweb::agent 1.0 package require -exact xotcl::actiweb::pageTemplate 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::htmlPlace { namespace import ::xotcl::* Class HtmlPlace -superclass Place -parameter {allowExit} HtmlPlace instproc init args { next # # just define a minimal object that can react # with HTML decoration, if the called object # doesn't exist PageTemplateHtml create [self]::start.html my startingObj [self]::start.html if {[my exists allowExit]} { set exitObj [WebObject create [self]::[my set allowExit]] [Place getInstance] exportObjs $exitObj $exitObj proc default {} {after 500 ::exit; return "Server terminates"} } } HtmlPlace instproc default {} { set place [string trimleft [self] :] set msg "<HTML><TITLE>Place $place</TITLE> <BODY><H2>Place $place</H2> Try one of the following links:<UL>" foreach o [my exportedObjs] { set o [string trimleft $o :] append msg "<LI><A HREF='[url encodeItem $o]'>$o</A></LI>" } append msg "</UL></BODY>\n" } namespace export HtmlPlace } namespace import ::xotcl::actiweb::htmlPlace::* |
Added assets/xotcl1.6.8/actiweb/HttpPlace.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 | # -*- Tcl -*- package provide xotcl::actiweb::httpPlace 1.0 package require -exact xotcl::trace 1.0 package require -exact xotcl::actiweb::invoker 1.0 package require -exact xotcl::actiweb::webObject 1.0 package require -exact xotcl::comm::httpd 1.1 package require -exact xotcl::scriptCreation::scriptCreator 1.0 package require -exact xotcl::store::persistence 1.0 package require -exact xotcl::pattern::singleton 1.0 package require -exact xotcl::registry::registry 1.0 package require -exact xotcl::actiweb::agentManagement 1.0 package require -exact xotcl::rdf::tripleRecreator 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::httpPlace { namespace import ::xotcl::* Singleton Place -superclass Invoker -parameter { {exportedObjs ""} {startingObj ""} {startCommand ""} {root $::env(HOME)/public_html} {port 8086} {redirect [list]} {logdir $::xotcl::logdir} {host localhost} {allowImmigrationHosts ""} persistenceFile persistenceDir bccFile bccDir dbPackage {startHTTPServer 1} } # Giving a bccFile (and possibly bccDir) as optional parameter means # that an identical copy database will be created in that # location (e.g. for creating a backup on a second hard drive. Place instproc exportObjs args { foreach obj $args { my lappend exportedObjs [string trimleft $obj :] puts stderr "*** exporting $obj, self=[self], objs=[my set exportedObjs]" } } Place instproc isExportedObj obj { expr {[lsearch [my exportedObjs] [string trimleft $obj :]] != -1} } Place instproc default {} { [self] } Place instproc init args { if {[my set startHTTPServer]} { Httpd [self]::httpd \ -port [my port] \ -root [my root] \ -redirect [my redirect] \ -logdir [my logdir] \ -httpdWrk Place::HttpdWrk } # # PersistenceMgr object for web entities # ##### so ist das nicht toll ... init args sollten anders konfigurierbar sein PersistenceMgr [self]::agentPersistenceMgr -dbPackage multi if {[my exists dbPackage]} { set dbp [my set dbPackage] } else { set dbp "" } if {![my exists persistenceDir]} { my persistenceDir [string trimleft [self] :] } if {![my exists persistenceFile]} { my persistenceFile persistentObjs-[my port] } [self]::agentPersistenceMgr store add $dbp \ -dirName [my persistenceDir] \ -fileName [my persistenceFile] if {[my exists bccDir] || [my exists bccFile]} { if {![my exists bccDir]} { my bccDir [my set persistenceDir] } if {![my exists bccFile]} { my bccFile [my persistenceFile] } [self]::agentPersistenceMgr store add $dbp \ -dirName [my bccDir] \ -fileName [my bccFile] } AgentMgr create [self]::agentMgr RDFCreator create [self]::rdfCreator # # minimal obj for default behavior of the place -> calls go # to web entities default (customize through a redirecting proc # as in HtmlPlace or changing startingObj) # WebObject create [self]::start my startingObj [self]::start Registry [self]::registry ErrorMgr [self]::error ScriptCreator [self]::scriptCreator -dependencyChecking 0 my exportObjs [self]::start [self]::agentMgr [self]::registry next } Place instproc startEventLoop args { if {[llength $args] > 0} { set startCommand [lindex $args 0] ::eval $startCommand } vwait forever ;# if we are in xotclsh call the event loop... } ### ### Mixin-Classes for Http/Wrk that restricts the usable HTTP methods ### Class RestrictHTTPMethods -parameter { {allowedHTTPMethods "GET PUT HEAD POST CGI"} } RestrictHTTPMethods instproc init args { next my lappend workerMixins RestrictHTTPMethods::Wrk } Class RestrictHTTPMethods::Wrk RestrictHTTPMethods::Wrk instproc respond {} { my instvar method [my info parent] instvar allowedHTTPMethods if {[lsearch $allowedHTTPMethods $method] != -1} { return [next] } else { my log Error "Restricted Method $method called" my replyCode 405 my replyErrorMsg } } Class Place::HttpdWrk -superclass Httpd::Wrk Place::HttpdWrk instproc init args { my set place [Place getInstance] next #puts "New Http-Worker: [self class]->[self] on [my set place]" } Place::HttpdWrk instproc parseParams {o m a call} { upvar [self callinglevel] $o obj $m method $a args ### set decodedCall [url decodeItem $call] #my showMsg decodedCall=$decodedCall if {[regexp {^([^ ]*) ?([^ ]*) ?(.*)$} $decodedCall _ \ obj method args]} { #foreach a [my set formData] {lappend args [$a set content]} #puts stderr "Parsed -- Obj: $obj, Method: $method, Args: $args" return 1 } else { puts stderr "could not parse <$decodedCall>" return 0 } } Place::HttpdWrk instproc respond-HEAD {} { my respond-GET; ### sendMsg inhibits content for method HEAD } Place::HttpdWrk instproc respond-GET {} { my instvar fileName resourceName place if {$resourceName eq ""} { my sendMsg [$place default] text/html ;# kind of index.html } elseif {[my parseParams obj method arguments $resourceName]} { if {![my isobject $obj] && [file readable $fileName]} { next ;# let Httpd handle this } else { # # tell the object the query from the URL # $obj set query [my set query] # # If there are no arguments available through the # interface, pass the URL-query parameters (raw) # if {$arguments eq ""} {set arguments [my set query]} # # now invoke the method # set response [$place invokeCall obj status $method $arguments] #puts stderr "RESPONSE: $response" # # let the object's sending strategy mixin choose # the appropriate sending mode # # $obj showClass if {[info exists status] && $status >= 300} { my replyCode $status my replyErrorMsg $response } else { #my lappend replyHeaderFields Cache-Control maxage=0 my lappend replyHeaderFields Pragma no-cache $obj send [self] $response } } } else { my set version 1.0 my replyCode 400 my replyErrorMsg [my callError "Could not parse: " $resourceName] } } Place::HttpdWrk instproc respond-POST {} { my instvar resourceName place my respond-GET } Place::HttpdWrk instproc respond-PUT {} { my instvar resourceName place data #my showCall if {$resourceName ne ""} { if {[my parseParams obj m a $resourceName]} { set obj [string trimleft $obj :] set AMgr ${place}::agentMgr if {[info commands $obj] eq "" && ![$AMgr info agents $obj]} { #puts stderr "Receiving to put --------------------------------$obj $data" set AI [$AMgr parseData $obj $data] #puts stderr "parray --${AI}::agentData------------------------" #parray ${AI}::agentData #puts stderr "parray --${AI}::agentData----------------DONE--------" #$AI showVars #puts stderr "----[$AI exists agentData(agent:script)]----" if {[$AI exists agentData(agent:script)]} { set immigrateResult [$AMgr immigrate $AI] #puts stderr "immigrateResult=<$immigrateResult>" my replyCode 200 my sendMsg $immigrateResult text/plain } else { my set version 1.0 my replyCode 400 my replyErrorMsg "Migration failed" } } else { my set version 1.0 my replyCode 400 my replyErrorMsg "Migration: object name already in use." } } else { my set version 1.0 my replyCode 400 my replyErrorMsg "Migration call must provide object name" } } else { # return the own place name -> any client can call the place via # placename::start ! my sendMsg $place text/plain } } namespace export RestrictHTTPMethods Place namespace eval RestrictHTTPMethods { namespace export Wrk } namespace eval Place { namespace export HttpdWrk } } namespace import ::xotcl::actiweb::httpPlace::* namespace eval RestrictHTTPMethods { namespace import ::xotcl::actiweb::httpPlace::RestrictHTTPMethods::* } namespace eval Place { namespace import ::xotcl::actiweb::httpPlace::Place::* } |
Added assets/xotcl1.6.8/actiweb/Invoker.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | # $Id: Invoker.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ package provide xotcl::actiweb::invoker 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::invoker { namespace import ::xotcl::* Class AbstractInvoker AbstractInvoker abstract instproc invokeCall {o method arguments} AbstractInvoker abstract instproc eval {obj method arguments} # # error types are: tclError, invocationError # AbstractInvoker abstract instproc callError {type msg obj arguments} Class Invoker -superclass AbstractInvoker -parameter {{place [self]}} Invoker instproc handleException {response} { if {[my isExceptionObject $response]} { set exceptionObj $response switch [$exceptionObj info class] { ::RedirectException { set obj [$exceptionObj obj] set method [$exceptionObj method] set arguments [$exceptionObj arguments] set response [my eval $obj $method $arguments] } ::ErrorException { set response [$exceptionObj set errorText] } } $exceptionObj destroy } return $response } Invoker instproc invokeCall {o s method arguments} { upvar [self callinglevel] $o obj $s status my instvar place set response "" if {[$place isExportedObj $obj]} { # if method is not given -> call default on the object if {$method eq ""} { set method default } if {[$obj isExportedProc $method]} { #puts stderr "ExportedProcs of $obj: [$obj exportedProcs]" #puts stderr "Call: $obj -- $method -- $arguments" set response [my eval $obj $method $arguments] } else { #puts stderr "ExportedProcs of $obj: [$obj exportedProcs]" set response [my callError invocationError [$place startingObj] \ "Method not found or not exported" \ "$obj $method $arguments"] set status 405 } } else { set called $obj set obj [$place startingObj] set response [my callError invocationError $obj \ "Object '$called' unknown" ""] set status 404 } return [my handleException $response] } # # tests whether "name" is an exception object or not # Invoker instproc isExceptionObject name { if {[Object isobject $name] && [$name istype Exception]} { return 1 } return 0 } # # central eval -- all remote call # are invoked through this method # Invoker instproc eval {obj method arguments} { puts stderr "[clock format [clock seconds] \ -format %Y/%m/%d@%H:%M:%S] \ Eval Call: $obj $method $arguments" if {[catch { set r [::eval $obj $method $arguments] } ei]} { set r [my callError tclError $obj $ei "$obj $method $::errorInfo"] } return $r } Invoker instproc callError {type obj msg arguments} { [my set place]::error $type $obj $msg $arguments } Class ErrorMgr ErrorMgr instproc isHtml o { if {[my isobject $o]} { if {[$o exists contentType]} { if {[$o set contentType] eq "text/html"} { return 1 } } } return 0 } ErrorMgr instproc invocationError {obj msg arguments} { my showCall set ee [ErrorException [self]::[my autoname ee]] $ee instvar errorText if {[my isHtml $obj]} { set errorText "<p> invocation error: $msg" if {[llength $arguments] > 0} { append errorText ":\n<p> object: '[lindex $arguments 0]' \n" } else { append errorText \n } if {[llength $arguments] > 1} { append errorText "<p> call: '[lrange $arguments 1 end]' \n" } } else { set errorText "invocation error: $msg $arguments" } return $ee } ErrorMgr instproc tclError {obj msg arguments} { set ee [ErrorException [self]::[my autoname ee]] if {[my isHtml $obj]} { $ee errorText "<p>tcl error: '$msg' \n<code><p><pre>$arguments</pre></code>" } else { $ee errorText "tcl error: '$msg'\n$::errorInfo" } return $ee } # # exceptions in invocation behavior # Class Exception # # Execpetion that tells the invoker to redirect the call to # parameters # Class RedirectException -superclass Exception -parameter { {obj ""} {method ""} {arguments ""} } Class ErrorException -superclass Exception -parameter { {errorText ""} } namespace export AbstractInvoker \ Invoker ErrorMgr Exception \ RedirectException ErrorException } namespace import ::xotcl::actiweb::invoker::* |
Added assets/xotcl1.6.8/actiweb/PlaceAccessControl.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | package provide xotcl::actiweb::placeAccessControl 1.0 package require -exact xotcl::comm::httpd 1.1 package require -exact xotcl::actiweb::httpPlace 1.0 package require XOTcl 1 # # Simple Object Pwd Protection with BasicAccessControl # #Usage example: #ConferenceOrgPlace confPlace -port $placeport -root [pwd] \ # -mixin PlaceAccessControl # #confPlace protect conference.html [confData set password] # #confPlace setPasswd conference.html xxx namespace eval ::xotcl::actiweb::placeAccessControl { namespace import ::xotcl::* Class ObjectAccessControl -superclass BasicAccessControl ObjectAccessControl instproc protectedResource {fn method varAuthMethod varRealm} { # check whether access to $fn via $method is protected upvar [self callinglevel] $varAuthMethod authMethod $varRealm realm my instvar root # we check only the current directory, not the parent directories set call [url decodeItem $fn] regsub "^$root" $call "" call set call [string trimleft $call /] set call [string trimleft $call :] regexp {^([^ ]*)} $call _ call set call "$root/$call" foreach i [list $call $call:$method] { #puts stderr "check <$i>" if {[my exists protected($i)]} { set realm [my set protected($i)] set authMethod Basic return 1 } } return 0 } Class PlaceAccessControl PlaceAccessControl instproc init args { next [self]::httpd mixin add ObjectAccessControl [self]::httpd initWorkerMixins } PlaceAccessControl instproc protect {objName id pwd} { set objName [string trimleft $objName :] [self]::httpd protectDir $objName $objName {} if {$pwd ne ""} { my setPassword $objName $id $pwd } } PlaceAccessControl instproc credentialsNotOk {credentials authMethod realm} { #my instvar passwd #parray passwd next } PlaceAccessControl instproc setPassword {realm id pwd} { set httpd [self]::httpd if {[$httpd exists passwd($realm:$id)]} { $httpd unset passwd($realm:$id) $httpd set passwd($realm:$id) $pwd } else { $httpd addRealmEntry $realm "$id $pwd" } #$httpd set passwd($realm:admin) nimda } PlaceAccessControl instproc removeID {realm id} { set httpd [self]::httpd if {[$httpd exists passwd($realm:$id)]} { $httpd unset passwd($realm:$id) } } namespace export ObjectAccessControl PlaceAccessControl } namespace import ::xotcl::actiweb::placeAccessControl::* |
Added assets/xotcl1.6.8/actiweb/SecureHtmlPlace.xotcl.
> > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # $Id: SecureHtmlPlace.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ package provide xotcl::actiweb::secureHtmlPlace 1.0 package require -exact xotcl::actiweb::secureHttpPlace 1.0 package require -exact xotcl::actiweb::htmlPlace 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::secureHtmlPlace { namespace import ::xotcl::* Class SecureHtmlPlace -superclass {SecurePlace HtmlPlace} namespace export SecureHtmlPlace } namespace import ::xotcl::actiweb::secureHtmlPlace::* |
Added assets/xotcl1.6.8/actiweb/SecureHttpPlace.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | package provide xotcl::actiweb::secureHttpPlace 1.0 package require -exact xotcl::actiweb::httpPlace 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::secureHttpPlace { namespace import ::xotcl::* Class SecurePlace -superclass Place -parameter { {port 443} {requestCert 0} {requireValidCert 0} {certfile server.pem} {keyfile server.key} {cafile cacert.pem} {infoCb {}} } SecurePlace instproc startHttpd {} { my instvar port root requestCert requireValidCert \ certfile cafile infoCb keyfile Httpsd h1 -port $port \ -root $root \ -httpdWrk SecurePlace::HttpsdWrk \ -infoCb $infoCb \ -requestCert $requestCert \ -requireValidCert $requireValidCert \ -certfile $certfile -cafile $cafile \ -keyfile $keyfile } SecurePlace instproc init args { my set startHTTPServer 0 next [self] startHttpd } Class SecurePlace::HttpsdWrk -superclass {Httpsd::Wrk Place::HttpdWrk} namespace export SecurePlace namespace eval SecurePlace { namespace export HttpsdWrk } } namespace import ::xotcl::actiweb::secureHttpPlace::* namespace eval SecurePlace { namespace import ::xotcl::actiweb::secureHttpPlace::SecurePlace::* } |
Added assets/xotcl1.6.8/actiweb/SendStrategy.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | package provide xotcl::actiweb::sendStrategy 1.0 package require XOTcl 1 # # some simple sending strategy classes -- to be used as mixins # for web objects # namespace eval ::xotcl::actiweb::sendStrategy { namespace import ::xotcl::* Class SendStrategy SendStrategy abstract instproc send {httpWrk string} # # send the response given from the place as plain text # Class Send=PlainString -superclass SendStrategy Send=PlainString instproc send {httpWrk string} { $httpWrk sendMsg $string text/plain } # # send the response given from the place with content # type of the obj, if it exists # Class Send=TypedString -superclass SendStrategy Send=TypedString instproc send {httpWrk string} { $httpWrk sendMsg $string [my set contentType] } # # send file specified in obj's instvar filename # Class Send=File -superclass SendStrategy Send=File instproc send {httpWrk {response ""}} { if {[my exists contentType]} { $httpWrk sendFile [my set filename] [my set contentType] } else { $httpWrk sendFile [my set filename] "" } } namespace export \ SendStrategy Send=PlainString Send=TypedString Send=File } namespace import ::xotcl::actiweb::sendStrategy::* |
Added assets/xotcl1.6.8/actiweb/UserMgt.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | package provide xotcl::actiweb::userMgt 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::userMgt { namespace import ::xotcl::* Class UserMgt Class UserMgt::User -parameter {name password} UserMgt instproc addUser {name password} { [self class]::User [self]::$name -name $name -password $password } UserMgt set exportedInstprocs [list \ addUser \ listUsers \ deleteUser \ userMgtOptions\ ] UserMgt instproc init args { next my exportedProcs [concat [my exportedProcs] [[self class] set exportedInstprocs]] } UserMgt instproc listUsers {} { #showCall set users "" foreach u [my info children] { lappend users [namespace tail $u] } return $users } UserMgt instproc deleteUser {name} { if {[[self class]::User info instances [self]::$name] != ""} { [self]::$name destroy } } UserMgt instproc userMgtOptions {} { return [[self class] set exportedInstprocs] } Class UserMgtHtml -superclass HtmlRep UserMgtHtml instproc addUser args { set place [HtmlPlace getInstance] if {$args eq ""} { set action [url encodeItem "[my htmlCall] [my repObj] [self proc]"] set c { <form method=get action=$action> <p> Name: <input name="name" type=text size=30> <p> Password: <input name="password" type=password typesize=30> <p><p> <input type=submit value="Submit"> <input type=reset value="Reset"> } set c [subst -nobackslashes -nocommands $c] return [my simplePage $place "New User" $c] } else { if {[llength $args] > 1} { set name [lindex $args 0] set password [lindex $args 1] set user [[my repObj] [self proc] $name $password] set c "\n$name entered $place successfully\n" return [my simplePage "New User" "New User" $c] } else { # # error !!! } return [my [self proc]] } } UserMgtHtml instproc listUsers {} { set c "" foreach u [[my repObj] [self proc]] { append c "<p> $u \n" } return [my simplePage "User List" "User List" $c] } UserMgtHtml instproc userMgtOptions {} { set c "" foreach u [[my repObj] [self proc]] { append c "<p> <a href=[my selfAction $u]> $u </a>\n" } return [my simplePage "User Management Options" "User Management Options" $c] } namespace export UserMgt UserMgtHtml } namespace import ::xotcl::actiweb::userMgt::* |
Added assets/xotcl1.6.8/actiweb/WebAgent.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | # $Id: WebAgent.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ package provide xotcl::actiweb::webAgent 1.0 package require -exact xotcl::actiweb::agent 1.0 package require -exact xotcl::actiweb::invoker 1.0 package require -exact xotcl::mixinStrategy 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::webAgent { namespace import ::xotcl::* # # Web Agent are special agents that allow us to define another # object in the paramter webfacade as a facade for the web agent # itself and the sub-system shielded by the web agent with an interface # for agents # Class WebAgent -superclass Agent WebAgent instproc init args { next } # # let the web agents facade handle the call -> interprete args # as "method args" # return result of the invoker # #WebAgent instproc invokeFacade {args} { # set a "" # set m "" # set l [llength $args] # set o [my webfacade] # if {$l > 0} { # set m [lindex $args 0] # } # if {$l > 1} { # set a [lrange $args 1 end] # } # # #puts stderr "Web Agent [self]->invoke: OBJ: $o PROC: $m ARGS: $a" # # # # # tell the invoker to redirect the call to the webfacade object # # # set re [RedirectException [self]::[my autoname re] \ # -obj $o -method $m -arguments $a] # # return $re #} #WebAgent instproc default args { # return [next] #} namespace export WebAgent } namespace import ::xotcl::actiweb::webAgent::* |
Added assets/xotcl1.6.8/actiweb/WebDocument.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 | package provide xotcl::actiweb::webDocument 1.0 package require -exact xotcl::actiweb::webObject 1.0 package require -exact xotcl::comm::httpAccess 1.0 package require -exact xotcl::mixinStrategy 1.0 package require -exact xotcl::actiweb::sendStrategy 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::webDocument { namespace import ::xotcl::* Class WebDocument -superclass WebObject \ -parameter { {content ""} filename } WebDocument instproc init args { my exportProcs content contentType next my mixinStrategy ::Send=TypedString } WebDocument instproc attachFile filename { my filename $filename my set oldSendStrategy [my mixinStrategy ::Send=File] my contentType [Mime guessContentType $filename] } WebDocument instproc detachFile {} { my mixinStrategy [my set oldSendStrategy] my unset contentType my unset filename } WebDocument instproc default args { if {[my exists content]} { return [my content] } return "" } #WebDocument instproc contentLength {} { # my showCall # return [expr {[string length [my content]] + 1}] #} Class TextDocument -superclass WebDocument TextDocument instproc init args { next my contentType text/plain } Class HtmlDocument -superclass TextDocument HtmlDocument instproc init args { next my contentType text/html } Class FileDocument -superclass WebDocument # # class factory creates classes on the fly if they do not exist # already, otherwise return exisiting class # # auch flyweigth Class DocumentClassFactory DocumentClassFactory abstract instproc getClass contentType Class FileDocumentClassFactory -superclass DocumentClassFactory FileDocumentClassFactory instproc getClass contentType { if {[FileDocument info classchildren $contentType] eq ""} { Class ::FileDocument::${contentType} -superclass FileDocument } return ::FileDocument::${contentType} } Class DocumentFactory DocumentFactory abstract instproc create {name args} Class FileDocumentFactory -superclass DocumentFactory FileDocumentFactory instproc create {name class filename} { $class $name #$name contentType [$class set contentType] $name attachFile $filename return $name } Class FileObjectifier FileObjectifier instproc init args { next FileDocumentClassFactory [self]::clFactory FileDocumentFactory [self]::objFactory } # # filename must be given with full path -> # create objects with filename's tail (prefix can be used to # give object name a preceding dir) # FileObjectifier instproc objectifyFile {place filename {prefix ""}} { set obj "" if {[file isfile $filename]} { set type [Mime guessContentType $filename] #if {$type ne "unknown/unknown"} { set fn [string trimleft $prefix/[file tail $filename] /] set class [[self]::clFactory getClass $type] set obj [[self]::objFactory create $fn $class $filename] $place exportObjs $obj #puts stderr "...objectified: $obj of class $class" #} } return $obj } # # objectify a whole directory tree # FileObjectifier instproc objectifyTree {place dir {prefix ""}} { if {[file isdirectory $dir]} { foreach f [glob -nocomplain $dir/*] { if {[file isfile $f]} { my objectifyFile $place $f $prefix } elseif {[file isdirectory $f]} { my objectifyTree $place $f $prefix/[file tail $f] } } } } Class GraphicDirectoryObjectifier -superclass FileObjectifier \ -parameter {{thumbnaildir [::xotcl::tmpdir]}} GraphicDirectoryObjectifier instproc objectifyTree {place dir {prefix ""}} { if {[file isdirectory $dir]} { set indexpage "" set title "" set date "" foreach f [lsort [glob -nocomplain $dir/* $dir/{.date,.title}]] { set exportedfn [string trimleft $prefix/[file tail $f] /] if {[file isfile $f]} { set type [Mime guessContentType $f] if {[string match "image/*" $type]} { set class [[self]::clFactory getClass $type] $class $exportedfn -init -attachFile $f $place exportObjs $exportedfn #puts stderr "...objectified: FN=$exportedfn cl=$class d=$dir o=$exportedfn" ###### set expThumbnaildir [file dirname $exportedfn]/.thumbnail set thumbnaildir [file dirname $f]/.thumbnail if {![file isdirectory $thumbnaildir]} { file mkdir $thumbnaildir } set thumbnail $thumbnaildir/[file tail $f] set expThumbnail $expThumbnaildir/[file tail $f] if {![file exists $thumbnail]} { catch {exec djpeg -pnm $f | \ pnmscale -xscale .2 -yscale .2 | ppmquant 256 | \ ppmtogif > $thumbnail} } $class $expThumbnail -init -attachFile $thumbnail $place exportObjs $expThumbnail #### append indexpage "<A href='/$exportedfn'>" \ "<IMG SRC='/$expThumbnail'>$exportedfn</A><br>\n" } elseif {[string match *.title $exportedfn]} { set title [my fileContent $f] } elseif {[string match *.date $exportedfn]} { set date <H4>[my fileContent $f]</H4> } } elseif {[file isdirectory $f]} { if {[file exists $f/.title]} { set desc ": [my fileContent $f/.title]" } else { set desc "" } append indexpage "<A href='/$exportedfn/gindex.html'>" \ "$exportedfn</A>$desc<br>\n" my objectifyTree $place $f $exportedfn } set gindex [string trimleft $prefix/gindex.html /] HtmlDocument $gindex -content \ "<HTML><TITLE>$title</TITLE><H1>$title</H1>\ <BODY>$date$indexpage</BODY></HTML>" #puts stderr "mixins of HtmlDocument=<[$gindex info mixins]>" $gindex mixinStrategy ::Send=TypedString #$gindex showVars receiver exportObjs $gindex } } } GraphicDirectoryObjectifier instproc fileContent {f} { set FILE [open $f r] set content [read $FILE] close $FILE return $content } Class HtmlProxy -superclass HtmlDocument -parameter realSubject HtmlProxy instproc init args { next [Place getInstance] exportObjs [self] } HtmlProxy instproc unknown {m args} { my instvar realSubject ::eval $realSubject $m $args return [my default] } namespace export \ WebDocument TextDocument HtmlDocument FileDocument \ DocumentClassFactory FileDocumentClassFactory \ DocumentFactory FileDocumentFactory \ FileObjectifier GraphicDirectoryObjectifier \ HtmlProxy } namespace import ::xotcl::actiweb::webDocument::* |
Added assets/xotcl1.6.8/actiweb/WebObject.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | # $Id: WebObject.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ package provide xotcl::actiweb::webObject 1.0 package require -exact xotcl::actiweb::sendStrategy 1.0 package require -exact xotcl::mixinStrategy 1.0 package require -exact xotcl::store::persistence 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::webObject { namespace import ::xotcl::* # # base interface for all web-entitites # Class WebObject -parameter { {exportedProcs {echo default}} agentInfo {contentType ""} {place ""} } # # default send strategy == send the response from the place # WebObject instproc init args { #my showCall my mixinStrategy ::Send=PlainString my registerPlace my mixinStrategy ::Persistent=Eager my persistenceMgr [my place]::agentPersistenceMgr next } WebObject instproc registerPlace {} { my set place [Place getInstance] my set agentInfo [[my place]::agentMgr register [my selfName]] } WebObject instproc deregisterPlace {} { [my place]::agentMgr deregister [my selfName] } # # seek for the HTTP worker object that has invoked # the current call # WebObject instproc getWorker {} { for {set level 1} {1} {incr level} { if {[catch {set worker [uplevel $level self]}]} { return "" } elseif {[$worker istype Place::HttpdWrk]} { return $worker } } } WebObject instproc getFormData {} { [my getWorker] formData } # # code a call for an action on self; # action is "proc args" # WebObject instproc selfAction {action} { return [url encodeItem "[string trimleft [self] :] $action"] } WebObject instproc action {o action} { return [url encodeItem "[string trimleft $o :] $action"] } WebObject instproc echo {} { return [self] } WebObject instproc error args { return "Error on [self]: Invocation '$args' failed." } WebObject instproc default {} { return "No default behaviour on [self]." } WebObject instproc exportProcs args { my instvar exportedProcs foreach a $args { if {[lsearch $exportedProcs $a] == -1} { lappend exportedProcs $a } } } WebObject instproc isExportedProc p { expr {[lsearch [my set exportedProcs] $p] != -1} } WebObject instproc selfName {} { return [string trimleft [self] :] } WebObject instproc objName {obj} { return [string trimleft $obj :] } WebObject instproc buildAdress {} { my instvar place set a http://[$place host] if {[set p [$place port]]} { append a :$p } } WebObject instproc destroy args { my deregisterPlace next } # # simple class, to be inherited before WebObject, if # every remote method should reach the object # Class ExportAll ExportAll instproc isExportedProc p { return 1 } namespace export WebObject ExportAll } namespace import ::xotcl::actiweb::webObject::* |
Added assets/xotcl1.6.8/actiweb/cacert.pem.
> > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | -----BEGIN CERTIFICATE----- MIIDKjCCApOgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBwDELMAkGA1UEBhMCQVQx DzANBgNVBAgTBlZpZW5uYTEPMA0GA1UEBxMGVmllbm5hMR0wGwYDVQQKExRNeSBU ZXN0IE9yZ2FuaXphdGlvbjETMBEGA1UECxMKTXkgRGVtbyBDQTErMCkGA1UEAxMi TXkgRGVtbyBDQSBhdCBNeSBUZXN0IE9yZ2FuaXphdGlvbjEuMCwGCSqGSIb3DQEJ ARYfa2xhdXMua29sb3dyYXRuaWtAd3Utd2llbi5hYy5hdDAeFw0wMzA5MDUxMTEw MDFaFw0xMzA5MDIxMTEwMDFaMIHAMQswCQYDVQQGEwJBVDEPMA0GA1UECBMGVmll bm5hMQ8wDQYDVQQHEwZWaWVubmExHTAbBgNVBAoTFE15IFRlc3QgT3JnYW5pemF0 aW9uMRMwEQYDVQQLEwpNeSBEZW1vIENBMSswKQYDVQQDEyJNeSBEZW1vIENBIGF0 IE15IFRlc3QgT3JnYW5pemF0aW9uMS4wLAYJKoZIhvcNAQkBFh9rbGF1cy5rb2xv d3JhdG5pa0B3dS13aWVuLmFjLmF0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB gQDIKhCgkG/rSDc8NjDGtJBKW1+fQsoPoBSnMeWOjRQ0YiYomHLZo2XHxsfHsDHj xXE69GkY9SuwYX/UiF7C0H5LhVew5GTACZsZTbqUWR3D0+R4RQTNJRhQzHq4HE0o cWjKRiQWWMqNE6S/M4Eri4SJyoaXzhkXjkboYTf/+Dks1wIDAQABozIwMDAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBT5lsU8wZ72pP5lB5ezzqxi5mk4KTANBgkq hkiG9w0BAQQFAAOBgQA8pZPqoSDBduMtKzNP5A6TerIc7Whm/mwBmiMq0sRHFPWe sCHJkBxF+ryJT6WDsm1RuCdueHgoppnJ6epdqxmtOAcNcn+OQDU5lzSATBu60B5m bH4zRsxwn4L9ts+Q1IbjWXc0P1G+2oQSNfvduS7esrs1RM64h6gUJErzxU5cfg== -----END CERTIFICATE----- |
Added assets/xotcl1.6.8/actiweb/pageTemplate.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | package provide xotcl::actiweb::pageTemplate 1.0 package require xotcl::actiweb::webObject 1.0 package require xotcl::actiweb::invoker 1.0 package require xotcl::mixinStrategy 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::pageTemplate { namespace import ::xotcl::* Class PageTemplate -superclass WebObject PageTemplate instproc init args { next my mixinStrategy ::Send=TypedString } PageTemplate abstract instproc listExportedProcs args PageTemplate abstract instproc simplePage args Class PageTemplateHtml -superclass PageTemplate PageTemplateHtml instproc init args { my contentType text/html next } PageTemplateHtml instproc listExportedProcs args { # # place must be a Html place! # set place [HtmlPlace getInstance] set c " The following options are avaiable on $n: " foreach i [my exportedProcs] { set href [my selfAction "[self] $i"] set app { <p> <a href= "$href">$i</a> } append c [subst -nobackslashes $app] } return [my simplePage $place [self] $c] } PageTemplateHtml instproc simplePage {title heading content {closing ""}} { set place [Place getInstance] set c {<html> <head> <title>$title</title> </head> <body> <h1>$heading</h1> <hr> <p> $content <p> $closing <p><hr><p> </body> </html> } return [subst -nobackslashes -nocommands $c] } # # builds a simple Form -- args are tupels of the form # {text, name, type, default, size} # # PageTemplateHtml instproc simpleForm {action args} { set action [my selfAction $action] set c { <form method="get" action="$action"> <TABLE> } foreach {text name type def size} $args { append c " <TR> <TD>$text: </TD> <TD><input name=\"$name\" type=\"$type\" size=\"$size\" value=\"$def\"></TD> </TR> " } append c { <TR> <td><input type=submit value="Submit"></td> <td><input type=reset value="Reset"></td> </TR> </TABLE> </FORM> } return [subst -nobackslashes -nocommands $c] } namespace export PageTemplate PageTemplateHtml } namespace import ::xotcl::actiweb::pageTemplate::* |
Added assets/xotcl1.6.8/actiweb/pkgIndex.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded xotcl::actiweb::agent 1.0 [list source [file join $dir Agent.xotcl]] package ifneeded xotcl::actiweb::agentManagement 1.0 [list source [file join $dir AgentManagement.xotcl]] package ifneeded xotcl::actiweb::htmlPlace 1.0 [list source [file join $dir HtmlPlace.xotcl]] package ifneeded xotcl::actiweb::httpPlace 1.0 [list source [file join $dir HttpPlace.xotcl]] package ifneeded xotcl::actiweb::invoker 1.0 [list source [file join $dir Invoker.xotcl]] package ifneeded xotcl::actiweb::pageTemplate 1.0 [list source [file join $dir pageTemplate.xotcl]] package ifneeded xotcl::actiweb::placeAccessControl 1.0 [list source [file join $dir PlaceAccessControl.xotcl]] package ifneeded xotcl::actiweb::secureHtmlPlace 1.0 [list source [file join $dir SecureHtmlPlace.xotcl]] package ifneeded xotcl::actiweb::secureHttpPlace 1.0 [list source [file join $dir SecureHttpPlace.xotcl]] package ifneeded xotcl::actiweb::sendStrategy 1.0 [list source [file join $dir SendStrategy.xotcl]] package ifneeded xotcl::actiweb::userMgt 1.0 [list source [file join $dir UserMgt.xotcl]] package ifneeded xotcl::actiweb::webAgent 1.0 [list source [file join $dir WebAgent.xotcl]] package ifneeded xotcl::actiweb::webDocument 1.0 [list source [file join $dir WebDocument.xotcl]] package ifneeded xotcl::actiweb::webObject 1.0 [list source [file join $dir WebObject.xotcl]] |
Added assets/xotcl1.6.8/comm/Access.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 | # -*- tcl -*- $Id: Access.xotcl,v 1.9 2007/08/14 16:38:26 neumann Exp $ set httpAccessVersion 1.0 package provide xotcl::comm::httpAccess $httpAccessVersion package require -exact xotcl::comm::pcache 1.0 package require -exact xotcl::comm::mime 1.0 package require -exact xotcl::comm::connection 1.0 package require -exact xotcl::trace 1.0 package require XOTcl 1 namespace eval ::xotcl::comm::httpAccess { namespace import ::xotcl::* variable os variable VERSION if {[catch {set os [exec uname -sr]}]} { if {[catch {set os [exec uname -a]}]} { set os unknownOS } } if {![info exists VERSION]} { set VERSION 1.0 } # assert is used only for invariants in the source proc assert {f r} { set got [eval $f] if {$got != $r} { puts stderr "assertion failed: \[$f\] == $r (got $got)" } } # resolve and checkUrl implement URL handling (primarily completion) proc checkUrl {url} { #puts stderr "checkUrl: <$url>" if {![regexp {^([^:]+:/)/([^/]+)(/.*)?$} $url _ scheme network path]} { regexp {^([^:]+:)(/.*)?$} $url _ scheme path } if {![info exists path]} { # no access scheme provided, try some heuristics... if {[regexp {^[./]} $url]} { # expand leading "." to pwd if {[regexp {^\.(.*)$} $url _ url]} { set url [pwd]$url } return file:$url } else { set url http://$url regsub {///$} $url // url return $url } } if {$path eq ""} {set path /} return [expr {[info exists network] ? "$scheme/$network$path" : "$scheme$path"}] } # resolving a relative url with respect to a base url (based on rfc 1808) proc resolve {rel base {childTagName ""}} { if {$base eq ""} { return [checkUrl $rel] } if {$rel eq ""} { return $base } if {[regexp {^[^:]+:/} $rel _]} { return [checkUrl $rel] } if {![regexp {^([^:]+:/)/([^/]+)(/.*)$} $base _ baseScheme baseNetwork basePath]} { regexp {^([^:]+:)(/.*)$} $base _ baseScheme basePath } elseif {[regexp {^[^:/]+:} $rel]} { return $rel } regexp {^(.*)\#.*$} $basePath _ basePath regexp {^(.*)[?].*$} $basePath _ basePath if {[regexp {^//([^/]+)/(.*)$} $rel _ relNetwork relPath]} { return $baseScheme/$relNetwork/$relPath } if {[info exists baseNetwork]} { append baseScheme /$baseNetwork } #puts stderr rel=<$rel> if {![string match "/*" $rel]} { #puts stderr rel<$rel>base<$basePath> if {[string match \#* $rel]} { set r $basePath$rel } elseif {![regsub {/([^/]*)$} $basePath /$rel r]} { set r /$rel } while {[regsub -all {/\./} $r / r]} {} regsub {/\.$} $r / r while {[regsub -all {/[^/.]+/\.\./} $r / r]} {} # remove leading /../ (netscapes navigator does this) while {[regsub {^/\.\./} $r / r]} {} set rel $r #puts stderr finalrel<$r> } #if {$childTagName ne ""} if {1} { upvar 1 $childTagName childTag catch {unset childTag} if {[regexp {^(.+)\#(.+)$} $rel _ rel childTag]} { #puts stderr childTag=$childTag,url=$baseScheme$rel. } } return $baseScheme$rel } assert {resolve "" http://mohegan/} http://mohegan/ assert {resolve http://mohegan/ ""} http://mohegan/ assert {resolve http://mohegan ""} http://mohegan/ assert {resolve http://mohegan/ http://nestroy} http://mohegan/ assert {resolve test.html http://127.0.0.1/} http://127.0.0.1/test.html assert {resolve test http://nestroy/} http://nestroy/test assert {resolve test file:/u/neumann/old} file:/u/neumann/test assert {resolve /test http://nestroy/} http://nestroy/test assert {resolve //mohegan/index.html http://nestroy/} http://mohegan/index.html assert {resolve //mohegan/index.html http://nestroy/} http://mohegan/index.html assert {resolve index.html http://nestroy/dir/} http://nestroy/dir/index.html assert {resolve ./index.html http://nestroy/dir/} http://nestroy/dir/index.html assert {resolve ././index.html http://nestroy/dir/} http://nestroy/dir/index.html assert {resolve ../index.html http://nestroy/dir/} http://nestroy/index.html assert {resolve ../../index.html http://nestroy/dir/} http://nestroy/index.html assert {resolve ../../../test file:/u/neumann/old} file:/test assert {resolve newdir/ http://nestroy/dir/} http://nestroy/dir/newdir/ assert {resolve /newdir/ http://nestroy/dir/} http://nestroy/newdir/ assert {resolve file:/u/neumann/ice.html ""} file:/u/neumann/ice.html assert {resolve \#label http://nestroy/h.html} http://nestroy/h.html assert {resolve mailto:user@host http://nestroy/h.html} mailto:user@host assert {resolve ../../../../mis2001/folien/081101.ppt http://wwwi.wu-wien.ac.at/Studium/Abschnitt_2/LVA_ws01/IT/index.html} http://wwwi.wu-wien.ac.at/mis2001/folien/081101.ppt ############################################################## # Every object of class Access informs the (possibly empty) list of # informObjects during its lifecycle with the following messages # # startCb: when the request for the object is created # and was classified and initialized # # notifyCb: when the type of the incming data is dertermined # (typically after parsing the http header) # # incCb: when new data is available # # endCb: when the request is finished sucessfully and the object # is going to be destroyed # # cancelCb: when the request is finished nonsucessfully and the object # is going to be destroyed # # All these messages receive the name of the Access object # as first parameter, incCb has two more arguments (totalsize # and currentsize) # caching: # 0 no caching # 1 volatile cache (does not check cache, keeps spool file for back button) # 2 persistent cache Class Access -parameter { {method GET} {blocking 0} {httpVersion 1.1} {headers {}} url query data contentType path caching sinkClass parentUrl } Access instproc informObject x { foreach i $x { my lappend informObjects $i } } Access instproc method x { my set method [string toupper $x] } Access instproc unknown {m args} { error "Method '$m' with args '$args' is unknown for [self class]" } Access proc checkRunning {} { foreach u [my array names running] { puts stderr "... running: $u" } puts stderr "... -----------" } Access proc createRequest args { #my showCall set informobject {} set allowJoin 1 set nargs {} foreach {a v} $args { switch -exact -- $a { -url {set url $v; lappend nargs $a $v} -informObject {set informobject $v; lappend nargs $a $v} -parentRequest {set parentRequest $v} -allowJoin {set allowJoin $v} default {lappend nargs $a $v} } } #if {[my array exists running]} {parray [self]::running} if {[my exists running($url)] && $allowJoin} { my showMsg "we can join running($url)=[my set running($url)]" # we can join the request. # requests are joined by adding the informobjects to # the existing request set token [my set running($url)] # delegation to a different request works only so easy # when loading to a file... $token informObject $informobject return $token } else { set token [my autoname ::req] if {[info exists parentRequest]} { set token ${parentRequest}$token } #my showMsg "TOKEN = $token $url" return [eval my create $token $nargs] } } Access instproc running {} { #my showCall [self class] set running([my url]) [self] } Access instproc stop {} { #showCall my instvar url if {[[self class] exists running($url)]} { #puts stderr "my unset [[self class] set running($url)] [self class] unset running($url) #if {[my array exists running]} { parray [self class]::running } } else { #puts stderr "not running($url)" #if {[my array exists running]} { parray [self class]::running } } } #Access instproc destroy args { # my showCall # next #} Access instproc init args { #my showCall my instvar method url if {![my exists informObjects]} { my set informObjects {} } next if {![my exists caching]} { if {$method eq "GET"} { set defaultCaching 2 } else { set defaultCaching 1 } my caching $defaultCaching } #my showVars set url [string trim $url] my initialize if {[my classify $url]} { #my showVars # now inform all interested objects that we have the object my doCallbacks startCb #my showVars blocking # trigger the transfer... (might be blocking or not) my $method if {![my exists finished]} { # the request is not finished if {[my blocking]} { #my showMsg "waiting" my vwait finished #my showMsg "waiting DONE" } } } } Access instproc getContent {} { [my set sink] content } ######################################### Access instproc timeout t { my set timeout [::after $t [self] timeoutOccured] } Access instproc timeoutOccured {} { #my showCall my unset timeout my abort "timeout exceeded" } Access instproc timeoutFinish {} { if {[my exists timeout]} { after cancel [my set timeout] my unset timeout } } ######################################### Access instproc initialize {} { #my showCall my set state 0 my set meta {} my set currentsize 0 my set totalsize 0 } Access instproc classify {url} { my instvar host path port method #my showVars caching if {[my caching] > 1 && [persistentCache isValidated $url]} { #puts stderr "*** cacheable && validated" #showVars #persistentCache dump set access CacheAccess } elseif {[regexp -nocase {^http://([^/:]+)(:([0-9]+))?(/.*)?$} $url \ _ host y givenPort path]} { if {$givenPort ne ""} {set port $givenPort } {set port 80} switch -exact $method { PROPFIND - PROPPATCH - COPY - MKCOL - MOVE - LOCK - UNLOCK { package require xotcl::comm::dav set access Dav } default {set access Http} } } elseif {[regexp -nocase {^https://([^/:]+)(:([0-9]+))?(/.*)$} $url \ _ host y givenPort path]} { if {$givenPort ne ""} {set port $givenPort } {set port 443} set access Https } elseif {[regexp -nocase {^file:(.*)$} $url _ path]} { set access File } elseif {[regexp -nocase {^ftp://([^/]+)/(.*)$} $url _ host path]} { package require -exact xotcl::comm::ftp 0.9 set access Ftp } elseif {[regexp -nocase {^imap://([^/]+)/(.*)$} $url _ host path]} { package require xotcl::comm::imap set access Imap } elseif {[regexp -nocase {^cmd:/(.*)$} $url _ path]} { set access xotcl::Cmd } elseif {[regexp -nocase {^ldap://([^/:]+)?(:([0-9]+))?(/.*)$} \ $url _ host y givenPort path]} { if {$givenPort ne ""} { set port $givenPort } my showMsg "*** ldap://<$host>:<$port>/<$path>" package require xotcl::comm::ldap set access Ldap } else { #my set state 0 my abort "Unsupported URL: '$url'" return 0 } my class $access #my showMsg "class of request = $access" return 1 } Access instproc revisit {} { my class ReAccess my initialize my [my set method] } ### dummy stubs for 'close' and 'GET' for error cases Access instproc close {} { } Access instproc GET {} { if {[my exists errormsg]} { ;# the error was already reportet my finish } else { my abort "unknown error" } } Access instproc headerDone {} { my instvar caching sink if {[my exists ignoreBody]} return if {[my exists sinkClass] && $caching>0 } { error "can´t set both sinkclass and caching" } switch $caching { 2 { set sink [CacheFileSink create [self]::cfs] #my showMsg "[self class] result goes to cache" $sink notifyCb [self] } 1 { set sink [CacheFileSink create [self]::cfs -persistent 0] #my showMsg "result goes to volatile cache" $sink notifyCb [self] } 0 { if {[my exists sinkClass]} { set sink [[my sinkClass] create [self]::s] } } } my doCallbacks notifyCb } Access instproc mkSpoolFile {{name ""}} { if {![my exists fileName]} { my set fileName [persistentCache newEntry [my url] [self] [my caching] $name] } } Access instproc block {} { my set block } Access instproc kill {} { my showCall my set state -1; #interrupted my finish } Access instproc abort {msg} { #my showCall #my showVars my instvar state errormsg if {[catch {::printError "[self] ($state): $msg"} err]} { puts stderr "\n$err\nERROR [self] ($state): $msg\n" } #my set error [list $msg $::errorInfo $::errorCode] my caching 0 if {[my exists ignoreBody]} { my unset ignoreBody } set state -2 ;# error set errormsg $msg my finish } Access instproc finish {} { #my showCall my timeoutFinish my close #my showVars state ignoreBody # state is "interrupted" or "error" if {[my set state] < 0} { set action cancelCb set success 0 } else { set action endCb #set state ok set success 1 } if {[my exists ignoreBody]} { my stop #my set finished $success set cmd [my set ignoreBody] my unset ignoreBody #my showMsg "executing... <$cmd>" eval my $cmd } else { if {[my exists sink]} { [my set sink] $action [self] } #catch {after cancel $after} ;# ???? my doCallbacks $action my stop my set finished $success } } Access instproc eof {} { #my showCall #my showMsg "c [my set currentsize]== t [[self set totalsize]]" #my set state eof my finish } Access instproc doCallbacks {cb} { #my showCall if {[my exists ignoreBody]} { my showMsg "ignoring callback" } else { foreach obj [my set informObjects] { #my showMsg "*** $obj $cb [self]" #puts stderr "------------ calling: $obj $cb [self]" if {[catch {$obj $cb [self]} errormsg]} { puts stderr "--------------$cb:errormsg=$errormsg, \ errorInfo=$::errorInfo, \ errorCode=$::errorCode." } #puts stderr "------------ calling DONE: $obj $cb [self]" } } } Access instproc shutdown {} { #my showMsg "state=[my set state] > 3" if {[my set state] > 3} { my set mustDestroy 1 } else { #my showVars #my showStack #my showMsg "DESTROY !!!" if {[my set state] > -2} { my destroy } } } Class FileAccess -superclass Access FileAccess instproc initialize args { my caching 0 next } FileAccess instproc close {} { } FileAccess instproc block {} { my showTimeStart set S [open [my set fileName] r] fconfigure $S -translation binary set block [::read $S] ::close $S my showTimeEnd return $block } FileAccess instproc GET {} { my instvar path response totalsize currentsize \ fileName informObjects set fileName $path set totalsize [file size $path] set response "file 200 OK" my headerDone my set state 4 set currentsize $totalsize #my showVars informObjects foreach obj $informObjects { $obj incCb [self] $totalsize $currentsize } my eof } Class File -superclass FileAccess File instproc GET {} { my instvar path #puts stderr path=$path,exists=[file exists $path] if {![file exists $path]} { my abort "No such file '$path'" return } if {![my exists contentType]} { my contentType [Mime guessContentType $path] } my set sink [FileSink create [self]::fas -fileName $path] #puts stderr ****sink=$sink,[$sink info class] #puts stderr "*** before next ([self class])" next #puts stderr "*** after next ([self class])" } Class CacheAccess -superclass File CacheAccess instproc GET {} { my instvar url my path [persistentCache cacheFileName $url] my contentType [persistentCache contentType $url] my set meta [persistentCache meta $url] next } Class ReAccess -superclass File ReAccess instproc GET {} { my instvar fileName sink my set block "" my set currentsize 0 my caching 0 if {![info exists fileName]} { set fileName [$sink set fileName] } my set path $fileName next } Class Cmd -superclass Access Cmd instproc init args { if {![my exists caching]} { my caching 0 } next } Cmd instproc GET {} { my instvar path block totalsize currentsize \ response informObjects state if {[catch {set block [eval $path]} error]} { my contentType text/plain set block $error } else { my contentType text/html } set totalsize [string length $block] set response "cmd 200 OK" my headerDone my set state 4 set currentsize $totalsize foreach obj $informObjects { $obj incCb [self] $totalsize $currentsize #$obj endCb [self] } #set state eof my finish } Cmd instproc block args { my instvar block return $block } #Class NetAccess -superclass Access -parameter {host port} Class NetAccess -superclass Access NetAccess instproc initialize args { if {![my exists blocksize]} {my set blocksize 512} my set readMethod read next } NetAccess instproc read {} { #my instvar S blocksize block #set block [::read $S $blocksize] my instvar S block blocksize set block [::read $S $blocksize] } NetAccess instproc gzread {} { my instvar S Z blocksize block puts -nonewline $Z [::read $S $blocksize] set block [::read $Z] #puts stderr len=[string length $block],block=<$block> } NetAccess instproc gzopen {} { my instvar Z S readMethod requireModules {zipchan libzipchan.so} fconfigure $S -translation binary set Z [zipchan] set readMethod gzread } NetAccess instproc close {} { #my showMsg "**** close persistent=[my exists persistent]" if {![my exists persistent]} { foreach stream {S Z} { if {[my exists $stream]} { ::close [my set $stream] my unset $stream } } } my stop } NetAccess instproc hold {} { my instvar S $S hold } NetAccess instproc resume {} { my instvar S $S resume } NetAccess instproc readData {} { #my showCall if {[catch { #puts stderr "??????????????readMethod=[my set readMethod]" my [my set readMethod] my pushBlock } err]} { puts stderr ERR=$err my set block "" my abort $err } } NetAccess instproc pushBlock {} { #my showCall my instvar block if {[set n [string length $block]]} { my instvar currentsize totalsize informObjects sink #my showVars n currentsize totalsize incr currentsize $n if {$currentsize > $totalsize} { set totalsize $currentsize } #my showMsg "total=$totalsize current=$currentsize" if {[my exists ignoreBody]} { #puts stderr "ignoring: <$block>" } else { if {[info exists sink]} { $sink incCb [self] $totalsize $currentsize } foreach obj $informObjects { #my showMsg "call incbCb $totalsize $currentsize $obj [$obj info class]" $obj incCb [self] $totalsize $currentsize #my showMsg "done incbCb $totalsize $currentsize" } } } else { #my showVars n return [my eof] } } Class Http -superclass NetAccess ;### -parameter {query {httpVersion 1.0}} Http set proxyfilter httpProxyRequired Http set proxyhost {} Http set proxyport {} Http set accept */* if {[info exists argv0]} { Http set useragent "[file tail $argv0] httpAccess/$httpAccessVersion xotcl/$::xotcl::version ($os)" } Http proc proxyfilter {host phostv pportv} { my instvar proxyfilter proxyhost proxyport upvar \#1 $phostv phost $pportv pport switch -- $proxyfilter { httpProxyRequired { if {[string length $proxyhost]} { if {![string length $proxyport]} { set proxyport 8080 } set phost $proxyhost set pport $proxyport } } } } Http instproc initialize args { if {![my exists port]} {my set port 80} if {![my exists httpVersion]} {my set httpVersion 1.1} next #my showMsg "result queried from net" } Http instproc GET {} { #my showCall if {[my exists query]} { my instvar query caching my append url ?$query my append path ?$query if {$caching == 2} {set caching 1} my showVars caching $query } my open } Http instproc HEAD {} { my open } Http instproc POST {} { # we have query and data only for a uniform interface for # forms that cann pass the attribute value pairs always via # query. if {[my exists query]} { my data [my query] } my open } Http instproc PUT {} { my open } # Http1.1 Http instproc OPTIONS {} { my showCall my open } # Http1.1 Http instproc TRACE {} { my showCall } # Http1.1 Http instproc DELETE {} { #my showCall my open } Http instproc openConnection {host port reuse} { return [Connection make [self] $host $port $reuse _] } Http instproc open {} { #my showCall my instvar url S state host port path if {$state > 0} { puts stderr "... [self]:$proc ignoring request in state $state" return } Http proxyfilter $host phost pport if {[info exists phost] && [string length $phost]} { set usePort $pport set useHost $phost set path $url } else { set usePort $port set useHost $host } set S [my openConnection $useHost $usePort [expr {[my httpVersion]>1.0}]] if {[$S exists error]} { my abort [$S set error] return } set state 2 my running $S event writable [self] ask } Http instproc ask {} { my instvar url S state host port path \ method headers data caching $S event writable [self] {} if {[pwdManager checkAvailableCredentials $url credentials]} { eval lappend headers $credentials #my showMsg "*** new headers = <$headers>" } if {$caching==2 && [persistentCache ifModifiedHeader $url ifModified]} { eval lappend headers $ifModified #puts stderr "new headers = <$headers>" } # Send data in cr-lf format, but accept any line terminators $S translation {auto crlf} #my showMsg "'$method $path HTTP/[my httpVersion]' headers {$headers}" $S puts "$method $path HTTP/[my httpVersion]" if {[$S exists error]} { my abort "Connection refused by host '$host' port '$port'\n\ [$S set error]" return } $S puts "Accept: [Http set accept]" $S puts "Host: $host" $S puts "User-Agent: [Http set useragent]" foreach {tag value} $headers { regsub -all \[\n\r\] $value {} value set tag [string trim $tag] if {[string length $tag]} { #my showMsg "+++ <$tag: $value>" $S puts "$tag: $value" } } if {[my exists data]} { $S puts "Content-Length: [string length $data]" $S puts "Content-Type: [my contentType]" $S puts "" $S translation {auto binary} $S puts-nonewline $data } else { $S puts "" } $S flush if {[$S exists error]} { my instvar host port my abort "Connection refused by host '$host' port '$port'\n\ [$S set error]" } else { set state 3 $S event readable [self] headerStart } } Http instproc headerStart {} { #my showCall my instvar S response set n [$S gets response] #my showVars n response if {[$S exists error]} { my instvar host port my abort "Error on connection to host '$host' port '$port'\n\ [$S set error]" return } #my showMsg "n=$n, eof=[$S eof]" if {$n == -1 && ![$S eof]} { #my showMsg "******************************input pending, no full line" return } my instvar responseCode responseHttpVersion if {[regexp {^HTTP/([0-9.]+) +([0-9]+) *} $response _ \ responseHttpVersion responseCode]} { #my showMsg "response valid: '$response'" $S event readable [self] header } else { my instvar host port my abort "Unexpected response from $host:$port\n $n: '$response'" } } Http instproc header {} { my instvar S meta totalsize if {[$S gets line]} { #my showMsg "line=$line" if {[regexp -nocase {^content-type:(.+)$} $line _ type]} { my contentType [string trim $type] } elseif {[regexp -nocase {^content-length:(.+)$} $line _ length]} { set totalsize [string trim $length] } if {[regexp -nocase {^([^:]+): *(.+)$} $line _ key value]} { lappend meta [string tolower $key] $value } } else { my headerDone } } Http array set expectsBody \ {GET 1 HEAD 0 POST 1 PUT 0 DELETE 1 OPTIONS 0 TRACE 1} Http instproc headerDone {} { #my showVars meta my instvar S meta method responseCode responseHttpVersion [self class] instvar expectsBody set expectBody $expectsBody($method) array set v [my set meta] if {([info exists v(connection)] && $v(connection) eq "close") || \ $responseHttpVersion < 1.1} { $S makePersistent 0 } else { $S makePersistent 1 } switch $responseCode { 200 {} 204 { #set state empty my finish set block "" set expectBody 0 return } 301 - 302 { # the request is redirected to another server my set ignoreBody [list redirect $v(location)] # RFC2068 Note: When automatically redirecting a POST request after # receiving a 302 status code, some existing HTTP/1.0 user agents # will erroneously change it into a GET request. #my method GET my showMsg "redirect '[my url]' --> '$v(location)'" } 304 { ;# Not Modified, use cached version my set ignoreBody cacheAccess set expectBody 1 #my showMsg "result comes from cache" } 401 { my set ignoreBody \ [list resubmitAuthenticated $v(www-authenticate)] #my showMsg "resubmitAuthenticated $v(www-authenticate)" if {[my exists resubmitAuthenticated]} { if {[my set resubmitAuthenticated] > 5} { my abort "Too many wrong passwords given" } else { my incr resubmitAuthenticated } } else { my set resubmitAuthenticated 1 } set expectBody 1 } 404 { my instvar url #my showVars my set ignoreBody [list abort "File Not Found on Server '$url'"] set expectBody 1 } default { #my showVars responseCode } } next if {![my exists S]} {;# this request was already canceled return } if {[info exists v(transfer-encoding)]} { if {$v(transfer-encoding) == "chunked"} { $S translation {auto binary} my set state 4 $S event readable [self] readChunkedLength } else { my abort "Unexpected Transfer encoding '$v(transfer-encoding)'" } } else { # yahoo does not send a content length for a get request #if {$totalsize == 0 && ($responseCode > 300 || !$expectsBody($method) )} #my showVars method totalsize expectsBody($method) expectBody # the following is used currently for Actiweb-Agents: # the reponse of a PUTS contains a BODY! if {!$expectBody && [::info exists v(content-length)] && $v(content-length) > 0} { set expectBody 1 #my showMsg "setting expectBody 1" } if {!$expectBody} { #$S event readable [self] "" #set state eof my finish set block "" } else { ### To avoid CRLF problmes we set the translation for ### the body entity to binary $S translation binary my set state 4 $S event readable [self] readData } } } Http instproc cacheAccess {} { # there is an actual version of the document in the cache #showCall persistentCache validated [my url] #my close my class CacheAccess #my showMsg "result comes from cache [persistentCache cacheFileName $url]" my caching 0 ;# should be really: toCache 0 my GET } Http instproc redirect location { # the request is redirected to another server if {$location ne [my url] } { #my showVars my url $location my initialize my classify $location my [my set method] } } Http instproc resubmitAuthenticated headerField { #my showCall # the server requires authentification my instvar path method if {[pwdManager checkRequestedAuthentification $method $path $headerField \ type realm]} { my instvar url caching method headers array set v $headers #my showVars catch {unset v(Authorization)} set headers [array get v] pwdManager removePasswd $realm my close if {[pwdManager requireCredentials $realm $url]} { my initialize if {$caching == 2} {set caching 1} my $method } } else { my abort "unknown authentication method '$headerField'" } } Http instproc readChunkedLength {} { #my showCall my instvar S chunkLength totalsize set length [$S gets lengthString] if {$length > 0} { set chunkLength [expr 0x$lengthString] #my showVars lengthString chunkLength if {$chunkLength == 0} { $S event readable [self] readChunkedTrailer } else { incr totalsize $chunkLength $S translation {binary} $S event readable [self] readChunkedData } } } Http instproc readChunkedTrailer {} { #my showCall my instvar S state block set size [$S gets line] if {$size != 0} { showObj [self] my abort "expected trailer size 0, got size $size" } else { #set state eof my finish set block "" #showObj [self] } } Http instproc readChunkedData {} { #my showCall my instvar S block totalsize currentsize chunkLength set block [$S readSize $chunkLength] set received [string length $block] #my showVars block #my showVars currentsize totalsize chunkLength received if {$chunkLength == $received} { $S translation {auto binary} $S event readable [self] readChunkedLength } else { incr chunkLength -$received } my pushBlock } Http instproc readData {} { #my showCall my instvar S block totalsize currentsize set block [$S read] #puts stderr "????? bl=[string length $block]" if {[$S exists error]} { set block "" my abort [$S set error] return } my pushBlock #my showMsg "c [my set currentsize]== t [[self set totalsize]]" if {$currentsize == $totalsize && [my exists S] && [$S exists persistent]} { #my showMsg "PERSITENT, end of entity reached" #my set state eof my finish set block "" #showObj [self] } if {[my exists mustDestroy]} { #my showMsg "mustDestroy was set" my destroy } } Http instproc close {} { #my showCall if {[my exists S]} { [my set S] close #unset S } #next } Http instproc freeConnection {} { #showCall my instvar S #::puts stderr "[self] freeing $S !!!!!!!!!!!!!!!!!!!!!!!" unset S } #Access instproc makeZombie {} { # my showMsg "procs= [my info procs], i [Object info instcommands]" # my class Zombie #} #Class Zombie #Zombie instproc unknown {m args} { # my showMsg "+++ zombie method '$m' called" #} Class Https -superclass Http Https instproc initialize args { #my showCall package require tls if {![my exists port]} { my set port 443} next ### temporary solution, FIXME: ### zur zeit muss man den secure-webserver.xotcl und ### secure-webclient.xotcl jedenfalls aus dem xotcl/apps/xocomm-apps ### verzeichnis starten, da haben wir mal die cfg files in unserem ### baum.... source .ssl/ssl-configuration.xotcl ### } Https instproc openConnection {host port reuse} { set S [Connection make [self] $host $port $reuse reused] if {$reused} { #my showMsg "reusing $S" } else { my showMsg "make the socket ([$S socket]) secure ..." set cmd [list $S importSSL] foreach attr {cafile cadir certfile cipher command keyfile \ model request require ssl2 ssl3 tls1} { if {[sslClientConfig exists $attr]} { lappend cmd -$attr [sslClientConfig set $attr] } } my showMsg "the assembled command is... ´$cmd´" eval $cmd puts stderr "CHANNELS= [file channels]" } return $S } ####################################################################### Object pwdManager pwdManager proc requirePasswd {realm username password} { # used by ftp and imap my instvar user area upvar [self callinglevel] $password passwd if {[my exists pwd($realm)]} { #my showMsg "*** reusing password for $realm" set passwd [my set pwd($realm)] return 1 } else { userPwd user $username if {[userPwd show $realm user($realm) passwd]} { set area($realm/$username) $realm return 1 } } return 0 } pwdManager proc storePasswd {realm username password} { # used by ftp and imap my instvar pwd user set pwd($realm) $password set user($realm) $username } pwdManager proc removePasswd {realm} { if {[my exists pwd($realm)]} { my unset pwd($realm) my unset user($realm) } } pwdManager proc requireCredentials {realm url} { regexp {^(.*/)[^/]*$} $url _ path if {[my exists pwd($realm)]} { #my showMsg "*** register url=$url for ther realm=$realm" my set area($path) $realm return 1 } else { my instvar pwd user if {[info exists ::env(USER)]} { set USER $::env(USER) } elseif {[info exists ::env(USERNAME)]} { set USER $::env(USERNAME) } else { set USER unknown } userPwd user $USER if {[userPwd show $realm user($realm) pwd($realm)]} { #my showMsg "*** setting password for realm '$realm' url=$path" my set area($path) $realm return 1 } } return 0 } pwdManager proc encodeCredentials {authMethod realm} { #my showCall switch $authMethod { basic {set credential [my encodeCredentialsBasic $realm]} digest {set credential [my encodeCredentialsDigest $realm]} } return $credential } pwdManager proc encodeCredentialsBasic {realm} { my instvar pwd user return [list Authorization \ "Basic [base64 encode $user($realm):$pwd($realm)]"] } pwdManager proc encodeCredentialsDigest {realm} { #my showCall package require tcu; #FIXME: noch nicht in distribution my instvar digestResponseData my mkDigestResponseData $realm set digestResponse {} foreach {t v} [array get digestResponseData] { append digestResponse " $t = \"$v\"," } return [list Authorization "Digest [string trimright $digestResponse ,]"] } pwdManager proc mkDigestResponseData {realm} { #my showCall my instvar pwd user digestResponseData requestUri # RFC 2617 # credentials = "Digest" digest-response # digest-response = 1#( username | realm | nonce | digest-uri # | response | [ algorithm ] | [cnonce] | # [opaque] | [message-qop] | # [nonce-count] | [auth-param] ) # username = "username" "=" username-value # username-value = quoted-string # digest-uri = "uri" "=" digest-uri-value # digest-uri-value = request-uri ; As specified by HTTP/1.1 # message-qop = "qop" "=" qop-value # cnonce = "cnonce" "=" cnonce-value # cnonce-value = nonce-value # nonce-count = "nc" "=" nc-value # nc-value = 8LHEX # response = "response" "=" request-digest # request-digest = <"> 32LHEX <"> # LHEX = "0" | "1"| ...| "e" | "f" set digestResponseData(username) $user($realm) set digestResponseData(uri) $requestUri set digestResponseData(cnonce) "TEST" set digestResponseData(nc) 00000001 set digestResponseData(response) [my mkRequestDigest] #parray digestResponseData } pwdManager proc mkRequestDigest {} { # returns a string of 32 hex digits, which proves that the user # knows a password #A1 = unq(username-value) ":" unq(realm-value) ":" passwd my instvar digestResponseData pwd requestMethod requestUri append A1 $digestResponseData(username)\ : $digestResponseData(realm) : $pwd($digestResponseData(realm)) if {![my exists digestResponseData(qop)] || $digestResponseData(qop) eq "auth"} { append A2 $requestMethod : $requestUri } elseif {$digestResponseData(qop) eq "auth-int"} { #A2 = Method ":" digest-uri-value ":" H(entity-body) append A2 $requestMethod : $requestUri: "" } if {[my exists digestResponseData(qop)]} { append reqDigest $digestResponseData(nonce) : \ $digestResponseData(nc) : \ $digestResponseData(cnonce): \ $digestResponseData(qop) set reqDigest [md5 [md5 $A1]:$reqDigest:[md5 $A2]] } else { set reqDigest [md5 [md5 $A1]:$digestResponseData(nonce):[md5 $A2]] } return $reqDigest } pwdManager proc checkAvailableCredentials {url returnCredentials} { # we start a fresh request and check, whether we have sent for this url # (directory) already some credentials in an earlier reqhest. my instvar authMethod regexp {^(.*/)[^/]*$} $url _ path if {[my exists area($path)]} { set realm [my set area($path)] upvar [self callinglevel] $returnCredentials credentials #my showMsg "*** adding credentials for realm=$realm and $path" set credentials [my encodeCredentials $authMethod $realm] return 1 } return 0 } pwdManager proc checkRequestedAuthentification {reqMethod path headerField typeVar realmVar} { # check for which realm with which authentification method the # server wants an authentification #my showCall upvar [self callinglevel] $typeVar type $realmVar realm my instvar authMethod digestResponseData requestUri requestMethod set requestUri $path set requestMethod $reqMethod if {[regexp {^Basic realm="(.*)"$} $headerField _ realm]} { set type basic;# FD: musste da lassen wg. call by reference set authMethod $type return 1 } elseif {[regsub {^Digest } $headerField _ headerField]} { set type digest ;# FD: musste da lassen wg. call by reference set authMethod $type foreach pair [split $headerField ,] { if {[regexp {^(.*) *= *(".*")$} $pair _ n v]} { set digestResponseData([string trim $n]) [string trim [string trim $v] \"] } } set realm $digestResponseData(realm) return 1 } return 0 } ####################################################################### # test classes Class Sink Sink instproc startCb {r} { my set contentLength 0 next } Sink instproc notifyCb {r} { next } Sink instproc incCb {r t c} { my set contentLength $t next } Sink instproc endCb {r} { next #showCall } Sink instproc cancelCb {r} { next #showCall } Sink instproc content {} { next #showCall } Sink instproc contentLength {} { my set contentLength #showCall } Class TimeSink -superclass Sink TimeSink instproc startCb {r} { my set startTime [clock clicks] next } TimeSink instproc notifyCb {r} { my set notifyTime [clock clicks] next } TimeSink instproc endCb {r} { my set endTime [clock clicks] next my reportTimes } TimeSink instproc cancelCb {r} { my set endTime [clock clicks] next } TimeSink instproc reportTimes {} { my instvar startTime endTime notifyTime set bytes [my contentLength] set grossSecs [expr {($endTime-$startTime)/1000000.0}] set grossKbps [expr {($bytes/1000.0)/$grossSecs}] set netSecs [expr {($endTime-$notifyTime)/1000000.0}] set netKbps [expr {($bytes/1000.0)/$netSecs}] #if {[catch {set netKbps [expr {($bytes/1000.0)/$netSecs}]}]} { # set netKbps 0 #} set headSecs [expr {$grossSecs-$netSecs}] foreach v {grossSecs grossKbps netSecs netKbps headSecs} { set $v [format %.2f [set $v]] } my showMsg "got $bytes bytes in $grossSecs ($headSecs+$netSecs) seconds,\ $grossKbps ($netKbps) KB/S" } Class ParallelSink -superclass Sink -parameter { {httpVersion 1.1} {sinkClass TimeSink} {maxsimultaneous 20} } ParallelSink instproc init args { next my set running 1 my set numrequests 0 my set sumbytes 0 my set blocked {} } ParallelSink instproc startCb r { #my showCall my incr running my incr numrequests #puts stderr "... running++ [my set running]" } ParallelSink instproc endCb r { #my showCall my incr sumbytes [$r set currentsize] my done $r } ParallelSink instproc cancelCb r { #my showCall my done $r } ParallelSink instproc done r { #my showCall my instvar blocked $r shutdown my incr running -1 #puts stderr "... running-- [my set running] [llength [Http info instances]]" #puts stderr [Http info instances] #foreach i [Http info instances] {puts stderr "\t$i: [$i set method] [$i set url]"} #puts stderr RUNNING=[my set running] if {[llength $blocked] > 0} { set newreq [lindex $blocked 0] set blocked [lrange $blocked 1 end] my scheduleRequest [lindex $newreq 0] [lindex $newreq 1] [lindex $newreq 2] } elseif {[my set running] < 1} { my set done 1 } } ParallelSink instproc scheduleRequest {method url {parentUrl ""}} { my instvar requests blocked running maxsimultaneous if {$running > $maxsimultaneous} { lappend blocked [list $method $url $parentUrl] } else { set cmd [list Access createRequest -url $url \ -sinkClass [my sinkClass] \ -informObject [self] \ -method $method \ -timeout 25000 \ -caching 0 -allowJoin 0 -httpVersion [my httpVersion]] if {$parentUrl ne ""} { lappend cmd -parentUrl $parentUrl } set r [eval $cmd] } } ParallelSink instproc requests {urls} { my showTimeStart foreach url $urls { my scheduleRequest GET $url } my wait my showTimeEnd } ParallelSink instproc wait {} { my instvar running if {$running > 0} { set savedValue $running #my showMsg ".......... waiting for initially $running requests" if {[catch {my vwait done} err]} { my showMsg "vwait returned: $err " } #my showMsg "$savedValue requests FINISHED " } } Class MemorySink -superclass Sink MemorySink instproc incCb {r t c} { my append d [$r block] next } MemorySink instproc content {} { return [my set d] } MemorySink instproc contentLength {} { if {[my exists d]} { return [string length [my set d]] } else { return 0 } } Class FileSink -superclass Sink -parameter fileName ### write methods #FileSink instproc startCb {r} { # next #} FileSink instproc notifyCb {r} { #my showVars next my instvar file fileName if {[info exists fileName]} { set file [::open $fileName w] fconfigure $file -translation binary } else { # we have no filename; we assume the sink must be a dummy sink # that deletgates its work to some other FileSink my class ShadowFileSink my notifyCb $r } } FileSink instproc incCb {r t c} { next if {[my exists file]} { if {$r == "req0"} { puts stderr "*******************************************************" puts stderr [$r block] puts stderr "*******************************************************" } puts -nonewline [my set file] [$r block] } } FileSink instproc endCb {r} { #my showCall next my close } FileSink instproc cancelCb {r} { next my close } FileSink instproc close {} { if {[my exists file]} { ::close [my set file] my unset file } } ### read methods FileSink instproc content {} { next my instvar file fileName set file [::open $fileName r] fconfigure $file -translation binary set d [read [my set file]] my close return $d } FileSink instproc contentLength {} { next if {[my exists fileName]} { return [file size [my set fileName]] } else { return 0 } } Class ShadowFileSink -superclass Sink ShadowFileSink instproc notifyCb {r} { next my set token $r } ShadowFileSink instproc content {} { my instvar token next return [[$token set sink] content] } ShadowFileSink instproc contentLength {} { my instvar token next return [[$token set sink] contentLength] } Class CacheFileSink -superclass FileSink -parameter {{persistent 1}} CacheFileSink instproc notifyCb req { #my showCall if {![my exists fileName]} { my instvar persistent set url [$req set url] my set fileName [persistentCache newEntry $url $req $persistent ""] } # it is important to execute next after setting the fileName... next } CacheFileSink instproc endCb req { #my showCall my instvar persistent next if {$persistent} { persistentCache entryDone [$req set url] } } CacheFileSink instproc cancelCb req { next if {[my exists fileName]} { file delete [my set fileName] my unset fileName } } CacheFileSink instproc destroy {} { #my showCall if {[my exists fileName] && ![my set persistent]} { #my showMsg "file delete $fileName" file delete [my set fileName] my unset fileName } next } #=========================================================== Class SimpleRequest -parameter { {caching 0} {useFileSink 0} {blocking 1} {timing 0} url fileName timeout httpVersion method headers data query contentType informObject } SimpleRequest instproc fileName x { my set fileName $x my set useFileSink 1 } SimpleRequest instproc init args { my instvar useFileSink fileName sink caching token #my showMsg "Starting Request" next if {[info exists fileName]} { set sink [FileSink create [self]::sink -fileName $fileName] } elseif {$useFileSink || $caching > 0} { set sink [FileSink create [self]::sink] } else { set sink [MemorySink create [self]::sink] } #my showMsg "class of sink = [$sink info class]" if {[my set timing]} { $sink mixin TimeSink } set cmd [list Access createRequest \ -url [my url] \ -informObject $sink \ -blocking [my blocking] \ -caching $caching] foreach optionalParameter { timeout httpVersion method headers data query contentType informObject } { if {[my exists $optionalParameter]} { lappend cmd -$optionalParameter [my set $optionalParameter] } } #my showMsg "cmd=$cmd" set token [eval $cmd] #if {[my success]} { # $sink reportTimes # #puts stderr <[$sink content]> #} } SimpleRequest instproc success {} { if {[my exists token]} { return [expr {[[my set token] set finished] == 1}] } return 0 } SimpleRequest instproc destroy {} { if {[my exists token]} { [my set token] destroy } next } SimpleRequest instproc getContent {} { [my set sink] content } SimpleRequest instproc getContentLength {} { [my set sink] contentLength } #SimpleRequest instproc destroy args { next } ####################################################################### namespace export \ Access FileAccess File CacheAccess ReAccess \ Cmd NetAccess Http Https Sink TimeSink \ ParallelSink MemorySink FileSink \ ShadowFileSink CacheFileSink SimpleRequest } namespace import ::xotcl::comm::httpAccess::* |
Added assets/xotcl1.6.8/comm/COPYRIGHT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen * Specification of Software Systems * Altendorferstraße 97-101 * D-45143 Essen, Germany * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this permission * notice appear in supporting documentation. We make no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied * warranty. * * * This software is based upon MIT Object Tcl by David Wetherall and * Christopher J. Lindblad, that contains the following copyright * message: * * "Copyright 1993 Massachusetts Institute of Technology * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this * permission notice appear in supporting documentation, and that * the name of M.I.T. not be used in advertising or publicity * pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about * the suitability of this software for any purpose. It is * provided "as is" without express or implied warranty." |
Added assets/xotcl1.6.8/comm/Connection.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 | # -*- tcl -*- $Id: Connection.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ package provide xotcl::comm::connection 1.0 package require XOTcl 1 namespace eval ::xotcl::comm::connection { namespace import ::xotcl::* Class Connection -parameter {host port req socket handle} Connection proc make {r host port reuse reusedVar} { #my showCall my instvar openConnections upvar [self callinglevel] $reusedVar reused if {$reuse} { set handle $host:$port-[$r set blocking] #if {[array exists openConnections]} {parray openConnections} if {![info exists openConnections($handle)]} { # there is no persistent connection, we create a new one set reused 0 set openConnections($handle) \ [Connection new -host $host -port $port -req $r -handle $handle] #my showMsg "$openConnections($handle) CONNECTION add for $handle added" } else { # there is a persistent connection set reused 1 set c $openConnections($handle) $c instvar req #::puts stderr "$c CONNECTION reuse for $handle ($c) new req=$r" if {[info exists req]} { # the persistent connection is active with some request $req #::puts stderr "$c CONNECTION req $req already active" } else { # the persistent connection is currently not active $c set req $r } } return $openConnections($handle) } else { set reused 0 return [Connection new -host $host -port $port -req $r] } } Connection proc removeHandle handle { #my showVars #puts stderr "***************** unsetting $handle ***************" if {[my exists openConnections($handle)]} { my unset openConnections($handle) } } Connection instproc init args { ;# the constructor creates the socket my set blocked {} next if {[my exists socket]} { my set keepOpen 1 } else { my set keepOpen 0 if {[catch {my socket [socket -async [my host] [my port]]} msg]} { my set error $msg return } } ::fconfigure [my socket] -blocking false -buffersize 16384 } #Connection instproc STATUS {ctx} { # my instvar socket # ::puts stderr "*** $ctx: $socket blocking=[::fconfigure $socket -blocking]" #} Connection instproc destroy {} { ;# the destructor closes the socket #my showCall if {[my exists handle]} { #my showVars handle # the connection was created via make [self class] removeHandle [my handle] #::puts stderr "my CONNECTION close and destroy [my handle]" } else { #::puts stderr "my CONNECTION close and destroy" } # in cases of errors we might not have a socket yet if {[my exists socket]} { close [my socket] } next } Connection instproc translation {translation} { #showCall ::fconfigure [my socket] -translation $translation } Connection instproc importSSL args { #my showCall package require tls eval tls::import [my socket] $args } Connection instproc fconfigure args { #my showCall eval ::fconfigure [my socket] $args } Connection instproc event {type r method} { #my showCall my instvar req blocked # is the request in the argument list the currently active request? if {[info exists req] && $r == $req} { # a request can overwrite its active request if {$method eq ""} { ::fileevent [my socket] $type "" #my showMsg "CONNECTION clear for [my socket]" } else { #my showMsg "CONNECTION register for [my socket]" ::fileevent [my socket] $type [list $r $method] } } else { #my showMsg "event BLOCKING current request=$req, new=$r $method" #my showMsg "event BLOCKING rd=[::fileevent [my socket] readable]" #my showMsg "event BLOCKING wr=[::fileevent [my socket] writable]" #my showMsg "event BLOCKING bl=$blocked" ::lappend blocked $r $type $method } } Connection instproc hold {} { my set continueCmd [list ::fileevent [my socket] readable \ [::fileevent [my socket] readable]] ::fileevent $socket readable {} #my showVars continueCmd } Connection instproc resume {} { #my showCall if {[my exists continueCmd]} { eval [my set continueCmd] my unset continueCmd } } Connection instproc puts {string} { #my showCall if {[catch {::puts [my socket] $string} msg]} { ::puts stderr message=$msg } } Connection instproc puts-nonewline {string} { #my showCall if {[catch {::puts -nonewline [my socket] $string} msg]} { ::puts stderr message=$msg } } Connection instproc gets {var} { #my showCall upvar [self callinglevel] $var result if {[catch {set n [::gets [my socket] result]} msg]} { my set error $msg #my showMsg "CONNECTION error" return 0 } #my showMsg "n=$n, result=<$result>" return $n } Connection instproc read {} { #my showCall my instvar socket if {[catch {set result [::read $socket [::fconfigure $socket -buffersize]]} msg]} { my set error $msg return "" } #my showMsg Done return $result } Connection instproc readSize {length} { if {[catch {set result [::read [my socket] $length]} msg]} { my set error $msg return 0 } return $result } Connection instproc flush {} { #my showCall if {[catch {::flush [my socket]} msg]} { my set error $msg } } Connection instproc eof {} { #my showCall if {[my exists error]} { return 1 } else { return [::eof [my socket]] } } Connection instproc close {} { #my showCall my instvar req socket blocked if {![info exists socket]} return ;# error during connection open ::fileevent $socket readable "" ::fileevent $socket writable "" $req freeConnection if {[my exists persistent]} { my flush #::puts stderr "[self] PERSISTENT CONNECTION wanna close" if {$blocked eq ""} { ::fileevent $socket readable [list [self] destroy] unset req } else { #my showVars blocked set req [lindex $blocked 0] set type [lindex $blocked 1] set method [lindex $blocked 2] set blocked [lrange $blocked 3 end] #my showMsg "in persistent connection unblock $type [list $req $method]" ::fileevent $socket $type [list $req $method] } } else { #my showMsg "in nonpersistent connection blocked=$blocked" if {$blocked ne ""} { set req [lindex $blocked 0] set type [lindex $blocked 1] set method [lindex $blocked 2] set nblocked [lrange $blocked 3 end] close $socket unset socket if {[my exists handle]} { [self class] removeHandle [my handle] } if {[my exists error]} { #my showMsg "UNSETTING ERROR -----------" my unset error } my init set blocked $nblocked ::fileevent $socket $type [list $req $method] #my showMsg "REANIMATE $socket $type [list $req $method]" #my showVars } else { #my showMsg "Nothing blocked: readable=[::fileevent $socket readable]" my destroy } } } Connection instproc makePersistent {p} { if {$p} { my set persistent 1 } else { if {[my exists persistent]} { my unset persistent #my showMsg "no longer persistent" } } } namespace export Connection } namespace import ::xotcl::comm::connection::* if {[info command bgerror] eq ""} { proc bgerror {msg} { puts stderr "******* bgerror $msg $::errorInfo*****"} } |
Added assets/xotcl1.6.8/comm/Dav.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | # $Id: Dav.xotcl,v 1.4 2006/02/18 22:17:33 neumann Exp $ package provide xotcl::comm::dav 1.0 package require XOTcl 1 namespace eval ::xotcl::comm::dav { package require xotcl::comm::httpAccess namespace import ::xotcl::* Class Dav -superclass Http Dav instproc initialize args { my instvar contentType #showCall set contentType text/xml next } Dav instproc PROPFIND {} { #showCall # extra dav headers # Depth: ("0" | "1" | "infinity") [infinity is the default] # body is a propfind XML-Element # <!ELEMENT propfind (allprop | propname | prop) > # <!ELEMENT allprop EMPTY > # <!ELEMENT propname EMPTY > # <!ELEMENT prop ANY> # this should be set by the clients #<?xml version="1.0" encoding="utf-8" ?> # <D:propfind xmlns:D='DAV:'> # <D:allprop/> # </D:propfind> my open } Dav instproc PROPPATCH {} { #showCall # body is a propertyupdate XML-Element # <!ELEMENT propertyupdate (remove | set)+ > # <!ELEMENT remove (prop) > # <!ELEMENT set (prop) > # set xmlReqBody($method) "<?xml version=\"1.0\" encoding=\"utf-8\" ?> # <D:propertyupdate xmlns:D=\"DAV:\"> # <D:remove> # <D:prop> # <D:displayname/> # </D:prop> # </D:remove> # </D:propertyupdate>" my open } Dav instproc MKCOL {} { #showCall # invoked without a request body (may contain a message body?) my open } Dav instproc GET {} { #showCall # invoked without a request body and without extra header # back to HTTP class next } Dav instproc HEAD {} { #showCall # invoked without a request bodyand without extra header # back to HTTP class next } Dav instproc POST {} { #showCall # the same as in RFC2068 # back to HTTP class next } Dav instproc DELETE {} { #showCall # extra dav headers # Depth: ("0" | "1" | "infinity") # invoked without a request body my open } Dav instproc PUT {} { #showCall # PUT for Non-Collection Resources --> RFC2068 # PUT for Collections --> MKCOL # next } Dav instproc COPY {} { #showCall # extra dav headers # If: [see 9.4 WebDAV] # Destination: <absolutURI> [see RFC2396 for the definition of absolutURI] # Depth: ("0" | "1" | "infinity") # Overwrite: ("T" | "F") # body is a propertybehavior XML-Element # <!ELEMENT propertybehavior (omit | keepalive) > # <!ELEMENT omit EMPTY > # <!ELEMENT keepalive (#PCDATA | href+) > # <!ELEMENT href (#PCDATA) > my open } Dav instproc MOVE {} { #showCall # extra dav headers # If: [see 9.4 WebDAV] # Destination: <absolutURI> [see RFC2396 for the definition of absolutURI] # Depth: "infinity" [see 8.9.2] # Overwrite: ("T" | "F") # body is a propertybehavior XML-Element # see COPY my open } Dav instproc LOCK {} { #showCall # extra dav headers # If: [see 9.4 WebDAV] # Destination: <absolutURI> [see RFC2396 for the definition of absolutURI] # Depth: ("0" | "1" | "infinity") # Timeout: [see 9.8 WebDAV] # Authorization: (defined in HTTP1.1 in 14.8) # body is a lockinfo XML-Element # <!ELEMENT lockinfo (lockscope, locktype, owner?) > # <!ELEMENT lockscope (exclusive | shared) > # <!ELEMENT exclusive EMPTY > # <!ELEMENT shared EMPTY > # <!ELEMENT locktype (write) > # <!ELEMENT write EMPTY > # <!ELEMENT owner ANY> my open } # The Lock-Token request header is used with the UNLOCK method to # identify the lock to be removed. Dav instproc UNLOCK {} { my instvar headers #showCall # extra dav headers # Lock-Token: <Coded-URL> [see 8.11 in WebDAV] # invoked without a request body my open } #--------------------- # Utility # #--------------------- #? Object xmlReqBodyManager xmlReqBodyManager proc requireXmlReqBody {request} { } #? Object davHeaderManager davHeaderManager proc requireDavHeader {request} { } #LOCK /DAV/welcome.html HTTP/1.1 #Host: wawog #Connection: close namespace export Dav \ xmlReqBodyManager davHeaderManager } namespace import ::xotcl::comm::dav::* |
Added assets/xotcl1.6.8/comm/Ftp.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | # $Id: Ftp.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ package provide xotcl::comm::ftp 1.0 package require xotcl::comm::httpAccess package require XOTcl 1 namespace eval ::xotcl::comm::ftp { namespace import ::xotcl::* Class Ftp -superclass NetAccess -parameter {user passwd} Ftp instproc initialize args { #my showCall my instvar port caching user passwd loginMsg resp blocksize set port 21 set blocksize 1024 set caching 0 set user ftp set passwd cineast@ set loginMsg {} set resp(connect) {220 provideUser} set resp(provideUser) {331 providePasswd} set resp(providePasswd) {230 loginFinished} set resp(loginFinished) {227 pasv} set resp(pasv) {200 type} set resp(type-list) {150 list} set resp(type-retr) {150 retr 550 retry-retrieve} set resp(transfer) {226 transferDone} next } Ftp instproc err {state reply} { my abort "Error in $state: $reply" } Ftp instproc queryServer {query state} { my instvar S puts $S $query flush $S fileevent $S readable [::list [self] response $state] } Ftp instproc response {state} { #my showCall my instvar S code msg set reply [gets $S] #my showVars reply if {[regexp {^([0-9]+)[-](.*)$} $reply _ code msg]} { fileevent $S readable [::list [self] responseMulti $state] } else { regexp {^([0-9]+) (.*)$} $reply _ code msg my responseEnd $state } } Ftp instproc responseMulti {state} { # multi line response my instvar S code msg set m [gets $S] if {[regexp "^$code " $m]} { my responseEnd $state } else { # try to strip code and dash regexp "^$code-(.*)\$" $m _ m append msg \n$m } } Ftp instproc responseEnd {state} { my instvar S code msg resp fileevent $S readable {} #puts stderr "code=$code, msg=<$msg>" foreach {c newState} $resp($state) { if {$c == $code} { return [my $newState] } } my err $state "expected=$resp($state), got $code $msg" } Ftp instproc GET {} { my instvar S host port url regexp {^(.*):([0-9]+)$} $host _ host port my running # rb running my $url ;# ??? # proxy ? set S [socket -async $host $port] fconfigure $S -blocking false -translation {auto crlf} fileevent $S readable [::list [self] response connect] } Ftp instproc provideUser {} { my instvar user msg loginMsg set loginMsg $msg my queryServer "USER $user" provideUser } Ftp instproc providePasswd {} { my instvar passwd # if {[pwdManager requirePasswd "Ftp $user\@$host" $user password]} { # my queryServer "PASS $password" providePasswd # } my queryServer "PASS $passwd" providePasswd } Ftp instproc loginFinished {} { my instvar msg loginMsg append loginMsg \n$msg my queryServer "PASV" loginFinished } Ftp instproc pasv {} { my instvar S D msg set d {([0-9]+)} if {[regexp "\[(]$d,$d,$d,$d,$d,$d" $msg _ 1 2 3 4 p1 p2]} { if {[catch {set D [socket -async $1.$2.$3.$4 [expr {$p1*256 + $p2}]]} err ]} { return [my err $proc $err] } fconfigure $D -blocking no -translation binary } else { return [my err $proc $msg] } my queryServer "TYPE I" pasv } Ftp instproc type {} { my instvar path if {$path=={}} { my queryServer "LIST" type-list } elseif {[regexp /$ $path]} { my queryServer "LIST $path" type-list } else { my queryServer "RETR $path" type-retr } } Ftp instproc retry-retrieve {} { my instvar path url append url / my queryServer "LIST $path/" type-list } Ftp instproc list {} { my instvar S D contentType set contentType text/dirlist my headerDone fileevent $S readable [::list [self] response transfer] fileevent $D readable [::list [self] readData] } Ftp instproc read {} { # the method read is called by the more general method readData my instvar D block blocksize if {[::eof $D]} { set block "" close $D unset D } else { #puts stderr blocksize=$blocksize set block [::read $D $blocksize] #puts stderr read:[string length $block]bytes } } Ftp instproc transferDone {} { my instvar D S if {[info exists D]} { fileevent $S readable {} set block "" close $D unset D } my finish } Ftp instproc retr {} { my instvar S D msg totalsize contentType path regexp {[(]([0-9]+)[ ]+[Bb]ytes} $msg _ totalsize set contentType [Mime guessContentType $path] my headerDone if {[info exists S]} { # file dialog was not canceled fileevent $S readable [::list [self] response transfer] fileevent $D readable [::list [self] readData] fconfigure $D -translation binary } } namespace export Ftp } namespace import ::xotcl::comm::ftp::* |
Added assets/xotcl1.6.8/comm/Httpd.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 | # # The XOTcl class Httpd implements an HTTP/1.0 and HTTP/1.1 server with # basic functionality. # # Gustaf Neumann (neumann@wu-wien.ac.at) set VERSION 1.1 package provide xotcl::comm::httpd $VERSION package require XOTcl 1 #package require xotcl::comm::httpAccess package require -exact xotcl::comm::connection 1.0 package require -exact xotcl::trace 1.0 package require -exact xotcl::comm::mime 1.0 namespace eval ::xotcl::comm::httpd { namespace import ::xotcl::* Class Httpd -parameter { {port 80} ipaddr {root ./} {logdir $::xotcl::logdir} {httpdWrk Httpd::Wrk} {redirects [list]} {workerTimeout 10000} } Httpd proc Date seconds {clock format $seconds -format {%a, %d %b %Y %T GMT} -gmt true} Httpd instproc checkRoot {} { my instvar root set root [string trimright $root /] if {![file isdir $root]} { puts stderr "Warning: create root directory '$root'" file mkdir $root } # make directory absolute set currentdir [pwd] cd $root set root [pwd] #puts stderr "[self] root=$root" cd $currentdir } proc ! string { set f [open [::xotcl::tmpdir]log w+]; puts $f "[clock format [clock seconds]] $string" close $f} Httpd instproc init args { my instvar port logdir logfile redirects if {![my exists workerMixins]} { my set workerMixins {} #puts stderr "resetting workermixins of [self]" } next set proto [string trim [namespace tail [my info class]] :d] puts stderr "Starting XOTcl [string toupper $proto] server $::VERSION\ [string tolower $proto]://[info hostname]:$port/" # Start a server by listening on the port if {[my exists ipaddr]} {set ip "-myaddr [my set ipaddr]"} {set ip ""} my set listen [eval [list socket -server [list [self] accept]] $ip $port] #my set listen [socket -server [list [self] accept] $port] my checkRoot if {![file isdir $logdir]} {file mkdir $logdir} set logfile [open $logdir/serverlog-$port a+] my array set requiresBody \ {GET 0 HEAD 0 POST 1 PUT 1 DELETE 0 OPTIONS 0 TRACE 0} } Httpd instproc destroy {} { # destructor catch {close [my set listen]} catch {close [my set logfile]} next } Httpd instproc accept {socket ipaddr port} { # Accept a new connection and set up a handler #puts stderr "using workermixins of [self] {[my set workerMixins]}" [my set httpdWrk] new -childof [self] -socket $socket -ipaddr $ipaddr \ -port $port -mixin [my set workerMixins] } Httpd instproc redirect list { foreach {pattern hostport} $list { my lappend redirects $pattern $hostport } } Class Httpd::Wrk -parameter {socket port ipaddr} Httpd::Wrk array set codes { 200 {Data follows} 201 {Created} 204 {No Content} 302 {Moved Temporarily} 304 {Not Modified} 400 {Bad Request} 401 {Unauthorized} 402 {Payment Required} 403 {Forbidden} 404 {Not Found} 405 {Method Not Allowed} 406 {Not Acceptable} 408 {Request Timeout} 411 {Length Required} 500 {Internal Server Error} 503 {Service Unavailable} 504 {Service Temporarily Unavailable} } Httpd::Wrk instproc formData {} {my set formData} Httpd::Wrk instproc init args { # Constructor my instvar socket port ipaddr my set formData [list] my set replyHeaderFields [list] next my makeConnection $socket my log Connect "$ipaddr $port" my connection translation {auto crlf} my connection event readable [self] firstLine } Httpd::Wrk instproc makeConnection {socket} { Connection create [self]::connection -socket $socket -req [self] } Httpd::Wrk instproc close {} { # logical close of a single request #my showCall my instvar version timeout meta set eof [my connection eof] if {$version > 1.0 && !$eof} { #my showMsg "!EOF in http/$version" my connection flush set timeout [after [[my info parent] workerTimeout] [self] destroy] ### reset parameters, worker will be potentially reused if {[array exists meta]} { unset meta array set meta {} } unset version if {[my exists user]} { my unset user my unset realm } foreach c [my set formData] { $c destroy } my set replyHeaderFields [list] my set formData {} #my showVars my connection translation {auto crlf} my connection event readable [self] firstLine } elseif {$eof} { #my showMsg "Destroy in http/$version" # the client side has closed the connection my destroy } else { #my showMsg "!EOF in http/$version ???" # we close the conneciton actively (e.g. forced by an error) my connection flush #puts stderr "DESTROY----this line should never show up" my destroy } } Httpd::Wrk instproc destroy {} { #my showCall if {[my isobject [self]::connection]} { my connection close } next } Httpd::Wrk instproc freeConnection {} { } Httpd::Wrk instproc firstLine {} { # Read the first line of the request #my showCall my instvar method resourceName hasFormData query fileName \ version timeout if {[info exists timeout]} { after cancel $timeout unset timeout } my lappend replyHeaderFields Date [Httpd Date [clock seconds]] set n [my connection gets firstLine] if {$n > 0} { #::puts stderr "[self] firstline=<$firstLine>" # parse request line, ignore HTTP version for now if {[regexp {^(POST|GET|PUT|HEAD|OPTIONS) ([^?]+)(\??)([^ ]*) *HTTP/(.*)$} \ $firstLine _ method resourceName hasFormData query version]} { set resourceName [string trimright [string trimleft $resourceName ./] " "] # construct filename [my info parent] instvar root set fileName $root/[url decodeName $resourceName] #puts stderr ---[encoding convertfrom utf-8 $fileName]---- set fileName [encoding convertfrom utf-8 $fileName] # my decode-formData $query my log Query $firstLine if {[my exists forceVersion1.0]} { set version 1.0 } my connection makePersistent [expr {$version > 1.0}] my connection event readable [self] header } else { set version 1.0 set resourceName ??? set method ??? my log Error "bad first line:$firstLine" my replyCode 400 my replyErrorMsg } } elseif {![my connection eof]} { #my showMsg "+++ not completed EOF=[my connection eof]" } else { set version 1.0 #my showMsg "+++ n=negative ($n) EOF=[my connection eof] version set to 1.0" my close } } Httpd::Wrk instproc header {} { # Read the header #my showCall my instvar method data if {[my connection gets line] > 0} { #puts stderr line=$line if {[regexp -nocase {^([^:]+): *(.+)$} $line _ key value]} { my set meta([string tolower $key]) $value } } else { #puts stderr line-EMPTY if {[my exists meta(content-length)] && [my set meta(content-length)]>0} { #puts stderr "we have content-length [my set meta(content-length)]" set data "" my connection translation binary my connection event readable [self] receive-body } elseif {[my exists meta(content-type)] && [regexp -nocase {multipart/form-data; *boundary=} \ [my set meta(content-type)]]} { #puts stderr "formdata" set data "" my connection event readable [self] receive-body } else { #puts stderr "no-content-length, triggering respond" my connection event readable [self] "" [my info parent] instvar requiresBody if {$requiresBody($method)} { my replyCode 411 my replyErrorMsg } else { my check-redirect } } } } Httpd::Wrk instproc receive-body {} { ;# ... now we have to read the body #my showCall my instvar method data meta set d [my connection read] if {$d ne ""} { append data $d #my showMsg "datal=[string length $data], cl=$meta(content-length)" if {[string length $data] >= $meta(content-length)} { my connection event readable [self] "" if {$method eq "POST"} { my decode-POST-query } my check-redirect } } else { ;# 0 byte, must be eof... my showMsg "received 0 bytes" my connection event readable [self] "" if {[string length $data] < $meta(content-length)} { my replyCode 404 my replyErrorMsg } else { my check-redirect } } } Httpd::Wrk instproc unmodified mtime { my instvar meta if {[info exists meta(if-modified-since)]} { set ms $meta(if-modified-since) regexp {^([^;]+);(.*)$} $ms _ ms options if {[catch {set mss [clock scan $ms]}]} { regsub -all -- {-} $ms " " ms if {[catch {set mss [clock scan $ms]}]} { set ms [lreplace $ms end end] set mss [clock scan $ms] } } return [expr {$mtime <= $mss}] } return 0 } Httpd::Wrk instproc check-redirect {} { [my info parent] instvar redirects my instvar resourceName hasFormData query set resource $resourceName$hasFormData$query foreach {pattern hostport} $redirects { #puts stderr "match <$pattern> <$resource> [regexp $pattern $resource]" if {[regexp $pattern $resource]} { #puts stderr "do redirect to $hostport/$resource" my replyCode 302 location $hostport/$resource my replyErrorMsg return } } my respond } Httpd::Wrk instproc respond {} { # Respond to the query # the request was read completely... This method is wellsuited for mixins! my respond-[my set method] } Httpd::Wrk instproc respond-GET {} { #my showCall my instvar fileName my sendFile $fileName } Httpd::Wrk instproc respond-HEAD {} { # Respond to the query my instvar fileName if {[file readable $fileName]} { my replyCode 200 \ Last-Modified [Httpd Date [file mtime $fileName]] \ Content-Type [Mime guessContentType $fileName] \ Content-Length [file size $fileName] my connection puts "" #my log Done "$fileName [Mime guessContentType $fileName]" my close } else { my replyCode 404 my replyErrorMsg } } Httpd::Wrk instproc respond-OPTIONS {} { # Respond to the query my replyCode 200 \ Allow "OPTIONS, GET, HEAD, POST" \ Public "OPTIONS, GET, HEAD, POST" my connection puts "" my close } Httpd::Wrk instproc respond-PUT {} { my instvar data method fileName my replyCode [expr {[file writable $fileName] ? 200 : 201}] my connection puts "" set out [open $fileName w] fconfigure $out -translation binary puts -nonewline $out $data my log Done "$fileName [Mime guessContentType $fileName]" close $out my close } Httpd::Wrk instproc respond-CGI {} { my instvar fileName if {[file executable $fileName]} { my replyCode 200 my connection puts [exec $fileName] ;# no parameter handling yet my close } else { my replyCode 403 my replyErrorMsg } } Httpd::Wrk instproc new-formData {} { set arg [Object create [self]::[my autoname formData]] my lappend formData $arg return $arg } Httpd::Wrk instproc decode-formData {query} { #my showCall foreach pair [split [string trimleft $query \n] &] { set arg [my new-formData] if {[regexp {^(.+)=(.*)$} $pair _ name content]} { $arg set name [url decodeItem $name] $arg set content [url decodeItem $content] } else { $arg set content [url decodeItem $pair] } } } Httpd::Wrk instproc decode-POST-query {} { if {[my exists meta(content-type)]} { set ct [my set meta(content-type)] if {[regexp -nocase {application/x-www-form-urlencoded} $ct]} { #my showMsg "ordinary FORM" my decode-formData [my set data] return } elseif {[regexp -nocase {multipart/form-data; *boundary=(.*)$} $ct \ _ boundary]} { #my showMsg "multipart FORM" set parts [my set data] set bl [expr {[string length $boundary]+2}] while {[set endIDX [string first --$boundary $parts]] > -1} { set part [string range $parts $bl [expr {$endIDX-1}]] if {[set endHD [string first \r\n\r\n $part]] > -1} { set arg [my new-formData] if {[catch {Mime multipart-decode-header \ [string range $part 0 [expr {$endHD-1}]] \ $arg} msg]} { my replyCode 406 my replyErrorMsg $msg return 0 } $arg set content [string range $part \ [expr {$endHD + 4}] \ [expr {[string length $part] -3}]] #$arg showVars } set parts [string range $parts [expr {$endIDX+2}] end] } } } } Httpd::Wrk instproc respond-POST {} { my replyCode 405 my replyErrorMsg #my respond-CGI } Httpd::Wrk instproc replyErrorMsg {{msg ""} args} { my instvar replyCode [self class] instvar codes foreach {tag value} $args {my connection puts "$tag: $value"} my sendText "\n<HTML><title>Status Code: $replyCode</title>\n\ <BODY>$msg<p>\n\ Status Code $replyCode: <b>$codes($replyCode)</b><br>\n\ Resource Name: [my set resourceName]</BODY></HTML>\n" my close ;# close must be last call } Httpd::Wrk instproc replyCode {code args} { #my showCall my instvar version [self class] instvar codes my set replyCode $code my connection puts "HTTP/$version $code $codes($code)" foreach {tag value} [my set replyHeaderFields] {my connection puts "$tag: $value"} foreach {tag value} $args {my connection puts "$tag: $value"} if {$code >= 400} { my log Error "$code $codes($code)\tmeta: [my array get meta]" } else { my log Done "$code $codes($code)" } } Httpd::Wrk instproc sendText {response {type text/html}} { #my showCall my connection puts "Content-Type: $type" # bei einer leeren Responses blockieren Klienten und melden Fehler if {$response eq ""} { set response " " } my connection puts "Content-Length: [string length $response]\n" if {[my set method] ne "HEAD"} { my connection fconfigure -translation {auto binary} my connection puts-nonewline $response } else { my showMsg HEAD! } } Httpd::Wrk instproc sendMsg {response {type text/html}} { # my showCall my replyCode 200 my sendText $response $type my close } Httpd::Wrk instproc sendDir {dirName} { [my info parent] instvar root set title "Directory listing" set reply "<HTML><TITLE>$title</TITLE><BODY><H1>$title</H1>\n<TABLE>\n" set oldpwd [pwd] cd $root set dirs ""; set files "" foreach f [lsort -dictionary [glob -nocomplain ./$dirName/*]] { set full [file join $root $f] set pname [string trimleft $f ./] if {[file isdir $full]} { append pname / } if {![catch {set size [file size $full]}]} { # it is not a broken link set entry "" append entry <tr> \ <td> "<A href='/$pname'>$pname</a>" </td> \ "<td align='right'>" $size </td> \ "<td align='right'>" [clock format [file mtime $full]] </td> \ </tr>\n if {[string match */ $pname]} {append dirs $entry} else {append files $entry} } } append reply $dirs $files "</TABLE></HTML>\n" cd $oldpwd my sendMsg $reply return } Httpd::Wrk instproc sendFile {fn {type ""}} { #my showCall if {[file isdirectory $fn]} { set full [file join $fn index.html] if {[file readable $full]} { set fn $full } else { my sendDir [my set resourceName] return } } #puts stderr "readable '$fn' [file readable $fn]" if {[file readable $fn]} { set mtime [file mtime $fn] if {[my unmodified $mtime]} { my replyCode 304 my replyErrorMsg return } if {$type eq ""} {set type [Mime guessContentType $fn]} my replyCode 200 \ Last-Modified [Httpd Date $mtime] \ Content-Type $type \ Content-Length [file size $fn] my connection puts "" my connection fconfigure -translation binary ;#-buffersize 65536 set localFile [open $fn] fconfigure $localFile -translation binary -buffersize 65536 fcopy $localFile [my connection set socket] \ -command [list [self] fcopy-end $localFile] } else { my replyCode 404 my replyErrorMsg } } Httpd::Wrk instproc fcopy-end {localFile args} { # End of fcopy close $localFile my connection fconfigure -blocking false ;# fconfigure changes blocking in 8.3.2! my close } Httpd::Wrk instproc log {reason arg} { # trivial logging my instvar port ipaddr if {[my exists user]} { set user [my set user]/[my set realm] } {set user -} [my info parent] instvar logfile puts $logfile "[clock format [clock seconds]] $user $ipaddr:$port\t$reason\t$arg" flush $logfile } ######################################################################### Class Httpsd -superclass Httpd -parameter { {port 443} {httpdWrk Httpsd::Wrk} {requestCert 0} {requireValidCert 0} {certfile filename.crt} {keyfile filename.key} {cafile cacert.pem} {infoCb {}} } Httpsd instproc init args { package require tls proc tls::password {} { puts stderr "getting passwd" return pemp } next } Class Httpsd::Wrk -superclass Httpd::Wrk Httpsd::Wrk instproc firstLine {} { my set forceVersion1.0 1 my lappend replyHeaderFields Connection close next } Httpsd::Wrk instproc makeConnection {socket} { Connection create [self]::connection -socket $socket -req [self] [my info parent] instvar \ keyfile certfile cafile infoCb requestCert requireValidCert # SSL-enable a regular Tcl channel - it need not be a socket, but # must provide bi-directional flow. Also setting session parameters # for SSL handshake. www.sensus.org/tcl/tls.htm # -request bool --> Request a certificate from peer during SSL # handshake. (default: true) # -require bool --> Require a valid certificate from peer during SSL # handshake. If this is set to true then -request must also be set # to true. (default: false) # -server bool --> Handshake as server if true, else handshake as # client.(default: false) my connection importSSL -server 1 \ -certfile $certfile \ -keyfile $keyfile \ -cafile $cafile \ -request $requestCert \ -require $requireValidCert \ -command $infoCb } ######################################################################### ### ### Mixin-Classes for respond patterns ### mixes into Http and Httpd::Wrk ### Class Httpd::Responder Httpd::Responder instproc init args { next my lappend workerMixins Httpd::Responder::Wrk my set respondpatterns {} # Example how to register new methods: regexp is matched with the triple # (HTTP-METHOD URL HASFORMDATA) where HASFORMDATA is empty when no # parameters are given. The parsed components of the url etc. are # available as instvars my actions {^GET cgi[-]bin [?]} respond-CGI } Httpd::Responder instproc actions {regexp method} { my lappend respondpatterns $regexp $method } Class Httpd::Responder::Wrk Httpd::Responder::Wrk instproc respond {} { my instvar fileName method resourceName hasFormData [my info parent] instvar respondpatterns ### auch das ist ein kandidat fuer eine chain of responsibility foreach {pattern action} $respondpatterns { if {[regexp $pattern "$method $resourceName $hasFormData"]} { my $action return } } next } ### ### Mixin-Classes for Access Control ### mixes into Http and Httpd::Wrk ### Class Httpd::AccessControl Httpd::AccessControl abstract instproc protectedResource {fn method varAuthMethod varRealm} Httpd::AccessControl abstract instproc credentialsNotOk {wrk credentials authMethod realm} Httpd::AccessControl abstract instproc addRealmFile {realm authFile} Httpd::AccessControl abstract instproc addRealmEntry {realm passwds} Httpd::AccessControl abstract instproc protectDir {realm path methods} Class Httpd::AccessControl::Wrk Httpd::AccessControl::Wrk instproc respond {} { my instvar fileName method digestChallengeData set controller [my info parent] if {[$controller protectedResource $fileName $method authMethod realm]} { #my showMsg "*** Protected resource: $fileName $method" if {![my exists meta(authorization)] || [$controller credentialsNotOk [self] \ [my set meta(authorization)] $authMethod $realm]} { my unauthorizedAccess $realm return } } next } ########################################################################### ## Basic Access Control ########################################################################### Class Httpd::BasicAccessControl -superclass Httpd::AccessControl Httpd::BasicAccessControl instproc initWorkerMixins {} { my lappend workerMixins [self class]::Wrk } Httpd::BasicAccessControl instproc init args { next my initWorkerMixins } Httpd::BasicAccessControl instproc protectedResource {fn method varAuthMethod varRealm} { #my showCall # check whether access to $fn via $method is protected upvar [self callinglevel] $varAuthMethod authMethod $varRealm realm # we check only the current directory, not the parent directories if {[string match */ $fn]} { set path $fn } else { set path [file dirname $fn]/ } foreach i [list $path $path:$method] { if {[my exists protected($i)]} { set realm [my set protected($i)] set authMethod Basic return 1 } } return 0 } Httpd::BasicAccessControl instproc credentialsNotOk {wrk credentials authMethod realm} { # check whether $credentials are sufficient for $realm regexp {^(.*):(.*)$} [base64 decode [lindex $credentials 1]] _ user pwd #puts stderr "passwd($realm:$user)=[my exists passwd($realm:$user)]" $wrk set user $user $wrk set realm $realm if {[my exists passwd($realm:$user)]} { return [expr {[my set passwd($realm:$user)] != $pwd}] } return 1 } Httpd::BasicAccessControl instproc addRealmEntry {realm passwds} { if {[llength $passwds] == 1} { my addRealmFile [lindex $passwds 0] } else { foreach {name pwd} $passwds { #puts stderr "realm='$realm' adding user: $name pw: $pwd" my set passwd($realm:$name) $pwd } } } Httpd::BasicAccessControl instproc addRealmFile {realm authFile} { set FILE [open $authFile r] while {![eof $FILE]} { foreach {name pwd} [split [gets $FILE] :] { my addRealmEntry $realm [list $name $pwd] } } close $FILE } Httpd::BasicAccessControl instproc protectDir {realm path methods} { my instvar root my checkRoot set resource $root/$path ;# resources are currently directories if {$methods == {}} { my set protected($resource) $realm ;#for every method } else { foreach m $methods { my set protected($resource:$m) $realm ;#for selected methods } } } Class Httpd::BasicAccessControl::Wrk -superclass Httpd::AccessControl::Wrk Httpd::BasicAccessControl::Wrk instproc unauthorizedAccess {realm} { my set digestChallengeData(realm) $realm my replyCode 401 www-authenticate "Basic realm=\"$realm\"" my replyErrorMsg "Unauthorized request for realm '$realm'" } ########################################################################### ## Digest Access Control ########################################################################### Class Httpd::DigestAccessControl -superclass Httpd::BasicAccessControl Httpd::DigestAccessControl instproc init args { package require tcu next my lappend workerMixins [self class]::Wrk } Httpd::DigestAccessControl instproc credentialsNotOk {wrk credentials authMethod realm} { # check whether $credentials are sufficient for $realm my showMsg "Digest Authentication ..." # HELP FD: hier muss ich noch überprüfen, ob die digest-header # (credentials) ok sind. Hier habe ich probleme auf die sachen, # die der worker gesendet (bspw. nonce) hat zu kommen. Ich # weiß, man kann mit [my info children] daran kommen. Aber, # was ist, wenn man mehrere Worker hat? ## Fredj, das sollte kein Problem sein: das credentialsNotOk wird ## vom aktuellen worker (respond) aufgerufen. man kann dem *NotOk ## den worker mitgeben, oder die beiden Methoden etwas umorganisieren. return } Class Httpd::DigestAccessControl::Wrk -superclass Httpd::BasicAccessControl::Wrk Httpd::DigestAccessControl::Wrk instproc unauthorizedAccess {realm} { my set digestChallengeData(realm) $realm my replyCode 401 www-authenticate "Digest [my digestChallenge]" my replyErrorMsg "Unauthorized request for realm '$realm'" } Httpd::DigestAccessControl::Wrk instproc digestChallenge {} { my showCall my instvar digestChallengeData my mkDigestChallengeData set digestResponse {} foreach {t v} [array get digestChallengeData] { append digestResponse "$t = \"$v\", " } regsub {, $} $digestResponse {} digestResponse return $digestResponse } Httpd::DigestAccessControl::Wrk instproc mkDigestChallengeData {} { my showCall my instvar digestChallengeData # RFC 2617 # challenge = "Digest" digest-challenge # digest-challenge = 1#( realm | [ domain ] | nonce | # [ opaque ] |[ stale ] | [ algorithm ] | # [ qop-options ] | [auth-param] ) # domain = "domain" "=" <"> URI ( 1*SP URI ) <"> # URI = absoluteURI | abs_path # nonce = "nonce" "=" nonce-value # nonce-value = quoted-string # opaque = "opaque" "=" quoted-string # stale = "stale" "=" ( "true" | "false" ) # algorithm = "algorithm" "=" ( "MD5" | "MD5-sess" | token ) # qop-options = "qop" "=" <"> 1#qop-value <"> # qop-value = "auth" | "auth-int" | token # FD: hier würde man die nötigen parametern (nonce,domain,opaque, # etc.) berechnen und in dem asso. Array speichern. # FD: minimale Anforderung set digestChallengeData(nonce) [my genNonce] set digestChallengeData(opaque) [base64 encode [self]:my-self-spcified-string] set digestChallengeData(algorithm) "MD5" ;#default set digestChallengeData(qop) "auth" set digestChallengeData(domain) [array names [my info parent]::protected] } Httpd::DigestAccessControl::Wrk instproc genNonce {} { my showCall my instvar digestChallengeData set timeStamp [clock seconds] set nonce [base64 encode [md5 $timeStamp:[self]]] return $nonce } # # example usage: #Httpd h1 -port 8081 -root [glob ~/wafe] #Httpd h2 -port 9086 -root $root \ -mixin {Httpd::Responder Httdp::BasicAccessControl} \ -addRealmEntry test {test test} -protectDir test "" {} \ -redirect {^(mailman|pipermail|cgi-bin) http://alice.wu-wien.ac.at:80} namespace export Httpd Httpsd namespace eval Httpd { namespace export Wrk \ AccessControl BasicAccessControl DigestAccessControl \ Responder } namespace eval Httpsd { namespace export Wrk } #namespace eval Responder {namespace export Wrk} #namespace eval AccessControl {namespace export Wrk} #namespace eval BasicAccessControl {namespace export Wrk} #namespace eval DigestAccessControl {namespace export Wrk} } namespace import ::xotcl::comm::httpd::* namespace eval Httpd {namespace import ::xotcl::comm::httpd::Httpd::*} namespace eval Httpsd {namespace import ::xotcl::comm::httpd::Httpsd::*} #namespace eval Responder {namespace import ::xotcl::comm::httpd::Responder::*} #namespace eval AccessControl {namespace import ::xotcl::comm::httpd::AccessControl::*} #namespace eval BasicAccessControl {namespace import ::xotcl::comm::httpd::BasicAccessControl::*} #namespace eval DigestAccessControl {namespace import ::xotcl::comm::httpd::DigestAccessControl::*} |
Added assets/xotcl1.6.8/comm/Imap.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | # $Id: Imap.xotcl,v 1.4 2006/02/18 22:17:33 neumann Exp $ package provide xotcl::comm::imap 1.0 package require XOTcl 1 namespace eval ::xotcl::comm::imap { package require xotcl::comm::httpAccess namespace import ::xotcl::* Class Imap -superclass NetAccess -parameter {user} Imap instproc initialize args { my instvar port caching tokenCounter resp token set port 143 set caching 1 set resp(connect) {"[*] OK" login} set resp(login) {"A[0-9]+ OK" loginFinished "A[0-9]+ NO" login} set resp(loginFinished) {"[*] [0-9]+" inboxSize "[*] OK" inboxSelected} set resp(mailSelected) {"[*] [0-9]+ FETCH" fetchBody "A[0-9]+ OK " ignoreLine "[*] " ignoreLine} set resp(heads) {"[*] [0-9]+ FETCH" fetchHeaders "A[0-9]+ OK " ignoreLine "[*] " ignoreLine} set tokenCounter 0 next set token NONE } Imap instproc err {state reply} { my abort "Error in $state: $reply" } Imap instproc token {} { my instvar tokenCounter return [format {A%.4d} [incr tokenCounter]] } Imap instproc imapString {input} { regsub -all {(["\])} $input {\\\1} output ;#" return \"$output\" } Imap instproc queryServer {query state} { #my showCall my instvar S token set token [my token] puts $S "$token $query" #puts stderr "$token $query" flush $S fileevent $S readable [list [self] response $state] } Imap instproc response {state} { my instvar S resp msg token set msg [gets $S] #my showVars msg token foreach {c newState} $resp($state) { if {![regexp {^[*]} $msg] && ![regexp ^$token $msg]} { my showMsg "$state: token=$token IGNORING $msg" return } if {[regexp ^$c $msg]} { #my showMsg "$state NEWSTATE $newState" return [my $newState] } } my err $state "expected=$resp($state), got $msg" } Imap instproc GET {} { my instvar state S path host port user inbox mailNr # number at end of path is the message number in the mailbox if {[regexp {^([^/]+)/([^/]+)/([0-9]+)$} $path _ user inbox mailNr]} { } elseif {[regexp {^([^/]+)/([^/]+)/?$} $path _ user inbox]} { } else { my abort "invalid imap path $path" } regexp {^(.*):([0-9]+)$} $host _ host port # proxy ? if {[catch {set S [socket -async $host $port]} err]} { my abort "Could not open connection to host '$host:$port'\n $err" } else { fconfigure $S -blocking false fileevent $S readable [list [self] response connect] } } Imap instproc login {} { my instvar user host password if {[pwdManager requirePasswd "Imap $user\@$host" $user password]} { my queryServer "login $user [my imapString $password]" login } else { what now? } } Imap instproc loginFinished {} { my instvar user host password inbox pwdManager storePasswd "Imap $user\@$host" $user $password my queryServer "select $inbox" loginFinished } Imap instproc inboxSize {} { my instvar msg nrMails regexp {^[*] ([0-9]+) EXISTS} $msg _ nrMails } Imap instproc inboxSelected {} { my instvar msg contentType nrMails mailNr if {[info exists mailNr]} { set contentType text/plain my body-state my queryServer "fetch $mailNr rfc822" mailSelected } else { my instvar header inbox block host user block set contentType text/html my body-state set what "Mailbox $inbox of $user@$host" set block "<HTML><HEAD><TITLE>$what</TITLE></HEAD>\n" append block "<BODY><H1>$what</H1>\n" \ "The following <i>$nrMails</i> messages are in this mailbox:" \ "<p>\n<UL>\n" my pushBlock catch {unset header} set mailNr $nrMails my queryServer "fetch $nrMails body\[header\]" heads } } Imap instproc ignoreLine {} {;} Imap instproc fetchBody {} { my instvar S fileevent $S readable [list [self] bodyContent] } Imap instproc bodyContent {} { my instvar S block msg set msg [gets $S] if {$msg == ")"} { my set state 4 my finish } else { set block $msg\n my pushBlock } } Imap instproc fetchHeaders {} { my instvar S fileevent $S readable [list [self] headContent] } Imap instproc headContent {} { my instvar S token header nrMails mailNr block host user inbox set msg [gets $S] if {[regexp -nocase {^([^:]+): *(.+)$} $msg _ key value]} { set key [string tolower $key] set header($mailNr,$key) $value } elseif {$msg == ")"} { # mail header finished set block "<LI> Message $mailNr from $header($mailNr,date)<br>\ <A HREF=\"imap://$host/$user/$inbox/$mailNr\">" if {[catch {set from $header($mailNr,from)}]} { if {[catch {set from $header($mailNr,sender)}]} { set from UNKNOWN } } if {[regexp {[(](.*)[)]} $from _ x]} { } elseif {[regexp {[<](.*)[>]} $from _ x]} { } else { set x $from } append block $x ": " if {[info exists header($mailNr,subject)]} { append block $header($mailNr,subject) } append block </A><P> my pushBlock if {$mailNr > 1} { incr mailNr -1 my queryServer "fetch $mailNr body\[header\]" heads } else { set block "</UL></BODY></HTML>\n" my pushBlock my set state 4 my finish } } } namespace export Imap } namespace import ::xotcl::comm::imap::* |
Added assets/xotcl1.6.8/comm/Ldap.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | package provide xotcl::comm::ldap 1.0 package require xotcl::wafecompat ; # Get 'requireModules'. package require XOTcl 1 namespace eval ::xotcl::comm::ldap { namespace import ::xotcl::* requireModules { ldapOpen ldaplibGen.so } Class Ldap -superclass NetAccess -parameter {host port dn attributes scope filter} Ldap instproc initialize args { my instvar port mapToC useCache my set port 389 my set useCache 0 set mapToC(one) onelevel set mapToC(sub) subtree set mapToC(base) base next } Ldap proc urlDecode string { set toParse $string set parsed "" while {1} { if {[regexp {^([^%]*)%(..)(.*)$} $toParse _ front hex toParse]} { append parsed $front [binary format c 0x$hex] } else { append parsed $toParse break } } return $parsed } Ldap instproc getUrlcomponents {} { showCall my instvar path dn attributes scope filter url set path [Ldap urlDecode $path] puts stderr "___ path=<$path>" if {[regexp -nocase {^/([^?]*)(\?([^?]*)(\?([^?]*)(\?([^?]*))?)?)?$} \ $path _ dn a attributes s scope f filter]} { if {$scope eq ""} { set scope "base" } if {$filter eq ""} { set filter "(objectClass=*)" } } else { set errmsg "*** Ldap Url trail=<$path> does not match!\n" append errmsg "___ RFC 1959 says:\n" append errmsg " ldap://<host>:<port>/<dn>\[?<attributes>\[?<scope>?<filter>\]\]\n" append errmsg "___ Cineast and Netscape uses:\n" append errmsg " ldap://<host>:<port>/<dn>\[?<attributes>\[?<scope>\[?<filter>\]\]\]" my abort "Unsupported URL: '$url' \n $errmsg" } } Ldap instproc GET {} { my instvar contentType totalsize state currentsize informObjects block showCall set contentType text/html my getUrlcomponents if {"start" ne $state } { puts stderr "... [self]:$proc ignoring request in state $state" return } my open my search my body-state set totalsize [string length $block] set currentsize $totalsize foreach obj $informObjects { $obj incCb [self] $totalsize $currentsize } my eof } Ldap instproc open {} { showCall my instvar port host ldapHandle set ldapHandle [ldapOpen $host $port] } Ldap instproc bind {} { my instvar ldapHandle showCall } Ldap instproc search {} { showVars my instvar url ldapHandle searchHandle dn attributes scope filter results mapToC path set searchHandle [ldapSearch $ldapHandle $dn \ $mapToC($scope) $filter [split $attributes ,] false results] set nentries [ldapCountEntries $ldapHandle $searchHandle] puts stderr "*** nentries = $nentries" if {!$nentries} {set results ""} my response } Ldap instproc getAttrs {dn} { } Ldap instproc makeUrl {dn} { showCall my instvar port host scope filter attributes set tmpUrl ldap://$host:$port/$dn?$attributes?$scope?$filter return "<a href=\"$tmpUrl\">$dn</a>" } Ldap instproc response {} { showCall my instvar block results attrsVals ldapHandle searchHandle set block " <HTML> <HEAD><TITLE>LDAP searching result!!</TITLE></HEAD> <BODY bgcolor=FFFFFF> <H1>Result</H1>\n <ul>\n" foreach {resDN} $results { append block " <li> [my makeUrl $resDN] <p>\n <ul>\n" ldapAttributes $ldapHandle $searchHandle $resDN attrsVals foreach {a v} [array get attrsVals] { append block " <li> <FONT COLOR=\"\#cc0000\" face=\"Arial,Helvetica\" size=4><b> $a </b></FONT> = $v <p>\n" } append block " </ul>\n" } append block " </ul>\n </BODY>\n</HTML>" } # destructor: Close Connection to LDAP-Server and unbind Ldap instproc destroy {} { showCall my instvar ldapHandle if {[catch {ldapUnbind $ldapHandle} error]} { return $error } my freeSearchHandle } Ldap instproc close {} { showCall my destroy next } Ldap instproc freeSearchHandle {} { showCall my instvar searchHandle if {[info exists searchHandle]} { ldapFreeSearch $searchHandle } } namespace export Ldap } namespace import ::xotcl::comm::ldap::* |
Added assets/xotcl1.6.8/comm/Mime.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | # $Id: Mime.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ package provide xotcl::comm::mime 1.0 package require XOTcl 1 namespace eval ::xotcl::comm::mime { namespace import ::xotcl::* ####################################################################### Class MimeTypeLoader MimeTypeLoader instproc loadMimeTypes {file} { if {![file exists $file]} return puts stderr "Loading Mime types from $file" set f [open $file r] set content [read $f] close $f regsub -all "\\\\ *\n" $content " " content foreach line [split $content \n] { set line [string trim $line] if {[regexp ^\# $line]} continue if {$line eq ""} continue regsub -all " +" $line " " line #puts stderr <$line> while {$line ne ""} { if {[regexp {^ *([^ ]+)=\"([^\"]+)\" *(.*)$} $line _ key value line]} { set v([string tolower $key]) $value } elseif {[regexp {^ *([^ ]+)=([^ ]+) *(.*)$} $line _ key value line]} { set v([string tolower $key]) $value } else { set tokens [split $line] if {![regexp / [lindex $line 0]]} { puts stderr "Mime: cannot parse line '$line' in $file" } else { set v(exts) [join [lrange $tokens 1 end] ,] set v(type) [lindex $tokens 0] } break } } if {[info exists v(exts)] && [info exists v(type)]} { set v(exts) [string tolower $v(exts)] set v(type) [string tolower $v(type)] foreach ext [split $v(exts) ,] { set ext [string trimleft $ext .] #puts stderr "ext '$ext', contentType = '$v(type)'" my set extTable($ext) $v(type) } unset v(exts) v(type) } else { puts stderr "invalid mime entry in $file" } } } MimeTypeLoader instproc guessContentType {name} { my loadMimeTypes ~/.mime.types my mixin {} return [next] } Class MIME MIME instproc guessContentType {name} { my instvar extTable nameTable if {[regexp {\.([a-zA-Z0-9]+)$} $name _ ext]} { catch {set contentType $extTable([string tolower $ext])} } if {![info exists contentType]} { foreach namePattern [array names nameTable] { if {[regexp $namePattern $name]} { set contentType text/plain break } } } if {![info exists contentType]} { set contentType unknown/unknown } return $contentType } MIME instproc multipart-decode-header {header obj} { $obj instvar name filename contentType foreach line [split $header \r] { set line [string trim $line \n] #puts stderr line=$line if {[regexp -nocase {^Content-Disposition: *([^;]+);(.*)$} $line _ \ dispo detail]} { if {$dispo ne "form-data"} { error "Unknown Content Disposition '$line'" } if {![regexp -nocase { name *= *"([^\"]+)"} $line _ name]} { error "can't parse form-data name '$line'" } regexp -nocase {filename *= *"([^\"]+)"} $line _ filename } elseif {[regexp -nocase {^Content-Type: *([^; ]+)} $line _ contentType]} { } else { my showMsg "ignoring '$line'" } } } MIME create Mime -mixin MimeTypeLoader Mime array set nameTable { README text/plain } Mime array set extTable { gif image/gif xpm image/x-xpixmap xbm image/x-xbitmap jpg image/jpeg png image/x-png html text/html htm text/html xml text/xml css text/css ps application/postscript pdf application/pdf doc application/msword xls application/msexel } ################################################################## Class FormData FormData instproc encode list {;#RFC 1867 my showCall } FormData formData ################################################################## Class Base64 Base64 instproc init args { my instvar base64 base64_en # Emit base64 encoding for a string set i 0 foreach char {A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \ a b c d e f g h i j k l m n o p q r s t u v w x y z \ 0 1 2 3 4 5 6 7 8 9 + /} { set base64($char) $i set base64_en($i) $char incr i } next } Base64 instproc encode string { my instvar base64_en set result {} set length 0 foreach {a b c} [split $string {}] { scan $a %c x if {$c ne ""} { scan $b %c y scan $c %c z append result \ $base64_en([expr {($x>>2) & 0x3F}]) \ $base64_en([expr {(($x<<4) & 0x30) | (($y>>4) & 0xF)}]) \ $base64_en([expr {(($y<<2) & 0x3C) | (($z>>6) & 0x3)}]) \ $base64_en([expr {$z & 0x3F}]) } elseif {$b ne ""} { scan $b %c y append result \ $base64_en([expr {($x>>2) & 0x3F}]) \ $base64_en([expr {(($x<<4) & 0x30) | (($y>>4) & 0xF)}]) \ $base64_en([expr {($y<<2) & 0x3C}]) \ = } else { append result \ $base64_en([expr {($x>>2) & 0x3F}]) \ $base64_en([expr {($x<<4) & 0x30}]) \ == } if {[incr length 4] >= 72} { append result \n set length 0 } } return $result } Base64 instproc decode string { my instvar base64 set output {} set group 0 set j 18 foreach char [split $string {}] { if {$char != "="} { set group [expr {$group | ($base64($char) << $j)}] if {[incr j -6] < 0} { scan [format %06x $group] %2x%2x%2x a b c append output [format %c%c%c $a $b $c] set group 0 set j 18 } } else { scan [format %04x $group] %2x%2x a b if {$j==6} { append output [format %c $a] } else { append output [format %c%c $a $b] } break } } return $output } Base64 base64 ################################################################## Class Url Url instproc encode list { set result "" set sep "" foreach i $list { append result $sep [my encodeItem $i] if {$sep != "="} { set sep = } else { set sep & } } return $result } Url instproc encodeItem string { my instvar httpFormMap set alphanumeric a-zA-Z0-9. if {![info exists httpFormMap]} { for {set i 1} {$i <= 256} {incr i} { set c [format %c $i] if {![string match \[$alphanumeric\] $c]} { set httpFormMap($c) %[format %.2x $i] } } # these are handled specially array set httpFormMap { " " + \n %0d%0a } } regsub -all \[^$alphanumeric\] $string {$httpFormMap(&)} string regsub -all \n $string {\\n} string regsub -all \t $string {\\t} string regsub -all {[][{})\\]\)} $string {\\&} string return [subst $string] } Url instproc hexToChar hex { ::scan $hex %x h #my showMsg "::scan $hex %x h -> $h" format %c $h } Url instproc decodeItem string { #my showCall set result "" regsub -all {\+} $string " " string regsub -all {%0d%0a} $string "\n" string regsub -all {%([a-fA-F0-9][a-fA-F0-9])} $string {[my hexToChar \1]} string return [subst -novariables -nobackslashes $string] } Url instproc decodeName string { #my showCall set result "" regsub -all {%0d%0a} $string "\n" string regsub -all {%([a-fA-F0-9][a-fA-F0-9])} $string {[my hexToChar \1]} string return [subst -novariables -nobackslashes $string] } Url instproc decode string { #my showCall set result "" foreach i [split $string &=] { lappend result [decodeItem $i] } #my showVars result return $result } Url url namespace export Mime url base64 } namespace import ::xotcl::comm::mime::* #puts stderr "importing ::xotcl::comm::mime::* to [namespace current]" |
Added assets/xotcl1.6.8/comm/PCache.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 | # -*- Tcl -*- $Id: PCache.xotcl,v 1.9 2007/08/14 16:38:26 neumann Exp $ # Persistent Cache object, using gdbm # Configuration: # The persistent cache is kept in a directory which is determined by # the following three rules. # # 1) the global variable "CACHE_DIR", which has to be set, # before this file is loaded # 2) If "CACHE_DIR" is not set, the global variable "homedir" # is checked, which is assumed to be the home directory # of the Cineast browser # 3) As a last resource the tmp directory is used as the cache directory # # Additionally, the cache directory can be specified after loading of this # file (before the first open) through the instance variable "dir" # in the object persistentCache. package provide xotcl::comm::pcache 1.0 #package require xotcl::package package require XOTcl 1 namespace eval ::xotcl::comm::pcache { namespace import ::xotcl::* variable CACHE_DIR variable homeDir if {![info exists CACHE_DIR]} { if {![info exists homeDir]} { set homeDir [::xotcl::tmpdir] } set CACHE_DIR $homeDir/cache2 } Object persistentCache persistentCache set dir $CACHE_DIR persistentCache proc flush { {cmd {}} } { my instvar DBID if {[info exists DBID]} { $DBID close } if {{} ne $cmd } { if {[catch {eval $cmd} err]} {puts stderr err=$err} } my open ;# UZ: wenn hier das self weggenommen wird, crashed das lintFilter #open ;# UZ: wenn hier das self weggenommen wird, crashed das lintFilter } # the open method for the first invocation persistentCache proc open {} { my instvar dir DBID package require xotcl::store set DBID [Storage someNewChildStore] if {![file isdirectory $dir]} { # if the cache directory does not exist, create it.. file mkdir $dir } # the open method for later invocations, doing the real work my proc open {} { my instvar dir DBID $DBID open $dir/index } # invoke the method open } persistentCache proc clear {} { my instvar cacheFileName contentType meta entry validated dir my flush [list eval file delete -force $dir/index \ [glob -nocomplain $dir/\[0-9\]*::*]] foreach var {cacheFileName contentType meta entry validated} { catch {unset $var} } } persistentCache proc clearEntry {url} { my instvar DBID cacheFileName contentType meta entry validated my inCache $url if {[info exists cacheFileName($url)]} { my flush [list eval file delete -force $cacheFileName($url)] foreach var {cacheFileName contentType meta entry validated} { my showMsg "unset ${var}($url)" catch {unset ${var}($url)} } catch {$DBID unset $url} } } persistentCache proc lazyFlush {} { my instvar flushPending if {[info exists flushPending]} { after cancel $flushPending } set flushPending [after 100 [self] flush] } persistentCache proc newEntry {url access doCache name} { my instvar cacheFileName contentType meta dir if {$name ne ""} { #$access set caching 0 return $name } elseif {$doCache} { set cacheFileName($url) $dir/[pid]-$access set contentType($url) [$access set contentType] set meta($url) [$access set meta] return $cacheFileName($url) } else { # we use the Memory cache only for non-persistent cache entries # which are deleted when the program terminates set fileName $dir/v[pid]-$access MemoryCache + $url $fileName return $fileName } } persistentCache proc entryDone {url} { my instvar entry cacheFileName contentType DBID meta if {![info exists DBID]} { open } $DBID set $url [list \ cacheFileName $cacheFileName($url) \ contentType $contentType($url) \ meta $meta($url) ] my lazyFlush #my showMsg "size=[file size $cacheFileName($url)]" set entry($url) 1 my set validated($url) 1 } persistentCache proc inCache {url} { my instvar entry if {[info exists entry($url)]} { set result 1 } else { my instvar cacheFileName contentType meta DBID if {![info exists DBID]} { open } set result [$DBID set $url] my lazyFlush if {$result ne ""} { set entry($url) 1 array set r $result set cacheFileName($url) $r(cacheFileName) set contentType($url) $r(contentType) set meta($url) $r(meta) set result 1 } else { set result 0 } } return $result } persistentCache proc validated {url} { my set validated($url) 1 } persistentCache proc invalidate {url} { if {[my exists validated($url)]} { my unset validated($url) } } persistentCache proc isValidated {url} { if {[my exists validated($url)]} { return 1 } return 0 } persistentCache proc ifModifiedHeader {url ifModVar} { set result 0 if {[my inCache $url]} { #puts stderr inCache:$url upvar [self callinglevel] $ifModVar ifModifiedHeader my instvar meta array set m $meta($url) if {[info exists m(last-modified)]} { set ifModifiedHeader [list If-Modified-Since $m(last-modified)] set result 1 } } else { #puts stderr "url=$url is not in cache" } return $result } persistentCache proc dump {} { my instvar DBID puts stderr DUMP: foreach k [$DBID names] { puts stderr $k puts stderr " [$DBID set $k]" } } persistentCache proc cacheFileName {url} { my instvar cacheFileName return $cacheFileName($url) } persistentCache proc contentType {url} { my instvar contentType return $contentType($url) } persistentCache proc meta {url} { my instvar meta return $meta($url) } persistentCache proc destroy {} { #my showCall next } #persistentCache flush ########################################################### Cache Object MemoryCache MemoryCache proc query {url entry} { my instvar cache if {[info exists cache($url)]} { upvar [self callinglevel] $entry e #puts stderr "-->[self] [self proc] finds: $url" set e $cache($url) return 1 } return 0 } MemoryCache proc + {url entry} { #puts stderr "-->[self class]:[self] [self proc] $url" my set cache($url) $entry } MemoryCache proc - {url} { #puts stderr "-->[self class]:[self] [self proc] $url" catch {my unset cache($url)} } MemoryCache proc destroy {} { my instvar cache foreach url [array names cache] { set f $cache($url) if {[regexp ^/ $f]} { #my showMsg "trying to remove $f [file exists $f]" file delete -force $f } } next } Object instproc allInstances {} { # Diese Methode ermittelt rekursiv alle direkten und indirekten # Instanzen einer Klasse ::set inst [my info instances] foreach s [my info subclass] { foreach i [$s allInstances] { ::lappend inst $i } } return $inst } # onExit is automatically called when wafe terminates proc onExit {} { #puts stderr "allinstances of Access: [Access allInstances]" #foreach i [Access allInstances] { # if {[info command $i] eq ""} continue # $i destroy #} #MemoryCache clear persistentCache flush #Trace statReport } namespace export persistentCache MemoryCache } namespace import ::xotcl::comm::pcache::* |
Added assets/xotcl1.6.8/comm/pkgIndex.tcl.
> > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded xotcl::comm::connection 1.0 [list source [file join $dir Connection.xotcl]] package ifneeded xotcl::comm::dav 1.0 [list source [file join $dir Dav.xotcl]] package ifneeded xotcl::comm::ftp 1.0 [list source [file join $dir Ftp.xotcl]] package ifneeded xotcl::comm::httpAccess 1.0 [list source [file join $dir Access.xotcl]] package ifneeded xotcl::comm::httpd 1.1 [list source [file join $dir Httpd.xotcl]] package ifneeded xotcl::comm::imap 1.0 [list source [file join $dir Imap.xotcl]] package ifneeded xotcl::comm::ldap 1.0 [list source [file join $dir Ldap.xotcl]] package ifneeded xotcl::comm::mime 1.0 [list source [file join $dir Mime.xotcl]] package ifneeded xotcl::comm::pcache 1.0 [list source [file join $dir PCache.xotcl]] |
Added assets/xotcl1.6.8/lib/COPYRIGHT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen * Specification of Software Systems * Altendorferstraße 97-101 * D-45143 Essen, Germany * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this permission * notice appear in supporting documentation. We make no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied * warranty. * * * This software is based upon MIT Object Tcl by David Wetherall and * Christopher J. Lindblad, that contains the following copyright * message: * * "Copyright 1993 Massachusetts Institute of Technology * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this * permission notice appear in supporting documentation, and that * the name of M.I.T. not be used in advertising or publicity * pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about * the suitability of this software for any purpose. It is * provided "as is" without express or implied warranty." |
Added assets/xotcl1.6.8/lib/Script.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | package provide xotcl::script 1.0 package require XOTcl 1 namespace eval ::xotcl::script { namespace import ::xotcl::* @ @File {description { A small package to instantiate an object, that represents a script. } } @ Class Script { description { An object of type Script becomes automatically the command line arguments evaluated as "-" method calls during creation, e.g. <@pre> Script s -set r 5 </@pre> and a call with cmd-line "-set v 6" of the script, results in an object s with two vars set: r to 5, and v to 6. } } Class Script Script proc create args { eval lappend args $::argv eval next $args } Script instproc unknown args { puts stderr "$::argv0: Unknown option ´-$args´ provided" } namespace export Script } namespace import ::xotcl::script::* |
Added assets/xotcl1.6.8/lib/changeXOTclVersion.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | # # this is a maintenance program for XOTcl that allows us to change the # version information across the whole distribution automatically. # # this program assumes that pwd is in xotcl-full-X.X* directory or subdir # set XOTCL_MAJOR_VERSION 1 set XOTCL_MINOR_VERSION 6 set XOTCL_RELEASE_LEVEL .6 # example settings: # 1.0 #set XOTCL_MAJOR_VERSION 1 #set XOTCL_MINOR_VERSION 0 #set XOTCL_RELEASE_LEVEL .3 # # 0.9.3 #set XOTCL_MAJOR_VERSION 0 #set XOTCL_MINOR_VERSION 9 #set XOTCL_RELEASE_LEVEL .3 #set XOTCL_MAJOR_VERSION 0 #set XOTCL_MINOR_VERSION 9 #set XOTCL_RELEASE_LEVEL .3 #set XOTCL_RELEASE_LEVEL .4 #set XOTCL_RELEASE_LEVEL .5 set XOTCL_VERSION $XOTCL_MAJOR_VERSION.$XOTCL_MINOR_VERSION set FULL_VERSION $XOTCL_VERSION$XOTCL_RELEASE_LEVEL if {![regexp {((^.*/xotcl-)([0-9.]*))/?} [pwd] _ topdirname topdirprefix oldversion]} { error "this program assumes that pwd is in xotcl-X.X* directory" } puts "Prior version is: $oldversion" puts "New version is: $FULL_VERSION" puts "Working in: $topdirname" cd $topdirname puts "... make clean first" if {[file exists Makefile]} { exec make clean } foreach file [exec find . -name configure.in] { puts "... updating $file" set F [open $file]; set c [read $F]; close $F set newFile "" foreach line [split $c \n] { set newLine $line if {[regexp {^XOTCL_MAJOR_VERSION=[0-9]} $line]} { set line "XOTCL_MAJOR_VERSION=$XOTCL_MAJOR_VERSION" } elseif {[regexp {^XOTCL_MINOR_VERSION=[0-9]} $line]} { set line "XOTCL_MINOR_VERSION=$XOTCL_MINOR_VERSION" } elseif {[regexp {^XOTCL_RELEASE_LEVEL=} $line]} { set line "XOTCL_RELEASE_LEVEL=$XOTCL_RELEASE_LEVEL" } elseif {[regexp {^define\(XOTclVersion, .*$} $line]} { set line "define(XOTclVersion, $XOTCL_MAJOR_VERSION.$XOTCL_MINOR_VERSION$XOTCL_RELEASE_LEVEL)" } append newFile $line\n } set F [open $file w]; puts $F $newFile; close $F } set newtopdirname $topdirprefix$FULL_VERSION if {$oldversion != $FULL_VERSION} { puts "topdir: $topdirname->$newtopdirname" file rename -force $topdirname $newtopdirname } cd $newtopdirname foreach file [exec find . -name configure.in] { set dir [file dirname $file] set oldpwd [pwd] cd $dir exec autoconf cd $oldpwd } # determine last configure command cd $newtopdirname if {[catch {set configurecmd [exec fgrep {$ ./configure} config.log]}]} { set configurecmd "./configure" } else { regsub {^ +\$ } $configurecmd "" configurecmd } #puts $configurecmd cd $newtopdirname/ puts "Configuring in [pwd]" eval exec $configurecmd puts "ok ... version is now $FULL_VERSION" |
Added assets/xotcl1.6.8/lib/htmllib.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 | # # htmllib.xotcl # # Author: Antti Salonen, as@fishpool.fi # # Copyright: # # This software is copyrighted by Fishpool Creations Oy Ltd. The following # terms apply to all files associated with the software unless explicitly # disclaimed in individual files. # # The authors hereby grant permission to use, copy, modify, distribute, # and license this software and its documentation for any purpose, provided # that existing copyright notices are retained in all copies and that this # notice is included verbatim in any distributions. No written agreement, # license, or royalty fee is required for any of the authorized uses. # Modifications to this software may be copyrighted by their authors # and need not follow the licensing terms described here, provided that # the new terms are clearly indicated on the first page of each file where # they apply. # # IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY # FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES # ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY # DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE # IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR # MODIFICATIONS. # package provide xotcl::htmllib 1.0 package require XOTcl 1 namespace eval ::xotcl::htmllib { namespace import ::xotcl::* @ @File { description { This package provides the class HtmlBuilder, which can be used to generate HTML documents, or a part of a document. } authors { Antti Salonen, as@fishpool.fi } date { $Date: 2006/09/27 08:12:40 $ } } # # the compressed parameter means that minimal HTML page are created # i.e. that space indentation is turned off # Class HtmlBuilder -parameter { {compressed 0} } ## The constructor. ## ## The HtmlBuilder object has two instance variables. The document Tcl list ## contains the document as a list of strings. The document is stored as a list ## rather than a single string to allow further indentation of the whole ## document when necessary. ## The indentLevel variable is the level of indentation, which is generally ## increased for the contents of any HTML element that may contain block-level ## elements. Typical examples would be <ul>, <li>, <td> and so forth. HtmlBuilder instproc init {} { my instvar document indentLevel set document [list] set indentLevel 0 return } HtmlBuilder instproc clear {} { my instvar document indentLevel set document [list] set indentLevel 0 return } HtmlBuilder instproc getDocument {} { my instvar document return $document } HtmlBuilder instproc toString {} { my instvar document compressed set rvalue "" foreach line $document { if {$compressed == "0"} { append rvalue "$line\n" } else { ## only new line for closing tags at the beginnig ## of a document element if {[string equal -length 2 "</" $line]} { append rvalue "$line\n" } else { append rvalue "$line " } } } return $rvalue } ## parseArguments - Parses the arguments in argList as described in the two ## additional Tcl lists. In addition to the arguments listed in the two ## additional lists, the procedure also accepts arguments common to all ## HTML elements. ## Arguments: ## argList - List of arguments to be parsed ## argParamList - List of arguments that take a parameter ## argNoParamList - List of arguments that don't take a parameter ## Returns: ## A string with arguments to an HTML element. HtmlBuilder proc parseArguments {argList argParamList argNoParamList} { set rvalue "" set argParamList [concat $argParamList [list "ID" "CLASS" "STYLE" "TITLE" "LANG" "DIR"]] set param 0 foreach arg $argList { if {$param} { append rvalue "=\"$arg\"" set param 0 } else { set arg2 [string toupper [string trimleft $arg "-"]] if {[lsearch -exact $argParamList $arg2] != -1} { append rvalue " $arg2" set param 1 } elseif {[lsearch -exact $argNoParamList $arg2] != -1} { append rvalue " $arg2" } else { error "HTML syntax error: Invalid argument $arg2 to element" } } } if {$param} { error "HTML syntax error: Missing parameter to argument $arg2" } return $rvalue } ############################################################################## ## Low-level modification methods: ## ## The efficiency of these is of utmost importance if efficiency is an issue ## in the first place. ## ## addString ## addStringIncr ## addStringDecr ## addWhiteSpace ## addDocument ## mergeDocument ## Add a new arbitrary string to the document. This method is used by other ## modification methods, as well as the user directly to add content other than ## HTML elements. The string str is appended to the document with proper ## indentation. HtmlBuilder instproc addString {str} { my instvar document indentLevel compressed if {$compressed == "0"} { for {set n 0} {$n < $indentLevel} {incr n} { append newLine " " } } append newLine $str lappend document $newLine return } ## Add a string to the document and increase the indentation level. HtmlBuilder instproc addStringIncr {str} { my instvar indentLevel my addString $str incr indentLevel return } ## Decrease the indentation level and add a string to the document. HtmlBuilder instproc addStringDecr {str} { my instvar indentLevel incr indentLevel -1 my addString $str return } # # add the string and replace all line breaks in the # string with addLineBreak calls so that given plain text # appears similar in HTML output HtmlBuilder instproc addStringWithLineBreaks {str} { while {[set idx [string first "\n" $str]] != -1} { my addString [string range $str 0 [expr {$idx - 1}]] my addLineBreak set str [string range $str [expr {$idx + 1}] end] } my addString $str } ## Add a single line of white space to the HTML document. HtmlBuilder instproc addWhiteSpace {} { my addString "" return } ## Add the content of the document given as parameter. HtmlBuilder instproc addDocument {document} { set documentList [$document getDocument] foreach line $documentList { my addString $line } return } ## Merge the content of the document given as a parameter. The difference ## to addDocument is that the document merged is destroyed. HtmlBuilder instproc mergeDocument {document} { set documentList [$document getDocument] foreach line $documentList { my addString $line } $document destroy return } ############################################################################## ## HTML generation methods: ## ## The methods for generating various HTML structures are either a pair of ## start and end methods, such as startParagraph and endParagraph, or a single ## method such as addListItem. Even if the the closing tag for <p>, for ## example, is not required by the HTML specification, using the closing method ## is necessary to have the document properly indented. # Add a string to the document within <strong>...</strong> HtmlBuilder instproc addStringStrong {str} { my addString "<STRONG>$str</STRONG>" return } # Add a string to the document within <em>...</em> HtmlBuilder instproc addStringEmphasized {str} { my addString "<EM>$str</EM>" return } # Add a comment to the document <!-- ... --> HtmlBuilder instproc addComment {str} { my addString "<!-- $str -->" return } HtmlBuilder instproc addLineBreak {} { my addString "<BR>" return } ## startDocument - Start an HTML document. Currently all documents are HTML 4.0 ## Transitional. HTML, BODY, HEAD and TITLE elements are added/started here. ## Optional arguments: ## -title documentTitle (empty if not given) ## -stylesheet externalStyleSheet ## -bgcolor backgroundColour (deprecated in HTML 4.0) HtmlBuilder instproc startDocument {args} { set title "" foreach {name value} $args { switch -- $name { -title { set title $value } -stylesheet { set stylesheet $value } -bgcolor { set bgcolor $value } } } my addString {<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/frameset.dtd">} my addWhiteSpace my addString {<HTML>} my addStringIncr {<HEAD>} my addString "<TITLE>$title</TITLE>" if {[info exists stylesheet]} { my addString "<LINK REL=\"StyleSheet\" HREF=\"$stylesheet\" TYPE=\"text/css\">" } my addStringDecr {</HEAD>} my addWhiteSpace if {[info exists bgcolor]} { my addStringIncr "<BODY BGCOLOR=\"$bgcolor\">" } else { my addStringIncr {<BODY>} } return } ## endDocument - end an HTML document HtmlBuilder instproc endDocument {} { my addStringDecr {</BODY>} my addString {</HTML>} return } ## startParagraph - start a P element ## Optional arguments: ## Common HTML arguments HtmlBuilder instproc startParagraph {args} { set attributes [HtmlBuilder parseArguments $args [list] [list]] my addStringIncr "<P$attributes>" return } ## endParagraph - end a P element HtmlBuilder instproc endParagraph {} { my addStringDecr {</P>} return } ## startAnchor - start an A element ## Optional arguments: ## -href URI ## -name cdata ## -target frameTarget ## Common HTML arguments HtmlBuilder instproc startAnchor {args} { set attributes [HtmlBuilder parseArguments $args \ [list "HREF" "NAME" "TARGET"] [list]] my addStringIncr "<A$attributes>" return } ## endAnchor - end an A element HtmlBuilder instproc endAnchor {args} { my addStringDecr {</A>} return } ## addAnchor - add an A element, using content as the visible link. ## Optional arguments: ## -href URI ## -name cdata ## -target frameTarget ## Common HTML arguments HtmlBuilder instproc addAnchor {content args} { eval my startAnchor $args my addString $content my endAnchor return } ## startUnorderedList - start a UL element ## Optional arguments: ## Commmon HTML arguments HtmlBuilder instproc startUnorderedList {args} { set attributes [HtmlBuilder parseArguments $args [list] [list]] my addStringIncr "<UL$attributes>" return } ## endUnorderedList - end a UL element HtmlBuilder instproc endUnorderedList {} { my addStringDecr {</UL>} return } ## startListItem - start an LI element ## Optional arguments: ## Common HTML arguments HtmlBuilder instproc startListItem {args} { set attributes [HtmlBuilder parseArguments $args [list] [list]] my addStringIncr "<LI$attributes>" return } ## endListItem - end an LI element HtmlBuilder instproc endListItem {} { my addStringDecr {</LI>} return } ## add a simple list item HtmlBuilder instproc addListItem {content} { my startListItem my addString $content my endListItem } ## startTable - start a TABLE element. Note that if the -border argument isn't ## used, by default the table are created with borders (<TABLE BORDER>). ## Optional arguments: ## -border pixels ## -cellpadding length ## -cellspacing length ## -summary text ## -width length ## -bgcolor color spec ## Common HTML arguments HtmlBuilder instproc startTable {args} { set attributes [HtmlBuilder parseArguments $args \ [list "BORDER" "CELLPADDING" "CELLSPACING" "SUMMARY" \ "WIDTH" "BGCOLOR"] [list]] if {[lsearch $args "-border"] == -1} { append attributes " BORDER" } my addStringIncr "<TABLE$attributes>" return } ## endTable - end a TABLE element HtmlBuilder instproc endTable {} { my addStringDecr {</TABLE>} return } ## startTableRow - start a TR element ## Optional arguments: ## Common HTML arguments HtmlBuilder instproc startTableRow {args} { set attributes [HtmlBuilder parseArguments $args [list "VALIGN"] [list]] my addStringIncr "<TR$attributes>" return } ## endTableRow - end a TR element HtmlBuilder instproc endTableRow {} { my addStringDecr {</TR>} return } ## startTableCell - start a TD element ## Optional arguments: ## -colspan number ## -rowspan number ## -align left|center|right|justify|char ## -valign top|middle|bottom|baseline ## -bgcolor ## -width ## Common HTML arguments HtmlBuilder instproc startTableCell {args} { set attributes [HtmlBuilder parseArguments $args \ [list "COLSPAN" "ROWSPAN" "ALIGN" "VALIGN" \ "BGCOLOR" "WIDTH"] [list]] my addStringIncr "<TD$attributes>" return } ## endTableCell - end a TD element HtmlBuilder instproc endTableCell {} { my addStringDecr {</TD>} return } # # add a simple table cell which just contains a string # HtmlBuilder instproc addTableCell {{string ""} args} { eval my startTableCell $args my addString $string my endTableCell } ## startTableHeaderCell - start a TH element ## Optional arguments: ## -colspan number ## -rowspan number ## -align left|center|right|justify|char ## -valign top|middle|bottom|baseline ## Common HTML arguments HtmlBuilder instproc startTableHeaderCell {args} { set attributes [HtmlBuilder parseArguments $args \ [list "COLSPAN" "ROWSPAN" "ALIGN" "VALIGN"] [list]] my addStringIncr "<TH$attributes>" return } ## endTableHeaderCell - end a TH element HtmlBuilder instproc endTableHeaderCell {} { my addStringDecr {</TH>} return } ## startForm - start a FORM element ## Required arguments: ## -action URI ## Optional arguments: ## -method get|post ## Common HTML arguments HtmlBuilder instproc startForm {args} { set attributes [HtmlBuilder parseArguments $args \ [list "ACTION" "METHOD" "ENCTYPE"] [list]] my addStringIncr "<FORM$attributes>" return } ## endForm - end a FORM element HtmlBuilder instproc endForm {} { my addStringDecr {</FORM>} return } ## addInput - add in INPUT element ## Required arguments: ## -type <input type> ## -name <control name> ## Optional arguments: ## -value <initial value> ## -size <width of input, in pixels of characters> ## -maxlength <max number of characters for text input> ## -checked ## Common HTML arguments HtmlBuilder instproc addInput {args} { set attributes [HtmlBuilder parseArguments $args \ [list "TYPE" "NAME" "VALUE" "SIZE" "MAXLENGTH"] \ [list "CHECKED"]] my addString "<INPUT$attributes>" return } ## addTextArea - start a TEXTAREA element ## First parameter: value - Default value of the text area ## Required arguments: ## -rows <number of rows> ## -cols <number of columns> ## Optional arguments: ## -name <control name> ## Common HTML Arguments HtmlBuilder instproc addTextArea {value args} { set attributes [HtmlBuilder parseArguments $args \ [list "ROWS" "COLS" "NAME"] [list]] my addString "<TEXTAREA$attributes>$value</TEXTAREA>" return } ## startOptionSelector - start a SELECT element ## Optional arguments: ## -name <control name> ## -size <number of visible items> ## -multiple ## Common HTML arguments HtmlBuilder instproc startOptionSelector {args} { set attributes [HtmlBuilder parseArguments $args \ [list "NAME" "SIZE"] [list "MULTIPLE"]] my addStringIncr "<SELECT$attributes>" return } ## endOptionSelector - end a SELECT element HtmlBuilder instproc endOptionSelector {} { my addStringDecr "</SELECT>" return } ## startOption - start an OPTION element ## Optional arguments: ## -value <value of option> ## -selected ## Common HTML arguments HtmlBuilder instproc startOption {args} { set attributes [HtmlBuilder parseArguments $args \ [list "VALUE"] [list "SELECTED"]] my addStringIncr "<OPTION$attributes>" return } ## endOption - end an OPTION element HtmlBuilder instproc endOption {} { my addStringDecr "</OPTION>" return } ## addImage - add an IMG element ## Required arguments: ## -src <url> ## -alt <alternate text> ## -align <alignment> (deprecated in HTML 4.0) ## Optional arguments: ## Common HTML arguments HtmlBuilder instproc addImage {args} { set attributes [HtmlBuilder parseArguments $args \ [list "SRC" "ALT" "ALIGN"] [list]] my addString "<IMG$attributes>" return } ## startBlock - start a DIV element (a generic block-level container) ## Optional arguments: ## Common HTML attributes HtmlBuilder instproc startBlock {args} { set attributes [HtmlBuilder parseArguments $args [list] [list]] my addStringIncr "<DIV$attributes>" return } ## endBlock - end a DIV element HtmlBuilder instproc endBlock {} { my addStringDecr "</DIV>" return } ## addHorizontalRule - add an HR element ## Optional arguments: ## Common HTML arguments HtmlBuilder instproc addHorizontalRule {args} { set attributes [HtmlBuilder parseArguments $args [list] [list]] my addString "<HR$attributes>" return } namespace export HtmlBuilder } namespace import ::xotcl::htmllib::* |
Added assets/xotcl1.6.8/lib/make.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | # $Id: make.xotcl,v 1.4 2006/09/27 08:12:40 neumann Exp $ ### inEachDir changes now to each directory ### install clears tgarget directory before installing ### Object file added (for better -n processing) #lappend auto_path .. package require XOTcl 1 1 namespace import -force ::xotcl::* ### Object make # # shared lib add files for pkgIndex.tcl # make proc mkIndex {name} { #puts stderr "+++ mkIndex in [pwd]" set fls {} foreach f [glob -nocomplain *tcl] { if {![file isdirectory $f]} { set F [open $f]; set c [read $F]; close $F if {[string match "*package provide*" $c]} { lappend fls $f } } } set so [glob -nocomplain *[info sharedlibextension]] # loading libxotcl into xotclsh crashes on some systems foreach lib [list libxotcl$::xotcl::version[info sharedlibextension] \ xotcl$::xotcl::version.dll] { set p [lsearch -exact $so $lib] if {$p != -1} { set so [lreplace $so $p $p] #puts stderr "new so=<$so>" } } #puts stderr "[pwd]: call so=<$so>" set fls [concat $fls $so] if {$fls ne ""} { if {[file exists pkgIndex.tcl]} { file delete -force pkgIndex.tcl } #puts stderr "callinglevel <[self callinglevel]> $fls" #puts stderr "[pwd]:\n\tcall eval pkg_mkIndex -direct . $fls" if {[catch {eval pkg_mkIndex -direct . $fls} errs]} { puts stderr "!!! $errs" } #puts stderr "[pwd] done" } foreach addFile [glob -nocomplain *.add] { if {[file exists $addFile]} { puts stderr "Appending $addFile to pkgIndex.tcl in [pwd]" set OUT [file open pkgIndex.tcl a] set IN [file open $addFile] puts -nonewline $OUT [read $IN] close $IN; close $OUT } } #puts stderr "+++ mkIndex name=$name, pwd=[pwd] DONE" } make proc inEachDir {path cmd} { #puts stderr "[pwd] inEachDir $path [file isdirectory $path]" if { [file isdirectory $path] && ![string match *CVS $path] && ![string match *SCCS $path] && ![string match *Attic $path] && ![string match *dbm* $path] } { set olddir [pwd] cd $path eval make $cmd $path set files [glob -nocomplain *] cd $olddir foreach p $files { my inEachDir $path/$p $cmd } #puts stderr "+++ change back to $olddir" } } make proc in {path cmd} { if {[file isdirectory $path] && ![string match *CVS $path]} { set olddir [pwd] cd $path eval make $cmd $path cd $olddir } } ### tcl file-command rename file tcl_file Object file -requireNamespace rename open file::open proc open {f {mode r}} { file open $f $mode } #file proc open {f {mode r}} { ::open $f $mode } file array set destructive { atime 0 attributes 0 copy 1 delete 1 dirname 0 executable 0 exists 0 extension 0 isdirectory 0 isfile 0 join 0 lstat 0 mkdir 1 mtime 0 nativename 0 owned 0 pathtype 0 readable 0 readlink 0 rename 1 rootname 0 size 0 split 0 stat 0 tail 0 type 0 volumes 0 writable 0 } foreach subcmd [file array names destructive] { file proc $subcmd args { #puts stderr " [pwd] call: '::tcl_file [self proc] $args'" eval ::tcl_file [self proc] $args } } ### minus n option Class make::-n foreach f [file info commands] { if {$f eq "unknown" || $f eq "next" || $f eq "self"} continue if {![file exists destructive($f)] || [file set destructive($f)]} { #puts stderr destruct=$f make::-n instproc $f args { puts "--- [pwd]:\t[self proc] $args" } } else { #puts stderr nondestruct=$f make::-n instproc $f args { set r [next] #puts "??? [self proc] $args -> {$r}" return $r } } } ### command line parameters if {![info exists argv] || $argv eq ""} {set argv -all} if {$argv eq "-n"} {set argv "-n -all"} Class Script Script proc create args { eval lappend args $::argv eval next $args } Script instproc unknown args { puts stderr "$::argv0: Unknown option ´-$args´ provided" } Script instproc n {} {file mixin make::-n} Script instproc all {} { make inEachDir . mkIndex } Script instproc dir {dirName} { cd $dirName } Script instproc target {path} { make set target $path } Script create main #puts stderr "+++ make.xotcl finished." #if {[set ::tcl_platform(platform)] eq "windows"} { # exit #} |
Added assets/xotcl1.6.8/lib/makeDoc.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | package require XOTcl 1 1.6 namespace import ::xotcl::* @ @File { description { Documentation tool for the XOTcl distribution.<br> Usage: 'makeDoc docdir filename ?filename ...?'<br> Called by Makefile. } } lappend auto_path [file dirname [info script]] #package require xotcl::package #package verbose 1 package require -exact xotcl::xodoc 1.0 set fileList "" puts "XOTcl Documentation Tool" puts "------------------------" if {$argc > 1} { set DOCDIR [lindex $argv 0] puts "Documenting to directory $DOCDIR:" if {![file isdirectory $DOCDIR]} { file mkdir $DOCDIR } set files [lrange $argv 1 end] foreach file $files { puts "...$file" if {[catch {XODoc documentFileAsHTML $file $DOCDIR} fb]} { puts stderr "\terror processing $file:\n[string replace $::errorInfo 400 end ...]" } else { lappend fileList $file $fb } } } else { error "usage: xodoc docdir filename ?filename ...?" } set filesHtml "" set filesDir "" ## write index page foreach {f fb} $fileList { set dir . regexp {^(.*)/[^/]*$} $f _ dir if {$fb ne "langRef-xotcl"} { set tail ", " if {$dir != $filesDir} { append filesHtml "<li> <b>Directory '$dir': </b><br>" set filesDir $dir set tail "" } append filesHtml "$tail<a HREF=\"./${fb}.html\">[file tail $f]</a>" } } # <html> # <head> # <title>XOTcl - Documentation</title> # </head> # <body bgcolor=FFFFFF> # <h1><IMG ALIGN=MIDDLE SRC = "./logo-100.jpg">Lanuage Reference - Index</h1> set content { The <EM>Extended Object Tcl (XOTcl)</EM> Documentation contains the following parts: <h2> XOTcl Language Documentation </h2> <UL> <LI>XOTcl Tutorial (<a href="tutorial.html">HTML</a>, <a href="tutorial.pdf">PDF</a>) <LI>Language Reference (<a href="langRef-xotcl.html">HTML</a>, <a href="langRef-xotcl.pdf">PDF</a>) <LI>If you have question, problems etc. you might check the <a href="http://alice.wu-wien.ac.at/mailman/listinfo/xotcl">XOTcl mailing list</a> (<a href="http://alice.wu-wien.ac.at:8000/xotcl-mailing-list/">archive 1</a>, <a href="http://alice.wu-wien.ac.at/pipermail/xotcl/">archive 2</a>) or you might check the XOTcl section of the <a href="http://wiki.tcl.tk/XOTcl">Tcl wiki</a>. </UL> <h2>Package and Script Documentation</h2> <center> This section of the documentation is under work... </center> <ul> $filesHtml </ul> <p> <h2>Tcl Online Information </h2> <ul> <li>Online information for <a href="http://www.tcl.tk/man/"> Tcl manual pages</a> </ul> } set content [subst -nobackslashes -nocommands $content] set f [open $DOCDIR/index.html w] puts $f $content close $f puts "Documentation finished" |
Added assets/xotcl1.6.8/lib/metadataAnalyzer.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 | package provide xotcl::metadataAnalyzer 1.0 package require XOTcl 1 namespace eval ::xotcl::metadataAnalyzer { namespace import ::xotcl::* @ @File { description { XOTcl file analyzer for @ metadata. E.g.\ used for doumentation with xoDoc (but in the static variant StaticMetadataAnalyzer which uses the dynamic variant in this file). <@p> Sample sample usage: <@pre> package require xotcl::metadataAnalyzer # instantiate metadata analyzer object MetadataAnalyzer @::m # make this object be known to @ and turn @ metadata processing on @ analyzerObj @::m @ onOff 1 # read in some metadata tags (in sample file) & execute the file source lib/testx.xotcl # turn @ metadata processing off again @ onOff 0 # print out all collected metadata puts [@::m print] </@pre> } } @ Class MetadataToken { description { Each collected metadata element is stored in a token object. MetadataToken is superclass of token object classes. Each metadata token has two interesting parameters: <@p> "properties" contains list of all described metadata properties. E.g. can be printed with <@pre> foreach p [my set properties] { if {[my exists $p]} { append c " $p=[my set $p]\n" } } </@pre> "name" contains the method, object, ... name of the metadata element. <@p> All metadata token are aggregated by @. Therefore, <@pre> foreach mdt [@ info children] { if {[$mdt istype MetadataToken]} {$mdt print} } </@pre> prints all token. } } Class MetadataToken -parameter { {name ""} {properties ""} } @ MetadataToken proc sortTokenList {l "token list"} { description {Sort a token list with names. Since names are autonames, this means order of appearance in the program.} } MetadataToken proc sortTokenList l { foreach t $l { set names([$t set name]) $t } set sortedNames [lsort [array names names]] set sortedList "" foreach n $sortedNames { lappend sortedList $names($n) } return $sortedList } MetadataToken instproc evaluateMetadata md { my instvar properties foreach {p v} $md { # only append property, if its not already there # otherwise just overwrite the value if {[lsearch $properties $p] == -1} { my lappend properties $p } my set $p $v } } @ MetadataToken instproc printProperties {} { description {Print metadata properties to stdout.} } MetadataToken instproc printProperties {} { set c "" foreach p [my set properties] { if {[my exists $p]} { append c " [my capitalize $p]=[my set $p]\n" } } return $c } MetadataToken instproc capitalize string { if {$::tcl_version >= 8.3} { string toupper $string 0 0 } else { return "[string toupper [string range $string 0 0]][string range $string 1 end]" } } @ MetadataToken abstract instproc print {} { description { Abstract method for printing a token to stdout. } } MetadataToken abstract instproc print {} @ Class FileToken -superclass MetadataToken { description { Token for @File Metadata. } } Class FileToken -superclass MetadataToken FileToken instproc print {} { set c "FILE=[my set name]\n" append c [my printProperties] return $c } @ Class ConstraintToken -superclass MetadataToken { description { Token for @Constraint Metadata. } } Class ConstraintToken -superclass MetadataToken ConstraintToken instproc print {} { set c "CONSTRAINT=[my set name]\n" append c [my printProperties] return $c } @ Class PackageToken -superclass MetadataToken { description { Token for Package metadata. Contains additional parameters: "version" of the package and "type"= either "require" or "provide". } } Class PackageToken -superclass MetadataToken -parameter { {version ""} {type ""} } @ Class ObjToken -superclass MetadataToken { description { Token for Object metadata. Contains additional parameters: "procList" = list of all proc token and "cl"= class name. } } Class ObjToken -superclass MetadataToken -parameter { {procList ""} cl } ObjToken instproc printProcs {} { set c " PROCS:\n" set pl [MetadataToken sortTokenList [my procList]] if {[my istype ClassToken]} { set pl [concat [MetadataToken sortTokenList [my instprocList]] $pl] } foreach p $pl { append c " [$p set name]\n" } return $c } ObjToken instproc print {} { set c "OBJECT=[my set name]\n" if {[my exists cl]} {append c " CLASS=[my set cl]\n"} if {[my exists heritage]} {append c " HERITAGE=[my set heritage]\n"} append c [my printProperties] set pl [MetadataToken sortTokenList [my procList]] if {[my istype ClassToken]} { set pl [concat [MetadataToken sortTokenList [my instprocList]] $pl] } foreach p $pl { append c [$p print] } return $c } @ Class ClassToken -superclass ObjToken { description { Token for Class metadata. Contains additional parameters: "instprocList" = list of all instproc token. } } Class ClassToken -superclass ObjToken -parameter { {instprocList ""} } ClassToken instproc print {} { regsub "^OBJECT=" [next] "CLASS=" r return $r } @ Class MetaClassToken -superclass ClassToken { description { Token for Meta-Class metadata. } } Class MetaClassToken -superclass ClassToken MetaClassToken instproc print {} { regsub "^CLASS=" [next] "META-CLASS=" r return $r } @ Class MethodToken -superclass MetadataToken { description { Token for Method metadata. Contains additional parameters: "arguments" of the method, "returnValue" of the method, "obj" name, "abstract" = 0 or 1 (whether its an abstract method or not). } } Class MethodToken -superclass MetadataToken -parameter { arguments returnValue obj {abstract 0} } # Prints out method information MethodToken instproc print {} { set c " METHOD=[my set name], ARGUMENTS= " if {[my exists arguments]} { foreach {arg argDescription} [my set arguments] { # ignore argDescription and default values if {[llength $arg] > 1} {set arg [lindex $arg 0]} append c $arg " " } } append c "\n [my printProperties]" return $c } @ Class ProcToken -superclass MethodToken { description { Token for Proc metadata } } Class ProcToken -superclass MethodToken ProcToken instproc print {} { regsub "^ METHOD=" [next] " PROC=" r return $r } @ Class InstprocToken -superclass MethodToken { description { Token for Instproc metadata. } } Class InstprocToken -superclass MethodToken InstprocToken instproc print {} { regsub "^ METHOD=" [next] " INSTPROC=" r return $r } @ Class MetadataAnalyzer { description "Handler class for building a metadata runtime structure" } Class MetadataAnalyzer -parameter { {objList ""} {packageList ""} {knownMetaclasses "Class"} {ns ""} fileToken {constraintList ""} } MetadataAnalyzer instproc init args { next } MetadataAnalyzer instproc handleMethod {obj type name {argList ""} {doc ""}} { #puts stderr "+++Method $type $name $argList $doc" set procClass ProcToken set objCl ObjToken if {$type eq "instproc"} { set procCl InstprocToken set objCl ClassToken } set t [$procClass create [my autoname ::xotcl::@::t]] set n [$t set name [string trimleft $name :]] $t set obj $obj set objFound 0 foreach o [my set objList] { if {[$o set name] == $obj} { set objFound 1 if {$type eq "instproc" && ![$o istype ClassToken]} { $o class ClassToken } break } } if {$objFound == 0} { set o [$objCl create [my autoname ::xotcl::@::t]] $o set name $obj my lappend objList $o } $o lappend ${type}List $t $t set arguments $argList $t evaluateMetadata $doc return $t } MetadataAnalyzer instproc handleObj {class name args} { my instvar knownMetaclasses objList extensions set objCl ObjToken if {[lsearch $class $knownMetaclasses] != -1} { set objCl ClassToken } # if an instproc/proc has created an entry for this obj/class # -> use it and overwrite it with new info if {[set idx [lsearch $name $objList]] != -1} { set t [lindex $objList $idx] $t class $objCl } else { set t [$objCl create [my autoname ::xotcl::@::t]] my lappend objList $t } $t set name $name set la [llength $args] # evaluate -superclass argument if {($la == 3 || $la == 2) && [lindex $args 0] eq "-superclass"} { set heritage [$t set heritage [lindex $args 1]] foreach h $heritage { if {[lsearch $h $knownMetaclasses] != -1} { # A new metaclass was defined lappend knownMetaclasses $name $t class MetaClassToken } } } # evaluate documentation set doc "" if {$la == 1} { set doc [lindex $args 0] } elseif {$la == 3} { set doc [lindex $args 2] } $t evaluateMetadata $doc $t set cl $class #puts stderr "+++Obj $name $args" } MetadataAnalyzer instproc handleFile doc { if {[my exists fileToken]} { [my set fileToken] evaluateMetadata $doc } } MetadataAnalyzer instproc handleConstraint {constraint name args} { set t [ConstraintToken create [my autoname ::xotcl::@::t]] my lappend constraintList $t $t set name $name set doc [lindex $args 0] $t evaluateMetadata $doc } MetadataAnalyzer instproc handlePackage args { #puts "$args" if {[llength $args] > 2} { set type [lindex $args 1] if {$type eq "provide" || $type eq "require"} { set t [PackageToken create [my autoname ::xotcl::@::t]] my lappend packageList $t $t set name [lindex $args 2] $t set type $type if {[llength $args] > 3} { $t set version [lindex $args 3] } } } } @ MetadataAnalyzer instproc print {} { description "Print all collected token information to stdout. This method is also an exmaple how the tokens can be used." } MetadataAnalyzer instproc print {} { my instvar extensions packageList set c "" if {[llength $packageList] > 0} { append c "PACKAGES:" foreach t $packageList { if {[$t type] eq "provide"} { append c " Package provided: [$t name] [$t version]\n" } elseif {[$t type] eq "require"} { append c " Package required: [$t name] [$t version]\n" } } } if {[my exists fileToken]} { append c [[my set fileToken] print] } if {[my exists constraintToken]} { append c [[my set constraintToken] print] } if {[info exists extensions]} { # Add list of extensions. foreach extension $extensions { append c "\nExtensions: [$extension name], " \ "Description: [$extension description]" } } set objList [MetadataToken sortTokenList [my objList]] if {[llength $objList]>0} { foreach obj $objList {append c [$obj print]} } return $c } @ Class AnalyzerCmd { description {Class that overload the unknown mechanism of @ to provide metadata analysis.} } Class AnalyzerCmd -parameter { {analyzerObj ""} {onOff 0} } AnalyzerCmd instproc unknown args { my instvar analyzerObj onOff if {!$onOff} {return [next]} if {[llength $args] > 1} { set abstract 0 if {[lindex $args 1] eq "abstract"} { if {[llength $args] > 2} { set p [lindex $args 2] if {$p eq "proc" || $p eq "instproc"} { set args [lreplace $args 1 1] set abstract 1 } } } switch [lindex $args 1] { proc - instproc { set r [eval $analyzerObj handleMethod $args] if {$abstract} {$r abstract 1} return $r } default { switch [lindex $args 0] { @File { return [$analyzerObj handleFile [lindex $args 1]] } @Constraint { return [eval $analyzerObj handleConstraint $args] } default { return [eval $analyzerObj handleObj $args] } } } } } puts stderr "Unknown @ metadata: '$args'" } @ AnalyzerCmd @ { description {Recreate @ with metadata analyis funtionality.} } AnalyzerCmd @ namespace export \ MetadataToken FileToken ConstraintToken PackageToken ObjToken \ ClassToken MetaClassToken MethodToken ProcToken InstprocToken \ MetadataAnalyzer AnalyzerCmd } namespace import ::xotcl::metadataAnalyzer::* |
Added assets/xotcl1.6.8/lib/mixinStrategy.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | package provide xotcl::mixinStrategy 1.0 package require XOTcl 1 namespace eval ::xotcl::mixinStrategy { namespace import ::xotcl::* @ @File { description { These methods provide support for managing "strategies", i.e. mixin-classes, where only one kind of a family of conformant mixins should be registered. <@p> Naming convertions for strategies: All strategies must follow the naming convention 'kind=implementation'. Examples are the persistency strategy 'eager' specfied as 'persistent=eager' or the persistency strategy 'lazy' (specified as 'persistent=lazy') }} @ Object instproc mixinStrategy {strategy "Strategy to be added" } { description { This method adds or replaces a new strategy from the mixin list. Strategies are named following the convention mentioned above. } return "old strategy" } Object instproc mixinStrategy {strategy} { regexp {:?([^:=]+)=} $strategy _ kind set mixins "" set oldStrategy "" foreach mixin [my info mixin] { if {[string match *${kind}=* $mixin]} { lappend mixins $strategy set oldStrategy $mixin } else { lappend mixins $mixin } } if {$oldStrategy eq ""} { lappend mixins $strategy } my mixin $mixins return $oldStrategy } @ Object instproc mixinQueryStrategy {kind "strategy kind"} { description { This method searches the mixin list for a mixin of this kind (starting with $kind=) } return "returns the maching strategy" } Object instproc mixinQueryStrategy {kind} { set m [my info mixin] return [::lindex $m [::lsearch -glob $m $kind=*]] } @ Object instproc add {construct "(inst) 'filter' or 'mixin'" args "to be added"} { description "add the specified (inst) 'filters' or 'mixins'" return "empty" } Object instproc add {kind args} { if {$kind != {instfilter} && $kind != {instmixin} && $kind != {filter} && $kind != {mixin}} { error "Usage: <object> [self proc] <instfilter|instmixin|filter|mixin> ..." } ::set classes [my info $kind] eval ::lappend classes $args my $kind $classes #puts stderr "$kind of [self] are now: ´[my info $kind]´" } @ Object instproc remove {construct "(inst) 'filter' or 'mixin'" args "to be removed"} { description "remove the specified (inst) 'filters' or 'mixins'" return "empty" } Object instproc remove {kind args} { if {$kind != {instfilter} && $kind != {instmixin} && $kind != {filter} && $kind != {mixin}} { error "Usage: <object> [self proc] <instfilter|instmixin|filter|mixin> ..." } ::set classes [my info $kind] foreach c $args { ::set pos [::lsearch $classes $c] if {$pos == -1} { error "$kind ´$c´ could not be removed" } else { set $classes [::lreplace $classes $pos $pos] } } my $kind $classes # puts stderr "$kind of [self] are now: ´[my info $kind]´" } } |
Added assets/xotcl1.6.8/lib/package.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | package provide xotcl::package 1.0 package require -exact xotcl::mixinStrategy 1.0 package require XOTcl 1 rename package tcl_package namespace eval ::xotcl::package { namespace import ::xotcl::* @ @File {description { Represent Tcl package loading command by an XOTcl object. Enables tracking, tracing, and verbose output of package loading } } @ Object package { description { Supports all Tcl package options plus present and verbose. } } @ package proc present {args "packageName or -exact packageName"} { description { Check whether a package is present or not. Similar to Tcl's package present, but works with Tcl < 8.3 } } @ package proc verbose {v "1 or 0"} { description { Toggle verbose output on/off. If on, package prints the locations from where packages are loaded to the screen. Default is off. } } Object package package set component . package set verbose 0 package proc unknown args { #puts stderr "unknown: package $args" namespace eval :: tcl_package $args } package proc verbose value { my set verbose $value } package proc present args { if {$::tcl_version<8.3} { my instvar loaded switch -exact -- [lindex $args 0] { -exact {set pkg [lindex $args 1]} default {set pkg [lindex $args 0]} } if {[info exists loaded($pkg)]} { return $loaded($pkg) } else { error "not found" } } else { namespace eval :: tcl_package present $args } } package proc require args { my instvar component verbose uses loaded set prevComponent $component if {[catch {set v [eval package present $args]} msg]} { #puts stderr "we have to load $msg" switch -exact -- [lindex $args 0] { -exact {set pkg [lindex $args 1]} default {set pkg [lindex $args 0]} } set component $pkg lappend uses($prevComponent) $component set v [namespace eval :: tcl_package require $args] if {$v ne "" && $verbose} { set path [lindex [tcl_package ifneeded $pkg $v] 1] puts "... $pkg $v loaded from '$path'" set loaded($pkg) $v ;# loaded stuff needed for Tcl 8.0 } } set component $prevComponent return $v } Object package::tracker package::tracker set verbose 0 package::tracker proc storeEntry {table index} { my instvar verbose $table set ${table}($index) "[package set component] [info script]" if {$verbose} { puts "... $table $index loaded from [info script]" } } package::tracker proc dump {} { my instvar class object instproc proc if {[info exist class]} { parray class } if {[info exist object]} { parray object } if {[info exist instproc]} { parray instproc } if {[info exist proc]} { parray proc } } package::tracker proc start {} { ::Class add mixin [self]::M ::Object add mixin [self]::M } Class package::tracker::M package::tracker::M instproc create {cls args} { set table [string tolower [string trimleft [self] :]] package::tracker storeEntry $table [lindex $args 0] next $cls add mixin [self class] } package::tracker::M instproc instproc args { package::tracker storeEntry instproc [self]->[lindex $args 0] next } package::tracker::M instproc proc args { package::tracker storeEntry proc [self]->[lindex $args 0] next } #package::tracker set verbose 1 #package::tracker start # #Class A #A instproc p args { # puts A #} #A proc pp args { # a call #} #Object o #o proc ppp args { # another call #} #puts stderr ==================================================== #package::tracker dump #puts stderr AUTO_PATH=$auto_path. namespace export package namespace eval package { namespace export tracker namespace eval tracker { namespace export M } } } namespace import ::xotcl::package::* namespace eval package { namespace import ::xotcl::package::package::* namespace eval tracker { namespace import ::xotcl::package::package::tracker::* } } |
Added assets/xotcl1.6.8/lib/pkgIndex-package.add.
> | 1 | package ifneeded xotcl::package 1.0 [list source [file join $dir package.xotcl]] |
Added assets/xotcl1.6.8/lib/pkgIndex.tcl.
> > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded xotcl::htmllib 1.0 [list source [file join $dir htmllib.xotcl]] package ifneeded xotcl::metadataAnalyzer 1.0 [list source [file join $dir metadataAnalyzer.xotcl]] package ifneeded xotcl::mixinStrategy 1.0 [list source [file join $dir mixinStrategy.xotcl]] package ifneeded xotcl::script 1.0 [list source [file join $dir Script.xotcl]] package ifneeded xotcl::staticMetadataAnalyzer 1.0 [list source [file join $dir staticMetadata.xotcl]] package ifneeded xotcl::test 1.38 [list source [file join $dir test.xotcl]] package ifneeded xotcl::trace 1.0 [list source [file join $dir trace.xotcl]] package ifneeded xotcl::upvar-compat 1.0 [list source [file join $dir upvarcompat.xotcl]] package ifneeded xotcl::wafecompat 1.0 [list source [file join $dir wafecompat.tcl]] package ifneeded xotcl::xodoc 1.0 [list source [file join $dir xodoc.xotcl]] package ifneeded xotcl::package 1.0 [list source [file join $dir package.xotcl]] |
Added assets/xotcl1.6.8/lib/staticMetadata.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | package provide xotcl::staticMetadataAnalyzer 1.0 package require -exact xotcl::metadataAnalyzer 1.0 package require XOTcl 1 namespace eval ::xotcl::staticMetadataAnalyzer { namespace import ::xotcl::* @ @File { description { XOTcl file static analyzer for @ metadata. E.g. used for doumentation with xoDoc. I.e. allows for reading in a file and evaluating the metadata-related info only. } } @ Class StaticMetadataAnalyzer -superclass MetadataAnalyzer { description { Metadata analyzer class that allows for reading in files and evaluation of the metadata content in the file. } } Class StaticMetadataAnalyzer -superclass MetadataAnalyzer \ -parameter {{namespace ::}} StaticMetadataAnalyzer instproc cmdsplit {cmd} { # from Jeffrey's tkcon set inc {} set cmds {} foreach cmd [split [string trimleft $cmd] \n] { if {{} ne $inc } { append inc \n$cmd } else { append inc [string trimleft $cmd] } if {[info complete $inc] && ![regexp {[^\\]\\$} $inc]} { if {[regexp "^\[^#\]" $inc]} {lappend cmds $inc} set inc {} } } if {[regexp "^\[^#\]" $inc]} {lappend cmds $inc} return $cmds } StaticMetadataAnalyzer instproc evaluateCommands {c} { my instvar namespace foreach command [my cmdsplit $c] { #puts stderr "$command===========================" if {[regexp "^ *:*@ " $command]} { #puts stderr "$command===========================" namespace eval $namespace $command } elseif {[regexp "^ *package " $command]} { #puts stderr "$command===========================" namespace eval $namespace [list my handlePackage $command] } elseif {[regexp "^ *namespace *eval *(\[^\{\]*) *\{(.*)\}\[^\}\]*$" $command _ namespace nsc]} { #puts stderr "$command===========================" namespace eval $namespace [list my evaluateCommands $nsc] } } } @ StaticMetadataAnalyzer instproc analyzeFile {name "File name"} { description "Analyze a file and build up a token structure for each metadata token in the file." } StaticMetadataAnalyzer instproc analyzeFile name { my set cmd "" set t [FileToken create [my autoname t]] $t set name $name my set fileToken $t set f [open $name r] set c [read $f] close $f ::@ onOff 1 my evaluateCommands $c ::@ onOff 0 } namespace export StaticMetadataAnalyzer } namespace import ::xotcl::staticMetadataAnalyzer::* |
Added assets/xotcl1.6.8/lib/test.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | package provide xotcl::test 1.38 package require XOTcl 1 namespace eval ::xotcl::test { namespace import ::xotcl::* @ @File {description { Simple regression test support. }} @ Class Test { description { Class Test is used to configure test instances, which can be configured by the following parameters: <@ul> <@li>cmd: the command to be executed</@li> <@li>expected: the expected result</@li> <@li>count: number of executions of cmd</@li> <@li>pre: a command to be executed at the begin of the test (before cmd)</@li> <@li>post: a command to be executed after the test (after all cmds)</@li> <@li>namespace in which pre, post and cmd are evaluated; default ::</@li> </@ul> The defined tests can be executed by <@tt>Test run</@tt> } } Class Test -parameter { {name ""} cmd {namespace ::} {verbose 0} {expected 1} {count 1000} msg setResult errorReport pre post } Test set count 0 Test proc new args { my instvar case ccount name if {[my exists case]} { if {![info exists ccount($case)]} {set ccount($case) 0} set name $case.[format %.3d [incr ccount($case)]] } else { set name t.[format %.3d [my incr count]] } eval my create $name -name $name $args } Test proc run {} { set startTime [clock clicks -milliseconds] foreach example [lsort [my allInstances]] { $example run } puts stderr "Total Time: [expr {[clock clicks -milliseconds]-$startTime}] ms" } Test proc _allInstances {C} { set set [$C info instances] foreach sc [$C info subclass] { eval lappend set [my _allInstances $sc] } return $set } Test proc allInstances {} { return [my _allInstances Test] } Test instproc call {msg cmd} { if {[my verbose]} {puts stderr "$msg: $cmd"} namespace eval [my namespace] $cmd } Test instproc run args { my instvar cmd expected pre post count msg if {[info exists pre]} {my call "pre" $pre} if {![info exists msg]} {set msg $cmd} set r [my call "run" $cmd] if {[my exists setResult]} {set r [eval [my set setResult]]} if {$r == $expected} { if {[info exists count]} {set c $count} {set c 1000} if {[my verbose]} { puts stderr "running test $c times" } if {$c > 1} { #set r0 [time $cmd $c] #puts stderr "time {time $cmd $c}" set r1 [time {time {namespace eval [my namespace] $cmd} $c}] #regexp {^(-?[0-9]+) +} $r0 _ mS0 regexp {^(-?[0-9]+) +} $r1 _ mS1 set ms [expr {$mS1*1.0/$c}] puts stderr "[my name]:\t[format %6.1f $ms] mms, $msg" } else { puts stderr "[my name]: $msg ok" } } else { puts stderr "[my name]:\tincorrect result for '$msg'" puts stderr "\texpected: '$expected', got '$r' [my exists errorReport]" if {[my exists errorReport]} {eval [my set errorReport]} exit -1 } if {[info exists post]} {my call "post" $post} } proc case name {::xotcl::test::Test set case $name} namespace export Test } namespace import ::xotcl::test::* |
Added assets/xotcl1.6.8/lib/trace.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 | package provide xotcl::trace 1.0 package require XOTcl 1 namespace eval ::xotcl::trace { namespace import ::xotcl::* @ @File {description { Various tracing tools for the XOTcl language. } } @ Object instproc traceFilter { args "arbitrary args" } { Description { Filter to trace every method call on an object or class hierarchy. Outputs a message befora and after each call of the traced object. } return "empty string" } @ Object Trace { Description { Write trace outputs and produce statistics. Variable traceStream defines where to write trace output (default: stderr). } } @ Trace proc puts {line "output line"} { Description { Define how traceFilter writes to the output stream. Default: write to trace stream. } } @ Trace proc openTraceFile {name "file name"} { Description { Redirect trace output to file. } } @ Trace proc closeTraceFile {name "file name"} { Description { Close trace file and redirect output to stderr. } } @ Object instproc lintFilter {} { Description {Experimental lint filter} } @ Object instproc statFilter {} { Description {Experimental statistics filter} } @ Object instproc showVars {args "ist of variables"} { Description {Show the values of the specified variables (or of all variables) of an object on stderr.} } @ Object instproc showMsg {msg "optional output"} { Description {Show a message msg with the form "[self] $cls->$method $msg" on stderr.} } @ Object instproc showClass {} { Description {Show classes and mixins of the object}} @ Object instproc showStack {maxDepth "max stack depth, default=100"} { Description {Show callstack up to the specified calldepth.}} @ Object instproc showCall {} { Description {Show the current call with the form "[self] $cls->$method $args" on stderr.}} @ Object instproc showTimeStart {"?handle?" "Handle object name, optional"} {Description {start a timer}} @ Object instproc showTimeEnd {"?handle?" "Handle object name, optional"} {Description {end a timer and show result}} ########################################################################## proc showCall {} { Trace deprecated-function showCall} proc showVars {} { Trace deprecated-function showVars} proc showObj {o {printObjectName 1}} { Trace deprecated-function showObj} proc showStack {{m 100}} { Trace deprecated-function showStack} Object Trace Trace set traceStream stderr Trace proc openTraceFile name { my set traceStream [open $name w] } Trace proc closeTraceFile {} { close $Trace::traceStream my set traceStream stderr } Trace proc puts line { puts $Trace::traceStream $line } Trace proc add {type obj} { if {[my isclass $obj]} { $obj instfilter add ${type}Filter } else { $obj filter add ${type}Filter } } Trace proc delete {type obj} { if {[my isclass $obj]} { $obj instfilter delete ${type}Filter } else { $obj filter delete ${type}Filter } } Trace proc statReset {} { catch {my unset stat} } Trace proc statReportClass c { if {[my exists stat($c)]} { puts "\nClass $c: [my set stat($c)] references" foreach method [$c info instprocs] { set key $c->$method if {[info exists stat($key)]} { puts "\t$key: [my set stat($key)] references" } else { puts "\t$key: not used" } } } else { puts "\nClass $c: not used" } foreach subclass [lsort [$c info subclass]] { my [self proc] $subclass } } Trace proc statReport {} { my statReportClass Object } Trace proc statCount key { if {[my exists stat($key)]} { my incr stat($key) } else { my incr set stat($key) 1 } } Trace proc deprecated-function {name} { puts stderr "Function <$name> is deprecated. Use method with same name instead." } Object instproc traceFilter args { # don't trace the Trace object if {[self] eq "::Trace"} {return [next]} set context "[self callingclass]->[self callingproc]" set method [self calledproc] switch -- $method { proc - instproc {set dargs [list [lindex $args 0] [lindex $args 1] ...] } default {set dargs $args } } #my showStack Trace puts "CALL $context> [self]->$method $dargs (next=[self next])" set result [next] Trace puts "EXIT $context> [self]->$method ($result)" return $result } Object instproc lintFilter args { #puts stderr c=[self class],ic[my info class],p=[self calledproc] #puts stderr " =====================METHOD='[self calledproc]'" my instvar __reported switch -exact -- [self calledproc] { instvar { set ccls [self callingclass] set method [self callingproc] #puts stderr ccls=$ccls. if {$ccls eq ""} { ;## instvar in proc set bod [my info body $method] set context "proc [self]->$method" } else { ;## instvar in instproc set bod [$ccls info instbody $method] set context "instproc $ccls->$method" } foreach v $args { set vpattern "$v\[^a-zA-Z0-9\]" if {[regexp "\[\$\]$vpattern" $bod]} continue if {[regexp " *$vpattern" $bod]} continue #if {[regexp "info *exists *$vpattern" $bod]} continue #if {[regexp "append *$vpattern" $bod]} continue #if {[regexp "array.*$vpattern" $bod]} continue if {[info exists __reported($v,$context)]} continue set __reported($v,$context) 1 puts stderr "'$v' of 'instvar $args' is NOT used in\n\ $context ... {$bod}" } } } next } Object instproc statFilter args { # don't return statistics from the Trace object #puts stderr "self=[self]" if {[self] eq "::Trace"} {return [next]} set ccls [self callingclass] set cmet [self callingproc] set met [self calledproc] #::puts stderr "cls=$ccls->$cmet, [self]->$met" Trace statCount $ccls Trace statCount $ccls->$cmet next } ###################################################################### # show**** methods # Object instproc showVars args { set msg {} if {$args == {}} { foreach var [lsort [my info vars]] { if {[my array exists $var]} { append msg "\n\t$var: " #puts stderr "ARRAY $var" #puts stderr "ARRAY names <[[self]array names $var]>" foreach i [lsort [my array names $var]] { append msg $i=[my set ${var}($i)] ", " } } elseif {[my exists $var]} { append msg "\n\t$var: " [list [my set $var]] } else { append msg "\n\t$var: " UNKNOWN } } } else { foreach var $args { if {[my array exists $var]} { lappend msg $var: ARRAY } elseif {[my exists $var]} { lappend msg $var: [my set $var] } else { lappend msg $var: UNKNOWN } } } set method [self callingproc] set cls [self callingclass] puts stderr "[self] $cls->$method $msg" #puts stderr " MIXINS: [my info mixin]" } Object instproc showMsg msg { set method [self callingproc] set cls [self callingclass] puts stderr "[self] $cls->$method $msg" } Object instproc showClass {} { set method [self callingproc] set cls [self callingclass] puts stderr "[self] $cls->$method class [my info class]\ mixins {[my info mixin]}" } Object instproc showStack {{m 100}} { set max [info level] if {$m<$max} {set max $m} puts stderr "Call Stack (level: command)" for {set i 0} {$i < $max} {incr i} { if {[catch {set s [uplevel $i self]} msg]} { set s "" } puts stderr "[format %5d -$i]:\t$s [info level [expr {-$i}]]" } } Object instproc showCall {} { set method [self callingproc] set cls [self callingclass] set args [lreplace [info level -1] 0 0] puts stderr "[self] $cls->$method $args" } Object instproc showTimeStart {{handle __h}} { upvar [self callinglevel] $handle obj set obj [Object [self]::[my autoname __time]] $obj set clicks [clock clicks] return } Object instproc showTimeEnd {{handle __h}} { upvar [self callinglevel] $handle obj set method [self callingproc] set cls [self callingclass] set elapsed [expr {([clock clicks]-[$obj set clicks])/1000000.0}] puts stderr "[self] $cls->$method: elapsed [format %.2f $elapsed]secs" $obj destroy } ###################################################################### namespace export showCall showVars showObj showStack Trace } namespace import ::xotcl::trace::* |
Added assets/xotcl1.6.8/lib/upvarcompat.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | package provide xotcl::upvar-compat 1.0 package require XOTcl 1 namespace eval ::xotcl::upvar-compat { namespace import ::xotcl::* @ @File {description { Provide a version of upvar and uplevel that provide backward compatibility such that these commands ignore inactive filter and mixin frames (upvar behaves the same whether or not a filter is installed). Newer scripts should use <@TT>upvar/uplevel [self callinglevel] var/command</@TT> instead. } } } # Define upvar and uplevel; use the level, if given explizitely: # otherwise point to the callinglevel from XOTcl rename ::uplevel ::xotcl::tcl_uplevel proc ::uplevel {lvl args} { set cl [::xotcl::tcl_uplevel 1 ::xotcl::self callinglevel] if {[string match #* $cl]} { # we were called from XOTcl, use the XOTcl method set cmd [concat [list my uplevel $lvl] $args] } else { # no XOTcl in sight, use tcl variant set cmd [concat [list ::xotcl::tcl_uplevel $lvl] $args] } #puts stderr cmd=$cmd set code [catch [list ::xotcl::tcl_uplevel 1 $cmd] msg] return -code $code $msg } rename ::upvar ::xotcl::tcl_upvar proc ::upvar {lvl args} { set cl [::xotcl::tcl_uplevel 1 ::xotcl::self callinglevel] if {[string match #* $cl]} { # we were called from XOTcl, use the XOTcl method set cmd [concat [list my upvar $lvl] $args] #set code [catch {my uplevel $lvl $args} msg] } else { # no XOTcl in sight, use tcl variant set cmd [concat [list ::xotcl::tcl_upvar $lvl] $args] } set code [catch [list ::xotcl::tcl_uplevel 1 $cmd] msg] return -code $code $msg } puts stderr HU |
Added assets/xotcl1.6.8/lib/wafecompat.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | package provide xotcl::wafecompat 1.0 set WAFELIB /usr/lib/X11/wafe/ set MODULE_PATH "$WAFELIB $auto_path" set COMPONENT_PATH $WAFELIB/otcl-classes proc MOTIFPREFIX {} {return {}} proc requireModules modules { global MODULE_PATH foreach {cmd module} $modules { if {{} ne [info command $cmd] } continue if {[regexp {([A-Za-z1-9]+)Gen} $module _ n] || [regexp {lib([a-z]+)} $module _ n] || [regexp {^(.+)[.]so} $module _ n] } { set name [string toupper $n] } foreach path $MODULE_PATH { set f $path/tcllib/bin/$module if {[set found [file exists $f]]} { puts stderr "Loading module $name from $f" load $f $name break } } if {!$found} { error "Could not find module $module in {$MODULE_PATH}"} }} proc requireTclComponents {files} { global COMPONENT_PATH _componentLoaded foreach component $files { if {[info exists _componentLoaded($component)]} continue foreach path $COMPONENT_PATH { set f $path/$component if {[file exists $f]} { puts stderr "Loading source file $f" uplevel \#0 source $f set _componentLoaded($component) $f break } } if {![info exists _componentLoaded($component)]} { error "Could not find component $component in {$COMPONENT_PATH}" } }} proc addTimeOut {n cmd} { after $n $cmd } proc removeTimeOut {n} { after cancel $n } proc quit {} { exit } |
Added assets/xotcl1.6.8/lib/xodoc.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 | package provide xotcl::xodoc 1.0 package require -exact xotcl::staticMetadataAnalyzer 1.0 package require -exact xotcl::htmllib 1.0 #package require -exact xotcl::trace 1.0 package require XOTcl 1 namespace eval ::xotcl::xodoc { namespace import ::xotcl::* @ @File { description { XOTcl documentation tool. Overloads the command @, which is used as a documentation token. } } @ Class MetadataTokenHTML { description {Instmixin to provide HTML printing. Such instmixins are registered for all token types. } } Class MetadataTokenHTML @ MetadataTokenHTML abstract instproc printHTML {} { description {Print token to HTML document object} } MetadataTokenHTML abstract instproc printHTML {} @ MetadataTokenHTML instproc getDocPropertiesHTML {} { description { Returns list of properties as HTML. } } MetadataTokenHTML instproc getDocPropertiesHTML {htmlDoc} { foreach p [my set properties] { $htmlDoc startTableRow -valign top if {[my exists $p]} { $htmlDoc startTableCell -valign top $htmlDoc addString "<em> [my capitalize $p]:</em>" $htmlDoc endTableCell $htmlDoc startTableCell -valign top if {$p eq "errorCodes"} { # Build table cell with list of error codes. foreach {code desc} [my set $p] { set code [string map [list < <\; > >\;] $code] set desc [string map [list < <\; > >\;] $desc] $htmlDoc addString "<b>$code</b>: $desc\n<p>" } } else { $htmlDoc addString [my set $p] } $htmlDoc endTableCell } $htmlDoc endTableRow } } MetadataTokenHTML instproc reflowHTML {left paragraph} { #set result "" #foreach line [split $paragraph \n] { # if {![regexp {^ *$} $line]} { # append result "$left$line<br>\n" # } #} #return $result return $paragraph } MetadataToken instmixin [concat [MetadataToken info instmixin] MetadataTokenHTML] @ Class FileTokenHTML -superclass MetadataTokenHTML Class FileTokenHTML -superclass MetadataTokenHTML FileTokenHTML instproc printHTML {htmlDoc} { $htmlDoc addLineBreak $htmlDoc addString "<b> Filename: </b>" $htmlDoc addAnchor [my set name] -href [my set name] $htmlDoc addLineBreak $htmlDoc addLineBreak $htmlDoc startTable -border 0 my getDocPropertiesHTML $htmlDoc $htmlDoc endTable } FileToken instmixin [concat [FileToken info instmixin] FileTokenHTML] @ Class ConstraintTokenHTML -superclass MetadataTokenHTML Class ConstraintTokenHTML -superclass MetadataTokenHTML ConstraintTokenHTML instproc printHTML {htmlDoc} { $htmlDoc addAnchor "" -name [my set name] $htmlDoc addString "<h2> Constraint: <em> [my set name] </em> </h2>" $htmlDoc addLineBreak $htmlDoc startTable -border 0 my getDocPropertiesHTML $htmlDoc $htmlDoc endTable } ConstraintToken instmixin [concat [ConstraintToken info instmixin] ConstraintTokenHTML] @ Class ObjTokenHTML -superclass MetadataTokenHTML Class ObjTokenHTML -superclass MetadataTokenHTML ObjTokenHTML instproc getProcsHTML {htmlDoc} { set c "" set pl [MetadataToken sortTokenList [my procList]] if {[my istype ClassToken]} { set pl [concat [MetadataToken sortTokenList [my instprocList]] $pl] } foreach p $pl { set pn [$p set name] set label($pn) "<a href=\"#[my set name]-$pn\">$pn</a>" } foreach l [lsort [array names label]] { if {$c ne ""} {append c ", "} append c $label($l) } if {$c ne ""} {append c "."} $htmlDoc addString "$c" } ObjTokenHTML instproc printHTML {htmlDoc} { $htmlDoc addAnchor "" -name [my set name] if {[my istype MetaClassToken]} { set start "<h2> MetaClass:" } elseif {[my istype ClassToken]} { set start "<h2> Class:" } else { set start "<h2> Object:" } $htmlDoc addString "$start <em> [my set name] </em> </h2>" if {[my exists cl]} { $htmlDoc addString "<b>Class</b>: [my set cl]" $htmlDoc addLineBreak } if {[my exists heritage]} { $htmlDoc addString "<b>Heritage</b>: [my set heritage]" $htmlDoc addLineBreak } set head "" if {[my procList] ne ""} {set head "<b> Procs </b> "} if {[my istype ClassToken]} { if {[my instprocList] ne ""} {set head "<b> Procs/Instprocs: </b> "} } $htmlDoc addString $head my getProcsHTML $htmlDoc $htmlDoc startTable -border 0 my getDocPropertiesHTML $htmlDoc $htmlDoc endTable } ObjToken instmixin [concat [ObjToken info instmixin] ObjTokenHTML] @ Class MethodTokenHTML -superclass MetadataTokenHTML Class MethodTokenHTML -superclass MetadataTokenHTML # Prints out method information as HTML. MethodTokenHTML instproc printHTML {htmlDoc} { #my showVars set argText "\n" HtmlBuilder args set a "<em>Arguments:</em>" set anchor [my set obj]-[my set name] $htmlDoc addAnchor "" -name $anchor if {[my abstract]} {$htmlDoc addString "<b><em>abstract</em></b>"} $htmlDoc addString "<b>[my set name] </b>" args set indentLevel [$htmlDoc set indentLevel] if {[my exists arguments]} { #set argText "<table>\n" foreach {arg argDescription} [my set arguments] { if {[llength $arg] > 1} { # A default value was given to the argument. $htmlDoc addString "<em>?[lindex $arg 0]?</em>" set at "<b>?[lindex $arg 0]?</b>:$argDescription Default: \"[lindex $arg 1]\"." } else { $htmlDoc addString "<em>$arg</em>" set at "<b>$arg</b>: $argDescription" } args startTableRow -valign top args startTableCell -valign top args addString $a set a "" args endTableCell args startTableCell -valign top args addString $at args endTableCell args endTableRow } } $htmlDoc startTable -border 0 $htmlDoc addString [args toString] args destroy my getDocPropertiesHTML $htmlDoc $htmlDoc endTable #$htmlDoc endListItem } MethodToken instmixin [concat [MethodToken info instmixin] MethodTokenHTML] @ Class XODoc { description "Handler class for building a documentation database" } Class XODoc -superclass StaticMetadataAnalyzer @ XODoc proc documentFileAsHTML { file "filename of the xotcl file to be documented" docdir "directory to which the html file is written" } { description "Uses the xoDoc package to produce an HTML documentation of a specified file ***.xotcl. The file is written to ***.html in docdir" return "file basename without suffix" } XODoc proc documentFileAsHTML {file docdir} { set docdb [XODoc [XODoc autoname docdb]] ::@ set analyzerObj $docdb $docdb analyzeFile $file set ext [file extension $file] if {$ext ne ""} {set ext -[string trimleft $ext .]} set docfilename [file rootname [file tail $file]]$ext $docdb writeFile ${docdir}/$docfilename.html $file $docdb destroy return $docfilename } XODoc instproc printPackages {htmlDoc} { my instvar packageList $htmlDoc addString "<h2> Package/File Information </h2>" if {[llength $packageList] > 0} { foreach t $packageList { if {[$t type] eq "provide"} { $htmlDoc addString "<b> Package provided: </b> [$t name] [$t version]" } elseif {[$t type] eq "require"} { $htmlDoc addString "<b> Package required: </b> [$t name] [$t version]" } $htmlDoc addLineBreak } } else { $htmlDoc addString "<b> No package provided/required </b>" $htmlDoc addLineBreak } } XODoc instproc printExtensions {htmlDoc} { my instvar extensions if {[info exists extensions]} { # Add list of extensions. foreach extension $extensions { $htmlDoc addLineBreak $htmlDoc addString "<h2>Document extension: <em>[$extension name]</em>" $htmlDoc addString "<em>Description:</em> [$extension description]" $htmlDoc addLineBreak } } } XODoc instproc printObjList {htmlDoc} { set objList [MetadataToken sortTokenList [my objList]] if {[llength $objList]>0} { $htmlDoc addLineBreak $htmlDoc addString "<b>Defined Objects/Classes: </b>" $htmlDoc startUnorderedList foreach obj $objList { set on [$obj set name] $htmlDoc startListItem $htmlDoc addAnchor "<em>$on</em>:" -href "#$on" $obj getProcsHTML $htmlDoc $htmlDoc addLineBreak $htmlDoc endListItem } $htmlDoc endUnorderedList } } XODoc instproc printFileToken {htmlDoc} { if {[my exists fileToken]} { [my set fileToken] printHTML $htmlDoc } else { $htmlDoc addString "<b> No file information. </b>\n" } $htmlDoc addLineBreak } XODoc instproc printConstraintsList {htmlDoc} { set constraintList [MetadataToken sortTokenList [my constraintList]] if {[llength $constraintList]>0} { $htmlDoc addLineBreak $htmlDoc addString "<b>Defined Constraints: </b>" $htmlDoc startUnorderedList foreach c $constraintList { set cn [$c set name] $htmlDoc startListItem $htmlDoc addAnchor "<em>$cn</em>:" -href "#$cn" $htmlDoc addLineBreak $htmlDoc endListItem } $htmlDoc endUnorderedList } } XODoc instproc printConstraints {htmlDoc} { foreach c [my set constraintList] { $htmlDoc addHorizontalRule $htmlDoc startParagraph $c printHTML $htmlDoc $htmlDoc endParagraph } $htmlDoc addLineBreak } XODoc instproc printProcsList {htmlDoc list string} { if {[llength $list] > 0} { $htmlDoc addString "<h3>$string</h3>" $htmlDoc startUnorderedList foreach s $list { $htmlDoc startListItem $s printHTML $htmlDoc $htmlDoc endListItem } $htmlDoc endUnorderedList } } XODoc instproc printObjs {htmlDoc} { set objList [MetadataToken sortTokenList [my objList]] foreach t $objList { $htmlDoc addHorizontalRule $htmlDoc startParagraph $t printHTML $htmlDoc if {[$t istype ClassToken]} { my printProcsList $htmlDoc [$t set instprocList] Instprocs } my printProcsList $htmlDoc [$t set procList] Procs $htmlDoc endParagraph } } XODoc instproc replaceFormatTags {fc} { regsub -all <@ $fc < fc regsub -all </@ $fc </ fc return $fc } @ XODoc instproc printHTML { name "name of the html document" } { description "Create HTML documentation object from metadata token" } XODoc instproc printHTML {name} { HtmlBuilder htmlDoc htmlDoc startDocument -title "XOTcl - Documentation -- $name" \ -bgcolor FFFFFF -stylesheet xotcl-doc.css htmlDoc addStringIncr "<h1>" htmlDoc addImage -src "./logo-100.jpg" -alt "$name" -align MIDDLE htmlDoc addStringDecr "$name</h1>" htmlDoc addHorizontalRule htmlDoc startParagraph my printPackages htmlDoc my printExtensions htmlDoc my printObjList htmlDoc my printConstraintsList htmlDoc my printFileToken htmlDoc my printObjs htmlDoc my printConstraints htmlDoc htmlDoc endParagraph htmlDoc addHorizontalRule htmlDoc startParagraph htmlDoc endParagraph htmlDoc addAnchor "Back to index page." -href "./index.html" htmlDoc addLineBreak htmlDoc addHorizontalRule htmlDoc startParagraph htmlDoc endParagraph htmlDoc endDocument set r [my replaceFormatTags [htmlDoc toString]] htmlDoc destroy return $r } @ XODoc instproc writeFile { filename "file name destination" name "name of the html document" } { description "Create HTML docuemntation from metadata token and write to file <filename>" } XODoc instproc writeFile {filename name} { set content [my printHTML $name] set f [open $filename w] puts $f $content close $f } namespace export \ MetadataTokenHTML FileTokenHTML ConstraintTokenHTML ObjTokenHTML \ MethodTokenHTML XODoc } namespace import ::xotcl::xodoc::* |
Added assets/xotcl1.6.8/patterns/COPYRIGHT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen * Specification of Software Systems * Altendorferstraße 97-101 * D-45143 Essen, Germany * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this permission * notice appear in supporting documentation. We make no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied * warranty. * * * This software is based upon MIT Object Tcl by David Wetherall and * Christopher J. Lindblad, that contains the following copyright * message: * * "Copyright 1993 Massachusetts Institute of Technology * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this * permission notice appear in supporting documentation, and that * the name of M.I.T. not be used in advertising or publicity * pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about * the suitability of this software for any purpose. It is * provided "as is" without express or implied warranty." |
Added assets/xotcl1.6.8/patterns/ChainOfResponsibility.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | package provide xotcl::pattern::chainOfResponsibility 1.0 package require XOTcl 1 namespace eval ::xotcl::pattern::chainOfResponsibility { namespace import ::xotcl::* Class ChainOfResponsibility -superclass Class ChainOfResponsibility instproc chainingFilter args { set cp [self calledproc] set registrationclass [lindex [self filterreg] 0] $registrationclass instvar operations #puts stderr "CHAIN [array names [self regclass]::chainedOperations ]---$cp" if {[$registrationclass exists chainedOperations($cp)]} { # # a value is found on the chain, if it differs from the failure value ! # set failureValue [$registrationclass set chainedOperations($cp)] set r [my $cp $args] if {$r == $failureValue} { if {[my exists successor] && [set s [my set successor]] != ""} { #puts stderr "CHAIN: forwarding to $s" set r [$s $cp $args] } } set r ;# return $r } else { next ;# return [next] } } ChainOfResponsibility instproc init args { my instfilter add chainingFilter my parameter {successor} # chained operations hold their value of failure my array set chainedOperations {} } ChainOfResponsibility instproc addChainedOperation {name {failureValue ""}} { my set chainedOperations($name) $failureValue } ChainOfResponsibility instproc removeChainedOperation {name} { my unset chainedOperations($name) } namespace export ChainOfResponsibility } namespace import ::xotcl::pattern::chainOfResponsibility::* |
Added assets/xotcl1.6.8/patterns/OnCalleeProxy.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | package provide xotcl::pattern::onCalleeProxy 1.0 package require XOTcl 1 namespace eval ::xotcl::pattern::onCalleeProxy { namespace import ::xotcl::* Class OnCalleeProxy -superclass Class @ @File { description { Simple proxy pattern implementation enhanced with the ability to adapt calls solely for specified calling objects for each calling obj there may be a different delegator obj } } OnCalleeProxy instproc onCalleeProxyFilter args { set o [string trimleft [self callingobject] :] my instvar callee #puts stderr "[self class]: checking $o -- [self] -- [self calledproc] " if {[info exists callee($o)]} { return [::eval [set callee($o)] [self calledproc] $args] } else { next } } OnCalleeProxy instproc init args { my instfilter add onCalleeProxyFilter next my instproc setCallee {callingObj a} { my set callee([string trimleft $callingObj :]) $a } } namespace export OnCalleeProxy } namespace import ::xotcl::pattern::onCalleeProxy::* |
Added assets/xotcl1.6.8/patterns/Singleton.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | package provide xotcl::pattern::singleton 1.0 package require XOTcl 1 namespace eval ::xotcl::pattern::singleton { namespace import ::xotcl::* Class SingletonBase SingletonBase instproc getInstance args { my instvar _instance if {[info exists _instance]} { return $_instance } return "" } # # A simple pattern mixin that makes a class to a non-specializable singleton # Class NonSpecializableSingleton -superclass SingletonBase NonSpecializableSingleton instproc create args { my instvar _instance if {![info exists _instance]} { set _instance [self] next } return $_instance } NonSpecializableSingleton instproc getInstance {} { if {[info exists _instance]} { my instvar _instance return $_instance } return "" } # # Specializable Singleton # Class Singleton -superclass {SingletonBase Class} Singleton instproc singletonFilter args { switch -exact [self calledproc] { init { set registrationclass [lindex [self filterreg] 0] $registrationclass instvar _instance if {![info exists _instance]} { set _instance [self] next } else { my destroy } return $_instance } default { return [next] } } } Singleton instproc init args { my instfilter add singletonFilter # # specialized singletons have to look up the singleton class # first Class instproc getInstance {} { foreach sc [my info superclass] { if {[$sc info class] eq "::Singleton"} { return [$sc getInstance] } else { return "" } } } next } namespace export SingletonBase NonSpecializableSingleton Singleton } namespace import ::xotcl::pattern::singleton::* |
Added assets/xotcl1.6.8/patterns/SortedComposite.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | package provide xotcl::pattern::sortedCompositeWithAfter 1.0 package require XOTcl 1 namespace eval ::xotcl::pattern::sortedCompositeWithAfter { namespace import ::xotcl::* Class SortedComposite -superclass Class @ @File { description { Composite pattern enhanced with sorting } } SortedComposite instproc remove {array element} { if {[my exists ${array}($element)]} { my unset ${array}($element) } } SortedComposite instproc addOperations args { foreach pair $args { foreach {proc op} $pair {my set operations($proc) $op} } } SortedComposite instproc removeOperations args { foreach op $args {my remove operations $op} } SortedComposite instproc addAfterOperations args { foreach pair $args { foreach {proc op} $pair {my set afterOperations($proc) $op} } } SortedComposite instproc removeAfterOperations args { foreach op $args {my remove afterOperations $op} } SortedComposite instproc compositeFilter args { set registrationclass [lindex [self filterreg] 0] set r [self calledproc] set result [next] if {[$registrationclass exists operations($r)] && [my exists children]} { set method [$registrationclass set operations($r)] foreach object [my set children] { eval [self]::$object $method $args } } if {[$registrationclass exists afterOperations($r)]} { eval my [$registrationclass set afterOperations($r)] $args } set result } SortedComposite instproc init args { my array set operations {} my array set afterOperations {} my instproc setChildren args { switch [llength $args] { 0 { return [my set children] } 1 { return [my set children [lindex $args 0]] } default {error "wrong # args: [self] setChildren ?children?"} } } my instproc appendChildren args { eval my lappend children $args } next my instfilter add compositeFilter } namespace export SortedComposite } namespace import ::xotcl::pattern::sortedCompositeWithAfter::* |
Added assets/xotcl1.6.8/patterns/adapter.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | package provide xotcl::pattern::adapter 1.0 package require XOTcl 1 namespace eval ::xotcl::pattern::adapter { namespace import ::xotcl::* Class Adapter -superclass Class @ @File { description { Simple adapter pattern meta-class taken from the paper 'Filters as a Language Support for Design Patterns in Object-Oriented Scripting Languages'. } } Adapter instproc adapterFilter args { set r [self calledproc] my instvar specificRequest adaptee \ [list specificRequest($r) sr] if {[info exists sr]} { return [eval $adaptee $sr $args] } next } Adapter instproc init args { my instfilter add adapterFilter next my instproc setRequest {r sr} { my set specificRequest($r) $sr } my instproc setAdaptee {a} { my set adaptee $a } } namespace export Adapter } namespace import ::xotcl::pattern::adapter::* |
Added assets/xotcl1.6.8/patterns/composite.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | package provide xotcl::pattern::composite 1.0 package require XOTcl 1 namespace eval ::xotcl::pattern::composite { namespace import ::xotcl::* Class Composite -superclass Class @ @File { description { Simple composite pattern meta-class taken from the paper 'Filters as a Language Support for Design Patterns in Object-Oriented Scripting Languages'. } } Composite instproc addOperations args { foreach op $args { if {![my exists operations($op)]} { my set operations($op) $op } } } Composite instproc removeOperations args { foreach op $args { if {![my exists operations($op)]} { my unset operations($op) } } } Composite instproc compositeFilter args { # get the operations class variable from the object's class set registrationclass [lindex [self filterreg] 0] $registrationclass instvar operations # get the request set r [self calledproc] # check if the request is a registered operation if {[info exists operations($r)]} { foreach object [my info children] { # forward request eval $object $r $args } } return [next] } Composite instproc init {args} { my array set operations {} next my instfilter add compositeFilter } namespace export Composite } namespace import ::xotcl::pattern::composite::* |
Added assets/xotcl1.6.8/patterns/link.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | package provide xotcl::pattern::link 1.0 package require XOTcl 1 namespace eval ::xotcl::pattern::link { namespace import ::xotcl::* # # establish/introspect 'link' through link-instproc # Class Link -parameter { {link ""} } Link instproc adapterFilter args { set l [my set link] set m [self calledproc] # let link/destroy requests go through to the link if {$m eq "link" || $m eq "destroy"} { return [next] } if {[Object isobject $l]} { puts stderr "adapting $m on link [self] -> $l" eval $l $m $args } else { # if there is currently no link establish -> return if {$l eq ""} {return} error "Link: object $l is no xotcl object" } } Link instfilter adapterFilter # Link L # Class A # L link A # L w # w set a 45 # puts [w set a] # puts [L link] # #A destroy # puts ----1 # L set r 45 # puts ----2 namespace export Link } namespace import ::xotcl::pattern::link::* |
Added assets/xotcl1.6.8/patterns/manager.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | package provide xotcl::pattern::manager 1.0 package require XOTcl 1 namespace eval ::xotcl::pattern::manager { namespace import ::xotcl::* # # a simle manager pattern following buschmann (164) # based on dynamic object aggregation and using dynamic code # for supplier creation (instead of loading) # # it shares the suppliers ! # # # abstract supplier, init starts dynamic code creation # Class Supplier Supplier abstract instproc init args Supplier abstract instproc m args Class Manager -parameter { {supplierClass Supplier} } Manager instproc getSupplier {name} { if {[my info children [namespace tail $name]] != ""} { return [self]::[namespace tail $name] } else { return [my [my supplierClass] [namespace tail $name]] } } namespace export Supplier Manager } namespace import ::xotcl::pattern::manager::* |
Added assets/xotcl1.6.8/patterns/observer.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | package provide xotcl::pattern::observer 1.0 package require XOTcl 1 namespace eval ::xotcl::pattern::observer { namespace import ::xotcl::* Class Observer -superclass Class @ @File { description { Simple observer pattern meta-class taken from the paper 'Filters as a Language Support for Design Patterns in Object-Oriented Scripting Languages'. } } Class Observer::Subject -superclass Class Observer::Subject instproc notificationFilter {args} { set procName [self calledproc] my instvar \ preObservers [list preObservers($procName) preObs] \ postObservers [list postObservers($procName) postObs] if {[info exists preObs]} { foreach obj $preObs { $obj update [self] $args } } set result [next] if {[info exists postObs]} { foreach obj $postObs { $obj update [self] $args } } return $result } Class Observer::SubjectMgt Observer::SubjectMgt instproc attach {hook objs} { upvar [self callinglevel] $hook observers foreach obj $objs { if {![info exists observers] || [lsearch $observers $obj] == -1} { lappend observers $obj } } } Observer::SubjectMgt instproc detach {hook objs} { upvar [self callinglevel] $hook observers if {[info exists observers]} { foreach obj $objs { set p [lsearch $observers $obj] set observers [lreplace $observers $p $p] } } } Observer::SubjectMgt instproc attachPre {procName args} { my instvar preObservers my attach preObservers($procName) $args } Observer::SubjectMgt instproc attachPost {procName args} { my instvar postObservers my attach postObservers($procName) $args } Observer::SubjectMgt instproc detachPre {procName args} { my instvar preObservers my detach preObservers($procName) $args } Observer::SubjectMgt instproc detachPost {procName args} { my instvar postObservers my detach postObservers($procName) $args } Observer::Subject instproc init args { next my superclass [list Observer::SubjectMgt [my info superclass]] my instfilter notificationFilter } Observer instproc timeout t { my set timeout $t } Observer instproc update {subject args} { #addTimeOut [my set timeout] "my update $subject $args" #$subject getResponse # do something with the response puts [self]---update } namespace export Observer namespace eval Observer { namespace export Subject SubjectMgt } } namespace import ::xotcl::pattern::observer::* namespace eval Observer { namespace import ::xotcl::pattern::observer::Observer::* } |
Added assets/xotcl1.6.8/patterns/pkgIndex.tcl.
> > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded xotcl::pattern::adapter 1.0 [list source [file join $dir adapter.xotcl]] package ifneeded xotcl::pattern::chainOfResponsibility 1.0 [list source [file join $dir ChainOfResponsibility.xotcl]] package ifneeded xotcl::pattern::composite 1.0 [list source [file join $dir composite.xotcl]] package ifneeded xotcl::pattern::link 1.0 [list source [file join $dir link.xotcl]] package ifneeded xotcl::pattern::manager 1.0 [list source [file join $dir manager.xotcl]] package ifneeded xotcl::pattern::observer 1.0 [list source [file join $dir observer.xotcl]] package ifneeded xotcl::pattern::onCalleeProxy 1.0 [list source [file join $dir OnCalleeProxy.xotcl]] package ifneeded xotcl::pattern::singleton 1.0 [list source [file join $dir Singleton.xotcl]] package ifneeded xotcl::pattern::sortedCompositeWithAfter 1.0 [list source [file join $dir SortedComposite.xotcl]] |
Added assets/xotcl1.6.8/pkgIndex.tcl.
> > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 | package ifneeded XOTcl 1.6.8 [subst -nocommands { load libxotcl[info sharedlibextension] Xotcl foreach index [concat \ [glob -nocomplain [file join [list $dir] * pkgIndex.tcl]] \ [glob -nocomplain [file join [list $dir] * * pkgIndex.tcl]]] { set dir [file dirname \$index] source \$index } set dir [list $dir] }] |
Added assets/xotcl1.6.8/rdf/COPYRIGHT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen * Specification of Software Systems * Altendorferstraße 97-101 * D-45143 Essen, Germany * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this permission * notice appear in supporting documentation. We make no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied * warranty. * * * This software is based upon MIT Object Tcl by David Wetherall and * Christopher J. Lindblad, that contains the following copyright * message: * * "Copyright 1993 Massachusetts Institute of Technology * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this * permission notice appear in supporting documentation, and that * the name of M.I.T. not be used in advertising or publicity * pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about * the suitability of this software for any purpose. It is * provided "as is" without express or implied warranty." |
Added assets/xotcl1.6.8/rdf/RDFCreator.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | # $Id: RDFCreator.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ package provide xotcl::rdf::tripleRecreator 1.0 package require XOTcl 1 package require -exact xotcl::rdf::parser 1.0 namespace eval ::xotcl::rdf::tripleRecreator { namespace import ::xotcl::* Class RDFCreator -parameter { {rdfNS "http://www.w3.org/1999/02/22-rdf-syntax-ns#"} {openExprs ""} } Class OpenExpr -parameter { {type ""} {subject ""} {closing ""} } RDFCreator instproc init args { next } RDFCreator instproc free {} { my instvar openExprs while {$openExprs ne ""} { set o [lindex $openExprs 0] set openExprs [lrange $openExprs 1 end] $o destroy } } RDFCreator instproc sort {tl} { # # this assumes that the triples are created and named in node tree order, e.g. # through autonames like triple0, triple1, ... (as in rdfTripleCreator) # # => bag types defs are before bag's _1, _2 -- etc. # # otherwise overload sorting method ! # return [lsort $tl] } RDFCreator instproc createFromTriples {tripleList} { my instvar openExprs set heading "<?xml version=\"1.0\"?>\n<RDF xmlns:rdf=\"[my set rdfNS]\"" set body "" XMLNamespace [self]::ns [self]::ns add rdf [set rdfNS [my rdfNS]] my free foreach t [my sort $tripleList] { set p [$t predicate] set o [$t object] set s [$t subject] set opening "" set closing "" if {[regexp "(^.*://.*/(\[^/\]+)(/|\#))(\[^/\]+)\$" $p _ ns prefix __ name]} { if {[string match $rdfNS $ns]} { if {"type" eq $name} { if {[regexp "${rdfNS}(RDFAlt|RDFBag|RDFSeq)" $o _ type]} { set opening "\n<rdf:$type ID=\"$s\">" set closing "\n</rdf:$type>" } } } if {[set nsPrefix [[self]::ns searchFullName $ns]] == ""} { [self]::ns add [set nsPrefix [my autoname $prefix]] $ns append heading "\n xmlns:${nsPrefix}=\"$ns\"" } set oe [lindex [my set openExprs] 0] if {$oe eq "" || [$oe subject] != $s} { if {$oe ne ""} { append body [$oe closing] [lindex [set openExprs] 0] destroy set openExprs [lrange $openExprs 1 end] } if {$opening eq ""} { append body "\n<rdf:Description about=\"$s\">" set closing "\n</rdf:Description>" set type "Description" } else { append body $opening } set noe [my OpenExpr [my autoname oe]] set openExprs [concat $noe $openExprs] $noe subject $s $noe closing $closing $noe type $type set oe $noe } set tn ${nsPrefix}:$name switch -exact [$oe type] { RDFDescription { #puts DESCRIPTION append body "\n<$tn> [$t object] </$tn>" } RDFAlt - RDFSeq { #puts ALT---$tn if {[regexp {rdf:_([0-9]*)} $tn _ __]} { append body "\n<rdf:li resource=\"[$t object]\"/>" } } RDFBag { if {[regexp {rdf:_([0-9]*)} $tn _ __]} { append body "\n<$tn resource=\"[$t object]\"/>" } } } } else { puts "Predicate '$p' not matched" # hier als xmlns behandeln ... } } append heading ">" set r $heading while {$openExprs ne ""} { set oe [lindex $openExprs 0] set openExprs [lrange $openExprs 1 end] append body [$oe closing] $oe destroy } append r $body append r "\n</RDF>" return $r } namespace export RDFCreator OpenExpr } namespace import ::xotcl::rdf::tripleRecreator::* |
Added assets/xotcl1.6.8/rdf/RDFTriple.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 | package provide xotcl::rdf::triple 1.0 package require XOTcl 1 package require -exact xotcl::rdf::parser 1.0 namespace eval ::xotcl::rdf::triple { namespace import ::xotcl::* Class RDFTriple -parameter { predicate subject object } RDFTriple instproc dump {} { #set o [my object]; if {[info command $o] ne ""} { $o showVars } #return "P: [my predicate] S: [my subject] O: [my object]\n" return "[my subject] -[my predicate]-> '[my object]'\n" } Class NodeInfo -parameter { lastCurrentNode {aboutEach 0} {aboutEachPrefix 0} topID {statements ""} } Class DescriptionInfo -superclass NodeInfo -parameter { {bagID 0} } Class PropertyInfo -superclass NodeInfo -parameter { {reify 0} generatedParentID } Class AboutEachMgr AboutEachMgr instproc init args { my array set entries {} next } AboutEachMgr instproc reset {} { foreach c [my info children] {$c destroy} my init } AboutEachMgr instproc addEntry {name} { my set entries($name) "" } AboutEachMgr instproc isEntry {name} { my exists entries($name) } AboutEachMgr instproc addTriple {name p s o} { if {[my exists entries($name)]} { set r [RDFTriple create [self]::[my autoname name%08d]] $r set predicate $p $r set subject $s $r set object $o my lappend entries($name) $r return $r } return "" } AboutEachMgr instproc getTriples {name} { if {[my exists entries($name)]} { my set entries($name) } else {return ""} } Class RDFTripleDB RDFTripleDB instproc add {p s o} { #my showCall set r [RDFTriple create [self]::[my autoname triple%08d]] $r set predicate $p $r set subject $s $r set object $o return $r } RDFTripleDB instproc dump {} { #my showCall set r "" foreach fact [my info children] {append r [$fact dump]} return $r } RDFTripleDB instproc getTriples {} { # for the time being: return only children of type RDFTriple set ch {} foreach c [my info children] {if {[$c istype "RDFTriple"]} {lappend ch $c}} return $ch #my info children } RDFTripleDB instproc reset {} { #my showCall foreach c [my info children] {$c destroy} my autoname -reset triple #my showMsg "children after reset: <[my info children]>'" } # return all triples that match the subject RDFTripleDB instproc querySubject {s} { #my showCall set r "" foreach t [my info children] { if {[string match $s [$t subject]]} { lappend r $t } } return $r } RDFTripleDB instproc queryPredicate {p} { #my showCall set r "" foreach t [my info children] { if {[string match $p [$t predicate]]} { lappend r $t } } return $r } RDFTripleDB instproc queryPredicateOnSubject {p s} { #my showCall foreach t [my querySubject $s] { if {[string match $p [$t predicate]]} { # there may be only one matching P on a S # return the triple return $t } } return "" } RDFTripleDB instproc prettyTriples {} { my instvar result if {[my exists table]} {my unset table} if {[my exists subjectPrinted]} {my unset subjectPrinted} set result "" foreach triple [lsort [my getTriples]] { set subject [$triple set subject] set predicate [$triple set predicate] set object [$triple set object] regexp {^http.*w3[.]org.*(\#.*)$} $predicate _ predicate regexp {^http.*w3[.]org.*(\#.*)$} $object _ object my lappend table($subject) $predicate $object } foreach subject [lsort [my array names table]] { if {![regexp {^rdfdoc\#} $subject]} { my prettyStatements "" $subject } } set r $result; set result "" foreach subject [lsort [my array names table]] { if {![my exists subjectPrinted($subject)]} { my prettyStatements "" $subject } } if {$result ne ""} { append r "\n=================== unreferenced:\n$result" } return $r } RDFTripleDB instproc prettyStatement {space subject predicate object} { my append result "$space [format %-35s $subject] [format %-25s $predicate] $object\n" } RDFTripleDB instproc prettyStatements {space subject} { if {![my exists table($subject)]} { my append result "$space NO VALUE FOR $subject\n" } else { if {![my exists subjectPrinted($subject)]} { my set subjectPrinted($subject) 1 foreach {predicate object} [my set table($subject)] { my prettyStatement $space $subject $predicate $object if {[regexp {^rdfdoc\#} $object]} { my prettyStatements "$space " $object } } } } } Class TripleVisitor -superclass NodeTreeVisitor -parameter { {descriptionAsBag 0} {currentNode ""} parser rdfNS } TripleVisitor instproc getInfo {} { my set openNode([my set currentNode]) } TripleVisitor instproc getLastInfo {info} { my set openNode([$info set lastCurrentNode]) } TripleVisitor instproc popInfo {objName} { set i [my getInfo] my set currentNode [$i set lastCurrentNode] my unset openNode($objName) return $i } TripleVisitor instproc pushInfo {objName ei} { set lce [$ei set lastCurrentNode [my set currentNode]] if {$lce ne ""} { set lastInfo [my set openNode($lce)] $ei aboutEach [$lastInfo aboutEach] $ei aboutEachPrefix [$lastInfo aboutEachPrefix] } my set openNode($objName) $ei my set currentNode $objName } TripleVisitor instproc qualify {obj var} { [$obj resolveNS] getFullName $var } TripleVisitor instproc init args { my array set openNode {{} {}} RDFTripleDB create [self]::db AboutEachMgr create [self]::aboutEach AboutEachMgr create [self]::aboutEachPrefix next } TripleVisitor instproc resetWithoutDB args { [self]::aboutEach reset [self]::aboutEachPrefix reset next } TripleVisitor instproc reset args { [self]::db reset my resetWithoutDB next } TripleVisitor instproc addDB {p s o} { #puts "ADDDB: P<$p> S<$s> O<$o>" set info [my getInfo] if {$info ne ""} { set topID [$info set topID] if {[$info aboutEach]} { return [[self]::aboutEach addTriple $topID $p $s $o] } elseif {[$info aboutEachPrefix]} { return [[self]::aboutEachPrefix addTriple $topID $p $s $o] } } return [[self]::db add $p $s $o] } TripleVisitor instproc checkReification {triple node} { # for statements that nest inside a description/property, we remember # the statement to be able to reify them # (e.g., bag created for description) if {$triple ne "" && $node ne ""} { set info [my set openNode($node)] if {[my isobject $info] && [$info istype NodeInfo]} { ${info} lappend statements $triple } } } TripleVisitor instproc qualifyWithBaseURL v { if {[string match "\#*" $v]} { return [[my set parser] baseURL]$v } return $v } TripleVisitor instproc RDFTag {objName} { set ns [$objName resolveNS] set rdfNS [$ns searchNamespaceByPrefix rdf] if {$rdfNS eq ""} { set rdfNS [$ns searchNamespaceByPrefix xmlns] } my set rdfNS $rdfNS } TripleVisitor instproc DescriptionNode objName { set di [DescriptionInfo create [self]::[my autoname di]] $di topID [my qualifyWithBaseURL [$objName getSubject]] my pushInfo $objName $di # # if a description nests inside a Member, we need a triple # for the member index (connected to the Description topId) # if {[namespace tail [[set member [$objName info parent]] info class]] \ == "RDFMember"} { set bag_ID [[$member info parent] set ID] my addDB [my qualify $objName [$member set memberIndex]] \ $bag_ID [$di set topID] } } TripleVisitor instproc handlePCData {objName pcdata} { set info [my getInfo] if {[set lcn [$info set lastCurrentNode]] == ""} { #puts stderr "cannot determine lastCurrentNode from $info" #$info showVars set selector "" } else { set selector [namespace tail [$lcn info class]] } switch -exact $selector { RDFDescription { set triple [my addDB \ [my qualify $objName [$objName set content]] \ [$info set topID] $pcdata] my checkReification $triple $lcn } RDFProperty { if {[set rAttr [$lcn getRDFAttribute resource]] != ""} { set triple [my addDB \ [my qualify $objName [$objName set content]] \ [$lcn set $rAttr] $pcdata] #$lcn showVars } else { set lastInfo [my getLastInfo $info] if {[$lastInfo exists generatedParentID]} { set parentID [$lastInfo set generatedParentID] } else { set parentID [[$objName info parent] set ID] } #set parentID [$lastInfo set generatedParentID] set triple [my addDB \ [my qualify $objName [$objName set content]] \ $parentID $pcdata] } } default { #puts stderr "create a generatedParentID for reification" $info set generatedParentID [[my set parser] makeID] set triple [my addDB \ [my qualify $objName [$objName set content]] \ [$info set generatedParentID] $pcdata] my checkReification $triple [my set currentNode] } } $info set tripleWritten 1 } TripleVisitor instproc Property objName { set info [PropertyInfo create [self]::[my autoname pi]] ## if we find no subject and are in Container -> ## reifiy over generatedParentID set propSubject [$objName getSubject] $info topID [my qualifyWithBaseURL $propSubject] my pushInfo $objName $info if {[$objName exists pcdata]} { my handlePCData $objName [$objName getFirstPCData] } } TripleVisitor instproc ContainerNode objName { set ID [my qualifyWithBaseURL [$objName set ID]] foreach t [$objName array names rdfTypes] { my addDB [my qualify $objName \ [$objName qualifyWithRdfNsPrefix type]] $ID $t } } TripleVisitor instproc Member objName { set container [$objName info parent] set resource [$objName qualifyWithRdfNsPrefix resource] set parseType [$objName qualifyWithRdfNsPrefix parseType] if {[$objName exists pcdata]} { set co [$objName getFirstPCData] } elseif {[$objName exists attributes(resource)]} { set co [$objName set attributes(resource)] } elseif {[$objName exists attributes($resource)]} { set co [$objName set attributes($resource)] } #puts stderr "CONTAINER = [info exists co]" if {[info exists co]} { my addDB \ [my qualify $container [$objName set memberIndex]] \ [$container set ID] $co } else { #$objName showVars } } TripleVisitor instproc visit objName { set cl [namespace tail [$objName info class]] $objName instvar attributes set triple "" #puts "********Visit $objName -- $cl" switch -exact $cl { RDFTag {my RDFTag $objName} RDFDescription {my DescriptionNode $objName} RDFProperty {my Property $objName} RDFBag - RDFSeq - RDFAlt {my ContainerNode $objName} RDFMember {my Member $objName} } foreach a [array names attributes] { regexp "^([$objName set rdfNSPrefix]:|)(.*)" $a _ __ an switch -exact $an { bagID { set info [my getInfo] $info set bagID 1 } aboutEach { set info [my getInfo] if {[DescriptionInfo info instances $info] eq ""} { error "AboutEach not in description" } $info aboutEach 1 [self]::aboutEach addEntry [my qualifyWithBaseURL [$objName getSubject]] } aboutEachPrefix { set info [my getInfo] if {[DescriptionInfo info instances $info] eq ""} { error "AboutEachPrefix not in description" } $info aboutEachPrefix 1 [self]::aboutEachPrefix addEntry [my qualifyWithBaseURL [$objName getSubject]] } resource { if {$cl eq "RDFProperty"} { my handlePCData $objName [set attributes($a)] } } } } } TripleVisitor instproc reificate {objName p s o} { set memberID [[my set parser] makeID] my addDB [my qualify $objName \ [$objName qualifyWithRdfNsPrefix predicate]] $memberID $p my addDB [my qualify $objName \ [$objName qualifyWithRdfNsPrefix subject]] $memberID $s my addDB [my qualify $objName \ [$objName qualifyWithRdfNsPrefix object]] $memberID $o my addDB [my qualify $objName \ [$objName qualifyWithRdfNsPrefix type]] $memberID \ [my qualify $objName [$objName qualifyWithRdfNsPrefix Statement]] return $memberID } TripleVisitor instproc visitEnd objName { switch -exact [namespace tail [$objName info class]] { RDFDescription { set di [my popInfo $objName] if {[my descriptionAsBag] || [$di set bagID]} { set bagID [$objName set bagID] my addDB [my qualify $objName [$objName qualifyWithRdfNsPrefix type]] \ $bagID [my qualify $objName [$objName qualifyWithRdfNsPrefix Bag]] set bagCount 0 foreach s [$di set statements] { set memberID [my reificate $objName \ [$s set predicate] [$s set subject] [$s set object]] my addDB [my qualify $objName \ [$objName qualifyWithRdfNsPrefix _[incr bagCount]]] \ $bagID $memberID } } foreach t [$objName array names rdfTypes] { my addDB [my qualify $objName [$objName qualifyWithRdfNsPrefix "type"]] \ [$objName getSubject] $t } $di destroy } RDFProperty { set info [my popInfo $objName] if {![$info exists tripleWritten]} { set triple "" foreach fc [$objName info children] { switch -exact [namespace tail [$fc info class]] { RDFDescription { set triple [my addDB \ [my qualify $objName [$objName set content]] \ [my qualifyWithBaseURL [$objName getSubject]] [$fc getSubject]] break } RDFBag - RDFSeq - RDFAlt { set triple [my addDB \ [my qualify $objName [$objName set content]] \ [my qualifyWithBaseURL [$objName getSubject]] [$fc set ID]] break } } } if {$triple ne ""} { my checkReification $triple [my set currentNode] } } $info destroy } } } TripleVisitor instproc evaluateAboutEach {} { set triplesWritten "" set rdfNSFullName [[my rdfNS] searchPrefix rdf] foreach entry [[self]::aboutEach array names entries] { # matching entry triples should be bag types and their # members -> duplication of aboutEach statements for the # members foreach entryTriple [lsort [[self]::db querySubject $entry]] { if {[regexp "^${rdfNSFullName}_\[0-9\]*$" [$entryTriple predicate]]} { foreach t [[self]::aboutEach getTriples $entry] { set subject [$t subject] # if this is a toplevel elt of an about each tree -> its # subject is the object of the container member if {$subject eq $entry} { [self]::db add [$t predicate] [$entryTriple object] [$t object] } elseif {[lsearch $triplesWritten $t] == -1} { [self]::db add [$t predicate] $subject [$t object] lappend triplesWritten $t } } } } } } TripleVisitor instproc interpretNodeTree {node} { my set parser [$node set parser] $node accept [self] my evaluateAboutEach } namespace export RDFTriple NodeInfo DescriptionInfo PropertyInfo \ AboutEachMgr RDFTripleDB TripleVisitor } namespace import ::xotcl::rdf::triple::* |
Added assets/xotcl1.6.8/rdf/pkgIndex.tcl.
> > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded xotcl::rdf::parser 1.0 [list source [file join $dir xoRDF.xotcl]] package ifneeded xotcl::rdf::recreatorVisitor 1.0 [list source [file join $dir rdfRecreatorVisitor.xotcl]] package ifneeded xotcl::rdf::triple 1.0 [list source [file join $dir RDFTriple.xotcl]] package ifneeded xotcl::rdf::tripleRecreator 1.0 [list source [file join $dir RDFCreator.xotcl]] |
Added assets/xotcl1.6.8/rdf/rdfRecreatorVisitor.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | package provide xotcl::rdf::recreatorVisitor 1.0 package require -exact xotcl::rdf::parser 1.0 package require -exact xotcl::xml::recreatorVisitor 1.0 package require XOTcl 1 namespace eval ::xotcl::rdf::recreatorVisitor { namespace import ::xotcl::* ############################################################################## # # a visitor that recreates an RDF representation from a # node tree # ############################################################################# Class RDFRecreatorVisitor -superclass XMLRecreatorVisitor RDFRecreatorVisitor instproc appendLineFeed obj { if {[set parseType [$obj getRDFAttribute parseType]] != ""} { if {$parseType ne "Resource"} { # we have parseType == Literal # -> don't append "\n" return "" } } return "\n" } RDFRecreatorVisitor instproc visit objName { next my instvar result if {[$objName istype RDFResource]} { foreach t [$objName array names rdfTypes] { set ts [$objName prependRDFPrefix type] append result " [my insertIndent $objName]<$ts resource=\"$t\"/>\n" } } return $result } namespace export RDFRecreatorVisitor } namespace import ::xotcl::rdf::recreatorVisitor::* |
Added assets/xotcl1.6.8/rdf/xoRDF.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 | package provide xotcl::rdf::parser 1.0 package require XOTcl 1 package require -exact xotcl::xml::parser 1.0 #package require -exact xotcl::pattern::link 1.0 package require -exact xotcl::trace 1.0 namespace eval ::xotcl::rdf::parser { namespace import ::xotcl::* ############################################################################## # # RDF Parse Type Handling for RDF Node Class and RDF Parser class # to be used as mixin. Here, we have decomposed the parse type handling # ############################################################################## # # Nodes just call "isParseLiteral", "isParseResource", and "handleParseType" # by their template methods -> mixins concretizes implementation # Class RDFNodeParseTypeHandling # # parseType=literal nodes are not parsed, but handled as literals # -> the XML parser should parse these nodes -> we have cut them off # if we encounter "parseType = literal" nextParsedLiterals searches the # parseLiterals array and returns the content # RDFNodeParseTypeHandling instproc nextParsedLiterals {} { set parser [my set parser] $parser set parseLiterals([$parser incr parseLiteralsCount]) } # # handle attributes that determine the parse type # RDFNodeParseTypeHandling instproc handleParseType value { if {$value eq "Resource"} { my set parseResource 1 } else { # with RDF 1.0 all values other than Resource are treated # as parseType = literal my set pcdata [list "" [my nextParsedLiterals]] my set parseLiteral 1 } } # # two convinience methods that tell us whether the parse type is literal/resource # RDFNodeParseTypeHandling instproc isParseLiteral {} { # # if the parse literal var is set -> one child # is of type ParseTypeLiteral ! # my exists parseLiteral } RDFNodeParseTypeHandling instproc isParseResource {} { # # if the parseResource var is set -> one child # is of type ParseTypeResource ! # my exists parseResource } # # and we overload the Parser's parse method in order to cut off # all parseType = "Literal", because we have to hinder the XML # parser to parse RDF text that is marked as parseType = literal # we store the result in an array "parseLiterals" that is used # by the RDFNodeParseTypeHandling Mixin # Class RDFParserParseTypeHandling RDFParserParseTypeHandling instproc parse data { my array set parseLiterals {} my set parseLiteralsCount 0 set count 0 set dt $data while {[set pt [string first "parseType" $dt]] != -1} { # we cut the string off manually, because a regexp is slower if {$::tcl_version > 8.0} { set last [string first "=" $dt $pt] } else { set last [string first "=" [string range $dt $pt end]] incr last $pt } set ptStart [expr {[string last "<" [string range $dt 0 $pt]] + 1}] set propName [string range $dt $ptStart $pt] set blank [string first " " $propName] if {$blank != -1} { set propName [string range $propName 0 [expr {$blank -1}]] } set dt [string range $dt $last end] # All parse types != Resource treated as literals if {![regexp {^= *[\"']Resource} $dt]} { regexp -indices ">" $dt idx set start [lindex $idx 1] if {[regexp -indices "</$propName>" $dt idx]} { set endTagLeft [lindex $idx 0] set literal [string range $dt [expr {$start + 1}] [expr {$endTagLeft - 1}]] set dt [string range $dt $endTagLeft end] my set parseLiterals([incr count]) $literal } else { error "end tag for $propName missing" } } } next $data } ############################################################################## # # RDFNode Node Class # ############################################################################## Class RDFNode -superclass XMLNode -parameter { subject {rdfNSPrefix ""} } @ Class RDFNode -superclass XMLNode { description { general superclass for RDF nodes common properties } } # # add mixins for parse type handling # RDFNode instproc init args { next my mixin add RDFNodeParseTypeHandling set p [my info parent] if {[$p exists rdfNSPrefix]} { my set rdfNSPrefix [$p set rdfNSPrefix] #puts stderr "RDF Prefix defined in [self]->init to [$p set rdfNSPrefix]" } } RDFNode instproc parseData {text} { if {[my isParseLiteral]} {return} next } # # try to find the "subject" of the RDF statement -> # if it not found on the actual node search the parents # # per default subject is ""; subclasses add subjects, # when they encounter ID, about, ... attrs # RDFNode instproc getSubject {} { for {set o [self]} {![$o istype RDFTag]} {set o [$o info parent]} { if {[$o exists subject]} {return [$o set subject]} } return "" } # # lets the parser construct an unique ID in the parser # RDFNode instproc makeID {} { [my set parser] makeID } # # abstract methods that have to be concretized with parse type handling # by a parse type mixin (or in subclass) # RDFNode abstract instproc isParseLiteral {} RDFNode abstract instproc isParseResource {} RDFNode abstract instproc handleParseType value RDFNode instproc appendRDFType t { set t [[my resolveNS] getFullName $t] my set rdfTypes($t) 1 } # # get a typed node abbreviation -> convert it to # a description + a nested rdf:type property # RDFNode instproc getTypedNode {name attrList} { set r [my getNestingNode RDFDescription \ [my qualifyWithRdfNsPrefix Description] $attrList] $r appendRDFType $name set r } # # try to parse children corresponding to parse type or if none is given # try to parse a child of type obj -> Description or Container # RDFNode instproc parseNestedChild {name attrList} { if {[my isParseResource]} { if {![my exists resourceDescription]} { my set resourceDescription \ [my getNestingNode RDFDescription \ [my qualifyWithRdfNsPrefix Description] {}] # we have resolved parseType="resource" with a description # -> remove parse type attribute info ... it is not correct anymore, # but remember parseResource flag if {[my exists attributes(parseType)]} { my unset attributes(parseType) } if {[my exists attributes([set parseType [my qualifyWithRdfNsPrefix parseType]])]} { my unset attributes($parseType) } } set r [[my set resourceDescription] getPropertyNodeChild $name $attrList] } elseif {[my isParseLiteral]} { set r [self] # literal -> do nothing } else { if {[set node [my isNestingNode $name]] ne ""} { set r [my getNestingNode $node $name $attrList] } else { set r [my getTypedNode $name $attrList] } } return $r } # # step forward in the attrList # RDFNode instproc nextAttrNode {node attrList index} { upvar [self callinglevel] $index i $attrList a if {$node ne ""} { set a [lreplace $a $i [expr {$i + 1}]] } else { incr i 2 } } # # create a child node of Property type and return it # # don't build a node for "type" properties, but append them to # the list # RDFNode instproc getPropertyNodeChild {name attrList} { regexp "^[my set rdfNSPrefix]:(.*)" $name _ name set parser [my set parser] if {$name eq "type" && [my istype RDFResource]} { # seek for resource attribute and append type to list set rp [my prependRDFPrefix resource] set rdfns [$parser set rdfNamespace] foreach {n v} $attrList { if {![my istype RDFContainerNodeClass]} { if {$n eq $rp || $n eq "resource"} { foreach c {Bag Alt Seq} { if {$v eq "$rdfns$c"} { my class RDF$c my set memberNr 0 my set ID [my set bagID] my unset bagID my set content [my prependRDFPrefix $c] # reclass existing li props to member set li [my prependRDFPrefix li] foreach child [lsort [my info children]] { if {[namespace tail [$child info class]] eq "RDFProperty"} { if {[$child set content] eq $li || [$child set content] eq "li"} { $child class RDFMember my giveMemberNr $child $child set content $li } } } } } } } my appendRDFType $v } return [self] } else { set nf [$parser set nodeFactory] set r [$nf getNode RDFProperty [self]::[my nextChild prop] $parser] $r set content $name $r parseAttributes $name $attrList set r } } # # property in abbr syntax (as attribute) # RDFNode instproc propertyAttribute {n v} { set r [my getPropertyNodeChild $n ""] $r parseData $v set r } # # check whether an attribute name matches an attributed RDFNode # of this class or not # return the corresponding node class # RDFNode instproc isAttribute {n} { regexp "^[my set rdfNSPrefix]:(.*)" $n _ n if {[lsearch [[my info class] set attributeList] $n] != -1} { return $n } elseif {$n eq "xml:lang"} { # we create attribute for xml_lang (for recreation purposes) return $n } return "" } # # check if name matches an node class that may be nested in [self] # RDFNode instproc isNestingNode {n} { regexp "^[my set rdfNSPrefix]:(.*)" $n _ n set cl [my info class] if {[$cl exists nestingList($n)]} { return [$cl set nestingList($n)] } return "" } RDFNode instproc getNestingNode {node name attrList} { set parser [my set parser] set nf [$parser set nodeFactory] switch [namespace tail $node] { "RDFMember" - "RDFProperty" {set objName prop} default {set objName res} } set r [$nf getNode $node [self]::[my nextChild $objName] $parser] $r set content $name $r parseAttributes $name $attrList set r } # # check whether the RDF namespace is redefined to another prefix # RDFNode instproc makeIndividualNSEntry {prefix entry} { if {$entry eq [[my set parser] rdfNamespace]} { if {[my set rdfNSPrefix] eq "" || $prefix ne "xmlns"} { my set rdfNSPrefix $prefix } #puts stderr "RDF Prefix redefined in [self] to $prefix" } next } RDFNode instproc qualifyWithRdfNsPrefix t { set ns [my set rdfNSPrefix] if {$ns eq "xmlns"} {return $t} return $ns:$t } # # checks whether a given attribute is part of the attributes array # and returns the varname, otherwise "" # RDFNode instproc getAttribute {n nsFullName} { set ns [my resolveNS] set xmlns [$ns searchPrefix xmlns] if {$xmlns eq $nsFullName && [my exists attributes($n)]} { return attributes($n) } set prefix [$ns searchFullName $nsFullName] if {$prefix ne "" && [my exists attributes($prefix:$n)]} { return attributes($prefix:$n) } return "" } # # searches for attribute "n" with rdf namespace prefix # RDFNode instproc getRDFAttribute {n} { if {[my exists attributes($n)]} { return [my set attributes($n)] } set rdfNSPrefix [my set rdfNSPrefix] if {$rdfNSPrefix ne "xmlns"} { set n $rdfNSPrefix:$n if {[my exists attributes($n)]} { return [my set attributes($n)] } } return "" } RDFNode instproc prependRDFPrefix ts { set rdfNSPrefix [my set rdfNSPrefix] if {$rdfNSPrefix ne "xmlns"} {set ts $rdfNSPrefix:$ts} return $ts } ############################################################################## # # superclass for all resources (like Description, Alt, Seq, Beg) # used directly in the parse tree ... resource nodes are mixed in # ############################################################################## Class RDFResource -superclass RDFNode RDFResource instproc print {} { set t [my array names rdfTypes] if {$t eq ""} {return [next]} else {return "[next]\nTYPES: $t"} } ############################################################################## # # superclasses for container node classes (alt seq bag) # ############################################################################## Class RDFContainerNodeClass -superclass RDFResource RDFContainerNodeClass instproc init args { # cache the member number # 0 inidicates, there is currently no member next my set memberNr 0 my set ID [my makeID] my appendRDFType [my qualifyWithRdfNsPrefix \ [[my info class] set content]] } RDFContainerNodeClass instproc parseAttributes {name attrList} { #set index 0 foreach {n v} $attrList { if {[set an [my isAttribute $n]] ne ""} { my set attributes($n) $v if {$an eq "ID"} { my set subject $v my set ID [[my set parser] set baseURL]\#$v } } #set attrList [my nextAttrNode $an attrList index] } } RDFContainerNodeClass instproc giveMemberNr {member} { set pf [my getContentPrefix] if {$pf ne ""} {append pf ":"} $member set memberIndex "${pf}_[my incr memberNr]" } RDFContainerNodeClass instproc parseStart {name attrList} { set r [self] next if {[set node [my isNestingNode $name]] ne ""} { set r [my getNestingNode $node $name $attrList] if {[namespace tail [$r info class]] eq "RDFMember"} { my giveMemberNr $r } } else { set r [my getPropertyNodeChild $name $attrList] } return $r } ############################################################################## # # Concrete Factory for creating RDF-style nodes # ############################################################################## Class RDFNodeClassFactory -superclass XMLNodeClassFactory RDFNodeClassFactory instproc content content { my set content $content } RDFNodeClassFactory instproc attributeList attributeList { my set attributeList $attributeList } RDFNodeClassFactory instproc nestingTo nestingTo { set name [string trimleft [self] :] foreach cl $nestingTo { $cl set nestingList([my set content]) $name } } RDFNodeClassFactory proc create args { # create the class set name [next] switch -exact $name { RDFDescription - RDFProperty - RDFMember { my array set attributeList {} } RDFMember - RDFProperty { my array set nestingList {} } } } ########################################################################## # # now create a factory and build all the node classes # needed for the RDF Parser/Interpreter # ########################################################################## RDFNodeClassFactory proc createFactories {} { foreach {name superclasses content attributeList} { RDFTag RDFNode RDF {} RDFBag RDFContainerNodeClass Bag {ID} RDFSeq RDFContainerNodeClass Seq {ID} RDFAlt RDFContainerNodeClass Alt {ID} RDFProperty RDFNode "" {bagID ID resource parseType} RDFMember RDFProperty li {resource parseType} RDFDescription RDFResource Description {ID bagID about type aboutEach aboutEachPrefix} } { #puts "Create class: $name -superclass $superclasses" RDFNodeClassFactory create $name -superclass $superclasses \ -content $content \ -attributeList $attributeList } } RDFNodeClassFactory createFactories # # define nesting constraints # RDFTag nestingTo {} RDFBag nestingTo {RDFTag RDFProperty} RDFSeq nestingTo {RDFTag RDFProperty} RDFAlt nestingTo {RDFTag RDFProperty} RDFMember nestingTo {RDFContainerNodeClass RDFBag RDFSeq RDFAlt} RDFProperty nestingTo {} RDFDescription nestingTo {RDFTag RDFMember RDFProperty} ############################################################################## # # add some methods to the property node class # ############################################################################## RDFProperty instproc parseAttributes {name attrList} { set r [self] #set index 0 foreach {n v} $attrList { if {[my checkForXmlNS $n $v]} {continue} if {[set an [my isAttribute $n]] ne ""} { my set attributes($n) $v if {$an eq "parseType"} {my handleParseType $v} } else { if {![info exists abbrvPropResource]} { set abbrvPropResource \ [my getNestingNode RDFDescription \ [my qualifyWithRdfNsPrefix Description] {}] } $abbrvPropResource propertyAttribute $n $v } #set attrList [my nextAttrNode $an attrList index] } if {[info exists abbrvPropResource]} { # if resource attribute is given -> use it for abbr property # description as about attr if {[my exists attributes(resource)]} { set about [my set attributes(resource)] my unset attributes(resource) } if {[my exists attributes([set resource [my qualifyWithRdfNsPrefix resource]])]} { set about [my set attributes($resource)] my unset attributes($resource) } if {[info exists about]} { $abbrvPropResource set attributes(about) $about $abbrvPropResource set subject $about } } } RDFProperty instproc parseStart {name attrList} { if {[my isParseLiteral]} {return [self]} next return [my parseNestedChild $name $attrList] } ############################################################################## # # add methods to the member class # ############################################################################## RDFMember parameter { memberIndex } RDFMember instproc parseAttributes {name attrList} { #set index 0 foreach {n v} $attrList { if {[set an [my isAttribute $n]] ne ""} { my set attributes($n) $v if {$an eq "parseType"} {my handleParseType $v} } #set attrList [my nextAttrNode $an attrList index] } } RDFMember instproc print {} { return "[next]\nMEMBER-INDEX: [my set memberIndex]" } ############################################################################## # # add methods to the description node class # ############################################################################## RDFDescription instproc init {args} { next set ID [my makeID] my set subject $ID my set bagID $ID } RDFDescription instproc parseAttributes {name attrList} { set r [self] # if the parent is a property with an ID -> use it # as description subject set ID [my qualifyWithRdfNsPrefix ID] set parent [my info parent] if {[$parent exists attributes(ID)]} { my set subject [$parent set attributes(ID)] } elseif {[$parent exists attributes($ID)]} { my set subject [$parent set attributes($ID)] } foreach {n v} $attrList { if {[my checkForXmlNS $n $v]} {continue} if {[set an [my isAttribute $n]] ne ""} { my set attributes($n) $v switch -exact $an { about - ID - aboutEach - aboutEachPrefix { my set subject $v } bagID { my set bagID [[my set parser] set baseURL]\#$v } type { my appendRDFType $v } } } else { set r [my propertyAttribute $n $v] } } return $r } RDFDescription instproc parseStart {name attrList} { next return [my getPropertyNodeChild $name $attrList] } ############################################################################## # # add some methods to the <RDF> node class # ############################################################################## RDFTag parameter {{startTagOn 0}} RDFTag instproc match {c} { # the prefix of the topnode determines initially how the RDF # namespace is named ... since several examples don't have a # namespace definition for this ns, we set here a default, which # may be overridden by ns definitions in the XML text if {[regexp {^([^:]*):(.*)} $c _ pre c]} { my makeIndividualNSEntry $pre [[my set parser] rdfNamespace] #puts stderr "Making RDF namespace entry for <$pre>" } #puts "Match for $c --- Content: [[my info class] set content]" expr {$c eq [[my info class] set content]} } RDFTag instproc parseStart {name attrList} { set parsed 0 if {[set node [my isNestingNode $name]] ne ""} { set r [my getNestingNode $node $name $attrList] } else { set r [my getTypedNode $name $attrList] } next return $r } RDFTag instproc parseEnd content { if {!([my startTagOn] && [my match $content])} { [my errorChild $content] } next self ;# return [self] } ############################################################################## # # RDF Factory for creating node objects # ############################################################################## Class RDFNodeFactory -superclass XMLNodeFactory RDFNodeFactory create rdfNodeFactory -sharedNodes {RDFDescription RDFTag} ############################################################################## # # RDF parser class used to access the xml parser and produce the # rdf node tree # ############################################################################## Class RDFParser -superclass XMLParser -parameter { {baseURL "rdfdoc"} {rdfNamespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"} } RDFParser instproc init args { my mixin add RDFParserParseTypeHandling ### this special parser handles rdf:RDF tags my topLevelHandlerPattern {^([^:]*):RDF|RDF} RDFTag next my set nodeFactory "rdfNodeFactory" } RDFParser instproc makeID {} { my autoname [my baseURL]\#id } RDFParser instproc reset {} { next set id [my baseURL]\#id my autoname -reset $id } RDFParser instproc createTopLevelNode {name attrList} { set tn [next] #$tn makeIndividualNSEntry xmlns [my set rdfNamespace] ### toplevel node must be of type RDFTag if {![$tn istype RDFTag]} { error "Top level node must be of type RDFTag" } if {[$tn match $name]} { $tn set content $name $tn startTagOn 1 ### use default values for rdf/default (xmlns) namespace #my makeIndividualNSEntry rdfs "http://www.w3.org/TR/1999/PR-rdf-schema-19990303#" foreach {n v} $attrList { if {[$tn checkForXmlNS $n $v]} {continue} } } return $tn } #RDFParser instproc parse data { # next #} namespace export RDFNodeParseTypeHandling RDFParserParseTypeHandling \ RDFNode RDFResource RDFContainerNodeClass RDFNodeClassFactory \ RDFNodeFactory RDFParser rdfNodeFactory \ RDFTag RDFBag RDFSeq RDFAlt RDFProperty RDFMember RDFDescription } namespace import ::xotcl::rdf::parser::* |
Added assets/xotcl1.6.8/registry/COPYRIGHT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen * Specification of Software Systems * Altendorferstraße 97-101 * D-45143 Essen, Germany * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this permission * notice appear in supporting documentation. We make no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied * warranty. * * * This software is based upon MIT Object Tcl by David Wetherall and * Christopher J. Lindblad, that contains the following copyright * message: * * "Copyright 1993 Massachusetts Institute of Technology * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this * permission notice appear in supporting documentation, and that * the name of M.I.T. not be used in advertising or publicity * pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about * the suitability of this software for any purpose. It is * provided "as is" without express or implied warranty." |
Added assets/xotcl1.6.8/registry/Registry.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | package provide xotcl::registry::registry 1.0 package require -exact xotcl::trace 1.0 package require -exact xotcl::rdf::triple 1.0 package require -exact xotcl::rdf::tripleRecreator 1.0 package require -exact xotcl::actiweb::agent 1.0 package require XOTcl 1 namespace eval ::xotcl::registry::registry { namespace import ::xotcl::* Class Registry -superclass Agent Registry instproc init args { next my exportProcs register query queryProperty RDFParser [self]::parser TripleVisitor [self]::tripleVisitor -parser [self]::parser [self]::tripleVisitor descriptionAsBag 0 my array set services {} } Registry instproc register {rdfScript} { #my showCall [[self]::tripleVisitor set parser] parse $rdfScript [self]::tripleVisitor interpretNodeTree [self]::parser::topNode [self]::tripleVisitor resetWithoutDB foreach serviceTriple [[self]::tripleVisitor::db queryPredicate \ "http://nestroy.wi-inf.uni-essen.de/schema/service#name"] { set service [$serviceTriple object] if {[info exists services($service)]} { puts stderr "we have already such a service '$service'" # hier koennte man ueberlegen, den service zu loeschen oder nicht # zZT: loesche altes service } puts stderr "REGISTRY: registering $service with [$serviceTriple subject]" my set services($service) [$serviceTriple subject]; } } Registry instproc query {service} { my showCall if {[info exists services($service)]} { set s [my set services($service)] return [[Place getInstance]::rdfCreator createFromTriples [[self]::tripleVisitor::db querySubject $s]] } } Registry instproc queryProperty {args} { # returns first service with matching properties my showCall foreach s [my array names services] { set success 1 foreach {att value} $args { set t [[self]::tripleVisitor::db queryPredicateOnSubject $att [my set services($s)]] if {$t eq "" || [$t object] != $value} { set success 0 break } } if {$success} { set r [my query $s] return $r } else { return "" } } } namespace export Registry } namespace import ::xotcl::registry::registry::* |
Added assets/xotcl1.6.8/registry/pkgIndex.tcl.
> > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded xotcl::registry::registry 1.0 [list source [file join $dir Registry.xotcl]] |
Added assets/xotcl1.6.8/serialize/COPYRIGHT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen * Specification of Software Systems * Altendorferstraße 97-101 * D-45143 Essen, Germany * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this permission * notice appear in supporting documentation. We make no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied * warranty. * * * This software is based upon MIT Object Tcl by David Wetherall and * Christopher J. Lindblad, that contains the following copyright * message: * * "Copyright 1993 Massachusetts Institute of Technology * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this * permission notice appear in supporting documentation, and that * the name of M.I.T. not be used in advertising or publicity * pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about * the suitability of this software for any purpose. It is * provided "as is" without express or implied warranty." |
Added assets/xotcl1.6.8/serialize/RecoveryPoint.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 | # $Id: RecoveryPoint.xotcl,v 1.4 2006/02/18 22:17:33 neumann Exp $ package provide xotcl::scriptCreation::recoveryPoint 1.0 package require XOTcl 1 namespace eval ::xotcl::scriptCreation::recoveryPoint { namespace import ::xotcl::* ## fehlt noch: filter, mixins, metadata, ass, assoption, etc ## beim recover Class's,Object's proc instproc vars nicht ueberschreiben ## filter dann anhaengen etc ... ## der Recovery Filter darf durch Object filter "" nicht gelöscht werden # # filter to ensure that recovering doesn't overwrite # existing objs/classes # Object instproc recoveryFilter args { ::set method [self calledproc] switch -- $method { create { # don't overwrite objects if {![::Object isobject [lindex $args 0]]} { next } else { # puts stderr "Recovery Filter: omitting [lindex $args 0]" } } proc { if {[lsearch [my info procs] [lindex $args 0]] == -1} { next } else { # puts stderr "Recovery Filter: omitting proc [self]::[lindex $args 0]" } } instproc { if {[lsearch [my info instprocs] [lindex $args 0]] == -1} { next } else { # puts stderr "Recovery Filter: omitting instproc [self]::[lindex $args 0]" } } set { if {[lsearch [my info vars] [lindex $args 0]] == -1} { next } else { # puts stderr "Recovery Filter: omitting var [self]::[lindex $args 0]" } } default {next} } } # # remove filter from object # Object instproc filterremove f { ::set fl [my info filter] puts stderr "filterremove on [self] with $f; fullName: [my filtersearch $f]" while {[::set index [lsearch $fl [my filtersearch $f]]] != -1} { ::set fl [lreplace $fl $index $index] } my filter $fl } # # remove mixin from object # Object instproc mixinremove m { puts stderr "mixinremove on [self] with $m" ::set ml [my info mixins] while {[::set index [lsearch $ml $m]] != -1} { ::set ml [lreplace $ml $index $index] } my mixin $ml } Class RecoveryPoint \ -parameter { {appendedObjs ""} {appendedCls ""} {appendedNamespaces ""} {withState 0} {appendToFile 0} {definedObjs [list Object \ Class \ Class::Parameter]} {excludeNames ""} } # # queries the definedObjs variable whether a given object # is already defined/predefined or not # -> a way to exclude classes/objs from saving # RecoveryPoint instproc isDefined {n} { my instvar definedObjs puts stderr "Checking Defined: $n in $definedObjs" if {[lsearch $definedObjs [string trimleft $n :]] == -1} { return 0 } else { return 1 } } RecoveryPoint instproc appendDefined {n} { my instvar definedObjs lappend definedObjs [string trimleft $n :] } # # check whether an obj/cls/namespace is appended already # append obj/cls/namespace # foreach method {Obj Cl Namespace} { set r { my instvar {appended${method}s name}} set r [subst -nocommands -nobackslash $r] set s $r append s { if {[lsearch $name [string trimleft $n :]] == -1} { return 0 } else { return 1 } } RecoveryPoint instproc isAppended$method {n} $s append r { lappend name [string trimleft $n :] } RecoveryPoint instproc append$method {n} $r } # # compare command for lsort # RecoveryPoint instproc namespaceDepth {a b} { set aCount 0 set bCount 0 for {set i 0} {$i < [string length $a]} {incr i} { if {[string index $a $i] eq ":"} { incr aCount } } for {set i 0} {$i < [string length $b]} {incr i} { if {[string index $b $i] eq ":"} { incr bCount } } if {$aCount == $bCount} { return 0 } elseif {$aCount > $bCount} { return 1 } return -1 } # # produces a script containing the current state of # the given obj # RecoveryPoint instproc stateScript {obj} { set script "" foreach v [$obj info vars] { if {[lsearch [my set excludeNames] $v] == -1} { $obj instvar $v if {[array exists $v]} { foreach name [array names $v] { set arr ${v}($name) set value [$obj set $arr] append script "$obj set $arr \"$value\"\n" } } else { set value [set $v] append script "$obj set $v \"$value\"\n" } } } return $script } # # produces a script containing the procs of the given obj # RecoveryPoint instproc procScript {obj} { set script "" foreach p [$obj info procs] { if {[lsearch [my set excludeNames] $v] == -1} { append script \ "$obj proc $p \{[$obj info args $p]\} \{[$obj info body $p]\}\n" } } return $script } # # produces a script containing the instprocs of the given class # RecoveryPoint instproc instprocScript {cl} { set script "" foreach p [$cl info instprocs] { if {[lsearch [my set excludeNames] $v] == -1} { append script \ "$cl instproc $p \{[$cl info instargs $p]\} \{[$cl info instbody $p]\}\n" } } return $script } # # append parent obj/classes/namespaces of an object completly # RecoveryPoint instproc appendParents {name} { # puts stderr "Recovery -- appendParents $name " set p "" set script "" set n $name while {[set np [namespace parent ::$n]] != "::"} { lappend p $np set n $np } set p [lsort -command {[self] namespaceDepth} $p] foreach n $p { if {[Object isobject $n]} { if {[$n isclass]} { append script [my classScript $n] } else { append script [my objectScript $n] } } else { if {![my isAppendedNamespace $n]} { append script "namespace eval $n \{\}\n" # puts stderr "Recovery -- Appending Namespace: $n" my appendedNamespace $n } } } return $script } # # produces a script recovering the given obj with all children # without state # RecoveryPoint instproc objectScript {obj} { # puts stderr "Recovery -- Object Script $obj" my instvar withState set script "" if {![my isDefined $obj] && ![my isAppendedObj $obj]} { # if the object's class is not yet appended => do it now set objClass [$obj info class] append script [my classScript $objClass] # append all parent namespaces append script [my appendParents $obj] # append the obj append script "$objClass $obj\n" append script [my procScript $obj] if {$withState == 1} { append script [my stateScript $obj] } # puts stderr "Recovery -- Appending Object: $obj" my appendObj $obj # append its children foreach o [$obj info children] { append script [my objectScript $o] } } return $script } # # produces a script recovering the given class with all children # without state # RecoveryPoint instproc classScript {cl} { # puts stderr "Recovery -- Class Script $cl" my instvar withState set script "" if {![my isDefined $cl] && ![my isAppendedCl $cl]} { # if the class's meta-class is not yet appended => do it now set metaClass [$cl info class] append script [my classScript $metaClass] # append all parent namespaces append script [my appendParents $cl] # append the class append script "$metaClass $cl" set sl [$cl info superclass] if {$sl ne ""} { append script " -superclass \{$sl\}\n" } else { append script "\n" } append script [my instprocScript $cl] append script [my procScript $cl] if {$withState == 1} { append script [my stateScript $cl] } # puts stderr "Recovery -- Appending Class: $cl \n $script" my appendCl $cl # append children set children [$cl info children] set classChildren [$cl info classchildren] foreach c $children { if {[lsearch $classChildren $c] != -1} { append script [my classScript $c] } else { append script [my objectScript $c] } } } return $script } # # produces a script recovering the given class and all subclasses # with all their children and all instances # # RecoveryPoint instproc hierarchyScript {cl} { set script [my classScript $cl] set sortedInstances \ [lsort -command {[self] namespaceDepth} [$cl info instances]] foreach o $sortedInstances { append script [my objectScript $o] } foreach c [$cl info subclass] { append script [my hierarchyScript $c] } return $script } # # saves a script to a file # RecoveryPoint instproc saveScript {filename script} { my instvar appendToFile if {$appendToFile} { set mode a } else { set mode w } set f [open $filename $mode] puts $f $script close $f } # # load a script from a file # RecoveryPoint instproc loadScript {filename} { set f [open $filename r] set r [read $f] close $f return $r } # # produce methods to save/recover an object script to/from a file # with/without state/only state # foreach method { Object ObjectState ObjectWithState Class ClassWithState \ Hierarchy HierarchyWithState } { set s { my set withState } if {[regexp {(.*)WithState} $method _ m]} { set call $m append s "1" } else { set call $method append s "0" } scan $call %c l set ::low "[format %c [expr {$l + 32}]][string range $call 1 end]" append s { my appendedObjs "" my appendedCls "" my appendedNamespaces "" } append s " foreach a \$args \{" set r { set script [my ${low}Script } set r [subst -nocommands -nobackslash $r] append s $r append s {$a] my saveScript $filename $script} append s " \} " RecoveryPoint instproc save$method {filename args} $s } RecoveryPoint instproc recover {filename} { set r [my loadScript $filename] Object filterappend recoveryFilter # puts stderr "RecoveryFilter appended for $filename" eval $r Object filterremove recoveryFilter # puts stderr "RecoveryFilter removed for $filename" return } namespace export RecoveryPoint } namespace import ::xotcl::scriptCreation::recoveryPoint::* |
Added assets/xotcl1.6.8/serialize/ScriptCreator.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 | # $Id: ScriptCreator.xotcl,v 1.4 2006/02/18 22:17:33 neumann Exp $ package provide xotcl::scriptCreation::scriptCreator 1.0 package require XOTcl 1 namespace eval ::xotcl::scriptCreation::scriptCreator { namespace import ::xotcl::* Class ScriptCreator \ -parameter { {excludedObjs {Object Class Class::Parameter}} {excludeNames ""} {dependencyChecking 1} } # # queries the excludedObjs variable whether a given object # is already defined/predefined or not # -> a way to exclude classes/objs from saving # ScriptCreator instproc isExcluded {n} { my instvar excludedObjs #puts stderr "Checking Excluded: $n in $excludedObjs" if {[lsearch $excludedObjs [string trimleft $n :]] == -1} { return 0 } else { return 1 } } ScriptCreator instproc appendExcluded {n} { my instvar excludedObjs lappend excludedObjs [string trimleft $n :] } # # compare command for lsort # ScriptCreator instproc namespaceDepth {a b} { set aCount 0 set bCount 0 for {set i 0} {$i < [string length $a]} {incr i} { if {[string index $a $i] eq ":"} { incr aCount } } for {set i 0} {$i < [string length $b]} {incr i} { if {[string index $b $i] eq ":"} { incr bCount } } if {$aCount == $bCount} { return 0 } elseif {$aCount > $bCount} { return 1 } return -1 } # # produces a script containing the current state of # the given obj # ScriptCreator instproc stateScript {obj} { set script "" foreach v [$obj info vars] { if {[lsearch [my set excludeNames] $v] == -1} { if {[$obj array exists $v]} { foreach name [$obj array names $v] { set arr ${v}($name) set value [$obj set $arr] append script "$obj set $arr \"$value\"\n" } } else { set value [$obj set $v] append script "$obj set $v \"$value\"\n" } } } return $script } # # produces a script containing the procs of the given obj # ScriptCreator instproc procScript {obj} { set script "" foreach p [$obj info procs] { if {[lsearch [my set excludeNames] $p] == -1} { append script \ "$obj proc $p \{[$obj info args $p]\} \{[$obj info body $p]\}\n" } } return $script } # # produces a script containing the instprocs of the given class # ScriptCreator instproc instprocScript {cl} { set script "" foreach p [$cl info instprocs] { if {[lsearch [my set excludeNames] $p] == -1} { append script \ "$cl instproc $p \{[$cl info instargs $p]\} \{[$cl info instbody $p]\}\n" } } return $script } # # saves a script to a file # ScriptCreator instproc saveScript {filename script} { set f [open $filename w] puts $f $script close $f } # # load a script from a file # ScriptCreator instproc loadScript {filename} { set f [open $filename r] set r [read $f] close $f return $r } # # check parent obj/classes/namespaces of an object completly # ScriptCreator instproc checkParents {name} { set p "" set n $name while {[set np [namespace parent ::$n]] != "::"} { lappend p $np set n $np } set p [lsort -command {my namespaceDepth} $p] foreach n $p { if {![my isExcluded $n] && ![my isAppended $n]} { error "ScriptCreator: $name needs parent $n, neither appended nor excluded yet." } } } ScriptCreator instproc checkClass {obj class} { if {![my isExcluded $class] && ![my isAppended $class]} { error "ScriptCreator: $obj depends on $class, neither appended nor excluded yet." } } ScriptCreator instproc isAppended name { set n [string trimleft $name :] if {[lsearch [my set appendedNames] $n]!=-1} { return 1 } else { return 0 } } ScriptCreator instproc appendName name { set n [string trimleft $name :] my lappend appendedNames $n } ScriptCreator instproc makeScript args { my instvar dependencyChecking my set appendedNames "" set script "" foreach name $args { #puts stderr "Script Creator -- $name" if {![my isExcluded $name] && ![my isAppended $name]} { if {$dependencyChecking} { my checkParents $name } if {[Object isobject $name]} { set class [$name info class] if {$dependencyChecking} { my checkClass $name $class } if {[Object isclass $name]} { # append the class #puts stderr "Appending Class: $name" append script "[$name info class] $name" set sl [$name info superclass] if {$dependencyChecking} { foreach c $sl { my checkClass $name $c } } if {$sl ne ""} { append script " -superclass \{$sl\}\n" } else { append script "\n" } append script [my instprocScript $name] } else { # append the obj #puts stderr "Appending Object: $name" append script "[$name info class] $name\n" } append script [my procScript $name] } else { append script "namespace eval $name \{\}\n" #puts stderr "Appending Namespace: $name" } my appendName $name } } return $script } namespace export ScriptCreator } namespace import ::xotcl::scriptCreation::scriptCreator::* |
Added assets/xotcl1.6.8/serialize/Serializer.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 | # $Id: Serializer.xotcl,v 1.19 2007/10/05 09:06:00 neumann Exp $ package require XOTcl 1.5 package provide xotcl::serializer 1.0 namespace eval ::xotcl::serializer { namespace import -force ::xotcl::* @ @File { description { This package provides the class Serializer, which can be used to generate a snapshot of the current state of the workspace in the form of XOTcl source code. } authors { Gustaf Neumann, Gustaf.Neumann@wu-wien.ac.at } date { $Date: 2007/10/05 09:06:00 $ } } @ Serializer proc all { ?-ignoreVarsRE RE? "provide regular expression; matching vars are ignored" ?-ignore obj1 obj2 ...? "provide a list of objects to be omitted"} { Description { Serialize all objects and classes that are currently defined (except the specified omissions and the current Serializer object). <p>Examples:<@br> <@pre class='code'>Serializer all -ignoreVarsRE {::b$}</@pre> Do not serialize any instance variable named b (of any object).<p> <@pre class='code'>Serializer all -ignoreVarsRE {^::o1::.*text.*$|^::o2::x$}</@pre> Do not serialize any variable of c1 whose name contains the string "text" and do not serialze the variable x of o2.<p> <@pre class='code'>Serializer all -ignore obj1 obj2 ... </@pre> do not serizalze the specified objects } return "script" } @ Serializer proc deepSerialize { objs "Objects to be serialized" ?-ignoreVarsRE RE? "provide regular expression; matching vars are ignored" ?-ignore obj1 obj2 ...? "provide a list of objects to be omitted" ?-map list? "translate object names in serialized code" } { Description { Serialize object with all child objects (deep operation) except the specified omissions. For the description of <@tt>ignore</@tt> and <@tt>igonoreVarsRE</@tt> see <@tt>Serizalizer all</@tt>. <@tt>map</@tt> can be used in addition to provide pairs of old-string and new-string (like in the tcl command <@tt>string map</@tt>). This option can be used to regenerate the serialized object under a different object or under an different name, or to translate relative object names in the serialized code.<p> Examples: <@pre class='code'>Serializer deepSerialize ::a::b::c -map {::a::b ::x::y}</@pre> Serialize the object <@tt>c</@tt> which is a child of <@tt>a::b</@tt>; the object will be reinitialized as object <@tt>::x::y::c</@tt>, all references <@tt>::a::b</@tt> will be replaced by <@tt>::x::y</@tt>.<p> <@pre class='code'>Serializer deepSerialize ::a::b::c -map {::a::b [self]}</@pre> The serizalized object can be reinstantiated under some current object, under which the script is evaluated.<p> <@pre class='code'>Serializer deepSerialize ::a::b::c -map {::a::b::c ${var}}</@pre> The serizalized object will be reinstantiated under a name specified by the variable <@tt>var<@tt> in the recreation context. } return "script" } @ Serializer proc methodSerialize { object "object or class" method "name of method" prefix "either empty or 'inst' (latter for instprocs)" } { Description { Serialize the specified method. In order to serialize an instproc, <@tt>prefix</@tt> should be 'inst'; to serialze procs, it should be empty.<p> Examples: <@pre class='code'>Serializer methodSerialize Serializer deepSerialize ""</@pre> This command serializes the proc <@tt>deepSerialize</@tt> of the Class <@tt>Serializer</@tt>.<p> <@pre class='code'>Serializer methodSerialize Serializer serialize inst</@pre> This command serializes the instproc <@tt>serialize</@tt> of the Class <@tt>Serializer</@tt>.<p> } return {Script, which can be used to recreate the specified method} } @ Serializer proc exportMethods { list "list of methods of the form 'object proc|instproc methodname'" } { Description { This method can be used to specify methods that should be exported in every <@tt>Serializer all<@/tt>. The rationale behind this is that the serializer does not serialize objects from the ::xotcl:: namespace, which is used for XOTcl internals and volatile objects. It is however often useful to define methods on ::xotcl::Class or ::xotcl::Objects, which should be exported. One can export procs, instprocs, forward and instforward<p> Example: <@pre class='code'> Serializer exportMethods { ::xotcl::Object instproc __split_arguments ::xotcl::Object instproc __make_doc ::xotcl::Object instproc ad_proc ::xotcl::Class instproc ad_instproc ::xotcl::Object forward expr }<@/pre> } } @ Serializer instproc serialize {entity "Object or Class"} { Description { Serialize the specified object or class. } return {Object or Class with all currently defined methods, variables, invariants, filters and mixins} } ################################################################################## # real clode starts here..... # ################################################################################ Class Serializer -parameter {ignoreVarsRE map} namespace export Serializer Serializer proc ignore args { my set skip $args } Serializer instproc ignore args { foreach i $args { my set skip($i) 1 # skip children of ignored objects as well foreach j [$i info children] { my ignore $j } } } Serializer instproc init {} { my ignore [self] if {[[self class] exists skip]} { eval my ignore [[self class] set skip] } } Serializer instproc method-serialize {o m prefix} { my pcmd [my unescaped-method-serialize $o $m $prefix] } Serializer instproc unescaped-method-serialize {o m prefix} { set arglist [list] foreach v [$o info ${prefix}args $m] { if {[$o info ${prefix}default $m $v x]} { lappend arglist [list $v $x] } {lappend arglist $v} } lappend r ${prefix}proc $m \ [concat [$o info ${prefix}nonposargs $m] $arglist] \ [$o info ${prefix}body $m] foreach p {pre post} { if {[$o info ${prefix}$p $m]!=""} {lappend r [$o info ${prefix}$p $m]} } return $r } Serializer instproc pcmd list { foreach a $list { if {[regexp -- {^-[[:alpha:]]} $a]} { set mustEscape 1 break } } if {[info exists mustEscape]} { return "\[list -$list\]" } else { return -$list } } Serializer instproc collect-var-traces o { my instvar traces foreach v [$o info vars] { set t [$o __trace__ info variable $v] if {$t ne ""} { foreach ops $t { foreach {op cmd} $ops break # save traces in post_cmds my append post_cmds [list $o trace add variable $v $op $cmd] "\n" # remove trace from object $o trace remove variable $v $op $cmd } } } } Serializer instproc Object-serialize o { my collect-var-traces $o append cmd [list [$o info class] create [$o self]] # slots needs to be initialized when optimized, since # parametercmds are not serialized #if {![$o istype ::xotcl::Slot]} {append cmd " -noinit"} append cmd " -noinit" append cmd " \\\n" foreach i [$o info procs] { append cmd " " [my method-serialize $o $i ""] " \\\n" } foreach i [$o info forward] { set fwd [concat [list forward $i] [$o info forward -definition $i]] append cmd \t [my pcmd $fwd] " \\\n" } foreach i [$o info parametercmd] { append cmd \t [my pcmd [list parametercmd $i]] " \\\n" } set vset {} set nrVars 0 foreach v [$o info vars] { set setcmd [list] if {![my exists ignoreVarsRE] || ![regexp [my set ignoreVarsRE] ${o}::$v]} { if {[$o array exists $v]} { lappend setcmd array set $v [$o array get $v] } else { lappend setcmd set $v [$o set $v] } incr nrVars append cmd \t [my pcmd $setcmd] " \\\n" } } foreach x {mixin invar} { set v [$o info $x] if {$v ne ""} {my append post_cmds [list $o $x set $v] "\n"} } set v [$o info filter -guards] if {$v ne ""} {append cmd [my pcmd [list filter $v]] " \\\n"} return $cmd } Serializer instproc Class-serialize o { set cmd [my Object-serialize $o] #set p [$o info parameter] #if {$p ne ""} { # append cmd " " [my pcmd [list parameter $p]] " \\\n" #} foreach i [$o info instprocs] { append cmd " " [my method-serialize $o $i inst] " \\\n" } foreach i [$o info instforward] { set fwd [concat [list instforward $i] [$o info instforward -definition $i]] append cmd \t [my pcmd $fwd] " \\\n" } foreach i [$o info instparametercmd] { append cmd \t [my pcmd [list instparametercmd $i]] " \\\n" } foreach x {superclass instinvar} { set v [$o info $x] if {$v ne "" && "::xotcl::Object" ne $v } { append cmd " " [my pcmd [list $x $v]] " \\\n" } } foreach x {instmixin} { set v [$o info $x] if {$v ne "" && "::xotcl::Object" ne $v } { my append post_cmds [list $o $x set $v] "\n" #append cmd " " [my pcmd [list $x $v]] " \\\n" } } set v [$o info instfilter -guards] if {$v ne ""} {append cmd [my pcmd [list instfilter $v]] " \\\n"} return $cmd\n } Serializer instproc args {o prefix m} { foreach v [$o info ${prefix}args $m] { if {[$o info ${prefix}default $m $v x]} { lappend arglist [list $v $x] } { lappend arglist $v } } return $arglist } Serializer instproc category c { if {[$c istype ::xotcl::Class]} {return Class} {return Object} } Serializer instproc allChildren o { set set $o foreach c [$o info children] { foreach c2 [my allChildren $c] { lappend set $c2 } } return $set } Serializer instproc allInstances C { set set [$C info instances] foreach sc [$C info subclass] { foreach c2 [my allInstances $sc] { lappend set $c2 } } return $set } Serializer instproc exportedObject o { # check, whether o is exported. for exported objects. # we export the object tree. set oo $o while {1} { if {[[self class] exists exportObjects($o)]} { #puts stderr "exported: $o -> exported $oo" return 1 } # we do this for object trees without object-less name spaces if {![my isobject $o]} {return 0} set o [$o info parent] } } Serializer instproc topoSort {set all} { if {[my array exists s]} {my array unset s} if {[my array exists level]} {my array unset level} foreach c $set { if {!$all && [string match "::xotcl::*" $c] && ![my exportedObject $c]} continue if {[my exists skip($c)]} continue my set s($c) 1 } set stratum 0 while {1} { set set [my array names s] if {[llength $set] == 0} break incr stratum #my warn "$stratum set=$set" my set level($stratum) {} foreach c $set { if {[my [my category $c]-needsNothing $c]} { my lappend level($stratum) $c } } if {[my set level($stratum)] eq ""} { my set level($stratum) $set my warn "Cyclic dependency in $set" } foreach i [my set level($stratum)] {my unset s($i)} } } Serializer instproc warn msg { if {[info command ns_log] ne ""} { ns_log Notice $msg } else { puts stderr "!!! $msg" } } Serializer instproc Class-needsNothing x { if {![my Object-needsNothing $x]} {return 0} set scs [$x info superclass] if {[my needsOneOf $scs]} {return 0} foreach sc $scs {if {[my needsOneOf [$sc info slots]]} {return 0}} #if {[my needsOneOf [$x info instmixin ]]} {return 0} return 1 } Serializer instproc Object-needsNothing x { set p [$x info parent] if {$p ne "::" && [my needsOneOf $p]} {return 0} if {[my needsOneOf [$x info class]]} {return 0} if {[my needsOneOf [[$x info class] info slots]]} {return 0} #if {[my needsOneOf [$x info mixin ]]} {return 0} return 1 } Serializer instproc needsOneOf list { foreach e $list {if {[my exists s($e)]} { #upvar x x; puts stderr "$x needs $e" return 1 }} return 0 } Serializer instproc serialize {objectOrClass} { string trimright [my [my category $objectOrClass]-serialize $objectOrClass] "\\\n" } Serializer instproc serialize-objects {list all} { my instvar post_cmds set post_cmds "" # register for introspection purposes "trace" under a different name ::xotcl::alias ::xotcl::Object __trace__ -objscope ::trace my topoSort $list $all #foreach i [lsort [my array names level]] {my warn "$i: [my set level($i)]"} set result "" foreach l [lsort -integer [my array names level]] { foreach i [my set level($l)] { #my warn "serialize $i" #append result "# Stratum $l\n" append result [my serialize $i] \n } } foreach e $list { set namespace($e) 1 set namespace([namespace qualifiers $e]) 1 } ::xotcl::Object instproc __trace__ {} {} # Handling of variable traces: traces might require a # different topological sort, which is hard to handle. # Similar as with filters, we deactivate the variable # traces during initialization. This happens by # (1) replacing the XOTcl's trace method by a no-op # (2) collecting variable traces through collect-var-traces # (3) re-activating the traces after variable initialization set exports "" set pre_cmds "" # delete ::xotcl from the namespace list, if it exists... catch {unset namespace(::xotcl)} foreach ns [array name namespace] { if {![namespace exists $ns]} continue if {![my isobject $ns]} { append pre_cmds "namespace eval $ns {}\n" } elseif {$ns ne [namespace origin $ns] } { append pre_cmds "namespace eval $ns {}\n" } set exp [namespace eval $ns {namespace export}] if {$exp ne ""} { append exports "namespace eval $ns {namespace export $exp}" \n } } #append post_cmds "::xotcl::alias ::xotcl::Object trace -objscope ::trace\n" return $pre_cmds$result$post_cmds$exports } Serializer instproc deepSerialize o { # assumes $o to be fully qualified my serialize-objects [my allChildren $o] 1 } Serializer instproc serializeMethod {object kind name} { set code "" switch $kind { proc { if {[$object info procs $name] ne ""} { set code [my method-serialize $object $name ""] } } instproc { if {[$object info instprocs $name] ne ""} { set code [my method-serialize $object $name inst] } } forward - instforward { if {[$object info $kind $name] ne ""} { set fwd [concat [list $kind $name] [$object info $kind -definition $name]] set code [my pcmd $fwd] } } } return $code } Serializer proc exportMethods list { foreach {o p m} $list {my set exportMethods($o,$p,$m) 1} } Serializer proc exportObjects list { foreach o $list {my set exportObjects($o) 1} } Serializer proc serializeExportedMethods {s} { set r "" foreach k [my array names exportMethods] { foreach {o p m} [split $k ,] break #if {$o ne "::xotcl::Object" && $o ne "::xotcl::Class"} { #error "method export only for ::xotcl::Object and\ # ::xotcl::Class implemented, not for $o" #} if {![string match "::xotcl::*" $o]} { error "method export is only for ::xotcl::* \ object an classes implemented, not for $o" } append methods($o) [$s serializeMethod $o $p $m] " \\\n " } set objects [array names methods] foreach o [list ::xotcl::Object ::xotcl::Class] { set p [lsearch $o $objects] if {$p == -1} continue set objects [lreplace $objects $p $p] } foreach o [concat ::xotcl::Object ::xotcl::Class $objects] { if {![info exists methods($o)]} continue append r \n "$o configure \\\n " \ [string trimright $methods($o) "\\\n "] } #puts stderr "... exportedMethods <$r\n>" return "$r\n" } Serializer proc all {args} { # don't filter anything during serialization set filterstate [::xotcl::configure filter off] set s [eval my new -childof [self] -volatile $args] # always export __exitHandler my exportMethods [list ::xotcl::Object proc __exitHandler] set r { set ::xotcl::__filterstate [::xotcl::configure filter off] ::xotcl::Object instproc trace args {} ::xotcl::Slot instmixin add ::xotcl::Slot::Nocheck } append r "::xotcl::configure softrecreate [::xotcl::configure softrecreate]" append r \n [my serializeExportedMethods $s] # export the objects and classes #$s warn "export objects = [my array names exportObjects]" #$s warn "export objects = [my array names exportMethods]" append r [$s serialize-objects [$s allInstances ::xotcl::Object] 0] foreach o [list ::xotcl::Object ::xotcl::Class] { foreach x {mixin instmixin invar instinvar} { set v [$o info $x] if {$v ne "" && $v ne "::xotcl::Object"} { append r "$o configure " [$s pcmd [list $x $v]] "\n" } } } append r { ::xotcl::alias ::xotcl::Object trace -objscope ::trace ::xotcl::Slot instmixin delete ::xotcl::Slot::Nocheck ::xotcl::configure filter $::xotcl::__filterstate unset ::xotcl::__filterstate } ::xotcl::configure filter $filterstate return $r } Serializer proc methodSerialize {object method prefix} { set s [my new -childof [self] -volatile] concat $object [$s unescaped-method-serialize $object $method $prefix] } Serializer proc deepSerialize args { set s [my new -childof [self] -volatile] set nr [eval $s configure $args] foreach o [lrange $args 0 [incr nr -1]] { append r [$s deepSerialize [$o]] } if {[$s exists map]} {return [string map [$s map] $r]} return $r } # register serialize a global method ::xotcl::Object instproc serialize {} { ::Serializer deepSerialize [self] } # include this method in the serialized code Serializer exportMethods { ::xotcl::Object instproc contains } # include Serializer in the serialized code Serializer exportObjects [namespace current]::Serializer namespace eval :: "namespace import -force [namespace current]::*" } |
Added assets/xotcl1.6.8/serialize/pkgIndex.tcl.
> > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded xotcl::scriptCreation::recoveryPoint 1.0 [list source [file join $dir RecoveryPoint.xotcl]] package ifneeded xotcl::scriptCreation::scriptCreator 1.0 [list source [file join $dir ScriptCreator.xotcl]] package ifneeded xotcl::serializer 1.0 [list source [file join $dir Serializer.xotcl]] |
Added assets/xotcl1.6.8/store/COPYRIGHT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen * Specification of Software Systems * Altendorferstraße 97-101 * D-45143 Essen, Germany * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this permission * notice appear in supporting documentation. We make no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied * warranty. * * * This software is based upon MIT Object Tcl by David Wetherall and * Christopher J. Lindblad, that contains the following copyright * message: * * "Copyright 1993 Massachusetts Institute of Technology * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this * permission notice appear in supporting documentation, and that * the name of M.I.T. not be used in advertising or publicity * pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about * the suitability of this software for any purpose. It is * provided "as is" without express or implied warranty." |
Added assets/xotcl1.6.8/store/JufGdbmStorage.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | # $Id: JufGdbmStorage.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ package provide xotcl::store::jufgdbm 0.81 package require xotcl::store::juf_gdbm package require xotcl::store package require XOTcl 1 namespace eval ::xotcl::store::jufgdbm { namespace import ::xotcl::* # # a simple GNU Gdbm DB Store Access # Class Storage=JufGdbm -superclass Storage Storage=JufGdbm instproc open f { my set persistenceDB [juf_gdbm open $f rwc] } Storage=JufGdbm instproc store {k v} { #my showCall juf_gdbm store [my set persistenceDB] $k $v } Storage=JufGdbm instproc list {} { juf_gdbm list [my set persistenceDB] } Storage=JufGdbm instproc fetch {k var} { my instvar persistenceDB if {[juf_gdbm exists $persistenceDB $k]} { upvar [self callinglevel] $var value set value [juf_gdbm fetch $persistenceDB $k] return 1 } return 0 } Storage=JufGdbm instproc close args { juf_gdbm close [my set persistenceDB] } Storage=JufGdbm instproc delete k { juf_gdbm delete [my set persistenceDB] $k } namespace export Storage=JufGdbm } namespace import ::xotcl::store::jufgdbm::* |
Added assets/xotcl1.6.8/store/MemStorage.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | # $Id: MemStorage.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ package provide xotcl::store::mem 0.84 package require xotcl::store 0.84 package require XOTcl 1 namespace eval ::xotcl::store::mem { namespace import ::xotcl::* Object ::xotcl::memStoragePool ::xotcl::memStoragePool proc add {filename} { my set memStores($filename) [Object new -childof [self]] } ::xotcl::memStoragePool proc get {filename} { if {[my exists memStores($filename)]} { return [my set memStores($filename)] } return "" } ::xotcl::memStoragePool proc remove {filename} { catch { set store [my set memStores($filename)] $store destroy my unset memStores($filename) } } # # a class using an XOTcl Object for memory storage Class Storage=Mem -superclass Storage Storage=Mem instproc init args { my instvar searchID ::set searchID "" } Storage=Mem instproc names {} { my instvar store $store array names v } Storage=Mem instproc exists name { my instvar store $store exists v($name) } Storage=Mem instproc unset name { my instvar store $store unset v($name) } Storage=Mem instproc set args { my instvar store ::set l [llength $args] if {$l == 1} { $store set v([lindex $args 0]) } elseif {$l == 2} { $store set v([lindex $args 0]) [lindex $args 1] } else { eval $store set $args } } Storage=Mem instproc close {} { my instvar store ::unset store } Storage=Mem instproc open filename { my instvar store if {[::set store [::xotcl::memStoragePool get $filename]] == ""} { ::set store [::xotcl::memStoragePool add $filename] } } Storage=Mem instproc firstkey {} { my instvar store $store instvar v my instvar searchID if {$searchID ne ""} { array donesearch v $searchID } ::set searchID [array startsearch v] return [array nextelement v $searchID] } Storage=Mem instproc nextkey {} { my instvar store $store instvar v my instvar searchID if {$searchID eq ""} { error "[self class]: firstkey was not invoked on storage search" } ::set elt [array nextelement v $searchID] if {$elt eq ""} { # if array end is reach search is terminated automatically!! ::set searchID "" } return $elt } ### warum geht eigentlich folgendes nicht: ## Object o; o set a::b::c 1 ### dann koennte man sich das set und exists schenken... namespace export Storage=Mem } namespace import ::xotcl::store::mem::* #namespace eval ::xotcl {namespace import ::xotcl::store::mem::*} |
Added assets/xotcl1.6.8/store/MultiStorage.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | package provide xotcl::store::multi 1.0 package require -exact xotcl::store 1.0 package require XOTcl 1 namespace eval ::xotcl::store::multi { namespace import ::xotcl::* Class Storage=multi -superclass Storage Storage=multi instproc add {dbPackage args} { my instvar storages names if {$dbPackage eq ""} { set dbPackage [Storage defaultPackage] } package require xotcl::store::[string tolower $dbPackage] lappend storages [eval Storage=$dbPackage new -childof [self] $args] } Storage=multi instproc init args { my instvar storages set storages {} } Storage=multi instproc names {} { my instvar storages [lindex $storages 0] $names } Storage=multi instproc exists name { my instvar storages [lindex $storages 0] exists $name } Storage=multi instproc unset name { my instvar storages foreach s $storages {$s [self proc] $name} } Storage=multi instproc set args { my instvar storages set l [llength $args] set name [lindex $args 0] if {$l == 1} { [lindex $storages 0] set $name } elseif {$l == 2} { foreach s $storages { $s set $name [lindex $args 1]} } else { eval set $args } } Storage=multi instproc close {} { my instvar storages foreach s $storages {$s [self proc]} } Storage=multi instproc dbOpen {} { my instvar storages foreach s $storages {$s [self proc]} } Storage=multi instproc firstkey {} { my instvar storages [lindex $storages 0] firstkey } Storage=multi instproc nextkey {} { my instvar storages [lindex $storages 0] nextkey } Storage=multi instproc checkdir {} { my instvar storages foreach s $storages {$s [self proc]} } Storage=multi instproc dbOpen {} { my instvar storages foreach s $storages {$s [self proc]} } namespace export Storage=multi } namespace import ::xotcl::store::multi::* |
Added assets/xotcl1.6.8/store/Persistence.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 | package provide xotcl::store::persistence 1.0 package require -exact xotcl::trace 1.0 package require -exact xotcl::package 1.0 package require -exact xotcl::mixinStrategy 1.0 package require -exact xotcl::store 1.0 package require XOTcl 1 namespace eval ::xotcl::store::persistence { namespace import ::xotcl::* @ @File { description { Persistent store for XOTcl objects with Eager and Lazy persistence. Take a look at "persistenceExample.xotcl" for exmaple of usage. } } @ Class PersistenceMgr { description { A persistent store requires a persistent manager. The persistent manager implements the Storage interface via storage mixin. With the parameter "dbPackage" we can specify which storage will be used. The persistent manager than tries to load the package "xotcl::${dbPackage}Storage". Default is Sdbm. Example: <@pre> PersistenceMgr pmgr -persistenceDir . -persistenceFile example-db </@pre> } } # # base class for persistent managers -- just register corresponding # storage mixin and open DB # Class PersistenceMgr -parameter { {fileName {[string trimleft [self] :]}} {dbPackage Sdbm} trace dirName } PersistenceMgr instproc init args { my instvar dbPackage package require xotcl::store::[string tolower $dbPackage] Storage=$dbPackage [self]::store $args foreach v {dirName fileName} { if {[my exists $v]} { [self]::store $v [my set $v] } } if {[my exists trace]} { [self]::store filter traceFilter } my array set persistentObjs {} next } # delegate methods to the store object PersistenceMgr instproc store args { eval [self]::store $args } PersistenceMgr instproc destroy args { foreach obj [my array names persistentObjs] { $obj storeall $obj persistenceMgr "" } [self]::store close next } PersistenceMgr instproc assureOpenDb {} { if {![my exists dbOpen]} { [self]::store dbOpen my set dbOpen 1 } } PersistenceMgr instproc addPersistentObj {obj} { my set persistentObjs($obj) "" } PersistenceMgr instproc removePersistentObj {obj} { if {[my exists persistentObjs($obj)]} { my unset persistentObjs($obj) } } @ Class Persistent { description { Superclass or mixin class for all persistent objects. Normally subclasses are used as mixins or instmixins on object, like: <@pre> o mixin Persistent=Eager p mixin Persistent=Lazy </@pre> } } # # Persistence (mixin) classes# Class Persistent -parameter { persistenceMgr } # can be overloaded by subclasses, that need a cleanup on # persistenceMgr->destroy (like Lazy) Persistent instproc storeall {} {;} @ Persistent instproc persistenceMgr {args "persistent manager name"} { description { Specify which persistence manager to use for [self] object, like: <@pre> o persistenceMgr pmgr </@pre> Each persistent object must have a persistence manager specified, before vars can be made persistent. } } # # turn off persistence with ... persistenceMgr "", but # persistent vars stay persistent # Persistent instproc persistenceMgr args { if {[llength $args] == 0} { return [my set [self proc]] } elseif {[llength $args] == 1} { set pmgr [lindex $args 0] if {$pmgr eq "" && [my exists persistenceMgr]} { [my set persistenceMgr] removePersistentObj [self] my unset persistenceMgr return "" } $pmgr addPersistentObj [self] return [my set [self proc] $pmgr] } else { error "wrong # args: [self] [self proc] ?value?" } } @ Persistent instproc persistentVars {} { description { Returns list of persistent vars. } } Persistent instproc persistentVars {} { if {[my exists __persistentVars]} { return [my set __persistentVars] } return "" } @ Persistent instproc persistent {list "persistent variables" } { description { Make a list of object variables persistent. If a persistent DB exists, the values are read from this DB, overwriting the current value. E.g.: <@pre> o persistent {x y} </@pre> } } Persistent instproc persistent {list} { my instvar persistenceMgr if {![info exists persistenceMgr]} {return} set store ${persistenceMgr}::store $persistenceMgr assureOpenDb foreach var $list { my lappend __persistentVars $var # try to refetch vars from db if {[$store exists [self]::${var}(_____arraynames)]} { #puts stderr array=[self]::${var} foreach i [$store set [self]::${var}(_____arraynames)] { my set ${var}($i) [$store set [self]::${var}($i)] } } elseif {[$store exists [self]::$var]} { #puts stderr "---store=$store exists [self]::$var" #puts stderr "---set [self]::$var <[$store set [self]::$var]>" my instvar $var #set name [$store set [self]::$var] #puts ***name*[set name]--$var set $var [$store set [self]::$var] } elseif {[my exists $var]} { # # first store of the variable in persistent store if {[my array exists $var]} { # this variable is an array #puts stderr array=[self]::$var set anames [my array names $var] foreach n $anames { $store set [self]::${var}($n) [my set ${var}($n)] } $store set [self]::${var}(_____arraynames) $anames } else { #puts stderr "+++set [self]::$var [$store set [self]::$var]" $store set [self]::$var [my set $var] } } else { error "persistent: $var is not a variable on [self]" } } } @ Persistent instproc persistent+init {list "persistent variables" } { description { Initialize all data in the list as empty strings, if they do not exist yet, and then make them persistent using the 'persistent' method } } Persistent instproc persistent+init {list} { foreach pd $list { if {![my exists $pd]} { my set $pd "" } } my persistent $list } @ Persistent instproc unPersistent {list "persistent variables" } { description { Make a list of object variables not persistent. } } Persistent instproc unPersistent {list} { my instvar __persistentVars set pMgr [my set persistenceMgr] foreach v $list { set i [lsearch -exact $__persistentVars $v] catch { set __persistentVars [lreplace $__persistentVars $i $i] ${pMgr}::store unset [self]::$v } } } @ Persistent instproc makeVarScript {} { description { Build a Tcl script of "set ..." statements reflecting the current situation in the database. } } Persistent instproc makeVarScript {} { set script "" foreach v [my persistentVars] { set vt [namespace tail $v] append script [list my set $vt [my set $vt]]\n } #set script [concat [next] $script] return $script } Persistent instproc destroy args { if {[my exists persistenceMgr]} { [my set persistenceMgr] removePersistentObj [self] my unset persistenceMgr } next #my showMsg "Persistent object [self] destroyed." } @ Class Persistent=Eager { description { Eager persistence strategy. Store everything at the same moment to the database } } Class Persistent=Eager -superclass Persistent # # we use 'strange' argument names to avoid name clashes with given # variable names, when we have to instvar "[self] instvar $nametail" # Persistent=Eager instproc vartrace {__name_vartrace __sub_vartrace __op_vartrace} { #my showCall if {$__op_vartrace eq "w"} { my instvar persistenceMgr if {![info exists persistenceMgr]} {return} set store ${persistenceMgr}::store set nametail [namespace tail $__name_vartrace] set key [self]::$nametail if {$__sub_vartrace eq ""} { my instvar $nametail #puts stderr "+++VT: $store set $key [set $nametail]" $store set $key [set $nametail] } else { if {$__sub_vartrace ne "_____arraynames"} { my instvar "${nametail}($__sub_vartrace) subname" $store set ${key}($__sub_vartrace) $subname $store set ${key}(_____arraynames) [my array names $nametail] } else { error "With persistent arrays you may not use '_____arraynames' as index" } } } } Persistent=Eager instproc persistent {list} { #my showCall next foreach v $list { #puts stderr "***trace variable [self]::$v w [list my vartrace]" my trace variable $v w [list [self] vartrace] } } Persistent=Eager instproc unPersistent {list} { foreach v $list { my trace vdelete $v w [list [self] vartrace] } next } @ Class Persistent=Lazy { description { Lazy persistence strategy. Store everything on object destroy (or program termination). } } Class Persistent=Lazy -superclass Persistent Persistent=Lazy instproc storeall {} { my instvar persistenceMgr if {![info exists persistenceMgr]} {return} set store ${persistenceMgr}::store foreach v [my persistentVars] { if {[my array exists $v]} { set anames "" foreach sub [my array names $v] { if {[my exists ${v}($sub)]} { set key [self]::${v}($sub) $store set $key [my set ${v}($sub)] lappend anames $sub } } $store set [self]::${v}(_____arraynames) $anames } else { if {[my exists $v]} { set key [self]::$v $store set $key [my set $v] } } } } Persistent=Lazy instproc destroy args { my storeall next } namespace export PersistenceMgr Persistent Persistent=Eager Persistent=Lazy } namespace import ::xotcl::store::persistence::* |
Added assets/xotcl1.6.8/store/Storage.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | # $Id: Storage.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ package provide xotcl::store 1.0 package require XOTcl 1 namespace eval ::xotcl::store { namespace import ::xotcl::* @ @File { description { Simple generic storage interface for hashtable-like (persistent) storages. There are several different existing stores, including a memory storage, a GDBM storage, a SDBM storage, and a TextFile storage. } date { $Date: 2005/09/09 21:09:01 $ } } # # abstract interface for storage access # @ Class Storage { description { Abstract storage interface class (superclass of all storages). } } Class Storage -parameter {{dirName .} fileName} ### @ Storage instproc open { filename "database filename (or filename base, if more than one file has to be created)" } { Description { Each storage object represents exactly one database table. The db has to be opened, before it can it used. If it is not opened all other methods return errors. } return "empty string" } Storage abstract instproc open filename ### @ Storage instproc close {} { Description { Close associated database. } return "empty string" } Storage abstract instproc close {} ### @ Storage instproc exists { key {Key to be searched for.} } { Description { Search for a key whether it exists or not. } return {1, if key exists in the database, otherwise 0} } Storage abstract instproc exists key ### @ Storage instproc set { key {Key to be set.} ?value? {Optional value that might be set} } { Description { Set or query a database key in the same way as Tcl's set functions. } return {Key value.} } Storage abstract instproc set {key ?value?} ### @ Storage instproc unset { key {Key to be unset.} } { Description { Unset a database key in the same way as Tcl's unset functions. } return {empty string} } Storage abstract instproc unset key ### @ Storage instproc names {} { Description { Return a list of keys in the database (functions in the same way as Tcl's array names) } return {List of keys in the db.} } Storage abstract instproc names {} ### @ Storage instproc firstkey {} { Description { Start a traversal of the database, starting with any key. } return {Name of first key.} } Storage abstract instproc firstkey {} ### @ Storage instproc nextkey {} { Description { Proceed with the db traversal. Requires a firstkey before first usage, otherwise it returns an error. } return {Name of next key, if one exists. Otherwise an empty string is returned.} } Storage abstract instproc nextkey {} Storage instproc traceFilter args { set context "[self callingclass]->[self callingproc]" set method [self calledproc] set dargs $args puts "CALL $context> [self]->$method $dargs" set result [next] puts "EXIT $context> [self]->$method ($result)" return $result } ### @ Storage proc someNewChildStore {} { Description { Create a childStore according to a preference list depending on which storages are available. Currently the preference list has the following order: Gdbm, Sdbm and TextFile. } return {name of the created storage object.} } Storage proc someNewChildStore {} { foreach store {Gdbm Sdbm TextFile} { if {![catch {package require xotcl::store::[string tolower $store]}]} { set s [Storage=$store new -childof [self]] break } } return $s } Storage instproc checkDir {} { my instvar dirName if {[info exists dirName]} { if {![file exists $dirName]} { file mkdir $dirName } elseif {![file isdirectory $dirName]} { error "specified directory $dirName is no directory!" } } } Storage instproc mkFileName {} { my instvar dirName fileName if {[info exists dirName]} { return [file join $dirName $fileName] } else { return $fileName } } Storage instproc dbOpen {} { my checkDir my open [my mkFileName] } Storage proc defaultPackage {} { return Sdbm } namespace export Storage } namespace import ::xotcl::store::* |
Added assets/xotcl1.6.8/store/TclGdbmStorage.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | # $Id: TclGdbmStorage.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ package provide xotcl::store::tclgdbm 0.84 package require xotcl::store::gdbm package require xotcl::store package require XOTcl 1 namespace eval ::xotcl::store::tclgdbm { namespace import ::xotcl::* # # a simple GNU Gdbm DB Store Access based on TclGdbm # Class Storage=TclGdbm -superclass Storage Storage=TclGdbm instproc open f { my instvar persistenceDB ::set persistenceDB [gdbm_open -wrcreat $f] } Storage=TclGdbm instproc set args { my instvar persistenceDB ::set l [llength $args] if {$l == 1} {[::set persistenceDB] fetch [lindex $args 0] } elseif {$l == 2} {[::set persistenceDB] -replace store \ [lindex $args 0] [lindex $args 1] } else { next } } Storage=TclGdbm instproc exists k { my instvar persistenceDB $persistenceDB exists $k } Storage=TclGdbm instproc names {} { my instvar persistenceDB ::set list "" if {[::set key [$persistenceDB firstkey]] != ""} { lappend list $key while {[::set key [$persistenceDB nextkey $key]] != ""} { lappend list $key } } return $list } Storage=TclGdbm instproc close args { my instvar persistenceDB $persistenceDB close } Storage=TclGdbm instproc unset k { my instvar persistenceDB $persistenceDB delete $k } namespace export Storage=TclGdbm } namespace import ::xotcl::store::tclgdbm::* |
Added assets/xotcl1.6.8/store/TextFileStorage.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | package provide xotcl::store::textfile 1.0 package require -exact xotcl::store 1.0 package require XOTcl 1 namespace eval ::xotcl::store::textfile { namespace import ::xotcl::* Class Storage=TextFile -superclass Storage -parameter { filename reorgCounter reorgMaxValue } Storage=TextFile instproc init args { my instvar reorgCounter reorgMaxValue searchID ::set reorgCounter 0 ::set reorgMaxValue 1000 ::set searchID "" next } Storage=TextFile instproc reorganizeDB {} { my instvar noreorg reorgCounter reorgMaxValue filename keys ::set reorgCounter -1 #puts "***reorganizeDB" if {[::info exists filename]} { ::set noreorg 1 ::array set bkeys [::array get keys] ::array set keys {} # parray bkeys ::set bak $filename.orig file rename -force $filename $bak foreach k [::array names bkeys] { ::set bf [::open $bak r] seek $bf [lindex $bkeys($k) 0] ::set c [read $bf [lindex $bkeys($k) 1]] ::close $bf #puts "***STORING $k [lindex $c 1]" my set $k [lindex $c 1] } file delete -force $bak ::unset noreorg } } Storage=TextFile instproc open fn { my instvar keys filename ::array set keys {} ::set position 0 ::set filename $fn if {[file exists $filename]} { ::set f [::open $filename r] ::set c [read $f] ::close $f foreach {k v} $c { lappend keyList $k } ::set f [::open $filename r] while {1} { set position [tell $f] if {!([gets $f line] >= 0)} { break } set k [lindex $keyList 0] if {[string match $k* $line]} { set lastLength [string length $line] set keys($k) [concat $position $lastLength] set lastKey $k set lastPosition $position set keyList [lreplace $keyList 0 0] } elseif {[info exists lastKey]} { set lastLength [expr $lastLength + [string length $line] + 1] set keys($lastKey) [concat $lastPosition $lastLength] } } ::close $f #parray keys } } Storage=TextFile instproc exists key { my instvar keys info exists keys($key) } Storage=TextFile instproc set args { my instvar keys noreorg reorgCounter reorgMaxValue filename ::set key [lindex $args 0] ::set l [llength $args] if {$l == 1} { ;# fetch if {[::info exists keys($key)]} { ::set f [::open $filename r] #puts "***fetch -- $keys($key)" seek $f [lindex $keys($key) 0] ::set c [read $f [lindex $keys($key) 1]] ::close $f return [lindex $c 1] } else { error "no such variable '$key'" } } elseif {$l == 2} { ;# store if {![::info exists noreorg] && [::info exists keys($key)]} { ::incr reorgCounter } ::set f [::open $filename a+] ::set position [tell $f] #puts "***store -- putting [::list $key [lindex $args 1]] at $position" ::set c [::list $key [lindex $args 1]] puts $f $c ::close $f ::set keys($key) [::list $position [expr {[string length $c] + 1}]] # parray keys if {$reorgCounter > $reorgMaxValue} { my reorganizeDB } } else { next } } Storage=TextFile instproc names {} { my array names keys } Storage=TextFile instproc close {} { my instvar filename keys my reorganizeDB ::unset filename ::unset keys } Storage=TextFile instproc unset key { my instvar keys if {[::info exists keys($key)]} { ::unset keys($key) } my reorganizeDB } Storage=TextFile instproc firstkey {} { my instvar keys searchID if {$searchID ne ""} { array donesearch keys $searchID } ::set searchID [array startsearch keys] return [array nextelement keys $searchID] } Storage=TextFile instproc nextkey {} { my instvar keys searchID if {$searchID eq ""} { error "[self class]: firstkey was not invoked on storage search" } ::set elt [array nextelement keys $searchID] if {$elt eq ""} { # if array end is reach search is terminated automatically!! ::set searchID "" } return $elt } namespace export Storage=TextFile } namespace import ::xotcl::store::textfile::* |
Added assets/xotcl1.6.8/store/persistenceExample.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #!../../src/xotclsh # $Id: persistenceExample.xotcl,v 1.2 2006/02/18 22:17:33 neumann Exp $ # # load the persistence component package require xotcl::store::persistence # Two example objects Object o # set two variables to default values o set x 1 o set y 1 Object p # set two variables to default values p set x 1 p set y 1 #################################### # now we make these vars persistent #################################### # 1. we need the PersistenceMgr (for gdbm we have to specify a file # name). If we want to get rid of the current setting and start again # we default values, we have to delete this file PersistenceMgr pmgr -dirName . -fileName example-db # 2. we have to make the objects persistent. We register the # persistence strategy as per-object mixin on the two objects # # one uses the lazy, one the eager strategy o mixin Persistent=Eager p mixin Persistent=Lazy # 3. tell the objects, which PersistenceMgr to use o persistenceMgr pmgr p persistenceMgr pmgr # 4. make the vars persistent o persistent {x y} p persistent {x y} ##################################### # now the vars are loaded from the persistence store # # we incr them to demonstrate the persistency; and print the results o incr x 2 o append y 1 p incr x 3 p append y 2 puts "Values:" puts " o->x: [o set x]" puts " o->y: [o set y]" puts " p->x: [p set x]" puts " p->y: [p set y]" # now run the program several times to see the results |
Added assets/xotcl1.6.8/store/pkgIndex-subdir.add.
> > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 | set __store_dir__ $dir foreach index [glob -nocomplain [file join $dir * pkgIndex.tcl]] { set dir [file dirname $index] #puts subdir=$dir,index=$index source $index } set dir $__store_dir__ unset __store_dir__ |
Added assets/xotcl1.6.8/store/pkgIndex.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded xotcl::store 1.0 [list source [file join $dir Storage.xotcl]] package ifneeded xotcl::store::jufgdbm 0.81 [list source [file join $dir JufGdbmStorage.xotcl]] package ifneeded xotcl::store::mem 0.84 [list source [file join $dir MemStorage.xotcl]] package ifneeded xotcl::store::multi 1.0 [list source [file join $dir MultiStorage.xotcl]] package ifneeded xotcl::store::persistence 1.0 [list source [file join $dir Persistence.xotcl]] package ifneeded xotcl::store::tclgdbm 0.84 [list source [file join $dir TclGdbmStorage.xotcl]] package ifneeded xotcl::store::textfile 1.0 [list source [file join $dir TextFileStorage.xotcl]] set __store_dir__ $dir foreach index [glob -nocomplain [file join $dir * pkgIndex.tcl]] { set dir [file dirname $index] #puts subdir=$dir,index=$index source $index } set dir $__store_dir__ unset __store_dir__ |
Added assets/xotcl1.6.8/xml/COPYRIGHT.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen * Specification of Software Systems * Altendorferstraße 97-101 * D-45143 Essen, Germany * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this permission * notice appear in supporting documentation. We make no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied * warranty. * * * This software is based upon MIT Object Tcl by David Wetherall and * Christopher J. Lindblad, that contains the following copyright * message: * * "Copyright 1993 Massachusetts Institute of Technology * * Permission to use, copy, modify, distribute, and sell this * software and its documentation for any purpose is hereby granted * without fee, provided that the above copyright notice appear in * all copies and that both that copyright notice and this * permission notice appear in supporting documentation, and that * the name of M.I.T. not be used in advertising or publicity * pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about * the suitability of this software for any purpose. It is * provided "as is" without express or implied warranty." |
Added assets/xotcl1.6.8/xml/pkgIndex.tcl.
> > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded sgml 1.6 [list source [file join $dir sgml.tcl]] package ifneeded xml 1.8 [list source [file join $dir xml.tcl]] package ifneeded xotcl::xml::parser 1.0 [list source [file join $dir xoXML.xotcl]] package ifneeded xotcl::xml::printVisitor 1.0 [list source [file join $dir printVisitor.xotcl]] package ifneeded xotcl::xml::recreatorVisitor 1.0 [list source [file join $dir xmlRecreatorVisitor.xotcl]] |
Added assets/xotcl1.6.8/xml/printVisitor.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | package provide xotcl::xml::printVisitor 1.0 package require -exact xotcl::xml::parser 1.0 package require XOTcl 1 namespace eval ::xotcl::xml::printVisitor { namespace import ::xotcl::* ############################################################################## # # Small debugging visitor that just uses node's print method to print the # node tree # ############################################################################## Class PrintVisitor -superclass NodeTreeVisitor -parameter parser PrintVisitor instproc visit objName { puts [$objName print] } PrintVisitor instproc interpretNodeTree node { $node accept [self] } namespace export PrintVisitor } namespace import ::xotcl::xml::printVisitor::* |
Added assets/xotcl1.6.8/xml/sgml.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 | # sgml.tcl -- # # This file provides generic parsing services for SGML-based # languages, namely HTML and XML. # # NB. It is a misnomer. There is no support for parsing # arbitrary SGML as such. # # Copyright (c) 1998,1999 Zveno Pty Ltd # http://www.zveno.com/ # # Zveno makes this software available free of charge for any purpose. # Copies may be made of this software but all of this notice must be included # on any copy. # # The software was developed for research purposes only and Zveno does not # warrant that it is error free or fit for any purpose. Zveno disclaims any # liability for all claims, expenses, losses, damages and costs any user may # incur as a result of using, copying or modifying this software. # # Copyright (c) 1997 ANU and CSIRO on behalf of the # participants in the CRC for Advanced Computational Systems ('ACSys'). # # ACSys makes this software and all associated data and documentation # ('Software') available free of charge for any purpose. You may make copies # of the Software but you must include all of this notice on any copy. # # The Software was developed for research purposes and ACSys does not warrant # that it is error free or fit for any purpose. ACSys disclaims any # liability for all claims, expenses, losses, damages and costs any user may # incur as a result of using, copying or modifying the Software. # # $Id: sgml.tcl,v 1.4 2006/09/27 08:12:40 neumann Exp $ package provide sgml 1.6 namespace eval sgml { namespace export tokenise parseEvent namespace export parseDTD # Convenience routine proc cl x { return "\[$x\]" } # Define various regular expressions # white space variable Wsp " \t\r\n" variable noWsp [cl ^$Wsp] # Various XML names variable nmtoken [cl -a-zA-Z0-9._]+ variable name [cl a-zA-Z_][cl -a-zA-Z0-9._]* # Other variable ParseEventNum if {![info exists ParseEventNum]} { set ParseEventNum 0 } variable ParseDTDnum if {![info exists ParseDTDNum]} { set ParseDTDNum 0 } # table of predefined entities for XML variable EntityPredef array set EntityPredef { lt < gt > amp & quot \" apos ' } } # sgml::tokenise -- # # Transform the given HTML/XML text into a Tcl list. # # Arguments: # sgml text to tokenize # elemExpr RE to recognise tags # elemSub transform for matched tags # args options # # Valid Options: # -final boolean True if no more data is to be supplied # -statevariable varName Name of a variable used to store info # # Results: # Returns a Tcl list representing the document. proc sgml::tokenise {sgml elemExpr elemSub args} { array set options {-final 1} catch {array set options $args} set options(-final) [Boolean $options(-final)] # If the data is not final then there must be a variable to store # unused data. if {!$options(-final) && ![info exists options(-statevariable)]} { return -code error {option "-statevariable" required if not final} } # Pre-process stage # # Extract the internal DTD subset, if any catch {upvar #0 $options(-internaldtdvariable) dtd} if {[regexp {<!DOCTYPE[^[<]+\[([^]]+)\]} $sgml discard dtd]} { regsub {(<!DOCTYPE[^[<]+)(\[[^]]+\])} $sgml {\1\&xml:intdtd;} sgml } # Protect Tcl special characters regsub -all {([{}\\])} $sgml {\\\1} sgml # Do the translation if {[info exists options(-statevariable)]} { upvar #0 $opts(-statevariable) unused if {[info exists unused]} { regsub -all $elemExpr $unused$sgml $elemSub sgml unset unused } else { regsub -all $elemExpr $sgml $elemSub sgml } set sgml "{} {} {} {} \{$sgml\}" # Performance note (Tcl 8.0): # Use of lindex, lreplace will cause parsing to list object if {[regexp {^([^<]*)(<[^>]*$)} [lindex $sgml end] x text unused]} { set sgml [lreplace $sgml end end $text] } } else { # Performance note (Tcl 8.0): # In this case, no conversion to list object is performed regsub -all $elemExpr $sgml $elemSub sgml set sgml "{} {} {} {} \{$sgml\}" } return $sgml } # sgml::parseEvent -- # # Produces an event stream for a XML/HTML document, # given the Tcl list format returned by tokenise. # # This procedure checks that the document is well-formed, # and throws an error if the document is found to be not # well formed. Warnings are passed via the -warningcommand script. # # The procedure only check for well-formedness, # no DTD is required. However, facilities are provided for entity expansion. # # Arguments: # sgml Instance data, as a Tcl list. # args option/value pairs # # Valid Options: # -final Indicates end of document data # -elementstartcommand Called when an element starts # -elementendcommand Called when an element ends # -characterdatacommand Called when character data occurs # -entityreferencecommand Called when an entity reference occurs # -processinginstructioncommand Called when a PI occurs # -externalentityrefcommand Called for an external entity reference # # (Not compatible with expat) # -xmldeclcommand Called when the XML declaration occurs # -doctypecommand Called when the document type declaration occurs # -commentcommand Called when a comment occurs # # -errorcommand Script to evaluate for a fatal error # -warningcommand Script to evaluate for a reportable warning # -statevariable global state variable # -normalize whether to normalize names # -reportempty whether to include an indication of empty elements # # Results: # The various callback scripts are invoked. # Returns empty string. # # BUGS: # If command options are set to empty string then they should not be invoked. proc sgml::parseEvent {sgml args} { variable Wsp variable noWsp variable nmtoken variable name variable ParseEventNum array set options [list \ -elementstartcommand [namespace current]::noop \ -elementendcommand [namespace current]::noop \ -characterdatacommand [namespace current]::noop \ -processinginstructioncommand [namespace current]::noop \ -externalentityrefcommand [namespace current]::noop \ -xmldeclcommand [namespace current]::noop \ -doctypecommand [namespace current]::noop \ -commentcommand [namespace current]::noop \ -entityreferencecommand {} \ -warningcommand [namespace current]::noop \ -errorcommand [namespace current]::Error \ -final 1 \ -emptyelement [namespace current]::EmptyElement \ -parseattributelistcommand [namespace current]::noop \ -normalize 1 \ -internaldtd {} \ -reportempty 0 \ -entityvariable [namespace current]::EntityPredef \ ] catch {array set options $args} if {![info exists options(-statevariable)]} { set options(-statevariable) [namespace current]::ParseEvent[incr ParseEventNum] } upvar #0 $options(-statevariable) state upvar #0 $options(-entityvariable) entities if {![info exists state]} { # Initialise the state variable array set state { mode normal haveXMLDecl 0 haveDocElement 0 context {} stack {} line 0 } } foreach {tag close empty param text} $sgml { # Keep track of lines in the input incr state(line) [regsub -all \n $param {} discard] incr state(line) [regsub -all \n $text {} discard] # If the current mode is cdata or comment then we must undo what the # regsub has done to reconstitute the data switch $state(mode) { comment { # This had "[string length $param] && " as a guard - # can't remember why :-( if {[regexp ([cl ^-]*)--\$ $tag discard comm1]} { # end of comment (in tag) set tag {} set close {} set empty {} set state(mode) normal uplevel #0 $options(-commentcommand) [list $state(commentdata)<$comm1] unset state(commentdata) } elseif {[regexp ([cl ^-]*)--\$ $param discard comm1]} { # end of comment (in attributes) uplevel #0 $options(-commentcommand) [list $state(commentdata)<$close$tag$empty>$comm1] unset state(commentdata) set tag {} set param {} set close {} set empty {} set state(mode) normal } elseif {[regexp ([cl ^-]*)-->(.*) $text discard comm1 text]} { # end of comment (in text) uplevel #0 $options(-commentcommand) [list $state(commentdata)<$close$tag$param$empty>$comm1] unset state(commentdata) set tag {} set param {} set close {} set empty {} set state(mode) normal } else { # comment continues append state(commentdata) <$close$tag$param$empty>$text continue } } cdata { if {[string length $param] && [regexp ([cl ^\]]*)\]\][cl $Wsp]*\$ $tag discard cdata1]} { # end of CDATA (in tag) uplevel #0 $options(-characterdatacommand) [list $state(cdata)<$close$cdata1$text] set text {} set tag {} unset state(cdata) set state(mode) normal } elseif {[regexp ([cl ^\]]*)\]\][cl $Wsp]*\$ $param discard cdata1]} { # end of CDATA (in attributes) uplevel #0 $options(-characterdatacommand) [list $state(cdata)<$close$tag$cdata1$text] set text {} set tag {} set param {} unset state(cdata) set state(mode) normal } elseif {[regexp ([cl ^\]]*)\]\][cl $Wsp]*>(.*) $text discard cdata1 text]} { # end of CDATA (in text) uplevel #0 $options(-characterdatacommand) [list $state(cdata)<$close$tag$param$empty>$cdata1$text] set text {} set tag {} set param {} set close {} set empty {} unset state(cdata) set state(mode) normal } else { # CDATA continues append state(cdata) <$close$tag$param$empty>$text continue } } } # default: normal mode # Bug: if the attribute list has a right angle bracket then the empty # element marker will not be seen set isEmpty [uplevel #0 $options(-emptyelement) [list $tag $param $empty]] if {[llength $isEmpty]} { foreach {empty tag param} $isEmpty break } switch -glob -- [string length $tag],[regexp {^\?|!.*} $tag],$close,$empty { 0,0,, { # Ignore empty tag - dealt with non-normal mode above } *,0,, { # Start tag for an element. # Check for a right angle bracket in an attribute value # This manifests itself by terminating the value before # the delimiter is seen, and the delimiter appearing # in the text # BUG: If two or more attribute values have right angle # brackets then this will fail on the second one. if {[regexp [format {=[%s]*"[^"]*$} $Wsp] $param] && \ [regexp {([^"]*"[^>]*)>(.*)} $text discard attrListRemainder text]} { append param >$attrListRemainder } elseif {[regexp [format {=[%s]*'[^']*$} $Wsp] $param] && \ [regexp {([^']*'[^>]*)>(.*)} $text discard attrListRemainder text]} { append param >$attrListRemainder } # Check if the internal DTD entity is in an attribute # value regsub -all &xml:intdtd\; $param \[$options(-internaldtd)\] param ParseEvent:ElementOpen $tag $param options set state(haveDocElement) 1 } *,0,/, { # End tag for an element. ParseEvent:ElementClose $tag options } *,0,,/ { # Empty element ParseEvent:ElementOpen $tag $param options -empty 1 ParseEvent:ElementClose $tag options -empty 1 } *,1,* { # Processing instructions or XML declaration switch -glob -- $tag { {\?xml} { # XML Declaration if {$state(haveXMLDecl)} { uplevel #0 $options(-errorcommand) "unexpected characters \"<$tag\" around line $state(line)" } elseif {![regexp {\?$} $param]} { uplevel #0 $options(-errorcommand) "XML Declaration missing characters \"?>\" around line $state(line)" } else { # Get the version number if {[regexp {[ ]*version="(-+|[a-zA-Z0-9_.:]+)"[ ]*} $param discard version] || [regexp {[ ]*version='(-+|[a-zA-Z0-9_.:]+)'[ ]*} $param discard version]} { if {$version ne "1.0" } { # Should we support future versions? # At least 1.X? uplevel #0 $options(-errorcommand) "document XML version \"$version\" is incompatible with XML version 1.0" } } else { uplevel #0 $options(-errorcommand) "XML Declaration missing version information around line $state(line)" } # Get the encoding declaration set encoding {} regexp {[ ]*encoding="([A-Za-z]([A-Za-z0-9._]|-)*)"[ ]*} $param discard encoding regexp {[ ]*encoding='([A-Za-z]([A-Za-z0-9._]|-)*)'[ ]*} $param discard encoding # Get the standalone declaration set standalone {} regexp {[ ]*standalone="(yes|no)"[ ]*} $param discard standalone regexp {[ ]*standalone='(yes|no)'[ ]*} $param discard standalone # Invoke the callback uplevel #0 $options(-xmldeclcommand) [list $version $encoding $standalone] } } {\?*} { # Processing instruction if {![regsub {\?$} $param {} param]} { uplevel #0 $options(-errorcommand) "PI: expected '?' character around line $state(line)" } else { uplevel #0 $options(-processinginstructioncommand) [list [string range $tag 1 end] [string trimleft $param]] } } !DOCTYPE { # External entity reference # This should move into xml.tcl # Parse the params supplied. Looking for Name, ExternalID and MarkupDecl regexp ^[cl $Wsp]*($name)(.*) $param x state(doc_name) param set state(doc_name) [Normalize $state(doc_name) $options(-normalize)] set externalID {} set pubidlit {} set systemlit {} set externalID {} if {[regexp -nocase ^[cl $Wsp]*(SYSTEM|PUBLIC)(.*) $param x id param]} { switch [string toupper $id] { SYSTEM { if {[regexp ^[cl $Wsp]+"([cl ^"]*)"(.*) $param x systemlit param] || [regexp ^[cl $Wsp]+'([cl ^']*)'(.*) $param x systemlit param]} { set externalID [list SYSTEM $systemlit] ;# " } else { uplevel #0 $options(-errorcommand) {{syntax error: SYSTEM identifier not followed by literal}} } } PUBLIC { if {[regexp ^[cl $Wsp]+"([cl ^"]*)"(.*) $param x pubidlit param] || [regexp ^[cl $Wsp]+'([cl ^']*)'(.*) $param x pubidlit param]} { if {[regexp ^[cl $Wsp]+"([cl ^"]*)"(.*) $param x systemlit param] || [regexp ^[cl $Wsp]+'([cl ^']*)'(.*) $param x systemlit param]} { set externalID [list PUBLIC $pubidlit $systemlit] } else { uplevel #0 $options(-errorcommand) "syntax error: PUBLIC identifier not followed by system literal around line $state(line)" } } else { uplevel #0 $options(-errorcommand) "syntax error: PUBLIC identifier not followed by literal around line $state(line)" } } } if {[regexp -nocase ^[cl $Wsp]+NDATA[cl $Wsp]+($name)(.*) $param x notation param]} { lappend externalID $notation } } uplevel #0 $options(-doctypecommand) $state(doc_name) [list $pubidlit $systemlit $options(-internaldtd)] } !--* { # Start of a comment # See if it ends in the same tag, otherwise change the # parsing mode regexp {!--(.*)} $tag discard comm1 if {[regexp ([cl ^-]*)--[cl $Wsp]*\$ $comm1 discard comm1_1]} { # processed comment (end in tag) uplevel #0 $options(-commentcommand) [list $comm1_1] } elseif {[regexp ([cl ^-]*)--[cl $Wsp]*\$ $param discard comm2]} { # processed comment (end in attributes) uplevel #0 $options(-commentcommand) [list $comm1$comm2] } elseif {[regexp ([cl ^-]*)-->(.*) $text discard comm2 text]} { # processed comment (end in text) uplevel #0 $options(-commentcommand) [list $comm1$param>$comm2] } else { # start of comment set state(mode) comment set state(commentdata) "$comm1$param>$text" continue } } {!\[CDATA\[*} { regexp {!\[CDATA\[(.*)} $tag discard cdata1 if {[regexp {(.*)]]$} $param discard cdata2]} { # processed CDATA (end in attribute) uplevel #0 $options(-characterdatacommand) [list $cdata1$cdata2$text] set text {} } elseif {[regexp {(.*)]]>(.*)} $text discard cdata2 text]} { # processed CDATA (end in text) uplevel #0 $options(-characterdatacommand) [list $cdata1$param$empty>$cdata2$text] set text {} } else { # start CDATA set state(cdata) "$cdata1$param>$text" set state(mode) cdata continue } } !ELEMENT { # Internal DTD declaration } !ATTLIST { } !ENTITY { } !NOTATION { } !* { uplevel #0 $options(-processinginstructioncommand) [list $tag $param] } default { uplevel #0 $options(-errorcommand) [list "unknown processing instruction \"<$tag>\" around line $state(line)"] } } } *,1,* - *,0,/,/ { # Syntax error uplevel #0 $options(-errorcommand) [list [list syntax error: closed/empty tag: tag $tag param $param empty $empty close $close around line $state(line)]] } } # Process character data if {$state(haveDocElement) && [llength $state(stack)]} { # Check if the internal DTD entity is in the text regsub -all &xml:intdtd\; $text \[$options(-internaldtd)\] text # Look for entity references if {([array size entities] || [string length $options(-entityreferencecommand)]) && \ [regexp {&[^;]+;} $text]} { # protect Tcl specials regsub -all {([][$\\])} $text {\\\1} text # Mark entity references regsub -all {&([^;]+);} $text [format {%s; %s {\1} ; %s %s} \}\} [namespace code [list Entity options $options(-entityreferencecommand) $options(-characterdatacommand) $options(-entityvariable)]] [list uplevel #0 $options(-characterdatacommand)] \{\{] text set text "uplevel #0 $options(-characterdatacommand) {{$text}}" eval $text } else { # Restore protected special characters regsub -all {\\([{}\\])} $text {\1} text uplevel #0 $options(-characterdatacommand) [list $text] } } elseif {[string length [string trim $text]]} { uplevel #0 $options(-errorcommand) "unexpected text \"$text\" in document prolog around line $state(line)" } } # If this is the end of the document, close all open containers if {$options(-final) && [llength $state(stack)]} { eval $options(-errorcommand) [list [list element [lindex $state(stack) end] remains unclosed around line $state(line)]] } return {} } # sgml::ParseEvent:ElementOpen -- # # Start of an element. # # Arguments: # tag Element name # attr Attribute list # opts Option variable in caller # args further configuration options # # Options: # -empty boolean # indicates whether the element was an empty element # # Results: # Modify state and invoke callback proc sgml::ParseEvent:ElementOpen {tag attr opts args} { upvar $opts options upvar #0 $options(-statevariable) state array set cfg {-empty 0} array set cfg $args if {$options(-normalize)} { set tag [string toupper $tag] } # Update state lappend state(stack) $tag # Parse attribute list into a key-value representation if {[string compare $options(-parseattributelistcommand) {}]} { if {[catch {uplevel #0 $options(-parseattributelistcommand) [list $attr]} attr]} { uplevel #0 $options(-errorcommand) [list $attr around line $state(line)] set attr {} } } set empty {} if {$cfg(-empty) && $options(-reportempty)} { set empty {-empty 1} } # Invoke callback uplevel #0 $options(-elementstartcommand) [list $tag $attr] $empty return {} } # sgml::ParseEvent:ElementClose -- # # End of an element. # # Arguments: # tag Element name # opts Option variable in caller # args further configuration options # # Options: # -empty boolean # indicates whether the element as an empty element # # Results: # Modify state and invoke callback proc sgml::ParseEvent:ElementClose {tag opts args} { upvar $opts options upvar #0 $options(-statevariable) state array set cfg {-empty 0} array set cfg $args # WF check if {$tag ne [lindex $state(stack) end] } { uplevel #0 $options(-errorcommand) [list "end tag \"$tag\" does not match open element \"[lindex $state(stack) end]\" around line $state(line)"] return } # Update state set state(stack) [lreplace $state(stack) end end] set empty {} if {$cfg(-empty) && $options(-reportempty)} { set empty {-empty 1} } # Invoke callback uplevel #0 $options(-elementendcommand) [list $tag] $empty return {} } # sgml::Normalize -- # # Perform name normalization if required # # Arguments: # name name to normalize # req normalization required # # Results: # Name returned as upper-case if normalization required proc sgml::Normalize {name req} { if {$req} { return [string toupper $name] } else { return $name } } # sgml::Entity -- # # Resolve XML entity references (syntax: &xxx;). # # Arguments: # opts options array variable in caller # entityrefcmd application callback for entity references # pcdatacmd application callback for character data # entities name of array containing entity definitions. # ref entity reference (the "xxx" bit) # # Results: # Returns substitution text for given entity. proc sgml::Entity {opts entityrefcmd pcdatacmd entities ref} { upvar 2 $opts options upvar #0 $options(-statevariable) state if {![string length $entities]} { set entities [namespace current EntityPredef] } switch -glob -- $ref { %* { # Parameter entity - not recognised outside of a DTD } #x* { # Character entity - hex if {[catch {format %c [scan [string range $ref 2 end] %x tmp; set tmp]} char]} { return -code error "malformed character entity \"$ref\"" } uplevel #0 $pcdatacmd [list $char] return {} } #* { # Character entity - decimal if {[catch {format %c [scan [string range $ref 1 end] %d tmp; set tmp]} char]} { return -code error "malformed character entity \"$ref\"" } uplevel #0 $pcdatacmd [list $char] return {} } default { # General entity upvar #0 $entities map if {[info exists map($ref)]} { if {![regexp {<|&} $map($ref)]} { # Simple text replacement - optimise uplevel #0 $pcdatacmd [list $map($ref)] return {} } # Otherwise an additional round of parsing is required. # This only applies to XML, since HTML doesn't have general entities # Must parse the replacement text for start & end tags, etc # This text must be self-contained: balanced closing tags, and so on set tokenised [tokenise $map($ref) $::xml::tokExpr $::xml::substExpr] set final $options(-final) unset options(-final) eval parseEvent [list $tokenised] [array get options] -final 0 set options(-final) $final return {} } elseif {[string length $entityrefcmd]} { uplevel #0 $entityrefcmd [list $ref] return {} } } } # If all else fails leave the entity reference untouched uplevel #0 $pcdatacmd [list &$ref\;] return {} } #################################### # # DTD parser for SGML (XML). # # This DTD actually only handles XML DTDs. Other language's # DTD's, such as HTML, must be written in terms of a XML DTD. # # A DTD is represented as a three element Tcl list. # The first element contains the content models for elements, # the second contains the attribute lists for elements and # the last element contains the entities for the document. # #################################### # sgml::parseDTD -- # # Entry point to the SGML DTD parser. # # Arguments: # dtd data defining the DTD to be parsed # args configuration options # # Results: # Returns a three element list, first element is the content model # for each element, second element are the attribute lists of the # elements and the third element is the entity map. proc sgml::parseDTD {dtd args} { variable Wsp variable ParseDTDnum array set opts [list \ -errorcommand [namespace current]::noop \ state [namespace current]::parseDTD[incr ParseDTDnum] ] array set opts $args set exp <!([cl ^$Wsp>]+)[cl $Wsp]*([cl ^$Wsp]+)[cl $Wsp]*([cl ^>]*)> set sub {{\1} {\2} {\3} } regsub -all $exp $dtd $sub dtd foreach {decl id value} $dtd { catch {DTD:[string toupper $decl] $id $value} err } return [list [array get contentmodel] [array get attributes] [array get entities]] } # Procedures for handling the various declarative elements in a DTD. # New elements may be added by creating a procedure of the form # parse:DTD:_element_ # For each of these procedures, the various regular expressions they use # are created outside of the proc to avoid overhead at runtime # sgml::DTD:ELEMENT -- # # <!ELEMENT ...> defines an element. # # The content model for the element is stored in the contentmodel array, # indexed by the element name. The content model is parsed into the # following list form: # # {} Content model is EMPTY. # Indicated by an empty list. # * Content model is ANY. # Indicated by an asterix. # {ELEMENT ...} # Content model is element-only. # {MIXED {element1 element2 ...}} # Content model is mixed (PCDATA and elements). # The second element of the list contains the # elements that may occur. #PCDATA is assumed # (ie. the list is normalised). # # Arguments: # id identifier for the element. # value other information in the PI proc sgml::DTD:ELEMENT {id value} { dbgputs DTD_parse [list DTD:ELEMENT $id $value] variable Wsp upvar opts state upvar contentmodel cm if {[info exists cm($id)]} { eval $state(-errorcommand) element [list "element \"$id\" already declared"] } else { switch -- $value { EMPTY { set cm($id) {} } ANY { set cm($id) * } default { if {[regexp [format {^\([%s]*#PCDATA[%s]*(\|([^)]+))?[%s]*\)*[%s]*$} $Wsp $Wsp $Wsp $Wsp] discard discard mtoks]} { set cm($id) [list MIXED [split $mtoks |]] } else { if {[catch {CModelParse $state(state) $value} result]} { eval $state(-errorcommand) element [list $result] } else { set cm($id) [list ELEMENT $result] } } } } } } # sgml::CModelParse -- # # Parse an element content model (non-mixed). # A syntax tree is constructed. # A transition table is built next. # # This is going to need alot of work! # # Arguments: # state state array variable # value the content model data # # Results: # A Tcl list representing the content model. proc sgml::CModelParse {state value} { upvar #0 $state var # First build syntax tree set syntaxTree [CModelMakeSyntaxTree $state $value] # Build transition table set transitionTable [CModelMakeTransitionTable $state $syntaxTree] return [list $syntaxTree $transitionTable] } # sgml::CModelMakeSyntaxTree -- # # Construct a syntax tree for the regular expression. # # Syntax tree is represented as a Tcl list: # rep {:choice|:seq {{rep list1} {rep list2} ...}} # where: rep is repetition character, *, + or ?. {} for no repetition # listN is nested expression or Name # # Arguments: # spec Element specification # # Results: # Syntax tree for element spec as nested Tcl list. # # Examples: # (memo) # {} {:seq {{} memo}} # (front, body, back?) # {} {:seq {{} front} {{} body} {? back}} # (head, (p | list | note)*, div2*) # {} {:seq {{} head} {* {:choice {{} p} {{} list} {{} note}}} {* div2}} # (p | a | ul)+ # + {:choice {{} p} {{} a} {{} ul}} proc sgml::CModelMakeSyntaxTree {state spec} { upvar #0 $state var variable Wsp variable name # Translate the spec into a Tcl list. # None of the Tcl special characters are allowed in a content model spec. if {[regexp {\$|\[|\]|\{|\}} $spec]} { return -code error "illegal characters in specification" } regsub -all [format {(%s)[%s]*(\?|\*|\+)?[%s]*(,|\|)?} $name $Wsp $Wsp] $spec [format {%sCModelSTname %s {\1} {\2} {\3}} \n $state] spec regsub -all {\(} $spec "\nCModelSTopenParen $state " spec regsub -all [format {\)[%s]*(\?|\*|\+)?[%s]*(,|\|)?} $Wsp $Wsp] $spec [format {%sCModelSTcloseParen %s {\1} {\2}} \n $state] spec array set var {stack {} state start} eval $spec # Peel off the outer seq, its redundant return [lindex [lindex $var(stack) 1] 0] } # sgml::CModelSTname -- # # Processes a name in a content model spec. # # Arguments: # state state array variable # name name specified # rep repetition operator # cs choice or sequence delimiter # # Results: # See CModelSTcp. proc sgml::CModelSTname {state name rep cs args} { if {[llength $args]} { return -code error "syntax error in specification: \"$args\"" } CModelSTcp $state $name $rep $cs } # sgml::CModelSTcp -- # # Process a content particle. # # Arguments: # state state array variable # name name specified # rep repetition operator # cs choice or sequence delimiter # # Results: # The content particle is added to the current group. proc sgml::CModelSTcp {state cp rep cs} { upvar #0 $state var switch -glob -- [lindex $var(state) end]=$cs { start= { set var(state) [lreplace $var(state) end end end] # Add (dummy) grouping, either choice or sequence will do CModelSTcsSet $state , CModelSTcpAdd $state $cp $rep } :choice= - :seq= { set var(state) [lreplace $var(state) end end end] CModelSTcpAdd $state $cp $rep } start=| - start=, { set var(state) [lreplace $var(state) end end [expr {$cs eq "," ? ":seq" : ":choice"}]] CModelSTcsSet $state $cs CModelSTcpAdd $state $cp $rep } :choice=| - :seq=, { CModelSTcpAdd $state $cp $rep } :choice=, - :seq=| { return -code error "syntax error in specification: incorrect delimiter after \"$cp\", should be \"[expr {$cs eq "," ? "|" : ","}]\"" } end=* { return -code error "syntax error in specification: no delimiter before \"$cp\"" } default { return -code error "syntax error" } } } # sgml::CModelSTcsSet -- # # Start a choice or sequence on the stack. # # Arguments: # state state array # cs choice oir sequence # # Results: # state is modified: end element of state is appended. proc sgml::CModelSTcsSet {state cs} { upvar #0 $state var set cs [expr {$cs eq "," ? ":seq" : ":choice"}] if {[llength $var(stack)]} { set var(stack) [lreplace $var(stack) end end $cs] } else { set var(stack) [list $cs {}] } } # sgml::CModelSTcpAdd -- # # Append a content particle to the top of the stack. # # Arguments: # state state array # cp content particle # rep repetition # # Results: # state is modified: end element of state is appended. proc sgml::CModelSTcpAdd {state cp rep} { upvar #0 $state var if {[llength $var(stack)]} { set top [lindex $var(stack) end] lappend top [list $rep $cp] set var(stack) [lreplace $var(stack) end end $top] } else { set var(stack) [list $rep $cp] } } # sgml::CModelSTopenParen -- # # Processes a '(' in a content model spec. # # Arguments: # state state array # # Results: # Pushes stack in state array. proc sgml::CModelSTopenParen {state args} { upvar #0 $state var if {[llength $args]} { return -code error "syntax error in specification: \"$args\"" } lappend var(state) start lappend var(stack) [list {} {}] } # sgml::CModelSTcloseParen -- # # Processes a ')' in a content model spec. # # Arguments: # state state array # rep repetition # cs choice or sequence delimiter # # Results: # Stack is popped, and former top of stack is appended to previous element. proc sgml::CModelSTcloseParen {state rep cs args} { upvar #0 $state var if {[llength $args]} { return -code error "syntax error in specification: \"$args\"" } set cp [lindex $var(stack) end] set var(stack) [lreplace $var(stack) end end] set var(state) [lreplace $var(state) end end] CModelSTcp $state $cp $rep $cs } # sgml::CModelMakeTransitionTable -- # # Given a content model's syntax tree, constructs # the transition table for the regular expression. # # See "Compilers, Principles, Techniques, and Tools", # Aho, Sethi and Ullman. Section 3.9, algorithm 3.5. # # Arguments: # state state array variable # st syntax tree # # Results: # The transition table is returned, as a key/value Tcl list. proc sgml::CModelMakeTransitionTable {state st} { upvar #0 $state var # Construct nullable, firstpos and lastpos functions array set var {number 0} foreach {nullable firstpos lastpos} [ \ TraverseDepth1st $state $st { # Evaluated for leaf nodes # Compute nullable(n) # Compute firstpos(n) # Compute lastpos(n) set nullable [nullable leaf $rep $name] set firstpos [list {} $var(number)] set lastpos [list {} $var(number)] set var(pos:$var(number)) $name } { # Evaluated for nonterminal nodes # Compute nullable, firstpos, lastpos set firstpos [firstpos $cs $firstpos $nullable] set lastpos [lastpos $cs $lastpos $nullable] set nullable [nullable nonterm $rep $cs $nullable] } \ ] break set accepting [incr var(number)] set var(pos:$accepting) # # var(pos:N) maps from position to symbol. # Construct reverse map for convenience. # NB. A symbol may appear in more than one position. # var is about to be reset, so use different arrays. foreach {pos symbol} [array get var pos:*] { set pos [lindex [split $pos :] 1] set pos2symbol($pos) $symbol lappend sym2pos($symbol) $pos } # Construct the followpos functions catch {unset var} followpos $state $st $firstpos $lastpos # Construct transition table # Dstates is [union $marked $unmarked] set unmarked [list [lindex $firstpos 1]] while {[llength $unmarked]} { set T [lindex $unmarked 0] lappend marked $T set unmarked [lrange $unmarked 1 end] # Find which input symbols occur in T set symbols {} foreach pos $T { if {$pos != $accepting && [lsearch $symbols $pos2symbol($pos)] < 0} { lappend symbols $pos2symbol($pos) } } foreach a $symbols { set U {} foreach pos $sym2pos($a) { if {[lsearch $T $pos] >= 0} { # add followpos($pos) if {$var($pos) == {}} { lappend U $accepting } else { eval lappend U $var($pos) } } } set U [makeSet $U] if {[llength $U] && [lsearch $marked $U] < 0 && [lsearch $unmarked $U] < 0} { lappend unmarked $U } set Dtran($T,$a) $U } } return [list [array get Dtran] [array get sym2pos] $accepting] } # sgml::followpos -- # # Compute the followpos function, using the already computed # firstpos and lastpos. # # Arguments: # state array variable to store followpos functions # st syntax tree # firstpos firstpos functions for the syntax tree # lastpos lastpos functions # # Results: # followpos functions for each leaf node, in name/value format proc sgml::followpos {state st firstpos lastpos} { upvar #0 $state var switch -- [lindex [lindex $st 1] 0] { :seq { for {set i 1} {$i < [llength [lindex $st 1]]} {incr i} { followpos $state [lindex [lindex $st 1] $i] \ [lindex [lindex $firstpos 0] [expr {$i - 1}]] \ [lindex [lindex $lastpos 0] [expr {$i - 1}]] foreach pos [lindex [lindex [lindex $lastpos 0] [expr {$i - 1}]] 1] { eval lappend var($pos) [lindex [lindex [lindex $firstpos 0] $i] 1] set var($pos) [makeSet $var($pos)] } } } :choice { for {set i 1} {$i < [llength [lindex $st 1]]} {incr i} { followpos $state [lindex [lindex $st 1] $i] \ [lindex [lindex $firstpos 0] [expr {$i - 1}]] \ [lindex [lindex $lastpos 0] [expr {$i - 1}]] } } default { # No action at leaf nodes } } switch -- [lindex $st 0] { ? { # We having nothing to do here ! Doing the same as # for * effectively converts this qualifier into the other. } * { foreach pos [lindex $lastpos 1] { eval lappend var($pos) [lindex $firstpos 1] set var($pos) [makeSet $var($pos)] } } } } # sgml::TraverseDepth1st -- # # Perform depth-first traversal of a tree. # A new tree is constructed, with each node computed by f. # # Arguments: # state state array variable # t The tree to traverse, a Tcl list # leaf Evaluated at a leaf node # nonTerm Evaluated at a nonterminal node # # Results: # A new tree is returned. proc sgml::TraverseDepth1st {state t leaf nonTerm} { upvar #0 $state var set nullable {} set firstpos {} set lastpos {} switch -- [lindex [lindex $t 1] 0] { :seq - :choice { set rep [lindex $t 0] set cs [lindex [lindex $t 1] 0] foreach child [lrange [lindex $t 1] 1 end] { foreach {childNullable childFirstpos childLastpos} \ [TraverseDepth1st $state $child $leaf $nonTerm] break lappend nullable $childNullable lappend firstpos $childFirstpos lappend lastpos $childLastpos } eval $nonTerm } default { incr var(number) set rep [lindex [lindex $t 0] 0] set name [lindex [lindex $t 1] 0] eval $leaf } } return [list $nullable $firstpos $lastpos] } # sgml::firstpos -- # # Computes the firstpos function for a nonterminal node. # # Arguments: # cs node type, choice or sequence # firstpos firstpos functions for the subtree # nullable nullable functions for the subtree # # Results: # firstpos function for this node is returned. proc sgml::firstpos {cs firstpos nullable} { switch -- $cs { :seq { set result [lindex [lindex $firstpos 0] 1] for {set i 0} {$i < [llength $nullable]} {incr i} { if {[lindex [lindex $nullable $i] 1]} { eval lappend result [lindex [lindex $firstpos [expr {$i + 1}]] 1] } else { break } } } :choice { foreach child $firstpos { eval lappend result $child } } } return [list $firstpos [makeSet $result]] } # sgml::lastpos -- # # Computes the lastpos function for a nonterminal node. # Same as firstpos, only logic is reversed # # Arguments: # cs node type, choice or sequence # lastpos lastpos functions for the subtree # nullable nullable functions forthe subtree # # Results: # lastpos function for this node is returned. proc sgml::lastpos {cs lastpos nullable} { switch -- $cs { :seq { set result [lindex [lindex $lastpos end] 1] for {set i [expr {[llength $nullable] - 1}]} {$i >= 0} {incr i -1} { if {[lindex [lindex $nullable $i] 1]} { eval lappend result [lindex [lindex $lastpos $i] 1] } else { break } } } :choice { foreach child $lastpos { eval lappend result $child } } } return [list $lastpos [makeSet $result]] } # sgml::makeSet -- # # Turn a list into a set, ie. remove duplicates. # # Arguments: # s a list # # Results: # A set is returned, which is a list with duplicates removed. proc sgml::makeSet s { foreach r $s { if {[llength $r]} { set unique($r) {} } } return [array names unique] } # sgml::nullable -- # # Compute the nullable function for a node. # # Arguments: # nodeType leaf or nonterminal # rep repetition applying to this node # name leaf node: symbol for this node, nonterm node: choice or seq node # subtree nonterm node: nullable functions for the subtree # # Results: # Returns nullable function for this branch of the tree. proc sgml::nullable {nodeType rep name {subtree {}}} { switch -glob -- $rep:$nodeType { :leaf - +:leaf { return [list {} 0] } \\*:leaf - \\?:leaf { return [list {} 1] } \\*:nonterm - \\?:nonterm { return [list $subtree 1] } :nonterm - +:nonterm { switch -- $name { :choice { set result 0 foreach child $subtree { set result [expr {$result || [lindex $child 1]}] } } :seq { set result 1 foreach child $subtree { set result [expr {$result && [lindex $child 1]}] } } } return [list $subtree $result] } } } # These regular expressions are defined here once for better performance namespace eval sgml { variable Wsp # Watch out for case-sensitivity set attlist_exp [cl $Wsp]*([cl ^$Wsp]+)[cl $Wsp]*([cl ^$Wsp]+)[cl $Wsp]*(#REQUIRED|#IMPLIED) set attlist_enum_exp [cl $Wsp]*([cl ^$Wsp]+)[cl $Wsp]*\\(([cl ^)]*)\\)[cl $Wsp]*("([cl ^")])")? ;# " set attlist_fixed_exp [cl $Wsp]*([cl ^$Wsp]+)[cl $Wsp]*([cl ^$Wsp]+)[cl $Wsp]*(#FIXED)[cl $Wsp]*([cl ^$Wsp]+) set param_entity_exp [cl $Wsp]*([cl ^$Wsp]+)[cl $Wsp]*([cl ^"$Wsp]*)[cl $Wsp]*"([cl ^"]*)" set notation_exp [cl $Wsp]*([cl ^$Wsp]+)[cl $Wsp]*(.*) } # sgml::DTD:ATTLIST -- # # <!ATTLIST ...> defines an attribute list. # # Arguments: # id Element an attribute list is being defined for. # value data from the PI. # # Results: # Attribute list variables are modified. proc sgml::DTD:ATTLIST {id value} { variable attlist_exp variable attlist_enum_exp variable attlist_fixed_exp dbgputs DTD_parse [list DTD:ATTLIST $id $value] upvar opts state upvar attributes am if {[info exists am($id)]} { eval $state(-errorcommand) attlist [list "attribute list for element \"$id\" already declared"] } else { # Parse the attribute list. If it were regular, could just use foreach, # but some attributes may have values. regsub -all {([][$\\])} $value {\\\1} value regsub -all $attlist_exp $value {[DTDAttribute {\1} {\2} {\3}]} value regsub -all $attlist_enum_exp $value {[DTDAttribute {\1} {\2} {\3}]} value regsub -all $attlist_fixed_exp $value {[DTDAttribute {\1} {\2} {\3} {\4}]} value subst $value set am($id) [array get attlist] } } # sgml::DTDAttribute -- # # Parse definition of a single attribute. # # Arguments: # name attribute name # type type of this attribute # default default value of the attribute # value other information proc sgml::DTDAttribute {name type default {value {}}} { upvar attlist al # This needs further work set al($name) [list $default $value] } # sgml::DTD:ENTITY -- # # <!ENTITY ...> PI # # Arguments: # id identifier for the entity # value data # # Results: # Modifies the caller's entities array variable proc sgml::DTD:ENTITY {id value} { variable param_entity_exp dbgputs DTD_parse [list DTD:ENTITY $id $value] upvar opts state upvar entities ents if {"%" ne $id } { # Entity declaration if {[info exists ents($id)]} { eval $state(-errorcommand) entity [list "entity \"$id\" already declared"] } else { if {![regexp {"([^"]*)"} $value x entvalue] && ![regexp {'([^']*)'} $value x entvalue]} { eval $state(-errorcommand) entityvalue [list "entity value \"$value\" not correctly specified"] } ;# " set ents($id) $entvalue } } else { # Parameter entity declaration switch -glob [regexp $param_entity_exp $value x name scheme data],[string compare {} $scheme] { 0,* { eval $state(-errorcommand) entityvalue [list "parameter entity \"$value\" not correctly specified"] } *,0 { # SYSTEM or PUBLIC declaration } default { set ents($id) $data } } } } # sgml::DTD:NOTATION -- proc sgml::DTD:NOTATION {id value} { variable notation_exp upvar opts state if {[regexp $notation_exp $value x scheme data] == 2} { } else { eval $state(-errorcommand) notationvalue [list "notation value \"$value\" incorrectly specified"] } } ### Utility procedures # sgml::noop -- # # A do-nothing proc # # Arguments: # args arguments # # Results: # Nothing. proc sgml::noop args { return 0 } # sgml::identity -- # # Identity function. # # Arguments: # a arbitrary argument # # Results: # $a proc sgml::identity a { return $a } # sgml::Error -- # # Throw an error # # Arguments: # args arguments # # Results: # Error return condition. proc sgml::Error args { uplevel return -code error [list $args] } ### Following procedures are based on html_library # sgml::zapWhite -- # # Convert multiple white space into a single space. # # Arguments: # data plain text # # Results: # As above proc sgml::zapWhite data { regsub -all "\[ \t\r\n\]+" $data { } data return $data } proc sgml::Boolean value { regsub {1|true|yes|on} $value 1 value regsub {0|false|no|off} $value 0 value return $value } proc sgml::dbgputs {where text} { variable dbg catch {if {$dbg} {puts stdout "DBG: $where ($text)"}} } |
Added assets/xotcl1.6.8/xml/xml.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 | # xml.tcl -- # # This file provides XML services. # These services include a XML document instance and DTD parser, # as well as support for generating XML. # # Copyright (c) 1998,1999 Zveno Pty Ltd # http://www.zveno.com/ # # Zveno makes this software and all associated data and documentation # ('Software') available free of charge for non-commercial purposes only. You # may make copies of the Software but you must include all of this notice on # any copy. # # The Software was developed for research purposes and Zveno does not warrant # that it is error free or fit for any purpose. Zveno disclaims any # liability for all claims, expenses, losses, damages and costs any user may # incur as a result of using, copying or modifying the Software. # # Copyright (c) 1997 Australian National University (ANU). # # ANU makes this software and all associated data and documentation # ('Software') available free of charge for non-commercial purposes only. You # may make copies of the Software but you must include all of this notice on # any copy. # # The Software was developed for research purposes and ANU does not warrant # that it is error free or fit for any purpose. ANU disclaims any # liability for all claims, expenses, losses, damages and costs any user may # incur as a result of using, copying or modifying the Software. # # $Id: xml.tcl,v 1.4 2006/09/27 08:12:40 neumann Exp $ package provide xml 1.8 package require sgml 1.6 namespace eval xml { # Procedures for parsing XML documents namespace export parser # Procedures for parsing XML DTDs namespace export DTDparser # Counter for creating unique parser objects variable ParserCounter 0 # Convenience routine proc cl x { return "\[$x\]" } # Define various regular expressions # white space variable Wsp " \t\r\n" variable noWsp [cl ^$Wsp] # Various XML names and tokens # BUG: NameChar does not include CombiningChar or Extender variable NameChar [cl -a-zA-Z0-9._:] variable Name [cl a-zA-Z_:]$NameChar* variable Nmtoken $NameChar+ # Tokenising expressions variable tokExpr <(/?)([cl ^$Wsp>]+)([cl $Wsp]*[cl ^>]*)> variable substExpr "\}\n{\\2} {\\1} {} {\\3} \{" # table of predefined entities variable EntityPredef array set EntityPredef { lt < gt > amp & quot \" apos ' } } # xml::parser -- # # Creates XML parser object. # # Arguments: # args Unique name for parser object # plus option/value pairs # # Recognised Options: # -final Indicates end of document data # -elementstartcommand Called when an element starts # -elementendcommand Called when an element ends # -characterdatacommand Called when character data occurs # -processinginstructioncommand Called when a PI occurs # -externalentityrefcommand Called for an external entity reference # # (Not compatible with expat) # -xmldeclcommand Called when the XML declaration occurs # -doctypecommand Called when the document type declaration occurs # # -errorcommand Script to evaluate for a fatal error # -warningcommand Script to evaluate for a reportable warning # -statevariable global state variable # -reportempty whether to provide empty element indication # # Results: # The state variable is initialised. proc xml::parser {args} { variable ParserCounter if {[llength $args] > 0} { set name [lindex $args 0] set args [lreplace $args 0 0] } else { set name parser[incr ParserCounter] } if {[info command [namespace current]::$name] != {}} { return -code error "unable to create parser object \"[namespace current]::$name\" command" } # Initialise state variable and object command upvar \#0 [namespace current]::$name parser set sgml_ns [namespace parent]::sgml array set parser [list name $name \ -final 1 \ -elementstartcommand ${sgml_ns}::noop \ -elementendcommand ${sgml_ns}::noop \ -characterdatacommand ${sgml_ns}::noop \ -processinginstructioncommand ${sgml_ns}::noop \ -externalentityrefcommand ${sgml_ns}::noop \ -xmldeclcommand ${sgml_ns}::noop \ -doctypecommand ${sgml_ns}::noop \ -warningcommand ${sgml_ns}::noop \ -statevariable [namespace current]::$name \ -reportempty 0 \ internaldtd {} \ ] proc [namespace current]::$name {method args} \ "eval ParseCommand $name \$method \$args" eval ParseCommand [list $name] configure $args return [namespace current]::$name } # xml::ParseCommand -- # # Handles parse object command invocations # # Valid Methods: # cget # configure # parse # reset # # Arguments: # parser parser object # method minor command # args other arguments # # Results: # Depends on method proc xml::ParseCommand {parser method args} { upvar \#0 [namespace current]::$parser state switch -- $method { cget { return $state([lindex $args 0]) } configure { foreach {opt value} $args { set state($opt) $value } } parse { ParseCommand_parse $parser [lindex $args 0] } reset { if {[llength $args]} { return -code error "too many arguments" } ParseCommand_reset $parser } default { return -code error "unknown method \"$method\"" } } return {} } # xml::ParseCommand_parse -- # # Parses document instance data # # Arguments: # object parser object # xml data # # Results: # Callbacks are invoked, if any are defined proc xml::ParseCommand_parse {object xml} { upvar \#0 [namespace current]::$object parser variable Wsp variable tokExpr variable substExpr set parent [namespace parent] if {"::" eq $parent } { set parent {} } set tokenised [lrange \ [${parent}::sgml::tokenise $xml \ $tokExpr \ $substExpr \ -internaldtdvariable [namespace current]::${object}(internaldtd)] \ 5 end] eval ${parent}::sgml::parseEvent \ [list $tokenised \ -emptyelement [namespace code ParseEmpty] \ -parseattributelistcommand [namespace code ParseAttrs]] \ [array get parser -*command] \ [array get parser -entityvariable] \ [array get parser -reportempty] \ -normalize 0 \ -internaldtd [list $parser(internaldtd)] return {} } # xml::ParseEmpty -- # # Used by parser to determine whether an element is empty. # This should be dead easy in XML. The only complication is # that the RE above can't catch the trailing slash, so we have # to dig it out of the tag name or attribute list. # # Tcl 8.1 REs should fix this. # # Arguments: # tag element name # attr attribute list (raw) # e End tag delimiter. # # Results: # "/" if the trailing slash is found. Optionally, return a list # containing new values for the tag name and/or attribute list. proc xml::ParseEmpty {tag attr e} { if {[string match */ [string trimright $tag]] && \ ![string length $attr]} { regsub {/$} $tag {} tag return [list / $tag $attr] } elseif {[string match */ [string trimright $attr]]} { regsub {/$} [string trimright $attr] {} attr return [list / $tag $attr] } else { return {} } } # xml::ParseAttrs -- # # Parse element attributes. # # There are two forms for name-value pairs: # # name="value" # name='value' # # Watch out for the trailing slash on empty elements. # # Arguments: # attrs attribute string given in a tag # # Results: # Returns a Tcl list representing the name-value pairs in the # attribute string proc xml::ParseAttrs attrs { variable Wsp variable Name # First check whether there's any work to do if {{} eq [string trim $attrs] } { return {} } # Strip the trailing slash on empty elements regsub [format {/[%s]*$} " \t\n\r"] $attrs {} atList set mode name set result {} foreach component [split $atList =] { switch $mode { name { set component [string trim $component] if {[regexp $Name $component]} { lappend result $component } else { return -code error "invalid attribute name \"$component\"" } set mode value:start } value:start { set component [string trimleft $component] set delimiter [string index $component 0] set value {} switch -- $delimiter { \" - ' { if {[regexp [format {%s([^%s]*)%s(.*)} $delimiter $delimiter $delimiter] $component discard value remainder]} { lappend result $value set remainder [string trim $remainder] if {[string length $remainder]} { if {[regexp $Name $remainder]} { lappend result $remainder set mode value:start } else { return -code error "invalid attribute name \"$remainder\"" } } else { set mode end } } else { set value [string range $component 1 end] set mode value:continue } } default { return -code error "invalid value for attribute \"[lindex $result end]\"" } } } value:continue { if {[regexp [format {([^%s]*)%s(.*)} $delimiter $delimiter] $component discard valuepart remainder]} { append value = $valuepart lappend result $value set remainder [string trim $remainder] if {[string length $remainder]} { if {[regexp $Name $remainder]} { lappend result $remainder set mode value:start } else { return -code error "invalid attribute name \"$remainder\"" } } else { set mode end } } else { append value = $component } } end { return -code error "unexpected data found after end of attribute list" } } } switch $mode { name - end { # This is normal } default { return -code error "unexpected end of attribute list" } } return $result } proc xml::OLDParseAttrs {attrs} { variable Wsp variable Name # First check whether there's any work to do if {{} eq [string trim $attrs] } { return {} } # Strip the trailing slash on empty elements regsub [format {/[%s]*$} " \t\n\r"] $attrs {} atList # Protect Tcl special characters #regsub -all {([[\$\\])} $atList {\\\1} atList regsub -all & $atList {\&} atList regsub -all {\[} $atList {\&ob;} atList regsub -all {\]} $atList {\&cb;} atlist # NB. sgml package delivers braces and backslashes quoted regsub -all {\\\{} $atList {\&oc;} atList regsub -all {\\\}} $atList {\&cc;} atlist regsub -all {\$} $atList {\$} atList regsub -all {\\\\} $atList {\&bs;} atList regsub -all [format {(%s)[%s]*=[%s]*"([^"]*)"} $Name $Wsp $Wsp] \ $atList {[set parsed(\1) {\2}; set dummy {}] } atList ;# " regsub -all [format {(%s)[%s]*=[%s]*'([^']*)'} $Name $Wsp $Wsp] \ $atList {[set parsed(\1) {\2}; set dummy {}] } atList set leftovers [subst $atList] if {[string length [string trim $leftovers]]} { return -code error "syntax error in attribute list \"$attrs\"" } return [ParseAttrs:Deprotect [array get parsed]] } # xml::ParseAttrs:Deprotect -- # # Reverse map Tcl special characters previously protected # # Arguments: # attrs attribute list # # Results: # Characters substituted proc xml::ParseAttrs:Deprotect attrs { regsub -all &\; $attrs \\& attrs regsub -all &ob\; $attrs \[ attrs regsub -all &cb\; $attrs \] attrs regsub -all &oc\; $attrs \{ attrs regsub -all &cc\; $attrs \} attrs regsub -all &dollar\; $attrs \$ attrs regsub -all &bs\; $attrs \\\\ attrs return $attrs } # xml::ParseCommand_reset -- # # Initialize parser data # # Arguments: # object parser object # # Results: # Parser data structure initialised proc xml::ParseCommand_reset object { upvar \#0 [namespace current]::$object parser array set parser [list \ -final 1 \ internaldtd {} \ ] } # xml::noop -- # # A do-nothing proc proc xml::noop args {} ### Following procedures are based on html_library # xml::zapWhite -- # # Convert multiple white space into a single space. # # Arguments: # data plain text # # Results: # As above proc xml::zapWhite data { regsub -all "\[ \t\r\n\]+" $data { } data return $data } # # DTD parser for XML is wholly contained within the sgml.tcl package # # xml::parseDTD -- # # Entry point to the XML DTD parser. # # Arguments: # dtd XML data defining the DTD to be parsed # args configuration options # # Results: # Returns a three element list, first element is the content model # for each element, second element are the attribute lists of the # elements and the third element is the entity map. proc xml::parseDTD {dtd args} { return [eval [expr {[namespace parent] == {::} ? {} : [namespace parent]}]::sgml::parseDTD [list $dtd] $args] } |
Added assets/xotcl1.6.8/xml/xml.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | #!../../src/xotclsh # $Id: xml.xotcl,v 1.2 2006/02/18 22:17:33 neumann Exp $ # # smaller implementation of an XML parser wrapper, similar to xoXML # example from the XOTcl paper # # not used in ActiWeb # package require xml # # Xml Parser Connection Class (wrapper facade to TclXML and expat interface like parsers) # Class XMLParser XMLParser instproc init args { my set PC [xml::parser [my autoname [namespace tail [self]]]] my config \ -characterdatacommand "[self] pcdata" \ -elementstartcommand "[self] start" \ -elementendcommand "[self] end" my set currentElement [Node create [self]::T] next } # Create Forwarding methods to the parser == # abstact interface for xml parser acces XMLParser instproc cget option {[my set PC] cget $option} XMLParser instproc config args {eval "[my set PC] configure $args"} XMLParser instproc parse data {[my set PC] parse $data} XMLParser instproc reset {} {[my set PC] reset; [self]::T reset} XMLParser instproc pcdata text { my instvar currentElement $currentElement insertText $text } XMLParser instproc start {name attrList} { my instvar currentElement set currentElement [$currentElement insertElement $name $attrList] } XMLParser instproc end {name} { my instvar currentElement set currentElement [$currentElement info parent] } XMLParser instproc print {} { ::x::T print puts "" } ############################################################################### # Simple Node tree # General Nodes Class Node Node instproc reset {} { foreach c [my info children] {$c destroy} my set children "" } Node instproc print {} { if {[my exists children]} { foreach c [my set children] { $c print} } } Node instproc insert {xoclass elementclass args} { set new [eval $xoclass new -childof [self] $args] my lappend children $new return $new } Node instproc insertElement {tag args} { return [eval my insert Element $tag -attributes $args -tag $tag] } Node instproc insertText {text} { return [my insert Text text -content $text] } # Element Nodes Class Element -superclass Node -parameter { {attributes ""} tag } Element instproc print {} { my instvar tag attributes if {[llength $attributes]>0} { foreach {n v} $attributes {append string " " $n = '$v'} } else { set string "" } puts -nonewline <$tag$string> next puts -nonewline </$tag> } # Text Nodes Class Text -superclass Node -parameter { {content ""} } Text instproc print {} { puts -nonewline [my set content] } ################################################################################# ### Examples ################################################################################# XMLParser x x parse {<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/metadata/dublin_core#"> <rdf:Description about="http://www.foo.com/cool.html"> <dc:Creator> <rdf:Seq ID="CreatorsAlphabeticalBySurname"> <rdf:li>Mary Andrew</rdf:li> <rdf:li>Jacky Crystal</rdf:li> </rdf:Seq> </dc:Creator> <dc:Identifier> <rdf:Bag ID="MirroredSites"> <rdf:li rdf:resource="http://www.foo.com.au/cool.html"/> <rdf:li rdf:resource="http://www.foo.com.it/cool.html"/> </rdf:Bag> </dc:Identifier> <dc:Title> <rdf:Alt> <rdf:li xml:lang="en">The Coolest Web Page</rdf:li> <rdf:li xml:lang="it">Il Pagio di Web Fuba</rdf:li> </rdf:Alt> </dc:Title> </rdf:Description> </rdf:RDF>} ::x print puts ============================================================ x reset x parse { <TEST> a <X a="http://www.foo.com/cool1.html">b</X> c <Y a="http://www.foo.com/cool2.html">d<Z>e</Z>f</Y> g </TEST> } x print |
Added assets/xotcl1.6.8/xml/xmlRecreatorVisitor.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | package provide xotcl::xml::recreatorVisitor 1.0 package require -exact xotcl::xml::parser 1.0 package require XOTcl 1 namespace eval ::xotcl::xml::recreatorVisitor { namespace import ::xotcl::* ############################################################################## # # a visitor that recreates an XML representation from a # node tree # ############################################################################# Class XMLRecreatorVisitor -superclass NodeTreeVisitor -parameter useCDATA # # determine nesting depth of an object if the aggregation tree # XMLRecreatorVisitor instproc nestingDepth {obj} { for {set d 0;set s [$obj info parent]} {$s ne "::"} {set s [$s info parent]} { incr d } return $d } # # insert appropriate number of spaces for indentation -> return space string # XMLRecreatorVisitor instproc indent chars { set spaces " " for {set l 9} {$l<$chars} {incr l $l} {append spaces $spaces} return [string range $spaces 1 $chars] } XMLRecreatorVisitor instproc insertIndent {obj} { my instvar nestingStart return [my indent [expr {([my nestingDepth $obj] - $nestingStart)*2} - 2]] } XMLRecreatorVisitor instproc attrIndent {objName fa} { upvar [self callinglevel] $fa firstAttr if {$firstAttr} { set firstAttr 0 return " " } else { return "\n[my insertIndent $objName] " } } XMLRecreatorVisitor instproc getContent objName { return [$objName content] } XMLRecreatorVisitor instproc hasOnlyAttrs {obj} { if {[$obj exists pcdata]} {return 0} foreach c [$obj info children] { if {[$c istype XMLNode]} {return 0} } return 1 } # # hook to append line feed dependent on the object # default is to append one \n # XMLRecreatorVisitor instproc appendLineFeed obj { return "\n" } # # evaluate node objName # XMLRecreatorVisitor instproc visit objName { my instvar result set c [my getContent $objName] if {$c ne ""} { $objName instvar attributes pcdata set ns [$objName resolveNS] set firstAttr 1 set attrStr "" if {[string first $objName $ns] != -1} { # append xmlns attributes, xmlns=... first if {[$ns exists nsArray(xmlns)]} { append attrStr [my attrIndent $objName firstAttr] append attrStr "xmlns = \"[$ns set nsArray(xmlns)]\"" } foreach a [$ns array names nsArray] { if {$a ne "xmlns"} { append attrStr [my attrIndent $objName firstAttr] append attrStr "xmlns:${a} = \"[$ns set nsArray($a)]\"" } } } foreach a [array names attributes] { append attrStr [my attrIndent $objName firstAttr] append attrStr "$a = \"$attributes($a)\"" } append result "[my insertIndent $objName]<${c}$attrStr" if {[my hasOnlyAttrs $objName]} { append result "/>" } else { append result ">" } if {[info exists pcdata] && [llength $pcdata]>1 && [lindex $pcdata 0] eq ""} { append result " " [my pcdataString [lindex $pcdata 1]] } append result [my appendLineFeed $objName] } return $result } XMLRecreatorVisitor instproc pcdataString text { if {[my exists useCDATA] && [regexp < $text]} { return "<!\[CDATA\[$text]]>" } return $text } # # evaluate end of a node # XMLRecreatorVisitor instproc visitEnd objName { my instvar result set c [$objName content] if {$c ne ""} { if {![my hasOnlyAttrs $objName]} { append result [my insertIndent $objName] </$c>\n } } # a child is responsible for the "mixed content" data elements # that have a location after the child set p [$objName info parent] if {[$p istype XMLElement] && [$p mixedContent]} { foreach {location data} [$p set pcdata] { if {$location == $objName} { append result [my insertIndent $objName] \ [my pcdataString $data] \n } } } } # # public method to be called on top node -> returns XML text as result # XMLRecreatorVisitor instproc interpretNodeTree node { my instvar result set result "" my set nestingStart [my nestingDepth $node] $node accept [self] return $result } namespace export XMLRecreatorVisitor } namespace import ::xotcl::xml::recreatorVisitor::* |
Added assets/xotcl1.6.8/xml/xoXML.xotcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 | package provide xotcl::xml::parser 1.0 package require XOTcl 1 package require -exact xotcl::pattern::chainOfResponsibility 1.0 package require -exact xotcl::pattern::sortedCompositeWithAfter 1.0 #package require -exact xotcl::pattern::link 1.0 package require -exact xotcl::trace 1.0 #package require -exact xml #package require expat namespace eval ::xotcl::xml::parser { namespace import ::xotcl::* ############################################################################## # # XML Namespace Handling # ############################################################################## @ ChainOfResponsibility XMLNamespace { description { A Chain of Responsiblity Class that handles the XML XMLNamespace facility for an object tree especially for internal usage of the xoXML component } } ChainOfResponsibility XMLNamespace XMLNamespace instproc init args { # Per default: New NS is end of a namespace chain # indicated by "" my successor "" my array set nsArray {} next } # # add two operations searchPrefix and searchFullName as chained -> calls are # automatically forwarded in the chain, if the failure value (here: "") # is returned by the chained object # XMLNamespace addChainedOperation searchPrefix "" XMLNamespace addChainedOperation searchFullName "" XMLNamespace addChainedOperation searchNamespaceByPrefix "" # # namespaces are added by value pairs of prefix and full namespace # name (ns) # XMLNamespace instproc add {prefix ns} { #puts stderr "adding ns: $prefix $ns" my set nsArray($prefix) $ns } # # search the chain for a prefix -> return full name, if found # XMLNamespace instproc searchPrefix {prefix} { #puts stderr "[self proc]: Searching for $prefix in [self]" #puts stderr "[self proc]: There are: [my array names nsArray]" if {[my exists nsArray($prefix)]} { return [my set nsArray($prefix)] } else { return "" } } # # search the chain for a prefix -> return the responisble namespace name # XMLNamespace instproc searchNamespaceByPrefix {prefix} { if {[my exists nsArray($prefix)]} { return [self] } else { return "" } } # # search the chain for the full name -> return prefix, if found # XMLNamespace instproc searchFullName {fname} { foreach n [my array names nsArray] { if {[string match [my set nsArray($n)] $fname]} { return $n } } return "" } # # construct the full name from either a expression "prefix:name" # or just "name" (then construct with "xmlns" as default namespace prefix) # XMLNamespace instproc getFullName {fname} { #puts stderr "Getting FullName for $fname in [self]" if {[regexp "^(.*):(.*)$" $fname _ prefix name]} { if {[set pre [my searchPrefix $prefix]] != ""} { return [set pre]$name } } else { # no colon -> use xmlns return [my searchPrefix "xmlns"]$fname } return $fname } ############################################################################## # # Abstract Node Class # ############################################################################## SortedComposite AbstractXMLNode @ SortedComposite AbstractXMLNode { description { Abstract interface for all node classes. Nodes have an event based parsing interface to build up a node tree, from an event based parsing stream } } # # called if node start event occurs -> # start parsing node "name" and intpretation hook for the attribute list # AbstractXMLNode abstract instproc parseStart {name attrList} # # called if "character data" is reached # AbstractXMLNode abstract instproc parseData {text} # # called if node end is reached # AbstractXMLNode abstract instproc parseEnd {name} # # convinience method for printing nodes to output stream (e.g. for debugging) # AbstractXMLNode abstract instproc print {} # # Visitor acceptance methods -> call visit and visitEnd of the given # "visitor" with my as argument # AbstractXMLNode abstract instproc accept {visitor} AbstractXMLNode abstract instproc acceptEnd {visitor} # make 'accept' and 'acceptEnd' composite operations AbstractXMLNode addOperations {accept accept} AbstractXMLNode addAfterOperations {accept acceptEnd} ############################################################################## # # XMLNode Node Class # ############################################################################## # # the pcdata variable stores the data elements in form of a tuple list # <location dataElt>. # Class XMLNode -superclass AbstractXMLNode -parameter { {content ""} {namespace} {parser ""} pcdata } @ Class XMLNode { description { general superclass for XML nodes } } XMLNode instproc init args { my array set attributes {} next } XMLNode instproc nextChild {name} { set child [my autoname $name] my set lastChild $child my appendChildren $child return $child } # # placeholder methods for the event interface # XMLNode instproc parseStart {name attrList} { #puts "parsed start: [my info class]: $name $attrList" } # # chracter data is stored in a pcdata variable. # XMLNode instproc mixedContent {} { expr {[my exists children] && [my exists pcdata]} } XMLNode instproc parseData {text} { #my showCall my instvar pcdata set childBeforePCData "" # if pcdata exists seek the last XMLElement child #if {[my exists children]} { # foreach c [my set children] { # if {[[self]::$c istype XMLElement]} { # set childBeforePCData [self]::$c # } # } # } if {[my exists lastChild]} { set childBeforePCData [self]::[my set lastChild] } #my showMsg childBeforePCData=$childBeforePCData #my showMsg old-pcdata=$pcdata if {[my exists pcdata]} { foreach {e d} $pcdata { } #puts stderr "//$e//$d// [expr {$e == $childBeforePCData}]" if {$e == $childBeforePCData} { set pcdata [lreplace $pcdata [expr {[llength $pcdata]-2}] end] set text $d$text } lappend pcdata $childBeforePCData $text #puts stderr *append****new-pcdata=$pcdata } else { set pcdata [list $childBeforePCData $text] #puts stderr *set*******new-pcdata=$pcdata } } # # this method just returns the data elt in the first pcdata # XMLNode instproc getFirstPCData {} { if {[my exists pcdata]} { return [lindex [my set pcdata] 1] } return "" } # # returns a list of all pcdata elememts, without location information # stored in the pcdata instance variable # XMLNode instproc getPCdataList {} { set result "" foreach {l data} [my set pcdata] { lappend result $data } return $result } # #my set pcdata $text XMLNode instproc parseEnd {name} { #puts "parsed end: [my info class]: $name" } XMLNode instproc print {} { set c "[my info class]-[self] --- [my content]" foreach a [my array names attributes] { append c "\nATTR: $a = [my set attributes($a)]" } if {[my exists pcdata]} { foreach d [my getPCdataList] { append c "\nPCDATA:\n$d" } } return $c } # # composite accept operation for visiting the node tree # through visitors # # -> interpretation of the interpreter pattern # XMLNode instproc accept {visitor} { $visitor visit [self] } # # composite operation called at termination of computation of # a level == end node # XMLNode instproc acceptEnd {visitor} { $visitor visitEnd [self] } # # error message, if child can't be parsed # XMLNode instproc errorChild {c} { error "[self] unexpected content $c" } # # find the namespace object that is currently responsible # for the [self] node # XMLNode instproc resolveNS {} { set parser [my set parser] if {[my exists namespace]} { return [my set namespace] } else { set p [my info parent] if {$p ne "" && $p != $parser} { return [$p resolveNS] } else { #puts stderr "No parent namespace !! Using Parser's topNs ..." return "" } } } # # add a new namespace entry to the object's NS entry, if it exists # otherwise: act as a factory method for NS objects and create an # NS object for the [self] node # XMLNode instproc makeIndividualNSEntry {prefix entry} { set ns [my resolveNS] if {[string first [self] $ns] == -1} { #puts stderr "new namespace for [self]" set newNS [XMLNamespace create [self]::[my autoname ns]] $newNS set successor $ns my namespace $newNS set ns $newNS } $ns add $prefix $entry } # # check for xmlns attribute in the name/value pair "n v" # return 1 on success, otherwise 0 # XMLNode instproc checkForXmlNS {n v} { #puts "checking to build NS in [self] with $n == $v" if {[regexp {^xmlns:?(.*)$} $n _ prefix]} { if {$prefix eq ""} { set prefix "xmlns" } my makeIndividualNSEntry $prefix $v return 1 } return 0 } # small helper proc to extract the namespace prefix from content XMLNode instproc getContentPrefix {} { if {[regexp {^([^:]*):} [my set content] _ prefix]} { return $prefix } return "" } ############################################################################## # # XMLNode _Class_ Factory for creating XML style node # node classes # ############################################################################## Class XMLNodeClassFactory -superclass Class XMLNodeClassFactory create XMLElement -superclass XMLNode ############################################################################## # # Add some methods to the created XMLElement class # ############################################################################## XMLElement instproc parseAttributes {name attrList} { my set content $name foreach {n v} $attrList { if {[my checkForXmlNS $n $v]} {continue} my set attributes($n) $v } } # # build a child corresponding to the node start event and # check attribute list -> set content (attr name) and value (attr value) # on created attr children objects of the XMLElement child # return the new XMLElement child # XMLElement instproc parseStart {name attrList} { set parser [my set parser] set nf [$parser set nodeFactory] set r [$nf getNode XMLElement [self]::[my nextChild elt] $parser] $r parseAttributes $name $attrList return $r } # no action of parse end -> just return [self] for convinience XMLElement instproc parseEnd content { self } ############################################################################## # # Abstract interface for factories that create node objects; # ############################################################################## Class AbstractXMLNodeFactory # # get a node with the specifies key (normally the classname) and name # the node "objName" -> without flyweights an object "objName" or type "key" # is created # AbstractXMLNodeFactory abstract instproc getNode {key objName parser} # # clean up the node factory # AbstractXMLNodeFactory abstract instproc reset {} ############################################################################## # # Special Node Factory as used in xoXML and xoRDF # for shared classes the factory acts as a flyweight factory # ############################################################################## Class XMLNodeFactory -superclass AbstractXMLNodeFactory -parameter { {sharedNodes ""} } XMLNodeFactory instproc getNode {class objName parser} { $class create $objName -parser $parser ;# returns object ID } XMLNodeFactory instproc reset {} { #my array set flyweights {} } ############################################################################## # # XML Factory for creating node objects # ############################################################################## XMLNodeFactory xmlNodeFactory ############################################################################## # # Xml Parser Connection Class (wrapper facade to TclXML, expat # interface like parsers) # ############################################################################## Class XMLParser -parameter { {topLevelNodeHandler ""} {nodeFactory "xmlNodeFactory"} {xmlTextParser expat_fallback_tclxml} } # # normally all toplevel start events are handled with XML-Elements # here we can define regexp patterns for other toplevel handlers # XMLParser instproc topLevelHandlerPattern {regexp handlerClass} { my lappend topLevelNodeHandler $regexp $handlerClass } # # if regexp matches -> handler class is used (see start instproc) # if none matches -> use XMLElement; "name" is name given by the # start method # XMLParser instproc createTopLevelNode {name attrList} { set nf [my set nodeFactory] set tnName [my autoname topNode] foreach {regexpPattern class} [my set topLevelNodeHandler] { if {[regexp $regexpPattern $name]} { set tn [$nf getNode $class [self]::$tnName [self]] my set currentTopNode $tn return $tn } } set tn [$nf getNode XMLElement [self]::$tnName [self]] my set currentTopNode $tn $tn parseAttributes $name $attrList return $tn } # # determine the current node -> either the end of node list or topNode # XMLParser instproc currentNode {} { set nodeList [my set nodeList] if {$nodeList eq ""} { if {[my exists currentTopNode]} { return [my set currentTopNode] } error "No current top node" } else { return [lindex $nodeList end] } } # # instatiate parser and register event callback methods with parser # XMLParser instproc init args { #my set xmlTextParser expat switch -- [my set xmlTextParser] { tclxml { package require xml my set PC \ [xml::parser [[self class] autoname [namespace tail [self]]]] } expat { package require xotcl::xml::expat my set PC \ [expat [[self class] autoname [namespace tail [self]]]] } expat_fallback_tclxml { if {[catch {package require xotcl::xml::expat}]} { package require xml my set PC \ [xml::parser [[self class] autoname [namespace tail [self]]]] #puts "using tclxml" } else { my set PC \ [expat [[self class] autoname [namespace tail [self]]]] #puts "using expat" } } } my configure \ -characterdatacommand [list [self] pcdata] \ -elementstartcommand [list [self] start] \ -elementendcommand [list [self] end] my set nodeList "" next } XMLParser instproc characterdatacommand cmd { [my set PC] configure -[self proc] $cmd } XMLParser instproc elementstartcommand cmd { [my set PC] configure -[self proc] $cmd } XMLParser instproc elementendcommand cmd { [my set PC] configure -[self proc] $cmd } # # Create Forwarding methods to the parser == # abstact interface for xml parser acces # XMLParser instproc cget option {[my set PC] cget $option} XMLParser instproc parse data {[my set PC] parse $data} XMLParser instproc parseFile filename { set F [open $filename r]; set c [read $F]; close $F return [my parse $c] } XMLParser instproc reset {} { [my set PC] reset foreach c [my info children] { $c destroy } my autoname -reset topNode my set nodeList "" [my set nodeFactory] reset } XMLParser instproc pcdata text { #my showCall set t [string trim $text] if {$t ne ""} { #puts stderr "[self]->[self proc] '$text'" [my currentNode] parseData $t } } XMLParser instproc start {name {attrList ""}} { #puts "[self]->[self proc] $name $attrList" my instvar nodeList if {$nodeList eq ""} { # no currentNode -> we have to create one set newStartNode [my createTopLevelNode $name $attrList] } else { set newStartNode [[my currentNode] parseStart $name $attrList] } lappend nodeList $newStartNode } XMLParser instproc end {name} { #puts "[self]->[self proc] $name" my instvar nodeList set currentNode [my currentNode] $currentNode parseEnd $name set nodeList [lreplace $nodeList end end] } XMLParser instproc destroy args { if {[my exists PC]} { rename [my set PC] "" } next } ############################################################################## # # Abstract class for visiting Parser Node Trees # ############################################################################## Class NodeTreeVisitor # # visit a given node "objName" -> called by accept method of objName # visit encapsulates the interpretation algorithm for a node # NodeTreeVisitor abstract instproc visit objName # # interpret the whole node tree strating with top node "node" # NodeTreeVisitor abstract instproc interpretNodeTree node # # visit end may stay unspecified in concrete visitors # NodeTreeVisitor instproc visitEnd objName {;} # # template method that interprets all topnodes of a parser # in original order # NodeTreeVisitor instproc interpretAll {parser} { set result "" foreach tn [lsort [$parser info children topNode*]] { append result [my interpretNodeTree $tn] } return $result } namespace export XMLNamespace AbstractXMLNode XMLNode \ XMLNodeClassFactory XMLElement AbstractXMLNodeFactory \ XMLNodeFactory XMLParser NodeTreeVisitor } namespace import ::xotcl::xml::parser::* |
Changes to jni/xotcl/Android.mk.
︙ | ︙ | |||
30 31 32 33 34 35 36 | generic/xotclProfile.c \ generic/xotclShadow.c \ generic/xotclTrace.c \ generic/xotclUtil.c LOCAL_CFLAGS := $(tcl_cflags) \ -DXOTCLVERSION="\"1.6\"" \ | | | | 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | generic/xotclProfile.c \ generic/xotclShadow.c \ generic/xotclTrace.c \ generic/xotclUtil.c LOCAL_CFLAGS := $(tcl_cflags) \ -DXOTCLVERSION="\"1.6\"" \ -DXOTCLPATCHLEVEL="\"8\"" \ -DPACKAGE_NAME="\"xotcl\"" \ -DPACKAGE_VERSION="\"1.6.8\"" \ -O2 LOCAL_SHARED_LIBRARIES := libtcl LOCAL_LDLIBS := include $(BUILD_SHARED_LIBRARY) |
Changes to jni/xotcl/COPYRIGHT.
1 2 | * XOTcl - Extended OTcl * | > | | 1 2 3 4 5 6 7 8 9 10 11 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen |
︙ | ︙ |
Changes to jni/xotcl/ChangeLog.
1 2 3 4 5 6 7 | 2011-11-02 <Gustaf.Neumann@wu-wien.ac.at> * Release of XOTcl 1.6.7 2011-11-01 <Gustaf.Neumann@wu-wien.ac.at> * xotcl.c: some c-cleanup * library files: require exact version numbers to avoid conflicts with XOTcl 2.0 | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | 2014-04-29 <Gustaf.Neumann@wu-wien.ac.at> * Release of XOTcl 1.6.8 2014-04-29 <Gustaf.Neumann@wu-wien.ac.at> * some more cleanup of autoconf (more quoting, remove obsolete file, use recent install-sh) * try to stick closer to current tcl conventions 2014-04-29 <stefan.sobernig@wu-wien.ac.at> * unix/tclAppInit.c: Fix one more compiler warning: undeclared Xotcl_Init() * Removing configure artifact, otherwise lintian complains * Makefile.in: LDFLAGS must be referenced differently under TEA * fixed "make install" problem, fix build problem for xowish 2014-04-28 <stefan.sobernig@wu-wien.ac.at> * library/xml/TclExpat-1.1/xmltok_impl.c: fix for CVE-2009-3720 2014-04-25 <Gustaf.Neumann@wu-wien.ac.at> * follow modern autoconf conventions * configure.a: use TEA 3.9 * use new tcl.m4 * Makefile.in: remove hard-coded "-rdynamic" from build of xotclsh and xowish * generic/xotclTrace.c: remove obsolete test 2014-04-24 <stefan.sobernig@wu-wien.ac.at> * Makefile.in: Make sure that xotclsh + xowish are explicitly linked against libtclstub*.so, rather than libtcl*.so. Otherwise, building with --with-xotclsh + --with-xowish fails starting with 8.6 (which effectively hides the various stub structures in libtcl*.so). * AppInit.c: Use the stubbed variant of Tcl_Init(). * Tested under 8.6 (fossil trunk as of commit date) and 8.5 (fossil core-8-5-branch as of commit date). Thanks to Sergei Golovan (Debian Tcl/Tk Package Maintainers) for reporting the issue and an initial patch (see Debian bug #724816). 2013-07-16 <Gustaf.Neumann@wu-wien.ac.at> * library/actiweb/HttpPlace.xotcl: add URL query variables as arguments 2013-06-23 <Gustaf.Neumann@wu-wien.ac.at> * make version management simpler and freeze XOTcl 1.* versions In order to avoid bad interactions between XOTcl 1.0 and XOTcl 2.0 the version dependency in 1.0 where changed to "package require -exact ... 1.0" where possible, and the provides where upgraded to 1.0 in most cases * make sure that packages from XOTcl 1 require XOTcl 1 * generic/xotcl.c: code cleanup 2013-03-26 <Gustaf.Neumann@wu-wien.ac.at> * doc/langRef.xotcl: update documentation 2012-10-13 <Gustaf.Neumann@wu-wien.ac.at> * Make sure to NS_EXPORT Ns_ModuleVersion for people using still the old-style aolserver module. 2012-01-16 <Gustaf.Neumann@wu-wien.ac.at> * xotcl.c Extend backport of handling of dashes in XOTcl's configure method to perform a more eager search for command begins. Extended regression test 2012-01-14 <Gustaf.Neumann@wu-wien.ac.at> * xotcl.c Don't overwrite error messages from __unknown handler in several situations (superclass, parameter class, mixin class) 2012-01-12 <Gustaf.Neumann@wu-wien.ac.at> * xotcl.c Backport from nsf: when processing arguments with leading dashes in "configure", accept only method names without spaces. This solves a problem with Tcl8.4 + ns_eval where the output of the serializer could not be processed by eval (a [list ..] was lost). 2011-12-22 <Gustaf.Neumann@wu-wien.ac.at> * Httpd: force GMT dates as required by RFC 2011-11-12 <Gustaf.Neumann@wu-wien.ac.at> * Removed obsolete CVS-$Ids * Updated dates of Copyrights * Removed unneeded c++ hints for Emacs 2011-11-02 <Gustaf.Neumann@wu-wien.ac.at> * Release of XOTcl 1.6.7 2011-11-01 <Gustaf.Neumann@wu-wien.ac.at> * xotcl.c: some c-cleanup * library files: require exact version numbers to avoid conflicts with XOTcl 2.0 |
︙ | ︙ | |||
55 56 57 58 59 60 61 | 2010-03-22 <Gustaf.Neumann@wu-wien.ac.at> * clean up compilation when compile with assertions turned on * make sure to use xotcl 1.* when regression testing xotcl 1.* 2010-03-06 <Gustaf.Neumann@wu-wien.ac.at> * use installed expat when specified | | | 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | 2010-03-22 <Gustaf.Neumann@wu-wien.ac.at> * clean up compilation when compile with assertions turned on * make sure to use xotcl 1.* when regression testing xotcl 1.* 2010-03-06 <Gustaf.Neumann@wu-wien.ac.at> * use installed expat when specified This option is needed fro Debian packaging rules. (Many thanks to Stefan Sobernig for this contribution) * cleanup of redundant section in configure.in * update to TEA 3.7 2010-02-09 <Gustaf.Neumann@wu-wien.ac.at> * provide compatibility with 8.6b1 * bumped version number to 1.6.6 |
︙ | ︙ | |||
89 90 91 92 93 94 95 | 2009-10-17 <Gustaf.Neumann@wu-wien.ac.at> * clean removal of __trace__ method in serializer * Some documentation fixes, added stack example to documentation * Bumped version number to 1.6.4 * Release of XOTcl 1.6.4 2009-06-19 <Gustaf.Neumann@wu-wien.ac.at> | | | 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 | 2009-10-17 <Gustaf.Neumann@wu-wien.ac.at> * clean removal of __trace__ method in serializer * Some documentation fixes, added stack example to documentation * Bumped version number to 1.6.4 * Release of XOTcl 1.6.4 2009-06-19 <Gustaf.Neumann@wu-wien.ac.at> - minor variable renaming to follow tcl naming conventions more closely 2009-06-14 <Gustaf.Neumann@wu-wien.ac.at> - fixed potential access to deleted command list item in FilterSearchAgain() - fixed potential access deleted xotcl object by switching order in a condition - some minor cleanup for configuration flags |
︙ | ︙ | |||
117 118 119 120 121 122 123 | 2009-03-03 <Gustaf.Neumann@wu-wien.ac.at> - simplify semantics of MixinSeekCurrent and FilterSeekCurrent, improve speed - remove necessity to have tclCompile.h - improve documentation 2009-03-02 <Gustaf.Neumann@wu-wien.ac.at> - some small performance improvements (use CreateHashEntry instead | | | 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | 2009-03-03 <Gustaf.Neumann@wu-wien.ac.at> - simplify semantics of MixinSeekCurrent and FilterSeekCurrent, improve speed - remove necessity to have tclCompile.h - improve documentation 2009-03-02 <Gustaf.Neumann@wu-wien.ac.at> - some small performance improvements (use CreateHashEntry instead of FindHashEntry, remove unneeded argument, improve order of long and expressions) - some code cleanup - new methods, when compiled with tcl 8.5; + MakeProcError (producing error messages from xotcl methods) + PushProcCallFrame (compile method to byte-code) The new support allows to call code at the begin of a proc without using the old approach based on :xotcl::initProcNS |
︙ | ︙ | |||
219 220 221 222 223 224 225 | 2008-06-23 <Gustaf.Neumann@wu-wien.ac.at> * remove pattern argument from "info class" * additional argument for "info precedence": "-intrinsic" Syntax: <objName> info precedence ?-intrinsic? ?pattern? If "-intrinsic" is specified, only the classes of the | | | 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 | 2008-06-23 <Gustaf.Neumann@wu-wien.ac.at> * remove pattern argument from "info class" * additional argument for "info precedence": "-intrinsic" Syntax: <objName> info precedence ?-intrinsic? ?pattern? If "-intrinsic" is specified, only the classes of the superclass type hierarchy are returned. Otherwise, the precedence contains mixin classes as well. * Check results for guards to be boolean instead of int (now, guards are allowed to return e.g. "true") 2008-05-30 <Gustaf.Neumann@wu-wien.ac.at> * updating language reference |
︙ | ︙ | |||
249 250 251 252 253 254 255 | X info instdefault crash "" var 2008-05-09 <Gustaf.Neumann@wu-wien.ac.at> * used catch in the deprecated package xotcl::upvar-compat as suggested by Jeff Hobbs 2008-03-18 <Gustaf.Neumann@wu-wien.ac.at> | | | 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 | X info instdefault crash "" var 2008-05-09 <Gustaf.Neumann@wu-wien.ac.at> * used catch in the deprecated package xotcl::upvar-compat as suggested by Jeff Hobbs 2008-03-18 <Gustaf.Neumann@wu-wien.ac.at> * allowed "abstract method" in addition to "abstract instproc" and "abstract proc" 2008-02-26 <Gustaf.Neumann@wu-wien.ac.at> * xotcl.c: The double ;; chokes MSVC6 in the next line. (many thanks for Andreas Kupries for reporting) 2008-02-25 <Gustaf.Neumann@wu-wien.ac.at> |
︙ | ︙ | |||
460 461 462 463 464 465 466 | - on class destroy entry is now removed from mixin and instmixin lists 2007-10-12: <Gustaf.Neumann@wu-wien.ac.at> * Release of XOTcl 1.5.6 2007-10-09: <Gustaf.Neumann@wu-wien.ac.at> | | | 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 | - on class destroy entry is now removed from mixin and instmixin lists 2007-10-12: <Gustaf.Neumann@wu-wien.ac.at> * Release of XOTcl 1.5.6 2007-10-09: <Gustaf.Neumann@wu-wien.ac.at> * More fixes for treating global volatile objects during shutdown: - do not allow to create new objects during shutdown - do not allow objects to be set volatile during shutdown - handle cases, where application level destroy methods fail (this could lead to remaining tcl traces pointing to destroyed objects) - handle namespaced variables helding deletion traces |
︙ | ︙ | |||
504 505 506 507 508 509 510 | * Fix for Tcl 8.4.16 (and maybe some other recent tcl 8.4.* versions, 8.5 is fine) for situations, where Tcl variable contain references to deleted XOTcl objects. The fix added a epoch increment to CallStackDoDestroy(). 2007-09-29: <Gustaf.Neumann@wu-wien.ac.at> * Fix for cases, where volatile objects are | | | 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 | * Fix for Tcl 8.4.16 (and maybe some other recent tcl 8.4.* versions, 8.5 is fine) for situations, where Tcl variable contain references to deleted XOTcl objects. The fix added a epoch increment to CallStackDoDestroy(). 2007-09-29: <Gustaf.Neumann@wu-wien.ac.at> * Fix for cases, where volatile objects are deleted before the corresponding trace variable. 2007-09-18: <Gustaf.Neumann@wu-wien.ac.at> * Release of XOTcl 1.5.5 2007-09-18: <Gustaf.Neumann@wu-wien.ac.at> * Fix rpm build (most probably due to TEA 3.6) |
︙ | ︙ | |||
589 590 591 592 593 594 595 | From the Tcl Changelog *** POTENTIAL INCOMPATIBILITY *** (tclInt.h and tclCompile.h) Extensions that access internals defined in tclInt.h and/or tclCompile.h may lose both binary and source compatibility. The relevant changes are: | | | | 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 | From the Tcl Changelog *** POTENTIAL INCOMPATIBILITY *** (tclInt.h and tclCompile.h) Extensions that access internals defined in tclInt.h and/or tclCompile.h may lose both binary and source compatibility. The relevant changes are: 1. 'struct Var' is completely changed, all accesses to its internals (either direct or via the TclSetVar* and TclIsVar* macros) will malfunction. Var flag values and semantics changed too. 2. 'struct Bytecode' has an additional field that has to be initialized to NULL 3. 'struct Namespace' is larger, as the varTable is now one pointer larger than a Tcl_HashTable. Direct access to its fields will malfunction. 4. 'struct CallFrame' grew one more field (the second such growth with respect to Tcl8.4). |
︙ | ︙ | |||
671 672 673 674 675 676 677 | tclInt.h). Starting with Tcl 8.4.14, this cmdPtr is used as well for updating the client data of a cmd, in case the proc is recompiled. Since XOTcl used the cmdPtr to control the namespace, this code had to be rewritten differently. The new version is faster, but uses for filters or mixins slightly more storage. | | | 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 | tclInt.h). Starting with Tcl 8.4.14, this cmdPtr is used as well for updating the client data of a cmd, in case the proc is recompiled. Since XOTcl used the cmdPtr to control the namespace, this code had to be rewritten differently. The new version is faster, but uses for filters or mixins slightly more storage. * reduced calling overhead of methods with non-positional arguments by about 10 percent by avoiding shimmering. * fixed handling of "return -code break" from xotcl methods (thanks to Artur Trzewik for the bug report) * library/comm/Access.xotcl: fixed handling of chunked encoding |
︙ | ︙ | |||
755 756 757 758 759 760 761 | current object from a C application from the callstack * fixed genstubs target in Makefile.in regenerated all stub files * removed a few more compiler warnings for the power64 bit architecture 2006-09-19 <Gustaf.Neumann@wu-wien.ac.at> * added XOTCL_NONLEAF_METHOD: This constant | | | | 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 | current object from a C application from the callstack * fixed genstubs target in Makefile.in regenerated all stub files * removed a few more compiler warnings for the power64 bit architecture 2006-09-19 <Gustaf.Neumann@wu-wien.ac.at> * added XOTCL_NONLEAF_METHOD: This constant must be used when registering C-implemented methods that call "::xotcl::next" to push the XOTcl activation record. Example: XOTclAddIMethod( interp, MyClass, "mymethod", MyMethod, XOTCL_NONLEAF_METHOD, 0 ); 2006-09-18 <Gustaf.Neumann@wu-wien.ac.at> * fixed a bug in parsing non-positional arguments, when e.g. square brackets are used in type declarations for parameters. Class C C instproc foo {{-q:mult[2],optional 1} -x:boolean,optional args} {puts hu} Tcl lists add another layer of braces ... foo {{{-q:mult[2],optional} 1} -x:boolean,optional args} .... which have to be removed at the definition time of the parameters. |
︙ | ︙ | |||
844 845 846 847 848 849 850 | 2006-08-21 <Gustaf.Neumann@wu-wien.ac.at> * changed the implementation of the configure command and setrelation command to use Tcl_GetIndexFromObj(); * added the subcommand "class" and "superclass" to the the setrelation command. 2006-08-22 <Gustaf.Neumann@wu-wien.ac.at> | | | | | 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 | 2006-08-21 <Gustaf.Neumann@wu-wien.ac.at> * changed the implementation of the configure command and setrelation command to use Tcl_GetIndexFromObj(); * added the subcommand "class" and "superclass" to the the setrelation command. 2006-08-22 <Gustaf.Neumann@wu-wien.ac.at> * fixed a bug with non-positional arguments, some positional arguments and "args" * fixed a bug in non-positional arguments when called without arguments * improved error messages in connection with non-positional arguments * extended interface of XOTclErrBadVal() to provide better error messages (this changes the stub interface, so we have to change the version number) 2006-08-21 <Gustaf.Neumann@wu-wien.ac.at> * new command for registering predefined C-implemented Tcl commands as methods ::xotcl::alias <class>|<obj> <methodname> \ |
︙ | ︙ |
Changes to jni/xotcl/Makefile.in.
1 2 3 4 5 6 7 8 9 10 | # Makefile.in -- # # This file is a Makefile for Sample TEA Extension. If it has the name # "Makefile.in" then it is a template for a Makefile; to generate the # actual Makefile, run "./configure", which is a configuration script # generated by the "autoconf" program (constructs like "@foo@" will get # replaced in the actual Makefile. # # Copyright (c) 1999 Scriptics Corporation. # Copyright (c) 2002-2003 ActiveState Corporation. | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # Makefile.in -- # # This file is a Makefile for Sample TEA Extension. If it has the name # "Makefile.in" then it is a template for a Makefile; to generate the # actual Makefile, run "./configure", which is a configuration script # generated by the "autoconf" program (constructs like "@foo@" will get # replaced in the actual Makefile. # # Copyright (c) 1999 Scriptics Corporation. # Copyright (c) 2002-2003 ActiveState Corporation. # Copyright (C) 1999-2014 Gustaf Neumann (a) (b) # Copyright (C) 1999-2007 Uwe Zdun (a) (b) # # See the file "tcl-license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # RCS: @(#) $Id: Makefile.in,v 1.25 2007/09/18 19:27:32 neumann Exp $ #======================================================================== |
︙ | ︙ | |||
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | src_lib_dir = ${srcdir}/library src_doc_dir = ${srcdir}/doc src_test_dir = ${srcdir}/tests src_app_dir = ${srcdir}/apps src_generic_dir = ${srcdir}/generic src_man_dir = ${srcdir}/man TCL_LIB_SPEC = @TCL_LIB_SPEC@ TK_LIB_SPEC = @TK_LIB_SPEC@ subdirs = @subdirs@ aol_prefix = @aol_prefix@ # Requires native paths PLATFORM_DIR = `@CYGPATH@ $(srcdir)/@TEA_PLATFORM@` target_doc_dir = ./doc | > > > | 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | src_lib_dir = ${srcdir}/library src_doc_dir = ${srcdir}/doc src_test_dir = ${srcdir}/tests src_app_dir = ${srcdir}/apps src_generic_dir = ${srcdir}/generic src_man_dir = ${srcdir}/man TCL_LIB_SPEC = @TCL_LIB_SPEC@ TCL_STUB_LIB_SPEC = @TCL_STUB_LIB_SPEC@ TK_LIB_SPEC = @TK_LIB_SPEC@ TK_STUB_LIB_SPEC = @TK_STUB_LIB_SPEC@ subdirs = @subdirs@ aol_prefix = @aol_prefix@ # Requires native paths PLATFORM_DIR = `@CYGPATH@ $(srcdir)/@TEA_PLATFORM@` target_doc_dir = ./doc |
︙ | ︙ | |||
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | BINARIES = $(lib_BINARIES) SHELL = @SHELL@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ datadir = @datadir@ mandir = @mandir@ includedir = @includedir@ DESTDIR = top_builddir = . INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ CC = @CC@ CFLAGS_DEFAULT = @CFLAGS_DEFAULT@ CFLAGS_WARNING = @CFLAGS_WARNING@ CLEANFILES = @CLEANFILES@ | > > > > > > > > | 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | BINARIES = $(lib_BINARIES) SHELL = @SHELL@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ bindir = @bindir@ libdir = @libdir@ datadir = @datadir@ mandir = @mandir@ includedir = @includedir@ DESTDIR = top_builddir = . INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ # INSTALL = $(SHELL) $(srcdir)/config/install-sh -c ${INSTALL_OPTIONS} # INSTALL_DATA_DIR = ${INSTALL} -d -m 755 # INSTALL_PROGRAM = ${INSTALL} -m 755 # INSTALL_DATA = ${INSTALL} -m 644 # INSTALL_SCRIPT = ${INSTALL_PROGRAM} # INSTALL_LIBRARY = ${INSTALL_DATA} PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ CC = @CC@ CFLAGS_DEFAULT = @CFLAGS_DEFAULT@ CFLAGS_WARNING = @CFLAGS_WARNING@ CLEANFILES = @CLEANFILES@ |
︙ | ︙ | |||
173 174 175 176 177 178 179 | @LD_LIBRARY_PATH_VAR@="$(EXTRA_PATH):$(@LD_LIBRARY_PATH_VAR@)" \ PATH="$(EXTRA_PATH):$(PATH)" \ TCLLIBPATH="$(top_builddir) ${srcdir}" TCLSH_PROG = @TCLSH_PROG@ TCLSH = $(TCLSH_ENV) $(TCLSH_PROG) SHARED_BUILD = @SHARED_BUILD@ | | | | 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 | @LD_LIBRARY_PATH_VAR@="$(EXTRA_PATH):$(@LD_LIBRARY_PATH_VAR@)" \ PATH="$(EXTRA_PATH):$(PATH)" \ TCLLIBPATH="$(top_builddir) ${srcdir}" TCLSH_PROG = @TCLSH_PROG@ TCLSH = $(TCLSH_ENV) $(TCLSH_PROG) SHARED_BUILD = @SHARED_BUILD@ AM_CPPFLAGS = @PKG_INCLUDES@ @TCL_INCLUDES@ @TK_INCLUDES@ @TK_XINCLUDES@ @XOTCL_BUILD_INCLUDE_SPEC@ EXTRA_CFLAGS = @PKG_CFLAGS@ # TCL_DEFS is not strictly need here, but if you remove it, then you # must make sure that configure.in checks for the necessary components # that your library may use. TCL_DEFS can actually be a problem if # you do not compile with a similar machine setup as the Tcl core was # compiled with. #DEFS = $(TCL_DEFS) @DEFS@ $(EXTRA_CFLAGS) DEFS = @DEFS@ $(EXTRA_CFLAGS) CONFIG_CLEAN_FILES = @CONFIG_CLEAN_FILES@ CPPFLAGS = @CPPFLAGS@ LIBS = @PKG_LIBS@ @LIBS@ AR = @AR@ CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) #======================================================================== # Start of user-definable TARGETS section #======================================================================== #======================================================================== # TEA TARGETS. Please note that the "libraries:" target refers to platform |
︙ | ︙ | |||
423 424 425 426 427 428 429 | pkgIndex.tcl: $(PKG_LIB_FILE) @echo package ifneeded XOTcl $(PACKAGE_VERSION) [list load [file join \$$dir . $(PKG_LIB_FILE)] XOTcl] > pkgIndex.tcl install-pkgIndex: # @echo package ifneeded XOTcl $(PACKAGE_VERSION) [list load [file join \$$dir .. "$(PKG_LIB_FILE)"] XOTcl] > "$(pkglibdir)/pkgIndex.tcl" xotclsh: tclAppInit.o $(PKG_OBJECTS) $(CONDITIONAL_STUB_OBJECTS) | | | | | | 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 | pkgIndex.tcl: $(PKG_LIB_FILE) @echo package ifneeded XOTcl $(PACKAGE_VERSION) [list load [file join \$$dir . $(PKG_LIB_FILE)] XOTcl] > pkgIndex.tcl install-pkgIndex: # @echo package ifneeded XOTcl $(PACKAGE_VERSION) [list load [file join \$$dir .. "$(PKG_LIB_FILE)"] XOTcl] > "$(pkglibdir)/pkgIndex.tcl" xotclsh: tclAppInit.o $(PKG_OBJECTS) $(CONDITIONAL_STUB_OBJECTS) $(CC) -o $@ tclAppInit.o \ $(PKG_OBJECTS) \ $(CFLAGS) $(LDFLAGS_DEFAULT) $(TCL_LIB_SPEC) $(TCL_STUB_LIB_SPEC) \ $(DMALLOC_LIB) $(CONDITIONAL_STUB_OBJECTS) xowish: tkAppInit.o $(PKG_OBJECTS) $(CONDITIONAL_STUB_OBJECTS) $(CC) -o $@ tkAppInit.o \ $(PKG_OBJECTS) \ $(CFLAGS) $(LDFLAGS_DEFAULT) $(TCL_LIB_SPEC) $(TCL_STUB_LIB_SPEC) $(TK_LIB_SPEC) $(TK_STUB_LIB_SPEC) \ $(DMALLOC_LIB) $(CONDITIONAL_STUB_OBJECTS) install-shells: @if test -f xotclsh; then \ $(INSTALL_PROGRAM) xotclsh $(DESTDIR)$(bindir); \ fi @if test -f xowish; then \ |
︙ | ︙ | |||
585 586 587 588 589 590 591 | @list='$(bin_BINARIES)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p"; \ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p; \ fi; \ done | | | 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 | @list='$(bin_BINARIES)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p"; \ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p; \ fi; \ done SUFFIXES= .c .$(OBJEXT) #Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status # cd $(top_builddir) \ # && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status uninstall-binaries: list='$(lib_BINARIES)'; for p in $$list; do \ |
︙ | ︙ | |||
668 669 670 671 672 673 674 | $(prefix)/lib/libxotcl$(PACKAGE_VERSION)* \ $(prefix)/include/xotcl*.h \ $(DESTDIR)$(pkglibdir) $(prefix)/man/man1/xo* \ -type f -o -type l | fgrep -v CVS | fgrep -v SCCS | fgrep -v .junk| fgrep -v .db | fgrep -v "~" | fgrep -v "#" | fgrep -v /receiver/` \ ) tar: libraries-pkgindex | | | 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 | $(prefix)/lib/libxotcl$(PACKAGE_VERSION)* \ $(prefix)/include/xotcl*.h \ $(DESTDIR)$(pkglibdir) $(prefix)/man/man1/xo* \ -type f -o -type l | fgrep -v CVS | fgrep -v SCCS | fgrep -v .junk| fgrep -v .db | fgrep -v "~" | fgrep -v "#" | fgrep -v /receiver/` \ ) tar: libraries-pkgindex sh ./tclconfig/mktar.sh .PHONY: all binaries clean depend distclean doc install libraries \ test test-core test-actiweb # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: |
Changes to jni/xotcl/README.
|
| | | 1 2 3 4 5 6 7 8 | ***************** XOTcl README File ***************** ********************************** Compilation of Source Distribution ********************************* Read COMPILE for compilation guidance on UNIX or |
︙ | ︙ | |||
24 25 26 27 28 29 30 | -------------------- From version 1.1 on XOTcl does not - by default - build xotclsh and xowish anymore. Instead you should use xotcl from tclsh or wish. The typical way to do so is to load XOTcl as a packages and then import the commands from the XOTcl namespace into the current namespace: | | | | | | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | -------------------- From version 1.1 on XOTcl does not - by default - build xotclsh and xowish anymore. Instead you should use xotcl from tclsh or wish. The typical way to do so is to load XOTcl as a packages and then import the commands from the XOTcl namespace into the current namespace: tclsh8.5 package require XOTcl; namespace import -force xotcl::* That means, the XOTcl installed package library needs to be on Tcl's search path for packages. If XOTcl is not installed in the standard Tcl location, you can either set the environment variable TCLLIBPATH from outside of Tcl to this location, or use the variable auto_path in Tcl. For instance, to use the local, extracted tar ball, you can use something like (under UNIX): export TCLLIBPATH="./xotcl-1.6.8" or setenv TCLLIBPATH "./xotcl-1.6.8" Under Windows: set TCLLIBPATH=".\xotcl-1.6.8" Linux Binary Distribution ------------------------- Per default the Linux version install to usr/local and XOTcl directories. If you want to install to these directions, just |
︙ | ︙ | |||
64 65 66 67 68 69 70 | csh: setenv TCLLIBPATH "/usr/local/lib/xotcl-<VERSION>/ $(TCLLIBPATH)" bash: export TCLLIBPATH="/usr/local/lib/xotcl-<VERSION>/ $(TCLLIBPATH)" Windows Binary Release ---------------------- | | | | | 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | csh: setenv TCLLIBPATH "/usr/local/lib/xotcl-<VERSION>/ $(TCLLIBPATH)" bash: export TCLLIBPATH="/usr/local/lib/xotcl-<VERSION>/ $(TCLLIBPATH)" Windows Binary Release ---------------------- You need Tcl installed properly. If necessary, get Tcl for your system from http://www.tcl.tk Now check where Tcl is installed and what the name of the tclsh*.exe is. If you installed Tcl 8.5.13, the name is tclsh85.exe. On my system Tcl installs tclsh in c:\Programme\Tcl\bin (in English versions this is most likely under c:\Program Files\Tcl\bin). On my system the tcl installer adds this directory automatically to the search PATH; if this is not the case on your system, add this directory manually to your PATH (under NT or Win2K, use: Control Panel/System/.../Environment; MSDOS-class system use autoexec.bat to |
︙ | ︙ |
Changes to jni/xotcl/apps/COPYRIGHT.
1 2 | * XOTcl - Extended OTcl * | > | | 1 2 3 4 5 6 7 8 9 10 11 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen |
︙ | ︙ |
Changes to jni/xotcl/apps/actiweb/AgentClient.xotcl.
1 2 3 | #!/usr/bin/env tclsh # $Id: AgentClient.xotcl,v 1.5 2006/09/27 08:12:39 neumann Exp $ #if {![info exists ACTIWEB_HOME]} {source ~/actiweb/paths.xotcl} | | | 1 2 3 4 5 6 7 8 9 10 11 | #!/usr/bin/env tclsh # $Id: AgentClient.xotcl,v 1.5 2006/09/27 08:12:39 neumann Exp $ #if {![info exists ACTIWEB_HOME]} {source ~/actiweb/paths.xotcl} package require XOTcl 1; namespace import -force xotcl::* package require xotcl::package package verbose 1 package require xotcl::actiweb::agent package require xotcl::actiweb::httpPlace Place p |
︙ | ︙ |
Changes to jni/xotcl/apps/actiweb/Counter.xotcl.
1 2 3 4 5 6 | #!../../src/xotclsh # $Id: Counter.xotcl,v 1.4 2006/09/27 08:12:39 neumann Exp $ #load /Users/neumann/src/xotcl-1.4.1/library/store/XOTclSdbm/libxotclsdbm1.2.dylib array set opts {-pkgdir .}; array set opts $argv lappend auto_path $opts(-pkgdir) | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!../../src/xotclsh # $Id: Counter.xotcl,v 1.4 2006/09/27 08:12:39 neumann Exp $ #load /Users/neumann/src/xotcl-1.4.1/library/store/XOTclSdbm/libxotclsdbm1.2.dylib array set opts {-pkgdir .}; array set opts $argv lappend auto_path $opts(-pkgdir) package require XOTcl 1 1; namespace import -force xotcl::* package require xotcl::actiweb::htmlPlace package require xotcl::actiweb::webDocument ### Instantiate an Html place with the name receive and port 8090 HtmlPlace ::receiver -port 8090 -allowExit exit ### Define a class Counter as a special Html Document |
︙ | ︙ |
Changes to jni/xotcl/apps/actiweb/Counter2.xotcl.
1 2 3 4 5 | #!../../src/xotclsh # $Id: Counter2.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ array set opts {-pkgdir .}; array set opts $argv lappend auto_path $opts(-pkgdir) | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | #!../../src/xotclsh # $Id: Counter2.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ array set opts {-pkgdir .}; array set opts $argv lappend auto_path $opts(-pkgdir) package require XOTcl 1 1; namespace import -force xotcl::* package require xotcl::actiweb::htmlPlace package require xotcl::actiweb::pageTemplate HtmlPlace ::receiver -port 8091 -allowExit exit ### |
︙ | ︙ |
Changes to jni/xotcl/apps/actiweb/Counter3.xotcl.
1 2 3 4 5 | #!../../src/xotclsh # $Id: Counter3.xotcl,v 1.1 2004/05/23 22:50:39 neumann Exp $ array set opts {-pkgdir .}; array set opts $argv lappend auto_path $opts(-pkgdir) | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | #!../../src/xotclsh # $Id: Counter3.xotcl,v 1.1 2004/05/23 22:50:39 neumann Exp $ array set opts {-pkgdir .}; array set opts $argv lappend auto_path $opts(-pkgdir) package require XOTcl 1 1; namespace import -force xotcl::* package require xotcl::actiweb::htmlPlace package require xotcl::actiweb::webDocument ### Instantiate an Html place with the name receiver HtmlPlace ::receiver -port 8093 -allowExit exit ### Define a class solely for counting |
︙ | ︙ |
Changes to jni/xotcl/apps/actiweb/Counter4.xotcl.
1 2 3 4 5 | #!../../src/xotclsh # $Id: Counter4.xotcl,v 1.2 2004/07/27 21:39:46 neumann Exp $ array set opts {-pkgdir .}; array set opts $argv lappend auto_path $opts(-pkgdir) | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | #!../../src/xotclsh # $Id: Counter4.xotcl,v 1.2 2004/07/27 21:39:46 neumann Exp $ array set opts {-pkgdir .}; array set opts $argv lappend auto_path $opts(-pkgdir) package require XOTcl 1 1; namespace import -force xotcl::* package require xotcl::actiweb::htmlPlace package require xotcl::actiweb::webDocument ### Instantiate an Html place with the name receiver HtmlPlace ::receiver -port 8094 -allowExit exit ### Define a class solely for counting |
︙ | ︙ |
Changes to jni/xotcl/apps/actiweb/FormsWithState.xotcl.
1 2 3 4 5 6 | #!../../src/xotclsh # $Id: FormsWithState.xotcl,v 1.1 2004/05/23 22:50:39 neumann Exp $ # # Demo Program for Multi-Page Forms implemented via hidden # Form Fields -gn # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!../../src/xotclsh # $Id: FormsWithState.xotcl,v 1.1 2004/05/23 22:50:39 neumann Exp $ # # Demo Program for Multi-Page Forms implemented via hidden # Form Fields -gn # package require XOTcl 1; namespace import -force xotcl::* package require xotcl::actiweb::htmlPlace package require xotcl::actiweb::webDocument HtmlPlace receiver -port 8086 # The following class is used to define HTML-pages Class HTMLPage -superclass HtmlDocument -parameter { {pageContent ""} |
︙ | ︙ |
Changes to jni/xotcl/apps/actiweb/MC.xotcl.
1 2 3 4 5 6 7 8 | #!../../src/xotclsh # $Id: MC.xotcl,v 1.1 2004/05/23 22:50:39 neumann Exp $ # # A simple multiple choice test application # array set opts {-pkgdir .}; array set opts $argv lappend auto_path $opts(-pkgdir) | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!../../src/xotclsh # $Id: MC.xotcl,v 1.1 2004/05/23 22:50:39 neumann Exp $ # # A simple multiple choice test application # array set opts {-pkgdir .}; array set opts $argv lappend auto_path $opts(-pkgdir) package require XOTcl 1 1; namespace import -force xotcl::* #package require xotcl::package; package verbose 1 package require xotcl::actiweb::htmlPlace package require xotcl::actiweb::pageTemplate HtmlPlace ::receiver -port 8092 -allowExit exit # Define a pool of questions: Question and their alternatives |
︙ | ︙ |
Changes to jni/xotcl/apps/actiweb/Receiver.xotcl.
1 2 | #!/usr/bin/env tclsh #if {![info exists ACTIWEB_HOME]} {source ~/actiweb/paths.xotcl} | | | 1 2 3 4 5 6 7 8 9 10 | #!/usr/bin/env tclsh #if {![info exists ACTIWEB_HOME]} {source ~/actiweb/paths.xotcl} package require XOTcl 1; namespace import -force xotcl::* package require xotcl::actiweb::htmlPlace package require xotcl::actiweb::webDocument HtmlPlace receiver -port 8087 HtmlDocument hallo.txt -content "************ HALLO *************" |
︙ | ︙ |
Changes to jni/xotcl/apps/actiweb/securePlaceDemo.xotcl.
1 2 |
| | | 1 2 3 4 5 6 7 8 9 10 | package require XOTcl 1; namespace import -force xotcl::* # DEMO OF USE OF ACTIWEB AND SSL # 03/09/01 klaus.kolowratnik@wu-wien.ac.at # version 0.806 # USAGE: # |
︙ | ︙ |
Changes to jni/xotcl/apps/actiweb/univ/UNIVERSAL.xotcl.
1 2 | #!/usr/bin/env tclsh #$Id: UNIVERSAL.xotcl,v 1.8 2007/08/14 16:38:26 neumann Exp $ | | | 1 2 3 4 5 6 7 8 9 10 | #!/usr/bin/env tclsh #$Id: UNIVERSAL.xotcl,v 1.8 2007/08/14 16:38:26 neumann Exp $ package require XOTcl 1 1; namespace import -force xotcl::* array set opts { -ssl 0 -instanceFile UNIVERSAL.rdf -cssFile UNIVERSAL.css -root . -pkgdir .} array set opts $argv @ @File { description { This is a demo of a Webserver that presents the contents of |
︙ | ︙ |
Changes to jni/xotcl/apps/comm/ftp.xotcl.
1 | #!/usr/bin/env tclsh | | | 1 2 3 4 5 6 7 8 9 | #!/usr/bin/env tclsh package require XOTcl 1; namespace import -force xotcl::* @ @File {description { A tiny FTP client }} package require xotcl::comm::ftp SimpleRequest r1 -url ftp://prep.ai.mit.edu/README if {[r1 success]} { |
︙ | ︙ |
Changes to jni/xotcl/apps/comm/get-regression-nb.xotcl.
1 | #!/usr/bin/env tclsh | | | 1 2 3 4 5 6 7 8 9 | #!/usr/bin/env tclsh package require XOTcl 1; namespace import -force xotcl::* # ./get-regression-nb.xotcl -host swt -parallel 0 # ./get-regression-nb.xotcl -host swt -sequential 0 # # mit ~/wafe/src/cineast/webserver.xotcl (benotigt ~/wafe/test/*) # ./get-regression-nb.xotcl -port 8086 # |
︙ | ︙ |
Changes to jni/xotcl/apps/comm/get-regression.xotcl.
1 | #!/usr/bin/env tclsh | | | 1 2 3 4 5 6 7 8 9 | #!/usr/bin/env tclsh package require XOTcl 1; namespace import -force xotcl::* package require xotcl::comm::httpAccess package require xotcl::trace persistentCache clear proc assert {f r} { |
︙ | ︙ |
Changes to jni/xotcl/apps/comm/link-checker.xotcl.
1 2 3 | #!/usr/bin/env tclsh # $Id: link-checker.xotcl,v 1.5 2006/09/27 08:12:39 neumann Exp $ # -gn july 2000 | | | 1 2 3 4 5 6 7 8 9 10 11 | #!/usr/bin/env tclsh # $Id: link-checker.xotcl,v 1.5 2006/09/27 08:12:39 neumann Exp $ # -gn july 2000 package require XOTcl 1; namespace import -force xotcl::* @ @File { description { A simple link checking program that checks in parallel pages of a site. <p> Options:<p> |
︙ | ︙ |
Changes to jni/xotcl/apps/comm/secure-webclient.xotcl.
1 2 3 | #!/usr/bin/env tclsh # $Id: secure-webclient.xotcl,v 1.2 2006/02/18 22:17:32 neumann Exp $ | | | 1 2 3 4 5 6 7 8 9 10 11 | #!/usr/bin/env tclsh # $Id: secure-webclient.xotcl,v 1.2 2006/02/18 22:17:32 neumann Exp $ package require XOTcl 1; namespace import -force xotcl::* @ @File { description { A sample secure web client that queries an secure web-server. It needs to be adopted with different https URLs for testing... } } |
︙ | ︙ |
Changes to jni/xotcl/apps/comm/secure-webserver.xotcl.
1 2 | #!/usr/bin/env tclsh # $Id: secure-webserver.xotcl,v 1.2 2006/02/18 22:17:32 neumann Exp $ | | | 1 2 3 4 5 6 7 8 9 10 | #!/usr/bin/env tclsh # $Id: secure-webserver.xotcl,v 1.2 2006/02/18 22:17:32 neumann Exp $ package require XOTcl 1; namespace import -force xotcl::* @ @File { description { This small secure web server that provides its documents via SSL (https, port 8443) and plain http (port 8086). <br> This file requires TLS. If you experice problems with |
︙ | ︙ |
Changes to jni/xotcl/apps/comm/webclient.xotcl.
1 | #!../../src/xotclsh | | | 1 2 3 4 5 6 7 | #!../../src/xotclsh package require XOTcl 1; namespace import -force xotcl::* @ @File {description {For a sample webclient, see packages/comm/xocomm.test}} package require xotcl::comm::httpAccess set hostport localhost:8086 SimpleRequest r0 -url http://$hostport/logo-100.jpg |
Changes to jni/xotcl/apps/comm/webserver.xotcl.
1 2 3 4 5 6 | #!../../src/xotclsh # $Id: webserver.xotcl,v 1.9 2007/08/14 16:38:26 neumann Exp $ array set opts {-root ../../doc -port 8086 -protected-port 9096 -pkgdir .} array set opts $argv lappend auto_path $opts(-pkgdir) #if {$::tcl_platform(platform) eq "windows"} {lappend auto_path .} | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!../../src/xotclsh # $Id: webserver.xotcl,v 1.9 2007/08/14 16:38:26 neumann Exp $ array set opts {-root ../../doc -port 8086 -protected-port 9096 -pkgdir .} array set opts $argv lappend auto_path $opts(-pkgdir) #if {$::tcl_platform(platform) eq "windows"} {lappend auto_path .} package require XOTcl 1 1; namespace import -force xotcl::* proc ! string { set f [open [::xotcl::tmpdir]/log w+]; puts $f "[clock format [clock seconds]] $string" close $f } |
︙ | ︙ |
Changes to jni/xotcl/apps/persistence/persistenceTest.xotcl.
1 | #!../../src/xotclsh | | | 1 2 3 4 5 6 7 8 9 | #!../../src/xotclsh package require XOTcl 1; namespace import -force xotcl::* package require xotcl::store::persistence package require xotcl::mixinStrategy PersistenceMgr jufpMgr PersistenceMgr tclpMgr -dbPackage TclGdbm Class PersistenceTest -parameter {{countVar 0} {appendVar ""} pm} |
︙ | ︙ |
Changes to jni/xotcl/apps/scripts/parameter.xotcl.
1 2 3 4 5 6 7 | ### Sample file for parameter testing.... ### For every class "-parameter" can be specified which accepts ### a list of parameter specifications. ### ### * If a parameter specification consists of a single word, ### the word is considered as the parameter name and ### a standard setter/getter method with this name is created. | > | 1 2 3 4 5 6 7 8 | # -*- Tcl -*- ### Sample file for parameter testing.... ### For every class "-parameter" can be specified which accepts ### a list of parameter specifications. ### ### * If a parameter specification consists of a single word, ### the word is considered as the parameter name and ### a standard setter/getter method with this name is created. |
︙ | ︙ |
Changes to jni/xotcl/apps/scripts/soccerClub.xotcl.
1 2 3 4 5 | # $Id: soccerClub.xotcl,v 1.7 2007/08/14 16:38:26 neumann Exp $ # This is a simple introductory example for the language XOTcl. # It demonstrates the basic language constructs on the example of # a soccer club. | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | # $Id: soccerClub.xotcl,v 1.7 2007/08/14 16:38:26 neumann Exp $ # This is a simple introductory example for the language XOTcl. # It demonstrates the basic language constructs on the example of # a soccer club. package require XOTcl 1; namespace import -force xotcl::* # All the characters in this example are fictitious, and any # resemblance to actual persons, living or deceased, is coincidental. # In XOTcl we do not have to provide the above file description # as a comment, but we can use the @ object, which is used generally # to provide any kind of information, metadata, and documentation on |
︙ | ︙ |
Changes to jni/xotcl/apps/utils/xo-daemon.
1 | #!/usr/bin/env tclsh | | | 1 2 3 4 5 6 7 8 9 | #!/usr/bin/env tclsh package require XOTcl 1; namespace import -force xotcl::* @ @File { description { This script can be used to start/stop/restart xotcl daemons and maintains the process IDs, log files and means for easy restart. <@p> |
︙ | ︙ |
Changes to jni/xotcl/apps/utils/xo-whichPkg.
1 2 | #!/usr/bin/env tclsh # $Id: xo-whichPkg,v 1.2 2006/02/18 22:17:32 neumann Exp $ | | | 1 2 3 4 5 6 7 8 9 10 | #!/usr/bin/env tclsh # $Id: xo-whichPkg,v 1.2 2006/02/18 22:17:32 neumann Exp $ package require XOTcl 1; namespace import -force xotcl::* @ @File { description { A small sample script to show which package is loaded from where when a target package is loaded. <@p> Usage: "xo-whichPkg -pkg PACKAGENAME" } |
︙ | ︙ |
Changes to jni/xotcl/apps/utils/xotclsh.in.
1 2 3 4 | #!@TCLSH_PROG@ if {$argc == 0} { puts "Don't use [info script] as interactive shell! Use instead:" puts " @TCLSH_PROG@" | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | #!@TCLSH_PROG@ if {$argc == 0} { puts "Don't use [info script] as interactive shell! Use instead:" puts " @TCLSH_PROG@" puts " package require XOTcl 1; namespace import ::xotcl::*" } else { package require XOTcl 1 namespace import ::xotcl::* set argv0 [lindex $argv 0] set argv [lreplace $argv 0 0] incr argc -1 source $argv0 } |
Changes to jni/xotcl/apps/utils/xowish.in.
1 2 3 4 5 6 | #!@WISH_PROG@ ###!@TCLSH_PROG@ ###package require Tk if {$argc == 0} { puts "Don't use [info script] as interactive shell! Use instead:" puts " @WISH_PROG@" | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!@WISH_PROG@ ###!@TCLSH_PROG@ ###package require Tk if {$argc == 0} { puts "Don't use [info script] as interactive shell! Use instead:" puts " @WISH_PROG@" puts " package require XOTcl 1 1; namespace import ::xotcl::*" exit } else { package require XOTcl 1 namespace import ::xotcl::* set argv0 [lindex $argv 0] set argv [lreplace $argv 0 0] incr argc -1 source $argv0 } ###catch {vwait forever} |
Changes to jni/xotcl/apps/xml/rdfExample.xotcl.
1 2 3 4 5 | #!/usr/bin/env tclsh # $Id: rdfExample.xotcl,v 1.2 2006/02/18 22:17:33 neumann Exp $ # # small Example for usage of xoXML # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/usr/bin/env tclsh # $Id: rdfExample.xotcl,v 1.2 2006/02/18 22:17:33 neumann Exp $ # # small Example for usage of xoXML # package require XOTcl 1; namespace import -force xotcl::* package require xotcl::package package require xotcl::trace package require xotcl::rdf::parser package require xotcl::rdf::recreatorVisitor package require xotcl::xml::printVisitor # |
︙ | ︙ |
Deleted jni/xotcl/config/install-sh.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted jni/xotcl/config/mktar.sh.
|
| < < < < < < < < < < < < < < |
Changes to jni/xotcl/configure.
1 2 | #! /bin/sh # Guess values for system-dependent variables and create Makefiles. | | > < < > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for xotcl 1.6.8. # # Report bugs to <xotcl@alice.wu-wien.ac.at>. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## |
︙ | ︙ | |||
130 131 132 133 134 135 136 137 138 139 140 141 142 143 | export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' | > > > > > > > > > > > > > > > > > > > > > > > > > | 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' |
︙ | ︙ | |||
163 164 165 166 167 168 169 | as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi | | > | 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 | as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes |
︙ | ︙ | |||
208 209 210 211 212 213 214 | { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : | > | | | | | | | < | | | | | | | > > > > | > | | | | 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 | { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: xotcl@alice.wu-wien.ac.at about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL |
︙ | ︙ | |||
324 325 326 327 328 329 330 331 332 333 334 335 336 337 | test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : | > > > > > > > > | 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 | test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : |
︙ | ︙ | |||
445 446 447 448 449 450 451 452 453 454 455 456 457 458 | s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } | > > > > | 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 | s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } |
︙ | ︙ | |||
479 480 481 482 483 484 485 | fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. | | | | | < | < < < < < < < < < < < < < < < < < < < | | 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 | fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" |
︙ | ︙ | |||
553 554 555 556 557 558 559 | subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='xotcl' PACKAGE_TARNAME='xotcl' | | | | | 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 | subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='xotcl' PACKAGE_TARNAME='xotcl' PACKAGE_VERSION='1.6.8' PACKAGE_STRING='xotcl 1.6.8' PACKAGE_BUGREPORT='xotcl@alice.wu-wien.ac.at' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include <stdio.h> #ifdef HAVE_SYS_TYPES_H # include <sys/types.h> |
︙ | ︙ | |||
595 596 597 598 599 600 601 602 603 604 605 606 607 608 | # include <stdint.h> #endif #ifdef HAVE_UNISTD_H # include <unistd.h> #endif" ac_subst_vars='LTLIBOBJS CONFIG_CLEAN_FILES TEA_PLATFORM apps_actiweb libdirs_actiweb test_actiweb XOTCL_BUILD_INCLUDE_SPEC XOTCL_BUILD_INCLUDE_DIR | > | 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 | # include <stdint.h> #endif #ifdef HAVE_UNISTD_H # include <unistd.h> #endif" ac_subst_vars='LTLIBOBJS LIBOBJS CONFIG_CLEAN_FILES TEA_PLATFORM apps_actiweb libdirs_actiweb test_actiweb XOTCL_BUILD_INCLUDE_SPEC XOTCL_BUILD_INCLUDE_DIR |
︙ | ︙ | |||
619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 | SHARED_LIB_SUFFIX pkgincludedir pkglibdir pkgdatadir PKG_DIR XOTCL_COMPATIBLE_TCLSH TCLSH_PROG RANLIB_STUB MAKE_STUB_LIB MAKE_STATIC_LIB MAKE_SHARED_LIB MAKE_LIB TCL_DBGX LDFLAGS_DEFAULT CFLAGS_DEFAULT LD_LIBRARY_PATH_VAR SHLIB_CFLAGS SHLIB_LD_LIBS SHLIB_LD STLIB_LD CFLAGS_WARNING CFLAGS_OPTIMIZE CFLAGS_DEBUG | > > < < > < | | | > < < < < < | > > > > > > > > | 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 | SHARED_LIB_SUFFIX pkgincludedir pkglibdir pkgdatadir PKG_DIR XOTCL_COMPATIBLE_TCLSH TCLSH_PROG VC_MANIFEST_EMBED_EXE VC_MANIFEST_EMBED_DLL RANLIB_STUB MAKE_STUB_LIB MAKE_STATIC_LIB MAKE_SHARED_LIB MAKE_LIB TCL_DBGX LDFLAGS_DEFAULT CFLAGS_DEFAULT LD_LIBRARY_PATH_VAR SHLIB_CFLAGS SHLIB_LD_LIBS SHLIB_LD STLIB_LD CFLAGS_WARNING CFLAGS_OPTIMIZE CFLAGS_DEBUG RC CELIB_DIR AR SHARED_BUILD TCL_THREADS TCL_TOP_DIR_NATIVE TCL_INCLUDES PKG_OBJECTS PKG_SOURCES aol_prefix MATH_LIBS EGREP GREP RANLIB SET_MAKE INSTALL_SCRIPT INSTALL_PROGRAM INSTALL_DATA INSTALL CPP TK_INCLUDES TK_XINCLUDES TK_LIBS TK_STUB_LIB_SPEC TK_STUB_LIB_FLAG TK_STUB_LIB_FILE TK_LIB_SPEC TK_LIB_FLAG TK_LIB_FILE TK_SRC_DIR TK_BIN_DIR TK_VERSION TCL_SHLIB_LD_LIBS TCL_LD_FLAGS TCL_EXTRA_CFLAGS TCL_DEFS TCL_LIBS CLEANFILES OBJEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC TCL_STUB_LIB_SPEC TCL_STUB_LIB_FLAG TCL_STUB_LIB_FILE TCL_LIB_SPEC TCL_LIB_FLAG TCL_LIB_FILE TCL_SRC_DIR TCL_BIN_DIR TCL_PATCH_LEVEL TCL_VERSION XOTCL_RELEASE_LEVEL XOTCL_MINOR_VERSION XOTCL_MAJOR_VERSION XOTCL_VERSION subdirs PKG_CFLAGS |
︙ | ︙ | |||
753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 | with_actiweb with_xotclsh with_xowish with_all with_expat with_tcl with_tk with_tclinclude enable_threads enable_shared enable_64bit enable_64bit_vis enable_rpath enable_wince with_celib | > < | 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 | with_actiweb with_xotclsh with_xowish with_all with_expat with_tcl with_tk with_tkinclude with_tclinclude enable_threads enable_shared enable_64bit enable_64bit_vis enable_rpath enable_wince with_celib enable_symbols ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS |
︙ | ︙ | |||
1228 1229 1230 1231 1232 1233 1234 | host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe | < < | 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 | host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- |
︙ | ︙ | |||
1315 1316 1317 1318 1319 1320 1321 | # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF | | | 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 | # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures xotcl 1.6.8 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. |
︙ | ︙ | |||
1376 1377 1378 1379 1380 1381 1382 | cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in | | < < | 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 | cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of xotcl 1.6.8:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-threads build with threads --enable-shared build and link with shared libraries (default: on) --enable-64bit enable 64bit support (default: off) --enable-64bit-vis enable 64bit Sparc VIS support (default: off) --disable-rpath disable rpath support (default: on) --enable-wince enable Win/CE support (where applicable) --enable-symbols build with debugging symbols (default: off) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gdbm=GDBM_INCLUDE_DIR,GDBM_LIB_DIR absolute path to gdbm.h and optionally the path to the library, |
︙ | ︙ | |||
1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 | --without-all disables built of all --with-expat=sys assumes a system-wide expat installation, --with-expat=<INC_DIR,LIB_DIR> point to a custom expat installation, --without-expat falls back to the bundled expat installation --with-tcl directory containing tcl configuration (tclConfig.sh) --with-tk directory containing tk configuration (tkConfig.sh) --with-tclinclude directory containing the public Tcl header files --with-celib=DIR use Windows/CE support library from DIR Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. | > | | 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 | --without-all disables built of all --with-expat=sys assumes a system-wide expat installation, --with-expat=<INC_DIR,LIB_DIR> point to a custom expat installation, --without-expat falls back to the bundled expat installation --with-tcl directory containing tcl configuration (tclConfig.sh) --with-tk directory containing tk configuration (tkConfig.sh) --with-tkinclude directory containing the public Tk header files --with-tclinclude directory containing the public Tcl header files --with-celib=DIR use Windows/CE support library from DIR Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to <xotcl@alice.wu-wien.ac.at>. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue |
︙ | ︙ | |||
1495 1496 1497 1498 1499 1500 1501 | cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF | | | | | 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 | cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF xotcl configure 1.6.8 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## |
︙ | ︙ | |||
1684 1685 1686 1687 1688 1689 1690 | fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || | | | 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 | fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 |
︙ | ︙ | |||
1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 | $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. | > > > > | | | 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 | $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ---------------------------------------- ## ## Report this to xotcl@alice.wu-wien.ac.at ## ## ---------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by xotcl $as_me 1.6.8, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME |
︙ | ︙ | |||
2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 | ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. # This will define a ${TEA_PLATFORM} variable == "unix" or "windows". #-------------------------------------------------------------------- # TEA extensions pass this us the version of TEA they think they # are compatible with. | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | | | > > > > > > > | | 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 | ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in tclconfig "$srcdir"/tclconfig; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in tclconfig \"$srcdir\"/tclconfig" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. # This will define a ${TEA_PLATFORM} variable == "unix" or "windows". #-------------------------------------------------------------------- # TEA extensions pass this us the version of TEA they think they # are compatible with. TEA_VERSION="3.9" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for correct TEA configuration" >&5 $as_echo_n "checking for correct TEA configuration... " >&6; } if test x"${PACKAGE_NAME}" = x ; then as_fn_error $? " The PACKAGE_NAME variable must be defined by your TEA configure.in" "$LINENO" 5 fi if test x"3.9" = x ; then as_fn_error $? " TEA version not specified." "$LINENO" 5 elif test "3.9" != "${TEA_VERSION}" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: warning: requested TEA version \"3.9\", have \"${TEA_VERSION}\"" >&5 $as_echo "warning: requested TEA version \"3.9\", have \"${TEA_VERSION}\"" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok (TEA ${TEA_VERSION})" >&5 $as_echo "ok (TEA ${TEA_VERSION})" >&6; } fi # If the user did not set CFLAGS, set it now to keep macros # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2". if test "${CFLAGS+set}" != "set" ; then CFLAGS="" fi case "`uname -s`" in *win32*|*WIN32*|*MINGW32_*) # Extract the first word of "cygpath", so it can be a program name with args. set dummy cygpath; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CYGPATH+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CYGPATH"; then ac_cv_prog_CYGPATH="$CYGPATH" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CYGPATH="cygpath -w" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS |
︙ | ︙ | |||
2279 2280 2281 2282 2283 2284 2285 | fi EXEEXT=".exe" TEA_PLATFORM="windows" ;; *CYGWIN_*) | | > > > > > > > > | | > > > > > < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 | fi EXEEXT=".exe" TEA_PLATFORM="windows" ;; *CYGWIN_*) CYGPATH=echo EXEEXT=".exe" # TEA_PLATFORM is determined later in LOAD_TCLCONFIG ;; *) CYGPATH=echo # Maybe we are cross-compiling.... case ${host_alias} in *mingw32*) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *) EXEEXT="" TEA_PLATFORM="unix" ;; esac ;; esac # Check if exec_prefix is set. If not use fall back to prefix. # Note when adjusted, so that TEA_PREFIX can correct for this. # This is needed for recursive configures, since autoconf propagates # $prefix, but not $exec_prefix (doh!). if test x$exec_prefix = xNONE ; then exec_prefix_default=yes exec_prefix=$prefix fi { $as_echo "$as_me:${as_lineno-$LINENO}: configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" >&5 $as_echo "$as_me: configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" >&6;} # This package name must be replaced statically for AC_SUBST to work # Substitute STUB_LIB_FILE in case package creates a stub library too. # We AC_SUBST these here to ensure they are subst'ed, # in case the user doesn't call TEA_ADD_... #-------------------------------------------------------------------- # specify some extra flags #-------------------------------------------------------------------- |
︙ | ︙ | |||
2454 2455 2456 2457 2458 2459 2460 | # dots in library names (Windows). The VERSION variable is used on the # other systems. #-------------------------------------------------------------------- # do not modify the following lines manually, they are generated with changeXOTclVersion XOTCL_MAJOR_VERSION=1 XOTCL_MINOR_VERSION=6 | | | 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 | # dots in library names (Windows). The VERSION variable is used on the # other systems. #-------------------------------------------------------------------- # do not modify the following lines manually, they are generated with changeXOTclVersion XOTCL_MAJOR_VERSION=1 XOTCL_MINOR_VERSION=6 XOTCL_RELEASE_LEVEL=.8 XOTCL_VERSION=${XOTCL_MAJOR_VERSION}.${XOTCL_MINOR_VERSION} NODOT_VERSION=${XOTCL_MAJOR_VERSION}${XOTCL_MINOR_VERSION} |
︙ | ︙ | |||
2484 2485 2486 2487 2488 2489 2490 | if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true # Check whether --with-tcl was given. if test "${with_tcl+set}" = set; then : | | | | | | | 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 | if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true # Check whether --with-tcl was given. if test "${with_tcl+set}" = set; then : withval=$with_tcl; with_tclconfig="${withval}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tcl configuration" >&5 $as_echo_n "checking for Tcl configuration... " >&6; } if ${ac_cv_c_tclconfig+:} false; then : $as_echo_n "(cached) " >&6 else # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then case "${with_tclconfig}" in */tclConfig.sh ) if test -f "${with_tclconfig}"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&5 $as_echo "$as_me: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&2;} with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`" fi ;; esac if test -f "${with_tclconfig}/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`" else as_fn_error $? "${with_tclconfig} directory doesn't contain tclConfig.sh" "$LINENO" 5 fi fi # then check for a private Tcl installation if test x"${ac_cv_c_tclconfig}" = x ; then |
︙ | ︙ | |||
2528 2529 2530 2531 2532 2533 2534 | `ls -dr ../../tcl[8-9].[0-9]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../../tcl[8-9].[0-9]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then | | | | | > > > | | | | | | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | | 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 | `ls -dr ../../tcl[8-9].[0-9]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../../tcl[8-9].[0-9]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tcl.framework/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ `ls -d /usr/lib/tcl8.6 2>/dev/null` \ `ls -d /usr/lib/tcl8.5 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ${srcdir}/../tcl \ `ls -dr ${srcdir}/../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[8-9].[0-9]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi fi if test x"${ac_cv_c_tclconfig}" = x ; then TCL_BIN_DIR="# no Tcl configs found" as_fn_error $? "Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh" "$LINENO" 5 else no_tcl= TCL_BIN_DIR="${ac_cv_c_tclconfig}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: found ${TCL_BIN_DIR}/tclConfig.sh" >&5 $as_echo "found ${TCL_BIN_DIR}/tclConfig.sh" >&6; } fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 |
︙ | ︙ | |||
3155 3156 3157 3158 3159 3160 3161 | else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do | | | 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 | else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS |
︙ | ︙ | |||
3195 3196 3197 3198 3199 3200 3201 | else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do | | | 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 | else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS |
︙ | ︙ | |||
3248 3249 3250 3251 3252 3253 3254 | else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do | | | 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 | else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS |
︙ | ︙ | |||
3289 3290 3291 3292 3293 3294 3295 | ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do | | | 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 | ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 |
︙ | ︙ | |||
3347 3348 3349 3350 3351 3352 3353 | else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do | | | 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 | else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS |
︙ | ︙ | |||
3391 3392 3393 3394 3395 3396 3397 | else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do | | | 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 | else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS |
︙ | ︙ | |||
3837 3838 3839 3840 3841 3842 3843 | else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdarg.h> #include <stdio.h> | > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 | else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdarg.h> #include <stdio.h> struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for existence of ${TCL_BIN_DIR}/tclConfig.sh" >&5 $as_echo_n "checking for existence of ${TCL_BIN_DIR}/tclConfig.sh... " >&6; } if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: loading" >&5 $as_echo "loading" >&6; } . "${TCL_BIN_DIR}/tclConfig.sh" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not find ${TCL_BIN_DIR}/tclConfig.sh" >&5 $as_echo "could not find ${TCL_BIN_DIR}/tclConfig.sh" >&6; } fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\"" eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\"" # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TCL_BIN_DIR}/Makefile" ; then TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}" TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}" TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tcl.framework installed in an arbitrary location. case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then for i in "`cd "${TCL_BIN_DIR}"; pwd`" \ "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}" break fi done fi if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}" TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" { $as_echo "$as_me:${as_lineno-$LINENO}: checking platform" >&5 $as_echo_n "checking platform... " >&6; } hold_cc=$CC; CC="$TCL_CC" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifdef _WIN32 #error win32 #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : TEA_PLATFORM="unix" else TEA_PLATFORM="windows" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CC=$hold_cc { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEA_PLATFORM" >&5 $as_echo "$TEA_PLATFORM" >&6; } # The BUILD_$pkg is to define the correct extern storage class # handling when making this package cat >>confdefs.h <<_ACEOF #define BUILD_${PACKAGE_NAME} /**/ _ACEOF # Do this here as we have fully defined TEA_PLATFORM now if test "${TEA_PLATFORM}" = "windows" ; then EXEEXT=".exe" CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp" fi # TEA specific: #-------------------------------------------------------------------- # check for TK #-------------------------------------------------------------------- if test "$with_xowish" = yes; then # # Ok, lets find the tk configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tk # if test x"${no_tk}" = x ; then # we reset no_tk in case something fails here no_tk=true # Check whether --with-tk was given. if test "${with_tk+set}" = set; then : withval=$with_tk; with_tkconfig="${withval}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tk configuration" >&5 $as_echo_n "checking for Tk configuration... " >&6; } if ${ac_cv_c_tkconfig+:} false; then : $as_echo_n "(cached) " >&6 else # First check to see if --with-tkconfig was specified. if test x"${with_tkconfig}" != x ; then case "${with_tkconfig}" in */tkConfig.sh ) if test -f "${with_tkconfig}"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself" >&5 $as_echo "$as_me: WARNING: --with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself" >&2;} with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`" fi ;; esac if test -f "${with_tkconfig}/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`" else as_fn_error $? "${with_tkconfig} directory doesn't contain tkConfig.sh" "$LINENO" 5 fi fi # then check for a private Tk library if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ../tk \ `ls -dr ../tk[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../tk[8-9].[0-9] 2>/dev/null` \ `ls -dr ../tk[8-9].[0-9]* 2>/dev/null` \ ../../tk \ `ls -dr ../../tk[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../tk[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../tk[8-9].[0-9]* 2>/dev/null` \ ../../../tk \ `ls -dr ../../../tk[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../../tk[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../../tk[8-9].[0-9]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tk.framework/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ${srcdir}/../tk \ `ls -dr ${srcdir}/../tk[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ${srcdir}/../tk[8-9].[0-9] 2>/dev/null` \ `ls -dr ${srcdir}/../tk[8-9].[0-9]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi fi if test x"${ac_cv_c_tkconfig}" = x ; then TK_BIN_DIR="# no Tk configs found" as_fn_error $? "Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh" "$LINENO" 5 else no_tk= TK_BIN_DIR="${ac_cv_c_tkconfig}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: found ${TK_BIN_DIR}/tkConfig.sh" >&5 $as_echo "found ${TK_BIN_DIR}/tkConfig.sh" >&6; } fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for existence of ${TK_BIN_DIR}/tkConfig.sh" >&5 $as_echo_n "checking for existence of ${TK_BIN_DIR}/tkConfig.sh... " >&6; } if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: loading" >&5 $as_echo "loading" >&6; } . "${TK_BIN_DIR}/tkConfig.sh" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not find ${TK_BIN_DIR}/tkConfig.sh" >&5 $as_echo "could not find ${TK_BIN_DIR}/tkConfig.sh" >&6; } fi # eval is required to do the TK_DBGX substitution eval "TK_LIB_FILE=\"${TK_LIB_FILE}\"" eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\"" # If the TK_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TK_LIB_SPEC will be set to the value # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC # instead of TK_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TK_BIN_DIR}/Makefile" ; then TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}" TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}" TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tk.framework installed in an arbitrary location. case ${TK_DEFS} in *TK_FRAMEWORK*) if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then for i in "`cd "${TK_BIN_DIR}"; pwd`" \ "`cd "${TK_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}" break fi done fi if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}" TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TK_DBGX substitution eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\"" eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\"" eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\"" eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\"" # TEA specific: Ensure windowingsystem is defined if test "${TEA_PLATFORM}" = "unix" ; then case ${TK_DEFS} in *MAC_OSX_TK*) $as_echo "#define MAC_OSX_TK 1" >>confdefs.h TEA_WINDOWINGSYSTEM="aqua" ;; *) TEA_WINDOWINGSYSTEM="x11" ;; esac elif test "${TEA_PLATFORM}" = "windows" ; then TEA_WINDOWINGSYSTEM="win32" fi # TEA specific: { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tk public headers" >&5 $as_echo_n "checking for Tk public headers... " >&6; } # Check whether --with-tkinclude was given. if test "${with_tkinclude+set}" = set; then : withval=$with_tkinclude; with_tkinclude=${withval} fi if ${ac_cv_c_tkh+:} false; then : $as_echo_n "(cached) " >&6 else # Use the value from --with-tkinclude, if it was given if test x"${with_tkinclude}" != x ; then if test -f "${with_tkinclude}/tk.h" ; then ac_cv_c_tkh=${with_tkinclude} else as_fn_error $? "${with_tkinclude} directory does not contain tk.h" "$LINENO" 5 fi else list="" if test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use # the framework's Headers directory. case ${TK_DEFS} in *TK_FRAMEWORK*) list="`ls -d ${TK_BIN_DIR}/Headers 2>/dev/null`" ;; esac fi # Look in the source dir only if Tk is not installed, # and in that situation, look there before installed locations. if test -f "${TK_BIN_DIR}/Makefile" ; then list="$list `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`" fi # Check order: pkg --prefix location, Tk's --prefix location, # relative to directory of tkConfig.sh, Tcl's --prefix location, # relative to directory of tclConfig.sh. eval "temp_includedir=${includedir}" list="$list \ `ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TK_PREFIX}/include 2>/dev/null` \ `ls -d ${TK_BIN_DIR}/../include 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" if test x"${TK_INCLUDE_SPEC}" != x ; then d=`echo "${TK_INCLUDE_SPEC}" | sed -e 's/^-I//'` list="$list `ls -d ${d} 2>/dev/null`" fi fi for i in $list ; do if test -f "$i/tk.h" ; then ac_cv_c_tkh=$i break fi done fi fi # Print a message based on how we determined the include path if test x"${ac_cv_c_tkh}" = x ; then as_fn_error $? "tk.h not found. Please specify its location with --with-tkinclude" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_cv_c_tkh}" >&5 $as_echo "${ac_cv_c_tkh}" >&6; } fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}` TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then # On Windows and Aqua, we need the X compat headers { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X11 header files" >&5 $as_echo_n "checking for X11 header files... " >&6; } if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`" TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${INCLUDE_DIR_NATIVE}" >&5 $as_echo "${INCLUDE_DIR_NATIVE}" >&6; } fi # TEA_PATH_X fi #-------------------------------------------------------------------- # Handle the --prefix=... option by defaulting to what Tcl gave. # Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER. #----------------------------------------------------------------------- if test "${prefix}" = "NONE"; then prefix_default=yes if test x"${TCL_PREFIX}" != x; then { $as_echo "$as_me:${as_lineno-$LINENO}: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&5 $as_echo "$as_me: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&6;} prefix=${TCL_PREFIX} else { $as_echo "$as_me:${as_lineno-$LINENO}: --prefix defaulting to /usr/local" >&5 $as_echo "$as_me: --prefix defaulting to /usr/local" >&6;} prefix=/usr/local fi fi if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \ -o x"${exec_prefix_default}" = x"yes" ; then if test x"${TCL_EXEC_PREFIX}" != x; then { $as_echo "$as_me:${as_lineno-$LINENO}: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&5 $as_echo "$as_me: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&6;} exec_prefix=${TCL_EXEC_PREFIX} else { $as_echo "$as_me:${as_lineno-$LINENO}: --exec-prefix defaulting to ${prefix}" >&5 $as_echo "$as_me: --exec-prefix defaulting to ${prefix}" >&6;} exec_prefix=$prefix fi fi #----------------------------------------------------------------------- # Standard compiler checks. # This sets up CC by using the CC env var, or looks for gcc otherwise. # This also calls AC_PROG_CC, AC_PROG_INSTALL and a few others to create # the basic setup necessary to compile executables. #----------------------------------------------------------------------- # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdarg.h> #include <stdio.h> struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { |
︙ | ︙ | |||
4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 | ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu #-------------------------------------------------------------------- # Checks to see if the make program sets the $MAKE variable. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 | > > > > > > > | 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 | ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu INSTALL="\$(SHELL) \$(srcdir)/tclconfig/install-sh -c" INSTALL_DATA="\${INSTALL} -m 644" INSTALL_PROGRAM="\${INSTALL}" INSTALL_SCRIPT="\${INSTALL}" #-------------------------------------------------------------------- # Checks to see if the make program sets the $MAKE variable. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 |
︙ | ︙ | |||
4120 4121 4122 4123 4124 4125 4126 | else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do | | | 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 | else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS |
︙ | ︙ | |||
4160 4161 4162 4163 4164 4165 4166 | else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do | | | | 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 | else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac |
︙ | ︙ | |||
4204 4205 4206 4207 4208 4209 4210 | # Determines the correct binary file extension (.o, .obj, .exe etc.) #-------------------------------------------------------------------- | < | | 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 | # Determines the correct binary file extension (.o, .obj, .exe etc.) #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 |
︙ | ︙ | |||
4287 4288 4289 4290 4291 4292 4293 | for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" | | | 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 | for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 |
︙ | ︙ | |||
5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 | ;; *) # check for existence - allows for generic/win/unix VPATH # To add more dirs here (like 'src'), you have to update VPATH # in Makefile.in as well if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ ; then as_fn_error $? "could not find source file '$i'" "$LINENO" 5 fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER | > | 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 | ;; *) # check for existence - allows for generic/win/unix VPATH # To add more dirs here (like 'src'), you have to update VPATH # in Makefile.in as well if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then as_fn_error $? "could not find source file '$i'" "$LINENO" 5 fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER |
︙ | ︙ | |||
5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 | vars="xotclStubLib.c" for i in $vars; do # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ ; then as_fn_error $? "could not find stub source file '$i'" "$LINENO" 5 fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER | > | 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 | vars="xotclStubLib.c" for i in $vars; do # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then as_fn_error $? "could not find stub source file '$i'" "$LINENO" 5 fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER |
︙ | ︙ | |||
5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 | #-------------------------------------------------------------------- # This macro figures out what flags to use with the compiler/linker # when building shared/static debug/optimized objects. This information # can be taken from the tclConfig.sh file, but this figures it all out. #-------------------------------------------------------------------- # Step 0.a: Enable 64 bit support? { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 64bit support is requested" >&5 $as_echo_n "checking if 64bit support is requested... " >&6; } | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 | #-------------------------------------------------------------------- # This macro figures out what flags to use with the compiler/linker # when building shared/static debug/optimized objects. This information # can be taken from the tclConfig.sh file, but this figures it all out. #-------------------------------------------------------------------- if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi # Step 0.a: Enable 64 bit support? { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 64bit support is requested" >&5 $as_echo_n "checking if 64bit support is requested... " >&6; } |
︙ | ︙ | |||
5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_visibility_hidden" >&5 $as_echo "$tcl_cv_cc_visibility_hidden" >&6; } if test $tcl_cv_cc_visibility_hidden = yes; then : $as_echo "#define MODULE_SCOPE extern __attribute__((__visibility__(\"hidden\")))" >>confdefs.h fi # Step 0.d: Disable -rpath support? { $as_echo "$as_me:${as_lineno-$LINENO}: checking if rpath support is requested" >&5 $as_echo_n "checking if rpath support is requested... " >&6; } | > > > | 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_visibility_hidden" >&5 $as_echo "$tcl_cv_cc_visibility_hidden" >&6; } if test $tcl_cv_cc_visibility_hidden = yes; then : $as_echo "#define MODULE_SCOPE extern __attribute__((__visibility__(\"hidden\")))" >>confdefs.h $as_echo "#define HAVE_HIDDEN 1" >>confdefs.h fi # Step 0.d: Disable -rpath support? { $as_echo "$as_me:${as_lineno-$LINENO}: checking if rpath support is requested" >&5 $as_echo_n "checking if rpath support is requested... " >&6; } |
︙ | ︙ | |||
6024 6025 6026 6027 6028 6029 6030 | fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $doWince" >&5 $as_echo "$doWince" >&6; } fi | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | | < > > < < < > > | > < < < > | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 | fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $doWince" >&5 $as_echo "$doWince" >&6; } fi # Set the variable "system" to hold the name and version number # for the system. { $as_echo "$as_me:${as_lineno-$LINENO}: checking system version" >&5 $as_echo_n "checking system version... " >&6; } if ${tcl_cv_sys_version+:} false; then : $as_echo_n "(cached) " >&6 else # TEA specific: if test "${TEA_PLATFORM}" = "windows" ; then tcl_cv_sys_version=windows else tcl_cv_sys_version=`uname -s`-`uname -r` if test "$?" -ne 0 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: can't find uname command" >&5 $as_echo "$as_me: WARNING: can't find uname command" >&2;} tcl_cv_sys_version=unknown else if test "`uname -s`" = "AIX" ; then tcl_cv_sys_version=AIX-`uname -v`.`uname -r` fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_sys_version" >&5 $as_echo "$tcl_cv_sys_version" >&6; } system=$tcl_cv_sys_version # Require ranlib early so we can override it in special cases below. # Set configuration options based on system name and version. # This is similar to Tcl's unix/tcl.m4 except that we've added a # "windows" case and removed some core-only vars. do64bit_ok=no # default to '{$LIBS}' and set to "" on per-platform necessary basis SHLIB_LD_LIBS='${LIBS}' # When ld needs options to work in 64-bit mode, put them in # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load] # is disabled by the user. [Bug 1016796] LDFLAGS_ARCH="" UNSHARED_LIB_SUFFIX="" # TEA specific: use PACKAGE_VERSION instead of VERSION TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' ECHO_VERSION='`echo ${PACKAGE_VERSION}`' TCL_LIB_VERSIONS_OK=ok CFLAGS_DEBUG=-g if test "$GCC" = yes; then : CFLAGS_OPTIMIZE=-O2 CFLAGS_WARNING="-Wall" else CFLAGS_OPTIMIZE=-O CFLAGS_WARNING="" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi STLIB_LD='${AR} cr' LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" if test "x$SHLIB_VERSION" = x; then : SHLIB_VERSION="1.0" fi case $system in |
︙ | ︙ | |||
6211 6212 6213 6214 6215 6216 6217 | PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac | | | 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 | PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find 64-bit $MACHINE SDK to enable 64bit mode" >&5 $as_echo "$as_me: WARNING: Could not find 64-bit $MACHINE SDK to enable 64bit mode" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ensure latest Platform SDK is installed" >&5 $as_echo "$as_me: WARNING: Ensure latest Platform SDK is installed" >&2;} do64bit="no" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using 64-bit $MACHINE mode" >&5 |
︙ | ︙ | |||
6412 6413 6414 6415 6416 6417 6418 | lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" else RC="rc" lflags="-nologo" | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 | lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" else RC="rc" lflags="-nologo" LINKBIN="link" CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" fi fi if test "$GCC" = "yes"; then # mingw gcc mode if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RC"; then ac_cv_prog_RC="$RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RC="${ac_tool_prefix}windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RC=$ac_cv_prog_RC if test -n "$RC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 $as_echo "$RC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RC"; then ac_ct_RC=$RC # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RC"; then ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RC="windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RC=$ac_cv_prog_ac_ct_RC if test -n "$ac_ct_RC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5 $as_echo "$ac_ct_RC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RC" = x; then RC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RC=$ac_ct_RC fi else RC="$ac_cv_prog_RC" fi CFLAGS_DEBUG="-g" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" SHLIB_LD='${CC} -shared' UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cross-compile version of gcc" >&5 $as_echo_n "checking for cross-compile version of gcc... " >&6; } if ${ac_cv_cross+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _WIN32 #error cross-compiler #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_cross=yes else ac_cv_cross=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cross" >&5 $as_echo "$ac_cv_cross" >&6; } if test "$ac_cv_cross" = "yes"; then case "$do64bit" in amd64|x64|yes) CC="x86_64-w64-mingw32-gcc" LD="x86_64-w64-mingw32-ld" AR="x86_64-w64-mingw32-ar" RANLIB="x86_64-w64-mingw32-ranlib" RC="x86_64-w64-mingw32-windres" ;; *) CC="i686-w64-mingw32-gcc" LD="i686-w64-mingw32-ld" AR="i686-w64-mingw32-ar" RANLIB="i686-w64-mingw32-ranlib" RC="i686-w64-mingw32-windres" ;; esac fi else SHLIB_LD="${LINKBIN} -dll ${lflags}" # link -lib only works when -lib is the first arg STLIB_LD="${LINKBIN} -lib ${lflags}" UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' PATHTYPE=-w # For information on what debugtype is most useful, see: |
︙ | ︙ | |||
6449 6450 6451 6452 6453 6454 6455 | LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi | < < < < < | | | 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 | LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi SHLIB_SUFFIX=".dll" SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' TCL_LIB_VERSIONS_OK=nodots ;; AIX-*) if test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"; then : # AIX requires the _r compiler when gcc isn't being used case "${CC}" in *_r|*_r\ *) # ok ... ;; *) # Make sure only first arg gets _r CC=`echo "$CC" | sed -e 's/^\([^ ]*\)/\1_r/'` ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using $CC for compiling with threads" >&5 $as_echo "Using $CC for compiling with threads" >&6; } fi LIBS="$LIBS -lc" SHLIB_CFLAGS="" SHLIB_SUFFIX=".so" LD_LIBRARY_PATH_VAR="LIBPATH" # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = yes; then : if test "$GCC" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;} else |
︙ | ︙ | |||
6507 6508 6509 6510 6511 6512 6513 | fi if test "`uname -m`" = ia64; then : # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC SHLIB_LD="/usr/ccs/bin/ld -G -z text" | < < > | > | > | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 | fi if test "`uname -m`" = ia64; then : # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC SHLIB_LD="/usr/ccs/bin/ld -G -z text" if test "$GCC" = yes; then : CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' else CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' else if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared -Wl,-bexpall' else SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry" LDFLAGS="$LDFLAGS -brtl" fi SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}" CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} fi ;; BeOS*) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -nostart' SHLIB_SUFFIX=".so" #----------------------------------------------------------- # Check for inet_ntoa in -lbind, for BeOS (which also needs # -lsocket, even if the network functions are in -lnet which # is always linked to, for compatibility. #----------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lbind" >&5 |
︙ | ︙ | |||
6669 6670 6671 6672 6673 6674 6675 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bind_inet_ntoa" >&5 $as_echo "$ac_cv_lib_bind_inet_ntoa" >&6; } if test "x$ac_cv_lib_bind_inet_ntoa" = xyes; then : LIBS="$LIBS -lbind -lsocket" fi ;; | < < < < < < < < < < < < < | | | < | < | > < < < | 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bind_inet_ntoa" >&5 $as_echo "$ac_cv_lib_bind_inet_ntoa" >&6; } if test "x$ac_cv_lib_bind_inet_ntoa" = xyes; then : LIBS="$LIBS -lbind -lsocket" fi ;; BSD/OS-4.*) SHLIB_CFLAGS="-export-dynamic -fPIC" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; CYGWIN_*) SHLIB_CFLAGS="" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".dll" EXEEXT=".exe" do64bit_ok=yes CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; Haiku*) LDFLAGS="$LDFLAGS -Wl,--export-dynamic" SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lnetwork" >&5 $as_echo_n "checking for inet_ntoa in -lnetwork... " >&6; } if ${ac_cv_lib_network_inet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnetwork $LIBS" |
︙ | ︙ | |||
6815 6816 6817 6818 6819 6820 6821 | tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = yes; then : | < < < | | 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 | tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = yes; then : LDFLAGS="$LDFLAGS -Wl,-E" CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' LD_LIBRARY_PATH_VAR="SHLIB_PATH" fi if test "$GCC" = yes; then : |
︙ | ︙ | |||
6849 6850 6851 6852 6853 6854 6855 | if test "$GCC" = yes; then : case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' | < | 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 | if test "$GCC" = yes; then : case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ;; *) |
︙ | ︙ | |||
6871 6872 6873 6874 6875 6876 6877 | do64bit_ok=yes CFLAGS="$CFLAGS +DD64" LDFLAGS_ARCH="+DD64" fi fi ;; | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 | do64bit_ok=yes CFLAGS="$CFLAGS +DD64" LDFLAGS_ARCH="+DD64" fi fi ;; IRIX-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' fi if test "$GCC" = yes; then : |
︙ | ︙ | |||
6976 6977 6978 6979 6980 6981 6982 | LDFLAGS="$LDFLAGS -n32" fi ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" | < < < | 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 | LDFLAGS="$LDFLAGS -n32" fi ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' fi # Check to enable 64-bit flags for compiler/linker |
︙ | ︙ | |||
7006 7007 7008 7009 7010 7011 7012 | CFLAGS="$CFLAGS -64" LDFLAGS_ARCH="-64" fi fi ;; | | < < < < < < < | 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 | CFLAGS="$CFLAGS -64" LDFLAGS_ARCH="-64" fi fi ;; Linux*|GNU*|NetBSD-Debian) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" # TEA specific: CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}' LDFLAGS="$LDFLAGS -Wl,--export-dynamic" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} if test "`uname -m`" = "alpha"; then : |
︙ | ︙ | |||
7081 7082 7083 7084 7085 7086 7087 | # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. if test x"${USE_COMPAT}" != x; then : CFLAGS="$CFLAGS -fno-inline" fi | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < | < < < < < < < < | < < | < < < | < < < < < < < < < < < < < < | | < < < < < < < < < < | | | | < | < < | | | | < < < < < | < < | < | | | < < < < < < < < | < < < < | > | | | < < | > < | < | < < < < < < < < < < < | | < < | > > | | | | | > > | 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 | # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. if test x"${USE_COMPAT}" != x; then : CFLAGS="$CFLAGS -fno-inline" fi ;; Lynx*) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" CFLAGS_OPTIMIZE=-02 SHLIB_LD='${CC} -shared' LD_FLAGS="-Wl,--export-dynamic" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi ;; OpenBSD-*) arch=`arch -s` case "$arch" in vax) SHLIB_SUFFIX="" SHARED_LIB_SUFFIX="" LDFLAGS="" ;; *) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' LDFLAGS="-Wl,-export-dynamic" ;; esac case "$arch" in vax) CFLAGS_OPTIMIZE="-O1" ;; *) CFLAGS_OPTIMIZE="-O2" ;; esac if test "${TCL_THREADS}" = "1"; then : # On OpenBSD: Compile with -pthread # Don't link with -lpthread LIBS=`echo $LIBS | sed s/-lpthread//` CFLAGS="$CFLAGS -pthread" fi # OpenBSD doesn't do version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; NetBSD-*) # NetBSD has ELF and can use 'cc -shared' to build shared libs SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} if test "${TCL_THREADS}" = "1"; then : # The -pthread needs to go in the CFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" fi ;; FreeBSD-*) # This configuration from FreeBSD Ports. SHLIB_CFLAGS="-fPIC" SHLIB_LD="${CC} -shared" TCL_SHLIB_LD_EXTRAS="-Wl,-soname=\$@" TK_SHLIB_LD_EXTRAS="-Wl,-soname,\$@" SHLIB_SUFFIX=".so" LDFLAGS="" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi if test "${TCL_THREADS}" = "1"; then : # The -pthread needs to go in the LDFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LDFLAGS="$LDFLAGS $PTHREAD_LIBS" fi case $system in FreeBSD-3.*) # Version numbers are dot-stripped by system policy. TCL_TRIM_DOTS=`echo ${VERSION} | tr -d .` UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so' TCL_LIB_VERSIONS_OK=nodots ;; esac ;; Darwin-*) CFLAGS_OPTIMIZE="-Os" SHLIB_CFLAGS="-fno-common" # To avoid discrepancies between what headers configure sees during # preprocessing tests and compiling tests, move any -isysroot and # -mmacosx-version-min flags from CFLAGS to CPPFLAGS: |
︙ | ︙ | |||
7444 7445 7446 7447 7448 7449 7450 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_single_module" >&5 $as_echo "$tcl_cv_ld_single_module" >&6; } if test $tcl_cv_ld_single_module = yes; then : SHLIB_LD="${SHLIB_LD} -Wl,-single_module" fi | | < < < | 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_single_module" >&5 $as_echo "$tcl_cv_ld_single_module" >&6; } if test $tcl_cv_ld_single_module = yes; then : SHLIB_LD="${SHLIB_LD} -Wl,-single_module" fi # TEA specific: link shlib with current and compatibility version flags vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([0-9]\{1,5\}\)\(\(\.[0-9]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d` SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}" SHLIB_SUFFIX=".dylib" # Don't use -prebind when building for Mac OS X 10.4 or later only: if test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int($2)}'`" -lt 4 -a \ "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int($2)}'`" -lt 4; then : LDFLAGS="$LDFLAGS -prebind" fi LDFLAGS="$LDFLAGS -headerpad_max_install_names" |
︙ | ︙ | |||
7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 | fi if test "$tcl_cv_cc_visibility_hidden" != yes; then : $as_echo "#define MODULE_SCOPE __private_extern__" >>confdefs.h fi CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" # TEA specific: for combined 32 & 64 bit fat builds of Tk # extensions, verify that 64-bit build is possible. | > | 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 | fi if test "$tcl_cv_cc_visibility_hidden" != yes; then : $as_echo "#define MODULE_SCOPE __private_extern__" >>confdefs.h tcl_cv_cc_visibility_hidden=yes fi CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" # TEA specific: for combined 32 & 64 bit fat builds of Tk # extensions, verify that 64-bit build is possible. |
︙ | ︙ | |||
7598 7599 7600 7601 7602 7603 7604 | for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done fi fi ;; | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 | for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done fi fi ;; OS/390-*) CFLAGS_OPTIMIZE="" # Optimizer is buggy $as_echo "#define _OE_SOCKETS 1" >>confdefs.h ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" if test "$SHARED_BUILD" = 1; then : SHLIB_LD='ld -shared -expect_unresolved "*"' else SHLIB_LD='ld -non_shared -expect_unresolved "*"' fi SHLIB_SUFFIX=".so" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' fi if test "$GCC" = yes; then : CFLAGS="$CFLAGS -mieee" |
︙ | ︙ | |||
7696 7697 7698 7699 7700 7701 7702 | QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" | < < < < < < | | | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 | QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SCO_SV-3.2*) if test "$GCC" = yes; then : SHLIB_CFLAGS="-fPIC -melf" LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" else SHLIB_CFLAGS="-Kpic -belf" LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" fi SHLIB_LD="ld -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SunOS-5.[0-6]) # Careful to not let 5.10+ fall into this case # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h SHLIB_CFLAGS="-KPIC" SHLIB_SUFFIX=".so" if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} else |
︙ | ︙ | |||
7881 7882 7883 7884 7885 7886 7887 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported for $arch" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported for $arch" >&2;} fi fi fi | < < < < < < | 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported for $arch" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported for $arch" >&2;} fi fi fi SHLIB_SUFFIX=".so" if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} if test "$do64bit_ok" = yes; then : |
︙ | ︙ | |||
7938 7939 7940 7941 7942 7943 7944 | fi ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" | < < | 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 | fi ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld accepts -Bexport flag" >&5 $as_echo_n "checking for ld accepts -Bexport flag... " >&6; } if ${tcl_cv_ld_Bexport+:} false; then : $as_echo_n "(cached) " >&6 else |
︙ | ︙ | |||
7991 7992 7993 7994 7995 7996 7997 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit support being disabled -- don't know magic for this platform" >&5 $as_echo "$as_me: WARNING: 64bit support being disabled -- don't know magic for this platform" >&2;} fi | < | < < < < < < | < < < < < < < < < < < < < < < < < < < < < | > > > > > > > > > | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 8436 8437 8438 8439 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 8450 8451 8452 8453 8454 8455 8456 8457 8458 8459 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507 8508 8509 8510 8511 8512 8513 8514 8515 8516 8517 8518 8519 8520 8521 8522 8523 8524 8525 8526 8527 8528 8529 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 8570 8571 8572 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621 8622 8623 8624 8625 8626 8627 8628 8629 8630 8631 8632 8633 8634 8635 8636 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit support being disabled -- don't know magic for this platform" >&5 $as_echo "$as_me: WARNING: 64bit support being disabled -- don't know magic for this platform" >&2;} fi # Add in the arch flags late to ensure it wasn't removed. # Not necessary in TEA, but this is aligned with core LDFLAGS="$LDFLAGS $LDFLAGS_ARCH" # If we're running gcc, then change the C flags for compiling shared # libraries to the right flags for gcc, instead of those for the # standard manufacturer compiler. if test "$GCC" = yes; then : case $system in AIX-*) ;; BSD/OS*) ;; CYGWIN_*|MINGW32_*) ;; IRIX*) ;; NetBSD-*|FreeBSD-*|OpenBSD-*) ;; Darwin-*) ;; SCO_SV-3.2*) ;; windows) ;; *) SHLIB_CFLAGS="-fPIC" ;; esac fi if test "$tcl_cv_cc_visibility_hidden" != yes; then : $as_echo "#define MODULE_SCOPE extern" >>confdefs.h fi if test "$SHARED_LIB_SUFFIX" = ""; then : # TEA specific: use PACKAGE_VERSION instead of VERSION SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}' fi if test "$UNSHARED_LIB_SUFFIX" = ""; then : # TEA specific: use PACKAGE_VERSION instead of VERSION UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a' fi if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SEH support in compiler" >&5 $as_echo_n "checking for SEH support in compiler... " >&6; } if ${tcl_cv_seh+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : tcl_cv_seh=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #undef WIN32_LEAN_AND_MEAN int main(int argc, char** argv) { int a, b = 0; __try { a = 666 / b; } __except (EXCEPTION_EXECUTE_HANDLER) { return 0; } return 1; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : tcl_cv_seh=yes else tcl_cv_seh=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_seh" >&5 $as_echo "$tcl_cv_seh" >&6; } if test "$tcl_cv_seh" = "no" ; then $as_echo "#define HAVE_NO_SEH 1" >>confdefs.h fi # # Check to see if the excpt.h include file provided contains the # definition for EXCEPTION_DISPOSITION; if not, which is the case # with Cygwin's version as of 2002-04-10, define it to be int, # sufficient for getting the current code to work. # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EXCEPTION_DISPOSITION support in include files" >&5 $as_echo_n "checking for EXCEPTION_DISPOSITION support in include files... " >&6; } if ${tcl_cv_eh_disposition+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # undef WIN32_LEAN_AND_MEAN int main () { EXCEPTION_DISPOSITION x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_eh_disposition=yes else tcl_cv_eh_disposition=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_eh_disposition" >&5 $as_echo "$tcl_cv_eh_disposition" >&6; } if test "$tcl_cv_eh_disposition" = "no" ; then $as_echo "#define EXCEPTION_DISPOSITION int" >>confdefs.h fi # Check to see if winnt.h defines CHAR, SHORT, and LONG # even if VOID has already been #defined. The win32api # used by mingw and cygwin is known to do this. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for winnt.h that ignores VOID define" >&5 $as_echo_n "checking for winnt.h that ignores VOID define... " >&6; } if ${tcl_cv_winnt_ignore_void+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define VOID void #define WIN32_LEAN_AND_MEAN #include <windows.h> #undef WIN32_LEAN_AND_MEAN int main () { CHAR c; SHORT s; LONG l; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_winnt_ignore_void=yes else tcl_cv_winnt_ignore_void=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_winnt_ignore_void" >&5 $as_echo "$tcl_cv_winnt_ignore_void" >&6; } if test "$tcl_cv_winnt_ignore_void" = "yes" ; then $as_echo "#define HAVE_WINNT_IGNORE_VOID 1" >>confdefs.h fi fi # See if the compiler supports casting to a union type. # This is used to stop gcc from printing a compiler # warning when initializing a union member. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cast to union support" >&5 $as_echo_n "checking for cast to union support... " >&6; } if ${tcl_cv_cast_to_union+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { union foo { int i; double d; }; union foo f = (union foo) (int) 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_cast_to_union=yes else tcl_cv_cast_to_union=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cast_to_union" >&5 $as_echo "$tcl_cv_cast_to_union" >&6; } if test "$tcl_cv_cast_to_union" = "yes"; then $as_echo "#define HAVE_CAST_TO_UNION 1" >>confdefs.h fi |
︙ | ︙ | |||
8300 8301 8302 8303 8304 8305 8306 | if ${tcl_cv_struct_dirent64+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> | | | 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 | if ${tcl_cv_struct_dirent64+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <dirent.h> int main () { struct dirent64 p; ; return 0; } |
︙ | ︙ | |||
8449 8450 8451 8452 8453 8454 8455 | enableval=$enable_symbols; tcl_ok=$enableval else tcl_ok=no fi DBGX="" if test "$tcl_ok" = "no"; then | | | 9019 9020 9021 9022 9023 9024 9025 9026 9027 9028 9029 9030 9031 9032 9033 | enableval=$enable_symbols; tcl_ok=$enableval else tcl_ok=no fi DBGX="" if test "$tcl_ok" = "no"; then CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG" LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else CFLAGS_DEFAULT="${CFLAGS_DEBUG}" LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" if test "$tcl_ok" = "yes"; then |
︙ | ︙ | |||
8513 8514 8515 8516 8517 8518 8519 | # and TEA_LOAD_TCLCONFIG macros above. #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\$@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\$@ \$(PKG_OBJECTS)" | > > > > > > > > > > > > > > > > > > > > > > | | 9083 9084 9085 9086 9087 9088 9089 9090 9091 9092 9093 9094 9095 9096 9097 9098 9099 9100 9101 9102 9103 9104 9105 9106 9107 9108 9109 9110 9111 9112 9113 9114 9115 9116 9117 9118 9119 | # and TEA_LOAD_TCLCONFIG macros above. #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\$@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\$@ \$(PKG_OBJECTS)" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(_MSC_VER) && _MSC_VER >= 1400 print("manifest needed") #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "manifest needed" >/dev/null 2>&1; then : # Could do a CHECK_PROG for mt, but should always be with MSVC8+ VC_MANIFEST_EMBED_DLL="if test -f \$@.manifest ; then mt.exe -nologo -manifest \$@.manifest -outputresource:\$@\;2 ; fi" VC_MANIFEST_EMBED_EXE="if test -f \$@.manifest ; then mt.exe -nologo -manifest \$@.manifest -outputresource:\$@\;1 ; fi" MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}" CLEANFILES="$CLEANFILES *.manifest" fi rm -f conftest* MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\$@ \$(PKG_STUB_OBJECTS)" else MAKE_STATIC_LIB="\${STLIB_LD} \$@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} -o \$@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}" MAKE_STUB_LIB="\${STLIB_LD} \$@ \$(PKG_STUB_OBJECTS)" fi if test "${SHARED_BUILD}" = "1" ; then |
︙ | ︙ | |||
8536 8537 8538 8539 8540 8541 8542 | # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. | < > > > > > > > | 9128 9129 9130 9131 9132 9133 9134 9135 9136 9137 9138 9139 9140 9141 9142 9143 9144 9145 9146 9147 9148 9149 9150 9151 9152 9153 9154 | # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\"" fi SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\"" if test "$GCC" = "yes"; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -static-libgcc" fi eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" else eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_LIB_FILE=lib${PKG_LIB_FILE} fi fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE} fi # These aren't needed on Windows (either MSVC or gcc) |
︙ | ︙ | |||
8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 | # These are escaped so that only CFLAGS is picked up at configure time. # The other values will be substituted at make time. CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}" if test "${SHARED_BUILD}" = "1" ; then CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}" fi | > > | 9172 9173 9174 9175 9176 9177 9178 9179 9180 9181 9182 9183 9184 9185 9186 9187 | # These are escaped so that only CFLAGS is picked up at configure time. # The other values will be substituted at make time. CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}" if test "${SHARED_BUILD}" = "1" ; then CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}" fi |
︙ | ︙ | |||
8716 8717 8718 8719 8720 8721 8722 8723 8724 8725 8726 8727 8728 8729 | # files generated by ./configure) and is used in the make distclean # target, defined in Makefile.in #-------------------------------------------------------------------- CONFIG_CLEAN_FILES="Makefile xotclConfig.sh apps/utils/xotclsh apps/utils/xowish unix/xotcl.spec unix/pkgIndex.unix autom4te.cache/" ac_config_files="$ac_config_files Makefile xotclConfig.sh apps/utils/xotclsh apps/utils/xowish unix/xotcl.spec unix/pkgIndex.unix" #-------------------------------------------------------------------- # Finally, substitute all of the various values into the Makefile, # and generate the other output files. (this is done by invoking # config.status) # | > | 9316 9317 9318 9319 9320 9321 9322 9323 9324 9325 9326 9327 9328 9329 9330 | # files generated by ./configure) and is used in the make distclean # target, defined in Makefile.in #-------------------------------------------------------------------- CONFIG_CLEAN_FILES="Makefile xotclConfig.sh apps/utils/xotclsh apps/utils/xowish unix/xotcl.spec unix/pkgIndex.unix autom4te.cache/" ac_config_files="$ac_config_files Makefile xotclConfig.sh apps/utils/xotclsh apps/utils/xowish unix/xotcl.spec unix/pkgIndex.unix" #-------------------------------------------------------------------- # Finally, substitute all of the various values into the Makefile, # and generate the other output files. (this is done by invoking # config.status) # |
︙ | ︙ | |||
9173 9174 9175 9176 9177 9178 9179 | fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. | | | | | | 9774 9775 9776 9777 9778 9779 9780 9781 9782 9783 9784 9785 9786 9787 9788 9789 9790 9791 9792 9793 9794 9795 9796 9797 | fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- |
︙ | ︙ | |||
9242 9243 9244 9245 9246 9247 9248 | if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi | | | < > | | < > > | < | < < < < < < < < < < < < | | | | 9843 9844 9845 9846 9847 9848 9849 9850 9851 9852 9853 9854 9855 9856 9857 9858 9859 9860 9861 9862 9863 9864 9865 9866 9867 9868 9869 9870 9871 9872 9873 9874 9875 9876 9877 9878 9879 9880 9881 9882 9883 9884 9885 9886 9887 9888 | if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by xotcl $as_me 1.6.8, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ |
︙ | ︙ | |||
9331 9332 9333 9334 9335 9336 9337 | --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files | | | | | < | 9920 9921 9922 9923 9924 9925 9926 9927 9928 9929 9930 9931 9932 9933 9934 9935 9936 9937 9938 9939 9940 9941 9942 9943 9944 9945 9946 9947 9948 9949 | --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to <xotcl@alice.wu-wien.ac.at>." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ xotcl config.status 1.6.8 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 |
︙ | ︙ | |||
9419 9420 9421 9422 9423 9424 9425 | exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then | | | 10007 10008 10009 10010 10011 10012 10013 10014 10015 10016 10017 10018 10019 10020 10021 | exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi |
︙ | ︙ | |||
9788 9789 9790 9791 9792 9793 9794 | case $ac_mode in :F) # # CONFIG_FILE # | < < < < | 10376 10377 10378 10379 10380 10381 10382 10383 10384 10385 10386 10387 10388 10389 | case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' |
︙ | ︙ | |||
9845 9846 9847 9848 9849 9850 9851 | s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t | < | 10429 10430 10431 10432 10433 10434 10435 10436 10437 10438 10439 10440 10441 10442 | s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && |
︙ | ︙ | |||
9922 9923 9924 9925 9926 9927 9928 9929 | confdir=. else mkdir -p $subdir confdir=${srcdir}/$subdir fi (cd $subdir; echo $SHELL ${confdir}/configure ${ac_configure_args} --prefix=${prefix} --with-xotcl=${here}; eval $SHELL ${confdir}/configure ${ac_configure_args} --prefix=${prefix} --with-xotcl=${here}) done | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 10505 10506 10507 10508 10509 10510 10511 10512 | confdir=. else mkdir -p $subdir confdir=${srcdir}/$subdir fi (cd $subdir; echo $SHELL ${confdir}/configure ${ac_configure_args} --prefix=${prefix} --with-xotcl=${here}; eval $SHELL ${confdir}/configure ${ac_configure_args} --prefix=${prefix} --with-xotcl=${here}) done |
Added jni/xotcl/configure.ac.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 | #-------------------------------------------------------------------- # Sample configure.in for Tcl Extensions. The only places you should # need to modify this file are marked by the string __CHANGE__ #-------------------------------------------------------------------- #-------------------------------------------------------------------- # __CHANGE__ # This very first macro is used to verify that the configure script can # find the sources. The argument to AC_INIT should be a unique filename # for this package, and can be a relative path, such as: # #-------------------------------------------------------------------- define(XOTclVersion, 1.6.8) AC_INIT([xotcl],[XOTclVersion],[xotcl@alice.wu-wien.ac.at]) AC_CONFIG_AUX_DIR([tclconfig]) #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. # This will define a ${TEA_PLATFORM} variable == "unix" or "windows". #-------------------------------------------------------------------- TEA_INIT([3.9]) #-------------------------------------------------------------------- # specify some extra flags #-------------------------------------------------------------------- AC_ARG_WITH([gdbm], [ --with-gdbm=GDBM_INCLUDE_DIR[,GDBM_LIB_DIR] absolute path to gdbm.h and optionally the path to the library, --without-gdbm disables build of Tcl Gdbm], [with_gdbm=$withval], [with_gdbm=no]) AC_ARG_WITH([aolserver3], [ --with-aolserver3=AOL_SERVER_DIR, (containing include ,...) --without-aolserver3 disables build of AOLserver 3 module], [with_aol3=$withval], [with_aol3=no]) AC_ARG_WITH([actiweb], [ --with-actiweb=yes|no, --without-actiweb disables actiweb components], [with_actiweb=$withval], [with_actiweb=no]) AC_ARG_WITH([xotclsh], [ --with-xotclsh=yes|no, --without-xotclsh disables built of xotclsh], [with_xotclsh=$withval], [with_xotclsh=no]) AC_ARG_WITH([xowish], [ --with-xowish=yes|no, --without-xowish disables built of xowish], [with_xowish=$withval], [with_xowish=no]) AC_ARG_WITH([all], [ --with-all=yes|no, --without-all disables built of all], [with_all=$withval], [with_all=no]) AC_ARG_WITH([expat], [ --with-expat=sys assumes a system-wide expat installation, --with-expat=<INC_DIR,LIB_DIR> point to a custom expat installation, --without-expat falls back to the bundled expat installation], [with_expat=$withval],[with_expat=bundle]) subdirs="" if test "$with_all" = yes; then with_actiweb=yes with_xotclsh=yes with_xowish=yes with_gdbm=yes fi if test "$with_actiweb" = yes; then test_actiweb="test-actiweb" libdirs_actiweb="actiweb rdf registry store xml patterns" apps_actiweb="actiweb persistence" subdirs="$subdirs library/store/XOTclSdbm/" if ! test "$with_gdbm" = no; then subdirs="$subdirs library/store/XOTclGdbm/" fi subdirs="$subdirs library/xml/TclExpat-1.1/" else test_actiweb="" libdirs_actiweb="" apps_actiweb="" if ! test "${with_expat}" = bundle ; then AC_MSG_RESULT([WARNING: expat configuration ${with_expat} ignored]) with_expat="bundle" fi fi AC_SUBST([subdirs]) if test "$with_tk" = no; then with_xowish="" ; fi if test "$with_xotclsh" = yes; then XOTCLSH="xotclsh" ; else XOTCLSH=""; fi if test "$with_xowish" = yes; then XOWISH="xowish" ; else XOWISH=""; fi #-------------------------------------------------------------------- # __CHANGE__ # Set your package name and version numbers here. The NODOT_VERSION is # required for constructing the library name on systems that don't like # dots in library names (Windows). The VERSION variable is used on the # other systems. #-------------------------------------------------------------------- # do not modify the following lines manually, they are generated with changeXOTclVersion XOTCL_MAJOR_VERSION=1 XOTCL_MINOR_VERSION=6 XOTCL_RELEASE_LEVEL=.8 XOTCL_VERSION=${XOTCL_MAJOR_VERSION}.${XOTCL_MINOR_VERSION} NODOT_VERSION=${XOTCL_MAJOR_VERSION}${XOTCL_MINOR_VERSION} AC_SUBST([XOTCL_VERSION]) AC_SUBST([XOTCL_MAJOR_VERSION]) AC_SUBST([XOTCL_MINOR_VERSION]) AC_SUBST([XOTCL_RELEASE_LEVEL]) echo "Configuring XOTcl Version $PACKAGE_VERSION" #-------------------------------------------------------------------- # Load the tclConfig.sh file #-------------------------------------------------------------------- TEA_PATH_TCLCONFIG TEA_LOAD_TCLCONFIG #-------------------------------------------------------------------- # check for TK #-------------------------------------------------------------------- if test "$with_xowish" = yes; then TEA_PATH_TKCONFIG TEA_LOAD_TKCONFIG TEA_PUBLIC_TK_HEADERS # TEA_PATH_X fi #-------------------------------------------------------------------- # Handle the --prefix=... option by defaulting to what Tcl gave. # Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER. #----------------------------------------------------------------------- TEA_PREFIX #----------------------------------------------------------------------- # Standard compiler checks. # This sets up CC by using the CC env var, or looks for gcc otherwise. # This also calls AC_PROG_CC, AC_PROG_INSTALL and a few others to create # the basic setup necessary to compile executables. #----------------------------------------------------------------------- TEA_SETUP_COMPILER #-------------------------------------------------------------------- # check for extra flags # # FORCE_NO_STUBS is deactivated for now if ! test "$with_aol3" = "no"; then echo "Pre-configuring AOL-Server (xotcl)" AOL_DEFINES="-DAOL_SERVER -DUSE_TCL8X -I$with_aol3/include -I$TCL_SRC_DIR/generic" FORCE_NO_STUBS=1 else AOL_DEFINES="" FORCE_NO_STUBS=0 fi aol_prefix="/usr/local/aolserver" if test -d "${prefix}/modules/tcl" ; then aol_prefix="${prefix}" ; fi AC_SUBST([aol_prefix]) #-------------------------------------------------------------------- # check for tclCompile.h (needed, when compiled without full source) if test -f "$TCL_SRC_DIR/generic/tclCompile.h"; then HAVE_TCL_COMPILE_H="-DHAVE_TCL_COMPILE_H=1" else HAVE_TCL_COMPILE_H="" fi #----------------------------------------------------------------------- # __CHANGE__ # Specify the C source files to compile in TEA_ADD_SOURCES, # public headers that need to be installed in TEA_ADD_HEADERS, # stub library C source files to compile in TEA_ADD_STUB_SOURCES, # and runtime Tcl library files in TEA_ADD_TCL_SOURCES. # This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS # and PKG_TCL_SOURCES. #----------------------------------------------------------------------- TEA_ADD_SOURCES([xotcl.c xotclError.c xotclMetaData.c xotclObjectData.c xotclProfile.c \ xotclTrace.c xotclUtil.c xotclShadow.c xotclCompile.c aolstub.c xotclStubInit.c]) TEA_ADD_HEADERS([generic/xotcl.h generic/xotclInt.h generic/xotclDecls.h generic/xotclIntDecls.h]) TEA_ADD_INCLUDES([]) TEA_ADD_LIBS([]) TEA_ADD_CFLAGS([-DXOTCLVERSION=\\\"$XOTCL_VERSION\\\" -DXOTCLPATCHLEVEL=\\\"$XOTCL_RELEASE_LEVEL\\\" \ $AOL_DEFINES $HAVE_TCL_COMPILE_H]) TEA_ADD_STUB_SOURCES([xotclStubLib.c]) TEA_ADD_TCL_SOURCES([]) #-------------------------------------------------------------------- #-------------------------------------------------------------------- # __CHANGE__ # Choose which headers you need. Extension authors should try very # hard to only rely on the Tcl public header files. Internal headers # contain private data structures and are subject to change without # notice. # This must be done AFTER calling TEa_PATH_TCLCONFIG/TEA_LOAD_TCLCONFIG # so that we can extract TCL_SRC_DIR from the config file (in the case # of private headers #-------------------------------------------------------------------- #TEA_PUBLIC_TCL_HEADERS TEA_PRIVATE_TCL_HEADERS #-------------------------------------------------------------------- # __CHANGE__ # A few miscellaneous platform-specific items: # # Define a special symbol for Windows (BUILD_xotcl in this case) so # that we create the export library with the dll. See sha1.h on how # to use this. # # Windows creates a few extra files that need to be cleaned up. # You can add more files to clean if your extension creates any extra # files. # # Define any extra compiler flags in the PACKAGE_CFLAGS variable. # These will be appended to the current set of compiler flags for # your system. #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then AC_DEFINE([BUILD_xotcl]) if test "$GCC" != "yes" ; then AC_DEFINE([VISUAL_CC]) fi CLEANFILES="*.lib *.dll *.exp *.ilk *.pdb vc50.pch vc60.pch" #TEA_ADD_SOURCES([win/winFile.c]) #TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/w else CLEANFILES="*.o *.a *.so *~ core gmon.out" #TEA_ADD_SOURCES([unix/unixFile.c]) #TEA_ADD_LIBS([-lsuperfly]) fi AC_SUBST([CLEANFILES]) #-------------------------------------------------------------------- # Check whether --enable-threads or --disable-threads was given. #-------------------------------------------------------------------- TEA_ENABLE_THREADS #-------------------------------------------------------------------- # The statement below defines a collection of symbols related to # building as a shared library instead of a static library. #-------------------------------------------------------------------- TEA_ENABLE_SHARED #-------------------------------------------------------------------- # This macro figures out what flags to use with the compiler/linker # when building shared/static debug/optimized objects. This information # can be taken from the tclConfig.sh file, but this figures it all out. #-------------------------------------------------------------------- TEA_CONFIG_CFLAGS # Without the following two eval statements, XOTCL_SHARED_LIB_SUFFIX # in xotclConfig.sh has $PACKAGE_VERSION unresolved. When another # app links against xotcl, the PACKAGE_VERSIONs are confused. # # Without the first eval, we get # XOTCL_SHARED_LIB_SUFFIX=${PACKAGE_VERSION}\$\{DBGX\}${SHLIB_SUFFIX} # XOTCL_UNSHARED_LIB_SUFFIX=${PACKAGE_VERSION}\$\{DBGX\}.a # # after the first eval, we get # XOTCL_SHARED_LIB_SUFFIX=1.2.1${DBGX}.so # XOTCL_UNSHARED_LIB_SUFFIX=1.2.1${DBGX}.a # after the second eval, all variables are resolved. eval "SHARED_LIB_SUFFIX=${SHARED_LIB_SUFFIX}" eval "UNSHARED_LIB_SUFFIX=${UNSHARED_LIB_SUFFIX}" #eval "SHARED_LIB_SUFFIX=${SHARED_LIB_SUFFIX}" #eval "UNSHARED_LIB_SUFFIX=${UNSHARED_LIB_SUFFIX}" #-------------------------------------------------------------------- # Set the default compiler switches based on the --enable-symbols # option. #-------------------------------------------------------------------- TEA_ENABLE_SYMBOLS #-------------------------------------------------------------------- # Everyone should be linking against the Tcl stub library. If you # can't for some reason, remove this definition. If you aren't using # stubs, you also need to modify the SHLIB_LD_LIBS setting below to # link against the non-stubbed Tcl library. #-------------------------------------------------------------------- #if test "${TCL_MAJOR_VERSION}" = "8" -a "${TCL_MINOR_VERSION}" = "0"; then # FORCE_NO_STUBS=1 #fi if test "${FORCE_NO_STUBS}" = "0" ; then AC_DEFINE([USE_TCL_STUBS]) fi #-------------------------------------------------------------------- # This macro generates a line to use when building a library. It # depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS, # and TEA_LOAD_TCLCONFIG macros above. #-------------------------------------------------------------------- TEA_MAKE_LIB #-------------------------------------------------------------------- # Find tclsh so that we can run pkg_mkIndex to generate the pkgIndex.tcl # file during the install process. Don't run the TCLSH_PROG through # ${CYGPATH} because it's being used directly by make. # Require that we use a tclsh shell version 8.2 or later since earlier # versions have bugs in the pkg_mkIndex routine. #-------------------------------------------------------------------- TEA_PROG_TCLSH # make this available, for such as xotclConfig.sh XOTCL_COMPATIBLE_TCLSH=${TCLSH_PROG} AC_SUBST([XOTCL_COMPATIBLE_TCLSH]) # resolve the variables eval "libdir=${libdir}" eval "datadir=${datadir}" eval "includedir=${includedir}" PKG_DIR="${PACKAGE_NAME}${PACKAGE_VERSION}" pkgdatadir="${datadir}/${PKG_DIR}" pkglibdir="${libdir}/${PKG_DIR}" # make sure this is right (then remove this comment) pkgincludedir="${includedir}/${PKG_DIR}" AC_SUBST([PKG_DIR]) AC_SUBST([pkgdatadir]) AC_SUBST([pkglibdir]) AC_SUBST([pkgincludedir]) # # XOTcl specific configs # if test "${TEA_PLATFORM}" != "windows" ; then XOTCL_BUILD_LIB_SPEC="-L`pwd` -lxotcl${PACKAGE_VERSION}" XOTCL_LIB_SPEC="-L${pkglibdir} -lxotcl${PACKAGE_VERSION}" # stub libs are not build for 8.0 if test "${TCL_MAJOR_VERSION}" = "8" -a "${TCL_MINOR_VERSION}" = "0"; then XOTCL_BUILD_STUB_LIB_PATH="" XOTCL_STUB_LIB_PATH="" XOTCL_BUILD_STUB_LIB_SPEC="" XOTCL_STUB_LIB_SPEC="" else XOTCL_BUILD_STUB_LIB_PATH="`pwd`/${PKG_STUB_LIB_FILE}" XOTCL_STUB_LIB_PATH="${pkglibdir}/${PKG_STUB_LIB_FILE}" XOTCL_BUILD_STUB_LIB_SPEC="-L`pwd` -lxotclstub${PACKAGE_VERSION}" XOTCL_STUB_LIB_SPEC="-L${pkglibdir} -lxotclstub${PACKAGE_VERSION}" AC_DEFINE([COMPILE_XOTCL_STUBS]) fi else XOTCL_BUILD_LIB_SPEC="`pwd`/${PKG_LIB_FILE}" XOTCL_LIB_SPEC="${pkglibdir}/${PKG_LIB_FILE}" XOTCL_BUILD_STUB_LIB_PATH="`pwd`/${PKG_STUB_LIB_FILE}" XOTCL_STUB_LIB_PATH="${pkglibdir}/${PKG_STUB_LIB_FILE}" XOTCL_BUILD_STUB_LIB_SPEC="`pwd`/${PKG_STUB_LIB_FILE}" XOTCL_STUB_LIB_SPEC="${pkglibdir}/${PKG_STUB_LIB_FILE}" fi AC_SUBST([SHARED_LIB_SUFFIX]) AC_SUBST([UNSHARED_LIB_SUFFIX]) AC_SUBST([XOTCL_BUILD_LIB_SPEC]) AC_SUBST([XOTCL_LIB_SPEC]) AC_SUBST([XOTCL_BUILD_STUB_LIB_SPEC]) AC_SUBST([XOTCL_STUB_LIB_SPEC]) AC_SUBST([XOTCL_BUILD_STUB_LIB_PATH]) AC_SUBST([XOTCL_STUB_LIB_PATH]) XOTCL_SRC_DIR=$srcdir AC_SUBST([XOTCL_SRC_DIR]) AC_SUBST([XOTCLSH]) AC_SUBST([XOWISH]) # include dir of xotcl during build process (i.e., does not assume installed) XOTCL_BUILD_INCLUDE_DIR="${XOTCL_SRC_DIR}/generic" XOTCL_BUILD_INCLUDE_SPEC="-I${XOTCL_BUILD_INCLUDE_DIR}" AC_SUBST([XOTCL_BUILD_INCLUDE_DIR]) AC_SUBST([XOTCL_BUILD_INCLUDE_SPEC]) AC_SUBST([test_actiweb]) AC_SUBST([libdirs_actiweb]) AC_SUBST([apps_actiweb]) AC_SUBST([TEA_PLATFORM]) dnl CONFIG_OUTPUT_FILES is a macro containing the names of the output files dnl reasoning: this is a factoring; I use this value elsewhere. dnl dnl Change the value of -this- macro if you want to add or remove dnl such files. AC_DEFUN([CONFIG_OUTPUT_FILES], [[Makefile xotclConfig.sh apps/utils/xotclsh apps/utils/xowish unix/xotcl.spec unix/pkgIndex.unix]]) #-------------------------------------------------------------------- # the value of this variable is set to the files which are to be # removed when the user invokes 'make distclean' (i.e., those # files generated by ./configure) and is used in the make distclean # target, defined in Makefile.in #-------------------------------------------------------------------- CONFIG_CLEAN_FILES="CONFIG_OUTPUT_FILES autom4te.cache/" AC_SUBST([CONFIG_CLEAN_FILES]) AC_CONFIG_FILES(CONFIG_OUTPUT_FILES) #-------------------------------------------------------------------- # Finally, substitute all of the various values into the Makefile, # and generate the other output files. (this is done by invoking # config.status) # # NOTE the lack of parameters! AC_OUTPUT with params is deprecated; # use macros such as AC_CONFIG_FILES, AC_HEADER_FILES, etc to add # to the files output by ./configure. #-------------------------------------------------------------------- AC_OUTPUT here=${PWD} for subdir in ${subdirs} do echo "==================== configure $subdir =====================" if test x"${srcdir}" = x. ; then confdir=. else mkdir -p $subdir confdir=${srcdir}/$subdir fi (cd $subdir; echo $SHELL ${confdir}/configure ${ac_configure_args} --prefix=${prefix} --with-xotcl=${here}; eval $SHELL ${confdir}/configure ${ac_configure_args} --prefix=${prefix} --with-xotcl=${here}) done |
Deleted jni/xotcl/configure.in.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/xotcl/doc/Announce-1.6.7.
︙ | ︙ | |||
13 14 15 16 17 18 19 | * fixed bug in filters, when filterchain reaches end without finding the method to be invoked * fixed handling of object-names containing semicolon in serializer * handling implicit deletes * some code cleanup All new development efforts are concentrating on the Next scripting framework, | | | 13 14 15 16 17 18 19 20 21 22 23 24 25 | * fixed bug in filters, when filterchain reaches end without finding the method to be invoked * fixed handling of object-names containing semicolon in serializer * handling implicit deletes * some code cleanup All new development efforts are concentrating on the Next scripting framework, including XOTcl 2.0 (see http://next-scripting.org) MORE INFO General and more detailed information about XOTcl and its components can be found at http://www.xotcl.org |
Added jni/xotcl/doc/Announce-1.6.8.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | Announcing XOTcl 1.6.8 ************************* Dear XOTcl Community, We are pleased to announce the availability of XOTcl 1.6.8 This is a maintenance release. Major changes relative to 1.6.7 are: * overhaul of configure and TEA, stick * fixes for linking xotclsh with Tcl 8.6 (fixes Debian report) * fixes for building xowish with newer TEA versions * overworked version numbering in packages * backport fixes from nsf * backport for security fix from expat * some code cleanup diff stats: 181 files changed, 26279 insertions(+), 30528 deletions(-) All new development efforts are concentrating on the Next scripting framework, including XOTcl 2.0 (see http://next-scripting.org) MORE INFO General and more detailed information about XOTcl and its components can be found at http://www.xotcl.org ===== |
Changes to jni/xotcl/doc/langRef.xotcl.
1 2 | # $Id: langRef.xotcl,v 1.18 2007/09/05 19:09:22 neumann Exp $ package provide XOTcl-langRef 1.6.4 | | | 1 2 3 4 5 6 7 8 9 10 | # $Id: langRef.xotcl,v 1.18 2007/09/05 19:09:22 neumann Exp $ package provide XOTcl-langRef 1.6.4 package require XOTcl 1 @ @File { description { XOTcl language reference. Describes predefined objects and classes. } "predefined primitives" { XOTcl contains the following predefined primitives (Tcl commands): |
︙ | ︙ | |||
568 569 570 571 572 573 574 | be used to ensure that the object has a namespace. <@li><@TT>objName info info</@TT>: Returns a list of all available info options on the object. <@li><@TT>objName info invar</@TT>: Returns object invariants. | | | > > | 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 | be used to ensure that the object has a namespace. <@li><@TT>objName info info</@TT>: Returns a list of all available info options on the object. <@li><@TT>objName info invar</@TT>: Returns object invariants. <@li><@TT>objName info methods ?-nocmds? ?-nomixins? ?-incontext? ?pattern?</@TT>: Returns the list of all methods currently reachable for objName. Includes procs, instprocs, cmds, instcommands on object, class hierarchy and mixins. Modifier <@TT>-noprocs</@TT> only returns instcommands, <@TT>-nocmds</@TT> only returns procs. Modifier <@TT>-nomixins</@TT> excludes search on mixins. When the modifier <@TT>-incontext</@TT> is used, it guards for conditional mixins are evaluated. <@li><@TT>objName info mixin ?-order? ?-guard? ?pattern?</@TT>: Returns the list of mixins of the object. With <@TT>-order</@TT> modifier the order of mixins (whole hierarchy) is printed. If <@TT>-guard</@TT> is specified, the mixin guards are returned. If <@TT>pattern</@TT> is specified and it contains wildcards, all matching mixins are returned. If <@TT>pattern</@TT> does not |
︙ | ︙ |
Changes to jni/xotcl/generic/aol-xotcl.tcl.
1 2 3 4 5 6 7 8 9 10 | # $Id: aol-xotcl.tcl,v 1.15 2007/08/14 16:38:26 neumann Exp $ # # Load XOTcl library and some related packages. # We expect to find them somewhere in standard # Tcl package search path (the auto_path var) # The simplest location is to put them under # the "lib" directory within the AOLserver tree. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # $Id: aol-xotcl.tcl,v 1.15 2007/08/14 16:38:26 neumann Exp $ # # Load XOTcl library and some related packages. # We expect to find them somewhere in standard # Tcl package search path (the auto_path var) # The simplest location is to put them under # the "lib" directory within the AOLserver tree. # package require XOTcl 1; namespace import ::xotcl::* package require xotcl::serializer ns_log notice "XOTcl version $::xotcl::version$::xotcl::patchlevel loaded" # # Overload procedure defined in bin/init.tcl. # It is now XOTcl-savvy in how it treats some # special namespaces. |
︙ | ︙ |
Changes to jni/xotcl/generic/aolstub.c.
|
| < | | > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | /* This file provides the stubs needed for the AOL_SERVER, Please note, that you have to have to apply a small patch to the AOL server as well (available from www.xotcl.org) in order to get it working. Author: Zoran Vasiljevic Archiware Inc. Various updates from Gustaf Neumann */ #ifdef AOL_SERVER #include "xotcl.h" #include <ns.h> NS_EXPORT int Ns_ModuleVersion = 1; #if NS_MAJOR_VERSION>=4 # define AOL4 #endif /* *---------------------------------------------------------------------------- |
︙ | ︙ |
Changes to jni/xotcl/generic/xotcl.c.
|
| | < > | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * XOTcl - Extended Object Tcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * Copyright (C) 2007-2008 Martin Matuska (b) * * (a) Vienna University of Economics and Business Administration * Institute. of Information Systems and New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen |
︙ | ︙ | |||
897 898 899 900 901 902 903 | } static int SetXOTclObjectFromAny(Tcl_Interp *interp, register Tcl_Obj *objPtr) { Tcl_ObjType *oldTypePtr = (Tcl_ObjType *)objPtr->typePtr; char *string = ObjStr(objPtr); XOTclObject *obj; | < | | 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 | } static int SetXOTclObjectFromAny(Tcl_Interp *interp, register Tcl_Obj *objPtr) { Tcl_ObjType *oldTypePtr = (Tcl_ObjType *)objPtr->typePtr; char *string = ObjStr(objPtr); XOTclObject *obj; int result = TCL_OK; #ifdef XOTCLOBJ_TRACE fprintf(stderr,"SetXOTclObjectFromAny %p '%s' %p\n", objPtr, string, objPtr->typePtr); if (oldTypePtr) fprintf(stderr," convert %s to XOTclObject\n", oldTypePtr->name); #endif if (!isAbsolutePath(string)) { char *nsString; Tcl_Obj *tmpName = NameInNamespaceObj(interp, string, callingNameSpace(interp)); nsString = ObjStr(tmpName); INCR_REF_COUNT(tmpName); obj = XOTclpGetObject(interp, nsString); DECR_REF_COUNT(tmpName); if (!obj) { /* retry with global namespace */ |
︙ | ︙ | |||
955 956 957 958 959 960 961 | return result; } static void UpdateStringOfXOTclObject(register Tcl_Obj *objPtr) { XOTclObject *obj = (XOTclObject *)objPtr->internalRep.otherValuePtr; | < > > < | 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 | return result; } static void UpdateStringOfXOTclObject(register Tcl_Obj *objPtr) { XOTclObject *obj = (XOTclObject *)objPtr->internalRep.otherValuePtr; #ifdef XOTCLOBJ_TRACE fprintf(stderr,"UpdateStringOfXOTclObject %p refCount %d\n", objPtr, objPtr->refCount); fprintf(stderr," teardown %p id %p destroyCalled %d\n", obj->teardown, obj->id, (obj->flags & XOTCL_DESTROY_CALLED)); #endif /* Here we use GetCommandName, because it doesnt need Interp*, but Tcl_GetCommandFullName(interp, obj->id, ObjName); does*/ if (obj && !(obj->flags & XOTCL_DESTROY_CALLED)) { Tcl_DString ds, *dsp = &ds; unsigned l; char *nsFullName = NSCmdFullName(obj->id); DSTRING_INIT(dsp); if (!(*nsFullName==':' && *(nsFullName+1)==':' && *(nsFullName+2)=='\0')) { Tcl_DStringAppend(dsp, nsFullName, -1); } Tcl_DStringAppend(dsp, "::", 2); Tcl_DStringAppend(dsp, Tcl_GetCommandName(NULL, obj->id), -1); |
︙ | ︙ | |||
1587 1588 1589 1590 1591 1592 1593 | result = callMethod(cd, interp, XOTclGlobalObjects[XOTE_DESTROY], 2, 0, flags); if (result != TCL_OK) { static char cmd[] = "puts stderr \"[self]: Error in instproc destroy\n\ $::errorCode $::errorInfo\""; Tcl_EvalEx(interp, cmd, -1, 0); if (++RUNTIME_STATE(interp)->errorCount > 20) | | | 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 | result = callMethod(cd, interp, XOTclGlobalObjects[XOTE_DESTROY], 2, 0, flags); if (result != TCL_OK) { static char cmd[] = "puts stderr \"[self]: Error in instproc destroy\n\ $::errorCode $::errorInfo\""; Tcl_EvalEx(interp, cmd, -1, 0); if (++RUNTIME_STATE(interp)->errorCount > 20) Tcl_Panic("%s", "too many destroy errors occured. Endless loop?"); } else { if (RUNTIME_STATE(interp)->errorCount > 0) RUNTIME_STATE(interp)->errorCount--; } #ifdef OBJDELETION_TRACE fprintf(stderr, "callDestroyMethod for %p exit\n", obj); |
︙ | ︙ | |||
1641 1642 1643 1644 1645 1646 1647 | fprintf(stderr, "+++ Make Namespace for %s\n", ObjStr(obj->cmdName)); #endif if (!obj->nsPtr) { Tcl_Namespace *nsPtr; char *cmdName = ObjStr(obj->cmdName); obj->nsPtr = NSGetFreshNamespace(interp, (ClientData)obj, cmdName); if (!obj->nsPtr) | | | 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 | fprintf(stderr, "+++ Make Namespace for %s\n", ObjStr(obj->cmdName)); #endif if (!obj->nsPtr) { Tcl_Namespace *nsPtr; char *cmdName = ObjStr(obj->cmdName); obj->nsPtr = NSGetFreshNamespace(interp, (ClientData)obj, cmdName); if (!obj->nsPtr) Tcl_Panic("%s", "makeObjNamespace: Unable to make namespace"); nsPtr = obj->nsPtr; /* * Copy all obj variables to the newly created namespace */ if (obj->varTable) { |
︙ | ︙ | |||
1691 1692 1693 1694 1695 1696 1697 | typedef int (Tcl_ResolveVarProc) _ANSI_ARGS_(( * Tcl_Interp *interp, CONST char * name, Tcl_Namespace *context, * int flags, Tcl_Var *rPtr)); */ int varResolver(Tcl_Interp *interp, CONST char *name, Tcl_Namespace *ns, int flags, Tcl_Var *varPtr) { int new; | < < | 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 | typedef int (Tcl_ResolveVarProc) _ANSI_ARGS_(( * Tcl_Interp *interp, CONST char * name, Tcl_Namespace *context, * int flags, Tcl_Var *rPtr)); */ int varResolver(Tcl_Interp *interp, CONST char *name, Tcl_Namespace *ns, int flags, Tcl_Var *varPtr) { int new; Tcl_CallFrame *varFramePtr; /* Case 1: The variable is to be resolved in global scope, proceed in * resolver chain (i.e. return TCL_CONTINUE) * * Note: For now, I am not aware of this case to become effective, * it is a mere safeguard measure. * |
︙ | ︙ | |||
1753 1754 1755 1756 1757 1758 1759 | *varPtr = (Tcl_Var)LookupVarFromTable(Tcl_Namespace_varTable(ns),name,NULL); if(*varPtr == NULL) { /* We failed to find the variable so far, therefore we create it * here in the namespace. Note that the cases (1), (2) and (3) * TCL_CONTINUE care for variable creation if necessary. */ | | | | 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 | *varPtr = (Tcl_Var)LookupVarFromTable(Tcl_Namespace_varTable(ns),name,NULL); if(*varPtr == NULL) { /* We failed to find the variable so far, therefore we create it * here in the namespace. Note that the cases (1), (2) and (3) * TCL_CONTINUE care for variable creation if necessary. */ Var *newVar; Tcl_Obj *key = Tcl_NewStringObj(name, -1); INCR_REF_COUNT(key); newVar = VarHashCreateVar(Tcl_Namespace_varTable(ns), key, &new); DECR_REF_COUNT(key); #if defined(PRE85) # if FORWARD_COMPATIBLE |
︙ | ︙ | |||
2208 2209 2210 2211 2212 2213 2214 | /* * Generic Tcl_Obj List */ static void TclObjListFreeList(XOTclTclObjList *list) { | | | | 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 | /* * Generic Tcl_Obj List */ static void TclObjListFreeList(XOTclTclObjList *list) { while (list) { XOTclTclObjList *del = list; list = list->next; DECR_REF_COUNT(del->content); FREE(XOTclTclObjList, del); } } static Tcl_Obj* |
︙ | ︙ | |||
2235 2236 2237 2238 2239 2240 2241 | * Autonaming */ static Tcl_Obj* AutonameIncr(Tcl_Interp *interp, Tcl_Obj *name, XOTclObject *obj, int instanceOpt, int resetOpt) { int valueLength; | < | | 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 | * Autonaming */ static Tcl_Obj* AutonameIncr(Tcl_Interp *interp, Tcl_Obj *name, XOTclObject *obj, int instanceOpt, int resetOpt) { int valueLength; Tcl_Obj *valueObject, *result = NULL; #ifdef PRE83 int flgs = 0; #else int flgs = TCL_LEAVE_ERR_MSG; #endif XOTcl_FrameDecls; |
︙ | ︙ | |||
2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 | if (valueObject) { /* we have an entry */ Tcl_UnsetVar2(interp, XOTclGlobalStrings[XOTE_AUTONAMES], ObjStr(name), flgs); } result = XOTclGlobalObjects[XOTE_EMPTY]; INCR_REF_COUNT(result); } else { int mustCopy = 1, format = 0; if (valueObject == NULL) { valueObject = Tcl_ObjSetVar2(interp, XOTclGlobalObjects[XOTE_AUTONAMES], name, XOTclGlobalObjects[XOTE_ONE], flgs); } if (instanceOpt) { | > | > > > | 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 | if (valueObject) { /* we have an entry */ Tcl_UnsetVar2(interp, XOTclGlobalStrings[XOTE_AUTONAMES], ObjStr(name), flgs); } result = XOTclGlobalObjects[XOTE_EMPTY]; INCR_REF_COUNT(result); } else { int mustCopy = 1, format = 0; char *c; if (valueObject == NULL) { valueObject = Tcl_ObjSetVar2(interp, XOTclGlobalObjects[XOTE_AUTONAMES], name, XOTclGlobalObjects[XOTE_ONE], flgs); } if (instanceOpt) { char firstChar, *nextChars; nextChars = ObjStr(name); firstChar = *(nextChars ++); if (isupper((int)firstChar)) { char buffer[1]; buffer[0] = tolower((int)firstChar); result = Tcl_NewStringObj(buffer, 1); INCR_REF_COUNT(result); Tcl_AppendToObj(result, nextChars, -1); mustCopy = 0; } } |
︙ | ︙ | |||
2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 | /* when we find a %% we format and then append autoname, e.g. autoname a%% --> a%1, a%2, ... */ c++; } } } if (format) { ALLOC_ON_STACK(Tcl_Obj*, 3, ov); savedResult = Tcl_GetObjResult(interp); INCR_REF_COUNT(savedResult); ov[0] = XOTclGlobalObjects[XOTE_FORMAT]; ov[1] = result; ov[2] = valueObject; if (Tcl_EvalObjv(interp, 3, ov, 0) != TCL_OK) { XOTcl_PopFrame(interp, obj); DECR_REF_COUNT(savedResult); FREE_ON_STACK(Tcl_Obj *, ov); return 0; } DECR_REF_COUNT(result); result = Tcl_DuplicateObj(Tcl_GetObjResult(interp)); INCR_REF_COUNT(result); Tcl_SetObjResult(interp, savedResult); DECR_REF_COUNT(savedResult); FREE_ON_STACK(Tcl_Obj *, ov); } else { | > > | | 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 | /* when we find a %% we format and then append autoname, e.g. autoname a%% --> a%1, a%2, ... */ c++; } } } if (format) { Tcl_Obj *savedResult; ALLOC_ON_STACK(Tcl_Obj*, 3, ov); savedResult = Tcl_GetObjResult(interp); INCR_REF_COUNT(savedResult); ov[0] = XOTclGlobalObjects[XOTE_FORMAT]; ov[1] = result; ov[2] = valueObject; if (Tcl_EvalObjv(interp, 3, ov, 0) != TCL_OK) { XOTcl_PopFrame(interp, obj); DECR_REF_COUNT(savedResult); FREE_ON_STACK(Tcl_Obj *, ov); return 0; } DECR_REF_COUNT(result); result = Tcl_DuplicateObj(Tcl_GetObjResult(interp)); INCR_REF_COUNT(result); Tcl_SetObjResult(interp, savedResult); DECR_REF_COUNT(savedResult); FREE_ON_STACK(Tcl_Obj *, ov); } else { char *valueString = Tcl_GetStringFromObj(valueObject,&valueLength); Tcl_AppendToObj(result, valueString, valueLength); /*fprintf(stderr,"+++ append to obj done\n");*/ } } XOTcl_PopFrame(interp, obj); assert((resetOpt && result->refCount>=1) || (result->refCount == 1)); |
︙ | ︙ | |||
2731 2732 2733 2734 2735 2736 2737 | } /* * remove all command pointers from a list that have a bumped epoch */ static void CmdListRemoveEpoched(XOTclCmdList **cmdList, XOTclFreeCmdListClientData *freeFct) { | | | | | | < | | 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 | } /* * remove all command pointers from a list that have a bumped epoch */ static void CmdListRemoveEpoched(XOTclCmdList **cmdList, XOTclFreeCmdListClientData *freeFct) { XOTclCmdList *f = *cmdList; while (f) { if (Tcl_Command_cmdEpoch(f->cmdPtr)) { XOTclCmdList *del = f; f = f->next; del = CmdListRemoveFromList(cmdList, del); CmdListDeleteCmdListEntry(del, freeFct); } else f = f->next; } } /* * delete all cmds with given context class object */ static void CmdListRemoveContextClassFromList(XOTclCmdList **cmdList, XOTclClass *clorobj, XOTclFreeCmdListClientData *freeFct) { XOTclCmdList *c; /* CmdListRemoveEpoched(cmdList, freeFct); */ c = *cmdList; while (c && c->clorobj == clorobj) { XOTclCmdList *del = c; *cmdList = c->next; CmdListDeleteCmdListEntry(del, freeFct); c = *cmdList; } while (c) { if (c->clorobj == clorobj) { XOTclCmdList *del = c; c = *cmdList; while (c->next && c->next != del) c = c->next; if (c->next == del) c->next = del->next; CmdListDeleteCmdListEntry(del, freeFct); } c = c->next; } } /* * free the memory of a whole 'cmdList' */ static void CmdListRemoveList(XOTclCmdList **cmdList, XOTclFreeCmdListClientData *freeFct) { while (*cmdList) { XOTclCmdList *del = *cmdList; *cmdList = (*cmdList)->next; CmdListDeleteCmdListEntry(del, freeFct); } } /* * simple list search proc to search a list of cmds |
︙ | ︙ | |||
2889 2890 2891 2892 2893 2894 2895 | hPtr = XOTcl_FindHashEntry(&aStore->procs, name); if (hPtr == NULL) return NULL; return (XOTclProcAssertion*) Tcl_GetHashValue(hPtr); } static void AssertionRemoveProc(XOTclAssertionStore *aStore, char *name) { | < | > | 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 | hPtr = XOTcl_FindHashEntry(&aStore->procs, name); if (hPtr == NULL) return NULL; return (XOTclProcAssertion*) Tcl_GetHashValue(hPtr); } static void AssertionRemoveProc(XOTclAssertionStore *aStore, char *name) { if (aStore) { Tcl_HashEntry *hPtr = XOTcl_FindHashEntry(&aStore->procs, name); if (hPtr) { XOTclProcAssertion *procAss = (XOTclProcAssertion*) Tcl_GetHashValue(hPtr); TclObjListFreeList(procAss->pre); TclObjListFreeList(procAss->post); FREE(XOTclProcAssertion, procAss); Tcl_DeleteHashEntry(hPtr); |
︙ | ︙ | |||
2929 2930 2931 2932 2933 2934 2935 | MEM_COUNT_ALLOC("Tcl_InitHashTable",&aStore->procs); return aStore; } static void AssertionRemoveStore(XOTclAssertionStore *aStore) { Tcl_HashSearch hSrch; | < > | 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 | MEM_COUNT_ALLOC("Tcl_InitHashTable",&aStore->procs); return aStore; } static void AssertionRemoveStore(XOTclAssertionStore *aStore) { Tcl_HashSearch hSrch; if (aStore) { Tcl_HashEntry *hPtr; for (hPtr = Tcl_FirstHashEntry(&aStore->procs, &hSrch); hPtr; hPtr = Tcl_FirstHashEntry(&aStore->procs, &hSrch)) { /* * AssertionRemoveProc calls Tcl_DeleteHashEntry(hPtr), thus * we get the FirstHashEntry afterwards again to proceed */ AssertionRemoveProc(aStore, Tcl_GetHashKey(&aStore->procs, hPtr)); |
︙ | ︙ | |||
3083 3084 3085 3086 3087 3088 3089 | } return result; } static int AssertionCheck(Tcl_Interp *interp, XOTclObject *obj, XOTclClass *cl, char *method, int checkOption) { | < | | 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 | } return result; } static int AssertionCheck(Tcl_Interp *interp, XOTclObject *obj, XOTclClass *cl, char *method, int checkOption) { int result = TCL_OK; XOTclAssertionStore *aStore; if (cl) aStore = cl->opt ? cl->opt->assertions : 0; else aStore = obj->opt ? obj->opt->assertions : 0; assert(obj->opt); if (checkOption & obj->opt->checkoptions) { XOTclProcAssertion *procs = AssertionFindProcs(aStore, method); if (procs) { switch (checkOption) { case CHECK_PRE: result = AssertionCheckList(interp, obj, procs->pre, method); break; case CHECK_POST: result = AssertionCheckList(interp, obj, procs->post, method); |
︙ | ︙ | |||
3302 3303 3304 3305 3306 3307 3308 | name = ovName[0]; guard = ovName[2]; /*fprintf(stderr,"mixinadd name = '%s', guard = '%s'\n", ObjStr(name), ObjStr(guard));*/ } /*else return XOTclVarErrMsg(interp, "mixin registration '", ObjStr(name), "' has too many elements.", (char *) NULL);*/ } | | > > | | > > | 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 | name = ovName[0]; guard = ovName[2]; /*fprintf(stderr,"mixinadd name = '%s', guard = '%s'\n", ObjStr(name), ObjStr(guard));*/ } /*else return XOTclVarErrMsg(interp, "mixin registration '", ObjStr(name), "' has too many elements.", (char *) NULL);*/ } if (GetXOTclClassFromObj(interp, name, &mixin, 1) != TCL_OK) { char *errorString = ObjStr(Tcl_GetObjResult(interp)); if (*errorString == '\0') { XOTclErrBadVal(interp, "mixin", "a class as mixin", ObjStr(name)); } return TCL_ERROR; } new = CmdListAdd(mixinList, mixin->object.id, NULL, /*noDuplicates*/ 1); if (guard) { GuardAdd(interp, new, guard); } else { if (new->clientData) |
︙ | ︙ | |||
3365 3366 3367 3368 3369 3370 3371 | XOTclObject *obj = (XOTclObject *)cls->cl; if (obj) { if (matchObject && obj == matchObject) { /* we have a matchObject and it is identical to obj, just return true and don't continue search */ return 1; | < | 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 | XOTclObject *obj = (XOTclObject *)cls->cl; if (obj) { if (matchObject && obj == matchObject) { /* we have a matchObject and it is identical to obj, just return true and don't continue search */ return 1; } else { AppendMatchingElement(interp, obj->cmdName, pattern); } } } return rc; } |
︙ | ︙ | |||
3505 3506 3507 3508 3509 3510 3511 | rc = getAllObjectMixinsOf(interp, destTable, sc->cl, isMixin, appendResult, pattern, matchObject); if (rc) {return rc;} } /*fprintf(stderr, "check subclasses of %s done\n",ObjStr(startCl->object.cmdName));*/ if (startCl->opt) { XOTclCmdList *m; | < > < > | 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 | rc = getAllObjectMixinsOf(interp, destTable, sc->cl, isMixin, appendResult, pattern, matchObject); if (rc) {return rc;} } /*fprintf(stderr, "check subclasses of %s done\n",ObjStr(startCl->object.cmdName));*/ if (startCl->opt) { XOTclCmdList *m; for (m = startCl->opt->isClassMixinOf; m; m = m->next) { XOTclClass *cl; /* we should have no deleted commands in the list */ assert(Tcl_Command_cmdEpoch(m->cmdPtr) == 0); cl = XOTclGetClassFromCmdPtr(m->cmdPtr); assert(cl); /* fprintf(stderr, "check %s mixinof %s\n", ObjStr(cl->object.cmdName),ObjStr(startCl->object.cmdName));*/ rc = getAllObjectMixinsOf(interp, destTable, cl, isMixin, appendResult, pattern, matchObject); /*fprintf(stderr, "check %s mixinof %s done\n", ObjStr(cl->object.cmdName),ObjStr(startCl->object.cmdName));*/ if (rc) {return rc;} } } /* * check, if startCl has associated per-object mixins */ if (startCl->opt) { XOTclCmdList *m; for (m = startCl->opt->isObjectMixinOf; m; m = m->next) { XOTclObject *obj; /* we should have no deleted commands in the list */ assert(Tcl_Command_cmdEpoch(m->cmdPtr) == 0); obj = XOTclGetObjectFromCmdPtr(m->cmdPtr); assert(obj); |
︙ | ︙ | |||
3948 3949 3950 3951 3952 3953 3954 | /* * info option for mixins and instmixins */ static int MixinInfo(Tcl_Interp *interp, XOTclCmdList *m, char *pattern, int withGuards, XOTclObject *matchObject) { Tcl_Obj *list = Tcl_NewListObj(0, NULL); | < | > | 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 | /* * info option for mixins and instmixins */ static int MixinInfo(Tcl_Interp *interp, XOTclCmdList *m, char *pattern, int withGuards, XOTclObject *matchObject) { Tcl_Obj *list = Tcl_NewListObj(0, NULL); while (m) { /* fprintf(stderr," mixin info m=%p, next=%p, pattern %s, matchObject %p\n", m, m->next, pattern, matchObject);*/ XOTclClass *mixinClass = XOTclGetClassFromCmdPtr(m->cmdPtr); if (mixinClass && (!pattern || (matchObject && &(mixinClass->object) == matchObject) || (!matchObject && Tcl_StringMatch(ObjStr(mixinClass->object.cmdName), pattern)))) { if (withGuards && m->clientData) { Tcl_Obj *l = Tcl_NewListObj(0, NULL); Tcl_Obj *g = (Tcl_Obj*) m->clientData; |
︙ | ︙ | |||
4198 4199 4200 4201 4202 4203 4204 | return rc; } static int GuardAddFromDefinitionList(Tcl_Interp *interp, XOTclCmdList *dest, XOTclObject *obj, Tcl_Command interceptorCmd, XOTclCmdList *interceptorDefList) { | < | | 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 | return rc; } static int GuardAddFromDefinitionList(Tcl_Interp *interp, XOTclCmdList *dest, XOTclObject *obj, Tcl_Command interceptorCmd, XOTclCmdList *interceptorDefList) { if (interceptorDefList) { XOTclCmdList *h = CmdListFindCmdInList(interceptorCmd, interceptorDefList); if (h) { GuardAdd(interp, dest, (Tcl_Obj*) h->clientData); /* * 1 means we have added a guard successfully "interceptorCmd" */ return 1; } |
︙ | ︙ | |||
4227 4228 4229 4230 4231 4232 4233 | XOTclObjectOpt *opt; /* search guards for instfilters registered on mixins */ if (!(obj->flags & XOTCL_MIXIN_ORDER_VALID)) MixinComputeDefined(interp, obj); if (obj->flags & XOTCL_MIXIN_ORDER_DEFINED_AND_VALID) { XOTclCmdList *ml; | | | > | 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 | XOTclObjectOpt *opt; /* search guards for instfilters registered on mixins */ if (!(obj->flags & XOTCL_MIXIN_ORDER_VALID)) MixinComputeDefined(interp, obj); if (obj->flags & XOTCL_MIXIN_ORDER_DEFINED_AND_VALID) { XOTclCmdList *ml; for (ml = obj->mixinOrder; ml && !guardAdded; ml = ml->next) { XOTclClass *mixin = XOTclGetClassFromCmdPtr(ml->cmdPtr); if (mixin && mixin->opt) { guardAdded = GuardAddFromDefinitionList(interp, dest, obj, filterCmd, mixin->opt->instfilters); } } } |
︙ | ︙ | |||
4276 4277 4278 4279 4280 4281 4282 | } } } } static int GuardList(Tcl_Interp *interp, XOTclCmdList *frl, char *interceptorName) { | < | | 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 | } } } } static int GuardList(Tcl_Interp *interp, XOTclCmdList *frl, char *interceptorName) { if (frl) { /* try to find simple name first */ XOTclCmdList *h = CmdListFindNameInList(interp, interceptorName, frl); if (!h) { /* maybe it is a qualified name */ Tcl_Command cmd = NSFindCommand(interp, interceptorName, NULL); if (cmd) { h = CmdListFindCmdInList(cmd, frl); } } |
︙ | ︙ | |||
4361 4362 4363 4364 4365 4366 4367 | * search the filter in the hierarchy again with FilterSearch, e.g. * upon changes in the class hierarchy or mixins that carry the filter * command, so that we can be sure it is still reachable. */ static void FilterSearchAgain(Tcl_Interp *interp, XOTclCmdList **filters, XOTclObject *startingObj, XOTclClass *startingCl) { | < | | 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 | * search the filter in the hierarchy again with FilterSearch, e.g. * upon changes in the class hierarchy or mixins that carry the filter * command, so that we can be sure it is still reachable. */ static void FilterSearchAgain(Tcl_Interp *interp, XOTclCmdList **filters, XOTclObject *startingObj, XOTclClass *startingCl) { Tcl_Command cmd; XOTclCmdList *cmdList, *del; XOTclClass *cl = NULL; CmdListRemoveEpoched(filters, GuardDel); for (cmdList = *filters; cmdList; ) { char *simpleName = (char *) Tcl_GetCommandName(interp, cmdList->cmdPtr); cmd = FilterSearch(interp, simpleName, startingObj, startingCl, &cl); if (cmd == NULL) { del = CmdListRemoveFromList(filters, cmdList); cmdList = cmdList->next; CmdListDeleteCmdListEntry(del, GuardDel); } else if (cmd != cmdList->cmdPtr) { CmdListReplaceCmd(cmdList, cmd, cl); |
︙ | ︙ | |||
4510 4511 4512 4513 4514 4515 4516 | * info option for filters and instfilters * withGuards -> if not 0 => append guards * fullProcQualifiers -> if not 0 => full names with obj/class proc/instproc */ static int FilterInfo(Tcl_Interp *interp, XOTclCmdList *f, char *pattern, int withGuards, int fullProcQualifiers) { | < | | 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 | * info option for filters and instfilters * withGuards -> if not 0 => append guards * fullProcQualifiers -> if not 0 => full names with obj/class proc/instproc */ static int FilterInfo(Tcl_Interp *interp, XOTclCmdList *f, char *pattern, int withGuards, int fullProcQualifiers) { Tcl_Obj *list = Tcl_NewListObj(0, NULL); /* guard lists should only have unqualified filter lists when withGuards is activated, fullProcQualifiers has not effect */ if (withGuards) { fullProcQualifiers = 0; } while (f) { CONST84 char *simpleName = Tcl_GetCommandName(interp, f->cmdPtr); if (!pattern || Tcl_StringMatch(simpleName, pattern)) { if (withGuards && f->clientData) { Tcl_Obj *innerList = Tcl_NewListObj(0, NULL); Tcl_Obj *g = (Tcl_Obj*) f->clientData; Tcl_ListObjAppendElement(interp, innerList, Tcl_NewStringObj(simpleName, -1)); Tcl_ListObjAppendElement(interp, innerList, XOTclGlobalObjects[XOTE_GUARD_OPTION]); |
︙ | ︙ | |||
4564 4565 4566 4567 4568 4569 4570 | * Appends XOTclCmdPtr *containing the filter cmds and their * superclass specializations to 'filterList' */ static void FilterComputeOrderFullList(Tcl_Interp *interp, XOTclCmdList **filters, XOTclCmdList **filterList) { XOTclCmdList *f ; | < | | 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 | * Appends XOTclCmdPtr *containing the filter cmds and their * superclass specializations to 'filterList' */ static void FilterComputeOrderFullList(Tcl_Interp *interp, XOTclCmdList **filters, XOTclCmdList **filterList) { XOTclCmdList *f ; XOTclClass *fcl; XOTclClasses *pl; /* * ensure that no epoched command is in the filters list */ CmdListRemoveEpoched(filters, GuardDel); for (f = *filters; f; f = f->next) { char *simpleName = (char *) Tcl_GetCommandName(interp, f->cmdPtr); fcl = f->clorobj; CmdListAdd(filterList, f->cmdPtr, fcl, /*noDuplicates*/ 0); if (fcl && !XOTclObjectIsClass(&fcl->object)) { /* get the object for per-object filter */ XOTclObject *fObj = (XOTclObject *)fcl; /* and then get class */ |
︙ | ︙ | |||
4867 4868 4869 4870 4871 4872 4873 4874 | and of all depended classes */ MixinInvalidateObjOrders(interp, cl); FilterInvalidateObjOrders(interp, cl); scl = NEW_ARRAY(XOTclClass*, oc); for (i = 0; i < oc; i++) { if (GetXOTclClassFromObj(interp, ov[i], &scl[i], 1) != TCL_OK) { FREE(XOTclClass**, scl); | > > | | > > | 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 | and of all depended classes */ MixinInvalidateObjOrders(interp, cl); FilterInvalidateObjOrders(interp, cl); scl = NEW_ARRAY(XOTclClass*, oc); for (i = 0; i < oc; i++) { if (GetXOTclClassFromObj(interp, ov[i], &scl[i], 1) != TCL_OK) { char *errorString = ObjStr(Tcl_GetObjResult(interp)); FREE(XOTclClass**, scl); if (*errorString == '\0') { XOTclErrBadVal(interp, "superclass", "a list of classes", ObjStr(arg)); } return TCL_ERROR; } } /* * check that superclasses don't precede their classes */ |
︙ | ︙ | |||
5137 5138 5139 5140 5141 5142 5143 | /* * Search default values specified through 'parameter' on * mixin and class hierarchy */ static int SearchDefaultValues(Tcl_Interp *interp, XOTclObject *obj, XOTclClass *cmdCl) { XOTcl_FrameDecls; | | | | 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 | /* * Search default values specified through 'parameter' on * mixin and class hierarchy */ static int SearchDefaultValues(Tcl_Interp *interp, XOTclObject *obj, XOTclClass *cmdCl) { XOTcl_FrameDecls; XOTclClass *cl = obj->cl; XOTclClasses *pl; XOTclCmdList *ml; int result = TCL_OK; if (!(obj->flags & XOTCL_MIXIN_ORDER_VALID)) MixinComputeDefined(interp, obj); if (obj->flags & XOTCL_MIXIN_ORDER_DEFINED_AND_VALID) ml = obj->mixinOrder; else ml = NULL; assert(cl); XOTcl_PushFrame(interp, obj); while (ml) { XOTclClass *mixin = XOTclGetClassFromCmdPtr(ml->cmdPtr); result = SearchDefaultValuesOnClass(interp, obj, cmdCl, mixin); if (result != TCL_OK) break; ml = ml->next; } for (pl = ComputeOrder(cl, cl->order, Super); pl; pl = pl->next) { |
︙ | ︙ | |||
5199 5200 5201 5202 5203 5204 5205 | XOTclClassOpt *opt = obj->cl->opt; Tcl_Obj *pcl = XOTclGlobalObjects[XOTE_PARAM_CL]; XOTclClass *paramCl; int result; if (opt && opt->parameterClass) pcl = opt->parameterClass; | | > < | > > | | > > | 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 | XOTclClassOpt *opt = obj->cl->opt; Tcl_Obj *pcl = XOTclGlobalObjects[XOTE_PARAM_CL]; XOTclClass *paramCl; int result; if (opt && opt->parameterClass) pcl = opt->parameterClass; result = GetXOTclClassFromObj(interp, pcl,¶mCl, 1); if (result == TCL_OK) { result = XOTclCallMethodWithArgs((ClientData)paramCl, interp, method, arg, objc-2, objv, flags); } else { char *errorString = ObjStr(Tcl_GetObjResult(interp)); if (*errorString == '\0') { XOTclVarErrMsg(interp, "create: can't find parameter class", (char *) NULL); } } return result; } #if !defined(PRE85) # if defined(WITH_TCL_COMPILE) # include <tclCompile.h> # endif |
︙ | ︙ | |||
5521 5522 5523 5524 5525 5526 5527 | if (rst->cs.top->callType & XOTCL_CSC_CALL_IS_DESTROY) { rst->callIsDestroy = 1; /*fprintf(stderr,"callProcCheck: setting callIsDestroy = 1\n");*/ } if (obj->opt && !rst->callIsDestroy && obj->teardown && (obj->opt->checkoptions & CHECK_POST) && | | | 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 | if (rst->cs.top->callType & XOTCL_CSC_CALL_IS_DESTROY) { rst->callIsDestroy = 1; /*fprintf(stderr,"callProcCheck: setting callIsDestroy = 1\n");*/ } if (obj->opt && !rst->callIsDestroy && obj->teardown && (obj->opt->checkoptions & CHECK_POST) && ((result = AssertionCheck(interp, obj, cl, methodName, CHECK_POST)) == TCL_ERROR)) { goto finish; } } finish: #if defined(PROFILE) if (rst->callIsDestroy == 0) { |
︙ | ︙ | |||
5886 5887 5888 5889 5890 5891 5892 | return NULL; } static Tcl_Obj* NonposArgsFormat(Tcl_Interp *interp, Tcl_Obj *nonposArgsData) { int r1, npalistc, npac, checkc; Tcl_Obj **npalistv, **npav, **checkv, | | < > > | 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 | return NULL; } static Tcl_Obj* NonposArgsFormat(Tcl_Interp *interp, Tcl_Obj *nonposArgsData) { int r1, npalistc, npac, checkc; Tcl_Obj **npalistv, **npav, **checkv, *list = Tcl_NewListObj(0, NULL); /*fprintf(stderr, "nonposargsformat '%s'\n", ObjStr(nonposArgsData));*/ r1 = Tcl_ListObjGetElements(interp, nonposArgsData, &npalistc, &npalistv); if (r1 == TCL_OK) { int i, j; for (i=0; i < npalistc; i++) { r1 = Tcl_ListObjGetElements(interp, npalistv[i], &npac, &npav); if (r1 == TCL_OK) { Tcl_Obj *innerlist, *nameStringObj; nameStringObj = Tcl_NewStringObj("-", 1); Tcl_AppendStringsToObj(nameStringObj, ObjStr(npav[0]), (char *) NULL); if (npac > 1 && *(ObjStr(npav[1])) != '\0') { r1 = Tcl_ListObjGetElements(interp, npav[1], &checkc, &checkv); if (r1 == TCL_OK) { int first = 1; |
︙ | ︙ | |||
5979 5980 5981 5982 5983 5984 5985 | rc = Tcl_ListObjGetElements(interp, npArgs, &nonposArgsDefc, &nonposArgsDefv); if (rc != TCL_OK) { return XOTclVarErrMsg(interp, "cannot break down non-positional args: ", ObjStr(npArgs), (char *) NULL); } if (nonposArgsDefc > 0) { | | < | < > > > > | 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 | rc = Tcl_ListObjGetElements(interp, npArgs, &nonposArgsDefc, &nonposArgsDefv); if (rc != TCL_OK) { return XOTclVarErrMsg(interp, "cannot break down non-positional args: ", ObjStr(npArgs), (char *) NULL); } if (nonposArgsDefc > 0) { int start, end, i, j, nw = 0; Tcl_Obj **npav, *nonposArgsObj = Tcl_NewListObj(0, NULL); INCR_REF_COUNT(nonposArgsObj); for (i=0; i < nonposArgsDefc; i++) { Tcl_Obj *npaObj; int length; char *arg; rc = Tcl_ListObjGetElements(interp, nonposArgsDefv[i], &npac, &npav); if (rc == TCL_ERROR || npac < 1 || npac > 2) { DECR_REF_COUNT(nonposArgsObj); return XOTclVarErrMsg(interp, "wrong # of elements in non-positional args ", "(should be 1 or 2 list elements): ", ObjStr(npArgs), (char *) NULL); } |
︙ | ︙ | |||
6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 | } Tcl_ListObjAppendElement(interp, nonposArgsObj, npaObj); *haveNonposArgs = 1; } if (*haveNonposArgs) { XOTclNonposArgs *nonposArg; if (*nonposArgsTable == NULL) { *nonposArgsTable = NonposArgsCreateTable(); } hPtr = Tcl_CreateHashEntry(*nonposArgsTable, procName, &nw); assert(nw); | > | 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 | } Tcl_ListObjAppendElement(interp, nonposArgsObj, npaObj); *haveNonposArgs = 1; } if (*haveNonposArgs) { XOTclNonposArgs *nonposArg; Tcl_HashEntry *hPtr; if (*nonposArgsTable == NULL) { *nonposArgsTable = NonposArgsCreateTable(); } hPtr = Tcl_CreateHashEntry(*nonposArgsTable, procName, &nw); assert(nw); |
︙ | ︙ | |||
6109 6110 6111 6112 6113 6114 6115 | /* see, if we have nonposArgs in the ordinary argument list */ result = Tcl_ListObjGetElements(interp, objv[2], &argsc, &argsv); if (result != TCL_OK) { return XOTclVarErrMsg(interp, "cannot break args into list: ", ObjStr(objv[2]), (char *) NULL); } for (i=0; i<argsc; i++) { | < | | 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 | /* see, if we have nonposArgs in the ordinary argument list */ result = Tcl_ListObjGetElements(interp, objv[2], &argsc, &argsv); if (result != TCL_OK) { return XOTclVarErrMsg(interp, "cannot break args into list: ", ObjStr(objv[2]), (char *) NULL); } for (i=0; i<argsc; i++) { int npac, rc; Tcl_Obj **npav; /* arg = ObjStr(argsv[i]); fprintf(stderr, "*** argparse0 arg='%s'\n", arg);*/ rc = Tcl_ListObjGetElements(interp, argsv[i], &npac, &npav); if (rc == TCL_OK && npac > 0) { char *arg = ObjStr(npav[0]); /* fprintf(stderr, "*** argparse1 arg='%s' rc=%d\n", arg, rc);*/ if (*arg == '-') { haveNonposArgs = 1; continue; } } break; |
︙ | ︙ | |||
6498 6499 6500 6501 6502 6503 6504 | } if (!noMixins) { if (!(obj->flags & XOTCL_MIXIN_ORDER_VALID)) MixinComputeDefined(interp, obj); if (obj->flags & XOTCL_MIXIN_ORDER_DEFINED_AND_VALID) { XOTclCmdList *ml; | | | > | 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 | } if (!noMixins) { if (!(obj->flags & XOTCL_MIXIN_ORDER_VALID)) MixinComputeDefined(interp, obj); if (obj->flags & XOTCL_MIXIN_ORDER_DEFINED_AND_VALID) { XOTclCmdList *ml; for (ml = obj->mixinOrder; ml; ml = ml->next) { int guardOk = TCL_OK; XOTclClass *mixin = XOTclGetClassFromCmdPtr(ml->cmdPtr); if (inContext) { XOTclCallStack *cs = &RUNTIME_STATE(interp)->cs; if (!cs->guardCount) { guardOk = GuardCall(obj, 0, 0, interp, ml->clientData, 1); } } if (mixin && guardOk == TCL_OK) { |
︙ | ︙ | |||
6603 6604 6605 6606 6607 6608 6609 | } static void AppendOrdinaryArgsFromNonposArgs(Tcl_Interp *interp, XOTclNonposArgs *nonposArgs, int varsOnly, Tcl_Obj *argList) { int i, rc, ordinaryArgsDefc, defaultValueObjc; | | | | | 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 | } static void AppendOrdinaryArgsFromNonposArgs(Tcl_Interp *interp, XOTclNonposArgs *nonposArgs, int varsOnly, Tcl_Obj *argList) { int i, rc, ordinaryArgsDefc, defaultValueObjc; Tcl_Obj **ordinaryArgsDefv, **defaultValueObjv; rc = Tcl_ListObjGetElements(interp, nonposArgs->ordinaryArgs, &ordinaryArgsDefc, &ordinaryArgsDefv); for (i=0; i < ordinaryArgsDefc; i++) { Tcl_Obj *ordinaryArg = ordinaryArgsDefv[i]; rc = Tcl_ListObjGetElements(interp, ordinaryArg, &defaultValueObjc, &defaultValueObjv); if (rc == TCL_OK) { if (varsOnly && defaultValueObjc == 2) { Tcl_ListObjAppendElement(interp, argList, defaultValueObjv[0]); } else { Tcl_ListObjAppendElement(interp, argList, ordinaryArg); } } } } static int ListArgsFromOrdinaryArgs(Tcl_Interp *interp, XOTclNonposArgs *nonposArgs) { Tcl_Obj *argList = Tcl_NewListObj(0, NULL); AppendOrdinaryArgsFromNonposArgs(interp, nonposArgs, 1, argList); Tcl_SetObjResult(interp, argList); return TCL_OK; } static int GetProcDefault(Tcl_Interp *interp, Tcl_HashTable *table, |
︙ | ︙ | |||
6699 6700 6701 6702 6703 6704 6705 | return result; } static int ListDefaultFromOrdinaryArgs(Tcl_Interp *interp, char *procName, XOTclNonposArgs *nonposArgs, char *arg, Tcl_Obj *var) { int i, rc, ordinaryArgsDefc, defaultValueObjc; | | | | 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 | return result; } static int ListDefaultFromOrdinaryArgs(Tcl_Interp *interp, char *procName, XOTclNonposArgs *nonposArgs, char *arg, Tcl_Obj *var) { int i, rc, ordinaryArgsDefc, defaultValueObjc; Tcl_Obj **ordinaryArgsDefv, **defaultValueObjv; rc = Tcl_ListObjGetElements(interp, nonposArgs->ordinaryArgs, &ordinaryArgsDefc, &ordinaryArgsDefv); if (rc != TCL_OK) return TCL_ERROR; for (i=0; i < ordinaryArgsDefc; i++) { Tcl_Obj *ordinaryArg = ordinaryArgsDefv[i]; rc = Tcl_ListObjGetElements(interp, ordinaryArg, &defaultValueObjc, &defaultValueObjv); /*fprintf(stderr, "arg='%s', *arg==0 %d, defaultValueObjc=%d\n", arg, *arg==0, defaultValueObjc);*/ if (rc == TCL_OK) { if (defaultValueObjc > 0 && !strcmp(arg, ObjStr(defaultValueObjv[0]))) { return SetProcDefault(interp, var, defaultValueObjc == 2 ? defaultValueObjv[1] : NULL); } else if (defaultValueObjc == 0 && *arg == 0) { |
︙ | ︙ | |||
6771 6772 6773 6774 6775 6776 6777 | Tcl_SetObjResult(interp, XOTclGlobalObjects[XOTE_EMPTY]); } XOTcl_PopFrame(interp, obj); } else { Tcl_Obj *list = Tcl_NewListObj(0, NULL); Tcl_HashSearch hSrch; Tcl_HashEntry *hPtr = Tcl_FirstHashEntry(cmdTable, &hSrch); | | | | 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 | Tcl_SetObjResult(interp, XOTclGlobalObjects[XOTE_EMPTY]); } XOTcl_PopFrame(interp, obj); } else { Tcl_Obj *list = Tcl_NewListObj(0, NULL); Tcl_HashSearch hSrch; Tcl_HashEntry *hPtr = Tcl_FirstHashEntry(cmdTable, &hSrch); XOTcl_PushFrame(interp, obj); for (; hPtr; hPtr = Tcl_NextHashEntry(&hSrch)) { char *key = Tcl_GetHashKey(cmdTable, hPtr); if (!pattern || Tcl_StringMatch(key, pattern)) { if ((childobj = XOTclpGetObject(interp, key)) && (!classesOnly || XOTclObjectIsClass(childobj)) && (childobj->id && Tcl_Command_nsPtr(childobj->id) == obj->nsPtr) /* true children */ ) { Tcl_ListObjAppendElement(interp, list, childobj->cmdName); } |
︙ | ︙ | |||
7354 7355 7356 7357 7358 7359 7360 | fprintf(stderr, "### unsetInAllNamespaces variable '%s', current namespace '%s'\n", name, nsPtr ? nsPtr->fullName : "NULL"); if (nsPtr) { Tcl_HashSearch search; Tcl_HashEntry *entryPtr = Tcl_FirstHashEntry(&nsPtr->childTable, &search); Tcl_Var *varPtr; | < > > | 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 | fprintf(stderr, "### unsetInAllNamespaces variable '%s', current namespace '%s'\n", name, nsPtr ? nsPtr->fullName : "NULL"); if (nsPtr) { Tcl_HashSearch search; Tcl_HashEntry *entryPtr = Tcl_FirstHashEntry(&nsPtr->childTable, &search); Tcl_Var *varPtr; varPtr = (Tcl_Var *) Tcl_FindNamespaceVar(interp, name, (Tcl_Namespace *) nsPtr, 0); /*fprintf(stderr, "found %s in %s -> %p\n", name, nsPtr->fullName, varPtr);*/ if (varPtr) { Tcl_DString dFullname, *dsPtr = &dFullname; int result; Tcl_DStringInit(dsPtr); Tcl_DStringAppend(dsPtr, "unset ", -1); Tcl_DStringAppend(dsPtr, nsPtr->fullName, -1); Tcl_DStringAppend(dsPtr, "::", 2); Tcl_DStringAppend(dsPtr, name, -1); /*rc = Tcl_UnsetVar2(interp, Tcl_DStringValue(dsPtr), NULL, TCL_LEAVE_ERR_MSG);*/ result = Tcl_Eval(interp, Tcl_DStringValue(dsPtr)); |
︙ | ︙ | |||
7549 7550 7551 7552 7553 7554 7555 | */ removeFromObjectMixinsOf(obj->id, opt->mixins); CmdListRemoveList(&opt->mixins, GuardDel); CmdListRemoveList(&opt->filters, GuardDel); FREE(XOTclObjectOpt, opt); | | | 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 | */ removeFromObjectMixinsOf(obj->id, opt->mixins); CmdListRemoveList(&opt->mixins, GuardDel); CmdListRemoveList(&opt->filters, GuardDel); FREE(XOTclObjectOpt, opt); obj->opt = 0; } } if (obj->nonposArgsTable) { NonposArgsFreeTable(obj->nonposArgsTable); Tcl_DeleteHashTable(obj->nonposArgsTable); MEM_COUNT_FREE("Tcl_InitHashTable", obj->nonposArgsTable); |
︙ | ︙ | |||
7768 7769 7770 7771 7772 7773 7774 | /* * Cleanup class: remove filters, mixins, assertions, instances ... * and remove class from class hierarchy */ static void CleanupDestroyClass(Tcl_Interp *interp, XOTclClass *cl, int softrecreate, int recreate) { Tcl_HashSearch hSrch; | < | 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 | /* * Cleanup class: remove filters, mixins, assertions, instances ... * and remove class from class hierarchy */ static void CleanupDestroyClass(Tcl_Interp *interp, XOTclClass *cl, int softrecreate, int recreate) { Tcl_HashSearch hSrch; XOTclClass *theobj = RUNTIME_STATE(interp)->theObject; XOTclClassOpt *clopt = cl->opt; assert(softrecreate? recreate == 1 : 1); /* fprintf(stderr, "CleanupDestroyClass softrecreate=%d,recreate=%d, %p\n", softrecreate,recreate,clopt); */ |
︙ | ︙ | |||
7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 | reset to ::xotcl::Class (and not to ::xotcl::Object as in earlier versions), since otherwise their instances can't be deleted, because ::xotcl::Object has no method "instdestroy". We do not have to reclassing in case, cl == ::xotcl::Object */ if (cl != theobj) { XOTclClass *baseClass = IsMetaClass(interp, cl) ? RUNTIME_STATE(interp)->theClass : theobj; if (baseClass == cl) { /* During final cleanup, we delete ::xotcl::Class; there are no more Classes or user objects available at that time, so we reclass to ::xotcl::Object. */ baseClass = theobj; } | > > | 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 | reset to ::xotcl::Class (and not to ::xotcl::Object as in earlier versions), since otherwise their instances can't be deleted, because ::xotcl::Object has no method "instdestroy". We do not have to reclassing in case, cl == ::xotcl::Object */ if (cl != theobj) { Tcl_HashEntry *hPtr; XOTclClass *baseClass = IsMetaClass(interp, cl) ? RUNTIME_STATE(interp)->theClass : theobj; if (baseClass == cl) { /* During final cleanup, we delete ::xotcl::Class; there are no more Classes or user objects available at that time, so we reclass to ::xotcl::Object. */ baseClass = theobj; } |
︙ | ︙ | |||
7875 7876 7877 7878 7879 7880 7881 | } if ((clopt) && (!recreate)) { if (clopt->parameterClass) { DECR_REF_COUNT(clopt->parameterClass); } FREE(XOTclClassOpt, clopt); | | | 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 | } if ((clopt) && (!recreate)) { if (clopt->parameterClass) { DECR_REF_COUNT(clopt->parameterClass); } FREE(XOTclClassOpt, clopt); cl->opt = 0; } /* On a recreate, it might be possible that the newly created class has a different superclass. So we have to flush the precedence list on a recreate as well. */ FlushPrecedencesOnSubclasses(cl); |
︙ | ︙ | |||
8534 8535 8536 8537 8538 8539 8540 | varExists(interp, obj, ObjStr(objv[1]), NULL, 1, 1)); return TCL_OK; } static int countModifiers(int objc, Tcl_Obj * CONST objv[]) { int i, count = 0; | | | > | 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 | varExists(interp, obj, ObjStr(objv[1]), NULL, 1, 1)); return TCL_OK; } static int countModifiers(int objc, Tcl_Obj * CONST objv[]) { int i, count = 0; for (i = 2; i < objc; i++) { char *to = ObjStr(objv[i]); if (to[0] == '-') { count++; /* '--' stops modifiers */ if (to[1] == '-') break; } } return count; |
︙ | ︙ | |||
8734 8735 8736 8737 8738 8739 8740 | return XOTclObjErrArgCnt(interp, obj->cmdName, "info info"); return ListInfo(interp, GetXOTclClassFromObj(interp, obj->cmdName, NULL, 0) == TCL_OK); } break; case 'm': if (!strcmp(cmd, "mixin")) { | | | 8749 8750 8751 8752 8753 8754 8755 8756 8757 8758 8759 8760 8761 8762 8763 | return XOTclObjErrArgCnt(interp, obj->cmdName, "info info"); return ListInfo(interp, GetXOTclClassFromObj(interp, obj->cmdName, NULL, 0) == TCL_OK); } break; case 'm': if (!strcmp(cmd, "mixin")) { int withOrder = 0, withGuards = 0; XOTclObject *matchObject; Tcl_DString ds, *dsPtr = &ds; if (objc-modifiers > 3) return XOTclObjErrArgCnt(interp, obj->cmdName, "info mixin ?-guards? ?-order? ?class?"); if (modifiers > 0) { |
︙ | ︙ | |||
8757 8758 8759 8760 8761 8762 8763 | DSTRING_INIT(dsPtr); if (getMatchObject(interp, &pattern, &matchObject, dsPtr) == -1) { return TCL_OK; } if (withOrder) { if (!(obj->flags & XOTCL_MIXIN_ORDER_VALID)) MixinComputeDefined(interp, obj); | | | | | | 8772 8773 8774 8775 8776 8777 8778 8779 8780 8781 8782 8783 8784 8785 8786 8787 8788 8789 8790 8791 | DSTRING_INIT(dsPtr); if (getMatchObject(interp, &pattern, &matchObject, dsPtr) == -1) { return TCL_OK; } if (withOrder) { if (!(obj->flags & XOTCL_MIXIN_ORDER_VALID)) MixinComputeDefined(interp, obj); MixinInfo(interp, obj->mixinOrder, pattern, withGuards, matchObject); } else if (opt) { MixinInfo(interp, opt->mixins, pattern, withGuards, matchObject); } DSTRING_FREE(dsPtr); return TCL_OK; } else if (!strcmp(cmd, "mixinguard")) { if (objc != 3 || modifiers > 0) return XOTclObjErrArgCnt(interp, obj->cmdName, "info mixinguard mixin"); return opt ? GuardList(interp, opt->mixins, pattern) : TCL_OK; } else if (!strcmp(cmd, "methods")) { |
︙ | ︙ | |||
8821 8822 8823 8824 8825 8826 8827 | else return TCL_OK; } else if (!strcmp(cmd, "parent")) { if (objc > 2 || modifiers > 0) return XOTclObjErrArgCnt(interp, obj->cmdName, "info parent"); return ListParent(interp, obj); } else if (!strcmp(cmd, "pre")) { | < | < | | 8836 8837 8838 8839 8840 8841 8842 8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855 8856 8857 8858 8859 8860 8861 | else return TCL_OK; } else if (!strcmp(cmd, "parent")) { if (objc > 2 || modifiers > 0) return XOTclObjErrArgCnt(interp, obj->cmdName, "info parent"); return ListParent(interp, obj); } else if (!strcmp(cmd, "pre")) { if (objc != 3 || modifiers > 0) return XOTclObjErrArgCnt(interp, obj->cmdName, "info pre <proc>"); if (opt) { XOTclProcAssertion *procs = AssertionFindProcs(opt->assertions, ObjStr(objv[2])); if (procs) Tcl_SetObjResult(interp, AssertionList(interp, procs->pre)); } return TCL_OK; } else if (!strcmp(cmd, "post")) { if (objc != 3 || modifiers > 0) return XOTclObjErrArgCnt(interp, obj->cmdName, "info post <proc>"); if (opt) { XOTclProcAssertion *procs = AssertionFindProcs(opt->assertions, ObjStr(objv[2])); if (procs) Tcl_SetObjResult(interp, AssertionList(interp, procs->post)); } return TCL_OK; } else if (!strcmp(cmd, "precedence")) { int intrinsic = 0; if (objc-modifiers > 3 || modifiers > 1) return XOTclObjErrArgCnt(interp, obj->cmdName, "info precedence ?-intrinsic? ?pattern?"); |
︙ | ︙ | |||
9014 9015 9016 9017 9018 9019 9020 | XOTcl_PopFrame(interp, obj); return result; } static int GetInstVarIntoCurrentScope(Tcl_Interp *interp, XOTclObject *obj, Tcl_Obj *varName, Tcl_Obj *newName) { | | | 9027 9028 9029 9030 9031 9032 9033 9034 9035 9036 9037 9038 9039 9040 9041 | XOTcl_PopFrame(interp, obj); return result; } static int GetInstVarIntoCurrentScope(Tcl_Interp *interp, XOTclObject *obj, Tcl_Obj *varName, Tcl_Obj *newName) { Var *otherPtr = NULL, *arrayPtr; int new; Tcl_CallFrame *varFramePtr; TclVarHashTable *tablePtr; XOTcl_FrameDecls; int flgs = TCL_LEAVE_ERR_MSG | /* PARSE_PART1 needed for 8.0.5 */ TCL_PARSE_PART1; |
︙ | ︙ | |||
9070 9071 9072 9073 9074 9075 9076 9077 9078 9079 9080 9081 9082 9083 9084 9085 9086 9087 9088 9089 9090 9091 9092 | if (varFramePtr && Tcl_CallFrame_isProcCallFrame(varFramePtr)) { Proc *procPtr = Tcl_CallFrame_procPtr(varFramePtr); int localCt = procPtr->numCompiledLocals; CompiledLocal *localPtr = procPtr->firstLocalPtr; Var *localVarPtr = Tcl_CallFrame_compiledLocals(varFramePtr); char *newNameString = ObjStr(newName); int i, nameLen = strlen(newNameString); for (i = 0; i < localCt; i++) { /* look in compiled locals */ /* fprintf(stderr,"%d of %d %s flags %x not isTemp %d\n", i, localCt, localPtr->name, localPtr->flags, !TclIsCompiledLocalTemporary(localPtr));*/ if (!TclIsCompiledLocalTemporary(localPtr)) { char *localName = localPtr->name; if ((newNameString[0] == localName[0]) && (nameLen == localPtr->nameLength) && (strcmp(newNameString, localName) == 0)) { varPtr = getNthVar(localVarPtr, i); new = 0; break; } | > > | 9083 9084 9085 9086 9087 9088 9089 9090 9091 9092 9093 9094 9095 9096 9097 9098 9099 9100 9101 9102 9103 9104 9105 9106 9107 | if (varFramePtr && Tcl_CallFrame_isProcCallFrame(varFramePtr)) { Proc *procPtr = Tcl_CallFrame_procPtr(varFramePtr); int localCt = procPtr->numCompiledLocals; CompiledLocal *localPtr = procPtr->firstLocalPtr; Var *localVarPtr = Tcl_CallFrame_compiledLocals(varFramePtr); char *newNameString = ObjStr(newName); int i, nameLen = strlen(newNameString); Var *varPtr = NULL; for (i = 0; i < localCt; i++) { /* look in compiled locals */ /* fprintf(stderr,"%d of %d %s flags %x not isTemp %d\n", i, localCt, localPtr->name, localPtr->flags, !TclIsCompiledLocalTemporary(localPtr));*/ if (!TclIsCompiledLocalTemporary(localPtr)) { char *localName = localPtr->name; if ((newNameString[0] == localName[0]) && (nameLen == localPtr->nameLength) && (strcmp(newNameString, localName) == 0)) { varPtr = getNthVar(localVarPtr, i); new = 0; break; } |
︙ | ︙ | |||
9976 9977 9978 9979 9980 9981 9982 | static int XOTclAliasCommand(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { XOTclObject *obj = NULL; XOTclClass *cl = NULL; Tcl_Command cmd = NULL; Tcl_ObjCmdProc *objProc; | | | 9991 9992 9993 9994 9995 9996 9997 9998 9999 10000 10001 10002 10003 10004 10005 | static int XOTclAliasCommand(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { XOTclObject *obj = NULL; XOTclClass *cl = NULL; Tcl_Command cmd = NULL; Tcl_ObjCmdProc *objProc; char allocation, *methodName; Tcl_CmdDeleteProc *dp = NULL; aliasCmdClientData *tcd = NULL; int objscope = 0, i; if (objc < 4 || objc > 6) { return XOTclObjErrArgCnt(interp, objv[0], "<class>|<obj> <methodName> ?-objscope? ?-per-object? <cmdName>"); |
︙ | ︙ | |||
9999 10000 10001 10002 10003 10004 10005 | } else { allocation = 'c'; } methodName = ObjStr(objv[2]); for (i=3; i<5; i++) { | | | 10014 10015 10016 10017 10018 10019 10020 10021 10022 10023 10024 10025 10026 10027 10028 | } else { allocation = 'c'; } methodName = ObjStr(objv[2]); for (i=3; i<5; i++) { char *optionName = ObjStr(objv[i]); if (*optionName != '-') break; if (!strcmp("-objscope", optionName)) { objscope = 1; } else if (!strcmp("-per-object", optionName)) { allocation = 'o'; } else { return XOTclErrBadVal(interp, "::xotcl::alias", |
︙ | ︙ | |||
10244 10245 10246 10247 10248 10249 10250 | return TCL_OK; } static int XOTclOMixinGuardMethod(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { XOTclObject *obj = (XOTclObject*)cd; | < | < | | 10259 10260 10261 10262 10263 10264 10265 10266 10267 10268 10269 10270 10271 10272 10273 10274 10275 10276 10277 10278 10279 10280 10281 10282 10283 10284 10285 10286 10287 10288 10289 10290 10291 10292 10293 10294 10295 10296 10297 10298 10299 10300 10301 10302 10303 10304 10305 10306 10307 10308 10309 10310 10311 10312 10313 10314 10315 | return TCL_OK; } static int XOTclOMixinGuardMethod(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { XOTclObject *obj = (XOTclObject*)cd; XOTclObjectOpt *opt; if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); if (objc != 3) return XOTclObjErrArgCnt(interp, obj->cmdName, "mixinguard mixin guards"); opt = obj->opt; if (opt && opt->mixins) { XOTclClass *mixinCl = XOTclpGetClass(interp, ObjStr(objv[1])); Tcl_Command mixinCmd = NULL; if (mixinCl) { mixinCmd = Tcl_GetCommandFromObj(interp, mixinCl->object.cmdName); } if (mixinCmd) { XOTclCmdList *h = CmdListFindCmdInList(mixinCmd, opt->mixins); if (h) { if (h->clientData) GuardDel((XOTclCmdList*) h); GuardAdd(interp, h, objv[2]); obj->flags &= ~XOTCL_MIXIN_ORDER_VALID; return TCL_OK; } } } return XOTclVarErrMsg(interp, "Mixinguard: can't find mixin ", ObjStr(objv[1]), " on ", ObjStr(obj->cmdName), (char *) NULL); } static int XOTclOFilterGuardMethod(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { XOTclObject *obj = (XOTclObject*)cd; XOTclObjectOpt *opt; if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); if (objc != 3) return XOTclObjErrArgCnt(interp, obj->cmdName, "filterguard filtername filterGuards"); opt = obj->opt; if (opt && opt->filters) { XOTclCmdList *h = CmdListFindNameInList(interp, ObjStr(objv[1]), opt->filters); if (h) { if (h->clientData) GuardDel((XOTclCmdList*) h); GuardAdd(interp, h, objv[2]); obj->flags &= ~XOTCL_FILTER_ORDER_VALID; return TCL_OK; } |
︙ | ︙ | |||
10354 10355 10356 10357 10358 10359 10360 | } static int XOTclOProcSearchMethod(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { XOTclObject *obj = (XOTclObject*)cd; XOTclClass *pcl = NULL; Tcl_Command cmd = NULL; | | | 10367 10368 10369 10370 10371 10372 10373 10374 10375 10376 10377 10378 10379 10380 10381 | } static int XOTclOProcSearchMethod(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { XOTclObject *obj = (XOTclObject*)cd; XOTclClass *pcl = NULL; Tcl_Command cmd = NULL; char *methodName; if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); if (objc < 2) return XOTclObjErrArgCnt(interp, obj->cmdName, "procsearch name"); Tcl_ResetResult(interp); methodName = ObjStr(objv[1]); |
︙ | ︙ | |||
10385 10386 10387 10388 10389 10390 10391 | } if (!cmd && obj->cl) pcl = SearchCMethod(obj->cl, methodName, &cmd); if (cmd) { XOTclObject *pobj = pcl ? NULL : obj; | | | | 10398 10399 10400 10401 10402 10403 10404 10405 10406 10407 10408 10409 10410 10411 10412 10413 10414 10415 10416 10417 10418 10419 10420 10421 10422 10423 10424 10425 10426 10427 10428 10429 10430 10431 10432 | } if (!cmd && obj->cl) pcl = SearchCMethod(obj->cl, methodName, &cmd); if (cmd) { XOTclObject *pobj = pcl ? NULL : obj; char *simpleName = (char *)Tcl_GetCommandName(interp, cmd); Tcl_SetObjResult(interp, getFullProcQualifier(interp, simpleName, pobj, pcl, cmd)); } return TCL_OK; } static int XOTclORequireNamespaceMethod(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { XOTclObject *obj = (XOTclObject*)cd; if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); if (objc != 1) return XOTclObjErrArgCnt(interp, obj->cmdName, "requireNamespace"); requireObjNamespace(interp, obj); return TCL_OK; } typedef enum {NO_DASH, SKALAR_DASH, LIST_DASH} dashArgType; static dashArgType isDashArg(Tcl_Interp *interp, Tcl_Obj *obj, int firstArg, char **methodName, int *objc, Tcl_Obj **objv[]) { char *flag; static Tcl_ObjType CONST86 *listType = NULL; assert(obj); /* fetch list type, if not set already; if used on more places, this should be moved into the interpreter state |
︙ | ︙ | |||
10441 10442 10443 10444 10445 10446 10447 | if (*flag == '-') { *methodName = flag+1; return LIST_DASH; } } } flag = ObjStr(obj); | | | > > > > > > > > > > > > > > | 10454 10455 10456 10457 10458 10459 10460 10461 10462 10463 10464 10465 10466 10467 10468 10469 10470 10471 10472 10473 10474 10475 10476 10477 10478 10479 10480 10481 10482 10483 10484 10485 10486 10487 | if (*flag == '-') { *methodName = flag+1; return LIST_DASH; } } } flag = ObjStr(obj); /*fprintf(stderr, "we have a scalar '%s' firstArg %d\n", flag, firstArg);*/ if ((*flag == '-') && isalpha(*((flag)+1))) { if (firstArg) { /* if the argument contains a space, try to split */ CONST char *p= flag+1; while (*p && *p != ' ') p++; if (*p == ' ') { if (Tcl_ListObjGetElements(interp, obj, objc, objv) == TCL_OK) { *methodName = ObjStr(*objv[0]); if (**methodName == '-') {(*methodName)++ ;} return LIST_DASH; } } } *methodName = flag+1; *objc = 1; return SKALAR_DASH; } return NO_DASH; } static int callConfigureMethod(Tcl_Interp *interp, XOTclObject *obj, char *methodName, int argc, Tcl_Obj *CONST argv[]) { int result; |
︙ | ︙ | |||
10492 10493 10494 10495 10496 10497 10498 | char *methodName, *nextMethodName; if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); if (objc < 1) return XOTclObjErrArgCnt(interp, obj->cmdName, "configure ?args?"); /* find arguments without leading dash */ for (i=1; i < objc; i++) { | | | | | | 10519 10520 10521 10522 10523 10524 10525 10526 10527 10528 10529 10530 10531 10532 10533 10534 10535 10536 10537 10538 10539 10540 10541 10542 10543 10544 10545 10546 10547 10548 10549 10550 10551 10552 10553 10554 10555 10556 | char *methodName, *nextMethodName; if (!obj) return XOTclObjErrType(interp, objv[0], "Object"); if (objc < 1) return XOTclObjErrArgCnt(interp, obj->cmdName, "configure ?args?"); /* find arguments without leading dash */ for (i=1; i < objc; i++) { if ((isdasharg = isDashArg(interp, objv[i], 1, &methodName, &argc, &argv))) break; } normalArgs = i-1; for( ; i < objc; argc=nextArgc, argv=nextArgv, methodName=nextMethodName) { Tcl_ResetResult(interp); switch (isdasharg) { case SKALAR_DASH: /* argument is a skalar with a leading dash, eager search for dashed arg */ { int j; for (j = i+1; j < objc; j++, argc++) { if ((isdasharg = isDashArg(interp, objv[j], 1, &nextMethodName, &nextArgc, &nextArgv))) break; } result = callConfigureMethod(interp, obj, methodName, argc+1, objv+i+1); if (result != TCL_OK) return result; i += argc; break; } case LIST_DASH: /* argument is a list with a leading dash, grouping determined by list */ { i++; if (i<objc) isdasharg = isDashArg(interp, objv[i], 1, &nextMethodName, &nextArgc, &nextArgv); result = callConfigureMethod(interp, obj, methodName, argc+1, argv+1); if (result != TCL_OK) return result; break; } default: { |
︙ | ︙ | |||
10643 10644 10645 10646 10647 10648 10649 | return ns; } static int XOTclCAllocMethod(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { XOTclClass *cl = XOTclObjectToClass(cd); | < < < < < < < < < < < < < < < < < < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | 10670 10671 10672 10673 10674 10675 10676 10677 10678 10679 10680 10681 10682 10683 10684 10685 10686 10687 10688 10689 10690 10691 10692 10693 10694 10695 10696 10697 10698 10699 10700 10701 10702 10703 10704 10705 10706 10707 10708 10709 10710 10711 10712 10713 10714 10715 10716 10717 10718 10719 10720 10721 10722 10723 10724 10725 10726 10727 10728 10729 10730 10731 10732 10733 10734 10735 10736 10737 10738 10739 10740 | return ns; } static int XOTclCAllocMethod(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { XOTclClass *cl = XOTclObjectToClass(cd); int result; if (!cl) return XOTclObjErrType(interp, objv[0], "Class"); if (objc < 2) return XOTclObjErrArgCnt(interp, cl->object.cmdName, "alloc <obj/cl> ?args?"); { /* * create a new object from scratch */ char *objName = ObjStr(objv[1]); Tcl_Obj *tmpName = NULL; if (!isAbsolutePath(objName)) { /*fprintf(stderr, "CallocMethod\n");*/ tmpName = NameInNamespaceObj(interp, objName, callingNameSpace(interp)); /*fprintf(stderr, "NoAbsoluteName for '%s' -> determined = '%s'\n", objName, ObjStr(tmpName));*/ objName = ObjStr(tmpName); /*fprintf(stderr," **** name is '%s'\n", objName);*/ INCR_REF_COUNT(tmpName); } if (IsMetaClass(interp, cl)) { /* * if the base class is a meta-class, we create a class */ XOTclClass *newcl = PrimitiveCCreate(interp, objName, cl); if (newcl == 0) result = XOTclVarErrMsg(interp, "Class alloc failed for '", objName, "' (possibly parent namespace does not exist)", (char *) NULL); else { Tcl_SetObjResult(interp, newcl->object.cmdName); result = TCL_OK; } } else { /* * if the base class is an ordinary class, we create an object */ XOTclObject *newobj = PrimitiveOCreate(interp, objName, cl); if (newobj == 0) result = XOTclVarErrMsg(interp, "Object alloc failed for '", objName, "' (possibly parent namespace does not exist)", (char *) NULL); else { result = TCL_OK; Tcl_SetObjResult(interp, newobj->cmdName); } } if (tmpName) { DECR_REF_COUNT(tmpName); } } return result; } static int createMethod(Tcl_Interp *interp, XOTclClass *cl, XOTclObject *obj, int objc, Tcl_Obj *CONST objv[]) { |
︙ | ︙ | |||
10828 10829 10830 10831 10832 10833 10834 | if (!cl) return XOTclObjErrType(interp, objv[0], "Class"); if (objc < 2) return XOTclObjErrArgCnt(interp, cl->object.cmdName, "create <obj> ?args?"); if (RUNTIME_STATE(interp)->exitHandlerDestroyRound != XOTCL_EXITHANDLER_OFF) { fprintf(stderr,"### Can't create object %s during shutdown\n", ObjStr(objv[1])); return TCL_ERROR; | < | 10836 10837 10838 10839 10840 10841 10842 10843 10844 10845 10846 10847 10848 10849 | if (!cl) return XOTclObjErrType(interp, objv[0], "Class"); if (objc < 2) return XOTclObjErrArgCnt(interp, cl->object.cmdName, "create <obj> ?args?"); if (RUNTIME_STATE(interp)->exitHandlerDestroyRound != XOTCL_EXITHANDLER_OFF) { fprintf(stderr,"### Can't create object %s during shutdown\n", ObjStr(objv[1])); return TCL_ERROR; } return createMethod(interp, cl, &cl->object, objc, objv); } static int |
︙ | ︙ | |||
10956 10957 10958 10959 10960 10961 10962 | DECR_REF_COUNT(objv[1]); return result; } static int XOTclCInfoMethod(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj * CONST objv[]) { XOTclClass *cl = XOTclObjectToClass(cd); | < > | < < | 10963 10964 10965 10966 10967 10968 10969 10970 10971 10972 10973 10974 10975 10976 10977 10978 10979 10980 10981 10982 10983 10984 10985 10986 10987 | DECR_REF_COUNT(objv[1]); return result; } static int XOTclCInfoMethod(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj * CONST objv[]) { XOTclClass *cl = XOTclObjectToClass(cd); XOTclClassOpt *opt; char *pattern, *cmd; if (objc < 2) return XOTclObjErrArgCnt(interp, cl->object.cmdName, "info <opt> ?args?"); if (cl) { int modifiers = 0; Tcl_Namespace *nsp = cl->nsPtr; opt = cl->opt; cmd = ObjStr(objv[1]); pattern = (objc > 2) ? ObjStr(objv[2]) : 0; /* * check for "-" modifiers */ if (pattern && *pattern == '-') { |
︙ | ︙ | |||
11137 11138 11139 11140 11141 11142 11143 | Tcl_SetObjResult(interp, AssertionList(interp, assertions->invariants)); return TCL_OK; } break; case 'm': if (!strcmp(cmdTail, "mixin")) { | | < | | | 11142 11143 11144 11145 11146 11147 11148 11149 11150 11151 11152 11153 11154 11155 11156 11157 11158 11159 11160 11161 11162 11163 11164 11165 11166 11167 11168 11169 11170 11171 11172 11173 11174 11175 11176 11177 11178 11179 11180 11181 11182 11183 11184 11185 11186 11187 11188 11189 | Tcl_SetObjResult(interp, AssertionList(interp, assertions->invariants)); return TCL_OK; } break; case 'm': if (!strcmp(cmdTail, "mixin")) { int withClosure = 0, withGuards = 0, rc = TCL_OK; XOTclObject *matchObject; Tcl_DString ds, *dsPtr = &ds; if (objc-modifiers > 3 || modifiers > 2) return XOTclObjErrArgCnt(interp, cl->object.cmdName, "info instmixin ?-closure? ?-guards? ?pattern?"); if (modifiers > 0) { withGuards = checkForModifier(objv, modifiers, "-guards"); withClosure = checkForModifier(objv, modifiers, "-closure"); if ((withGuards == 0) && (withClosure == 0)) return XOTclVarErrMsg(interp, "info instfilter: unknown modifier ", ObjStr(objv[2]), (char *) NULL); } if ((opt) || (withClosure)) { DSTRING_INIT(dsPtr); if (getMatchObject(interp, &pattern, &matchObject, dsPtr) == -1) { return TCL_OK; } if (withClosure) { Tcl_HashTable objTable, *commandTable = &objTable; MEM_COUNT_ALLOC("Tcl_InitHashTable", commandTable); Tcl_InitHashTable(commandTable, TCL_ONE_WORD_KEYS); rc = getAllClassMixins(interp, commandTable, cl, withGuards, pattern, matchObject); if (matchObject && rc && !withGuards) { Tcl_SetObjResult(interp, rc ? matchObject->cmdName : XOTclGlobalObjects[XOTE_EMPTY]); } Tcl_DeleteHashTable(commandTable); MEM_COUNT_FREE("Tcl_InitHashTable", commandTable); } else if (opt) { MixinInfo(interp, opt->instmixins, pattern, withGuards, matchObject); } DSTRING_FREE(dsPtr); } return TCL_OK; } else if (!strcmp(cmdTail, "mixinof")) { int withClosure = 0; |
︙ | ︙ | |||
11248 11249 11250 11251 11252 11253 11254 | case 'p': if (!strcmp(cmdTail, "procs")) { if (objc > 3 || modifiers > 0) return XOTclObjErrArgCnt(interp, cl->object.cmdName, "info instprocs ?pattern?"); return ListMethodKeys(interp, Tcl_Namespace_cmdTable(nsp), pattern, /*noProcs*/ 0, /*noCmds*/ 1, /* noDups */ 0, 0, 0); } else if (!strcmp(cmdTail, "pre")) { | < | < | | 11252 11253 11254 11255 11256 11257 11258 11259 11260 11261 11262 11263 11264 11265 11266 11267 11268 11269 11270 11271 11272 11273 11274 11275 11276 11277 11278 11279 | case 'p': if (!strcmp(cmdTail, "procs")) { if (objc > 3 || modifiers > 0) return XOTclObjErrArgCnt(interp, cl->object.cmdName, "info instprocs ?pattern?"); return ListMethodKeys(interp, Tcl_Namespace_cmdTable(nsp), pattern, /*noProcs*/ 0, /*noCmds*/ 1, /* noDups */ 0, 0, 0); } else if (!strcmp(cmdTail, "pre")) { if (objc != 3 || modifiers > 0) return XOTclObjErrArgCnt(interp, cl->object.cmdName, "info instpre <proc>"); if (opt && opt->assertions) { XOTclProcAssertion *procs = AssertionFindProcs(opt->assertions, ObjStr(objv[2])); if (procs) Tcl_SetObjResult(interp, AssertionList(interp, procs->pre)); } return TCL_OK; } else if (!strcmp(cmdTail, "post")) { if (objc != 3 || modifiers > 0) return XOTclObjErrArgCnt(interp, cl->object.cmdName, "info instpost <proc>"); if (opt && opt->assertions) { XOTclProcAssertion *procs = AssertionFindProcs(opt->assertions, ObjStr(objv[2])); if (procs) Tcl_SetObjResult(interp, AssertionList(interp, procs->post)); } return TCL_OK; } else if (!strcmp(cmdTail, "parametercmd")) { int argc = objc-modifiers; if (argc < 2) return XOTclObjErrArgCnt(interp, cl->object.cmdName, |
︙ | ︙ | |||
11287 11288 11289 11290 11291 11292 11293 | } break; case 'm': if (!strcmp(cmd, "mixinof")) { XOTclObject *matchObject = NULL; Tcl_DString ds, *dsPtr = &ds; | | | 11289 11290 11291 11292 11293 11294 11295 11296 11297 11298 11299 11300 11301 11302 11303 | } break; case 'm': if (!strcmp(cmd, "mixinof")) { XOTclObject *matchObject = NULL; Tcl_DString ds, *dsPtr = &ds; int rc = TCL_OK, withClosure = 0; if (objc-modifiers > 3 || modifiers > 1) return XOTclObjErrArgCnt(interp, cl->object.cmdName, "info mixinof ?-closure? ?pattern?"); if (modifiers > 0) { withClosure = checkForModifier(objv, modifiers, "-closure"); if (withClosure == 0) |
︙ | ︙ | |||
11313 11314 11315 11316 11317 11318 11319 | Tcl_SetObjResult(interp, rc ? matchObject->cmdName : XOTclGlobalObjects[XOTE_EMPTY]); } DSTRING_FREE(dsPtr); } else if (withClosure) { Tcl_HashTable objTable, *commandTable = &objTable; MEM_COUNT_ALLOC("Tcl_InitHashTable", commandTable); Tcl_InitHashTable(commandTable, TCL_ONE_WORD_KEYS); | | | 11315 11316 11317 11318 11319 11320 11321 11322 11323 11324 11325 11326 11327 11328 11329 | Tcl_SetObjResult(interp, rc ? matchObject->cmdName : XOTclGlobalObjects[XOTE_EMPTY]); } DSTRING_FREE(dsPtr); } else if (withClosure) { Tcl_HashTable objTable, *commandTable = &objTable; MEM_COUNT_ALLOC("Tcl_InitHashTable", commandTable); Tcl_InitHashTable(commandTable, TCL_ONE_WORD_KEYS); getAllObjectMixinsOf(interp, commandTable, cl, 0, 1, pattern, matchObject); Tcl_DeleteHashTable(commandTable); MEM_COUNT_FREE("Tcl_InitHashTable", commandTable); } return TCL_OK; } break; |
︙ | ︙ | |||
11806 11807 11808 11809 11810 11811 11812 | return result; } static int XOTclCInstFilterGuardMethod(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { XOTclClass *cl = XOTclObjectToClass(cd); | < | < | | 11808 11809 11810 11811 11812 11813 11814 11815 11816 11817 11818 11819 11820 11821 11822 11823 11824 11825 11826 11827 11828 11829 11830 11831 11832 11833 11834 11835 11836 11837 11838 11839 11840 11841 11842 11843 11844 11845 11846 11847 11848 11849 11850 11851 11852 11853 11854 11855 11856 11857 11858 11859 11860 11861 | return result; } static int XOTclCInstFilterGuardMethod(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { XOTclClass *cl = XOTclObjectToClass(cd); XOTclClassOpt *opt; if (!cl) return XOTclObjErrType(interp, objv[0], "Class"); if (objc != 3) return XOTclObjErrArgCnt(interp, cl->object.cmdName, "instfilterguard filtername filterGuard"); opt = cl->opt; if (opt && opt->instfilters) { XOTclCmdList *h = CmdListFindNameInList(interp, ObjStr(objv[1]), opt->instfilters); if (h) { if (h->clientData) GuardDel(h); GuardAdd(interp, h, objv[2]); FilterInvalidateObjOrders(interp, cl); return TCL_OK; } } return XOTclVarErrMsg(interp, "Instfilterguard: can't find filter ", ObjStr(objv[1]), " on ", ObjStr(cl->object.cmdName), (char *) NULL); } static int XOTclCInstMixinGuardMethod(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { XOTclClass *cl = XOTclObjectToClass(cd); if (!cl) return XOTclObjErrType(interp, objv[0], "Class"); if (objc != 3) return XOTclObjErrArgCnt(interp, cl->object.cmdName, "instmixinguard mixin guard"); if (cl->opt && cl->opt->instmixins) { XOTclClass *mixinCl = XOTclpGetClass(interp, ObjStr(objv[1])); Tcl_Command mixinCmd = NULL; if (mixinCl) { mixinCmd = Tcl_GetCommandFromObj(interp, mixinCl->object.cmdName); } if (mixinCmd) { XOTclCmdList *h = CmdListFindCmdInList(mixinCmd, cl->opt->instmixins); if (h) { if (h->clientData) GuardDel((XOTclCmdList*) h); GuardAdd(interp, h, objv[2]); MixinInvalidateObjOrders(interp, cl); return TCL_OK; } |
︙ | ︙ | |||
11904 11905 11906 11907 11908 11909 11910 | /* * New Tcl Commands */ static int XOTcl_NSCopyCmds(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Tcl_Command cmd; | < | | 11904 11905 11906 11907 11908 11909 11910 11911 11912 11913 11914 11915 11916 11917 11918 | /* * New Tcl Commands */ static int XOTcl_NSCopyCmds(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Tcl_Command cmd; char *name; Tcl_Namespace *ns, *newNs; Tcl_HashTable *cmdTable, *nonposArgsTable; Tcl_HashSearch hSrch; Tcl_HashEntry *hPtr; XOTclObject *obj; XOTclClass *cl; |
︙ | ︙ | |||
11948 11949 11950 11951 11952 11953 11954 | ObjStr(objv[2]), " does not exist", (char *) NULL); /* * copy all procs & commands in the ns */ cmdTable = Tcl_Namespace_cmdTable(ns); hPtr = Tcl_FirstHashEntry(cmdTable, &hSrch); while (hPtr) { | | > > | 11947 11948 11949 11950 11951 11952 11953 11954 11955 11956 11957 11958 11959 11960 11961 11962 11963 11964 | ObjStr(objv[2]), " does not exist", (char *) NULL); /* * copy all procs & commands in the ns */ cmdTable = Tcl_Namespace_cmdTable(ns); hPtr = Tcl_FirstHashEntry(cmdTable, &hSrch); while (hPtr) { Tcl_Obj *newFullCmdName, *oldFullCmdName; char *newName, *oldName; name = Tcl_GetHashKey(cmdTable, hPtr); /* * construct full cmd names */ newFullCmdName = Tcl_NewStringObj(newNs->fullName,-1); oldFullCmdName = Tcl_NewStringObj(ns->fullName,-1); INCR_REF_COUNT(newFullCmdName); INCR_REF_COUNT(oldFullCmdName); |
︙ | ︙ | |||
12002 12003 12004 12005 12006 12007 12008 | * Do not copy Objects or Classes */ if (!XOTclpGetObject(interp, oldName)) { if (TclIsProc((Command*)cmd)) { Proc *procPtr = TclFindProc((Interp *)interp, oldName); Tcl_Obj *arglistObj = NULL; CompiledLocal *localPtr; | < < | | 12003 12004 12005 12006 12007 12008 12009 12010 12011 12012 12013 12014 12015 12016 12017 12018 12019 12020 12021 12022 | * Do not copy Objects or Classes */ if (!XOTclpGetObject(interp, oldName)) { if (TclIsProc((Command*)cmd)) { Proc *procPtr = TclFindProc((Interp *)interp, oldName); Tcl_Obj *arglistObj = NULL; CompiledLocal *localPtr; /* * Build a list containing the arguments of the proc */ if (nonposArgsTable) { XOTclNonposArgs *nonposArgs = NonposArgsGet(nonposArgsTable, name); if (nonposArgs) { arglistObj = NonposArgsFormat(interp, nonposArgs->nonposArgs); INCR_REF_COUNT(arglistObj); AppendOrdinaryArgsFromNonposArgs(interp, nonposArgs, 0, arglistObj); } } |
︙ | ︙ | |||
12315 12316 12317 12318 12319 12320 12321 | */ int isNonposArg(Tcl_Interp *interp, char * argStr, int nonposArgsDefc, Tcl_Obj **nonposArgsDefv, Tcl_Obj **var, char **type) { int npac; Tcl_Obj **npav; | < | | 12314 12315 12316 12317 12318 12319 12320 12321 12322 12323 12324 12325 12326 12327 12328 12329 12330 12331 12332 12333 12334 12335 | */ int isNonposArg(Tcl_Interp *interp, char * argStr, int nonposArgsDefc, Tcl_Obj **nonposArgsDefv, Tcl_Obj **var, char **type) { int npac; Tcl_Obj **npav; if (argStr[0] == '-') { int i; for (i=0; i < nonposArgsDefc; i++) { if (Tcl_ListObjGetElements(interp, nonposArgsDefv[i], &npac, &npav) == TCL_OK && npac > 0) { char *varName = argStr+1; if (!strcmp(varName, ObjStr(npav[0]))) { *var = npav[0]; *type = ObjStr(npav[1]); return 1; } } } |
︙ | ︙ | |||
12387 12388 12389 12390 12391 12392 12393 | XOTclInterpretNonpositionalArgsCmd(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Tcl_Obj **npav, **checkv, **checkArgv, **argsv, **nonposArgsDefv, *invocation[4], **ordinaryArgsDefv, **defaultValueObjv, *list, *checkObj, *ordinaryArg; int npac, checkc, checkArgc, argsc, nonposArgsDefc, ordinaryArgsDefc, defaultValueObjc, argsDefined = 0, | | < | > | 12385 12386 12387 12388 12389 12390 12391 12392 12393 12394 12395 12396 12397 12398 12399 12400 12401 | XOTclInterpretNonpositionalArgsCmd(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Tcl_Obj **npav, **checkv, **checkArgv, **argsv, **nonposArgsDefv, *invocation[4], **ordinaryArgsDefv, **defaultValueObjv, *list, *checkObj, *ordinaryArg; int npac, checkc, checkArgc, argsc, nonposArgsDefc, ordinaryArgsDefc, defaultValueObjc, argsDefined = 0, ordinaryArgsCounter = 0, i, j, result, ic, endOfNonposArgsReached = 0; char *argStr; Var *varPtr; XOTclClass *selfClass = GetSelfClass(interp); char *methodName = (char *) GetSelfProc(interp); Tcl_HashTable *nonposArgsTable; XOTclNonposArgs *nonposArgs; XOTclObject *selfObj; |
︙ | ︙ | |||
12450 12451 12452 12453 12454 12455 12456 | } else if (npac == 2 && !strcmp(ObjStr(npav[1]), "switch")) { Tcl_SetVar2Ex(interp, ObjStr(npav[0]), NULL, Tcl_NewBooleanObj(0), 0); } } } if (ordinaryArgsDefc > 0) { | | | 12448 12449 12450 12451 12452 12453 12454 12455 12456 12457 12458 12459 12460 12461 12462 | } else if (npac == 2 && !strcmp(ObjStr(npav[1]), "switch")) { Tcl_SetVar2Ex(interp, ObjStr(npav[0]), NULL, Tcl_NewBooleanObj(0), 0); } } } if (ordinaryArgsDefc > 0) { char *lastDefArg = ObjStr(ordinaryArgsDefv[ordinaryArgsDefc-1]); if (isArgsString(lastDefArg)) { argsDefined = 1; } } /* setting specified variables */ for (i=0; i < argsc; i++) { |
︙ | ︙ | |||
12874 12875 12876 12877 12878 12879 12880 | #endif /* DO_CLEANUP */ /* * ::xotcl::finalize command */ static int XOTclFinalizeObjCmd(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { | < < | 12872 12873 12874 12875 12876 12877 12878 12879 12880 12881 12882 12883 12884 12885 | #endif /* DO_CLEANUP */ /* * ::xotcl::finalize command */ static int XOTclFinalizeObjCmd(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { int result; Tcl_HashSearch hSrch; Tcl_HashEntry *hPtr; Tcl_HashTable objTable, *commandNameTable = &objTable; /* fprintf(stderr,"+++ call EXIT handler\n"); */ |
︙ | ︙ | |||
12915 12916 12917 12918 12919 12920 12921 | MEM_COUNT_ALLOC("Tcl_InitHashTable", commandNameTable); getAllInstances(interp, commandNameTable, RUNTIME_STATE(interp)->theObject); /***** SOFT DESTROY *****/ RUNTIME_STATE(interp)->exitHandlerDestroyRound = XOTCL_EXITHANDLER_ON_SOFT_DESTROY; for (hPtr = Tcl_FirstHashEntry(commandNameTable, &hSrch); hPtr; hPtr = Tcl_NextHashEntry(&hSrch)) { char *key = Tcl_GetHashKey(commandNameTable, hPtr); | | | | 12911 12912 12913 12914 12915 12916 12917 12918 12919 12920 12921 12922 12923 12924 12925 12926 12927 12928 12929 12930 12931 12932 12933 12934 12935 12936 | MEM_COUNT_ALLOC("Tcl_InitHashTable", commandNameTable); getAllInstances(interp, commandNameTable, RUNTIME_STATE(interp)->theObject); /***** SOFT DESTROY *****/ RUNTIME_STATE(interp)->exitHandlerDestroyRound = XOTCL_EXITHANDLER_ON_SOFT_DESTROY; for (hPtr = Tcl_FirstHashEntry(commandNameTable, &hSrch); hPtr; hPtr = Tcl_NextHashEntry(&hSrch)) { char *key = Tcl_GetHashKey(commandNameTable, hPtr); XOTclObject *obj = XOTclpGetObject(interp, key); /* fprintf(stderr,"key = %s %p %d\n", key, obj, obj && !XOTclObjectIsClass(obj)); */ if (obj && !XOTclObjectIsClass(obj) && !(obj->flags & XOTCL_DESTROY_CALLED)) { callDestroyMethod((ClientData)obj, interp, obj, 0); } } for (hPtr = Tcl_FirstHashEntry(commandNameTable, &hSrch); hPtr; hPtr = Tcl_NextHashEntry(&hSrch)) { char *key = Tcl_GetHashKey(commandNameTable, hPtr); XOTclClass *cl = XOTclpGetClass(interp, key); if (cl && !(cl->object.flags & XOTCL_DESTROY_CALLED)) { callDestroyMethod((ClientData)cl, interp, (XOTclObject *)cl, 0); } } #ifdef DO_CLEANUP freeAllXOTclObjectsAndClasses(interp, commandNameTable); |
︙ | ︙ | |||
13209 13210 13211 13212 13213 13214 13215 | XOTclGlobalObjects[i] = Tcl_NewStringObj(XOTclGlobalStrings[i],-1); INCR_REF_COUNT(XOTclGlobalObjects[i]); } /* create Object and Class, and store them in the RUNTIME STATE */ theobj = PrimitiveCCreate(interp, "::xotcl::Object", 0); RUNTIME_STATE(interp)->theObject = theobj; | | | | 13205 13206 13207 13208 13209 13210 13211 13212 13213 13214 13215 13216 13217 13218 13219 13220 13221 13222 13223 | XOTclGlobalObjects[i] = Tcl_NewStringObj(XOTclGlobalStrings[i],-1); INCR_REF_COUNT(XOTclGlobalObjects[i]); } /* create Object and Class, and store them in the RUNTIME STATE */ theobj = PrimitiveCCreate(interp, "::xotcl::Object", 0); RUNTIME_STATE(interp)->theObject = theobj; if (!theobj) Tcl_Panic("%s", "Cannot create ::xotcl::Object"); thecls = PrimitiveCCreate(interp, "::xotcl::Class", 0); RUNTIME_STATE(interp)->theClass = thecls; if (!thecls) Tcl_Panic("%s", "Cannot create ::xotcl::Class"); Tcl_Export(interp, RUNTIME_STATE(interp)->XOTclNS, "Object", 0); Tcl_Export(interp, RUNTIME_STATE(interp)->XOTclNS, "Class", 0); /*Tcl_AddInterpResolvers(interp, "XOTcl", XOTclResolveCmd, 0, 0);*/ #if defined(PROFILE) XOTclProfileInit(interp); |
︙ | ︙ |
Changes to jni/xotcl/generic/xotcl.h.
|
| | < < < > | | 1 2 3 4 5 6 7 8 9 10 11 12 | /* * Extended Object Tcl (XOTcl) * * Copyright (C) 1999-2014 Gustaf Neumann * Copyright (C) 1999-2007 Uwe Zdun * * This software is based upon MIT Object Tcl by David Wetherall and * Christopher J. Lindblad, that contains the following copyright * message: * * Copyright 1993 Massachusetts Institute of Technology * |
︙ | ︙ |
Changes to jni/xotcl/generic/xotclDecls.h.
1 2 3 4 5 | /* * xotclDecls.h -- * * Declarations of functions in the platform independent public XOTcl API. * | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /* * xotclDecls.h -- * * Declarations of functions in the platform independent public XOTcl API. * * Copyright (C) 1999-2007 Uwe Zdun * Copyright (C) 1999-2014 Gustaf Neumann * * See the file "tcl-license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * */ #ifndef _XOTCLDECLS |
︙ | ︙ |
Changes to jni/xotcl/generic/xotclError.c.
|
| | < < > | < | 1 2 3 4 5 6 7 8 9 10 11 12 | /* * Extended Object Tcl (XOTcl) * * Copyright (C) 1999-2014 Gustaf Neumann * Copyright (C) 1999-2007 Uwe Zdun * * xotclError.c -- * * error return functions for XOTcl * */ |
︙ | ︙ |
Changes to jni/xotcl/generic/xotclInt.h.
|
| | < > | | 1 2 3 4 5 6 7 8 9 10 11 12 | /* * Extended Object Tcl (XOTcl) * * Copyright (C) 1999-2014 Gustaf Neumann * Copyright (C) 1999-2007 Uwe Zdun * * xotclInt.h -- * * Mostly internally used API Functions */ #ifndef _xotcl_int_h_ |
︙ | ︙ |
Changes to jni/xotcl/generic/xotclIntDecls.h.
1 2 3 4 5 6 7 8 | /* * xotclIntDecls.h -- * * This file contains the declarations for all unsupported * functions that are exported by the Tcl library. These * interfaces are not guaranteed to remain the same between * versions. Use at your own risk. * | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /* * xotclIntDecls.h -- * * This file contains the declarations for all unsupported * functions that are exported by the Tcl library. These * interfaces are not guaranteed to remain the same between * versions. Use at your own risk. * * Copyright (C) 1999-2007 Uwe Zdun * Copyright (C) 1999-2014 Gustaf Neumann * * See the file "tcl-license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * */ #ifndef _XOTCLINTDECLS |
︙ | ︙ |
Changes to jni/xotcl/generic/xotclMetaData.c.
|
| | < < > | < | 1 2 3 4 5 6 7 8 9 10 11 12 | /* * Extended Object Tcl (XOTcl) * * Copyright (C) 1999-2014 Gustaf Neumann * Copyright (C) 1999-2007 Uwe Zdun * * xotclReference.c -- * * XOTcl Object References * */ |
︙ | ︙ |
Changes to jni/xotcl/generic/xotclObjectData.c.
|
| | < < > | < | 1 2 3 4 5 6 7 8 9 10 11 12 | /* * Extended Object Tcl (XOTcl) * * Copyright (C) 1999-2014 Gustaf Neumann * Copyright (C) 1999-2007 Uwe Zdun * * * xotclObjectData.c -- * * XOTcl Object Data, needs XOTCL_OBJECTDATA to be compiled in * */ |
︙ | ︙ |
Changes to jni/xotcl/generic/xotclProfile.c.
|
| | < < > | < | 1 2 3 4 5 6 7 8 9 10 11 12 | /* * Extended Object Tcl (XOTcl) * * Copyright (C) 1999-2014 Gustaf Neumann * Copyright (C) 1999-2007 Uwe Zdun * * xotclProfile.c -- * * Profiling information printout for XOTcl * * For profiling infos PROFILE (xotcl.h) flag must be activated * |
︙ | ︙ |
Changes to jni/xotcl/generic/xotclShadow.c.
|
| | < < > | < | 1 2 3 4 5 6 7 8 9 10 11 12 | /* * Extended Object Tcl (XOTcl) * * Copyright (C) 1999-2014 Gustaf Neumann * Copyright (C) 1999-2007 Uwe Zdun * * xotclShadow.c -- * * Shadowing (overloading) and accessing global tcl obj commands * */ |
︙ | ︙ |
Changes to jni/xotcl/generic/xotclStubLib.c.
1 2 3 4 5 | /* * xotclStubLib.c -- * * Stub object that will be statically linked into extensions of XOTcl * | < > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /* * xotclStubLib.c -- * * Stub object that will be statically linked into extensions of XOTcl * * Copyright (c) 1998 Paul Duffin. * Copyright (C) 1999-2007 Uwe Zdun * Copyright (C) 1999-2014 Gustaf Neumann * * See the file "tcl-license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * */ /* |
︙ | ︙ |
Changes to jni/xotcl/generic/xotclTrace.c.
|
| | < < > | < | 1 2 3 4 5 6 7 8 9 10 11 12 | /* * Extended Object Tcl (XOTcl) * * Copyright (C) 1999-2014 Gustaf Neumann * Copyright (C) 1999-2007 Uwe Zdun * * xotclTrace.c -- * * Tracing facilities for XOTcl * */ |
︙ | ︙ | |||
24 25 26 27 28 29 30 | XOTclNewObj(varCmdObj); fprintf (stderr, " TCL STACK:\n"); if (f == 0) fprintf(stderr, "- "); while (f) { Tcl_Obj *cmdObj; XOTclNewObj(cmdObj); fprintf(stderr, "\tFrame=%p ", f); | | | 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | XOTclNewObj(varCmdObj); fprintf (stderr, " TCL STACK:\n"); if (f == 0) fprintf(stderr, "- "); while (f) { Tcl_Obj *cmdObj; XOTclNewObj(cmdObj); fprintf(stderr, "\tFrame=%p ", f); if (f->isProcCallFrame && f->procPtr && f->procPtr->cmdPtr) { fprintf(stderr,"caller %p ",Tcl_CallFrame_callerPtr(f)); fprintf(stderr,"callerV %p ",Tcl_CallFrame_callerVarPtr(f)); Tcl_GetCommandFullName(interp, (Tcl_Command) f->procPtr->cmdPtr, cmdObj); fprintf(stderr, "%s (%p) lvl=%d\n", ObjStr(cmdObj), f->procPtr->cmdPtr, f->level); DECR_REF_COUNT(cmdObj); } else fprintf(stderr, "- \n"); |
︙ | ︙ |
Changes to jni/xotcl/generic/xotclUtil.c.
|
| | < < > | < | 1 2 3 4 5 6 7 8 9 10 11 12 | /* * Extended Object Tcl (XOTcl) * * Copyright (C) 1999-2014 Gustaf Neumann * Copyright (C) 1999-2007 Uwe Zdun * * xotclUtil.c -- * * Utility functions * */ |
︙ | ︙ |
Deleted jni/xotcl/install-sh.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/xotcl/library/COPYRIGHT.
1 2 | * XOTcl - Extended OTcl * | > | | 1 2 3 4 5 6 7 8 9 10 11 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen |
︙ | ︙ |
Changes to jni/xotcl/library/actiweb/Agent.xotcl.
1 2 | # $Id: Agent.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # $Id: Agent.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ package provide xotcl::actiweb::agent 1.0 package require -exact xotcl::trace 1.0 package require -exact xotcl::comm::httpAccess 1.0 package require -exact xotcl::actiweb::webObject 1.0 package require -exact xotcl::store::persistence 1.0 package require XOTcl 1 # # current response codes for agent requests: # # OK -- content arrived (can be retrieved with sinks content method) # ERROR -- error on the place invocation # FAILED -- call itself failed, e.g. cancel |
︙ | ︙ |
Changes to jni/xotcl/library/actiweb/AgentManagement.xotcl.
1 2 | # $Id: AgentManagement.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # $Id: AgentManagement.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ package provide xotcl::actiweb::agentManagement 1.0 package require -exact xotcl::rdf::parser 1.0 package require -exact xotcl::rdf::triple 1.0 package require -exact xotcl::actiweb::agent 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::agentManagement { namespace import ::xotcl::* Class AgentInfo -parameter { {name ""} {changed 1} |
︙ | ︙ |
Changes to jni/xotcl/library/actiweb/COPYRIGHT.
1 2 | * XOTcl - Extended OTcl * | > | | 1 2 3 4 5 6 7 8 9 10 11 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen |
︙ | ︙ |
Changes to jni/xotcl/library/actiweb/HtmlPlace.xotcl.
|
| < | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | package provide xotcl::actiweb::htmlPlace 1.0 package require -exact xotcl::trace 1.0 package require -exact xotcl::actiweb::httpPlace 1.0 package require -exact xotcl::store::persistence 1.0 package require -exact xotcl::actiweb::agent 1.0 package require -exact xotcl::actiweb::pageTemplate 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::htmlPlace { namespace import ::xotcl::* Class HtmlPlace -superclass Place -parameter {allowExit} HtmlPlace instproc init args { |
︙ | ︙ |
Changes to jni/xotcl/library/actiweb/HttpPlace.xotcl.
|
| < | | | | | | | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # -*- Tcl -*- package provide xotcl::actiweb::httpPlace 1.0 package require -exact xotcl::trace 1.0 package require -exact xotcl::actiweb::invoker 1.0 package require -exact xotcl::actiweb::webObject 1.0 package require -exact xotcl::comm::httpd 1.1 package require -exact xotcl::scriptCreation::scriptCreator 1.0 package require -exact xotcl::store::persistence 1.0 package require -exact xotcl::pattern::singleton 1.0 package require -exact xotcl::registry::registry 1.0 package require -exact xotcl::actiweb::agentManagement 1.0 package require -exact xotcl::rdf::tripleRecreator 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::httpPlace { namespace import ::xotcl::* Singleton Place -superclass Invoker -parameter { {exportedObjs ""} |
︙ | ︙ | |||
175 176 177 178 179 180 181 182 183 184 185 186 187 188 | my instvar fileName resourceName place if {$resourceName eq ""} { my sendMsg [$place default] text/html ;# kind of index.html } elseif {[my parseParams obj method arguments $resourceName]} { if {![my isobject $obj] && [file readable $fileName]} { next ;# let Httpd handle this } else { set response [$place invokeCall obj status $method $arguments] #puts stderr "RESPONSE: $response" # # let the object's sending strategy mixin choose # the appropriate sending mode # # $obj showClass | > > > > > > > > > > > > | 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 | my instvar fileName resourceName place if {$resourceName eq ""} { my sendMsg [$place default] text/html ;# kind of index.html } elseif {[my parseParams obj method arguments $resourceName]} { if {![my isobject $obj] && [file readable $fileName]} { next ;# let Httpd handle this } else { # # tell the object the query from the URL # $obj set query [my set query] # # If there are no arguments available through the # interface, pass the URL-query parameters (raw) # if {$arguments eq ""} {set arguments [my set query]} # # now invoke the method # set response [$place invokeCall obj status $method $arguments] #puts stderr "RESPONSE: $response" # # let the object's sending strategy mixin choose # the appropriate sending mode # # $obj showClass |
︙ | ︙ |
Changes to jni/xotcl/library/actiweb/Invoker.xotcl.
1 2 | # $Id: Invoker.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ | | | | 1 2 3 4 5 6 7 8 9 10 11 12 | # $Id: Invoker.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ package provide xotcl::actiweb::invoker 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::invoker { namespace import ::xotcl::* Class AbstractInvoker AbstractInvoker abstract instproc invokeCall {o method arguments} AbstractInvoker abstract instproc eval {obj method arguments} |
︙ | ︙ |
Changes to jni/xotcl/library/actiweb/PlaceAccessControl.xotcl.
|
| < | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package provide xotcl::actiweb::placeAccessControl 1.0 package require -exact xotcl::comm::httpd 1.1 package require -exact xotcl::actiweb::httpPlace 1.0 package require XOTcl 1 # # Simple Object Pwd Protection with BasicAccessControl # #Usage example: #ConferenceOrgPlace confPlace -port $placeport -root [pwd] \ # -mixin PlaceAccessControl |
︙ | ︙ |
Changes to jni/xotcl/library/actiweb/SecureHtmlPlace.xotcl.
1 2 | # $Id: SecureHtmlPlace.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # $Id: SecureHtmlPlace.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ package provide xotcl::actiweb::secureHtmlPlace 1.0 package require -exact xotcl::actiweb::secureHttpPlace 1.0 package require -exact xotcl::actiweb::htmlPlace 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::secureHtmlPlace { namespace import ::xotcl::* Class SecureHtmlPlace -superclass {SecurePlace HtmlPlace} namespace export SecureHtmlPlace |
︙ | ︙ |
Changes to jni/xotcl/library/actiweb/SecureHttpPlace.xotcl.
|
| < | | < | | 1 2 3 4 5 6 7 8 9 10 11 12 | package provide xotcl::actiweb::secureHttpPlace 1.0 package require -exact xotcl::actiweb::httpPlace 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::secureHttpPlace { namespace import ::xotcl::* Class SecurePlace -superclass Place -parameter { {port 443} {requestCert 0} |
︙ | ︙ |
Changes to jni/xotcl/library/actiweb/SendStrategy.xotcl.
|
| < | | | 1 2 3 4 5 6 7 8 9 10 11 | package provide xotcl::actiweb::sendStrategy 1.0 package require XOTcl 1 # # some simple sending strategy classes -- to be used as mixins # for web objects # namespace eval ::xotcl::actiweb::sendStrategy { |
︙ | ︙ |
Changes to jni/xotcl/library/actiweb/UserMgt.xotcl.
|
| < | | | 1 2 3 4 5 6 7 8 9 10 11 | package provide xotcl::actiweb::userMgt 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::userMgt { namespace import ::xotcl::* Class UserMgt Class UserMgt::User -parameter {name password} |
︙ | ︙ |
Changes to jni/xotcl/library/actiweb/WebAgent.xotcl.
1 2 | # $Id: WebAgent.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # $Id: WebAgent.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ package provide xotcl::actiweb::webAgent 1.0 package require -exact xotcl::actiweb::agent 1.0 package require -exact xotcl::actiweb::invoker 1.0 package require -exact xotcl::mixinStrategy 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::webAgent { namespace import ::xotcl::* # # Web Agent are special agents that allow us to define another # object in the paramter webfacade as a facade for the web agent |
︙ | ︙ |
Changes to jni/xotcl/library/actiweb/WebDocument.xotcl.
|
| < | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package provide xotcl::actiweb::webDocument 1.0 package require -exact xotcl::actiweb::webObject 1.0 package require -exact xotcl::comm::httpAccess 1.0 package require -exact xotcl::mixinStrategy 1.0 package require -exact xotcl::actiweb::sendStrategy 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::webDocument { namespace import ::xotcl::* Class WebDocument -superclass WebObject \ -parameter { {content ""} |
︙ | ︙ |
Changes to jni/xotcl/library/actiweb/WebObject.xotcl.
1 2 | # $Id: WebObject.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # $Id: WebObject.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ package provide xotcl::actiweb::webObject 1.0 package require -exact xotcl::actiweb::sendStrategy 1.0 package require -exact xotcl::mixinStrategy 1.0 package require -exact xotcl::store::persistence 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::webObject { namespace import ::xotcl::* # # base interface for all web-entitites # |
︙ | ︙ |
Changes to jni/xotcl/library/actiweb/pageTemplate.xotcl.
|
| | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package provide xotcl::actiweb::pageTemplate 1.0 package require xotcl::actiweb::webObject 1.0 package require xotcl::actiweb::invoker 1.0 package require xotcl::mixinStrategy 1.0 package require XOTcl 1 namespace eval ::xotcl::actiweb::pageTemplate { namespace import ::xotcl::* Class PageTemplate -superclass WebObject PageTemplate instproc init args { next |
︙ | ︙ |
Changes to jni/xotcl/library/actiweb/pkgIndex.tcl.
1 2 3 4 5 6 7 8 9 10 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. | | | | | | | | | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded xotcl::actiweb::agent 1.0 [list source [file join $dir Agent.xotcl]] package ifneeded xotcl::actiweb::agentManagement 1.0 [list source [file join $dir AgentManagement.xotcl]] package ifneeded xotcl::actiweb::htmlPlace 1.0 [list source [file join $dir HtmlPlace.xotcl]] package ifneeded xotcl::actiweb::httpPlace 1.0 [list source [file join $dir HttpPlace.xotcl]] package ifneeded xotcl::actiweb::invoker 1.0 [list source [file join $dir Invoker.xotcl]] package ifneeded xotcl::actiweb::pageTemplate 1.0 [list source [file join $dir pageTemplate.xotcl]] package ifneeded xotcl::actiweb::placeAccessControl 1.0 [list source [file join $dir PlaceAccessControl.xotcl]] package ifneeded xotcl::actiweb::secureHtmlPlace 1.0 [list source [file join $dir SecureHtmlPlace.xotcl]] package ifneeded xotcl::actiweb::secureHttpPlace 1.0 [list source [file join $dir SecureHttpPlace.xotcl]] package ifneeded xotcl::actiweb::sendStrategy 1.0 [list source [file join $dir SendStrategy.xotcl]] package ifneeded xotcl::actiweb::userMgt 1.0 [list source [file join $dir UserMgt.xotcl]] package ifneeded xotcl::actiweb::webAgent 1.0 [list source [file join $dir WebAgent.xotcl]] package ifneeded xotcl::actiweb::webDocument 1.0 [list source [file join $dir WebDocument.xotcl]] package ifneeded xotcl::actiweb::webObject 1.0 [list source [file join $dir WebObject.xotcl]] |
Changes to jni/xotcl/library/comm/Access.xotcl.
1 2 | # -*- tcl -*- $Id: Access.xotcl,v 1.9 2007/08/14 16:38:26 neumann Exp $ | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # -*- tcl -*- $Id: Access.xotcl,v 1.9 2007/08/14 16:38:26 neumann Exp $ set httpAccessVersion 1.0 package provide xotcl::comm::httpAccess $httpAccessVersion package require -exact xotcl::comm::pcache 1.0 package require -exact xotcl::comm::mime 1.0 package require -exact xotcl::comm::connection 1.0 package require -exact xotcl::trace 1.0 package require XOTcl 1 namespace eval ::xotcl::comm::httpAccess { namespace import ::xotcl::* variable os variable VERSION |
︙ | ︙ |
Changes to jni/xotcl/library/comm/COPYRIGHT.
1 2 | * XOTcl - Extended OTcl * | > | | 1 2 3 4 5 6 7 8 9 10 11 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen |
︙ | ︙ |
Changes to jni/xotcl/library/comm/Connection.xotcl.
1 2 3 4 | # -*- tcl -*- $Id: Connection.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ package provide xotcl::comm::connection 1.0 | | | 1 2 3 4 5 6 7 8 9 10 11 12 | # -*- tcl -*- $Id: Connection.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ package provide xotcl::comm::connection 1.0 package require XOTcl 1 namespace eval ::xotcl::comm::connection { namespace import ::xotcl::* Class Connection -parameter {host port req socket handle} Connection proc make {r host port reuse reusedVar} { |
︙ | ︙ |
Changes to jni/xotcl/library/comm/Dav.xotcl.
1 2 | # $Id: Dav.xotcl,v 1.4 2006/02/18 22:17:33 neumann Exp $ | | | | 1 2 3 4 5 6 7 8 9 10 11 12 | # $Id: Dav.xotcl,v 1.4 2006/02/18 22:17:33 neumann Exp $ package provide xotcl::comm::dav 1.0 package require XOTcl 1 namespace eval ::xotcl::comm::dav { package require xotcl::comm::httpAccess namespace import ::xotcl::* Class Dav -superclass Http Dav instproc initialize args { |
︙ | ︙ |
Changes to jni/xotcl/library/comm/Ftp.xotcl.
1 2 | # $Id: Ftp.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | # $Id: Ftp.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ package provide xotcl::comm::ftp 1.0 package require xotcl::comm::httpAccess package require XOTcl 1 namespace eval ::xotcl::comm::ftp { namespace import ::xotcl::* Class Ftp -superclass NetAccess -parameter {user passwd} Ftp instproc initialize args { #my showCall |
︙ | ︙ |
Changes to jni/xotcl/library/comm/Httpd.xotcl.
|
| < | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | # # The XOTcl class Httpd implements an HTTP/1.0 and HTTP/1.1 server with # basic functionality. # # Gustaf Neumann (neumann@wu-wien.ac.at) set VERSION 1.1 package provide xotcl::comm::httpd $VERSION package require XOTcl 1 #package require xotcl::comm::httpAccess package require -exact xotcl::comm::connection 1.0 package require -exact xotcl::trace 1.0 package require -exact xotcl::comm::mime 1.0 namespace eval ::xotcl::comm::httpd { namespace import ::xotcl::* Class Httpd -parameter { {port 80} ipaddr {root ./} {logdir $::xotcl::logdir} {httpdWrk Httpd::Wrk} {redirects [list]} {workerTimeout 10000} } Httpd proc Date seconds {clock format $seconds -format {%a, %d %b %Y %T GMT} -gmt true} Httpd instproc checkRoot {} { my instvar root set root [string trimright $root /] if {![file isdir $root]} { puts stderr "Warning: create root directory '$root'" file mkdir $root } |
︙ | ︙ |
Changes to jni/xotcl/library/comm/Imap.xotcl.
1 2 | # $Id: Imap.xotcl,v 1.4 2006/02/18 22:17:33 neumann Exp $ | | | | 1 2 3 4 5 6 7 8 9 10 11 12 | # $Id: Imap.xotcl,v 1.4 2006/02/18 22:17:33 neumann Exp $ package provide xotcl::comm::imap 1.0 package require XOTcl 1 namespace eval ::xotcl::comm::imap { package require xotcl::comm::httpAccess namespace import ::xotcl::* Class Imap -superclass NetAccess -parameter {user} Imap instproc initialize args { |
︙ | ︙ |
Changes to jni/xotcl/library/comm/Ldap.xotcl.
|
| | | | 1 2 3 4 5 6 7 8 9 10 11 12 | package provide xotcl::comm::ldap 1.0 package require xotcl::wafecompat ; # Get 'requireModules'. package require XOTcl 1 namespace eval ::xotcl::comm::ldap { namespace import ::xotcl::* requireModules { ldapOpen ldaplibGen.so } Class Ldap -superclass NetAccess -parameter {host port dn attributes scope filter} |
︙ | ︙ |
Changes to jni/xotcl/library/comm/Mime.xotcl.
1 2 | # $Id: Mime.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ | | | | 1 2 3 4 5 6 7 8 9 10 11 12 | # $Id: Mime.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ package provide xotcl::comm::mime 1.0 package require XOTcl 1 namespace eval ::xotcl::comm::mime { namespace import ::xotcl::* ####################################################################### Class MimeTypeLoader MimeTypeLoader instproc loadMimeTypes {file} { |
︙ | ︙ |
Changes to jni/xotcl/library/comm/PCache.xotcl.
︙ | ︙ | |||
12 13 14 15 16 17 18 | # of the Cineast browser # 3) As a last resource the tmp directory is used as the cache directory # # Additionally, the cache directory can be specified after loading of this # file (before the first open) through the instance variable "dir" # in the object persistentCache. | | | | 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | # of the Cineast browser # 3) As a last resource the tmp directory is used as the cache directory # # Additionally, the cache directory can be specified after loading of this # file (before the first open) through the instance variable "dir" # in the object persistentCache. package provide xotcl::comm::pcache 1.0 #package require xotcl::package package require XOTcl 1 namespace eval ::xotcl::comm::pcache { namespace import ::xotcl::* variable CACHE_DIR variable homeDir |
︙ | ︙ |
Changes to jni/xotcl/library/comm/pkgIndex.tcl.
1 2 3 4 5 6 7 8 9 10 11 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded xotcl::comm::connection 1.0 [list source [file join $dir Connection.xotcl]] | | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded xotcl::comm::connection 1.0 [list source [file join $dir Connection.xotcl]] package ifneeded xotcl::comm::dav 1.0 [list source [file join $dir Dav.xotcl]] package ifneeded xotcl::comm::ftp 1.0 [list source [file join $dir Ftp.xotcl]] package ifneeded xotcl::comm::httpAccess 1.0 [list source [file join $dir Access.xotcl]] package ifneeded xotcl::comm::httpd 1.1 [list source [file join $dir Httpd.xotcl]] package ifneeded xotcl::comm::imap 1.0 [list source [file join $dir Imap.xotcl]] package ifneeded xotcl::comm::ldap 1.0 [list source [file join $dir Ldap.xotcl]] package ifneeded xotcl::comm::mime 1.0 [list source [file join $dir Mime.xotcl]] package ifneeded xotcl::comm::pcache 1.0 [list source [file join $dir PCache.xotcl]] |
Changes to jni/xotcl/library/lib/COPYRIGHT.
1 2 | * XOTcl - Extended OTcl * | > | | 1 2 3 4 5 6 7 8 9 10 11 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen |
︙ | ︙ |
Changes to jni/xotcl/library/lib/Script.xotcl.
|
| < | | | 1 2 3 4 5 6 7 8 9 10 | package provide xotcl::script 1.0 package require XOTcl 1 namespace eval ::xotcl::script { namespace import ::xotcl::* @ @File {description { A small package to instantiate an object, that represents a script. |
︙ | ︙ | |||
27 28 29 30 31 32 33 | Class Script Script proc create args { eval lappend args $::argv eval next $args } Script instproc unknown args { | | | 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | Class Script Script proc create args { eval lappend args $::argv eval next $args } Script instproc unknown args { puts stderr "$::argv0: Unknown option ´-$args´ provided" } namespace export Script } namespace import ::xotcl::script::* |
Changes to jni/xotcl/library/lib/htmllib.xotcl.
|
| < | 1 2 3 4 5 6 7 | # # htmllib.xotcl # # Author: Antti Salonen, as@fishpool.fi # # Copyright: |
︙ | ︙ | |||
31 32 33 34 35 36 37 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE # IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR # MODIFICATIONS. # | | | | 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE # IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR # MODIFICATIONS. # package provide xotcl::htmllib 1.0 package require XOTcl 1 namespace eval ::xotcl::htmllib { namespace import ::xotcl::* @ @File { description { This package provides the class HtmlBuilder, which can be used to |
︙ | ︙ |
Changes to jni/xotcl/library/lib/make.xotcl.
1 2 3 4 5 6 | # $Id: make.xotcl,v 1.4 2006/09/27 08:12:40 neumann Exp $ ### inEachDir changes now to each directory ### install clears tgarget directory before installing ### Object file added (for better -n processing) #lappend auto_path .. | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # $Id: make.xotcl,v 1.4 2006/09/27 08:12:40 neumann Exp $ ### inEachDir changes now to each directory ### install clears tgarget directory before installing ### Object file added (for better -n processing) #lappend auto_path .. package require XOTcl 1 1 namespace import -force ::xotcl::* ### Object make # # shared lib add files for pkgIndex.tcl # |
︙ | ︙ |
Changes to jni/xotcl/library/lib/makeDoc.xotcl.
|
| < | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package require XOTcl 1 1.6 namespace import ::xotcl::* @ @File { description { Documentation tool for the XOTcl distribution.<br> Usage: 'makeDoc docdir filename ?filename ...?'<br> Called by Makefile. } } lappend auto_path [file dirname [info script]] #package require xotcl::package #package verbose 1 package require -exact xotcl::xodoc 1.0 set fileList "" puts "XOTcl Documentation Tool" puts "------------------------" if {$argc > 1} { set DOCDIR [lindex $argv 0] puts "Documenting to directory $DOCDIR:" |
︙ | ︙ |
Changes to jni/xotcl/library/lib/metadataAnalyzer.xotcl.
|
| | | | 1 2 3 4 5 6 7 8 9 | package provide xotcl::metadataAnalyzer 1.0 package require XOTcl 1 namespace eval ::xotcl::metadataAnalyzer { namespace import ::xotcl::* @ @File { description { XOTcl file analyzer for @ metadata. E.g.\ used for |
︙ | ︙ |
Changes to jni/xotcl/library/lib/mixinStrategy.xotcl.
|
| < | | | 1 2 3 4 5 6 7 8 9 10 | package provide xotcl::mixinStrategy 1.0 package require XOTcl 1 namespace eval ::xotcl::mixinStrategy { namespace import ::xotcl::* @ @File { description { These methods provide support for managing "strategies", i.e. mixin-classes, where only one kind of a family of conformant |
︙ | ︙ |
Changes to jni/xotcl/library/lib/package.xotcl.
|
| < | | | | 1 2 3 4 5 6 7 8 9 10 11 | package provide xotcl::package 1.0 package require -exact xotcl::mixinStrategy 1.0 package require XOTcl 1 rename package tcl_package namespace eval ::xotcl::package { namespace import ::xotcl::* @ @File {description { |
︙ | ︙ |
Changes to jni/xotcl/library/lib/pkgIndex-package.add.
|
| | | 1 | package ifneeded xotcl::package 1.0 [list source [file join $dir package.xotcl]] |
Changes to jni/xotcl/library/lib/pkgIndex.tcl.
1 2 3 4 5 6 7 8 9 10 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. | | | | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded xotcl::htmllib 1.0 [list source [file join $dir htmllib.xotcl]] package ifneeded xotcl::metadataAnalyzer 1.0 [list source [file join $dir metadataAnalyzer.xotcl]] package ifneeded xotcl::mixinStrategy 1.0 [list source [file join $dir mixinStrategy.xotcl]] package ifneeded xotcl::script 1.0 [list source [file join $dir Script.xotcl]] package ifneeded xotcl::staticMetadataAnalyzer 1.0 [list source [file join $dir staticMetadata.xotcl]] package ifneeded xotcl::test 1.38 [list source [file join $dir test.xotcl]] package ifneeded xotcl::trace 1.0 [list source [file join $dir trace.xotcl]] package ifneeded xotcl::upvar-compat 1.0 [list source [file join $dir upvarcompat.xotcl]] package ifneeded xotcl::wafecompat 1.0 [list source [file join $dir wafecompat.tcl]] package ifneeded xotcl::xodoc 1.0 [list source [file join $dir xodoc.xotcl]] package ifneeded xotcl::package 1.0 [list source [file join $dir package.xotcl]] |
Changes to jni/xotcl/library/lib/staticMetadata.xotcl.
|
| < | > > | | 1 2 3 4 5 6 7 8 9 10 11 | package provide xotcl::staticMetadataAnalyzer 1.0 package require -exact xotcl::metadataAnalyzer 1.0 package require XOTcl 1 namespace eval ::xotcl::staticMetadataAnalyzer { namespace import ::xotcl::* @ @File { description { XOTcl file static analyzer for @ metadata. E.g. used for |
︙ | ︙ |
Changes to jni/xotcl/library/lib/test.xotcl.
1 | package provide xotcl::test 1.38 | | | 1 2 3 4 5 6 7 8 9 | package provide xotcl::test 1.38 package require XOTcl 1 namespace eval ::xotcl::test { namespace import ::xotcl::* @ @File {description { Simple regression test support. }} |
︙ | ︙ |
Changes to jni/xotcl/library/lib/trace.xotcl.
|
| < | | | 1 2 3 4 5 6 7 8 9 | package provide xotcl::trace 1.0 package require XOTcl 1 namespace eval ::xotcl::trace { namespace import ::xotcl::* @ @File {description { Various tracing tools for the XOTcl language. } |
︙ | ︙ |
Changes to jni/xotcl/library/lib/upvarcompat.xotcl.
|
| < | | 1 2 3 4 5 6 7 8 9 10 | package provide xotcl::upvar-compat 1.0 package require XOTcl 1 namespace eval ::xotcl::upvar-compat { namespace import ::xotcl::* @ @File {description { Provide a version of upvar and uplevel that provide backward compatibility such that these commands |
︙ | ︙ |
Changes to jni/xotcl/library/lib/wafecompat.tcl.
|
| < | | 1 2 3 4 5 6 7 8 | package provide xotcl::wafecompat 1.0 set WAFELIB /usr/lib/X11/wafe/ set MODULE_PATH "$WAFELIB $auto_path" set COMPONENT_PATH $WAFELIB/otcl-classes proc MOTIFPREFIX {} {return {}} proc requireModules modules { global MODULE_PATH |
︙ | ︙ |
Changes to jni/xotcl/library/lib/xodoc.xotcl.
|
| < | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | package provide xotcl::xodoc 1.0 package require -exact xotcl::staticMetadataAnalyzer 1.0 package require -exact xotcl::htmllib 1.0 #package require -exact xotcl::trace 1.0 package require XOTcl 1 namespace eval ::xotcl::xodoc { namespace import ::xotcl::* @ @File { description { XOTcl documentation tool. Overloads the command @, which is used |
︙ | ︙ |
Changes to jni/xotcl/library/patterns/COPYRIGHT.
1 2 | * XOTcl - Extended OTcl * | > | | 1 2 3 4 5 6 7 8 9 10 11 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen |
︙ | ︙ |
Changes to jni/xotcl/library/patterns/ChainOfResponsibility.xotcl.
|
| < | | | 1 2 3 4 5 6 7 8 9 10 | package provide xotcl::pattern::chainOfResponsibility 1.0 package require XOTcl 1 namespace eval ::xotcl::pattern::chainOfResponsibility { namespace import ::xotcl::* Class ChainOfResponsibility -superclass Class ChainOfResponsibility instproc chainingFilter args { |
︙ | ︙ |
Changes to jni/xotcl/library/patterns/OnCalleeProxy.xotcl.
|
| < | | | 1 2 3 4 5 6 7 8 9 10 | package provide xotcl::pattern::onCalleeProxy 1.0 package require XOTcl 1 namespace eval ::xotcl::pattern::onCalleeProxy { namespace import ::xotcl::* Class OnCalleeProxy -superclass Class @ @File { |
︙ | ︙ |
Changes to jni/xotcl/library/patterns/Singleton.xotcl.
|
| < | | | 1 2 3 4 5 6 7 8 9 10 | package provide xotcl::pattern::singleton 1.0 package require XOTcl 1 namespace eval ::xotcl::pattern::singleton { namespace import ::xotcl::* Class SingletonBase SingletonBase instproc getInstance args { my instvar _instance |
︙ | ︙ |
Changes to jni/xotcl/library/patterns/SortedComposite.xotcl.
|
| < | | | 1 2 3 4 5 6 7 8 9 10 | package provide xotcl::pattern::sortedCompositeWithAfter 1.0 package require XOTcl 1 namespace eval ::xotcl::pattern::sortedCompositeWithAfter { namespace import ::xotcl::* Class SortedComposite -superclass Class @ @File { |
︙ | ︙ |
Changes to jni/xotcl/library/patterns/adapter.xotcl.
|
| < | | | 1 2 3 4 5 6 7 8 9 10 11 | package provide xotcl::pattern::adapter 1.0 package require XOTcl 1 namespace eval ::xotcl::pattern::adapter { namespace import ::xotcl::* Class Adapter -superclass Class @ @File { |
︙ | ︙ |
Changes to jni/xotcl/library/patterns/composite.xotcl.
|
| < | | | 1 2 3 4 5 6 7 8 9 10 | package provide xotcl::pattern::composite 1.0 package require XOTcl 1 namespace eval ::xotcl::pattern::composite { namespace import ::xotcl::* Class Composite -superclass Class @ @File { |
︙ | ︙ |
Changes to jni/xotcl/library/patterns/link.xotcl.
|
| < | | | 1 2 3 4 5 6 7 8 9 10 | package provide xotcl::pattern::link 1.0 package require XOTcl 1 namespace eval ::xotcl::pattern::link { namespace import ::xotcl::* # # establish/introspect 'link' through link-instproc # |
︙ | ︙ |
Changes to jni/xotcl/library/patterns/manager.xotcl.
|
| < | | | 1 2 3 4 5 6 7 8 9 10 | package provide xotcl::pattern::manager 1.0 package require XOTcl 1 namespace eval ::xotcl::pattern::manager { namespace import ::xotcl::* # # a simle manager pattern following buschmann (164) # based on dynamic object aggregation and using dynamic code |
︙ | ︙ |
Changes to jni/xotcl/library/patterns/observer.xotcl.
|
| < | | | 1 2 3 4 5 6 7 8 9 10 | package provide xotcl::pattern::observer 1.0 package require XOTcl 1 namespace eval ::xotcl::pattern::observer { namespace import ::xotcl::* Class Observer -superclass Class @ @File { |
︙ | ︙ |
Changes to jni/xotcl/library/patterns/pkgIndex.tcl.
1 2 3 4 5 6 7 8 9 10 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. | | | | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded xotcl::pattern::adapter 1.0 [list source [file join $dir adapter.xotcl]] package ifneeded xotcl::pattern::chainOfResponsibility 1.0 [list source [file join $dir ChainOfResponsibility.xotcl]] package ifneeded xotcl::pattern::composite 1.0 [list source [file join $dir composite.xotcl]] package ifneeded xotcl::pattern::link 1.0 [list source [file join $dir link.xotcl]] package ifneeded xotcl::pattern::manager 1.0 [list source [file join $dir manager.xotcl]] package ifneeded xotcl::pattern::observer 1.0 [list source [file join $dir observer.xotcl]] package ifneeded xotcl::pattern::onCalleeProxy 1.0 [list source [file join $dir OnCalleeProxy.xotcl]] package ifneeded xotcl::pattern::singleton 1.0 [list source [file join $dir Singleton.xotcl]] package ifneeded xotcl::pattern::sortedCompositeWithAfter 1.0 [list source [file join $dir SortedComposite.xotcl]] |
Changes to jni/xotcl/library/rdf/COPYRIGHT.
1 2 | * XOTcl - Extended OTcl * | > | | 1 2 3 4 5 6 7 8 9 10 11 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen |
︙ | ︙ |
Changes to jni/xotcl/library/rdf/RDFCreator.xotcl.
1 2 | # $Id: RDFCreator.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 | # $Id: RDFCreator.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ package provide xotcl::rdf::tripleRecreator 1.0 package require XOTcl 1 package require -exact xotcl::rdf::parser 1.0 namespace eval ::xotcl::rdf::tripleRecreator { namespace import ::xotcl::* Class RDFCreator -parameter { {rdfNS "http://www.w3.org/1999/02/22-rdf-syntax-ns#"} {openExprs ""} |
︙ | ︙ |
Changes to jni/xotcl/library/rdf/RDFTriple.xotcl.
|
| < | | | 1 2 3 4 5 6 7 8 9 10 11 | package provide xotcl::rdf::triple 1.0 package require XOTcl 1 package require -exact xotcl::rdf::parser 1.0 namespace eval ::xotcl::rdf::triple { namespace import ::xotcl::* Class RDFTriple -parameter { predicate subject |
︙ | ︙ |
Changes to jni/xotcl/library/rdf/pkgIndex.tcl.
1 2 3 4 5 6 7 8 9 10 11 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded xotcl::rdf::parser 1.0 [list source [file join $dir xoRDF.xotcl]] | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded xotcl::rdf::parser 1.0 [list source [file join $dir xoRDF.xotcl]] package ifneeded xotcl::rdf::recreatorVisitor 1.0 [list source [file join $dir rdfRecreatorVisitor.xotcl]] package ifneeded xotcl::rdf::triple 1.0 [list source [file join $dir RDFTriple.xotcl]] package ifneeded xotcl::rdf::tripleRecreator 1.0 [list source [file join $dir RDFCreator.xotcl]] |
Changes to jni/xotcl/library/rdf/rdfRecreatorVisitor.xotcl.
|
| < | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 | package provide xotcl::rdf::recreatorVisitor 1.0 package require -exact xotcl::rdf::parser 1.0 package require -exact xotcl::xml::recreatorVisitor 1.0 package require XOTcl 1 namespace eval ::xotcl::rdf::recreatorVisitor { namespace import ::xotcl::* ############################################################################## # # a visitor that recreates an RDF representation from a |
︙ | ︙ |
Changes to jni/xotcl/library/rdf/xoRDF.xotcl.
|
| < | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | package provide xotcl::rdf::parser 1.0 package require XOTcl 1 package require -exact xotcl::xml::parser 1.0 #package require -exact xotcl::pattern::link 1.0 package require -exact xotcl::trace 1.0 namespace eval ::xotcl::rdf::parser { namespace import ::xotcl::* ############################################################################## # # RDF Parse Type Handling for RDF Node Class and RDF Parser class |
︙ | ︙ |
Changes to jni/xotcl/library/registry/COPYRIGHT.
1 2 | * XOTcl - Extended OTcl * | > | | 1 2 3 4 5 6 7 8 9 10 11 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen |
︙ | ︙ |
Changes to jni/xotcl/library/registry/Registry.xotcl.
|
| | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package provide xotcl::registry::registry 1.0 package require -exact xotcl::trace 1.0 package require -exact xotcl::rdf::triple 1.0 package require -exact xotcl::rdf::tripleRecreator 1.0 package require -exact xotcl::actiweb::agent 1.0 package require XOTcl 1 namespace eval ::xotcl::registry::registry { namespace import ::xotcl::* Class Registry -superclass Agent Registry instproc init args { |
︙ | ︙ |
Changes to jni/xotcl/library/registry/pkgIndex.tcl.
1 2 3 4 5 6 7 8 9 10 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. | | | 1 2 3 4 5 6 7 8 9 10 11 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded xotcl::registry::registry 1.0 [list source [file join $dir Registry.xotcl]] |
Changes to jni/xotcl/library/serialize/COPYRIGHT.
1 2 | * XOTcl - Extended OTcl * | > | | 1 2 3 4 5 6 7 8 9 10 11 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen |
︙ | ︙ |
Changes to jni/xotcl/library/serialize/RecoveryPoint.xotcl.
1 2 | # $Id: RecoveryPoint.xotcl,v 1.4 2006/02/18 22:17:33 neumann Exp $ | | | | 1 2 3 4 5 6 7 8 9 10 11 | # $Id: RecoveryPoint.xotcl,v 1.4 2006/02/18 22:17:33 neumann Exp $ package provide xotcl::scriptCreation::recoveryPoint 1.0 package require XOTcl 1 namespace eval ::xotcl::scriptCreation::recoveryPoint { namespace import ::xotcl::* ## fehlt noch: filter, mixins, metadata, ass, assoption, etc ## beim recover Class's,Object's proc instproc vars nicht ueberschreiben ## filter dann anhaengen etc ... |
︙ | ︙ |
Changes to jni/xotcl/library/serialize/ScriptCreator.xotcl.
1 2 | # $Id: ScriptCreator.xotcl,v 1.4 2006/02/18 22:17:33 neumann Exp $ | | | | 1 2 3 4 5 6 7 8 9 10 11 | # $Id: ScriptCreator.xotcl,v 1.4 2006/02/18 22:17:33 neumann Exp $ package provide xotcl::scriptCreation::scriptCreator 1.0 package require XOTcl 1 namespace eval ::xotcl::scriptCreation::scriptCreator { namespace import ::xotcl::* Class ScriptCreator \ -parameter { {excludedObjs {Object Class Class::Parameter}} |
︙ | ︙ |
Changes to jni/xotcl/library/serialize/pkgIndex.tcl.
1 2 3 4 5 6 7 8 9 10 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded xotcl::scriptCreation::recoveryPoint 1.0 [list source [file join $dir RecoveryPoint.xotcl]] package ifneeded xotcl::scriptCreation::scriptCreator 1.0 [list source [file join $dir ScriptCreator.xotcl]] package ifneeded xotcl::serializer 1.0 [list source [file join $dir Serializer.xotcl]] |
Changes to jni/xotcl/library/store/COPYRIGHT.
1 2 | * XOTcl - Extended OTcl * | > | | 1 2 3 4 5 6 7 8 9 10 11 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen |
︙ | ︙ |
Changes to jni/xotcl/library/store/JufGdbmStorage.xotcl.
1 2 3 4 5 6 | # $Id: JufGdbmStorage.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ package provide xotcl::store::jufgdbm 0.81 package require xotcl::store::juf_gdbm package require xotcl::store | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # $Id: JufGdbmStorage.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ package provide xotcl::store::jufgdbm 0.81 package require xotcl::store::juf_gdbm package require xotcl::store package require XOTcl 1 namespace eval ::xotcl::store::jufgdbm { namespace import ::xotcl::* # # a simple GNU Gdbm DB Store Access # |
︙ | ︙ |
Changes to jni/xotcl/library/store/MemStorage.xotcl.
1 2 3 4 | # $Id: MemStorage.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ package provide xotcl::store::mem 0.84 package require xotcl::store 0.84 | | | 1 2 3 4 5 6 7 8 9 10 11 12 | # $Id: MemStorage.xotcl,v 1.6 2006/09/27 08:12:40 neumann Exp $ package provide xotcl::store::mem 0.84 package require xotcl::store 0.84 package require XOTcl 1 namespace eval ::xotcl::store::mem { namespace import ::xotcl::* Object ::xotcl::memStoragePool ::xotcl::memStoragePool proc add {filename} { my set memStores($filename) [Object new -childof [self]] |
︙ | ︙ |
Changes to jni/xotcl/library/store/MultiStorage.xotcl.
1 |
| | | | | 1 2 3 4 5 6 7 8 9 10 11 | package provide xotcl::store::multi 1.0 package require -exact xotcl::store 1.0 package require XOTcl 1 namespace eval ::xotcl::store::multi { namespace import ::xotcl::* Class Storage=multi -superclass Storage Storage=multi instproc add {dbPackage args} { my instvar storages names |
︙ | ︙ |
Changes to jni/xotcl/library/store/Persistence.xotcl.
|
| < | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | package provide xotcl::store::persistence 1.0 package require -exact xotcl::trace 1.0 package require -exact xotcl::package 1.0 package require -exact xotcl::mixinStrategy 1.0 package require -exact xotcl::store 1.0 package require XOTcl 1 namespace eval ::xotcl::store::persistence { namespace import ::xotcl::* @ @File { description { Persistent store for XOTcl objects with Eager and Lazy persistence. |
︙ | ︙ |
Changes to jni/xotcl/library/store/Storage.xotcl.
1 2 | # $Id: Storage.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ | | | | 1 2 3 4 5 6 7 8 9 10 11 | # $Id: Storage.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ package provide xotcl::store 1.0 package require XOTcl 1 namespace eval ::xotcl::store { namespace import ::xotcl::* @ @File { description { Simple generic storage interface for hashtable-like (persistent) |
︙ | ︙ |
Changes to jni/xotcl/library/store/TclGdbmStorage.xotcl.
1 2 3 4 5 6 | # $Id: TclGdbmStorage.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ package provide xotcl::store::tclgdbm 0.84 package require xotcl::store::gdbm package require xotcl::store | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # $Id: TclGdbmStorage.xotcl,v 1.3 2005/09/09 21:09:01 neumann Exp $ package provide xotcl::store::tclgdbm 0.84 package require xotcl::store::gdbm package require xotcl::store package require XOTcl 1 namespace eval ::xotcl::store::tclgdbm { namespace import ::xotcl::* # # a simple GNU Gdbm DB Store Access based on TclGdbm # |
︙ | ︙ |
Changes to jni/xotcl/library/store/TextFileStorage.xotcl.
|
| | | | | 1 2 3 4 5 6 7 8 9 10 | package provide xotcl::store::textfile 1.0 package require -exact xotcl::store 1.0 package require XOTcl 1 namespace eval ::xotcl::store::textfile { namespace import ::xotcl::* Class Storage=TextFile -superclass Storage -parameter { filename reorgCounter |
︙ | ︙ |
Changes to jni/xotcl/library/store/XOTclGdbm/Makefile.in.
︙ | ︙ | |||
66 67 68 69 70 71 72 73 74 75 76 77 78 79 | BINARIES = $(lib_BINARIES) SHELL = @SHELL@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ datadir = @datadir@ mandir = @mandir@ includedir = @includedir@ | > | 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | BINARIES = $(lib_BINARIES) SHELL = @SHELL@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ bindir = @bindir@ libdir = @libdir@ datadir = @datadir@ mandir = @mandir@ includedir = @includedir@ |
︙ | ︙ |
Changes to jni/xotcl/library/store/XOTclGdbm/configure.
more than 10,000 changes
Added jni/xotcl/library/store/XOTclGdbm/configure.ac.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 | #!/bin/bash -norc dnl This file is an input file used by the GNU "autoconf" program to dnl generate the file "configure", which is run during Tcl installation dnl to configure the system for the local environment. # # RCS: @(#) $Id: configure.in,v 1.20 2007/10/12 19:53:32 neumann Exp $ #----------------------------------------------------------------------- # Sample configure.in for Tcl Extensions. The only places you should # need to modify this file are marked by the string __CHANGE__ #----------------------------------------------------------------------- configdir=$(srcdir)/../../../tclconfig #----------------------------------------------------------------------- # __CHANGE__ # Set your package name and version numbers here. # # This initializes the environment with PACKAGE_NAME and PACKAGE_VERSION # set as provided. These will also be added as -D defs in your Makefile # so you can encode the package version directly into the source files. #----------------------------------------------------------------------- AC_INIT([xotclgdbm], [1.2]) #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. # This will define a ${TEA_PLATFORM} variable == "unix" or "windows" # as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE. #-------------------------------------------------------------------- TEA_INIT([3.9]) AC_CONFIG_AUX_DIR([../../../tclconfig]) #-------------------------------------------------------------------- # specify some extra flags #-------------------------------------------------------------------- AC_ARG_WITH([gdbm], [ --with-gdbm=GDBM_INCLUDE_DIR[,GDBM_LIB_DIR] absolute path to gdbm.h and optionally the path to the library, --without-gdbm disables build of Tcl Gdbm], [with_gdbm=$withval], [with_gdbm=no]) AC_ARG_WITH([xotcl], [ --with-xotcl=DIR_CONTAINING_XOTCLCONFIG_SH absolute path to xotclConfig.sh, --without-xotcl disables, but this is pointless], [with_xotcl=$withval], [AC_MSG_ERROR([--with-xotcl is required])]) #-------------------------------------------------------------------- # Load the tclConfig.sh file #-------------------------------------------------------------------- TEA_PATH_TCLCONFIG TEA_LOAD_TCLCONFIG #-------------------------------------------------------------------- # Load the tkConfig.sh file if necessary (Tk extension) #-------------------------------------------------------------------- #TEA_PATH_TKCONFIG #TEA_LOAD_TKCONFIG #----------------------------------------------------------------------- # Handle the --prefix=... option by defaulting to what Tcl gave. # Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER. #----------------------------------------------------------------------- TEA_PREFIX #----------------------------------------------------------------------- # Standard compiler checks. # This sets up CC by using the CC env var, or looks for gcc otherwise. # This also calls AC_PROG_CC, AC_PROG_INSTALL and a few others to create # the basic setup necessary to compile executables. #----------------------------------------------------------------------- TEA_SETUP_COMPILER #----------------------------------------------------------------------- # __CHANGE__ # Specify the C source files to compile in TEA_ADD_SOURCES, # public headers that need to be installed in TEA_ADD_HEADERS, # stub library C source files to compile in TEA_ADD_STUB_SOURCES, # and runtime Tcl library files in TEA_ADD_TCL_SOURCES. # This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS # and PKG_TCL_SOURCES. #----------------------------------------------------------------------- if test ! "${with_gdbm}" = no; then GDBM_INC_DIR="`echo $with_gdbm |cut -f1 -d,`" GDBM_LIB_DIR="`echo $with_gdbm |cut -f2 -d, -s`" fi if test -z "$GDBM_INC_DIR" ; then gdbm_h_ok=1 GDBM_INC_SPEC="" else GDBM_INC_SPEC="-I${GDBM_INC_DIR}" echo "Checking ${GDBM_INC_DIR}/gdbm.h" if test -f "${GDBM_INC_DIR}/gdbm.h" ; then gdbm_h_ok=1 else gdbm_h_ok=0 fi fi if test "${gdbm_h_ok}" == "0" ; then AC_MSG_ERROR([ Could not locate gdbm.h on your machine to build XOTclGdbm. You can download a precompiled lib 'libgdbm' and the header file 'gdbm.h' from http://www.gnu.org/software/gdbm/ and compile again. Alternatively, you can compile XOTcl without gdbm. ]) fi if test -z "${GDBM_LIB_DIR}" ; then GDBM_LIB_SPEC="" else GDBM_LIB_SPEC="-L${GDBM_LIB_DIR}" fi #echo "Gdbm include spec = '${GDBM_INC_SPEC}'" #echo "Gdbm lib spec = '${GDBM_LIB_SPEC}'" #-------------------------------------------------------------------- # Load the xotclConfig.sh file #-------------------------------------------------------------------- AC_MSG_NOTICE([Reading file ${with_xotcl}/xotclConfig.sh]) source ${with_xotcl}/xotclConfig.sh TEA_ADD_SOURCES([xotclgdbm.c]) TEA_ADD_HEADERS([]) TEA_ADD_INCLUDES([-I${with_xotcl}/generic ${XOTCL_BUILD_INCLUDE_SPEC} ${GDBM_INC_SPEC}]) TEA_ADD_LIBS([$XOTCL_BUILD_STUB_LIB_SPEC $XOTCL_BUILD_LIB_SPEC $GDBM_LIB_SPEC -lgdbm]) TEA_ADD_CFLAGS([]) TEA_ADD_STUB_SOURCES([]) TEA_ADD_TCL_SOURCES([]) #-------------------------------------------------------------------- # __CHANGE__ # A few miscellaneous platform-specific items: # # Define a special symbol for Windows (BUILD_sample in this case) so # that we create the export library with the dll. # # Windows creates a few extra files that need to be cleaned up. # You can add more files to clean if your extension creates any extra # files. # # TEA_ADD_* any platform specific compiler/build info here. #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then AC_DEFINE([BUILD_sample]) CLEANFILES="pkgIndex.tcl *.lib *.dll *.exp *.ilk *.pdb vc*.pch" #TEA_ADD_SOURCES([win/winFile.c]) #TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/win)\"]) else CLEANFILES="pkgIndex.tcl" #TEA_ADD_SOURCES([unix/unixFile.c]) #TEA_ADD_LIBS([-lsuperfly]) fi AC_SUBST([CLEANFILES]) #-------------------------------------------------------------------- # __CHANGE__ # Choose which headers you need. Extension authors should try very # hard to only rely on the Tcl public header files. Internal headers # contain private data structures and are subject to change without # notice. # This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG #-------------------------------------------------------------------- TEA_PUBLIC_TCL_HEADERS #TEA_PRIVATE_TCL_HEADERS #TEA_PUBLIC_TK_HEADERS #TEA_PRIVATE_TK_HEADERS #TEA_PATH_X #-------------------------------------------------------------------- # Check whether --enable-threads or --disable-threads was given. #-------------------------------------------------------------------- TEA_ENABLE_THREADS #-------------------------------------------------------------------- # The statement below defines a collection of symbols related to # building as a shared library instead of a static library. #-------------------------------------------------------------------- TEA_ENABLE_SHARED #-------------------------------------------------------------------- # This macro figures out what flags to use with the compiler/linker # when building shared/static debug/optimized objects. This information # can be taken from the tclConfig.sh file, but this figures it all out. #-------------------------------------------------------------------- TEA_CONFIG_CFLAGS #-------------------------------------------------------------------- # Set the default compiler switches based on the --enable-symbols option. #-------------------------------------------------------------------- TEA_ENABLE_SYMBOLS #-------------------------------------------------------------------- # Everyone should be linking against the Tcl stub library. If you # can't for some reason, remove this definition. If you aren't using # stubs, you also need to modify the SHLIB_LD_LIBS setting below to # link against the non-stubbed Tcl library. Add Tk too if necessary. #-------------------------------------------------------------------- AC_DEFINE([USE_TCL_STUBS]) #AC_DEFINE([USE_TK_STUBS]) #-------------------------------------------------------------------- # This macro generates a line to use when building a library. It # depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS, # and TEA_LOAD_TCLCONFIG macros above. #-------------------------------------------------------------------- TEA_MAKE_LIB #-------------------------------------------------------------------- # Find tclsh so that we can run pkg_mkIndex to generate the pkgIndex.tcl # file during the install process. Don't run the TCLSH_PROG through # ${CYGPATH} because it's being used directly by make. # Require that we use a tclsh shell version 8.2 or later since earlier # versions have bugs in the pkg_mkIndex routine. # Add WISH as well if this is a Tk extension. #-------------------------------------------------------------------- TEA_PROG_TCLSH #TEA_PROG_WISH #-------------------------------------------------------------------- # Finally, substitute all of the various values into the Makefile. # You may alternatively have a special pkgIndex.tcl.in or other files # which require substituting th AC variables in. Include these here. #-------------------------------------------------------------------- AC_CONFIG_FILES([Makefile]) AC_OUTPUT |
Deleted jni/xotcl/library/store/XOTclGdbm/configure.in.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/xotcl/library/store/XOTclGdbm/tcl.m4.
1 2 3 4 5 6 7 8 9 10 | # tcl.m4 -- # # This file provides a set of autoconf macros to help TEA-enable # a Tcl extension. # # Copyright (c) 1999-2000 Ajuba Solutions. # Copyright (c) 2002-2005 ActiveState Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. | < < | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # tcl.m4 -- # # This file provides a set of autoconf macros to help TEA-enable # a Tcl extension. # # Copyright (c) 1999-2000 Ajuba Solutions. # Copyright (c) 2002-2005 ActiveState Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. AC_PREREQ(2.57) dnl TEA extensions pass us the version of TEA they think they dnl are compatible with (must be set in TEA_INIT below) dnl TEA_VERSION="3.9" # Possible values for key variables defined: # # TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem') # TEA_PLATFORM - windows unix # |
︙ | ︙ | |||
53 54 55 56 57 58 59 | if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true AC_ARG_WITH(tcl, AC_HELP_STRING([--with-tcl], [directory containing tcl configuration (tclConfig.sh)]), | | | | | | | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true AC_ARG_WITH(tcl, AC_HELP_STRING([--with-tcl], [directory containing tcl configuration (tclConfig.sh)]), with_tclconfig="${withval}") AC_MSG_CHECKING([for Tcl configuration]) AC_CACHE_VAL(ac_cv_c_tclconfig,[ # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then case "${with_tclconfig}" in */tclConfig.sh ) if test -f "${with_tclconfig}"; then AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself]) with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`" fi ;; esac if test -f "${with_tclconfig}/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`" else AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh]) fi fi # then check for a private Tcl installation if test x"${ac_cv_c_tclconfig}" = x ; then |
︙ | ︙ | |||
90 91 92 93 94 95 96 | `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then | | | | | > > > | | | | | | | | 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 | `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tcl.framework/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ `ls -d /usr/lib/tcl8.6 2>/dev/null` \ `ls -d /usr/lib/tcl8.5 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ${srcdir}/../tcl \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi ]) if test x"${ac_cv_c_tclconfig}" = x ; then TCL_BIN_DIR="# no Tcl configs found" AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh]) else no_tcl= TCL_BIN_DIR="${ac_cv_c_tclconfig}" AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_PATH_TKCONFIG -- |
︙ | ︙ | |||
205 206 207 208 209 210 211 | if test x"${no_tk}" = x ; then # we reset no_tk in case something fails here no_tk=true AC_ARG_WITH(tk, AC_HELP_STRING([--with-tk], [directory containing tk configuration (tkConfig.sh)]), | | | | | | | 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 | if test x"${no_tk}" = x ; then # we reset no_tk in case something fails here no_tk=true AC_ARG_WITH(tk, AC_HELP_STRING([--with-tk], [directory containing tk configuration (tkConfig.sh)]), with_tkconfig="${withval}") AC_MSG_CHECKING([for Tk configuration]) AC_CACHE_VAL(ac_cv_c_tkconfig,[ # First check to see if --with-tkconfig was specified. if test x"${with_tkconfig}" != x ; then case "${with_tkconfig}" in */tkConfig.sh ) if test -f "${with_tkconfig}"; then AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself]) with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`" fi ;; esac if test -f "${with_tkconfig}/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`" else AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh]) fi fi # then check for a private Tk library if test x"${ac_cv_c_tkconfig}" = x ; then |
︙ | ︙ | |||
242 243 244 245 246 247 248 | `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tk \ `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then | | | | > | | | | | | | < | 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 | `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tk \ `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tk.framework/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ${srcdir}/../tk \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi ]) if test x"${ac_cv_c_tkconfig}" = x ; then TK_BIN_DIR="# no Tk configs found" AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh]) else no_tk= TK_BIN_DIR="${ac_cv_c_tkconfig}" AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_LOAD_TCLCONFIG -- # # Load the tclConfig.sh file # # Arguments: # # Requires the following vars to be set: # TCL_BIN_DIR # # Results: # # Substitutes the following vars: # TCL_BIN_DIR # TCL_SRC_DIR # TCL_LIB_FILE #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_TCLCONFIG], [ AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh]) if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then AC_MSG_RESULT([loading]) |
︙ | ︙ | |||
366 367 368 369 370 371 372 | # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TCL_BIN_DIR}/Makefile" ; then | | | | | | | | > < < | | > > | > | < < < < | > > | | > | > > > > | < < < < > > > | 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 | # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TCL_BIN_DIR}/Makefile" ; then TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}" TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}" TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tcl.framework installed in an arbitrary location. case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then for i in "`cd "${TCL_BIN_DIR}"; pwd`" \ "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}" break fi done fi if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}" TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" AC_SUBST(TCL_VERSION) AC_SUBST(TCL_PATCH_LEVEL) AC_SUBST(TCL_BIN_DIR) AC_SUBST(TCL_SRC_DIR) AC_SUBST(TCL_LIB_FILE) AC_SUBST(TCL_LIB_FLAG) AC_SUBST(TCL_LIB_SPEC) AC_SUBST(TCL_STUB_LIB_FILE) AC_SUBST(TCL_STUB_LIB_FLAG) AC_SUBST(TCL_STUB_LIB_SPEC) AC_MSG_CHECKING([platform]) hold_cc=$CC; CC="$TCL_CC" AC_TRY_COMPILE(,[ #ifdef _WIN32 #error win32 #endif ], TEA_PLATFORM="unix", TEA_PLATFORM="windows" ) CC=$hold_cc AC_MSG_RESULT($TEA_PLATFORM) # The BUILD_$pkg is to define the correct extern storage class # handling when making this package AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}, [], [Building extension source?]) # Do this here as we have fully defined TEA_PLATFORM now if test "${TEA_PLATFORM}" = "windows" ; then EXEEXT=".exe" CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp" fi # TEA specific: AC_SUBST(CLEANFILES) AC_SUBST(TCL_LIBS) AC_SUBST(TCL_DEFS) AC_SUBST(TCL_EXTRA_CFLAGS) AC_SUBST(TCL_LD_FLAGS) AC_SUBST(TCL_SHLIB_LD_LIBS) ]) |
︙ | ︙ | |||
475 476 477 478 479 480 481 | # If the TK_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TK_LIB_SPEC will be set to the value # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC # instead of TK_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TK_BIN_DIR}/Makefile" ; then | | | | | | | | | 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 | # If the TK_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TK_LIB_SPEC will be set to the value # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC # instead of TK_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TK_BIN_DIR}/Makefile" ; then TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}" TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}" TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tk.framework installed in an arbitrary location. case ${TK_DEFS} in *TK_FRAMEWORK*) if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then for i in "`cd "${TK_BIN_DIR}"; pwd`" \ "`cd "${TK_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}" break fi done fi if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}" TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TK_DBGX substitution |
︙ | ︙ | |||
550 551 552 553 554 555 556 | # directory. This macro will correctly determine the name # of the tclsh executable even if tclsh has not yet been # built in the build directory. The tclsh found is always # associated with a tclConfig.sh file. This tclsh should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # | | | | | 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 | # directory. This macro will correctly determine the name # of the tclsh executable even if tclsh has not yet been # built in the build directory. The tclsh found is always # associated with a tclConfig.sh file. This tclsh should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # # Arguments: # none # # Results: # Substitutes the following vars: # TCLSH_PROG #------------------------------------------------------------------------ AC_DEFUN([TEA_PROG_TCLSH], [ AC_MSG_CHECKING([for tclsh]) if test -f "${TCL_BIN_DIR}/Makefile" ; then # tclConfig.sh is in Tcl build directory |
︙ | ︙ | |||
600 601 602 603 604 605 606 | # directory. This macro will correctly determine the name # of the wish executable even if wish has not yet been # built in the build directory. The wish found is always # associated with a tkConfig.sh file. This wish should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # | | | | | 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 | # directory. This macro will correctly determine the name # of the wish executable even if wish has not yet been # built in the build directory. The wish found is always # associated with a tkConfig.sh file. This wish should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # # Arguments: # none # # Results: # Substitutes the following vars: # WISH_PROG #------------------------------------------------------------------------ AC_DEFUN([TEA_PROG_WISH], [ AC_MSG_CHECKING([for wish]) if test -f "${TK_BIN_DIR}/Makefile" ; then # tkConfig.sh is in Tk build directory |
︙ | ︙ | |||
646 647 648 649 650 651 652 | #------------------------------------------------------------------------ # TEA_ENABLE_SHARED -- # # Allows the building of shared libraries # # Arguments: # none | | | 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 | #------------------------------------------------------------------------ # TEA_ENABLE_SHARED -- # # Allows the building of shared libraries # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-shared=yes|no # # Defines the following vars: # STATIC_BUILD Used for building import/export libraries |
︙ | ︙ | |||
702 703 704 705 706 707 708 | # # Note that it is legal to have a thread enabled extension run in a # threaded or non-threaded Tcl core, but a non-threaded extension may # only run in a non-threaded Tcl core. # # Arguments: # none | | < | 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 | # # Note that it is legal to have a thread enabled extension run in a # threaded or non-threaded Tcl core, but a non-threaded extension may # only run in a non-threaded Tcl core. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-threads # # Sets the following vars: # THREADS_LIBS Thread library(s) # # Defines the following vars: # TCL_THREADS # _REENTRANT # _THREAD_SAFE #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_THREADS], [ AC_ARG_ENABLE(threads, AC_HELP_STRING([--enable-threads], [build with threads]), [tcl_ok=$enableval], [tcl_ok=yes]) |
︙ | ︙ | |||
839 840 841 842 843 844 845 | # Results: # # Adds the following arguments to configure: # --enable-symbols # # Defines the following vars: # CFLAGS_DEFAULT Sets to $(CFLAGS_DEBUG) if true | | < | | 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 | # Results: # # Adds the following arguments to configure: # --enable-symbols # # Defines the following vars: # CFLAGS_DEFAULT Sets to $(CFLAGS_DEBUG) if true # Sets to "$(CFLAGS_OPTIMIZE) -DNDEBUG" if false # LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true # Sets to $(LDFLAGS_OPTIMIZE) if false # DBGX Formerly used as debug library extension; # always blank now. #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_SYMBOLS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_CONFIG_CFLAGS]) AC_MSG_CHECKING([for build with symbols]) AC_ARG_ENABLE(symbols, AC_HELP_STRING([--enable-symbols], [build with debugging symbols (default: off)]), [tcl_ok=$enableval], [tcl_ok=no]) DBGX="" if test "$tcl_ok" = "no"; then CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG" LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" AC_MSG_RESULT([no]) else CFLAGS_DEFAULT="${CFLAGS_DEBUG}" LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" if test "$tcl_ok" = "yes"; then AC_MSG_RESULT([yes (standard debugging)]) |
︙ | ︙ | |||
904 905 906 907 908 909 910 | # Results: # # Adds the following arguments to configure: # --enable-langinfo=yes|no (default is yes) # # Defines the following vars: # HAVE_LANGINFO Triggers use of nl_langinfo if defined. | < | 907 908 909 910 911 912 913 914 915 916 917 918 919 920 | # Results: # # Adds the following arguments to configure: # --enable-langinfo=yes|no (default is yes) # # Defines the following vars: # HAVE_LANGINFO Triggers use of nl_langinfo if defined. #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_LANGINFO], [ AC_ARG_ENABLE(langinfo, AC_HELP_STRING([--enable-langinfo], [use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic (default: on)]), [langinfo_ok=$enableval], [langinfo_ok=yes]) |
︙ | ︙ | |||
936 937 938 939 940 941 942 | ]) #-------------------------------------------------------------------- # TEA_CONFIG_SYSTEM # # Determine what the system is (some things cannot be easily checked # on a feature-driven basis, alas). This can usually be done via the | | < < < < < < < < < < | 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 | ]) #-------------------------------------------------------------------- # TEA_CONFIG_SYSTEM # # Determine what the system is (some things cannot be easily checked # on a feature-driven basis, alas). This can usually be done via the # "uname" command. # # Arguments: # none # # Results: # Defines the following var: # # system - System/platform/version identification code. #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_SYSTEM], [ AC_CACHE_CHECK([system version], tcl_cv_sys_version, [ # TEA specific: if test "${TEA_PLATFORM}" = "windows" ; then tcl_cv_sys_version=windows else tcl_cv_sys_version=`uname -s`-`uname -r` if test "$?" -ne 0 ; then AC_MSG_WARN([can't find uname command]) tcl_cv_sys_version=unknown else if test "`uname -s`" = "AIX" ; then tcl_cv_sys_version=AIX-`uname -v`.`uname -r` fi fi fi ]) system=$tcl_cv_sys_version |
︙ | ︙ | |||
990 991 992 993 994 995 996 | # Arguments: # none # # Results: # # Defines and substitutes the following vars: # | < < | < | | | | < < < | < < < < < < < < | 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 | # Arguments: # none # # Results: # # Defines and substitutes the following vars: # # DL_OBJS, DL_LIBS - removed for TEA, only needed by core. # LDFLAGS - Flags to pass to the compiler when linking object # files into an executable application binary such # as tclsh. # LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. Could # be the same as CC_SEARCH_FLAGS if ${CC} is used to link. # CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. # SHLIB_CFLAGS - Flags to pass to cc when compiling the components # of a shared library (may request position-independent # code, among other things). # SHLIB_LD - Base command to use for combining object files # into a shared library. # SHLIB_LD_LIBS - Dependent libraries for the linker to scan when # creating shared libraries. This symbol typically # goes at the end of the "ld" commands that build # shared libraries. The value of the symbol defaults to # "${LIBS}" if all of the dependent libraries should # be specified when creating a shared library. If # dependent libraries should not be specified (as on # SunOS 4.x, where they cause the link to fail, or in # general if Tcl and Tk aren't themselves shared # libraries), then this symbol has an empty string # as its value. # SHLIB_SUFFIX - Suffix to use for the names of dynamically loadable # extensions. An empty string means we don't know how # to use shared libraries on this platform. # LIB_SUFFIX - Specifies everything that comes after the "libfoo" # in a static or shared library name, using the $PACKAGE_VERSION variable # to put the version in the right place. This is used # by platforms that need non-standard library names. # Examples: ${PACKAGE_VERSION}.so.1.1 on NetBSD, since it needs # to have a version after the .so, and ${PACKAGE_VERSION}.a # on AIX, since a shared library needs to have # a .a extension whereas shared objects for loadable # extensions have a .so extension. Defaults to # ${PACKAGE_VERSION}${SHLIB_SUFFIX}. # CFLAGS_DEBUG - # Flags used when running the compiler in debug mode # CFLAGS_OPTIMIZE - # Flags used when running the compiler in optimize mode # CFLAGS - Additional CFLAGS added as necessary (usually 64-bit) #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_CFLAGS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_INIT]) # Step 0.a: Enable 64 bit support? |
︙ | ︙ | |||
1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 | void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes, tcl_cv_cc_visibility_hidden=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [ AC_DEFINE(MODULE_SCOPE, [extern __attribute__((__visibility__("hidden")))], [Compiler support for module scope symbols]) ]) # Step 0.d: Disable -rpath support? AC_MSG_CHECKING([if rpath support is requested]) AC_ARG_ENABLE(rpath, AC_HELP_STRING([--disable-rpath], | > | 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 | void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes, tcl_cv_cc_visibility_hidden=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [ AC_DEFINE(MODULE_SCOPE, [extern __attribute__((__visibility__("hidden")))], [Compiler support for module scope symbols]) AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols]) ]) # Step 0.d: Disable -rpath support? AC_MSG_CHECKING([if rpath support is requested]) AC_ARG_ENABLE(rpath, AC_HELP_STRING([--disable-rpath], |
︙ | ︙ | |||
1114 1115 1116 1117 1118 1119 1120 | AC_ARG_ENABLE(wince, AC_HELP_STRING([--enable-wince], [enable Win/CE support (where applicable)]), [doWince=$enableval], [doWince=no]) AC_MSG_RESULT([$doWince]) ]) | | < < < < < | | | > < < < > > | < < < < > | < | 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 | AC_ARG_ENABLE(wince, AC_HELP_STRING([--enable-wince], [enable Win/CE support (where applicable)]), [doWince=$enableval], [doWince=no]) AC_MSG_RESULT([$doWince]) ]) # Set the variable "system" to hold the name and version number # for the system. TEA_CONFIG_SYSTEM # Require ranlib early so we can override it in special cases below. AC_REQUIRE([AC_PROG_RANLIB]) # Set configuration options based on system name and version. # This is similar to Tcl's unix/tcl.m4 except that we've added a # "windows" case and removed some core-only vars. do64bit_ok=no # default to '{$LIBS}' and set to "" on per-platform necessary basis SHLIB_LD_LIBS='${LIBS}' # When ld needs options to work in 64-bit mode, put them in # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load] # is disabled by the user. [Bug 1016796] LDFLAGS_ARCH="" UNSHARED_LIB_SUFFIX="" # TEA specific: use PACKAGE_VERSION instead of VERSION TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' ECHO_VERSION='`echo ${PACKAGE_VERSION}`' TCL_LIB_VERSIONS_OK=ok CFLAGS_DEBUG=-g AS_IF([test "$GCC" = yes], [ CFLAGS_OPTIMIZE=-O2 CFLAGS_WARNING="-Wall" ], [ CFLAGS_OPTIMIZE=-O CFLAGS_WARNING="" ]) AC_CHECK_TOOL(AR, ar) STLIB_LD='${AR} cr' LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION="1.0"]) case $system in # TEA specific: windows) # This is a 2-stage check to make sure we have the 64-bit SDK |
︙ | ︙ | |||
1185 1186 1187 1188 1189 1190 1191 | PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac | | | 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 | PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode]) AC_MSG_WARN([Ensure latest Platform SDK is installed]) do64bit="no" else AC_MSG_RESULT([ Using 64-bit $MACHINE mode]) do64bit_ok="yes" fi |
︙ | ︙ | |||
1302 1303 1304 1305 1306 1307 1308 | lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" AC_SUBST(CELIB_DIR) else RC="rc" lflags="-nologo" | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 | lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" AC_SUBST(CELIB_DIR) else RC="rc" lflags="-nologo" LINKBIN="link" CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" fi fi if test "$GCC" = "yes"; then # mingw gcc mode AC_CHECK_TOOL(RC, windres) CFLAGS_DEBUG="-g" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" SHLIB_LD='${CC} -shared' UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" AC_CACHE_CHECK(for cross-compile version of gcc, ac_cv_cross, AC_TRY_COMPILE([ #ifdef _WIN32 #error cross-compiler #endif ], [], ac_cv_cross=yes, ac_cv_cross=no) ) if test "$ac_cv_cross" = "yes"; then case "$do64bit" in amd64|x64|yes) CC="x86_64-w64-mingw32-gcc" LD="x86_64-w64-mingw32-ld" AR="x86_64-w64-mingw32-ar" RANLIB="x86_64-w64-mingw32-ranlib" RC="x86_64-w64-mingw32-windres" ;; *) CC="i686-w64-mingw32-gcc" LD="i686-w64-mingw32-ld" AR="i686-w64-mingw32-ar" RANLIB="i686-w64-mingw32-ranlib" RC="i686-w64-mingw32-windres" ;; esac fi else SHLIB_LD="${LINKBIN} -dll ${lflags}" # link -lib only works when -lib is the first arg STLIB_LD="${LINKBIN} -lib ${lflags}" UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' PATHTYPE=-w # For information on what debugtype is most useful, see: |
︙ | ︙ | |||
1339 1340 1341 1342 1343 1344 1345 | LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi | < < < < < | | < < | > > | > | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | | | < | < | > < < < < < < | | 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 | LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi SHLIB_SUFFIX=".dll" SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' TCL_LIB_VERSIONS_OK=nodots ;; AIX-*) AS_IF([test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"], [ # AIX requires the _r compiler when gcc isn't being used case "${CC}" in *_r|*_r\ *) # ok ... ;; *) # Make sure only first arg gets _r CC=`echo "$CC" | sed -e 's/^\([[^ ]]*\)/\1_r/'` ;; esac AC_MSG_RESULT([Using $CC for compiling with threads]) ]) LIBS="$LIBS -lc" SHLIB_CFLAGS="" SHLIB_SUFFIX=".so" LD_LIBRARY_PATH_VAR="LIBPATH" # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported with GCC on $system]) ], [ do64bit_ok=yes CFLAGS="$CFLAGS -q64" LDFLAGS_ARCH="-q64" RANLIB="${RANLIB} -X64" AR="${AR} -X64" SHLIB_LD_FLAGS="-b64" ]) ]) AS_IF([test "`uname -m`" = ia64], [ # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC SHLIB_LD="/usr/ccs/bin/ld -G -z text" AS_IF([test "$GCC" = yes], [ CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' ], [ CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' ]) LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' ], [ AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared -Wl,-bexpall' ], [ SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry" LDFLAGS="$LDFLAGS -brtl" ]) SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}" CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ]) ;; BeOS*) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -nostart' SHLIB_SUFFIX=".so" #----------------------------------------------------------- # Check for inet_ntoa in -lbind, for BeOS (which also needs # -lsocket, even if the network functions are in -lnet which # is always linked to, for compatibility. #----------------------------------------------------------- AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"]) ;; BSD/OS-4.*) SHLIB_CFLAGS="-export-dynamic -fPIC" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; CYGWIN_*) SHLIB_CFLAGS="" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".dll" EXEEXT=".exe" do64bit_ok=yes CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; Haiku*) LDFLAGS="$LDFLAGS -Wl,--export-dynamic" SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}' AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"]) ;; HP-UX-*.11.*) # Use updated header definitions where possible AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?]) # TEA specific: Needed by Tcl, but not most extensions #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?]) #LIBS="$LIBS -lxnet" # Use the XOPEN network library AS_IF([test "`uname -m`" = ia64], [ SHLIB_SUFFIX=".so" # Use newer C++ library for C++ extensions #if test "$GCC" != "yes" ; then # CPPFLAGS="-AA" #fi ], [ SHLIB_SUFFIX=".sl" ]) AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) AS_IF([test "$tcl_ok" = yes], [ LDFLAGS="$LDFLAGS -Wl,-E" CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' LD_LIBRARY_PATH_VAR="SHLIB_PATH" ]) AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} |
︙ | ︙ | |||
1532 1533 1534 1535 1536 1537 1538 | AS_IF([test "$do64bit" = "yes"], [ AS_IF([test "$GCC" = yes], [ case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 | AS_IF([test "$do64bit" = "yes"], [ AS_IF([test "$GCC" = yes], [ case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ;; *) AC_MSG_WARN([64bit mode not supported with GCC on $system]) ;; esac ], [ do64bit_ok=yes CFLAGS="$CFLAGS +DD64" LDFLAGS_ARCH="+DD64" ]) ]) ;; IRIX-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [ CFLAGS="$CFLAGS -mabi=n32" LDFLAGS="$LDFLAGS -mabi=n32" ], [ |
︙ | ︙ | |||
1601 1602 1603 1604 1605 1606 1607 | esac LDFLAGS="$LDFLAGS -n32" ]) ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" | < < < | < < < < < < < | 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 | esac LDFLAGS="$LDFLAGS -n32" ]) ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported by gcc]) ], [ do64bit_ok=yes SHLIB_LD="ld -64 -shared -rdata_shared" CFLAGS="$CFLAGS -64" LDFLAGS_ARCH="-64" ]) ]) ;; Linux*|GNU*|NetBSD-Debian) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" # TEA specific: CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}' LDFLAGS="$LDFLAGS -Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"]) AS_IF([test $do64bit = yes], [ AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [ |
︙ | ︙ | |||
1662 1663 1664 1665 1666 1667 1668 | # The combo of gcc + glibc has a bug related to inlining of # functions like strtod(). The -fno-builtin flag should address # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"]) | < < < < < < < < < < < < < < < < < | < | < > > | < | | < | | | | < | < < < > | | > > | < < < < < < < < < < < < < < | < < < < < < | < | < | | | | < < < < < < < < < < < < > | < < < < < | > < | < | < < < < < < < < < < < | | < < | > > | | | | | > > | 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 | # The combo of gcc + glibc has a bug related to inlining of # functions like strtod(). The -fno-builtin flag should address # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"]) ;; Lynx*) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" CFLAGS_OPTIMIZE=-02 SHLIB_LD='${CC} -shared' LD_FLAGS="-Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) ;; OpenBSD-*) arch=`arch -s` case "$arch" in vax) SHLIB_SUFFIX="" SHARED_LIB_SUFFIX="" LDFLAGS="" ;; *) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' LDFLAGS="-Wl,-export-dynamic" ;; esac case "$arch" in vax) CFLAGS_OPTIMIZE="-O1" ;; *) CFLAGS_OPTIMIZE="-O2" ;; esac AS_IF([test "${TCL_THREADS}" = "1"], [ # On OpenBSD: Compile with -pthread # Don't link with -lpthread LIBS=`echo $LIBS | sed s/-lpthread//` CFLAGS="$CFLAGS -pthread" ]) # OpenBSD doesn't do version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; NetBSD-*) # NetBSD has ELF and can use 'cc -shared' to build shared libs SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the CFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" ]) ;; FreeBSD-*) # This configuration from FreeBSD Ports. SHLIB_CFLAGS="-fPIC" SHLIB_LD="${CC} -shared" TCL_SHLIB_LD_EXTRAS="-Wl,-soname=\$[@]" TK_SHLIB_LD_EXTRAS="-Wl,-soname,\$[@]" SHLIB_SUFFIX=".so" LDFLAGS="" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the LDFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LDFLAGS="$LDFLAGS $PTHREAD_LIBS"]) case $system in FreeBSD-3.*) # Version numbers are dot-stripped by system policy. TCL_TRIM_DOTS=`echo ${VERSION} | tr -d .` UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so' TCL_LIB_VERSIONS_OK=nodots ;; esac ;; Darwin-*) CFLAGS_OPTIMIZE="-Os" SHLIB_CFLAGS="-fno-common" # To avoid discrepancies between what headers configure sees during # preprocessing tests and compiling tests, move any -isysroot and # -mmacosx-version-min flags from CFLAGS to CPPFLAGS: |
︙ | ︙ | |||
1877 1878 1879 1880 1881 1882 1883 | hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_single_module = yes], [ SHLIB_LD="${SHLIB_LD} -Wl,-single_module" ]) | | < < < > | 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 | hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_single_module = yes], [ SHLIB_LD="${SHLIB_LD} -Wl,-single_module" ]) # TEA specific: link shlib with current and compatibility version flags vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d` SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}" SHLIB_SUFFIX=".dylib" # Don't use -prebind when building for Mac OS X 10.4 or later only: AS_IF([test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \ "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4], [ LDFLAGS="$LDFLAGS -prebind"]) LDFLAGS="$LDFLAGS -headerpad_max_install_names" AC_CACHE_CHECK([if ld accepts -search_paths_first flag], tcl_cv_ld_search_paths_first, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes, tcl_cv_ld_search_paths_first=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_search_paths_first = yes], [ LDFLAGS="$LDFLAGS -Wl,-search_paths_first" ]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [__private_extern__], [Compiler support for module scope symbols]) tcl_cv_cc_visibility_hidden=yes ]) CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" # TEA specific: for combined 32 & 64 bit fat builds of Tk # extensions, verify that 64-bit build is possible. AS_IF([test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"], [ |
︙ | ︙ | |||
1944 1945 1946 1947 1948 1949 1950 | AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [ AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags]) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done]) ]) ;; | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 | AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [ AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags]) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done]) ]) ;; OS/390-*) CFLAGS_OPTIMIZE="" # Optimizer is buggy AC_DEFINE(_OE_SOCKETS, 1, # needed in sys/socket.h [Should OS/390 do the right thing with sockets?]) ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" AS_IF([test "$SHARED_BUILD" = 1], [ SHLIB_LD='ld -shared -expect_unresolved "*"' ], [ SHLIB_LD='ld -non_shared -expect_unresolved "*"' ]) SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [CFLAGS="$CFLAGS -mieee"], [ CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"]) # see pthread_intro(3) for pthread support on osf1, k.furukawa AS_IF([test "${TCL_THREADS}" = 1], [ |
︙ | ︙ | |||
2021 2022 2023 2024 2025 2026 2027 | QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" | < < < < < < | | | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 | QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SCO_SV-3.2*) AS_IF([test "$GCC" = yes], [ SHLIB_CFLAGS="-fPIC -melf" LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" ], [ SHLIB_CFLAGS="-Kpic -belf" LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" ]) SHLIB_LD="ld -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SunOS-5.[[0-6]]) # Careful to not let 5.10+ fall into this case # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) SHLIB_CFLAGS="-KPIC" SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ], [ SHLIB_LD="/usr/ccs/bin/ld -G -z text" CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' |
︙ | ︙ | |||
2163 2164 2165 2166 2167 2168 2169 | CFLAGS="$CFLAGS -xarch=amd64" LDFLAGS="$LDFLAGS -xarch=amd64";; esac ]) ], [AC_MSG_WARN([64bit mode not supported for $arch])])]) ]) | < < < < < < | 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 | CFLAGS="$CFLAGS -xarch=amd64" LDFLAGS="$LDFLAGS -xarch=amd64";; esac ]) ], [AC_MSG_WARN([64bit mode not supported for $arch])])]) ]) SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "$do64bit_ok" = yes], [ AS_IF([test "$arch" = "sparcv9 sparc"], [ # We need to specify -static-libgcc or we need to |
︙ | ︙ | |||
2208 2209 2210 2211 2212 2213 2214 | ]) ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" | < < | 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 | ]) ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-Bexport" AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no) LDFLAGS=$hold_ldflags]) |
︙ | ︙ | |||
2235 2236 2237 2238 2239 2240 2241 | dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so dnl # until the end of configure, as configure's compile and link tests use dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's dnl # preprocessing tests use only CPPFLAGS. AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""]) | < | < < < < < | < < < < < < < < < < < < | > > > > > > | | | | > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 | dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so dnl # until the end of configure, as configure's compile and link tests use dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's dnl # preprocessing tests use only CPPFLAGS. AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""]) # Add in the arch flags late to ensure it wasn't removed. # Not necessary in TEA, but this is aligned with core LDFLAGS="$LDFLAGS $LDFLAGS_ARCH" # If we're running gcc, then change the C flags for compiling shared # libraries to the right flags for gcc, instead of those for the # standard manufacturer compiler. AS_IF([test "$GCC" = yes], [ case $system in AIX-*) ;; BSD/OS*) ;; CYGWIN_*|MINGW32_*) ;; IRIX*) ;; NetBSD-*|FreeBSD-*|OpenBSD-*) ;; Darwin-*) ;; SCO_SV-3.2*) ;; windows) ;; *) SHLIB_CFLAGS="-fPIC" ;; esac]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [extern], [No Compiler support for module scope symbols]) ]) AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}']) AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a']) if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then AC_CACHE_CHECK(for SEH support in compiler, tcl_cv_seh, AC_TRY_RUN([ #define WIN32_LEAN_AND_MEAN #include <windows.h> #undef WIN32_LEAN_AND_MEAN int main(int argc, char** argv) { int a, b = 0; __try { a = 666 / b; } __except (EXCEPTION_EXECUTE_HANDLER) { return 0; } return 1; } ], tcl_cv_seh=yes, tcl_cv_seh=no, tcl_cv_seh=no) ) if test "$tcl_cv_seh" = "no" ; then AC_DEFINE(HAVE_NO_SEH, 1, [Defined when mingw does not support SEH]) fi # # Check to see if the excpt.h include file provided contains the # definition for EXCEPTION_DISPOSITION; if not, which is the case # with Cygwin's version as of 2002-04-10, define it to be int, # sufficient for getting the current code to work. # AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files, tcl_cv_eh_disposition, AC_TRY_COMPILE([ # define WIN32_LEAN_AND_MEAN # include <windows.h> # undef WIN32_LEAN_AND_MEAN ],[ EXCEPTION_DISPOSITION x; ], tcl_cv_eh_disposition=yes, tcl_cv_eh_disposition=no) ) if test "$tcl_cv_eh_disposition" = "no" ; then AC_DEFINE(EXCEPTION_DISPOSITION, int, [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION]) fi # Check to see if winnt.h defines CHAR, SHORT, and LONG # even if VOID has already been #defined. The win32api # used by mingw and cygwin is known to do this. AC_CACHE_CHECK(for winnt.h that ignores VOID define, tcl_cv_winnt_ignore_void, AC_TRY_COMPILE([ #define VOID void #define WIN32_LEAN_AND_MEAN #include <windows.h> #undef WIN32_LEAN_AND_MEAN ], [ CHAR c; SHORT s; LONG l; ], tcl_cv_winnt_ignore_void=yes, tcl_cv_winnt_ignore_void=no) ) if test "$tcl_cv_winnt_ignore_void" = "yes" ; then AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1, [Defined when cygwin/mingw ignores VOID define in winnt.h]) fi fi # See if the compiler supports casting to a union type. # This is used to stop gcc from printing a compiler # warning when initializing a union member. AC_CACHE_CHECK(for cast to union support, tcl_cv_cast_to_union, AC_TRY_COMPILE([], [ union foo { int i; double d; }; union foo f = (union foo) (int) 0; ], tcl_cv_cast_to_union=yes, tcl_cv_cast_to_union=no) ) if test "$tcl_cv_cast_to_union" = "yes"; then AC_DEFINE(HAVE_CAST_TO_UNION, 1, [Defined when compiler supports casting to union type.]) fi AC_SUBST(CFLAGS_DEBUG) AC_SUBST(CFLAGS_OPTIMIZE) AC_SUBST(CFLAGS_WARNING) AC_SUBST(STLIB_LD) AC_SUBST(SHLIB_LD) |
︙ | ︙ | |||
2319 2320 2321 2322 2323 2324 2325 | # Results: # # Defines only one of the following vars: # HAVE_SYS_MODEM_H # USE_TERMIOS # USE_TERMIO # USE_SGTTY | < | 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 | # Results: # # Defines only one of the following vars: # HAVE_SYS_MODEM_H # USE_TERMIOS # USE_TERMIO # USE_SGTTY #-------------------------------------------------------------------- AC_DEFUN([TEA_SERIAL_PORT], [ AC_CHECK_HEADERS(sys/modem.h) AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [ AC_TRY_RUN([ #include <termios.h> |
︙ | ︙ | |||
2531 2532 2533 2534 2535 2536 2537 | # # Results: # # Sets the following vars: # XINCLUDES # XLIBSW # PKG_LIBS (appends to) | < | | | | | | 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 | # # Results: # # Sets the following vars: # XINCLUDES # XLIBSW # PKG_LIBS (appends to) #-------------------------------------------------------------------- AC_DEFUN([TEA_PATH_X], [ if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then TEA_PATH_UNIX_X fi ]) AC_DEFUN([TEA_PATH_UNIX_X], [ AC_PATH_X not_really_there="" if test "$no_x" = ""; then if test "$x_includes" = ""; then AC_TRY_CPP([#include <X11/Xlib.h>], , not_really_there="yes") else if test ! -r $x_includes/X11/Xlib.h; then not_really_there="yes" fi fi fi if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then AC_MSG_CHECKING([for X11 header files]) found_xincludes="no" AC_TRY_CPP([#include <X11/Xlib.h>], found_xincludes="yes", found_xincludes="no") if test "$found_xincludes" = "no"; then dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include" for i in $dirs ; do if test -r $i/X11/Xlib.h; then AC_MSG_RESULT([$i]) XINCLUDES=" -I$i" found_xincludes="yes" break fi done fi else if test "$x_includes" != ""; then XINCLUDES="-I$x_includes" found_xincludes="yes" fi fi if test "$found_xincludes" = "no"; then AC_MSG_RESULT([couldn't find any!]) fi if test "$no_x" = yes; then AC_MSG_CHECKING([for X11 libraries]) XLIBSW=nope dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib" |
︙ | ︙ | |||
2627 2628 2629 2630 2631 2632 2633 | # Results: # # Defines some of the following vars: # HAVE_SYS_IOCTL_H # HAVE_SYS_FILIO_H # USE_FIONBIO # O_NONBLOCK | < < < < < < < < < < | 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 | # Results: # # Defines some of the following vars: # HAVE_SYS_IOCTL_H # HAVE_SYS_FILIO_H # USE_FIONBIO # O_NONBLOCK #-------------------------------------------------------------------- AC_DEFUN([TEA_BLOCKING_STYLE], [ AC_CHECK_HEADERS(sys/ioctl.h) AC_CHECK_HEADERS(sys/filio.h) TEA_CONFIG_SYSTEM AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O]) case $system in OSF*) AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?]) AC_MSG_RESULT([FIONBIO]) ;; *) AC_MSG_RESULT([O_NONBLOCK]) ;; esac |
︙ | ︙ | |||
2671 2672 2673 2674 2675 2676 2677 | # Results: # # Defines some of the following vars: # USE_DELTA_FOR_TZ # HAVE_TM_GMTOFF # HAVE_TM_TZADJ # HAVE_TIMEZONE_VAR | < | 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 | # Results: # # Defines some of the following vars: # USE_DELTA_FOR_TZ # HAVE_TM_GMTOFF # HAVE_TM_TZADJ # HAVE_TIMEZONE_VAR #-------------------------------------------------------------------- AC_DEFUN([TEA_TIME_HANDLER], [ AC_CHECK_HEADERS(sys/time.h) AC_HEADER_TIME AC_STRUCT_TIMEZONE |
︙ | ︙ | |||
2740 2741 2742 2743 2744 2745 2746 | # Arguments: # none # # Results: # # Might defines some of the following vars: # strtod (=fixstrtod) | < | 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 | # Arguments: # none # # Results: # # Might defines some of the following vars: # strtod (=fixstrtod) #-------------------------------------------------------------------- AC_DEFUN([TEA_BUGGY_STRTOD], [ AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0) if test "$tcl_strtod" = 1; then AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[ AC_TRY_RUN([ |
︙ | ︙ | |||
2785 2786 2787 2788 2789 2790 2791 | # # Search for the libraries needed to link the Tcl shell. # Things like the math library (-lm) and socket stuff (-lsocket vs. # -lnsl) are dealt with here. # # Arguments: # Requires the following vars to be set in the Makefile: | | | < | 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 | # # Search for the libraries needed to link the Tcl shell. # Things like the math library (-lm) and socket stuff (-lsocket vs. # -lnsl) are dealt with here. # # Arguments: # Requires the following vars to be set in the Makefile: # DL_LIBS (not in TEA, only needed in core) # LIBS # MATH_LIBS # # Results: # # Substitutes the following vars: # TCL_LIBS # MATH_LIBS # # Might append to the following vars: # LIBS # # Might define the following vars: # HAVE_NET_ERRNO_H #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_LINK_LIBS], [ #-------------------------------------------------------------------- # On a few very rare systems, all of the libm.a stuff is # already in libc.a. Set compiler flags accordingly. # Also, Linux requires the "ieee" library for math to work |
︙ | ︙ | |||
2878 2879 2880 2881 2882 2883 2884 | # # Results: # # Might define the following vars: # _ISOC99_SOURCE # _LARGEFILE64_SOURCE # _LARGEFILE_SOURCE64 | < | 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 | # # Results: # # Might define the following vars: # _ISOC99_SOURCE # _LARGEFILE64_SOURCE # _LARGEFILE_SOURCE64 #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_EARLY_FLAG],[ AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]), AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no, AC_TRY_COMPILE([[#define ]$1[ 1 ]$2], $3, |
︙ | ︙ | |||
2926 2927 2928 2929 2930 2931 2932 | # # Might define the following vars: # TCL_WIDE_INT_IS_LONG # TCL_WIDE_INT_TYPE # HAVE_STRUCT_DIRENT64 # HAVE_STRUCT_STAT64 # HAVE_TYPE_OFF64_T | < | | | | 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 | # # Might define the following vars: # TCL_WIDE_INT_IS_LONG # TCL_WIDE_INT_TYPE # HAVE_STRUCT_DIRENT64 # HAVE_STRUCT_STAT64 # HAVE_TYPE_OFF64_T #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_64BIT_FLAGS], [ AC_MSG_CHECKING([for 64-bit integer type]) AC_CACHE_VAL(tcl_cv_type_64bit,[ tcl_cv_type_64bit=none # See if the compiler knows natively about __int64 AC_TRY_COMPILE(,[__int64 value = (__int64) 0;], tcl_type_64bit=__int64, tcl_type_64bit="long long") # See if we should use long anyway Note that we substitute in the # type that is our current guess for a 64-bit type inside this check # program, so it should be modified only carefully... AC_TRY_COMPILE(,[switch (0) { case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ; }],tcl_cv_type_64bit=${tcl_type_64bit})]) if test "${tcl_cv_type_64bit}" = none ; then AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Are wide integers to be implemented with C 'long's?]) AC_MSG_RESULT([using long]) elif test "${tcl_cv_type_64bit}" = "__int64" \ -a "${TEA_PLATFORM}" = "windows" ; then # TEA specific: We actually want to use the default tcl.h checks in # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER* AC_MSG_RESULT([using Tcl header defaults]) else AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit}, [What type should be used to define wide integers?]) AC_MSG_RESULT([${tcl_cv_type_64bit}]) # Now check for auxiliary declarations AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[ AC_TRY_COMPILE([#include <sys/types.h> #include <dirent.h>],[struct dirent64 p;], tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)]) if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in <sys/types.h>?]) fi AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[ AC_TRY_COMPILE([#include <sys/stat.h>],[struct stat64 p; |
︙ | ︙ | |||
3028 3029 3030 3031 3032 3033 3034 | # is a lightweight replacement for AC_EXEEXT that doesn't require # a compiler. #------------------------------------------------------------------------ AC_DEFUN([TEA_INIT], [ # TEA extensions pass this us the version of TEA they think they # are compatible with. | | > > > > > > > | > > > > > > > > | | > > > > | 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 | # is a lightweight replacement for AC_EXEEXT that doesn't require # a compiler. #------------------------------------------------------------------------ AC_DEFUN([TEA_INIT], [ # TEA extensions pass this us the version of TEA they think they # are compatible with. TEA_VERSION="3.9" AC_MSG_CHECKING([for correct TEA configuration]) if test x"${PACKAGE_NAME}" = x ; then AC_MSG_ERROR([ The PACKAGE_NAME variable must be defined by your TEA configure.in]) fi if test x"$1" = x ; then AC_MSG_ERROR([ TEA version not specified.]) elif test "$1" != "${TEA_VERSION}" ; then AC_MSG_RESULT([warning: requested TEA version "$1", have "${TEA_VERSION}"]) else AC_MSG_RESULT([ok (TEA ${TEA_VERSION})]) fi # If the user did not set CFLAGS, set it now to keep macros # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2". if test "${CFLAGS+set}" != "set" ; then CFLAGS="" fi case "`uname -s`" in *win32*|*WIN32*|*MINGW32_*) AC_CHECK_PROG(CYGPATH, cygpath, cygpath -w, echo) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *CYGWIN_*) CYGPATH=echo EXEEXT=".exe" # TEA_PLATFORM is determined later in LOAD_TCLCONFIG ;; *) CYGPATH=echo # Maybe we are cross-compiling.... case ${host_alias} in *mingw32*) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *) EXEEXT="" TEA_PLATFORM="unix" ;; esac ;; esac # Check if exec_prefix is set. If not use fall back to prefix. # Note when adjusted, so that TEA_PREFIX can correct for this. # This is needed for recursive configures, since autoconf propagates # $prefix, but not $exec_prefix (doh!). if test x$exec_prefix = xNONE ; then exec_prefix_default=yes exec_prefix=$prefix fi AC_MSG_NOTICE([configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}]) AC_SUBST(EXEEXT) AC_SUBST(CYGPATH) # This package name must be replaced statically for AC_SUBST to work AC_SUBST(PKG_LIB_FILE) # Substitute STUB_LIB_FILE in case package creates a stub library too. |
︙ | ︙ | |||
3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 | ;; *) # check for existence - allows for generic/win/unix VPATH # To add more dirs here (like 'src'), you have to update VPATH # in Makefile.in as well if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ ; then AC_MSG_ERROR([could not find source file '$i']) fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER | > | 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 | ;; *) # check for existence - allows for generic/win/unix VPATH # To add more dirs here (like 'src'), you have to update VPATH # in Makefile.in as well if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then AC_MSG_ERROR([could not find source file '$i']) fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER |
︙ | ︙ | |||
3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 | #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_STUB_SOURCES], [ vars="$@" for i in $vars; do # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ ; then AC_MSG_ERROR([could not find stub source file '$i']) fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER | > | 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 | #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_STUB_SOURCES], [ vars="$@" for i in $vars; do # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then AC_MSG_ERROR([could not find stub source file '$i']) fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER |
︙ | ︙ | |||
3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 | # Defines and substs the following vars: # PKG_CFLAGS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CFLAGS], [ PKG_CFLAGS="$PKG_CFLAGS $@" AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_PREFIX -- # # Handle the --prefix=... option by defaulting to what Tcl gave # # Arguments: | > > > > > > > > > > > > > > > > | 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 | # Defines and substs the following vars: # PKG_CFLAGS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CFLAGS], [ PKG_CFLAGS="$PKG_CFLAGS $@" AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_ADD_CLEANFILES -- # # Specify one or more CLEANFILES. # # Arguments: # one or more file names to clean target # # Results: # # Appends to CLEANFILES, already defined for subst in LOAD_TCLCONFIG #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CLEANFILES], [ CLEANFILES="$CLEANFILES $@" ]) #------------------------------------------------------------------------ # TEA_PREFIX -- # # Handle the --prefix=... option by defaulting to what Tcl gave # # Arguments: |
︙ | ︙ | |||
3356 3357 3358 3359 3360 3361 3362 | # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN([TEA_SETUP_COMPILER_CC], [ # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. | < < < < < < > | > > > > > > | | 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 | # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN([TEA_SETUP_COMPILER_CC], [ # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. AC_PROG_CC AC_PROG_CPP INSTALL="\$(SHELL) \$(srcdir)/tclconfig/install-sh -c" AC_SUBST(INSTALL) INSTALL_DATA="\${INSTALL} -m 644" AC_SUBST(INSTALL_DATA) INSTALL_PROGRAM="\${INSTALL}" AC_SUBST(INSTALL_PROGRAM) INSTALL_SCRIPT="\${INSTALL}" AC_SUBST(INSTALL_SCRIPT) #-------------------------------------------------------------------- # Checks to see if the make program sets the $MAKE variable. #-------------------------------------------------------------------- AC_PROG_MAKE_SET #-------------------------------------------------------------------- # Find ranlib #-------------------------------------------------------------------- AC_CHECK_TOOL(RANLIB, ranlib) #-------------------------------------------------------------------- # Determines the correct binary file extension (.o, .obj, .exe etc.) #-------------------------------------------------------------------- AC_OBJEXT AC_EXEEXT |
︙ | ︙ | |||
3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 | # CFLAGS - Done late here to note disturb other AC macros # MAKE_LIB - Command to execute to build the Tcl library; # differs depending on whether or not Tcl is being # compiled as a shared library. # MAKE_SHARED_LIB Makefile rule for building a shared library # MAKE_STATIC_LIB Makefile rule for building a static library # MAKE_STUB_LIB Makefile rule for building a stub library #------------------------------------------------------------------------ AC_DEFUN([TEA_MAKE_LIB], [ if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)" | > > > > > > > > > > > > > | | 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 | # CFLAGS - Done late here to note disturb other AC macros # MAKE_LIB - Command to execute to build the Tcl library; # differs depending on whether or not Tcl is being # compiled as a shared library. # MAKE_SHARED_LIB Makefile rule for building a shared library # MAKE_STATIC_LIB Makefile rule for building a static library # MAKE_STUB_LIB Makefile rule for building a stub library # VC_MANIFEST_EMBED_DLL Makefile rule for embedded VC manifest in DLL # VC_MANIFEST_EMBED_EXE Makefile rule for embedded VC manifest in EXE #------------------------------------------------------------------------ AC_DEFUN([TEA_MAKE_LIB], [ if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)" AC_EGREP_CPP([manifest needed], [ #if defined(_MSC_VER) && _MSC_VER >= 1400 print("manifest needed") #endif ], [ # Could do a CHECK_PROG for mt, but should always be with MSVC8+ VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;2 ; fi" VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;1 ; fi" MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}" TEA_ADD_CLEANFILES([*.manifest]) ]) MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\[$]@ \$(PKG_STUB_OBJECTS)" else MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}" MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)" fi if test "${SHARED_BUILD}" = "1" ; then |
︙ | ︙ | |||
3485 3486 3487 3488 3489 3490 3491 | # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. | < > > > > > > > | 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 | # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\"" fi SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\"" if test "$GCC" = "yes"; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -static-libgcc" fi eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" else eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_LIB_FILE=lib${PKG_LIB_FILE} fi fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE} fi # These aren't needed on Windows (either MSVC or gcc) |
︙ | ︙ | |||
3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 | fi AC_SUBST(MAKE_LIB) AC_SUBST(MAKE_SHARED_LIB) AC_SUBST(MAKE_STATIC_LIB) AC_SUBST(MAKE_STUB_LIB) AC_SUBST(RANLIB_STUB) ]) #------------------------------------------------------------------------ # TEA_LIB_SPEC -- # # Compute the name of an existing object library located in libdir # from the given base name and produce the appropriate linker flags. | > > | 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 | fi AC_SUBST(MAKE_LIB) AC_SUBST(MAKE_SHARED_LIB) AC_SUBST(MAKE_STATIC_LIB) AC_SUBST(MAKE_STUB_LIB) AC_SUBST(RANLIB_STUB) AC_SUBST(VC_MANIFEST_EMBED_DLL) AC_SUBST(VC_MANIFEST_EMBED_EXE) ]) #------------------------------------------------------------------------ # TEA_LIB_SPEC -- # # Compute the name of an existing object library located in libdir # from the given base name and produce the appropriate linker flags. |
︙ | ︙ | |||
3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 | for i in \ `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do if test -f "$i" ; then tea_lib_name_dir=`dirname $i` $1_LIB_NAME=`basename $i` $1_LIB_PATH_NAME=$i break | > > | 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 | for i in \ `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib64/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib64/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do if test -f "$i" ; then tea_lib_name_dir=`dirname $i` $1_LIB_NAME=`basename $i` $1_LIB_PATH_NAME=$i break |
︙ | ︙ | |||
3615 3616 3617 3618 3619 3620 3621 | # # Requires: # TCL_SRC_DIR Assumes that TEA_LOAD_TCLCONFIG has # already been called. # # Results: # | | | 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 | # # Requires: # TCL_SRC_DIR Assumes that TEA_LOAD_TCLCONFIG has # already been called. # # Results: # # Substitutes the following vars: # TCL_TOP_DIR_NATIVE # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PRIVATE_TCL_HEADERS], [ # Allow for --with-tclinclude to take effect and define ${ac_cv_c_tclh} AC_REQUIRE([TEA_PUBLIC_TCL_HEADERS]) |
︙ | ︙ | |||
3693 3694 3695 3696 3697 3698 3699 | # CYGPATH must be set # # Results: # # Adds a --with-tclinclude switch to configure. # Result is cached. # | | | 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 | # CYGPATH must be set # # Results: # # Adds a --with-tclinclude switch to configure. # Result is cached. # # Substitutes the following vars: # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PUBLIC_TCL_HEADERS], [ AC_MSG_CHECKING([for Tcl public headers]) AC_ARG_WITH(tclinclude, [ --with-tclinclude directory containing the public Tcl header files], with_tclinclude=${withval}) |
︙ | ︙ | |||
3783 3784 3785 3786 3787 3788 3789 | # # Requires: # TK_SRC_DIR Assumes that TEA_LOAD_TKCONFIG has # already been called. # # Results: # | | | 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 | # # Requires: # TK_SRC_DIR Assumes that TEA_LOAD_TKCONFIG has # already been called. # # Results: # # Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PRIVATE_TK_HEADERS], [ # Allow for --with-tkinclude to take effect and define ${ac_cv_c_tkh} AC_REQUIRE([TEA_PUBLIC_TK_HEADERS]) AC_MSG_CHECKING([for Tk private include files]) |
︙ | ︙ | |||
3872 3873 3874 3875 3876 3877 3878 | # CYGPATH must be set # # Results: # # Adds a --with-tkinclude switch to configure. # Result is cached. # | | | 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 | # CYGPATH must be set # # Results: # # Adds a --with-tkinclude switch to configure. # Result is cached. # # Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PUBLIC_TK_HEADERS], [ AC_MSG_CHECKING([for Tk public headers]) AC_ARG_WITH(tkinclude, [ --with-tkinclude directory containing the public Tk header files], with_tkinclude=${withval}) |
︙ | ︙ | |||
4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 | if test x"${ac_cv_c_$1config}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi done fi | > | 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 | if test x"${ac_cv_c_$1config}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi done fi |
︙ | ︙ | |||
4089 4090 4091 4092 4093 4094 4095 | # Arguments: # # Requires the following vars to be set: # $1_BIN_DIR # # Results: # | | < | 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 | # Arguments: # # Requires the following vars to be set: # $1_BIN_DIR # # Results: # # Substitutes the following vars: # $1_SRC_DIR # $1_LIB_FILE # $1_LIB_SPEC #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG], [ AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh]) if test -f "${$1_BIN_DIR}/$1Config.sh" ; then AC_MSG_RESULT([loading]) |
︙ | ︙ | |||
4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 | # if test -f "${$1_BIN_DIR}/Makefile" ; then AC_MSG_WARN([Found Makefile - using build library specs for $1]) $1_LIB_SPEC=${$1_BUILD_LIB_SPEC} $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC} $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH} fi AC_SUBST($1_VERSION) AC_SUBST($1_BIN_DIR) AC_SUBST($1_SRC_DIR) AC_SUBST($1_LIB_FILE) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_STUB_LIB_FILE) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_PATH) | > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 | # if test -f "${$1_BIN_DIR}/Makefile" ; then AC_MSG_WARN([Found Makefile - using build library specs for $1]) $1_LIB_SPEC=${$1_BUILD_LIB_SPEC} $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC} $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH} $1_INCLUDE_SPEC=${$1_BUILD_INCLUDE_SPEC} $1_LIBRARY_PATH=${$1_LIBRARY_PATH} fi AC_SUBST($1_VERSION) AC_SUBST($1_BIN_DIR) AC_SUBST($1_SRC_DIR) AC_SUBST($1_LIB_FILE) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_STUB_LIB_FILE) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_PATH) # Allow the caller to prevent this auto-check by specifying any 2nd arg AS_IF([test "x$2" = x], [ # Check both upper and lower-case variants # If a dev wanted non-stubs libs, this function could take an option # to not use _STUB in the paths below AS_IF([test "x${$1_STUB_LIB_SPEC}" = x], [TEA_LOAD_CONFIG_LIB(translit($1,[a-z],[A-Z])_STUB)], [TEA_LOAD_CONFIG_LIB($1_STUB)]) ]) ]) #------------------------------------------------------------------------ # TEA_LOAD_CONFIG_LIB -- # # Helper function to load correct library from another extension's # ${PACKAGE}Config.sh. # # Results: # Adds to LIBS the appropriate extension library #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG_LIB], [ AC_MSG_CHECKING([For $1 library for LIBS]) # This simplifies the use of stub libraries by automatically adding # the stub lib to your path. Normally this would add to SHLIB_LD_LIBS, # but this is called before CONFIG_CFLAGS. More importantly, this adds # to PKG_LIBS, which becomes LIBS, and that is only used by SHLIB_LD. if test "x${$1_LIB_SPEC}" != "x" ; then if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes" ; then TEA_ADD_LIBS([\"`${CYGPATH} ${$1_LIB_PATH}`\"]) AC_MSG_RESULT([using $1_LIB_PATH ${$1_LIB_PATH}]) else TEA_ADD_LIBS([${$1_LIB_SPEC}]) AC_MSG_RESULT([using $1_LIB_SPEC ${$1_LIB_SPEC}]) fi else AC_MSG_RESULT([file not found]) fi ]) #------------------------------------------------------------------------ # TEA_EXPORT_CONFIG -- # # Define the data to insert into the ${PACKAGE}Config.sh file # # Arguments: # # Requires the following vars to be set: # $1 # # Results: # Substitutes the following vars: #------------------------------------------------------------------------ AC_DEFUN([TEA_EXPORT_CONFIG], [ #-------------------------------------------------------------------- # These are for $1Config.sh #-------------------------------------------------------------------- # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib) eval pkglibdir="[$]{libdir}/$1${PACKAGE_VERSION}" if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then eval $1_LIB_FLAG="-l$1${PACKAGE_VERSION}${DBGX}" eval $1_STUB_LIB_FLAG="-l$1stub${PACKAGE_VERSION}${DBGX}" else eval $1_LIB_FLAG="-l$1`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}" eval $1_STUB_LIB_FLAG="-l$1stub`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}" fi $1_BUILD_LIB_SPEC="-L`pwd` ${$1_LIB_FLAG}" $1_LIB_SPEC="-L${pkglibdir} ${$1_LIB_FLAG}" $1_BUILD_STUB_LIB_SPEC="-L`pwd` [$]{$1_STUB_LIB_FLAG}" $1_STUB_LIB_SPEC="-L${pkglibdir} [$]{$1_STUB_LIB_FLAG}" $1_BUILD_STUB_LIB_PATH="`pwd`/[$]{PKG_STUB_LIB_FILE}" $1_STUB_LIB_PATH="${pkglibdir}/[$]{PKG_STUB_LIB_FILE}" AC_SUBST($1_BUILD_LIB_SPEC) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_BUILD_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_BUILD_STUB_LIB_PATH) AC_SUBST($1_STUB_LIB_PATH) AC_SUBST(MAJOR_VERSION) AC_SUBST(MINOR_VERSION) AC_SUBST(PATCHLEVEL) ]) #------------------------------------------------------------------------ # TEA_PATH_CELIB -- # # Locate Keuchel's celib emulation layer for targeting Win/CE # # Arguments: |
︙ | ︙ | |||
4200 4201 4202 4203 4204 4205 4206 | no_celib= CELIB_DIR=${ac_cv_c_celibconfig} CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` AC_MSG_RESULT([found $CELIB_DIR]) fi fi ]) | < < | 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 | no_celib= CELIB_DIR=${ac_cv_c_celibconfig} CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` AC_MSG_RESULT([found $CELIB_DIR]) fi fi ]) # Local Variables: # mode: autoconf # End: |
Added jni/xotcl/library/store/XOTclGdbm/tclconfig/install-sh.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 | #!/bin/sh # install - install a program, script, or datafile scriptversion=2011-04-20.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -S $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -S) stripcmd="$stripprog $2" shift;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: |
Changes to jni/xotcl/library/store/XOTclSdbm/Makefile.in.
︙ | ︙ | |||
66 67 68 69 70 71 72 73 74 75 76 77 78 79 | BINARIES = $(lib_BINARIES) SHELL = @SHELL@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ datadir = @datadir@ mandir = @mandir@ includedir = @includedir@ | > | 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | BINARIES = $(lib_BINARIES) SHELL = @SHELL@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ bindir = @bindir@ libdir = @libdir@ datadir = @datadir@ mandir = @mandir@ includedir = @includedir@ |
︙ | ︙ |
Changes to jni/xotcl/library/store/XOTclSdbm/configure.
more than 10,000 changes
Added jni/xotcl/library/store/XOTclSdbm/configure.ac.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 | #!/bin/bash -norc dnl This file is an input file used by the GNU "autoconf" program to dnl generate the file "configure", which is run during Tcl installation dnl to configure the system for the local environment. # # RCS: @(#) $Id: configure.in,v 1.20 2007/10/12 19:53:32 neumann Exp $ #----------------------------------------------------------------------- # Sample configure.in for Tcl Extensions. The only places you should # need to modify this file are marked by the string __CHANGE__ #----------------------------------------------------------------------- configdir=$(srcdir)/../../../tclconfig #----------------------------------------------------------------------- # __CHANGE__ # Set your package name and version numbers here. # # This initializes the environment with PACKAGE_NAME and PACKAGE_VERSION # set as provided. These will also be added as -D defs in your Makefile # so you can encode the package version directly into the source files. #----------------------------------------------------------------------- AC_INIT([xotclsdbm], [1.2]) #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. # This will define a ${TEA_PLATFORM} variable == "unix" or "windows" # as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE. #-------------------------------------------------------------------- TEA_INIT([3.9]) AC_CONFIG_AUX_DIR([../../../tclconfig]) #-------------------------------------------------------------------- # specify some extra flags #-------------------------------------------------------------------- AC_ARG_WITH([xotcl], [ --with-xotcl=DIR_CONTAINING_XOTCLCONFIG_SH absolute path to xotclConfig.sh, --without-xotcl disables, but this is pointless], [with_xotcl=$withval], [AC_MSG_ERROR([--with-xotcl is required])]) #-------------------------------------------------------------------- # Load the tclConfig.sh file #-------------------------------------------------------------------- TEA_PATH_TCLCONFIG TEA_LOAD_TCLCONFIG #-------------------------------------------------------------------- # Load the tkConfig.sh file if necessary (Tk extension) #-------------------------------------------------------------------- #TEA_PATH_TKCONFIG #TEA_LOAD_TKCONFIG #----------------------------------------------------------------------- # Handle the --prefix=... option by defaulting to what Tcl gave. # Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER. #----------------------------------------------------------------------- TEA_PREFIX #----------------------------------------------------------------------- # Standard compiler checks. # This sets up CC by using the CC env var, or looks for gcc otherwise. # This also calls AC_PROG_CC, AC_PROG_INSTALL and a few others to create # the basic setup necessary to compile executables. #----------------------------------------------------------------------- TEA_SETUP_COMPILER #-------------------------------------------------------------------- # Load the xotclConfig.sh file #-------------------------------------------------------------------- AC_MSG_NOTICE([Reading file ${with_xotcl}/xotclConfig.sh]) source ${with_xotcl}/xotclConfig.sh #----------------------------------------------------------------------- # __CHANGE__ # Specify the C source files to compile in TEA_ADD_SOURCES, # public headers that need to be installed in TEA_ADD_HEADERS, # stub library C source files to compile in TEA_ADD_STUB_SOURCES, # and runtime Tcl library files in TEA_ADD_TCL_SOURCES. # This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS # and PKG_TCL_SOURCES. #----------------------------------------------------------------------- TEA_ADD_SOURCES([hash.c pair.c sdbm.c xotclsdbm.c]) TEA_ADD_HEADERS([]) TEA_ADD_INCLUDES([-I${with_xotcl}/generic ${XOTCL_BUILD_INCLUDE_SPEC}]) TEA_ADD_LIBS([$XOTCL_BUILD_STUB_LIB_SPEC $XOTCL_BUILD_LIB_SPEC]) TEA_ADD_CFLAGS([]) TEA_ADD_STUB_SOURCES([]) TEA_ADD_TCL_SOURCES([]) #-------------------------------------------------------------------- # __CHANGE__ # A few miscellaneous platform-specific items: # # Define a special symbol for Windows (BUILD_sample in this case) so # that we create the export library with the dll. # # Windows creates a few extra files that need to be cleaned up. # You can add more files to clean if your extension creates any extra # files. # # TEA_ADD_* any platform specific compiler/build info here. #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then AC_DEFINE([BUILD_sample]) CLEANFILES="pkgIndex.tcl *.lib *.dll *.exp *.ilk *.pdb vc*.pch" #TEA_ADD_SOURCES([win/winFile.c]) #TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/win)\"]) else CLEANFILES="pkgIndex.tcl" #TEA_ADD_SOURCES([unix/unixFile.c]) #TEA_ADD_LIBS([-lsuperfly]) fi AC_SUBST([CLEANFILES]) #-------------------------------------------------------------------- # __CHANGE__ # Choose which headers you need. Extension authors should try very # hard to only rely on the Tcl public header files. Internal headers # contain private data structures and are subject to change without # notice. # This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG #-------------------------------------------------------------------- TEA_PUBLIC_TCL_HEADERS #TEA_PRIVATE_TCL_HEADERS #TEA_PUBLIC_TK_HEADERS #TEA_PRIVATE_TK_HEADERS #TEA_PATH_X #-------------------------------------------------------------------- # Check whether --enable-threads or --disable-threads was given. #-------------------------------------------------------------------- TEA_ENABLE_THREADS #-------------------------------------------------------------------- # The statement below defines a collection of symbols related to # building as a shared library instead of a static library. #-------------------------------------------------------------------- TEA_ENABLE_SHARED #-------------------------------------------------------------------- # This macro figures out what flags to use with the compiler/linker # when building shared/static debug/optimized objects. This information # can be taken from the tclConfig.sh file, but this figures it all out. #-------------------------------------------------------------------- TEA_CONFIG_CFLAGS #-------------------------------------------------------------------- # Set the default compiler switches based on the --enable-symbols option. #-------------------------------------------------------------------- TEA_ENABLE_SYMBOLS #-------------------------------------------------------------------- # Everyone should be linking against the Tcl stub library. If you # can't for some reason, remove this definition. If you aren't using # stubs, you also need to modify the SHLIB_LD_LIBS setting below to # link against the non-stubbed Tcl library. Add Tk too if necessary. #-------------------------------------------------------------------- AC_DEFINE([USE_TCL_STUBS]) #AC_DEFINE([USE_TK_STUBS]) #-------------------------------------------------------------------- # This macro generates a line to use when building a library. It # depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS, # and TEA_LOAD_TCLCONFIG macros above. #-------------------------------------------------------------------- TEA_MAKE_LIB #-------------------------------------------------------------------- # Find tclsh so that we can run pkg_mkIndex to generate the pkgIndex.tcl # file during the install process. Don't run the TCLSH_PROG through # ${CYGPATH} because it's being used directly by make. # Require that we use a tclsh shell version 8.2 or later since earlier # versions have bugs in the pkg_mkIndex routine. # Add WISH as well if this is a Tk extension. #-------------------------------------------------------------------- TEA_PROG_TCLSH #TEA_PROG_WISH #-------------------------------------------------------------------- # Finally, substitute all of the various values into the Makefile. # You may alternatively have a special pkgIndex.tcl.in or other files # which require substituting th AC variables in. Include these here. #-------------------------------------------------------------------- AC_OUTPUT([Makefile]) |
Deleted jni/xotcl/library/store/XOTclSdbm/configure.in.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/xotcl/library/store/XOTclSdbm/dllEntryPoint.c.
1 2 | /* * dllEntryPoint.c -- | < | 1 2 3 4 5 6 7 8 9 | /* * dllEntryPoint.c -- * * This file implements the Dll entry point as needed by Windows. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #if defined(_MSC_VER) |
︙ | ︙ |
Changes to jni/xotcl/library/store/XOTclSdbm/pair.c.
1 2 3 4 5 6 7 8 9 | /* * sdbm - ndbm work-alike hashed database library * based on Per-Aake Larson's Dynamic Hashing algorithms. BIT 18 (1978). * author: oz@nexus.yorku.ca * status: public domain. * * page-level routines */ | < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /* * sdbm - ndbm work-alike hashed database library * based on Per-Aake Larson's Dynamic Hashing algorithms. BIT 18 (1978). * author: oz@nexus.yorku.ca * status: public domain. * * page-level routines */ #include "sdbm.h" #include "tune.h" #include "pair.h" #include <stdlib.h> #include <string.h> |
︙ | ︙ |
Changes to jni/xotcl/library/store/XOTclSdbm/sdbm.c.
1 2 3 4 5 6 7 8 9 | /* * sdbm - ndbm work-alike hashed database library * based on Per-Aake Larson's Dynamic Hashing algorithms. BIT 18 (1978). * author: oz@nexus.yorku.ca * status: public domain. * * core routines */ | < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /* * sdbm - ndbm work-alike hashed database library * based on Per-Aake Larson's Dynamic Hashing algorithms. BIT 18 (1978). * author: oz@nexus.yorku.ca * status: public domain. * * core routines */ #include "sdbm.h" #include "tune.h" #include "pair.h" #ifdef HAVE_UNISTD_H #include <unistd.h> #endif |
︙ | ︙ |
Changes to jni/xotcl/library/store/XOTclSdbm/tcl.m4.
1 2 3 4 5 6 7 8 9 10 | # tcl.m4 -- # # This file provides a set of autoconf macros to help TEA-enable # a Tcl extension. # # Copyright (c) 1999-2000 Ajuba Solutions. # Copyright (c) 2002-2005 ActiveState Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. | < < | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # tcl.m4 -- # # This file provides a set of autoconf macros to help TEA-enable # a Tcl extension. # # Copyright (c) 1999-2000 Ajuba Solutions. # Copyright (c) 2002-2005 ActiveState Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. AC_PREREQ(2.57) dnl TEA extensions pass us the version of TEA they think they dnl are compatible with (must be set in TEA_INIT below) dnl TEA_VERSION="3.9" # Possible values for key variables defined: # # TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem') # TEA_PLATFORM - windows unix # |
︙ | ︙ | |||
53 54 55 56 57 58 59 | if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true AC_ARG_WITH(tcl, AC_HELP_STRING([--with-tcl], [directory containing tcl configuration (tclConfig.sh)]), | | | | | | | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true AC_ARG_WITH(tcl, AC_HELP_STRING([--with-tcl], [directory containing tcl configuration (tclConfig.sh)]), with_tclconfig="${withval}") AC_MSG_CHECKING([for Tcl configuration]) AC_CACHE_VAL(ac_cv_c_tclconfig,[ # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then case "${with_tclconfig}" in */tclConfig.sh ) if test -f "${with_tclconfig}"; then AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself]) with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`" fi ;; esac if test -f "${with_tclconfig}/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`" else AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh]) fi fi # then check for a private Tcl installation if test x"${ac_cv_c_tclconfig}" = x ; then |
︙ | ︙ | |||
90 91 92 93 94 95 96 | `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then | | | | | > > > | | | | | | | | 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 | `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tcl.framework/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ `ls -d /usr/lib/tcl8.6 2>/dev/null` \ `ls -d /usr/lib/tcl8.5 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ${srcdir}/../tcl \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi ]) if test x"${ac_cv_c_tclconfig}" = x ; then TCL_BIN_DIR="# no Tcl configs found" AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh]) else no_tcl= TCL_BIN_DIR="${ac_cv_c_tclconfig}" AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_PATH_TKCONFIG -- |
︙ | ︙ | |||
205 206 207 208 209 210 211 | if test x"${no_tk}" = x ; then # we reset no_tk in case something fails here no_tk=true AC_ARG_WITH(tk, AC_HELP_STRING([--with-tk], [directory containing tk configuration (tkConfig.sh)]), | | | | | | | 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 | if test x"${no_tk}" = x ; then # we reset no_tk in case something fails here no_tk=true AC_ARG_WITH(tk, AC_HELP_STRING([--with-tk], [directory containing tk configuration (tkConfig.sh)]), with_tkconfig="${withval}") AC_MSG_CHECKING([for Tk configuration]) AC_CACHE_VAL(ac_cv_c_tkconfig,[ # First check to see if --with-tkconfig was specified. if test x"${with_tkconfig}" != x ; then case "${with_tkconfig}" in */tkConfig.sh ) if test -f "${with_tkconfig}"; then AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself]) with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`" fi ;; esac if test -f "${with_tkconfig}/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`" else AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh]) fi fi # then check for a private Tk library if test x"${ac_cv_c_tkconfig}" = x ; then |
︙ | ︙ | |||
242 243 244 245 246 247 248 | `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tk \ `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then | | | | > | | | | | | | < | 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 | `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tk \ `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tk.framework/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ${srcdir}/../tk \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi ]) if test x"${ac_cv_c_tkconfig}" = x ; then TK_BIN_DIR="# no Tk configs found" AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh]) else no_tk= TK_BIN_DIR="${ac_cv_c_tkconfig}" AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_LOAD_TCLCONFIG -- # # Load the tclConfig.sh file # # Arguments: # # Requires the following vars to be set: # TCL_BIN_DIR # # Results: # # Substitutes the following vars: # TCL_BIN_DIR # TCL_SRC_DIR # TCL_LIB_FILE #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_TCLCONFIG], [ AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh]) if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then AC_MSG_RESULT([loading]) |
︙ | ︙ | |||
366 367 368 369 370 371 372 | # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TCL_BIN_DIR}/Makefile" ; then | | | | | | | | > < < | | > > | > | < < < < | > > | | > | > > > > | < < < < > > > | 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 | # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TCL_BIN_DIR}/Makefile" ; then TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}" TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}" TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tcl.framework installed in an arbitrary location. case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then for i in "`cd "${TCL_BIN_DIR}"; pwd`" \ "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}" break fi done fi if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}" TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" AC_SUBST(TCL_VERSION) AC_SUBST(TCL_PATCH_LEVEL) AC_SUBST(TCL_BIN_DIR) AC_SUBST(TCL_SRC_DIR) AC_SUBST(TCL_LIB_FILE) AC_SUBST(TCL_LIB_FLAG) AC_SUBST(TCL_LIB_SPEC) AC_SUBST(TCL_STUB_LIB_FILE) AC_SUBST(TCL_STUB_LIB_FLAG) AC_SUBST(TCL_STUB_LIB_SPEC) AC_MSG_CHECKING([platform]) hold_cc=$CC; CC="$TCL_CC" AC_TRY_COMPILE(,[ #ifdef _WIN32 #error win32 #endif ], TEA_PLATFORM="unix", TEA_PLATFORM="windows" ) CC=$hold_cc AC_MSG_RESULT($TEA_PLATFORM) # The BUILD_$pkg is to define the correct extern storage class # handling when making this package AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}, [], [Building extension source?]) # Do this here as we have fully defined TEA_PLATFORM now if test "${TEA_PLATFORM}" = "windows" ; then EXEEXT=".exe" CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp" fi # TEA specific: AC_SUBST(CLEANFILES) AC_SUBST(TCL_LIBS) AC_SUBST(TCL_DEFS) AC_SUBST(TCL_EXTRA_CFLAGS) AC_SUBST(TCL_LD_FLAGS) AC_SUBST(TCL_SHLIB_LD_LIBS) ]) |
︙ | ︙ | |||
475 476 477 478 479 480 481 | # If the TK_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TK_LIB_SPEC will be set to the value # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC # instead of TK_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TK_BIN_DIR}/Makefile" ; then | | | | | | | | | 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 | # If the TK_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TK_LIB_SPEC will be set to the value # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC # instead of TK_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TK_BIN_DIR}/Makefile" ; then TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}" TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}" TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tk.framework installed in an arbitrary location. case ${TK_DEFS} in *TK_FRAMEWORK*) if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then for i in "`cd "${TK_BIN_DIR}"; pwd`" \ "`cd "${TK_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}" break fi done fi if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}" TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TK_DBGX substitution |
︙ | ︙ | |||
550 551 552 553 554 555 556 | # directory. This macro will correctly determine the name # of the tclsh executable even if tclsh has not yet been # built in the build directory. The tclsh found is always # associated with a tclConfig.sh file. This tclsh should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # | | | | | 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 | # directory. This macro will correctly determine the name # of the tclsh executable even if tclsh has not yet been # built in the build directory. The tclsh found is always # associated with a tclConfig.sh file. This tclsh should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # # Arguments: # none # # Results: # Substitutes the following vars: # TCLSH_PROG #------------------------------------------------------------------------ AC_DEFUN([TEA_PROG_TCLSH], [ AC_MSG_CHECKING([for tclsh]) if test -f "${TCL_BIN_DIR}/Makefile" ; then # tclConfig.sh is in Tcl build directory |
︙ | ︙ | |||
600 601 602 603 604 605 606 | # directory. This macro will correctly determine the name # of the wish executable even if wish has not yet been # built in the build directory. The wish found is always # associated with a tkConfig.sh file. This wish should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # | | | | | 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 | # directory. This macro will correctly determine the name # of the wish executable even if wish has not yet been # built in the build directory. The wish found is always # associated with a tkConfig.sh file. This wish should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # # Arguments: # none # # Results: # Substitutes the following vars: # WISH_PROG #------------------------------------------------------------------------ AC_DEFUN([TEA_PROG_WISH], [ AC_MSG_CHECKING([for wish]) if test -f "${TK_BIN_DIR}/Makefile" ; then # tkConfig.sh is in Tk build directory |
︙ | ︙ | |||
646 647 648 649 650 651 652 | #------------------------------------------------------------------------ # TEA_ENABLE_SHARED -- # # Allows the building of shared libraries # # Arguments: # none | | | 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 | #------------------------------------------------------------------------ # TEA_ENABLE_SHARED -- # # Allows the building of shared libraries # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-shared=yes|no # # Defines the following vars: # STATIC_BUILD Used for building import/export libraries |
︙ | ︙ | |||
702 703 704 705 706 707 708 | # # Note that it is legal to have a thread enabled extension run in a # threaded or non-threaded Tcl core, but a non-threaded extension may # only run in a non-threaded Tcl core. # # Arguments: # none | | < | 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 | # # Note that it is legal to have a thread enabled extension run in a # threaded or non-threaded Tcl core, but a non-threaded extension may # only run in a non-threaded Tcl core. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-threads # # Sets the following vars: # THREADS_LIBS Thread library(s) # # Defines the following vars: # TCL_THREADS # _REENTRANT # _THREAD_SAFE #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_THREADS], [ AC_ARG_ENABLE(threads, AC_HELP_STRING([--enable-threads], [build with threads]), [tcl_ok=$enableval], [tcl_ok=yes]) |
︙ | ︙ | |||
839 840 841 842 843 844 845 | # Results: # # Adds the following arguments to configure: # --enable-symbols # # Defines the following vars: # CFLAGS_DEFAULT Sets to $(CFLAGS_DEBUG) if true | | < | | 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 | # Results: # # Adds the following arguments to configure: # --enable-symbols # # Defines the following vars: # CFLAGS_DEFAULT Sets to $(CFLAGS_DEBUG) if true # Sets to "$(CFLAGS_OPTIMIZE) -DNDEBUG" if false # LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true # Sets to $(LDFLAGS_OPTIMIZE) if false # DBGX Formerly used as debug library extension; # always blank now. #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_SYMBOLS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_CONFIG_CFLAGS]) AC_MSG_CHECKING([for build with symbols]) AC_ARG_ENABLE(symbols, AC_HELP_STRING([--enable-symbols], [build with debugging symbols (default: off)]), [tcl_ok=$enableval], [tcl_ok=no]) DBGX="" if test "$tcl_ok" = "no"; then CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG" LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" AC_MSG_RESULT([no]) else CFLAGS_DEFAULT="${CFLAGS_DEBUG}" LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" if test "$tcl_ok" = "yes"; then AC_MSG_RESULT([yes (standard debugging)]) |
︙ | ︙ | |||
904 905 906 907 908 909 910 | # Results: # # Adds the following arguments to configure: # --enable-langinfo=yes|no (default is yes) # # Defines the following vars: # HAVE_LANGINFO Triggers use of nl_langinfo if defined. | < | 907 908 909 910 911 912 913 914 915 916 917 918 919 920 | # Results: # # Adds the following arguments to configure: # --enable-langinfo=yes|no (default is yes) # # Defines the following vars: # HAVE_LANGINFO Triggers use of nl_langinfo if defined. #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_LANGINFO], [ AC_ARG_ENABLE(langinfo, AC_HELP_STRING([--enable-langinfo], [use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic (default: on)]), [langinfo_ok=$enableval], [langinfo_ok=yes]) |
︙ | ︙ | |||
936 937 938 939 940 941 942 | ]) #-------------------------------------------------------------------- # TEA_CONFIG_SYSTEM # # Determine what the system is (some things cannot be easily checked # on a feature-driven basis, alas). This can usually be done via the | | < < < < < < < < < < | 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 | ]) #-------------------------------------------------------------------- # TEA_CONFIG_SYSTEM # # Determine what the system is (some things cannot be easily checked # on a feature-driven basis, alas). This can usually be done via the # "uname" command. # # Arguments: # none # # Results: # Defines the following var: # # system - System/platform/version identification code. #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_SYSTEM], [ AC_CACHE_CHECK([system version], tcl_cv_sys_version, [ # TEA specific: if test "${TEA_PLATFORM}" = "windows" ; then tcl_cv_sys_version=windows else tcl_cv_sys_version=`uname -s`-`uname -r` if test "$?" -ne 0 ; then AC_MSG_WARN([can't find uname command]) tcl_cv_sys_version=unknown else if test "`uname -s`" = "AIX" ; then tcl_cv_sys_version=AIX-`uname -v`.`uname -r` fi fi fi ]) system=$tcl_cv_sys_version |
︙ | ︙ | |||
990 991 992 993 994 995 996 | # Arguments: # none # # Results: # # Defines and substitutes the following vars: # | < < | < | | | | < < < | < < < < < < < < | 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 | # Arguments: # none # # Results: # # Defines and substitutes the following vars: # # DL_OBJS, DL_LIBS - removed for TEA, only needed by core. # LDFLAGS - Flags to pass to the compiler when linking object # files into an executable application binary such # as tclsh. # LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. Could # be the same as CC_SEARCH_FLAGS if ${CC} is used to link. # CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. # SHLIB_CFLAGS - Flags to pass to cc when compiling the components # of a shared library (may request position-independent # code, among other things). # SHLIB_LD - Base command to use for combining object files # into a shared library. # SHLIB_LD_LIBS - Dependent libraries for the linker to scan when # creating shared libraries. This symbol typically # goes at the end of the "ld" commands that build # shared libraries. The value of the symbol defaults to # "${LIBS}" if all of the dependent libraries should # be specified when creating a shared library. If # dependent libraries should not be specified (as on # SunOS 4.x, where they cause the link to fail, or in # general if Tcl and Tk aren't themselves shared # libraries), then this symbol has an empty string # as its value. # SHLIB_SUFFIX - Suffix to use for the names of dynamically loadable # extensions. An empty string means we don't know how # to use shared libraries on this platform. # LIB_SUFFIX - Specifies everything that comes after the "libfoo" # in a static or shared library name, using the $PACKAGE_VERSION variable # to put the version in the right place. This is used # by platforms that need non-standard library names. # Examples: ${PACKAGE_VERSION}.so.1.1 on NetBSD, since it needs # to have a version after the .so, and ${PACKAGE_VERSION}.a # on AIX, since a shared library needs to have # a .a extension whereas shared objects for loadable # extensions have a .so extension. Defaults to # ${PACKAGE_VERSION}${SHLIB_SUFFIX}. # CFLAGS_DEBUG - # Flags used when running the compiler in debug mode # CFLAGS_OPTIMIZE - # Flags used when running the compiler in optimize mode # CFLAGS - Additional CFLAGS added as necessary (usually 64-bit) #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_CFLAGS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_INIT]) # Step 0.a: Enable 64 bit support? |
︙ | ︙ | |||
1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 | void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes, tcl_cv_cc_visibility_hidden=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [ AC_DEFINE(MODULE_SCOPE, [extern __attribute__((__visibility__("hidden")))], [Compiler support for module scope symbols]) ]) # Step 0.d: Disable -rpath support? AC_MSG_CHECKING([if rpath support is requested]) AC_ARG_ENABLE(rpath, AC_HELP_STRING([--disable-rpath], | > | 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 | void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes, tcl_cv_cc_visibility_hidden=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [ AC_DEFINE(MODULE_SCOPE, [extern __attribute__((__visibility__("hidden")))], [Compiler support for module scope symbols]) AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols]) ]) # Step 0.d: Disable -rpath support? AC_MSG_CHECKING([if rpath support is requested]) AC_ARG_ENABLE(rpath, AC_HELP_STRING([--disable-rpath], |
︙ | ︙ | |||
1114 1115 1116 1117 1118 1119 1120 | AC_ARG_ENABLE(wince, AC_HELP_STRING([--enable-wince], [enable Win/CE support (where applicable)]), [doWince=$enableval], [doWince=no]) AC_MSG_RESULT([$doWince]) ]) | | < < < < < | | | > < < < > > | < < < < > | < | 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 | AC_ARG_ENABLE(wince, AC_HELP_STRING([--enable-wince], [enable Win/CE support (where applicable)]), [doWince=$enableval], [doWince=no]) AC_MSG_RESULT([$doWince]) ]) # Set the variable "system" to hold the name and version number # for the system. TEA_CONFIG_SYSTEM # Require ranlib early so we can override it in special cases below. AC_REQUIRE([AC_PROG_RANLIB]) # Set configuration options based on system name and version. # This is similar to Tcl's unix/tcl.m4 except that we've added a # "windows" case and removed some core-only vars. do64bit_ok=no # default to '{$LIBS}' and set to "" on per-platform necessary basis SHLIB_LD_LIBS='${LIBS}' # When ld needs options to work in 64-bit mode, put them in # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load] # is disabled by the user. [Bug 1016796] LDFLAGS_ARCH="" UNSHARED_LIB_SUFFIX="" # TEA specific: use PACKAGE_VERSION instead of VERSION TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' ECHO_VERSION='`echo ${PACKAGE_VERSION}`' TCL_LIB_VERSIONS_OK=ok CFLAGS_DEBUG=-g AS_IF([test "$GCC" = yes], [ CFLAGS_OPTIMIZE=-O2 CFLAGS_WARNING="-Wall" ], [ CFLAGS_OPTIMIZE=-O CFLAGS_WARNING="" ]) AC_CHECK_TOOL(AR, ar) STLIB_LD='${AR} cr' LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION="1.0"]) case $system in # TEA specific: windows) # This is a 2-stage check to make sure we have the 64-bit SDK |
︙ | ︙ | |||
1185 1186 1187 1188 1189 1190 1191 | PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac | | | 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 | PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode]) AC_MSG_WARN([Ensure latest Platform SDK is installed]) do64bit="no" else AC_MSG_RESULT([ Using 64-bit $MACHINE mode]) do64bit_ok="yes" fi |
︙ | ︙ | |||
1302 1303 1304 1305 1306 1307 1308 | lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" AC_SUBST(CELIB_DIR) else RC="rc" lflags="-nologo" | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 | lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" AC_SUBST(CELIB_DIR) else RC="rc" lflags="-nologo" LINKBIN="link" CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" fi fi if test "$GCC" = "yes"; then # mingw gcc mode AC_CHECK_TOOL(RC, windres) CFLAGS_DEBUG="-g" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" SHLIB_LD='${CC} -shared' UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" AC_CACHE_CHECK(for cross-compile version of gcc, ac_cv_cross, AC_TRY_COMPILE([ #ifdef _WIN32 #error cross-compiler #endif ], [], ac_cv_cross=yes, ac_cv_cross=no) ) if test "$ac_cv_cross" = "yes"; then case "$do64bit" in amd64|x64|yes) CC="x86_64-w64-mingw32-gcc" LD="x86_64-w64-mingw32-ld" AR="x86_64-w64-mingw32-ar" RANLIB="x86_64-w64-mingw32-ranlib" RC="x86_64-w64-mingw32-windres" ;; *) CC="i686-w64-mingw32-gcc" LD="i686-w64-mingw32-ld" AR="i686-w64-mingw32-ar" RANLIB="i686-w64-mingw32-ranlib" RC="i686-w64-mingw32-windres" ;; esac fi else SHLIB_LD="${LINKBIN} -dll ${lflags}" # link -lib only works when -lib is the first arg STLIB_LD="${LINKBIN} -lib ${lflags}" UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' PATHTYPE=-w # For information on what debugtype is most useful, see: |
︙ | ︙ | |||
1339 1340 1341 1342 1343 1344 1345 | LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi | < < < < < | | < < | > > | > | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | | | < | < | > < < < < < < | | 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 | LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi SHLIB_SUFFIX=".dll" SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' TCL_LIB_VERSIONS_OK=nodots ;; AIX-*) AS_IF([test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"], [ # AIX requires the _r compiler when gcc isn't being used case "${CC}" in *_r|*_r\ *) # ok ... ;; *) # Make sure only first arg gets _r CC=`echo "$CC" | sed -e 's/^\([[^ ]]*\)/\1_r/'` ;; esac AC_MSG_RESULT([Using $CC for compiling with threads]) ]) LIBS="$LIBS -lc" SHLIB_CFLAGS="" SHLIB_SUFFIX=".so" LD_LIBRARY_PATH_VAR="LIBPATH" # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported with GCC on $system]) ], [ do64bit_ok=yes CFLAGS="$CFLAGS -q64" LDFLAGS_ARCH="-q64" RANLIB="${RANLIB} -X64" AR="${AR} -X64" SHLIB_LD_FLAGS="-b64" ]) ]) AS_IF([test "`uname -m`" = ia64], [ # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC SHLIB_LD="/usr/ccs/bin/ld -G -z text" AS_IF([test "$GCC" = yes], [ CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' ], [ CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' ]) LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' ], [ AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared -Wl,-bexpall' ], [ SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry" LDFLAGS="$LDFLAGS -brtl" ]) SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}" CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ]) ;; BeOS*) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -nostart' SHLIB_SUFFIX=".so" #----------------------------------------------------------- # Check for inet_ntoa in -lbind, for BeOS (which also needs # -lsocket, even if the network functions are in -lnet which # is always linked to, for compatibility. #----------------------------------------------------------- AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"]) ;; BSD/OS-4.*) SHLIB_CFLAGS="-export-dynamic -fPIC" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; CYGWIN_*) SHLIB_CFLAGS="" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".dll" EXEEXT=".exe" do64bit_ok=yes CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; Haiku*) LDFLAGS="$LDFLAGS -Wl,--export-dynamic" SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}' AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"]) ;; HP-UX-*.11.*) # Use updated header definitions where possible AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?]) # TEA specific: Needed by Tcl, but not most extensions #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?]) #LIBS="$LIBS -lxnet" # Use the XOPEN network library AS_IF([test "`uname -m`" = ia64], [ SHLIB_SUFFIX=".so" # Use newer C++ library for C++ extensions #if test "$GCC" != "yes" ; then # CPPFLAGS="-AA" #fi ], [ SHLIB_SUFFIX=".sl" ]) AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) AS_IF([test "$tcl_ok" = yes], [ LDFLAGS="$LDFLAGS -Wl,-E" CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' LD_LIBRARY_PATH_VAR="SHLIB_PATH" ]) AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} |
︙ | ︙ | |||
1532 1533 1534 1535 1536 1537 1538 | AS_IF([test "$do64bit" = "yes"], [ AS_IF([test "$GCC" = yes], [ case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 | AS_IF([test "$do64bit" = "yes"], [ AS_IF([test "$GCC" = yes], [ case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ;; *) AC_MSG_WARN([64bit mode not supported with GCC on $system]) ;; esac ], [ do64bit_ok=yes CFLAGS="$CFLAGS +DD64" LDFLAGS_ARCH="+DD64" ]) ]) ;; IRIX-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [ CFLAGS="$CFLAGS -mabi=n32" LDFLAGS="$LDFLAGS -mabi=n32" ], [ |
︙ | ︙ | |||
1601 1602 1603 1604 1605 1606 1607 | esac LDFLAGS="$LDFLAGS -n32" ]) ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" | < < < | < < < < < < < | 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 | esac LDFLAGS="$LDFLAGS -n32" ]) ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported by gcc]) ], [ do64bit_ok=yes SHLIB_LD="ld -64 -shared -rdata_shared" CFLAGS="$CFLAGS -64" LDFLAGS_ARCH="-64" ]) ]) ;; Linux*|GNU*|NetBSD-Debian) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" # TEA specific: CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}' LDFLAGS="$LDFLAGS -Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"]) AS_IF([test $do64bit = yes], [ AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [ |
︙ | ︙ | |||
1662 1663 1664 1665 1666 1667 1668 | # The combo of gcc + glibc has a bug related to inlining of # functions like strtod(). The -fno-builtin flag should address # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"]) | < < < < < < < < < < < < < < < < < | < | < > > | < | | < | | | | < | < < < > | | > > | < < < < < < < < < < < < < < | < < < < < < | < | < | | | | < < < < < < < < < < < < > | < < < < < | > < | < | < < < < < < < < < < < | | < < | > > | | | | | > > | 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 | # The combo of gcc + glibc has a bug related to inlining of # functions like strtod(). The -fno-builtin flag should address # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"]) ;; Lynx*) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" CFLAGS_OPTIMIZE=-02 SHLIB_LD='${CC} -shared' LD_FLAGS="-Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) ;; OpenBSD-*) arch=`arch -s` case "$arch" in vax) SHLIB_SUFFIX="" SHARED_LIB_SUFFIX="" LDFLAGS="" ;; *) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' LDFLAGS="-Wl,-export-dynamic" ;; esac case "$arch" in vax) CFLAGS_OPTIMIZE="-O1" ;; *) CFLAGS_OPTIMIZE="-O2" ;; esac AS_IF([test "${TCL_THREADS}" = "1"], [ # On OpenBSD: Compile with -pthread # Don't link with -lpthread LIBS=`echo $LIBS | sed s/-lpthread//` CFLAGS="$CFLAGS -pthread" ]) # OpenBSD doesn't do version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; NetBSD-*) # NetBSD has ELF and can use 'cc -shared' to build shared libs SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the CFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" ]) ;; FreeBSD-*) # This configuration from FreeBSD Ports. SHLIB_CFLAGS="-fPIC" SHLIB_LD="${CC} -shared" TCL_SHLIB_LD_EXTRAS="-Wl,-soname=\$[@]" TK_SHLIB_LD_EXTRAS="-Wl,-soname,\$[@]" SHLIB_SUFFIX=".so" LDFLAGS="" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the LDFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LDFLAGS="$LDFLAGS $PTHREAD_LIBS"]) case $system in FreeBSD-3.*) # Version numbers are dot-stripped by system policy. TCL_TRIM_DOTS=`echo ${VERSION} | tr -d .` UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so' TCL_LIB_VERSIONS_OK=nodots ;; esac ;; Darwin-*) CFLAGS_OPTIMIZE="-Os" SHLIB_CFLAGS="-fno-common" # To avoid discrepancies between what headers configure sees during # preprocessing tests and compiling tests, move any -isysroot and # -mmacosx-version-min flags from CFLAGS to CPPFLAGS: |
︙ | ︙ | |||
1877 1878 1879 1880 1881 1882 1883 | hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_single_module = yes], [ SHLIB_LD="${SHLIB_LD} -Wl,-single_module" ]) | | < < < > | 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 | hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_single_module = yes], [ SHLIB_LD="${SHLIB_LD} -Wl,-single_module" ]) # TEA specific: link shlib with current and compatibility version flags vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d` SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}" SHLIB_SUFFIX=".dylib" # Don't use -prebind when building for Mac OS X 10.4 or later only: AS_IF([test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \ "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4], [ LDFLAGS="$LDFLAGS -prebind"]) LDFLAGS="$LDFLAGS -headerpad_max_install_names" AC_CACHE_CHECK([if ld accepts -search_paths_first flag], tcl_cv_ld_search_paths_first, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes, tcl_cv_ld_search_paths_first=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_search_paths_first = yes], [ LDFLAGS="$LDFLAGS -Wl,-search_paths_first" ]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [__private_extern__], [Compiler support for module scope symbols]) tcl_cv_cc_visibility_hidden=yes ]) CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" # TEA specific: for combined 32 & 64 bit fat builds of Tk # extensions, verify that 64-bit build is possible. AS_IF([test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"], [ |
︙ | ︙ | |||
1944 1945 1946 1947 1948 1949 1950 | AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [ AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags]) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done]) ]) ;; | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 | AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [ AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags]) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done]) ]) ;; OS/390-*) CFLAGS_OPTIMIZE="" # Optimizer is buggy AC_DEFINE(_OE_SOCKETS, 1, # needed in sys/socket.h [Should OS/390 do the right thing with sockets?]) ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" AS_IF([test "$SHARED_BUILD" = 1], [ SHLIB_LD='ld -shared -expect_unresolved "*"' ], [ SHLIB_LD='ld -non_shared -expect_unresolved "*"' ]) SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [CFLAGS="$CFLAGS -mieee"], [ CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"]) # see pthread_intro(3) for pthread support on osf1, k.furukawa AS_IF([test "${TCL_THREADS}" = 1], [ |
︙ | ︙ | |||
2021 2022 2023 2024 2025 2026 2027 | QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" | < < < < < < | | | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 | QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SCO_SV-3.2*) AS_IF([test "$GCC" = yes], [ SHLIB_CFLAGS="-fPIC -melf" LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" ], [ SHLIB_CFLAGS="-Kpic -belf" LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" ]) SHLIB_LD="ld -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SunOS-5.[[0-6]]) # Careful to not let 5.10+ fall into this case # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) SHLIB_CFLAGS="-KPIC" SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ], [ SHLIB_LD="/usr/ccs/bin/ld -G -z text" CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' |
︙ | ︙ | |||
2163 2164 2165 2166 2167 2168 2169 | CFLAGS="$CFLAGS -xarch=amd64" LDFLAGS="$LDFLAGS -xarch=amd64";; esac ]) ], [AC_MSG_WARN([64bit mode not supported for $arch])])]) ]) | < < < < < < | 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 | CFLAGS="$CFLAGS -xarch=amd64" LDFLAGS="$LDFLAGS -xarch=amd64";; esac ]) ], [AC_MSG_WARN([64bit mode not supported for $arch])])]) ]) SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "$do64bit_ok" = yes], [ AS_IF([test "$arch" = "sparcv9 sparc"], [ # We need to specify -static-libgcc or we need to |
︙ | ︙ | |||
2208 2209 2210 2211 2212 2213 2214 | ]) ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" | < < | 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 | ]) ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-Bexport" AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no) LDFLAGS=$hold_ldflags]) |
︙ | ︙ | |||
2235 2236 2237 2238 2239 2240 2241 | dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so dnl # until the end of configure, as configure's compile and link tests use dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's dnl # preprocessing tests use only CPPFLAGS. AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""]) | < | < < < < < | < < < < < < < < < < < < | > > > > > > | | | | > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 | dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so dnl # until the end of configure, as configure's compile and link tests use dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's dnl # preprocessing tests use only CPPFLAGS. AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""]) # Add in the arch flags late to ensure it wasn't removed. # Not necessary in TEA, but this is aligned with core LDFLAGS="$LDFLAGS $LDFLAGS_ARCH" # If we're running gcc, then change the C flags for compiling shared # libraries to the right flags for gcc, instead of those for the # standard manufacturer compiler. AS_IF([test "$GCC" = yes], [ case $system in AIX-*) ;; BSD/OS*) ;; CYGWIN_*|MINGW32_*) ;; IRIX*) ;; NetBSD-*|FreeBSD-*|OpenBSD-*) ;; Darwin-*) ;; SCO_SV-3.2*) ;; windows) ;; *) SHLIB_CFLAGS="-fPIC" ;; esac]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [extern], [No Compiler support for module scope symbols]) ]) AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}']) AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a']) if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then AC_CACHE_CHECK(for SEH support in compiler, tcl_cv_seh, AC_TRY_RUN([ #define WIN32_LEAN_AND_MEAN #include <windows.h> #undef WIN32_LEAN_AND_MEAN int main(int argc, char** argv) { int a, b = 0; __try { a = 666 / b; } __except (EXCEPTION_EXECUTE_HANDLER) { return 0; } return 1; } ], tcl_cv_seh=yes, tcl_cv_seh=no, tcl_cv_seh=no) ) if test "$tcl_cv_seh" = "no" ; then AC_DEFINE(HAVE_NO_SEH, 1, [Defined when mingw does not support SEH]) fi # # Check to see if the excpt.h include file provided contains the # definition for EXCEPTION_DISPOSITION; if not, which is the case # with Cygwin's version as of 2002-04-10, define it to be int, # sufficient for getting the current code to work. # AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files, tcl_cv_eh_disposition, AC_TRY_COMPILE([ # define WIN32_LEAN_AND_MEAN # include <windows.h> # undef WIN32_LEAN_AND_MEAN ],[ EXCEPTION_DISPOSITION x; ], tcl_cv_eh_disposition=yes, tcl_cv_eh_disposition=no) ) if test "$tcl_cv_eh_disposition" = "no" ; then AC_DEFINE(EXCEPTION_DISPOSITION, int, [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION]) fi # Check to see if winnt.h defines CHAR, SHORT, and LONG # even if VOID has already been #defined. The win32api # used by mingw and cygwin is known to do this. AC_CACHE_CHECK(for winnt.h that ignores VOID define, tcl_cv_winnt_ignore_void, AC_TRY_COMPILE([ #define VOID void #define WIN32_LEAN_AND_MEAN #include <windows.h> #undef WIN32_LEAN_AND_MEAN ], [ CHAR c; SHORT s; LONG l; ], tcl_cv_winnt_ignore_void=yes, tcl_cv_winnt_ignore_void=no) ) if test "$tcl_cv_winnt_ignore_void" = "yes" ; then AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1, [Defined when cygwin/mingw ignores VOID define in winnt.h]) fi fi # See if the compiler supports casting to a union type. # This is used to stop gcc from printing a compiler # warning when initializing a union member. AC_CACHE_CHECK(for cast to union support, tcl_cv_cast_to_union, AC_TRY_COMPILE([], [ union foo { int i; double d; }; union foo f = (union foo) (int) 0; ], tcl_cv_cast_to_union=yes, tcl_cv_cast_to_union=no) ) if test "$tcl_cv_cast_to_union" = "yes"; then AC_DEFINE(HAVE_CAST_TO_UNION, 1, [Defined when compiler supports casting to union type.]) fi AC_SUBST(CFLAGS_DEBUG) AC_SUBST(CFLAGS_OPTIMIZE) AC_SUBST(CFLAGS_WARNING) AC_SUBST(STLIB_LD) AC_SUBST(SHLIB_LD) |
︙ | ︙ | |||
2319 2320 2321 2322 2323 2324 2325 | # Results: # # Defines only one of the following vars: # HAVE_SYS_MODEM_H # USE_TERMIOS # USE_TERMIO # USE_SGTTY | < | 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 | # Results: # # Defines only one of the following vars: # HAVE_SYS_MODEM_H # USE_TERMIOS # USE_TERMIO # USE_SGTTY #-------------------------------------------------------------------- AC_DEFUN([TEA_SERIAL_PORT], [ AC_CHECK_HEADERS(sys/modem.h) AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [ AC_TRY_RUN([ #include <termios.h> |
︙ | ︙ | |||
2531 2532 2533 2534 2535 2536 2537 | # # Results: # # Sets the following vars: # XINCLUDES # XLIBSW # PKG_LIBS (appends to) | < | | | | | | 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 | # # Results: # # Sets the following vars: # XINCLUDES # XLIBSW # PKG_LIBS (appends to) #-------------------------------------------------------------------- AC_DEFUN([TEA_PATH_X], [ if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then TEA_PATH_UNIX_X fi ]) AC_DEFUN([TEA_PATH_UNIX_X], [ AC_PATH_X not_really_there="" if test "$no_x" = ""; then if test "$x_includes" = ""; then AC_TRY_CPP([#include <X11/Xlib.h>], , not_really_there="yes") else if test ! -r $x_includes/X11/Xlib.h; then not_really_there="yes" fi fi fi if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then AC_MSG_CHECKING([for X11 header files]) found_xincludes="no" AC_TRY_CPP([#include <X11/Xlib.h>], found_xincludes="yes", found_xincludes="no") if test "$found_xincludes" = "no"; then dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include" for i in $dirs ; do if test -r $i/X11/Xlib.h; then AC_MSG_RESULT([$i]) XINCLUDES=" -I$i" found_xincludes="yes" break fi done fi else if test "$x_includes" != ""; then XINCLUDES="-I$x_includes" found_xincludes="yes" fi fi if test "$found_xincludes" = "no"; then AC_MSG_RESULT([couldn't find any!]) fi if test "$no_x" = yes; then AC_MSG_CHECKING([for X11 libraries]) XLIBSW=nope dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib" |
︙ | ︙ | |||
2627 2628 2629 2630 2631 2632 2633 | # Results: # # Defines some of the following vars: # HAVE_SYS_IOCTL_H # HAVE_SYS_FILIO_H # USE_FIONBIO # O_NONBLOCK | < < < < < < < < < < | 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 | # Results: # # Defines some of the following vars: # HAVE_SYS_IOCTL_H # HAVE_SYS_FILIO_H # USE_FIONBIO # O_NONBLOCK #-------------------------------------------------------------------- AC_DEFUN([TEA_BLOCKING_STYLE], [ AC_CHECK_HEADERS(sys/ioctl.h) AC_CHECK_HEADERS(sys/filio.h) TEA_CONFIG_SYSTEM AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O]) case $system in OSF*) AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?]) AC_MSG_RESULT([FIONBIO]) ;; *) AC_MSG_RESULT([O_NONBLOCK]) ;; esac |
︙ | ︙ | |||
2671 2672 2673 2674 2675 2676 2677 | # Results: # # Defines some of the following vars: # USE_DELTA_FOR_TZ # HAVE_TM_GMTOFF # HAVE_TM_TZADJ # HAVE_TIMEZONE_VAR | < | 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 | # Results: # # Defines some of the following vars: # USE_DELTA_FOR_TZ # HAVE_TM_GMTOFF # HAVE_TM_TZADJ # HAVE_TIMEZONE_VAR #-------------------------------------------------------------------- AC_DEFUN([TEA_TIME_HANDLER], [ AC_CHECK_HEADERS(sys/time.h) AC_HEADER_TIME AC_STRUCT_TIMEZONE |
︙ | ︙ | |||
2740 2741 2742 2743 2744 2745 2746 | # Arguments: # none # # Results: # # Might defines some of the following vars: # strtod (=fixstrtod) | < | 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 | # Arguments: # none # # Results: # # Might defines some of the following vars: # strtod (=fixstrtod) #-------------------------------------------------------------------- AC_DEFUN([TEA_BUGGY_STRTOD], [ AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0) if test "$tcl_strtod" = 1; then AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[ AC_TRY_RUN([ |
︙ | ︙ | |||
2785 2786 2787 2788 2789 2790 2791 | # # Search for the libraries needed to link the Tcl shell. # Things like the math library (-lm) and socket stuff (-lsocket vs. # -lnsl) are dealt with here. # # Arguments: # Requires the following vars to be set in the Makefile: | | | < | 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 | # # Search for the libraries needed to link the Tcl shell. # Things like the math library (-lm) and socket stuff (-lsocket vs. # -lnsl) are dealt with here. # # Arguments: # Requires the following vars to be set in the Makefile: # DL_LIBS (not in TEA, only needed in core) # LIBS # MATH_LIBS # # Results: # # Substitutes the following vars: # TCL_LIBS # MATH_LIBS # # Might append to the following vars: # LIBS # # Might define the following vars: # HAVE_NET_ERRNO_H #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_LINK_LIBS], [ #-------------------------------------------------------------------- # On a few very rare systems, all of the libm.a stuff is # already in libc.a. Set compiler flags accordingly. # Also, Linux requires the "ieee" library for math to work |
︙ | ︙ | |||
2878 2879 2880 2881 2882 2883 2884 | # # Results: # # Might define the following vars: # _ISOC99_SOURCE # _LARGEFILE64_SOURCE # _LARGEFILE_SOURCE64 | < | 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 | # # Results: # # Might define the following vars: # _ISOC99_SOURCE # _LARGEFILE64_SOURCE # _LARGEFILE_SOURCE64 #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_EARLY_FLAG],[ AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]), AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no, AC_TRY_COMPILE([[#define ]$1[ 1 ]$2], $3, |
︙ | ︙ | |||
2926 2927 2928 2929 2930 2931 2932 | # # Might define the following vars: # TCL_WIDE_INT_IS_LONG # TCL_WIDE_INT_TYPE # HAVE_STRUCT_DIRENT64 # HAVE_STRUCT_STAT64 # HAVE_TYPE_OFF64_T | < | | | | 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 | # # Might define the following vars: # TCL_WIDE_INT_IS_LONG # TCL_WIDE_INT_TYPE # HAVE_STRUCT_DIRENT64 # HAVE_STRUCT_STAT64 # HAVE_TYPE_OFF64_T #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_64BIT_FLAGS], [ AC_MSG_CHECKING([for 64-bit integer type]) AC_CACHE_VAL(tcl_cv_type_64bit,[ tcl_cv_type_64bit=none # See if the compiler knows natively about __int64 AC_TRY_COMPILE(,[__int64 value = (__int64) 0;], tcl_type_64bit=__int64, tcl_type_64bit="long long") # See if we should use long anyway Note that we substitute in the # type that is our current guess for a 64-bit type inside this check # program, so it should be modified only carefully... AC_TRY_COMPILE(,[switch (0) { case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ; }],tcl_cv_type_64bit=${tcl_type_64bit})]) if test "${tcl_cv_type_64bit}" = none ; then AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Are wide integers to be implemented with C 'long's?]) AC_MSG_RESULT([using long]) elif test "${tcl_cv_type_64bit}" = "__int64" \ -a "${TEA_PLATFORM}" = "windows" ; then # TEA specific: We actually want to use the default tcl.h checks in # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER* AC_MSG_RESULT([using Tcl header defaults]) else AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit}, [What type should be used to define wide integers?]) AC_MSG_RESULT([${tcl_cv_type_64bit}]) # Now check for auxiliary declarations AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[ AC_TRY_COMPILE([#include <sys/types.h> #include <dirent.h>],[struct dirent64 p;], tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)]) if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in <sys/types.h>?]) fi AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[ AC_TRY_COMPILE([#include <sys/stat.h>],[struct stat64 p; |
︙ | ︙ | |||
3028 3029 3030 3031 3032 3033 3034 | # is a lightweight replacement for AC_EXEEXT that doesn't require # a compiler. #------------------------------------------------------------------------ AC_DEFUN([TEA_INIT], [ # TEA extensions pass this us the version of TEA they think they # are compatible with. | | > > > > > > > | > > > > > > > > | | > > > > | 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 | # is a lightweight replacement for AC_EXEEXT that doesn't require # a compiler. #------------------------------------------------------------------------ AC_DEFUN([TEA_INIT], [ # TEA extensions pass this us the version of TEA they think they # are compatible with. TEA_VERSION="3.9" AC_MSG_CHECKING([for correct TEA configuration]) if test x"${PACKAGE_NAME}" = x ; then AC_MSG_ERROR([ The PACKAGE_NAME variable must be defined by your TEA configure.in]) fi if test x"$1" = x ; then AC_MSG_ERROR([ TEA version not specified.]) elif test "$1" != "${TEA_VERSION}" ; then AC_MSG_RESULT([warning: requested TEA version "$1", have "${TEA_VERSION}"]) else AC_MSG_RESULT([ok (TEA ${TEA_VERSION})]) fi # If the user did not set CFLAGS, set it now to keep macros # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2". if test "${CFLAGS+set}" != "set" ; then CFLAGS="" fi case "`uname -s`" in *win32*|*WIN32*|*MINGW32_*) AC_CHECK_PROG(CYGPATH, cygpath, cygpath -w, echo) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *CYGWIN_*) CYGPATH=echo EXEEXT=".exe" # TEA_PLATFORM is determined later in LOAD_TCLCONFIG ;; *) CYGPATH=echo # Maybe we are cross-compiling.... case ${host_alias} in *mingw32*) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *) EXEEXT="" TEA_PLATFORM="unix" ;; esac ;; esac # Check if exec_prefix is set. If not use fall back to prefix. # Note when adjusted, so that TEA_PREFIX can correct for this. # This is needed for recursive configures, since autoconf propagates # $prefix, but not $exec_prefix (doh!). if test x$exec_prefix = xNONE ; then exec_prefix_default=yes exec_prefix=$prefix fi AC_MSG_NOTICE([configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}]) AC_SUBST(EXEEXT) AC_SUBST(CYGPATH) # This package name must be replaced statically for AC_SUBST to work AC_SUBST(PKG_LIB_FILE) # Substitute STUB_LIB_FILE in case package creates a stub library too. |
︙ | ︙ | |||
3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 | ;; *) # check for existence - allows for generic/win/unix VPATH # To add more dirs here (like 'src'), you have to update VPATH # in Makefile.in as well if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ ; then AC_MSG_ERROR([could not find source file '$i']) fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER | > | 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 | ;; *) # check for existence - allows for generic/win/unix VPATH # To add more dirs here (like 'src'), you have to update VPATH # in Makefile.in as well if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then AC_MSG_ERROR([could not find source file '$i']) fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER |
︙ | ︙ | |||
3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 | #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_STUB_SOURCES], [ vars="$@" for i in $vars; do # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ ; then AC_MSG_ERROR([could not find stub source file '$i']) fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER | > | 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 | #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_STUB_SOURCES], [ vars="$@" for i in $vars; do # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then AC_MSG_ERROR([could not find stub source file '$i']) fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER |
︙ | ︙ | |||
3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 | # Defines and substs the following vars: # PKG_CFLAGS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CFLAGS], [ PKG_CFLAGS="$PKG_CFLAGS $@" AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_PREFIX -- # # Handle the --prefix=... option by defaulting to what Tcl gave # # Arguments: | > > > > > > > > > > > > > > > > | 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 | # Defines and substs the following vars: # PKG_CFLAGS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CFLAGS], [ PKG_CFLAGS="$PKG_CFLAGS $@" AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_ADD_CLEANFILES -- # # Specify one or more CLEANFILES. # # Arguments: # one or more file names to clean target # # Results: # # Appends to CLEANFILES, already defined for subst in LOAD_TCLCONFIG #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CLEANFILES], [ CLEANFILES="$CLEANFILES $@" ]) #------------------------------------------------------------------------ # TEA_PREFIX -- # # Handle the --prefix=... option by defaulting to what Tcl gave # # Arguments: |
︙ | ︙ | |||
3356 3357 3358 3359 3360 3361 3362 | # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN([TEA_SETUP_COMPILER_CC], [ # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. | < < < < < < > | > > > > > > | | 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 | # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN([TEA_SETUP_COMPILER_CC], [ # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. AC_PROG_CC AC_PROG_CPP INSTALL="\$(SHELL) \$(srcdir)/tclconfig/install-sh -c" AC_SUBST(INSTALL) INSTALL_DATA="\${INSTALL} -m 644" AC_SUBST(INSTALL_DATA) INSTALL_PROGRAM="\${INSTALL}" AC_SUBST(INSTALL_PROGRAM) INSTALL_SCRIPT="\${INSTALL}" AC_SUBST(INSTALL_SCRIPT) #-------------------------------------------------------------------- # Checks to see if the make program sets the $MAKE variable. #-------------------------------------------------------------------- AC_PROG_MAKE_SET #-------------------------------------------------------------------- # Find ranlib #-------------------------------------------------------------------- AC_CHECK_TOOL(RANLIB, ranlib) #-------------------------------------------------------------------- # Determines the correct binary file extension (.o, .obj, .exe etc.) #-------------------------------------------------------------------- AC_OBJEXT AC_EXEEXT |
︙ | ︙ | |||
3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 | # CFLAGS - Done late here to note disturb other AC macros # MAKE_LIB - Command to execute to build the Tcl library; # differs depending on whether or not Tcl is being # compiled as a shared library. # MAKE_SHARED_LIB Makefile rule for building a shared library # MAKE_STATIC_LIB Makefile rule for building a static library # MAKE_STUB_LIB Makefile rule for building a stub library #------------------------------------------------------------------------ AC_DEFUN([TEA_MAKE_LIB], [ if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)" | > > > > > > > > > > > > > | | 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 | # CFLAGS - Done late here to note disturb other AC macros # MAKE_LIB - Command to execute to build the Tcl library; # differs depending on whether or not Tcl is being # compiled as a shared library. # MAKE_SHARED_LIB Makefile rule for building a shared library # MAKE_STATIC_LIB Makefile rule for building a static library # MAKE_STUB_LIB Makefile rule for building a stub library # VC_MANIFEST_EMBED_DLL Makefile rule for embedded VC manifest in DLL # VC_MANIFEST_EMBED_EXE Makefile rule for embedded VC manifest in EXE #------------------------------------------------------------------------ AC_DEFUN([TEA_MAKE_LIB], [ if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)" AC_EGREP_CPP([manifest needed], [ #if defined(_MSC_VER) && _MSC_VER >= 1400 print("manifest needed") #endif ], [ # Could do a CHECK_PROG for mt, but should always be with MSVC8+ VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;2 ; fi" VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;1 ; fi" MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}" TEA_ADD_CLEANFILES([*.manifest]) ]) MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\[$]@ \$(PKG_STUB_OBJECTS)" else MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}" MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)" fi if test "${SHARED_BUILD}" = "1" ; then |
︙ | ︙ | |||
3485 3486 3487 3488 3489 3490 3491 | # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. | < > > > > > > > | 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 | # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\"" fi SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\"" if test "$GCC" = "yes"; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -static-libgcc" fi eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" else eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_LIB_FILE=lib${PKG_LIB_FILE} fi fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE} fi # These aren't needed on Windows (either MSVC or gcc) |
︙ | ︙ | |||
3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 | fi AC_SUBST(MAKE_LIB) AC_SUBST(MAKE_SHARED_LIB) AC_SUBST(MAKE_STATIC_LIB) AC_SUBST(MAKE_STUB_LIB) AC_SUBST(RANLIB_STUB) ]) #------------------------------------------------------------------------ # TEA_LIB_SPEC -- # # Compute the name of an existing object library located in libdir # from the given base name and produce the appropriate linker flags. | > > | 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 | fi AC_SUBST(MAKE_LIB) AC_SUBST(MAKE_SHARED_LIB) AC_SUBST(MAKE_STATIC_LIB) AC_SUBST(MAKE_STUB_LIB) AC_SUBST(RANLIB_STUB) AC_SUBST(VC_MANIFEST_EMBED_DLL) AC_SUBST(VC_MANIFEST_EMBED_EXE) ]) #------------------------------------------------------------------------ # TEA_LIB_SPEC -- # # Compute the name of an existing object library located in libdir # from the given base name and produce the appropriate linker flags. |
︙ | ︙ | |||
3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 | for i in \ `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do if test -f "$i" ; then tea_lib_name_dir=`dirname $i` $1_LIB_NAME=`basename $i` $1_LIB_PATH_NAME=$i break | > > | 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 | for i in \ `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib64/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib64/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do if test -f "$i" ; then tea_lib_name_dir=`dirname $i` $1_LIB_NAME=`basename $i` $1_LIB_PATH_NAME=$i break |
︙ | ︙ | |||
3615 3616 3617 3618 3619 3620 3621 | # # Requires: # TCL_SRC_DIR Assumes that TEA_LOAD_TCLCONFIG has # already been called. # # Results: # | | | 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 | # # Requires: # TCL_SRC_DIR Assumes that TEA_LOAD_TCLCONFIG has # already been called. # # Results: # # Substitutes the following vars: # TCL_TOP_DIR_NATIVE # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PRIVATE_TCL_HEADERS], [ # Allow for --with-tclinclude to take effect and define ${ac_cv_c_tclh} AC_REQUIRE([TEA_PUBLIC_TCL_HEADERS]) |
︙ | ︙ | |||
3693 3694 3695 3696 3697 3698 3699 | # CYGPATH must be set # # Results: # # Adds a --with-tclinclude switch to configure. # Result is cached. # | | | 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 | # CYGPATH must be set # # Results: # # Adds a --with-tclinclude switch to configure. # Result is cached. # # Substitutes the following vars: # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PUBLIC_TCL_HEADERS], [ AC_MSG_CHECKING([for Tcl public headers]) AC_ARG_WITH(tclinclude, [ --with-tclinclude directory containing the public Tcl header files], with_tclinclude=${withval}) |
︙ | ︙ | |||
3783 3784 3785 3786 3787 3788 3789 | # # Requires: # TK_SRC_DIR Assumes that TEA_LOAD_TKCONFIG has # already been called. # # Results: # | | | 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 | # # Requires: # TK_SRC_DIR Assumes that TEA_LOAD_TKCONFIG has # already been called. # # Results: # # Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PRIVATE_TK_HEADERS], [ # Allow for --with-tkinclude to take effect and define ${ac_cv_c_tkh} AC_REQUIRE([TEA_PUBLIC_TK_HEADERS]) AC_MSG_CHECKING([for Tk private include files]) |
︙ | ︙ | |||
3872 3873 3874 3875 3876 3877 3878 | # CYGPATH must be set # # Results: # # Adds a --with-tkinclude switch to configure. # Result is cached. # | | | 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 | # CYGPATH must be set # # Results: # # Adds a --with-tkinclude switch to configure. # Result is cached. # # Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PUBLIC_TK_HEADERS], [ AC_MSG_CHECKING([for Tk public headers]) AC_ARG_WITH(tkinclude, [ --with-tkinclude directory containing the public Tk header files], with_tkinclude=${withval}) |
︙ | ︙ | |||
4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 | if test x"${ac_cv_c_$1config}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi done fi | > | 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 | if test x"${ac_cv_c_$1config}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi done fi |
︙ | ︙ | |||
4089 4090 4091 4092 4093 4094 4095 | # Arguments: # # Requires the following vars to be set: # $1_BIN_DIR # # Results: # | | < | 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 | # Arguments: # # Requires the following vars to be set: # $1_BIN_DIR # # Results: # # Substitutes the following vars: # $1_SRC_DIR # $1_LIB_FILE # $1_LIB_SPEC #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG], [ AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh]) if test -f "${$1_BIN_DIR}/$1Config.sh" ; then AC_MSG_RESULT([loading]) |
︙ | ︙ | |||
4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 | # if test -f "${$1_BIN_DIR}/Makefile" ; then AC_MSG_WARN([Found Makefile - using build library specs for $1]) $1_LIB_SPEC=${$1_BUILD_LIB_SPEC} $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC} $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH} fi AC_SUBST($1_VERSION) AC_SUBST($1_BIN_DIR) AC_SUBST($1_SRC_DIR) AC_SUBST($1_LIB_FILE) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_STUB_LIB_FILE) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_PATH) | > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 | # if test -f "${$1_BIN_DIR}/Makefile" ; then AC_MSG_WARN([Found Makefile - using build library specs for $1]) $1_LIB_SPEC=${$1_BUILD_LIB_SPEC} $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC} $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH} $1_INCLUDE_SPEC=${$1_BUILD_INCLUDE_SPEC} $1_LIBRARY_PATH=${$1_LIBRARY_PATH} fi AC_SUBST($1_VERSION) AC_SUBST($1_BIN_DIR) AC_SUBST($1_SRC_DIR) AC_SUBST($1_LIB_FILE) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_STUB_LIB_FILE) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_PATH) # Allow the caller to prevent this auto-check by specifying any 2nd arg AS_IF([test "x$2" = x], [ # Check both upper and lower-case variants # If a dev wanted non-stubs libs, this function could take an option # to not use _STUB in the paths below AS_IF([test "x${$1_STUB_LIB_SPEC}" = x], [TEA_LOAD_CONFIG_LIB(translit($1,[a-z],[A-Z])_STUB)], [TEA_LOAD_CONFIG_LIB($1_STUB)]) ]) ]) #------------------------------------------------------------------------ # TEA_LOAD_CONFIG_LIB -- # # Helper function to load correct library from another extension's # ${PACKAGE}Config.sh. # # Results: # Adds to LIBS the appropriate extension library #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG_LIB], [ AC_MSG_CHECKING([For $1 library for LIBS]) # This simplifies the use of stub libraries by automatically adding # the stub lib to your path. Normally this would add to SHLIB_LD_LIBS, # but this is called before CONFIG_CFLAGS. More importantly, this adds # to PKG_LIBS, which becomes LIBS, and that is only used by SHLIB_LD. if test "x${$1_LIB_SPEC}" != "x" ; then if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes" ; then TEA_ADD_LIBS([\"`${CYGPATH} ${$1_LIB_PATH}`\"]) AC_MSG_RESULT([using $1_LIB_PATH ${$1_LIB_PATH}]) else TEA_ADD_LIBS([${$1_LIB_SPEC}]) AC_MSG_RESULT([using $1_LIB_SPEC ${$1_LIB_SPEC}]) fi else AC_MSG_RESULT([file not found]) fi ]) #------------------------------------------------------------------------ # TEA_EXPORT_CONFIG -- # # Define the data to insert into the ${PACKAGE}Config.sh file # # Arguments: # # Requires the following vars to be set: # $1 # # Results: # Substitutes the following vars: #------------------------------------------------------------------------ AC_DEFUN([TEA_EXPORT_CONFIG], [ #-------------------------------------------------------------------- # These are for $1Config.sh #-------------------------------------------------------------------- # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib) eval pkglibdir="[$]{libdir}/$1${PACKAGE_VERSION}" if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then eval $1_LIB_FLAG="-l$1${PACKAGE_VERSION}${DBGX}" eval $1_STUB_LIB_FLAG="-l$1stub${PACKAGE_VERSION}${DBGX}" else eval $1_LIB_FLAG="-l$1`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}" eval $1_STUB_LIB_FLAG="-l$1stub`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}" fi $1_BUILD_LIB_SPEC="-L`pwd` ${$1_LIB_FLAG}" $1_LIB_SPEC="-L${pkglibdir} ${$1_LIB_FLAG}" $1_BUILD_STUB_LIB_SPEC="-L`pwd` [$]{$1_STUB_LIB_FLAG}" $1_STUB_LIB_SPEC="-L${pkglibdir} [$]{$1_STUB_LIB_FLAG}" $1_BUILD_STUB_LIB_PATH="`pwd`/[$]{PKG_STUB_LIB_FILE}" $1_STUB_LIB_PATH="${pkglibdir}/[$]{PKG_STUB_LIB_FILE}" AC_SUBST($1_BUILD_LIB_SPEC) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_BUILD_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_BUILD_STUB_LIB_PATH) AC_SUBST($1_STUB_LIB_PATH) AC_SUBST(MAJOR_VERSION) AC_SUBST(MINOR_VERSION) AC_SUBST(PATCHLEVEL) ]) #------------------------------------------------------------------------ # TEA_PATH_CELIB -- # # Locate Keuchel's celib emulation layer for targeting Win/CE # # Arguments: |
︙ | ︙ | |||
4200 4201 4202 4203 4204 4205 4206 | no_celib= CELIB_DIR=${ac_cv_c_celibconfig} CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` AC_MSG_RESULT([found $CELIB_DIR]) fi fi ]) | < < | 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 | no_celib= CELIB_DIR=${ac_cv_c_celibconfig} CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` AC_MSG_RESULT([found $CELIB_DIR]) fi fi ]) # Local Variables: # mode: autoconf # End: |
Added jni/xotcl/library/store/XOTclSdbm/tclconfig/install-sh.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 | #!/bin/sh # install - install a program, script, or datafile scriptversion=2011-04-20.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -S $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -S) stripcmd="$stripprog $2" shift;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: |
Changes to jni/xotcl/library/store/pkgIndex.tcl.
1 2 3 4 5 6 7 8 9 10 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded xotcl::store 1.0 [list source [file join $dir Storage.xotcl]] package ifneeded xotcl::store::jufgdbm 0.81 [list source [file join $dir JufGdbmStorage.xotcl]] package ifneeded xotcl::store::mem 0.84 [list source [file join $dir MemStorage.xotcl]] package ifneeded xotcl::store::multi 1.0 [list source [file join $dir MultiStorage.xotcl]] package ifneeded xotcl::store::persistence 1.0 [list source [file join $dir Persistence.xotcl]] package ifneeded xotcl::store::tclgdbm 0.84 [list source [file join $dir TclGdbmStorage.xotcl]] package ifneeded xotcl::store::textfile 1.0 [list source [file join $dir TextFileStorage.xotcl]] set __store_dir__ $dir foreach index [glob -nocomplain [file join $dir * pkgIndex.tcl]] { set dir [file dirname $index] #puts subdir=$dir,index=$index source $index } set dir $__store_dir__ |
︙ | ︙ |
Changes to jni/xotcl/library/xml/COPYRIGHT.
1 2 | * XOTcl - Extended OTcl * | > | | 1 2 3 4 5 6 7 8 9 10 11 | * XOTcl - Extended OTcl * * Copyright (C) 1999-2014 Gustaf Neumann (a) (b) * Copyright (C) 1999-2007 Uwe Zdun (a) (b) * * (a) Vienna University of Economics and Business Administration * Dept. of Information Systems / New Media * A-1090, Augasse 2-6 * Vienna, Austria * * (b) University of Essen |
︙ | ︙ |
Changes to jni/xotcl/library/xml/TclExpat-1.1/Makefile.in.
︙ | ︙ | |||
66 67 68 69 70 71 72 73 74 75 76 77 78 79 | BINARIES = $(lib_BINARIES) SHELL = @SHELL@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ datadir = @datadir@ mandir = @mandir@ includedir = @includedir@ | > | 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | BINARIES = $(lib_BINARIES) SHELL = @SHELL@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ bindir = @bindir@ libdir = @libdir@ datadir = @datadir@ mandir = @mandir@ includedir = @includedir@ |
︙ | ︙ |
Changes to jni/xotcl/library/xml/TclExpat-1.1/configure.
more than 10,000 changes
Added jni/xotcl/library/xml/TclExpat-1.1/configure.ac.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 | #!/bin/bash -norc dnl This file is an input file used by the GNU "autoconf" program to dnl generate the file "configure", which is run during Tcl installation dnl to configure the system for the local environment. # # RCS: @(#) $Id: configure.in,v 1.20 2007/10/12 19:53:32 neumann Exp $ #----------------------------------------------------------------------- # Sample configure.in for Tcl Extensions. The only places you should # need to modify this file are marked by the string __CHANGE__ #----------------------------------------------------------------------- configdir=$(srcdir)/../../../tclconfig #----------------------------------------------------------------------- # __CHANGE__ # Set your package name and version numbers here. # # This initializes the environment with PACKAGE_NAME and PACKAGE_VERSION # set as provided. These will also be added as -D defs in your Makefile # so you can encode the package version directly into the source files. #----------------------------------------------------------------------- AC_INIT([xotclexpat], [0.9]) #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. # This will define a ${TEA_PLATFORM} variable == "unix" or "windows" # as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE. #-------------------------------------------------------------------- TEA_INIT([3.9]) AC_CONFIG_AUX_DIR([../../../tclconfig]) #-------------------------------------------------------------------- # specify some extra flags #-------------------------------------------------------------------- AC_ARG_WITH([xotcl], [ --with-xotcl=DIR_CONTAINING_XOTCLCONFIG_SH absolute path to xotclConfig.sh, --without-xotcl disables, but this is pointless], [with_xotcl=$withval], [AC_MSG_ERROR([--with-xotcl is required])]) AC_ARG_WITH([expat], [ --with-expat=sys assumes a system-wide expat installation, --with-expat=<INC_DIR,LIB_DIR> point to a custom expat installation, --without-expat falls back to the bundled expat installation], [with_expat=$withval],[with_expat=bundle]) case $with_expat in bundle) ;; sys) AC_MSG_RESULT([search for expat in ${prefix} /usr/local /usr]) for f in $prefix /usr/local /usr; do if test -f "$f/include/expat.h" ; then expat_dir=$f EXPAT_INC_SPEC="-I`(cd $inc_dir; pwd)`" break fi done ;; *) inc_dir="`echo $with_expat |cut -f1 -d,`" lib_dir="`echo $with_expat |cut -f2 -d, -s`" if test -f "$inc_dir/expat.h"; then EXPAT_INC_SPEC="-I`(cd $inc_dir; pwd)`" else AC_MSG_ERROR([${inc_dir} directory does not contain expat.h]) fi expat_dir="`(cd $inc_dir/..; pwd)`" if test -z "${lib_dir}"; then EXPAT_LIB_SPEC="" else EXPAT_LIB_SPEC="-L`(cd $lib_dir; pwd)`" fi esac #-------------------------------------------------------------------- # Load the tclConfig.sh file #-------------------------------------------------------------------- TEA_PATH_TCLCONFIG TEA_LOAD_TCLCONFIG #-------------------------------------------------------------------- # Load the tkConfig.sh file if necessary (Tk extension) #-------------------------------------------------------------------- #TEA_PATH_TKCONFIG #TEA_LOAD_TKCONFIG #----------------------------------------------------------------------- # Handle the --prefix=... option by defaulting to what Tcl gave. # Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER. #----------------------------------------------------------------------- TEA_PREFIX #----------------------------------------------------------------------- # Standard compiler checks. # This sets up CC by using the CC env var, or looks for gcc otherwise. # This also calls AC_PROG_CC, AC_PROG_INSTALL and a few others to create # the basic setup necessary to compile executables. #----------------------------------------------------------------------- TEA_SETUP_COMPILER #-------------------------------------------------------------------- # Load the xotclConfig.sh file #-------------------------------------------------------------------- AC_MSG_NOTICE([Reading file ${with_xotcl}/xotclConfig.sh]) source ${with_xotcl}/xotclConfig.sh #----------------------------------------------------------------------- # __CHANGE__ # Specify the C source files to compile in TEA_ADD_SOURCES, # public headers that need to be installed in TEA_ADD_HEADERS, # stub library C source files to compile in TEA_ADD_STUB_SOURCES, # and runtime Tcl library files in TEA_ADD_TCL_SOURCES. # This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS # and PKG_TCL_SOURCES. #----------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then filemap="win32filemap.c" else filemap="unixfilemap.c" fi # # general fallback to the bundled expat # if test "${expat_dir}" = ""; then with_expat="bundle" fi if test "${with_expat}" = bundle ; then # 1) the bundled case AC_MSG_RESULT([using bundled expat distribution]) TEA_ADD_SOURCES([xmltok.c ${filemap} xmlrole.c xmlwf.c codepage.c xmlparse.c hashtable.c tclexpat.c]) else # 2) the shared case AC_MSG_RESULT([using shared expat found in ${expat_dir}]) TEA_ADD_SOURCES([tclexpat.c]) TEA_ADD_INCLUDES([${EXPAT_INC_SPEC}]) TEA_ADD_LIBS([${EXPAT_LIB_SPEC} -lexpat]) fi TEA_ADD_HEADERS([]) TEA_ADD_INCLUDES([-I${with_xotcl}/generic ${XOTCL_BUILD_INCLUDE_SPEC}]) TEA_ADD_LIBS([$XOTCL_BUILD_STUB_LIB_SPEC]) TEA_ADD_CFLAGS([]) TEA_ADD_STUB_SOURCES([]) TEA_ADD_TCL_SOURCES([]) #-------------------------------------------------------------------- # __CHANGE__ # A few miscellaneous platform-specific items: # # Define a special symbol for Windows (BUILD_sample in this case) so # that we create the export library with the dll. # # Windows creates a few extra files that need to be cleaned up. # You can add more files to clean if your extension creates any extra # files. # # TEA_ADD_* any platform specific compiler/build info here. #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then AC_DEFINE([BUILD_sample]) CLEANFILES="pkgIndex.tcl *.lib *.dll *.exp *.ilk *.pdb vc*.pch" #TEA_ADD_SOURCES([win/winFile.c]) #TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/win)\"]) else CLEANFILES="pkgIndex.tcl" #TEA_ADD_SOURCES([unix/unixFile.c]) #TEA_ADD_LIBS([-lsuperfly]) fi AC_SUBST([CLEANFILES]) #-------------------------------------------------------------------- # __CHANGE__ # Choose which headers you need. Extension authors should try very # hard to only rely on the Tcl public header files. Internal headers # contain private data structures and are subject to change without # notice. # This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG #-------------------------------------------------------------------- TEA_PUBLIC_TCL_HEADERS #TEA_PRIVATE_TCL_HEADERS #TEA_PUBLIC_TK_HEADERS #TEA_PRIVATE_TK_HEADERS #TEA_PATH_X #-------------------------------------------------------------------- # Check whether --enable-threads or --disable-threads was given. #-------------------------------------------------------------------- TEA_ENABLE_THREADS #-------------------------------------------------------------------- # The statement below defines a collection of symbols related to # building as a shared library instead of a static library. #-------------------------------------------------------------------- TEA_ENABLE_SHARED #-------------------------------------------------------------------- # This macro figures out what flags to use with the compiler/linker # when building shared/static debug/optimized objects. This information # can be taken from the tclConfig.sh file, but this figures it all out. #-------------------------------------------------------------------- TEA_CONFIG_CFLAGS #-------------------------------------------------------------------- # Set the default compiler switches based on the --enable-symbols option. #-------------------------------------------------------------------- TEA_ENABLE_SYMBOLS #-------------------------------------------------------------------- # Everyone should be linking against the Tcl stub library. If you # can't for some reason, remove this definition. If you aren't using # stubs, you also need to modify the SHLIB_LD_LIBS setting below to # link against the non-stubbed Tcl library. Add Tk too if necessary. #-------------------------------------------------------------------- AC_DEFINE([USE_TCL_STUBS]) #AC_DEFINE([USE_TK_STUBS]) #-------------------------------------------------------------------- # This macro generates a line to use when building a library. It # depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS, # and TEA_LOAD_TCLCONFIG macros above. #-------------------------------------------------------------------- TEA_MAKE_LIB #-------------------------------------------------------------------- # Find tclsh so that we can run pkg_mkIndex to generate the pkgIndex.tcl # file during the install process. Don't run the TCLSH_PROG through # ${CYGPATH} because it's being used directly by make. # Require that we use a tclsh shell version 8.2 or later since earlier # versions have bugs in the pkg_mkIndex routine. # Add WISH as well if this is a Tk extension. #-------------------------------------------------------------------- TEA_PROG_TCLSH #TEA_PROG_WISH #-------------------------------------------------------------------- # Finally, substitute all of the various values into the Makefile. # You may alternatively have a special pkgIndex.tcl.in or other files # which require substituting th AC variables in. Include these here. #-------------------------------------------------------------------- AC_OUTPUT([Makefile]) |
Deleted jni/xotcl/library/xml/TclExpat-1.1/configure.in.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to jni/xotcl/library/xml/TclExpat-1.1/dllEntryPoint.c.
1 2 | /* * dllEntryPoint.c -- | < | 1 2 3 4 5 6 7 8 9 | /* * dllEntryPoint.c -- * * This file implements the Dll entry point as needed by Windows. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #if defined(_MSC_VER) |
︙ | ︙ |
Changes to jni/xotcl/library/xml/TclExpat-1.1/tcl.m4.
1 2 3 4 5 6 7 8 9 10 | # tcl.m4 -- # # This file provides a set of autoconf macros to help TEA-enable # a Tcl extension. # # Copyright (c) 1999-2000 Ajuba Solutions. # Copyright (c) 2002-2005 ActiveState Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. | < < | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # tcl.m4 -- # # This file provides a set of autoconf macros to help TEA-enable # a Tcl extension. # # Copyright (c) 1999-2000 Ajuba Solutions. # Copyright (c) 2002-2005 ActiveState Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. AC_PREREQ(2.57) dnl TEA extensions pass us the version of TEA they think they dnl are compatible with (must be set in TEA_INIT below) dnl TEA_VERSION="3.9" # Possible values for key variables defined: # # TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem') # TEA_PLATFORM - windows unix # |
︙ | ︙ | |||
53 54 55 56 57 58 59 | if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true AC_ARG_WITH(tcl, AC_HELP_STRING([--with-tcl], [directory containing tcl configuration (tclConfig.sh)]), | | | | | | | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true AC_ARG_WITH(tcl, AC_HELP_STRING([--with-tcl], [directory containing tcl configuration (tclConfig.sh)]), with_tclconfig="${withval}") AC_MSG_CHECKING([for Tcl configuration]) AC_CACHE_VAL(ac_cv_c_tclconfig,[ # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then case "${with_tclconfig}" in */tclConfig.sh ) if test -f "${with_tclconfig}"; then AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself]) with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`" fi ;; esac if test -f "${with_tclconfig}/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`" else AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh]) fi fi # then check for a private Tcl installation if test x"${ac_cv_c_tclconfig}" = x ; then |
︙ | ︙ | |||
90 91 92 93 94 95 96 | `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then | | | | | > > > | | | | | | | | 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 | `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tcl.framework/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ `ls -d /usr/lib/tcl8.6 2>/dev/null` \ `ls -d /usr/lib/tcl8.5 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ${srcdir}/../tcl \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi ]) if test x"${ac_cv_c_tclconfig}" = x ; then TCL_BIN_DIR="# no Tcl configs found" AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh]) else no_tcl= TCL_BIN_DIR="${ac_cv_c_tclconfig}" AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_PATH_TKCONFIG -- |
︙ | ︙ | |||
205 206 207 208 209 210 211 | if test x"${no_tk}" = x ; then # we reset no_tk in case something fails here no_tk=true AC_ARG_WITH(tk, AC_HELP_STRING([--with-tk], [directory containing tk configuration (tkConfig.sh)]), | | | | | | | 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 | if test x"${no_tk}" = x ; then # we reset no_tk in case something fails here no_tk=true AC_ARG_WITH(tk, AC_HELP_STRING([--with-tk], [directory containing tk configuration (tkConfig.sh)]), with_tkconfig="${withval}") AC_MSG_CHECKING([for Tk configuration]) AC_CACHE_VAL(ac_cv_c_tkconfig,[ # First check to see if --with-tkconfig was specified. if test x"${with_tkconfig}" != x ; then case "${with_tkconfig}" in */tkConfig.sh ) if test -f "${with_tkconfig}"; then AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself]) with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`" fi ;; esac if test -f "${with_tkconfig}/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`" else AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh]) fi fi # then check for a private Tk library if test x"${ac_cv_c_tkconfig}" = x ; then |
︙ | ︙ | |||
242 243 244 245 246 247 248 | `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tk \ `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then | | | | > | | | | | | | < | 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 | `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tk \ `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tk.framework/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ${srcdir}/../tk \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi ]) if test x"${ac_cv_c_tkconfig}" = x ; then TK_BIN_DIR="# no Tk configs found" AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh]) else no_tk= TK_BIN_DIR="${ac_cv_c_tkconfig}" AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_LOAD_TCLCONFIG -- # # Load the tclConfig.sh file # # Arguments: # # Requires the following vars to be set: # TCL_BIN_DIR # # Results: # # Substitutes the following vars: # TCL_BIN_DIR # TCL_SRC_DIR # TCL_LIB_FILE #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_TCLCONFIG], [ AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh]) if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then AC_MSG_RESULT([loading]) |
︙ | ︙ | |||
366 367 368 369 370 371 372 | # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TCL_BIN_DIR}/Makefile" ; then | | | | | | | | > < < | | > > | > | < < < < | > > | | > | > > > > | < < < < > > > | 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 | # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TCL_BIN_DIR}/Makefile" ; then TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}" TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}" TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tcl.framework installed in an arbitrary location. case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then for i in "`cd "${TCL_BIN_DIR}"; pwd`" \ "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}" break fi done fi if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}" TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" AC_SUBST(TCL_VERSION) AC_SUBST(TCL_PATCH_LEVEL) AC_SUBST(TCL_BIN_DIR) AC_SUBST(TCL_SRC_DIR) AC_SUBST(TCL_LIB_FILE) AC_SUBST(TCL_LIB_FLAG) AC_SUBST(TCL_LIB_SPEC) AC_SUBST(TCL_STUB_LIB_FILE) AC_SUBST(TCL_STUB_LIB_FLAG) AC_SUBST(TCL_STUB_LIB_SPEC) AC_MSG_CHECKING([platform]) hold_cc=$CC; CC="$TCL_CC" AC_TRY_COMPILE(,[ #ifdef _WIN32 #error win32 #endif ], TEA_PLATFORM="unix", TEA_PLATFORM="windows" ) CC=$hold_cc AC_MSG_RESULT($TEA_PLATFORM) # The BUILD_$pkg is to define the correct extern storage class # handling when making this package AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}, [], [Building extension source?]) # Do this here as we have fully defined TEA_PLATFORM now if test "${TEA_PLATFORM}" = "windows" ; then EXEEXT=".exe" CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp" fi # TEA specific: AC_SUBST(CLEANFILES) AC_SUBST(TCL_LIBS) AC_SUBST(TCL_DEFS) AC_SUBST(TCL_EXTRA_CFLAGS) AC_SUBST(TCL_LD_FLAGS) AC_SUBST(TCL_SHLIB_LD_LIBS) ]) |
︙ | ︙ | |||
475 476 477 478 479 480 481 | # If the TK_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TK_LIB_SPEC will be set to the value # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC # instead of TK_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TK_BIN_DIR}/Makefile" ; then | | | | | | | | | 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 | # If the TK_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TK_LIB_SPEC will be set to the value # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC # instead of TK_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TK_BIN_DIR}/Makefile" ; then TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}" TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}" TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tk.framework installed in an arbitrary location. case ${TK_DEFS} in *TK_FRAMEWORK*) if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then for i in "`cd "${TK_BIN_DIR}"; pwd`" \ "`cd "${TK_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}" break fi done fi if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}" TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TK_DBGX substitution |
︙ | ︙ | |||
550 551 552 553 554 555 556 | # directory. This macro will correctly determine the name # of the tclsh executable even if tclsh has not yet been # built in the build directory. The tclsh found is always # associated with a tclConfig.sh file. This tclsh should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # | | | | | 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 | # directory. This macro will correctly determine the name # of the tclsh executable even if tclsh has not yet been # built in the build directory. The tclsh found is always # associated with a tclConfig.sh file. This tclsh should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # # Arguments: # none # # Results: # Substitutes the following vars: # TCLSH_PROG #------------------------------------------------------------------------ AC_DEFUN([TEA_PROG_TCLSH], [ AC_MSG_CHECKING([for tclsh]) if test -f "${TCL_BIN_DIR}/Makefile" ; then # tclConfig.sh is in Tcl build directory |
︙ | ︙ | |||
600 601 602 603 604 605 606 | # directory. This macro will correctly determine the name # of the wish executable even if wish has not yet been # built in the build directory. The wish found is always # associated with a tkConfig.sh file. This wish should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # | | | | | 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 | # directory. This macro will correctly determine the name # of the wish executable even if wish has not yet been # built in the build directory. The wish found is always # associated with a tkConfig.sh file. This wish should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # # Arguments: # none # # Results: # Substitutes the following vars: # WISH_PROG #------------------------------------------------------------------------ AC_DEFUN([TEA_PROG_WISH], [ AC_MSG_CHECKING([for wish]) if test -f "${TK_BIN_DIR}/Makefile" ; then # tkConfig.sh is in Tk build directory |
︙ | ︙ | |||
646 647 648 649 650 651 652 | #------------------------------------------------------------------------ # TEA_ENABLE_SHARED -- # # Allows the building of shared libraries # # Arguments: # none | | | 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 | #------------------------------------------------------------------------ # TEA_ENABLE_SHARED -- # # Allows the building of shared libraries # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-shared=yes|no # # Defines the following vars: # STATIC_BUILD Used for building import/export libraries |
︙ | ︙ | |||
702 703 704 705 706 707 708 | # # Note that it is legal to have a thread enabled extension run in a # threaded or non-threaded Tcl core, but a non-threaded extension may # only run in a non-threaded Tcl core. # # Arguments: # none | | < | 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 | # # Note that it is legal to have a thread enabled extension run in a # threaded or non-threaded Tcl core, but a non-threaded extension may # only run in a non-threaded Tcl core. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-threads # # Sets the following vars: # THREADS_LIBS Thread library(s) # # Defines the following vars: # TCL_THREADS # _REENTRANT # _THREAD_SAFE #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_THREADS], [ AC_ARG_ENABLE(threads, AC_HELP_STRING([--enable-threads], [build with threads]), [tcl_ok=$enableval], [tcl_ok=yes]) |
︙ | ︙ | |||
839 840 841 842 843 844 845 | # Results: # # Adds the following arguments to configure: # --enable-symbols # # Defines the following vars: # CFLAGS_DEFAULT Sets to $(CFLAGS_DEBUG) if true | | < | | 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 | # Results: # # Adds the following arguments to configure: # --enable-symbols # # Defines the following vars: # CFLAGS_DEFAULT Sets to $(CFLAGS_DEBUG) if true # Sets to "$(CFLAGS_OPTIMIZE) -DNDEBUG" if false # LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true # Sets to $(LDFLAGS_OPTIMIZE) if false # DBGX Formerly used as debug library extension; # always blank now. #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_SYMBOLS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_CONFIG_CFLAGS]) AC_MSG_CHECKING([for build with symbols]) AC_ARG_ENABLE(symbols, AC_HELP_STRING([--enable-symbols], [build with debugging symbols (default: off)]), [tcl_ok=$enableval], [tcl_ok=no]) DBGX="" if test "$tcl_ok" = "no"; then CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG" LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" AC_MSG_RESULT([no]) else CFLAGS_DEFAULT="${CFLAGS_DEBUG}" LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" if test "$tcl_ok" = "yes"; then AC_MSG_RESULT([yes (standard debugging)]) |
︙ | ︙ | |||
904 905 906 907 908 909 910 | # Results: # # Adds the following arguments to configure: # --enable-langinfo=yes|no (default is yes) # # Defines the following vars: # HAVE_LANGINFO Triggers use of nl_langinfo if defined. | < | 907 908 909 910 911 912 913 914 915 916 917 918 919 920 | # Results: # # Adds the following arguments to configure: # --enable-langinfo=yes|no (default is yes) # # Defines the following vars: # HAVE_LANGINFO Triggers use of nl_langinfo if defined. #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_LANGINFO], [ AC_ARG_ENABLE(langinfo, AC_HELP_STRING([--enable-langinfo], [use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic (default: on)]), [langinfo_ok=$enableval], [langinfo_ok=yes]) |
︙ | ︙ | |||
936 937 938 939 940 941 942 | ]) #-------------------------------------------------------------------- # TEA_CONFIG_SYSTEM # # Determine what the system is (some things cannot be easily checked # on a feature-driven basis, alas). This can usually be done via the | | < < < < < < < < < < | 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 | ]) #-------------------------------------------------------------------- # TEA_CONFIG_SYSTEM # # Determine what the system is (some things cannot be easily checked # on a feature-driven basis, alas). This can usually be done via the # "uname" command. # # Arguments: # none # # Results: # Defines the following var: # # system - System/platform/version identification code. #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_SYSTEM], [ AC_CACHE_CHECK([system version], tcl_cv_sys_version, [ # TEA specific: if test "${TEA_PLATFORM}" = "windows" ; then tcl_cv_sys_version=windows else tcl_cv_sys_version=`uname -s`-`uname -r` if test "$?" -ne 0 ; then AC_MSG_WARN([can't find uname command]) tcl_cv_sys_version=unknown else if test "`uname -s`" = "AIX" ; then tcl_cv_sys_version=AIX-`uname -v`.`uname -r` fi fi fi ]) system=$tcl_cv_sys_version |
︙ | ︙ | |||
990 991 992 993 994 995 996 | # Arguments: # none # # Results: # # Defines and substitutes the following vars: # | < < | < | | | | < < < | < < < < < < < < | 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 | # Arguments: # none # # Results: # # Defines and substitutes the following vars: # # DL_OBJS, DL_LIBS - removed for TEA, only needed by core. # LDFLAGS - Flags to pass to the compiler when linking object # files into an executable application binary such # as tclsh. # LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. Could # be the same as CC_SEARCH_FLAGS if ${CC} is used to link. # CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. # SHLIB_CFLAGS - Flags to pass to cc when compiling the components # of a shared library (may request position-independent # code, among other things). # SHLIB_LD - Base command to use for combining object files # into a shared library. # SHLIB_LD_LIBS - Dependent libraries for the linker to scan when # creating shared libraries. This symbol typically # goes at the end of the "ld" commands that build # shared libraries. The value of the symbol defaults to # "${LIBS}" if all of the dependent libraries should # be specified when creating a shared library. If # dependent libraries should not be specified (as on # SunOS 4.x, where they cause the link to fail, or in # general if Tcl and Tk aren't themselves shared # libraries), then this symbol has an empty string # as its value. # SHLIB_SUFFIX - Suffix to use for the names of dynamically loadable # extensions. An empty string means we don't know how # to use shared libraries on this platform. # LIB_SUFFIX - Specifies everything that comes after the "libfoo" # in a static or shared library name, using the $PACKAGE_VERSION variable # to put the version in the right place. This is used # by platforms that need non-standard library names. # Examples: ${PACKAGE_VERSION}.so.1.1 on NetBSD, since it needs # to have a version after the .so, and ${PACKAGE_VERSION}.a # on AIX, since a shared library needs to have # a .a extension whereas shared objects for loadable # extensions have a .so extension. Defaults to # ${PACKAGE_VERSION}${SHLIB_SUFFIX}. # CFLAGS_DEBUG - # Flags used when running the compiler in debug mode # CFLAGS_OPTIMIZE - # Flags used when running the compiler in optimize mode # CFLAGS - Additional CFLAGS added as necessary (usually 64-bit) #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_CFLAGS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_INIT]) # Step 0.a: Enable 64 bit support? |
︙ | ︙ | |||
1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 | void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes, tcl_cv_cc_visibility_hidden=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [ AC_DEFINE(MODULE_SCOPE, [extern __attribute__((__visibility__("hidden")))], [Compiler support for module scope symbols]) ]) # Step 0.d: Disable -rpath support? AC_MSG_CHECKING([if rpath support is requested]) AC_ARG_ENABLE(rpath, AC_HELP_STRING([--disable-rpath], | > | 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 | void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes, tcl_cv_cc_visibility_hidden=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [ AC_DEFINE(MODULE_SCOPE, [extern __attribute__((__visibility__("hidden")))], [Compiler support for module scope symbols]) AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols]) ]) # Step 0.d: Disable -rpath support? AC_MSG_CHECKING([if rpath support is requested]) AC_ARG_ENABLE(rpath, AC_HELP_STRING([--disable-rpath], |
︙ | ︙ | |||
1114 1115 1116 1117 1118 1119 1120 | AC_ARG_ENABLE(wince, AC_HELP_STRING([--enable-wince], [enable Win/CE support (where applicable)]), [doWince=$enableval], [doWince=no]) AC_MSG_RESULT([$doWince]) ]) | | < < < < < | | | > < < < > > | < < < < > | < | 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 | AC_ARG_ENABLE(wince, AC_HELP_STRING([--enable-wince], [enable Win/CE support (where applicable)]), [doWince=$enableval], [doWince=no]) AC_MSG_RESULT([$doWince]) ]) # Set the variable "system" to hold the name and version number # for the system. TEA_CONFIG_SYSTEM # Require ranlib early so we can override it in special cases below. AC_REQUIRE([AC_PROG_RANLIB]) # Set configuration options based on system name and version. # This is similar to Tcl's unix/tcl.m4 except that we've added a # "windows" case and removed some core-only vars. do64bit_ok=no # default to '{$LIBS}' and set to "" on per-platform necessary basis SHLIB_LD_LIBS='${LIBS}' # When ld needs options to work in 64-bit mode, put them in # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load] # is disabled by the user. [Bug 1016796] LDFLAGS_ARCH="" UNSHARED_LIB_SUFFIX="" # TEA specific: use PACKAGE_VERSION instead of VERSION TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' ECHO_VERSION='`echo ${PACKAGE_VERSION}`' TCL_LIB_VERSIONS_OK=ok CFLAGS_DEBUG=-g AS_IF([test "$GCC" = yes], [ CFLAGS_OPTIMIZE=-O2 CFLAGS_WARNING="-Wall" ], [ CFLAGS_OPTIMIZE=-O CFLAGS_WARNING="" ]) AC_CHECK_TOOL(AR, ar) STLIB_LD='${AR} cr' LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION="1.0"]) case $system in # TEA specific: windows) # This is a 2-stage check to make sure we have the 64-bit SDK |
︙ | ︙ | |||
1185 1186 1187 1188 1189 1190 1191 | PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac | | | 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 | PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode]) AC_MSG_WARN([Ensure latest Platform SDK is installed]) do64bit="no" else AC_MSG_RESULT([ Using 64-bit $MACHINE mode]) do64bit_ok="yes" fi |
︙ | ︙ | |||
1302 1303 1304 1305 1306 1307 1308 | lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" AC_SUBST(CELIB_DIR) else RC="rc" lflags="-nologo" | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 | lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" AC_SUBST(CELIB_DIR) else RC="rc" lflags="-nologo" LINKBIN="link" CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" fi fi if test "$GCC" = "yes"; then # mingw gcc mode AC_CHECK_TOOL(RC, windres) CFLAGS_DEBUG="-g" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" SHLIB_LD='${CC} -shared' UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" AC_CACHE_CHECK(for cross-compile version of gcc, ac_cv_cross, AC_TRY_COMPILE([ #ifdef _WIN32 #error cross-compiler #endif ], [], ac_cv_cross=yes, ac_cv_cross=no) ) if test "$ac_cv_cross" = "yes"; then case "$do64bit" in amd64|x64|yes) CC="x86_64-w64-mingw32-gcc" LD="x86_64-w64-mingw32-ld" AR="x86_64-w64-mingw32-ar" RANLIB="x86_64-w64-mingw32-ranlib" RC="x86_64-w64-mingw32-windres" ;; *) CC="i686-w64-mingw32-gcc" LD="i686-w64-mingw32-ld" AR="i686-w64-mingw32-ar" RANLIB="i686-w64-mingw32-ranlib" RC="i686-w64-mingw32-windres" ;; esac fi else SHLIB_LD="${LINKBIN} -dll ${lflags}" # link -lib only works when -lib is the first arg STLIB_LD="${LINKBIN} -lib ${lflags}" UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' PATHTYPE=-w # For information on what debugtype is most useful, see: |
︙ | ︙ | |||
1339 1340 1341 1342 1343 1344 1345 | LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi | < < < < < | | < < | > > | > | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | | | < | < | > < < < < < < | | 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 | LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi SHLIB_SUFFIX=".dll" SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' TCL_LIB_VERSIONS_OK=nodots ;; AIX-*) AS_IF([test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"], [ # AIX requires the _r compiler when gcc isn't being used case "${CC}" in *_r|*_r\ *) # ok ... ;; *) # Make sure only first arg gets _r CC=`echo "$CC" | sed -e 's/^\([[^ ]]*\)/\1_r/'` ;; esac AC_MSG_RESULT([Using $CC for compiling with threads]) ]) LIBS="$LIBS -lc" SHLIB_CFLAGS="" SHLIB_SUFFIX=".so" LD_LIBRARY_PATH_VAR="LIBPATH" # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported with GCC on $system]) ], [ do64bit_ok=yes CFLAGS="$CFLAGS -q64" LDFLAGS_ARCH="-q64" RANLIB="${RANLIB} -X64" AR="${AR} -X64" SHLIB_LD_FLAGS="-b64" ]) ]) AS_IF([test "`uname -m`" = ia64], [ # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC SHLIB_LD="/usr/ccs/bin/ld -G -z text" AS_IF([test "$GCC" = yes], [ CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' ], [ CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' ]) LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' ], [ AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared -Wl,-bexpall' ], [ SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry" LDFLAGS="$LDFLAGS -brtl" ]) SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}" CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ]) ;; BeOS*) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -nostart' SHLIB_SUFFIX=".so" #----------------------------------------------------------- # Check for inet_ntoa in -lbind, for BeOS (which also needs # -lsocket, even if the network functions are in -lnet which # is always linked to, for compatibility. #----------------------------------------------------------- AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"]) ;; BSD/OS-4.*) SHLIB_CFLAGS="-export-dynamic -fPIC" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; CYGWIN_*) SHLIB_CFLAGS="" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".dll" EXEEXT=".exe" do64bit_ok=yes CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; Haiku*) LDFLAGS="$LDFLAGS -Wl,--export-dynamic" SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}' AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"]) ;; HP-UX-*.11.*) # Use updated header definitions where possible AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?]) # TEA specific: Needed by Tcl, but not most extensions #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?]) #LIBS="$LIBS -lxnet" # Use the XOPEN network library AS_IF([test "`uname -m`" = ia64], [ SHLIB_SUFFIX=".so" # Use newer C++ library for C++ extensions #if test "$GCC" != "yes" ; then # CPPFLAGS="-AA" #fi ], [ SHLIB_SUFFIX=".sl" ]) AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) AS_IF([test "$tcl_ok" = yes], [ LDFLAGS="$LDFLAGS -Wl,-E" CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' LD_LIBRARY_PATH_VAR="SHLIB_PATH" ]) AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} |
︙ | ︙ | |||
1532 1533 1534 1535 1536 1537 1538 | AS_IF([test "$do64bit" = "yes"], [ AS_IF([test "$GCC" = yes], [ case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 | AS_IF([test "$do64bit" = "yes"], [ AS_IF([test "$GCC" = yes], [ case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ;; *) AC_MSG_WARN([64bit mode not supported with GCC on $system]) ;; esac ], [ do64bit_ok=yes CFLAGS="$CFLAGS +DD64" LDFLAGS_ARCH="+DD64" ]) ]) ;; IRIX-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [ CFLAGS="$CFLAGS -mabi=n32" LDFLAGS="$LDFLAGS -mabi=n32" ], [ |
︙ | ︙ | |||
1601 1602 1603 1604 1605 1606 1607 | esac LDFLAGS="$LDFLAGS -n32" ]) ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" | < < < | < < < < < < < | 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 | esac LDFLAGS="$LDFLAGS -n32" ]) ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported by gcc]) ], [ do64bit_ok=yes SHLIB_LD="ld -64 -shared -rdata_shared" CFLAGS="$CFLAGS -64" LDFLAGS_ARCH="-64" ]) ]) ;; Linux*|GNU*|NetBSD-Debian) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" # TEA specific: CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}' LDFLAGS="$LDFLAGS -Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"]) AS_IF([test $do64bit = yes], [ AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [ |
︙ | ︙ | |||
1662 1663 1664 1665 1666 1667 1668 | # The combo of gcc + glibc has a bug related to inlining of # functions like strtod(). The -fno-builtin flag should address # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"]) | < < < < < < < < < < < < < < < < < | < | < > > | < | | < | | | | < | < < < > | | > > | < < < < < < < < < < < < < < | < < < < < < | < | < | | | | < < < < < < < < < < < < > | < < < < < | > < | < | < < < < < < < < < < < | | < < | > > | | | | | > > | 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 | # The combo of gcc + glibc has a bug related to inlining of # functions like strtod(). The -fno-builtin flag should address # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"]) ;; Lynx*) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" CFLAGS_OPTIMIZE=-02 SHLIB_LD='${CC} -shared' LD_FLAGS="-Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) ;; OpenBSD-*) arch=`arch -s` case "$arch" in vax) SHLIB_SUFFIX="" SHARED_LIB_SUFFIX="" LDFLAGS="" ;; *) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' LDFLAGS="-Wl,-export-dynamic" ;; esac case "$arch" in vax) CFLAGS_OPTIMIZE="-O1" ;; *) CFLAGS_OPTIMIZE="-O2" ;; esac AS_IF([test "${TCL_THREADS}" = "1"], [ # On OpenBSD: Compile with -pthread # Don't link with -lpthread LIBS=`echo $LIBS | sed s/-lpthread//` CFLAGS="$CFLAGS -pthread" ]) # OpenBSD doesn't do version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; NetBSD-*) # NetBSD has ELF and can use 'cc -shared' to build shared libs SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the CFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" ]) ;; FreeBSD-*) # This configuration from FreeBSD Ports. SHLIB_CFLAGS="-fPIC" SHLIB_LD="${CC} -shared" TCL_SHLIB_LD_EXTRAS="-Wl,-soname=\$[@]" TK_SHLIB_LD_EXTRAS="-Wl,-soname,\$[@]" SHLIB_SUFFIX=".so" LDFLAGS="" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the LDFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LDFLAGS="$LDFLAGS $PTHREAD_LIBS"]) case $system in FreeBSD-3.*) # Version numbers are dot-stripped by system policy. TCL_TRIM_DOTS=`echo ${VERSION} | tr -d .` UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so' TCL_LIB_VERSIONS_OK=nodots ;; esac ;; Darwin-*) CFLAGS_OPTIMIZE="-Os" SHLIB_CFLAGS="-fno-common" # To avoid discrepancies between what headers configure sees during # preprocessing tests and compiling tests, move any -isysroot and # -mmacosx-version-min flags from CFLAGS to CPPFLAGS: |
︙ | ︙ | |||
1877 1878 1879 1880 1881 1882 1883 | hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_single_module = yes], [ SHLIB_LD="${SHLIB_LD} -Wl,-single_module" ]) | | < < < > | 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 | hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_single_module = yes], [ SHLIB_LD="${SHLIB_LD} -Wl,-single_module" ]) # TEA specific: link shlib with current and compatibility version flags vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d` SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}" SHLIB_SUFFIX=".dylib" # Don't use -prebind when building for Mac OS X 10.4 or later only: AS_IF([test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \ "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4], [ LDFLAGS="$LDFLAGS -prebind"]) LDFLAGS="$LDFLAGS -headerpad_max_install_names" AC_CACHE_CHECK([if ld accepts -search_paths_first flag], tcl_cv_ld_search_paths_first, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes, tcl_cv_ld_search_paths_first=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_search_paths_first = yes], [ LDFLAGS="$LDFLAGS -Wl,-search_paths_first" ]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [__private_extern__], [Compiler support for module scope symbols]) tcl_cv_cc_visibility_hidden=yes ]) CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" # TEA specific: for combined 32 & 64 bit fat builds of Tk # extensions, verify that 64-bit build is possible. AS_IF([test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"], [ |
︙ | ︙ | |||
1944 1945 1946 1947 1948 1949 1950 | AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [ AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags]) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done]) ]) ;; | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 | AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [ AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags]) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done]) ]) ;; OS/390-*) CFLAGS_OPTIMIZE="" # Optimizer is buggy AC_DEFINE(_OE_SOCKETS, 1, # needed in sys/socket.h [Should OS/390 do the right thing with sockets?]) ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" AS_IF([test "$SHARED_BUILD" = 1], [ SHLIB_LD='ld -shared -expect_unresolved "*"' ], [ SHLIB_LD='ld -non_shared -expect_unresolved "*"' ]) SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [CFLAGS="$CFLAGS -mieee"], [ CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"]) # see pthread_intro(3) for pthread support on osf1, k.furukawa AS_IF([test "${TCL_THREADS}" = 1], [ |
︙ | ︙ | |||
2021 2022 2023 2024 2025 2026 2027 | QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" | < < < < < < | | | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 | QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SCO_SV-3.2*) AS_IF([test "$GCC" = yes], [ SHLIB_CFLAGS="-fPIC -melf" LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" ], [ SHLIB_CFLAGS="-Kpic -belf" LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" ]) SHLIB_LD="ld -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SunOS-5.[[0-6]]) # Careful to not let 5.10+ fall into this case # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) SHLIB_CFLAGS="-KPIC" SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ], [ SHLIB_LD="/usr/ccs/bin/ld -G -z text" CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' |
︙ | ︙ | |||
2163 2164 2165 2166 2167 2168 2169 | CFLAGS="$CFLAGS -xarch=amd64" LDFLAGS="$LDFLAGS -xarch=amd64";; esac ]) ], [AC_MSG_WARN([64bit mode not supported for $arch])])]) ]) | < < < < < < | 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 | CFLAGS="$CFLAGS -xarch=amd64" LDFLAGS="$LDFLAGS -xarch=amd64";; esac ]) ], [AC_MSG_WARN([64bit mode not supported for $arch])])]) ]) SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "$do64bit_ok" = yes], [ AS_IF([test "$arch" = "sparcv9 sparc"], [ # We need to specify -static-libgcc or we need to |
︙ | ︙ | |||
2208 2209 2210 2211 2212 2213 2214 | ]) ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" | < < | 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 | ]) ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-Bexport" AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no) LDFLAGS=$hold_ldflags]) |
︙ | ︙ | |||
2235 2236 2237 2238 2239 2240 2241 | dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so dnl # until the end of configure, as configure's compile and link tests use dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's dnl # preprocessing tests use only CPPFLAGS. AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""]) | < | < < < < < | < < < < < < < < < < < < | > > > > > > | | | | > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 | dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so dnl # until the end of configure, as configure's compile and link tests use dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's dnl # preprocessing tests use only CPPFLAGS. AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""]) # Add in the arch flags late to ensure it wasn't removed. # Not necessary in TEA, but this is aligned with core LDFLAGS="$LDFLAGS $LDFLAGS_ARCH" # If we're running gcc, then change the C flags for compiling shared # libraries to the right flags for gcc, instead of those for the # standard manufacturer compiler. AS_IF([test "$GCC" = yes], [ case $system in AIX-*) ;; BSD/OS*) ;; CYGWIN_*|MINGW32_*) ;; IRIX*) ;; NetBSD-*|FreeBSD-*|OpenBSD-*) ;; Darwin-*) ;; SCO_SV-3.2*) ;; windows) ;; *) SHLIB_CFLAGS="-fPIC" ;; esac]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [extern], [No Compiler support for module scope symbols]) ]) AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}']) AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a']) if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then AC_CACHE_CHECK(for SEH support in compiler, tcl_cv_seh, AC_TRY_RUN([ #define WIN32_LEAN_AND_MEAN #include <windows.h> #undef WIN32_LEAN_AND_MEAN int main(int argc, char** argv) { int a, b = 0; __try { a = 666 / b; } __except (EXCEPTION_EXECUTE_HANDLER) { return 0; } return 1; } ], tcl_cv_seh=yes, tcl_cv_seh=no, tcl_cv_seh=no) ) if test "$tcl_cv_seh" = "no" ; then AC_DEFINE(HAVE_NO_SEH, 1, [Defined when mingw does not support SEH]) fi # # Check to see if the excpt.h include file provided contains the # definition for EXCEPTION_DISPOSITION; if not, which is the case # with Cygwin's version as of 2002-04-10, define it to be int, # sufficient for getting the current code to work. # AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files, tcl_cv_eh_disposition, AC_TRY_COMPILE([ # define WIN32_LEAN_AND_MEAN # include <windows.h> # undef WIN32_LEAN_AND_MEAN ],[ EXCEPTION_DISPOSITION x; ], tcl_cv_eh_disposition=yes, tcl_cv_eh_disposition=no) ) if test "$tcl_cv_eh_disposition" = "no" ; then AC_DEFINE(EXCEPTION_DISPOSITION, int, [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION]) fi # Check to see if winnt.h defines CHAR, SHORT, and LONG # even if VOID has already been #defined. The win32api # used by mingw and cygwin is known to do this. AC_CACHE_CHECK(for winnt.h that ignores VOID define, tcl_cv_winnt_ignore_void, AC_TRY_COMPILE([ #define VOID void #define WIN32_LEAN_AND_MEAN #include <windows.h> #undef WIN32_LEAN_AND_MEAN ], [ CHAR c; SHORT s; LONG l; ], tcl_cv_winnt_ignore_void=yes, tcl_cv_winnt_ignore_void=no) ) if test "$tcl_cv_winnt_ignore_void" = "yes" ; then AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1, [Defined when cygwin/mingw ignores VOID define in winnt.h]) fi fi # See if the compiler supports casting to a union type. # This is used to stop gcc from printing a compiler # warning when initializing a union member. AC_CACHE_CHECK(for cast to union support, tcl_cv_cast_to_union, AC_TRY_COMPILE([], [ union foo { int i; double d; }; union foo f = (union foo) (int) 0; ], tcl_cv_cast_to_union=yes, tcl_cv_cast_to_union=no) ) if test "$tcl_cv_cast_to_union" = "yes"; then AC_DEFINE(HAVE_CAST_TO_UNION, 1, [Defined when compiler supports casting to union type.]) fi AC_SUBST(CFLAGS_DEBUG) AC_SUBST(CFLAGS_OPTIMIZE) AC_SUBST(CFLAGS_WARNING) AC_SUBST(STLIB_LD) AC_SUBST(SHLIB_LD) |
︙ | ︙ | |||
2319 2320 2321 2322 2323 2324 2325 | # Results: # # Defines only one of the following vars: # HAVE_SYS_MODEM_H # USE_TERMIOS # USE_TERMIO # USE_SGTTY | < | 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 | # Results: # # Defines only one of the following vars: # HAVE_SYS_MODEM_H # USE_TERMIOS # USE_TERMIO # USE_SGTTY #-------------------------------------------------------------------- AC_DEFUN([TEA_SERIAL_PORT], [ AC_CHECK_HEADERS(sys/modem.h) AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [ AC_TRY_RUN([ #include <termios.h> |
︙ | ︙ | |||
2531 2532 2533 2534 2535 2536 2537 | # # Results: # # Sets the following vars: # XINCLUDES # XLIBSW # PKG_LIBS (appends to) | < | | | | | | 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 | # # Results: # # Sets the following vars: # XINCLUDES # XLIBSW # PKG_LIBS (appends to) #-------------------------------------------------------------------- AC_DEFUN([TEA_PATH_X], [ if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then TEA_PATH_UNIX_X fi ]) AC_DEFUN([TEA_PATH_UNIX_X], [ AC_PATH_X not_really_there="" if test "$no_x" = ""; then if test "$x_includes" = ""; then AC_TRY_CPP([#include <X11/Xlib.h>], , not_really_there="yes") else if test ! -r $x_includes/X11/Xlib.h; then not_really_there="yes" fi fi fi if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then AC_MSG_CHECKING([for X11 header files]) found_xincludes="no" AC_TRY_CPP([#include <X11/Xlib.h>], found_xincludes="yes", found_xincludes="no") if test "$found_xincludes" = "no"; then dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include" for i in $dirs ; do if test -r $i/X11/Xlib.h; then AC_MSG_RESULT([$i]) XINCLUDES=" -I$i" found_xincludes="yes" break fi done fi else if test "$x_includes" != ""; then XINCLUDES="-I$x_includes" found_xincludes="yes" fi fi if test "$found_xincludes" = "no"; then AC_MSG_RESULT([couldn't find any!]) fi if test "$no_x" = yes; then AC_MSG_CHECKING([for X11 libraries]) XLIBSW=nope dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib" |
︙ | ︙ | |||
2627 2628 2629 2630 2631 2632 2633 | # Results: # # Defines some of the following vars: # HAVE_SYS_IOCTL_H # HAVE_SYS_FILIO_H # USE_FIONBIO # O_NONBLOCK | < < < < < < < < < < | 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 | # Results: # # Defines some of the following vars: # HAVE_SYS_IOCTL_H # HAVE_SYS_FILIO_H # USE_FIONBIO # O_NONBLOCK #-------------------------------------------------------------------- AC_DEFUN([TEA_BLOCKING_STYLE], [ AC_CHECK_HEADERS(sys/ioctl.h) AC_CHECK_HEADERS(sys/filio.h) TEA_CONFIG_SYSTEM AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O]) case $system in OSF*) AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?]) AC_MSG_RESULT([FIONBIO]) ;; *) AC_MSG_RESULT([O_NONBLOCK]) ;; esac |
︙ | ︙ | |||
2671 2672 2673 2674 2675 2676 2677 | # Results: # # Defines some of the following vars: # USE_DELTA_FOR_TZ # HAVE_TM_GMTOFF # HAVE_TM_TZADJ # HAVE_TIMEZONE_VAR | < | 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 | # Results: # # Defines some of the following vars: # USE_DELTA_FOR_TZ # HAVE_TM_GMTOFF # HAVE_TM_TZADJ # HAVE_TIMEZONE_VAR #-------------------------------------------------------------------- AC_DEFUN([TEA_TIME_HANDLER], [ AC_CHECK_HEADERS(sys/time.h) AC_HEADER_TIME AC_STRUCT_TIMEZONE |
︙ | ︙ | |||
2740 2741 2742 2743 2744 2745 2746 | # Arguments: # none # # Results: # # Might defines some of the following vars: # strtod (=fixstrtod) | < | 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 | # Arguments: # none # # Results: # # Might defines some of the following vars: # strtod (=fixstrtod) #-------------------------------------------------------------------- AC_DEFUN([TEA_BUGGY_STRTOD], [ AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0) if test "$tcl_strtod" = 1; then AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[ AC_TRY_RUN([ |
︙ | ︙ | |||
2785 2786 2787 2788 2789 2790 2791 | # # Search for the libraries needed to link the Tcl shell. # Things like the math library (-lm) and socket stuff (-lsocket vs. # -lnsl) are dealt with here. # # Arguments: # Requires the following vars to be set in the Makefile: | | | < | 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 | # # Search for the libraries needed to link the Tcl shell. # Things like the math library (-lm) and socket stuff (-lsocket vs. # -lnsl) are dealt with here. # # Arguments: # Requires the following vars to be set in the Makefile: # DL_LIBS (not in TEA, only needed in core) # LIBS # MATH_LIBS # # Results: # # Substitutes the following vars: # TCL_LIBS # MATH_LIBS # # Might append to the following vars: # LIBS # # Might define the following vars: # HAVE_NET_ERRNO_H #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_LINK_LIBS], [ #-------------------------------------------------------------------- # On a few very rare systems, all of the libm.a stuff is # already in libc.a. Set compiler flags accordingly. # Also, Linux requires the "ieee" library for math to work |
︙ | ︙ | |||
2878 2879 2880 2881 2882 2883 2884 | # # Results: # # Might define the following vars: # _ISOC99_SOURCE # _LARGEFILE64_SOURCE # _LARGEFILE_SOURCE64 | < | 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 | # # Results: # # Might define the following vars: # _ISOC99_SOURCE # _LARGEFILE64_SOURCE # _LARGEFILE_SOURCE64 #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_EARLY_FLAG],[ AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]), AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no, AC_TRY_COMPILE([[#define ]$1[ 1 ]$2], $3, |
︙ | ︙ | |||
2926 2927 2928 2929 2930 2931 2932 | # # Might define the following vars: # TCL_WIDE_INT_IS_LONG # TCL_WIDE_INT_TYPE # HAVE_STRUCT_DIRENT64 # HAVE_STRUCT_STAT64 # HAVE_TYPE_OFF64_T | < | | | | 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 | # # Might define the following vars: # TCL_WIDE_INT_IS_LONG # TCL_WIDE_INT_TYPE # HAVE_STRUCT_DIRENT64 # HAVE_STRUCT_STAT64 # HAVE_TYPE_OFF64_T #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_64BIT_FLAGS], [ AC_MSG_CHECKING([for 64-bit integer type]) AC_CACHE_VAL(tcl_cv_type_64bit,[ tcl_cv_type_64bit=none # See if the compiler knows natively about __int64 AC_TRY_COMPILE(,[__int64 value = (__int64) 0;], tcl_type_64bit=__int64, tcl_type_64bit="long long") # See if we should use long anyway Note that we substitute in the # type that is our current guess for a 64-bit type inside this check # program, so it should be modified only carefully... AC_TRY_COMPILE(,[switch (0) { case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ; }],tcl_cv_type_64bit=${tcl_type_64bit})]) if test "${tcl_cv_type_64bit}" = none ; then AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Are wide integers to be implemented with C 'long's?]) AC_MSG_RESULT([using long]) elif test "${tcl_cv_type_64bit}" = "__int64" \ -a "${TEA_PLATFORM}" = "windows" ; then # TEA specific: We actually want to use the default tcl.h checks in # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER* AC_MSG_RESULT([using Tcl header defaults]) else AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit}, [What type should be used to define wide integers?]) AC_MSG_RESULT([${tcl_cv_type_64bit}]) # Now check for auxiliary declarations AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[ AC_TRY_COMPILE([#include <sys/types.h> #include <dirent.h>],[struct dirent64 p;], tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)]) if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in <sys/types.h>?]) fi AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[ AC_TRY_COMPILE([#include <sys/stat.h>],[struct stat64 p; |
︙ | ︙ | |||
3028 3029 3030 3031 3032 3033 3034 | # is a lightweight replacement for AC_EXEEXT that doesn't require # a compiler. #------------------------------------------------------------------------ AC_DEFUN([TEA_INIT], [ # TEA extensions pass this us the version of TEA they think they # are compatible with. | | > > > > > > > | > > > > > > > > | | > > > > | 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 | # is a lightweight replacement for AC_EXEEXT that doesn't require # a compiler. #------------------------------------------------------------------------ AC_DEFUN([TEA_INIT], [ # TEA extensions pass this us the version of TEA they think they # are compatible with. TEA_VERSION="3.9" AC_MSG_CHECKING([for correct TEA configuration]) if test x"${PACKAGE_NAME}" = x ; then AC_MSG_ERROR([ The PACKAGE_NAME variable must be defined by your TEA configure.in]) fi if test x"$1" = x ; then AC_MSG_ERROR([ TEA version not specified.]) elif test "$1" != "${TEA_VERSION}" ; then AC_MSG_RESULT([warning: requested TEA version "$1", have "${TEA_VERSION}"]) else AC_MSG_RESULT([ok (TEA ${TEA_VERSION})]) fi # If the user did not set CFLAGS, set it now to keep macros # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2". if test "${CFLAGS+set}" != "set" ; then CFLAGS="" fi case "`uname -s`" in *win32*|*WIN32*|*MINGW32_*) AC_CHECK_PROG(CYGPATH, cygpath, cygpath -w, echo) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *CYGWIN_*) CYGPATH=echo EXEEXT=".exe" # TEA_PLATFORM is determined later in LOAD_TCLCONFIG ;; *) CYGPATH=echo # Maybe we are cross-compiling.... case ${host_alias} in *mingw32*) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *) EXEEXT="" TEA_PLATFORM="unix" ;; esac ;; esac # Check if exec_prefix is set. If not use fall back to prefix. # Note when adjusted, so that TEA_PREFIX can correct for this. # This is needed for recursive configures, since autoconf propagates # $prefix, but not $exec_prefix (doh!). if test x$exec_prefix = xNONE ; then exec_prefix_default=yes exec_prefix=$prefix fi AC_MSG_NOTICE([configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}]) AC_SUBST(EXEEXT) AC_SUBST(CYGPATH) # This package name must be replaced statically for AC_SUBST to work AC_SUBST(PKG_LIB_FILE) # Substitute STUB_LIB_FILE in case package creates a stub library too. |
︙ | ︙ | |||
3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 | ;; *) # check for existence - allows for generic/win/unix VPATH # To add more dirs here (like 'src'), you have to update VPATH # in Makefile.in as well if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ ; then AC_MSG_ERROR([could not find source file '$i']) fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER | > | 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 | ;; *) # check for existence - allows for generic/win/unix VPATH # To add more dirs here (like 'src'), you have to update VPATH # in Makefile.in as well if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then AC_MSG_ERROR([could not find source file '$i']) fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER |
︙ | ︙ | |||
3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 | #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_STUB_SOURCES], [ vars="$@" for i in $vars; do # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ ; then AC_MSG_ERROR([could not find stub source file '$i']) fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER | > | 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 | #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_STUB_SOURCES], [ vars="$@" for i in $vars; do # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then AC_MSG_ERROR([could not find stub source file '$i']) fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER |
︙ | ︙ | |||
3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 | # Defines and substs the following vars: # PKG_CFLAGS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CFLAGS], [ PKG_CFLAGS="$PKG_CFLAGS $@" AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_PREFIX -- # # Handle the --prefix=... option by defaulting to what Tcl gave # # Arguments: | > > > > > > > > > > > > > > > > | 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 | # Defines and substs the following vars: # PKG_CFLAGS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CFLAGS], [ PKG_CFLAGS="$PKG_CFLAGS $@" AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_ADD_CLEANFILES -- # # Specify one or more CLEANFILES. # # Arguments: # one or more file names to clean target # # Results: # # Appends to CLEANFILES, already defined for subst in LOAD_TCLCONFIG #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CLEANFILES], [ CLEANFILES="$CLEANFILES $@" ]) #------------------------------------------------------------------------ # TEA_PREFIX -- # # Handle the --prefix=... option by defaulting to what Tcl gave # # Arguments: |
︙ | ︙ | |||
3356 3357 3358 3359 3360 3361 3362 | # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN([TEA_SETUP_COMPILER_CC], [ # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. | < < < < < < > | > > > > > > | | 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 | # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN([TEA_SETUP_COMPILER_CC], [ # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. AC_PROG_CC AC_PROG_CPP INSTALL="\$(SHELL) \$(srcdir)/tclconfig/install-sh -c" AC_SUBST(INSTALL) INSTALL_DATA="\${INSTALL} -m 644" AC_SUBST(INSTALL_DATA) INSTALL_PROGRAM="\${INSTALL}" AC_SUBST(INSTALL_PROGRAM) INSTALL_SCRIPT="\${INSTALL}" AC_SUBST(INSTALL_SCRIPT) #-------------------------------------------------------------------- # Checks to see if the make program sets the $MAKE variable. #-------------------------------------------------------------------- AC_PROG_MAKE_SET #-------------------------------------------------------------------- # Find ranlib #-------------------------------------------------------------------- AC_CHECK_TOOL(RANLIB, ranlib) #-------------------------------------------------------------------- # Determines the correct binary file extension (.o, .obj, .exe etc.) #-------------------------------------------------------------------- AC_OBJEXT AC_EXEEXT |
︙ | ︙ | |||
3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 | # CFLAGS - Done late here to note disturb other AC macros # MAKE_LIB - Command to execute to build the Tcl library; # differs depending on whether or not Tcl is being # compiled as a shared library. # MAKE_SHARED_LIB Makefile rule for building a shared library # MAKE_STATIC_LIB Makefile rule for building a static library # MAKE_STUB_LIB Makefile rule for building a stub library #------------------------------------------------------------------------ AC_DEFUN([TEA_MAKE_LIB], [ if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)" | > > > > > > > > > > > > > | | 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 | # CFLAGS - Done late here to note disturb other AC macros # MAKE_LIB - Command to execute to build the Tcl library; # differs depending on whether or not Tcl is being # compiled as a shared library. # MAKE_SHARED_LIB Makefile rule for building a shared library # MAKE_STATIC_LIB Makefile rule for building a static library # MAKE_STUB_LIB Makefile rule for building a stub library # VC_MANIFEST_EMBED_DLL Makefile rule for embedded VC manifest in DLL # VC_MANIFEST_EMBED_EXE Makefile rule for embedded VC manifest in EXE #------------------------------------------------------------------------ AC_DEFUN([TEA_MAKE_LIB], [ if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)" AC_EGREP_CPP([manifest needed], [ #if defined(_MSC_VER) && _MSC_VER >= 1400 print("manifest needed") #endif ], [ # Could do a CHECK_PROG for mt, but should always be with MSVC8+ VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;2 ; fi" VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;1 ; fi" MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}" TEA_ADD_CLEANFILES([*.manifest]) ]) MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\[$]@ \$(PKG_STUB_OBJECTS)" else MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}" MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)" fi if test "${SHARED_BUILD}" = "1" ; then |
︙ | ︙ | |||
3485 3486 3487 3488 3489 3490 3491 | # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. | < > > > > > > > | 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 | # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\"" fi SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\"" if test "$GCC" = "yes"; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -static-libgcc" fi eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" else eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_LIB_FILE=lib${PKG_LIB_FILE} fi fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE} fi # These aren't needed on Windows (either MSVC or gcc) |
︙ | ︙ | |||
3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 | fi AC_SUBST(MAKE_LIB) AC_SUBST(MAKE_SHARED_LIB) AC_SUBST(MAKE_STATIC_LIB) AC_SUBST(MAKE_STUB_LIB) AC_SUBST(RANLIB_STUB) ]) #------------------------------------------------------------------------ # TEA_LIB_SPEC -- # # Compute the name of an existing object library located in libdir # from the given base name and produce the appropriate linker flags. | > > | 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 | fi AC_SUBST(MAKE_LIB) AC_SUBST(MAKE_SHARED_LIB) AC_SUBST(MAKE_STATIC_LIB) AC_SUBST(MAKE_STUB_LIB) AC_SUBST(RANLIB_STUB) AC_SUBST(VC_MANIFEST_EMBED_DLL) AC_SUBST(VC_MANIFEST_EMBED_EXE) ]) #------------------------------------------------------------------------ # TEA_LIB_SPEC -- # # Compute the name of an existing object library located in libdir # from the given base name and produce the appropriate linker flags. |
︙ | ︙ | |||
3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 | for i in \ `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do if test -f "$i" ; then tea_lib_name_dir=`dirname $i` $1_LIB_NAME=`basename $i` $1_LIB_PATH_NAME=$i break | > > | 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 | for i in \ `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib64/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib64/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do if test -f "$i" ; then tea_lib_name_dir=`dirname $i` $1_LIB_NAME=`basename $i` $1_LIB_PATH_NAME=$i break |
︙ | ︙ | |||
3615 3616 3617 3618 3619 3620 3621 | # # Requires: # TCL_SRC_DIR Assumes that TEA_LOAD_TCLCONFIG has # already been called. # # Results: # | | | 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 | # # Requires: # TCL_SRC_DIR Assumes that TEA_LOAD_TCLCONFIG has # already been called. # # Results: # # Substitutes the following vars: # TCL_TOP_DIR_NATIVE # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PRIVATE_TCL_HEADERS], [ # Allow for --with-tclinclude to take effect and define ${ac_cv_c_tclh} AC_REQUIRE([TEA_PUBLIC_TCL_HEADERS]) |
︙ | ︙ | |||
3693 3694 3695 3696 3697 3698 3699 | # CYGPATH must be set # # Results: # # Adds a --with-tclinclude switch to configure. # Result is cached. # | | | 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 | # CYGPATH must be set # # Results: # # Adds a --with-tclinclude switch to configure. # Result is cached. # # Substitutes the following vars: # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PUBLIC_TCL_HEADERS], [ AC_MSG_CHECKING([for Tcl public headers]) AC_ARG_WITH(tclinclude, [ --with-tclinclude directory containing the public Tcl header files], with_tclinclude=${withval}) |
︙ | ︙ | |||
3783 3784 3785 3786 3787 3788 3789 | # # Requires: # TK_SRC_DIR Assumes that TEA_LOAD_TKCONFIG has # already been called. # # Results: # | | | 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 | # # Requires: # TK_SRC_DIR Assumes that TEA_LOAD_TKCONFIG has # already been called. # # Results: # # Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PRIVATE_TK_HEADERS], [ # Allow for --with-tkinclude to take effect and define ${ac_cv_c_tkh} AC_REQUIRE([TEA_PUBLIC_TK_HEADERS]) AC_MSG_CHECKING([for Tk private include files]) |
︙ | ︙ | |||
3872 3873 3874 3875 3876 3877 3878 | # CYGPATH must be set # # Results: # # Adds a --with-tkinclude switch to configure. # Result is cached. # | | | 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 | # CYGPATH must be set # # Results: # # Adds a --with-tkinclude switch to configure. # Result is cached. # # Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PUBLIC_TK_HEADERS], [ AC_MSG_CHECKING([for Tk public headers]) AC_ARG_WITH(tkinclude, [ --with-tkinclude directory containing the public Tk header files], with_tkinclude=${withval}) |
︙ | ︙ | |||
4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 | if test x"${ac_cv_c_$1config}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi done fi | > | 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 | if test x"${ac_cv_c_$1config}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi done fi |
︙ | ︙ | |||
4089 4090 4091 4092 4093 4094 4095 | # Arguments: # # Requires the following vars to be set: # $1_BIN_DIR # # Results: # | | < | 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 | # Arguments: # # Requires the following vars to be set: # $1_BIN_DIR # # Results: # # Substitutes the following vars: # $1_SRC_DIR # $1_LIB_FILE # $1_LIB_SPEC #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG], [ AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh]) if test -f "${$1_BIN_DIR}/$1Config.sh" ; then AC_MSG_RESULT([loading]) |
︙ | ︙ | |||
4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 | # if test -f "${$1_BIN_DIR}/Makefile" ; then AC_MSG_WARN([Found Makefile - using build library specs for $1]) $1_LIB_SPEC=${$1_BUILD_LIB_SPEC} $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC} $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH} fi AC_SUBST($1_VERSION) AC_SUBST($1_BIN_DIR) AC_SUBST($1_SRC_DIR) AC_SUBST($1_LIB_FILE) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_STUB_LIB_FILE) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_PATH) | > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 | # if test -f "${$1_BIN_DIR}/Makefile" ; then AC_MSG_WARN([Found Makefile - using build library specs for $1]) $1_LIB_SPEC=${$1_BUILD_LIB_SPEC} $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC} $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH} $1_INCLUDE_SPEC=${$1_BUILD_INCLUDE_SPEC} $1_LIBRARY_PATH=${$1_LIBRARY_PATH} fi AC_SUBST($1_VERSION) AC_SUBST($1_BIN_DIR) AC_SUBST($1_SRC_DIR) AC_SUBST($1_LIB_FILE) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_STUB_LIB_FILE) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_PATH) # Allow the caller to prevent this auto-check by specifying any 2nd arg AS_IF([test "x$2" = x], [ # Check both upper and lower-case variants # If a dev wanted non-stubs libs, this function could take an option # to not use _STUB in the paths below AS_IF([test "x${$1_STUB_LIB_SPEC}" = x], [TEA_LOAD_CONFIG_LIB(translit($1,[a-z],[A-Z])_STUB)], [TEA_LOAD_CONFIG_LIB($1_STUB)]) ]) ]) #------------------------------------------------------------------------ # TEA_LOAD_CONFIG_LIB -- # # Helper function to load correct library from another extension's # ${PACKAGE}Config.sh. # # Results: # Adds to LIBS the appropriate extension library #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG_LIB], [ AC_MSG_CHECKING([For $1 library for LIBS]) # This simplifies the use of stub libraries by automatically adding # the stub lib to your path. Normally this would add to SHLIB_LD_LIBS, # but this is called before CONFIG_CFLAGS. More importantly, this adds # to PKG_LIBS, which becomes LIBS, and that is only used by SHLIB_LD. if test "x${$1_LIB_SPEC}" != "x" ; then if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes" ; then TEA_ADD_LIBS([\"`${CYGPATH} ${$1_LIB_PATH}`\"]) AC_MSG_RESULT([using $1_LIB_PATH ${$1_LIB_PATH}]) else TEA_ADD_LIBS([${$1_LIB_SPEC}]) AC_MSG_RESULT([using $1_LIB_SPEC ${$1_LIB_SPEC}]) fi else AC_MSG_RESULT([file not found]) fi ]) #------------------------------------------------------------------------ # TEA_EXPORT_CONFIG -- # # Define the data to insert into the ${PACKAGE}Config.sh file # # Arguments: # # Requires the following vars to be set: # $1 # # Results: # Substitutes the following vars: #------------------------------------------------------------------------ AC_DEFUN([TEA_EXPORT_CONFIG], [ #-------------------------------------------------------------------- # These are for $1Config.sh #-------------------------------------------------------------------- # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib) eval pkglibdir="[$]{libdir}/$1${PACKAGE_VERSION}" if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then eval $1_LIB_FLAG="-l$1${PACKAGE_VERSION}${DBGX}" eval $1_STUB_LIB_FLAG="-l$1stub${PACKAGE_VERSION}${DBGX}" else eval $1_LIB_FLAG="-l$1`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}" eval $1_STUB_LIB_FLAG="-l$1stub`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}" fi $1_BUILD_LIB_SPEC="-L`pwd` ${$1_LIB_FLAG}" $1_LIB_SPEC="-L${pkglibdir} ${$1_LIB_FLAG}" $1_BUILD_STUB_LIB_SPEC="-L`pwd` [$]{$1_STUB_LIB_FLAG}" $1_STUB_LIB_SPEC="-L${pkglibdir} [$]{$1_STUB_LIB_FLAG}" $1_BUILD_STUB_LIB_PATH="`pwd`/[$]{PKG_STUB_LIB_FILE}" $1_STUB_LIB_PATH="${pkglibdir}/[$]{PKG_STUB_LIB_FILE}" AC_SUBST($1_BUILD_LIB_SPEC) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_BUILD_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_BUILD_STUB_LIB_PATH) AC_SUBST($1_STUB_LIB_PATH) AC_SUBST(MAJOR_VERSION) AC_SUBST(MINOR_VERSION) AC_SUBST(PATCHLEVEL) ]) #------------------------------------------------------------------------ # TEA_PATH_CELIB -- # # Locate Keuchel's celib emulation layer for targeting Win/CE # # Arguments: |
︙ | ︙ | |||
4200 4201 4202 4203 4204 4205 4206 | no_celib= CELIB_DIR=${ac_cv_c_celibconfig} CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` AC_MSG_RESULT([found $CELIB_DIR]) fi fi ]) | < < | 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 | no_celib= CELIB_DIR=${ac_cv_c_celibconfig} CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` AC_MSG_RESULT([found $CELIB_DIR]) fi fi ]) # Local Variables: # mode: autoconf # End: |
Added jni/xotcl/library/xml/TclExpat-1.1/tclconfig/install-sh.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 | #!/bin/sh # install - install a program, script, or datafile scriptversion=2011-04-20.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -S $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -S) stripcmd="$stripprog $2" shift;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: |
Changes to jni/xotcl/library/xml/TclExpat-1.1/tclexpat.c.
︙ | ︙ | |||
10 11 12 13 14 15 16 | * of the software but you must include all of this notice on any copy. * * Zveno Pty Ltd does not warrant that this software is error free * or fit for any purpose. Zveno Pty Ltd disclaims any liability for * all claims, expenses, losses, damages and costs any user may incur * as a result of using, copying or modifying the software. * | < < | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | * of the software but you must include all of this notice on any copy. * * Zveno Pty Ltd does not warrant that this software is error free * or fit for any purpose. Zveno Pty Ltd disclaims any liability for * all claims, expenses, losses, damages and costs any user may incur * as a result of using, copying or modifying the software. * */ #include <tcl.h> #include <xotcl.h> #include <string.h> #include "xmlparse.h" |
︙ | ︙ |
Changes to jni/xotcl/library/xml/TclExpat-1.1/xmltok_impl.c.
︙ | ︙ | |||
1602 1603 1604 1605 1606 1607 1608 | static void PREFIX(updatePosition)(const ENCODING *enc, const char *ptr, const char *end, POSITION *pos) { | | | 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 | static void PREFIX(updatePosition)(const ENCODING *enc, const char *ptr, const char *end, POSITION *pos) { while (ptr < end) { switch (BYTE_TYPE(enc, ptr)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: \ ptr += n; \ break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE |
︙ | ︙ |
Changes to jni/xotcl/library/xml/TclExpat-1.1/xmlwf.c.
︙ | ︙ | |||
19 20 21 22 23 24 25 26 27 28 29 30 31 32 | */ #include <tcl.h> #include "xmlparse.h" #include "filemap.h" #include "codepage.h" #include <stdio.h> #include <stdlib.h> #include <stddef.h> #include <string.h> #include <fcntl.h> #ifdef _MSC_VER | > | 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | */ #include <tcl.h> #include "xmlparse.h" #include "filemap.h" #include "codepage.h" #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <stddef.h> #include <string.h> #include <fcntl.h> #ifdef _MSC_VER |
︙ | ︙ |
Changes to jni/xotcl/library/xml/pkgIndex.tcl.
1 2 3 4 5 6 7 8 9 10 11 12 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded sgml 1.6 [list source [file join $dir sgml.tcl]] package ifneeded xml 1.8 [list source [file join $dir xml.tcl]] | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded sgml 1.6 [list source [file join $dir sgml.tcl]] package ifneeded xml 1.8 [list source [file join $dir xml.tcl]] package ifneeded xotcl::xml::parser 1.0 [list source [file join $dir xoXML.xotcl]] package ifneeded xotcl::xml::printVisitor 1.0 [list source [file join $dir printVisitor.xotcl]] package ifneeded xotcl::xml::recreatorVisitor 1.0 [list source [file join $dir xmlRecreatorVisitor.xotcl]] |
Changes to jni/xotcl/library/xml/printVisitor.xotcl.
|
| < | | | | 1 2 3 4 5 6 7 8 9 10 11 | package provide xotcl::xml::printVisitor 1.0 package require -exact xotcl::xml::parser 1.0 package require XOTcl 1 namespace eval ::xotcl::xml::printVisitor { namespace import ::xotcl::* ############################################################################## # # Small debugging visitor that just uses node's print method to print the |
︙ | ︙ |
Changes to jni/xotcl/library/xml/xmlRecreatorVisitor.xotcl.
|
| < | | | | 1 2 3 4 5 6 7 8 9 10 11 | package provide xotcl::xml::recreatorVisitor 1.0 package require -exact xotcl::xml::parser 1.0 package require XOTcl 1 namespace eval ::xotcl::xml::recreatorVisitor { namespace import ::xotcl::* ############################################################################## # # a visitor that recreates an XML representation from a |
︙ | ︙ |
Changes to jni/xotcl/library/xml/xoXML.xotcl.
|
| < | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | package provide xotcl::xml::parser 1.0 package require XOTcl 1 package require -exact xotcl::pattern::chainOfResponsibility 1.0 package require -exact xotcl::pattern::sortedCompositeWithAfter 1.0 #package require -exact xotcl::pattern::link 1.0 package require -exact xotcl::trace 1.0 #package require -exact xml #package require expat namespace eval ::xotcl::xml::parser { namespace import ::xotcl::* ############################################################################## # |
︙ | ︙ |
Changes to jni/xotcl/man/xotclsh.1.
1 2 | '\" '\" XOTcl - Extended OTcl | > | | 1 2 3 4 5 6 7 8 9 10 11 | '\" '\" XOTcl - Extended OTcl '\" Copyright (C) 1999-2014 Gustaf Neumann, '\" Copyright (C) 1999-2007 Uwe Zdun '\" '\" .so man.macros .TH xotclsh 1 "" XOTcl "XOTcl Applications" .BS .SH NAME xotclsh \- Tcl Shell containing object-oriented scripting language XOTcl |
︙ | ︙ |
Changes to jni/xotcl/man/xowish.1.
1 2 | '\" '\" XOTcl - Extended OTcl | > | | 1 2 3 4 5 6 7 8 9 10 11 | '\" '\" XOTcl - Extended OTcl '\" Copyright (C) 1999-2014 Gustaf Neumann, '\" Copyright (C) 1999-2007 Uwe Zdun '\" '\" .so man.macros .TH xowish 1 "" XOWish "XOTcl Applications" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME |
︙ | ︙ |
Changes to jni/xotcl/tcl.m4.
1 2 3 4 5 6 7 8 9 10 | # tcl.m4 -- # # This file provides a set of autoconf macros to help TEA-enable # a Tcl extension. # # Copyright (c) 1999-2000 Ajuba Solutions. # Copyright (c) 2002-2005 ActiveState Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. | < < | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # tcl.m4 -- # # This file provides a set of autoconf macros to help TEA-enable # a Tcl extension. # # Copyright (c) 1999-2000 Ajuba Solutions. # Copyright (c) 2002-2005 ActiveState Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. AC_PREREQ(2.57) dnl TEA extensions pass us the version of TEA they think they dnl are compatible with (must be set in TEA_INIT below) dnl TEA_VERSION="3.9" # Possible values for key variables defined: # # TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem') # TEA_PLATFORM - windows unix # |
︙ | ︙ | |||
53 54 55 56 57 58 59 | if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true AC_ARG_WITH(tcl, AC_HELP_STRING([--with-tcl], [directory containing tcl configuration (tclConfig.sh)]), | | | | | | | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true AC_ARG_WITH(tcl, AC_HELP_STRING([--with-tcl], [directory containing tcl configuration (tclConfig.sh)]), with_tclconfig="${withval}") AC_MSG_CHECKING([for Tcl configuration]) AC_CACHE_VAL(ac_cv_c_tclconfig,[ # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then case "${with_tclconfig}" in */tclConfig.sh ) if test -f "${with_tclconfig}"; then AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself]) with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`" fi ;; esac if test -f "${with_tclconfig}/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`" else AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh]) fi fi # then check for a private Tcl installation if test x"${ac_cv_c_tclconfig}" = x ; then |
︙ | ︙ | |||
90 91 92 93 94 95 96 | `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then | | | | | > > > | | | | | | | | 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 | `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tcl.framework/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ `ls -d /usr/lib/tcl8.6 2>/dev/null` \ `ls -d /usr/lib/tcl8.5 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ${srcdir}/../tcl \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi ]) if test x"${ac_cv_c_tclconfig}" = x ; then TCL_BIN_DIR="# no Tcl configs found" AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh]) else no_tcl= TCL_BIN_DIR="${ac_cv_c_tclconfig}" AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_PATH_TKCONFIG -- |
︙ | ︙ | |||
205 206 207 208 209 210 211 | if test x"${no_tk}" = x ; then # we reset no_tk in case something fails here no_tk=true AC_ARG_WITH(tk, AC_HELP_STRING([--with-tk], [directory containing tk configuration (tkConfig.sh)]), | | | | | | | 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 | if test x"${no_tk}" = x ; then # we reset no_tk in case something fails here no_tk=true AC_ARG_WITH(tk, AC_HELP_STRING([--with-tk], [directory containing tk configuration (tkConfig.sh)]), with_tkconfig="${withval}") AC_MSG_CHECKING([for Tk configuration]) AC_CACHE_VAL(ac_cv_c_tkconfig,[ # First check to see if --with-tkconfig was specified. if test x"${with_tkconfig}" != x ; then case "${with_tkconfig}" in */tkConfig.sh ) if test -f "${with_tkconfig}"; then AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself]) with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`" fi ;; esac if test -f "${with_tkconfig}/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`" else AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh]) fi fi # then check for a private Tk library if test x"${ac_cv_c_tkconfig}" = x ; then |
︙ | ︙ | |||
242 243 244 245 246 247 248 | `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tk \ `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then | | | | > | | | | | | | < | 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 | `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tk \ `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tk.framework/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ${srcdir}/../tk \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi ]) if test x"${ac_cv_c_tkconfig}" = x ; then TK_BIN_DIR="# no Tk configs found" AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh]) else no_tk= TK_BIN_DIR="${ac_cv_c_tkconfig}" AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_LOAD_TCLCONFIG -- # # Load the tclConfig.sh file # # Arguments: # # Requires the following vars to be set: # TCL_BIN_DIR # # Results: # # Substitutes the following vars: # TCL_BIN_DIR # TCL_SRC_DIR # TCL_LIB_FILE #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_TCLCONFIG], [ AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh]) if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then AC_MSG_RESULT([loading]) |
︙ | ︙ | |||
366 367 368 369 370 371 372 | # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TCL_BIN_DIR}/Makefile" ; then | | | | | | | | > < < | | > > | > | < < < < | > > | | > | > > > > | < < < < > > > | 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 | # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TCL_BIN_DIR}/Makefile" ; then TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}" TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}" TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tcl.framework installed in an arbitrary location. case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then for i in "`cd "${TCL_BIN_DIR}"; pwd`" \ "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}" break fi done fi if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}" TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" AC_SUBST(TCL_VERSION) AC_SUBST(TCL_PATCH_LEVEL) AC_SUBST(TCL_BIN_DIR) AC_SUBST(TCL_SRC_DIR) AC_SUBST(TCL_LIB_FILE) AC_SUBST(TCL_LIB_FLAG) AC_SUBST(TCL_LIB_SPEC) AC_SUBST(TCL_STUB_LIB_FILE) AC_SUBST(TCL_STUB_LIB_FLAG) AC_SUBST(TCL_STUB_LIB_SPEC) AC_MSG_CHECKING([platform]) hold_cc=$CC; CC="$TCL_CC" AC_TRY_COMPILE(,[ #ifdef _WIN32 #error win32 #endif ], TEA_PLATFORM="unix", TEA_PLATFORM="windows" ) CC=$hold_cc AC_MSG_RESULT($TEA_PLATFORM) # The BUILD_$pkg is to define the correct extern storage class # handling when making this package AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}, [], [Building extension source?]) # Do this here as we have fully defined TEA_PLATFORM now if test "${TEA_PLATFORM}" = "windows" ; then EXEEXT=".exe" CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp" fi # TEA specific: AC_SUBST(CLEANFILES) AC_SUBST(TCL_LIBS) AC_SUBST(TCL_DEFS) AC_SUBST(TCL_EXTRA_CFLAGS) AC_SUBST(TCL_LD_FLAGS) AC_SUBST(TCL_SHLIB_LD_LIBS) ]) |
︙ | ︙ | |||
475 476 477 478 479 480 481 | # If the TK_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TK_LIB_SPEC will be set to the value # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC # instead of TK_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TK_BIN_DIR}/Makefile" ; then | | | | | | | | | 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 | # If the TK_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TK_LIB_SPEC will be set to the value # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC # instead of TK_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TK_BIN_DIR}/Makefile" ; then TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}" TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}" TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tk.framework installed in an arbitrary location. case ${TK_DEFS} in *TK_FRAMEWORK*) if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then for i in "`cd "${TK_BIN_DIR}"; pwd`" \ "`cd "${TK_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}" break fi done fi if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}" TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TK_DBGX substitution |
︙ | ︙ | |||
550 551 552 553 554 555 556 | # directory. This macro will correctly determine the name # of the tclsh executable even if tclsh has not yet been # built in the build directory. The tclsh found is always # associated with a tclConfig.sh file. This tclsh should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # | | | | | 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 | # directory. This macro will correctly determine the name # of the tclsh executable even if tclsh has not yet been # built in the build directory. The tclsh found is always # associated with a tclConfig.sh file. This tclsh should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # # Arguments: # none # # Results: # Substitutes the following vars: # TCLSH_PROG #------------------------------------------------------------------------ AC_DEFUN([TEA_PROG_TCLSH], [ AC_MSG_CHECKING([for tclsh]) if test -f "${TCL_BIN_DIR}/Makefile" ; then # tclConfig.sh is in Tcl build directory |
︙ | ︙ | |||
600 601 602 603 604 605 606 | # directory. This macro will correctly determine the name # of the wish executable even if wish has not yet been # built in the build directory. The wish found is always # associated with a tkConfig.sh file. This wish should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # | | | | | 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 | # directory. This macro will correctly determine the name # of the wish executable even if wish has not yet been # built in the build directory. The wish found is always # associated with a tkConfig.sh file. This wish should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # # Arguments: # none # # Results: # Substitutes the following vars: # WISH_PROG #------------------------------------------------------------------------ AC_DEFUN([TEA_PROG_WISH], [ AC_MSG_CHECKING([for wish]) if test -f "${TK_BIN_DIR}/Makefile" ; then # tkConfig.sh is in Tk build directory |
︙ | ︙ | |||
646 647 648 649 650 651 652 | #------------------------------------------------------------------------ # TEA_ENABLE_SHARED -- # # Allows the building of shared libraries # # Arguments: # none | | | 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 | #------------------------------------------------------------------------ # TEA_ENABLE_SHARED -- # # Allows the building of shared libraries # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-shared=yes|no # # Defines the following vars: # STATIC_BUILD Used for building import/export libraries |
︙ | ︙ | |||
702 703 704 705 706 707 708 | # # Note that it is legal to have a thread enabled extension run in a # threaded or non-threaded Tcl core, but a non-threaded extension may # only run in a non-threaded Tcl core. # # Arguments: # none | | < | 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 | # # Note that it is legal to have a thread enabled extension run in a # threaded or non-threaded Tcl core, but a non-threaded extension may # only run in a non-threaded Tcl core. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-threads # # Sets the following vars: # THREADS_LIBS Thread library(s) # # Defines the following vars: # TCL_THREADS # _REENTRANT # _THREAD_SAFE #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_THREADS], [ AC_ARG_ENABLE(threads, AC_HELP_STRING([--enable-threads], [build with threads]), [tcl_ok=$enableval], [tcl_ok=yes]) |
︙ | ︙ | |||
839 840 841 842 843 844 845 | # Results: # # Adds the following arguments to configure: # --enable-symbols # # Defines the following vars: # CFLAGS_DEFAULT Sets to $(CFLAGS_DEBUG) if true | | < | | 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 | # Results: # # Adds the following arguments to configure: # --enable-symbols # # Defines the following vars: # CFLAGS_DEFAULT Sets to $(CFLAGS_DEBUG) if true # Sets to "$(CFLAGS_OPTIMIZE) -DNDEBUG" if false # LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true # Sets to $(LDFLAGS_OPTIMIZE) if false # DBGX Formerly used as debug library extension; # always blank now. #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_SYMBOLS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_CONFIG_CFLAGS]) AC_MSG_CHECKING([for build with symbols]) AC_ARG_ENABLE(symbols, AC_HELP_STRING([--enable-symbols], [build with debugging symbols (default: off)]), [tcl_ok=$enableval], [tcl_ok=no]) DBGX="" if test "$tcl_ok" = "no"; then CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG" LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" AC_MSG_RESULT([no]) else CFLAGS_DEFAULT="${CFLAGS_DEBUG}" LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" if test "$tcl_ok" = "yes"; then AC_MSG_RESULT([yes (standard debugging)]) |
︙ | ︙ | |||
904 905 906 907 908 909 910 | # Results: # # Adds the following arguments to configure: # --enable-langinfo=yes|no (default is yes) # # Defines the following vars: # HAVE_LANGINFO Triggers use of nl_langinfo if defined. | < | 907 908 909 910 911 912 913 914 915 916 917 918 919 920 | # Results: # # Adds the following arguments to configure: # --enable-langinfo=yes|no (default is yes) # # Defines the following vars: # HAVE_LANGINFO Triggers use of nl_langinfo if defined. #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_LANGINFO], [ AC_ARG_ENABLE(langinfo, AC_HELP_STRING([--enable-langinfo], [use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic (default: on)]), [langinfo_ok=$enableval], [langinfo_ok=yes]) |
︙ | ︙ | |||
936 937 938 939 940 941 942 | ]) #-------------------------------------------------------------------- # TEA_CONFIG_SYSTEM # # Determine what the system is (some things cannot be easily checked # on a feature-driven basis, alas). This can usually be done via the | | < < < < < < < < < < | 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 | ]) #-------------------------------------------------------------------- # TEA_CONFIG_SYSTEM # # Determine what the system is (some things cannot be easily checked # on a feature-driven basis, alas). This can usually be done via the # "uname" command. # # Arguments: # none # # Results: # Defines the following var: # # system - System/platform/version identification code. #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_SYSTEM], [ AC_CACHE_CHECK([system version], tcl_cv_sys_version, [ # TEA specific: if test "${TEA_PLATFORM}" = "windows" ; then tcl_cv_sys_version=windows else tcl_cv_sys_version=`uname -s`-`uname -r` if test "$?" -ne 0 ; then AC_MSG_WARN([can't find uname command]) tcl_cv_sys_version=unknown else if test "`uname -s`" = "AIX" ; then tcl_cv_sys_version=AIX-`uname -v`.`uname -r` fi fi fi ]) system=$tcl_cv_sys_version |
︙ | ︙ | |||
990 991 992 993 994 995 996 | # Arguments: # none # # Results: # # Defines and substitutes the following vars: # | < < | < | | | | < < < | < < < < < < < < | 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 | # Arguments: # none # # Results: # # Defines and substitutes the following vars: # # DL_OBJS, DL_LIBS - removed for TEA, only needed by core. # LDFLAGS - Flags to pass to the compiler when linking object # files into an executable application binary such # as tclsh. # LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. Could # be the same as CC_SEARCH_FLAGS if ${CC} is used to link. # CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. # SHLIB_CFLAGS - Flags to pass to cc when compiling the components # of a shared library (may request position-independent # code, among other things). # SHLIB_LD - Base command to use for combining object files # into a shared library. # SHLIB_LD_LIBS - Dependent libraries for the linker to scan when # creating shared libraries. This symbol typically # goes at the end of the "ld" commands that build # shared libraries. The value of the symbol defaults to # "${LIBS}" if all of the dependent libraries should # be specified when creating a shared library. If # dependent libraries should not be specified (as on # SunOS 4.x, where they cause the link to fail, or in # general if Tcl and Tk aren't themselves shared # libraries), then this symbol has an empty string # as its value. # SHLIB_SUFFIX - Suffix to use for the names of dynamically loadable # extensions. An empty string means we don't know how # to use shared libraries on this platform. # LIB_SUFFIX - Specifies everything that comes after the "libfoo" # in a static or shared library name, using the $PACKAGE_VERSION variable # to put the version in the right place. This is used # by platforms that need non-standard library names. # Examples: ${PACKAGE_VERSION}.so.1.1 on NetBSD, since it needs # to have a version after the .so, and ${PACKAGE_VERSION}.a # on AIX, since a shared library needs to have # a .a extension whereas shared objects for loadable # extensions have a .so extension. Defaults to # ${PACKAGE_VERSION}${SHLIB_SUFFIX}. # CFLAGS_DEBUG - # Flags used when running the compiler in debug mode # CFLAGS_OPTIMIZE - # Flags used when running the compiler in optimize mode # CFLAGS - Additional CFLAGS added as necessary (usually 64-bit) #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_CFLAGS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_INIT]) # Step 0.a: Enable 64 bit support? |
︙ | ︙ | |||
1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 | void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes, tcl_cv_cc_visibility_hidden=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [ AC_DEFINE(MODULE_SCOPE, [extern __attribute__((__visibility__("hidden")))], [Compiler support for module scope symbols]) ]) # Step 0.d: Disable -rpath support? AC_MSG_CHECKING([if rpath support is requested]) AC_ARG_ENABLE(rpath, AC_HELP_STRING([--disable-rpath], | > | 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 | void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes, tcl_cv_cc_visibility_hidden=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [ AC_DEFINE(MODULE_SCOPE, [extern __attribute__((__visibility__("hidden")))], [Compiler support for module scope symbols]) AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols]) ]) # Step 0.d: Disable -rpath support? AC_MSG_CHECKING([if rpath support is requested]) AC_ARG_ENABLE(rpath, AC_HELP_STRING([--disable-rpath], |
︙ | ︙ | |||
1114 1115 1116 1117 1118 1119 1120 | AC_ARG_ENABLE(wince, AC_HELP_STRING([--enable-wince], [enable Win/CE support (where applicable)]), [doWince=$enableval], [doWince=no]) AC_MSG_RESULT([$doWince]) ]) | | < < < < < | | | > < < < > > | < < < < > | < | 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 | AC_ARG_ENABLE(wince, AC_HELP_STRING([--enable-wince], [enable Win/CE support (where applicable)]), [doWince=$enableval], [doWince=no]) AC_MSG_RESULT([$doWince]) ]) # Set the variable "system" to hold the name and version number # for the system. TEA_CONFIG_SYSTEM # Require ranlib early so we can override it in special cases below. AC_REQUIRE([AC_PROG_RANLIB]) # Set configuration options based on system name and version. # This is similar to Tcl's unix/tcl.m4 except that we've added a # "windows" case and removed some core-only vars. do64bit_ok=no # default to '{$LIBS}' and set to "" on per-platform necessary basis SHLIB_LD_LIBS='${LIBS}' # When ld needs options to work in 64-bit mode, put them in # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load] # is disabled by the user. [Bug 1016796] LDFLAGS_ARCH="" UNSHARED_LIB_SUFFIX="" # TEA specific: use PACKAGE_VERSION instead of VERSION TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' ECHO_VERSION='`echo ${PACKAGE_VERSION}`' TCL_LIB_VERSIONS_OK=ok CFLAGS_DEBUG=-g AS_IF([test "$GCC" = yes], [ CFLAGS_OPTIMIZE=-O2 CFLAGS_WARNING="-Wall" ], [ CFLAGS_OPTIMIZE=-O CFLAGS_WARNING="" ]) AC_CHECK_TOOL(AR, ar) STLIB_LD='${AR} cr' LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION="1.0"]) case $system in # TEA specific: windows) # This is a 2-stage check to make sure we have the 64-bit SDK |
︙ | ︙ | |||
1185 1186 1187 1188 1189 1190 1191 | PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac | | | 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 | PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode]) AC_MSG_WARN([Ensure latest Platform SDK is installed]) do64bit="no" else AC_MSG_RESULT([ Using 64-bit $MACHINE mode]) do64bit_ok="yes" fi |
︙ | ︙ | |||
1302 1303 1304 1305 1306 1307 1308 | lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" AC_SUBST(CELIB_DIR) else RC="rc" lflags="-nologo" | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 | lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" AC_SUBST(CELIB_DIR) else RC="rc" lflags="-nologo" LINKBIN="link" CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" fi fi if test "$GCC" = "yes"; then # mingw gcc mode AC_CHECK_TOOL(RC, windres) CFLAGS_DEBUG="-g" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" SHLIB_LD='${CC} -shared' UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" AC_CACHE_CHECK(for cross-compile version of gcc, ac_cv_cross, AC_TRY_COMPILE([ #ifdef _WIN32 #error cross-compiler #endif ], [], ac_cv_cross=yes, ac_cv_cross=no) ) if test "$ac_cv_cross" = "yes"; then case "$do64bit" in amd64|x64|yes) CC="x86_64-w64-mingw32-gcc" LD="x86_64-w64-mingw32-ld" AR="x86_64-w64-mingw32-ar" RANLIB="x86_64-w64-mingw32-ranlib" RC="x86_64-w64-mingw32-windres" ;; *) CC="i686-w64-mingw32-gcc" LD="i686-w64-mingw32-ld" AR="i686-w64-mingw32-ar" RANLIB="i686-w64-mingw32-ranlib" RC="i686-w64-mingw32-windres" ;; esac fi else SHLIB_LD="${LINKBIN} -dll ${lflags}" # link -lib only works when -lib is the first arg STLIB_LD="${LINKBIN} -lib ${lflags}" UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' PATHTYPE=-w # For information on what debugtype is most useful, see: |
︙ | ︙ | |||
1339 1340 1341 1342 1343 1344 1345 | LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi | < < < < < | | < < | > > | > | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | | | < | < | > < < < < < < | | 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 | LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi SHLIB_SUFFIX=".dll" SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' TCL_LIB_VERSIONS_OK=nodots ;; AIX-*) AS_IF([test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"], [ # AIX requires the _r compiler when gcc isn't being used case "${CC}" in *_r|*_r\ *) # ok ... ;; *) # Make sure only first arg gets _r CC=`echo "$CC" | sed -e 's/^\([[^ ]]*\)/\1_r/'` ;; esac AC_MSG_RESULT([Using $CC for compiling with threads]) ]) LIBS="$LIBS -lc" SHLIB_CFLAGS="" SHLIB_SUFFIX=".so" LD_LIBRARY_PATH_VAR="LIBPATH" # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported with GCC on $system]) ], [ do64bit_ok=yes CFLAGS="$CFLAGS -q64" LDFLAGS_ARCH="-q64" RANLIB="${RANLIB} -X64" AR="${AR} -X64" SHLIB_LD_FLAGS="-b64" ]) ]) AS_IF([test "`uname -m`" = ia64], [ # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC SHLIB_LD="/usr/ccs/bin/ld -G -z text" AS_IF([test "$GCC" = yes], [ CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' ], [ CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' ]) LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' ], [ AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared -Wl,-bexpall' ], [ SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry" LDFLAGS="$LDFLAGS -brtl" ]) SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}" CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ]) ;; BeOS*) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -nostart' SHLIB_SUFFIX=".so" #----------------------------------------------------------- # Check for inet_ntoa in -lbind, for BeOS (which also needs # -lsocket, even if the network functions are in -lnet which # is always linked to, for compatibility. #----------------------------------------------------------- AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"]) ;; BSD/OS-4.*) SHLIB_CFLAGS="-export-dynamic -fPIC" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; CYGWIN_*) SHLIB_CFLAGS="" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".dll" EXEEXT=".exe" do64bit_ok=yes CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; Haiku*) LDFLAGS="$LDFLAGS -Wl,--export-dynamic" SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}' AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"]) ;; HP-UX-*.11.*) # Use updated header definitions where possible AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?]) # TEA specific: Needed by Tcl, but not most extensions #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?]) #LIBS="$LIBS -lxnet" # Use the XOPEN network library AS_IF([test "`uname -m`" = ia64], [ SHLIB_SUFFIX=".so" # Use newer C++ library for C++ extensions #if test "$GCC" != "yes" ; then # CPPFLAGS="-AA" #fi ], [ SHLIB_SUFFIX=".sl" ]) AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) AS_IF([test "$tcl_ok" = yes], [ LDFLAGS="$LDFLAGS -Wl,-E" CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' LD_LIBRARY_PATH_VAR="SHLIB_PATH" ]) AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} |
︙ | ︙ | |||
1532 1533 1534 1535 1536 1537 1538 | AS_IF([test "$do64bit" = "yes"], [ AS_IF([test "$GCC" = yes], [ case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 | AS_IF([test "$do64bit" = "yes"], [ AS_IF([test "$GCC" = yes], [ case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ;; *) AC_MSG_WARN([64bit mode not supported with GCC on $system]) ;; esac ], [ do64bit_ok=yes CFLAGS="$CFLAGS +DD64" LDFLAGS_ARCH="+DD64" ]) ]) ;; IRIX-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [ CFLAGS="$CFLAGS -mabi=n32" LDFLAGS="$LDFLAGS -mabi=n32" ], [ |
︙ | ︙ | |||
1601 1602 1603 1604 1605 1606 1607 | esac LDFLAGS="$LDFLAGS -n32" ]) ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" | < < < | < < < < < < < | 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 | esac LDFLAGS="$LDFLAGS -n32" ]) ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported by gcc]) ], [ do64bit_ok=yes SHLIB_LD="ld -64 -shared -rdata_shared" CFLAGS="$CFLAGS -64" LDFLAGS_ARCH="-64" ]) ]) ;; Linux*|GNU*|NetBSD-Debian) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" # TEA specific: CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}' LDFLAGS="$LDFLAGS -Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"]) AS_IF([test $do64bit = yes], [ AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [ |
︙ | ︙ | |||
1662 1663 1664 1665 1666 1667 1668 | # The combo of gcc + glibc has a bug related to inlining of # functions like strtod(). The -fno-builtin flag should address # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"]) | < < < < < < < < < < < < < < < < < | < | < > > | < | | < | | | | < | < < < > | | > > | < < < < < < < < < < < < < < | < < < < < < | < | < | | | | < < < < < < < < < < < < > | < < < < < | > < | < | < < < < < < < < < < < | | < < | > > | | | | | > > | 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 | # The combo of gcc + glibc has a bug related to inlining of # functions like strtod(). The -fno-builtin flag should address # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"]) ;; Lynx*) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" CFLAGS_OPTIMIZE=-02 SHLIB_LD='${CC} -shared' LD_FLAGS="-Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) ;; OpenBSD-*) arch=`arch -s` case "$arch" in vax) SHLIB_SUFFIX="" SHARED_LIB_SUFFIX="" LDFLAGS="" ;; *) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' LDFLAGS="-Wl,-export-dynamic" ;; esac case "$arch" in vax) CFLAGS_OPTIMIZE="-O1" ;; *) CFLAGS_OPTIMIZE="-O2" ;; esac AS_IF([test "${TCL_THREADS}" = "1"], [ # On OpenBSD: Compile with -pthread # Don't link with -lpthread LIBS=`echo $LIBS | sed s/-lpthread//` CFLAGS="$CFLAGS -pthread" ]) # OpenBSD doesn't do version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; NetBSD-*) # NetBSD has ELF and can use 'cc -shared' to build shared libs SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the CFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" ]) ;; FreeBSD-*) # This configuration from FreeBSD Ports. SHLIB_CFLAGS="-fPIC" SHLIB_LD="${CC} -shared" TCL_SHLIB_LD_EXTRAS="-Wl,-soname=\$[@]" TK_SHLIB_LD_EXTRAS="-Wl,-soname,\$[@]" SHLIB_SUFFIX=".so" LDFLAGS="" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the LDFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LDFLAGS="$LDFLAGS $PTHREAD_LIBS"]) case $system in FreeBSD-3.*) # Version numbers are dot-stripped by system policy. TCL_TRIM_DOTS=`echo ${VERSION} | tr -d .` UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so' TCL_LIB_VERSIONS_OK=nodots ;; esac ;; Darwin-*) CFLAGS_OPTIMIZE="-Os" SHLIB_CFLAGS="-fno-common" # To avoid discrepancies between what headers configure sees during # preprocessing tests and compiling tests, move any -isysroot and # -mmacosx-version-min flags from CFLAGS to CPPFLAGS: |
︙ | ︙ | |||
1877 1878 1879 1880 1881 1882 1883 | hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_single_module = yes], [ SHLIB_LD="${SHLIB_LD} -Wl,-single_module" ]) | | < < < > | 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 | hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_single_module = yes], [ SHLIB_LD="${SHLIB_LD} -Wl,-single_module" ]) # TEA specific: link shlib with current and compatibility version flags vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d` SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}" SHLIB_SUFFIX=".dylib" # Don't use -prebind when building for Mac OS X 10.4 or later only: AS_IF([test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \ "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4], [ LDFLAGS="$LDFLAGS -prebind"]) LDFLAGS="$LDFLAGS -headerpad_max_install_names" AC_CACHE_CHECK([if ld accepts -search_paths_first flag], tcl_cv_ld_search_paths_first, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes, tcl_cv_ld_search_paths_first=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_search_paths_first = yes], [ LDFLAGS="$LDFLAGS -Wl,-search_paths_first" ]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [__private_extern__], [Compiler support for module scope symbols]) tcl_cv_cc_visibility_hidden=yes ]) CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" # TEA specific: for combined 32 & 64 bit fat builds of Tk # extensions, verify that 64-bit build is possible. AS_IF([test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"], [ |
︙ | ︙ | |||
1944 1945 1946 1947 1948 1949 1950 | AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [ AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags]) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done]) ]) ;; | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 | AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [ AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags]) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done]) ]) ;; OS/390-*) CFLAGS_OPTIMIZE="" # Optimizer is buggy AC_DEFINE(_OE_SOCKETS, 1, # needed in sys/socket.h [Should OS/390 do the right thing with sockets?]) ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" AS_IF([test "$SHARED_BUILD" = 1], [ SHLIB_LD='ld -shared -expect_unresolved "*"' ], [ SHLIB_LD='ld -non_shared -expect_unresolved "*"' ]) SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [CFLAGS="$CFLAGS -mieee"], [ CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"]) # see pthread_intro(3) for pthread support on osf1, k.furukawa AS_IF([test "${TCL_THREADS}" = 1], [ |
︙ | ︙ | |||
2021 2022 2023 2024 2025 2026 2027 | QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" | < < < < < < | | | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 | QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SCO_SV-3.2*) AS_IF([test "$GCC" = yes], [ SHLIB_CFLAGS="-fPIC -melf" LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" ], [ SHLIB_CFLAGS="-Kpic -belf" LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" ]) SHLIB_LD="ld -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SunOS-5.[[0-6]]) # Careful to not let 5.10+ fall into this case # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) SHLIB_CFLAGS="-KPIC" SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ], [ SHLIB_LD="/usr/ccs/bin/ld -G -z text" CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' |
︙ | ︙ | |||
2163 2164 2165 2166 2167 2168 2169 | CFLAGS="$CFLAGS -xarch=amd64" LDFLAGS="$LDFLAGS -xarch=amd64";; esac ]) ], [AC_MSG_WARN([64bit mode not supported for $arch])])]) ]) | < < < < < < | 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 | CFLAGS="$CFLAGS -xarch=amd64" LDFLAGS="$LDFLAGS -xarch=amd64";; esac ]) ], [AC_MSG_WARN([64bit mode not supported for $arch])])]) ]) SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "$do64bit_ok" = yes], [ AS_IF([test "$arch" = "sparcv9 sparc"], [ # We need to specify -static-libgcc or we need to |
︙ | ︙ | |||
2208 2209 2210 2211 2212 2213 2214 | ]) ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" | < < | 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 | ]) ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-Bexport" AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no) LDFLAGS=$hold_ldflags]) |
︙ | ︙ | |||
2235 2236 2237 2238 2239 2240 2241 | dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so dnl # until the end of configure, as configure's compile and link tests use dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's dnl # preprocessing tests use only CPPFLAGS. AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""]) | < | < < < < < | < < < < < < < < < < < < | > > > > > > | | | | > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 | dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so dnl # until the end of configure, as configure's compile and link tests use dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's dnl # preprocessing tests use only CPPFLAGS. AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""]) # Add in the arch flags late to ensure it wasn't removed. # Not necessary in TEA, but this is aligned with core LDFLAGS="$LDFLAGS $LDFLAGS_ARCH" # If we're running gcc, then change the C flags for compiling shared # libraries to the right flags for gcc, instead of those for the # standard manufacturer compiler. AS_IF([test "$GCC" = yes], [ case $system in AIX-*) ;; BSD/OS*) ;; CYGWIN_*|MINGW32_*) ;; IRIX*) ;; NetBSD-*|FreeBSD-*|OpenBSD-*) ;; Darwin-*) ;; SCO_SV-3.2*) ;; windows) ;; *) SHLIB_CFLAGS="-fPIC" ;; esac]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [extern], [No Compiler support for module scope symbols]) ]) AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}']) AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a']) if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then AC_CACHE_CHECK(for SEH support in compiler, tcl_cv_seh, AC_TRY_RUN([ #define WIN32_LEAN_AND_MEAN #include <windows.h> #undef WIN32_LEAN_AND_MEAN int main(int argc, char** argv) { int a, b = 0; __try { a = 666 / b; } __except (EXCEPTION_EXECUTE_HANDLER) { return 0; } return 1; } ], tcl_cv_seh=yes, tcl_cv_seh=no, tcl_cv_seh=no) ) if test "$tcl_cv_seh" = "no" ; then AC_DEFINE(HAVE_NO_SEH, 1, [Defined when mingw does not support SEH]) fi # # Check to see if the excpt.h include file provided contains the # definition for EXCEPTION_DISPOSITION; if not, which is the case # with Cygwin's version as of 2002-04-10, define it to be int, # sufficient for getting the current code to work. # AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files, tcl_cv_eh_disposition, AC_TRY_COMPILE([ # define WIN32_LEAN_AND_MEAN # include <windows.h> # undef WIN32_LEAN_AND_MEAN ],[ EXCEPTION_DISPOSITION x; ], tcl_cv_eh_disposition=yes, tcl_cv_eh_disposition=no) ) if test "$tcl_cv_eh_disposition" = "no" ; then AC_DEFINE(EXCEPTION_DISPOSITION, int, [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION]) fi # Check to see if winnt.h defines CHAR, SHORT, and LONG # even if VOID has already been #defined. The win32api # used by mingw and cygwin is known to do this. AC_CACHE_CHECK(for winnt.h that ignores VOID define, tcl_cv_winnt_ignore_void, AC_TRY_COMPILE([ #define VOID void #define WIN32_LEAN_AND_MEAN #include <windows.h> #undef WIN32_LEAN_AND_MEAN ], [ CHAR c; SHORT s; LONG l; ], tcl_cv_winnt_ignore_void=yes, tcl_cv_winnt_ignore_void=no) ) if test "$tcl_cv_winnt_ignore_void" = "yes" ; then AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1, [Defined when cygwin/mingw ignores VOID define in winnt.h]) fi fi # See if the compiler supports casting to a union type. # This is used to stop gcc from printing a compiler # warning when initializing a union member. AC_CACHE_CHECK(for cast to union support, tcl_cv_cast_to_union, AC_TRY_COMPILE([], [ union foo { int i; double d; }; union foo f = (union foo) (int) 0; ], tcl_cv_cast_to_union=yes, tcl_cv_cast_to_union=no) ) if test "$tcl_cv_cast_to_union" = "yes"; then AC_DEFINE(HAVE_CAST_TO_UNION, 1, [Defined when compiler supports casting to union type.]) fi AC_SUBST(CFLAGS_DEBUG) AC_SUBST(CFLAGS_OPTIMIZE) AC_SUBST(CFLAGS_WARNING) AC_SUBST(STLIB_LD) AC_SUBST(SHLIB_LD) |
︙ | ︙ | |||
2319 2320 2321 2322 2323 2324 2325 | # Results: # # Defines only one of the following vars: # HAVE_SYS_MODEM_H # USE_TERMIOS # USE_TERMIO # USE_SGTTY | < | 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 | # Results: # # Defines only one of the following vars: # HAVE_SYS_MODEM_H # USE_TERMIOS # USE_TERMIO # USE_SGTTY #-------------------------------------------------------------------- AC_DEFUN([TEA_SERIAL_PORT], [ AC_CHECK_HEADERS(sys/modem.h) AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [ AC_TRY_RUN([ #include <termios.h> |
︙ | ︙ | |||
2531 2532 2533 2534 2535 2536 2537 | # # Results: # # Sets the following vars: # XINCLUDES # XLIBSW # PKG_LIBS (appends to) | < | | | | | | 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 | # # Results: # # Sets the following vars: # XINCLUDES # XLIBSW # PKG_LIBS (appends to) #-------------------------------------------------------------------- AC_DEFUN([TEA_PATH_X], [ if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then TEA_PATH_UNIX_X fi ]) AC_DEFUN([TEA_PATH_UNIX_X], [ AC_PATH_X not_really_there="" if test "$no_x" = ""; then if test "$x_includes" = ""; then AC_TRY_CPP([#include <X11/Xlib.h>], , not_really_there="yes") else if test ! -r $x_includes/X11/Xlib.h; then not_really_there="yes" fi fi fi if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then AC_MSG_CHECKING([for X11 header files]) found_xincludes="no" AC_TRY_CPP([#include <X11/Xlib.h>], found_xincludes="yes", found_xincludes="no") if test "$found_xincludes" = "no"; then dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include" for i in $dirs ; do if test -r $i/X11/Xlib.h; then AC_MSG_RESULT([$i]) XINCLUDES=" -I$i" found_xincludes="yes" break fi done fi else if test "$x_includes" != ""; then XINCLUDES="-I$x_includes" found_xincludes="yes" fi fi if test "$found_xincludes" = "no"; then AC_MSG_RESULT([couldn't find any!]) fi if test "$no_x" = yes; then AC_MSG_CHECKING([for X11 libraries]) XLIBSW=nope dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib" |
︙ | ︙ | |||
2627 2628 2629 2630 2631 2632 2633 | # Results: # # Defines some of the following vars: # HAVE_SYS_IOCTL_H # HAVE_SYS_FILIO_H # USE_FIONBIO # O_NONBLOCK | < < < < < < < < < < | 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 | # Results: # # Defines some of the following vars: # HAVE_SYS_IOCTL_H # HAVE_SYS_FILIO_H # USE_FIONBIO # O_NONBLOCK #-------------------------------------------------------------------- AC_DEFUN([TEA_BLOCKING_STYLE], [ AC_CHECK_HEADERS(sys/ioctl.h) AC_CHECK_HEADERS(sys/filio.h) TEA_CONFIG_SYSTEM AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O]) case $system in OSF*) AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?]) AC_MSG_RESULT([FIONBIO]) ;; *) AC_MSG_RESULT([O_NONBLOCK]) ;; esac |
︙ | ︙ | |||
2671 2672 2673 2674 2675 2676 2677 | # Results: # # Defines some of the following vars: # USE_DELTA_FOR_TZ # HAVE_TM_GMTOFF # HAVE_TM_TZADJ # HAVE_TIMEZONE_VAR | < | 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 | # Results: # # Defines some of the following vars: # USE_DELTA_FOR_TZ # HAVE_TM_GMTOFF # HAVE_TM_TZADJ # HAVE_TIMEZONE_VAR #-------------------------------------------------------------------- AC_DEFUN([TEA_TIME_HANDLER], [ AC_CHECK_HEADERS(sys/time.h) AC_HEADER_TIME AC_STRUCT_TIMEZONE |
︙ | ︙ | |||
2740 2741 2742 2743 2744 2745 2746 | # Arguments: # none # # Results: # # Might defines some of the following vars: # strtod (=fixstrtod) | < | 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 | # Arguments: # none # # Results: # # Might defines some of the following vars: # strtod (=fixstrtod) #-------------------------------------------------------------------- AC_DEFUN([TEA_BUGGY_STRTOD], [ AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0) if test "$tcl_strtod" = 1; then AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[ AC_TRY_RUN([ |
︙ | ︙ | |||
2785 2786 2787 2788 2789 2790 2791 | # # Search for the libraries needed to link the Tcl shell. # Things like the math library (-lm) and socket stuff (-lsocket vs. # -lnsl) are dealt with here. # # Arguments: # Requires the following vars to be set in the Makefile: | | | < | 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 | # # Search for the libraries needed to link the Tcl shell. # Things like the math library (-lm) and socket stuff (-lsocket vs. # -lnsl) are dealt with here. # # Arguments: # Requires the following vars to be set in the Makefile: # DL_LIBS (not in TEA, only needed in core) # LIBS # MATH_LIBS # # Results: # # Substitutes the following vars: # TCL_LIBS # MATH_LIBS # # Might append to the following vars: # LIBS # # Might define the following vars: # HAVE_NET_ERRNO_H #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_LINK_LIBS], [ #-------------------------------------------------------------------- # On a few very rare systems, all of the libm.a stuff is # already in libc.a. Set compiler flags accordingly. # Also, Linux requires the "ieee" library for math to work |
︙ | ︙ | |||
2878 2879 2880 2881 2882 2883 2884 | # # Results: # # Might define the following vars: # _ISOC99_SOURCE # _LARGEFILE64_SOURCE # _LARGEFILE_SOURCE64 | < | 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 | # # Results: # # Might define the following vars: # _ISOC99_SOURCE # _LARGEFILE64_SOURCE # _LARGEFILE_SOURCE64 #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_EARLY_FLAG],[ AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]), AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no, AC_TRY_COMPILE([[#define ]$1[ 1 ]$2], $3, |
︙ | ︙ | |||
2926 2927 2928 2929 2930 2931 2932 | # # Might define the following vars: # TCL_WIDE_INT_IS_LONG # TCL_WIDE_INT_TYPE # HAVE_STRUCT_DIRENT64 # HAVE_STRUCT_STAT64 # HAVE_TYPE_OFF64_T | < | | | | 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 | # # Might define the following vars: # TCL_WIDE_INT_IS_LONG # TCL_WIDE_INT_TYPE # HAVE_STRUCT_DIRENT64 # HAVE_STRUCT_STAT64 # HAVE_TYPE_OFF64_T #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_64BIT_FLAGS], [ AC_MSG_CHECKING([for 64-bit integer type]) AC_CACHE_VAL(tcl_cv_type_64bit,[ tcl_cv_type_64bit=none # See if the compiler knows natively about __int64 AC_TRY_COMPILE(,[__int64 value = (__int64) 0;], tcl_type_64bit=__int64, tcl_type_64bit="long long") # See if we should use long anyway Note that we substitute in the # type that is our current guess for a 64-bit type inside this check # program, so it should be modified only carefully... AC_TRY_COMPILE(,[switch (0) { case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ; }],tcl_cv_type_64bit=${tcl_type_64bit})]) if test "${tcl_cv_type_64bit}" = none ; then AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Are wide integers to be implemented with C 'long's?]) AC_MSG_RESULT([using long]) elif test "${tcl_cv_type_64bit}" = "__int64" \ -a "${TEA_PLATFORM}" = "windows" ; then # TEA specific: We actually want to use the default tcl.h checks in # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER* AC_MSG_RESULT([using Tcl header defaults]) else AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit}, [What type should be used to define wide integers?]) AC_MSG_RESULT([${tcl_cv_type_64bit}]) # Now check for auxiliary declarations AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[ AC_TRY_COMPILE([#include <sys/types.h> #include <dirent.h>],[struct dirent64 p;], tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)]) if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in <sys/types.h>?]) fi AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[ AC_TRY_COMPILE([#include <sys/stat.h>],[struct stat64 p; |
︙ | ︙ | |||
3028 3029 3030 3031 3032 3033 3034 | # is a lightweight replacement for AC_EXEEXT that doesn't require # a compiler. #------------------------------------------------------------------------ AC_DEFUN([TEA_INIT], [ # TEA extensions pass this us the version of TEA they think they # are compatible with. | | > > > > > > > | > > > > > > > > | | > > > > | 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 | # is a lightweight replacement for AC_EXEEXT that doesn't require # a compiler. #------------------------------------------------------------------------ AC_DEFUN([TEA_INIT], [ # TEA extensions pass this us the version of TEA they think they # are compatible with. TEA_VERSION="3.9" AC_MSG_CHECKING([for correct TEA configuration]) if test x"${PACKAGE_NAME}" = x ; then AC_MSG_ERROR([ The PACKAGE_NAME variable must be defined by your TEA configure.in]) fi if test x"$1" = x ; then AC_MSG_ERROR([ TEA version not specified.]) elif test "$1" != "${TEA_VERSION}" ; then AC_MSG_RESULT([warning: requested TEA version "$1", have "${TEA_VERSION}"]) else AC_MSG_RESULT([ok (TEA ${TEA_VERSION})]) fi # If the user did not set CFLAGS, set it now to keep macros # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2". if test "${CFLAGS+set}" != "set" ; then CFLAGS="" fi case "`uname -s`" in *win32*|*WIN32*|*MINGW32_*) AC_CHECK_PROG(CYGPATH, cygpath, cygpath -w, echo) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *CYGWIN_*) CYGPATH=echo EXEEXT=".exe" # TEA_PLATFORM is determined later in LOAD_TCLCONFIG ;; *) CYGPATH=echo # Maybe we are cross-compiling.... case ${host_alias} in *mingw32*) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *) EXEEXT="" TEA_PLATFORM="unix" ;; esac ;; esac # Check if exec_prefix is set. If not use fall back to prefix. # Note when adjusted, so that TEA_PREFIX can correct for this. # This is needed for recursive configures, since autoconf propagates # $prefix, but not $exec_prefix (doh!). if test x$exec_prefix = xNONE ; then exec_prefix_default=yes exec_prefix=$prefix fi AC_MSG_NOTICE([configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}]) AC_SUBST(EXEEXT) AC_SUBST(CYGPATH) # This package name must be replaced statically for AC_SUBST to work AC_SUBST(PKG_LIB_FILE) # Substitute STUB_LIB_FILE in case package creates a stub library too. |
︙ | ︙ | |||
3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 | ;; *) # check for existence - allows for generic/win/unix VPATH # To add more dirs here (like 'src'), you have to update VPATH # in Makefile.in as well if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ ; then AC_MSG_ERROR([could not find source file '$i']) fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER | > | 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 | ;; *) # check for existence - allows for generic/win/unix VPATH # To add more dirs here (like 'src'), you have to update VPATH # in Makefile.in as well if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then AC_MSG_ERROR([could not find source file '$i']) fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER |
︙ | ︙ | |||
3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 | #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_STUB_SOURCES], [ vars="$@" for i in $vars; do # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ ; then AC_MSG_ERROR([could not find stub source file '$i']) fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER | > | 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 | #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_STUB_SOURCES], [ vars="$@" for i in $vars; do # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then AC_MSG_ERROR([could not find stub source file '$i']) fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER |
︙ | ︙ | |||
3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 | # Defines and substs the following vars: # PKG_CFLAGS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CFLAGS], [ PKG_CFLAGS="$PKG_CFLAGS $@" AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_PREFIX -- # # Handle the --prefix=... option by defaulting to what Tcl gave # # Arguments: | > > > > > > > > > > > > > > > > | 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 | # Defines and substs the following vars: # PKG_CFLAGS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CFLAGS], [ PKG_CFLAGS="$PKG_CFLAGS $@" AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_ADD_CLEANFILES -- # # Specify one or more CLEANFILES. # # Arguments: # one or more file names to clean target # # Results: # # Appends to CLEANFILES, already defined for subst in LOAD_TCLCONFIG #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CLEANFILES], [ CLEANFILES="$CLEANFILES $@" ]) #------------------------------------------------------------------------ # TEA_PREFIX -- # # Handle the --prefix=... option by defaulting to what Tcl gave # # Arguments: |
︙ | ︙ | |||
3356 3357 3358 3359 3360 3361 3362 | # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN([TEA_SETUP_COMPILER_CC], [ # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. | < < < < < < > | > > > > > > | | 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 | # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN([TEA_SETUP_COMPILER_CC], [ # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. AC_PROG_CC AC_PROG_CPP INSTALL="\$(SHELL) \$(srcdir)/tclconfig/install-sh -c" AC_SUBST(INSTALL) INSTALL_DATA="\${INSTALL} -m 644" AC_SUBST(INSTALL_DATA) INSTALL_PROGRAM="\${INSTALL}" AC_SUBST(INSTALL_PROGRAM) INSTALL_SCRIPT="\${INSTALL}" AC_SUBST(INSTALL_SCRIPT) #-------------------------------------------------------------------- # Checks to see if the make program sets the $MAKE variable. #-------------------------------------------------------------------- AC_PROG_MAKE_SET #-------------------------------------------------------------------- # Find ranlib #-------------------------------------------------------------------- AC_CHECK_TOOL(RANLIB, ranlib) #-------------------------------------------------------------------- # Determines the correct binary file extension (.o, .obj, .exe etc.) #-------------------------------------------------------------------- AC_OBJEXT AC_EXEEXT |
︙ | ︙ | |||
3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 | # CFLAGS - Done late here to note disturb other AC macros # MAKE_LIB - Command to execute to build the Tcl library; # differs depending on whether or not Tcl is being # compiled as a shared library. # MAKE_SHARED_LIB Makefile rule for building a shared library # MAKE_STATIC_LIB Makefile rule for building a static library # MAKE_STUB_LIB Makefile rule for building a stub library #------------------------------------------------------------------------ AC_DEFUN([TEA_MAKE_LIB], [ if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)" | > > > > > > > > > > > > > | | 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 | # CFLAGS - Done late here to note disturb other AC macros # MAKE_LIB - Command to execute to build the Tcl library; # differs depending on whether or not Tcl is being # compiled as a shared library. # MAKE_SHARED_LIB Makefile rule for building a shared library # MAKE_STATIC_LIB Makefile rule for building a static library # MAKE_STUB_LIB Makefile rule for building a stub library # VC_MANIFEST_EMBED_DLL Makefile rule for embedded VC manifest in DLL # VC_MANIFEST_EMBED_EXE Makefile rule for embedded VC manifest in EXE #------------------------------------------------------------------------ AC_DEFUN([TEA_MAKE_LIB], [ if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)" AC_EGREP_CPP([manifest needed], [ #if defined(_MSC_VER) && _MSC_VER >= 1400 print("manifest needed") #endif ], [ # Could do a CHECK_PROG for mt, but should always be with MSVC8+ VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;2 ; fi" VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;1 ; fi" MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}" TEA_ADD_CLEANFILES([*.manifest]) ]) MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\[$]@ \$(PKG_STUB_OBJECTS)" else MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}" MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)" fi if test "${SHARED_BUILD}" = "1" ; then |
︙ | ︙ | |||
3485 3486 3487 3488 3489 3490 3491 | # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. | < > > > > > > > | 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 | # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\"" fi SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\"" if test "$GCC" = "yes"; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -static-libgcc" fi eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" else eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_LIB_FILE=lib${PKG_LIB_FILE} fi fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE} fi # These aren't needed on Windows (either MSVC or gcc) |
︙ | ︙ | |||
3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 | fi AC_SUBST(MAKE_LIB) AC_SUBST(MAKE_SHARED_LIB) AC_SUBST(MAKE_STATIC_LIB) AC_SUBST(MAKE_STUB_LIB) AC_SUBST(RANLIB_STUB) ]) #------------------------------------------------------------------------ # TEA_LIB_SPEC -- # # Compute the name of an existing object library located in libdir # from the given base name and produce the appropriate linker flags. | > > | 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 | fi AC_SUBST(MAKE_LIB) AC_SUBST(MAKE_SHARED_LIB) AC_SUBST(MAKE_STATIC_LIB) AC_SUBST(MAKE_STUB_LIB) AC_SUBST(RANLIB_STUB) AC_SUBST(VC_MANIFEST_EMBED_DLL) AC_SUBST(VC_MANIFEST_EMBED_EXE) ]) #------------------------------------------------------------------------ # TEA_LIB_SPEC -- # # Compute the name of an existing object library located in libdir # from the given base name and produce the appropriate linker flags. |
︙ | ︙ | |||
3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 | for i in \ `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do if test -f "$i" ; then tea_lib_name_dir=`dirname $i` $1_LIB_NAME=`basename $i` $1_LIB_PATH_NAME=$i break | > > | 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 | for i in \ `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib64/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib64/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do if test -f "$i" ; then tea_lib_name_dir=`dirname $i` $1_LIB_NAME=`basename $i` $1_LIB_PATH_NAME=$i break |
︙ | ︙ | |||
3615 3616 3617 3618 3619 3620 3621 | # # Requires: # TCL_SRC_DIR Assumes that TEA_LOAD_TCLCONFIG has # already been called. # # Results: # | | | 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 | # # Requires: # TCL_SRC_DIR Assumes that TEA_LOAD_TCLCONFIG has # already been called. # # Results: # # Substitutes the following vars: # TCL_TOP_DIR_NATIVE # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PRIVATE_TCL_HEADERS], [ # Allow for --with-tclinclude to take effect and define ${ac_cv_c_tclh} AC_REQUIRE([TEA_PUBLIC_TCL_HEADERS]) |
︙ | ︙ | |||
3693 3694 3695 3696 3697 3698 3699 | # CYGPATH must be set # # Results: # # Adds a --with-tclinclude switch to configure. # Result is cached. # | | | 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 | # CYGPATH must be set # # Results: # # Adds a --with-tclinclude switch to configure. # Result is cached. # # Substitutes the following vars: # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PUBLIC_TCL_HEADERS], [ AC_MSG_CHECKING([for Tcl public headers]) AC_ARG_WITH(tclinclude, [ --with-tclinclude directory containing the public Tcl header files], with_tclinclude=${withval}) |
︙ | ︙ | |||
3783 3784 3785 3786 3787 3788 3789 | # # Requires: # TK_SRC_DIR Assumes that TEA_LOAD_TKCONFIG has # already been called. # # Results: # | | | 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 | # # Requires: # TK_SRC_DIR Assumes that TEA_LOAD_TKCONFIG has # already been called. # # Results: # # Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PRIVATE_TK_HEADERS], [ # Allow for --with-tkinclude to take effect and define ${ac_cv_c_tkh} AC_REQUIRE([TEA_PUBLIC_TK_HEADERS]) AC_MSG_CHECKING([for Tk private include files]) |
︙ | ︙ | |||
3872 3873 3874 3875 3876 3877 3878 | # CYGPATH must be set # # Results: # # Adds a --with-tkinclude switch to configure. # Result is cached. # | | | 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 | # CYGPATH must be set # # Results: # # Adds a --with-tkinclude switch to configure. # Result is cached. # # Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PUBLIC_TK_HEADERS], [ AC_MSG_CHECKING([for Tk public headers]) AC_ARG_WITH(tkinclude, [ --with-tkinclude directory containing the public Tk header files], with_tkinclude=${withval}) |
︙ | ︙ | |||
4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 | if test x"${ac_cv_c_$1config}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi done fi | > | 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 | if test x"${ac_cv_c_$1config}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi done fi |
︙ | ︙ | |||
4089 4090 4091 4092 4093 4094 4095 | # Arguments: # # Requires the following vars to be set: # $1_BIN_DIR # # Results: # | | < | 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 | # Arguments: # # Requires the following vars to be set: # $1_BIN_DIR # # Results: # # Substitutes the following vars: # $1_SRC_DIR # $1_LIB_FILE # $1_LIB_SPEC #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG], [ AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh]) if test -f "${$1_BIN_DIR}/$1Config.sh" ; then AC_MSG_RESULT([loading]) |
︙ | ︙ | |||
4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 | # if test -f "${$1_BIN_DIR}/Makefile" ; then AC_MSG_WARN([Found Makefile - using build library specs for $1]) $1_LIB_SPEC=${$1_BUILD_LIB_SPEC} $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC} $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH} fi AC_SUBST($1_VERSION) AC_SUBST($1_BIN_DIR) AC_SUBST($1_SRC_DIR) AC_SUBST($1_LIB_FILE) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_STUB_LIB_FILE) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_PATH) | > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 | # if test -f "${$1_BIN_DIR}/Makefile" ; then AC_MSG_WARN([Found Makefile - using build library specs for $1]) $1_LIB_SPEC=${$1_BUILD_LIB_SPEC} $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC} $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH} $1_INCLUDE_SPEC=${$1_BUILD_INCLUDE_SPEC} $1_LIBRARY_PATH=${$1_LIBRARY_PATH} fi AC_SUBST($1_VERSION) AC_SUBST($1_BIN_DIR) AC_SUBST($1_SRC_DIR) AC_SUBST($1_LIB_FILE) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_STUB_LIB_FILE) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_PATH) # Allow the caller to prevent this auto-check by specifying any 2nd arg AS_IF([test "x$2" = x], [ # Check both upper and lower-case variants # If a dev wanted non-stubs libs, this function could take an option # to not use _STUB in the paths below AS_IF([test "x${$1_STUB_LIB_SPEC}" = x], [TEA_LOAD_CONFIG_LIB(translit($1,[a-z],[A-Z])_STUB)], [TEA_LOAD_CONFIG_LIB($1_STUB)]) ]) ]) #------------------------------------------------------------------------ # TEA_LOAD_CONFIG_LIB -- # # Helper function to load correct library from another extension's # ${PACKAGE}Config.sh. # # Results: # Adds to LIBS the appropriate extension library #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG_LIB], [ AC_MSG_CHECKING([For $1 library for LIBS]) # This simplifies the use of stub libraries by automatically adding # the stub lib to your path. Normally this would add to SHLIB_LD_LIBS, # but this is called before CONFIG_CFLAGS. More importantly, this adds # to PKG_LIBS, which becomes LIBS, and that is only used by SHLIB_LD. if test "x${$1_LIB_SPEC}" != "x" ; then if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes" ; then TEA_ADD_LIBS([\"`${CYGPATH} ${$1_LIB_PATH}`\"]) AC_MSG_RESULT([using $1_LIB_PATH ${$1_LIB_PATH}]) else TEA_ADD_LIBS([${$1_LIB_SPEC}]) AC_MSG_RESULT([using $1_LIB_SPEC ${$1_LIB_SPEC}]) fi else AC_MSG_RESULT([file not found]) fi ]) #------------------------------------------------------------------------ # TEA_EXPORT_CONFIG -- # # Define the data to insert into the ${PACKAGE}Config.sh file # # Arguments: # # Requires the following vars to be set: # $1 # # Results: # Substitutes the following vars: #------------------------------------------------------------------------ AC_DEFUN([TEA_EXPORT_CONFIG], [ #-------------------------------------------------------------------- # These are for $1Config.sh #-------------------------------------------------------------------- # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib) eval pkglibdir="[$]{libdir}/$1${PACKAGE_VERSION}" if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then eval $1_LIB_FLAG="-l$1${PACKAGE_VERSION}${DBGX}" eval $1_STUB_LIB_FLAG="-l$1stub${PACKAGE_VERSION}${DBGX}" else eval $1_LIB_FLAG="-l$1`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}" eval $1_STUB_LIB_FLAG="-l$1stub`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}" fi $1_BUILD_LIB_SPEC="-L`pwd` ${$1_LIB_FLAG}" $1_LIB_SPEC="-L${pkglibdir} ${$1_LIB_FLAG}" $1_BUILD_STUB_LIB_SPEC="-L`pwd` [$]{$1_STUB_LIB_FLAG}" $1_STUB_LIB_SPEC="-L${pkglibdir} [$]{$1_STUB_LIB_FLAG}" $1_BUILD_STUB_LIB_PATH="`pwd`/[$]{PKG_STUB_LIB_FILE}" $1_STUB_LIB_PATH="${pkglibdir}/[$]{PKG_STUB_LIB_FILE}" AC_SUBST($1_BUILD_LIB_SPEC) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_BUILD_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_BUILD_STUB_LIB_PATH) AC_SUBST($1_STUB_LIB_PATH) AC_SUBST(MAJOR_VERSION) AC_SUBST(MINOR_VERSION) AC_SUBST(PATCHLEVEL) ]) #------------------------------------------------------------------------ # TEA_PATH_CELIB -- # # Locate Keuchel's celib emulation layer for targeting Win/CE # # Arguments: |
︙ | ︙ | |||
4200 4201 4202 4203 4204 4205 4206 | no_celib= CELIB_DIR=${ac_cv_c_celibconfig} CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` AC_MSG_RESULT([found $CELIB_DIR]) fi fi ]) | < < | 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 | no_celib= CELIB_DIR=${ac_cv_c_celibconfig} CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` AC_MSG_RESULT([found $CELIB_DIR]) fi fi ]) # Local Variables: # mode: autoconf # End: |
Added jni/xotcl/tclconfig/install-sh.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 | #!/bin/sh # install - install a program, script, or datafile scriptversion=2011-04-20.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -S $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -S) stripcmd="$stripprog $2" shift;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: |
Added jni/xotcl/tclconfig/mktar.sh.
> > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/bin/sh pwd=`pwd` name=`basename $(pwd)` echo "name=$name" make distclean cd .. tar zcvf ./$name.tar.gz \ `find ./$name -type f -o -type l| fgrep -v .git| fgrep -v CVS | fgrep -v SCCS | \ fgrep -v Attic | fgrep -v "autom4te"| fgrep -v "~"|fgrep -v .db | \ fgrep -v .junk | fgrep -v .orig | fgrep -v "#" |fgrep -v .DS_Store| fgrep -v config. | \ fgrep -v .gdb` |
Changes to jni/xotcl/tests/UNIVERSAL.test.
|
| < | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #if {[set ::tcl_platform(platform)] == "windows"} {lappend auto_path .} package require XOTcl 1; namespace import -force xotcl::* set pkgdir [file dir [info script]]/.. lappend auto_path $pkgdir package require -exact xotcl::test 1.38 set tclsh [info nameofexecutable] set dir [file dir [info script]] set univApps $dir/../apps/actiweb/univ set startCmd "$tclsh $univApps/UNIVERSAL.xotcl \ -instanceFile $univApps/UNIVERSAL.rdf \ -cssFile UNIVERSAL.css \ -root $dir/../apps/actiweb/univ \ -pkgdir $pkgdir" puts stderr "starting $startCmd" set PIPE [open "|$startCmd"] package require -exact xotcl::comm::httpAccess 1.0 proc printError msg {puts stderr !!!$msg!!!} Class T -superclass Test -parameter { {count 1} {errorReport { puts "\tcontent-length: \[r0::sink set contentLength\]\n\ \tstatus-code: \[\[r0 set token\] set responseCode\]\n\[r0 getContent]" |
︙ | ︙ |
Changes to jni/xotcl/tests/actiweb.test.
1 2 3 4 5 6 7 8 9 10 11 | # -*- Mode: tcl -*- # $Id: actiweb.test,v 1.9 2006/09/27 08:12:40 neumann Exp $ # regression test for actiweb examples #if {[set ::tcl_platform(platform)] == "windows"} { # lappend auto_path . #} package require XOTcl 1; namespace import -force ::xotcl::* set pkgDir [file dirname [info script]]/.. lappend auto_path $pkgDir package require xotcl::test 1 #package require xotcl::package; package verbose 1 | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # -*- Mode: tcl -*- # $Id: actiweb.test,v 1.9 2006/09/27 08:12:40 neumann Exp $ # regression test for actiweb examples #if {[set ::tcl_platform(platform)] == "windows"} { # lappend auto_path . #} package require XOTcl 1; namespace import -force ::xotcl::* set pkgDir [file dirname [info script]]/.. lappend auto_path $pkgDir package require xotcl::test 1 #package require xotcl::package; package verbose 1 package require xotcl::comm::httpAccess 1 #package require xotcl::trace set tclsh [info nameofexecutable] set dir [file dir [info script]] set actiwebApps $dir/../apps/actiweb # remove persitent vars to get reproducible behavior |
︙ | ︙ |
Changes to jni/xotcl/tests/forwardtest.xotcl.
︙ | ︙ | |||
129 130 131 132 133 134 135 | ? {obj info forward -definition foo} "target %proc %self %%self %%p" ? {obj info forward -definition i1} "-objscope ::incr x" #puts "======" ########################################### # test serializer ########################################### | | | 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | ? {obj info forward -definition foo} "target %proc %self %%self %%p" ? {obj info forward -definition i1} "-objscope ::incr x" #puts "======" ########################################### # test serializer ########################################### package require xotcl::serializer 1 obj proc test {} {puts "i am [self proc]"} set a [Serializer deepSerialize obj] #puts <<$a>> eval $a ? {set ::a} [Serializer deepSerialize obj] ########################################### |
︙ | ︙ |
Changes to jni/xotcl/tests/slottest.xotcl.
︙ | ︙ | |||
31 32 33 34 35 36 37 | # otoh, trace are somewhat more fragile and harder to debug) # default, initcmd and valuecmd are to be used mutually exclusively # - valuechangedcmd: executed after the change of an instance variable, # can be used e.g. for validation # # -gustaf neumann 21.Jan. 2006 | | | 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | # otoh, trace are somewhat more fragile and harder to debug) # default, initcmd and valuecmd are to be used mutually exclusively # - valuechangedcmd: executed after the change of an instance variable, # can be used e.g. for validation # # -gustaf neumann 21.Jan. 2006 package require xotcl::serializer 1 #proc ? {cmd expected} { # set r [eval $cmd] # if {$r ne $expected} {error "$cmd returned '$r' ne '$expected'"} #} # proc t {cmd {txt ""}} { |
︙ | ︙ |
Changes to jni/xotcl/tests/speedtest.xotcl.
︙ | ︙ | |||
492 493 494 495 496 497 498 499 500 501 502 503 | -cmd {o x self} -expected ::n::x -count $cnt \ -post {o destroy} Test new -msg {return -code break} \ -pre {Class A -instproc br {} {return -code break}; A create a1} \ -cmd {catch {a1 br}} -expected 3 -count 2 \ -post {A destroy; a1 destroy} Test run; exit | > > > > > > > > > > > > > > > > > > > > > | 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 | -cmd {o x self} -expected ::n::x -count $cnt \ -post {o destroy} Test new -msg {return -code break} \ -pre {Class A -instproc br {} {return -code break}; A create a1} \ -cmd {catch {a1 br}} -expected 3 -count 2 \ -post {A destroy; a1 destroy} Test new -msg {test multiple dashed args} \ -pre {::Class create Person} \ -cmd {Person create p0 [list -set a -a1] [list -set b "-b 1 -y 2"]} \ -expected ::p0 \ -post {Person destroy} Test new -msg {test multiple dashed args} \ -pre {::Class create Person} \ -cmd {Person create p1 Person create p1 -proc foo args {return 1} [list -set a -a1] [list -set b "-b 1 -y 2"]} \ -expected ::p1 \ -post {Person destroy} Test new -msg {test multiple dashed args} \ -pre {::Class create Person -parameter {a b}} \ -cmd {Person create p2 {-proc foo args {return 1}} {-set -a -t1} {-set b "-b 1 -y 2"}} \ -expected ::p2 \ -post {Person destroy} Test new -msg {test multiple dashed args} \ -pre {::Class create Person -parameter {a b}} \ -cmd {Person create p3 -proc foo args {return 1} {-set -a -t1} {-set b "-b 1 -y 2"}} \ -expected ::p3 \ -post {Person destroy} Test run; exit |
Changes to jni/xotcl/tests/xocomm.test.
︙ | ︙ | |||
25 26 27 28 29 30 31 | puts $startCmd if {$opt(-startServer)} { set PIPE [open "| $startCmd"] } else { puts $startCmd } | | | | 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | puts $startCmd if {$opt(-startServer)} { set PIPE [open "| $startCmd"] } else { puts $startCmd } package require xotcl::comm::httpAccess 1 package require -exact xotcl::comm::ftp 1.0 package require xotcl::trace #::xotcl::package verbose 1 #::xotcl::package require xotcl::comm::httpAccess #::xotcl::package require xotcl::comm::ftp #::xotcl::package require xotcl::trace |
︙ | ︙ |
Changes to jni/xotcl/unix/tclAppInit.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * tclAppInit.c -- * * Provides a default version of the main program and Tcl_AppInit * procedure for Tcl applications (without Tk). * * Copyright (c) 1993 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "tcl-license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | < > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | /* * tclAppInit.c -- * * Provides a default version of the main program and Tcl_AppInit * procedure for Tcl applications (without Tk). * * Copyright (c) 1993 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "tcl-license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * */ #include "tcl.h" #include <xotcl.h> #ifdef TCL_TEST #include "tclInt.h" extern int Procbodytest_Init _ANSI_ARGS_((Tcl_Interp *interp)); extern int Procbodytest_SafeInit _ANSI_ARGS_((Tcl_Interp *interp)); |
︙ | ︙ |
Changes to jni/xotcl/unix/tkAppInit.c.
1 2 | /* * tkAppInit.c -- | < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * tkAppInit.c -- * * Provides a default version of the Tcl_AppInit procedure for * use in wish and similar Tk-based applications. * * Copyright (c) 1993 The Regents of the University of California. * Copyright (c) 1994 Sun Microsystems, Inc. * * See the file "tcl-license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tk.h" #include "locale.h" #include <xotcl.h> /* *---------------------------------------------------------------------- * |
︙ | ︙ |
Changes to jni/xotcl/win/winMain.c.
1 2 3 4 5 6 7 8 9 10 11 | /* * winMain.c -- * * Main entry point for wish and other Tk-based applications. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "tcl-license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * | < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* * winMain.c -- * * Main entry point for wish and other Tk-based applications. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "tcl-license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * */ #include <tk.h> #define WIN32_LEAN_AND_MEAN #include <windows.h> #undef WIN32_LEAN_AND_MEAN #include <malloc.h> |
︙ | ︙ |
Changes to jni/xotcl/xotcl.m4.
1 2 3 4 5 6 | # xotcl.m4 -- # # This file provides a set of autoconf macros to help TEA-enable # a Tcl extension. # # Copyright (c) 1999 Scriptics Corporation. | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # xotcl.m4 -- # # This file provides a set of autoconf macros to help TEA-enable # a Tcl extension. # # Copyright (c) 1999 Scriptics Corporation. # Copyright (C) 1999-2007 Uwe Zdun # Copyright (C) 1999-2014 Gustaf Neumann # # See the file "tcl-license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. #------------------------------------------------------------------------ # SC_PATH_XOTCLCONFIG -- # |
︙ | ︙ |